rivet-1.8.3/0000755000175000017500000000000012131473214011046 5ustar sunsunrivet-1.8.3/data/0000755000175000017500000000000012131473213011756 5ustar sunsunrivet-1.8.3/data/refdata/0000755000175000017500000000000012131473211013362 5ustar sunsunrivet-1.8.3/data/refdata/ATLAS_2010_S8894728.aida0000644000175000017500000167230012116077756016622 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2010_S8591881_QCD.aida0000644000175000017500000045750412116077756017041 0ustar sunsun rivet-1.8.3/data/refdata/OPAL_2000_S4418603.aida0000644000175000017500000001360212116077756016455 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2008_S7828950.aida0000644000175000017500000004375412116077756016356 0ustar sunsun rivet-1.8.3/data/refdata/SLD_1996_S3398250.aida0000644000175000017500000000326012116077756016376 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2012_I1125575.aida0000644000175000017500000531362412116077756016573 0ustar sunsun rivet-1.8.3/data/refdata/D0_2007_S7075677.aida0000644000175000017500000001647212116077756016221 0ustar sunsun rivet-1.8.3/data/refdata/ALICE_2010_S8706239.aida0000644000175000017500000035067412116077756016566 0ustar sunsun rivet-1.8.3/data/refdata/ALICE_2010_S8624100.aida0000644000175000017500000037574012116077756016551 0ustar sunsun rivet-1.8.3/data/refdata/H1_1994_S2919893.aida0000644000175000017500000013244412116077756016244 0ustar sunsun rivet-1.8.3/data/refdata/BELLE_2006_S6265367.aida0000644000175000017500000141715212116077756016575 0ustar sunsun rivet-1.8.3/data/refdata/CLEO_2001_S4557530.aida0000644000175000017500000004424012116077756016452 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2012_I1083318.aida0000644000175000017500000057302412116077756016566 0ustar sunsun rivet-1.8.3/data/refdata/STAR_2006_S6870392.aida0000644000175000017500000001022412116077756016507 0ustar sunsun rivet-1.8.3/data/refdata/PDG_HADRON_MULTIPLICITIES.aida0000644000175000017500000023467012116077756020124 0ustar sunsun rivet-1.8.3/data/refdata/D0_2011_I895662.aida0000644000175000017500000002433212116077756016111 0ustar sunsun rivet-1.8.3/data/refdata/H1_1995_S3167097.aida0000644000175000017500000001600312116077756016225 0ustar sunsun rivet-1.8.3/data/refdata/D0_2008_S7863608.aida0000644000175000017500000004170512116077756016216 0ustar sunsun rivet-1.8.3/data/refdata/D0_2009_S8202443.aida0000644000175000017500000002134512116077756016176 0ustar sunsun rivet-1.8.3/data/refdata/ALEPH_1999_S4193598.aida0000644000175000017500000001327612116077756016631 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2010_S8919674.aida0000644000175000017500000002312312116077756016610 0ustar sunsun rivet-1.8.3/data/refdata/ALICE_2011_S8945144.aida0000644000175000017500000012216712116077756016561 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_I9035664.aida0000644000175000017500000045015712116077756016577 0ustar sunsun rivet-1.8.3/data/refdata/JADE_OPAL_2000_S4300807.aida0000644000175000017500000341657112116077756017253 0ustar sunsun rivet-1.8.3/data/refdata/CDF_1997_S3541940.aida0000644000175000017500000013110512116077756016345 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2008_S7541902.aida0000644000175000017500000003177412116077756016342 0ustar sunsun rivet-1.8.3/data/refdata/CDF_1996_S3418421.aida0000644000175000017500000002136412116077756016346 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2012_I1094061.aida0000644000175000017500000052673312123033122016541 0ustar sunsun rivet-1.8.3/data/refdata/D0_2001_S4674421.aida0000644000175000017500000003641512116077756016177 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_S8924791.aida0000644000175000017500000061313212116077756016612 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_I919017.aida0000644000175000017500000443450612116077756016515 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2011_S8884919.aida0000644000175000017500000103741412116077756016403 0ustar sunsun rivet-1.8.3/data/refdata/ALEPH_2001_S4656318.aida0000644000175000017500000117126612116077756016577 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2001_S4751469.aida0000644000175000017500000043422612116077756016342 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_S9212183.aida0000644000175000017500000035430712116077756016602 0ustar sunsun rivet-1.8.3/data/refdata/ALICE_2012_I1181770.aida0000644000175000017500000001250412116077756016527 0ustar sunsun rivet-1.8.3/data/refdata/D0_2010_S8566488.aida0000644000175000017500000004220312116077756016210 0ustar sunsun rivet-1.8.3/data/refdata/D0_2008_S6879055.aida0000644000175000017500000001634612116077756016223 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2012_CONF_2012_001.aida0000644000175000017500000010250212116077756017364 0ustar sunsun rivet-1.8.3/data/refdata/LHCB_2010_I867355.aida0000644000175000017500000000451612116077756016355 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2008_S8093652.aida0000644000175000017500000001073512116077756016341 0ustar sunsun rivet-1.8.3/data/refdata/UA5_1989_S1926373.aida0000644000175000017500000034611212116077756016357 0ustar sunsun rivet-1.8.3/data/refdata/D0_2008_S7554427.aida0000644000175000017500000011734112116077756016212 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2011_S8957746.aida0000644000175000017500000004510212116077756016372 0ustar sunsun rivet-1.8.3/data/refdata/DELPHI_1995_S3137023.aida0000644000175000017500000002127112116077756016707 0ustar sunsun rivet-1.8.3/data/refdata/OPAL_1998_S3749908.aida0000644000175000017500000013736212116077756016536 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2012_I1093738.aida0000644000175000017500000004215212116077756016566 0ustar sunsun rivet-1.8.3/data/refdata/BABAR_2007_S6895344.aida0000644000175000017500000003644612116077756016570 0ustar sunsun rivet-1.8.3/data/refdata/BELLE_2001_S4598261.aida0000644000175000017500000001705112116077756016561 0ustar sunsun rivet-1.8.3/data/refdata/SLD_2002_S4869273.aida0000644000175000017500000001265012116077756016365 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_I945498.aida0000644000175000017500000022443512116077756016523 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2008_S7554427.aida0000644000175000017500000011743112116077756016343 0ustar sunsun rivet-1.8.3/data/refdata/ALICE_2010_S8625980.aida0000644000175000017500000005712312116077756016562 0ustar sunsun rivet-1.8.3/data/refdata/ALEPH_1996_S3486095.aida0000644000175000017500000064516012116077756016625 0ustar sunsun rivet-1.8.3/data/refdata/ALEPH_1991_S2435284.aida0000644000175000017500000002065112116077756016601 0ustar sunsun rivet-1.8.3/data/refdata/ALEPH_2004_S5765862.aida0000644000175000017500000352366412116077756016615 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2010_S8591806.aida0000644000175000017500000010420512116077756016602 0ustar sunsun rivet-1.8.3/data/refdata/BABAR_2006_S6511112.aida0000644000175000017500000024173012116077756016533 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2005_S6080774.aida0000644000175000017500000004002512116077756016330 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_S8994773.aida0000644000175000017500000011605012116077756016616 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_S9225137.aida0000644000175000017500000054520312116077756016602 0ustar sunsun rivet-1.8.3/data/refdata/TOTEM_2012_I1115294.aida0000644000175000017500000001024112116077756016574 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2011_S9086218.aida0000644000175000017500000012037412116077756016363 0ustar sunsun rivet-1.8.3/data/refdata/DELPHI_2003_WUD_03_11.aida0000644000175000017500000011534012116077756017162 0ustar sunsun rivet-1.8.3/data/refdata/CLEO_1997_S3486664.aida0000644000175000017500000000030412116077756016502 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_S9128077.aida0000644000175000017500000011743112116077756016605 0ustar sunsun rivet-1.8.3/data/refdata/ARGUS_1993_S2669951.aida0000644000175000017500000001536512116077756016653 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2012_I1082936.aida0000644000175000017500000032005412116077756016564 0ustar sunsun rivet-1.8.3/data/refdata/SLD_2004_S5693039.aida0000644000175000017500000070677712116077756016407 0ustar sunsun rivet-1.8.3/data/refdata/SFM_1984_S1178091.aida0000644000175000017500000011141212116077756016372 0ustar sunsun rivet-1.8.3/data/refdata/STAR_2008_S7869363.aida0000644000175000017500000006247112116077756016533 0ustar sunsun rivet-1.8.3/data/refdata/CDF_1993_S2742446.aida0000644000175000017500000000417312116077756016350 0ustar sunsun rivet-1.8.3/data/refdata/D0_2008_S7719523.aida0000644000175000017500000010221712116077756016206 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2001_S4517016.aida0000644000175000017500000002764712116077756016333 0ustar sunsun rivet-1.8.3/data/refdata/D0_2010_S8671338.aida0000644000175000017500000001333712116077756016205 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2012_I1118269.aida0000644000175000017500000000455412116077756016567 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2009_S8436959.aida0000644000175000017500000000676212116077756016362 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_I944826.aida0000644000175000017500000017374012116077756016517 0ustar sunsun rivet-1.8.3/data/refdata/LHCF_2012_I1115479.aida0000644000175000017500000002610412116077756016432 0ustar sunsun rivet-1.8.3/data/refdata/ZEUS_2001_S4815815.aida0000644000175000017500000013011612116077756016517 0ustar sunsun rivet-1.8.3/data/refdata/CLEO_2004_S5809304.aida0000644000175000017500000015231012116077756016453 0ustar sunsun rivet-1.8.3/data/refdata/UA5_1986_S1583476.aida0000644000175000017500000014024212116077756016353 0ustar sunsun rivet-1.8.3/data/refdata/D0_2000_S4480767.aida0000644000175000017500000001222212116077756016174 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2012_PAS_QCD_11_010.aida0000644000175000017500000013110012116077756017360 0ustar sunsun rivet-1.8.3/data/refdata/H1_2000_S4129130.aida0000644000175000017500000033343712116077756016177 0ustar sunsun rivet-1.8.3/data/refdata/STAR_2006_S6860818.aida0000644000175000017500000011701212116077756016514 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2011_S8950903.aida0000644000175000017500000005110312116077756016354 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2010_S8914702.aida0000644000175000017500000001476612116077756016610 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2006_S6450792.aida0000644000175000017500000002065012116077756016334 0ustar sunsun rivet-1.8.3/data/refdata/TOTEM_2012_002.aida0000644000175000017500000011564712116077756016156 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2011_S9215166.aida0000644000175000017500000001204012116077756016345 0ustar sunsun rivet-1.8.3/data/refdata/OPAL_2001_S4553896.aida0000644000175000017500000004633212116077756016502 0ustar sunsun rivet-1.8.3/data/refdata/BABAR_2003_I593379.aida0000644000175000017500000004627412116077756016467 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2012_I943401.aida0000644000175000017500000037736412116077756016514 0ustar sunsun rivet-1.8.3/data/refdata/ALICE_2011_S8909580.aida0000644000175000017500000002777412116077756016575 0ustar sunsun rivet-1.8.3/data/refdata/OPAL_1998_S3780481.aida0000644000175000017500000016025212116077756016517 0ustar sunsun rivet-1.8.3/data/refdata/D0_2009_S8320160.aida0000644000175000017500000005421312116077756016173 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2008_S7782535.aida0000644000175000017500000004273712116077756016354 0ustar sunsun rivet-1.8.3/data/refdata/UA1_1990_S2044935.aida0000644000175000017500000037621312116077756016344 0ustar sunsun rivet-1.8.3/data/refdata/JADE_1998_S3612880.aida0000644000175000017500000013344312116077756016466 0ustar sunsun rivet-1.8.3/data/refdata/UA5_1987_S1640666.aida0000644000175000017500000002166012116077756016351 0ustar sunsun rivet-1.8.3/data/refdata/DELPHI_1994_S3021912.aida0000644000175000017500000005640212116077756016711 0ustar sunsun rivet-1.8.3/data/refdata/CMS_QCD_10_024.aida0000644000175000017500000013345212116077756016231 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_S9126244.aida0000644000175000017500000070423412116077756016602 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2004_S5839831.aida0000644000175000017500000103307212116077756016341 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2010_CONF_2010_049.aida0000644000175000017500000023107612116077756017405 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2012_I1119557.aida0000644000175000017500000002705712116077756016573 0ustar sunsun rivet-1.8.3/data/refdata/SLD_1999_S3743934.aida0000644000175000017500000067447112116077756016426 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2012_I1184941.aida0000644000175000017500000000175412116077756016344 0ustar sunsun rivet-1.8.3/data/refdata/D0_2008_S7837160.aida0000644000175000017500000002314712116077756016210 0ustar sunsun rivet-1.8.3/data/refdata/DELPHI_1999_S3960137.aida0000644000175000017500000001367612116077756016737 0ustar sunsun rivet-1.8.3/data/refdata/OPAL_1994_S2927284.aida0000644000175000017500000007167312116077756016526 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2011_S8973270.aida0000644000175000017500000003313412116077756016362 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2011_S8941262.aida0000644000175000017500000000670512116077756016362 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2008_NOTE_9351.aida0000644000175000017500000032551312116077756016607 0ustar sunsun rivet-1.8.3/data/refdata/OPAL_1997_S3396100.aida0000644000175000017500000006670412116077756016514 0ustar sunsun rivet-1.8.3/data/refdata/LHCB_2012_I1119400.aida0000644000175000017500000007557112116077756016426 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2007_S7057202.aida0000644000175000017500000006601712116077756016332 0ustar sunsun rivet-1.8.3/data/refdata/STAR_2008_S7993412.aida0000644000175000017500000000565712116077756016527 0ustar sunsun rivet-1.8.3/data/refdata/DELPHI_2000_S4328825.aida0000644000175000017500000001263612116077756016703 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2012_I1107658.aida0000644000175000017500000031536412116077756016351 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_S9131140.aida0000644000175000017500000007771612116077756016601 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2012_I1087342.aida0000644000175000017500000001070112116077756016331 0ustar sunsun rivet-1.8.3/data/refdata/CDF_1994_S2952106.aida0000644000175000017500000024752012116077756016352 0ustar sunsun rivet-1.8.3/data/refdata/E735_1993_S2896508.aida0000644000175000017500000014633312116077756016415 0ustar sunsun rivet-1.8.3/data/refdata/D0_2004_S5992206.aida0000644000175000017500000013546612116077756016215 0ustar sunsun rivet-1.8.3/data/refdata/OPAL_1995_S3198391.aida0000644000175000017500000000324512116077756016515 0ustar sunsun rivet-1.8.3/data/refdata/OPAL_1993_S2692198.aida0000644000175000017500000005365112116077756016524 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2005_S6217184.aida0000644000175000017500000023605612116077756016340 0ustar sunsun rivet-1.8.3/data/refdata/CDF_1988_S1865951.aida0000644000175000017500000006434112116077756016365 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2012_I1091481.aida0000644000175000017500000214746512116077756016576 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_I894867.aida0000644000175000017500000000103412116077756016512 0ustar sunsun rivet-1.8.3/data/refdata/E735_1992_S2485869.aida0000644000175000017500000000150312116077756016405 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2008_LEADINGJETS.aida0000644000175000017500000021415012116077756017104 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_I926145.aida0000644000175000017500000002347612116077756016511 0ustar sunsun rivet-1.8.3/data/refdata/D0_2008_S7662670.aida0000644000175000017500000230032212116077756016205 0ustar sunsun rivet-1.8.3/data/refdata/LHCB_2011_I919315.aida0000644000175000017500000007563212116077756016357 0ustar sunsun rivet-1.8.3/data/refdata/CDF_1998_S3618439.aida0000644000175000017500000001127612116077756016364 0ustar sunsun rivet-1.8.3/data/refdata/D0_2010_S8570965.aida0000644000175000017500000004506212116077756016211 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2002_S4796047.aida0000644000175000017500000006145512116077756016344 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2012_I1188891.aida0000644000175000017500000002306212116077756016572 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_S8971293.aida0000644000175000017500000006663412116077756016622 0ustar sunsun rivet-1.8.3/data/refdata/PHENIX_2003_S5538505.aida0000644000175000017500000001136312116077756016727 0ustar sunsun rivet-1.8.3/data/refdata/OPAL_1996_S3257789.aida0000644000175000017500000000643112116077756016525 0ustar sunsun rivet-1.8.3/data/refdata/STAR_2006_S6500200.aida0000644000175000017500000011751512116077756016474 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2012_I1183818.aida0000644000175000017500000007616312116077756016576 0ustar sunsun rivet-1.8.3/data/refdata/H1_2007_S7223935.aida0000644000175000017500000012311112116077756016203 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_S9120807.aida0000644000175000017500000001532212116077756016572 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2009_S8233977.aida0000644000175000017500000023474512116077756016361 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2012_PAS_FWD_11_003.aida0000644000175000017500000001057612116077756017410 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2010_S8547297.aida0000644000175000017500000024614312116077756016375 0ustar sunsun rivet-1.8.3/data/refdata/STAR_2009_UE_HELEN.aida0000644000175000017500000001426312116077756016760 0ustar sunsun rivet-1.8.3/data/refdata/OPAL_2002_S5361494.aida0000644000175000017500000002224512116077756016470 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2010_S8918562.aida0000644000175000017500000123302012116077756016603 0ustar sunsun rivet-1.8.3/data/refdata/PDG_HADRON_MULTIPLICITIES_RATIOS.aida0000644000175000017500000024040712116077756021200 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2009_NOTE_9936.aida0000644000175000017500000002556212116077756016622 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2009_S8383952.aida0000644000175000017500000001616712116077756016354 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_I954993.aida0000644000175000017500000000123412116077756016511 0ustar sunsun rivet-1.8.3/data/refdata/D0_2009_S8349509.aida0000644000175000017500000050455012116077756016221 0ustar sunsun rivet-1.8.3/data/refdata/CDF_1996_S3108457.aida0000644000175000017500000013342712116077756016357 0ustar sunsun rivet-1.8.3/data/refdata/BABAR_2005_S6181155.aida0000644000175000017500000004703012116077756016541 0ustar sunsun rivet-1.8.3/data/refdata/CDF_1990_S2089246.aida0000644000175000017500000001044612116077756016347 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2008_S8095620.aida0000644000175000017500000000773312116077756016342 0ustar sunsun rivet-1.8.3/data/refdata/ARGUS_1993_S2653028.aida0000644000175000017500000014521412116077756016634 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2000_S4155203.aida0000644000175000017500000002456112116077756016316 0ustar sunsun rivet-1.8.3/data/refdata/DELPHI_1996_S3430090.aida0000644000175000017500000131153012116077756016711 0ustar sunsun rivet-1.8.3/data/refdata/OPAL_1998_S3702294.aida0000644000175000017500000001552612116077756016516 0ustar sunsun rivet-1.8.3/data/refdata/D0_1996_S3214044.aida0000644000175000017500000033660612116077756016220 0ustar sunsun rivet-1.8.3/data/refdata/D0_1996_S3324664.aida0000644000175000017500000007173012116077756016224 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2010_S8656010.aida0000644000175000017500000012646712116077756016363 0ustar sunsun rivet-1.8.3/data/refdata/OPAL_2004_S6132243.aida0000644000175000017500000077514512116077756016475 0ustar sunsun rivet-1.8.3/data/refdata/UA5_1982_S875503.aida0000644000175000017500000003566512116077756016275 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2012_I1193338.aida0000644000175000017500000000220512116077756016334 0ustar sunsun rivet-1.8.3/data/refdata/ALEPH_2002_S4823664.aida0000644000175000017500000001542012116077756016564 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_S9002537.aida0000644000175000017500000000743512116077756016577 0ustar sunsun rivet-1.8.3/data/refdata/ARGUS_1993_S2789213.aida0000644000175000017500000012040012116077756016630 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2013_I1217867.aida0000644000175000017500000016476612116077756016610 0ustar sunsun rivet-1.8.3/data/refdata/Makefile.in0000644000175000017500000005044412123054610015435 0ustar sunsun# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = data/refdata DIST_COMMON = $(dist_pkgdata_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgdatadir)" DATA = $(dist_pkgdata_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ dist_pkgdata_DATA = \ LHCB_2010_S8758301.aida \ LHCB_2010_I867355.aida \ LHCB_2011_I917009.aida \ LHCB_2011_I919315.aida \ LHCB_2012_I1119400.aida \ LHCF_2012_I1115479.aida \ JADE_OPAL_2000_S4300807.aida \ JADE_1998_S3612880.aida \ TASSO_1990_S2148048.aida \ ALEPH_1991_S2435284.aida \ ALEPH_1996_S3486095.aida \ ALEPH_1996_S3196992.aida \ ALEPH_1999_S4193598.aida \ ALEPH_2001_S4656318.aida \ ALEPH_2002_S4823664.aida \ ALEPH_2004_S5765862.aida \ ALICE_2010_S8624100.aida \ ALICE_2010_S8625980.aida \ ALICE_2010_S8706239.aida \ ALICE_2011_S8909580.aida \ ALICE_2011_S8945144.aida \ ALICE_2012_I1181770.aida \ ARGUS_1993_S2653028.aida \ ARGUS_1993_S2669951.aida \ ARGUS_1993_S2789213.aida \ ATLAS_2010_S8591806.aida \ ATLAS_2010_S8817804.aida \ ATLAS_2010_S8894728.aida \ ATLAS_2010_S8914702.aida \ ATLAS_2010_S8918562.aida \ ATLAS_2010_S8919674.aida \ ATLAS_2011_S8924791.aida \ ATLAS_2011_S8971293.aida \ ATLAS_2011_S8994773.aida \ ATLAS_2011_S9002537.aida \ ATLAS_2010_CONF_2010_049.aida \ ATLAS_2011_S9120807.aida \ ATLAS_2011_S9126244.aida \ ATLAS_2011_S9128077.aida \ ATLAS_2011_S9131140.aida \ ATLAS_2011_I894867.aida \ ATLAS_2011_I9035664.aida \ ATLAS_2011_I919017.aida \ ATLAS_2011_I925932.aida \ ATLAS_2011_I926145.aida \ ATLAS_2011_I944826.aida \ ATLAS_2011_I945498.aida \ ATLAS_2011_I954993.aida \ ATLAS_2011_S9225137.aida \ ATLAS_2011_S9212183.aida \ ATLAS_2012_I1082936.aida \ ATLAS_2012_I1083318.aida \ ATLAS_2012_I1084540.aida \ ATLAS_2012_I1091481.aida \ ATLAS_2012_I1093738.aida \ ATLAS_2012_I1094061.aida \ ATLAS_2012_I1094568.aida \ ATLAS_2012_I943401.aida \ ATLAS_2012_I1082009.aida \ ATLAS_2012_I1118269.aida \ ATLAS_2012_I1119557.aida \ ATLAS_2012_I1125575.aida \ ATLAS_2012_I1183818.aida \ ATLAS_2012_I1188891.aida \ ATLAS_2012_CONF_2012_001.aida \ ATLAS_2013_I1217867.aida \ BABAR_2003_I593379.aida \ BABAR_2005_S6181155.aida \ BABAR_2006_S6511112.aida \ BABAR_2007_S6895344.aida \ BABAR_2007_S7266081.aida \ BELLE_2001_S4598261.aida \ BELLE_2006_S6265367.aida \ CLEO_1997_S3486664.aida \ CLEO_2001_S4557530.aida \ CLEO_2004_S5809304.aida \ CMS_2010_S8547297.aida \ CMS_2010_S8656010.aida \ CMS_2011_S8884919.aida \ CMS_2011_S8941262.aida \ CMS_2011_S8950903.aida \ CMS_2011_S8957746.aida \ CMS_2011_S8968497.aida \ CMS_2011_S8973270.aida \ CMS_2011_S8978280.aida \ CMS_2011_S9086218.aida \ CMS_2011_S9088458.aida \ CMS_2011_S9120041.aida \ CMS_2011_S9215166.aida \ CMS_2011_I954992.aida \ CMS_2012_I1087342.aida \ CMS_2012_I1102908.aida \ CMS_2012_I1107658.aida \ CMS_2012_I1184941.aida \ CMS_2012_I1193338.aida \ CMS_2012_PAS_FWD_11_003.aida \ CMS_2012_PAS_QCD_11_010.aida \ CMS_QCD_10_024.aida \ DELPHI_1994_S3021912.aida \ DELPHI_1995_S3137023.aida \ DELPHI_1996_S3430090.aida \ DELPHI_1999_S3960137.aida \ DELPHI_2000_S4328825.aida \ DELPHI_2002_069_CONF_603.aida \ DELPHI_2003_WUD_03_11.aida \ OPAL_1993_S2692198.aida \ OPAL_1994_S2927284.aida \ OPAL_1995_S3198391.aida \ OPAL_1996_S3257789.aida \ OPAL_1997_S3396100.aida \ OPAL_1997_S3608263.aida \ OPAL_1998_S3702294.aida \ OPAL_1998_S3780481.aida \ OPAL_1998_S3749908.aida \ OPAL_2000_S4418603.aida \ OPAL_2001_S4553896.aida \ OPAL_2002_S5361494.aida \ OPAL_2004_S6132243.aida \ H1_1994_S2919893.aida \ H1_1995_S3167097.aida \ H1_2000_S4129130.aida \ H1_2007_S7223935.aida \ ZEUS_2001_S4815815.aida \ PHENIX_2003_S5538505.aida \ STAR_2006_S6500200.aida \ STAR_2006_S6860818.aida \ STAR_2006_S6870392.aida \ STAR_2008_S7993412.aida \ STAR_2009_UE_HELEN.aida \ BRAHMS_2007_S7052448.aida \ UA1_1990_S2044935.aida \ UA5_1982_S875503.aida \ UA5_1986_S1583476.aida \ UA5_1989_S1926373.aida \ UA5_1988_S1867512.aida \ UA5_1987_S1640666.aida \ CDF_1988_S1865951.aida \ CDF_1990_S2089246.aida \ CDF_1993_S2742446.aida \ CDF_1994_S2952106.aida \ CDF_1996_S3108457.aida \ CDF_1996_S3349578.aida \ CDF_1996_S3418421.aida \ CDF_1997_S3541940.aida \ CDF_1998_S3618439.aida \ CDF_2000_S4155203.aida \ CDF_2000_S4266730.aida \ CDF_2001_S4517016.aida \ CDF_2001_S4563131.aida \ CDF_2001_S4751469.aida \ CDF_2002_S4796047.aida \ CDF_2004_S5839831.aida \ CDF_2005_S6080774.aida \ CDF_2005_S6217184.aida \ CDF_2006_S6450792.aida \ CDF_2006_S6653332.aida \ CDF_2007_S7057202.aida \ CDF_2008_S7541902.aida \ CDF_2008_S7554427.aida \ CDF_2008_S7540469.aida \ CDF_2008_S7782535.aida \ CDF_2008_S7828950.aida \ CDF_2008_S8093652.aida \ CDF_2008_S8095620.aida \ CDF_2008_NOTE_9351.aida \ CDF_2008_LEADINGJETS.aida \ CDF_2009_S8233977.aida \ CDF_2009_NOTE_9936.aida \ CDF_2009_S8383952.aida \ CDF_2009_S8436959.aida \ CDF_2010_S8591881_DY.aida \ CDF_2010_S8591881_QCD.aida \ CDF_2012_NOTE10874.aida \ D0_1996_S3214044.aida \ D0_1996_S3324664.aida \ D0_2000_S4480767.aida \ D0_2001_S4674421.aida \ D0_2004_S5992206.aida \ D0_2006_S6438750.aida \ D0_2007_S7075677.aida \ D0_2008_S6879055.aida \ D0_2008_S7554427.aida \ D0_2008_S7662670.aida \ D0_2008_S7719523.aida \ D0_2008_S7837160.aida \ D0_2008_S7863608.aida \ D0_2009_S8202443.aida \ D0_2009_S8320160.aida \ D0_2009_S8349509.aida \ D0_2010_S8566488.aida \ D0_2010_S8570965.aida \ D0_2010_S8671338.aida \ D0_2010_S8821313.aida \ D0_2011_I895662.aida \ E735_1992_S2485869.aida \ E735_1993_S2896508.aida \ E735_1998_S3905616.aida \ SFM_1984_S1178091.aida \ SLD_1996_S3398250.aida \ SLD_1999_S3743934.aida \ SLD_2002_S4869273.aida \ SLD_2004_S5693039.aida \ STAR_2008_S7869363.aida \ TOTEM_2012_I1115294.aida \ TOTEM_2012_002.aida \ PDG_HADRON_MULTIPLICITIES.aida \ PDG_HADRON_MULTIPLICITIES_RATIOS.aida all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/refdata/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/refdata/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_pkgdataDATA: $(dist_pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-dist_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_pkgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_pkgdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dist_pkgdataDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am uninstall uninstall-am uninstall-dist_pkgdataDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: rivet-1.8.3/data/refdata/CDF_2008_S7540469.aida0000644000175000017500000001370612116077756016344 0ustar sunsun rivet-1.8.3/data/refdata/UA5_1988_S1867512.aida0000644000175000017500000002442412116077756016354 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2012_I1084540.aida0000644000175000017500000112017212116077756016555 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2011_S8978280.aida0000644000175000017500000023361712116077756016400 0ustar sunsun rivet-1.8.3/data/refdata/LHCB_2011_I917009.aida0000644000175000017500000006772012116077756016354 0ustar sunsun rivet-1.8.3/data/refdata/E735_1998_S3905616.aida0000644000175000017500000007022112116077756016402 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2000_S4266730.aida0000644000175000017500000000756212116077756016330 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2010_S8591881_DY.aida0000644000175000017500000045744312116077756016750 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2012_I1094568.aida0000644000175000017500000007555312116077756016603 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2011_S9088458.aida0000644000175000017500000001312012116077756016361 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2006_S6653332.aida0000644000175000017500000003551512116077756016335 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2001_S4563131.aida0000644000175000017500000001716212116077756016321 0ustar sunsun rivet-1.8.3/data/refdata/LHCB_2010_S8758301.aida0000644000175000017500000003307312116077756016445 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2011_I954992.aida0000644000175000017500000000075512116077756016275 0ustar sunsun rivet-1.8.3/data/refdata/BABAR_2007_S7266081.aida0000644000175000017500000025734312116077756016560 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2011_S8968497.aida0000644000175000017500000004562612116077756016412 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2011_S9120041.aida0000644000175000017500000023532312116077756016343 0ustar sunsun rivet-1.8.3/data/refdata/ALEPH_1996_S3196992.aida0000644000175000017500000006662312116077756016632 0ustar sunsun rivet-1.8.3/data/refdata/BRAHMS_2007_S7052448.aida0000644000175000017500000022537412116077756016724 0ustar sunsun rivet-1.8.3/data/refdata/Makefile.am0000644000175000017500000001330012123033122015405 0ustar sunsundist_pkgdata_DATA = \ LHCB_2010_S8758301.aida \ LHCB_2010_I867355.aida \ LHCB_2011_I917009.aida \ LHCB_2011_I919315.aida \ LHCB_2012_I1119400.aida \ LHCF_2012_I1115479.aida \ JADE_OPAL_2000_S4300807.aida \ JADE_1998_S3612880.aida \ TASSO_1990_S2148048.aida \ ALEPH_1991_S2435284.aida \ ALEPH_1996_S3486095.aida \ ALEPH_1996_S3196992.aida \ ALEPH_1999_S4193598.aida \ ALEPH_2001_S4656318.aida \ ALEPH_2002_S4823664.aida \ ALEPH_2004_S5765862.aida \ ALICE_2010_S8624100.aida \ ALICE_2010_S8625980.aida \ ALICE_2010_S8706239.aida \ ALICE_2011_S8909580.aida \ ALICE_2011_S8945144.aida \ ALICE_2012_I1181770.aida \ ARGUS_1993_S2653028.aida \ ARGUS_1993_S2669951.aida \ ARGUS_1993_S2789213.aida \ ATLAS_2010_S8591806.aida \ ATLAS_2010_S8817804.aida \ ATLAS_2010_S8894728.aida \ ATLAS_2010_S8914702.aida \ ATLAS_2010_S8918562.aida \ ATLAS_2010_S8919674.aida \ ATLAS_2011_S8924791.aida \ ATLAS_2011_S8971293.aida \ ATLAS_2011_S8994773.aida \ ATLAS_2011_S9002537.aida \ ATLAS_2010_CONF_2010_049.aida \ ATLAS_2011_S9120807.aida \ ATLAS_2011_S9126244.aida \ ATLAS_2011_S9128077.aida \ ATLAS_2011_S9131140.aida \ ATLAS_2011_I894867.aida \ ATLAS_2011_I9035664.aida \ ATLAS_2011_I919017.aida \ ATLAS_2011_I925932.aida \ ATLAS_2011_I926145.aida \ ATLAS_2011_I944826.aida \ ATLAS_2011_I945498.aida \ ATLAS_2011_I954993.aida \ ATLAS_2011_S9225137.aida \ ATLAS_2011_S9212183.aida \ ATLAS_2012_I1082936.aida \ ATLAS_2012_I1083318.aida \ ATLAS_2012_I1084540.aida \ ATLAS_2012_I1091481.aida \ ATLAS_2012_I1093738.aida \ ATLAS_2012_I1094061.aida \ ATLAS_2012_I1094568.aida \ ATLAS_2012_I943401.aida \ ATLAS_2012_I1082009.aida \ ATLAS_2012_I1118269.aida \ ATLAS_2012_I1119557.aida \ ATLAS_2012_I1125575.aida \ ATLAS_2012_I1183818.aida \ ATLAS_2012_I1188891.aida \ ATLAS_2012_CONF_2012_001.aida \ ATLAS_2013_I1217867.aida \ BABAR_2003_I593379.aida \ BABAR_2005_S6181155.aida \ BABAR_2006_S6511112.aida \ BABAR_2007_S6895344.aida \ BABAR_2007_S7266081.aida \ BELLE_2001_S4598261.aida \ BELLE_2006_S6265367.aida \ CLEO_1997_S3486664.aida \ CLEO_2001_S4557530.aida \ CLEO_2004_S5809304.aida \ CMS_2010_S8547297.aida \ CMS_2010_S8656010.aida \ CMS_2011_S8884919.aida \ CMS_2011_S8941262.aida \ CMS_2011_S8950903.aida \ CMS_2011_S8957746.aida \ CMS_2011_S8968497.aida \ CMS_2011_S8973270.aida \ CMS_2011_S8978280.aida \ CMS_2011_S9086218.aida \ CMS_2011_S9088458.aida \ CMS_2011_S9120041.aida \ CMS_2011_S9215166.aida \ CMS_2011_I954992.aida \ CMS_2012_I1087342.aida \ CMS_2012_I1102908.aida \ CMS_2012_I1107658.aida \ CMS_2012_I1184941.aida \ CMS_2012_I1193338.aida \ CMS_2012_PAS_FWD_11_003.aida \ CMS_2012_PAS_QCD_11_010.aida \ CMS_QCD_10_024.aida \ DELPHI_1994_S3021912.aida \ DELPHI_1995_S3137023.aida \ DELPHI_1996_S3430090.aida \ DELPHI_1999_S3960137.aida \ DELPHI_2000_S4328825.aida \ DELPHI_2002_069_CONF_603.aida \ DELPHI_2003_WUD_03_11.aida \ OPAL_1993_S2692198.aida \ OPAL_1994_S2927284.aida \ OPAL_1995_S3198391.aida \ OPAL_1996_S3257789.aida \ OPAL_1997_S3396100.aida \ OPAL_1997_S3608263.aida \ OPAL_1998_S3702294.aida \ OPAL_1998_S3780481.aida \ OPAL_1998_S3749908.aida \ OPAL_2000_S4418603.aida \ OPAL_2001_S4553896.aida \ OPAL_2002_S5361494.aida \ OPAL_2004_S6132243.aida \ H1_1994_S2919893.aida \ H1_1995_S3167097.aida \ H1_2000_S4129130.aida \ H1_2007_S7223935.aida \ ZEUS_2001_S4815815.aida \ PHENIX_2003_S5538505.aida \ STAR_2006_S6500200.aida \ STAR_2006_S6860818.aida \ STAR_2006_S6870392.aida \ STAR_2008_S7993412.aida \ STAR_2009_UE_HELEN.aida \ BRAHMS_2007_S7052448.aida \ UA1_1990_S2044935.aida \ UA5_1982_S875503.aida \ UA5_1986_S1583476.aida \ UA5_1989_S1926373.aida \ UA5_1988_S1867512.aida \ UA5_1987_S1640666.aida \ CDF_1988_S1865951.aida \ CDF_1990_S2089246.aida \ CDF_1993_S2742446.aida \ CDF_1994_S2952106.aida \ CDF_1996_S3108457.aida \ CDF_1996_S3349578.aida \ CDF_1996_S3418421.aida \ CDF_1997_S3541940.aida \ CDF_1998_S3618439.aida \ CDF_2000_S4155203.aida \ CDF_2000_S4266730.aida \ CDF_2001_S4517016.aida \ CDF_2001_S4563131.aida \ CDF_2001_S4751469.aida \ CDF_2002_S4796047.aida \ CDF_2004_S5839831.aida \ CDF_2005_S6080774.aida \ CDF_2005_S6217184.aida \ CDF_2006_S6450792.aida \ CDF_2006_S6653332.aida \ CDF_2007_S7057202.aida \ CDF_2008_S7541902.aida \ CDF_2008_S7554427.aida \ CDF_2008_S7540469.aida \ CDF_2008_S7782535.aida \ CDF_2008_S7828950.aida \ CDF_2008_S8093652.aida \ CDF_2008_S8095620.aida \ CDF_2008_NOTE_9351.aida \ CDF_2008_LEADINGJETS.aida \ CDF_2009_S8233977.aida \ CDF_2009_NOTE_9936.aida \ CDF_2009_S8383952.aida \ CDF_2009_S8436959.aida \ CDF_2010_S8591881_DY.aida \ CDF_2010_S8591881_QCD.aida \ CDF_2012_NOTE10874.aida \ D0_1996_S3214044.aida \ D0_1996_S3324664.aida \ D0_2000_S4480767.aida \ D0_2001_S4674421.aida \ D0_2004_S5992206.aida \ D0_2006_S6438750.aida \ D0_2007_S7075677.aida \ D0_2008_S6879055.aida \ D0_2008_S7554427.aida \ D0_2008_S7662670.aida \ D0_2008_S7719523.aida \ D0_2008_S7837160.aida \ D0_2008_S7863608.aida \ D0_2009_S8202443.aida \ D0_2009_S8320160.aida \ D0_2009_S8349509.aida \ D0_2010_S8566488.aida \ D0_2010_S8570965.aida \ D0_2010_S8671338.aida \ D0_2010_S8821313.aida \ D0_2011_I895662.aida \ E735_1992_S2485869.aida \ E735_1993_S2896508.aida \ E735_1998_S3905616.aida \ SFM_1984_S1178091.aida \ SLD_1996_S3398250.aida \ SLD_1999_S3743934.aida \ SLD_2002_S4869273.aida \ SLD_2004_S5693039.aida \ STAR_2008_S7869363.aida \ TOTEM_2012_I1115294.aida \ TOTEM_2012_002.aida \ PDG_HADRON_MULTIPLICITIES.aida \ PDG_HADRON_MULTIPLICITIES_RATIOS.aida rivet-1.8.3/data/refdata/OPAL_1997_S3608263.aida0000644000175000017500000000572312116077756016514 0ustar sunsun rivet-1.8.3/data/refdata/CMS_2012_I1102908.aida0000644000175000017500000001541112116077756016330 0ustar sunsun rivet-1.8.3/data/refdata/CDF_2012_NOTE10874.aida0000644000175000017500000017406212116077756016526 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2011_I925932.aida0000644000175000017500000002727412116077756016514 0ustar sunsun rivet-1.8.3/data/refdata/D0_2010_S8821313.aida0000644000175000017500000010326112116077756016167 0ustar sunsun rivet-1.8.3/data/refdata/D0_2006_S6438750.aida0000644000175000017500000001104712116077756016203 0ustar sunsun rivet-1.8.3/data/refdata/DELPHI_2002_069_CONF_603.aida0000644000175000017500000002753712116077756017444 0ustar sunsun rivet-1.8.3/data/refdata/CDF_1996_S3349578.aida0000644000175000017500000022334412116077756016370 0ustar sunsun rivet-1.8.3/data/refdata/TASSO_1990_S2148048.aida0000644000175000017500000033260612116077756016645 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2010_S8817804.aida0000644000175000017500000013735312116077756016613 0ustar sunsun rivet-1.8.3/data/refdata/ATLAS_2012_I1082009.aida0000644000175000017500000032566012116077756016563 0ustar sunsun rivet-1.8.3/data/rivet-completion0000644000175000017500000001524112116077756015223 0ustar sunsun## -*- sh -*- ## Analysis name completion for rivet scripts (type _filedir &> /dev/null) || \ function _filedir() { local cur prev commands options command cur="${COMP_WORDS[COMP_CWORD]}" COMPREPLY=( $(compgen -W "$(ls ${cur}* 2> /dev/null)" -- ${cur}) ) return 0 } function _rivet() { local cur prev commands options command COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" opts="--help --verbose --quiet --version --nevts --cross-section" opts="$opts --analysis --runname --list-analyses --show-analysis" opts="$opts --analysis-path --analysis-path-append --pwd" opts="$opts --histo-file --histo-interval --event-timeout" opts="$opts -a -A -n -h -x -H -l -v -q" if [[ ${cur} == -* ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) if test -n "$COMPREPLY"; then return 0 fi fi if (echo ${prev} | egrep -- "-\|--\|--\|--\" &> /dev/null); then anas=$(rivet --list-analyses --quiet) COMPREPLY=( $(compgen -W "$anas" -- ${cur}) ) return 0 fi if (echo ${prev} | egrep -- "\<-n\>|--\|--\|--\|--\|\<-x\>|--\" &> /dev/null); then COMPREPLY=() return 0 fi if (echo ${prev} | egrep -- "--\|\<-H\>" &> /dev/null); then _filedir aida return 0 fi if (echo ${prev} | egrep -- "--\|--\" &> /dev/null); then _filedir -d return 0 fi _filedir return 0 } complete -F _rivet rivet ########################## function _rivet_config() { local cur prev commands options command COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" opts="--help --version" opts="$opts --prefix --includedir --libdir --datadir" opts="$opts --pythonpath --cppflags --ldflags --libs" opts="$opts -h" if [[ ${cur} == -* ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) if test -n "$COMPREPLY"; then return 0 fi fi COMPREPLY=( $(compgen -W "$opts" -- ${cur}) ) if test -n "$COMPREPLY"; then return 0 fi return 0 } complete -F _rivet_config rivet-config ############################## function _compare_histos() { local cur prev commands options command COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" opts="--help -h" opts="$opts --outdir -o" opts="$opts --rivet-refs -R --no-rivet-refs" opts="$opts --histogram-list -l" opts="$opts --hier-out --linear --logarithmic --mc-errs" opts="$opts --no-ratio --rel-ratio --abs-ratio" opts="$opts --all --show-mc-only --show-single --refid" opts="$opts --no-plottitle" opts="$opts --plotinfodir" opts="$opts --no-rmgapbins" opts="$opts --quiet -q --verbose -v" if [[ ${cur} == -* ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) if test -n "$COMPREPLY"; then return 0 fi fi if [[ ${prev} == "--plotinfodir" ]] ; then _filedir -d return 0 fi if [[ ${prev} == "--show-single" ]]; then COMPREPLY=( $(compgen -W "no mc ref all" -- ${cur}) ) return 0 fi _filedir aida return 0 } complete -F _compare_histos -o default compare-histos ############################## function _make_plots() { local cur prev commands options command COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" opts="--help -h" opts="$opts --num-threads -n" opts="$opts --palatino --cm --times --minion" opts="$opts --ps --pdf --eps --png --pdfpng --pspng" opts="$opts --tex --no-cleanup --full-range" opts="$opts --config -c" opts="$opts --quiet -q --verbose -v" if [[ ${cur} == -* ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) if test -n "$COMPREPLY"; then return 0 fi fi _filedir dat return 0 } complete -F _make_plots -o default make-plots ######################## function _rivet_mkhtml() { local cur prev commands options command COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" opts="--help -h" opts="$opts --outputdir -o" opts="$opts --title -t" opts="$opts --config -c" opts="$opts --single -s" opts="$opts --no-ratio --mc-errs --refid" opts="$opts --num-threads --n" opts="$opts --pdf --ps --booklet" opts="$opts --ignore-unvalidated -i" opts="$opts --match -m" opts="$opts --unmatch -M" opts="$opts --verbose -v" if [[ ${cur} == -* ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) if test -n "$COMPREPLY"; then return 0 fi fi ## Options with files / directories as the arg if (echo ${prev} | egrep -- "--\|\<-o\>" &> /dev/null); then _filedir -d return 0 fi if (echo ${prev} | egrep -- "--\|\<-c\>" &> /dev/null); then _filedir return 0 fi ## Options without an completeable arg if (echo ${prev} | egrep -- "\<-t\>|--\|--\|--\|--\|\<-m\>|--\|\<-M\>|--\" &> /dev/null); then COMPREPLY=() return 0 fi _filedir aida return 0 } complete -F _rivet_mkhtml rivet-mkhtml ############################## function _aida2flat() { local cur prev commands options command COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" opts="--help -h" opts="$opts --split -s" opts="$opts --gnuplot -g" opts="$opts --plotinfodir" opts="$opts --smart-output -S" opts="$opts --match -m" opts="$opts --quiet -q --verbose -v" if [[ ${cur} == "--plotinfodir" ]] ; then _filedir -d return 0 fi if [[ ${cur} == -* ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) if test -n "$COMPREPLY"; then return 0 fi fi _filedir aida return 0 } complete -F _aida2flat -o default aida2flat ############################## function _flat2aida() { local cur prev commands options command COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" opts="--help -h" opts="$opts --split -s" if [[ ${cur} == -* ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) if test -n "$COMPREPLY"; then return 0 fi fi _filedir dat return 0 } complete -F _aida2flat -o default aida2flat rivet-1.8.3/data/texmf/0000755000175000017500000000000012131473213013101 5ustar sunsunrivet-1.8.3/data/texmf/cnf/0000755000175000017500000000000012116077756013666 5ustar sunsunrivet-1.8.3/data/texmf/cnf/texmf.cnf0000644000175000017500000000052312116077756015501 0ustar sunsunmain_memory = 230000000 % words of inimemory available; also applies to inimf&mp extra_mem_top = 10000000 % extra high memory for chars, tokens, etc. extra_mem_bot = 10000000 % extra low memory for boxes, glue, breakpoints, etc. save_size = 150000 % for saving values outside current group stack_size = 150000 % simultaneous input sources rivet-1.8.3/data/texmf/tex/0000755000175000017500000000000012116077756013720 5ustar sunsunrivet-1.8.3/data/texmf/tex/generic/0000755000175000017500000000000012116077756015334 5ustar sunsunrivet-1.8.3/data/texmf/tex/generic/pst-fill/0000755000175000017500000000000012116077756017066 5ustar sunsunrivet-1.8.3/data/texmf/tex/generic/pst-fill/pst-fill.tex0000644000175000017500000003026212116077756021345 0ustar sunsun%% %% This is file `pst-fill.tex', %% generated with the docstrip utility. %% %% The original source files were: %% %% pst-fill.dtx (with options: `pst-fill') %% %% IMPORTANT NOTICE: %% %% For the copyright see the source file. %% %% Any modified versions of this file must be renamed %% with new filenames distinct from pst-fill.tex. %% %% For distribution of the original source see the terms %% for copying and modification in the file pst-fill.dtx. %% %% This generated file may be distributed as long as the %% original source files, as listed above, are part of the %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% %% Package `pst-fill.dtx' %% %% Denis Girou (CNRS/IDRIS - France) %% Herbert Voss %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives %% in directory macros/latex/base/lppl.txt. %% %% DESCRIPTION: %% `pst-fill' is a PSTricks package for filling and tiling areas %% %% \pscircle[linestyle=none,fillstyle=solid,fillcolor=yellow,fillsep=0.5, %% addfillstyle=boxfill](2,2){2} \def\fileversion{1.01} \def\filedate{2007/03/10} \message{`PST-Fill' v\fileversion, \filedate\space (tvz,dg,hv)} \csname PSTboxfillLoaded\endcsname \let\PSTboxfillLoaded\endinput \ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi \ifx\PSTXKeyLoaded\endinput\else\input pst-xkey\fi \edef\PstAtCode{\the\catcode`\@}\catcode`\@=11\relax \pst@addfams{pst-fill} \def\pst@@boxfillsize#1(#2,#3)#4(#5,#6)#7(#8\@nil{% \begingroup \ifx\@empty#7\relax \pst@dima\z@ \pst@dimb\z@ \pssetxlength\pst@dimc{#2}% \pssetylength\pst@dimd{#3}% \else \pssetxlength\pst@dima{#2}% \pssetylength\pst@dimb{#3}% \pssetxlength\pst@dimc{#5}% \pssetylength\pst@dimd{#6}% \fi \xdef\pst@tempg{% \pst@dima=\number\pst@dima sp \pst@dimb=\number\pst@dimb sp \pst@dimc=\number\pst@dimc sp \pst@dimd=\number\pst@dimd sp }% \endgroup \let\psk@boxfillsize\pst@tempg} \define@key[psset]{pst-fill}{boxfillsize}{% \def\pst@tempg{#1}\def\pst@temph{auto}% \ifx\pst@tempg\pst@temph \let\psk@boxfillsize\relax \else \pst@@boxfillsize#1(\z@,\z@)\@empty(\z@,\z@)(\@nil \fi} \psset{boxfillsize={(-15cm,-15cm)(15cm,15cm)}} \define@key[psset]{pst-fill}{boxfillcolor}{\pst@getcolor{#1}\psboxfillcolor} \psset{boxfillcolor=black}% hv \define@key[psset]{pst-fill}{boxfillangle}{\pst@getangle{#1}\psk@boxfillangle} \psset{boxfillangle=0} \define@key[psset]{pst-fill}{fillsepx}{% \pst@getlength{#1}\psk@fillsepx} \define@key[psset]{pst-fill}{fillsepy}{% \pst@getlength{#1}\psk@fillsepy} \define@key[psset]{pst-fill}{fillsep}{% \pst@getlength{#1}\psk@fillsepx% \let\psk@fillsepy\psk@fillsepx} \psset{fillsep=2pt} \ifx\PstTiling\@undefined \define@key[psset]{pst-fill}{fillcycle}{\pst@getint{#1}\psk@fillcycle} \psset{fillcycle=0} \else \define@key[psset]{pst-fill}{fillangle}{\pst@getangle{#1}\psk@boxfillangle} \define@key[psset]{pst-fill}{fillsize}{% \def\pst@tempg{#1}\def\pst@temph{auto}% \ifx\pst@tempg\pst@temph\let\psk@boxfillsize\relax \else\pst@@boxfillsize#1(\z@,\z@)\@empty(\z@,\z@)(\@nil\fi} \psset{fillsep=0,fillsize=auto} \define@key[psset]{pst-fill}{fillcyclex}{\pst@getint{#1}\psk@fillcyclex} \define@key[psset]{pst-fill}{fillcycley}{\pst@getint{#1}\psk@fillcycley} \define@key[psset]{pst-fill}{fillcycle}{% \pst@getint{#1}\psk@fillcyclex\let\psk@fillcycley\psk@fillcyclex} \psset{fillcycle=0} \define@key[psset]{pst-fill}{fillmovex}{\pst@getlength{#1}\psk@fillmovex} \define@key[psset]{pst-fill}{fillmovey}{\pst@getlength{#1}\psk@fillmovey} \define@key[psset]{pst-fill}{fillmove}{% \pst@getlength{#1}\psk@fillmovex\let\psk@fillmovey\psk@fillmovex} \psset{fillmove=0pt} \define@key[psset]{pst-fill}{fillloopaddx}{\pst@getint{#1}\psk@fillloopaddx} \define@key[psset]{pst-fill}{fillloopaddy}{\pst@getint{#1}\psk@fillloopaddy} \define@key[psset]{pst-fill}{fillloopadd}{% \pst@getint{#1}\psk@fillloopaddx\let\psk@fillloopaddy\psk@fillloopaddx} \psset{fillloopadd=0} %% \define@key[psset]{pst-fill}{PstDebug}{\pst@getint{#1}\psk@PstDebug} \psset{PstDebug=0} \fi \newbox\pst@fillbox \def\psboxfill{\pst@killglue\pst@makebox\psboxfill@i} \def\psboxfill@i{\setbox\pst@fillbox\box\pst@hbox\ignorespaces} \def\psfs@boxfill{% \ifvoid\pst@fillbox \@pstrickserr{Fill box is empty. Use \string\psboxfill\space first.}\@ehpa \else \ifx\psk@boxfillsize\relax \pst@AutoBoxFill \else\pst@ManualBoxFill\fi \fi} \def\pst@ManualBoxFill{% \leavevmode \begingroup \pst@FlushCode \begin@psclip \pstVerb{clip}% \expandafter\pst@AddFillBox\psk@boxfillsize \end@psclip \endgroup} \def\pst@FlushCode{% \pst@Verb{% /mtrxc CM def CP CP T \tx@STV \psk@origin \psk@swapaxes \pst@newpath \pst@code mtrxc setmatrix moveto 0 setgray}% \gdef\pst@code{}} \def\pst@AddFillBox#1 #2 #3 #4 {% \begingroup \setbox\pst@fillbox=\vbox{% \hbox{\unhcopy\pst@fillbox\kern\psk@fillsepx\p@}% \vskip\psk@fillsepy\p@}% \psk@boxfillsize \pst@cnta=\pst@dimc \advance\pst@cnta-\pst@dima \divide\pst@cnta\wd\pst@fillbox \pst@cntb=\pst@dimd \advance\pst@cntb-\pst@dimb \pst@dimd=\ht\pst@fillbox \divide\pst@cntb\pst@dimd \def\pst@tempa{% \pst@tempg \copy\pst@fillbox \advance\pst@cntc\@ne \ifnum\pst@cntc<\pst@cntd\expandafter\pst@tempa\fi}% \let\pst@tempg\relax \pst@cntc-\tw@ \pst@cntd\pst@cnta \setbox\pst@fillbox=\hbox to \z@{% \kern\pst@dima \kern-\wd\pst@fillbox \pst@tempa \hss}% \pst@cntd\pst@cntb %% DG modification begin - Dec. 11, 1997 - Patch 2 \ifx\PstTiling\@undefined \ifnum\psk@fillcycle=\z@\pst@ManualFillCycle\fi \else \ifnum\psk@fillcyclex=\z@\pst@ManualFillCycle\fi \fi %% DG modification end \global\setbox\pst@boxg=\vbox to\z@{% \offinterlineskip \vss \pst@tempa \vskip\pst@dimb}% \endgroup \setbox\pst@fillbox\box\pst@boxg \pst@rotate\psk@boxfillangle\pst@fillbox \box\pst@fillbox} \def\pst@ManualFillCycle{% \ifx\PstTiling\@undefined \pst@cntg=\psk@fillcycle \else \pst@cntg=\psk@fillcyclex \fi \pst@dimg=\wd\pst@fillbox \ifnum\pst@cntg=\z@ \else \divide\pst@dimg\pst@cntg \fi \ifnum\pst@cntg<\z@\pst@cntg=-\pst@cntg\fi \advance\pst@cntg\m@ne \pst@cnth=\pst@cntg \def\pst@tempg{% \ifnum\pst@cnth<\pst@cntg\advance\pst@cnth\@ne\else\pst@cnth\z@\fi \moveright\pst@cnth\pst@dimg}} %% Auto box fill: !! Fix dictionary %% DG addition begin - Apr. 8, 1997 and Dec. 1997 - Patch 2 \ifx\PstTiling\@undefined \pst@def{AutoFillCycle}<% /c ED /n 0 def /s { /x x w c div n mul add def /n n c abs 1 sub lt { n 1 add } { 0 } ifelse def } def> \pst@def{BoxFill}<% gsave gsave \tx@STV CM grestore dtransform CM idtransform abs /h ED abs /w ED pathbbox h div round 2 add cvi /y2 ED w div round 2 add cvi /x2 ED h div round 2 sub cvi /y1 ED w div round 2 sub cvi /x1 ED /y2 y2 y1 sub def /x2 x2 x1 sub def CP y1 h mul sub neg /y1 ED x1 w mul sub neg /x1 ED clip y2 { /x x1 def s x2 { save CP x y1 %% patch 4 hv -------------- \ifx\VTeXversion\undefined \else %%============ mv: 09-10-01 ??? this is likely to be a right change neg %%============ \fi %% end patch 4 T moveto Box restore /x x w add def } repeat /y1 y1 h add def } repeat % Next line not useful... To see that, suppress clipping (DG) CP x y1 T moveto Box currentpoint currentfont grestore setfont moveto> \else %% DG modification begin - Apr. 8, 1997 and Nov. / Dec. 1997 - Patch 2 \pst@def{AutoFillCycleX}<% /cX ED /nX 0 def /CycleX { /x x w cX div nX mul add def /nX nX cX abs 1 sub lt { nX 1 add } { 0 } ifelse def } def> \pst@def{AutoFillCycleY}<% /cY ED /mY 0 def /nY 0 def /CycleY { /y1 y1 h cY div mY mul sub def nY cY abs 1 sub lt { /nY nY 1 add def /mY 1 def } { /nY 0 def /mY cY abs 1 sub neg def } ifelse } def> \pst@def{BoxFill}<% gsave gsave \tx@STV CM grestore dtransform CM idtransform abs /h ED abs /w ED pathbbox h div round 2 add cvi /y2 ED w div round 2 add cvi /x2 ED h div round 2 sub cvi /y1 ED w div round 2 sub cvi /x1 ED /CoefLoopX 0 def /CoefLoopY 0 def /CoefMoveX 0 def /CoefMoveY 0 def \psk@boxfillangle\space 0 ne {/CoefLoopX 8 def /CoefLoopY 8 def} if \psk@fillcyclex\space 0 ne {/CoefLoopX CoefLoopX 1 add def} if \psk@fillcycley\space 0 ne {/CoefLoopY CoefLoopY 1 add def} if \psk@fillmovex\space 0 ne {/CoefLoopX CoefLoopX 2 add def \psk@fillmovex\space 0 gt {/CoefMoveX CoefLoopX def} {/CoefMoveX CoefLoopX neg def} ifelse} if \psk@fillmovey\space 0 ne {/CoefLoopY CoefLoopY 2 add def \psk@fillmovey\space 0 gt {/CoefMoveY CoefLoopY def} {/CoefMoveY CoefLoopY neg def} ifelse} if \psk@fillsepx\space 0 ne {/CoefLoopX CoefLoopX 1 add def} if \psk@fillsepy\space 0 ne {/CoefLoopY CoefLoopY 1 add def} if /CoefLoopX CoefLoopX \psk@fillloopaddx\space add def /CoefLoopY CoefLoopY \psk@fillloopaddy\space add def /x2 x2 x1 sub 4 sub CoefLoopX 2 mul add def /y2 y2 y1 sub 4 sub CoefLoopY 2 mul add def %% We must fix the origin of tiling, as it must not vary according other stuff %% in the page! w x1 CoefLoopX add CoefMoveX add mul h y1 y2 add 1 sub CoefLoopY sub CoefMoveY sub mul moveto CP y1 h mul sub neg /y1 ED x1 w mul sub neg /x1 ED %% hv 2004-06-22 to prevent clash with pst-gr3d %% \psk@PstDebug 0 eq {clip} if \Pst@Debug 0 eq {clip} if %% end hv \psk@fillmovex\space \psk@fillmovey gsave \tx@STV CM grestore dtransform CM idtransform /hmove ED /wmove ED /row 0 def y2 { /row row 1 add def /column 0 def /x x1 def CycleX save x2 { /column column 1 add def CycleY save CP x y1 %% patch 4 hv -------------- \ifx\VTeXversion\undefined \else %%============ mv: 09-10-01 ??? this is likely to be a right change neg %%============ \fi T moveto Box restore /x x w add def 0 hmove translate } repeat restore /y1 y1 h add def wmove 0 translate } repeat currentpoint currentfont grestore setfont moveto> \fi \def\pst@AutoBoxFill{% \leavevmode \begingroup \pst@stroke \pst@FlushCode \pst@Verb{\psk@boxfillangle\space \tx@RotBegin}% \pstVerb{\pst@dict /Box \pslbrace end}% \ifx\PstTiling\@undefined \else \ifx\pst@tempa\@undefined % Undefined for instance for \pscharpath \else\ifx\pst@tempa\@empty\else \def\pst@temph{0}% \ifx\pst@tempa\pst@temph \else \pstVerb{/TR {pop pop currentpoint translate \pst@tempa\space translate } def}% \fi \fi\fi \fi \hbox to \z@{\vbox to\z@{\vss\copy\pst@fillbox\vskip-\dp\pst@fillbox}\hss}% \ifx\PstTiling\@undefined \pstVerb{% tx@Dict begin \psrbrace def \ifnum\psk@fillcycle=\z@ /s {} def \else \psk@fillcycle \tx@AutoFillCycle \fi \pst@number{\wd\pst@fillbox}% \psk@fillsepx\space add \pst@number{\ht\pst@fillbox}% \pst@number{\dp\pst@fillbox}% \psk@fillsepy\space add add \tx@BoxFill end}% \else \pstVerb{% tx@Dict begin \psrbrace def \ifnum\psk@fillcyclex=\z@ /CycleX {} def \else \psk@fillcyclex\space \tx@AutoFillCycleX \fi \ifnum\psk@fillcycley=\z@ /CycleY {} def \else \psk@fillcycley\space \tx@AutoFillCycleY \fi \pst@number{\wd\pst@fillbox}% \psk@fillsepx\space add \pst@number{\ht\pst@fillbox}% \pst@number{\dp\pst@fillbox}% \psk@fillsepy\space add add \tx@BoxFill end}% \fi \pst@Verb{\tx@RotEnd}% \endgroup} \catcode`\@=\PstAtCode\relax \endinput %% %% End of file `pst-fill.tex'. rivet-1.8.3/data/texmf/tex/generic/pstricks/0000755000175000017500000000000012116077756017176 5ustar sunsunrivet-1.8.3/data/texmf/tex/generic/pstricks/pst-plot.tex0000644000175000017500000004461712116077756021516 0ustar sunsun%% BEGIN pst-plot.tex %% %% Plots and axes with PSTricks 97. %% See the PSTricks User's Guide for documentation. %% %% %% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu. %% COPYRIGHT 2007-2008 by Herbert Voss, hvoss@tug.org %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN %% archives in directory macros/latex/base/lppl.txt. %% \csname PSTplotLoaded\endcsname \let\PSTplotLoaded\endinput \ifx\PSTricksLoaded\endinput\else \def\next{\input pstricks.tex } \expandafter\next \fi \ifx\MultidoLoaded\endinput\else \def\next{\input multido.tex } \expandafter\next \fi \def\fileversion{1.01} \def\filedate{2008/01/26} \message{ v\fileversion, \filedate} \edef\TheAtCode{\the\catcode`\@} \catcode`\@=11 % Using lists of data is optimized for \dataplot and \fileplot % Here is the tricky part. As each line is read from file, % we want to ignore trailing delimiters, and convert arbitrary % strings of non-trailing delimiters to _D_. % We end up with % D x1 D y1 D x2 D y2 ... D xn D yn % \begingroup \catcode`\{=13 \catcode`\}=13 \catcode`\(=13 \catcode`\)=13 \catcode`\,=13 \catcode`\!=1 \catcode`\*=2 \catcode`\ =13 \catcode`\_=13 \catcode`\^^M=13 \gdef\pst@datadelimiters!% Begin def \catcode`\{=13% \catcode`\}=13% \catcode`\(=13% \catcode`\)=13% \catcode`\,=13% \catcode`\ =13% \catcode`\^^M=13% \def,##1!% \ifcat\noexpand,\noexpand##1% \expandafter##1% \else\space% D\space##1% \fi*% \let(,\let),\let{,\let},\let ,\let^^M,\let_\@empty*% End def \endgroup % \begingroup \catcode`\,=13 \catcode`\_=13 \gdef\savedata@#1[#2]{% \xdef\pst@tempg{#2_}% \endgroup \let#1\pst@tempg \global\let\pst@tempg\relax \ignorespaces} % \gdef\readdata@{% \read1 to \pst@tempa \expandafter\readdata@@\pst@tempa_\@nil \ifeof1\else\expandafter\readdata@\fi} \gdef\pst@@readfile#1#2\@nil{\addto@pscode{,#1#2}}% \gdef\readdata@@#1#2\@nil{\xdef\pst@tempg{\pst@tempg,#1#2}}% \endgroup % \def\readdata#1#2{% \openin1=#2 \begingroup \def\pst@tempg{}% \ifeof1 \@pstrickserr{Data file `#2' not found.}\@ehpa \else \pst@datadelimiters \catcode`\[=1 \catcode`\]=2 \readdata@% \fi \endgroup \let#1\pst@tempg % \ifnum\Pst@Debug>0 \typeout{==DEBUG== pst-plot:readdata:\string\pst@tempg: \pst@tempg}\fi% hv 2008-02-28 \global\let\pst@tempg\relax \ignorespaces} \def\pst@readfile#1{{\let\readdata@@\pst@@readfile\readdata\pst@tempg{#1}}} \def\pst@altreadfile#1{% \openin1=#1 \ifeof1 \@pstrickserr{Data file `#1' not found.}\@ehpa \else \catcode`\{=10 \catcode`\}=10 \catcode`\(=10 \catcode`\)=10 \catcode`\,=10 \catcode`\^^M=10 \catcode`\[=1 \catcode`\]=2 \pst@@altreadfile \fi} \def\pst@@altreadfile{% \read1 to \pst@tempg \expandafter\pst@@@altreadfile\pst@tempg\@empty\@nil \ifeof1\else\expandafter\pst@@@altreadfile\fi} \def\pst@@@altreadfile#1#2\@nil{\addto@pscode{#1#2}}% \def\savedata#1{\begingroup\pst@datadelimiters\savedata@{#1}} \def\beginplot@line{\begin@OpenObj} \def\endplot@line{\psline@ii} \def\beginplot@polygon{\begin@ClosedObj} \def\endplot@polygon{\pspolygon@ii} \def\beginplot@curve{\begin@OpenObj} \def\endplot@curve{\pscurve@ii} \def\beginplot@ecurve{\begin@OpenObj} \def\endplot@ecurve{\psecurve@ii} \def\beginplot@ccurve{\begin@ClosedObj} \def\endplot@ccurve{\psccurve@ii} \def\beginplot@dots{\begin@SpecialObj} \def\endplot@dots{\psdots@ii} \def\beginplot@bezier{\begin@OpenObj} \def\endplot@bezier{\psbezier@ii} \def\beginplot@cbezier{\begin@ClosedObj} \def\endplot@cbezier{\pscbezier@ii} % added 2007-06-26 (hv) \let\beginplot@LineToYAxis\beginplot@line % all from pst-plot \def\endplot@LineToYAxis{\psLineToYAxis@ii} \let\beginqp@LineToYAxis\beginqp@line \let\doqp@LineToYAxis\doqp@line \let\endqp@LineToYAxis\endqp@line \let\testqp@LineToYAxis\testqp@line \let\beginplot@LineToXAxis\beginplot@line \def\endplot@LineToXAxis{\psLineToXAxis@ii} \let\beginqp@LineToXAxis\beginqp@line \let\doqp@LineToXAxis\doqp@line \let\endqp@LineToXAxis\endqp@line \let\testqp@LineToXAxis\testqp@line % end (hv) \def\psset@plotstyle#1{% \@ifundefined{beginplot@#1}% {\@pstrickserr{Plot style `#1' not defined}\@eha}% {\edef\psplotstyle{#1}}} \psset@plotstyle{line} \def\psset@plotpoints#1{% \pst@cntg=#1\relax \ifnum\pst@cntg<2 \@pstrickserr{plotpoints parameter must be at least 2}\@ehpa \else \advance\pst@cntg-1 \edef\psk@plotpoints{\the\pst@cntg\space}% \fi} \psset@plotpoints{50} % For quick plots, define: % \beginqp@ : What to do to first point (PS code only). % \doqp@ : What to do to subsequent points (PS code only). % \endqp@ : How to end plot. % \testqp@ : Set \@psttrue if OK to use quick plot. \def\beginqp@line{\pst@oplineto} \def\doqp@line{L } \def\endqp@line{\end@OpenObj}% \def\testqp@line{% \ifdim\pslinearc>\z@\else \ifshowpoints\else \ifx\psk@arrowA\@empty \ifx\psk@arrowB\@empty \@psttrue \fi \fi \fi \fi} \def\beginqp@polygon{moveto } \def\doqp@polygon{L } \def\endqp@polygon{% \addto@pscode{closepath}% \end@ClosedObj} \def\testqp@polygon{% \ifdim\pslinearc>\z@\else \ifshowpoints\else \@psttrue \fi \fi} \def\beginqp@dots{% \psk@dotsize \@nameuse{psds@\psk@dotstyle} % DG/SR modification begin - Dec. 12, 1999 - Patch 2 % /TheDot { gsave \psk@dotangle \psk@dotscale Dot grestore } def % TheDot } Dot } %\def\doqp@dots{TheDot } \def\doqp@dots{Dot } % DG/SR modification end \def\endqp@dots{\end@SpecialObj} \def\testqp@dots{\@psttrue} \def\beginqp@bezier{/n 0 def \pst@oplineto} \def\doqp@bezier{/n n 1 add def n 3 mod 0 eq { curveto } if } \def\endqp@bezier{% \addto@pscode{n 3 mod { pop pop } repeat} \end@OpenObj}% \def\testqp@bezier{% \ifshowpoints\else \ifx\psk@arrowA\@empty \ifx\psk@arrowB\@empty \@psttrue \fi \fi \fi} \def\beginqp@cbezier{/n 0 def moveto } \def\doqp@cbezier{\doqp@bezier} \def\endqp@cbezier{% \addto@pscode{n 3 mod { pop pop } repeat closepath} \end@ClosedObj}% \def\testqp@cbezier{\ifshowpoints\else\@psttrue\fi} % % added 2007-06-26 (hv) ------------------------------------------------- \def\psLineToYAxis@ii{% \addto@pscode{\pst@cp \psline@iii \tx@LineToYAxis}% \end@OpenObj} % \def\tx@LineToYAxis{LineToYAxis } % \pst@def{LineToYAxis}<{ NArray % all x-y pairs on stack n { 2 copy moveto % go to current point 0 exch Lineto % line to y-axis pop % delete old x-value } repeat }> % \def\psLineToXAxis@ii{% \addto@pscode{\pst@cp \psline@iii \tx@LineToXAxis}% \end@OpenObj} % \def\tx@LineToXAxis{LineToXAxis } % \pst@def{LineToXAxis}<{% NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def CP 2 copy moveto pop 0 Lineto n { 2 copy moveto pop 0 Lineto } repeat CP 4 2 roll ArrowB 2 copy moveto pop 0 L pop pop } if}> % end (hv) -------------------------------------------------------------- % \def\dataplot{\def\pst@par{}\pst@object{dataplot}} \def\dataplot@i#1{% \pst@killglue \begingroup \use@par \@pstfalse \@nameuse{testqp@\psplotstyle}% \if@pst \dataplot@ii{\addto@pscode{#1}}% \else \listplot@ii{\addto@pscode{#1}}% \fi \endgroup \ignorespaces} % \def\dataplot@ii#1{% \@nameuse{beginplot@\psplotstyle}% \addto@pscode{% /Dx { \pst@number\psxunit mul /D { Dy } def } def /Dy { \pst@number\psyunit mul Do /D { Dx } def } def /D { /D { Dx } def } def /Do { \@nameuse{beginqp@\psplotstyle}% /Do { \@nameuse{doqp@\psplotstyle}} def } def}% #1% % this is \pst@readfile{#1} for fileplot \addto@pscode{ D }% \@nameuse{endqp@\psplotstyle}} \def\fileplot{\def\pst@par{}\pst@object{fileplot}} \def\fileplot@i#1{% \pst@killglue% \begingroup% \use@par% \@pstfalse% \@nameuse{testqp@\psplotstyle}% \if@pst\dataplot@ii{\pst@readfile{#1}}\else\listplot@ii{\pst@altreadfile{#1}}\fi% \endgroup% \ignorespaces} \pst@def{ScalePoints}<% /y ED /x ED counttomark dup dup cvi eq not { exch pop } if /m exch def /n m 2 div cvi def n { y mul m 1 roll x mul m 1 roll /m m 2 sub def } repeat> \def\listplot{\def\pst@par{}\pst@object{listplot}} \def\listplot@i#1{\listplot@ii{\addto@pscode{#1}}} \def\listplot@ii#1{% \@nameuse{beginplot@\psplotstyle}% \addto@pscode{/D {} def mark}% #1% \addto@pscode{\pst@number\psxunit \pst@number\psyunit \tx@ScalePoints}% \@nameuse{endplot@\psplotstyle}} % \psplot \def\psplotinit#1{\xdef\psplot@init{#1 }} \def\psplot@init{} \def\psplot{\def\pst@par{}\pst@object{psplot}} \def\psplot@i#1#2#3{% \pst@killglue \begingroup \use@par \@nameuse{beginplot@\psplotstyle}% \addto@pscode{% \psplot@init /x #1 def /x1 #2 def /dx x1 x sub \psk@plotpoints div def /xy { x \pst@number\psxunit mul #3 \pst@number\psyunit mul } def}% \gdef\psplot@init{}% \@pstfalse \@nameuse{testqp@\psplotstyle}% \if@pst \psplot@ii \else \psplot@iii \fi \endgroup \ignorespaces} \def\psplot@ii{% \addto@pscode{% xy \@nameuse{beginqp@\psplotstyle} \psk@plotpoints 1 sub { /x x dx add def xy \@nameuse{doqp@\psplotstyle} } repeat /x x1 def xy \@nameuse{doqp@\psplotstyle}}% \@nameuse{endqp@\psplotstyle}} \def\psplot@iii{% \addto@pscode{% mark /n 2 def \psk@plotpoints { xy n 2 roll /n n 2 add def /x x dx add def } repeat /x x1 def xy n 2 roll}% \@nameuse{endplot@\psplotstyle}} \def\parametricplot{\def\pst@par{}\pst@object{parametricplot}} \def\parametricplot@i#1#2#3{% \pst@killglue \begingroup \use@par \@nameuse{beginplot@\psplotstyle}% \addto@pscode{% \psplot@init /t #1 def /t1 #2 def /dt t1 t sub \psk@plotpoints div def /xy { #3 \pst@number\psyunit mul exch \pst@number\psxunit mul exch } def}% \gdef\psplot@init{}% \@pstfalse \@nameuse{testqp@\psplotstyle}% \if@pst \parametricplot@ii \else \parametricplot@iii \fi \endgroup \ignorespaces} \def\parametricplot@ii{% \addto@pscode{% xy \@nameuse{beginqp@\psplotstyle} \psk@plotpoints 1 sub { /t t dt add def xy \@nameuse{doqp@\psplotstyle} } repeat /t t1 def xy \@nameuse{doqp@\psplotstyle}}% \@nameuse{endqp@\psplotstyle}} \def\parametricplot@iii{% \addto@pscode{% mark /n 2 def \psk@plotpoints { xy n 2 roll /n n 2 add def /t t dt add def } repeat /t t1 def xy n 2 roll}% \@nameuse{endplot@\psplotstyle}} % These axes macros are complicated. Be careful. % \pst@ticks{angle}{dx}{n}{int} % int=1 if ticks appear on top of axes, 0 otherwise. \def\pst@ticks#1#2#3#4{% \begin@SpecialObj \addto@pscode{% #1 rotate /n #3 def /dx #2 def n 0 lt { /dx dx neg def /n n neg def } if /y2 \psk@ticksize CLW 2 div add def /y1 y2 neg def \ifnum\psk@tickstyle=1 \ifdim#4<\z@ /y2 \else /y1 \fi 0 def \else \ifnum\psk@tickstyle=-1 \ifdim#4<\z@ /y1 \else /y2 \fi 0 def \fi \fi /x dx def n { x y1 moveto x y2 lineto stroke /x x dx add def } repeat}% \end@SpecialObj} \def\psset@ticksize#1{\pst@getlength{#1}\psk@ticksize} \psset@ticksize{3pt} \def\psset@tickstyle#1{\pst@expandafter\psset@@tickstyle{#1}\@nil} \def\psset@@tickstyle#1#2\@nil{% \ifx#1f\let\psk@tickstyle\z@\else \ifx#1t\let\psk@tickstyle\@ne\else \ifx#1b\let\psk@tickstyle\m@ne\else \@pstrickserr{Bad tick style: `#1#2'}\@ehpa \fi\fi\fi} \psset@tickstyle{full} \def\psset@ticks#1{\pst@expandafter\psset@@ticks{#1}\@nil\psk@ticks} \def\psset@@ticks#1#2\@nil#3{% \ifx#1a\let#3\z@\else \ifx#1x\let#3\@ne\else \ifx#1y\let#3\tw@\else \ifx#1n\let#3\thr@@\else \@pstrickserr{Bad argument: `#1#2'}\@ehpa \fi\fi\fi\fi} \psset@ticks{all} \def\psset@labels#1{\pst@expandafter\psset@@ticks{#1}\@nil\psk@labels} \psset@labels{all} \def\psset@Ox#1{\edef\psk@Ox{#1}} \psset@Ox{0} \def\psset@Dx#1{\edef\psk@Dx{#1}} \psset@Dx{1} \def\psset@dx#1{% \pssetxlength\pst@dimg{#1}% \edef\psk@dx{\number\pst@dimg}} \psset@dx{0} \def\psset@Oy#1{\edef\psk@Oy{#1}} \psset@Oy{0} \def\psset@Dy#1{\edef\psk@Dy{#1}} \psset@Dy{1} \def\psset@dy#1{% \pssetylength\pst@dimg{#1}% \edef\psk@dy{\number\pst@dimg}} \psset@dy{0} \newif\ifshoworigin \def\psset@showorigin#1{\@nameuse{showorigin#1}} \psset@showorigin{true} \def\psaxes{\def\pst@par{}\pst@object{psaxes}} \def\psaxes@i{\pst@getarrows\psaxes@ii} \def\psaxes@ii(#1){\@ifnextchar({\psaxes@iii(#1)}{\psaxes@iv(0,0)(0,0)(#1)}} \def\psaxes@iii(#1)(#2){% \@ifnextchar(% {\psaxes@iv(#1)(#2)}% {\psaxes@iv(#1)(#1)(#2)}} \def\psaxes@iv(#1,#2)(#3,#4)(#5,#6){% \setbox\pst@hbox=\hbox\bgroup \use@par \pssetxlength\pst@dimg{#1}% o-x \pssetylength\pst@dimh{#2}% o-y \pssetxlength\pst@dima{#3}% bl-x \pssetylength\pst@dimb{#4}% bl-y \pssetxlength\pst@dimc{#5}% ur-x \pssetylength\pst@dimd{#6}% ur-y % Whole thing will be translated to origin: \advance\pst@dima-\pst@dimg % Dist. from bl-x to o-x \advance\pst@dimb-\pst@dimh % Dist. from bl-y to o-y \advance\pst@dimc-\pst@dimg % Dist. from ur-x to o-x \advance\pst@dimd-\pst@dimh % Dist. from ur-y to o-y % Make lines/arrows or frame: \@nameuse{psxs@\psk@axesstyle}% % "\pslabelsep" should be from the edge of the axis. \advance\pslabelsep.5\pslinewidth % Now the ticks and labels. Start by checking for "\multido". % !!Need to fix this so that does nothing when there are 0 ticks.!! \begingroup \ifdim\pst@dimb=\z@\else\showoriginfalse\fi \ifnum\psk@dx=\z@ \pst@dimg=\psk@Dx\psxunit \psDEBUG[psaxes@iv]{\textbackslash pst@dimg=\the\pst@dimg}% v.1.01 \ifdim\pst@dimg<\p@ \pst@cnta=\psk@Dx \edef\psk@Dx{-\the\pst@cnta} % v.1.01 \ifnum\Pst@Debug>0 \typeout{==DEBUG== pst-plot(psaxes@iv): Dx -> -Dx (was negative)}\fi % v.1.01 \fi % v.1.01 \edef\psk@dx{\number\pst@dimg}% \psDEBUG[psaxes@iv]{\textbackslash psk@dx=\psk@dx}% v.1.01 \fi \ifnum\psk@ticks<\tw@ \ifnum\psk@tickstyle>\z@ \else\advance\pslabelsep\psk@ticksize\p@\fi \fi \pst@hlabels\pst@dimc\psk@arrowB \pst@hlabels\pst@dima\psk@arrowA \endgroup \begingroup \ifdim\pst@dima=\z@\else\showoriginfalse\fi \ifnum\psk@dy=\z@ \pst@dimg=\psk@Dy\psyunit \psDEBUG[psaxes@iv]{\textbackslash pst@dimg=\the\pst@dimg}% v.1.01 \ifdim\pst@dimg<\p@ \pst@cnta=\psk@Dy \edef\psk@Dy{-\the\pst@cnta} % v.1.01 \psDEBUG[psaxes@iv]{Dy -> -Dy (was negative)}% v.1.01 \fi % v.1.01 \edef\psk@dy{\number\pst@dimg}% \psDEBUG[psaxes@iv]{\textbackslash psk@dy=\psk@dy}% v.1.01 \fi \ifodd\psk@ticks\else \ifnum\psk@tickstyle>\z@ \else\advance\pslabelsep\psk@ticksize\p@\fi \fi \pst@vlabels\pst@dimd\psk@arrowB \pst@vlabels\pst@dimb\psk@arrowA \endgroup % Now close "\pst@hbox" (which is 0-dimensional), and put it at the origin. \egroup \pssetxlength\pst@dimg{#1}% \pssetylength\pst@dimh{#2}% \leavevmode\psput@cartesian\pst@hbox \ignorespaces} \def\psxs@axes{% \psxs@@axes\pst@dima\pst@dimc{}% \psxs@@axes\pst@dimb\pst@dimd{exch}} \def\psxs@@axes#1#2#3{% \begin@SpecialObj \ifdim#1=\z@ \def\psk@arrowA{C}% \else \ifdim#2=\z@ \def\psk@arrowB{C}% \fi \fi \let\pst@linetype\pst@arrowtype \pst@addarrowdef \addto@pscode{% \pst@number#2 0 #3 \pst@number#1 0 #3 ArrowA CP 4 2 roll ArrowB L pop pop}% \pst@stroke \end@SpecialObj} \def\psxs@frame{% \begin@SpecialObj \addto@pscode{% 0 0 moveto \pst@number\pst@dimc 0 L 0 \pst@number\pst@dimd 2 copy rlineto L closepath}% \pst@stroke \psk@fillstyle \end@SpecialObj \let\psk@arrowA\@empty \let\psk@arrowB\@empty} \def\psset@axesstyle#1{% \@ifundefined{psxs@#1}% {\@pstrickserr{Axes style `#1' not defined}\@eha}% {\edef\psk@axesstyle{#1}}} \psset@axesstyle{axes} \def\psxs@none{\let\psk@arrowA\@empty\let\psk@arrowB\@empty} % The origin is never the only label. \def\pst@hlabels#1#2{% \ifdim#1=\z@\else \ifx#2\empty\else\advance#1\ifdim#1>\z@-\fi7\pslinewidth\fi \pst@cnta=#1\relax % Distance (in sp) to end. \divide\pst@cnta\psk@dx\relax % Number of ticks/labels \ifnum\pst@cnta=\z@\else \pst@dimb=\psk@dx sp % Space between ticks. \ifnum\psk@ticks<\tw@ \pst@ticks{0}{\pst@number\pst@dimb}{\the\pst@cnta}{\pst@dimd}% \fi \ifnum\psk@labels<\tw@ \pst@@hlabels\fi \showoriginfalse \fi \fi} % Knows \pst@dimb and \pst@cnta \def\pst@@hlabels{% \vbox to\z@{% \ifdim\pst@dimd>\z@\vskip\pslabelsep\else\vss\fi \ifnum\pst@cnta<\z@ \pst@dimb=-\pst@dimb\fi \hbox to\z@{% \ifshoworigin\hbox to \z@{\hss\pshlabel{\psk@Ox}\hss}\fi \mmultido {\nA=\psk@Ox+\psk@Dx}% {\pst@cnta}% {\hskip\pst@dimb\hbox to \z@{% \hss\ifdim\nA pt=\z@ \pshlabel{0}\else\pshlabel{\nA}\fi \hss}}% prevent "-0" \hss}% \ifdim\pst@dimd>\z@\vss\else\vskip\pslabelsep\fi}}% \def\pshlabel#1{$#1$} \def\pst@vlabels#1#2{% \ifdim#1=\z@\else \ifx#2\empty\else \advance#1\ifdim#1>\z@-\fi7\pslinewidth \fi \pst@cnta=#1\relax % Distance (in sp) to end. \divide\pst@cnta\psk@dy\relax % Number of ticks/labels \ifnum\pst@cnta=\z@\else \pst@dima=\psk@dy sp % Space between ticks. \ifodd\psk@ticks\else \pst@ticks{90}{\pst@number\pst@dima}{\the\pst@cnta}{-\pst@dimc}% \fi \ifodd\psk@labels\else\pst@@vlabels\fi \showoriginfalse \fi \fi} % Knows \pst@dima and \pst@cnta \def\pst@@vlabels{% \vbox to\z@{% \ifnum\pst@cnta>\z@ \pst@dima=-\pst@dima \fi \offinterlineskip \ifshoworigin \vbox to \z@{\vss\hbox to\z@{% \ifdim\pst@dimc>\z@\hss\else\hskip\pslabelsep\fi \psvlabel{\psk@Oy}% \ifdim\pst@dimc>\z@\hskip\pslabelsep\else\hss\fi}\vss}% \fi \mmultido {\nA=\psk@Oy+\psk@Dy}% {\pst@cnta}% {\vbox to\pst@dima{\vss}\vbox to \z@{\vss\hbox to\z@{% \ifdim\pst@dimc>\z@\hss\else\hskip\pslabelsep\fi \ifdim\nA pt=\z@ \psvlabel{0}\else\psvlabel{\nA}\fi% prevent -0, doesn't work with \ifnum \ifdim\pst@dimc>\z@\hskip\pslabelsep\else\hss\fi}\vss}}% \vss}} \def\psvlabel#1{$#1$} \catcode`\@=\TheAtCode\relax \endinput %% %% END pst-plot.tex rivet-1.8.3/data/texmf/tex/generic/pstricks/pstricks.tex0000644000175000017500000030073312116077756021570 0ustar sunsun%% pstricks.tex %% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu. %% COPYRIGHT 2000-2003 by Denis Girou. %% Copyright 2004-2008 Herbert Voss % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2003/12/01 or later. % % This work has the LPPL maintenance status "maintained". % % This Current Maintainer of this work is Herbert Voss % % This work consists of the file pstricks.tex, PostScript macros % for Generic TeX. % See the PSTricks User's Guide for description. % This uses the header file `pstricks.pro'. % \def\fileversion{1.26} \def\filedate{2008/07/31} % \csname PSTricksLoaded\endcsname \let\PSTricksLoaded\endinput \edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax \expandafter\ifx\csname @latexerr\endcsname\relax% do we have LaTeX? \def\typeout#1{\immediate\write\@unused{#1}} \alloc@7\write\chardef\sixt@@n\@unused \typeout{we are running tex and have to define some LaTeX commands ...} \long\def\@ifundefined#1#2#3{\expandafter\ifx\csname #1\endcsname\relax#2\else#3\fi} \def\@namedef#1{\expandafter\def\csname #1\endcsname} \def\@nameuse#1{\csname #1\endcsname} \def\@eha{% Your command was ignored.^^J Type \space I \space to replace it with another command,^^J or \space \space to continue without it.} \def\@spaces{\space\space\space\space} \def\@empty{} \def\@gobble#1{} \def\@nnil{\@nil} % \def\@ifnextchar#1#2#3{% \let\@tempe#1\def\@tempa{#2}\def\@tempb{#3}\futurelet\@tempc\@ifnch} % \def\@ifnch{% \ifx\@tempc\@sptoken \let\@tempd\@xifnch \else\ifx\@tempc\@tempe \let\@tempd\@tempa \else \let\@tempd\@tempb \fi \fi \@tempd% } \begingroup \def\:{\global\let\@sptoken= } \: \def\:{\@xifnch} \expandafter\gdef\: {\futurelet\@tempc\@ifnch} \endgroup \fi % % hv 2007-10-16 to fix the bug in pst-node with \\[name=...] \def\ps@ifnextchar#1#2#3{% \let\reserved@d= #1% \def\reserved@a{#2}\def\reserved@b{#3}% \futurelet\@let@token\ps@ifnch} \def\ps@ifnch{% \ifx\@let@token\reserved@d \let\reserved@b\reserved@a \fi \reserved@b } % end bugfix \typeout{`PSTricks' v\fileversion\space\space <\filedate> (tvz)} \def\@pstrickserr#1#2{% \begingroup \newlinechar`\^^J \edef\pst@tempc{#2}% \expandafter\errhelp\expandafter{\pst@tempc}% \typeout{% PSTricks error. \space See User's Guide for further information.^^J \@spaces\@spaces\@spaces\@spaces Type \space H \space for immediate help.}% \errmessage{#1}% \endgroup} \def\@ehpa{% Your command was ignored. Default value substituted.^^J Type \space \space to procede.} \def\@ehpb{% Your command was ignored. Will recover best I can.^^J Type \space \space to procede.} \def\@ehpc{% You better fix this before proceding.^^J See the PSTricks User's Guide or ask your system administrator for help.^^J Type \space X \space to quit.} \def\pst@misplaced#1{\@pstrickserr{Misplaced \string#1 command}\@ehpb} \newdimen\pst@dima \newdimen\pst@dimb \newdimen\pst@dimc \newdimen\pst@dimd \newdimen\pst@dimg \newdimen\pst@dimh \newbox\pst@hbox \newbox\pst@boxg \newcount\pst@cnta \newcount\pst@cntb \newcount\pst@cntc \newcount\pst@cntd \newcount\pst@cntg \newcount\pst@cnth \newif\if@pst \newtoks\pst@toks \newif\if@star \def\pst@ifstar#1{% \@ifnextchar*{\@startrue\def\next*{#1}\next}{\@starfalse#1}} \def\pst@expandafter#1#2{% \def\next{#1}% \edef\@tempa{#2}% \ifx\@tempa\@empty \@pstrickserr{Unexpected empty argument!}\@ehpb \def\@tempa{\@empty}% \fi \expandafter\next\@tempa} \def\pst@dimtonum#1#2{\edef#2{\pst@@dimtonum#1}} \def\pst@@dimtonum#1{\expandafter\pst@@@dimtonum\the#1} {\catcode`\p=12 \catcode`\t=12 \global\@namedef{pst@@@dimtonum}#1pt{#1}} % \def\pst@pyth#1#2#3{% from pst-3d \begingroup \pst@dima=#1\relax \ifnum\pst@dima<\z@\pst@dima=-\pst@dima\fi % dima=abs(x) \pst@dimb=#2\relax \ifnum\pst@dimb<\z@\pst@dimb=-\pst@dimb\fi % dimb=abs(y) \advance\pst@dimb\pst@dima % dimb=s=abs(x)+abs(y) \ifnum\pst@dimb=\z@ \global\pst@dimg=\z@ % dimg=z=sqrt(x^2+y^2) \else \multiply\pst@dima 8\relax % dima= 8abs(x) \pst@@divide\pst@dima\pst@dimb % dimg =8t=8abs(x)/s \advance\pst@dimg -4pt % dimg = 4tau = (8t-4) \multiply\pst@dimg 2 \pst@dimtonum\pst@dimg\pst@tempa \pst@dima=\pst@tempa\pst@dimg % dima=(8tau)^2 \advance\pst@dima 64pt % dima=u=[64+(8tau)^2]/2 \divide\pst@dima 2\relax % =(8f)^2 \pst@dimd=7pt % initial guess at sqrt(u) \pst@@pyth\pst@@pyth\pst@@pyth % dimd=sqrt(u) \pst@dimtonum\pst@dimd\pst@tempa \pst@dimg=\pst@tempa\pst@dimb \global\divide\pst@dimg 8 % dimg=z=(8f)*s/8 \fi \endgroup #3=\pst@dimg} \def\pst@@pyth{% dimd = g <-- (g + u/g)/2 \pst@@divide\pst@dima\pst@dimd \advance\pst@dimd\pst@dimg \divide\pst@dimd 2\relax} % % ----- the old pst@pyth begin ----- \iffalse \def\pst@pyth#1#2#3{\ifdim#1>#2\pst@@pyth#1#2#3\else\pst@@pyth#2#1#3\fi} \def\pst@@pyth#1#2#3{% \ifdim4#1>9#2% #3=#1\advance#3 .2122#2% \else #3=.8384#1\advance#3 .5758#2% \fi% } \fi % ----- the old pst@pyth end ----- % \def\pst@divide#1#2#3{% \pst@@divide{#1}{#2}% \pst@dimtonum\pst@dimg{#3}% } \def\pst@@divide#1#2{% \pst@dimg=#1\relax \pst@dimh=#2\relax \pst@cntg=\pst@dimh \pst@cnth=67108863 \pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide \divide\pst@dimg\pst@cntg% } \def\pst@@@divide{% \ifnum \ifnum\pst@dimg<\z@-\fi\pst@dimg<\pst@cnth \multiply\pst@dimg\sixt@@n \else \divide\pst@cntg\sixt@@n \fi% } \def\pst@configerr#1{% \@pstrickserr{\string#1 not defined in pstricks.con}\@ehpc} % \def\pstVerb#1{\pst@configerr\pstVerb} \def\pstverb#1{\pst@configerr\pstverb} \def\pstverbscale{\pst@configerr\pstverbscale} \def\pstrotate{\pst@configerr\pstrotate} \def\pstheader#1{\pst@configerr\pstheader} \def\pstdriver{\pst@configerr\pstdriver} \@ifundefined{pstcustomize}% {\def\pstcustomize{\endinput\let\pstcustomize\relax}}{} % \input pstricks.con % local config file % \newif\ifPSTricks \PSTrickstrue \def\PSTricksOff{% \def\pstheader##1{}% \def\pstverb##1{}% \def\pstVerb##1{}% \PSTricksfalse% } \@ifundefined{pst@def}{\def\pst@def#1<#2>{\@namedef{tx@#1}{#2 }}}{} \@ifundefined{pst@ATH}{\def\pst@ATH<#1>{}}{} % \pstheader{pstricks.pro} \pstheader{pst-algparser.pro} % \def\pst@dict{tx@Dict begin } \def\pst@theheaders{pstricks.pro, pst-algparser.pro} \def\pst@Verb#1{\pstVerb{\pst@dict #1 end}} \def\tx@Atan{Atan } \def\tx@Div{Div } \def\tx@NET{NET } \def\tx@Pyth{Pyth } \def\tx@PtoC{PtoC } \def\tx@PathLength@{PathLength@ } \def\tx@PathLength{PathLength } \pst@dimg=\pstunit\relax \ifdim\pst@dimg=1bp \def\pst@stp{.996264 dup scale} \else \edef\pst@stp{1 \pst@@dimtonum\pst@dimg\space div dup scale} \fi \def\tx@STP{STP } \def\tx@STV{STV } % %--------------------------------------- PS stuff --------------------------------- % on stack x y \pst@def{UserCoor}< \pst@number\psyunit div exch \pst@number\psxunit div exch > \pst@def{ScreenCoor}< \pst@number\psyunit mul exch \pst@number\psxunit mul exch > %--------------------------------------- PS stuff end ----------------------------- % \def\pst@number#1{\pst@@dimtonum#1\space} \def\pst@checknum#1#2{% \edef\next{#1}% \ifx\next\@empty \let\pst@num\z@ \else \expandafter\pst@@checknum\next..\@nil \fi \ifnum\pst@num=\z@ \@pstrickserr{Bad number: `#1'. 0 substituted.}\@ehpa \def#2{0 }% \else \edef#2{\ifnum\pst@num=\tw@-\fi\the\pst@cntg.% \expandafter\@gobble\the\pst@cnth\space}% \fi} \def\pst@@checknum{% \@ifnextchar-% {\let\pst@num\tw@\expandafter\pst@@@checknum\@gobble}% {\let\pst@num\@ne\pst@@@checknum}% } % \def\pst@@@checknum#1.#2.#3\@nil{% \afterassignment\pst@@@@checknum\pst@cntg=0#1\relax\@nil \afterassignment\pst@@@@checknum\pst@cnth=1#2\relax\@nil} \def\pst@@@@checknum#1\relax\@nil{% \ifx\@nil#1\@nil\else\let\pst@num\z@\fi} \def\pst@getnumii#1 #2 #3\@nil{% \pst@checknum{#1}\pst@tempg \pst@checknum{#2}\pst@temph} \def\pst@getnumiii#1 #2 #3 #4\@nil{% \pst@checknum{#1}\pst@tempg \pst@checknum{#2}\pst@temph \pst@checknum{#3}\pst@tempi} \def\pst@getnumiv#1 #2 #3 #4 #5\@nil{% \pst@checknum{#1}\pst@tempg \pst@checknum{#2}\pst@temph \pst@checknum{#3}\pst@tempi \pst@checknum{#4}\pst@tempj} \def\pst@getdimnum#1 #2 #3\@nil{% \pssetlength\pst@dimg{#1}% \pst@checknum{#2}\pst@tempg% } % DG/SR modification begin - Jan. 7, 1998 - Patch 9 % Missing from pstricks.bug 0.93 %\def\pst@getscale#1#2{% %\pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil %\@psttrue %\ifdim\pst@tempg\p@=\z@ %\@pstrickserr{Bad scaling argument `#1'}\@ehpa %\def\pst@tempg{1 }% %\@pstfalse %\fi %\ifdim\pst@temph\p@=\z@ %\if@pst\@pstrickserr{Bad scaling argument `#1'}\@ehpa\fi %\def\pst@temph{1 }% %\fi %\edef#2{\pst@tempg\space \pst@temph\space scale }% %\ifdim\pst@tempg\p@=\p@ \ifdim\pst@temph\p@=\p@ %\def#2{}% %\fi\fi} \def\pst@getscale#1#2{% read and check a scale input x [y] \edef\pst@tempg{#1}% \ifx\pst@tempg\@none \def#2{}% \else \pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil \ifdim\pst@tempg\p@=\z@ \@pstrickserr{Bad scaling argument `#1'}\@ehpa \def#2{}% \else \ifdim\pst@temph\p@=\z@ \@pstrickserr{Bad scaling argument `#1'}\@ehpa \def#2{}% \else \edef#2{\pst@tempg\space \pst@temph\space scale }% \fi \fi \fi% } % DG/SR modification end \def\pst@getint#1#2{% read and check an integer \pst@cntg=#1\relax \edef#2{\the\pst@cntg\space}% } \begingroup \catcode`\{=12 \catcode`\}=12 \catcode`\[=1 \catcode`\]=2 \gdef\pslbrace[{ ] \gdef\psrbrace[} ] \endgroup \def\@newcolor#1#2{% \expandafter\edef\csname #1\endcsname{\noexpand\pst@color{#2}}% %\expandafter\edef\csname color@#1\endcsname{#2}% \expandafter\edef\csname\string\color@#1\endcsname{#2}% hv 1.14 2005-12-17 \ignorespaces} \def\pst@color#1{% \def\pst@currentcolor{#1}\pstVerb{#1}\aftergroup\pst@endcolor} \def\pst@endcolor{\pstVerb{\pst@currentcolor}} \def\pst@currentcolor{0 setgray} \def\altcolormode{% \def\pst@color##1{% \pstVerb{gsave ##1}\aftergroup\pst@endcolor}% \def\pst@endcolor{\pstVerb{\pst@grestore}}} \def\pst@grestore{% currentpoint matrix currentmatrix currentfont grestore setfont setmatrix moveto } %\def\pst@usecolor#1{\csname color@#1\endcsname\space}% hv 1.14 2005--12-17 \def\pst@usecolor#1{\csname\string\color@#1\endcsname\space} % \def\newgray#1#2{% \pst@checknum{#2}\pst@tempg \@newcolor{#1}{\pst@tempg setgray}} \def\newrgbcolor#1#2{% \pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi setrgbcolor}} \def\newhsbcolor#1#2{% \pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi sethsbcolor}} \def\newcmykcolor#1#2{% \pst@expandafter\pst@getnumiv{#2} {} {} {} {} {}\@nil \@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi \pst@tempj setcmykcolor}} \newgray{black}{0} \newgray{darkgray}{.25} \newgray{gray}{.5} \newgray{lightgray}{.75} \newgray{white}{1} \newrgbcolor{red}{1 0 0} \newrgbcolor{green}{0 1 0} \newrgbcolor{blue}{0 0 1} \newrgbcolor{yellow}{1 1 0} \newrgbcolor{cyan}{0 1 1} \newrgbcolor{magenta}{1 0 1} \def\psset#1{\@psset#1,\@nil\ignorespaces} \def\@psset#1,{% \@@psset#1==\@nil% \@ifnextchar\@nil{\@gobble}{\@psset}% } \def\@@psset#1=#2=#3\@nil{% \@ifundefined{psset@#1}% {\@pstrickserr{Graphics parameter `#1' not defined.}\@ehpa}% {\@nameuse{psset@#1}{#2}}% }% \def\psset@style#1{% \@ifundefined{pscs@#1}% {\@pstrickserr{Custom style `#1' undefined}\@ehpa}% {\@nameuse{pscs@#1}}% } %\def\newpsstyle#1#2{\@namedef{pscs@#1}{\psset{#2}}} %------------ hv 1.10 beg ------------------- \def\newpsstyle#1#2{\@namedef{pscs@#1}{% \def\pst@tempA{#2}% \ifx\pst@tempA\@empty\else\psset{#2}\fi}} %------------ hv 1.10 end ------------------- %------------ hv 1.16 begin ------------------- \def\addto@psstyle#1#2{% \pst@toks=\expandafter{#1#2}% \edef#1{\the\pst@toks}} \def\addtopsstyle#1#2{% \def\pst@tempA{#2}% \ifx\pst@tempA\@empty\else \@ifundefined{pscs@#1}% {\newpsstyle{#1}{#2}}% {\expandafter\addto@psstyle\csname pscs@#1\endcsname{\psset{#2}}}% \fi} %------------ hv 1.16 end ------------------- % \def\@none{none} \def\pst@getcolor#1#2{% % \@ifundefined{color@#1}% hv 1.14 2005-12-17 \@ifundefined{\string\color@#1}% {\@pstrickserr{Color `#1' not defined}\@eha}% {\edef#2{#1}}% } \newdimen\psunit \psunit 1cm \newdimen\psxunit \psxunit 1cm \newdimen\psyunit \psyunit 1cm \let\psrunit\psunit % \def\pstunit@off{\let\@psunit\ignorespaces\ignorespaces} % \def\pssetlength#1#2{% \let\@psunit\psunit \afterassignment\pstunit@off #1 #2\@psunit% } \def\psaddtolength#1#2{% \let\@psunit\psunit \afterassignment\pstunit@off \advance#1 #2\@psunit% } \def\pssetxlength#1#2{% \let\@psunit\psxunit \afterassignment\pstunit@off #1 #2\@psunit% } \def\pssetylength#1#2{% \let\@psunit\psyunit \afterassignment\pstunit@off #1 #2\@psunit% } \def\psset@unit#1{% \pssetlength\psunit{#1}% \psxunit=\psunit \psyunit=\psunit% } \def\psset@runit#1{\pssetlength\psrunit{#1}} \def\psset@xunit#1{\pssetxlength\psxunit{#1}} \def\psset@yunit#1{\pssetylength\psyunit{#1}} % v 1.05 begin \def\psset@PstDebug#1{\pst@getint{#1}{\Pst@Debug}}% hv 2004-06-22 \psset{PstDebug=0} \def\psDEBUG{\@ifnextchar[\psDEBUG@i{\psDEBUG@i[PSTricks]}} \def\psDEBUG@i[#1]#2{\ifnum\Pst@Debug>0 \expandafter\typeout{<#1>: #2}\fi}% % end \def\pst@getlength#1#2{% \pssetlength\pst@dimg{#1}% \edef#2{\pst@number\pst@dimg}% } \def\pst@@getlength#1#2{% \pssetlength\pst@dimg{#1}% \edef#2{\number\pst@dimg sp}% } \def\pst@getcoor#1#2{\pst@@getcoor{#1}\let#2\pst@coor} \def\pst@coor{0 0 } \def\pst@getcoors#1#2{% \def\pst@aftercoors{\addto@pscode{#1 \pst@coors }#2}% \def\pst@coors{}% \pst@@getcoors% } \def\pst@@getcoors(#1){% \pst@@getcoor{#1}% \edef\pst@coors{\pst@coor\pst@coors}% \@ifnextchar({\pst@@getcoors}{\pst@aftercoors}% } \def\pst@getangle#1#2{\pst@@getangle{#1}\let#2\pst@angle} \def\pst@angle{0 } \def\cartesian@coor#1,#2,#3\@nil{% \pssetxlength\pst@dimg{#1}% \pssetylength\pst@dimh{#2}% \edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}% } \def\NormalCoor{% \def\pst@@getcoor##1{\pst@expandafter\cartesian@coor{##1},\relax,\@nil}% \def\pst@@getangle##1{% \pst@checknum{##1}\pst@angle% \edef\pst@angle{\pst@angle \pst@angleunit}% }% \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}% } \NormalCoor \def\degrees{\@ifnextchar[{\@degrees}{\def\pst@angleunit{}}} \def\@degrees[#1]{% \pst@checknum{#1}\pst@tempg \edef\pst@angleunit{360 \pst@tempg div mul }% \ignorespaces} \def\radians{\def\pst@angleunit{57.2956 mul }} \def\pst@angleunit{} \def\SpecialCoor{% \def\pst@@getcoor##1{% \begingroup% \pst@activecoor% \xdef\pst@tempg{##1}% \endgroup% \expandafter\special@coor\pst@tempg||\@nil% }% \def\pst@@getangle##1{% \begingroup% \pst@activecoor% \xdef\pst@tempg{##1}% \endgroup% \expandafter\special@angle\pst@tempg\@empty)\@nil% }% \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@special}% } \begingroup \catcode`\|=13 \catcode`\;=13 \catcode`\!=13 \catcode`\*=13 \gdef\pst@activecoor{% \def|{\string|}% \def;{\string;}% \def!{\string!}% \def*{\string*}% algebraic expression hv 2007-11-17 } \endgroup \def\special@coor#1|#2|#3\@nil{% \ifx#3|\relax \mixed@coor{#1}{#2}% \else \special@@coor#1;;\@nil \fi% } \def\special@@coor#1{% \ifcat#1a\relax% node names should start with a letter \def\next{\node@coor#1}% \else \ifx#1[\relax% special node coor: [..]A \def\next{\Node@coor[}% \else \ifx#1!\relax% PostScript code: x y \def\next{\raw@coor}% \else \ifx#1*\relax% algebraic PostScript code: x f(x) \def\next{\alg@coor}% \else \def\next{\special@@@coor#1}% \fi \fi \fi \fi \next% } \def\special@@@coor#1;#2;#3\@nil{% \ifx#3;\relax \polar@coor{#1}{#2}% \else \cartesian@coor#1,\relax,\@nil \fi% } \def\mixed@coor#1#2{% \begingroup% % DG/SR modification begin - Oct. 27, 1997 - Patch 6 %\specialcoor@ii#1;;\@nil %\let\pst@tempa\pst@coor %\specialcoor@ii#2;;\@nil \special@@coor#1;;\@nil% \let\pst@tempa\pst@coor% \special@@coor#2;;\@nil% % DG/SR modification end \xdef\pst@tempg{\pst@tempa pop \pst@coor exch pop }% \endgroup% \let\pst@coor\pst@tempg% } % \def\polar@coor#1#2{% % \pssetlength\pst@dimg{#1}% \pssetlength\pst@dimb{#1}% hv 2007-10-16 g is already used in get@@angle \pst@@getangle{#2}% % \edef\pst@coor{\pst@number\pst@dimg \pst@angle \tx@PtoC}% dito \edef\pst@coor{\pst@number\pst@dimb \pst@angle \tx@PtoC}% } % \def\raw@coor#1;#2\@nil{% PostScript code \edef\pst@coor{% #1 \pst@number\psyunit mul exch \pst@number\psxunit mul exch }} % \def\alg@coor#1;#2\@nil{\expandafter\alg@@@coor#1} \def\alg@@@coor#1 #2{% algebraic PostScript code \edef\pst@coor{% % #1 /yArg exch def /x exch def /x #1 def % /yArg load 200 string cvs /Arg exch def /Func (#2) AlgParser cvx def x Func \pst@number\psyunit mul exch \pst@number\psxunit mul exch }} % \def\node@coor#1\@nil{% \@pstrickserr{You must load `pst-node.tex' to use node coordinates.}\@ehps \def\pst@coor{0 0 }% } \def\Node@coor{\node@coor} \def\special@angle#1#2)#3\@nil{% \ifx!#1\relax \edef\pst@angle{#2 \pst@angleunit}% \else \ifx(#1\relax \pst@@getcoor{#2}% \edef\pst@angle{\pst@coor exch \tx@Atan}% \else \pst@checknum{#1#2}\pst@angle \edef\pst@angle{\pst@angle \pst@angleunit}% \fi \fi} \def\Cartesian{% \def\cartesian@coor##1,##2,##3\@nil{% \pssetxlength\pst@dimg{##1}% \pssetylength\pst@dimh{##2}% \edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}% }% \@ifnextchar({\Cartesian@}{}% } \def\Cartesian@(#1,#2){% \pssetxlength\psxunit{#1}% \pssetylength\psyunit{#2}% \ignorespaces% } \def\Polar{% \def\psput@cartesian{\psput@special}% \def\cartesian@coor##1,##2,##3\@nil{\polar@coor{##1}{##2}}% }% \def\psset@origin#1{% \pst@@getcoor{#1}% % ----------- 1.10 beg hv ------------------- % \edef\psk@origin{\pst@coor \tx@NET }} \edef\psk@origin{\pst@coor T }} % ----------- 1.10 end hv ------------------- \def\psk@origin{} % \newif\ifswapaxes \def\psset@swapaxes#1{% \if@pst \@nameuse{@pst#1}% \if@pst\def\psk@swapaxes{-90 rotate -1 1 scale }% \else\def\psk@swapaxes{}% \fi% } \psset@swapaxes{false} % \newif\ifshowpoints \def\psset@showpoints#1{\@nameuse{showpoints#1}} \psset@showpoints{false} % \let\pst@setrepeatarrowsflag\relax % \def\psset@border#1{% \pst@getlength{#1}\psk@border \pst@setrepeatarrowsflag} \psset@border{0pt} \def\psset@bordercolor#1{\pst@getcolor{#1}\psbordercolor} \psset@bordercolor{white} \newif\ifpsdoubleline \def\psset@doubleline#1{% \@nameuse{psdoubleline#1}% \pst@setrepeatarrowsflag} \psset@doubleline{false} \def\psset@doublesep#1{\def\psdoublesep{#1}} \psset@doublesep{1.25\pslinewidth} \def\psset@doublecolor#1{\pst@getcolor{#1}\psdoublecolor} \psset@doublecolor{white} % \newif\ifpsshadow \def\psset@shadow#1{% \@nameuse{psshadow#1}% \pst@setrepeatarrowsflag} \psset@shadow{false} \def\psset@shadowsize#1{\pst@getlength{#1}\psk@shadowsize} \psset@shadowsize{3pt} \def\psset@shadowangle#1{\pst@getangle{#1}\psk@shadowangle} \psset@shadowangle{-45} \def\psset@shadowcolor#1{\pst@getcolor{#1}\psshadowcolor} \psset@shadowcolor{darkgray} \def\pst@repeatarrowsflag{\z@} \def\pst@setrepeatarrowsflag{% \edef\pst@repeatarrowsflag{% \ifdim\psk@border\p@>\z@ 1\else\ifpsdoubleline 1\else \ifpsshadow 1\else \z@\fi\fi\fi}} % \def\psls@none{} \newdimen\pslinewidth \def\psset@linewidth#1{\pssetlength\pslinewidth{#1}} \psset@linewidth{.8pt} \def\psset@linecolor#1{\pst@getcolor{#1}\pslinecolor} \psset@linecolor{black} \def\psls@solid{\psk@linecap\space setlinecap stroke } % \def\psset@linecap#1{\pst@getint{#1}\psk@linecap}% hv 2007-12-01 \psset@linecap{0}% hv 2007-12-01 \def\psset@linejoin#1{\pst@getint{#1}\psk@linejoin}% hv 2007-10-13 \def\tx@setlinejoin{\psk@linejoin\space setlinejoin }% hv 2007-10-13 \psset@linejoin{0}% hv 2007-10-13 % \def\pst@missing{% \z@ \@pstrickserr{Missing number or dimension. 0 substituted}\@ehpa} % %%------------------- begin patch 15 HV 2004-05-15 ------------- %\def\psset@dash#1{% % \pst@expandafter\psset@@dash{#1} {\pst@missing} {\pst@missing} {}\@nil % \edef\psk@dash{\pst@number\pst@dimg \pst@number\pst@dimh}% %} %\def\psset@@dash#1 #2 #3\@nil{% %\pssetlength\pst@dimg{#1}% %\pssetlength\pst@dimh{#2}} %\psset@dash{5pt 3pt} \def\pst@empty{\z@} \def\psset@dash#1{% black white [ black white ] \pst@expandafter\psset@@dash{#1} {\pst@empty} {\pst@empty} % {\pst@missing} {\pst@missing} {}\@nil \edef\psk@dash{\pst@number\pst@dimg \pst@number\pst@dimh \pst@number\pst@dimc \pst@number\pst@dimd}% } \def\psset@@dash#1 #2 #3 #4 #5\@nil{% \pssetlength\pst@dimg{#1}% \pssetlength\pst@dimh{#2}% \pssetlength\pst@dimc{#3}% \pssetlength\pst@dimd{#4}% } \psset@dash{5pt 3pt 0pt 0pt}% black white black white %%------------------- end patch 15 HV 2004-05-15 ------------- \newif\ifpsdashadjust \def\psset@dashadjust#1{\@nameuse{psdashadjust#1}} \psset@dashadjust{true} \def\tx@DashLine{DashLine } \def\psls@dashed{% %%--------------------------------- hv 2006-04-29 beg --------------------- \psk@linecap\space setlinecap %%--------------------------------- hv 2006-04-29 end --------------------- \ifpsdashadjust % \psk@dash \pst@linetype\space \tx@DashLine \psk@dash \@ifundefined{pst@linetype}{2}{\pst@linetype}\space \tx@DashLine \else [ \psk@dash ] 0 setdash stroke \fi} % \def\psset@dotsep#1{\pst@getlength{#1}\psk@dotsep} \psset@dotsep{3pt} \def\tx@DotLine{DotLine } \def\psls@dotted{% \ifpsdashadjust \psk@dotsep \pst@linetype\space \tx@DotLine \else [ 0 \psk@dotsep CLW add ] 0 setdash 1 setlinecap stroke \fi% } \def\psset@linestyle#1{% \@ifundefined{psls@#1}% {\@pstrickserr{Line style `#1' not defined}\@eha}% {\edef\pslinestyle{#1}}% } \psset@linestyle{solid} %%--------------------------------- hv 2006-04-29 beg --------------------- \def\psset@linecap#1{% \def\psk@linecap{0}% \ifnum#1>-1 \ifnum#1<3 \pst@getint{#1}\psk@linecap% \fi\fi% } \psset{linecap=0} %--------------------------------- hv 2006-04-29 end --------------------- %------------------------- Transparency modes ---------------------------- \pst@def{setTransparency}< \psk@opacityalpha .setopacityalpha > \pst@def{setStrokeTransparency}< \psk@strokeopacityalpha .setopacityalpha > \pst@def{setBlendmode}< \ifcase\psk@blendmode /Normal \or /Compatible \or /Screen \or /Multiply %\or % /Hardlight \else /Normal \fi .setblendmode \psk@shapealpha .setshapealpha > % %--------------------------------- hv 2007-09-09 begin --------------------- % transparency needs a run through latex -> dvips -> ps2pdf14(!) % \def\psset@fillcolor#1{\pst@getcolor{#1}\psfillcolor} \psset@fillcolor{white} \def\psset@strokeopacity#1{\pst@checknum{#1}\psk@strokeopacityalpha }% for lines \psset@strokeopacity{1} \def\psset@opacity#1{\pst@checknum{#1}\psk@opacityalpha }% for filled areas \psset@opacity{1} \def\psset@shapealpha#1{\pst@checknum{#1}\psk@shapealpha } \psset@shapealpha{0.6} \def\psset@blendmode#1{\pst@getint{#1}\psk@blendmode }% must be one of % /Normal 0 % /Compatible 1 % /Screen 2 % /Multiply 3 % /HardLight 4 \psset@blendmode{0} % \def\tx@LineFill{LineFill } \def\tx@PenroseFill{PenroseFill } % \def\psfs@none{} \def\psfs@solid{\pst@fill{\pst@usecolor\psfillcolor \tx@setTransparency fill }} \def\psfs@eofill{\pst@fill{\pst@usecolor\psfillcolor \tx@setTransparency eofill}} \def\psfs@shape{\pst@fill{ \pst@usecolor\psfillcolor \tx@setBlendmode fill }} % %--------------------------------- hv 2007-09-09 end --------------------- % \def\psset@hatchwidth#1{\pst@getlength{#1}\psk@hatchwidth} \psset@hatchwidth{.8pt} \def\psset@hatchsep#1{\pst@getlength{#1}\psk@hatchsep} \psset@hatchsep{4pt} \def\psset@hatchcolor#1{\pst@getcolor{#1}\pshatchcolor} \psset@hatchcolor{black} \def\psset@hatchangle#1{\pst@getangle{#1}\psk@hatchangle} \psset@hatchangle{45} % ------------ hv 1.11 ------------ \def\psset@hatchsepinc#1{\pst@getlength{#1}\psk@hatchsepinc} \def\psset@hatchwidthinc#1{\pst@getlength{#1}\psk@hatchwidthinc} \psset@hatchwidthinc{0pt} \psset@hatchsepinc{0pt} % \def\pst@linefill{% \psk@hatchangle rotate \psk@hatchwidth SLW \pst@usecolor\pshatchcolor \psk@hatchsep \psk@hatchsepinc \psk@hatchwidthinc \tx@LineFill } % ------------ hv 1.11 ------------ % \def\psfs@vlines{\pst@fill\pst@linefill} \@namedef{psfs@vlines*}{\psfs@solid \psfs@vlines} \def\psfs@hlines{\pst@fill{90 rotate \pst@linefill}} \@namedef{psfs@hlines*}{\psfs@solid \psfs@hlines} \def\psfs@crosshatch{\psfs@vlines \psfs@hlines} \@namedef{psfs@crosshatch*}{\psfs@solid \psfs@vlines \psfs@hlines} % \def\psset@psscale#1{\pst@checknum{#1}\psk@psscale} \psset@psscale{1} % \def\pst@penroseFill{% gsave % restore in PenroseFill \pst@number\pslinewidth SLW \pst@usecolor\pshatchcolor \psk@psscale \tx@PenroseFill } \def\psfs@penrose{\pst@fill\pst@penroseFill} \@namedef{psfs@penrose*}{\psfs@solid \psfs@penrose} % \def\psset@fillstyle#1{% \edef\pst@tempg{#1}\def\pst@temph{none}% \ifx\pst@tempg\pst@temph \let\psk@fillstyle\relax \else \@ifundefined{psfs@#1}% {\@pstrickserr{Undefined fill style: `#1'}\@eha}% {\edef\psk@fillstyle{\expandafter\noexpand\csname psfs@#1\endcsname}}% \fi% } \def\psset@addfillstyle#1{% \@ifundefined{psfs@#1}% {\@pstrickserr{Undefined fill style: `#1'}\@eha}% {\edef\psk@fillstyle{% \expandafter\noexpand\psk@fillstyle \expandafter\noexpand\csname psfs@#1\endcsname}% }% } \psset@fillstyle{none} % \def\psset@arrows#1{% \begingroup \pst@activearrows \xdef\pst@tempg{#1}% \endgroup \expandafter\psset@@arrows\pst@tempg\@empty-\@empty\@nil \if@pst\else \@pstrickserr{Bad arrows specification: #1}\@ehpa \fi% } \def\psset@@arrows#1-#2\@empty#3\@nil{% \@psttrue \def\next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}% \expandafter\next\pst@arrowtable,#1-#1,\@nil \@ifundefined{psas@\pst@tempg}% {\@pstfalse\def\psk@arrowA{}}% {\let\psk@arrowA\pst@tempg}% \@ifundefined{psas@#2}% {\@pstfalse\def\psk@arrowB{}}% {\def\psk@arrowB{#2}}% } \def\psk@arrowA{} \def\psk@arrowB{} %\def\pst@arrowtable{,<->,<<->>,>-<,>>-<<,(-),[-]} \def\pst@arrowtable{,<->,<<->>,>-<,>>-<<,(-),[-],)-(,]-[,|>-<|,,D>-D>} % hv --1.16 \begingroup \catcode`\<=13 \catcode`\>=13 \catcode`\|=13 \gdef\pst@activearrows{\def<{\string<}\def>{\string>}\def|{\string|}} \endgroup \def\tx@BeginArrow{BeginArrow } \def\tx@EndArrow{EndArrow } % Redefininition of \psset@arrowscale to store value of X scale factor hv --1.12 %\def\psset@arrowscale#1{\pst@getscale{#1}\psk@arrowscale} \def\psset@arrowscale#1{% hv --1.12 \pst@@arrowscale@i#1 \@nil% hv -- 1.12 \pst@getscale{\pst@arrowscale}\psk@arrowscale}% hv --1.12 \def\pst@@arrowscale@i#1 #2\@nil{\edef\pst@arrowscale{#1}}% hv --1.12 \psset@arrowscale{1} % \def\psset@arrowsize#1{% \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil \edef\psk@arrowsize{\pst@number\pst@dimg \pst@tempg}% } \psset@arrowsize{1.5pt 2} \def\psset@arrowlength#1{\pst@checknum{#1}\psk@arrowlength} \psset@arrowlength{1.4} \def\psset@arrowinset#1{\pst@checknum{#1}\psk@arrowinset}% \psset@arrowinset{.4} \def\tx@Arrow{ \tx@setStrokeTransparency Arrow }% hv 2008-01-13 % new definitions of the missing arrows ---- hv 1.1.2 \def\tx@ArrowD{ \tx@setStrokeTransparency ArrowD }% hv 2008-01-13 % \@namedef{psas@<|}{ \psk@tbarsize\space \tx@Tbar 0 CLW 2 div T newpath true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow } % ]-[ arrow \def\tx@BracketOut{BracketOut } \@namedef{psas@[}{% /BracketOut {% CLW mul add dup CLW sub 2 div %/x ED mul CLW add /x ED mul neg /y ED /z CLW 2 div def x neg y moveto x neg CLW 2 div L x CLW 2 div L x y L stroke 0 CLW moveto } def \psk@bracketlength\space \psk@tbarsize\space \tx@BracketOut } % )-( arrow \def\tx@RoundBracketOut{ \tx@setStrokeTransparency RoundBracketOut }% hv 2008-01-13 \@namedef{psas@(}{% /RoundBracketOut {% CLW mul add dup 2 div %/x ED mul /x ED mul neg /y ED /mtrx CM def 0 CLW 2 div T x y mul 0 ne { x y scale } if 1 1 moveto .85 .5 .35 0 0 0 curveto -.35 0 -.85 .5 -1 1 curveto mtrx setmatrix stroke 0 CLW moveto } def \psk@rbracketlength\space \psk@tbarsize\space \tx@RoundBracketOut } % end of new definitions of the missing arrows ---- hv 1.12 \@namedef{psas@>}{ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow } \@namedef{psas@>>}{% false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow 0 h T gsave newpath false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow CP grestore CP newpath moveto 2 copy CLW \pst@arrowscale\space div SLW % set the original line width L stroke moveto } \@namedef{psas@<}{true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow} \@namedef{psas@<<}{ true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow CP newpath moveto 0 a neg gsave CLW \pst@arrowscale\space div SLW % set the original line width L stroke grestore 0 h neg T false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow } \@namedef{psas@D>}{ false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD }% hv 20071211 \@namedef{psas@D>D>}{ % hv 20071211 false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD 0 h Inset sub T gsave newpath false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@ArrowD CP grestore moveto } \@namedef{psas@|}{% \psk@tbarsize \tx@Tbar 0 CLW 2 div T newpath false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow } \@namedef{psas@>|*}{% 0 CLW -2 div T \psk@tbarsize \tx@Tbar 0 CLW 2 div T newpath false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow } \edef\pst@arrowtable{\pst@arrowtable,|<*->|*,|<->|} \def\psset@bracketlength#1{\pst@checknum{#1}\psk@bracketlength} \psset@bracketlength{.15} \def\tx@Bracket{Bracket } \@namedef{psas@]}{\psk@bracketlength \psk@tbarsize \tx@Bracket} \def\psset@rbracketlength#1{\pst@checknum{#1}\psk@rbracketlength} \psset@rbracketlength{.15} \def\tx@RoundBracket{RoundBracket } \@namedef{psas@)}{\psk@rbracketlength \psk@tbarsize \tx@RoundBracket} \def\psas@c{1 \psas@@c} \def\psas@cc{0 CLW 2 div T 1 \psas@@c} \def\psas@C{2 \psas@@c} \def\psas@@c{% setlinecap 0 0 moveto %%-------------------- v.1.04 begin HV 2004-05-18 ---------------- % 0 CLW 2 div L 0 0.1 L % changed value from 0.5 to 0.1 %%-------------------- v. 1.04 end HV 2004-05-18 ---------------- stroke 0 0 moveto } \def\psas@{} \psset@arrows{-} \def\tx@SD{ \tx@setTransparency SD } \def\tx@EndDot{EndDot } \def\psas@oo{{\pst@usecolor\psfillcolor true} true \psk@dotsize \tx@EndDot} \def\psas@o{{\pst@usecolor\psfillcolor true} false \psk@dotsize \tx@EndDot} \@namedef{psas@**}{{false} true \psk@dotsize \tx@EndDot} \@namedef{psas@*}{{false} false \psk@dotsize \tx@EndDot} \def\pst@par{} \def\addto@par#1{% \ifx\pst@par\@empty \def\pst@par{#1}% \else \expandafter\def\expandafter\pst@par\expandafter{\pst@par,#1}% \fi% } \def\addbefore@par#1{% \ifx\pst@par\@empty \def\pst@par{#1}% \else \toks@{#1}% \pst@toks\expandafter{\pst@par}% \edef\pst@par{\the\toks@,\the\pst@toks}% \fi% } \def\use@par{% \ifx\pst@par\@empty\else \expandafter\@psset\pst@par,\@nil \def\pst@par{}% \fi% } \def\pst@object#1{% \pst@ifstar{% \@ifnextchar[{\pst@@object{#1}}{\def\pst@par{}\@nameuse{#1@i}}}% } \def\pst@@object#1[#2]{% \def\pst@par{#2}% \@ifnextchar+{\@nameuse{#1@i}}{\@nameuse{#1@i}}} \def\newpsobject#1#2#3{% \@ifundefined{#2@i}% {\@pstrickserr{Graphics object `#2' not defined}\@eha}{% \@namedef{#1}{\pst@object{#1}}% \@namedef{#1@i}{\addbefore@par{#3}\@nameuse{#2@i}}}% \ignorespaces} \def\pst@getarrows#1{\@ifnextchar({#1}{\pst@@getarrows{#1}}} % ------------------------- hv 1.10 beg ------------------------ %\def\pst@@getarrows#1#2{\addto@par{arrows=#2}#1} \def\pst@@getarrows#1#2{% \def\pst@tempa{#2}% prevent empty arrow arguments, to allow \psline{}(...)(...) \ifx\pst@tempa\@empty\addto@par{arrows=-}\else\addto@par{arrows=#2}\fi#1} % ------------------------- hv 1.10 end ------------------------ % \def\begin@ClosedObj{% \leavevmode \pst@killglue \begingroup \use@par \solid@star \ifpsdoubleline \pst@setdoublesep \fi \init@pscode% } \def\end@ClosedObj{% \ifpsshadow \pst@closedshadow \fi \ifdim\psk@border\p@>\z@ \pst@addborder \fi \psk@fillstyle \pst@stroke \ifpsdoubleline \pst@doublestroke \fi \ifshowpoints % DG modification begin - Mar. 4, 1995 %\addto@pscode{Points aload length 2 div cvi /N ED \psdots@iii}% \pst@OpenShowPoints % DG modification end \fi \use@pscode \endgroup \ignorespaces% } \def\begin@OpenObj{% \begin@ClosedObj \let\pst@linetype\pst@arrowtype \pst@addarrowdef% } \def\begin@AltOpenObj{% \begin@ClosedObj \def\pst@repeatarrowsflag{\z@}% \def\pst@linetype{0}} % \def\end@OpenObj{% \ifpsshadow \pst@openshadow \fi \ifdim\psk@border\p@>\z@ \pst@addborder \fi \psk@fillstyle \pst@stroke \ifpsdoubleline \pst@doublestroke \fi \ifnum\pst@repeatarrowsflag>\z@ \pst@repeatarrows \fi \ifshowpoints \pst@OpenShowPoints \fi \use@pscode \endgroup \ignorespaces} % \def\begin@SpecialObj{% \leavevmode \pst@killglue \begingroup \use@par \init@pscode} % \def\end@SpecialObj{% \use@pscode \endgroup \ignorespaces} % \def\pst@code{}% \def\init@pscode{% \addto@pscode{% \pst@number\pslinewidth SLW \pst@usecolor\pslinecolor}% } \def\addto@pscode#1{\xdef\pst@code{\pst@code#1\space}} \def\use@pscode{% \pstverb{ \pst@dict \tx@STP \pst@newpath \psk@origin \psk@swapaxes \pst@code end }% \gdef\pst@code{}% } \def\pst@newpath{newpath } % \def\pst@@killglue{\unskip\ifdim\lastskip>\z@\expandafter\pst@@killglue\fi} \def\KillGlue{\let\pst@killglue\pst@@killglue} \def\DontKillGlue{\let\pst@killglue\relax} \DontKillGlue % \def\solid@star{% \if@star \pslinewidth=\z@ \psdoublelinefalse \def\pslinestyle{none}% \def\psk@fillstyle{\psfs@solid}% \let\psfillcolor\pslinecolor \fi} % \def\pst@setdoublesep{% \pst@getlength\psdoublesep\psdoublesep \pslinewidth=2\pslinewidth \advance\pslinewidth\psdoublesep\p@ \let\pst@setdoublesep\relax} \def\tx@Shadow{Shadow } \def\pst@closedshadow{% \addto@pscode{% gsave \psk@shadowsize \psk@shadowangle \tx@PtoC \tx@Shadow \pst@usecolor\psshadowcolor gsave fill grestore stroke grestore gsave \pst@usecolor\psfillcolor gsave fill grestore stroke grestore}} % \def\pst@openshadow{% \addto@pscode{% gsave \psk@shadowsize \psk@shadowangle \tx@PtoC \tx@Shadow \pst@usecolor\psshadowcolor \ifx\psk@fillstyle\relax\else gsave fill grestore \fi stroke}% \pst@repeatarrows% \addto@pscode{grestore}% \ifx\psk@fillstyle\relax\else \addto@pscode{% gsave \pst@usecolor\psfillcolor gsave fill grestore stroke grestore}% \fi} % \def\pst@addborder{% \addto@pscode{% gsave \psk@border 2 mul CLW add SLW \pst@usecolor\psbordercolor stroke grestore}} % \def\pst@stroke{% \ifx\pslinestyle\@none\else \addto@pscode{% gsave \pst@number\pslinewidth SLW \pst@usecolor\pslinecolor \tx@setStrokeTransparency % hv 2008-01-13 \@nameuse{psls@\pslinestyle} grestore}% \fi} % \def\pst@fill#1{\addto@pscode{gsave #1 grestore}}% % \def\pst@doublestroke{% \addto@pscode{% gsave \psdoublesep SLW \pst@usecolor\psdoublecolor stroke grestore }} % \def\pst@arrowtype{% \ifx\psk@arrowB\@empty 0 \else -2 \fi \ifx\psk@arrowA\@empty 0 \else -1 \fi add } % \def\pst@addarrowdef{% \addto@pscode{% /ArrowA { \ifx\psk@arrowA\@empty \pst@oplineto \else \pst@arrowdef{A} moveto \fi } def /ArrowB { \ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi } def }} % \def\pst@arrowdef#1{% \ifnum\pst@repeatarrowsflag>\z@ /Arrow#1c [ 6 2 roll ] cvx def Arrow#1c \fi \tx@BeginArrow \psk@arrowscale \@nameuse{psas@\@nameuse{psk@arrow#1}} \tx@EndArrow } % \def\pst@repeatarrows{% \addto@pscode{% gsave \ifx\psk@arrowA\@empty\else ArrowAc ArrowA pop pop \fi \ifx\psk@arrowB\@empty\else ArrowBc ArrowB pop pop pop pop \fi grestore }} % \def\pst@OpenShowPoints{% \addto@pscode{% gsave \psk@dotsize \@nameuse{psds@\psk@dotstyle} newpath Points aload length 2 div 2 sub cvi /N ED N 0 ge { \ifx\psk@arrowA\@empty Dot \else pop pop \fi N { Dot } repeat \ifx\psk@arrowB\@empty Dot \else pop pop \fi } { N 2 mul { pop } repeat } ifelse grestore }} % \def\pscustom{\pst@object{pscustom}} \long\def\pscustom@i#1{% \begin@SpecialObj \solid@star \let\pst@ifcustom\iftrue \let\begin@ClosedObj\begin@CustomObj \let\end@ClosedObj\endgroup \def\begin@OpenObj{\begin@CustomObj\pst@addarrowdef}% \let\end@OpenObj\endgroup \let\begin@AltOpenObj\begin@CustomObj \def\begin@SpecialObj{% \begingroup \pst@misplaced{special graphics object}% \def\addto@pscode####1{} \let\end@SpecialObj\endgroup}% \def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}% \def\psclip##1{\pst@misplaced\psclip}% \def\pst@repeatarrowsflag{\z@}% \let\pst@setrepeatarrowsflag\relax \showpointsfalse \let\showpointstrue\relax \def\pst@linetype{\pslinetype}% \let\psset@liftpen\psset@@liftpen \psset@liftpen{\z@}% \def\pst@cp{/currentpoint load stopped pop }% \def\pst@oplineto{/lineto load stopped { moveto } if }% \def\pst@optcp##1##2{% \ifnum##1=\z@\def##2{/currentpoint load stopped { 0 0 } if }\fi}% \let\caddto@pscode\addto@pscode \def\cuse@par##1{{\use@par##1}}% \the\pst@customdefs \setbox\pst@hbox=\hbox{#1}% \psk@fillstyle \pst@stroke \end@SpecialObj} % \def\begin@CustomObj{% \begingroup \use@par \addto@pscode{% \pst@number\pslinewidth SLW \pst@usecolor\pslinecolor }% } \def\pst@oplineto{moveto } \def\pst@cp{} \def\pst@optcp#1#2{} \def\psset@liftpen#1{} \def\psset@@liftpen#1{% \ifcase#1\relax \def\psk@liftpen{\z@}% \def\pst@cp{/currentpoint load stopped pop }% \def\pst@oplineto{/lineto load stopped { moveto } if }% \or \def\psk@liftpen{1}% \def\pst@cp{}% \def\pst@oplineto{/lineto load stopped { moveto } if }% \or \def\psk@liftpen{2}% \def\pst@cp{}% \def\pst@oplineto{moveto }% \fi% } \psset@liftpen{0} \def\psk@liftpen{-1} % \def\psset@linetype#1{% \pst@getint{#1}\pslinetype %----------------- hv begin 2006-04-20 ------------- patch 1.14b \ifnum\pst@cntg<-3 % \ifnum\pst@dimg<-3 %----------------- hv end 2004-05-07 ------------- patch 1.14b \@pstrickserr{linetype must be greater than -3}\@ehpa %----------------- hv begin 2004-05-07 ------------- patch 15 % \def\pslinetype{0}% \def\pslinetype{2}% \fi% } %\psset@linetype{0} \psset@linetype{2}% otherwise there is a problem when using e.g. % \psaxes[axesstyle=frame,linestyle=dashed]{->}(3,-2) %----------------- hv end 2004-05-07 ------------- patch 15 % \def\caddto@pscode#1{% \@pstrickserr{Command can only be used in \string\pscustom}\@ehpa% } \let\cuse@par\caddto@pscode % \def\tx@MSave{% /msavematrx [ tx@Dict /msavematrx known % does msavematrix exists? { msavematrx aload pop } if CM % matrix currentmatrix ] def %----------------- hv begin 2004-05-07 ------------- patch 15 msavematrx %----------------- hv end 2004-05-07 ------------- patch 15 } \def\tx@MRestore{% a typo in pstricks with msavematrx tx@Dict /msavematrx known { length 0 gt } { false } ifelse { msavematrx aload pop setmatrix } if } % \newtoks\pst@customdefs \pst@customdefs{% \def\newpath{\addto@pscode{newpath}}% \def\moveto(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}% \def\closepath{\addto@pscode{closepath}}% \def\gsave{\begingroup\addto@pscode{gsave}}% \def\grestore{\endgroup\addto@pscode{grestore}}% % DG/SR modification begin - May 12, 1997 - Patch 2 % \def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}% \def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor translate}}% % DG/SR modification end \def\rotate#1{\pst@@getangle{#1}\addto@pscode{\pst@angle rotate}}% \def\scale#1{\pst@getscale{#1}\pst@tempg\addto@pscode{\pst@tempg}}% \def\msave{\addto@pscode{\tx@MSave}}% \def\mrestore{\addto@pscode{\tx@MRestore}}% \def\swapaxes{\addto@pscode{-90 rotate -1 1 scale}}% \def\stroke{\pst@object{stroke}}% \def\fill{\pst@object{fill}}% \def\openshadow{\pst@object{openshadow}}% \def\closedshadow{\pst@object{closedshadow}}% % DG/SR modification begin - Jan. 7, 1998 - Patch 8 % \def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor tx@Shadow}}% \def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor \tx@Shadow}}% % DG/SR modification end \def\lineto{\pst@onecoor{lineto}}% \def\rlineto{\pst@onecoor{rlineto}}% \def\curveto{\pst@threecoor{curveto}}% \def\rcurveto{\pst@threecoor{rcurveto}}% \def\code#1{\addto@pscode{#1}}% \def\coor(#1){\pst@@getcoor{#1}\addto@pscode\pst@coor\@ifnextchar({\coor}{}}% \def\rcoor{\pst@getcoors{}{}}% \def\dim#1{\pssetlength\pst@dimg{#1}\addto@pscode{\pst@number\pst@dimg}}% \def\setcolor#1{% % ----------------hv begin 2004-05-07-------------------- patch 15 % \@ifundefined{color@#1}{}{\addto@pscode{\use@color{#1}}}}% % \@ifundefined{color@#1}{}{\addto@pscode{\pst@usecolor{#1}}}}% \@ifundefined{\string\color@#1}{}{\addto@pscode{\pst@usecolor{#1}}}}% hv 1.14 2005-12-17 % ----------------hv end 2004-05-07-------------------- \def\arrows#1{{\psset@arrows{#1}\pst@addarrowdef}}% \let\file\pst@rawfile } % END \pst@customdefs % \def\closedshadow@i{\cuse@par\pst@closedshadow} \def\openshadow@i{\cuse@par\pst@openshadow} \def\stroke@i{\cuse@par\pst@stroke}% \def\fill@i{\cuse@par\psk@fillstyle}% \def\pst@onecoor#1(#2){% \pst@@getcoor{#2}% \addto@pscode{\pst@coor #1}} \def\pst@threecoor#1(#2)#3(#4)#5(#6){% \begingroup \pst@getcoor{#2}\pst@tempa \pst@getcoor{#4}\pst@tempb % DG/SR modification begin - Aug. 4, 1999 - Patch 11 %\pst@getcoor{#6}\pst@tembc \pst@getcoor{#6}\pst@tempc % DG/SR modification end \addto@pscode{\pst@tempa \pst@tempb \pst@tempc #1}% \endgroup} % \def\pst@rawfile#1{% \begingroup \def\do##1{\catcode`##1=12\relax}" \dospecials \catcode`\%=14 \pst@@rawfile{#1}% \endgroup} % \def\pst@@rawfile#1{% \immediate\openin1 #1 \ifeof1 \@pstrickserr{File `#1' not found}\@ehpa \else \immediate\read1 to \pst@tempg \loop \ifeof1 \@pstfalse\else\@psttrue\fi \if@pst \addto@pscode\pst@tempg \immediate\read1 to \pst@tempg \repeat \fi \immediate\closein1\relax} % \def\tx@NArray{NArray } \def\tx@NArray{NArray } \def\tx@Line{Line } \def\tx@Arcto{Arcto } \def\tx@CheckClosed{CheckClosed } \def\tx@Polygon{Polygon } \def\psset@gangle#1{\pst@getangle{#1}\psk@gangle} \psset@gangle{0} % \def\tx@Diamond{Diamond } \def\psdiamond{\pst@object{psdiamond}} \def\psdiamond@i(#1){\@ifnextchar({\psdiamond@ii(#1)}{\psdiamond@ii(0,0)(#1)}} \def\psdiamond@ii(#1)(#2){% \begin@ClosedObj \pst@getcoor{#1}\pst@tempa \pst@getcoor{#2}\pst@tempb \addto@pscode{% \psline@iii pop \psk@dimen \pst@tempb \psk@gangle \pst@tempa \tx@Diamond }% \def\pst@linetype{4}% \end@ClosedObj} % \def\tx@Triangle{Triangle } \def\pstriangle{\pst@object{pstriangle}} \def\pstriangle@i(#1){\@ifnextchar({\pstriangle@ii(#1)}{\pstriangle@ii(0,0)(#1)}} \def\pstriangle@ii(#1)(#2){% \begin@ClosedObj \pst@getcoor{#1}\pst@tempa% the center of the baseline \pst@getcoor{#2}\pst@tempb% the height of the triangle \addto@pscode{% \psline@iii pop % no showpoints option \psk@dimen % outer/inner/middle \pst@tempb \psk@gangle % rotating angle \pst@tempa \tx@Triangle }% \def\pst@linetype{2}% \end@ClosedObj} % \def\tx@CCA{CCA } \def\tx@CCA{CCA } \def\tx@CC{CC } \def\tx@IC{IC } \def\tx@BOC{BOC } \def\tx@NC{NC } \def\tx@EOC{EOC } \def\tx@BAC{BAC } \def\tx@NAC{NAC } \def\tx@EAC{EAC } \def\tx@OpenCurve{OpenCurve } \def\tx@AltCurve{AltCurve } \def\tx@ClosedCurve{ClosedCurve } \def\psset@curvature#1{% \edef\pst@tempg{#1 }% \expandafter\psset@@curvature\pst@tempg * * * \@nil} \def\psset@@curvature#1 #2 #3 #4\@nil{% \pst@checknum{#1}\pst@tempg \pst@checknum{#2}\pst@temph \pst@checknum{#3}\pst@tempi \edef\psk@curvature{\pst@tempg \pst@temph \pst@tempi}} \psset@curvature{1 .1 0} \def\pscurve{\pst@object{pscurve}} \def\pscurve@i{% \pst@getarrows{% \begin@OpenObj \pst@getcoors[\pscurve@ii% }% } \def\pscurve@ii{% \addto@pscode{ \pst@cp % current point \psk@curvature\space /c ED /b ED /a ED \ifshowpoints true \else false \fi \tx@OpenCurve }% \end@OpenObj% } \def\psecurve{\pst@object{psecurve}} \def\psecurve@i{% \pst@getarrows{% \begin@OpenObj \pst@getcoors[\psecurve@ii}} \def\psecurve@ii{% \addto@pscode{% \psk@curvature\space /c ED /b ED /a ED \ifshowpoints true \else false \fi \tx@AltCurve}% \end@OpenObj} \def\psccurve{\pst@object{psccurve}} \def\psccurve@i{% \begin@ClosedObj \pst@getcoors[\psccurve@ii} \def\psccurve@ii{% \addto@pscode{% \psk@curvature\space /c ED /b ED /a ED \ifshowpoints true \else false \fi \tx@ClosedCurve}% \def\pst@linetype{1}% \end@ClosedObj} \def\psset@dotsize#1{% \pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil \edef\psk@@dotsize{\pst@number\pst@dimg}% \let\psk@@@dotsize\pst@tempg \edef\psk@dotsize{% /DS \psk@@dotsize \psk@@@dotsize CLW mul add 2 div def }} \psset@dotsize{2pt 2} \def\psset@dotscale#1{% \pst@getscale{#1}\psk@dotscale \ifx\psk@dotscale\@empty \def\psk@xdotscale{1 }% \def\psk@ydotscale{1 }% \else \let\psk@xdotscale\pst@tempg \let\psk@ydotscale\pst@temph \fi} % DG/SR modification begin - Oct. 17, 1997 - Patch 5 %\psset@dotscale{1} % DG/SR modification end \def\pst@Getangle#1#2{% \pst@getangle{#1}\pst@tempg \def\pst@temph{0. }% \ifx\pst@tempg\pst@temph \def#2{}% \else \edef#2{\pst@tempg\space rotate }% \fi} \def\psset@dotangle#1{% \pst@getangle{#1}\psk@@dotangle \ifdim\psk@@dotangle\p@=\z@ \let\psk@dotangle\@empty \else % DG/SR modification begin - Aug. 8, 1997 - Patch 4 %\edef\psk@dotangle{\psk@@dotangle rotate } \edef\psk@dotangle{\psk@@dotangle rotate }% % DG/SR modification end \fi} % \psset@dotangle{0} \def\pst@getdotsize{% \pst@dimg=\psk@@@dotsize\pslinewidth \advance\pst@dimg\psk@@dotsize\p@ \pst@dimh=\psk@ydotscale\pst@dimg \pst@dimg=\psk@xdotscale\pst@dimg \divide\pst@dimh 2 \divide\pst@dimg 2\relax} % DG/SR modification begin - Oct. 17, 1997 - Patch 5 \psset@dotscale{1} % DG/SR modification end % \def\psdot{\pst@object{psdot}} \def\psdot@i{\@ifnextchar({\psdot@ii}{\psdot@ii(\z@,\z@)}} \def\psdot@ii(#1){% \begin@SpecialObj% % hv modification 1.13 2005-11-28 \solid@star% % hv modification end \pst@@getcoor{#1}% \addto@pscode{ \psk@dotsize \@nameuse{psds@\psk@dotstyle}% \pst@coor Dot}% \end@SpecialObj} % \def\psdots{\pst@object{psdots}} \def\psdots@i{% \begin@SpecialObj% \pst@getcoors[\psdots@ii} \def\psdots@ii{% \addto@pscode{false \tx@NArray \psdots@iii}% \end@SpecialObj} \def\psdots@iii{% \psk@dotsize \@nameuse{psds@\psk@dotstyle} newpath n { transform floor .5 add exch floor .5 add exch itransform Dot } repeat} % % DG: dead code (to suppress until \psset@dotstyle) ? - Aug. 4, 1997 \def\tx@SQ{SQ } \def\tx@ST{ST } \def\tx@SP{SP } % \def\pst@gdot#1{/Dot { gsave T \psk@dotangle \psk@dotscale #1 grestore } def } % \@namedef{psds@*}{\pst@gdot{0 0 DS \tx@SD}} \@namedef{psds@o}{% /r2 DS CLW sub def \pst@gdot{0 0 DS \tx@SD \pst@usecolor\psfillcolor 0 0 r2 \tx@SD}} \@namedef{psds@square*}{% /r1 DS .886 mul def \pst@gdot{r1 \tx@SQ}} \@namedef{psds@square}{% /r1 DS .886 mul def /r2 r1 CLW sub def \pst@gdot{r1 \tx@SQ \pst@usecolor\psfillcolor r2 \tx@SQ}} \@namedef{psds@triangle*}{% /y1 DS .778 mul neg def /x1 y1 1.732 mul neg def \pst@gdot{x1 y1 \tx@ST}} \@namedef{psds@triangle}{% /y1 DS .778 mul neg def /x1 y1 1.732 mul neg def /y2 y1 CLW add def /x2 y2 1.732 mul neg def \pst@gdot{x1 y1 \tx@ST \pst@usecolor\psfillcolor x2 y2 \tx@ST}} \@namedef{psds@pentagon*}{% /r1 DS 1.149 mul def \pst@gdot{r1 \tx@SP}} \@namedef{psds@pentagon}{% DS .93 mul dup 1.236 mul /r1 ED CLW sub 1.236 mul /r2 ED \pst@gdot{r1 \tx@SP \pst@usecolor\psfillcolor r2 \tx@SP}} \@namedef{psds@+}{% /DS DS 1.253 mul def \pst@gdot{DS 0 moveto DS neg 0 L stroke 0 DS moveto 0 DS neg L stroke}} \@namedef{psds@|}{% \psk@tbarsize CLW mul add 2 div /DS ED \pst@gdot{0 DS moveto 0 DS neg L stroke}} % DG: end dead code? % \def\psset@dotstyle#1{% \@ifundefined{psds@#1}% {\@pstrickserr{Dot style `#1' not defined}\@eha}% {\edef\psk@dotstyle{#1}}} \psset@dotstyle{*} % \def\tx@FontDot{FontDot } \def\newpsfontdot#1[#2]#3#4{% \@namedef{psds@#1}{% /#3 \psk@@dotangle [#2] \tx@FontDot % DG/SR modification begin - Dec. 12, 1999 - Patch 14 %/Dot { moveto #4 show } bind def }} /Dot { moveto gsave \psk@dotscale #4 show grestore } bind def }} % DG/SR modification end \def\newpsfontdotH#1[#2]#3#4#5{% for filled objects \@namedef{psds@#1}{% /#3 \psk@@dotangle [#2] \tx@FontDot /Dot { moveto % \iftrue % DG/SR modification begin - Dec. 23, 1999 - Patch 14 %gsave \pst@usecolor\psfillcolor #5 show grestore %\fi %#4 show gsave \psk@dotscale \pst@usecolor\psfillcolor #5 show grestore % fill first % \fi gsave \psk@dotscale #4 show grestore % show the unfilled one % DG/SR modification end } bind def }} % \pstheader{pst-dots.pro} \newpsfontdot{*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(b)} \newpsfontdotH{o}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(c)}{(b)} \newpsfontdotH{Bo}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(C)}{(b)} \newpsfontdotH{triangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(t)}{(u)} \newpsfontdotH{Btriangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(T)}{(u)} \newpsfontdot{triangle*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)} \newpsfontdotH{square}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(s)}{(r)} \newpsfontdotH{Bsquare}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(S)}{(r)} \newpsfontdot{square*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(r)} \newpsfontdotH{pentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(p)}{(q)} \newpsfontdotH{Bpentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(P)}{(q)} \newpsfontdot{pentagon*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(q)} % DG/SR modification begin - Mar. 18, 1997 and Dec. 16, 1999 - Patch 14 %\newpsfontdot{diamond*}% %[1.9 0.0 0.0 1.9 -0.4598 -0.70775]{Symbol}{} %\newpsfontdot{diamond}% %[2.3 0.0 0.0 2.3 -0.8533 -0.5336]{Symbol}{} % D.G. modification begin - Jan. 17, 2000 \newpsfontdotH{diamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(d)}{(l)} \newpsfontdotH{Bdiamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(D)}{(l)} \newpsfontdot{diamond*}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(l)} % DG/SR modification end \newpsfontdot{oplus}[1.44928 0.0 0.0 1.44928 -0.562319 -0.478261]{Symbol}{} \newpsfontdot{otimes}[1.44928 0.0 0.0 1.44928 -0.562319 -0.475362]{Symbol}{} \newpsfontdot{x}[1.8 0.0 0.0 1.8 -0.495 -0.4788]{Symbol}{} \newpsfontdot{+}[2.3 0.0 0.0 2.3 -0.6486 -0.5819]{Times-Roman}{<2B>} \newpsfontdot{asterisk}[2.43309 0.0 0.0 2.43309 -0.609489 -1.14477]{Times-Roman}{<2A>} \newpsfontdot{B+}[2.3 0.0 0.0 2.3 -0.6555 -0.5819]{Times-Bold}{<2B>} \newpsfontdot{Basterisk}[2.29358 0.0 0.0 2.29358 -0.576835 -1.08486]{Times-Bold}{<2A>} \newpsfontdot{|}[1.98413 0.0 0.0 1.38 -0.258929 -0.5]{Helvetica}{(|)} % DG/SR modification begin - Oct. 27, 1997 - Patch 7 %[1.98413 0.0 0.0 1.98413 -0.258929 -0.712302]{Helvetica}{(|)} % DG/SR modification end \newpsfontdot{B|}[1.98413 0.0 0.0 1.38 -0.277778 -0.5]{Helvetica-Bold}{(|)}% % DG/SR modification begin - Oct. 27, 1997 - Patch 7 %[1.98413 0.0 0.0 1.98413 -0.277778 -0.78302]{Helvetica-Bold}{(|)} % DG/SR modification end \iffalse \newpsfontdot{*}[2.77778 0.0 0.0 2.77778 -0.638889 -0.813889]{Symbol}{} \newpsfontdot{o}[3.33333 0.0 0.0 3.33333 -0.666667 -1.78167]{Symbol}{} \newpsfontdot{Bo}[4.69484 0.0 0.0 4.69484 -0.78169 -2.97418]{Times-Bold}{} \fi % Etienne Riga \newpsfontdot{Asterisk}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(k)} \newpsfontdot{BoldAsterisk}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(K)} \newpsfontdotH{SolidAsterisk}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(J)}{(b)} % \newpsfontdotH{Pentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(p)}{(q)} \newpsfontdotH{BoldPentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(P)}{(q)} \newpsfontdot{SolidPentagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(q)} \newpsfontdotH{Hexagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(h)}{(G)} \newpsfontdotH{BoldHexagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(H)}{(G)} \newpsfontdot{SolidHexagon}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(G)} \newpsfontdotH{Octogon}[1 0 0 1 0 0]{PSTricksDotFont}{(f)}{(g)} \newpsfontdotH{BoldOctogon}[1 0 0 1 0 0]{PSTricksDotFont}{(F)}{(g)} \newpsfontdot{SolidOctogon}[1 0 0 1 0 0]{PSTricksDotFont}{(g)} % \newpsfontdot{Bullet}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(b)} \newpsfontdotH{Circle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(c)}{(b)} \newpsfontdotH{BoldCircle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(C)}{(b)} %\newpsfontdot{SolidCircle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)} \newpsfontdotH{Triangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(t)}{(u)} \newpsfontdotH{BoldTriangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(T)}{(u)} \newpsfontdot{SolidTriangle}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)} \newpsfontdotH{Square}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(s)}{(r)} \newpsfontdotH{BoldSquare}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(S)}{(r)} \newpsfontdot{SolidSquare}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(r)} \newpsfontdot{Add}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(a)} \newpsfontdot{BoldAdd}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(A)} \newpsfontdot{Mul}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(x)} \newpsfontdot{BoldMul}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(X)} \newpsfontdotH{Oplus}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(m)}{(b)} \newpsfontdotH{BoldOplus}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(M)}{(b)} \newpsfontdotH{SolidOplus}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(e)}{(b)} \newpsfontdotH{Otimes}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(n)}{(b)} \newpsfontdotH{BoldOtimes}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(N)}{(b)} \newpsfontdotH{SolidOtimes}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(E)}{(b)} \newpsfontdot{Bar}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(i)} \newpsfontdot{BoldBar}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(I)} \newpsfontdotH{Diamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(d)}{(l)} \newpsfontdotH{BoldDiamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(D)}{(l)} \newpsfontdot{SolidDiamond}[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(l)} %% \newdimen\pslinearc \def\psset@linearc#1{\pssetlength\pslinearc{#1}} \psset@linearc{0pt} % \def\psline{\pst@object{psline}} \def\psline@i{% \pst@getarrows{% \begin@OpenObj \pst@getcoors[\psline@ii% }% } \def\psline@ii{% \addto@pscode{ \pst@cp % current point \psline@iii % arc and lineto type \tx@Line % .pro function }% \end@OpenObj% } \def\psline@iii{% \ifdim\pslinearc>\z@ /r \pst@number\pslinearc def /Lineto { \tx@Arcto } def \else /Lineto /lineto load def \fi \ifshowpoints true \else false \fi \tx@setlinejoin % hv 2007-10-13 } \def\qline(#1)(#2){% \def\pst@par{}% \begin@SpecialObj \def\pst@linetype{0}% \pst@getcoor{#1}\pst@tempa \pst@@getcoor{#2}% \addto@pscode{% \pst@tempa moveto \pst@coor L \@nameuse{psls@\pslinestyle}% }% \end@SpecialObj} \def\pspolygon{\pst@object{pspolygon}} \def\pspolygon@i{% \begin@ClosedObj% \def\pst@cp{}% \pst@getcoors[\pspolygon@ii% } \def\pspolygon@ii{% \addto@pscode{\psline@iii \tx@Polygon}% \def\pst@linetype{1}% \end@ClosedObj} % \def\psset@framearc#1{\pst@checknum{#1}\psk@framearc} \psset@framearc{0} % \def\psset@cornersize#1{\pst@expandafter\psset@@cornersize{#1}\@nil} \def\psset@@cornersize#1#2\@nil{% \if #1a\relax \def\psk@cornersize{\pst@number\pslinearc false }% \else\def\psk@cornersize{\psk@framearc true }% \fi} \psset@cornersize{relative} % \def\tx@Rect{Rect } \def\tx@OvalFrame{OvalFrame } \def\tx@Frame{Frame } % \def\psset@dimen#1{\pst@expandafter\psset@@dimen{#1}\@nil} \def\psset@@dimen#1#2\@nil{% \if #1o\relax% outer \def\psk@dimen{.5 }% \else \if #1m\relax% middle \def\psk@dimen{0 }% \else \if #1i\relax% inner \def\psk@dimen{-.5 }% \fi\fi\fi} \psset@dimen{outer} % \def\psframe{\pst@object{psframe}} \def\psframe@i(#1){% \@ifnextchar({\psframe@ii(#1)}{\psframe@ii(0,0)(#1)}} \def\psframe@ii(#1)(#2){% \begin@ClosedObj \pst@getcoor{#1}\pst@tempa \pst@@getcoor{#2}% \addto@pscode{\psk@cornersize \pst@tempa \pst@coor \psk@dimen \tx@Frame}% \def\pst@linetype{2}% \showpointsfalse \end@ClosedObj% } % \def\psTextFrame{\pst@object{psTextFrame}} \def\psTextFrame@i(#1)(#2)#3{% \addbefore@par{ref=c}% to prevent an empty value \leavevmode% \pst@killglue \begingroup \use@par \ifx\psk@yref\relax \def\psk@yref{0}\fi% no Baseline possible \SpecialCoor \pst@getcoor{#1}\pst@tempA \pst@getcoor{#2}\pst@tempB \if@star\psframe*(#1)(#2)\else\psframe(#1)(#2)\fi \rput(! \pst@tempA \pst@tempB % x1 y1 x2 y2 exch 4 -1 roll % y1 y2 x2 x1 dup /x1 ED % y1 y2 x2 x1 sub /dx ED % y1 y2 exch dup /y1 ED % y2 y1 sub /dy ED x1 dx \psk@xref\space mul add \pst@number\psxunit div y1 dy \psk@yref\space mul add \pst@number\psyunit div ){#3} \endgroup \ignorespaces} % \def\tx@BezierNArray{BezierNArray } \def\tx@OpenBezier{OpenBezier } \def\tx@ClosedBezier{ClosedBezier } \def\tx@BezierShowPoints{BezierShowPoints } \def\tx@BezierCurve{BezierCurve } \def\pst@BezierType{2 } % the default % \def\psbezier{\pst@object{psbezier}} \def\psbezier@i{% \pst@getarrows{% \begin@OpenObj \pst@getcoors[\psbezier@ii% }% } \def\psbezier@ii{% \addto@pscode{% % DG/SR modification begin - Apr. 28, 1997 - Patch 1 % \psbezier doesn't work inside \pscustom \pst@cp % DG/SR modification end \ifshowpoints true \else false \fi \tx@OpenBezier \ifshowpoints \tx@BezierShowPoints \fi}% \end@OpenObj} \def\pscbezier{\pst@object{pscbezier}} \def\pscbezier@i{% \begin@ClosedObj \pst@getcoors[\pscbezier@ii} \def\pscbezier@ii{% \addto@pscode{% \ifshowpoints true \else false \fi \tx@ClosedBezier \ifshowpoints \tx@BezierShowPoints \fi}% \chardef\pst@linetype=1 \end@ClosedObj} \iffalse \def\psset@epsilon#1{\pst@checknum{#1}\psk@epsilon} \psset@epsilon{0.005} % 200 steps for one curve % \def\psBezier#1{% % allowed order is 1 ... 9 \ifnum#1>0 \ifnum#1<10 \def\pst@BezierType{#1 }\fi\fi% \pst@object{psBezier}} \def\psBezier@i{% \pst@getarrows{% \begin@OpenObj \pst@getcoors[\psBezier@ii% }} \def\psBezier@ii{% \addto@pscode{% \psk@epsilon % step for Bezier T=0,0+epsilon,0+i*epsilon,...,1 \pst@BezierType % type of the Bezier curve 2,3,4,... \tx@BezierCurve \ifshowpoints \tx@BezierShowPoints \fi }% \end@OpenObj} \fi % \def\tx@Parab{Parab } \def\psparabola{\pst@object{psparabola}}% 1.15a 2006-01-05 (hv) \def\psparabola@i{\pst@getarrows\psparabola@ii} \def\psparabola@ii#1(#2)#3(#4){% \begin@OpenObj \pst@getcoor{#2}\pst@tempa \pst@@getcoor{#4}% \addto@pscode{\pst@tempa \pst@coor \tx@Parab}% \end@OpenObj} \let\parabola\psparabola% compatibility (hv) % \def\psset@gridwidth#1{\pst@getlength{#1}\psk@gridwidth} \psset@gridwidth{.8pt} \def\psset@griddots#1{% \pst@cntg=#1\relax \edef\psk@griddots{\the\pst@cntg}} \psset@griddots{0} \def\psset@gridcolor#1{\pst@getcolor{#1}\psgridcolor} \psset@gridcolor{black} \def\psset@subgridwidth#1{\pst@getlength{#1}\psk@subgridwidth} \psset@subgridwidth{.4pt} \def\psset@subgridcolor#1{\pst@getcolor{#1}\pssubgridcolor} \psset@subgridcolor{gray} \def\psset@subgriddots#1{% \pst@cntg=#1\relax\edef\psk@subgriddots{\the\pst@cntg}} \psset@subgriddots{0} \def\psset@subgriddiv#1{% \pst@cntg=#1\relax\edef\psk@subgriddiv{\the\pst@cntg}} \psset@subgriddiv{5} % \def\psset@gridfont#1{\def\psk@gridfont{/#1 }}% hv 2007-11-13 \psset@gridfont{Helvetica} % \def\psset@gridlabels#1{\pst@getlength{#1}\psk@gridlabels} \psset@gridlabels{10pt} \def\psset@gridlabelcolor#1{\pst@getcolor{#1}\psgridlabelcolor} \psset@gridlabelcolor{black} \def\tx@Grid{Grid } \def\psgrid{\pst@object{psgrid}} \def\psgrid@i{\@ifnextchar({\psgrid@ii}{\expandafter\psgrid@iv\pic@coor}} \def\psgrid@ii(#1){\@ifnextchar({\psgrid@iii(#1)}{\psgrid@iv(0,0)(0,0)(#1)}} \def\psgrid@iii(#1)(#2){\@ifnextchar({\psgrid@iv(#1)(#2)}{\psgrid@iv(#1)(#1)(#2)}} \def\psgrid@iv(#1)(#2)(#3){% \begin@SpecialObj \pst@getcoor{#1}\pst@tempA% hv 1.11 \pst@getcoor{#2}\pst@tempB % hv 1.11 \pst@@getcoor{#3}% \ifnum\psk@subgriddiv>1 \addto@pscode{ gsave \psk@subgridwidth SLW \pst@usecolor\pssubgridcolor \pst@tempB \pst@coor \pst@tempA % hv 1.11 % \pst@number\psxunit \pst@number\psyunit % hv 1.11 \pst@number\psxunit abs \pst@number\psyunit abs % hv 1.11 \psk@subgriddiv\space \psk@subgriddots\space {} 0 \psk@gridfont findfont 0 scalefont setfont % hv 1.16 \tx@Grid grestore }% \fi \addto@pscode{ gsave \psk@gridwidth SLW \pst@usecolor\psgridcolor \pst@tempB \pst@coor \pst@tempA % hv 1.11 \pst@number\psxunit abs \pst@number\psyunit abs % hv 1.11 % \pst@number\psxunit \pst@number\psyunit % hv 1.11 1 \psk@griddots\space { \pst@usecolor\psgridlabelcolor } \psk@gridlabels \psk@gridfont findfont \psk@gridlabels scalefont setfont % hv 1.16 \tx@Grid grestore }% \end@SpecialObj} % \newif\ifpsmathbox \psmathboxtrue \def\pst@mathflag{\z@} \newtoks\everypsbox \let\pst@thisbox\relax \long\def\pst@makenotverbbox#1#2{% \edef\pst@mathflag{% \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}% \setbox\pst@hbox=\hbox{% \ifcase\pst@mathflag\or$\m@th\textstyle\or$\m@th\displaystyle\fi {\pst@thisbox\the\everypsbox#2}% \ifnum\pst@mathflag>\z@$\fi% $ }% #1} % \def\pst@makeverbbox#1{% \def\pst@afterbox{#1}% \edef\pst@mathflag{% \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi% }% \afterassignment\pst@beginbox \setbox\pst@hbox\hbox% } \def\pst@beginbox{% \ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi \bgroup\aftergroup\pst@endbox \pst@thisbox \the\everypsbox% } \def\pst@endbox{% \ifnum\pst@mathflag>\z@$\fi %$ \egroup \pst@afterbox% } \def\pst@makebox{\pst@@makebox} \def\psverbboxtrue{\def\pst@@makebox{\pst@makeverbbox}} \def\psverbboxfalse{\def\pst@@makebox{\pst@makenotverbbox}} \psverbboxfalse \def\pst@longbox{% \def\pst@makebox{% \gdef\pst@makebox{\pst@@makebox}% \pst@makelongbox% }% } \def\pst@makelongbox#1{% \def\pst@afterbox{#1}% \edef\pst@mathflag{% \ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi% }% \setbox\pst@hbox\hbox\bgroup \aftergroup\pst@afterbox \ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi \begingroup \pst@thisbox \the\everypsbox% } \def\pst@endlongbox{% \endgroup \ifnum\pst@mathflag>\z@$\fi %$ \egroup% } \def\pslongbox#1#2{% \@namedef{#1}{\pst@longbox#2}% \@namedef{end#1}{\pst@endlongbox}} % \newdimen\psframesep \def\psset@framesep#1{\pssetlength\psframesep{#1}} \psset@framesep{3pt} % \newif\ifpsboxsep \def\psset@boxsep#1{\@nameuse{psboxsep#1}} % \psset@boxsep{true} % \def\pst@useboxpar{% \use@par \if@star \let\pslinecolor\psfillcolor \solid@star \let\solid@star\relax \fi \ifpsdoubleline \pst@setdoublesep \fi} % \def\psframebox{\pst@object{psframebox}} \def\psframebox@i{\pst@makebox\psframebox@ii} \def\psframebox@ii{% \begingroup \pst@useboxpar \pst@dima=\pslinewidth \advance\pst@dima by \psframesep \pst@dimc=\wd\pst@hbox\advance\pst@dimc by \pst@dima \pst@dimb=\dp\pst@hbox\advance\pst@dimb by \pst@dima \pst@dimd=\ht\pst@hbox\advance\pst@dimd by \pst@dima \setbox\pst@hbox=\hbox{% \ifpsboxsep\kern\pst@dima\fi \begin@ClosedObj \addto@pscode{% \psk@cornersize % arcradius boolean \pst@number\pst@dima neg \pst@number\pst@dimb neg \pst@number\pst@dimc \pst@number\pst@dimd .5 \tx@Frame% }% \def\pst@linetype{2}% \showpointsfalse \end@ClosedObj \box\pst@hbox \ifpsboxsep\kern\pst@dima\fi% }% \ifpsboxsep\dp\pst@hbox=\pst@dimb\ht\pst@hbox=\pst@dimd\fi \leavevmode\box\pst@hbox \endgroup} % \def\psdblframebox{\pst@object{psdblframebox}} \def\psdblframebox@i{\addto@par{doubleline=true}\psframebox@i} \def\psclip#1{% \leavevmode \begingroup \begin@psclip \begingroup \def\use@pscode{% \pstVerb{% \pst@dict /mtrxc CM def CP CP T \tx@STV \psk@origin \psk@swapaxes newpath \pst@code clip newpath mtrxc setmatrix moveto 0 setgray end }% \gdef\pst@code{}}% \def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}% \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}% \hbox to\z@{#1}% \endgroup \def\endpsclip{% \end@psclip \endgroup}% \ignorespaces} \def\endpsclip{\pst@misplaced\endpsclip} \let\begin@psclip\relax \def\end@psclip{\pstVerb{currentpoint initclip moveto}} \def\AltClipMode{% \def\end@psclip{\pstVerb{\pst@grestore}}% \def\begin@psclip{\pstVerb{gsave}}} \def\clipbox{\@ifnextchar[{\clipbox@}{\clipbox@[\z@]}} % DG modification begin - Apr. 3, 1997 % From paulus@immd5.informatik.uni-erlangen.de (Dietrich Paulus) %\def\clipbox@[#1]{\pst@makebox\clipbox@@{#1}} \def\clipbox@[#1]{\pst@makebox{\clipbox@@{#1}}} % DG modification end \def\clipbox@@#1{% \pssetlength\pst@dimg{#1}% \leavevmode\hbox{% \begin@psclip \pst@Verb{% CM \tx@STV CP T newpath /a \pst@number\pst@dimg def /w \pst@number{\wd\pst@hbox}a add def /d \pst@number{\dp\pst@hbox}a add neg def /h \pst@number{\ht\pst@hbox}a add def a neg d moveto a neg h L w h L w d L closepath clip newpath 0 0 moveto setmatrix}% \unhbox\pst@hbox \end@psclip}} \def\psshadowbox{\pst@object{psshadowbox}} \def\psshadowbox@i{\pst@makebox\psshadowbox@ii} \def\psshadowbox@ii{% \begingroup \pst@useboxpar \psshadowtrue \psboxseptrue \def\psk@shadowangle{-45 }% \setbox\pst@hbox=\hbox{\psframebox@ii}% \pst@dimh=\psk@shadowsize\p@ \pst@dimh=.7071\pst@dimh \pst@dimg=\dp\pst@hbox \advance\pst@dimg\pst@dimh \dp\pst@hbox=\pst@dimg \pst@dimg=\wd\pst@hbox \advance\pst@dimg\pst@dimh \wd\pst@hbox=\pst@dimg \leavevmode \box\pst@hbox \endgroup} \def\pscirclebox{\pst@object{pscirclebox}} \def\pscirclebox@i{\pst@makebox\pscirclebox@ii} \def\pscirclebox@ii{% \begingroup \pst@useboxpar \setbox\pst@hbox=\hbox{% \pst@nodehook \pscirclebox@iii \box\pst@hbox}% \ifpsboxsep \pscirclebox@sep \fi \leavevmode \box\pst@hbox \endgroup} \def\pscirclebox@iii{% \if@star \pslinewidth\z@ \pstverb{\pst@dict \tx@STP \pst@usecolor\psfillcolor newpath \pscirclebox@iv \tx@SD end}% \else \begin@ClosedObj \def\pst@linetype{4}\showpointsfalse \addto@pscode{% \pscirclebox@iv CLW 2 div add 0 360 arc closepath}% \end@ClosedObj \fi} % \def\pscirclebox@iv{% \pst@number{\wd\pst@hbox}2 div \pst@number{\ht\pst@hbox}\pst@number{\dp\pst@hbox}add 2 div 2 copy \pst@number{\dp\pst@hbox}sub 4 2 roll \tx@Pyth \pst@number\psframesep add } % \def\pscirclebox@sep{% \pst@dimb=\ht\pst@hbox \advance\pst@dimb\dp\pst@hbox \divide\pst@dimb 2 \pst@dima=.5\wd\pst@hbox \pst@pyth\pst@dima\pst@dimb\pst@dimc \advance\pst@dimc\pslinewidth \advance\pst@dimc\psframesep \advance\pst@dimb-\pst@dimc \setbox\pst@hbox=\hbox to2\pst@dimc{% \hss\vbox{\kern-\pst@dimb\box\pst@hbox}\hss}% \advance\pst@dimb-\dp\pst@hbox \dp\pst@hbox=-\pst@dimb} % \let\pst@nodehook\relax % \def\psCirclebox{\pst@object{psCirclebox}} \def\psCirclebox@i{\pst@makebox\psCirclebox@ii} \def\psCirclebox@ii{% \begingroup \pst@useboxpar \pst@dima=\ht\pst@hbox \advance\pst@dima\dp\pst@hbox \divide\pst@dima\tw@ \pssetlength\pst@dimb\psk@radius \setbox\pst@hbox=\hbox{% \pst@nodehook \pscircle(.5\wd\pst@hbox,\pst@dima){\pst@dimb}% \box\pst@hbox}% \ifpsboxsep \psCirclebox@sep \fi \leavevmode \box\pst@hbox \endgroup} % \def\psCirclebox@sep{% \pst@dimc=\pst@dimb \advance\pst@dimb-\pst@dima \advance\pst@dima\pst@dimc \setbox\pst@hbox=\hbox to\tw@\pst@dimc{% \hss\vrule width \z@ depth \pst@dimb height \pst@dima \box\pst@hbox\hss}} % \def\psovalbox{\pst@object{psovalbox}} \def\psovalbox@i{\pst@makebox{\psovalbox@ii}} \def\psovalbox@ii{% \begingroup \pst@useboxpar \psovalbox@iii \ifpsboxsep\psovalbox@sep\fi \leavevmode \box\pst@hbox \endgroup} % \def\psovalbox@iii{% \psovalbox@iv \setbox\pst@hbox=\hbox{% \begin@ClosedObj \addto@pscode{% 0 360 \pst@number\pst@dimc CLW 2 div sub \pst@number\pst@dimd CLW 2 div sub \pst@number\pst@dima \pst@number\pst@dimb \tx@Ellipse closepath }% \def\pst@linetype{2}% \end@ClosedObj \unhbox\pst@hbox}} % \def\psovalbox@iv{% \pst@dimc=\pslinewidth\advance\pst@dimc\psframesep \pst@dimd=\ht\pst@hbox\advance\pst@dimd\dp\pst@hbox \pst@dima=.5\wd\pst@hbox \pst@dimb=.5\pst@dimd\advance\pst@dimb-\dp\pst@hbox \pst@dimd=.707\pst@dimd \advance\pst@dimd\pst@dimc \advance\pst@dimc.707\wd\pst@hbox} % \def\psovalbox@sep{% \setbox\pst@hbox\hbox to 2\pst@dimc{\hss\unhbox\pst@hbox\hss}% \pst@dimg=\pst@dimd \advance\pst@dimg-\pst@dimb \dp\pst@hbox=\pst@dimg \advance\pst@dimd\pst@dimb \ht\pst@hbox=\pst@dimd} % \def\psdiabox{\pst@object{psdiabox}} \def\psdiabox@i{\pst@makebox{\psdiabox@ii}} \def\psdiabox@ii{% \begingroup \pst@useboxpar \psdiabox@iii \ifpsboxsep\psdiabox@sep\fi \leavevmode \box\pst@hbox \endgroup} \def\psdiabox@iv{% \pst@dimg=.707\pslinewidth \advance\pst@dimg.707\psframesep \pst@dima=\wd\pst@hbox \divide\pst@dima 2 \pst@dimc=\pst@dima \advance\pst@dimc\pst@dimg \pst@dimd=\ht\pst@hbox \advance\pst@dimd\dp\pst@hbox \divide\pst@dimd 2 \pst@dimb=\pst@dimd \advance\pst@dimb-\dp\pst@hbox \advance\pst@dimd\pst@dimg} \def\psdiabox@iii{% \psdiabox@iv \setbox\pst@hbox=\hbox{% \begin@ClosedObj \addto@pscode{% \psline@iii pop .5 \pst@number\pst@dimc 2 mul \pst@number\pst@dimd 2 mul 0 \pst@number\pst@dima \pst@number\pst@dimb \tx@Diamond}% \def\pst@linetype{4}% \end@ClosedObj \box\pst@hbox}} \def\psdiabox@sep{% \setbox\pst@hbox\hbox to 4\pst@dimc{\hss\unhbox\pst@hbox\hss}% \multiply\pst@dimd 2 \advance\pst@dimd\pst@dimb \ht\pst@hbox\pst@dimd \advance\pst@dimd-2\pst@dimb \dp\pst@hbox\pst@dimd} \def\psset@trimode#1{\pst@expandafter\psset@@trimode{#1}\@empty\@empty\@nil} \def\psset@@trimode#1#2#3\@nil{% \let\pst@tempg#1\relax \ifx\pst@tempg*% \let\psk@@trimode\@empty \let\pst@tempg#2\relax \else \let\psk@@trimode\relax \fi \edef\psk@trimode{% \ifx R\pst@tempg 1 \else\ifx D\pst@tempg 2 \else\ifx L\pst@tempg 3 \else 0 \fi\fi\fi}} \psset@trimode{U} \def\pstribox{\pst@object{pstribox}} \def\pstribox@i{\pst@makebox{\pstribox@ii}} \def\pstribox@ii{% \begingroup \pst@useboxpar \pstribox@iii \ifpsboxsep\pstribox@sep\fi \leavevmode \box\pst@hbox \endgroup} \def\pstribox@iii{% \pstribox@iv \setbox\pst@hbox=\hbox{% \begin@ClosedObj \addto@pscode{% \psline@iii pop .5 \pst@number\pst@dimc \pst@number\pst@dimd \ifodd\psk@trimode exch \fi \psk@trimode -90 mul \pst@number\pst@dima \pst@number\pst@dimb \tx@Triangle}% \def\pst@linetype{2}% \end@ClosedObj \box\pst@hbox}} \def\pstribox@iv{% \pst@dimh=\pslinewidth \advance\pst@dimh\psframesep \pst@dimg=\ht\pst@hbox \advance\pst@dimg-\dp\pst@hbox \divide\pst@dimg 2 \edef\pst@tempa{\number\pst@dimg sp}% For use by nodes. \ifodd\psk@trimode \pst@dimb\pst@dimg \else \pst@dima=\wd\pst@hbox \divide\pst@dima 2 \fi \ifcase\psk@trimode \pst@dimb=-\dp\pst@hbox \advance\pst@dimb-\pst@dimh \or \pst@dima=-\pst@dimh \or \pst@dimb=\ht\pst@hbox \advance\pst@dimb\pst@dimh \or \pst@dima=\wd\pst@hbox \advance\pst@dima\pst@dimh \fi \pst@dimd=\dp\pst@hbox \advance\pst@dimd\ht\pst@hbox \ifx\psk@@trimode\relax \pst@dimc=\wd\pst@hbox \advance\pst@dimc\ifodd\psk@trimode 1.447\else 1.789\fi\pst@dimh \multiply\pst@dimc 2 \advance\pst@dimd\ifodd\psk@trimode 1.789\else 1.447\fi\pst@dimh \multiply\pst@dimd 2 \else \ifodd\psk@trimode \advance\pst@dimd 1.1547\wd\pst@hbox \advance\pst@dimd 3.4641\pst@dimh \pst@dimc=.866\pst@dimd \else \advance\pst@dimd .866\wd\pst@hbox %.866=(sqrt(3)/2) \advance\pst@dimd 3\pst@dimh \pst@dimc=1.1547\pst@dimd % 1.1547=(2/sqrt(3)) \fi \fi} \def\pstribox@sep{% \ifodd\psk@trimode \advance\pst@dimb.5\pst@dimd \ht\pst@hbox=\pst@dimb \advance\pst@dimd-\pst@dimb \dp\pst@hbox=\pst@dimd \else \setbox\pst@hbox\hbox to \pst@dimc{\hss\unhbox\pst@hbox\hss}% \global\pst@dimg=.5\pst@dimc \fi \ifcase\psk@trimode \dp\pst@hbox-\pst@dimb \advance\pst@dimd\pst@dimb \ht\pst@hbox\pst@dimd \or \pst@dimg=.5\wd\pst@hbox \global\advance\pst@dimg-\pst@dima \setbox\pst@hbox\hbox to \pst@dimc{\kern-\pst@dima\box\pst@hbox\hss}% \or \ht\pst@hbox\pst@dimb \advance\pst@dimd-\pst@dimb \dp\pst@hbox\pst@dimd \or \pst@dimg=\pst@dimc \advance\pst@dimg-\pst@dima \global\advance\pst@dimg.5\wd\pst@hbox \setbox\pst@hbox\hbox to \pst@dimc{% \hss\box\pst@hbox\kern\psframesep\kern\pslinewidth}% \fi} % \def\psset@arcsepA#1{\pst@getlength{#1}\psk@arcsepA} \def\psset@arcsepB#1{\pst@getlength{#1}\psk@arcsepB} \def\psset@arcsep#1{% \psset@arcsepA{#1}\let\psk@arcsepB\psk@arcsepA} \psset@arcsep{0} \def\tx@ArcArrow{ArcArrow } % \def\psarc{\pst@object{psarc}} \def\psarc@i{\@ifnextchar({\psarc@iii}{\psarc@ii}} \def\psarc@ii#1{\addto@par{arrows=#1}% \@ifnextchar({\psarc@iii}{\psarc@iii(0,0)}% } \def\psarc@iii(#1)#2#3#4{% \begin@OpenObj \pst@getangle{#3}\pst@tempa \psDEBUG[psarc]{angleA=\pst@tempa}% \pst@getangle{#4}\pst@tempb \psDEBUG[psarc]{angleB=\pst@tempb}% \ifx\pst@tempa\pst@tempb \else \pst@@getcoor{#1}% \pssetlength\pst@dima{#2}% \addto@pscode{\psarc@iv \psarc@v}% \gdef\psarc@type{0}% \showpointsfalse \fi \end@OpenObj% } \def\psarc@iv{% \pst@coor /y ED /x ED /r \pst@number\pst@dima def /c 57.2957 r \tx@Div def /angleA \pst@tempa \psk@arcsepA c mul 2 div \ifcase\psarc@type add \or sub \fi def /angleB \pst@tempb \psk@arcsepB c mul 2 div \ifcase\psarc@type sub \or add \fi def \ifshowpoints\psarc@showpoints\fi \ifx\psk@arrowA\@empty \ifnum\psk@liftpen=2 r angleA \tx@PtoC y add exch x add exch moveto \fi \fi} % hv ---- 1.10 2005-05-05 ----------------------> hv begin \def\psarc@v{% /angleAtoB angleB angleA gt { true }{ false } ifelse def x y r angleA \ifx\psk@arrowA\@empty\else { ArrowA CP } r 0 gt \pslbrace { \ifcase\psarc@type add \or sub \fi } \psrbrace\pslbrace { \ifcase\psarc@type sub \or add \fi } \psrbrace ifelse % { \ifcase\psarc@type add \or sub \fi } \tx@ArcArrow % dup AngleA gt AngleAtoB exor { neg } fi \fi angleB \ifx\psk@arrowB\@empty\else { ArrowB } r 0 gt \pslbrace { \ifcase\psarc@type sub \or add \fi } \psrbrace\pslbrace { \ifcase\psarc@type add \or sub \fi } \psrbrace ifelse % { \ifcase\psarc@type sub \or add \fi } \tx@ArcArrow dup angleA gt angleAtoB xor { pop angleA } if \fi \ifcase\psarc@type arc \or arcn \fi} % hv ----- 1.10 2005-05-05 ------------------------> end % \def\psarc@type{0} \def\psarc@showpoints{% gsave newpath x y moveto x y r \pst@tempa \pst@tempb \ifcase\psarc@type arc \or arcn \fi closepath CLW 2 div SLW [ \psk@dash\space ] 0 setdash stroke grestore } \def\psarcn{\pst@object{psarcn}} \def\psarcn@i{\def\psarc@type{1}\psarc@i} % %------------------ tvz/DG/hv (2004-05-10) begin -------------------%% % from Denis Giroux: http://www.tug.org/pipermail/pstricks/2001/000507.html % % I - Definition of \psellipticwedge, a generalization of \pswedge for wedges % of ellipses (from the code of \pswedge and \psellipse) % \def\psellipticwedge{\def\pst@par{}\pst@object{psellipticwedge}} \def\psellipticwedge@i(#1){% \@ifnextchar({\psellipticwedge@ii(#1)}{\psellipticwedge@ii(0,0)(#1)}} \def\psellipticwedge@ii(#1)(#2)#3#4{% \begin@ClosedObj \pst@getangle{#3}\pst@tempa \pst@getangle{#4}\pst@tempb \pst@getcoor{#1}\pst@tempc \pst@@getcoor{#2}% \def\pst@linetype{1}% \addto@pscode{% \pst@tempa \pst@tempb \pst@coor \pst@tempc moveto \ifdim\psk@dimen\p@=\z@\else \psk@dimen CLW mul dup 3 1 roll sub 3 1 roll sub exch \fi \pst@tempc \tx@Ellipse closepath% }% \showpointsfalse \end@ClosedObj% } % % Code mainly from "pstricks.tex'' 0.94 beta (TvZ) % \def\psellipticarcn{\def\pst@par{}\pst@object{psellipticarcn}} \def\psellipticarcn@i{\let\if@psarcn\iftrue\psellipticarc@ii} % \def\psellipticarc{\def\pst@par{}\pst@object{psellipticarc}} \def\psellipticarc@i{\let\if@psarcn\iffalse\psellipticarc@ii} % \let\if@psarcn\iffalse \def\psellipticarc@ii{\pst@getarrows\psellipticarc@iii} \def\psellipticarc@iii(#1){% \@ifnextchar({\psellipticarc@iv(#1)}{\psellipticarc@iv(0,0)(#1)}} \def\psellipticarc@iv(#1)(#2)#3#4{% \begin@OpenObj \pst@getcoor{#1}\pst@tempa \pst@getcoor{#2}\pst@tempb \pst@getangle{#3}\pst@tempc \pst@getangle{#4}\pst@tempd \addto@pscode{\psellipticarc@definearg \psellipticarc@draw}% \showpointsfalse \end@OpenObj% } \def\psellipticarc@definearg{% \pst@tempa /yOrig ED /xOrig ED % Origin \pst@tempb % radii. Now adjust: \ifdim\psk@dimen\p@=\z@\else \psk@dimen CLW mul dup 3 1 roll sub 3 1 roll sub exch \fi /ry ED /rx ED /angleA /d { \if@psarcn sub \else add \fi } def \pst@tempc \psk@arcsepA 2 div ArcAdjust def /angleB /d { \if@psarcn add \else sub \fi } def \pst@tempd \psk@arcsepB 2 div ArcAdjust def \ifshowpoints\psellipticarc@showpoints\fi \ifx\psk@arrowA\@empty \ifnum\psk@liftpen=2 angleA cos rx mul xOrig add angleA sin ry mul yOrig add moveto \fi \fi } \def\psellipticarc@draw{% 0 0 1 angleA \ifx\psk@arrowA\@empty\else { ArrowA CP } { \if@psarcn sub \else add \fi } EllipticArcArrow \fi angleB \ifx\psk@arrowB\@empty\else { ArrowB } { \if@psarcn add \else sub \fi } EllipticArcArrow \fi /mtrx CM def xOrig yOrig T rx ry scale \if@psarcn arcn \else arc \fi mtrx setmatrix% } \def\psellipticarc@showpoints{% gsave /mtrx CM def xOrig yOrig T rx ry scale 0 0 moveto 0 0 1 \pst@tempc \pst@tempd \ifcase\psarc@type arc \or arcn \fi closepath mtrx setmatrix CLW 2 div SLW [ \psk@dash\space ] 0 setdash stroke grestore % } \def\pscircle{\pst@object{pscircle}} \def\pscircle@i{\@ifnextchar({\pscircle@do}{\pscircle@do(0,0)}} \def\pscircle@do(#1)#2{% \if@star{\use@par\qdisk(#1){#2}}% qdisk does not allow \else% to use opacity option \begin@ClosedObj \pst@@getcoor{#1}% \pssetlength\pst@dimc{#2}% \def\pst@linetype{4}% \addto@pscode{ \pst@coor \pst@number\pst@dimc \psk@dimen CLW mul sub 0 360 arc closepath }% \showpointsfalse \end@ClosedObj \fi \ignorespaces} % \def\pscircleOA{\pst@object{pscircleOA}}% hv 2008-04-14 \def\pscircleOA@i(#1)(#2){% \begin@ClosedObj \pst@getcoor{#1}\pst@tempA \pst@@getcoor{#2}% \def\pst@linetype{4}% \addto@pscode{ \pst@tempA % x0 y0 2 copy % xO yO xO yO \pst@coor % xO yO xO yO xA yA Pyth2 % xO yO radius \psk@dimen CLW mul sub \if@star \tx@SD \else 0 360 arc closepath \fi }% \showpointsfalse \end@ClosedObj \ignorespaces} % \def\qdisk(#1)#2{% \def\pst@par{}% \begin@SpecialObj \pst@@getcoor{#1}% \pssetlength\pst@dimg{#2}% \addto@pscode{ \pst@coor \pst@number\pst@dimg \tx@SD }% \end@SpecialObj} % \def\psset@radius#1{\pst@@getlength{#1}\psk@radius} \psset@radius{.25cm} % \def\psCircle{\pst@object{psCircle}}% same as \pscircle, but uses \psk@radius \def\psCircle@i{\@ifnextchar({\psCircle@ii}{\psCircle@ii(0,0)}} \def\psCircle@ii(#1){\pscircle@do(#1){\psk@radius}} % \def\pswedge{\pst@object{pswedge}} \def\pswedge@i{\@ifnextchar({\pswedge@ii}{\pswedge@ii(0,0)}} \def\pswedge@ii(#1)#2#3#4{% \begin@ClosedObj \pssetlength\pst@dimc{#2} \pst@getangle{#3}\pst@tempa \pst@getangle{#4}\pst@tempb \pst@@getcoor{#1}% \def\pst@linetype{1}% \addto@pscode{% \pst@coor 2 copy moveto \pst@number\pst@dimc \psk@dimen CLW mul sub % Adjusted radius \pst@tempa \pst@tempb arc closepath}% \showpointsfalse \end@ClosedObj% } \def\tx@Ellipse{Ellipse } \def\psellipse{\pst@object{psellipse}} \def\psellipse@i(#1){\@ifnextchar({\psellipse@ii(#1)}{\psellipse@ii(0,0)(#1)}} \def\psellipse@ii(#1)(#2){% \begin@ClosedObj \pst@getcoor{#1}\pst@tempa \pst@@getcoor{#2}% \addto@pscode{% 0 360 \pst@coor \ifdim\psk@dimen\p@=\z@\else \psk@dimen CLW mul dup 4 -1 roll sub neg 3 1 roll sub \fi \pst@tempa \tx@Ellipse closepath% }% \def\pst@linetype{2}% \end@ClosedObj% } \def\multips{\@ifnextchar({\def\pst@par{}\multips@ii}{\multips@i}} \def\multips@i#1{\def\pst@par{rot=#1}\multips@ii} \def\multips@ii(#1){\@ifnextchar({\multips@iii(#1)}{\multips@iii(\z@,\z@)(#1)}} \long\def\multips@iii(#1)(#2)#3#4{% \begingroup %----------------- hv 1.10 ------------------ \pst@killglue %----------------- hv 1.10 ------------------ \use@par \pst@getcoor{#1}\pst@tempa \pst@@getcoor{#2}% \pst@cnta=#3\relax \init@pscode \addto@pscode{% \pst@tempa T \the\pst@cnta\space \pslbrace gsave \ifx\psk@rot\@empty\else\psk@rot rotate \fi}% \hbox to\z@{% \def\init@pscode{% \addto@pscode{% gsave \pst@number\pslinewidth SLW \pst@usecolor\pslinecolor}}% \def\use@pscode{\addto@pscode{grestore}}% \def\psclip##1{\pst@misplaced\psclip}% \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}% #4% }% \addto@pscode{grestore \pst@coor T \psrbrace repeat}% \leavevmode \use@pscode \endgroup \ignorespaces} \def\psscalebox#1{\pst@makebox{\ps@scalebox{#1}}} \def\ps@scalebox#1{% \begingroup% \pst@getscale{#1}\pst@tempa% \let\pst@tempc\pst@tempg% \let\pst@tempd\pst@temph% \ps@@scalebox% \endgroup} \def\ps@@scalebox{% \leavevmode% \hbox{% \ifdim\pst@tempd\p@<\z@% \pst@dimg=\pst@tempd\ht\pst@hbox% \pst@dimh=\pst@tempd\dp\pst@hbox% \dp\pst@hbox=-\pst@dimg% \ht\pst@hbox=-\pst@dimh% \else% \ht\pst@hbox=\pst@tempd\ht\pst@hbox% \dp\pst@hbox=\pst@tempd\dp\pst@hbox% \fi% \pst@dima=\pst@tempc\wd\pst@hbox% \ifdim\pst@dima<\z@\kern-\pst@dima\fi% \pst@Verb{CP CP translate \pst@tempa \tx@NET}% \hbox to \z@{\box\pst@hbox\hss}% \pst@Verb{ CP CP translate 1 \pst@tempc div 1 \pst@tempd div scale \tx@NET}% \ifdim\pst@dima>\z@\kern\pst@dima\fi% }% } \pslongbox{Scalebox}{\psscalebox} % \def\psscaleboxto(#1,#2){\pst@makebox{\ps@scaleboxto(#1,#2)}} \def\ps@scaleboxto(#1,#2){% \begingroup \pssetlength\pst@dima{#1}% \pssetlength\pst@dimb{#2}% \ifdim\pst@dima=\z@\else \pst@divide{\pst@dima}{\wd\pst@hbox}\pst@tempc \edef\pst@tempc{\pst@tempc\space}% \fi \ifdim\pst@dimb=\z@ \ifdim\pst@dima=\z@ \@pstrickserr{% \string\psscaleboxto\space dimensions cannot both be zero}\@ehpa \def\pst@tempa{}% \def\pst@tempc{1 }% \def\pst@tempd{1 }% \else \let\pst@tempd\pst@tempc \fi \else \pst@dimc=\ht\pst@hbox \advance\pst@dimc\dp\pst@hbox \pst@divide{\pst@dimb}{\pst@dimc}\pst@tempd \edef\pst@tempd{\pst@tempd\space}% \ifdim\pst@dima=\z@ \let\pst@tempc\pst@tempd \fi \fi \edef\pst@tempa{\pst@tempc \pst@tempd scale }% \ps@@scalebox \endgroup} \pslongbox{Scaleboxto}{\psscaleboxto} % \def\tx@Rot{Rot } \def\psrotateleft{\pst@makebox{\ps@rotateleft\pst@hbox}} \def\ps@rotateleft#1{% \leavevmode\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1% \pst@Verb{90 \tx@Rot} \vbox to \z@{\vss\hbox to \z@{\box#1\hss}\vskip\z@}% \pst@Verb{-90 \tx@Rot}}}} \def\psrotateright{\pst@makebox{\ps@rotateright\pst@hbox}} \def\ps@rotateright#1{% % ----------- hv begin 2004-05-07 ----------- patch 15 % \hbox{% \leavevmode\hbox{% % ----------- hv end 2004-05-07 ----------- patch 15 \hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1% \pst@Verb{-90 \tx@Rot} \vbox to \z@{\hbox to \z@{\hss\box#1}\vss}% \pst@Verb{90 \tx@Rot}}}} \def\psrotatedown{\pst@makebox{\ps@rotatedown\pst@hbox}} \def\ps@rotatedown#1{% \hbox{\hskip\wd#1\vbox{\vskip\ht#1\vskip\dp#1% \pst@Verb{180 \tx@Rot}% \vbox to \z@{\hbox to \z@{\box#1\hss}\vss}% \pst@Verb{-180 \tx@Rot}}}} \pslongbox{Rotateleft}{\psrotateleft} \pslongbox{Rotateright}{\psrotateright} \pslongbox{Rotatedown}{\psrotatedown} % ----------- hv begin 2004-09-23 ----------- 1.11 % compatibility stuff \let\rotateleft\psrotateleft \let\rotateright\psrotateright \let\rotatedown\psrotatedown % ----------- hv end 2005-09-23 ----------- 1.11 \def\pst@starbox{% \setbox\pst@hbox\hbox{\psframebox*[boxsep=false]{\unhbox\pst@hbox}}} \def\pst@@makesmall#1{% \setbox#1=\hbox to\z@{\hss\vbox to \z@{\vss\box#1\vss}\hss}} \def\pst@@@makesmall#1{% \pst@dimh=\psk@xref\wd#1% \ifx\psk@yref\relax \pst@dimg=\dp#1% \else \pst@dimg=\psk@yref\ht#1% \advance\pst@dimg\psk@yref\dp#1% \fi \setbox#1=\hbox to\z@{% \kern-\pst@dimh\vbox to\z@{\vss\box#1\kern-\pst@dimg}\hss}} \def\psset@ref#1{\pst@expandafter\psset@@ref{#1}\@empty,,\@nil} \def\psset@@ref#1#2,#3,#4\@nil{% \def\psk@xref{.5}% \def\psk@yref{.5}% \let\pst@makesmall\pst@@@makesmall \ifx\@empty#3\@empty \@nameuse{getref@#1}% \@nameuse{getref@#2}% \else \pst@checknum{#1#2}\psk@xref \pst@checknum{#3}\psk@yref \fi} \def\getref@c{\let\pst@makesmall\pst@@makesmall} \def\getref@t{\def\psk@yref{1}} \def\getref@b{\def\psk@yref{0}} \def\getref@B{\let\psk@yref\relax} \def\getref@l{\def\psk@xref{0}} \def\getref@r{\def\psk@xref{1}} \psset@ref{c} % \def\psset@rot#1{% \pst@expandafter{\@ifnextchar*{\psset@@@rot}{\psset@@rot}}{#1}\@nil} \def\psset@@rot#1\@nil{% \def\next##1@#1=##2@##3\@nil{% \ifx\relax##2% \pst@getangle{#1}\psk@rot \else \def\psk@rot{##2}% \fi}% \expandafter\next\pst@rottable @#1=\relax @\@nil} \def\psset@@@rot#1#2\@nil{% \psset@@rot#2\@nil \edef\psk@rot{\pst@rotlist \ifx\psk@rot\@empty\else\psk@rot add \fi}} \def\pst@rotlist{mark RAngle /a ED cleartomark a neg } \def\pst@rottable{% @0=% @U=% @L=90 % @D=180 % @R=-90 % @N=\pst@rotlist @W=\pst@rotlist 90 add % @S=\pst@rotlist 180 add % @E=\pst@rotlist 90 sub } \psset@rot{0} \def\tx@RotBegin{RotBegin } \def\tx@RotEnd{RotEnd } \def\pst@rotate#1#2{% \ifx#1\@empty\else \setbox#2=\hbox{\pst@Verb{#1 \tx@RotBegin}\box#2\pst@Verb{\tx@RotEnd}}% \fi% } \def\psput@cartesian#1{% \hbox to \z@{\kern\pst@dimg{\vbox to \z@{\vss\box#1\vskip\pst@dimh}\hss}}% } \def\psput@special#1{% \hbox{% \pst@Verb{{ \pst@coor } \tx@PutCoor \tx@PutBegin }% \box#1% \pst@Verb{ \tx@PutEnd }% }% } \def\tx@PutCoor{PutCoor } \def\tx@PutBegin{PutBegin } \def\tx@PutEnd{PutEnd } \def\rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\rput@i}{\rput@ii}}} \def\rput@i[#1]{\addto@par{ref={#1}}\rput@ii} \def\rput@ii{\@ifnextchar({\rput@iv}{\rput@iii}} \def\rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\rput@iv}{\rput@iv(\z@,\z@)}} \def\rput@iv(#1){\pst@killglue\pst@makebox{\rput@v{#1}}} \def\rput@v#1{% \begingroup \use@par \if@star\pst@starbox\fi \pst@makesmall\pst@hbox \pst@rotate\psk@rot\pst@hbox \psput@{#1}\pst@hbox \endgroup \ignorespaces% } \def\multirput{% \def\pst@par{}% \pst@ifstar{\@ifnextchar[{\multirput@i}{\multirput@ii}}% } \def\multirput@i[#1]{\addto@par{ref={#1}}\multirput@ii} \def\multirput@ii{\@ifnextchar({\multirput@iv}{\multirput@iii}} \def\multirput@iii#1{\addto@par{rot={#1}}\multirput@iv} \def\multirput@iv(#1){% \@ifnextchar({\multirput@v(#1)}{\multirput@v(\z@,\z@)(#1)}% } \def\multirput@v(#1,#2)(#3,#4)#5{% \pst@makebox{\multirput@vi(#1,#2)(#3,#4){#5}}% } \def\multirput@vi(#1,#2)(#3,#4)#5{% \pst@killglue \begingroup \use@par \if@star\pst@starbox\fi \pst@makesmall\pst@hbox \pst@rotate\psk@rot\pst@hbox \pssetxlength\pst@dima{#1}% \pssetylength\pst@dimb{#2}% \pssetxlength\pst@dimc{#3}% \pssetylength\pst@dimd{#4}% \pst@cntg=#5\relax \pst@cnth=\@ne \leavevmode \loop \vbox to \z@{% \vss \hbox to \z@{\kern\pst@dima\copy\pst@hbox\hss}% \vskip\pst@dimb% }% \ifnum\pst@cntg>\pst@cnth \advance\pst@dima\pst@dimc \advance\pst@dimb\pst@dimd \advance\pst@cnth\@ne \repeat \endgroup \ignorespaces% } \newif\if@fixedradius \def\cput{\pst@object{cput}} \def\cput@i{\@fixedradiusfalse\cput@ii} \def\cput@ii{\pst@killglue\@ifnextchar({\cput@iv}{\cput@iii}} \def\cput@iii#1{% \addto@par{rot={#1}}% \@ifnextchar({\cput@iv}{\cput@iv(\z@,\z@)}% } \def\cput@iv(#1){\pst@makebox{\cput@v{#1}}} \def\cput@v#1{% \begingroup \use@par \setbox\pst@hbox=\hbox{% \psboxsepfalse \if@fixedradius\psCirclebox@ii\else\pscirclebox@ii\fi% }% \pst@@makesmall\pst@hbox \pst@rotate\psk@rot\pst@hbox \psput@{#1}\pst@hbox \endgroup \ignorespaces% } \def\Cput{\pst@object{Cput}} \def\Cput@i{\@fixedradiustrue\cput@ii} \newdimen\pslabelsep \def\psset@labelsep#1{\pssetlength\pslabelsep{#1}} \psset@labelsep{5pt} \def\psset@refangle#1{\pst@expandafter\psset@@refangle{#1}\@nil} \def\psset@@refangle#1\@nil{% \def\next##1@#1=##2"##3@##4\@nil{% \ifx\relax##2% \pst@getangle{#1}\psk@refangle \def\psk@uputref{}% \else \def\psk@refangle{##2 }% \def\psk@uputref{##3}% \fi}% \expandafter\next\pst@refangletable @#1=\relax"@\@nil} \def\pst@refangletable{% @r=0"20% @u=90"02% @l=180"10% @d=-90"01% @ur=45"22% @ul=135"12% @dr=-135"21% @dl=-45"11} \psset@refangle{0} % DG/SR modification begin - Mar. 24, 1999 - Patch 10 %\def\uput{\def\pst@par{}\@ifnextchar[{\uput@ii}{\uput@i}} \def\uput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\uput@ii}{\uput@i}}} % DG/SR modification end \def\uput@i#1{\addto@par{labelsep=#1}\uput@ii} \def\uput@ii[#1]{% \addto@par{refangle={#1}}% \@ifnextchar({\uput@iv}{\uput@iii}} \def\uput@iii#1{% \addto@par{rot={#1}}% \@ifnextchar({\uput@iv}{\uput@iv(\z@,\z@)}} \def\uput@iv(#1){\pst@killglue\pst@makebox{\uput@v{#1}}} \def\uput@v#1{% \begingroup \use@par \if@star\pst@starbox\fi \uput@vi \psput@{#1}\pst@hbox \endgroup \ignorespaces} \def\uput@vi{% \ifx\psk@uputref\@empty \uput@vii\tx@UUput{}% \else \ifx\psk@rot\@empty \expandafter\uput@viii\psk@uputref \else \uput@vii\tx@UUput{}% \fi \fi} \def\uput@vii#1#2{% \edef\pst@coor{% \pst@number\pslabelsep #2% \pst@number{\wd\pst@hbox}% \pst@number{\ht\pst@hbox}% \pst@number{\dp\pst@hbox}% \psk@refangle\space \ifx\psk@rot\@empty\else\psk@rot\space sub \fi \tx@Uput #1}% \setbox\pst@hbox=\hbox to\z@{\hss\vbox to\z@{\vss\box\pst@hbox\vss}\hss}% \setbox\pst@hbox=\psput@special\pst@hbox \ifx\psk@rot\@empty\else\pst@rotate\psk@rot\pst@hbox\fi} \def\uput@viii#1#2{% \ifnum#1>\z@\ifnum#2>\z@\pslabelsep=.707\pslabelsep\fi\fi \setbox\pst@hbox=\vbox to\z@{% \ifnum#2=1 \vskip\pslabelsep\else\vss\fi \hbox to\z@{% \ifnum#1=2 \hskip\pslabelsep\else\hss\fi \box\pst@hbox \ifnum#1=1 \hskip\pslabelsep\else\hss\fi}% \ifnum#2=2 \vskip\pslabelsep\else\vss\fi}} \def\tx@Uput{Uput } \def\tx@UUput{UUput } % \def\Rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Rput@ii}{\Rput@i}}} \def\Rput@i#1{\addto@par{labelsep=#1}\Rput@ii} \def\Rput@ii[#1]{\addto@par{ref={#1}}\@ifnextchar({\Rput@iv}{\Rput@iii}} \def\Rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\Rput@iv}{\Rput@iv(\z@,\z@)}} \def\Rput@iv(#1){\pst@killglue\pst@makebox{\Rput@v{#1}}} \def\Rput@v#1{% \begingroup \use@par \if@star\pst@starbox\fi \Rput@vi \pst@makesmall\pst@hbox \pst@rotate\psk@rot\pst@hbox \psput@{#1}\pst@hbox \endgroup \ignorespaces} % \def\Rput@vi{% \pst@dimg=\dp\pst@hbox \advance\pst@dimg\pslabelsep \dp\pst@hbox=\pst@dimg \pst@dimg=\ht\pst@hbox \advance\pst@dimg\pslabelsep \ht\pst@hbox=\pst@dimg \setbox\pst@hbox\hbox{\kern\pslabelsep\box\pst@hbox\kern\pslabelsep}}% % \def\oldpsput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\oldpsput@i}{\oldpsput@ii}}} \def\oldpsput@i[#1]{\addto@par{ref={#1}}\oldpsput@ii} \def\oldpsput@ii{\@ifnextchar<{\oldpsput@iii}{\oldpsput@iv}} \def\oldpsput@iii<#1>{\rput@iii{#1}} \def\OldPsput{\let\psput\oldpsput} \def\NewPsput{\let\psput\rput} % % ----------- 1.10/12 beg hv ------------------- \newpsstyle{gridstyle}{subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=8pt} \newif\ifshowgrid \def\psset@showgrid#1{\@nameuse{showgrid#1}} \psset@showgrid{false} % \newdimen\pst@shift \newif\ifPst@shift@star \def\psset@shift#1{% \ifx#1* \global\Pst@shift@startrue \pst@shift=\p@ \else \global\Pst@shift@starfalse \pssetlength\pst@dimg{#1} \global\pst@shift\pst@dimg% only the outer pspicture env can have a shift \fi} % \global\pst@shift\pst@dimg} \psset@shift{0} % ----------- 1.10/12 end hv ------------------- % % %------------------------------- pspicture ------------------------------ % \def\pspicture{\begingroup\pst@ifstar\pst@picture} \def\pst@picture{\@ifnextchar[{\pst@@picture}{\pst@@picture[]}} \def\pst@@picture[#1]#2(#3,#4){\@ifnextchar(% {\pst@@@picture[#1](#3,#4)}% {\pst@@@picture[#1](0,0)(#3,#4)}} % \def\pst@@@picture[#1](#2,#3)(#4,#5){% \pssetxlength\pst@dima{#2}% \pssetylength\pst@dimb{#3}% \pssetxlength\pst@dimc{#4}% \pssetylength\pst@dimd{#5}% \ifdim\pst@dima>\pst@dimc% \pst@dimg=\pst@dima% \pst@dima=\pst@dimc% \pst@dimc=\pst@dimg% \fi% \ifdim\pst@dimb>\pst@dimd% \pst@dimg=\pst@dimb% \pst@dimb=\pst@dimd% \pst@dimd=\pst@dimg% \fi% \setbox\pst@hbox=\hbox\bgroup% \begingroup\KillGlue% \@ifundefined{@latexerr}{}{\let\unitlength\psunit}% \edef\pic@coor{(#2,#3)(#2,#3)(#4,#5)}% % ----------- 1.10/12 beg hv ------------------- \psset{showgrid=false}% % for nested pspicture environemnets \def\pst@tempA{#1}% \ifx\pst@tempA\@empty\else\psset{#1}\fi% sets the shift and grid option \ifshowgrid\psgrid[style=gridstyle]\fi% % ----------- 1.10/12 end hv ------------------- % \ignorespaces% } \def\pic@coor{(0,0)(0,0)(10,10)} %\newdimen\pst@shift \def\endpspicture{% \pst@killglue % \global\pst@shift=\pst@shift% in fact of the following endgroup \endgroup \egroup \ifdim\wd\pst@hbox=\z@\else %\@pstrickserr{Extraneous space in the pspicture environment}% %{Type \space \space to proceed.}% \fi \ht\pst@hbox=\pst@dimd \dp\pst@hbox=-\pst@dimb \setbox\pst@hbox=\hbox{% \kern-\pst@dima % Orig version ---------- %\ifx\pst@tempa\@empty\else %\advance\pst@dimd-\pst@dimb %\pst@dimd=\pst@tempa\pst@dimd %\advance\pst@dimd\pst@dimb %\lower\pst@dimd %\fi %----- end Orig \ifPst@shift@star%\typeout{==pstricks== old behaviour of the shift option}% shift=* \advance\pst@dimd-\pst@dimb \pst@dimd=0.5\pst@dimd \else\pst@dimd-\pst@shift\fi \advance\pst@dimd\pst@dimb \lower\pst@dimd% \box\pst@hbox% \kern\pst@dimc}% \if@star\setbox\pst@hbox=\hbox{\clipbox@@\z@}\fi \leavevmode\box\pst@hbox \endgroup% \psset@shift{0}% reset value } % \@namedef{pspicture*}{\pspicture*} \@namedef{endpspicture*}{\endpspicture} % %------------------------------- Overlays ------------------------------ % \def\tx@BeginOL{BeginOL } \def\tx@InitOL{InitOL } % \def\pst@initoverlay#1{\pst@Verb{\tx@InitOL /TheOL (#1) def}} \def\AltOverlayMode{% \def\pst@initoverlay##1{% \pst@Verb{% \tx@InitOL /Visible { initclip } def /Invisible { CP newpath OLUnit itransform moveto clip newpath moveto } def /TheOL (##1) def}}} % \def\pst@overlay#1{% \edef\curr@overlay{#1}% \pst@Verb{(#1) BOL}% \aftergroup\pst@endoverlay} % \def\pst@endoverlay{\pst@Verb{(\curr@overlay) BOL}} \def\curr@overlay{all} % \newbox\theoverlaybox % \def\overlaybox{% \global\setbox\theoverlaybox=\hbox\bgroup \begingroup \let\psoverlay\pst@overlay \def\overlaybox{% \@pstrickserr{Overlays cannot be nested}\@eha}% \def\putoverlaybox{% \@pstrickserr{You must end the overlay box before using \string\putoverlaybox}}% \psoverlay{main}% \ignorespaces} % \def\endoverlaybox{\endgroup\egroup} \def\putoverlaybox#1{% \hbox{\pst@initoverlay{#1}\copy\theoverlaybox}} % \def\psoverlay{\@pstrickserr{\string\psoverlay\space can only be used after \string\overlaybox}} % \ifx\pstcustomize\relax \input pstricks.con \fi % \catcode`\@=\PstAtCode\relax % \endinput %% %% END: pstricks.tex rivet-1.8.3/data/texmf/tex/generic/pstricks/pst-tree.tex0000644000175000017500000007121412116077756021470 0ustar sunsun%% pst-tree.tex %% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu. %% COPYRIGHT 2000-2003 by Denis Girou. %% Copyright 2004-2008 Herbert Voss % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2003/12/01 or later. % % This work has the LPPL maintenance status "maintained". % % This Current Maintainer of this work is Herbert Voss % % This work consists of the file pstricks.tex, PostScript macros % for Generic TeX. % See the PSTricks User's Guide for description. % \csname PSTreeLoaded\endcsname \let\PSTreeLoaded\endinput \ifx\PSTnodesLoaded\endinput\else\input pst-node.tex\fi\relax \def\fileversion{1.01} \def\filedate{2007/06/26} \message{ v\fileversion, \filedate} % \edef\TheAtCode{\the\catcode`\@} \catcode`\@=11 % \newbox\pstree@rootbox \newbox\pstree@box \def\pstree@succrow{% \ifpstreeflip \def\pssubtree@vertical{\pssubtree@vertical@vflip}% \else \def\pssubtree@vertical{\pssubtree@vertical@v}% \fi \def\pstree@node{\pstree@node@v}% \def\pssubtree@horizontal{\pssubtree@horizontal@v}}% \def\pssubtree@vertical@v{% \vrule height \pst@dimc depth \pst@dimd width \z@ \ifnum\psnodecnt=\z@ \global\let\pstree@theleftprofile\pstree@leftprofile \global\let\pstree@therightprofile\pstree@rightprofile \else \psk@thistreefit\pstree@therightprofile\pstree@leftprofile \kern\the\pst@cnth sp \pstree@zip\pstree@therightprofile \pstree@rightprofile\pstree@therightprofile \global\advance\pstree@cnt\pst@cnth \pst@cnth=\pstree@cnt \pstree@zip\pstree@leftprofile \pstree@theleftprofile\pstree@theleftprofile \fi \box\pstree@box \global\advance\psnodecnt 1\relax% }% \def\pssubtree@vertical@vflip{% \vrule height \pst@dimc depth \pst@dimd width \z@ \ifnum\psnodecnt=\z@ \global\let\pstree@theleftprofile\pstree@leftprofile \global\let\pstree@therightprofile\pstree@rightprofile \else \psk@thistreefit\pstree@theleftprofile\pstree@rightprofile \kern-\pst@cnth sp \pstree@zip\pstree@theleftprofile \pstree@leftprofile\pstree@theleftprofile \global\advance\pstree@cnt\pst@cnth \pst@cnth=\pstree@cnt \pstree@zip\pstree@rightprofile \pstree@therightprofile\pstree@therightprofile \fi \box\pstree@box \global\advance\psnodecnt 1\relax% }% \def\pstree@node@v{% \edef\pstree@leftprofile{\psk@thistreenodesize\pst@dima,\pstree@stop,}% \edef\pstree@rightprofile{\psk@thistreenodesize\pst@dimb,\pstree@stop,}% \pssubtree@vertical}% \def\pssubtree@horizontal@v{% \pstree@max\pstree@upprofile\pst@cntg \pst@dimc=\pst@cntg sp \pstree@max\pstree@downprofile\pst@cntg \pst@dimd=\pst@cntg sp \pstree@treebboxadjust \edef\pstree@leftprofile{\number\pst@dima,\pstree@stop,}% \edef\pstree@rightprofile{\number\pst@dimb,\pstree@stop,}% \pssubtree@vertical}% \def\pstree@tightfit#1#2{% \pst@cnth=\z@ \edef\next{\noexpand\pstree@@tightfit#1\noexpand\@nil#2\noexpand\@nil}% \next \advance\pst@cnth\psk@thistreesep\relax \advance\pst@cnth\pstree@tspace\relax \gdef\pstree@tspace{\z@}} \def\pstree@@tightfit#1,#2\@nil#3,#4\@nil{% \ifnum#1=\pstree@stop \let\next\relax \else \ifnum#3=\pstree@stop \let\next\relax \else \pst@cntg=#1 \advance\pst@cntg#3 \ifnum\pst@cntg>\pst@cnth \pst@cnth=\pst@cntg \fi \def\next{\pstree@@tightfit#2\@nil#4\@nil}% \fi \fi \next} \def\pstree@loosefit#1#2{% \pstree@max{#1}\pst@cnth \pstree@max{#2}\pst@cntg \advance\pst@cnth\pst@cntg \advance\pst@cnth\psk@thistreesep\relax \advance\pst@cnth\pstree@tspace\relax \gdef\pstree@tspace{\z@}} \def\tspace#1{% \pst@@killglue \pssetlength\pst@dimg{#1}% \xdef\pstree@tspace{\number\pst@dimg}% \ignorespaces} \def\psset@treefit#1{% \@ifundefined{pstree@#1fit}% {\@pstrickserr{Bad `treefit' parameter value: `#1'}\@ehpa}% {\expandafter\let\expandafter\psk@treefit\csname pstree@#1fit\endcsname}} \psset@treefit{tight} \def\psset@thistreefit#1{% \@ifundefined{pstree@#1fit}% {\@pstrickserr{Bad `treefit' parameter value: `#1'}\@ehpa}% {\expandafter\let\expandafter\psk@thistreefit \csname pstree@#1fit\endcsname}} \psset@treefit{tight} \def\pstree@zip#1#2#3{% \def\pst@tempg{}% \edef\next{\noexpand\pstree@@zip#1\noexpand\@nil#2\noexpand\@nil}% \next \global\let#3\pst@tempg} \def\pstree@@zip#1,#2\@nil#3,#4\@nil{% \ifnum#1=\pstree@stop \edef\pst@tempg{\pst@tempg#3,#4}% \let\next\relax \else \ifnum#3=\pstree@stop \pst@cntg=#1 \advance\pst@cntg-\pst@cnth \edef\pst@tempg{\pst@tempg\the\pst@cntg,}% \def\next{\pstree@@zip#2\@nil\pstree@stop,\@nil}% \else \edef\pst@tempg{\pst@tempg#3,}% \def\next{\pstree@@zip#2\@nil#4\@nil}% \fi \fi \next} \def\pstree@max#1#2{% \pst@cntg=\z@ \expandafter\pstree@@max#1% #2=\pst@cntg}% \def\pstree@@max#1,{% \ifnum#1=\pstree@stop\else \ifnum#1>\pst@cntg \pst@cntg=#1 \fi \expandafter\pstree@@max \fi} \def\pstree@add#1{% \def\pst@tempg{}% \expandafter\pstree@@add#1% \xdef#1{\pst@tempg\pstree@stop,}} \def\pstree@@add#1,{% \ifnum#1=\pstree@stop\else \pst@cnth=#1 \advance\pst@cnth\pst@cntg \xdef\pst@tempg{\pst@tempg\the\pst@cnth,}% \expandafter\pstree@@add \fi} \newcount\psnodecnt \let\c@psnodecnt\psnodecnt \newcount\pstreelevel \let\c@pstreelevel\pstreelevel \newcount\pstreecnt \let\c@pstreecnt\pstreecnt \newcount\pstree@cnt % \def\pstree{\def\pst@par{}\pst@object{pstree}} \def\pstree@i{\def\pstree@makebox{\pst@@makebox}\pstree@ii} % \def\psTree{\def\pst@par{}\pst@object{psTree}} \def\psTree@i{\def\pstree@makebox{\pst@makelongbox}\pstree@ii} % hv --begin 1.00 2007-01-03 make it LaTeX-compatible %\def\endpsTree{\pst@endlongbox\ignorespaces} \def\endpsTree{\pst@endlongbox\csname ignorespacesafterend\endcsname} % hv --end \def\pstree@ii{% \ifnum\pstreelevel=\z@ \let\pstree@savedshortput\pst@shortput \psset@shortput{tab}% \else \pst@@killglue \fi \begingroup \begingroup \def\pstree@node{% \xdef\pstree@next{% \noexpand\@psttrue \noexpand\def\noexpand\pst@tempa{\number\pst@dima}% \noexpand\def\noexpand\pst@tempb{\number\pst@dimb}% \noexpand\def\noexpand\pst@tempc{\number\pst@dimc}% \noexpand\def\noexpand\pst@tempd{\number\pst@dimd}}% \box\pstree@box}% \def\pssubtree@horizontal{\pssubtree@horizontal@o}% \def\pssubtree@vertical{\pssubtree@vertical@o}% \global\let\pstree@next\relax \pst@makebox\pstree@iii} % \def\pstree@iii{% \global\setbox\pst@boxg=\box\pst@hbox \endgroup \setbox\pstree@rootbox=\box\pst@boxg \@pstfalse \pstree@next \if@pst \ifdim\wd\pstree@rootbox=\z@\else \@pstrickserr{Extraneous space in root node}\@ehpa \typeout{===>\the\wd\pst@hbox (rootbox)} \wd\pstree@rootbox=\z@ \fi \else \@pstrickserr{Missing or bad root node (level \the\pstreelevel, node \the\psnodecnt)}\@ehpa \def\pstree@next{% \def\pst@tempa{0}% \def\pst@tempb{0}% \def\pst@tempc{0}% \def\pst@tempd{0}}% \wd\pstree@rootbox=\z@ \fi \pstree@savevalues \begingroup \pstree@initsuccvalues \pstree@setlevelpar \pstree@do} % \def\pstree@setlevelpar{% \advance\pstreelevel1 \let\psk@thislevelsep\relax \let\psk@thistreesep\relax \let\psk@thistreefit\relax \let\psk@thistreenodesize\relax \csname pstreehook\romannumeral\pstreelevel\endcsname \use@par \ifx\psk@thistreesep\relax \let\psk@thistreesep\psk@treesep \fi \ifx\psk@thistreenodesize\relax \let\psk@thistreenodesize\psk@treenodesize \fi \ifx\psk@thistreefit\relax \let\psk@thistreefit\psk@treefit \fi \ifx\psk@thislevelsep\relax \let\psk@thislevelsep\psk@levelsep \let\psk@thislevelsepmode\psk@levelsepmode \fi \ifnum\psk@treemode=\pstree@predmode\else \global\advance\pstreecnt1 \edef\pstree@thetree{\the\pstreecnt}% \let\pstree@predmode\psk@treemode \fi \ifx\psk@thislevelsepmode\relax \pst@dimg=\psk@thislevelsep\relax \pst@cntg=0\@nameuse{pstree@levelsepadjust-\pstree@thetree-\the\pstreelevel}% \advance\pst@dimg\pst@cntg sp \edef\psk@thislevelsep{\number\pst@dimg sp}% \fi \ifnum\psk@treemode>1 \def\pst@tposflip{1 sub neg }% \else \def\pst@tposflip{}% \fi \ifx\pstree@bboxadjust\@empty\else \xdef\pstree@treebboxadjust{% \pstree@bboxadjust \ifpsshowbbox\noexpand\pstree@showbbox\fi}% \gdef\pstree@bboxadjust{}% \fi \let\pst@thispsbox\@skiplevelfalse} % \def\pstree@predmode{-1} \def\pstree@savevalues{% \edef\pstree@restorevalues{% \noexpand\gdef\noexpand\pstree@theleftprofile{\pstree@theleftprofile}% \noexpand\gdef\noexpand\pstree@therightprofile{\pstree@therightprofile}% \noexpand\gdef\noexpand\pstree@theupprofile{\pstree@theupprofile}% \noexpand\gdef\noexpand\pstree@thedownprofile{\pstree@thedownprofile}% \noexpand\gdef\noexpand\pstree@tspace{\pstree@tspace}% \noexpand\gdef\noexpand\pssucc{\pssucc}% \global\psnodecnt=\the\psnodecnt\relax \global\pstree@cnt=\the\pstree@cnt\relax}% \let\pstree@savebboxadjust\pstree@treebboxadjust} \def\pstree@initsuccvalues{% \def\pstree@therightprofile{\pstree@stop,}% \let\pstree@theleftprofile\pstree@therightprofile \let\pstree@theupprofile\pstree@therightprofile \let\pstree@thedownprofile\pstree@therightprofile \psnodecnt=\z@ \pstree@cnt\z@ \gdef\pstree@tspace{\z@}% \let\pspred\pssucc} \def\pssucc{T} \pstree@initsuccvalues \def\pstree@down{% \pstree@succrow \pstree@makebox{\pstree@vertical{\lower}}} \def\pstree@up{% \pstree@succrow \pstree@makebox{\pstree@vertical{\raise}}} \def\pstree@levelsepadjust#1#2{% % DG/SR modification begin - May 14, 1997 - Patch 1 % Problem with levelsep=*... %\pst@cntg=0\@nameuse{pstree@levelsepadjust-#1}% \pst@cntg=0\@nameuse{pstree@levelsepadjust-#1} % DG/SR modification end \ifnum#2>\pst@cntg \expandafter\xdef\csname pstree@levelsepadjust-#1\endcsname {#2}% \fi} % DG/SR modification begin - October 28, 1999 - Patch 5 - For plain TeX \ifx\@undefined\@auxout\newwrite\@auxout\fi % DG/SR modification end \def\pstree@initlevelsepadjust{% \@ifundefined{@latexerr}{% \immediate\openin1 \jobname.pst \ifeof1 \else \input \jobname.pst \fi \immediate\closein1 \csname newwrite\endcsname\pstree@auxout \immediate\openout\pstree@auxout \jobname.pst }% {\let\pstree@auxout\@auxout}% \global\let\pstree@initlevelsepadjust\relax} \newcount\pstree@stop \pstree@stop=-987654321 \def\pstree@vertical#1{% \pst@cntg=\ifpstreeflip-\fi\wd\pst@hbox \divide\pst@cntg 2 \pstree@add\pstree@theleftprofile \pstree@add\pstree@therightprofile \pst@dimg=\psk@thislevelsep\relax \ifx\psk@thislevelsepmode\relax \pstree@vertlevelsepadjust{#1}% \fi \global\setbox\pstree@box=\hbox{% \vrule height \pst@tempc sp depth \pst@tempd sp width \z@ \unhbox\pstree@rootbox #1\pst@dimg\hbox to\z@{\hss\unhbox\pst@hbox\hss}}% \if@skiplevel \skiplevel@vertical \else \endgroup \fi \edef\pstree@leftprofile{\pst@tempa,\pstree@theleftprofile}% \edef\pstree@rightprofile{\pst@tempb,\pstree@therightprofile}% \pst@dimc=\ht\pstree@box \pst@dimd=\dp\pstree@box \ifpsshowbbox \pstree@max\pstree@leftprofile\pst@cntg \pst@dima=\pst@cntg sp \pstree@max\pstree@rightprofile\pst@cntg \pst@dimb=\pst@cntg sp \pstree@showbbox \fi \dp\pstree@box=\z@ \ht\pstree@box=\z@ \pstree@restorevalues \pssubtree@vertical \global\let\pstree@treebboxadjust\pstree@savebboxadjust \endgroup \ifnum\pstreelevel>\z@\expandafter\ignorespaces\fi} \def\pstree@vertlevelsepadjust#1{% \ifx\if@filesw\iffalse\else \ifx#1\lower \pst@dimh=\pst@tempd sp \advance\pst@dimh\ht\pst@hbox \else \pst@dimh=\pst@tempc sp \advance\pst@dimh\dp\pst@hbox \fi \immediate\write\@auxout{% \string\pstree@levelsepadjust {\pstree@thetree-\the\pstreelevel}{\number\pst@dimh}}% \fi} \def\pstree@succcolumn{% \def\pssubtree@vertical{\pssubtree@vertical@h}% \def\pssubtree@horizontal{\pssubtree@horizontal@h}% \def\pstree@node{\pstree@node@h}}% \def\pssubtree@horizontal@h{% \xdef\pstree@theleftprofile{\number\pst@dima,\pstree@theleftprofile}% \xdef\pstree@therightprofile{\number\pst@dimb,\pstree@therightprofile}% \ifnum\psnodecnt=\z@ \global\let\pstree@theupprofile\pstree@upprofile \global\let\pstree@thedownprofile\pstree@downprofile \box\pstree@box \else \ifpstreeflip \pssubtree@horizontal@@hflip \else \pssubtree@horizontal@@h \fi \fi \global\advance\psnodecnt 1\relax} \def\pssubtree@horizontal@@h{% \psk@thistreefit\pstree@thedownprofile\pstree@upprofile \global\advance\pstree@cnt\pst@cnth \lower\the\pstree@cnt sp\box\pstree@box \pstree@zip\pstree@thedownprofile\pstree@downprofile\pstree@thedownprofile \pst@cnth=\pstree@cnt \pstree@zip\pstree@upprofile\pstree@theupprofile\pstree@theupprofile} \def\pssubtree@horizontal@@hflip{% \psk@thistreefit\pstree@theupprofile\pstree@downprofile \global\advance\pstree@cnt\pst@cnth \raise\the\pstree@cnt sp\box\pstree@box \pstree@zip\pstree@theupprofile\pstree@upprofile\pstree@theupprofile \pst@cnth=\pstree@cnt \pstree@zip\pstree@downprofile\pstree@thedownprofile\pstree@thedownprofile} \def\pstree@node@h{% \edef\pstree@upprofile{\psk@thistreenodesize\pst@dimc,\pstree@stop,}% \edef\pstree@downprofile{\psk@thistreenodesize\pst@dimd,\pstree@stop,}% \pssubtree@horizontal@h}% \def\pssubtree@vertical@h{% \pstree@max\pstree@leftprofile\pst@cntg \pst@dima=\pst@cntg sp \pstree@max\pstree@rightprofile\pst@cntg \pst@dimb=\pst@cntg sp \pstree@treebboxadjust \edef\pstree@upprofile{\number\pst@dimc,\pstree@stop,}% \edef\pstree@downprofile{\number\pst@dimd,\pstree@stop,}% \pssubtree@horizontal@h}% \newif\if@psrighttree \def\pstree@right{% \@psrighttreetrue \pstree@succcolumn \pstree@makebox\pstree@horizontal} \def\pstree@left{% \@psrighttreefalse \pstree@succcolumn \pstree@makebox\pstree@horizontal} \def\pstree@horizontal{% \ifdim\wd\pst@hbox=\z@\else \@pstrickserr{Extraneous space in tree successors}\@ehpa \typeout{===>\the\wd\pst@hbox (hbox)} \fi \pst@cntg=\ifpstreeflip\ht\else\dp\fi\pst@hbox \divide\pst@cntg 2 \pstree@add\pstree@theupprofile \pstree@add\pstree@thedownprofile % DG/SR modification begin - Sep. 24, 1997 - Patch 3 %\ifx\psk@thislevelsepmode\relax %\pstree@horizlevelsepadjust %\fi % DG/SR modification end \pst@dimg\psk@thislevelsep\relax \global\setbox\pstree@box=\hbox{% \unhbox\pstree@rootbox \kern\if@psrighttree\else-\fi\pst@dimg \ifpstreeflip\lower\else\raise\fi\pst@cntg sp\box\pst@hbox}% % DG/SR modification begin - Sep. 24, 1997 - Patch 3 \ifx\psk@thislevelsepmode\relax \pstree@horizlevelsepadjust \fi % DG/SR modification end \if@psrighttree \pst@dimh=\pst@dimg \pstree@max\pstree@therightprofile\pst@cntg \global\advance\pst@dimh\pst@cntg sp \global\pst@dimg=\pst@tempa sp \else \pstree@max\pstree@theleftprofile\pst@cntg \global\advance\pst@dimg\pst@cntg sp \global\pst@dimh=\pst@tempb sp \fi \if@skiplevel\skiplevel@horizontal\else\endgroup\fi \pst@dima=\pst@dimg \pst@dimb=\pst@dimh \edef\pstree@upprofile{\pst@tempc,\pstree@theupprofile}% \edef\pstree@downprofile{\pst@tempd,\pstree@thedownprofile}% \dp\pstree@box=\z@ \ht\pstree@box=\z@ \wd\pstree@box=\z@ \ifpsshowbbox \pstree@max\pstree@upprofile\pst@cntg \pst@dimc=\pst@cntg sp \pstree@max\pstree@downprofile\pst@cntg \pst@dimd=\pst@cntg sp \pstree@showbbox \fi \pstree@restorevalues \pssubtree@horizontal \endgroup \ifnum\pstreelevel>\z@\expandafter\ignorespaces\fi} % DG/SR modification begin - Sep. 24, 1997 - Patch 2 %\def\pstree@horizlevelsepadjust#1{% \def\pstree@horizlevelsepadjust{% % DG/SR modification end \ifx\if@filesw\iffalse\else \if@psrighttree \pst@dimh=\pst@tempb sp \pstree@max\pstree@theleftprofile\pst@cntg \advance\pst@dimh\pst@cntg sp \else \pst@dimh=\pst@tempa sp \pstree@max\pstree@therightprofile\pst@cntg \advance\pst@dimh\pst@cntg sp \fi \immediate\write\@auxout{% \string\pstree@levelsepadjust {\pstree@thetree-\the\pstreelevel}{\number\pst@dimh}}% \fi} \def\psset@treemode#1{% \pst@cntg= \ifx#1U\@empty2\else\ifx#1R\@empty1\else\ifx#1L\@empty3\else0\fi\fi\fi \relax \edef\psk@treemode{\the\pst@cntg}% \ifcase\pst@cntg \let\pstree@do\pstree@down \or \let\pstree@do\pstree@right \or \let\pstree@do\pstree@up \or \let\pstree@do\pstree@left \fi} \def\psk@treemode{0} \let\pstree@do\pstree@down \def\psset@treesep#1{% \pssetlength\pst@dimg{#1}% \edef\psk@treesep{\number\pst@dimg}}% \psset@treesep{.75cm} \def\psset@thistreesep#1{% \pssetlength\pst@dimg{#1}% \edef\psk@thistreesep{\number\pst@dimg}}% \def\psset@treenodesize#1{% \pssetlength\pst@dimg{#1}% \ifdim\pst@dimg<\z@ \let\psk@treenodesize\number \else \edef\psk@treenodesize{\number\pst@dimg\noexpand\@gobble}% \fi} \psset@treenodesize{-1pt} \def\psset@thistreenodesize#1{% \pssetlength\pst@dimg{#1}% \ifdim\pst@dimg<\z@ \let\psk@thistreenodesize\number \else \edef\psk@thistreenodesize{\number\pst@dimg\noexpand\@gobble}% \fi} \def\psset@levelsep#1{% \pst@expandafter{\pst@ifstar\psset@@levelsep}{#1}\@nil} \def\psset@@levelsep#1\@nil{% \pst@@getlength{#1}\psk@levelsep \if@star \pstree@initlevelsepadjust \let\psk@levelsepmode\relax \else \def\psk@levelsepmode{}% \fi} \psset@levelsep{2cm} \def\psset@thislevelsep#1{% \pst@expandafter{\pst@ifstar\psset@@thislevelsep}{#1}\@nil} \def\psset@@thislevelsep#1\@nil{% \pst@@getlength{#1}\psk@thislevelsep \if@star \pstree@initlevelsepadjust \let\psk@thislevelsepmode\relax \else \def\psk@thislevelsepmode{}% \fi} \newif\ifpstreeflip \def\psset@treeflip#1{\@nameuse{pstreeflip#1}} \psset@treeflip{false} \def\pstree@node@o{% \leavevmode \hbox{% \vrule height \pst@dimc depth \pst@dimd width \z@ \kern\pst@dima \box\pstree@box \kern\pst@dimb}} \def\pssubtree@vertical@o{% \pstree@max\pstree@leftprofile\pst@cntg \pst@dima=\pst@cntg sp \pstree@max\pstree@rightprofile\pst@cntg \pst@dimb=\pst@cntg sp \pstree@treebboxadjust \pstree@node} \def\pssubtree@horizontal@o{% \pstree@max\pstree@upprofile\pst@cntg \pst@dimc=\pst@cntg sp \pstree@max\pstree@downprofile\pst@cntg \pst@dimd=\pst@cntg sp \pstree@treebboxadjust \pstree@node} \def\pstree@outer{% \def\pstree@node{\pstree@node@o}% \def\pssubtree@vertical{\pssubtree@vertical@o}% \def\pssubtree@horizontal{\pssubtree@horizontal@o}% \pstreelevel=\z@ \def\pstree@predmode{-1}% \def\pst@tposflip{}% \let\pst@thisbox\relax \let\pst@shortput\pstree@savedshortput} \let\pstree@savedshortput\ignorespaces \pstree@outer \newif\ifpsshowbbox \def\psset@showbbox#1{\@nameuse{psshowbbox#1}}% \psset@showbbox{false} \def\pstree@showbbox{% \setbox\pstree@box=\hbox{% \psframe[linewidth=0,linecolor=black,linestyle=solid,fillstyle=none]% (-\pst@dima,-\pst@dimd)(\pst@dimb,\pst@dimc)% \box\pstree@box}}% \def\psset@edge#1{% \def\psedge{#1}% \ifx\psedge\@none \def\psedge##1##2{}% \fi} \psset@edge{\ncline} \def\pspred{T} \def\pstree@makenodebox{% \pst@@killglue \let\pst@thispsbox\pstree@outer \pst@makebox} \def\begin@treenode{% \pst@@killglue \begingroup \use@par \global\let\pstree@edge\psedge \xdef\pssucc{\pspred-\the\psnodecnt}} \def\MakeShortTnput#1{% \def\end@treenode{\@ifnextchar#1{\tnput@}{\end@@treenode}}} \MakeShortTnput{~} \def\end@@treenode{% \pstree@bboxadjust \gdef\pstree@bboxadjust{}% \ifpsshowbbox\pstree@showbbox\fi \pstree@node \endgroup \ifnum\pstreelevel>\z@ \pstree@edge{\pspred}{\pssucc}% \expandafter\pst@shortput \else \expandafter\ignorespaces \fi} \def\pstree@bboxadjust{} \def\pstree@setbboxadjust#1#2{% \pssetlength\pst@dimg{#1}% \xdef\pstree@bboxadjust{% \pstree@bboxadjust #2\number\pst@dimg sp\relax}} \def\psset@bbl#1{\pstree@setbboxadjust{#1}{\pst@dima=}} \def\psset@bbr#1{\pstree@setbboxadjust{#1}{\pst@dimb=}} \def\psset@bbh#1{\pstree@setbboxadjust{#1}{\pst@dimc=}} \def\psset@bbd#1{\pstree@setbboxadjust{#1}{\pst@dimd=}} \def\psset@xbbl#1{\pstree@setbboxadjust{#1}{\advance\pst@dima}} \def\psset@xbbr#1{\pstree@setbboxadjust{#1}{\advance\pst@dimb}} \def\psset@xbbh#1{\pstree@setbboxadjust{#1}{\advance\pst@dimc}} \def\psset@xbbd#1{\pstree@setbboxadjust{#1}{\advance\pst@dimd}} \let\pstree@treebboxadjust\relax \def\Tn{\def\pst@par{}\pst@object{Tn}} \def\Tn@i{% \pst@@killglue \global\let\pssucc\pspred \begingroup \pst@dima=\z@ \pst@dimb=\z@ \pst@dimc=\z@ \pst@dimd=\z@ \setbox\pstree@box=\hbox{}%% \pstree@node \endgroup \ignorespaces} \def\Tp{\def\pst@par{}\pst@object{Tp}} \def\Tp@i{% \begin@treenode \pst@dima=\z@ \pst@dimb=\z@ \pst@dimc=\z@ \pst@dimd=\z@ \setbox\pstree@box=\hbox{% \pst@newnode{\pssucc}{10}{0 0 }{\tx@InitPnode}}% \end@treenode} \def\Tc{\def\pst@par{}\pst@object{Tc}} \def\Tc@i#1{% \begin@treenode \pssetlength\pst@dima{#1}% \pst@dimb=\pst@dima \pst@dimc=\pst@dima \pst@dimd=\pst@dima \nodealignfalse \setbox\pstree@box=\hbox{\cnode@ii(\z@,\z@){#1}{\pssucc}}% \end@treenode} \def\TC{\def\pst@par{}\pst@object{TC}} \def\TC@i{\Tc@i{\psk@radius}} \def\Toval{\def\pst@par{}\pst@object{Toval}} \def\Toval@i{\pstree@makenodebox{\Toval@ii\ovalnode@ii}} \def\Toval@ii#1{% \begin@treenode \nodealigntrue \setbox\pstree@box=\hbox{#1\pssucc}% \pst@dima=\wd\pstree@box \divide\pst@dima 2 \pst@dimb=\pst@dima \pst@dimc=\ht\pstree@box \pst@dimd=\dp\pstree@box \setbox\pstree@box=\hbox to\z@{\hss\unhbox\pstree@box\hss}% \dp\pstree@box=\z@ \ht\pstree@box=\z@ \end@treenode% } % \def\Tcircle{\def\pst@par{}\pst@object{Tcircle}} \def\Tcircle@i{\pstree@makenodebox{\Toval@ii\circlenode@ii}} % DG/SR modification begin - Mar. 7, 2003 - Patch 6 \def\TCircle{\pst@object{TCircle}} \def\TCircle@i{\pst@@killglue\pst@makebox{\Toval@ii\Circlenode@ii}} % DG/SR modification end % \def\Tf{\def\pst@par{}\pst@object{Tf}} \def\Tf@i{\Toval@ii{\fnode@ii()}} \def\Tdia{\def\pst@par{}\pst@object{Tdia}} \def\Tdia@i{\pstree@makenodebox{\Toval@ii\dianode@ii}} \def\Ttri{\def\pst@par{}\pst@object{Ttri}} \def\Ttri@i{\pstree@makenodebox{\Ttri@ii}} \def\Ttri@ii{% \begin@treenode \nodealigntrue \setbox\pstree@box=\hbox{\trinode@ii\pssucc}% \pst@dima=\pst@dimg % Set by \pst@triboxsep \pst@dimb=\wd\pstree@box \advance\pst@dimb-\pst@dima \pst@dimc=\ht\pstree@box \pst@dimd=\dp\pstree@box \setbox\pstree@box=\hbox to\z@{\hss\unhbox\pstree@box\hss}% \dp\pstree@box=\z@ \ht\pstree@box=\z@ \end@treenode% } \def\Tr{\def\pst@par{}\pst@object{Tr}} % SR modification begin - Oct. 27, 1996 %\def\Tr@i{\pstree@makenodebox{\Tr@ii{\begingroup\rnode@ii}}} \def\Tr@i{\pstree@makenodebox{\Tr@ii{\rnode@iii\rnode@iv}}} % SR modification end \def\Tr@ii#1{% \begin@treenode \def\pstree@nodehook{% \xdef\pstree@next{\pst@dima=\number\pst@dima sp\relax}}% \nodealigntrue \setbox\pstree@box\hbox{#1\pssucc}% \pstree@next \pst@dimb=\wd\pstree@box \advance\pst@dimb-\pst@dima \pst@dimc=\ht\pstree@box \pst@dimd=\dp\pstree@box \setbox\pstree@box\hbox to\z@{\kern-\pst@dima\unhbox\pstree@box\hss}% \ht\pstree@box=\z@ \dp\pstree@box=\z@ \end@treenode} \def\TR{\def\pst@par{}\pst@object{TR}} % DG modification begin - Oct. 25, 1996 %\def\TR@i{\pstree@makenodebox{\Tr@ii{\Rnode@ii}}} \def\TR@i{\pstree@makenodebox{\Tr@ii{\rnode@iii\Rnode@ii}}} % DG modification end \def\Tdot{\def\pst@par{}\pst@object{Tdot}} \def\Tdot@i{% \begin@treenode \def\pstree@nodehook{\xdef\pstree@next{% \pst@dima=\number\pst@dima sp\relax \pst@dimc=\number\pst@dimb sp\relax}}% \nodealignfalse \setbox\pstree@box=\hbox{\dotnode@ii(\z@,\z@)\pssucc}% \pstree@next \pst@dimb=\pst@dima \pst@dimd=\pst@dimc \end@treenode} \def\psset@fansize#1{\pst@@getlength{#1}\psk@fansize} \psset@fansize{1cm} \def\Tfan{\def\pst@par{}\pst@object{Tfan}} \def\Tfan@i{% \addto@par{edge=none}% \begin@treenode \solid@star \pst@dimb=\psk@fansize \pst@dimd=\pslinewidth \advance\pst@dimb-\pst@dimd \divide\pst@dimb 2 \divide\pst@dimd 2 \ifodd\psk@treemode\relax \pst@dima=\pst@dimd \pst@dimc=\pst@dimb \else \pst@dima=\pst@dimb \pst@dimc=\pst@dimd \fi \setbox\pstree@box=\hbox{% \pst@newnode{\pssucc}{16}{}{% /Y 0 def /X 0 def /l \pst@number\pst@dima def /r l def /u \pst@number\pst@dimc def /d u def /NodePos { \tx@GetRnodePos } def}% \def\pst@linetype{1}% \nc@object{Closed}{\pspred}{\pssucc}{.5}{% tx@Dict begin \psline@iii pop end /w \pst@number\pst@dimb CLW 2 div sub def /m \ifodd\psk@treemode false \else true \fi def \tx@Tfan}}% \pst@dimb=\pst@dima \pst@dimd=\pst@dimc \end@treenode} \def\psset@tnsep#1{% \def\pst@tempg{#1}% \ifx\pst@tempg\@empty \def\psk@tnsep{\number\pslabelsep sp}% \else \pst@@getlength{#1}\psk@tnsep \fi} \psset@tnsep{} \def\psset@tnyref#1{\def\psk@tnyref{#1}}% \psset@tnyref{} \def\psset@tnheight#1{\edef\psk@tnheight{#1}} \psset@tnheight{\ht\strutbox} \def\psset@tndepth#1{\edef\psk@tndepth{#1}} \psset@tndepth{\dp\strutbox} \def\psset@tnpos#1{% \def\pst@tempg{#1}% \ifx\pst@tempg\@empty \def\psk@tnpos{% \ifcase\psk@treemode b\or r\or a\or l\fi}% \else \@ifundefined{pstree@tnput@#1}% {\@pstrickserr{Bad tnpos: `#1'}\@ehpa}% {\edef\psk@tnpos{#1}}% \fi} \psset@tnpos{} \def\tnput@#1{\def\pst@par{}\pst@object{tnput}} \def\tnput@i{\pstree@makenodebox{\tnput@ii}} \def\tnput@ii{% \begingroup \use@par \xdef\next{% \if@star\noexpand\pst@starbox\fi \noexpand\def\noexpand\psk@thistndepth{\psk@tndepth}% \noexpand\def\noexpand\psk@thistnheight{\psk@tnheight}% \noexpand\def\noexpand\psk@thistnyref{\psk@tnyref}% \noexpand\def\noexpand\psk@thistnsep{\psk@tnsep}% \expandafter\noexpand\csname pstree@tnput@\psk@tnpos\endcsname}% \endgroup \next \end@treenode} \@namedef{pstree@tnput@b}{% \pstree@tnput@@v\pst@dimd\ht\dp\lower\psk@thistnheight} \@namedef{pstree@tnput@a}{% \pstree@tnput@@v\pst@dimc\dp\ht\raise\psk@thistndepth} \def\pstree@tnput@@v#1#2#3#4#5{% \pst@dimh=\wd\pst@hbox \pst@dimg=\psk@href\pst@dimh \advance\pst@dimg\pst@dimh \divide\pst@dimg 2 \advance\pst@dimh-\pst@dimg \ifdim\pst@dimg>\pst@dima \pst@dima=\pst@dimg \fi \ifdim\pst@dimh>\pst@dimb \pst@dimb=\pst@dimh \fi \pst@dimh=\psk@thistnsep\relax \ifdim\pst@dimh<\z@ \pst@dimh=-\pst@dimh \else \advance\pst@dimh#1% \fi \pssetlength\dimen@{#5}% \ifdim\dimen@>#2\pst@hbox \advance\pst@dimh\dimen@\relax \else \advance\pst@dimh#2\pst@hbox \fi \setbox\pstree@box=\hbox{% \box\pstree@box #4\pst@dimh\hbox to\z@{\kern-\pst@dimg\unhbox\pst@hbox\hss}}% #1=#3\pstree@box \dp\pstree@box=\z@ \ht\pstree@box=\z@} \@namedef{pstree@tnput@l}{% \pstree@tnput@@h\pst@dima{% \hss \lower\pst@dimg\box\pst@hbox \kern\pst@dimh \box\pstree@box}} \@namedef{pstree@tnput@r}{% \pstree@tnput@@h\pst@dimb{% \box\pstree@box \kern\pst@dimh \lower\pst@dimg\box\pst@hbox \hss}}% \def\pstree@tnput@@h#1#2{% \ifx\psk@thistnyref\@empty \pssetlength\pst@dimg\psk@vref \else \pst@dimg=\ht\pst@hbox \advance\pst@dimg\dp\pst@hbox \pst@dimg=\psk@thistnyref\pst@dimg \advance\pst@dimg-\dp\pst@hbox \fi \pst@dimh=\psk@thistnsep\relax \ifdim\pst@dimh<\z@ \pst@dimh=-\pst@dimh \else \advance\pst@dimh#1% \fi #1=\pst@dimh \advance#1\wd\pst@hbox \setbox\pstree@box=\hbox to\z@{#2}% \ifdim\ht\pstree@box>\pst@dimc \pst@dimc=\ht\pstree@box \fi \ifdim\dp\pstree@box>\pst@dimd \pst@dimd=\dp\pstree@box \fi \dp\pstree@box=\z@ \ht\pstree@box=\z@} \newif\if@skiplevel \def\skiplevel{\def\pst@par{}\pst@object{skiplevel}} \def\skiplevel@i{\def\pstree@makebox{\pst@@makebox}\skiplevel@ii} \def\skiplevel@ii{% \pst@@killglue \begingroup \let\pssucc\pspred \def\pst@tempa{0}% \def\pst@tempb{0}% \def\pst@tempc{0}% \def\pst@tempd{0}% \setbox\pstree@rootbox=\hbox{}% \pstree@savevalues \begingroup \pstree@initsuccvalues \pstree@setlevelpar \@skipleveltrue \pstree@do} % DG/SR modification begin - Aug. 31, 1999 - Patch 4 %\def\pstree@gettop#1{\expandafter\pstree@@gettop#1\@nil} %\def\pstree@@gettop#1,#2\@nil{#1} % DG/SR modification end \def\skiplevel@horizontal{% % DG/SR modification begin - Aug. 31, 1999 - Patch 4 %\pst@dimc=\pstree@gettop\pstree@theupprofile sp %\pst@dimd=\pstree@gettop\pstree@thedownprofile sp \edef\pstree@upprofile{\pst@tempc,\pstree@theupprofile}% \edef\pstree@downprofile{\pst@tempd,\pstree@thedownprofile}% \pstree@max\pstree@upprofile\pst@cntg \pst@dimc=\pst@cntg sp \pstree@max\pstree@downprofile\pst@cntg \pst@dimd=\pst@cntg sp % DG/SR modification end \pstree@treebboxadjust \gdef\pstree@treebboxadjust{}% \xdef\pstree@next{% \noexpand\def\noexpand\pst@tempc{\number\pst@dimc}% \noexpand\def\noexpand\pst@tempd{\number\pst@dimd}}% \endgroup \pstree@next} \def\skiplevel@vertical{% % DG/SR modification begin - Aug. 31, 1999 - Patch 4 %\pst@dima=\pstree@gettop\pstree@theleftprofile sp %\pst@dimb=\pstree@gettop\pstree@therightprofile sp \edef\pstree@leftprofile{\pst@tempa,\pstree@theleftprofile}% \edef\pstree@rightprofile{\pst@tempb,\pstree@therightprofile}% \pstree@max\pstree@leftprofile\pst@cntg \pst@dima=\pst@cntg sp \pstree@max\pstree@rightprofile\pst@cntg \pst@dimb=\pst@cntg sp % DG/SR modification end \pstree@treebboxadjust \gdef\pstree@treebboxadjust{}% \xdef\pstree@next{% \noexpand\def\noexpand\pst@tempa{\number\pst@dima}% \noexpand\def\noexpand\pst@tempb{\number\pst@dimb}}% \endgroup \pstree@next} \def\skiplevels{\def\pst@par{}\pst@object{skiplevels}} \def\skiplevels@i#1{% \pst@@killglue \begingroup \pst@cnta=#1\relax \edef\skiplevels@num{\the\pst@cnta}% \def\pstree@makebox{\pst@makelongbox}% \def\endskiplevels{}% \loop \ifnum\pst@cnta>\z@ \advance\pst@cnta-1 \expandafter\def\expandafter\endskiplevels\expandafter{% \endskiplevels\pst@endlongbox} \skiplevel@ii \repeat \expandafter\def\expandafter\endskiplevels\expandafter{% \endskiplevels\endgroup\ignorespaces} \ignorespaces} \catcode`\@=\TheAtCode\relax \endinput %% %% END: pst-tree.tex rivet-1.8.3/data/texmf/tex/generic/pstricks/pst-node.tex0000644000175000017500000007676012116077756021471 0ustar sunsun%% BEGIN pst-node.tex %% %% Nodes with PSTricks 97. %% See the betadoc documentation for usage. %% This uses the header file `pst-node.pro'. %% \def\fileversion{1.00} \def\filedate{2007/10/16} %% %% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu. %% COPYRIGHT by Herbert Voss, hvoss@tug.org. %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN %% archives in directory macros/latex/base/lppl.txt. %% \message{ v\fileversion, \filedate} \csname PSTnodesLoaded\endcsname \let\PSTnodesLoaded\endinput \ifx\PSTricksLoaded\endinput\else\input pstricks.tex \fi\relax \edef\TheAtCode{\the\catcode`\@} \catcode`\@=11 % \pstheader{pst-node.pro} % \def\pst@nodedict{tx@NodeDict begin } \def\pst@zapspace#1 #2{% #1% \ifx#2\@empty\else\expandafter\pst@zapspace\fi #2} % \def\pst@getnode#1#2{\pst@expandafter\pst@@getnode{#1},,\@nil#2} \def\pst@@getnode#1,#2,#3\@nil#4{% \ifx\@empty#3\@empty \edef#4{/N@\pst@zapspace#1 \@empty\space}% \else \pst@cntg=#1\relax \pst@cnth=#2\relax \edef#4{/N@M-\ifnum\psmatrixcnt=\z@ 1\else\the\psmatrixcnt\fi -\the\pst@cntg-\the\pst@cnth\space}% \fi} % \def\tx@NewNode{NewNode } \def\pst@newnode#1#2#3#4{% % DG/SR modification begin - Nov. 9, 2000 - Patch 11 \pst@killglue % DG/SR modification end \leavevmode \pst@getnode{#1}\pst@thenode \pst@Verb{% \pst@nodedict {#3} \ifx\psk@name\relax false \else \psk@name true \fi \pst@thenode #2 {#4} \tx@NewNode end }% % \global\let\psk@name\relax \pstree@nodehook \global\let\pstree@nodehook\relax} \let\pstree@nodehook\relax \newif\ifnodealign \def\psset@nodealign#1{\@nameuse{nodealign#1}} \psset@nodealign{false} \def\pst@nodealign{% \pst@dimg=\ht\pst@hbox \advance\pst@dimg-\dp\pst@hbox \divide\pst@dimg2 \lower\pst@dimg} % \def\tx@InitPnode{InitPnode } \def\pnode{\@ifnextchar({\pnode@}{\pnode@(0,0)}} \def\pnode@(#1)#2{% \pst@@getcoor{#1}% \pst@newnode{#2}{10}{\pst@coor}{\tx@InitPnode}% \ignorespaces} % \def\tx@InitCnode{InitCnode } \def\cnode{\pst@object{cnode}} \def\cnode@i{\@ifnextchar({\cnode@ii}{\cnode@ii(0,0)}} \def\cnode@ii(#1)#2#3{% \leavevmode \hbox{% \use@par \pst@@getcoor{#1}% \pssetlength\pst@dimc{#2}% \pst@dimg=\psk@dimen\pslinewidth \advance\pst@dimc-\pst@dimg \advance\pst@dimc.5\pslinewidth \ifnodealign \kern\pst@dimc \vrule width\z@ height \pst@dimc depth \pst@dimc \fi \pscircle@do(#1){#2}% \pst@newnode{#3}{11}{\pst@coor \pst@number\pst@dimc}{\tx@InitCnode}% %% % DG/SR modification begin - Jul. 30, 1997 - Patch 2 %% %\ifnodealign \kern\pst@dimc\egroup \fi}% \ifnodealign\kern\pst@dimc\fi% %% % DG/SR modification end }% \ignorespaces} % \def\Cnode{\pst@object{Cnode}} \def\Cnode@i{\@ifnextchar({\Cnode@ii}{\Cnode@ii(0,0)}} \def\Cnode@ii(#1)#2{\cnode@ii(#1){\psk@radius}{#2}}% % \def\cnodeput{\pst@object{cnodeput}} \def\cnodeput@i{\@ifnextchar({\cnodeput@iii}{\cnodeput@ii}} \def\cnodeput@ii#1{% \addto@par{rot={#1}}% \@ifnextchar({\cnodeput@iii}{\cnodeput@iii(\z@,\z@)}} \def\cnodeput@iii(#1)#2{% \pst@killglue \@fixedradiusfalse \def\pst@nodehook{\cnodeput@iv{#2}}% \pst@makebox{\cput@v{#1}}} \def\cnodeput@iv#1{% \pst@newnode{#1}{11}{\pscirclebox@iv \pst@number\pslinewidth add}{\tx@InitCnode}% \global\let\pst@nodehook\relax} % \def\Cnodeput{\pst@object{Cnodeput}} \def\Cnodeput@i{\@ifnextchar({\Cnodeput@iii}{\Cnodeput@ii}} \def\Cnodeput@ii#1{% \addto@par{rot={#1}}% \@ifnextchar({\Cnodeput@iii}{\Cnodeput@iii(\z@,\z@)}} \def\Cnodeput@iii(#1)#2{% \pst@killglue \@fixedradiustrue \def\pst@nodehook{\Cnodeput@iv{#2}}% \pst@makebox{\cput@iv{#1}}} \def\Cnodeput@iv#1{% \pst@newnode{#1}{11}{% \pst@number{\wd\pst@hbox} 2 div \pst@number\pst@dima % x y \pst@number\pst@dimb \pst@number\pslinewidth \psk@dimen .5 sub mul sub }% r {\tx@InitCnode}% \global\let\pst@nodehook\relax} \def\circlenode{\pst@object{circlenode}} \def\circlenode@i#1{\pst@makebox{\circlenode@ii{#1}}} \def\circlenode@ii#1{% \begingroup \pst@useboxpar \setbox\pst@hbox=\hbox{% \cnodeput@iv{#1}% \pscirclebox@iii \box\pst@hbox}% \ifnodealign \psboxseptrue \fi \ifpsboxsep \pscirclebox@sep \fi \leavevmode \ifnodealign\pst@nodealign\fi \box\pst@hbox \endgroup} \def\Circlenode{\pst@object{Circlenode}} \def\Circlenode@i#1{\pst@makebox{\Circlenode@ii{#1}}} \def\Circlenode@ii#1{% \begingroup \pst@useboxpar \pst@dima=\ht\pst@hbox \advance\pst@dima\dp\pst@hbox \divide\pst@dima\tw@ \pssetlength\pst@dimb\psk@radius \setbox\pst@hbox=\hbox{% \Cnodeput@iv{#1}% \pscircle(.5\wd\pst@hbox,\pst@dima){\pst@dimb}% \box\pst@hbox}% \ifnodealign \psboxseptrue \fi \ifpsboxsep \psCirclebox@sep \fi \leavevmode \ifnodealign\pst@nodealign\fi \box\pst@hbox \endgroup} \def\tx@GetRnodePos{GetRnodePos } \def\tx@InitRnode{InitRnode } \def\rnode{\@ifnextchar[{\rnode@i}{\def\pst@par{}\rnode@ii}} \def\rnode@i[#1]{\def\pst@par{ref=#1}\rnode@ii} \def\rnode@ii#1{\pst@makebox{\rnode@iii\rnode@iv{#1}}} \def\rnode@iii#1#2{% % DG modification begin - Jan. 1997 \leavevmode % DG modification end \begingroup % DG/SR modification begin - Apr. 28, 1998 - Patch 6 \pst@useboxpar % DG/SR modification end #1% \if@star\pst@starbox\fi \ifnodealign\lower\pst@dimb\fi \hbox{% \pst@newnode{#2}{16}{% \pst@number{\ht\pst@hbox}% \pst@number{\dp\pst@hbox}% \pst@number{\wd\pst@hbox}% \pst@number\pst@dima \pst@number\pst@dimb}% {\tx@InitRnode}% \box\pst@hbox}% \endgroup} \def\rnode@iv{% \pst@dima=\psk@xref\wd\pst@hbox \ifx\psk@yref\relax \pst@dimb=\z@ \else \pst@dimb=\ht\pst@hbox \advance\pst@dimb\dp\pst@hbox \pst@dimb=\psk@yref\pst@dimb \advance\pst@dimb-\dp\pst@hbox \fi} \def\psset@href#1{\pst@checknum{#1}\psk@href} \psset@href{0} \def\psset@vref#1{\def\psk@vref{#1}} \psset@vref{.7ex} \def\Rnode{\pst@object{Rnode}} \def\Rnode@i#1{\pst@makebox{\rnode@iii\Rnode@ii{#1}}} \def\Rnode@ii{% % DG modification begin - Jan. 1997 % - \begingroup removed as it seems to doesn't work any more % - \Rnode doesn't process the optional parameter changes %\begingroup \use@par % DG modification end \pst@dima=\psk@href\wd\pst@hbox \advance\pst@dima\wd\pst@hbox \divide\pst@dima 2 \pssetlength\pst@dimb{\psk@vref}} \def\tx@DiaNodePos{DiaNodePos } \def\dianode{\pst@object{dianode}} \def\dianode@i#1{\pst@makebox{\dianode@ii{#1}}} \def\dianode@ii#1{% \begingroup \pst@useboxpar \psdiabox@iii \setbox\pst@hbox=\hbox{% \pst@newnode{#1}{14}{}{% /X \pst@number\pst@dima def /Y \pst@number\pst@dimb def /w \pst@number\pst@dimc 2 mul def /h \pst@number\pst@dimd 2 mul def /NodePos { \tx@DiaNodePos } def}% \box\pst@hbox}% \ifnodealign\psboxseptrue\fi \ifpsboxsep\psdiabox@sep\fi % DG/SR modification begin - Sep. 2, 1997 - Patch 3 \leavevmode % DG/SR modification end \ifnodealign\lower\pst@dimb\fi \box\pst@hbox \endgroup} \def\tx@TriNodePos{TriNodePos } \def\tx@InitTriNode{InitTriNode } \def\trinode{\pst@object{trinode}} \def\trinode@i#1{\pst@makebox{\trinode@ii{#1}}} \def\trinode@ii#1{% \begingroup \pst@useboxpar \pstribox@iii \setbox\pst@hbox=\hbox{% \pst@newnode{#1}{14}{}{% \pst@number\pst@dimc \pst@number\pst@dimd \ifodd\psk@trimode exch \pst@number\pst@dima \else \pst@number\pst@dimb \fi \psk@trimode \pst@number{\wd\pst@hbox}% \pst@number{\ht\pst@hbox}% \pst@number{\dp\pst@hbox}% \tx@InitTriNode}% \box\pst@hbox}% \ifnodealign\psboxseptrue\fi \ifpsboxsep\pstribox@sep\fi % DG/SR modification begin - Sep. 2, 1997 - Patch 3 \leavevmode % DG/SR modification end \ifnodealign\lower\pst@tempa\fi \box\pst@hbox \endgroup} \def\tx@OvalNodePos{OvalNodePos } \def\ovalnode{\pst@object{ovalnode}} \def\ovalnode@i#1{\pst@makebox{\ovalnode@ii{#1}}} \def\ovalnode@ii#1{% \begingroup \pst@useboxpar \psovalbox@iii \setbox\pst@hbox=\hbox{% \pst@newnode{#1}{14}{}{% /X \pst@number\pst@dima def /Y \pst@number\pst@dimb def /w \pst@number\pst@dimc def /h \pst@number\pst@dimd def /NodePos { \tx@OvalNodePos } def}% \unhbox\pst@hbox}% \ifnodealign\psboxseptrue\fi \ifpsboxsep\psovalbox@sep\fi % DG/SR modification begin - Sep. 2, 1997 - Patch 3 \leavevmode % DG/SR modification end \ifnodealign\lower\pst@dimb\fi \box\pst@hbox \endgroup} \def\dotnode{\pst@object{dotnode}} \def\dotnode@i{\@ifnextchar({\dotnode@ii}{\dotnode@ii(\z@,\z@)}} \def\dotnode@ii(#1)#2{% \leavevmode \hbox{% \use@par \pst@@getcoor{#1}% \pst@getdotsize \pstree@nodehook \ifnodealign \pst@dima=\pst@dimg \kern\pst@dima \vrule width\z@ height \pst@dimh depth \pst@dimh \fi \pst@newnode{#2}{14}{}{% \pst@coor /Y ED /X ED /w \pst@number\pst@dimg def /h \pst@number\pst@dimh def /NodePos { \tx@OvalNodePos } def}% \psdot@ii(#1)% \ifnodealign\kern\pst@dima\fi}% \ignorespaces} \def\psset@framesize#1{\pst@expandafter\psset@@framesize{#1} \@nil} \def\psset@@framesize#1 #2\@nil{% \pssetlength\pst@dimg{#1}% \divide\pst@dimg2 \edef\psk@framewidth{\pst@number\pst@dimg}% \ifx\@empty#2\@empty \let\psk@frameheight\psk@framewidth \else \pssetlength\pst@dimg{#2}% \divide\pst@dimg2 \edef\psk@frameheight{\pst@number\pst@dimg}% \fi} \psset@framesize{10pt} \def\fnode{\pst@object{fnode}} \def\fnode@i{\@ifnextchar({\fnode@ii}{\fnode@ii(\z@,\z@)}} \def\fnode@ii(#1)#2{% \leavevmode \pst@killglue \hbox{% \use@par \begin@ClosedObj \ifnodealign \kern\psk@framewidth\p@ \vrule width\z@ height \psk@frameheight\p@ depth \psk@frameheight\p@ \edef\pst@coor{0 0 }% \else \pst@@getcoor{#1}% \fi \pst@newnode{#2}{14}{}{% \pst@coor /Y ED /X ED /d \psk@dimen .5 sub CLW mul neg def /r \psk@framewidth d add def /l r neg def /u \psk@frameheight d add def /d u neg def /NodePos { \tx@GetRnodePos } def}% \addto@pscode{% /x2 \psk@framewidth CLW \psk@dimen mul sub def /y2 \psk@frameheight CLW \psk@dimen mul sub def \pst@coor 2 copy y2 sub /y1 ED x2 sub /x1 ED y2 add /y2 ED x2 add /x2 ED \psk@cornersize 1 index 0 eq { pop pop \tx@Rect } { \tx@OvalFrame } ifelse}% \def\pst@linetype{2}% \showpointsfalse \end@ClosedObj \ifnodealign\kern\psk@framewidth\p@\fi}% \ignorespaces} \def\psset@nodesepA#1{% \pst@getlength{#1}\psk@nodesepA \def\psk@nodeseptypeA{0 }} \def\psset@nodesepB#1{% \pst@getlength{#1}\psk@nodesepB \def\psk@nodeseptypeB{0 }} \def\psset@nodesep#1{% \pst@getlength{#1}\psk@nodesepA \let\psk@nodesepB\psk@nodesepA \def\psk@nodeseptypeA{0 }% \def\psk@nodeseptypeB{0 }} \psset@nodesep{0pt} \def\psset@XnodesepA#1{% \pst@getlength{#1}\psk@nodesepA \def\psk@nodeseptypeA{1 }} \def\psset@XnodesepB#1{% \pst@getlength{#1}\psk@nodesepB \def\psk@nodeseptypeB{1 }} \def\psset@Xnodesep#1{% \pst@getlength{#1}\psk@nodesepA \let\psk@nodesepB\psk@nodesepA \def\psk@nodeseptypeA{1 }% \def\psk@nodeseptypeB{1 }} \def\psset@YnodesepA#1{% \pst@getlength{#1}\psk@nodesepA \def\psk@nodeseptypeA{2 }} \def\psset@YnodesepB#1{% \pst@getlength{#1}\psk@nodesepB \def\psk@nodeseptypeB{2 }} \def\psset@Ynodesep#1{% \pst@getlength{#1}\psk@nodesepA \let\psk@nodesepB\psk@nodesepA \def\psk@nodeseptypeA{2 }% \def\psk@nodeseptypeB{2 }} \def\psset@armA#1{% \pst@getlength{#1}\psk@armA \def\psk@armtypeA{0 }} \def\psset@armB#1{% \pst@getlength{#1}\psk@armB \def\psk@armtypeB{0 }} \def\psset@arm#1{% \pst@getlength{#1}\psk@armA \let\psk@armB\psk@armA \def\psk@armtypeA{0 }% \def\psk@armtypeB{0 }} \psset@arm{10pt} \def\psset@XarmA#1{% \pst@getlength{#1}\psk@armA \def\psk@armtypeA{1 }} \def\psset@XarmB#1{% \pst@getlength{#1}\psk@armB \def\psk@armtypeB{1 }} \def\psset@Xarm#1{% \pst@getlength{#1}\psk@armA \let\psk@armB\psk@armA \def\psk@armtypeA{1 }% \def\psk@armtypeB{1 }} \def\psset@YarmA#1{% \pst@getlength{#1}\psk@armA \def\psk@armtypeA{2 }} \def\psset@YarmB#1{% \pst@getlength{#1}\psk@armB \def\psk@armtypeB{2 }} \def\psset@Yarm#1{% \pst@getlength{#1}\psk@armA \let\psk@armB\psk@armA \def\psk@armtypeA{2 }% \def\psk@armtypeB{2 }} \def\psset@offsetA#1{\pst@getlength{#1}\psk@offsetA} \def\psset@offsetB#1{\pst@getlength{#1}\psk@offsetB} \def\psset@offset#1{\psset@offsetA{#1}\let\psk@offsetB\psk@offsetA} \psset@offset{0pt} \def\psset@angleA#1{\pst@getangle{#1}\psk@angleA} \def\psset@angleB#1{\pst@getangle{#1}\psk@angleB}% \def\psset@angle#1{% \pst@getangle{#1}\psk@angleA \let\psk@angleB\psk@angleA} \psset@angle{0} \def\psset@arcangleA#1{\pst@getangle{#1}\psk@arcangleA} \def\psset@arcangleB#1{\pst@getangle{#1}\psk@arcangleB}% \def\psset@arcangle#1{% \pst@getangle{#1}\psk@arcangleA \let\psk@arcangleB\psk@arcangleA} \psset@arcangle{8} \def\psset@ncurvA#1{\pst@checknum{#1}\psk@ncurvA} \def\psset@ncurvB#1{\pst@checknum{#1}\psk@ncurvB}% \def\psset@ncurv#1{\psset@ncurvA{#1}\let\psk@ncurvB\psk@ncurvA} \psset@ncurv{.67} \def\tx@GetCenter{GetCenter } \def\tx@XYPos{XYPos } \def\tx@GetEdge{GetEdge } \def\tx@AddOffset{AddOffset } \def\tx@GetEdgeA{GetEdgeA } \def\tx@GetEdgeB{GetEdgeB } \def\tx@GetArmA{GetArmA } \def\tx@GetArmB{GetArmB } % \def\check@arrow#1#2{% \check@@arrow#2-\@nil \if@pst\addto@par{arrows=#2}\def\next{#1}% \else\def\next{#1{#2}}\fi \next} \def\check@@arrow#1-#2\@nil{% \ifx\@nil#2\@nil\@pstfalse\else\@psttrue\fi} % \def\tx@InitNC{InitNC } \def\nc@object#1#2#3#4#5{% \csname begin@#1Obj\endcsname \showpointsfalse \pst@getnode{#2}\pst@tempa \pst@getnode{#3}\pst@tempb \gdef\npos@default{#4 }% \addto@pscode{% /NCLW CLW def \pst@nodedict \psk@offsetA \psk@offsetB neg \psk@nodesepA \psk@nodesepB \psk@nodeseptypeA \psk@nodeseptypeB \pst@tempa \pst@tempb \tx@InitNC { #5 } if end }% \def\use@pscode{% \pst@Verb{gsave \tx@STV newpath \pst@code\space grestore}% \gdef\pst@code{}}% \csname end@#1Obj\endcsname \pst@shortput} % \def\npos@default{.5 } \def\pc@object#1{% \@ifnextchar({\pc@@object#1}{\pst@getarrows{\pc@@object#1}}} \def\pc@@object#1(#2)(#3){% \pnode(#2){@@A}\pnode(#3){@@B}% #1{@@A}{@@B}} \def\tx@LPutLine{LPutLine } \def\tx@LPutLines{LPutLines } \def\tx@BezierMidpoint{BezierMidpoint } \def\tx@HPosBegin{HPosBegin } \def\tx@HPosEnd{HPosEnd } \def\tx@HPutLine{HPutLine } \def\tx@HPutLines{HPutLines } \def\tx@VPosBegin{VPosBegin } \def\tx@VPosEnd{VPosEnd } \def\tx@VPutLine{VPutLine } \def\tx@VPutLines{VPutLines } \def\tx@HPutCurve{HPutCurve } \def\tx@NCCoor{NCCoor } \def\tx@NCLine{NCLine } % \def\ncline{\pst@object{ncline}} \def\ncline@i{\check@arrow{\ncline@ii}} \def\ncline@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{\tx@NCLine}} % \def\pcline{\pst@object{pcline}} \def\pcline@i{\pc@object\ncline@ii} % \def\ncLine{\pst@object{ncLine}} \def\ncLine@i{\check@arrow{\ncLine@ii}} \def\ncLine@ii#1#2{\nc@object{Open}{#1}{#2}{.5}% % DG/SR modification begin - Apr. 14, 1999 - Patch 9 %{\tx@NCLine /LPutPos { xB xA yB yA \tx@LPutLine } def}} {\tx@NCLine /LPutPos { xB yB xA yA \tx@LPutLine } def}} % DG/SR modification end % \def\tx@NCLines{NCLines } \def\nclines{\pst@object{nclines}} \def\nclines@i{\check@arrow\nclines@ii} \def\nclines@ii#1#2{% \begingroup \use@par \def\pst@aftercoors{\nclines@iii{#1}{#2}}% \def\pst@coors{}% \pst@@getcoors} \def\nclines@iii#1#2{% \nc@object{Open}{#1}{#2}{.5}{% tx@Dict begin \psline@iii pop end mark \pst@coors \tx@NCLines}% \endgroup \ignorespaces} \def\tx@NCCurve{NCCurve } \def\nccurve{\pst@object{nccurve}} \def\nccurve@i{\check@arrow{\nccurve@ii}} \def\nccurve@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{% /AngleA \psk@angleA\space def /AngleB \psk@angleB\space def \psk@ncurvB\space \psk@ncurvA\space \tx@NCCurve}} \def\pccurve{\pst@object{pccurve}} \def\pccurve@i{\pc@object\nccurve@ii} % \def\ncarc{\pst@object{ncarc}} \def\ncarc@i{\check@arrow{\ncarc@ii}} \def\ncarc@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{% yB yA sub xB xA sub \tx@Atan dup \psk@arcangleA\space add /AngleA ED \psk@arcangleB\space sub 180 add /AngleB ED \psk@ncurvB\space \psk@ncurvA\space \tx@NCCurve}} \def\pcarc{\pst@object{pcarc}} \def\pcarc@i{\pc@object\ncarc@ii} % \def\tx@NCAngles{NCAngles } \newif\ifPst@pcRef% border or center as reference point (hv) \def\psset@pcRef#1{\@nameuse{Pst@pcRef#1}} \psset@pcRef{false} \def\ncangles{\pst@object{ncangles}} \def\ncangles@i{\check@arrow{\ncangles@ii}} \def\ncangles@ii#1#2{% \nc@object{Open}{#1}{#2}{1.5}{\ncangles@iii \tx@NCAngles}} \def\ncangles@iii{% tx@Dict begin \psline@iii pop end /AngleA \psk@angleA def /AngleB \psk@angleB def /ArmA \psk@armA \ifPst@pcRef GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul add sqrt sub \fi def /ArmB \psk@armB def /ArmTypeA \psk@armtypeA def /ArmTypeB \psk@armtypeB def } % \def\pcangles{\pst@object{pcangles}} \def\pcangles@i{\pc@object\ncangles@ii} \def\tx@NCAngle{NCAngle } \def\ncangle{\pst@object{ncangle}} \def\ncangle@i{\check@arrow{\ncangle@ii}} \def\ncangle@ii#1#2{% \nc@object{Open}{#1}{#2}{1.5}{\ncangles@iii \tx@NCAngle}} \def\pcangle{\pst@object{pcangle}} \def\pcangle@i{\pc@object\ncangle@ii} \def\tx@NCBar{NCBar } \def\ncbar{\pst@object{ncbar}} \def\ncbar@i{\check@arrow{\ncbar@ii}} \def\ncbar@ii#1#2{\nc@object{Open}{#1}{#2}{1.5}{% \ncangles@iii /AngleB \psk@angleA def \tx@NCBar}} \def\pcbar{\pst@object{pcbar}} \def\pcbar@i{\pc@object\ncbar@ii} \def\tx@NCDiag{NCDiag } \def\ncdiag{\pst@object{ncdiag}} \def\ncdiag@i{\check@arrow{\ncdiag@ii}} \def\ncdiag@ii#1#2{% \nc@object{Open}{#1}{#2}{1.5}{\ncangles@iii \tx@NCDiag}} \def\pcdiag{\pst@object{pcdiag}} \def\pcdiag@i{\pc@object\ncdiag@ii} \def\tx@NCDiagg{NCDiagg } \def\ncdiagg{\pst@object{ncdiagg}} \def\ncdiagg@i{\check@arrow{\ncdiagg@ii}} \def\ncdiagg@ii#1#2{% \nc@object{Open}{#1}{#2}{.5}{\ncangles@iii \tx@NCDiagg}} \def\pcdiagg{\pst@object{pcdiagg}} \def\pcdiagg@i{\pc@object\ncdiagg@ii} \def\tx@NCLoop{NCLoop } \def\psset@loopsize#1{\pst@getlength{#1}\psk@loopsize} \psset@loopsize{1cm} \def\ncloop{\pst@object{ncloop}} \def\ncloop@i{\check@arrow{\ncloop@ii}} \def\ncloop@ii#1#2{% \nc@object{Open}{#1}{#2}{2.5}% {\ncangles@iii /loopsize \psk@loopsize def \tx@NCLoop}} \def\pcloop{\pst@object{pcloop}} \def\pcloop@i{\pc@object\ncloop@ii} \def\tx@NCCircle{NCCircle } \def\nccircle{\pst@object{nccircle}} \def\nccircle@i{\check@arrow{\nccircle@ii}} \def\nccircle@ii#1#2{% \pssetlength\pst@dima{#2}% \nc@object{Open}{#1}{#1}{.5}{% /AngleA \psk@angleA def /r \pst@number\pst@dima def \tx@NCCircle \psarc@v end}} \def\tx@NCBox{NCBox } \def\ncbox{\pst@object{ncbox}} \def\ncbox@i{\check@arrow{\ncbox@ii}} \def\ncbox@ii#1#2{% \def\pst@linetype{2}% \nc@object{Closed}{#1}{#2}{.5}{% tx@Dict begin \psline@iii pop end \psk@boxheight \psk@boxdepth \tx@NCBox}} \def\pcbox{\pst@object{pcbox}} \def\pcbox@i{\pc@object\ncbox@ii} \def\tx@NCArcBox{NCArcBox } \def\psset@boxheight#1{\pst@getlength{#1}\psk@boxheight} \def\psset@boxdepth#1{\pst@getlength{#1}\psk@boxdepth} \def\psset@boxsize#1{% \psset@boxheight{#1}% \let\psk@boxdepth\psk@boxheight} \psset@boxsize{.4cm} \def\ncarcbox{\pst@object{ncarcbox}} \def\ncarcbox@i{\check@arrow{\ncarcbox@ii}} \def\ncarcbox@ii#1#2{% \def\pst@linetype{1}% \nc@object{Closed}{#1}{#2}{.5}{% \psk@arcangleA \psk@boxheight \psk@boxdepth \pst@number\pslinearc \tx@NCArcBox}} \def\pcarcbox{\pst@object{pcarcbox}} \def\pcarcbox@i{\pc@object\ncarcbox@ii} \def\tx@Tfan{Tfan } % Changed according pst-beta.bug December 3, 1993 % nrot=: does not work when : is active. \begingroup \catcode`\:=13 \gdef\pst@activerot{\def:{\string:}} \endgroup \def\psset@nrot#1{% \begingroup \pst@activerot \pst@expandafter{\@ifnextchar:{\psset@@nrot}{\psset@@rot}}{#1}\@nil \global\let\pst@tempg\psk@rot \endgroup \let\psk@nrot\pst@tempg} \def\psset@@nrot:#1\@nil{% \psset@@rot#1\@nil \edef\psk@rot{NAngle \ifx\psk@rot\@empty\else\psk@rot add \fi}} \psset@nrot{0} \def\tx@LPutCoor{LPutCoor } \def\tx@LPut{LPut } \def\psset@npos#1{% \def\pst@tempa{#1}% \ifx\pst@tempa\@empty \def\psk@npos{\npos@default}% \else \pst@checknum{#1}\psk@npos \fi} \psset@npos{} \def\ncput{\pst@object{ncput}} \def\ncput@i{\pst@killglue\pst@makebox{\ncput@ii}} \def\ncput@ii{% \begingroup \use@par \if@star\pst@starbox\fi \pst@makesmall\pst@hbox \pst@rotate\psk@nrot\pst@hbox \ncput@iii \endgroup \pst@shortput} \def\ncput@iii{% \leavevmode \hbox{% \pst@Verb{% \pst@nodedict /t \psk@npos def \tx@LPut end \tx@PutBegin}% \box\pst@hbox \pst@Verb{\tx@PutEnd}}} \def\naput{\pst@object{naput}} \def\naput@i{\pst@killglue\pst@makebox{\naput@ii{NAngle 90 add}}} \def\naput@ii#1{% \begingroup \use@par \if@star\pst@starbox\fi \def\psk@refangle{#1 }% \let\psk@rot\psk@nrot \uput@vii {exch pop add a \tx@PtoC h1 add exch w1 add exch }% {tx@Dict /NCLW known { NCLW add } if }% \ncput@iii \endgroup \pst@shortput} \def\nbput{\pst@object{nbput}} \def\nbput@i{\pst@killglue\pst@makebox{\naput@ii{NAngle 90 sub}}} \def\psset@tpos#1{% \pst@checknum{#1}\psk@tpos \ifdim\psk@tpos \p@<\z@ \def\psk@tpos{.5}% % DG/SR modification begin - Sep. 23, 1998 - Patch 7 %\@pstrickserr{Bad `tpos' value: `#1'. Must be 0\p@ \def\psk@tpos{.5}% % DG/SR modification begin - Sep. 23, 1998 - Patch 7 %\@pstrickserr{Bad `tpos' value: `#1'. Must be 0} \def\MakeShortTab#1#2{% \def\pst@shortput@tab{% \def\pst@tempg{\next}% \ifx#1\next \def\pst@tempg{% \@nameuse{% t\ifodd\psk@treemode\ifpstreeflip b\else a\fi \else\ifpstreeflip r\else l\fi\fi put}}% \else \ifx#2\next \def\pst@tempg{% \@nameuse{% t\ifodd\psk@treemode\ifpstreeflip a\else b\fi \else\ifpstreeflip l\else r\fi\fi put}}% \else \ifx\@sptoken\next \let\pst@tempg\pst@shortput \fi \fi \fi \pst@tempg}} \MakeShortTab{^}{_} \def\psset@shortput#1{% \def\pst@tempg{#1}% \ifx\pst@tempg\@none \let\pst@shortput\ignorespaces \else \@ifundefined{pst@shortput@#1}% {\@pstrickserr{Bad short put: `#1'}\@ehpa}% {\edef\pst@shortput{\noexpand\afterassignment\expandafter\noexpand \csname pst@shortput@#1\endcsname\noexpand\let\noexpand\next}}% \fi} \psset@shortput{none} \def\lput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\lput@i}{\lput@ii}}} \def\lput@i[#1]{\addto@par{ref=#1}\lput@ii} \def\lput@ii{\@ifnextchar({\lput@iv}{\lput@iii}} \def\lput@iii#1{\addto@par{nrot=#1}\@ifnextchar({\lput@iv}{\ncput@i}} \def\lput@iv(#1){\addto@par{npos=#1}\ncput@i} \def\mput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\mput@i}{\ncput@i}}} \def\mput@i[#1]{\addto@par{ref=#1}\ncput@i} \def\Lput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Lput@ii}{\Lput@i}}} \def\Lput@i#1{\addto@par{labelsep=#1}\Lput@ii} \def\Lput@ii[#1]{\addto@par{ref={#1}}\@ifnextchar({\Lput@iv}{\Lput@iii}} \def\Lput@iii#1{\addto@par{nrot={#1}}\@ifnextchar({\Lput@iv}{\Lput@v}} \def\Lput@iv(#1){\addto@par{npos=#1}\Lput@v} \def\Lput@v{\pst@killglue\pst@makebox{\Lput@vi}} \def\Lput@vi{% \begingroup \use@par \if@star\pst@starbox\fi \Rput@vi \pst@makesmall\pst@hbox \pst@rotate\psk@nrot\pst@hbox \ncput@iii \endgroup \pst@shortput} \def\Mput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Mput@ii}{\Mput@i}}} \def\Mput@i#1{\addto@par{labelsep=#1}\Mput@ii} \def\Mput@ii[#1]{\addto@par{ref={#1}}\Lput@v} \def\aput@#1{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\aput@i#1}{\aput@ii#1}}} \def\aput@i#1[#2]{\addto@par{labelsep=#2}\aput@ii#1} \def\aput@ii#1{\@ifnextchar({\aput@iv#1}{\aput@iii#1}} \def\aput@iii#1#2{\addto@par{nrot=#2}\@ifnextchar({\aput@iv#1}{#1}} \def\aput@iv#1(#2){\addto@par{npos=#2}#1} \def\aput{\aput@\naput@i} \def\bput{\aput@\nbput@i} \def\Aput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Aput@i}{\naput@i}}} \def\Aput@i[#1]{\addto@par{labelsep=#1}\naput@i} \def\Bput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Bput@i}{\nbput@i}}} \def\Bput@i[#1]{\addto@par{labelsep=#1}\nbput@i} \def\node@coor#1;#2\@nil{% \pst@getnode{#1}\pst@tempg \edef\pst@coor{% \pst@nodedict tx@NodeDict \pst@tempg known \pslbrace \pst@tempg load \tx@GetCenter \psrbrace \pslbrace 0 0 \psrbrace ifelse end }} \def\Node@coor[#1]#2;#3\@nil{% \begingroup \psset{#1}% \@ifnextchar\bgroup{\Node@@@coor}{\Node@@coor}#2\@nil \endgroup \let\pst@coor\pst@tempg} \def\Node@@coor#1\@nil{% \pst@getnode{#1}\pst@tempg \xdef\pst@tempg{% \pst@nodedict tx@NodeDict \pst@tempg known { \psk@nodesepA \psk@angleA \pst@tempg load \psk@nodeseptypeA \tx@GetEdge \psk@offsetA \psk@angleA \tx@AddOffset \pst@tempg load \tx@GetCenter 3 -1 roll add 3 1 roll add exch } { CP } ifelse end }}% \def\Node@@@coor#1{% \pst@@getcoor{#1}% \def\psk@angleA{% \pst@tempg load \tx@GetCenter \pst@coor 3 -1 roll sub 3 1 roll sub neg \tx@Atan}% \Node@@coor} \def\nput{\pst@object{nput}} \def\nput@i#1#2{\pst@killglue\pst@makebox{\nput@ii{#1}{#2}}} \def\nput@ii#1#2{% \begingroup \use@par \psset@refangle{#1}% \let\psk@angleA\psk@refangle \edef\psk@nodesepA{\pst@number\pslabelsep}% \def\psk@nodeseptypeA{0 }% \pslabelsep\z@ \uput@vi \Node@@coor#2\@nil \let\pst@coor\pst@tempg \leavevmode \psput@special\pst@hbox \endgroup \ignorespaces} \newcount\psrow \newcount\pscol \newcount\psmatrixcnt \newskip\psrowsep \newskip\pscolsep \def\psset@colsep#1{\pssetlength\pscolsep{#1}} \def\psset@rowsep#1{\pssetlength\psrowsep{#1}} \psset@colsep{1.5cm} \psset@rowsep{1.5cm} \newif\ifpsmatrix % DG/SR modification begin - Nov. 27, 1998 - Patch 8 %\let\mscount\@multicnt \ifx\mscount\@undefined\let\mscount\@multicnt\fi % DG/SR modification end \def\psmatrix{\begingroup{\ifnum0=`}\fi % Don't want to expand any &. \@ifnextchar[{\psmatrix@i}{\ifnum0=`{\fi}{}\psmatrix@ii}} \def\psmatrix@i[#1]{% \ifnum0=`{\fi}{}% \psset{#1}% \psmatrix@ii} \def\psmatrix@ii{% \KillGlue \edef\psm@beginmath{% \ifmmode$\m@th\ifinner\textstyle\else\displaystyle\fi\fi}% \edef\psm@endmath{\ifmmode$\fi}% \let\\\psm@cr \advance\psmatrixcnt 1 \def\psm@thenode{M-\the\psmatrixcnt-\the\psrow-\the\pscol}% \tabskip\z@ \psrow1 \pscol\z@ \psset@shortput{tablr}% \leavevmode \vbox\bgroup\halign\bgroup&% \begingroup \global\advance\pscol 1 \csname psrowhook\romannumeral\psrow\endcsname \csname pscolhook\romannumeral\pscol\endcsname \psm@beginnode##\psm@endnode\endgroup \cr} % \def\endpsmatrix{% \crcr\egroup\unskip\egroup \endgroup} % % hv 2007-10-16 fix bug with \\[name=...] %\def\psm@cr{{\ifnum0=`}\fi\@ifnextchar[{\psm@@cr}{\psm@@@cr{}}} \def\psm@cr{{\ifnum0=`}\fi\ps@ifnextchar[{\psm@@cr}{\psm@@@cr{}}} % \def\psm@@cr[#1]{\psm@@@cr{\vskip#1\relax}} \def\psm@@@cr#1{% \ifnum0=`{\fi}{}\cr \noalign{% \global\advance\psrow 1 \global\pscol\z@ \vskip\psrowsep #1}} \def\psm@beginnode{% \@ifnextchar\psm@endnode {\let\psm@endnode@i\relax\setbox\pst@hbox=\hbox{}}% {\pst@object{psm@beginnode}}} \def\psm@beginnode@i{% \setbox\pst@hbox=\hbox\bgroup \psm@beginmath \begingroup \ignorespaces} \def\psm@endnode@i{% \unskip \endgroup \psm@endmath \egroup \use@par \@psttrue} \def\psm@endnode{% \@pstfalse \psm@endnode@i \ifnum\pscol>1 \hskip\pscolsep \fi \psk@mnodesize \hfil \nodealigntrue \if@pst\csname mnode@\psk@mnode\endcsname \else\csname mnode@\psk@emnode\endcsname\fi \psk@mcol \psk@@mnodesize} % DG/SR modification begin - Sep. 3, 1999 - Patch 10 - From Michael Sharpe %\def\psspan#1{\mscount#1\relax\loop\ifnum\mscount>\@ne \sp@n\repeat} \def\psspan#1{\global\mscount#1\relax\pstloop\ifnum\mscount>\@ne\sp@n\repeat} \def\pstloop#1\repeat{\gdef\pstiterate{#1\relax\expandafter\pstiterate\fi}% \pstiterate \let\pstiterate\relax} % DG/SR modification end \def\psset@name#1{\pst@getnode{#1}\psk@name} \let\psk@name\relax \def\psset@mcol#1{% \ifx r#1\relax\let\psk@mcol\relax\else \ifx l#1\relax\let\psk@mcol\hfill\else \let\psk@mcol\hfil\fi\fi} \psset@mcol{c} \def\psset@mnodesize#1{% \pssetlength\pst@dimg{#1}% \ifdim\pst@dimg<\z@ \let\psk@mnodesize\relax \let\psk@@mnodesize\relax \else \edef\psk@mnodesize{\noexpand\hbox to\number\pst@dimg sp\noexpand\bgroup}% \let\psk@@mnodesize\egroup \fi} \psset@mnodesize{-1pt} \def\mnode@R{\rnode@iii\Rnode@ii{\psm@thenode}} \def\mnode@r{\rnode@iii\rnode@iv{\psm@thenode}} \def\mnode@oval{\ovalnode@ii{\psm@thenode}} \def\mnode@tri{\trinode@ii{\psm@thenode}} \def\mnode@dia{\dianode@ii{\psm@thenode}} \def\mnode@C{{\nodealigntrue\cnode@ii(\z@,\z@){\psk@radius}{\psm@thenode}}} \def\mnode@f{{\nodealigntrue\fnode@ii(\z@,\z@){\psm@thenode}}} \def\mnode@circle{\circlenode@ii{\psm@thenode}} % hv modification begin - Aug. 16, 2007 \def\mnode@Circle{\Circlenode@ii{\psm@thenode}} % hv modification end - Aug. 16, 2007 \def\mnode@p{\pnode(\z@,\z@){\psm@thenode}} % DG/SR modification begin - Jul. 22, 1997 - Patch 1 \def\mnode@dot{\dotnode@ii(\z@,\z@){\psm@thenode}} % DG/SR modification end \def\mnode@none{\box\pst@hbox} \def\psset@mnode#1{% \@ifundefined{mnode@#1}% {\@pstrickserr{\string\psmatrix\space node `#1' not defined.}\@ehpa}% {\edef\psk@mnode{#1}}} \def\psset@emnode#1{% \@ifundefined{mnode@#1}% {\@pstrickserr{\string\psmatrix\space node `#1' not defined.}\@ehpa}% {\edef\psk@emnode{#1}}} \psset@mnode{R} \psset@emnode{none} %%%% FROM pst-coil.tex \def\nccoil{\pst@object{nccoil}} \def\nccoil@i{\check@arrow{\nccoil@ii}} \def\nccoil@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{% \tx@NCCoor tx@Dict begin % DG/SR modification begin - Mar. 19, 1998 - Patch 5 4 2 roll % DG/SR modification end \psk@coilwidth \pscoilheight \psk@coilarmA \psk@coilarmB \psk@coilaspect \psk@coilinc \pst@coildict \tx@Coil end end}} \def\nczigzag{\pst@object{nczigzag}} \def\nczigzag@i{\check@arrow{\nczigzag@ii}} \def\nczigzag@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{% \tx@NCCoor tx@Dict begin % DG/SR modification begin - Mar. 19, 1998 - Patch 5 4 2 roll % DG/SR modification end \pscoilheight \psk@coilwidth \psk@coilarmA \psk@coilarmB \pst@coildict \tx@ZigZag end \psline@iii \tx@Line end}} \catcode`\@=\TheAtCode\relax \endinput %% %% END pst-node.tex rivet-1.8.3/data/texmf/tex/generic/pst-eps/0000755000175000017500000000000012116077756016727 5ustar sunsunrivet-1.8.3/data/texmf/tex/generic/pst-eps/pst-eps.tex0000644000175000017500000001474212116077756021054 0ustar sunsun%% BEGIN pst-eps.tex %% %% Writing EPS files with PSTricks 97. %% See the PSTricks User's Guide for description. %% %% %% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu. %% COPYRIGHT 2006 by Herbert Voss, hvoss@tug.org. %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN %% archives in directory macros/latex/base/lppl.txt. %% \csname PSTfilesLoaded\endcsname \let\PSTfilesLoaded\endinput \ifx\PSTricksLoaded\endinput\else \def\next{\input pstricks.tex} \expandafter\next \fi \ifx\PSTXKeyLoaded\endinput\else\input pst-xkey\fi % \def\fileversion{1.00} \def\filedate{2006/11/04} \message{ v\fileversion, \filedate} % \edef\TheAtCode{\the\catcode`\@} \catcode`\@=11 \pst@addfams{pst-eps} % Exporting PostScript files % DG/SR modification begin - May 5, 1997 - Patch 1 % With LaTeX 2e, we must force now inclusion of header files %\def\TeXtoEPS{\begingroup\pst@makebox{}\bgroup\ignorespaces} \def\TeXtoEPS{% \ifx\documentclass\@undefined\else\@begindvi\fi \begingroup\pst@makebox{}\bgroup\ignorespaces} % DG/SR modification end \def\endTeXtoEPS{% \egroup % Get contents of page, in case it contains special's: \begingroup \global\setbox\pst@boxg\box\voidb@x \output{\global\setbox\pst@boxg\box\@cclv}% \par\hbox{}\penalty-10000 \endgroup \dp\pst@boxg\z@ \ht\pst@boxg\z@ \wd\pst@boxg\z@ \pst@dimg=3pt \shipout\hbox{% \box\pst@boxg \pst@Verb{gsave CM \tx@STV CP newpath moveto \pst@number\pst@dimg neg 0 rmoveto clip setmatrix}% \vrule width \wd\pst@hbox height \ht\pst@hbox depth \dp\pst@hbox \pstVerb{currentpoint grestore moveto}% \kern -\wd\pst@hbox \unhbox\pst@hbox}% \endgroup \typeout{PSTricks: Converting TeX box to EPS.}% \typeout{\@spaces\@spaces\space\space With dvips, use -E option.}} % Writing PSTricks graphics to EPS files \newwrite\pst@epsout \newwrite\pst@tempout \def\pst@getbp#1#2#3{% \csname psset#1length\endcsname\pst@dimg{#2}% \advance\pst@dimg .49bp \pst@cntg=\pst@dimg \multiply\pst@cntg 5 \divide\pst@cntg 328909 \edef#3{\the\pst@cntg}} \define@key[psset]{pst-eps}{bbllx}{\pst@getbp{x}{#1}\psk@bbllx} \define@key[psset]{pst-eps}{bblly}{\pst@getbp{y}{#1}\psk@bblly} \define@key[psset]{pst-eps}{bburx}{\pst@getbp{x}{#1}\psk@bburx} \define@key[psset]{pst-eps}{bbury}{\pst@getbp{y}{#1}\psk@bbury} \psset[pst-eps]{bbllx=-1pt,bblly=-1pt,bburx=1pt,bbury=1pt} \define@key[psset]{pst-eps}{headers}{% \def\pst@tempg{#1} \ifx\pst@tempg\@none \def\psk@headers{\z@}% 0 -> none \else \def\pst@temph{all}% \ifx\pst@tempg\pst@temph \def\psk@headers{2\relax}% 2 -> all \else \def\psk@headers{1\relax}% 1 -> user \fi \fi} % \define@key[psset]{pst-eps}{headerfile}{\def\psk@headerfile{#1}} \define@boolkey[psset]{pst-eps}[Pst@]{checkfile}[true]{} \psset[pst-eps]{headers=none,checkfile=true,headerfile={}} \define@key[psset]{pst-eps}{makeeps}{% \def\pst@tempg{#1}% \ifx\pst@tempg\@none \def\psk@makeeps{\z@}% 0 -> none \else \def\pst@temph{all}% \ifx\pst@tempg\pst@temph \def\psk@makeeps{3\relax}% 3 -> all \else \def\pst@temph{all*}% 2 -> all* \ifx\pst@tempg\pst@temph \def\psk@makeeps{2\relax}% \else \def\psk@makeeps{1\relax}% 1 -> new \fi \fi \fi} \psset[pst-eps]{makeeps=new} % \def\pst@checkfile#1{% \typeout{pst-eps: check for file #1} \ifcase\psk@makeeps \@pstfalse \or \immediate\openin1=#1 \ifeof1\relax\@psttrue\else\@pstfalse\fi \immediate\closein1 \or \immediate\openin1=#1 \ifeof1 \@psttrue \else \ifPst@checkfile \typeout{^^J PSTricks warning:^^J !! File `#1' exists and will be erased if in current directory!^^J !! Make `#1'? (y=yes; n=no)} \read16 to \pst@tempg \if y\pst@tempg\relax \@psttrue\else\@pstfalse\fi \else\@psttrue\fi \fi \immediate\closein1 \or\@psttrue \fi} % \def\PSTtoEPS{\def\pst@par{}\pst@object{PSTtoEPS}} \begingroup \catcode`\%=12 \catcode`\"=14 \long\gdef\PSTtoEPS@i#1#2{" \begingroup \use@par \newlinechar`\^^J" \pst@checkfile{#1}" \if@pst \immediate\openout\pst@epsout=#1 \def\write@eps##1{\immediate\write\pst@epsout{##1}}" \def\addto@pscode##1{" \begingroup \newlinechar`\ " \write@eps{##1}" \endgroup} \write@eps{" %!PS-Adobe-3.0 EPSF-3.0^^J" %%Creator: PSTricks^^J" %%Title: #1^^J" %%CreationDate: \the\year/\the\month/\the\day^^J" %%BoundingBox: \psk@bbllx\space\psk@bblly\space\psk@bburx\space\psk@bbury^^J" %%EndComments}" \ifcase\psk@headers \def\pst@tempg{}" \or \let\pst@tempg\psk@headerfile \or \edef\pst@tempg{\pst@theheaders,\psk@headerfile}" \fi \ifx\pst@tempg\@empty\else \expandafter\pst@writeheaders\pst@tempg,\@nil \fi \write@eps{%%BeginSetup}" \addto@pscode\pst@dict \write@eps{%%EndSetup}" \ifdim\pstunit=1bp\else \pst@dimg=\pstunit\relax \write@eps{\number\pst@dimg\space 65781.8 div dup scale}" \fi \addto@pscode{" \tx@STP 0 setlinecap 0 setlinejoin 10 setmiterlimit [] 0 setdash newpath}" \setbox\pst@hbox=\hbox{" \def\init@pscode{" \write@eps{" gsave \psk@origin \psk@swapaxes \pst@number\pslinewidth SLW \pst@usecolor\pslinecolor}}" \def\use@pscode{\write@eps{grestore}}" \let\pst@rawfile\pst@filetoeps \def\psclip#1{\pst@misplaced\psclip}" \let\endpsclip\relax \def\pstextpath@@@[##1](##2,##3)##4{\pst@misplaced\pstextpath}" \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}" \def\PSTtoEPS@i##1##2{\pst@misplaced\PSTtoEPS}" #2}" \write@eps{" %%Trailer^^J" end^^J" %%EOF}" \immediate\closeout\pst@epsout \fi \endgroup \ignorespaces} \gdef\pst@writeheaders#1,{" \def\pst@tempg{#1}" \ifx\pst@tempg\@empty\else \write@eps{%%BeginProcSet: #1}" \pst@filetoeps{#1}" \write@eps{%%EndProcSet}" \fi \@ifnextchar\@nil{\let\pst@tempg}{\pst@writeheaders}} \endgroup \def\pst@filetoeps#1{% \begingroup \def\do##1{\catcode`##1=12\relax}% \dospecials \def\addto@pscode##1{\write@eps{##1}}% \pst@@rawfile{#1}% \endgroup} \catcode`\@=\TheAtCode\relax \endinput %% %% END pst-eps.tex rivet-1.8.3/data/texmf/tex/generic/pstricks-add/0000755000175000017500000000000012116077756017724 5ustar sunsunrivet-1.8.3/data/texmf/tex/generic/pstricks-add/pstricks-add.tex0000644000175000017500000040624512116077756023051 0ustar sunsun%% $Id: pstricks-add.tex 39 2008-08-27 21:17:28Z herbert $ %% %% %% This is file `pstricks-add.tex', %% %% IMPORTANT NOTICE: %% %% Package `pstricks-add.tex' %% %% Dominique Rodriguez %% Herbert Voss %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives %% in directory macros/latex/base/lppl.txt. %% %% DESCRIPTION: %% `pstricks-add' is a PSTricks package for additionals to the standard %% pstricks package %% \csname PSTricksAddLoaded\endcsname \let\PSTricksAddLoaded\endinput % % Requires some packages \ifx\PSTricksLoaded\endinput\else\input pstricks \fi \ifx\PSTplotLoaded\endinput\else \input pst-plot \fi \ifx\PSTnodesLoaded\endinput\else\input pst-node \fi \ifx\PSTthreeDLoaded\endinput\else\input pst-3d \fi \ifx\MultidoLoaded\endinput\else \input multido \fi \ifx\PSTXKeyLoaded\endinput\else \input pst-xkey \fi % \def\fileversion{3.10} \def\filedate{2008/08/27} \message{`pstricks-add' v\fileversion, \filedate\space (dr,hv)} % \edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax \SpecialCoor \pst@addfams{pstricks-add} % %% prologue for postcript \pstheader{pstricks-add.pro}% %\pstheader{pst-algparser.pro}% now done by pstricks.tex % %-------------------------------- pstricks ------------------------------------ % %%%%%%% \begin{pspicture} %%%%%%%%%%%%%%%%%%% \newdimen\pst@dimm% \newdimen\pst@dimn% \newdimen\pst@dimo% \newdimen\pst@dimp% \newcount\pst@cntm% \newcount\pst@cntn% \newcount\pst@cnto% \newcount\pst@cntp% %\psset{dx=0}% %\psset{dy=0}% \newcount\@zero\@zero=0\relax \chardef\f@ur=4 % \def\psPiFour{12.566371} \def\psPiTwo{6.283185} \def\psPi{3.14159265} \def\psPiH{1.570796327} \newdimen\pstRadUnit \newdimen\pstRadUnitInv \pstRadUnit=1.047198cm % this is pi/3 \pstRadUnitInv=0.95493cm % this is 3/pi % \def\pst@getdimdim#1 #2 #3\@nil{% \def\pst@tempA{#2}% \ifx\pst@tempA\@empty \pssetlength\pst@dimn{#1}% \pst@dimm=\z@% \else% \pssetlength\pst@dimm{#1}% \pssetlength\pst@dimn{#2}% \fi% } \def\pst@getxdimdim#1 #2 #3\@nil{% \def\pst@tempA{#2}% \ifx\pst@tempA\@empty \pssetxlength\pst@dimn{#1}% \pst@dimm=\z@ \else% \pssetxlength\pst@dimm{#1}% \pssetxlength\pst@dimn{#2}% \fi% } \def\pst@getydimdim#1 #2 #3\@nil{% \def\pst@tempA{#2} \ifx\pst@tempA\@empty \pssetylength\pst@dimn{#1} \pst@dimm=\z@ \else \pssetylength\pst@dimm{#1}% \pssetylength\pst@dimn{#2}% \fi% } % % stolen from latex.ltx to make it TeX compatible % \def\@fornoop#1\@@#2#3{} \long\def\@for#1:=#2\do#3{% \expandafter\def\expandafter\@fortmp\expandafter{#2}% \ifx\@fortmp\@empty \else \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi} \long\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else #5\def#4{#2}\ifx #4\@nnil \else#5\@iforloop #3\@@#4{#5}\fi\fi} \long\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil \expandafter\@fornoop \else #4\relax\expandafter\@iforloop\fi#2\@@#3{#4}} \def\psforeach#1#2#3{% \begingroup \edef\reserved@a{#2}% \@for#1:=\reserved@a\do{#3}% \endgroup% } % % A modulo macro for integer values % \pst@mod{34}{6}\value ==> \value is 4 % \def\pst@mod#1#2#3{% \begingroup% \pst@cntm=#1\pst@cntn=#2\relax% \pst@cnto=\pst@cntm% \divide\pst@cntm by \pst@cntn% \multiply\pst@cntn by \pst@cntm% \advance\pst@cnto by -\pst@cntn% \edef\value{\endgroup\def\noexpand#3{\number\pst@cnto}}\value% } \def\pst@max#1#2#3{% \begingroup% \pst@cntm=#1\pst@cntn=#2\relax% \ifnum\pst@cntm<\pst@cntn\pst@cntm=\pst@cntn\fi \global#3=\the\pst@cntm% \endgroup% } \def\pst@maxdim#1#2#3{% \begingroup% \pst@dimm=#1\pst@dimn=#2\relax% \ifdim\pst@dimm<\pst@dimn\pst@dimm=\pst@dimn\fi \global#3=\the\pst@dimm% \endgroup% } \def\pst@mindim#1#2#3{% \begingroup% \pst@dimm=#1\pst@dimn=#2\relax% \ifdim\pst@dimm>\pst@dimn\pst@dimm=\pst@dimn\fi \global#3=\the\pst@dimm% \endgroup% } \def\pst@abs#1#2{% \begingroup% \pst@cntm=#1\relax% \ifnum\pst@cntm<\z@\pst@cntm=-\pst@cntm\fi% \global#2=\the\pst@cntm \endgroup% } \def\pst@absdim#1#2{% \begingroup% \pst@dimm=#1\relax% \ifdim\pst@dimm<\z@\pst@dimm=-\pst@dimm\fi% \global#2=\the\pst@dimm% \endgroup% } \def\pst@int#1{\expandafter\pst@@int#1..\@nil} \def\pst@@int#1.#2.\@nil{#1} % %--------------------------------------- small stuff ------------------------------- \define@boolkey[psset]{pstricks-add}[Pst@]{CMYK}[true]{} \psset[pstricks-add]{CMYK=true} % \def\defineTColor{\@ifnextchar[{\defineTColor@i}{\defineTColor@i[]}} \def\defineTColor@i[#1]#2#3{% "semi transparency colors" \def\pst@tempA{#1}% \newpsstyle{#2}{% fillstyle=vlines,hatchwidth=0.1\pslinewidth, hatchsep=1\pslinewidth,hatchcolor=#3}% \ifx\pst@tempA\@empty\else\psset{#1}\fi% } \defineTColor{TRed}{red} \defineTColor{TGreen}{green} \defineTColor{TBlue}{blue} % \define@key[psset]{pstricks-add}{fsAngle}{\pst@getangle{#1}\pst@fsAngle } \define@key[psset]{pstricks-add}{fsOrigin}{% \pst@@getcoor{#1}\edef\pst@fsOrigin{\pst@coor T }} \psset[pstricks-add]{fsOrigin={0,0},fsAngle=137.50775} % \def\psfs@spiral{\pst@fill{\pst@fsOrigin \pst@usecolor\psfillcolor clip newpath 0 .1 500 { dup dup sqrt 4 div 0 360 arc fill \pst@fsAngle rotate } for }} % \def\rmultiput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\rmultiput@i}{\rmultiput@i[]}}} \def\rmultiput@i[#1]{\begingroup\psset{#1}\rmultiput@ii} \def\rmultiput@ii#1{\def\@rmultiputArg{#1}% \@ifnextchar({\rmultiput@iii}{\rmultiput@iii(\z@,\z@)}} \def\rmultiput@iii(#1){% \pst@killglue% \if@star\rput*(#1){\@rmultiputArg} \else\rput(#1){\@rmultiputArg}\fi \@ifnextchar({\rmultiput@iii}{\endgroup}% } % #1: (x,y) #2: rotAngle #3: object \def\psrotate{\pst@object{psrotate}} \def\psrotate@i(#1)#2{% \pst@killglue \begingroup% \use@par\pst@makebox{\psrotate@ii(#1){#2}}} \def\psrotate@ii(#1)#2{% \pst@getcoor{#1}\pst@tempA% \pst@getangle{#2}\pst@tempB% \leavevmode% \pst@Verb{% { \pst@tempA /yRot ED /xRot ED \pst@tempB dup cos /cosA ED sin /sinA ED /ax cosA def /by sinA def /cx sinA neg def /dy cosA def /ex xRot cosA mul neg xRot add yRot sinA mul add def /fy xRot sinA mul neg yRot add yRot cosA mul sub def [ax by cx dy ex fy] concat } \tx@TMChange }% \box\pst@hbox% \pst@Verb{ \tx@TMRestore }\endgroup} % % [#1]: obtargs; (#2,#3): center; {#4}: factor; {#5}: object \def\psHomothetie{\pst@object{psHomothetie}} \def\psHomothetie@i(#1)#2{% \begin@SpecialObj% \pst@getcoor{#1}\pst@tempA% converts the coordinates without a unit into pt \pst@makebox{\psHomothetie@ii{#2}}}% put the contents into a box \def\psHomothetie@ii#1{% \pst@Verb{% { \pst@tempA /yH ED /xH ED [#1 0 0 #1 #1 xH mul neg xH add #1 yH mul neg yH add] concat } \tx@TMChange }% \box\pst@hbox% \pst@Verb{\tx@TMRestore}% \end@SpecialObj} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Begin patch TN; Date (YY-MM-DD): 04-07-17; first part \define@key[psset]{}{dash}{% defined in pstricks.tex \pst@expandafter\psset@@dash{#1}\@nil% Error handling for empty argument. } \define@key[psset]{pstricks-add}{maxdashes}{\def\psk@maxdashes{#1}} %\psset{maxdashes=11} \def\psset@@dash#1\@nil{% \def\psk@dash{}% % modification 04-08-07: \pst@cntm0 \def\next##1 ##2\relax{% \expandafter\ifnum\psk@maxdashes>\pst@cntm\relax % 04-08-07 \edef\@tempa{##1}% \ifx\@tempa\@empty\else% gobble leading spaces \pssetlength\pst@dimc{##1}% \advance\pst@cntm by 1 \edef\psk@dash{\psk@dash\space\pst@number\pst@dimc}% \fi% \edef\@tempa{##2}% \ifx\@tempa\@empty\else% detect end \ifx\@tempa\space\else% gobble trailing spaces \next##2\relax% \fi\fi% \else% 04-08-07 \@pstrickserr{Number of dashes > \psk@maxdashes. Increasing 'maxdashes' might work.}\@ehpa% 04-08-07 \fi% 04-08-07 }% \expandafter\next#1 \relax} %% End patch TN; Date (YY-MM-DD): 04-07-17; 1st part %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %\psset{dash=5pt 3pt}% black white black white %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Begin patch TN; Date (YY-MM-DD): 04-07-17; 2nd part \def\psls@dashed{% \psk@linecap\space setlinecap \ifpsdashadjust [ \psk@dash ] \pst@linetype\space \tx@DashLine \else [ \psk@dash ] 0 setdash stroke \fi} %% End patch TN; Date (YY-MM-DD): 04-07-17; 2nd part %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %----------------------------------------------------------------------------------- \pst@def{DashLine}< dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse /b ED % pattern should fit evenly in b dup /X ED % pattern array 0 get /y ED % length of first black segment /z 0 X {add} forall def % length of the full pattern %% Computation of the scaling factor as described by van Zandt: b a .5 sub 2 mul y mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div %%%% scaling factor on stack. /z ED %% now, z is the scaling factor false % for the length test below X { z mul } forall X astore %% modification TN 04-08-07 %%% Checking whether at least one dash in X has positive length: {0 gt or} forall { X 1 a sub y mul } { [ 1 0 ] 0 } ifelse setdash stroke > %% TN end patch; Date (YY-MM-DD): 04-07-17; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \define@key[psset]{pstricks-add}{intSeparator}{\def\psk@intSeparator{#1}} %\psset{intSeparator={,}} % \def\psFormatInt{\def\pst@par{}\pst@object{psFormatInt}} \def\psFormatInt@i#1{{% \pst@killglue \use@par \count1=#1\count2=\count1 \ifnum\count1=0 0\else \ifnum\count1>999999 \count3=\count1 \divide\count3 by 1000000 \the\count3\psk@intSeparator\relax \multiply\count3 by 1000000 \advance\count1 by -\count3 % modulo 1000000 \fi% \ifnum\count2>999 \count3=\count1 \divide\count3 by 1000 \ifnum\count2>99999 \ifnum\count3<100 0\fi \ifnum\count3<10 0\fi \fi% \the\count3\psk@intSeparator\relax \multiply\count3 by 1000 \advance\count1 by -\count3 %modulo 1000 \fi% \ifnum\count2>999 \ifnum\count1<100 0\fi \ifnum\count1<10 0\fi \fi% \the\count1 \fi% }\ignorespaces} % \define@key[psset]{pstricks-add}{braceWidth}{\pst@getlength{#1}\psk@braceWidth} \define@key[psset]{pstricks-add}{bracePos}{\pst@checknum{#1}\psk@bracePos} \define@key[psset]{pstricks-add}{braceWidthInner}{\pst@getlength{#1}\psk@braceWidthInner} \define@key[psset]{pstricks-add}{braceWidthOuter}{\pst@getlength{#1}\psk@braceWidthOuter} % \def\psbrace{\pst@object{psbrace}} \def\psbrace@i(#1)(#2)#3{% \addbefore@par{ref=lb,linewidth=0.01pt,fillstyle=solid,fillcolor=black}% default setting \begin@SpecialObj \if@star\def\pst@tempC{true }\else\def\pst@tempC{false }\fi \ifx\psk@rot\empty\def\psk@@rot{0}\else\let\psk@@rot\psk@rot\fi \def\psk@rot{Alpha \psk@@rot\space add 90 sub}% \pst@getcoor{#1}\pst@tempA \pst@getcoor{#2}\pst@tempB \rput(! /ifStar \pst@tempC def /radius1 \psk@braceWidthOuter def /radius2 \psk@braceWidthInner def /Alpha \pst@tempA \pst@tempB 3 -1 roll sub 3 1 roll exch sub atan def /Length \pst@tempA \pst@tempB Pyth2 def /Left { Length \psk@bracePos\space mul } bind def /Right { Length Left sub } bind def /Width \psk@braceWidth def /pop4 { pop pop pop pop } def gsave [ Alpha cos Alpha sin Alpha sin neg Alpha cos \pst@tempA ] concat 0 0 moveto 0 radius2 neg radius2 radius2 neg radius2 arcto pop4 Left radius2 sub radius1 sub 0 rlineto Left radius2 neg Left radius2 radius1 add neg radius1 arcto pop4 currentpoint /y@Label ED /x@Label ED Left radius2 neg Left radius1 add radius2 neg radius1 arcto pop4 Right radius2 sub radius1 sub 0 rlineto Length radius2 neg Length 0 radius2 arcto pop4 % 0 Width neg rlineto Length radius2 Width add neg Length radius2 sub radius2 Width add neg radius2 arcto pop4 Right radius2 sub radius1 sub neg 0 rlineto Left radius1 add Width radius1 add radius2 add neg radius1 90 180 arc Left radius1 sub Width radius1 add radius2 add neg radius1 0 90 arc Left radius2 sub radius1 sub neg 0 rlineto radius2 Width neg radius2 270 180 arcn 0 0 lineto \ifx\psk@fillstyle\relax\else gsave ifStar { \pst@usecolor\pslinecolor }{ \pst@usecolor\psfillcolor } ifelse fill grestore \fi \pst@number\pslinewidth setlinewidth \pst@usecolor\pslinecolor stroke 0 0 moveto grestore % now calculate the label pos /Dh radius1 radius2 add Width add def \pst@tempA \pst@tempB 3 -1 roll sub 3 1 roll exch sub % dy dx \psk@bracePos\space mul exch \psk@bracePos\space mul % d'x d'y \pst@tempA 3 -1 roll add Dh Alpha cos mul sub % d'x x yA \psk@nodesepB sub % use minus sign to shidt right 3 1 roll add Dh Alpha sin mul add \psk@nodesepA add exch \tx@UserCoor ){#3} \end@SpecialObj} % % -------------- the arrow part ------------- % the original table % \def\pst@arrowtable{,<->,<<->>,>-<,>>-<<,(-),[-],)-(,]-[,|>-<|} % % v : Vee arrow (inside) v,V,f and F by Christophe FOUREY % V : Vee arrow (outside) % f : Filled vee arrow (inside) % F : Filled vee arrow (outside) \edef\pst@arrowtable{\pst@arrowtable,v-v,V-V,f-f,F-F,t-t,T-T} % Vee arrow \define@key[psset]{pstricks-add}{veearrowlength}{\pst@getlength{#1}\psk@veearrowlength} \psset[pstricks-add]{veearrowlength=3mm} % default projected length \define@key[psset]{pstricks-add}{veearrowangle}{\pst@getangle{#1}\psk@veearrowangle} \psset[pstricks-add]{veearrowangle=30} % default angle \define@key[psset]{pstricks-add}{veearrowlinewidth}{\pst@getlength{#1}\psk@veearrowlinewidth} \psset[pstricks-add]{veearrowlinewidth=.35mm} % default vee arrow line width % Filled vee arrow \define@key[psset]{pstricks-add}{filledveearrowlength}{\pst@getlength{#1}\psk@filledveearrowlength} \psset[pstricks-add]{filledveearrowlength=3mm} % default projected length \define@key[psset]{pstricks-add}{filledveearrowangle}{\pst@getangle{#1}\psk@filledveearrowangle} \psset[pstricks-add]{filledveearrowangle=15} % default angle \define@key[psset]{pstricks-add}{filledveearrowlinewidth}{\pst@getlength{#1}\psk@filledveearrowlinewidth} \psset[pstricks-add]{filledveearrowlinewidth=.35mm} % default vee arrow line width \define@key[psset]{pstricks-add}{arrowLW}{\pst@getlength{#1}\psk@arrowLW} % arrowLW as LineWidth for the circled line ends % \def\psas@o{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse {\pst@usecolor\psfillcolor true} false \psk@dotsize \tx@EndDot } \@namedef{psas@*}{\psk@arrowLW\space dup 0 eq { pop }{ SLW } ifelse {\pst@usecolor\psfillcolor false} false \psk@dotsize \tx@EndDot} \pst@def{VeeArrow}<% 1 setlinecap % round caps 1 setlinejoin % round join setlinewidth % vee arrow line width /y ED % projected length 2 div /a ED % angle (divide by 2) /t ED % false = inside, true = outside a sin a cos div y mul /x ED % perpendicular length : x=tan(a).y t { 1 -1 scale } if % if outside : symmetry x neg y moveto % point #1 0 0 L % point #2 x y L % point #3 {closepath gsave fill grestore} if % if filled : close and fill stroke % draw line 0 t {y 2 mul} {0} ifelse moveto> % if outside : twice longer line % VeeArrow : filled? outside? (total) angle (projected) length (arrow) line width \@namedef{psas@v}{% false false \psk@veearrowangle \psk@veearrowlength \psk@veearrowlinewidth \tx@VeeArrow} \@namedef{psas@V}{% false true \psk@veearrowangle \psk@veearrowlength \psk@veearrowlinewidth \tx@VeeArrow} \@namedef{psas@f}{% true false \psk@filledveearrowangle \psk@filledveearrowlength \psk@filledveearrowlinewidth \tx@VeeArrow} \@namedef{psas@F}{% true true \psk@filledveearrowangle \psk@filledveearrowlength \psk@filledveearrowlinewidth \tx@VeeArrow} % And An another arrowhead % architectural tick / oblique arrow % Tick arrow \define@key[psset]{pstricks-add}{tickarrowlength}{\pst@getlength{#1}\psk@tickarrowlength} \psset[pstricks-add]{tickarrowlength=1.5mm} % default projected length \define@key[psset]{pstricks-add}{tickarrowlinewidth}{\pst@getlength{#1}\psk@tickarrowlinewidth} \psset[pstricks-add]{tickarrowlinewidth=.35mm} % default tick arrow line width \pst@def{TickArrow}<% 1 setlinecap % round caps 1 setlinejoin % round join setlinewidth % tick line width /y ED % projected length /t ED % false = normal, true = reversed t { 1 -1 scale } if % if reversed : symmetry y neg y moveto % point #1 y y neg L % point #2 stroke % draw line 0 0 moveto> % origin \@namedef{psas@t}{ false \psk@tickarrowlength \psk@tickarrowlinewidth \tx@TickArrow } \@namedef{psas@T}{ true \psk@tickarrowlength \psk@tickarrowlinewidth \tx@TickArrow } % % HookLeft/RightArrow \newdimen\pshooklength \newdimen\pshookwidth \define@key[psset]{pstricks-add}{hooklength}{\pssetlength\pshooklength{#1}} \define@key[psset]{pstricks-add}{hookwidth}{\pssetlength\pshookwidth{#1}} %\psset{hooklength=3mm,hookwidth=1mm} % \edef\pst@arrowtable{\pst@arrowtable,H-H,h-h} % add new arrow \def\tx@RHook{RHook } % PostScript name \def\tx@Rhook{Rhook } % PostScript name \@namedef{psas@H}{% /RHook { /x ED % hook width /y ED % hook length /z CLW 2 div def % save it x y moveto % goto first point x 0 0 0 0 y curveto % draw Bezier stroke 0 y moveto % define current point } def \pst@number\pshooklength \pst@number\pshookwidth \tx@RHook } \@namedef{psas@h}{% /Rhook { CLW mul % size * CLW add dup % +length size*CLW+length size*CLW+length 2 div /w ED % (size*CLW+length)/2 -> w mul dup /h ED mul % (size*CLW+length) /a ED w neg h abs moveto 0 0 L gsave stroke grestore } def 0 \psk@arrowlength \psk@arrowsize \tx@Rhook } % New parameter "arrowfill", with default as "true" \define@boolkey[psset]{pstricks-add}[ps]{ArrowFill}[true]{} % % Modification of the PostScript macro Arrow to choose to fill or not the arrow % (it require to restore the current linewidth, despite of the scaling) \pst@def{Arrow}<{% CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave \ifpsArrowFill\else\pst@number\pslinewidth \pst@arrowscale\space div SLW \fi w neg h moveto 0 0 L w h L w neg a neg rlineto \ifpsArrowFill gsave fill grestore \else gsave closepath stroke grestore \fi grestore 0 h a sub moveto }> % \define@key[psset]{pstricks-add}{nArrowsA}{\def\psk@nArrowsA{#1}} \define@key[psset]{pstricks-add}{nArrowsB}{\def\psk@nArrowsB{#1}} \define@key[psset]{pstricks-add}{nArrows}{\def\psk@nArrowsA{#1}\def\psk@nArrowsB{#1}} %\psset{nArrows=2} % \@namedef{psas@>>}{% \psk@nArrowsA\space 1 sub { false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow 0 h a sub T } repeat gsave newpath false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow CP grestore moveto } % \@namedef{psas@<<}{% true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow 0 h neg a add T \psk@nArrowsB\space 2 sub { false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow 0 h neg a add T } repeat false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow 0 h a 5 mul 2 div sub moveto } % % DG addition begin - Dec. 18/19, 1997 and Oct. 11, 2002 % Adapted from \psset@arrows \define@key[psset]{pstricks-add}{ArrowInside}{% \def\pst@tempArrow{#1}% \ifx\pst@tempArrow\@empty \def\psk@ArrowInside{} % \else% \begingroup% \pst@activearrows% \xdef\pst@tempg{<#1}% \endgroup% \expandafter\psset@@ArrowInside\pst@tempg\@empty-\@empty\@nil% \if@pst\else\@pstrickserr{Bad intermediate arrow specification: #1}\@ehpa\fi% \fi% } % Adapted from \psset@@arrows \def\psset@@ArrowInside#1-#2\@empty#3\@nil{% \@psttrue \def\next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}% \expandafter\next\pst@arrowtable,#1-#1,\@nil \@ifundefined{psas@#2}% {\@pstfalse\def\psk@ArrowInside{}}% {\def\psk@ArrowInside{#2}}% } % Default value empty \psset{ArrowInside={}} % Modified version of \pst@addarrowdef \def\pst@addarrowdef{% \addto@pscode{% /ArrowA { \ifx\psk@arrowA\@empty \pst@oplineto \else \pst@arrowdef{A} moveto \fi } def /ArrowB { \ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi } def % DG addition /ArrowInside { \ifx\psk@ArrowInside\@empty \else \pst@arrowdefA{Inside} \fi } def }% } % Adapted from \pst@arrowdef \def\pst@arrowdefA#1{% \ifnum\pst@repeatarrowsflag>\z@ /Arrow#1c [ 6 2 roll ] cvx def Arrow#1c \fi \tx@BeginArrow \psk@arrowscale \@nameuse{psas@\@nameuse{psk@Arrow#1}} \tx@EndArrow% } % ArrowInsidePos parameter (default value 0.5) \define@key[psset]{pstricks-add}{ArrowInsidePos}{\pst@checknum{#1}\psk@ArrowInsidePos}% %\psset{ArrowInsidePos=0.5} % % Modified version of \begin@ClosedObj \def\begin@ClosedObj{% \leavevmode% \pst@killglue% \begingroup% \use@par% \solid@star% \ifpsdoubleline\pst@setdoublesep\fi% \pst@addarrowdef% DG addition \init@pscode} % % Redefinition of the PostScript /Line macro to print the intermediate % arrow on each segment of the line % \define@key[psset]{pstricks-add}{ArrowInsideNo}{\pst@checknum{#1}\psk@ArrowInsideNo}% hv 20031001 \define@key[psset]{pstricks-add}{ArrowInsideOffset}{\pst@checknum{#1}\psk@ArrowInsideOffset}% hv 20031001 %\psset{ArrowInsideNo=1,ArrowInsideOffset=0} % \def\arrowType@H{H} \pst@def{Line}< NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if (\psk@ArrowInside) length 0 gt { \ifx\psk@arrowA\arrowType@H % do we have a Hook arrow at the beginning? \pst@number\pshooklength % yes \else \psk@arrowsize\space CLW mul add dup \psk@arrowlength\space mul exch \psk@arrowinset mul neg add \fi /arrowlength exch def 4 copy % copy all four values for the arrow line /y1 ED /x1 ED /y2 ED /x2 ED % save them /Alpha y2 y1 sub x2 x1 sub Atan def % the gradient of the line % 2 copy /y1 ED /x1 ED ArrowA x1 y1 ArrowA % draw arrowA x1 Alpha cos arrowlength mul add % dx add y1 Alpha sin arrowlength mul add % dy add, to get the current point at the end of the arrow tip /n n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 \psk@ArrowInsidePos\space 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos \psk@ArrowInsideOffset\space def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos \psk@ArrowInsidePos\space abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /ArrowPos \psk@ArrowInsideOffset\space def /dArrowPos \psk@ArrowInsideNo 1 gt {% 1.0 \psk@ArrowInsideNo 1.0 add div }{\psk@ArrowInsidePos } ifelse def \psk@ArrowInsideNo\space cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4 2 roll ArrowB L pop pop } if > % % Redefinition of the PostScript /Polygon macro to print the intermediate % arrow on each segment of the line \pst@def{Polygon}<{% NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 \psk@ArrowInsidePos\space 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos \psk@ArrowInsideOffset\space def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos \psk@ArrowInsidePos\space abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ /ArrowPos \psk@ArrowInsideOffset\space def /dArrowPos \psk@ArrowInsideNo\space 1 gt {% 1.0 \psk@ArrowInsideNo\space 1.0 add div }{ \psk@ArrowInsidePos } ifelse def \psk@ArrowInsideNo\space cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath } ifelse % }> % % % Redefinition of the PostScript /OpenBezier macro to print the intermediate % arrow \pst@def{OpenBezier}<{% /dArrowPos \psk@ArrowInsideNo 1 gt {% 1.0 \psk@ArrowInsideNo 1.0 add div }{ \psk@ArrowInsidePos } ifelse def BezierNArray n 1 eq { pop pop }{ 2 copy /y0 ED /x0 ED ArrowA n 4 sub 3 idiv { 6 2 roll 4 2 roll curveto } repeat 6 2 roll 4 2 roll ArrowB /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3 mul cx sub def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx sub def /ay y3 y0 sub cy sub by sub def /getValues { ax t0 3 exp mul bx t0 t0 mul mul add cx t0 mul add x0 add ay t0 3 exp mul by t0 t0 mul mul add cy t0 mul add y0 add ax t 3 exp mul bx t t mul mul add cx t mul add x0 add ay t 3 exp mul by t t mul mul add cy t mul add y0 add } def /getdL { getValues 3 -1 roll sub 3 1 roll sub Pyth } def /CurveLength { /u 0 def /du 0.01 def 0 100 { /t0 u def /u u du add def /t u def getdL add } repeat } def /GetArrowPos { /ende \psk@ArrowInsidePos\space 1 gt {ArrowPos} {ArrowPos CurveLength mul} ifelse def /u 0 def /du 0.01 def /sum 0 def { /t0 u def /u u du add def /t u def /sum getdL sum add def sum ende gt {exit} if } loop u } def /ArrowPos \psk@ArrowInsideOffset\space def /loopNo \psk@ArrowInsidePos\space 1 gt {% CurveLength \psk@ArrowInsidePos\space div cvi }{ \psk@ArrowInsideNo } ifelse def loopNo cvi { /ArrowPos ArrowPos dArrowPos add def /t GetArrowPos def /t0 t 0.95 mul def getValues ArrowInside pop pop pop pop } repeat x1 y1 x2 y2 x3 y3 curveto } ifelse }> % % Redefinition of the PostScript /NCLine macro to print the intermediate % arrow of the line \pst@def{NCLine}<{% NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 \psk@ArrowInsidePos\space 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos \psk@ArrowInsideOffset\space def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos \psk@ArrowInsidePos\space abs def {% /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{% /ArrowPos \psk@ArrowInsideOffset\space def /dArrowPos \psk@ArrowInsideNo 1 gt {% 1.0 \psk@ArrowInsideNo 1.0 add div }{ \psk@ArrowInsidePos } ifelse def \psk@ArrowInsideNo\space cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop lineto pop pop end% }> % \pst@def{NCCurve}<{% GetEdgeA GetEdgeB xA1 xB1 sub yA1 yB1 sub Pyth 2 div dup 3 -1 roll mul /ArmA ED mul /ArmB ED /ArmTypeA 0 def /ArmTypeB 0 def GetArmA GetArmB xA2 yA2 xA1 yA1 2 copy /y0 ED /x0 ED tx@Dict begin ArrowA end xB2 yB2 xB1 yB1 tx@Dict begin ArrowB end /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3 mul cx sub def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx sub def /ay y3 y0 sub cy sub by sub def /getValues { ax t0 3 exp mul bx t0 t0 mul mul add cx t0 mul add x0 add ay t0 3 exp mul by t0 t0 mul mul add cy t0 mul add y0 add ax t 3 exp mul bx t t mul mul add cx t mul add x0 add ay t 3 exp mul by t t mul mul add cy t mul add y0 add } def /getdL { getValues 3 -1 roll sub 3 1 roll sub Pyth } def /CurveLength { /u 0 def /du 0.01 def 0 100 { /t0 u def /u u du add def /t u def getdL add } repeat } def /GetArrowPos { /ende \psk@ArrowInsidePos\space 1 gt {ArrowPos}{ArrowPos CurveLength mul} ifelse def /u 0 def /du 0.01 def /sum 0 def { /t0 u def /u u du add def /t u def /sum getdL sum add def sum ende gt {exit} if } loop u } def /dArrowPos \psk@ArrowInsideNo 1 gt {% 1.0 \psk@ArrowInsideNo 1.0 add div }{ \psk@ArrowInsidePos } ifelse def /ArrowPos \psk@ArrowInsideOffset\space def /loopNo \psk@ArrowInsidePos\space 1 gt {% CurveLength \psk@ArrowInsidePos\space div cvi }{ \psk@ArrowInsideNo } ifelse def loopNo cvi { /ArrowPos ArrowPos dArrowPos add def /t GetArrowPos def /t0 t 0.95 mul def getValues ArrowInside pop pop pop pop } repeat x1 y1 x2 y2 x3 y3 curveto /LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ] cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines } HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def }> % \define@key[psset]{pstricks-add}{dashNo}{\def\psk@dashNo{#1}} \define@key[psset]{pstricks-add}{linecap}{\def\psk@linecap{#1}} \define@key[psset]{pstricks-add}{randomPoints}{\def\psk@randomPoints{#1}} \define@boolkey[psset]{pstricks-add}[Pst@]{color}[true]{} %\psset{randomPoints=1000,color=false} % \def\psRandom{\pst@object{psRandom}}% hv 2004-11-12 \def\psRandom@i{\@ifnextchar({\psRandom@ii}{\psRandom@iii(0,0)(1,1)}} \def\psRandom@ii(#1){\@ifnextchar({\psRandom@iii(#1)}{\psRandom@iii(0,0)(#1)}} \def\psRandom@iii(#1)(#2)#3{% \def\pst@tempA{#3}% \ifx\pst@tempA\pst@empty\psclip{\psframe(#2)}\else\psclip{#3}\fi \pst@getcoor{#1}\pst@tempA \pst@getcoor{#2}\pst@tempB \begin@SpecialObj \addto@pscode{ \pst@tempA\space /yMin exch def /xMin exch def \pst@tempB\space /yMax exch def /xMax exch def /dy yMax yMin sub def /dx xMax xMin sub def rrand srand % initializes the random generator /getRandReal { rand 2147483647 div } def \psk@dotsize % defines /DS ... def \@nameuse{psds@\psk@dotstyle} \psk@randomPoints { \ifPst@color getRandReal getRandReal getRandReal setrgbcolor \fi getRandReal dx mul xMin add getRandReal dy mul yMin add Dot \ifx\psk@fillstyle\psfs@solid fill \fi stroke } repeat }% \end@SpecialObj \endpsclip \ignorespaces } % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%% %%%%%%%%%% %%%%%%%%%%% pst-node %%%%%%%%%% %%%%%%%%%%% %%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % This fixes a bug in pst-node, where the XY-direction is wrong % the types are changed 1<->2 between X<->Y % \define@key[psset]{}{XnodesepA}{% \pst@getlength{#1}\psk@nodesepA \def\psk@nodeseptypeA{2 }% } \define@key[psset]{}{XnodesepB}{% \pst@getlength{#1}\psk@nodesepB \def\psk@nodeseptypeB{2 }% } \define@key[psset]{}{Xnodesep}{% \pst@getlength{#1}\psk@nodesepA \let\psk@nodesepB\psk@nodesepA \def\psk@nodeseptypeA{2 }% \def\psk@nodeseptypeB{2 }% } \define@key[psset]{}{YnodesepA}{% \pst@getlength{#1}\psk@nodesepA \def\psk@nodeseptypeA{1 }% } \define@key[psset]{}{YnodesepB}{% \pst@getlength{#1}\psk@nodesepB \def\psk@nodeseptypeB{1 }% } \define@key[psset]{}{Ynodesep}{% \pst@getlength{#1}\psk@nodesepA \let\psk@nodesepB\psk@nodesepA \def\psk@nodeseptypeA{1 }% \def\psk@nodeseptypeB{1 }% } % % \psGetNodeCenter defines the PS variable #1.x and #1.y, which can then % be used by the user. #1 must be a valid node name \def\psGetNodeCenter#1{ tx@NodeDict begin /N@#1 load GetCenter end % x y on stack in system coor \pst@number\psyunit div /#1.y ED % /#1.y in user coor \pst@number\psxunit div /#1.x ED } % /#1.x in user coor % \define@key[psset]{pstricks-add}{lineAngle}{% \ifdim#1pt=\z@\else\psset{armB=0.5}\fi \def\psk@lineAngle{#1}}% %\psset{lineAngle=0}% % \pst@def{NCDiag}<{ GetEdgeA GetEdgeB GetArmA GetArmB mark \psk@lineAngle\space abs 0 gt { /xTemp xA2 10 add def /yTemp yA2 \psk@lineAngle\space dup sin exch cos div 10 mul add def /dY1 yTemp yA2 sub def /dX1 xTemp xA2 sub def /dY2 yB2 yB1 sub def /dX2 xB2 xB1 sub def dX1 abs 0.01 lt { /m2 dY2 dX2 div def /xB2 xA2 def /yB2 xA2 xB1 sub m2 mul yB1 add def }{ dX2 abs 0.01 lt { /m1 dY1 dX1 div def /xB2 xB1 def /yB2 xB1 xA2 sub m1 mul yA2 add def }{% /m1 dY1 dX1 div def /m2 dY2 dX2 div def /xB2 m1 xA2 mul m2 xB1 mul sub yA2 sub yB1 add m1 m2 sub div def /yB2 xB2 xA2 sub m1 mul yA2 add def } ifelse } ifelse } if ArmB 0 ne { xB1 yB1 } if xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }> % hv 2003-12-22 \pst@def{NCDiagg}<{ GetEdgeA GetArmA \psk@lineAngle\space abs 0 gt { \psk@lineAngle\space } { yB yA2 sub xB xA2 sub Atan 180 add } ifelse /AngleB ED GetEdgeB mark \psk@lineAngle\space abs 0 gt { /dY2 yA2 yA1 sub def /dX2 xA2 xA1 sub def \psk@lineAngle\space abs 90 eq { /m2 dY2 dX2 div def /yA2 xB xA2 sub m2 mul yA2 add def /xA2 xB def }{ /m1 \psk@lineAngle\space dup sin exch cos div def % tan alpha dX2 abs 0.01 lt { /yA2 xA1 xB sub m1 mul yB add def /xA2 xA1 def }{% /m2 dY2 dX2 div def /xA2 m1 xB mul m2 xA2 mul sub yA2 add yB sub m1 m2 sub div def /yA2 xA2 xB sub m1 mul yB add def } ifelse } ifelse } if xB1 yB1 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }> % \def\ncbarr{\pst@object{ncbarr}} \def\ncbarr@i#1#2{ \begingroup \use@par% \psLNode(#1)(#2){0.5}{barr@tempNode}% \pst@dimm=\psk@angleA pt \pst@dimn=180pt % be sure, that angleA is 0 or 180. if not, we set it to 0 \ifdim\pst@dimm=\z@\else\ifdim\pst@dimm=\pst@dimn\else\psset{angleA=0}\fi\fi \ncbar[arrows=-]{#1}{barr@tempNode} \ifdim\psk@angleA pt=\z@\relax \ncbar[angleA=180,angleB=180]{barr@tempNode}{#2} \else\ncbar[angleA=0,angleB=0]{barr@tempNode}{#2}\fi% \endgroup } % #1-------#4----------------#2 % where #1#4= #3 * #1#2 % \def\psLNode(#1)(#2)#3#4{% \pst@getcoor{#1}\pst@tempA% \pst@getcoor{#2}\pst@tempB% \pnode(!% \pst@tempA /YA exch \pst@number\psyunit div def /XA exch \pst@number\psxunit div def \pst@tempB /YB exch \pst@number\psyunit div def /XB exch \pst@number\psxunit div def /dx XB XA sub def /dy YB YA sub def XA dx #3\space mul add YA dy #3\space mul add){#4} } % % build the linear combination #2*#1+#4*#3=#5 \def\psLCNode(#1)#2(#3)#4#5{% \pst@getcoor{#1}\pst@tempA% \pst@getcoor{#3}\pst@tempB% \pnode(!% \pst@tempA /YA exch \pst@number\psyunit div def /XA exch \pst@number\psxunit div def \pst@tempB /YB exch \pst@number\psyunit div def /XB exch \pst@number\psxunit div def XA #2\space mul XB #4\space mul add YA #2\space mul YB #4\space mul add){#5}% } % % \define@boolkey[psset]{pstricks-add}[Pst@]{trueAngle}[true]{} %\psset{trueAngle=false} % \def\psRelNode{\pst@object{psRelNode}} \def\psRelNode@i(#1)(#2)#3#4{{% A - B - factor - node name \use@par \pst@getcoor{#1}\pst@tempA% \pst@getcoor{#2}\pst@tempB% \pnode(! \pst@tempA /YA exch \pst@number\psyunit div def /XA exch \pst@number\psxunit div def \pst@tempB /YB exch \pst@number\psyunit div def /XB exch \pst@number\psxunit div def /AlphaStrich \psk@angleA\space def /unit \pst@number\psyunit \pst@number\psxunit div def % yunit/xunit % /dx XB XA sub def /dy YB YA sub \ifPst@trueAngle\space unit mul \fi\space def /laenge dy dup mul dx dup mul add sqrt #3 mul def /Alpha dy dx atan def /beta Alpha AlphaStrich add def laenge beta cos mul XA add laenge beta sin mul \ifPst@trueAngle\space unit div \fi\space YA add ){#4}% }} % \def\psRelLine{\pst@object{psRelLine}} \def\psRelLine@i{\@ifnextchar({\psRelLine@iii}{\psRelLine@ii}} \def\psRelLine@ii#1{% \addto@par{arrows=#1}% \psRelLine@iii% } \def\psRelLine@iii(#1)(#2)#3#4{{ \pst@killglue \use@par \psRelNode(#1)(#2){#3}{#4} \psline(#1)(#4)% }\ignorespaces} % % #1 options % draw a parallel line to #2 #3 % #2---------#3 % #4----------#5(new node) % #5 length of the line % #6 node name \def\psParallelLine{\pst@object{psParallelLine}} \def\psParallelLine@i{\@ifnextchar({\psParallelLine@iii}{\psParallelLine@ii}} \def\psParallelLine@ii#1{% \addto@par{arrows=#1}% \psParallelLine@iii% } \def\psParallelLine@iii(#1)(#2)(#3)#4#5{{ \pst@killglue \use@par \pst@getcoor{#1}\pst@tempA \pst@getcoor{#2}\pst@tempB \pst@getcoor{#3}\pst@tempC % \pst@getlength{#4}\pst@dima \pnode(!% \pst@tempA /YA exch \pst@number\psyunit div def /XA exch \pst@number\psxunit div def \pst@tempB /YB exch \pst@number\psyunit div def /XB exch \pst@number\psxunit div def \pst@tempC /YC exch \pst@number\psyunit div def /XC exch \pst@number\psxunit div def % /dx XB XA sub def /dy YB YA sub def /laenge dy dup mul dx dup mul add sqrt #4 mul def /Alpha dy dx atan def laenge Alpha cos mul XC add laenge Alpha sin mul YC add ){#5}% \psline(#3)(#5) }\ignorespaces} % \def\psIntersectionPoint(#1)(#2)(#3)(#4)#5{% \pst@getcoor{#1}\pst@tempA \pst@getcoor{#2}\pst@tempB \pst@getcoor{#3}\pst@tempC \pst@getcoor{#4}\pst@tempd \pnode(!% \pst@tempA /YA exch \pst@number\psyunit div def /XA exch \pst@number\psxunit div def \pst@tempB /YB exch \pst@number\psyunit div def /XB exch \pst@number\psxunit div def \pst@tempC /YC exch \pst@number\psyunit div def /XC exch \pst@number\psxunit div def \pst@tempd /YD exch \pst@number\psyunit div def /XD exch \pst@number\psxunit div def /dY1 YB YA sub def /dX1 XB XA sub def /dY2 YD YC sub def /dX2 XD XC sub def dX1 abs 0.01 lt { /m2 dY2 dX2 div def XA dup XC sub m2 mul YC add }{ dX2 abs 0.01 lt { /m1 dY1 dX1 div def XC dup XA sub m1 mul YA add }{% /m1 dY1 dX1 div def /m2 dY2 dX2 div def m1 XA mul m2 XC mul sub YA sub YC add m1 m2 sub div dup XA sub m1 mul YA add } ifelse } ifelse ){#5}% } % \def\psLDNode(#1)(#2)#3#4{% % #1: node A #2: node B #3: dimen measured from A #4: node name \pst@getcoor{#1}\pst@tempA% \pst@getcoor{#2}\pst@tempB% \pssetlength\pst@dimp{#3}% \pnode(!% \pst@tempA /YA exch \pst@number\psyunit div def /XA exch \pst@number\psxunit div def \pst@tempB /YB exch \pst@number\psyunit div def /XB exch \pst@number\psxunit div def /dx XB XA sub def /dy YB YA sub def /angle dy dx Atan def /linelength \pst@number\pst@dimp \pst@number\psunit div def XA linelength angle cos mul add YA linelength angle sin mul add ){#4}% } \def\nlput{\pst@object{nlput}} \def\nlput@i(#1)(#2)#3#4{% \begin@SpecialObj \psLDNode(#1)(#2){#3}{temp@lnput} \pcline[linestyle=none](#1)(temp@lnput)% \ncput[npos=1]{#4}% \end@SpecialObj }% \define@cmdkeys[psset]{pstricks-add}[PSTPSPNk@]{% Christophe Jorssen 2007 blName,bcName,brName, clName,ccName,crName, tlName,tcName,trName}[]{}% \psset[pstricks-add]{% blName=PSPbl,bcName=PSPbc,brName=PSPbr, clName=PSPcl,ccName=PSPcc,crName=PSPcr, tlName=PSPtl,tcName=PSPtc,trName=PSPtr} \def\psDefPSPNodes{\pst@object{psDefPSPNodes}} \def\psDefPSPNodes@i{% \pst@killglue \begingroup \use@par \expandafter\psDefPSPNodes@ii\pic@coor} % \def\psDefPSPNodes@ii(#1)(#2)(#3){% % \pnode(#1){PSPN@temp}\pnode([nodesep=.75,angle=45]PSPN@temp){\PSTPSPNk@blName} % \pnode(#3){PSPN@temp}\pnode([nodesep=.75,angle=-135]PSPN@temp){\PSTPSPNk@trName} \pnode(#1){PSPN@temp}\pnode([angle=45]PSPN@temp){\PSTPSPNk@blName} \pnode(#3){PSPN@temp}\pnode([angle=-135]PSPN@temp){\PSTPSPNk@trName} \pnode(\PSTPSPNk@blName|\PSTPSPNk@trName){\PSTPSPNk@tlName} \pnode(\PSTPSPNk@trName|\PSTPSPNk@blName){\PSTPSPNk@brName} \ncline[linestyle=none]{\PSTPSPNk@blName}{\PSTPSPNk@tlName} \ncput[npos=.5]{\pnode{\PSTPSPNk@clName}} \ncline[linestyle=none]{\PSTPSPNk@blName}{\PSTPSPNk@brName} \ncput[npos=.5]{\pnode{\PSTPSPNk@bcName}} \pnode(\PSTPSPNk@brName|\PSTPSPNk@clName){\PSTPSPNk@crName} \pnode(\PSTPSPNk@bcName|\PSTPSPNk@trName){\PSTPSPNk@tcName} \pnode(\PSTPSPNk@bcName|\PSTPSPNk@clName){\PSTPSPNk@ccName} \endgroup \ignorespaces} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%% %%%%%%%%%% %%%%%%%%%%% pst-plot %%%%%%%%%% %%%%%%%%%%% %%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Euclide Algorithm (macro by Jean-Come Charpentier) % #1 : numerator (number.unit) (e.g. 4.\pi or 3.\ell or 12.a) % #2 : denominator \def\psIrFrac#1#2{{% % extrait le num'erateur et l'unit'e \ps@extract@unit#1\@nil % d'enominateur \pst@cntb=#2\relax \pst@cntc=\@ne % test du signe et op'erandes toutes positives \ifnum\pst@cnta<\z@ \pst@cntc=-\pst@cntc \pst@cnta=-\pst@cnta \fi \ifnum\pst@cntb<\z@ \pst@cntc=-\pst@cntc \pst@cntb=-\pst@cntb \fi \ifnum\pst@cntc=\@ne \def\ps@ir@sign{}% \else \def\ps@ir@sign{-}% \fi % calcul pgcd \loop \pst@cntd=\pst@cnta \pst@cntc=\pst@cnta \divide\pst@cntd\pst@cntb \multiply\pst@cntd\pst@cntb \advance\pst@cntc-\pst@cntd \ifnum\pst@cntc>\z@ \pst@cnta=\pst@cntb \pst@cntb=\pst@cntc \repeat % pgcd dans \ir@r \pst@cntc=\pst@cntb \pst@cnta=\ps@ir@num \pst@cntb=#2\relax % op'erandes toutes positives \ifnum\pst@cnta<\z@ \pst@cnta=-\pst@cnta \fi \ifnum\pst@cntb<\z@ \pst@cntb=-\pst@cntb \fi % division par le pgcd \divide\pst@cnta\pst@cntc \divide\pst@cntb\pst@cntc % affichage \ifnum\pst@cnta=\z@ 0% \else\ifnum\pst@cnta=\@ne \ifnum\pst@cntb=\@ne \ps@ir@sign\ps@ir@unit% \else \frac{\ps@ir@sign\ps@ir@unit}{\the\pst@cntb}% \fi \else \ifnum\pst@cntb=\@ne \ps@ir@sign\the\pst@cnta\ps@ir@unit% \else \frac{\ps@ir@sign\the\pst@cnta\ps@ir@unit}{\the\pst@cntb}% \fi \fi\fi }} % \def\ps@extract@unit#1.#2\@nil{% \pst@cnta=#1\relax \def\ps@ir@num{#1}% sauvegarde (le pgcd 'ecrase la valeur \ir@a) \def\ps@ir@unit{#2}% } % \define@key[psset]{pstricks-add}{labelFontSize}{\def\psk@labelFontSize{#1}}% \define@boolkey[psset]{pstricks-add}[Pst@]{mathLabel}[true]{% \ifPst@mathLabel% \def\pshlabel##1{$\psk@labelFontSize##1$}% \def\psvlabel##1{$\psk@labelFontSize##1$}% \else% \def\pshlabel##1{\psk@labelFontSize##1}% \def\psvlabel##1{\psk@labelFontSize##1}% \fi} %\psset{labelFontSize={},mathLabel} % \define@boolkey[psset]{pstricks-add}[Pst@]{comma}[true]{} \define@boolkey[psset]{pstricks-add}[Pst@]{xAxis}[true]{} \define@boolkey[psset]{pstricks-add}[Pst@]{yAxis}[true]{} \define@boolkey[psset]{pstricks-add}[Pst@]{xyAxes}[true]{% \@nameuse{Pst@xAxis#1}\@nameuse{Pst@yAxis#1}}% %\psset{xyAxes=true}% % \define@key[psset]{pstricks-add}{xlabelPos}{\pst@expandafter\psset@@xlabelPos{#1}\@nil} \define@key[psset]{pstricks-add}{ylabelPos}{\pst@expandafter\psset@@ylabelPos{#1}\@nil} \def\psset@@xlabelPos#1#2\@nil{% \ifx#1t \def\psk@xlabelPos{\tw@}% 2=top \pst@xticksizeC=\pst@xticksizeB% \else \ifx#1a \def\psk@xlabelPos{\@ne}% 1=axis \pst@xticksizeC=\z@% \else \def\psk@xlabelPos{\z@}% 0=bottom \pst@xticksizeC=\pst@xticksizeA% \fi\fi}% \def\psset@@ylabelPos#1#2\@nil{% \ifx#1r \def\psk@ylabelPos{\tw@}% 2=right \pst@yticksizeC=\pst@yticksizeB% \else \ifx#1a \def\psk@ylabelPos{\@ne}% 1=axis \pst@yticksizeC=\z@% \else \def\psk@ylabelPos{\z@}% 0=left \pst@yticksizeC=\pst@yticksizeA% \fi\fi} %\psset{xlabelPos=b, ylabelPos=l}% % \define@key[psset]{pstricks-add}{xyDecimals}{\def\psk@xDecimals{#1}\def\psk@yDecimals{#1}} \define@key[psset]{pstricks-add}{xDecimals}{\def\psk@xDecimals{#1}} \define@key[psset]{pstricks-add}{yDecimals}{\def\psk@yDecimals{#1}} %\psset{xyDecimals={}}% % \define@key[psset]{pstricks-add}{xlogBase}{\def\psk@xlogBase{#1}} \define@key[psset]{pstricks-add}{ylogBase}{\def\psk@ylogBase{#1}} \define@key[psset]{pstricks-add}{xylogBase}{\def\psk@xlogBase{#1}\def\psk@ylogBase{#1}}% %\psset{xylogBase={}}% % \define@key[psset]{pstricks-add}{trigLabelBase}{\pst@getint{#1}{\psk@trigLabelBase}} \psset{trigLabelBase=0} % \define@boolkey[psset]{pstricks-add}[Pst@]{trigLabelsSimplify}[true]{} \psset[pstricks-add]{trigLabelsSimplify=true} % \define@boolkey[psset]{pstricks-add}[Pst@]{trigLabels}[true]{% \ifPst@trigLabels \def\pst@@@hlabel##1{\pshlabel{##1}} \def\pshlabel##1{% \ifnum\psk@trigLabelBase<2 \def\de@nominator{\@ne}\else\def\de@nominator{\psk@trigLabelBase}\fi \def\pst@tempA{##1} \pst@abs{\pst@tempA}\pst@cntm \pst@mod{\pst@cntm}{\de@nominator}\pst@cntp % cntb=##1 modulo trigLabelBase \ifnum\@ne>\pst@cntp % 1 > modulo -> then we have pi/x \pst@cnto=\pst@cntm \divide\pst@cnto by \de@nominator \ifPst@mathLabel% $\psk@labelFontSize \ifnum\pst@tempA<0 -\fi \ifnum\pst@cnto=\@ne % #1 = trigLabelBase \pi % print pi \else \the\pst@cnto\pi % print \pst@cnto/\de@nominator pi \fi$% \else% \psk@labelFontSize% \ifnum\pst@tempA<0 -\fi% \ifnum\pst@cnto=\@ne% % #1 = trigLabelBase $\pi$% % print pi \else% \the\pst@cnto$\pi$% % print \pst@cnto/\de@nominator pi \fi% \fi% \else% \ifPst@mathLabel% $\psk@labelFontSize% \ifnum\pst@cntp=\@ne% % < 1 pi? \if\pst@cntm=\@ne% \frac{\pi}{\de@nominator}% % pi/x \else\ifnum\pst@tempA=-1 \frac{-\pi}{\de@nominator}% \else \ifnum\pst@tempA=1 \frac{\pi}{\de@nominator}% \else\frac{\pst@tempA\pi}{\de@nominator}% (x pi)/y \fi\fi\fi% \else% \ifnum\pst@tempA=1 \frac{\pi}{\de@nominator}% \else\ifnum\pst@tempA=\de@nominator \pi% \else\frac{\pst@tempA\pi}{\de@nominator}% \fi\fi\fi$% \else% \psk@labelFontSize% \ifnum\pst@cntp=\@ne% % < 1 pi? \if\pst@cntm=\@ne% $\frac{\pi}{\de@nominator}$% % pi/x \else\ifnum\pst@tempA=-1 $\frac{-\pi}{\de@nominator}$% \else \ifnum\pst@tempA=1 $\frac{\pi}{\de@nominator}$% \else$\frac{\pst@tempA\pi}{\de@nominator}$% (x pi)/y \fi\fi\fi% \else% \ifnum\pst@tempA=1 $\frac{\pi}{\de@nominator}$% \else\ifnum\pst@tempA=\de@nominator $\pi$% \else$\frac{\pst@tempA\pi}{\de@nominator}$% \fi\fi\fi% \fi% \fi% }% \else% \def\pst@@@hlabel##1{% \edef\@xyDecimals{\psk@xDecimals}% \ifnum\psk@ticks<\tw@% ticks=all|x \ifx\psk@xlogBase\@empty% \pshlabel{\psk@labelFontSize\expandafter\@LabelComma##1..\@nil\psk@xlabelFactor}% \else% \pshlabel{\psk@labelFontSize\psk@xlogBase\textsuperscript{\expandafter\@stripDecimals##1..\@nil}}% \fi% \fi% }% \ifPst@mathLabel% \def\pshlabel##1{$\psk@labelFontSize##1$}\else% \def\pshlabel##1{\psk@labelFontSize##1}% \fi% \fi% }% \psset{trigLabels=false} % %logLines=all|x|y|none (0,1,2,3) \define@key[psset]{pstricks-add}{logLines}{\pst@expandafter\psset@@logLines{#1}\@nil\psk@logLines} \def\psset@@logLines#1#2\@nil#3{% \ifx#1a \let#3\z@ \Pst@maxxTickstrue\Pst@maxyTickstrue \set@xticksize{0 4pt}\set@yticksize{0 4pt}% \else \ifx#1x \let#3\@ne \Pst@maxxTickstrue\Pst@maxyTicksfalse \set@xticksize{0 4pt}% \else \ifx#1y \let#3\tw@ \Pst@maxyTickstrue\Pst@maxxTicksfalse \set@yticksize{0 4pt}% \else \ifx#1n\let#3\thr@@\else \@pstrickserr{Bad argument: `#1#2'}\@ehpa \fi\fi\fi\fi} %\psset{logLines=none}% % % Define "ticklines" parameter (ticklines=all|x|y|none with default=none) %\def\psset@ticklines#1{\pst@expandafter\psset@@ticklines{#1}\@nil\psk@ticklines} %\psset@ticklines{none} \define@key[psset]{pstricks-add}{ylabelFactor}{\def\psk@ylabelFactor{#1}} \define@key[psset]{pstricks-add}{xlabelFactor}{\def\psk@xlabelFactor{#1}} %\psset{xlabelFactor=\relax,ylabelFactor=\relax}% %% #1 : optional arguments passed to psline %% #2 : x value %% #3 : label \def\psxTick{\pst@object{psxTick}}% idea by Martin Chicoine \def\psxTick@i(#1)#2{{ \pst@killglue \addbefore@par{arrows=-} \use@par \psline(#1,\pst@xticksizeB)(#1,\pst@xticksizeA) \rput[t](! #1 \pst@number\pslabelsep \pst@number\pst@xticksizeB add \pst@number\psyunit div neg ){\vphantom{1}#2}}\ignorespaces} % %% #1 : optional arguments passed to psline %% #2 : y value %% #3 : label \def\psyTick{\pst@object{psyTick}}% idea by Martin Chicoine \def\psyTick@i(#1)#2{{ \pst@killglue \addbefore@par{arrows=-} \use@par \psline(\pst@yticksizeB,#1)(\pst@yticksizeA,#1) \rput[r]{0}(!\pst@number\pst@yticksizeB \pst@number\pslabelsep add \pst@number\psxunit div neg #1){#2}}\ignorespaces} % % %% #1 integer %% #2 decimals %% #3 dot \def\@stripDecimals#1.#2.#3\@nil{% \def\pst@dummy{#1}% \ifx\pst@dummy\@empty\the\@zero\else#1\fi% the integer part } % \def\pst@@@vlabel#1{% \edef\@xyDecimals{\psk@yDecimals}% % \psk@yLabel% \ifodd\psk@ticks% ticks=all||y (0,2) \else% \ifx\psk@ylogBase\@empty% % \ifPst@comma \psvlabel{\expandafter\@LabelComma#1..\@nil\psk@ylabelFactor}% % \else\psvlabel{#1\psk@ylabelFactor}\fi% \else% \psvlabel{\psk@ylogBase\textsuperscript{\expandafter\@stripDecimals#1..\@nil }}% \fi% \fi% } \newcount\@digitcounter\@digitcounter=0\relax \def\@inc@digitcounter{\global\advance\@digitcounter by 1\relax} \def\@get@digitcounter{\the\@digitcounter\relax} \def\@Reset@digitcounter{\global\@digitcounter=0\relax} \def\@zeroFill{% \ifnum \@xyDecimals>\@get@digitcounter \bgroup 0\@inc@digitcounter\@zeroFill \egroup% \fi% } % #1 the value, maybe empty % \def\@process@digits#1#2;{% \ifx *#1\@zeroFill\else#1\@inc@digitcounter \ifnum\@xyDecimals>\@get@digitcounter\expandafter\@process@digits#2;\fi\fi% } % \def\@writeDecimals#1{% \ifx\@xyDecimals\@empty% take value as is \def\@tempa{#1}% write only if not empty \ifx\@tempa\@empty% write nothing \else \ifPst@comma{,}\else.\fi% #1% \fi% \else% write only \xy@decimals \ifnum\@xyDecimals>\@zero \ifPst@comma{,}\else.\fi \@Reset@digitcounter \expandafter\@process@digits#1*; \fi% \fi% } %% #1 integer %% #2 decimals %% #3 dot \def\@LabelComma#1.#2.#3\@nil{% \def\pst@tempA{#1}% \ifx\pst@tempA\@empty\the\@zero\else#1\fi% the integer part \def\pst@tempA{#2}% \ifx\pst@tempA\@empty\@writeDecimals{}\else\@writeDecimals{#2}\fi% } % \def\psxs@none{% \let\psk@arrowA\@empty% \let\psk@arrowB\@empty% \psxs@axes% } % \def\psxs@axes{{% \ifPst@xAxis\psxs@@axes\pst@dima\pst@dimb\pst@dimc\pst@dimd{}{x}\fi% \ifPst@yAxis\psxs@@axes\pst@dima\pst@dimb\pst@dimc\pst@dimd{exch}{y}\fi% }} \def\psaxes{\pst@object{psaxes}} \def\psaxes@i{\pst@getarrows\psaxes@ii} \def\psaxes@ii(#1){\@ifnextchar({\psaxes@iii(#1)}{\psaxes@iv(0,0)(0,0)(#1)}} \def\psaxes@iii(#1)(#2){\@ifnextchar({\psaxes@iv(#1)(#2)}{\psaxes@iv(#1)(#1)(#2)}} \def\psaxes@iv(#1)(#2)(#3){\@ifnextchar[{\psaxes@v(#1)(#2)(#3)}{\psaxes@vii(#1)(#2)(#3)}}% \def\psaxes@v(#1)(#2)(#3)[#4]{\@ifnextchar[{\psaxes@vi(#1)(#2)(#3)[#4]}{\psaxes@vi(#1)(#2)(#3)[#4][]}}% \def\psaxes@vi(#1)(#2)(#3)[#4,#5][#6,#7]{% \psaxes@vii(#1)(#2)(#3)% \uput[#5](#3|0,0){#4}\uput[#7](0,0|#3){#6}% } % \def\psaxes@vii(#1,#2)(#3,#4)(#5,#6){% \pst@killglue% \begingroup% \pssetxlength\pst@dimc{#5}% ur-x \pssetylength\pst@dimd{#6}% ur-y \ifdim\pst@dimc<\z@\ifdim\pst@dimd<\z@% axes show to left and down \addbefore@par{xlabelPos=top,ylabelPos=right}\fi\fi% \setbox\pst@hbox=\hbox\bgroup% \use@par% now the same with an optional unit=... in par \pssetxlength\pst@dimg{#1}% o-x \pssetylength\pst@dimh{#2}% o-y \pssetxlength\pst@dima{#3}% ll-x \pssetylength\pst@dimb{#4}% ll-y \pssetxlength\pst@dimc{#5}% ur-x \pssetylength\pst@dimd{#6}% ur-y % If minimum values are negative in log mode, we modify Ox % (respectively Oy) if this was not done by the user % X axis labels (\psk@log = 0 or 1) % % Whole thing will be translated to origin: \advance\pst@dima by -\pst@dimg% Dist. from ll-x to o-x \advance\pst@dimb by -\pst@dimh% Dist. from ll-y to o-y \advance\pst@dimc by -\pst@dimg% Dist. from ur-x to o-x \advance\pst@dimd by -\pst@dimh% Dist. from ur-y to o-y % Make lines/arrows or frame: \@nameuse{psxs@\psk@axesstyle}% \psxs@axes or \psxs@frame \ifPst@yAxis% \begingroup% \ifdim\pst@dima=\z@\else\showoriginfalse\fi% \ifnum\psk@dy=\z@% \pst@dimg=\psk@Dy\psyunit% \ifdim\pst@dimg<\p@\pst@cnta=\psk@Dy\edef\psk@Dy{-\the\pst@cnta}\fi% v.1.21 \edef\psk@dy{\number\pst@dimg}% \fi% \ifPst@xAxis\else\showorigintrue\fi% \pst@vlabels{\pst@dimd}{\psk@arrowB}{#3}{#5}% \ifPst@xAxis\showoriginfalse\fi% \pst@vlabels{\pst@dimb}{\psk@arrowA}{#3}{#5}% \endgroup% \fi% \ifPst@xAxis% \begingroup% \ifdim\pst@dimb=\z@\else\showoriginfalse\fi% \ifnum\psk@dx=\z@% \pst@dimg=\psk@Dx\psxunit% \ifdim\pst@dimg<\p@\pst@cnta=\psk@Dx\edef\psk@Dx{-\the\pst@cnta}% v.1.21 \fi% v.1.21 \edef\psk@dx{\number\pst@dimg}% \fi% \ifPst@yAxis\else\showorigintrue\fi% \pst@hlabels{\pst@dimc}{\psk@arrowB}{#4}{#6}% \ifPst@yAxis\showoriginfalse\fi% \pst@hlabels{\pst@dima}{\psk@arrowA}{#4}{#6}% \endgroup% \fi% % Now close "\pst@hbox" (which is 0-dimensional), and put it at the origin. \egroup% \pssetxlength\pst@dimg{#1}% \pssetylength\pst@dimh{#2}% \leavevmode\psput@cartesian\pst@hbox% \endgroup% \ignorespaces% } % \newdimen\psk@subticksize\psk@subticksize=\z@ \newdimen\pst@xticksizeA \newdimen\pst@xticksizeB \newdimen\pst@xticksizeC \newdimen\pst@yticksizeA \newdimen\pst@yticksizeB \newdimen\pst@yticksizeC % \def\set@xticksize#1{% \pst@expandafter\pst@getydimdim{#1} {} {}\@nil % y-unit!! \ifdim\pst@dimm>\pst@dimn % first > second value \pst@xticksizeA=\the\pst@dimn% \pst@xticksizeB=\the\pst@dimm% \else \pst@xticksizeA=\the\pst@dimm% \pst@xticksizeB=\the\pst@dimn% first > second value \fi \edef\psk@xticksize{\pst@number\pst@xticksizeA \pst@number\pst@xticksizeB}% \ifnum\psk@xlabelPos<\z@ % top \pst@xticksizeC=\pst@dimn \else \pst@xticksizeC=\pst@dimm% bottom \fi% } \def\set@yticksize#1{% \pst@expandafter\pst@getxdimdim{#1} {} {}\@nil % x-unit! \ifdim\pst@dimm>\pst@dimn % first > second value \pst@yticksizeA=\the\pst@dimn% \pst@yticksizeB=\the\pst@dimm% \else \pst@yticksizeA=\the\pst@dimm% \pst@yticksizeB=\the\pst@dimn% first > second value \fi \edef\psk@yticksize{\pst@number\pst@yticksizeA \pst@number\pst@yticksizeB}% \ifnum\psk@ylabelPos<\z@ % right \pst@yticksizeC=\pst@dimn \else \pst@yticksizeC=\pst@dimo% left \fi% } \newif\ifPst@maxxTicks \newif\ifPst@maxyTicks \define@key[psset]{}{ticksize}{% \psDEBUG[key:ticksize]{setting ticksize} \def\pst@tempA{max}% \def\pst@tempB{#1}% \ifx\pst@tempA\pst@tempB \psDEBUG[key:ticksize]{setting ticksize to max} \Pst@maxxTickstrue\Pst@maxyTickstrue \set@xticksize{0 4pt}\set@yticksize{0 4pt}% \else \psDEBUG[key:ticksize]{setting ticksize to user values} \Pst@maxxTicksfalse\Pst@maxyTicksfalse% \set@xticksize{#1}\set@yticksize{#1}% \fi} \define@key[psset]{pstricks-add}{xticksize}{% \def\pst@tempA{max}% \def\pst@tempB{#1}% \ifx\pst@tempA\pst@tempB \Pst@maxxTickstrue\set@xticksize{0 4pt}% \psDEBUG[key:xticksize]{setting ticksize to max} \else\set@xticksize{#1}\Pst@maxxTicksfalse\fi} \define@key[psset]{pstricks-add}{yticksize}{% \def\pst@tempA{max}% \def\pst@tempB{#1}% \ifx\pst@tempA\pst@tempB \psDEBUG[key:yticksize]{setting ticksize to max} \Pst@maxyTickstrue\set@yticksize{0 4pt}% \else\set@yticksize{#1}\Pst@maxyTicksfalse\fi}% overwrites the definition in pstricks %\psset{ticksize=-4pt 4pt} % % full= 0, top=1, bottom=-1, inner=2 => -1 0 1 2 \def\psset@tickstyle#1{\pst@expandafter\psset@@tickstyle{#1}\@nil}% overwrite it \def\psset@@tickstyle#1#2\@nil{% \ifx#1f\let\psk@tickstyle\z@\else % full \ifx#1t\let\psk@tickstyle\@ne % top \edef\psk@xticksize{0 \pst@number\pst@xticksizeB}% \edef\psk@yticksize{0 \pst@number\pst@yticksizeB}% \else\ifx#1b\let\psk@tickstyle\m@ne % bottom \edef\psk@xticksize{\pst@number\pst@xticksizeA 0}% \edef\psk@yticksize{\pst@number\pst@yticksizeA 0}% \else\ifx#1i\let\psk@tickstyle\tw@% % inner (for frame) \else\@pstrickserr{Bad tick style: `#1#2'}\@ehpa \fi\fi\fi\fi } % \define@key[psset]{pstricks-add}{subticks}{\def\psk@xsubticks{#1}\def\psk@ysubticks{#1}} \define@key[psset]{pstricks-add}{xsubticks}{\def\psk@xsubticks{#1}} \define@key[psset]{pstricks-add}{ysubticks}{\def\psk@ysubticks{#1}} % \define@key[psset]{pstricks-add}{subticksize}{\def\psk@xsubticksize{#1}\def\psk@ysubticksize{#1}} \define@key[psset]{pstricks-add}{xsubticksize}{\def\psk@xsubticksize{#1}} \define@key[psset]{pstricks-add}{ysubticksize}{\def\psk@ysubticksize{#1}} % \define@key[psset]{pstricks-add}{tickwidth}{% \pst@getlength{#1}\psk@xtickwidth% \pst@getlength{#1}\psk@ytickwidth} \define@key[psset]{pstricks-add}{xtickwidth}{\pst@getlength{#1}\psk@xtickwidth} \define@key[psset]{pstricks-add}{ytickwidth}{\pst@getlength{#1}\psk@ytickwidth} \define@key[psset]{pstricks-add}{subtickwidth}{% \pst@getlength{#1}\psk@xsubtickwidth% \pst@getlength{#1}\psk@ysubtickwidth} \define@key[psset]{pstricks-add}{xsubtickwidth}{\pst@getlength{#1}\psk@xsubtickwidth} \define@key[psset]{pstricks-add}{ysubtickwidth}{\pst@getlength{#1}\psk@ysubtickwidth} % \define@key[psset]{pstricks-add}{tickcolor}{% \pst@getcolor{#1}\psk@xtickcolor% \pst@getcolor{#1}\psk@ytickcolor} \define@key[psset]{pstricks-add}{xtickcolor}{\pst@getcolor{#1}\psk@xtickcolor} \define@key[psset]{pstricks-add}{ytickcolor}{\pst@getcolor{#1}\psk@ytickcolor} \define@key[psset]{pstricks-add}{subtickcolor}{% \pst@getcolor{#1}\psk@xsubtickcolor% \pst@getcolor{#1}\psk@ysubtickcolor} \define@key[psset]{pstricks-add}{xsubtickcolor}{\pst@getcolor{#1}\psk@xsubtickcolor} \define@key[psset]{pstricks-add}{ysubtickcolor}{\pst@getcolor{#1}\psk@ysubtickcolor} % \define@key[psset]{pstricks-add}{xticklinestyle}{% \@ifundefined{psls@#1}% {\@pstrickserr{Line style `#1' not defined}\@eha}% {\def\psxticklinestyle{#1}}} \define@key[psset]{pstricks-add}{xsubticklinestyle}{% \@ifundefined{psls@#1}% {\@pstrickserr{Line style `#1' not defined}\@eha}% {\def\psxsubticklinestyle{#1}}} \define@key[psset]{pstricks-add}{yticklinestyle}{% \@ifundefined{psls@#1}% {\@pstrickserr{Line style `#1' not defined}\@eha}% {\def\psyticklinestyle{#1}}} \define@key[psset]{pstricks-add}{ysubticklinestyle}{% \@ifundefined{psls@#1}% {\@pstrickserr{Line style `#1' not defined}\@eha}% {\def\psysubticklinestyle{#1}}} \define@key[psset]{pstricks-add}{ticklinestyle}{% \@ifundefined{psls@#1}% {\@pstrickserr{Line style `#1' not defined}\@eha}% {\def\psxticklinestyle{#1}\def\psyticklinestyle{#1}}} \define@key[psset]{pstricks-add}{subticklinestyle}{% \@ifundefined{psls@#1}% {\@pstrickserr{Line style `#1' not defined}\@eha}% {\def\psxsubticklinestyle{#1}\def\psysubticklinestyle{#1}}} % %\psset{subticksize=0.75,subticks=1,tickcolor=black,ticklinestyle=solid,% % subticklinestyle=solid,% % subtickcolor=gray,% % tickwidth=0.5\pslinewidth,% % subtickwidth=0.25\pslinewidth} % \newif\ifis@yAxis% % \def\psxs@@axes#1#2#3#4#5#6{% llx,lly,urx,ury,exch,x|y,arrowA,arrowB \pst@killglue% \begin@SpecialObj% \ifx#6x\relax% % x-axis? \is@yAxisfalse% \ifnum\psk@dx=\z@% \pst@dimg=\psk@Dx\psxunit% \def\psk@dx{\number\pst@dimg}% \fi% \else% \is@yAxistrue% \ifnum\psk@dy=\z@% \pst@dimg=\psk@Dy\psyunit% \def\psk@dy{\number\pst@dimg}% \fi% \fi% \let\pst@linetype\pst@arrowtype% \def\pst@tempA{none}% \pst@addarrowdef% \addto@pscode{ \ifis@yAxis 0 \pst@number#4 \else \pst@number#3 0 \fi \ifis@yAxis 0 \pst@number#2 \else \pst@number#1 0 \fi ArrowA CP 4 2 roll ArrowB /yEnd exch def /xEnd exch def xEnd yEnd \ifx\psk@axesstyle\pst@tempA pop pop % axesstyle = none (only ticks) \else L % the line with arrows \fi /yStart exch def /xStart exch def \@nameuse{psls@\pslinestyle} % linestyle for the axes stroke % draw the main line % \psk@ticks: all=0; x=1; y=2; none=3 \number\psk@ticks\space dup 2 mod 0 eq \ifis@yAxis true \else false \fi and exch 2 lt \ifis@yAxis false \else true \fi and or { /viceversa \ifis@yAxis\pst@number#2 \pst@number#4 \else\pst@number#1 \pst@number#3 \fi gt { true }{ false } ifelse def % other way round /epsilon 0.01 def % rounding errors /minTickline \ifis@yAxis \pst@number#1 \else \pst@number#2 \fi def /maxTickline \ifis@yAxis \pst@number#3 \else \pst@number#4 \fi def /dT \ifis@yAxis \psk@dy \else \psk@dx \fi\space abs % added abs 2006-07-07 65536 div viceversa { neg } if def % div to get pt instead of sp /subTNo \ifis@yAxis\psk@ysubticks\else\psk@xsubticks\fi \space def subTNo 0 gt { /dsubT dT subTNo div def}{ /dsubT 0 def } ifelse % deltaSubTick \ifis@yAxis \psk@yticksize \else \psk@xticksize \fi /tickend exch def /tickstart exch def /Twidth \ifis@yAxis \psk@ytickwidth \else \psk@xtickwidth \fi\space def /subTwidth \ifis@yAxis \psk@ysubtickwidth \else \psk@xsubtickwidth \fi\space def /STsize \ifis@yAxis \psk@ysubticksize \else \psk@xsubticksize \fi\space def /TColor { \ifis@yAxis\pst@usecolor\psk@ytickcolor \else\pst@usecolor\psk@xtickcolor\fi\space } def /subTColor { \ifis@yAxis\pst@usecolor\psk@ysubtickcolor \else\pst@usecolor\psk@xsubtickcolor\fi\space } def /MinValue { \ifis@yAxis yStart \else xStart \fi \ifx\psk@arrowA\@empty\else \psk@arrowsize\space CLW mul add \psk@arrowlength\space mul viceversa { sub epsilon add }{ add epsilon sub } ifelse \fi } def /MaxValue { \ifis@yAxis yEnd \else xEnd \fi \ifx\psk@arrowB\@empty\else \psk@arrowsize\space CLW mul add \psk@arrowlength\space mul viceversa { add epsilon sub }{ sub epsilon add } ifelse \fi } def /logLines { \ifnum\psk@logLines=\z@ true \else % all axes \ifnum\psk@logLines<\tw@ % x axis \ifis@yAxis false \else true \fi % do we have x or y axis \else \ifnum\psk@logLines<\thr@@ % y axis \ifis@yAxis true \else false \fi % do we have x or y axis \else false % no one \fi \fi \fi } def /LSstroke { % set linestyle and stroke \ifis@yAxis\@nameuse{psls@\psyticklinestyle} \else\@nameuse{psls@\psxticklinestyle}\fi stroke} def /subLSstroke { % set sublinestyle and stroke \ifis@yAxis\@nameuse{psls@\psysubticklinestyle} \else\@nameuse{psls@\psxsubticklinestyle}\fi stroke} def %\iffalse % start ticks --------------------------------------------------------- 0 dT MaxValue 1 add{ % the positive part of the axes /cntTick exch def % the index logLines { % log lines? gsave 1 10 subTNo div 9.99 { % do not write a line for 1 /dx exch def % save index /x cntTick dT dx log mul add def % x abs MaxValue abs le { % out of range? \ifis@yAxis \ifPst@maxyTicks true \else false \fi \else \ifPst@maxxTicks true \else false \fi \fi { x minTickline #5 moveto x maxTickline #5 lineto } { x tickstart STsize mul #5 moveto x tickend STsize mul #5 lineto } ifelse } if } for subTwidth SLW subTColor % set line width and subtick color subLSstroke grestore % restore main tick status stroke /dsubT 0 def % no other subticks } if % end logLines dsubT abs 0 gt { % du we have subticks? gsave % save graphic state % start subticks ---------------------------------------------------------- /cntsubTick cntTick dsubT add def subTNo 1 sub { cntsubTick abs MaxValue abs le { % out of range? \ifis@yAxis \ifPst@maxyTicks true \else false \fi \else \ifPst@maxxTicks true \else false \fi \fi { cntsubTick minTickline STsize mul #5 moveto cntsubTick maxTickline STsize mul #5 lineto } { cntsubTick tickstart STsize mul #5 moveto cntsubTick tickend STsize mul #5 lineto } ifelse }{ exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat subTwidth SLW subTColor % set line width and subtick color subLSstroke % end subticks ---------------------------------------------------------- grestore % restore tick status } if gsave \ifis@yAxis \ifPst@maxyTicks true \else false \fi \else \ifPst@maxxTicks true \else false \fi \fi { cntTick minTickline #5 moveto cntTick maxTickline #5 lineto } { cntTick tickstart #5 moveto % line begin main Tick cntTick tickend #5 lineto } ifelse % lineto tick end Twidth SLW TColor % set line width and tick color LSstroke grestore } for % end ticks ---------------------------------------------------------- %\fi %\iffalse % ================================================ % the other side /dT dT neg def % the other side of the axis /dsubT dsubT neg def % start ticks ---------------------------------------------------------- 0 dT MinValue epsilon viceversa { add }{ sub } ifelse { /cntTick exch def logLines { % log lines? gsave 1 10 subTNo div 9.99 { % do not write a line for 1 /dx exch def % save index /x cntTick dT dx log mul add def % x abs MinValue abs le { % out of range? \ifis@yAxis \ifPst@maxyTicks true \else false \fi \else \ifPst@maxxTicks true \else false \fi \fi { x minTickline #5 moveto x maxTickline #5 lineto } { x tickstart STsize mul #5 moveto x tickend STsize mul #5 lineto } ifelse } if } for /dsubT 0 def subTwidth SLW subTColor % set line width and subtick color subLSstroke grestore } dsubT abs 0 gt { % do we have subticks? gsave % save main state % start subticks ---------------------------------------------------------- /cntsubTick cntTick dsubT add def subTNo 1 sub { cntsubTick abs MinValue abs le { % out of range? cntsubTick tickstart STsize mul #5 moveto cntsubTick tickend STsize mul #5 lineto }{ exit } ifelse /cntsubTick cntsubTick dsubT add def } repeat % for % end subticks ---------------------------------------------------------- subTwidth SLW subTColor % set line width and subtick color subLSstroke grestore % restore main state } if gsave cntTick tickstart #5 moveto % line begin main Tick cntTick tickend #5 lineto % lineto tick end Twidth SLW TColor % set line width and tick color LSstroke grestore } for % end ticks ---------------------------------------------------------- %\fi } if% }% end of \pscode \end@SpecialObj% \ignorespaces% }% % % \def\psxs@frame{% \begin@SpecialObj% \addto@pscode{ % the frame \pst@number\pst@dima \pst@number\pst@dimb moveto % lower left \pst@number\pst@dimc \pst@number\pst@dimb L % upper left \pst@number\pst@dimc \pst@number\pst@dimd L % upper right \pst@number\pst@dima \pst@number\pst@dimd L % lower right closepath }% \pst@stroke% \psk@fillstyle% \end@SpecialObj% \let\psk@arrowA\@empty% \let\psk@arrowB\@empty% \pst@xticksizeC=\z@\pst@yticksizeC=\z@% \psxs@@axes\pst@dima\pst@dimb\pst@dimc\pst@dimd{}{x}% x axis \psxs@@axes\pst@dima\pst@dimb\pst@dimc\pst@dimd{ exch }{y}% y axis \ifnum\psk@tickstyle=\tw@ % llx,lly,urx,ury,exch,x|y,arrowA,arrowB \psDEBUG[psxs@frame]{psk@tickstyle=2 (inner)}% \psDEBUG[psxs@frame]{pst@dima=\pst@number\pst@dima}% \psDEBUG[psxs@frame]{pst@dimb=\pst@number\pst@dimb}% \psDEBUG[psxs@frame]{pst@dimc=\pst@number\pst@dimc}% \psDEBUG[psxs@frame]{pst@dimd=\pst@number\pst@dimd}% \psxs@@axes\pst@dima\pst@dimb\pst@dimc\pst@dimd{ neg \pst@number\pst@dimd add }{x}% % upper x axis \psxs@@axes\pst@dima\pst@dimb\pst@dimc\pst@dimd{ neg \pst@number\pst@dimc add exch }{y}% right y axis \fi% } % % #1:Max/Min in pt from origin; #2:arrow; #3:min; #4:max \def\pst@hlabels#1#2#3#4{% \ifdim#1=\z@\else% % start from 0 ? \ifx#2\empty\else\advance#1\ifdim#1>\z@-\fi7\pslinewidth\fi% \pst@cnta=#1\relax% % Distance (in sp) to end. \divide\pst@cnta\psk@dx\relax% % Number of ticks/labels \ifnum\pst@cnta=\z@\else% \pst@dimb=\psk@dx sp% % Space between ticks. \ifPst@yAxis\else\showorigintrue\fi% \ifnum\psk@labels<\tw@\ifPst@xAxis\pst@@hlabels\fi\fi% \showoriginfalse% \fi% \fi% } % Knows \pst@dimb and \pst@cnta \def\pst@@hlabels{% \psDEBUG[pst@@hlabels]{xticksizeC=\the\pst@xticksizeC}% \setbox\z@=\vbox{% save all in a box \ifcase\psk@xlabelPos \vskip-\pst@xticksizeA\vskip\pslabelsep\or \vskip-1ex\vskip-\pslabelsep\or \vskip-\pst@xticksizeB\vskip-\pslabelsep\vskip-1ex \fi \ifnum\pst@cnta<\z@ \pst@dimb=-\pst@dimb\fi \hbox to\z@{% \ifshoworigin\hbox to \z@{\hss\pst@@@hlabel{\psk@Ox}\hss}\fi% \mmultido{\nA=\psk@Ox+\psk@Dx}{\pst@cnta}{% \hskip\pst@dimb\hbox to \z@{\hss% \ifdim\nA pt=\z@ \pst@@@hlabel{0}% \else\expandafter\pst@@@hlabel{\nA}% \fi% prevent -0, doesn't work with \ifnum \hss}% }\hss% }% }\ht\z@\z@ \dp\z@\z@ \box\z@}% set all values to zero % % #1:Max/Min in pt from origin; #2:arrow; #3:min; #4:max % \psk@labels 0:all; 1:x; 2:y; 3:none \def\pst@vlabels#1#2#3#4{% \ifdim#1=\z@\else% \ifx#2\empty\else\advance#1\ifdim#1>\z@-\fi7\pslinewidth\fi% \pst@cnta=#1\relax% % % Distance (in sp) to end. \divide\pst@cnta\psk@dy\relax% % Number of ticks/labels \ifnum\pst@cnta=\z@\else% \pst@dima=\psk@dy sp% % Space between ticks. % \ifPst@xAxis\else\showorigintrue\fi% \ifodd\number\psk@labels\else\ifPst@yAxis\pst@@vlabels\fi\fi% \showoriginfalse% \fi% \fi% } % \pst@dima: the width between two labels in pt % \pst@dimc: the coordinate of the origin in pt % \pst@cnta: the lowest label % \pst@ticksizeC the lowest or highest value \def\pst@@vlabels{% \psDEBUG[pst@@vlabels]{yticksizeC=\the\pst@yticksizeC}% % for left labels we use \def\llap#1{\hb@xt@\z@{\hss#1}} \vbox to\z@{% \ifnum\pst@cnta>\z@ \pst@dima=-\pst@dima\fi% up or down label positions \offinterlineskip% \ifshoworigin% \vbox to \z@{\vss\hbox to\z@{% \ifcase\psk@ylabelPos% \hss\pst@@@vlabel{\psk@Oy}\hskip\pslabelsep\hskip-\pst@yticksizeA\or% \hskip\pslabelsep\hss\pst@@@vlabel{\psk@Oy}\hss\or % right labels \hskip\pst@yticksizeB\hskip\pslabelsep\pst@@@vlabel{\psk@Oy}% \fi}\vss}% \fi% \mmultido{\nA=\psk@Oy+\psk@Dy}{\pst@cnta}{% \vbox to\pst@dima{\vss}% \vbox to \z@{% \vss\hbox to\z@{% \ifcase\psk@ylabelPos% and also check for -0 \hss\ifdim\nA pt=\z@ \pst@@@vlabel{0}\else\pst@@@vlabel{\nA}\fi% \hskip\pslabelsep\hskip-\pst@yticksizeA\or% top \hss\ifdim\nA pt=\z@\pst@@@vlabel{0}\else\pst@@@vlabel{\nA}\fi% \ifdim\pslabelsep=\z@\hss\else\kern-\pslabelsep\fi\or% axis \hskip\pst@yticksizeB\hskip\pslabelsep% \ifdim\nA pt=\z@\pst@@@vlabel{0}\else\pst@@@vlabel{\nA}\fi% bottom \fi}\vss}% }\vss}% } % \define@key[psset]{pstricks-add}{nStep}{\def\psk@nStep{#1}} \define@key[psset]{pstricks-add}{nStart}{\def\psk@nStart{#1}} \define@key[psset]{pstricks-add}{nEnd}{\def\psk@nEnd{#1}} \define@key[psset]{pstricks-add}{xStep}{\def\psk@xStep{#1}} \define@key[psset]{pstricks-add}{yStep}{\def\psk@yStep{#1}} % \define@key[psset]{pstricks-add}{xStart}{\def\psk@xStart{#1}} \define@key[psset]{pstricks-add}{xEnd}{\def\psk@xEnd{#1}} \define@key[psset]{pstricks-add}{yStart}{\def\psk@yStart{#1}} \define@key[psset]{pstricks-add}{yEnd}{\def\psk@yEnd{#1}} % \define@key[psset]{pstricks-add}{plotNo}{\def\psk@plotNo{#1}} \define@key[psset]{pstricks-add}{plotNoMax}{\def\psk@plotNoMax{#1}} % %\psset{nStep=1, nStart=0, nEnd={},% % xStep=0, yStep=0, xStart={}, xEnd={}, yStart={}, yEnd={}, comma=false,% % plotNo=1,plotNoMax=1}% % \def\pstScalePoints(#1,#2)#3#4{% % xScale | yScale | xOperator | yOperator % the operators can be any Postscript code \pst@def{ScalePoints}<% /y ED /x ED counttomark dup dup cvi eq not { exch pop } if /m exch def /n m 2 div cvi def n { #4\space y mul #2\space mul m 1 roll #3\space x mul #1\space mul m 1 roll /m m 2 sub def } repeat>% } %\pstScalePoints(1,1){}{}% the default -> no special operators % \def\listplot@ii#1{% \@nameuse{beginplot@\psplotstyle}% \addto@pscode{/D {} def mark}% #1% \addto@pscode{% \tx@PreparePoints \pst@number\psxunit \pst@number\psyunit \tx@ScalePoints% }% \@nameuse{endplot@\psplotstyle}% } % \define@boolkey[psset]{pstricks-add}[Pst@]{ChangeOrder}[true]{} \pst@def{PreparePoints}<{% counttomark /m exch def \ifPst@ChangeOrder /m0 m def m \psk@plotNoMax\space 1 add div 1 sub cvi { m0 \psk@plotNoMax\space 1 add roll /m0 m0 \psk@plotNoMax\space 1 add sub def } repeat \fi /n m \psk@plotNoMax\space 1 add div cvi def \psk@plotNoMax\space 1 gt {% multiple data files? n { \psk@plotNoMax\space \psk@plotNo\space 1 sub neg roll % x yNo y y y ... \psk@plotNoMax\space 1 sub { pop } repeat % x yNo /m m \psk@plotNoMax\space 1 sub sub def m 2 roll } repeat } if % no multiple data files % counttomark /m exch def % /n m 2 div cvi def /xMax -99999 def /yMax -99999 def /xP 0 def /yP 0 def m copy n { /y exch def /x exch def xMax x lt { /xMax x def } if yMax y lt {/yMax y def } if xP x gt { /xP x def } if yP y gt { /yP y def } if } repeat % m 2 roll \psk@xStep\space 0 gt \psk@yStep\space 0 gt or (\psk@xStart) length 0 gt or (\psk@yStart) length 0 gt or (\psk@xEnd) length 0 gt or (\psk@yEnd) length 0 gt or { % (\psk@xStart) length 0 gt {\psk@xStart\space }{ xP } ifelse /xStart exch def (\psk@yStart) length 0 gt {\psk@yStart\space }{ yP } ifelse /yStart exch def (\psk@xEnd) length 0 gt { \psk@xEnd\space }{ xMax } ifelse /xEnd exch def (\psk@yEnd) length 0 gt { \psk@yEnd\space }{ yMax } ifelse /yEnd exch def n { m -2 roll 2 copy /yVal exch def /xVal exch def xVal xP ge yVal yP ge and xVal xEnd le and yVal yEnd le and xVal xStart ge and yVal yStart ge and { /xP xP \psk@xStep\space add def /yP yP \psk@yStep\space add def }{% pop pop /m m 2 sub def } ifelse } repeat }{% /ncount 0 def (\psk@nEnd) length 0 gt { \psk@nEnd\space }{ m } ifelse /nEnd exch def n { m -2 roll \psk@nStep\space 1 gt { ncount \psk@nStart\space sub \psk@nStep\space mod 0 eq }{ true } ifelse ncount nEnd le and ncount \psk@nStart\space ge and not { pop pop /m m 2 sub def } if /ncount ncount 1 add def } repeat } ifelse }> % % \define@key[psset]{pstricks-add}{xAxisLabel}{\def\psk@xAxisLabel{#1}} \define@key[psset]{pstricks-add}{yAxisLabel}{\def\psk@yAxisLabel{#1}} %\psset{xAxisLabel=x,yAxisLabel=y} \iffalse \define@key[psset]{pstricks-add}{xAxisLabelPos}{% \def\pst@tempA{#1}% \ifx\pst@tempA\@empty\let\psk@xAxisLabelPos\relax\else \pst@getcoor{#1}\psk@xAxisLabelPos\fi} \define@key[psset]{pstricks-add}{yAxisLabelPos}{% \def\pst@tempA{#1}% \ifx\pst@tempA\@empty\let\psk@yAxisLabelPos\relax\else \pst@getcoor{#1}\psk@yAxisLabelPos\fi} \fi \define@key[psset]{pstricks-add}{xAxisLabelPos}{\def\psk@xAxisLabelPos{#1}} \define@key[psset]{pstricks-add}{yAxisLabelPos}{\def\psk@yAxisLabelPos{#1}} %\psset{yAxisLabelPos={},xAxisLabelPos={}} % \newdimen\psk@llx \newdimen\psk@lly \newdimen\psk@urx \newdimen\psk@ury \define@key[psset]{pstricks-add}{llx}{\pssetxlength\psk@llx{#1}} \define@key[psset]{pstricks-add}{lly}{\pssetylength\psk@lly{#1}} \define@key[psset]{pstricks-add}{urx}{\pssetxlength\psk@urx{#1}} \define@key[psset]{pstricks-add}{ury}{\pssetylength\psk@ury{#1}} %\psset{llx=\z@, lly=\z@, urx=\z@, ury=\z@}% prevents rounding errors \newif\ifPst@plot@box \define@key[psset]{pstricks-add}{box}[true]{\@nameuse{Pst@plot@box#1}} % \newdimen\pst@xunit \newdimen\pst@yunit % \def\psgraph{\pst@object{psgraph}} \def\psgraph@i{\pst@getarrows\psgraph@ii} \def\psgraph@ii(#1,#2){\catcode`\!=12\@ifnextchar({\psgraph@iii(#1,#2)}{\psgraph@iv(0,0)(#1,#2)}} \def\psgraph@iii(#1,#2)(#3,#4){\@ifnextchar({\psgraph@v(#1,#2)(#3,#4)}{\psgraph@iv(#1,#2)(#3,#4)}} % \def\psgraph@iv(#1,#2)(#3,#4)#5#6{% no special origin defined % minX | minY | maxX | maxY | Length x-axis | length y-axis% \pst@killglue% \begingroup% \pst@dimo=#3\p@\advance\pst@dimo by -#1\p@% delta x \pst@divide{#5}{\pst@dimo}\pst@tempA% \pst@xunit=\pst@tempA\p@% \pst@dimo=#4\p@\advance\pst@dimo by -#2\p@% delta y \ifx!#6 \pst@dima=\pst@tempA\pst@dimo\else\pst@dima=#6\fi \pst@divide\pst@dima{\pst@dimo}\pst@tempA% \pst@yunit=\pst@tempA\p@% % \pst@dima=#1\pst@xunit \advance\pst@dima by \psk@llx% \pst@dimb=#2\pst@yunit \advance\pst@dimb by \psk@lly% \pst@dimc=#3\pst@xunit \advance\pst@dimc by \psk@urx% \pst@dimd=#4\pst@yunit \advance\pst@dimd by \psk@ury% \if@star\pspicture*(\pst@dima,\pst@dimb)(\pst@dimc,\pst@dimd)\else% \pspicture(\pst@dima,\pst@dimb)(\pst@dimc,\pst@dimd)\fi% \psset{xunit=\pst@xunit,yunit=\pst@yunit}% \bgroup% \use@par% \psaxes(#1,#2)(#3,#4)% \egroup% \psgraph@vi(#1,#2)(#1,#2)(#3,#4)% } \def\psgraph@v(#1,#2)(#3,#4)(#5,#6)#7#8{% with special origin % Xorig | yorig | minX | minY | maxX | maxY | Length x-axis | length y-axis% \pst@killglue% \begingroup% \pst@dimo=#5\p@\advance\pst@dimo by -#3\p@% delta x \pst@divide{#7}{\pst@dimo}\pst@tempA% \pst@xunit=\pst@tempA\p@% \pst@dimo=#6\p@\advance\pst@dimo by -#4\p@% delta y \ifx!#8 \pst@dima=\pst@tempA\pst@dimo\else\pst@dima=#8\fi \pst@divide\pst@dima{\pst@dimo}\pst@tempA% \pst@yunit=\pst@tempA\p@% % \pst@dima=#3\pst@xunit \advance\pst@dima by \psk@llx% \pst@dimb=#4\pst@yunit \advance\pst@dimb by \psk@lly% \pst@dimc=#5\pst@xunit \advance\pst@dimc by \psk@urx% \pst@dimd=#6\pst@yunit \advance\pst@dimd by \psk@ury% \if@star\pspicture*(\pst@dima,\pst@dimb)(\pst@dimc,\pst@dimd)\else% \pspicture(\pst@dima,\pst@dimb)(\pst@dimc,\pst@dimd)\fi% \psset{xunit=\pst@xunit,yunit=\pst@yunit}% \bgroup% \use@par% \psaxes(#1,#2)(#3,#4)(#5,#6)% \egroup% \psgraph@vi(#1,#2)(#3,#4)(#5,#6)% } % \def\setxLabelC@@r#1,#2(#3,#4){% \ifx#1c \pssetylength\pst@dimm{#2} \rput(! #4 #3 add 2 div \pst@number\pst@dimm \pst@number\psyunit div ){\psk@xAxisLabel} \else \pst@getcoor{\psk@xAxisLabelPos}\pst@tempA \rput(! \pst@tempA\space \tx@UserCoor ){\psk@xAxisLabel} \fi} \def\setyLabelC@@r#1,#2(#3,#4){% \ifx#2c \pssetxlength\pst@dimm{#1} \rput{90}(! \pst@number\pst@dimm \pst@number\psxunit div #4 #3 add 2 div ){\psk@yAxisLabel} \else \pst@getcoor{\psk@yAxisLabelPos}\pst@tempA \rput{90}(! \pst@tempA\space \tx@UserCoor ){\psk@yAxisLabel} \fi} % \def\psgraph@vi(#1,#2)(#3,#4)(#5,#6){% \ifx\psk@xAxisLabel\@empty\else% \ifx\psk@xAxisLabelPos\@empty \uput[0](#5,#2){\psk@xAxisLabel}% \else \expandafter\setxLabelC@@r\psk@xAxisLabelPos(#3,#5)\fi% \fi% \ifx\psk@yAxisLabel\@empty\else% \ifx\psk@yAxisLabelPos\@empty \uput[90](#1,#6){\psk@yAxisLabel}% \else \expandafter\setyLabelC@@r\psk@yAxisLabelPos(#4,#6)\fi% \fi% \ignorespaces% } \def\endpsgraph{% \pst@killglue% \endpspicture% \endgroup% } \@namedef{psgraph*}{\psgraph*} \@namedef{endpsgraph*}{\endpsgraph} % \define@key[psset]{pstricks-add}{ignoreLines}{\def\psk@ignoreLines{#1}} \newcount\linecnt \begingroup \catcode`\,=13 \catcode`\_=13 \gdef\savedata@#1[#2]{% \xdef\pst@tempg{#2_}% \endgroup \let#1\pst@tempg \global\let\pst@tempg\relax \ignorespaces} \gdef\readdata@{% \read1 to \pst@tempA \ifnum\linecnt=\psk@nStep \global\linecnt=0 \expandafter\readdata@@\pst@tempA_\@nil \fi \global\advance\linecnt by 1 \ifeof1\else\expandafter\readdata@\fi} \gdef\pst@@readfile#1#2\@nil{\addto@pscode{,#1#2}}% \gdef\readdata@@#1#2\@nil{\xdef\pst@tempg{\pst@tempg,#1#2}}% \endgroup \def\readdata{\@ifnextchar[{\readdata@i}{\readdata@i[]}} \def\readdata@i[#1]#2#3{% \def\pst@tempA{#1}% \ifx\pst@tempA\@empty\else\psset{#1}\fi \openin1=#3 \begingroup \def\pst@tempg{}% \ifeof1 \@pstrickserr{Data file `#3' not found.}\@ehpa \else \pst@datadelimiters \catcode`\[=1 \catcode`\]=2 \pst@cnta=0 \loop \ifnum\the\pst@cnta<\psk@ignoreLines \advance\pst@cnta by 1\relax \read1 to \pst@tempA \repeat \ifnum\Pst@Debug>0 \typeout{>>> ignored \the\pst@cnta\space data lines}\fi% \global\linecnt=\psk@nStep% \readdata@% \fi% \endgroup% \global\let#2\pst@tempg% \global\let\pst@tempg\relax% \ignorespaces} % % D.G. addition - Jun. 9, 1998 - Polar plots using the \psplot macro % Code added according the way suggested by Ulrich Dirr % For polar plots \define@boolkey[psset]{pstricks-add}[Pst@]{polarplot}[true]{} \define@boolkey[psset]{pstricks-add}[Pst@]{algebraic}[true]{} \psset[pstricks-add]{polarplot=false,algebraic=false}% remark of ML % \define@key[psset]{pstricks-add}{method}{\def\psk@method{#1}}% adams - rk4 \define@key[psset]{pstricks-add}{whichabs}{\def\psk@whichabs{#1}}% \define@key[psset]{pstricks-add}{whichord}{\def\psk@whichord{#1}}% \define@key[psset]{pstricks-add}{plotfuncx}{\def\psk@plotfuncx{#1}}% \define@key[psset]{pstricks-add}{plotfuncy}{\def\psk@plotfuncy{#1}}% \define@key[psset]{pstricks-add}{expression}{\def\psk@expression{#1}}% \define@boolkey[psset]{pstricks-add}[Pst@]{buildvector}[true]{}% \def\@rkiv{rk4}% Runge-Kutta 4 method \def\@adams{adams}% Adams method \def\@default{default}% Adams method % \define@boolkey[psset]{pstricks-add}[Pst@]{VarStep}[true]{} \define@key[psset]{pstricks-add}{PlotDerivative}{\def\psk@PlotDerivative{#1}}% \define@key[psset]{pstricks-add}{VarStepEpsilon}{\def\psk@VarStepEpsilon{#1}}% \define@key[psset]{pstricks-add}{varsteptol}{\def\psk@varsteptol{#1}}% adams - rk4 \define@key[psset]{pstricks-add}{adamsorder}{\def\psk@adamsorder{#1}}% adams - rk4 %\define@key[psset]{pstricks-add}{varstepincrease}{\def\psk@varstepincrease{#1}}% varrk4 % \def\psplot@i#1#2#3{% \pst@killglue \begingroup \use@par \@nameuse{beginplot@\psplotstyle}% % D.G. modification begin - Jun. 9, 1998 \ifPst@polarplot \addto@pscode{% \psplot@init /x #1 def /x1 #2 def /dx x1 x sub \psk@plotpoints div def /F@pstplot \ifPst@algebraic (#3) \ifx\psk@PlotDerivative\@none\else \psk@PlotDerivative\space { (x) tx@Derive begin Derive end } repeat \fi\space tx@AlgToPs begin AlgToPs end cvx \else { #3 } \fi def \ifPst@VarStep /StillZero 0 def /LastNonZeroStep dx def /F2@pstplot tx@Derive begin (#3) (x) Derive (x) Derive end \ifx\psk@PlotDerivative\@none\else \psk@PlotDerivative\space { (x) tx@Derive begin Derive end } repeat \fi\space tx@AlgToPs begin AlgToPs end cvx def %% computation of the tolerance defined by plotpoints /epsilon12 \ifx\psk@VarStepEpsilon\@default tx@Derive begin F2@pstplot end dx 3 exp abs mul abs \else\psk@VarStepEpsilon\space 12 mul \fi def /ComputeStep { dup 1e-4 lt { pop StillZero 2 ge { LastNonZeroStep 2 mul } { LastNonZeroStep } ifelse /StillZero StillZero 1 add def } { epsilon12 exch div 1 3 div exp /StillZero 0 def } ifelse } bind def \fi /xy {% Adapted from \parametricplot@i F@pstplot x \ifPst@algebraic RadtoDeg \fi PtoC % #3 dup x cos mul exch x sin mul \pst@number\psyunit mul exch \pst@number\psxunit mul exch } def}% \else% polarplot % D.G. modification end \addto@pscode{% \psplot@init /x #1 def /x1 #2 def /dx x1 x sub \psk@plotpoints div def /F@pstplot \ifPst@algebraic (#3) \ifx\psk@PlotDerivative\@none\else \psk@PlotDerivative\space { (x) tx@Derive begin Derive end } repeat \fi\space tx@AlgToPs begin AlgToPs end cvx \else { #3 } \fi def \ifPst@VarStep /StillZero 0 def /LastNonZeroStep dx def /F2@pstplot tx@Derive begin (#3) (x) Derive (x) Derive end \ifx\psk@PlotDerivative\@none\else \psk@PlotDerivative\space { (x) tx@Derive begin Derive end } repeat \fi\space tx@AlgToPs begin AlgToPs end cvx def %% computation of the tolerance defined by plotpoints /epsilon12 \ifx\psk@VarStepEpsilon\@default tx@Derive begin F2@pstplot end dx 3 exp abs mul abs \else\psk@VarStepEpsilon\space 12 mul \fi def /ComputeStep { dup 1e-4 lt { pop StillZero 2 ge { LastNonZeroStep 2 mul } { LastNonZeroStep } ifelse /StillZero StillZero 1 add def } { epsilon12 exch div 1 3 div exp /StillZero 0 def } ifelse } bind def \fi /xy { x \pst@number\psxunit mul F@pstplot \pst@number\psyunit mul % \ifPst@algebraic F@pstplot \else #3 \fi \pst@number\psyunit mul } def}% \fi \gdef\psplot@init{}% \@pstfalse \@nameuse{testqp@\psplotstyle}% \if@pst \psplot@ii \else \psplot@iii \fi \endgroup \ignorespaces} % \def\psplot@ii{% \ifPst@VarStep \addto@pscode{% mark xy \@nameuse{beginqp@\psplotstyle} { F2@pstplot abs ComputeStep x 2 copy add dup x1 gt {pop x1} if /x exch def F2@pstplot abs ComputeStep /x 3 -1 roll def 2 copy gt { exch } if pop /x x 3 -1 roll add dup x1 gt {pop x1} if def xy \@nameuse{doqp@\psplotstyle} x x1 eq { exit } if} loop}% \else\pst@killglue% \addto@pscode{% xy \@nameuse{beginqp@\psplotstyle} \ifx\psk@method\@varrkiv\else\psk@plotpoints 1 sub \fi { /x x dx add \ifx\psk@method\@varrkiv dup x1 gt { pop x1 } if \fi def xy \@nameuse{doqp@\psplotstyle} \ifx\psk@method\@varrkiv x x1 eq { exit } if \fi } \ifx\psk@method\@varrkiv loop\else repeat\fi /x x1 def xy \@nameuse{doqp@\psplotstyle}}% \fi% \@nameuse{endqp@\psplotstyle}} \def\psplot@iii{% \ifPst@VarStep \addto@pscode{% /n 2 def mark { xy n 2 roll F2@pstplot abs ComputeStep x 2 copy add dup x1 gt {pop x1} if /x exch def F2@pstplot abs ComputeStep /x 3 -1 roll def 2 copy gt { exch } if pop /x x 3 -1 roll dup /LastNonZeroStep exch def add dup x1 gt {pop x1} if def /n n 2 add def x x1 eq { exit } if } loop xy n 2 roll}% \else\pst@killglue% \addto@pscode{% mark /n 2 def \ifx\psk@method\@varrkiv\else\psk@plotpoints\fi { xy n 2 roll /n n 2 add def /x x dx add \ifx\psk@method\@varrkiv dup x1 gt { pop x1 } if \fi def \ifx\psk@method\@varrkiv x x1 eq { exit } if \fi } \ifx\psk@method\@varrkiv loop\else repeat\fi /x x1 def xy n 2 roll}% \fi% \@nameuse{endplot@\psplotstyle}} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\parametricplot@i#1#2#3{% \pst@killglue% \begingroup \use@par \@nameuse{beginplot@\psplotstyle}% \addto@pscode{% \psplot@init /t #1 def /t1 #2 def /dt t1 t sub \psk@plotpoints div def /F@pstplot \ifPst@algebraic (#3) \ifx\psk@PlotDerivative\@none\else \psk@PlotDerivative\space { (t) tx@Derive begin Derive end } repeat \fi\space tx@AlgToPs begin AlgToPs end cvx \else { #3 } \fi def \ifPst@VarStep /StillZero 0 def /LastNonZeroStep dt def /F2@pstplot tx@Derive begin (#3) (t) Derive (t) Derive end \ifx\psk@PlotDerivative\@none\else \psk@PlotDerivative\space { (t) tx@Derive begin Derive end } repeat \fi\space tx@AlgToPs begin AlgToPs end cvx def %% computation of the tolerance defined by plotpoints /epsilon12 \ifx\psk@VarStepEpsilon\@default tx@Derive begin F2@pstplot end Pyth dt 3 exp abs mul \else\psk@VarStepEpsilon\space 12 mul \fi def /ComputeStep { dup 1e-4 lt { pop StillZero 2 ge { LastNonZeroStep 2 mul } { LastNonZeroStep } ifelse /StillZero StillZero 1 add def } { epsilon12 exch div 1 3 div exp /StillZero 0 def } ifelse } bind def \fi /xy { \ifPst@algebraic F@pstplot \else #3 \fi \pst@number\psyunit mul exch \pst@number\psxunit mul exch } def}% \gdef\psplot@init{}% \@pstfalse \@nameuse{testqp@\psplotstyle}% \if@pst \parametricplot@ii \else \parametricplot@iii \fi \endgroup \ignorespaces} \def\parametricplot@ii{% \ifPst@VarStep \addto@pscode{% mark xy \@nameuse{beginqp@\psplotstyle} { F2@pstplot Pyth ComputeStep t 2 copy add dup t1 gt {pop t1} if /t exch def F2@pstplot Pyth ComputeStep /t 3 -1 roll def 2 copy gt { exch } if pop /t t 3 -1 roll add dup t1 gt {pop t1} if def xy \@nameuse{doqp@\psplotstyle} t t1 eq { exit } if } loop}% \else\pst@killglue% \addto@pscode{% xy \@nameuse{beginqp@\psplotstyle} \psk@plotpoints 1 sub { /t t dt add def xy \@nameuse{doqp@\psplotstyle} } repeat /t t1 def xy \@nameuse{doqp@\psplotstyle}}% \fi% \@nameuse{endqp@\psplotstyle}} \def\parametricplot@iii{% \ifPst@VarStep \addto@pscode{% /n 2 def mark { xy n 2 roll F2@pstplot Pyth ComputeStep t 2 copy add dup t1 gt {pop t1} if /t exch def F2@pstplot Pyth ComputeStep /t 3 -1 roll def 2 copy gt { exch } if pop /t t 3 -1 roll dup /LastNonZeroStep exch def add dup t1 gt {pop t1} if def /n n 2 add def t t1 eq { exit } if } loop xy n 2 roll}% \else\pst@killglue% \addto@pscode{% mark /n 2 def \psk@plotpoints { xy n 2 roll /n n 2 add def /t t dt add def } repeat /t t1 def xy n 2 roll}% \fi% \@nameuse{endplot@\psplotstyle}} % \define@key[psset]{pstricks-add}{barwidth}{\pst@getlength{#1}\Add@barwidth} \psset[pstricks-add]{barwidth=0.25cm} % \def\psbar@ii{\addto@pscode{false \tx@NArray \psbar@iii}} \def\psbar@iii{% newpath n { /Yval exch def /Xval exch def Xval \number\Add@barwidth 0.5 mul sub 0 moveto 0 Yval rlineto \number\Add@barwidth 0 rlineto 0 Yval neg rlineto \number\Add@barwidth neg 0 rlineto } repeat }% \def\beginplot@bar{\begin@SpecialObj} \def\endplot@bar{% \psbar@ii\psk@fillstyle\ifpsshadow\pst@closedshadow\fi% \pst@stroke \end@SpecialObj% } % % % LSM Least Square Method 2006-03-13 (hv) \def\psLSM@ii{\addto@pscode{false \tx@NArray \psLSM@iii}} \def\psLSM@iii{% /xiSquare 0 def % xi*xi /xi 0 def % xi /fi 0 def % f(xi) /xifi 0 def % xi*f(xi) exch dup dup /xEnd ED /xStart ED exch n { % number of data pairs /Yval ED /Xval ED % save x y values /xi xi Xval add def % sum xi /xiSquare xiSquare Xval dup mul add def % sum xi*xi /xifi xifi Xval Yval mul add def % sum xi*yi, same as xi*f(xi) /fi fi Yval add def % sum yi, same as f(xi) Xval xStart lt { /xStart Xval def } if % find the lowest xi Xval xEnd gt { /xEnd Xval def } if % find the largest xi } repeat /u xiSquare fi mul xi xifi mul sub n xiSquare mul xi dup mul sub div def /v n xifi mul xi fi mul sub n xiSquare mul xi dup mul sub div def \Pst@Debug\space 0 gt { % print the equation /Helvetica findfont 12 scalefont setfont 0 -50 moveto (y=)show % print y= v 20 string cvs show ( x+) show % v x+ u \pst@number\psyunit div 20 string cvs show } if newpath (\psk@xStart) length 0 gt % special start value? { \psk@xStart\space \pst@number\psxunit mul } { xStart } ifelse dup v mul u add % xStart f(xStart) moveto % goto first point x1 y(x1) (\psk@xEnd) length 0 gt % special end value? { \psk@xEnd\space \pst@number\psxunit mul } { xEnd } ifelse dup v mul u add % xEnd f(xEnd) lineto % line to second point x2 y(x2) }% % \def\beginplot@LSM{\begin@SpecialObj} \def\endplot@LSM{% \psLSM@ii\psk@fillstyle\ifpsshadow\pst@closedshadow\fi% \pst@stroke \end@SpecialObj% } % \define@key[psset]{pstricks-add}{StepType}{\pst@expandafter\psset@@StepType{#1}\@nil}% \def\psset@@StepType#1#2\@nil{% \ifx#1u\let\psk@StepType\@ne \else\ifx#1l\let\psk@StepType\z@ \else\ifx#1i\let\psk@StepType\thr@@ \else\ifx#1s\let\psk@StepType\f@ur \else\let\psk@StepType\tw@\fi\fi\fi\fi} \psset{StepType=lower} % alternative StepType=upper/inf/sup/Riemann % \def\psStep{\pst@object{psStep}} \def\psStep@i(#1,#2)#3#4{% \begin@ClosedObj% \addto@pscode{ \ifPst@algebraic /Func (#4) tx@addDict begin AlgParser end cvx def \fi /x #1 def /dx #2 #1 sub #3 div def /scx { \pst@number\psxunit mul } def /scy { \pst@number\psyunit mul } def \ifcase\psk@StepType % 0->lower, height is always f(x) x scx 0 moveto #3 { \ifPst@algebraic Func \else #4 \fi scy dup x scx exch lineto /x x dx add def x scx exch lineto x scx 0 lineto } repeat \or % 1-> upper, height is always f(x+dx) x scx 0 moveto #3 { /x x dx add def \ifPst@algebraic Func \else #4 \fi scy dup x dx sub scx exch lineto x scx exch lineto x scx 0 lineto } repeat \or % 2-> Riemann /eps3 100 def /xMinMax [] def /AMax [] def /AMin [] def /dt dx eps3 div def #3 { /Max \ifPst@algebraic Func \else #4 \fi def /Min Max def /t x def % save x value eps3 { \ifPst@algebraic Func \else #4 \fi dup Max lt { /Max exch def } { dup Min gt { /Min exch def }{ pop } ifelse } ifelse /x x dt add def } repeat /x t def % restore x scx Min scy Max scy xMinMax aload length 3 add array astore /xMinMax exch def /x x dx add def } repeat /dx dx scx def xMinMax aload length 3 div cvi { /yMax ED /yMin ED /x ED x yMin moveto dx 0 rlineto x dx add yMax lineto dx neg 0 rlineto x yMin lineto } repeat \or % 3->inf(imum) x scx 0 moveto #3 { \ifPst@algebraic Func \else #4 \fi /y0 ED % left value f(x) /xOld x def /x x dx add def \ifPst@algebraic Func \else #4 \fi /y1 ED % right value f(x+dx) y0 y1 lt { y0 }{ y1 } ifelse % use infimum scy dup xOld scx exch lineto x scx exch lineto x scx 0 lineto } repeat \or % 4-> sup(remum) x scx 0 moveto #3 { \ifPst@algebraic Func \else #4 \fi /y0 ED % left value f(x) /x x dx add def \ifPst@algebraic Func \else #4 \fi /y1 ED % right value f(x+dx) y0 y1 gt { y0 }{ y1 } ifelse % use supremum scy dup x dx sub scx exch lineto x scx exch lineto x scx 0 lineto } repeat \fi }% \psk@fillstyle \pst@stroke \end@ClosedObj% } % \define@key[psset]{pstricks-add}{Derive}{\def\psk@Derive{#1}}% \define@boolkey[psset]{pstricks-add}[PST@]{Tnormal}[true]{} \psset[pstricks-add]{CMYK=true} \def\@NOTEMPTY{NOT@EMPTY}%%dr 0606 % %% #1 : x value %% #2 : delta x %% #3 : function \def\psplotTangent{\pst@object{psplotTangent}}% idea from Dominique Rodriguez \def\psplotTangent@i#1#2#3{% \begin@OpenObj% % \let\pst@linetype\pst@arrowtype% % \pst@addarrowdef% \ifx\psk@Derive\@empty\ifPst@algebraic\psset{Derive=NOT@EMPTY}\fi\fi%%dr 0606 \addto@pscode{ gsave % save current state /F@pstplot \ifPst@algebraic (#3) tx@addDict begin AlgParser end cvx \else { #3 } \fi def % define function \ifx\psk@Derive\@empty\else \ifx\psk@Derive\@NOTEMPTY\else%%dr 0606 /FDer@pstplot % do we have a derivation defined? \ifPst@algebraic (\psk@Derive) tx@addDict begin AlgParser end cvx \else { \psk@Derive } \fi def % define derivation \fi%%dr 0606 \fi /@parametric false def %%dr 0606 % first we calculate the origin #1 dup /x ED /t ED tx@addDict begin mark F@pstplot end counttomark 1 gt % test, if we have parametricplot %%{ /y ED /x ED } % if yes, then we have 2 values { /y ED /x ED /@parametric true def } % if yes, then we have 2 values%%dr 0606 { \ifPst@polarplot x \ifPst@algebraic RadtoDeg \fi PtoC /y ED /x ED \else /y ED \fi } ifelse cleartomark \ifx\psk@Derive\@NOTEMPTY%%begin dr 0606 %% algebraic we can use the derivative machine /FDer@pstplot (#3) @parametric { (t) } { (x) } ifelse tx@Derive begin Derive end tx@addDict begin AlgParser end cvx def \fi%%end dr 0606 x \pst@number\psxunit mul y \pst@number\psyunit mul translate % define the temporary origin % now we calculate the slope of the tangent \ifx\psk@Derive\@empty% de we have a derivation defined? #1 abs 1.0e-6 lt % no, we choose secant for the tangent { #1 0.0005 add dup /x ED /t ED tx@addDict begin mark F@pstplot end counttomark 1 gt % test, if we have parametricplot { /y2 ED /x2 ED } % we have 2 values { \ifPst@polarplot dup x \ifPst@algebraic RadtoDeg \fi cos mul /x2 ED x \ifPst@algebraic RadtoDeg \fi sin mul \else /x2 x def \fi /y2 ED } ifelse cleartomark % delete the mark #1 0.0005 sub dup /x ED /t ED tx@addDict begin mark F@pstplot end counttomark 1 gt % test, if we have parametricplot { /y1 ED /x1 ED } { \ifPst@polarplot dup x \ifPst@algebraic RadtoDeg \fi cos mul /x1 ED x \ifPst@algebraic RadtoDeg \fi sin mul \else /x1 x def \fi /y1 ED } ifelse cleartomark y2 y1 sub x2 x1 sub } % dy dx { % > 1.0e-06 #1 1.0005 mul dup /x ED /t ED tx@addDict begin mark F@pstplot end counttomark 1 gt % test, if we have parametricplot { /y2 ED /x2 ED } % we have 2 values { \ifPst@polarplot dup x \ifPst@algebraic RadtoDeg \fi cos mul /x2 ED x \ifPst@algebraic RadtoDeg \fi sin mul \else /x2 x def \fi /y2 ED } ifelse cleartomark #1 .9995 mul dup /x ED /t ED tx@addDict begin mark F@pstplot end counttomark 1 gt % test, if we have parametricplot { /y1 ED /x1 ED } % we have 2 values { \ifPst@polarplot dup x \ifPst@algebraic RadtoDeg \fi cos mul /x1 ED x \ifPst@algebraic RadtoDeg \fi sin mul \else /x1 x def \fi /y1 ED } ifelse cleartomark y2 y1 sub \pst@number\psyunit mul x2 x1 sub \pst@number\psxunit mul } ifelse atan % atan(dy dx), we have the slope angle of the secant \else % there is a derivation defined #1 dup /x ED /t ED tx@addDict begin mark FDer@pstplot end counttomark 1 gt % test, if we have parametricplot { /y ED /x ED } { \ifPst@polarplot /Fphi ED % the value F'(phi) tx@addDict begin F@pstplot end x \ifPst@algebraic RadtoDeg \fi PtoC /y0 ED /x0 ED % the x y values x \ifPst@algebraic RadtoDeg \fi sin Fphi mul x0 add /y ED x \ifPst@algebraic RadtoDeg \fi cos Fphi mul y0 sub /x ED \else /y ED /x 1 def \fi } ifelse cleartomark y \pst@number\psyunit mul x \pst@number\psxunit mul Atan \ifPST@Tnormal 90 add \fi % y ATAN1 % we have the slope angle of the tangent. ATAN is defined int the pstricks.pro, patch 6 \fi rotate % rotate, depending to the origin /Lineto /lineto load def [ \ifPST@Tnormal 0 0 % moveto #2 y \pst@number\psyunit mul x \pst@number\psxunit mul Atan 90 add cos div \pst@number\psxunit mul 0 % lineto \else -#2 \pst@number\psxunit mul 0 % moveto #2 \pst@number\psxunit mul 0 % lineto \fi \pst@cp % kill the currentpoint, if any false % don't show the points \tx@Line % ArrowA CP 4 2 roll ArrowB L % the line with arrows L is defined in pstricks.pro % \pst@number\pslinewidth SLW % set linewidth in pt % \@nameuse{psls@\pslinestyle} % linestyle % \pst@usecolor\pslinecolor % linecolor stroke % stroke everything \ifshowpoints % show the points? \psk@dotsize \@nameuse{psds@\psk@dotstyle}% 0 0 Dot \fi grestore % restore old graphics state }% \use@pscode % part of \end@OpenObj \endgroup% % part of \end@OpenObj \ignorespaces% % part of \end@OpenObj }% % \def\@varrkiv{varrkiv}% Runge-Kutta 4 with an adaptive step method %% #1-#2 x range %% #3 initial value of y (which is a vector) y(0) y'(0) y''(0) ... %% #4 value of the derivative (y and t can be used) % \define@key[psset]{pstricks-add}{filename}{\def\psk@filename{#1}}% \define@boolkey[psset]{pstricks-add}[Pst@]{saveData}[true]{} % \ifPst@saveData \psset[pstricks-add]{saveData=false,filename=PSTdata} % \def\psplotDiffEqn{\pst@object{psplotDiffEqn}}% initial code by Dominique 2005-05-21 \def\psplotDiffEqn@i#1#2#3#4{% \pst@killglue% \begingroup% \use@par% \@nameuse{beginplot@\psplotstyle}% \addto@pscode{% \ifPst@saveData /Pst@data (\psk@filename) (w) file def \fi /x #1 def % first value /x1 #2 def % last value /y [ #3 ] def % values for t=0 /ylength y length def % number of elements in #3 /addvect { 1 1 ylength { /i exch def ylength i sub 2 add -1 roll add ylength 2 mul i sub 1 roll } for } def /dx x1 x sub \psk@plotpoints\space div def /mulvect { ylength exch 1 index { dup 4 -1 roll mul 2 index 2 add 1 roll } repeat pop pop } def /divvect { ylength exch 1 index { dup 4 -1 roll exch div 2 index 2 add 1 roll } repeat pop pop } def /k0 0 def /k1 0 def /k2 0 def /k3 0 def \ifPst@algebraic /F@pstplot (#4) tx@addDict begin AlgParser end cvx def \fi /Func { \ifPst@algebraic F@pstplot ylength array astore \else \ifPst@buildvector\else y aload pop \fi #4 \ifPst@buildvector\else ylength array astore \fi \fi } def \ifx\psk@method\@adams /F1 0 def /F2 0 def /F3 0 def /F4 0 def /F5 0 def /F6 0 def /INIT 1 def \fi \ifx\psk@method\@empty\else \ifx\psk@method\@varrkiv %% RUNGE-KUTTA method with var step algorithm /VarStep false def /VarStepRatio 1 def /RK { /k0 Func { dx mul } forall ylength array astore def %% y dup aload pop k0 { 2 div } forall addvect ylength array astore /y exch def % x dup dx 2 div add /x exch def %% y x /k1 Func { dx mul } forall ylength array astore def %% y x exch dup aload pop k1 { 2 div } forall addvect y astore pop %% x y /k2 Func { dx mul } forall ylength array astore def %% x y dup aload pop k2 aload pop addvect y astore pop exch dup dx add /x exch def %% y x /k3 Func { dx mul } forall ylength array astore def %% y x /x exch def %% y dup aload pop k0 aload pop k1 aload pop k2 aload pop addvect 2 mulvect addvect k3 aload pop addvect 6 divvect addvect y astore } def /VARRK { VarStep %{ /dx dx \psk@varstepincrease\space mul def /VarStep false def } if { /dx dx VarStepRatio mul def /VarStep false def } if x dx add x1 gt { /dx x1 x sub def } if %{ /dx dx \psk@varstepdecrease\space div def } ifelse %% we compute y(x+dx) from y(x) using RK4 RK %% y(x) y(x+dx) exch /y exch def /dx dx 2 div def { %% we compute y(x+dx/2) from y(x) using RK4 y RK %% y(x+dx) y(x+dx/2) %% then y(x+dx) from y(x+dx/2) using RK4 /y exch def y RK %% y(x+dx) y(x) y(x+dx/2) y(x+dx) dup aload pop 4 ylength add -1 roll { -1 mul } forall addvect 0 ylength { exch abs 2 copy lt { exch } if pop } repeat 0 3 -1 roll {abs 2 copy lt { exch } if pop } forall dup 1e-6 lt { pop } { div } ifelse /dx dx 2 mul def dup \psk@varsteptol\space lt %{ \psk@varsteptol\space div .1 lt { /VarStep true def } if pop exit } if %pop /dx dx 4 div def exch /y exch def } loop { .001 div dup .1 lt { dup 1e-6 lt { pop 3 } { log neg } ifelse /VarStepRatio exch def /VarStep true def } { pop } ifelse pop exit } if pop /dx dx 4 div def exch /y exch def } loop } def \else %% RUNGE-KUTTA & ADAMS methods /RK { /k0 Func { dx mul } forall ylength array astore def %% y dup aload pop k0 { 2 div } forall addvect ylength array astore /y exch def % x dup dx 2 div add /x exch def %% y x /k1 Func { dx mul } forall ylength array astore def %% y x exch dup aload pop k1 { 2 div } forall addvect y astore pop %% x y /k2 Func { dx mul } forall ylength array astore def %% x y dup aload pop k2 aload pop addvect y astore pop exch dup dx add /x exch def %% y x /k3 Func { dx mul } forall ylength array astore def %% y x /x exch def %% y dup aload pop k0 aload pop k1 aload pop k2 aload pop addvect 2 mulvect addvect k3 aload pop addvect 6 divvect addvect y astore pop } def \ifx\psk@method\@adams /ADAMS { \ifcase\psk@adamsorder \errmessage{pstricks-add error: no order 0th for adams method (see user's manual)} \or\errmessage{pstricks-add error: no order 1st for adams method (see user's manual)} \or\errmessage{pstricks-add error: no order 2nd for adams method (see user's manual)} \or\errmessage{pstricks-add error: no order 3rd for adams method (see user's manual)} \or %% ORDRE 4 F4 aload pop 55 mulvect F3 aload pop -59 mulvect addvect F2 aload pop 37 mulvect addvect F1 aload pop -9 mulvect addvect dx mulvect 24 divvect \or %% ORDRE 5 F5 aload pop 1901 mulvect F4 aload pop -2774 mulvect addvect F3 aload pop 2616 mulvect addvect F2 aload pop -1274 mulvect addvect F1 aload pop 251 mulvect addvect dx mulvect 720 divvect \or %% ORDRE 6 F6 aload pop 4277 mulvect F5 aload pop -7923 mulvect addvect F4 aload pop 9982 mulvect addvect F3 aload pop -7298 mulvect addvect F2 aload pop 2877 mulvect addvect F1 aload pop -475 mulvect addvect dx mulvect 1440 divvect \fi y aload pop addvect ylength array astore /y exch def } def \fi \fi \fi /xy { \ifx\psk@plotfuncx\@empty \ifx\psk@whichabs\@empty x \else y \psk@whichabs\space get \fi \else \psk@plotfuncx\space \fi \pst@number\psxunit mul y \ifx\psk@method\@empty %% EULER method /y Func { dx mul } forall y aload pop addvect ylength array astore def \else% \ifx\psk@method\@varrkiv %% RUNGE-KUTTA method VARRK \else\ifx\psk@method\@rkiv %% RUNGE-KUTTA method RK \else /F1 F2 def /F2 F3 def /F3 F4 def /F4 %% ADAMS method \ifcase\psk@adamsorder\or\or\or\or %% ORDRE 4 Func def \or %% ORDRE 5 F5 def /F5 Func def \or %% ORDRE 6 F5 def /F5 F6 def /F6 Func def \fi INIT \psk@adamsorder\space lt { RK /INIT INIT 1 add def } { ADAMS } ifelse \fi\fi \fi \ifx\psk@plotfuncy\@empty \ifx\psk@whichord\@empty 0 \else \psk@whichord\space \fi get % \else \psk@plotfuncy\space \fi \pst@number\psyunit mul \ifPst@saveData 2 copy \pst@number\psyunit div exch \pst@number\psxunit div 20 string cvs Pst@data exch writestring Pst@data (\space) writestring 20 string cvs Pst@data exch writestring Pst@data (\string\n) writestring \fi } def }% \gdef\psplot@init{}% \@pstfalse \@nameuse{testqp@\psplotstyle}% \if@pst\psplot@ii\else\psplot@iii\fi \addto@pscode{\ifPst@saveData Pst@data closefile \fi} \endgroup% \ignorespaces% } % % \def\psGTriangle{\pst@object{psGTriangle}} \def\psGTriangle@i(#1)(#2)(#3)#4#5#6{{% \def\solid@star{}% \begin@ClosedObj \pst@getcoor{#1}\pst@tempA% A: "rgb xr xg xb" or "gray xg" \pst@getcoor{#2}\pst@tempB% B \pst@getcoor{#3}\pst@tempC% C \pst@getcolor{#4}\pst@colorA \pst@getcolor{#5}\pst@colorB \pst@getcolor{#6}\pst@colorC \addto@pscode{% \pst@tempC % C \pst@tempB % B \psk@gangle % rotating angle \pst@tempA % A, temporary origin /rgb {} def /gray {} def [ \pst@colorC ] aload length 1 eq { dup dup } if 3 array astore % gray -> rgb [ \pst@colorB ] aload length 1 eq { dup dup } if 3 array astore [ \pst@colorA ] aload length 1 eq { dup dup } if 3 array astore tx@addDict begin GTriangle end % PS part }% \if@star\pspolygon[fillstyle=none](#1)(#2)(#3)\fi% draw borderline \def\pst@linetype{2}% \end@ClosedObj% }\ignorespaces} % \def\psdice{\pst@object{psdice}} \def\psdice@i#1{{% \pst@killglue% \addbefore@par{framearc=0.3,linewidth=1pt}% \use@par% \psframe(-0.5,-0.5)(0.5,0.5)% \ifodd#1 \qdisk(0,0){0.1\psunit}\else\qdisk(-0.3,-0.3){0.1\psunit}\qdisk(0.3,0.3){0.1\psunit}\fi \ifcase#1% \or\or\or\qdisk(-0.3,-0.3){0.1\psunit}\qdisk(0.3,0.3){0.1\psunit}% 3 \or\qdisk(-0.3,0.3){0.1\psunit}\qdisk(0.3,-0.3){0.1\psunit}% 4 \or\qdisk(-0.3,-0.3){0.1\psunit}\qdisk(0.3,0.3){0.1\psunit}% 5 \qdisk(-0.3,0.3){0.1\psunit}\qdisk(0.3,-0.3){0.1\psunit} \or\qdisk(-0.3,0.3){0.1\psunit}\qdisk(0.3,-0.3){0.1\psunit}% 6 \qdisk(-0.3,0){0.1\psunit}\qdisk(0.3,0){0.1\psunit}% \fi% \ignorespaces% }} % % the datafile must be a matrix with % /dotmatrix [ % ..... % ..... % ] def % \def\psMatrixPlot{\pst@object{psMatrixPlot}} \def\psMatrixPlot@i#1#2#3{% \pst@killglue \begingroup \begin@SpecialObj% \addto@pscode{ (#3) run % load the data file \psk@dotsize \@nameuse{psds@\psk@dotstyle} % /n 0 def % index for element 1 1 #1 { % the y loop (outer one) /y exch def % save y 1 1 #2 { % the x loop (inner one) /x exch def % save x dotmatrix n get % get value from matrix dup 0 gt { % test if > 0 x \pst@number\psxunit mul \ifPst@ChangeOrder #1 y sub 1 add \else y \fi \pst@number\psyunit mul Dot% } { pop } ifelse /n n 1 add def } for } for }% \end@SpecialObj% \endgroup% \ignorespaces% } % \newdimen\chart@ColorIndex \newdimen\chart@ColorStep \newdimen\pst@chartHeight \newdimen\pst@chartStackDepth \newdimen\pst@chartStackWidth \newcount\chart@Toggle \newif\if@chartSep \newif\if@chartUserColor % \define@key[psset]{pstricks-add}{chartStyle}{\def\psk@chartStyle{#1}} \psset[pstricks-add]{chartStyle=pie}% p)ie P)ie-3d-view h)istogram H)istogram-3dview % \define@key[psset]{pstricks-add}{chartColor}{\pst@expandafter\psk@@chartColor{#1}\@nil} \def\psk@@chartColor#1#2\@nil{% \ifx#1r\def\psk@chartColor{2}\else \ifx#1c\def\psk@chartColor{380}\else\def\psk@chartColor{0}\fi\fi} \psset[pstricks-add]{chartColor=gray}% gray, color, randomColor % \define@key[psset]{pstricks-add}{chartSep}{\pst@getlength{#1}\psk@chartSep} \define@key[psset]{pstricks-add}{chartStack}{\pst@getint{#1}\psk@chartStack} \define@key[psset]{pstricks-add}{chartStackDepth}{\pssetylength\pst@chartStackDepth{#1}} \define@key[psset]{pstricks-add}{chartStackWidth}{\pssetxlength\pst@chartStackWidth{#1}} \define@key[psset]{pstricks-add}{chartHeight}{\pssetylength\pst@chartHeight{#1}} \psset[pstricks-add]{chartSep=10pt,chartStack=0,chartStackDepth=2cm,chartStackWidth=2cm, chartHeight=5mm} % \define@key[psset]{pstricks-add}{userColor}{% \chart@Toggle=0 \def\chart@option{#1} \ifx\chart@option\@empty\@chartUserColorfalse \else \@chartUserColortrue \expandafter\psk@@chartUserColor#1,,\@nil \fi} \def\psk@@chartUserColor#1,#2,#3\@nil{% \advance\chart@Toggle by \@ne% \xglobal\colorlet{chartFillColor\the\chart@Toggle}{#1}% \def\chart@option{#2} \ifx\chart@option\@empty\else\psk@@chartUserColor#2,#3,\@nil\fi}% \psset[pstricks-add]{userColor={}} \define@key[psset]{pstricks-add}{chartNodeI}{\def\psk@chartNodeI{#1}} \define@key[psset]{pstricks-add}{chartNodeO}{\def\psk@chartNodeO{#1}} \psset[pstricks-add]{chartNodeI=0.75,chartNodeO=1.5} \def\psChart{\pst@object{psChart}} \def\psChart@i#1#2#3{% % #1:values #2:separated charts % #3 radius->pie; max height->histogram \pst@killglue% \global\pssetylength\pst@chartHeight{#3}% \global\let\pst@chartRadius\pst@chartHeight% \begingroup% \def\psk@chartValues{#1}% \def\psk@chartSepValues{#2}% only valid for a pie chart \pst@dimm=\z@% sum of all entries (for a pie) \pst@cnta=1% number of entries \pst@dimn=\z@% greatest entry \psforeach{\chart@tempA}{#1}{% \global\advance\pst@cnta by \@ne % no of entries \global\advance\pst@dimm by \chart@tempA pt % sum of all entries \pst@dima=\chart@tempA pt \ifdim\pst@dima>\pst@dimn \global\pst@dimn=\pst@dima\fi}% \addbefore@par{dimen=outer}% \typeout{: pst@par=\pst@par}% \begin@SpecialObj% \ifnum\psk@chartColor>0 \chart@ColorStep=400\p@\else\chart@ColorStep=\p@\fi % the "numerical color" \divide\chart@ColorStep by \pst@cnta% % step =1/no or 400/no \chart@ColorIndex=\psk@chartColor pt% % the start color (gray or wave) \psDEBUG[psChart]{psk@chartStack=\psk@chartStack}% \@nameuse{pscs@\psk@chartStyle}% \end@SpecialObj% \endgroup% \ignorespaces% } % \def\pscs@pie{% \degrees[\pst@number\pst@dimm]% % instead of 360 degrees \def\chart@alpha{0}% \pst@dimm=0pt\pst@dimn=0pt\pst@dimo=0pt\pst@cnta=0% \global\chart@Toggle=1 \ifpsshadow% create shadow first \psforeach{\chart@tempA}{\psk@chartValues}{% \global\advance\pst@dimm by \chart@tempA pt% \global\advance\pst@dimn by \chart@alpha pt% \global\advance\pst@cnta by \@ne% \pst@dimo=0.5\pst@dimn\advance\pst@dimo by 0.5\pst@dimm% half angle of the chart \global\@chartSepfalse% \psforeach{\chart@tempC}{\psk@chartSepValues}{\ifnum\chart@tempC=\the\pst@cnta \global\@chartSeptrue\fi}% \if@chartSep \pswedge(\psk@chartSep pt;\pst@number\pst@dimo){\pst@chartRadius}{\pst@number\pst@dimn}{\pst@number\pst@dimm}% \else \pswedge{\pst@chartRadius}{\pst@number\pst@dimn}{\pst@number\pst@dimm} \fi% \global\let\chart@alpha\chart@tempA% } \psshadowfalse% \fi% \def\chart@alpha{0}% \pst@dimm=0pt\pst@dimn=0pt\pst@dimo=0pt\pst@cnta=0% \psforeach{\chart@tempA}{\psk@chartValues}{% \global\advance\pst@dimm by \chart@tempA pt% \global\advance\pst@dimn by \chart@alpha pt% \def\pst@tempB{\pst@number\chart@ColorIndex}% \psDEBUG[psChart:wave:color]{\pst@tempB}% \global\advance\pst@cnta by \@ne% \if@chartUserColor\else \def\chart@FillColor{chartFillColor\the\pst@cnta} \ifnum\psk@chartColor>0 \xglobal\definecolor{\chart@FillColor}{wave}{\pst@tempB}% \else\xglobal\definecolor{\chart@FillColor}{gray}{\pst@tempB}\fi% \fi \pst@dimo=0.5\pst@dimn\advance\pst@dimo by 0.5\pst@dimm% half angle of the chart \global\@chartSepfalse% \psforeach{\chart@tempC}{\psk@chartSepValues}{\ifnum\chart@tempC=\the\pst@cnta \global\@chartSeptrue\fi}% \if@chartSep% \pswedge[linecolor={chartFillColor\the\pst@cnta},fillstyle=solid,fillcolor={chartFillColor\the\pst@cnta}]% (\psk@chartSep pt;\pst@number\pst@dimo){\pst@chartRadius}{\pst@number\pst@dimn}{\pst@number\pst@dimm}% \pst@dima=\pst@chartRadius\advance\pst@dima by \psk@chartSep pt \pnode(\pst@dima;\pst@number\pst@dimo){psChart\the\pst@cnta}% \pst@dimb=\psk@chartNodeI\pst@dima \pst@dimc=\psk@chartNodeO\pst@dima \pnode(\pst@dimb;\pst@number\pst@dimo){psChartI\the\pst@cnta}% \pnode(\pst@dimc;\pst@number\pst@dimo){psChartO\the\pst@cnta}% \else \pswedge[linecolor={chartFillColor\the\pst@cnta},fillstyle=solid,fillcolor={chartFillColor\the\pst@cnta}]% {\pst@chartRadius}{\pst@number\pst@dimn}{\pst@number\pst@dimm} \pnode(\pst@chartRadius;\pst@number\pst@dimo){psChart\the\pst@cnta}% \pst@dima=\pst@chartRadius% \pst@dimb=\psk@chartNodeI\pst@dima \pst@dimc=\psk@chartNodeO\pst@dima \pnode(\pst@dimb;\pst@number\pst@dimo){psChartI\the\pst@cnta}% \pnode(\pst@dimc;\pst@number\pst@dimo){psChartO\the\pst@cnta}% \fi% \global\let\chart@alpha\chart@tempA% \global\advance\chart@Toggle by \@ne \ifnum\chart@Toggle<3 \global\advance\chart@ColorIndex by 2\chart@ColorStep \else \global\chart@Toggle=0 \global\advance\chart@ColorIndex by -\chart@ColorStep% \fi% }% end foreach } % \def\pscs@histogram{% \def\chart@maxValue{\pst@number\pst@dimn}% max of the data \pst@@divide\pst@dimn\pst@chartHeight% maxValue/maxHeight \psDEBUG[pscs@histogram]{chart@maxValue=\chart@maxValue} \psDEBUG[pscs@histogram]{(maxValue/maxHeight)pst@dimg=\pst@number\pst@dimg} \psDEBUG[pscs@histogram]{pst@chartHeight=\the\pst@chartHeight} \pst@dimo=28.46\pst@dimg \edef\pst@chartUnit{\pst@number\pst@dimo} % \psaxes[axesstyle=frame, % dy=1cm,Dy=\pst@number\pst@dimo](\the\pst@cnta,\the\pst@chartHeight) \pst@dimm=0pt\pst@dimn=0pt\pst@dimo=0pt\pst@cnta=0% \global\chart@Toggle=1 \psforeach{\chart@tempA}{\psk@chartValues}{% \global\advance\pst@dimm by \chart@tempA pt% \def\pst@tempB{\pst@number\chart@ColorIndex}% \psDEBUG[psChart:wave:color]{\pst@tempB}% \global\advance\pst@cnta by \@ne% \if@chartUserColor\else \def\chart@FillColor{chartFillColor\the\pst@cnta} \ifnum\psk@chartColor>0 \xglobal\definecolor{\chart@FillColor}{wave}{\pst@tempB}% \else\xglobal\definecolor{\chart@FillColor}{gray}{\pst@tempB}\fi% \fi \psframe[linecolor={chartFillColor\the\pst@cnta},fillstyle=solid,fillcolor={chartFillColor\the\pst@cnta}]% (!\the\pst@cnta\space \psk@chartSep\space 28.46 div sub 0) (!\the\pst@cnta\space \psk@chartSep\space 28.46 div add \chart@tempA\space \pst@chartUnit\space div) \pnode(!\the\pst@cnta\space 0){psChart\the\pst@cnta}% \pnode(!\the\pst@cnta\space \chart@tempA\space 2 div \pst@chartUnit\space div){psChartM\the\pst@cnta}% \pnode(!\the\pst@cnta\space \chart@tempA\space \pst@chartUnit\space div){psChartT\the\pst@cnta}% \global\advance\chart@Toggle by \@ne \ifnum\chart@Toggle<3 \global\advance\chart@ColorIndex by 2\chart@ColorStep \else \global\chart@Toggle=0 \global\advance\chart@ColorIndex by -\chart@ColorStep% \fi% }% end foreach } % \def\pst@stackList{} \def\addbefore@stackList#1{% \ifx\pst@stackList\@empty \xdef\pst@stackList{#1}% \else \toks@{#1}% \pst@toks\expandafter{\pst@stackList}% \xdef\pst@stackList{\the\toks@,\the\pst@toks}% \fi% } % \def\pscs@Histogram{% \psDEBUG[pscs@Histogram]{psk@chartStack=\psk@chartStack}% \def\chart@maxValue{\pst@number\pst@dimn}% max of the data \pst@@divide\pst@dimn\pst@chartHeight% maxValue/maxHeight \psDEBUG[pscs@Histogram]{chart@maxValue=\chart@maxValue}% \psDEBUG[pscs@Histogram]{(maxValue/maxHeight)pst@dimg=\pst@number\pst@dimg}% \psDEBUG[pscs@Histogram]{pst@chartHeight=\the\pst@chartHeight}% \pst@dimo=28.46\pst@dimg% \edef\pst@chartUnit{\pst@number\pst@dimo}% % \psaxes[axesstyle=frame, % dy=1cm,Dy=\pst@number\pst@dimo](\the\pst@cnta,\the\pst@chartHeight) \pst@dimm=0pt\pst@dimn=0pt\pst@dimo=0pt\pst@cnta=0% \global\chart@Toggle=1 % for color toggling \pst@cntn=0 % stacked step \pst@cnto=0 % for a stacked view \pst@cntp=\psk@chartStack % for a stacked view \def\pst@stackList{} \psDEBUG[pscs@Histogram]{psk@chartStack=\the\pst@cntp}% \psforeach{\chart@tempA}{\psk@chartValues}{% the loop \ifnum\pst@cntp>0 % stacked version? \advance\pst@cnto by \@ne % increase \psDEBUG[pscs@Histogram]{chart@tempA=\chart@tempA}% \expandafter\addbefore@stackList\expandafter{\chart@tempA}% \psDEBUG[pscs@Histogram]{stack list=\pst@stackList}% \ifnum\pst@cnto=\pst@cntp % draw? \pst@cnto=\psk@chartStack\advance\pst@cnto by \m@ne \psforeach{\chart@tempB}{\pst@stackList}{% the stack loop \global\pst@cnta=\pst@cntn % we do not need the value \psDEBUG[pscs@Histogram]{pst@cnto=\the\pst@cnto}% \psDEBUG[pscs@Histogram]{pst@chartStackDepth=\the\pst@chartStackDepth}% \psDEBUG[pscs@Histogram]{pst@chartStackWidth=\the\pst@chartStackWidth}% \edef\pst@tempA{\the\pst@cnto}% \psDEBUG[pscs@Histogram]{pst@tempA=\pst@tempA}% \ifnum\pst@cnto>0 \pst@dima=\pst@chartStackDepth% \pst@dimb=\pst@chartStackWidth% \divide \pst@dima by \pst@tempA% \divide \pst@dimb by \pst@tempA% \else\pst@dima=\z@ \pst@dimb=\z@% \fi% \rput(\the\pst@dima, \the\pst@dimb){\pscs@Histogram@i{\chart@tempB}} \advance\pst@cnto by \m@ne % decrease stack counter }% \advance\pst@cntn by \tw@ % increase \def\pst@stackList{}% reset stack list \pst@cnto=0 % reset stack counter \fi% \else% \pscs@Histogram@i{\chart@tempA}% non stacked version \fi% }% end foreach } % \def\pscs@Histogram@i#1{% draw the 3d-like bar \def\pst@tempB{\pst@number\chart@ColorIndex}% \global\advance\pst@cnta by \@ne% \if@chartUserColor\else \def\chart@FillColor{chartFillColor\the\pst@cnta} \ifnum\psk@chartColor>0 \xglobal\definecolor{\chart@FillColor}{wave}{\pst@tempB}% \else\xglobal\definecolor{\chart@FillColor}{gray}{\pst@tempB}\fi% \fi \pspolygon[fillstyle=solid,fillcolor={chartFillColor\the\pst@cnta}]% (!\the\pst@cnta\space \psk@chartSep\space 28.46 div sub 0)% ll (!\the\pst@cnta\space \psk@chartSep\space 28.46 div add 0)% lr (!\the\pst@cnta\space \psk@chartSep\space 28.46 div 1.5 mul add \psk@chartSep\space 56.92 div)% 'lr (!\the\pst@cnta\space \psk@chartSep\space 28.46 div 1.5 mul add \psk@chartSep\space 56.92 div #1 \pst@chartUnit\space div add )% 'ur (!\the\pst@cnta\space \psk@chartSep\space 56.92 div sub \psk@chartSep\space 56.92 div #1 \pst@chartUnit\space div add )% 'ul (!\the\pst@cnta\space \psk@chartSep\space 28.46 div sub #1 \pst@chartUnit\space div)%ul \psline% (!\the\pst@cnta\space \psk@chartSep\space 28.46 div add 0)% lr (!\the\pst@cnta\space \psk@chartSep\space 28.46 div add #1 \pst@chartUnit\space div) (!\the\pst@cnta\space \psk@chartSep\space 28.46 div sub #1 \pst@chartUnit\space div)%ul \psline% (!\the\pst@cnta\space \psk@chartSep\space 28.46 div add #1 \pst@chartUnit\space div) (!\the\pst@cnta\space \psk@chartSep\space 28.46 div 1.5 mul add \psk@chartSep\space 56.92 div #1 \pst@chartUnit\space div add )% 'ur \pnode(!\the\pst@cnta\space 0){psChart\the\pst@cnta}% \pnode(!\the\pst@cnta\space #1 2 div \pst@chartUnit\space div){psChartM\the\pst@cnta}% \pnode(!\the\pst@cnta\space #1 \pst@chartUnit\space div){psChartT\the\pst@cnta}% \global\advance\chart@Toggle by \@ne \ifnum\chart@Toggle<3 \global\advance\chart@ColorIndex by 2\chart@ColorStep \else \global\chart@Toggle=0 \global\advance\chart@ColorIndex by -\chart@ColorStep% \fi% \global\advance\chart@ColorIndex by 1pt } % \def\psCancel{\pst@object{psCancel}}% by Stefano Baroni 2008-06-21 \def\psCancel@i{\pst@makebox\psCancel@ii} \def\psCancel@ii{% \begingroup \solid@star \use@par \pst@dima=\pslinewidth \advance\pst@dima by \psframesep \pst@dimc=\wd\pst@hbox\advance\pst@dimc by \pst@dima \pst@dimb=\dp\pst@hbox\advance\pst@dimb by \pst@dima \pst@dimd=\ht\pst@hbox\advance\pst@dimd by \pst@dima \setbox\pst@hbox=\hbox{% \ifpsboxsep\kern\pst@dima\fi \begin@ClosedObj \addto@pscode{ \psk@cornersize % arcradius boolean \pst@number\pst@dima neg \pst@number\pst@dimb neg \pst@number\pst@dimc \pst@number\pst@dimd .5 \if@star \tx@Frame \else CLW mul /a ED % the middle of the line 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add /y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED pop pop % delete arc values x1 y1 moveto x2 y2 lineto x2 y1 moveto x1 y2 lineto \fi }% \def\pst@linetype{2}% \showpointsfalse \end@ClosedObj \box\pst@hbox \ifpsboxsep\kern\pst@dima\fi% }% \ifpsboxsep\dp\pst@hbox=\pst@dimb\ht\pst@hbox=\pst@dimd\fi \leavevmode\box\pst@hbox \endgroup% } % \def\resetOptions{% \@zero=0% \def\pst@linetype{0}% \psset[pstricks-add]{% hooklength=3mm, hookwidth=1mm, ArrowFill=true, ArrowInside={}, ArrowInsidePos=0.5, ArrowInsideNo=1, ArrowInsideOffset=0, arrowLW=0, dashNo=0.2,linecap=0, xyAxes=true, xlabelPos=bottom, ylabelPos=left, trigLabels=false,trigLabelBase=0, xDecimals={},yDecimals={}, xlogBase={},ylogBase={}, labelFontSize={},mathLabel, logLines=none, ignoreLines=0, nStep=1,nStart=0,nEnd={}, xStep=0,yStep=0,xStart={},xEnd={},yStart={},yEnd={},comma=false, plotNo=1,plotNoMax=1, xAxisLabel=x,yAxisLabel=y, yAxisLabelPos={},xAxisLabelPos={}, llx=\z@, lly=\z@, urx=\z@, ury=\z@,% prevents rounding errors randomPoints=1000,color=false, method={},whichabs={},whichord={}, plotfuncx={},plotfuncy={},buildvector=false, % algebraic=false, % individuelly set Derive={},adamsorder=4, VarStep=false, PlotDerivative=none, VarStepEpsilon=default, varsteptol=.001, Tnormal=false, braceWidth=2\pslinewidth, bracePos=0.5, braceWidthInner=10\pslinewidth, braceWidthOuter=10\pslinewidth, chartNodeI=0.75, chartNodeO=1.5 } \psset{% %%%% pstricks %%%%%%%% % opacity=1, % blendmode=0, % shapealpha=0.6, unit=1cm,% swapaxes=false,% showpoints=false,% border=0pt, bordercolor=white,% doubleline=false, doublesep=1.25\pslinewidth,% doublecolor=white,% shadow=false, shadowsize=3pt, shadowangle=-45, shadowcolor=darkgray,% linewidth=.8pt,% linecolor=black,% maxdashes=11, dash=5pt 3pt, dashadjust=true, % dotsep=3pt,% linestyle=solid,% fillcolor=white,% hatchwidth=.8pt, hatchsep=4pt, hatchcolor=black, hatchangle=45,% hatchsepinc=0pt,hatchwidthinc=0pt,% fillstyle=none,% nArrows=2,% arrows=-, arrowscale=1, arrowsize=1.5pt 2, arrowlength=1.4, arrowinset=.4,% tbarsize=2pt 5,% bracketlength=.15, rbracketlength=.15,% liftpen=0, linetype=0,% gangle=0,% curvature=1 .1 0,% dotsize=2pt 2,% dotangle=0, dotscale=1, dotstyle=*,% linearc=0pt,% framearc=0,% cornersize=relative,% dimen=middle,% gridwidth=.8pt, griddots=0, gridcolor=black,% subgridwidth=.4pt, subgridcolor=gray, subgriddots=0, subgriddiv=5,% gridlabels=10pt, gridlabelcolor=black,% framesep=3pt, boxsep=true,% trimode=U,% arcsep=0,radius=.25cm,% ref=c,rot=0,labelsep=5pt,refangle=0,% intSeparator={,},% %%%%%%%%% pst-plot %%%%%%%%%%%%% labelFontSize={},% StepType=lower, % alternative SumType=upper plotstyle=line,plotpoints=50,% % barwidth=0.25cm,% individuell set ticksize=-4pt 4pt, tickstyle=full, ticks=all,% subticksize=0.75,subticks=1,tickcolor=black,% ticklinestyle=solid,subticklinestyle=solid,% subtickcolor=gray,% tickwidth=0.5\pslinewidth,subtickwidth=0.25\pslinewidth,% labels=all,Ox=0,Dx=1,dx=0,Oy=0,Dy=1,dy=0,% xlabelFactor=\relax,ylabelFactor=\relax,% showorigin=true,% axesstyle=axes,% ChangeOrder=false,% arrowscale=1,% %%%%%%%%% pst-node %%%%%%%%%% lineAngle=0, nodealign=false, href=0, vref=.7ex, framesize=10pt, nodesep=0pt, arm=10pt, offset=0pt, angle=0, arcangle=8, ncurv=.67, loopsize=1cm, boxsize=.4cm, nrot=0, npos=, tpos=0.5, shortput=none, colsep=1.5cm, rowsep=1.5cm, mcol=c, mnode=R, emnode=none% }} % \resetOptions % \catcode`\@=\PstAtCode\relax % %% END: pstricks-add.tex \endinput rivet-1.8.3/data/texmf/tex/generic/xkeyval/0000755000175000017500000000000012116077756017017 5ustar sunsunrivet-1.8.3/data/texmf/tex/generic/xkeyval/keyval.tex0000644000175000017500000000514112116077756021035 0ustar sunsun%% %% This is file `keyval.tex', %% generated with the docstrip utility. %% %% The original source files were: %% %% xkeyval.dtx (with options: `xkvkeyval') %% %% --------------------------------------- %% Copyright (C) 2004-2008 Hendri Adriaens %% --------------------------------------- %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 %% of this license or (at your option) any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3 or later is part of all distributions of LaTeX %% version 2003/12/01 or later. %% %% This work has the LPPL maintenance status "maintained". %% %% This Current Maintainer of this work is Hendri Adriaens. %% %% This work consists of the file xkeyval.dtx and derived files %% keyval.tex, xkvtxhdr.tex, xkeyval.sty, xkeyval.tex, xkvview.sty, %% xkvltxp.sty, pst-xkey.tex, pst-xkey.sty, xkveca.cls, xkvecb.cls, %% xkvesa.sty, xkvesb.sty, xkvesc.sty, xkvex1.tex, xkvex2.tex, %% xkvex3.tex and xkvex4.tex. %% %% The following files constitute the xkeyval bundle and must be %% distributed as a whole: readme, xkeyval.pdf, keyval.tex, %% pst-xkey.sty, pst-xkey.tex, xkeyval.sty, xkeyval.tex, xkvview.sty, %% xkvltxp.sty, xkvtxhdr.tex, pst-xkey.dtx and xkeyval.dtx. %% %% %% Based on keyval.sty. %% \def\XKV@tempa#1{% \def\KV@@sp@def##1##2{% \futurelet\XKV@resa\KV@@sp@d##2\@nil\@nil#1\@nil\relax##1}% \def\KV@@sp@d{% \ifx\XKV@resa\@sptoken \expandafter\KV@@sp@b \else \expandafter\KV@@sp@b\expandafter#1% \fi}% \def\KV@@sp@b#1##1 \@nil{\KV@@sp@c##1}% } \XKV@tempa{ } \def\KV@@sp@c#1\@nil#2\relax#3{\XKV@toks{#1}\edef#3{\the\XKV@toks}} \def\KV@do#1,{% \ifx\relax#1\@empty\else \KV@split#1==\relax \expandafter\KV@do\fi} \def\KV@split#1=#2=#3\relax{% \KV@@sp@def\XKV@tempa{#1}% \ifx\XKV@tempa\@empty\else \expandafter\let\expandafter\XKV@tempc \csname\KV@prefix\XKV@tempa\endcsname \ifx\XKV@tempc\relax \XKV@err{`\XKV@tempa' undefined}% \else \ifx\@empty#3\@empty \KV@default \else \KV@@sp@def\XKV@tempb{#2}% \expandafter\XKV@tempc\expandafter{\XKV@tempb}\relax \fi \fi \fi} \def\KV@default{% \expandafter\let\expandafter\XKV@tempb \csname\KV@prefix\XKV@tempa @default\endcsname \ifx\XKV@tempb\relax \XKV@err{No value specified for key `\XKV@tempa'}% \else \XKV@tempb\relax \fi} \def\KV@def#1#2[#3]{% \@namedef{KV@#1@#2@default\expandafter}\expandafter {\csname KV@#1@#2\endcsname{#3}}% \@namedef{KV@#1@#2}##1} \endinput %% %% End of file `keyval.tex'. rivet-1.8.3/data/texmf/tex/generic/xkeyval/xkeyval.tex0000644000175000017500000006107012116077756021230 0ustar sunsun%% %% This is file `xkeyval.tex', %% generated with the docstrip utility. %% %% The original source files were: %% %% xkeyval.dtx (with options: `xkvtex') %% %% --------------------------------------- %% Copyright (C) 2004-2008 Hendri Adriaens %% --------------------------------------- %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 %% of this license or (at your option) any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3 or later is part of all distributions of LaTeX %% version 2003/12/01 or later. %% %% This work has the LPPL maintenance status "maintained". %% %% This Current Maintainer of this work is Hendri Adriaens. %% %% This work consists of the file xkeyval.dtx and derived files %% keyval.tex, xkvtxhdr.tex, xkeyval.sty, xkeyval.tex, xkvview.sty, %% xkvltxp.sty, pst-xkey.tex, pst-xkey.sty, xkveca.cls, xkvecb.cls, %% xkvesa.sty, xkvesb.sty, xkvesc.sty, xkvex1.tex, xkvex2.tex, %% xkvex3.tex and xkvex4.tex. %% %% The following files constitute the xkeyval bundle and must be %% distributed as a whole: readme, xkeyval.pdf, keyval.tex, %% pst-xkey.sty, pst-xkey.tex, xkeyval.sty, xkeyval.tex, xkvview.sty, %% xkvltxp.sty, xkvtxhdr.tex, pst-xkey.dtx and xkeyval.dtx. %% \csname XKeyValLoaded\endcsname \let\XKeyValLoaded\endinput \edef\XKVcatcodes{% \catcode`\noexpand\@\the\catcode`\@\relax \catcode`\noexpand\=\the\catcode`\=\relax \catcode`\noexpand\,\the\catcode`\,\relax \catcode`\noexpand\:\the\catcode`\:\relax \let\noexpand\XKVcatcodes\relax } \catcode`\@11\relax \catcode`\=12\relax \catcode`\,12\relax \catcode`\:12\relax \newtoks\XKV@toks \newtoks\XKV@tempa@toks \newcount\XKV@depth \newif\ifXKV@st \newif\ifXKV@sg \newif\ifXKV@pl \newif\ifXKV@knf \newif\ifXKV@rkv \newif\ifXKV@inpox \newif\ifXKV@preset \let\XKV@rm\@empty \ifx\ProvidesFile\@undefined \message{2008/08/13 v2.6a key=value parser (HA)} \input xkvtxhdr \else \ProvidesFile{xkeyval.tex}[2008/08/13 v2.6a key=value parser (HA)] \@addtofilelist{xkeyval.tex} \fi \long\def\@firstoftwo#1#2{#1} \long\def\@secondoftwo#1#2{#2} \long\def\XKV@afterfi#1\fi{\fi#1} \long\def\XKV@afterelsefi#1\else#2\fi{\fi#1} \ifx\ifcsname\@undefined\XKV@afterelsefi \def\XKV@ifundefined#1{% \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname#1\endcsname\relax \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } \else \def\XKV@ifundefined#1{% \ifcsname#1\endcsname \expandafter\@secondoftwo \else \expandafter\@firstoftwo \fi } \fi \XKV@ifundefined{ver@keyval.sty}{ \input keyval \expandafter\def\csname ver@keyval.sty\endcsname{1999/03/16} }{} \long\def\@ifnextcharacter#1#2#3{% \@ifnextchar\bgroup {\@ifnextchar{#1}{#2}{#3}}% {\@ifncharacter{#1}{#2}{#3}}% } \long\def\@ifncharacter#1#2#3#4{% \if\string#1\string#4% \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi {#2}{#3}#4% } \long\def\XKV@for@n#1#2#3{% \XKV@tempa@toks{#1}\edef#2{\the\XKV@tempa@toks}% \ifx#2\@empty \XKV@for@break \else \expandafter\XKV@f@r \fi #2{#3}#1,\@nil,% } \long\def\XKV@f@r#1#2#3,{% \XKV@tempa@toks{#3}\edef#1{\the\XKV@tempa@toks}% \ifx#1\@nnil \expandafter\@gobbletwo \else #2\expandafter\XKV@f@r \fi #1{#2}% } \long\def\XKV@for@break #1\@nil,{\fi} \long\def\XKV@for@o#1{\expandafter\XKV@for@n\expandafter{#1}} \long\def\XKV@for@en#1#2#3{\XKV@f@r#2{#3}#1,\@nil,} \long\def\XKV@for@eo#1#2#3{% \def#2{\XKV@f@r#2{#3}}\expandafter#2#1,\@nil,% } \long\def\XKV@whilist#1#2#3\fi#4{% #3\expandafter\XKV@wh@list#1,\@nil,\@nil\@@#2#3\fi{#4}{}\fi } \long\def\XKV@wh@list#1,#2\@@#3#4\fi#5#6{% \def#3{#1}% \ifx#3\@nnil \def#3{#6}\expandafter\XKV@wh@l@st \else #4% #5\expandafter\expandafter\expandafter\XKV@wh@list \else \def#3{#6}\expandafter\expandafter\expandafter\XKV@wh@l@st \fi \fi #2\@@#3#4\fi{#5}{#1}% } \long\def\XKV@wh@l@st#1\@@#2#3\fi#4#5{} \def\XKV@addtomacro@n#1#2{% \XKV@tempa@toks\expandafter{#1#2}% \edef#1{\the\XKV@tempa@toks}% } \def\XKV@addtomacro@o#1#2{% \expandafter\XKV@addtomacro@n\expandafter#1\expandafter{#2}% } \def\XKV@addtolist@n#1#2{% \ifx#1\@empty \XKV@addtomacro@n#1{#2}% \else \XKV@addtomacro@n#1{,#2}% \fi } \def\XKV@addtolist@o#1#2{% \ifx#1\@empty \XKV@addtomacro@o#1#2% \else \XKV@addtomacro@o#1{\expandafter,#2}% \fi } \def\XKV@addtolist@x#1#2{\edef#1{#1\ifx#1\@empty\else,\fi#2}} \def\@selective@sanitize{\@testopt\@s@lective@sanitize\@M} \def\@s@lective@sanitize[#1]#2#3{% \begingroup \count@#1\relax\advance\count@\@ne \XKV@toks\expandafter{#3}% \def#3{#2}\@onelevel@sanitize#3% \edef#3{{#3}{\the\XKV@toks}}% \expandafter\@s@l@ctive@sanitize\expandafter#3#3% \expandafter\XKV@tempa@toks\expandafter{#3}% \expandafter\endgroup\expandafter\toks@\expandafter{\the\XKV@tempa@toks}% \edef#3{\the\toks@}% } \def\@s@l@ctive@sanitize#1#2#3{% \def\@i{\futurelet\@@tok\@ii}% \def\@ii{% \expandafter\@iii\meaning\@@tok\relax \ifx\@@tok\@s@l@ctive@sanitize \let\@@cmd\@gobble \else \ifx\@@tok\@sptoken \XKV@toks\expandafter{#1}\edef#1{\the\XKV@toks\space}% \def\@@cmd{\afterassignment\@i\let\@@tok= }% \else \let\@@cmd\@iv \fi \fi \@@cmd }% \def\@iii##1##2\relax{\if##1\@backslashchar\let\@@tok\relax\fi}% \def\@iv##1{% \toks@\expandafter{#1}\XKV@toks{##1}% \ifx\@@tok\bgroup \advance\count@\m@ne \ifnum\count@>\z@ \begingroup \def#1{\expandafter\@s@l@ctive@sanitize \csname\string#1\endcsname{#2}}% \expandafter#1\expandafter{\the\XKV@toks}% \XKV@toks\expandafter\expandafter\expandafter {\csname\string#1\endcsname}% \edef#1{\noexpand\XKV@toks{\the\XKV@toks}}% \expandafter\endgroup#1% \fi \edef#1{\the\toks@{\the\XKV@toks}}% \advance\count@\@ne \let\@@cmd\@i \else \edef#1{\expandafter\string\the\XKV@toks}% \expandafter\in@\expandafter{#1}{#2}% \edef#1{\the\toks@\ifin@#1\else \ifx\@@tok\@sptoken\space\else\the\XKV@toks\fi\fi}% \edef\@@cmd{\noexpand\@i\ifx\@@tok\@sptoken\the\XKV@toks\fi}% \fi \@@cmd }% \let#1\@empty\@i#3\@s@l@ctive@sanitize } \def\XKV@checksanitizea#1#2{% \XKV@ch@cksanitize{#1}#2=% \ifin@\else\XKV@ch@cksanitize{#1}#2,\fi \ifin@\@selective@sanitize[0]{,=}#2\fi } \def\XKV@checksanitizeb#1#2{% \XKV@ch@cksanitize{#1}#2,% \ifin@\@selective@sanitize[0],#2\fi } \def\XKV@ch@cksanitize#1#2#3{% \XKV@tempa@toks{#1}\edef#2{\the\XKV@tempa@toks}% \@onelevel@sanitize#2% \@expandtwoargs\in@#3{#2}% \ifin@ \def#2##1#3##2\@nil{% \XKV@tempa@toks{##2}\edef#2{\the\XKV@tempa@toks}% \ifx#2\@empty\else\in@false\fi }% #2#1#3\@nil \fi \XKV@tempa@toks{#1}\edef#2{\the\XKV@tempa@toks}% } \def\XKV@sp@deflist#1#2{% \let#1\@empty \XKV@for@n{#2}\XKV@resa{% \expandafter\KV@@sp@def\expandafter\XKV@resa\expandafter{\XKV@resa}% \XKV@addtomacro@o#1{\expandafter,\XKV@resa}% }% \ifx#1\@empty\else \def\XKV@resa,##1\@nil{\def#1{##1}}% \expandafter\XKV@resa#1\@nil \fi } \def\XKV@merge#1#2#3{% \XKV@checksanitizea{#2}\XKV@tempa \XKV@for@o\XKV@tempa\XKV@tempa{% \XKV@pltrue #3\XKV@tempa\XKV@tempb \let\XKV@tempc#1% \let#1\@empty \XKV@for@o\XKV@tempc\XKV@tempc{% #3\XKV@tempc\XKV@tempd \ifx\XKV@tempb\XKV@tempd \XKV@plfalse \XKV@addtolist@o#1\XKV@tempa \else \XKV@addtolist@o#1\XKV@tempc \fi }% \ifXKV@pl\XKV@addtolist@o#1\XKV@tempa\fi }% \ifXKV@st\global\let#1#1\fi } \def\XKV@delete#1#2#3{% \XKV@checksanitizeb{#2}\XKV@tempa \let\XKV@tempb#1% \let#1\@empty \XKV@for@o\XKV@tempb\XKV@tempb{% #3\XKV@tempb\XKV@tempc \@expandtwoargs\in@{,\XKV@tempc,}{,\XKV@tempa,}% \ifin@\else\XKV@addtolist@o#1\XKV@tempb\fi }% \ifXKV@st\global\let#1#1\fi } \def\XKV@warn#1{\message{xkeyval warning: #1}} \def\XKV@err#1{\errmessage{xkeyval error: #1}} \def\KV@errx{\XKV@err} \let\KV@err\KV@errx \def\XKV@ifstar#1{\@ifnextcharacter*{\@firstoftwo{#1}}} \def\XKV@ifplus#1{\@ifnextcharacter+{\@firstoftwo{#1}}} \def\XKV@makepf#1{% \KV@@sp@def\XKV@prefix{#1}% \def\XKV@resa{XKV}% \ifx\XKV@prefix\XKV@resa \XKV@err{`XKV' prefix is not allowed}% \let\XKV@prefix\@empty \else \edef\XKV@prefix{\ifx\XKV@prefix\@empty\else\XKV@prefix @\fi}% \fi } \def\XKV@makehd#1{% \expandafter\KV@@sp@def\expandafter\XKV@header\expandafter{#1}% \edef\XKV@header{% \XKV@prefix\ifx\XKV@header\@empty\else\XKV@header @\fi }% } \def\XKV@srstate#1#2{% \ifx\@empty#2\@empty\advance\XKV@depth\@ne\fi \XKV@for@n{XKV@prefix,XKV@fams,XKV@tkey,XKV@na,% ifXKV@st,ifXKV@pl,ifXKV@knf}\XKV@resa{% \expandafter\let\csname\XKV@resa#1\expandafter \endcsname\csname\XKV@resa#2\endcsname }% \ifx\@empty#1\@empty\advance\XKV@depth\m@ne\fi } \def\XKV@testopta#1{% \XKV@ifstar{\XKV@sttrue\XKV@t@stopta{#1}}% {\XKV@stfalse\XKV@t@stopta{#1}}% } \def\XKV@t@stopta#1{\XKV@ifplus{\XKV@pltrue#1}{\XKV@plfalse#1}} \def\XKV@testoptb#1{\@testopt{\XKV@t@stoptb#1}{KV}} \def\XKV@t@stoptb#1[#2]#3{% \XKV@makepf{#2}% \XKV@makehd{#3}% \KV@@sp@def\XKV@tfam{#3}% #1% } \def\XKV@testoptc#1{\@testopt{\XKV@t@stoptc#1}{KV}} \def\XKV@t@stoptc#1[#2]#3{% \XKV@makepf{#2}% \XKV@checksanitizeb{#3}\XKV@fams \expandafter\XKV@sp@deflist\expandafter \XKV@fams\expandafter{\XKV@fams}% \@testopt#1{}% } \def\XKV@testoptd#1#2{% \XKV@testoptb{% \edef\XKV@tempa{#2\XKV@header}% \def\XKV@tempb{\@testopt{\XKV@t@stoptd#1}}% \expandafter\XKV@tempb\expandafter{\XKV@tempa}% }% } \def\XKV@t@stoptd#1[#2]#3{% \@ifnextchar[{\XKV@sttrue#1{#2}{#3}}{\XKV@stfalse#1{#2}{#3}[]}% } \def\XKV@ifcmd#1#2#3{% \def\XKV@@ifcmd##1#2##2##3\@nil##4{% \def##4{##2}\ifx##4\@nnil \def##4{##1}\expandafter\@secondoftwo \else \expandafter\@firstoftwo \fi }% \XKV@@ifcmd#1#2{\@nil}\@nil#3% } \def\XKV@getkeyname#1#2{\expandafter\XKV@g@tkeyname#1=\@nil#2} \def\XKV@g@tkeyname#1=#2\@nil#3{% \XKV@ifcmd{#1}\savevalue#3{\XKV@rkvtrue\XKV@sgfalse}{% \XKV@ifcmd{#1}\gsavevalue#3% {\XKV@rkvtrue\XKV@sgtrue}{\XKV@rkvfalse\XKV@sgfalse}% }% } \def\XKV@getsg#1#2{% \expandafter\XKV@ifcmd\expandafter{#1}\global#2\XKV@sgtrue\XKV@sgfalse } \def\XKV@define@default#1#2{% \expandafter\def\csname\XKV@header#1@default\expandafter \endcsname\expandafter{\csname\XKV@header#1\endcsname{#2}}% } \def\define@key{\XKV@testoptb\XKV@define@key} \def\XKV@define@key#1{% \@ifnextchar[{\XKV@d@fine@k@y{#1}}{% \expandafter\def\csname\XKV@header#1\endcsname####1% }% } \def\XKV@d@fine@k@y#1[#2]{% \XKV@define@default{#1}{#2}% \expandafter\def\csname\XKV@header#1\endcsname##1% } \def\define@cmdkey{\XKV@testoptd\XKV@define@cmdkey{cmd}} \def\XKV@define@cmdkey#1#2[#3]#4{% \ifXKV@st\XKV@define@default{#2}{#3}\fi \def\XKV@tempa{\expandafter\def\csname\XKV@header#2\endcsname####1}% \begingroup\expandafter\endgroup\expandafter\XKV@tempa\expandafter {\expandafter\def\csname#1#2\endcsname{##1}#4}% } \def\define@cmdkeys{\XKV@testoptd\XKV@define@cmdkeys{cmd}} \def\XKV@define@cmdkeys#1#2[#3]{% \XKV@sp@deflist\XKV@tempa{#2}% \XKV@for@o\XKV@tempa\XKV@tempa{% \edef\XKV@tempa{\noexpand\XKV@define@cmdkey{#1}{\XKV@tempa}}% \XKV@tempa[#3]{}% }% } \def\define@choicekey{\XKV@testopta{\XKV@testoptb\XKV@define@choicekey}} \def\XKV@define@choicekey#1{\@testopt{\XKV@d@fine@choicekey{#1}}{}} \def\XKV@d@fine@choicekey#1[#2]#3{% \toks@{#2}% \XKV@sp@deflist\XKV@tempa{#3}\XKV@toks\expandafter{\XKV@tempa}% \@ifnextchar[{\XKV@d@fine@ch@icekey{#1}}{\XKV@d@fine@ch@ic@key{#1}}% } \def\XKV@d@fine@ch@icekey#1[#2]{% \XKV@define@default{#1}{#2}% \XKV@d@fine@ch@ic@key{#1}% } \def\XKV@d@fine@ch@ic@key#1{% \ifXKV@pl\XKV@afterelsefi \expandafter\XKV@d@f@ne@ch@ic@k@y \else\XKV@afterfi \expandafter\XKV@d@f@ne@ch@ic@key \fi \csname\XKV@header#1\endcsname } \def\XKV@d@f@ne@ch@ic@key#1#2{\XKV@d@f@n@@ch@ic@k@y#1{{#2}}} \def\XKV@d@f@ne@ch@ic@k@y#1#2#3{\XKV@d@f@n@@ch@ic@k@y#1{{#2}{#3}}} \def\XKV@d@f@n@@ch@ic@k@y#1#2{% \edef#1##1{% \ifXKV@st\noexpand\XKV@sttrue\else\noexpand\XKV@stfalse\fi \ifXKV@pl\noexpand\XKV@pltrue\else\noexpand\XKV@plfalse\fi \noexpand\XKV@checkchoice[\the\toks@]{##1}{\the\XKV@toks}% }% \def\XKV@tempa{\def#1####1}% \expandafter\XKV@tempa\expandafter{#1{##1}#2}% } \def\define@boolkey{\XKV@t@stopta{\XKV@testoptd\XKV@define@boolkey{}}} \def\XKV@define@boolkey#1#2[#3]{% \ifXKV@pl\XKV@afterelsefi \expandafter\XKV@d@f@ne@boolkey \else\XKV@afterfi \expandafter\XKV@d@fine@boolkey \fi \csname\XKV@header#2\endcsname{#2}{#1#2}{#3}% } \def\XKV@d@fine@boolkey#1#2#3#4#5{% \XKV@d@f@ne@b@olkey#1{#2}{#3}{#4}% {{\csname#3\XKV@resa\endcsname#5}}% } \def\XKV@d@f@ne@boolkey#1#2#3#4#5#6{% \XKV@d@f@ne@b@olkey#1{#2}{#3}{#4}% {{\csname#3\XKV@resa\endcsname#5}{#6}}% } \def\XKV@d@f@ne@b@olkey#1#2#3#4#5{% \expandafter\newif\csname if#3\endcsname \ifXKV@st\XKV@define@default{#2}{#4}\fi \ifXKV@pl \def#1##1{\XKV@pltrue\XKV@sttrue \XKV@checkchoice[\XKV@resa]{##1}{true,false}#5% }% \else \def#1##1{\XKV@plfalse\XKV@sttrue \XKV@checkchoice[\XKV@resa]{##1}{true,false}#5% }% \fi } \def\define@boolkeys{\XKV@plfalse\XKV@testoptd\XKV@define@boolkeys{}} \def\XKV@define@boolkeys#1#2[#3]{% \XKV@sp@deflist\XKV@tempa{#2}% \XKV@for@o\XKV@tempa\XKV@tempa{% \expandafter\XKV@d@fine@boolkeys\expandafter{\XKV@tempa}{#1}{#3}% }% } \def\XKV@d@fine@boolkeys#1#2#3{% \expandafter\XKV@d@f@ne@b@olkey\csname\XKV@header#1\endcsname {#1}{#2#1}{#3}{{\csname#2#1\XKV@resa\endcsname}}% } \def\XKV@cc{\XKV@testopta{\@testopt\XKV@checkchoice{}}} \def\XKV@checkchoice[#1]#2#3{% \def\XKV@tempa{#1}% \ifXKV@st\lowercase{\fi \ifx\XKV@tempa\@empty \def\XKV@tempa{\XKV@ch@ckch@ice\@nil{#2}{#3}}% \else \def\XKV@tempa{\XKV@ch@ckchoice#1\@nil{#2}{#3}}% \fi \ifXKV@st}\fi\XKV@tempa } \def\XKV@ch@ckchoice#1#2\@nil#3#4{% \def\XKV@tempa{#2}% \ifx\XKV@tempa\@empty\XKV@afterelsefi \XKV@ch@ckch@ice#1{#3}{#4}% \else\XKV@afterfi \XKV@@ch@ckchoice#1#2{#3}{#4}% \fi } \def\XKV@ch@ckch@ice#1#2#3{% \def\XKV@tempa{#1}% \ifx\XKV@tempa\@nnil\let\XKV@tempa\@empty\else \def\XKV@tempa{\def#1{#2}}% \fi \in@{,#2,}{,#3,}% \ifin@ \ifXKV@pl \XKV@addtomacro@n\XKV@tempa\@firstoftwo \else \XKV@addtomacro@n\XKV@tempa\@firstofone \fi \else \ifXKV@pl \XKV@addtomacro@n\XKV@tempa\@secondoftwo \else \XKV@toks{#2}% \XKV@err{value `\the\XKV@toks' is not allowed}% \XKV@addtomacro@n\XKV@tempa\@gobble \fi \fi \XKV@tempa } \def\XKV@@ch@ckchoice#1#2#3#4{% \edef\XKV@tempa{\the\count@}\count@\z@ \def\XKV@tempb{#3}% \def\XKV@tempc##1,{% \def#1{##1}% \ifx#1\@nnil \def#1{#3}\def#2{-1}\count@\XKV@tempa \ifXKV@pl \let\XKV@tempd\@secondoftwo \else \XKV@toks{#3}% \XKV@err{value `\the\XKV@toks' is not allowed}% \let\XKV@tempd\@gobble \fi \else \ifx#1\XKV@tempb \edef#2{\the\count@}\count@\XKV@tempa \ifXKV@pl \let\XKV@tempd\XKV@@ch@ckch@ice \else \let\XKV@tempd\XKV@@ch@ckch@ic@ \fi \else \advance\count@\@ne \let\XKV@tempd\XKV@tempc \fi \fi \XKV@tempd }% \XKV@tempc#4,\@nil,% } \def\XKV@@ch@ckch@ice#1\@nil,{\@firstoftwo} \def\XKV@@ch@ckch@ic@#1\@nil,{\@firstofone} \def\key@ifundefined{\@testopt\XKV@key@ifundefined{KV}} \def\XKV@key@ifundefined[#1]#2{% \XKV@makepf{#1}% \XKV@checksanitizeb{#2}\XKV@fams \expandafter\XKV@sp@deflist\expandafter \XKV@fams\expandafter{\XKV@fams}% \XKV@key@if@ndefined } \def\XKV@key@if@ndefined#1{% \XKV@knftrue \KV@@sp@def\XKV@tkey{#1}% \XKV@whilist\XKV@fams\XKV@tfam\ifXKV@knf\fi{% \XKV@makehd\XKV@tfam \XKV@ifundefined{\XKV@header\XKV@tkey}{}{\XKV@knffalse}% }% \ifXKV@knf \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } \def\disable@keys{\XKV@testoptb\XKV@disable@keys} \def\XKV@disable@keys#1{% \XKV@checksanitizeb{#1}\XKV@tempa \XKV@for@o\XKV@tempa\XKV@tempa{% \XKV@ifundefined{\XKV@header\XKV@tempa}{% \XKV@err{key `\XKV@tempa' undefined}% }{% \edef\XKV@tempb{% \noexpand\XKV@warn{key `\XKV@tempa' has been disabled}% }% \XKV@ifundefined{\XKV@header\XKV@tempa @default}{% \edef\XKV@tempc{\noexpand\XKV@define@key{\XKV@tempa}}% }{% \edef\XKV@tempc{\noexpand\XKV@define@key{\XKV@tempa}[]}% }% \expandafter\XKV@tempc\expandafter{\XKV@tempb}% }% }% } \def\presetkeys{\XKV@stfalse\XKV@testoptb\XKV@presetkeys} \def\gpresetkeys{\XKV@sttrue\XKV@testoptb\XKV@presetkeys} \def\XKV@presetkeys#1#2{% \XKV@pr@setkeys{#1}{preseth}% \XKV@pr@setkeys{#2}{presett}% } \def\XKV@pr@setkeys#1#2{% \XKV@ifundefined{XKV@\XKV@header#2}{% \XKV@checksanitizea{#1}\XKV@tempa \ifXKV@st\expandafter\global\fi\expandafter\def\csname XKV@\XKV@header#2\expandafter\endcsname\expandafter{\XKV@tempa}% }{% \expandafter\XKV@merge\csname XKV@\XKV@header #2\endcsname{#1}\XKV@getkeyname }% } \def\delpresetkeys{\XKV@stfalse\XKV@testoptb\XKV@delpresetkeys} \def\gdelpresetkeys{\XKV@sttrue\XKV@testoptb\XKV@delpresetkeys} \def\XKV@delpresetkeys#1#2{% \XKV@d@lpresetkeys{#1}{preseth}% \XKV@d@lpresetkeys{#2}{presett}% } \def\XKV@d@lpresetkeys#1#2{% \XKV@ifundefined{XKV@\XKV@header#2}{% \XKV@err{no presets defined for `\XKV@header'}% }{% \expandafter\XKV@delete\csname XKV@\XKV@header #2\endcsname{#1}\XKV@getkeyname }% } \def\unpresetkeys{\XKV@stfalse\XKV@testoptb\XKV@unpresetkeys} \def\gunpresetkeys{\XKV@sttrue\XKV@testoptb\XKV@unpresetkeys} \def\XKV@unpresetkeys{% \XKV@ifundefined{XKV@\XKV@header preseth}{% \XKV@err{no presets defined for `\XKV@header'}% }{% \ifXKV@st\expandafter\global\fi\expandafter\let \csname XKV@\XKV@header preseth\endcsname\@undefined \ifXKV@st\expandafter\global\fi\expandafter\let \csname XKV@\XKV@header presett\endcsname\@undefined }% } \def\savekeys{\XKV@stfalse\XKV@testoptb\XKV@savekeys} \def\gsavekeys{\XKV@sttrue\XKV@testoptb\XKV@savekeys} \def\XKV@savekeys#1{% \XKV@ifundefined{XKV@\XKV@header save}{% \XKV@checksanitizeb{#1}\XKV@tempa \ifXKV@st\expandafter\global\fi\expandafter\def\csname XKV@% \XKV@header save\expandafter\endcsname\expandafter{\XKV@tempa}% }{% \expandafter\XKV@merge\csname XKV@\XKV@header save\endcsname{#1}\XKV@getsg }% } \def\delsavekeys{\XKV@stfalse\XKV@testoptb\XKV@delsavekeys} \def\gdelsavekeys{\XKV@sttrue\XKV@testoptb\XKV@delsavekeys} \def\XKV@delsavekeys#1{% \XKV@ifundefined{XKV@\XKV@header save}{% \XKV@err{no save keys defined for `\XKV@header'}% }{% \expandafter\XKV@delete\csname XKV@\XKV@header save\endcsname{#1}\XKV@getsg }% } \def\unsavekeys{\XKV@stfalse\XKV@testoptb\XKV@unsavekeys} \def\gunsavekeys{\XKV@sttrue\XKV@testoptb\XKV@unsavekeys} \def\XKV@unsavekeys{% \XKV@ifundefined{XKV@\XKV@header save}{% \XKV@err{no save keys defined for `\XKV@header'}% }{% \ifXKV@st\expandafter\global\fi\expandafter\let \csname XKV@\XKV@header save\endcsname\@undefined }% } \def\setkeys{\XKV@testopta{\XKV@testoptc\XKV@setkeys}} \def\XKV@setkeys[#1]#2{% \XKV@checksanitizea{#2}\XKV@resb \let\XKV@naa\@empty \XKV@for@o\XKV@resb\XKV@tempa{% \expandafter\XKV@g@tkeyname\XKV@tempa=\@nil\XKV@tempa \XKV@addtolist@x\XKV@naa\XKV@tempa }% \ifnum\XKV@depth=\z@\let\XKV@rm\@empty\fi \XKV@usepresetkeys{#1}{preseth}% \expandafter\XKV@s@tkeys\expandafter{\XKV@resb}{#1}% \XKV@usepresetkeys{#1}{presett}% \let\CurrentOption\@empty } \def\XKV@usepresetkeys#1#2{% \XKV@presettrue \XKV@for@eo\XKV@fams\XKV@tfam{% \XKV@makehd\XKV@tfam \XKV@ifundefined{XKV@\XKV@header#2}{}{% \XKV@toks\expandafter\expandafter\expandafter {\csname XKV@\XKV@header#2\endcsname}% \@expandtwoargs\XKV@s@tkeys{\the\XKV@toks}% {\XKV@naa\ifx\XKV@naa\@empty\else,\fi#1}% }% }% \XKV@presetfalse } \def\XKV@s@tkeys#1#2{% \XKV@sp@deflist\XKV@na{#2}% \XKV@for@n{#1}\CurrentOption{% \expandafter\XKV@s@tk@ys\CurrentOption==\@nil }% } \def\XKV@s@tk@ys#1=#2=#3\@nil{% \XKV@g@tkeyname#1=\@nil\XKV@tkey \expandafter\KV@@sp@def\expandafter\XKV@tkey\expandafter{\XKV@tkey}% \ifx\XKV@tkey\@empty \XKV@toks{#2}% \ifcat$\the\XKV@toks$\else \XKV@err{no key specified for value `\the\XKV@toks'}% \fi \else \@expandtwoargs\in@{,\XKV@tkey,}{,\XKV@na,}% \ifin@\else \XKV@knftrue \KV@@sp@def\XKV@tempa{#2}% \ifXKV@preset\XKV@s@tk@ys@{#3}\else \ifXKV@pl \XKV@for@eo\XKV@fams\XKV@tfam{% \XKV@makehd\XKV@tfam \XKV@s@tk@ys@{#3}% }% \else \XKV@whilist\XKV@fams\XKV@tfam\ifXKV@knf\fi{% \XKV@makehd\XKV@tfam \XKV@s@tk@ys@{#3}% }% \fi \fi \ifXKV@knf \ifXKV@inpox \ifx\XKV@doxs\relax \ifx\@currext\@clsextension\else \let\CurrentOption\XKV@tkey\@unknownoptionerror \fi \else\XKV@doxs\fi \else \ifXKV@st \XKV@addtolist@o\XKV@rm\CurrentOption \else \XKV@err{`\XKV@tkey' undefined in families `\XKV@fams'}% \fi \fi \else \ifXKV@inpox\ifx\XKV@testclass\XKV@documentclass \expandafter\XKV@useoption\expandafter{\CurrentOption}% \fi\fi \fi \fi \fi } \def\XKV@s@tk@ys@#1{% \XKV@ifundefined{\XKV@header\XKV@tkey}{}{% \XKV@knffalse \XKV@ifundefined{XKV@\XKV@header save}{}{% \expandafter\XKV@testsavekey\csname XKV@\XKV@header save\endcsname\XKV@tkey }% \ifXKV@rkv \ifXKV@sg\expandafter\global\fi\expandafter\let \csname XKV@\XKV@header\XKV@tkey @value\endcsname\XKV@tempa \fi \expandafter\XKV@replacepointers\expandafter{\XKV@tempa}% \ifx\@empty#1\@empty\XKV@afterelsefi \XKV@ifundefined{\XKV@header\XKV@tkey @default}{% \XKV@err{no value specified for key `\XKV@tkey'}% }{% \expandafter\expandafter\expandafter\XKV@default \csname\XKV@header\XKV@tkey @default\endcsname\@nil }% \else\XKV@afterfi \XKV@srstate{@\romannumeral\XKV@depth}{}% \csname\XKV@header\XKV@tkey\expandafter \endcsname\expandafter{\XKV@tempa}\relax \XKV@srstate{}{@\romannumeral\XKV@depth}% \fi }% } \def\XKV@testsavekey#1#2{% \ifXKV@rkv\else \XKV@for@o#1\XKV@resa{% \expandafter\XKV@ifcmd\expandafter{\XKV@resa}\global\XKV@resa{% \ifx#2\XKV@resa \XKV@rkvtrue\XKV@sgtrue \fi }{% \ifx#2\XKV@resa \XKV@rkvtrue\XKV@sgfalse \fi }% }% \fi } \def\XKV@replacepointers#1{% \let\XKV@tempa\@empty \let\XKV@resa\@empty \XKV@r@placepointers#1\usevalue\@nil } \def\XKV@r@placepointers#1\usevalue#2{% \XKV@addtomacro@n\XKV@tempa{#1}% \def\XKV@tempb{#2}% \ifx\XKV@tempb\@nnil\else\XKV@afterfi \XKV@ifundefined{XKV@\XKV@header#2@value}{% \XKV@err{no value recorded for key `#2'; ignored}% \XKV@r@placepointers }{% \@expandtwoargs\in@{,#2,}{,\XKV@resa,}% \ifin@\XKV@afterelsefi \XKV@err{back linking pointers; pointer replacement canceled}% \else\XKV@afterfi \XKV@addtolist@x\XKV@resa{#2}% \expandafter\expandafter\expandafter\XKV@r@placepointers \csname XKV@\XKV@header#2@value\endcsname \fi }% \fi } \def\XKV@default#1#2\@nil{% \expandafter\edef\expandafter\XKV@tempa \expandafter{\expandafter\@gobble\string#1}% \edef\XKV@tempb{\XKV@header\XKV@tkey}% \@onelevel@sanitize\XKV@tempb \ifx\XKV@tempa\XKV@tempb \begingroup \expandafter\def\csname\XKV@header\XKV@tkey\endcsname##1{% \gdef\XKV@tempa{##1}% }% \csname\XKV@header\XKV@tkey @default\endcsname \endgroup \XKV@ifundefined{XKV@\XKV@header save}{}{% \expandafter\XKV@testsavekey\csname XKV@\XKV@header save\endcsname\XKV@tkey }% \ifXKV@rkv \ifXKV@sg\expandafter\global\fi\expandafter\let \csname XKV@\XKV@header\XKV@tkey @value\endcsname\XKV@tempa \fi \expandafter\XKV@replacepointers\expandafter {\XKV@tempa}\XKV@afterelsefi \XKV@srstate{@\romannumeral\XKV@depth}{}% \expandafter#1\expandafter{\XKV@tempa}\relax \XKV@srstate{}{@\romannumeral\XKV@depth}% \else\XKV@afterfi \XKV@srstate{@\romannumeral\XKV@depth}{}% \csname\XKV@header\XKV@tkey @default\endcsname\relax \XKV@srstate{}{@\romannumeral\XKV@depth}% \fi } \def\setrmkeys{\XKV@testopta{\XKV@testoptc\XKV@setrmkeys}} \def\XKV@setrmkeys[#1]{% \def\XKV@tempa{\XKV@setkeys[#1]}% \expandafter\XKV@tempa\expandafter{\XKV@rm}% } \XKVcatcodes \endinput %% %% End of file `xkeyval.tex'. rivet-1.8.3/data/texmf/tex/generic/xkeyval/pst-xkey.tex0000644000175000017500000000444512116077756021334 0ustar sunsun%% %% This is file `pst-xkey.tex', %% generated with the docstrip utility. %% %% The original source files were: %% %% xkeyval.dtx (with options: `pxktex') %% %% --------------------------------------- %% Copyright (C) 2004-2008 Hendri Adriaens %% --------------------------------------- %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 %% of this license or (at your option) any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3 or later is part of all distributions of LaTeX %% version 2003/12/01 or later. %% %% This work has the LPPL maintenance status "maintained". %% %% This Current Maintainer of this work is Hendri Adriaens. %% %% This work consists of the file xkeyval.dtx and derived files %% keyval.tex, xkvtxhdr.tex, xkeyval.sty, xkeyval.tex, xkvview.sty, %% xkvltxp.sty, pst-xkey.tex, pst-xkey.sty, xkveca.cls, xkvecb.cls, %% xkvesa.sty, xkvesb.sty, xkvesc.sty, xkvex1.tex, xkvex2.tex, %% xkvex3.tex and xkvex4.tex. %% %% The following files constitute the xkeyval bundle and must be %% distributed as a whole: readme, xkeyval.pdf, keyval.tex, %% pst-xkey.sty, pst-xkey.tex, xkeyval.sty, xkeyval.tex, xkvview.sty, %% xkvltxp.sty, xkvtxhdr.tex, pst-xkey.dtx and xkeyval.dtx. %% \csname PSTXKeyLoaded\endcsname \let\PSTXKeyLoaded\endinput \edef\PSTXKeyCatcodes{% \catcode`\noexpand\@\the\catcode`\@\relax \let\noexpand\PSTXKeyCatcodes\relax } \catcode`\@=11\relax \ifx\ProvidesFile\@undefined \message{2005/11/25 v1.6 PSTricks specialization of xkeyval (HA)} \ifx\XKeyValLoaded\endinput\else\input xkeyval \fi \else \ProvidesFile{pst-xkey.tex} [2005/11/25 v1.6 PSTricks specialization of xkeyval (HA)] \@addtofilelist{pst-xkey.tex} \RequirePackage{xkeyval} \fi \def\pst@famlist{} \def\pst@addfams#1{% \XKV@for@n{#1}\XKV@tempa{% \@expandtwoargs\in@{,\XKV@tempa,}{,\pst@famlist,}% \ifin@\else\edef\pst@famlist{\pst@famlist,\XKV@tempa}\fi }% } \def\psset{% \expandafter\@testopt\expandafter\pss@t\expandafter{\pst@famlist}% } \def\pss@t[#1]#2{\setkeys+[psset]{#1}{#2}\ignorespaces} \def\@psset#1,\@nil{% \edef\XKV@tempa{\noexpand\setkeys+[psset]{\pst@famlist}}% \XKV@tempa{#1}% } \PSTXKeyCatcodes \endinput %% %% End of file `pst-xkey.tex'. rivet-1.8.3/data/texmf/tex/generic/pst-coil/0000755000175000017500000000000012116077756017066 5ustar sunsunrivet-1.8.3/data/texmf/tex/generic/pst-coil/pst-coil.tex0000644000175000017500000000776612116077756021362 0ustar sunsun%% BEGIN pst-coil.tex %% %% Coils and zigzags with PSTricks %% See the PSTricks User's Guide for documentation. %% For use with the PostScript header file `pst-coil.pro'. %% %% %% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu. %% 2006 Herbert Voss, hvoss@tug.org %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN %% archives in directory macros/latex/base/lppl.txt. %% \message{ v\fileversion, \filedate} \csname PSTcoilsLoaded\endcsname \let\PSTcoilsLoaded\endinput \ifx\PSTricksLoaded\endinput\else \def\next{\input pstricks.tex}\expandafter\next \fi \ifx\PSTXKeyLoaded\endinput\else\input pst-xkey \fi % \def\fileversion{1.00} \def\filedate{2006/11/05} % \edef\TheAtCode{\the\catcode`\@} \catcode`\@=11 % \pst@addfams{pst-coil} \pstheader{pst-coil.pro} \edef\pst@theheaders{\pst@theheaders,pst-coil.pro} \def\pst@coildict{tx@CoilDict begin } % \define@key[psset]{pst-coil}{coilwidth}{\pst@getlength{#1}\psk@coilwidth} \define@key[psset]{pst-coil}{coilheight}{\pst@checknum{#1}\pscoilheight} \define@key[psset]{pst-coil}{coilarmA}{\pst@getlength{#1}\psk@coilarmA} \define@key[psset]{pst-coil}{coilarmB}{\pst@getlength{#1}\psk@coilarmB} \define@key[psset]{pst-coil}{coilarm}{% \pst@getlength{#1}\psk@coilarmA% \let\psk@coilarmB\psk@coilarmA} \define@key[psset]{pst-coil}{coilaspect}{\pst@getangle{#1}\psk@coilaspect} \define@key[psset]{pst-coil}{coilinc}{\pst@getangle{#1}\psk@coilinc} % \psset[pst-coil]{coilaspect=45,coilarm=.5cm,coilheight=1,coilwidth=1cm,coilinc=10} % \def\pscoil{\def\pst@par{}\pst@object{pscoil}} \def\pscoil@i{\pst@getarrows\pscoil@ii} \def\pscoil@ii(#1){\@ifnextchar({\pscoil@iii{1}(#1)}{\pscoil@iii{\z@}(0,0)(#1)}} \def\pscoil@iii#1(#2)(#3){% \begin@OpenObj \pst@getcoor{#2}\pst@tempa \pst@getcoor{#3}\pst@tempb \pst@optcp{#1}\pst@tempa \addto@pscode{% \pst@tempa \pst@tempb \psk@coilwidth \pscoilheight \psk@coilarmA \psk@coilarmB \psk@coilaspect \psk@coilinc \pst@coildict \tx@Coil end }% \showpointsfalse \end@OpenObj} \def\tx@CoilLoop{CoilLoop } \def\tx@Coil{Coil } \def\psCoil{\def\pst@par{}\pst@object{psCoil}} \def\psCoil@i#1#2{% \begin@AltOpenObj \showpointsfalse \pst@getangle{#1}\pst@tempa \pst@getangle{#2}\pst@tempb \addto@pscode{% \pst@tempa \pst@tempb \psk@coilwidth \pscoilheight \psk@coilaspect \psk@coilinc \pst@coildict \tx@AltCoil end \@nameuse{psls@\pslinestyle} }% \end@OpenObj} \def\tx@AltCoil{AltCoil } % \def\pszigzag{\def\pst@par{}\pst@object{pszigzag}} \def\pszigzag@i{\pst@getarrows\pszigzag@ii} \def\pszigzag@ii(#1){\@ifnextchar({\pszigzag@iii{1}(#1)}{\pszigzag@iii{\z@}(0,0)(#1)}} \def\pszigzag@iii#1(#2)(#3){% \begin@OpenObj \pst@getcoor{#2}\pst@tempa \pst@getcoor{#3}\pst@tempb \pst@optcp{#1}\pst@tempa \addto@pscode{% \pst@tempa \pst@tempb \pscoilheight \psk@coilwidth \psk@coilarmA \psk@coilarmB \pst@coildict \tx@ZigZag end \psline@iii \tx@Line }% \end@OpenObj} % \def\tx@ZigZag{ZigZag } % \def\nccoil{\pst@object{nccoil}} \def\nccoil@i{\check@arrow{\nccoil@ii}} \def\nccoil@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{% \tx@NCCoor tx@Dict begin % DG/SR modification begin - Mar. 19, 1998 - Patch 2 4 2 roll % DG/SR modification end \psk@coilwidth \pscoilheight \psk@coilarmA \psk@coilarmB \psk@coilaspect \psk@coilinc \pst@coildict \tx@Coil end end }} % \def\pccoil{\def\pst@par{}\pst@object{pccoil}} \def\pccoil@i{\pc@object\nccoil@ii} \def\nczigzag{\pst@object{nczigzag}} \def\nczigzag@i{\check@arrow{\nczigzag@ii}} \def\nczigzag@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{% \tx@NCCoor tx@Dict begin % DG/SR modification begin - Mar. 19, 1998 - Patch 2 4 2 roll % DG/SR modification end \pscoilheight \psk@coilwidth \psk@coilarmA \psk@coilarmB \pst@coildict \tx@ZigZag end \psline@iii \tx@Line end }} % \def\pczigzag{\def\pst@par{}\pst@object{pczigzag}} \def\pczigzag@i{\pc@object\nczigzag@ii} % \catcode`\@=\TheAtCode\relax \endinput %% %% END pst-coil.tex rivet-1.8.3/data/texmf/tex/generic/pst-3d/0000755000175000017500000000000012116077756016446 5ustar sunsunrivet-1.8.3/data/texmf/tex/generic/pst-3d/pst-3d.tex0000644000175000017500000002354312116077756020311 0ustar sunsun%% %% This is file `pst-3d.tex', %% generated with the docstrip utility. %% %% The original source files were: %% %% pst-3d.dtx (with options: `pst-3d') %% %% IMPORTANT NOTICE: %% %% For the copyright see the source file. %% %% Any modified versions of this file must be renamed %% with new filenames distinct from pst-3d.tex. %% %% For distribution of the original source see the terms %% for copying and modification in the file pst-3d.dtx. %% %% This generated file may be distributed as long as the %% original source files, as listed above, are part of the %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% %% Package `pst-3d.dtx' %% %% Timothy Van Zandt (tvz) %% Herbert Voss (hv) %% %% September 03, 2005 %% %% This file is under the LaTeX Project Public License %% See CTAN archives in directory macros/latex/base/lppl.txt. %% %% DESCRIPTION: %% `pst-3d' is a PSTricks package for tilting and other pseudo-3D tricks %% \ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi \ifx\PSTXKeyLoaded\endinput\else\input pst-xkey \fi % (hv 2005-09-03) \edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax \pst@addfams{pst-3d} \def\fileversion{1.00} \def\filedate{2005/09/03} \message{`PST-3d' v\fileversion, \filedate\space (tvz)} \csname PSTthreeDLoaded\endcsname \let\PSTthreeDLoaded\endinput \pst@def{SetMatrixThreeD}<% dup sin /e ED cos /f ED /p3 ED /p2 ED /p1 ED p1 0 eq { /a 0 def /b p2 0 le { 1 } { -1 } ifelse def p3 p2 abs } { p2 0 eq { /a p1 0 lt { -1 } { 1 } ifelse def /b 0 def p3 p1 abs } { p1 dup mul p2 dup mul add sqrt dup p1 exch div /a ED p2 exch div neg /b ED p3 p1 a div } ifelse } ifelse atan dup sin /c ED cos /d ED /Matrix3D [ b f mul c a mul e mul sub a f mul c b mul e mul add d e mul b e mul neg c a mul f mul sub a e mul neg c b mul f mul add d f mul ] def> \pst@def{ProjThreeD}<% /z ED /y ED /x ED Matrix3D aload pop z mul exch y mul add exch x mul add 4 1 roll z mul exch y mul add exch x mul add exch> \pst@def{SetMatrixEmbed}<% \tx@SetMatrixThreeD Matrix3D aload pop /z3 ED /z2 ED /z1 ED /x3 ED /x2 ED /x1 ED \tx@SetMatrixThreeD [ Matrix3D aload pop z3 mul exch z2 mul add exch z1 mul add 4 1 roll z3 mul exch z2 mul add exch z1 mul add Matrix3D aload pop x3 mul exch x2 mul add exch x1 mul add 4 1 roll x3 mul exch x2 mul add exch x1 mul add 3 -1 roll 3 -1 roll 4 -1 roll 8 -3 roll 3 copy x3 mul exch x2 mul add exch x1 mul add 4 1 roll z3 mul exch z2 mul add exch z1 mul add ] concat> \let\pssetzlength\pssetylength \define@key[psset]{pst-3d}{viewpoint}{% \pst@expandafter\psset@@viewpoint#1 {} {} {} \@nil \let\psk@viewpoint\pst@tempg} \def\psset@@viewpoint#1 #2 #3 #4\@nil{% \begingroup \pssetxlength\pst@dima{#1}% \pssetylength\pst@dimb{#2}% \pssetzlength\pst@dimc{#3}% \xdef\pst@tempg{% \pst@number\pst@dima \pst@number\pst@dimb \pst@number\pst@dimc}% \endgroup} \psset[pst-3d]{viewpoint=1 -1 1} \define@key[psset]{pst-3d}{viewangle}{% \pst@getangle{#1}\psk@viewangle} \psset[pst-3d]{viewangle=0} \define@key[psset]{pst-3d}{normal}{% \pst@expandafter\psset@@viewpoint#1 {} {} {} \@nil \let\psk@normal\pst@tempg} \psset[pst-3d]{normal=0 0 1} \define@key[psset]{pst-3d}{embedangle}{% \pst@getangle{#1}\psk@embedangle} \psset[pst-3d]{embedangle=0} \define@key[psset]{pst-3d}{Tshadowsize}{% \pst@checknum{#1}\psTshadowsize} \psset[pst-3d]{Tshadowsize=1} \define@key[psset]{pst-3d}{Tshadowangle}{% \pst@getangle{#1}\psk@Tshadowangle} \psset[pst-3d]{Tshadowangle=60} \define@key[psset]{pst-3d}{Tshadowcolor}{% \pst@getcolor{#1}\psTshadowcolor} \psset[pst-3d]{Tshadowcolor=lightgray} \pst@def{TMSave}<% tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if /TMatrix [ TMatrix CM ] cvx def> \pst@def{TMRestore}<% CP /TMatrix [ TMatrix setmatrix ] cvx def moveto> \pst@def{TMChange}<% \tx@TMSave /cp [ currentpoint ] cvx def % ??? Check this later. CM CP T \tx@STV CM matrix invertmatrix % Inv(M') matrix concatmatrix % M Inv(M') exch exec concat cp moveto> \def\ThreeDput{\def\pst@par{}\pst@object{ThreeDput}} \def\ThreeDput@i{\@ifnextchar({\ThreeDput@ii}{\ThreeDput@ii(\z@,\z@,\z@)}} \def\ThreeDput@ii(#1,#2,#3){% \pst@killglue\pst@makebox{\ThreeDput@iii(#1,#2,#3)}} \def\ThreeDput@iii(#1,#2,#3){% \begingroup \use@par \if@star\pst@starbox\fi \pst@makesmall\pst@hbox \pssetxlength\pst@dima{#1}% \pssetylength\pst@dimb{#2}% \pssetzlength\pst@dimc{#3}% \leavevmode \hbox{% \pst@Verb{% { \pst@number\pst@dima \pst@number\pst@dimb \pst@number\pst@dimc \psk@normal \psk@embedangle \psk@viewpoint \psk@viewangle \tx@SetMatrixEmbed } \tx@TMChange}% \box\pst@hbox \pst@Verb{\tx@TMRestore}}% \endgroup \ignorespaces} \def\pst@sinandcos#1{% \begingroup \pst@dima=#1\relax \pst@dima=.366022\pst@dima %Now 1pt=1/32rad \pst@dimb=\pst@dima % dimb->32sin(angle) in pts \pst@dimc=32\p@ % dimc->32cos(angle) in pts \pst@dimtonum\pst@dima\pst@tempa \pst@cntb=\tw@ \pst@cntc=-\@ne \pst@cntg=32 \loop \ifnum\pst@dima>\@cclvi % 256 \pst@dima=\pst@tempa\pst@dima \divide\pst@dima\pst@cntg \divide\pst@dima\pst@cntb \ifodd\pst@cntb \advance\pst@dimb \pst@cntc\pst@dima \pst@cntc=-\pst@cntc \else \advance\pst@dimc by \pst@cntc\pst@dima \fi \advance\pst@cntb\@ne \repeat \divide\pst@dimb\pst@cntg \divide\pst@dimc\pst@cntg \global\pst@dimg\pst@dimb \global\pst@dimh\pst@dimc \endgroup} \def\pst@getsinandcos#1{% \pst@dimg=100000sp \pst@dimg=#1\pst@dimg \pst@dimh=36000000sp \pst@cntg=0 \loop \ifnum\pst@dimg<\z@ \advance\pst@dimg\pst@dimh \repeat \loop \ifnum\pst@dimg>\pst@dimh \advance\pst@dimg-\pst@dimh \repeat \pst@dimh=9000000sp \def\pst@tempg{% \ifnum\pst@dimg<\pst@dimh\else \advance\pst@dimg-\pst@dimh \advance\pst@cntg\@ne \ifnum\pst@cntg>\thr@@ \advance\pst@cntg-4 \fi \expandafter\pst@tempg \fi}% \pst@tempg \chardef\pst@quadrant\pst@cntg \ifdim\pst@dimg=\z@ \def\pst@sin{0}% \def\pst@cos{1}% \else \pst@sinandcos\pst@dimg \pst@dimtonum\pst@dimg\pst@sin \pst@dimtonum\pst@dimh\pst@cos \fi% } \def\pstilt#1{\pst@makebox{\pstilt@{#1}}} \def\pstilt@#1{% \begingroup \leavevmode \pst@getsinandcos{#1}% \hbox{% \ifcase\pst@quadrant \kern\pst@cos\dp\pst@hbox \pst@dima=\pst@cos\ht\pst@hbox \ht\pst@hbox=\pst@sin\ht\pst@hbox \dp\pst@hbox=\pst@sin\dp\pst@hbox \or \kern\pst@sin\ht\pst@hbox \pst@dima=\pst@sin\dp\pst@hbox \ht\pst@hbox=\pst@cos\ht\pst@hbox \dp\pst@hbox=\pst@cos\dp\pst@hbox \or \kern\pst@cos\ht\pst@hbox \pst@dima=\pst@sin\dp\pst@hbox \pst@dimg=\pst@sin\ht\pst@hbox \ht\pst@hbox=\pst@sin\dp\pst@hbox \dp\pst@hbox=\pst@dimg \or \kern\pst@sin\dp\pst@hbox \pst@dima=\pst@sin\ht\pst@hbox \pst@dimg=\pst@cos\ht\pst@hbox \ht\pst@hbox=\pst@cos\dp\pst@hbox \dp\pst@hbox=\pst@dimg \fi \pst@Verb{% { [ 1 0 \pst@cos\space \ifnum\pst@quadrant>\@ne neg \fi \pst@sin\space \ifnum\pst@quadrant>\z@\ifnum\pst@quadrant<\thr@@ neg \fi\fi \ifodd\pst@quadrant exch \fi 0 0 ] concat } \tx@TMChange}% \box\pst@hbox \pst@Verb{\tx@TMRestore}% \kern\pst@dima}% \endgroup} \def\psTilt#1{\pst@makebox{\psTilt@{#1}}} \def\psTilt@#1{% \begingroup \leavevmode \pst@getsinandcos{#1}% \hbox{% \ifodd\pst@quadrant \pst@@divide{\dp\pst@hbox}{\pst@cos\p@}% \ifnum\pst@quadrant=\thr@@\kern\else\pst@dima=\fi\pst@sin\pst@dimg \pst@@divide{\ht\pst@hbox}{\pst@cos\p@}% \ifnum\pst@quadrant=\@ne\kern\else\pst@dima=\fi\pst@sin\pst@dimg \else \ifdim\pst@sin\p@=\z@ \@pstrickserr{\string\psTilt\space angle cannot be 0 or 180}\@ehpa \def\pst@sin{.7071}% \def\pst@cos{.7071}% \fi \pst@@divide{\dp\pst@hbox}{\pst@sin\p@}% \ifnum\pst@quadrant=\z@\kern\else\pst@dima=\fi\pst@cos\pst@dimg \pst@@divide{\ht\pst@hbox}{\pst@sin\p@}% \ifnum\pst@quadrant=\tw@\kern\else\pst@dima=\fi\pst@cos\pst@dimg \fi \ifnum\pst@quadrant>\@ne \pst@dimg=\ht\pst@hbox \ht\pst@hbox=\dp\pst@hbox \dp\pst@hbox=\pst@dimg \fi \pst@Verb{% { [ 1 0 \pst@cos\space \pst@sin\space \ifodd\pst@quadrant exch \fi \tx@Div \ifnum\pst@quadrant>\z@\ifnum\pst@quadrant<\thr@@ neg \fi\fi \ifnum\pst@quadrant>\@ne -1 \else 1 \fi 0 0 ] concat } \tx@TMChange}% \box\pst@hbox \pst@Verb{\tx@TMRestore}% \kern\pst@dima}% \endgroup} \def\psshadow{\pst@object{psshadow}} \def\psshadow@i{\pst@makebox{\psshadow@ii}} \def\psshadow@ii{% \begingroup \use@par \leavevmode \pst@getsinandcos{\psk@Tshadowangle}% \hbox{% \lower\dp\pst@hbox\hbox{% \pst@Verb{% { [ 1 0 \pst@cos\space \psTshadowsize mul \ifnum\pst@quadrant>\@ne neg \fi \pst@sin\space \psTshadowsize mul \ifnum\pst@quadrant>\z@\ifnum\pst@quadrant<\thr@@ neg \fi\fi \ifodd\pst@quadrant exch \fi 0 0 ] concat } \tx@TMChange}}% \hbox to\z@{% patch 2 (hv), to get it run with xcolor _and_ TeX \pst@Verb{ gsave \pst@usecolor\psTshadowcolor}% \copy\pst@hbox \pst@Verb{ grestore}\hss}% \pst@Verb{\tx@TMRestore}% \box\pst@hbox}% \endgroup} \catcode`\@=\PstAtCode\relax \endinput %% %% End of file `pst-3d.tex'. rivet-1.8.3/data/texmf/tex/generic/pst-grad/0000755000175000017500000000000012116077756017055 5ustar sunsunrivet-1.8.3/data/texmf/tex/generic/pst-grad/pst-grad.tex0000644000175000017500000001133012116077756021316 0ustar sunsun%% BEGIN pst-grad.tex %% %% Gradient fillstyle with PSTricks. %% See the PSTricks User's Guide for description. %% This uses the header file `pst-grad.pro'. %% %% Based on some EPS files by leeweyr!bill@nuchat.sccsi.com (W. R. Lee). %% %% %% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu. %% 2006 Herbert Voss, hvoss@tug.org %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN %% archives in directory macros/latex/base/lppl.txt. %% %% This defines a new fill style, "gradient", for use with PSTricks, %% which has gradiated color. The following parameters are used: %% %% gradbegin=color : Beginning color. %% gradend=color : Final color. %% gradlines=int : Number of lines to use. The higher the number, %% the slower the rendering. %% gradmidpoint=num : Gradient color goes from gradbegin to gradend, %% and then back to beginning. Midpoint (point %% where "gradend" color appears, is gradmidpoint %% from the top. (0 <= Gmidpoint <= 1). %% gradangle=angle : Rotate image by angle. %% GradientCircle=true : Instead of a linear a circled gradient is build. %% (version 1.04) %% GradientPos=(x,y) : the center of the circled gradient %% (version 1.04) %% GradientScale=float : scaling factor of the circled gradient %% (version 1.04) %% GradientHSB : Use HSB color model %% cmyk : Use CMYK color model %% \csname GradientLoaded\endcsname \let\GradientLoaded\endinput \ifx\PSTricksLoaded\endinput\else \def\next{\input pstricks.tex }\expandafter\next \fi \ifx\PSTXKeyLoaded\endinput\else\input pst-xkey \fi \def\fileversion{1.06} \def\filedate{2006/11/27} \message{`pst-grad' v\fileversion, \filedate\space (tvz,dg,hv)} \edef\TheAtCode{\the\catcode`\@} \catcode`\@=11 \pst@addfams{pst-grad} \pstheader{pst-grad.pro} \define@boolkey[psset]{pst-grad}[Pst@]{cmyk}[true]{% \ifPst@cmyk \newcmykcolor{gradbegin}{0 .1 .95 0.1} \newcmykcolor{gradend}{0 0.8 0.6 0.5} \else \newrgbcolor{gradbegin}{0 .1 .95} \newrgbcolor{gradend}{0 1 1} \fi% } \psset[pst-grad]{cmyk=false} % \define@key[psset]{pst-grad}{gradbegin}{\pst@getcolor{#1}\psgradbegin} \define@key[psset]{pst-grad}{gradend}{\pst@getcolor{#1}\psgradend} \define@key[psset]{pst-grad}{gradlines}{% \pst@getint{#1}\psgradlines \ifnum\psgradlines<2 \@pstrickserr{gradlines must be at least 2}\@epha \def\psgradlines{2 }% \fi} \define@key[psset]{pst-grad}{gradmidpoint}{\pst@checknum{#1}\psgradmidpoint} \define@key[psset]{pst-grad}{gradangle}{\pst@getangle{#1}\psk@gradangle} \psset[pst-grad]{gradangle=0,gradlines=300,gradend=gradend,gradbegin=gradbegin, gradmidpoint=0.9} % Denis Girou - April 1998 ------- patch 2 (hv) % To define the gradient as linear or as circle %================================================================== \define@boolkey[psset]{pst-grad}[Pst@]{GradientCircle}[true]{} % Position of the center of the gradient \define@key[psset]{pst-grad}{GradientPos}{\psset@@GradientPos#1}% \def\psset@@GradientPos(#1){\edef\ps@GradientPos{#1}} % Scale factor \define@key[psset]{pst-grad}{GradientScale}{\def\ps@GradientScale{#1}} \psset[pst-grad]{GradientCircle=false,GradientScale=1,GradientPos={(0,0)}} %===================================================================== % \define@boolkey[psset]{pst-grad}[Pst@]{gradientHSB}[true]{} \psset[pst-grad]{gradientHSB=false} % \def\psfs@gradient{% \ifPst@gradientHSB \addto@pscode{% gsave gsave \pst@usecolor\psgradbegin currenthsbcolor grestore gsave \pst@usecolor\psgradend currenthsbcolor grestore \psgradlines \psgradmidpoint \psk@gradangle % hv 2004-05-05 begin fixed a spurious blank tx@GradientDict begin GradientFillHSB end grestore% }% % tx@GradientHSBDict begin GradientFillHSB end grestore} % hv 2004-05-05 end \else% % hv 2004-06-25 begin fixed a spurious blank \pst@getcoor{\ps@GradientPos}{\pst@tempa}% <- "%" hv 2004-06-23 % hv end \addto@pscode{% gsave \ifPst@GradientCircle\space true \else false \fi \ps@GradientScale\space \pst@tempa\space gsave \pst@usecolor\psgradbegin \ifPst@cmyk currentcmykcolor \else currentrgbcolor \fi grestore gsave \pst@usecolor\psgradend \ifPst@cmyk currentcmykcolor \else currentrgbcolor \fi grestore \psgradlines \psgradmidpoint \psk@gradangle \ifPst@cmyk true \else false \fi tx@GradientDict begin GradientFill end grestore% }% \fi% } % \catcode`\@=\TheAtCode\relax % \endinput %% %% END pst-grad.tex rivet-1.8.3/data/texmf/tex/generic/pst-text/0000755000175000017500000000000012116077756017124 5ustar sunsunrivet-1.8.3/data/texmf/tex/generic/pst-text/pst-text.tex0000644000175000017500000001101612116077756021435 0ustar sunsun%% BEGIN pst-text.tex %% %% Placing text on a path with PSTricks 97. %% See the PSTricks User's Guide for description. %% This uses the header file `pst-text.pro'. %% %% %% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu. %% 2006 Herbert Voss %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN %% archives in directory macros/latex/base/lppl.txt. %% % \csname PSTextPathLoaded\endcsname \let\PSTextPathLoaded\endinput \ifx\PSTricksLoaded\endinput\else\input pstricks \fi %\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey \fi % \def\fileversion{1.00} \def\filedate{2006/11/05} \message{ v\fileversion, \filedate (tvz,hv)} \edef\TheAtCode{\the\catcode`\@} \catcode`\@=11 %\pst@addfams{pst-text} \pstheader{pst-text.pro} % \def\pstextpath{\@ifnextchar[{\pstextpath@}{\pstextpath@[l]}} \def\pstextpath@[#1]{% \@ifnextchar({\pstextpath@@[#1]}{\pstextpath@@[#1](0,\TPoffset)}} \def\pstextpath@@[#1](#2)#3{\pst@makebox{\pstextpath@@@[#1](#2){#3}}} \def\pstextpath@@@[#1](#2,#3)#4{% \pst@killglue \begingroup \ifx c#1\relax \def\pst@tempa{.5}% \else \ifx r#1\relax \def\pst@tempa{1}% \else \def\pst@tempa{0}% \fi \fi \def\use@pscode{% \pst@Verb{% /mtrxc CM def \tx@STV CP translate newpath \pst@code\space mtrxc setmatrix 0 setgray}% \gdef\pst@code{}}% \def\psclip#1{\pst@misplaced\psclip}% \let\endpsclip\relax \def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}% \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}% \def\PSTtoEPS@i##1##2{\pst@misplaced\PSTtoEPS}% \pssetlength\pst@dima{#2}% \pssetlength\pst@dimb{#3}% \setbox\pst@hbox\hbox{% \hbox to\z@{% \kern -\wd\pst@hbox % BoxWidth = CurrX - Hoffset. \pstVerb{tx@TextPathDict begin currentpoint pop /Hoffset exch def end}% \kern\pst@dima % XOffset = Voffset - Hoffset (extra horizontal skip) \pstVerb{tx@TextPathDict begin currentpoint pop /Voffset exch def end}% \hss \pstVerb{% /tx@TextPathSavedShow /show load def \pst@dict \tx@PathLength end dup 0 gt { tx@TextPathDict begin \pst@tempa\space InitTextPath end /show { tx@TextPathDict begin TextPathShow end } def } { pop } ifelse}}% \raise\pst@dimb\box\pst@hbox \pstVerb{% currentpoint newpath moveto /show /tx@TextPathSavedShow load def}}% \wd\pst@hbox=\z@ \dp\pst@hbox=\z@ \ht\pst@hbox=\z@ \leavevmode \hbox{{#4}\box\pst@hbox}% \endgroup\ignorespaces} \def\TPoffset{-.7ex} % \def\tx@CharPathShow{% /tx@CharPathSavedShow /show load def /show { % These 3 lines check whether charpath yields anything interesting. dup gsave newpath 0 0 moveto true charpath pathbbox grestore 3 -1 roll eq 3 1 roll eq and % If not, just use show. { tx@CharPathSavedShow } % Otherwise, use charpath. { true charpath } ifelse } def } % \def\pscharpath{\def\pst@par{}\pst@object{pscharpath}} \def\pscharpath@i{\pst@makebox\pscharpath@ii} \def\pscharpath@ii{% \leavevmode\hbox{% \pstVerb{\tx@CharPathShow}% \box\pst@hbox \pstVerb{/show /tx@CharPathSavedShow load def}% % DG/SR modification begin - Nov. 26, 1998 - Patch 2 % \if@star is true but \solid@star must not be executed in \begin@ClosedObj ! % \begin@ClosedObj \let\solid@starOLD\solid@star \let\solid@star\relax \begin@ClosedObj \let\solid@star\solid@starOLD % DG/SR modification end \def\pst@linetype{1}% \psdashadjustfalse \showpointsfalse \let\pst@newpath\@empty \def\use@pscode{% \pst@Verb{% gsave \tx@STV \pst@code grestore % DG/SR modification begin - Jul. 3, 1998 / Mar. 11, 1999 - Patches 1 and 3 % \if@star\else CP newpath moveto \fi}}% \if@star\else CP newpath moveto \fi}% \gdef\pst@code{}}% % DG/SR modification end \end@ClosedObj}} % \def\pscharclip{\def\pst@par{}\pst@object{pscharclip}} \def\pscharclip@i{\pst@makebox\pscharclip@ii} \def\pscharclip@ii{% \leavevmode \begingroup \begin@psclip {\@startrue\pscharpath@ii}% \pstVerb{clip \if@star\else currentpoint newpath moveto\fi}% \def\endpscharclip{\end@psclip\endgroup}% \ignorespaces} \def\endpscharclip{\pst@misplaced\endpscharclip} % \catcode`\@=\TheAtCode\relax \endinput %% %% END pst-text.tex rivet-1.8.3/data/texmf/tex/latex/0000755000175000017500000000000012116077756015035 5ustar sunsunrivet-1.8.3/data/texmf/tex/latex/config/0000755000175000017500000000000012116077756016302 5ustar sunsunrivet-1.8.3/data/texmf/tex/latex/config/color.cfg0000644000175000017500000000144212116077756020102 0ustar sunsun\ProvidesFile{color.cfg}% [2007/01/18 v1.5 color configuration of teTeX/TeXLive] % Select an appropriate default driver \begingroup \chardef\x=0\relax % check pdfTeX \@ifundefined{pdfoutput}{}{% \ifnum\pdfoutput<1 % \else \chardef\x=1\relax \fi }% % check VTeX \@ifundefined{OpMode}{}{% \chardef\x=2\relax }% % check XeTeX \@ifundefined{XeTeXversion}{}{% \chardef\x=3\relax }% \expandafter\endgroup \ifcase\x % default case \def\Gin@driver{dvips.def}% \ExecuteOptions{dvips}% \or % pdfTeX is running in pdf mode \def\Gin@driver{pdftex.def}% \ExecuteOptions{pdftex}% \or % VTeX is running \def\Gin@driver{vtex.def}% \ExecuteOptions{vtex}% \else % XeTeX is running \def\Gin@driver{xetex.def}% \ExecuteOptions{xetex}% \fi \endinput rivet-1.8.3/data/texmf/tex/latex/pst-fill/0000755000175000017500000000000012116077756016567 5ustar sunsunrivet-1.8.3/data/texmf/tex/latex/pst-fill/pst-fill.sty0000644000175000017500000000277412116077756021074 0ustar sunsun%% %% This is file `pst-fill.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% pst-fill.dtx (with options: `latex-wrapper') %% %% IMPORTANT NOTICE: %% %% For the copyright see the source file. %% %% Any modified versions of this file must be renamed %% with new filenames distinct from pst-fill.sty. %% %% For distribution of the original source see the terms %% for copying and modification in the file pst-fill.dtx. %% %% This generated file may be distributed as long as the %% original source files, as listed above, are part of the %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% %% Package `pst-fill.dtx' %% %% Denis Girou (CNRS/IDRIS - France) %% Herbert Voss %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives %% in directory macros/latex/base/lppl.txt. %% %% DESCRIPTION: %% `pst-fill' is a PSTricks package for filling and tiling areas %% %% \pscircle[linestyle=none,fillstyle=solid,fillcolor=yellow,fillsep=0.5, %% addfillstyle=boxfill](2,2){2} \RequirePackage{pstricks} \ProvidesPackage{pst-fill}[2005/09/13 package wrapper for pst-fill.tex (hv)] \DeclareOption{tiling}{\def\PstTiling{true}} \ProcessOptions\relax \input{pst-fill.tex} \ProvidesFile{pst-fill.tex} [\filedate\space v\fileversion\space `PST-fill' (tvz,dg)] \endinput %% %% End of file `pst-fill.sty'. rivet-1.8.3/data/texmf/tex/latex/pstricks/0000755000175000017500000000000012116077756016677 5ustar sunsunrivet-1.8.3/data/texmf/tex/latex/pstricks/pst-tree.sty0000644000175000017500000000032512116077756021203 0ustar sunsun\RequirePackage{pstricks} \ProvidesPackage{pst-tree}[2004/07/15 package wrapper for pst-tree.tex] \input{pst-tree.tex} \ProvidesFile{pst-tree.tex} [\filedate\space \fileversion\space `pst-tree' (tvz)] \endinput rivet-1.8.3/data/texmf/tex/latex/pstricks/pst-plot.sty0000644000175000017500000000032512116077756021222 0ustar sunsun\RequirePackage{pstricks} \ProvidesPackage{pst-plot}[2004/07/15 package wrapper for pst-plot.tex] \input{pst-plot.tex} \ProvidesFile{pst-plot.tex} [\filedate\space \fileversion\space `pst-plot' (tvz)] \endinput rivet-1.8.3/data/texmf/tex/latex/pstricks/pstricks.sty0000644000175000017500000001501412116077756021303 0ustar sunsun%% %% This is file `pstricks.sty'. %% %% IMPORTANT NOTICE: %% %% pstricks.sty Copyright (C) 1997 Timothy Van Zandt %% pstcol.sty Copyright (C) 1994-1996 1999 David Carlisle %% pstricks.sty Copyright (C) 2004-2008 Herbert Voss %% Rolf Niepraschk %% %% This package may be distributed under the terms of the LaTeX Project %% Public License, as described in lppl.txt in the base LaTeX distribution. %% Either version 1.0 or, at your option, any later version. %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{pstricks} [2008/01/24 v0.37 LaTeX wrapper for `PSTricks' (RN,HV)] % \def\documentclass{ \edef\@tempa{\jobname.tex }% \edef\@tempb{\@filef@und}% \@onelevel@sanitize\@tempa \@onelevel@sanitize\@tempb \ifx\@tempa\@tempb \@latex@error {`\jobname.tex' is a forbidden name for your document,\MessageBreak it is already a name of a package}% {Choose another name for your document}\@gobble \else \@twoclasseserror \fi } % %------------------------------------ PLAIN -------------------------------- \DeclareOption{plain}{% \input{pstricks.tex} \ProvidesFile{pstricks.tex} [\filedate\space v\fileversion\space `PSTricks' (tvz)] \endinput } \DeclareOption*{\OptionNotUsed} \ProcessOptions\relax \@ifundefined{PSTricksLoaded} {% \let\saved@scalebox\scalebox \input{pstricks.tex} \ProvidesFile{pstricks.tex} [\filedate\space v\fileversion\space `PSTricks' (tvz)] \IfFileExists{pstricks.pro}{% \ProvidesFile{pstricks.pro} [2008/01/01 v. 1.05, PostScript prologue file (hv)] \@addtofilelist{pstricks.pro}}{}% \IfFileExists{pst-dots.pro}{% \ProvidesFile{pst-dots.pro} [2006/12/19 v. 2.02, PostScript prologue file (hv)] \@addtofilelist{pst-dots.pro}}{}% \IfFileExists{pst-algparser.pro}{% \ProvidesFile{pst-algparser.pro} [2008/01/01 v. 0.01, PostScript prologue file (hv)] \@addtofilelist{pst-algparser.pro}}{}% {% \let\psscalebox=\scalebox \let\psscaleboxto=\scaleboxto }{} \let\scalebox\saved@scalebox }{} \IfFileExists{xcolor.sty}{% \def\pst@ColorPackage{xcolor} \PassOptionsToPackage{override}{xcolor} }{\def\pst@ColorPackage{color}}% %------------------------------------ DIA -------------------------------- \newif\ifpst@DIA\pst@DIAfalse \DeclareOption{DIA}{\pst@DIAtrue} \DeclareOption{noxcolor}{\def\pst@ColorPackage{color}} \DeclareOption{vtex}{% \pst@def{setTransparency}< > \pst@def{setStrokeTransparency}< > \pst@def{setBlendmode}< >% } %---------------------------------DISTILLER -------------------------------- \DeclareOption{distiller}{% \pst@def{setTransparency}< [ /ca \psk@opacityalpha /CA \psk@opacityalpha /SetTransparency pdfmark > \pst@def{setStrokeTransparency}< [ /ca \psk@strokeopacityalpha /CA \psk@strokeopacityalpha /SetTransparency pdfmark > \pst@def{setBlendmode}< [ /BM\ifcase\psk@blendmode% /Normal \or % 0 /Multiply \or % 1 /Screen \or % 2 /Overlay \or % 3 /Darken \or % 4 /Lighten \or % 5 /ColorDodge \or % 6 /ColorBurn \or % 7 /HardLight \or % 8 /SoftLight \or % 9 /Difference \or % 10 /Exclusion \or % 11 /Hue \or % 12 /Color \or % 13 /Saturation \or % 14 /Luminosity % 15 \else /Normal \fi /ca \psk@shapealpha /CA \psk@opacityalpha /SetTransparency pdfmark >% } %---------------------------------COLOR -------------------------------- \DeclareOption*{% \PassOptionsToPackage\CurrentOption{\pst@ColorPackage}} \ProcessOptions\relax \RequirePackage{\pst@ColorPackage} \@ifpackageloaded{xcolor}{% \@ifpackagelater{xcolor}{2004/05/02}% {% \let\pst@getcolor\XC@getcolor \let\pst@usecolor\XC@usecolor } {% \PackageError{pstricks}{% *************************************************\MessageBreak * Your Version of `xcolor.sty' is too old!\MessageBreak * You need the version from 2004/05/02 or newer\MessageBreak * or use: \string\usepackage[noxcolor]{pstricks}\MessageBreak *************************************************}{}% }% }{% \def\pst@getcolor#1#2{% \@ifundefined{\string\color@#1}% {\@pstrickserr{Color `#1' not defined}\@eha}% {\edef#2{#1}}}% \def\pst@usecolor#1{\expandafter\expandafter\expandafter\c@lor@to@ps% \csname\string\color@#1\endcsname\@@\space}% \definecolor{darkgray}{gray}{.25} \definecolor{gray}{gray}{.5} \definecolor{lightgray}{gray}{.75} }% % \definecolor{gradbegin}{rgb}{0,1,1} \definecolor{gradend}{rgb}{0,.1,.95} % \@ifundefined{xglobal}% {\def\xglobal#1#2#3#4% UK 2005-11-17 {#1{#2}{#3}{#4}% \expandafter\global\expandafter\let\csname\string\color@#2% \expandafter\endcsname\csname\string\color@#2\endcsname}}{}% % \def\newgray#1{% \expandafter\gdef\csname #1\endcsname{\color{#1}}% HV 2004-03-31 \xglobal\definecolor{#1}{gray}}% % \def\newrgbcolor#1#2{% \expandafter\gdef\csname #1\endcsname{\color{#1}}% HV 2004-03-31 \edef\@tempa{\noexpand\newrgbcolorx{#1}#2\noexpand\@@}\@tempa}% \def\newrgbcolorx#1#2 #3 #4\@@{% \xglobal\definecolor{#1}{rgb}{#2,#3,#4}} % \def\newcmykcolor#1#2{% \expandafter\gdef\csname #1\endcsname{\color{#1}}% HV 2004-03-31 \edef\@tempa{\noexpand\newcmykcolorx{#1}#2\noexpand\@@}\@tempa} \def\newcmykcolorx#1#2 #3 #4 #5\@@{% \xglobal\definecolor{#1}{cmyk}{#2,#3,#4,#5}} % \def\newhsbcolor#1#2{% \expandafter\gdef\csname #1\endcsname{\color{#1}}% HV 2004-03-31 \edef\@tempa{\noexpand\newhsbcolorx{#1}#2\noexpand\@@}\@tempa} \def\newhsbcolorx#1#2 #3 #4\@@{% \xglobal\definecolor{#1}{hsb}{#2,#3,#4}} % \definecolor{black}{gray}{0} \definecolor{darkgray}{gray}{.25} \definecolor{gray}{gray}{.5} \definecolor{lightgray}{gray}{.75} \definecolor{white}{gray}{1} \definecolor{red}{rgb}{1,0,0} \definecolor{green}{rgb}{0,1,0} \definecolor{blue}{rgb}{0,0,1} %\definecolor{yellow}{rgb}{1,1,0} %\definecolor{cyan}{rgb}{0,1,1} %\definecolor{magenta}{rgb}{1,0,1} \definecolor{yellow}{cmyk}{0,0,1,0} \definecolor{cyan}{cmyk}{1,0,0,0} \definecolor{magenta}{cmyk}{0,1,0,0} % \renewcommand*\black{\color{black}} \renewcommand*\darkgray{\color{darkgray}} \renewcommand*\gray{\color{gray}} \renewcommand*\lightgray{\color{lightgray}} \renewcommand*\white{\color{white}} \renewcommand*\blue{\color{blue}} \renewcommand*\red{\color{red}} \renewcommand*\green{\color{green}} \renewcommand*\yellow{\color{yellow}} \renewcommand*\magenta{\color{magenta}} \renewcommand*\cyan{\color{cyan}} % \AtBeginDocument{% \psset{fillcolor=white}% hv 0.33 \let\pst@endcolor=\relax% % \let\pst@color=\relax% % LaTeX used `\color@endgroup' instead. RN 2004-05-06 } % \endinput %% %% End of file `pstricks.sty'. rivet-1.8.3/data/texmf/tex/latex/pstricks/pst-all.sty0000644000175000017500000000174712116077756021025 0ustar sunsun%% %% This is file `pst-all.sty' %% %% IMPORTANT NOTICE: %% %% Copyright (C) 1997 Timothy Van Zandt %% Copyright (C) 2004-2008 Herbert Voss %% Rolf Niepraschk %% %% This package may be distributed under the terms of the LaTeX Project %% Public License, as described in lppl.txt in the base LaTeX distribution. %% Either version 1.0 or, at your option, any later version. %% \ProvidesPackage{pst-all}[2008/01/01 the main pstricks tools] \RequirePackage{pstricks} % important % this loads the xcolor package and pstricks in the right order % and does some modification to the color handling. Look at the % doc for the options. % \RequirePackage{pst-node} \RequirePackage{pst-tree} \RequirePackage{pst-plot} \RequirePackage{pst-grad} \RequirePackage{pst-coil} \RequirePackage{pst-text} \RequirePackage{pst-3d} \RequirePackage{pst-eps} \RequirePackage[tiling]{pst-fill} \RequirePackage{pstricks-add} \RequirePackage{multido} \endinput rivet-1.8.3/data/texmf/tex/latex/pstricks/pst-node.sty0000644000175000017500000000056612116077756021200 0ustar sunsun\RequirePackage{pstricks} \ProvidesPackage{pst-node}[2006/01/01 package wrapper for pst-node.tex] \input{pst-node.tex} \ProvidesFile{pst-node.tex} [\filedate\space \fileversion\space `pst-node' (tvz)] \IfFileExists{pst-node.pro}{% \ProvidesFile{pst-node.pro} [2008/01/01 v. 1.00, PostScript prologue file (hv)] \@addtofilelist{pst-node.pro}}{}% \endinput rivet-1.8.3/data/texmf/tex/latex/misc/0000755000175000017500000000000012116077756015770 5ustar sunsunrivet-1.8.3/data/texmf/tex/latex/misc/underscore.sty0000755000175000017500000002370712116077756020716 0ustar sunsun% underscore.sty 12-Oct-2001 Donald Arseneau asnd@triumf.ca % Make the "_" character print as "\textunderscore" in text. % Copyright 1998,2001 Donald Arseneau; Distribute freely if unchanged. % Instructions follow after the definitions. \ProvidesPackage{underscore}[2001/10/12] \begingroup \catcode`\_=\active \gdef_{% \relax % No relax gives a small vulnerability in alignments \ifx\if@safe@actives\iftrue % must be outermost test! \string_% \else \ifx\protect\@typeset@protect \ifmmode \sb \else \BreakableUnderscore \fi \else \ifx\protect\@unexpandable@protect \noexpand_% \else \protect_% \fi\fi \fi} \endgroup % At begin: set catcode; fix \long \ttdefault so I can use it in comparisons; \AtBeginDocument{% {\immediate\write\@auxout{\catcode\number\string`\_ \string\active}}% \catcode\string`\_\string=\active \edef\ttdefault{\ttdefault}% } \newcommand{\BreakableUnderscore}{\leavevmode\nobreak\hskip\z@skip \ifx\f@family\ttdefault \string_\else \textunderscore\fi \usc@dischyph\nobreak\hskip\z@skip} \DeclareRobustCommand{\_}{% \ifmmode \nfss@text{\textunderscore}\else \BreakableUnderscore \fi} \let\usc@dischyph\@dischyph \DeclareOption{nohyphen}{\def\usc@dischyph{\discretionary{}{}{}}} \DeclareOption{strings}{\catcode`\_=\active} \ProcessOptions \ifnum\catcode`\_=\active\else \endinput \fi %%%%%%%% Redefine commands that use character strings %%%%%%%% \@ifundefined{UnderscoreCommands}{\let\UnderscoreCommands\@empty}{} \expandafter\def\expandafter\UnderscoreCommands\expandafter{% \UnderscoreCommands \do\include \do\includeonly \do\@input \do\@iinput \do\InputIfFileExists \do\ref \do\pageref \do\newlabel \do\bibitem \do\@bibitem \do\cite \do\nocite \do\bibcite } % Macro to redefine a macro to pre-process its string argument % with \protect -> \string. \def\do#1{% Avoid double processing if user includes command twice! \@ifundefined{US\string_\expandafter\@gobble\string#1}{% \edef\@tempb{\meaning#1}% Check if macro is just a protection shell... \def\@tempc{\protect}% \edef\@tempc{\meaning\@tempc\string#1\space\space}% \ifx\@tempb\@tempc % just a shell: hook into the protected inner command \expandafter\do \csname \expandafter\@gobble\string#1 \expandafter\endcsname \else % Check if macro takes an optional argument \def\@tempc{\@ifnextchar[}% \edef\@tempa{\def\noexpand\@tempa####1\meaning\@tempc}% \@tempa##2##3\@tempa{##2\relax}% \edef\@tempb{\meaning#1\meaning\@tempc}% \edef\@tempc{\noexpand\@tempd \csname US\string_\expandafter\@gobble\string#1\endcsname}% \if \expandafter\@tempa\@tempb \relax 12\@tempa % then no optional arg \@tempc #1\US@prot \else % There is optional arg \@tempc #1\US@protopt \fi \fi }{}} \def\@tempd#1#2#3{\let#1#2\def#2{#3#1}} \def\US@prot#1#2{\let\@@protect\protect \let\protect\string \edef\US@temp##1{##1{#2}}\restore@protect\US@temp#1} \def\US@protopt#1{\@ifnextchar[{\US@protarg#1}{\US@prot#1}} \def\US@protarg #1[#2]{\US@prot{{#1[#2]}}} \UnderscoreCommands \let\do\relax \let\@tempd\relax % un-do %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \endinput underscore.sty 12-Oct-2001 Donald Arseneau Features: ~~~~~~~~~ \_ prints an underscore so that the hyphenation of constituent words is not affected and hyphenation is permitted after the underscore. For example, "compound\_fracture" hyphenates as com- pound_- frac- ture. If you prefer the underscore to break without a hyphen (but still with the same rules for explicit hyphen-breaks) then use the [nohyphen] package option. A simple _ acts just like \_ in text mode, but makes a subscript in math mode: activation_energy $E_a$ Both forms use an underscore character if the font encoding contains one (e.g., "\usepackage[T1]{fontenc}" or typewriter fonts in any encoding), but they use a rule if the there is no proper character. Deficiencies: ~~~~~~~~~~~~~ The skips and penalties ruin any kerning with the underscore character (when a character is used). However, there doesn't seem to be much, if any, such kerning in the ec fonts, and there is never any kerning with a rule. You must avoid "_" in file names and in cite or ref tags, or you must use the babel package, with its active-character controls, or you must give the [strings] option, which attempts to redefine several commands (and may not work perfectly). Even without the [strings] option or babel, you can use occasional underscores like: "\include{file\string_name}". Option: [strings] ~~~~~~~~~~~~~~~~~ The default operation is quite simple and needs no customization; but you must avoid using "_" in any place where LaTeX uses an argument as a string of characters for some control function or as a name. These include the tags for \cite and \ref, file names for \input, \include, and \includegraphics, environment names, counter names, and placement parameters (like "[t]"). The problem with these contexts is that they are `moving arguments' but LaTeX does not `switch on' the \protect mechanism for them. If you need to use the underscore character in these places, the package option [strings] is provided to redefine commands taking a string argument so that the argument is protected (with \protect -> \string). The list of commands is given in "\UnderscoreCommands", with "\do" before each, covering \cite, \ref, \input, and their variants. Not included are many commands regarding font names, everything with counter names, environment names, page styles, and versions of \ref and \cite defined by external packages (e.g. \vref and \citeyear). You can add to the list of supported commands by defining \UnderscoreCommands before loading this package; e.g. \usepackage{chicago} \newcommand{\UnderscoreCommands}{% (\cite already done) \do\citeNP \do\citeA \do\citeANP \do\citeN \do\shortcite \do\shortciteNP \do\shortciteA \do\shortciteANP \do\shortciteN \do\citeyear \do\citeyearNP } \usepackage[strings]{underscore} Not all commands can be supported this way! Only commands that take a string argument *first* can be protected. One optional argument before the string argument is also permitted, as exemplified by \cite: both \cite{tags} and \cite[text]{tags} are allowed. A command like \@addtoreset which takes two counter names as arguments could not be protected by adding it to \UnderscoreCommands. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! When you use the [strings] option, you must load this package !! !! last (or nearly last). !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! There are two reasons: 1) The redefinitions done for protection must come after other packages define their customized versions of those commands. 2) The [strings] option requires the _ character to be activated immediately in order for the cite and ref tags to be read properly from the .aux file as plain strings, and this catcode setting might disrupt other packages. The babel package implements a protection mechanism for many commands, and will be a complete fix for most documents without the [strings] option. Many add-on packages are compatible with babel, so they will get the strings protection also. However, there are several commands that are not covered by babel, but can easily be supported by the [strings] and \UnderscoreCommands mechanism. Beware that using both [strings] and babel may lead to conflicts, but does appear to work (load babel last). Implementation Notes: ~~~~~~~~~~~~~~~~~~~~~ The first setting of "_" to be an active character is performed in a local group so as to not interfere with other packages. The catcode setting is repeated with \AtBeginDocument so the definition is in effect for the text. However, the catcode setting is repeated immediately when the [strings] option is detected. The definition of the active "_" is essentially: \ifmmode \sb \else \BreakableUnderscore \fi where "\sb" retains the normal subscript meaning of "_" and where "\BreakableUnderscore" is essentially "\_". The rest of the definition handles the "\protect"ion without causing \relax to be inserted before the character. \BreakableUnderscore uses "\nobreak\hskip\z@skip" to separate the underscore from surrounding words, thus allowing TeX to hyphenate them, but preventing free breaks around the underscore. Next, it checks the current font family, and uses the underscore character from tt fonts or otherwise \textunderscore (which is a character or rule depending on the font encoding). After the underscore, it inserts a discretionary hyphenation point as "\usc@dischyph", which is usually just "\-" except that it still works in the tabbing environment, although it will give "\discretionary{}{}{}" under the [nohyphen] option. After that, another piece of non-breaking interword glue is inserted. Ordinarily, the comparison "\ifx\f@family\ttdefault" will always fail because \ttdefault is `long' where \f@family is not (boooo hisss), but \ttdefault is redefined to be non-long by "\AtBeginDocument". The "\_" command is then defined to use "\BreakableUnderscore". If the [strings] option is not given, then that is all! Under the [strings] option, the list of special commands is processed to: - retain the original command as \US_command (\US_ref) - redefine the command as \US@prot\US_command for ordinary commands (\ref -> \US@prot\US_ref) or as \US@protopt\US_command when an optional argument is possible (\bibitem -> \US@protopt\US_bibitem). - self-protecting commands (\cite) retain their self-protection. Diagnosing the state of the pre-existing command is done by painful contortions involving \meaning. \US@prot and \US@protopt read the argument, process it with \protect enabled, then invoke the saved \US_command. Modifications: ~~~~~~~~~~~~~~ 12-Oct-2001 Babel (safe@actives) compatibility and [nohyphen] option. Test file integrity: ASCII 32-57, 58-126: !"#$%&'()*+,-./0123456789 :;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ rivet-1.8.3/data/texmf/tex/latex/pst-eps/0000755000175000017500000000000012116077756016430 5ustar sunsunrivet-1.8.3/data/texmf/tex/latex/pst-eps/pst-eps.sty0000644000175000017500000000032512116077756020564 0ustar sunsun\RequirePackage{pstricks} \ProvidesPackage{pst-eps}[2005/05/20 package wrapper for pst-eps.tex (hv)] \input{pst-eps.tex} \ProvidesFile{pst-eps.tex} [\filedate\space \fileversion\space `pst-eps' (tvz)] \endinput rivet-1.8.3/data/texmf/tex/latex/pstricks-add/0000755000175000017500000000000012116077756017425 5ustar sunsunrivet-1.8.3/data/texmf/tex/latex/pstricks-add/pstricks-add.sty0000644000175000017500000000111712116077756022556 0ustar sunsun%% $Id: pstricks-add.sty 7 2007-12-29 22:21:13Z herbert $ % \RequirePackage{pstricks} \ProvidesPackage{pstricks-add}[2007/09/03 v. 0.11 package wrapper for pstricks-add.tex (hv)] \input{pstricks-add.tex} \ProvidesFile{pstricks-add.tex} [\filedate\space v\fileversion\space `PSTricks-add' (hv)] \IfFileExists{pstricks-add.pro}{% \ProvidesFile{pstricks-add.pro} [2007/11/18 v. 0.15, PostScript prologue file (hv)] \@addtofilelist{pstricks-add.pro}}{}% \InputIfFileExists{pstricks-add.cfg}{% \PackageInfo{pstricks-add}{Local config file pstricks-add.cfg used} }{} \endinput rivet-1.8.3/data/texmf/tex/latex/xkeyval/0000755000175000017500000000000012116077756016520 5ustar sunsunrivet-1.8.3/data/texmf/tex/latex/xkeyval/xkeyval.sty0000644000175000017500000001150612116077756020747 0ustar sunsun%% %% This is file `xkeyval.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% xkeyval.dtx (with options: `xkvlatex') %% %% --------------------------------------- %% Copyright (C) 2004-2008 Hendri Adriaens %% --------------------------------------- %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 %% of this license or (at your option) any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3 or later is part of all distributions of LaTeX %% version 2003/12/01 or later. %% %% This work has the LPPL maintenance status "maintained". %% %% This Current Maintainer of this work is Hendri Adriaens. %% %% This work consists of the file xkeyval.dtx and derived files %% keyval.tex, xkvtxhdr.tex, xkeyval.sty, xkeyval.tex, xkvview.sty, %% xkvltxp.sty, pst-xkey.tex, pst-xkey.sty, xkveca.cls, xkvecb.cls, %% xkvesa.sty, xkvesb.sty, xkvesc.sty, xkvex1.tex, xkvex2.tex, %% xkvex3.tex and xkvex4.tex. %% %% The following files constitute the xkeyval bundle and must be %% distributed as a whole: readme, xkeyval.pdf, keyval.tex, %% pst-xkey.sty, pst-xkey.tex, xkeyval.sty, xkeyval.tex, xkvview.sty, %% xkvltxp.sty, xkvtxhdr.tex, pst-xkey.dtx and xkeyval.dtx. %% \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesPackage{xkeyval} [2008/08/13 v2.6a package option processing (HA)] \ifx\XKeyValLoaded\endinput\else\input xkeyval \fi \edef\XKVcatcodes{% \catcode`\noexpand\=\the\catcode`\=\relax \catcode`\noexpand\,\the\catcode`\,\relax \let\noexpand\XKVcatcodes\relax } \catcode`\=12\relax \catcode`\,12\relax \let\XKV@doxs\relax \def\XKV@warn#1{\PackageWarning{xkeyval}{#1}} \def\XKV@err#1{\PackageError{xkeyval}{#1}\@ehc} \XKV@whilist\@filelist\XKV@tempa\ifx\XKV@documentclass\@undefined\fi{% \filename@parse\XKV@tempa \ifx\filename@ext\@clsextension \XKV@ifundefined{opt@\filename@area\filename@base.\filename@ext }{}{% \edef\XKV@documentclass{% \filename@area\filename@base.\filename@ext }% }% \fi } \ifx\XKV@documentclass\@undefined \XKV@err{xkeyval loaded before \protect\documentclass}% \let\XKV@documentclass\@empty \let\XKV@classoptionslist\@empty \else \let\XKV@classoptionslist\@classoptionslist \def\XKV@tempa#1{% \let\@classoptionslist\@empty \XKV@for@n{#1}\XKV@tempa{% \expandafter\in@\expandafter=\expandafter{\XKV@tempa}% \ifin@\else\XKV@addtolist@o\@classoptionslist\XKV@tempa\fi }% } \expandafter\XKV@tempa\expandafter{\@classoptionslist} \fi \def\XKV@testopte#1{% \XKV@ifstar{\XKV@sttrue\XKV@t@stopte#1}{\XKV@stfalse\XKV@t@stopte#1}% } \def\XKV@t@stopte#1{\@testopt{\XKV@t@st@pte#1}{KV}} \def\XKV@t@st@pte#1[#2]{% \XKV@makepf{#2}% \@ifnextchar<{\XKV@@t@st@pte#1}% {\XKV@@t@st@pte#1<\@currname.\@currext>}% } \def\XKV@@t@st@pte#1<#2>{% \XKV@sp@deflist\XKV@fams{#2}% \@testopt#1{}% } \def\DeclareOptionX{% \let\@fileswith@pti@ns\@badrequireerror \XKV@ifstar\XKV@dox\XKV@d@x } \long\def\XKV@dox#1{\XKV@toks{#1}\edef\XKV@doxs{\the\XKV@toks}} \def\XKV@d@x{\@testopt\XKV@@d@x{KV}} \def\XKV@@d@x[#1]{% \@ifnextchar<{\XKV@@@d@x[#1]}{\XKV@@@d@x[#1]<\@currname.\@currext>}% } \def\XKV@@@d@x[#1]<#2>#3{\@testopt{\define@key[#1]{#2}{#3}}{}} \def\ExecuteOptionsX{\XKV@stfalse\XKV@plfalse\XKV@t@stopte\XKV@setkeys} \def\ProcessOptionsX{\XKV@plfalse\XKV@testopte\XKV@pox} \def\XKV@pox[#1]{% \let\XKV@tempa\@empty \XKV@inpoxtrue \let\@fileswith@pti@ns\@badrequireerror \edef\XKV@testclass{\@currname.\@currext}% \ifx\XKV@testclass\XKV@documentclass \let\@unusedoptionlist\XKV@classoptionslist \XKV@ifundefined{ver@xkvltxp.sty}{}{% \@onelevel@sanitize\@unusedoptionlist }% \else \ifXKV@st \def\XKV@tempb##1,{% \def\CurrentOption{##1}% \ifx\CurrentOption\@nnil\else \XKV@g@tkeyname##1=\@nil\CurrentOption \XKV@key@if@ndefined{\CurrentOption}{}{% \XKV@useoption{##1}% \XKV@addtolist@n\XKV@tempa{##1}% }% \expandafter\XKV@tempb \fi }% \expandafter\XKV@tempb\XKV@classoptionslist,\@nil,% \fi \fi \expandafter\XKV@addtolist@o\expandafter \XKV@tempa\csname opt@\@currname.\@currext\endcsname \def\XKV@tempb{\XKV@setkeys[#1]}% \expandafter\XKV@tempb\expandafter{\XKV@tempa}% \let\XKV@doxs\relax \let\XKV@rm\@empty \XKV@inpoxfalse \let\@fileswith@pti@ns\@@fileswith@pti@ns \AtEndOfPackage{\let\@unprocessedoptions\relax}% } \def\XKV@useoption#1{% \def\XKV@resa{#1}% \XKV@ifundefined{ver@xkvltxp.sty}{}{% \@onelevel@sanitize\XKV@resa }% \@expandtwoargs\@removeelement{\XKV@resa}% {\@unusedoptionlist}\@unusedoptionlist } \DeclareOptionX*{% \PackageWarning{xkeyval}{Unknown option `\CurrentOption'}% } \ProcessOptionsX \XKVcatcodes \endinput %% %% End of file `xkeyval.sty'. rivet-1.8.3/data/texmf/tex/latex/pst-coil/0000755000175000017500000000000012116077756016567 5ustar sunsunrivet-1.8.3/data/texmf/tex/latex/pst-coil/pst-coil.sty0000644000175000017500000000043112116077756021060 0ustar sunsun\RequirePackage{pstricks} \ProvidesPackage{pst-coil}[2006/08/11 package wrapper for pst-coil.tex (hv)] \input{pst-coil.tex} \ProvidesFile{pst-coil.tex} [\filedate\space v\fileversion\space `pst-coil' (tvz)] \IfFileExists{pst-coil.pro}{\@addtofilelist{pst-coil.pro}}{}% \endinput rivet-1.8.3/data/texmf/tex/latex/xcolor/0000755000175000017500000000000012116077756016343 5ustar sunsunrivet-1.8.3/data/texmf/tex/latex/xcolor/xcolor.sty0000644000175000017500000015367012116077756020426 0ustar sunsun%% %% This is file `xcolor.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% xcolor.dtx (with options: `package') %% %% IMPORTANT NOTICE: %% %% For the copyright see the source file. %% %% Any modified versions of this file must be renamed %% with new filenames distinct from xcolor.sty. %% %% For distribution of the original source see the terms %% for copying and modification in the file xcolor.dtx. %% %% This generated file may be distributed as long as the %% original source files, as listed above, are part of the %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% \ProvidesPackage{xcolor} [2007/01/21 v2.11 LaTeX color extensions (UK)] %% %% ---------------------------------------------------------------- %% Copyright (C) 2003-2007 by Dr. Uwe Kern %% ---------------------------------------------------------------- %% %% Please send error reports and suggestions for %% improvements to the above email address. %% %% This package contains code copied from %% %% color.dtx [1999/02/16 v1.0i Standard LaTeX Color (DPC)] %% Copyright (C) 1994--1999 David Carlisle %% %% which is part of the Standard LaTeX `Graphics Bundle'. %% \NeedsTeXFormat{LaTeX2e} \expandafter\edef\csname XC@catcodes\endcsname {\catcode33 \the\catcode33 % ! \catcode34 \the\catcode34 % " \catcode39 \the\catcode39 % ' \catcode42 \the\catcode42 % * \catcode44 \the\catcode44 % , \catcode45 \the\catcode45 % - \catcode46 \the\catcode46 % . \catcode47 \the\catcode47 % / \catcode58 \the\catcode58 % : \catcode59 \the\catcode59 % ; \catcode60 \the\catcode60 % < \catcode61 \the\catcode61 % = \catcode62 \the\catcode62 % > \catcode63 \the\catcode63 % ? \catcode64 \the\catcode64 % @ \catcode94 \the\catcode94 % ^ \catcode96 \the\catcode96 % ` \catcode`\noexpand\^^A\the\catcode`\^^A\relax} \catcode64 11 % \@makeother\! \@makeother\" \@makeother\' \@makeother\* \@makeother\, \@makeother\- \@makeother\. \@makeother\/ \@makeother\: \@makeother\; \@makeother\< \@makeother\= \@makeother\> \@makeother\? \@makeother\` \catcode94 7 % \catcode`\^^A=14 % \edef\XC@@{\expandafter\noexpand\csname\string\XC@@\endcsname} \newif\ifcolors@ \colors@true \newif\ifcolorerrors@ \newif\ifglobalcolors \globalcolorsfalse \newif\ifdefinecolors \definecolorstrue \newif\ifconvertcolorsD \newif\ifconvertcolorsU \newif\ifblendcolors \newif\ifmaskcolors \newif\ifXC@@fbox \XC@@fboxtrue \newif\ifXC@@tst \def\c@lor@error#1% {\ifcolorerrors@\PackageError{xcolor}{Undefined color #1}\@ehc \else\PackageWarning{xcolor}{Undefined color #1}\fi} \def\XC@append#1#2% {\ifx#1\@undefined\def#1{#2}\else\ifx#1\relax\def#1{#2}\else \toks@\expandafter{#1#2}\edef#1{\the\toks@}\fi\fi} \def\XC@let@cc#1{\expandafter\XC@let@Nc\csname#1\endcsname} \providecommand*\@namelet[1]{\expandafter\XC@let@Nc\csname#1\endcsname} \def\XC@let@Nc#1#2{\expandafter\let\expandafter#1\csname#2\endcsname} \def\XC@let@cN#1{\expandafter\let\csname#1\endcsname} \def\@namexdef#1{\expandafter\xdef\csname #1\endcsname} \def\aftergroupdef#1#2% {\expandafter\endgroup\expandafter\def\expandafter#1\expandafter{#2}} \def\aftergroupedef#1#2% {\edef\@@tmp{\def\noexpand#1{#2}}\expandafter\endgroup\@@tmp} \begingroup \catcode`\!=13 \catcode`\:=13 \catcode`\-=13 \catcode`\+=13 \catcode`\;=13 \catcode`\/=13 \catcode`\"=13 \catcode`\>=13 \gdef\XC@edef#1#2% {\begingroup \ifnum\catcode`\!=13 \edef!{\string!}\fi \ifnum\catcode`\:=13 \edef:{\string:}\fi \ifnum\catcode`\-=13 \edef-{\string-}\fi \ifnum\catcode`\+=13 \edef+{\string+}\fi \ifnum\catcode`\;=13 \edef;{\string;}\fi \ifnum\catcode`\"=13 \edef"{\string"}\fi \ifnum\catcode`\>=13 \edef>{\string>}\fi \edef#1{#2}\@onelevel@sanitize#1\aftergroupdef#1#1} \gdef\XC@mdef#1#2% {\begingroup \ifnum\catcode`\/=13 \edef/{\string/}\fi \ifnum\catcode`\:=13 \edef:{\string:}\fi \edef#1{#2}\@onelevel@sanitize#1\aftergroupdef#1#1} \endgroup \def\XC@sdef#1#2{\edef#1{#2}\@onelevel@sanitize#1} \def\@ifxempty#1{\@@ifxempty#1\@@ifxempty\XC@@} \def\@@ifxempty#1#2\XC@@ {\ifx#1\@@ifxempty \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} \long\def\XC@ifxcase#1#2#3% {\long\def\@@tmp##1##2% {\ifx#1##1% \toks@{##2}\expandafter\remove@to@nnil\else\expandafter\@@tmp\fi}% \@@tmp#2#1{#3}\@nnil\the\toks@} \long\def\XC@ifcase#1#2#3% {\long\def\@@tmp##1##2% {\@expandtwoargs\in@{,#1,}{,##1,}\ifin@ \toks@{##2}\expandafter\remove@to@nnil\else\expandafter\@@tmp\fi}% \@@tmp#2{#1}{#3}\@nnil\the\toks@} \def\XC@@opt{,} \def\@ifXCopt#1% {\@expandtwoargs\in@{,#1,}{\XC@@opt}% \ifin@\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} \let\XC@@pkg\relax \let\XC@declareoption\@declareoption \long\def\@declareoption#1#2% {\XC@declareoption{#1}{\edef\XC@@opt{\XC@@opt#1,}#2}} \def\selectcolormodel#1% {\@ifundefined{XC@mod@#1}% {\c@lor@error{target model `#1'}}% {\expandafter\ifx\csname XC@mod@#1\endcsname\XC@mod@natural \def\XC@tgt@mod##1{##1}\convertcolorsDfalse\convertcolorsUfalse \else\expandafter\ifx\csname XC@mod@#1\endcsname\XC@mod@named \c@lor@error{target model `#1'} \else \edef\XC@tgt@mod##1{#1}\convertcolorsDtrue\convertcolorsUtrue \fi\fi}} \@tfor\@@tmp:={Hsb}{tHsb}{ignore}{named}{ps}{wave}\do {\expandafter\XC@sdef\csname XC@mod@\@@tmp\endcsname{\@@tmp}} \@tfor\@@tmp:={natural}{rgb}{cmy}{cmyk}{hsb}{gray}{RGB}{HTML}{HSB}{Gray}\do {\expandafter\XC@sdef\csname XC@mod@\@@tmp\endcsname{\@@tmp}% \edef\@@tmp {\noexpand\DeclareOption{\@@tmp}{\noexpand\selectcolormodel{\@@tmp}}}% \@@tmp} \DeclareOption{monochrome} {\ExecuteOptions{hideerrors}% \AtEndOfPackage {\colors@false \def\set@color{\c@lor@special\m@ne {color push \current@color}\aftergroup\reset@color}% \def\reset@color{\c@lor@special\m@ne{color pop}}% \def\set@page@color{\c@lor@special\m@ne{background \current@color}}}} \let\XC@@names\relax \providecommand*\colornameprefix{XC@} \let\XC@@nameprefix\colornameprefix \def\XC@declarenames#1#2#3% {\DeclareOption{#1}{\XC@append\XC@@names {#3\definecolorstrue\input{#2.def}\definecolorstrue \let\colornameprefix\XC@@nameprefix}} \DeclareOption{#1*}{\XC@append\XC@@names {#3\definecolorsfalse\input{#2.def}\definecolorstrue \let\colornameprefix\XC@@nameprefix}}} \XC@declarenames{dvipsnames}{dvipsnam}{\let\colornameprefix\@empty} \XC@declarenames{svgnames}{svgnam}{} \XC@declarenames{x11names}{x11nam}{} \XC@declarenames{hksnames}% {hks\ifcase\paperquality k\or n\or k\or z\else n\fi nam}{} \XC@declarenames{pmsnames}{pmsnam}{} \XC@declarenames{ralnames}{ralnam}{} \DeclareOption{table}{\XC@append\XC@@pkg{\RequirePackage{colortbl}}} \DeclareOption{fixpdftex}{\XC@append\XC@@pkg{\RequirePackage{pdfcolmk}}} \DeclareOption{hyperref} {\@tfor\@@tmp:={cite}{file}{link}{menu}{page}{run}{url}\do {\expandafter\edef\csname KV@Hyp@x\@@tmp bordercolor\endcsname #1% {\noexpand\XC@bordercolor{\@@tmp}{#1}}}% \AtEndOfPackage {\GetGinDriver\def\KV@Hyp@xpdfborder#1{\edef\@pdfborder{#1}}% \@tfor\@@tmp:={dvips}\do {\ifx\GinDriver\@@tmp \def\KV@Hyp@xpdfborder#1% {\edef\@pdfborder{#1}\expandafter\XC@pdfborder\@pdfborder\relax}% \@break@tfor\fi}}} \providecommand*\Gin@driver{} \@tfor\@@tmp:={dvipdf}{dvipdfm}{dvipdfmx}{dvips}{dvipsone}{dviwin}% {emtex}{pctex32}{pctexhp}{pctexps}{pctexwin}{pdftex}% {tcidvi}{textures}{truetex}{vtex}{xetex}\do {\edef\@@tmp{\noexpand\DeclareOption{\@@tmp}% {\def\noexpand\Gin@driver{\@@tmp.def}}}% \@@tmp} \DeclareOption{dviwindo}{\ExecuteOptions{dvipsone}} \DeclareOption{oztex}{\ExecuteOptions{dvips}} \DeclareOption{xdvi}{\ExecuteOptions{dvips,monochrome}} \DeclareOption{xcdraw}{\def\XC@@xcd@{1}} \DeclareOption{noxcdraw}{\def\XC@@xcd@{-1}} \DeclareOption{fixinclude}{\def\XC@@xcf@{1}} \DeclareOption{prologue}{\def\XC@@xcp@{1}} \DeclareOption{kernelfbox}{\XC@@fboxfalse} \DeclareOption{showerrors}{\colorerrors@true} \DeclareOption{hideerrors}{\colorerrors@false} \DeclareOption{debugshow}{\catcode`\^^A=9 \let\GDebug\typeout} \DeclareOption*% {\PackageInfo{xcolor}{Package option `\CurrentOption' ignored}} \def\XC@@xcd@{-1} \def\XC@@xcf@{-1} \def\XC@@xcp@{-1} \ExecuteOptions{natural,showerrors} \InputIfFileExists{color.cfg}{}{} \let\@declareoption\XC@declareoption \ProcessOptions\relax \edef\Gin@driver{\Gin@driver} \if!\Gin@driver! \PackageError{xcolor} {No driver specified} {You should make a default driver option in a file \MessageBreak color.cfg\MessageBreak eg: \protect\ExecuteOptions{dvips}} \else \PackageInfo{xcolor}{Driver file: \Gin@driver} \@ifundefined{ver@\Gin@driver}{\input{\Gin@driver}}{} \def\@@tmp#1.def{\def\XC@@drv{#1}} \expandafter\@@tmp\Gin@driver \fi \count@\XC@@xcd@ \advance\count@\XC@@xcf@ \advance\count@\XC@@xcp@\relax \ifnum\count@>-3 \XC@ifcase\XC@@drv {{dvips,pctex32}% {\def\@tempa{0} \def\XC@special#1{\special{ps:XC!b}\special{"#1}\special{ps:XC!e}}}% {pdftex}% {\def\@tempa{1} \def\XC@special#1{\pdfliteral{ q #1 Q }}}% {dvipdfm}% {\def\@tempa{1} \def\XC@special#1{\special{pdf: content #1}}}% }{\def\@tempa{-1}} \ifnum\XC@@xcd@>\m@ne\let\XC@@xcd@\@tempa\fi \ifnum\XC@@xcf@>\m@ne\let\XC@@xcf@\@tempa\fi \ifnum\XC@@xcp@>\m@ne\let\XC@@xcp@\@tempa\fi \ifnum\@tempa=0 \AtBeginDvi{\special{header=xcolor.pro}}\fi \ifcase\XC@@xcf@ \AtBeginDvi{\special{! XCfixnormalscale}} \fi \ifcase\XC@@xcp@ \AtBeginDvi{\special{header=\jobname.xcp}} \newwrite\XC@@xcp\immediate\openout\XC@@xcp=\jobname.xcp \immediate\write\XC@@xcp{\@percentchar!} \immediate\write\XC@@xcp{TeXDict begin} \AtEndDocument {\immediate\write\XC@@xcp{end}\immediate\closeout\XC@@xcp} \fi \fi \@namedef{ver@color.sty}{1999/02/16} \XC@@pkg \long\def\@secondoffive#1#2#3#4#5{#2} \long\def\@thirdoffive#1#2#3#4#5{#3} \def\xglobal{\xglobal@stop\begingroup\futurelet\@@tok\xglobal@test} \def\xglobal@test {\expandafter\@tfor\expandafter\@@tmp \expandafter:\expandafter=\xglobal@list\do {\expandafter\ifx\@@tmp\@@tok \aftergroup\let\aftergroup\xglobal@\@break@tfor\fi}% \endgroup\global} \def\xglobal@stop{\let\xglobal@\@empty} \xglobal@stop \def\xglobal@list {\definecolor\definecolors\definecolorset\colorlet\providecolor \providecolors\providecolorset\blendcolors\maskcolors \substitutecolormodel} \def\xglobalize@#1{\ifx\xglobal@\global\global\let#1#1\fi} \def\GetGinDriver {\@tempswafalse \@tfor\@@tmp:={dvips}{pdftex}{dvipdf}{dvipdfm}{dvipsone}{vtex}{textures}% \do{\ifx\XC@@drv\@@tmp\@tempswatrue\@break@tfor\fi}% \edef\GinDriver{\if@tempswa\XC@@drv\else hypertex\fi}} \def\@hex@Hex#1{\ifx#1\relax\else\expandafter\@hex@@Hex\expandafter#1\fi} \def\@hex@@Hex#1% {\if a#1A\else \if b#1B\else \if c#1C\else \if d#1D\else \if e#1E\else \if f#1f\else #1\fi\fi\fi\fi\fi\fi \@hex@Hex} \def\XC@strip@comma#1,#2% {\ifx,#2% #1\expandafter\remove@to@nnil\else#1 \expandafter\XC@strip@comma\fi #2} {\catcode`Q=3 \gdef\XC@replace#1#2#3% {\begingroup \def\XC@repl@ce##1#2##2Q##3% {\@ifxempty{##2}{\XC@r@pl@ce##1Q}{\XC@repl@ce##1##3##2Q{##3}}}% \def\XC@r@pl@ce##1\@empty Q% {\expandafter\endgroup\expandafter\def\expandafter#1\expandafter{##1}}% \expandafter\XC@repl@ce\expandafter\@empty #1\@empty#2Q{#3}} } \def\XC@clean#1% {\edef#1{ #1 }% \XC@cle@n#1,{ }\XC@cle@n#1{. }{ }\XC@cle@n#1{ },% \edef#1{\expandafter\@gobbletwo#1}} \def\XC@cle@n#1#2#3% {\def\XC@cl@@n##1#2##2{#3##1\ifx##2\@empty\else\expandafter\XC@cl@@n\fi##2}% \edef#1{\expandafter\XC@cl@@n#1#2\@empty}}% \def\rdivide#1#2% {\begingroup\toks@{#1}\edef\@@tmp{\noexpand\@tempdima\the#1}% \@defaultunits\@tempdimb=#2pt\relax\@nnil \@@tmp\relax \ifdim\@tempdima<\z@ \@tempdima-\@tempdima\def\@sign{-}\else \def\@sign{}\fi \ifdim\@tempdimb<\z@ \@tempdimb-\@tempdimb\edef\@sign{\@sign-}\fi \ifdim\@tempdima<.1\maxdimen \ifdim\@tempdimb<.01\maxdimen \lshift\@tempdima \lshift\@tempdimb \fi\fi \@tempcnta=\@tempdima \@tempcntb=\@tempdimb \count@=\@tempcnta \divide\count@\@tempcntb \edef\@@tmp{\number\count@.}% \@tempswatrue \@rdivide \@rdivide \@rdivide \@rdivide \@rdivide \@tempswafalse \@rdivide \dimen@\@@tmp\p@ \ifnum\count@>4\advance\dimen@1sp\fi \dimen@\@sign\dimen@ \edef\@@tmp{\the\toks@\the\dimen@}% \expandafter\endgroup\@@tmp} \def\@rdivide {\multiply\count@\@tempcntb \advance\@tempcnta-\count@ \multiply\@tempcnta10 \count@=\@tempcnta \divide\count@\@tempcntb \if@tempswa\edef\@@tmp{\@@tmp\number\count@}\fi} \def\rmultiply#1#2% {\begingroup \edef\@@mul{#2}\@tempdima\the#1\relax \afterassignment\@tempdimb\@tempcntb=\@@mul\p@ \ifdim\@tempdima<\z@ \@tempdima-\@tempdima\def\@sign{-}\else \def\@sign{}\fi \ifnum\@tempcntb<\z@ \@tempcntb-\@tempcntb\edef\@sign{\@sign-}\fi \lshift\@tempdima \dimen@\z@ \expandafter\@rmultiply\@@mul.0.\@nil \advance\dimen@\@tempcntb\@tempdima \rshift\dimen@ \dimen@\@sign\dimen@ \edef\@@tmp{#1\the\dimen@}% \expandafter\endgroup\@@tmp} \def\@rmultiply#1.#2.#3\@nil {\def\@@tmp{}% \@tfor\@@mul:=#2\do {\edef\@@tmp {\advance\dimen@\@@mul\@tempdima \divide\dimen@10 \@@tmp}}% \@@tmp} \def\lshift#1{#1\expandafter\lshift@\the#1} \def\llshift#1{\lshift#1\lshift#1} \def\lshiftnum#1{\expandafter\lshiftnum@#1.00.:} \def\lshiftnum@#1.#2#3.#4:{#1#2\ifnum0#3>\z@.#3\fi} \def\llshiftnum#1{\expandafter\llshiftnum@#1\@empty.00.:} \def\llshiftnum@#1.#2#3#4.#5:% {#1#2\ifnum0#3>\z@#3\else0\fi\ifnum0#4>\z@.#4\fi} \def\lshiftset#1#2{\edef\@@XC{\noexpand\lshiftnum{#2}}#1\@@XC\p@} \def\llshiftset#1#2{\edef\@@XC{\noexpand\llshiftnum{#2}}#1\@@XC\p@} \def\rshift#1{#1\expandafter\rshift@\the#1} \def\rrshift#1{\rshift#1\rshift#1} \begingroup \catcode`P=12 \catcode`T=12 \lowercase {\def\@@tmp{\def\lshift@##1.##2##3PT{##1##2\ifnum0##3>\z@.##3\fi\p@} \def\rshift@##1.##2PT{\rshift@@##1\relax##2\p@}}} \expandafter\endgroup\@@tmp \def\rshift@@#1#2% {\ifx#2\relax.#1\else#1\expandafter\rshift@@\expandafter#2\fi} \def\XC@inflate#1#2#3#4% {\edef#4{#2,\ifx#1\XC@mod@cmyk #3\else \ifx#1\XC@mod@gray ,,,#3,,,\else ,#3,\fi\fi}} \def\XC@vec#1,#2,#3,#4,#5,#6,#7,#8,#9% {\def\@@tmp{}% \XC@vec@{#1}{#5}% \ifx,#2,\else \XC@vec@{#2}{#6}\XC@vec@{#3}{#7}\ifx,#4,\else\XC@vec@{#4}{#8}\fi\fi \aftergroupdef#9\@@tmp} \def\XC@vec@@{\edef\@@tmp{\ifx\@@tmp\@empty\else\@@tmp,\fi\strip@pt\dimen@}} \def\XC@add{\begingroup \let\XC@vec@\XC@add@ \XC@vec} \def\XC@add@#1#2% {\llshiftset\dimen@{#1}\llshiftset\@tempdima{#2}% \advance\dimen@\@tempdima \rrshift\dimen@ \XC@vec@@} \def\XC@sub{\begingroup \let\XC@vec@\XC@sub@ \XC@vec} \def\XC@sub@#1#2{\XC@add@{#1}{-#2}} \def\XC@mul{\begingroup \let\XC@vec@\XC@mul@ \XC@vec} \def\XC@mul@#1#2% {\llshiftset\dimen@{#1}\rmultiply\dimen@{#2}\rrshift\dimen@ \XC@vec@@} \def\XC@mix% {\begingroup \@tempdima\dimen@ \@tempdimb100\p@ \advance\@tempdimb-\@tempdima \let\XC@vec@\XC@mix@ \XC@vec} \def\XC@mix@#1#2% {\dimen@#1\@tempdima \advance\dimen@#2\@tempdimb \rrshift\dimen@ \XC@vec@@} \def\XC@calc@#1,#2,#3,#4,#5:#6% {\XC@let@Nc\@@cmd{XC@calc#6}\@@cmd{#1}\@@tmp \ifx,#2,\else \@@cmd{#2}\@tempa\@@cmd{#3}\@tempb \ifx,#4,% \edef\@@tmp{\@@tmp,\@tempa,\@tempb}\else \@@cmd{#4}\@tempc\edef\@@tmp{\@@tmp,\@tempa,\@tempb,\@tempc}\fi\fi} \def\XC@calcC#1#2% {\llshiftset\dimen@{-#1}\advance\dimen@100\p@ \rrshift\dimen@ \XC@calcN{\strip@pt\dimen@}#2} \def\XC@calcD{\XC@c@lcD\@@scl{}} \def\XC@c@lcD#1#2#3#4% {\dimen@#3\p@ \rdivide\dimen@{#1}\edef#4{\strip@pt\dimen@#2}} \def\XC@calcF#1#2% {\edef#2{#1}\expandafter\XC@c@lcF#2.0.:#2} \def\XC@c@lcF#1.#2.#3:#4% {\edef#4{\XC@c@@cR#200000:}% \dimen@#1.5\p@ \afterassignment\dimen@\count@=\the\dimen@ \edef#4% {\ifnum#4>0 \ifnum\count@=0 \ifdim#1.5\p@<\z@ -\fi\fi\fi \number\count@.#4}} \def\XC@calcH#1#2% {\count@#1 \divide\count@\sixt@@n \edef\XC@@tmp{\hexnumber@\count@}% \multiply\count@-\sixt@@n \advance\count@#1 \edef#2{\XC@@tmp\hexnumber@\count@}} \def\XC@calcM#1#2% {\dimen@#1\p@ \dimen@\@@scl\dimen@ \advance\dimen@.5\p@ \afterassignment\dimen@\count@=\the\dimen@ \edef#2{\number\count@}} \def\XC@calcN#1#2% {\XC@calcR{#1}#2\edef#2{\expandafter\XC@c@lcN#200000:}} \def\XC@c@lcN#1.#200000#3:{#1\ifnum0#2=0 \else.#2\fi} \def\XC@calcR#1#2{\edef#2{#1}\edef#2{\expandafter\XC@c@lcR#2.0.:}} \def\XC@c@lcR#1.#2.#3:% {\ifnum#10>0 1.00000\else 0.\ifnum#11<0 00000\else \XC@c@@cR#200000:\fi\fi} \def\XC@c@@cR#1#2#3#4#5#6:{#1#2#3#4#5} \def\XC@calcS{\XC@c@lcS\@@scl{}} \def\XC@c@lcS#1#2#3#4% {\lshiftset\dimen@{#3}% \ifdim#1\p@<100\p@ \dimen@\lshiftnum#1\dimen@ \rrshift\dimen@ \else \dimen@#1\dimen@ \rshift\dimen@ \fi \edef#4{\strip@pt\dimen@#2}} \def\XC@calcT#1#2% {\lshiftset\dimen@{#1}\advance\dimen@\lshiftnum\@@arg\p@ \rshift\dimen@ \edef#2% {\ifdim\dimen@>\p@1\else\ifdim\dimen@<\z@0\else\strip@pt\dimen@\fi\fi}} \def\XC@calcU#1#2% {\dimen@#1\p@ \ifdim\dimen@=\p@\else \afterassignment\dimen@\count@=\the\dimen@ \relax\ifdim\dimen@=\z@\else \ifdim#1\p@<\z@ \dimen@-\dimen@ \advance\dimen@\p@ \fi \fi \fi \edef#2{\strip@pt\dimen@}} \providecommand*\rangeRGB{255} \providecommand*\rangeHSB{240} \providecommand*\rangeHsb{360} \providecommand*\rangetHsb{60,30;120,60;180,120;210,180;240,240} \providecommand*\rangeGray{15} \providecommand*\adjustUCRBG{1,1,1,1} \providecommand*\paperquality{1} \providecommand*\colorseriescycle{16} \def\XC@clr@rgb@white{1,1,1} \def\XC@clr@cmy@white{0,0,0} \def\XC@clr@cmyk@white{0,0,0,0} \def\XC@clr@hsb@white{\@@hue,0,1} \def\XC@clr@hsb@gray{\@@hue,0,0.5} \def\XC@clr@hsb@black{\@@hue,0,0} \def\XC@clr@gray@white{1} \@tfor\@@tmp:={grad}{last}{step}\do {\XC@let@cN{XC@met@\@@tmp}\@@tmp} \def\definecolor{\@testopt{\XC@definecolor}{}} \def\XC@definecolor[#1]#2% {\@testopt{\XC@definec@lor[#1]{#2}}\colornameprefix} \def\XC@definec@lor[#1]#2[#3]#4#5% {\begingroup \XC@sdef\@@cls{#1}\XC@edef\@@nam{#2}\edef\colornameprefix{#3}% \XC@logdef\@@nam \XC@getmodclr02{#4}{#5}{\let\@@tmp\relax}% {\ifx\@@mod\XC@mod@named \XC@c@l@rlet\@@nam\@@clr \else \ifx\@@cls\XC@mod@ps \edef\@@drv{\@@mod\space\@@clr}\def\@@hue{0}% \edef\@@clr{\@nameuse{XC@clr@\@@mod @white}}% \else \ifconvertcolorsD \let\@@tmp\@@mod\XC@sdef\@@mod{\XC@tgt@mod\@@tmp}% \convertcolorspec\@@tmp\@@clr\@@mod\@@clr \fi \XC@coremodel\@@mod\@@clr \csname color@\@@mod\expandafter\endcsname \expandafter\@@drv\expandafter{\@@clr}% \ifcase\XC@@xcp@ \immediate\write\XC@@xcp{/\colornameprefix\@@nam{\expandafter \XC@strip@comma\@@clr,,\@nnil}XC\@@mod}% \let\@@cls\XC@mod@named \fi \ifx\@@cls\@empty\else \let\@@tmp\@@cls \@nameuse{define@color@\@@cls}\@@nam\@@drv \csname color@\@@tmp\expandafter\endcsname \expandafter\@@drv\expandafter{\@@nam}% \fi \fi \toks@\expandafter{\@@drv}% \edef\@@tmp {\ifglobalcolors\global\else\xglobal@\fi \noexpand\@namedef{\string\color@\@@nam}% {\noexpand\xcolor@{\@@cls}{\the\toks@}{\@@mod}{\@@clr}}}% \fi}% \expandafter\endgroup\@@tmp\xglobal@stop} \def\XC@getmodclr#1#2#3#4% {\ifnum\ifcase#1 \ifXC@@getmod1\else0 \fi \or1 \fi>0 \XC@mdef\@@mod{#3}\expandafter\XC@getmod\@@mod////////\XC@@ \@ifundefinedmodel\@@Mod{\let\@@Mod\XC@mod@ignore}{}\fi \@ifundefined{XC@mod@\@@mod}% {\c@lor@error{model `\@@mod'}\@firstoftwo}% {\ifcase#2\else \XC@mdef\@@clr{#4}% \edef\@@clr{\expandafter\XC@getclr\@@clr////////\XC@@}% \ifx\@@cls\XC@mod@ps\else\XC@clean\@@clr\fi \ifx\@@Mod\XC@mod@ignore\else \convertcolorspec\@@mod\@@clr\@@Mod\@@clr \ifnum#2>1 \let\@@mod\@@Mod\fi \fi \fi \@secondoftwo}} \def\XC@getmod#1/#2/#3/#4/#5/#6/#7/#8/#9\XC@@ {\XC@g@tm@d0#1::\XC@@ \XC@getm@d1{#2}\XC@getm@d2{#3}% \XC@getm@d3{#4}\XC@getm@d4{#5}\XC@getm@d5{#6}\XC@getm@d6{#7}% \XC@getm@d7{#8}\def\XC@@pos{0}\def\@@mod{#1}\@gobble\@nnil}% \def\XC@getm@d#1#2% {\edef\XC@@pos{#2}\XC@sdef\@@mod{\XC@tgt@mod\XC@@pos}% \ifx\XC@@pos\@@mod\def\XC@@pos{#1}\expandafter\remove@to@nnil\fi}% \def\XC@g@tm@d#1#2:#3:#4\XC@@ {\@ifxempty{#3}{\let\@@Mod\XC@mod@ignore\XC@getm@d0{#2}}% {\def\@@Mod{#2}\XC@getm@d0{#3}}}% \def\XC@getclr#1/#2/#3/#4/#5/#6/#7/#8/#9\XC@@ {\ifcase\XC@@pos\space #1\or#2\or#3\or#4\or#5\or#6\or#7\or#8\fi} \newif\ifXC@@getmod \XC@@getmodtrue \let\xdefinecolor\definecolor \def\providecolor{\@testopt{\XC@providecolor}{}} \def\XC@providecolor[#1]#2% {\@testopt{\XC@providec@lor[#1]{#2}}\colornameprefix} \def\XC@providec@lor[#1]#2[#3]% {\XC@edef\XC@@tmp{#2}% \@ifundefinedcolor\XC@@tmp{\XC@definecolor[#1]{#2}[#3]}% {\ifnum\XC@tracing>0 \PackageInfo{xcolor}{Ignoring color definition `\XC@@tmp'}\fi \@gobbletwo}} \def\xcolor@#1#2#3#4{#2} \def\colorlet{\@testopt{\XC@colorlet}{}} \def\XC@colorlet[#1]#2{\@testopt{\XC@col@rlet[#1]{#2}}{}} \def\XC@col@rlet[#1]#2[#3]#4% {\begingroup \edef\@@cls{#1}\XC@edef\@@nam{#2}\XC@sdef\@@mod{#3}\XC@edef\@@clr{#4}% \XC@info\@@clr\@@tmp\XC@@tstfalse \ifnum\@@tmp=\@ne\ifx\@@mod\@empty \ifx\@@cls\@empty \XC@@tsttrue \else \edef\@@tmp {\expandafter\expandafter\expandafter\@secondoffive \csname\string\color@\@@clr\endcsname}% \ifx\@@cls\@@tmp\XC@@tsttrue\fi \fi \fi\fi \ifXC@@tst \XC@logdef\@@nam\XC@c@l@rlet\@@nam\@@clr \else \extractcolorspec\@@clr\@@clr \ifx\@@mod\@empty\else \expandafter\convertcolorspec\@@clr\@@mod\@@clr \edef\@@clr{{\@@mod}{\@@clr}}\fi \edef\@@tmp{\noexpand\XC@definecolor[\@@cls]{\@@nam}\@@clr}% \fi \expandafter\endgroup\@@tmp\xglobal@stop} \def\XC@c@l@rlet#1#2% {\@ifundefinedcolor{#2}% {\c@lor@error{`#2'}\let\@@tmp\@empty}% {\edef\@@tmp {\ifglobalcolors\global\else\xglobal@\fi \noexpand\XC@let@cc{\string\color@#1}{\string\color@#2}}}} \def\DefineNamedColor#1% {\@nameuse{XC@\ifdefinecolors defin\else prepar\fi ecolor}[#1]} \def\preparecolor{\@testopt{\XC@preparecolor}{}} \def\XC@preparecolor[#1]#2% {\@testopt{\XC@preparec@lor[#1]{#2}}\colornameprefix} \def\XC@preparec@lor[#1]#2[#3]#4#5% {\XC@sdef\@@cls{#1}\XC@edef\@@nam{#2}% \XC@getmodclr01{#4}{#5}{}% {\xdef\XC@@stack {\ifx\XC@@stack\@empty\else\XC@@stack,\fi{#1}{\@@nam}{#3}% {\ifx\@@Mod\XC@mod@ignore\@@mod\else\@@Mod\fi}{\@@clr}}}} \let\XC@@stack\@empty \def\definecolors#1% {\let\XC@@cmd\definecolor\let\XC@@glb\xglobal@ \expandafter\XC@definecolors#1,,} \def\XC@definecolors#1,% {\@ifxempty{#1}{}{\expandafter\XC@definec@lors#1=#1=:\XC@definecolors}} \def\XC@definec@lors#1=#2=#3:% {\XC@edef\@@nam{#1}\XC@edef\@@arg{#2}% \let\next\XC@definec@l@rs\expandafter\next\XC@@stack,,\@nnil} \def\XC@definec@l@rs#1,% {\ifx,#1,\let\next\remove@to@nnil\else\XC@defin@c@l@rs#1\fi\next} \def\XC@defin@c@l@rs#1#2#3#4#5% {\def\@@tmp{#2}% \ifx\@@tmp\@@arg \let\xglobal@\XC@@glb\XC@@cmd[#1]{\@@nam}[#3]{#4}{#5}% \let\next\remove@to@nnil \fi} \def\providecolors#1% {\let\XC@@cmd\providecolor\let\XC@@glb\xglobal@ \expandafter\XC@definecolors#1,,} \def\definecolorset {\let\XC@@cmd\definecolor\@testopt{\XC@definecolorset}{}} \def\XC@definecolorset[#1]#2#3#4#5% {\XC@getmodclr10{#2}{}{}% {\XC@@getmodfalse\XC@edef\XC@@tmp{#5}\let\XC@@glb\xglobal@ \def\XC@definec@lorset##1,##2;% {\@ifxempty{##1}{}% {\let\xglobal@\XC@@glb \XC@@cmd[#1]{#3##1#4}{\@@mod}{##2}\XC@definec@lorset}}% \expandafter\XC@definec@lorset\XC@@tmp;,;\XC@@getmodtrue}} \def\providecolorset {\let\XC@@cmd\providecolor\@testopt{\XC@definecolorset}{}} \def\preparecolorset {\ifdefinecolors\let\XC@@cmd\definecolor\else\let\XC@@cmd\preparecolor\fi \@testopt{\XC@definecolorset}{}} \def\definecolorseries#1#2#3% {\@testopt{\XC@definecolorseries{#1}{#2}{#3}}{}} \def\XC@definecolorseries#1#2#3[#4]#5% {\@testopt{\XC@definec@lorseries{#1}{#2}{#3}[#4]{#5}}{}} \def\XC@definec@lorseries#1#2#3[#4]#5[#6]#7% {\begingroup \XC@sdef\@@mod{#2}% \@ifxempty{#4}{\extractcolorspec{#5}\@@clr}{\edef\@@clr{{#4}{#5}}}% \expandafter\convertcolorspec\@@clr\@@mod\@@clr \@namexdef{\string\colorB@#1}{{\@@mod}{\@@clr}}% \edef\@@met{#3}% \ifx\@@met\XC@met@last \@ifxempty{#6}{\extractcolorspec{#7}\@@tmp}{\edef\@@tmp{{#6}{#7}}}% \expandafter\convertcolorspec\@@tmp\@@mod\@@tmp \XC@inflate\@@mod\@@tmp\@@clr\@@tmp \expandafter\XC@sub\@@tmp,\@@tmp \else \edef\@@tmp{#7}% \fi \@namexdef{\string\colorD@#1}{{\@@met}{\@@tmp}}% \endgroup} \def\resetcolorseries{\@testopt{\XC@resetcolorseries}{}} \def\XC@resetcolorseries[#1]#2% {\begingroup \@namexdef {\string\color@#2}{\noexpand\xcolor@{}{}\@nameuse{\string\colorB@#2}}% \XC@let@Nc\@@tmp{\string\colorD@#2}% \edef\@@met{\expandafter\@firstoftwo\@@tmp}% \edef\@@tmp{\expandafter\@secondoftwo\@@tmp}% \ifx\@@met\XC@met@step\else \edef\@@scl{\@ifxempty{#1}\colorseriescycle{#1}}% \expandafter\XC@calc@\@@tmp,,,,:D% \fi \@namexdef{\string\colorS@#2}{\@@tmp}% \endgroup} \def\XC@step#1% {\let\xcolor@\@gobbletwo\edef\@@tmp{\@nameuse{\string\color@#1}}% \expandafter\XC@st@p\@@tmp{#1}% \@namexdef{\string\color@#1}{\noexpand\xcolor@{}{}{\@@mod}{\@@tmp}}} \def\XC@st@p#1#2#3% {\def\@@mod{#1}\def\@@tmp{#2}\edef\@@vec{\@nameuse{\string\colorS@#3}}% \@whilenum\@tempcnta>\z@\do {\XC@inflate\@@mod\@@tmp\@@vec\@@tmp \expandafter\XC@add\@@tmp,\@@tmp \expandafter\XC@calc@\@@tmp,,,,:U% \advance\@tempcnta\m@ne}} \def\XC@stepabs#1% {\edef\@@tmp{\@nameuse{\string\colorB@#1}}% \expandafter\XC@st@p\@@tmp{#1}% \edef\@@tmp {\def\noexpand\@@mod{\@@mod}\def\noexpand\@@clr{\@@tmp}}} \def\blendcolors{\@ifstar{\XC@blendcolors\colorblend}{\XC@blendcolors{}}} \def\XC@blendcolors#1#2% {\edef\colorblend{#1}\XC@edef\XC@@tmp{#2}% \ifx\XC@@tmp\@empty \xglobal@\blendcolorsfalse \else \xglobal@\blendcolorstrue \expandafter\XC@blendc@lors\XC@@tmp!!\@nil \fi \xglobalize@\colorblend \xglobal@stop} \def\XC@blendc@lors!#1!#2!#3\@nil {\@ifxempty{#1}{}% {\@ifxempty{#2}% {\edef\colorblend{\colorblend!#1!white}}% {\edef\colorblend{\colorblend!#1!#2}\XC@blendc@lors!#3!\@nil}}} \blendcolors{} \def\maskcolors{\@testopt{\XC@maskcolors}{}} \def\XC@maskcolors[#1]#2% {\XC@edef\colormask{#2}% \ifx\colormask\@empty \xglobal@\maskcolorsfalse \def\XC@mmod{}\def\XC@mclr{}% \else \xglobal@\maskcolorstrue \extractcolorspecs\colormask\XC@mmod\XC@mclr \@ifxempty{#1}{}% {\convertcolorspec\XC@mmod\XC@mclr{#1}\XC@mclr \XC@sdef\XC@mmod{#1}}% \XC@coremodel\XC@mmod\XC@mclr \fi \xglobalize@\colormask \xglobalize@\XC@mmod \xglobalize@\XC@mclr \xglobal@stop} \maskcolors{} \DeclareRobustCommand\color {\@ifnextchar[\@undeclaredcolor\@declaredcolor} \def\@undeclaredcolor[#1]#2% {\begingroup \let\@@cls\@empty \XC@getmodclr12{#1}{#2}{}% {\ifblendcolors \ifx\colorblend\@empty\else \edef\@@mix{\expandafter\@gobble\colorblend}\@tempswafalse \XC@coremodel\@@mod\@@clr\@xcolor@{}{}\@@mod\@@clr \fi \fi \ifconvertcolorsU \edef\@@tmp{\XC@tgt@mod{\@@mod}}% \convertcolorspec\@@mod\@@clr\@@tmp\@@clr \let\@@mod\@@tmp \fi \ifmaskcolors \convertcolorspec\@@mod\@@clr\XC@mmod\@@clr \let\@@mod\XC@mmod \XC@inflate\@@mod\XC@mclr\@@clr\@@tmp \expandafter\XC@mul\@@tmp,\@@clr \fi \edef\@@tmp{\noexpand\XC@undeclaredcolor{\@@mod}{\@@clr}}% \expandafter\endgroup\@@tmp}} \def\XC@undeclaredcolor#1#2% {\@ifundefinedmodel{#1}% {\c@lor@error{model `#1'}}% {\@nameuse{color@#1}\current@color{#2}% \edef\XC@current@color{\noexpand\xcolor@{}{\current@color}{#1}{#2}}% \XC@display}} \def\@declaredcolor#1% {\XC@edef\XC@@tmp{#1}\XC@@tstfalse \ifcase\XC@type\XC@@tmp\relax \XC@@tsttrue\or \relax\else \ifblendcolors\XC@@tsttrue\fi \ifmaskcolors\XC@@tsttrue\fi \ifconvertcolorsU\XC@@tsttrue\fi \fi \ifXC@@tst \expandafter\XC@declaredcolor\else \expandafter\XC@declaredc@lor\fi} \def\XC@declaredcolor {\XC@split\XC@@tmp \edef\@@tmp{\noexpand\@undeclaredcolor[\@@mod]{\@@clr}}% \expandafter\endgroup\@@tmp} \def\XC@declaredc@lor {\XC@let@Nc\XC@current@color{\string\color@\XC@@tmp}% \edef\current@color{\XC@current@color}% \XC@display} \def\textcolor#1#{\@textcolor{#1}} \def\@textcolor#1#2#3{\protect\leavevmode{\color#1{#2}#3}} \def\pagecolor {\begingroup \let\ignorespaces\endgroup \let\set@color\set@page@color \color} \def\colorbox#1#{\protect\color@box{#1}} \def\color@box#1#2{\color@b@x\relax{\color#1{#2}}} \def\fcolorbox#1#{\color@fbox{#1}} \def\color@fbox#1#2#3#{\protect\color@fb@x{#1}{#2}{#3}} \def\color@fb@x#1#2#3#4% {\color@b@x{\fboxsep\z@\color#1{#2}\XC@fbox}% {\@ifxempty{#3}{\color#1}{\color#3}{#4}}} \long\def\color@b@x#1#2#3% {\leavevmode \setbox\z@\hbox{\kern\fboxsep{\set@color#3}\kern\fboxsep}% \dimen@\ht\z@\advance\dimen@\fboxsep\ht\z@\dimen@ \dimen@\dp\z@\advance\dimen@\fboxsep\dp\z@\dimen@ {#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}} \def\XC@frameb@x#1% {\hbox {\@tempdima\fboxrule \advance\@tempdima\fboxsep \advance\@tempdima\dp\@tempboxa \setbox\@tempboxa\hbox {\lower\@tempdima\hbox {\vbox {\kern\fboxrule \hbox{\kern\fboxrule#1% \vbox{\kern\fboxsep\box\@tempboxa\kern\fboxsep}% #1\kern\fboxrule}% \kern\fboxrule}}}% \@tempdima\wd\@tempboxa \edef\@tempa{{\the\@tempdima}{\the\ht\@tempboxa}{\the\dp\@tempboxa}}% \box\@tempboxa\kern-\@tempdima\expandafter\boxframe\@tempa}} \ifXC@@fbox \let\@frameb@x\XC@frameb@x \let\XC@fbox\fbox \else \def\XC@fbox{\let\@frameb@x\XC@frameb@x\fbox} \fi \ifnum\XC@@xcd@>\m@ne \def\XC@boxframe#1#2#3#4% {\hbox{\sbox\z@{\ifdim\fboxrule>\z@ #4\fi}% \wd\z@#1\relax\ht\z@#2\relax\dp\z@#3\relax\box\z@}} \fi \ifcase\XC@@xcd@ \providecommand*\color@block[3]% {{\set@color\hbox {\dimen@#3\edef\@tempa{ \number\dimen@\space}% \dimen@#2\edef\@tempa{ \number\dimen@\@tempa}% \dimen@#1\relax \XC@special{\number\dimen@\@tempa XCcolorblock}}}} \providecommand*\boxframe[3]% {\XC@boxframe{#1}{#2}{#3}% {\dimen@#3\edef\@tempa{ \number\dimen@\space}% \dimen@#2\edef\@tempa{ \number\dimen@\@tempa}% \dimen@#1\relax \XC@special{\number\fboxrule\space\number\dimen@\@tempa XCboxframe}}} \or \providecommand*\boxframe[3]% {\XC@boxframe{#1}{#2}{#3}% {\dimen@#3\edef\@tempa{ 0 -\strip@pt\dimen@\space}% \edef\@tempb{\advance\dimen@\the\dimen@}% \dimen@#2\advance\dimen@-\fboxrule\@tempb \edef\@tempb{ \strip@pt\dimen@\space re s}% \dimen@#1\advance\dimen@-\fboxrule \edef\@tempb{ cm\@tempa\strip@pt\dimen@\@tempb}% \dimen@.5\fboxrule\edef\@tempa{ \strip@pt\dimen@}% \XC@special {0.996264 0 0 0.996264 0 0 cm \strip@pt\fboxrule\space w [] 0 d 2 J 0 j 4 M 1 0 0 1\@tempa\@tempa\@tempb}}} \fi \providecommand*\color@block[3]% {{\set@color\rlap{\ifcolors@\vrule\@width#1\@height#2\@depth#3\fi}}} \providecommand*\boxframe[3]% {\hbox {\dimen@#2\advance\dimen@#3\relax \lower#3\vbox {\hrule\@height\fboxrule \@tempdima-0.5\fboxrule \ifodd\fboxrule\advance\@tempdima\m@ne sp\fi \kern\@tempdima \hbox {\advance\dimen@-\fboxrule \vrule\@width\fboxrule\@height\dimen@\@depth\z@ \@tempdima#1\advance\@tempdima-\tw@\fboxrule \kern\@tempdima \vrule\@width\fboxrule\@height\dimen@\@depth\z@}% \kern-0.5\fboxrule \hrule\@height\fboxrule}}} \def\@xcolor@#1#2#3#4% {\XC@sdef\@@mod{#3}\edef\@@clr{#4}% \ifx\@@mix\@empty\else\expandafter\@xcolor@@\@@mix!!!!\@nil\fi \if@tempswa \XC@let@Nc\@@tmp{XC@cnv@\@@mod @compl}% \ifx\@@tmp\relax \expandafter\XC@calc@\@@clr,,,,:C\else \expandafter\@@tmp\@@clr,\fi \let\@@clr\@@tmp \fi} \def\@xcolor@@#1!#2!#3!#4!#5\@nil {\dimen@\@ifxempty{#1}{100}{#1}\p@ \edef\@@mix{\@ifxempty{#2}{white}{#2}}% \ifdim\dimen@=100\p@ \expandafter\XC@postfix\@@mix]\relax \else\ifdim\dimen@=\z@ \extractcolorspecs\@@mix\@@mod\@@clr \else \XC@let@Nc\@@tmp{XC@clr@\@@mod @\@@mix}% \ifx\@@tmp\relax \extractcolorspec\@@mix\@@tmp \ifx\@@mod\XC@mod@gray \edef\@@mod{\expandafter\@firstoftwo\@@tmp}% \edef\@@tmp{\expandafter\@secondoftwo\@@tmp}% \convertcolorspec\XC@mod@gray\@@clr\@@mod\@@clr \else \expandafter\convertcolorspec\@@tmp\@@mod\@@tmp \fi \else \ifx\@@mod\XC@mod@hsb\expandafter\XC@extract@hue\@@clr:\@@hue\fi \fi \XC@inflate\@@mod\@@clr\@@tmp\@@tmp \expandafter\XC@mix\@@tmp,\@@clr \fi\fi \@ifxempty{#3}% {\@ifxempty{#4}{}{\@xcolor@@!#4!#5\@nil}}% {\@xcolor@@#3!#4!#5\@nil}} \def\XC@split#1% {\begingroup\XC@edef\@@tmp{#1}\expandafter\XC@split@i\@@tmp>>\@nnil} \def\XC@split@i#1>% {\def\@@tmp{#1}\XC@split@ii#1:\@nil \XC@func} \def\XC@split@ii#1:#2\@nil {\@ifxempty{#2}{\XC@split@vi}{\XC@split@iii#1,,:#2}} \def\XC@split@iii#1,#2,#3:#4:% {\edef\XC@@mod{#1}\let\@tempa\@empty \ifx,#2,\XC@@tsttrue\@tempdima\z@\else\XC@@tstfalse\@tempdima#2\p@\fi \XC@split@iv#4;,;} \def\XC@split@iv#1,#2;% {\@ifxempty{#1}% {\let\XC@@clr\@empty \@tempa \expandafter\XC@calc@\XC@@clr,,,,:U% \let\@@mod\XC@@mod \let\@@clr\@@tmp} {\XC@append\@tempa{\XC@split@v{#1}{#2}}% \ifXC@@tst\advance\@tempdima#2\p@\fi \XC@split@iv}} \def\XC@split@v#1#2% {\def\@@tmp{#1}\XC@split@vi \ifx\@@mod\XC@@mod\else \convertcolorspec\@@mod\@@clr\XC@@mod\@@clr \fi \dimen@#2\p@ \rdivide\dimen@\@tempdima \edef\@@scl{\strip@pt\dimen@}% \expandafter\XC@calc@\@@clr,,,,:S% \ifx\XC@@clr\@empty\let\XC@@clr\@@tmp\else \XC@inflate\XC@@mod\XC@@clr\@@tmp\@@tmp \expandafter\XC@add\@@tmp,\XC@@clr \fi} \def\XC@split@vi{\count@\z@ \expandafter\XC@split@vii\@@tmp!\@nil} \def\XC@split@vii#1% {\ifx#1-\advance\count@\@ne\expandafter\XC@split@vii \else\expandafter\XC@split@viii\expandafter#1\fi} \def\XC@split@viii#1!#2\@nil {\edef\@@nam{#1}\edef\@@mix{#2}% \ifodd\count@\@tempswatrue\else\@tempswafalse\fi \@ifundefinedcolor\@@nam {\c@lor@error{`\@@nam'}\def\@@nam{black}}{}% \let\xcolor@\@xcolor@\@nameuse{\string\color@\@@nam}} \def\XC@postfix#1#2]#3\relax {\begingroup \if[#1\@tempcnta#2\relax\XC@stepabs\@@nam \else\@tempcnta\z@ \@tfor\@@tok:=#1#2\do {\if+\@@tok\advance\@tempcnta\@ne \else\if-\@@tok\advance\@tempcnta\m@ne \else\@tempcnta\z@\expandafter\@break@tfor\fi\fi}% \ifnum\@tempcnta=\z@\relax\else\XC@step\@@nam\fi \let\@@tmp\@empty \fi\expandafter\endgroup\@@tmp} \def\XC@func#1>{\@ifxempty{#1}{\remove@to@nnil}{\XC@fun@#1,>\XC@func}} \def\XC@fun@#1,#2>{\@nameuse{XC@func@#1}#2,,>} \def\XC@func@wheel#1,#2,#3>{\XC@func@wh@el{#1}{#2}0} \def\XC@func@twheel#1,#2,#3>{\XC@func@wh@el{#1}{#2}1} \def\XC@func@wh@el#1#2#3% {\convertcolorspec\@@mod\@@clr {\ifcase#3 \XC@mod@Hsb\or\XC@mod@tHsb\fi}\@@clr \expandafter\XC@extract@hue\@@clr:\@@hue \dimen@#1\p@ \@ifxempty{#2}{}% {\rdivide\dimen@{#2}\lshift\dimen@ \dimen@\rangeHsb\dimen@\rshift\dimen@}% \advance\dimen@\@@hue\p@ \rdivide\dimen@\rangeHsb \edef\@@hue{\strip@pt\dimen@}\XC@calcU\@@hue\@@hue \ifcase#3 \expandafter\XC@replace@hue\@@clr:\@@hue,\@@clr \or \XC@c@lcS\rangeHsb{}\@@hue\@@hue \expandafter\XC@replace@hue\@@clr:\@@hue,\@@clr \convertcolorspec\XC@mod@tHsb\@@clr\XC@mod@hsb\@@clr \fi \let\@@mod\XC@mod@hsb} \def\XC@display {\XC@bcolor\XC@let@cN{\string\color@.}\XC@current@color \ifnum\XC@type{.}=1 \PackageWarning{xcolor}{Incompatible color definition}\else \ifnum\XC@tracing>2 \begingroup \let\xcolor@\@empty \def\@nil{\string\@nil}% \PackageInfo{xcolor}{Setting color `\XC@current@color'}% \endgroup \fi\fi \XC@mcolor\set@color\XC@ecolor\ignorespaces} \let\XC@bcolor\relax \let\XC@mcolor\relax \let\XC@ecolor\relax \def\XC@bordercolor#1#2% {\extractcolorspec{#2}\XC@@tmp \expandafter\convertcolorspec\XC@@tmp\XC@mod@rgb\XC@@tmp \expandafter\edef\csname @#1bordercolor\endcsname {\expandafter\XC@strip@comma\XC@@tmp,,\@nnil}} \def\XC@pdfborder#1 #2 #3\relax {\def\@@scl{80}\XC@calc@#1,#2,#3,,:S% \edef\@pdfborder{\expandafter\XC@strip@comma\@@tmp,,\@nnil}} \@ifXCopt{table}{% \def\rowcolors {\@ifstar{\@rowcmdfalse\rowc@lors}{\@rowcmdtrue\rowc@lors}} \def\rowc@lors{\@testopt{\rowc@l@rs}{}} \def\rowc@l@rs[#1]#2#3#4% {\global\rownum=\z@ \global\@rowcolorstrue \@ifxempty{#3}% {\def\@oddrowcolor{\@norowcolor}}% {\def\@oddrowcolor{\gdef\CT@row@color{\CT@color{#3}}}}% \@ifxempty{#4}% {\def\@evenrowcolor{\@norowcolor}}% {\def\@evenrowcolor{\gdef\CT@row@color{\CT@color{#4}}}}% \if@rowcmd \def\@rowcolors {#1\if@rowcolors \noalign{\relax\ifnum\rownum<#2\@norowcolor\else \ifodd\rownum\@oddrowcolor\else\@evenrowcolor\fi\fi}% \fi}% \else \def\@rowcolors {\if@rowcolors \ifnum\rownum<#2\noalign{\@norowcolor}\else #1\noalign{\ifodd\rownum\@oddrowcolor\else\@evenrowcolor\fi}\fi \fi}% \fi \CT@everycr{\@rowc@lors\the\everycr}% \ignorespaces} \def\@rowc@lors{\noalign{\global\advance\rownum\@ne}\@rowcolors} \let\@rowcolors\@empty \def\showrowcolors{\noalign{\global\@rowcolorstrue}\@rowcolors} \def\hiderowcolors{\noalign{\global\@rowcolorsfalse\@norowcolor}} \def\@norowcolor{\global\let\CT@row@color\relax} \@norowcolor \newif\if@rowcolors \newif\if@rowcmd \@ifundefined{rownum}{\newcount\rownum}{} \def\CT@extract#1\columncolor#2#3\@nil {\if!#2% \let\CT@column@color\@empty \else \if[#2% \expandafter\CT@extractb \else \XC@edef\XC@@tmp{#2}% \edef\CT@column@color{\noexpand\CT@color{\XC@@tmp}}% \expandafter\CT@extractd \fi {#1}#3\@nil \fi} }{} \def\extractcolorspec#1#2% {\XC@split{#1}\edef\@@tmp{{\@@mod}{\@@clr}}\aftergroupdef#2\@@tmp} \def\extractcolorspecs#1#2#3% {\extractcolorspec{#1}#3% \edef#2{\expandafter\@firstoftwo#3}% \edef#3{\expandafter\@secondoftwo#3}} \def\XC@extract@hue#1,#2:#3{\edef#3{#1}} \def\XC@replace@hue#1,#2:#3,#4{\edef#4{#3,#2}} \def\@ifundefinedcolor#1{\@ifundefined{\string\color@#1}} \def\@ifundefinedmodel#1{\@ifundefined{color@#1}} \def\XC@type#1% {\expandafter\expandafter\expandafter\XC@typ@ \csname\string\color@#1\endcsname\@empty\@empty\@empty\XC@@} \def\XC@typ@#1#2#3#4\XC@@ {\ifx#1\relax 0\else \ifx#1\xcolor@ \ifx$#2$% \ifx$#3$4\else3\fi\@gobbletwo \else2\fi\@gobbletwo \else1\fi \fi} \def\XC@info#1#2% {\XC@edef#2{#1}% \if.#2\def#2{0}\else\expandafter\in@\expandafter>\expandafter{#2}% \ifin@\def#2{4}\else\expandafter\in@\expandafter:\expandafter{#2}% \ifin@\def#2{3}\else\expandafter\in@\expandafter!\expandafter{#2}% \ifin@\def#2{2}\else\edef#2{\noexpand\in@{/-}{/#2}}#2% \edef#2{\ifin@2\else1\fi}\fi\fi\fi\fi} \def\tracingcolors{\begingroup\afterassignment\XC@tracingcolors\count@} \def\XC@tracingcolors{\aftergroupdef\XC@tracing{\the\count@}} \tracingcolors=0 \def\XC@logdef#1% {\ifnum\XC@tracing>1 \@ifundefinedcolor{#1}% {\ifnum\XC@tracing>2 \PackageInfo{xcolor}{Defining color `#1'}% \fi}% {\PackageInfo{xcolor}{Redefining color `#1'}}% \fi} \newenvironment*{testcolors}[1][rgb,cmyk,hsb,HTML]% {\let\@@nam\@empty\count@\z@ \@for\@@tmp:=#1\do {\advance\count@\@ne \XC@sdef\@@tmp{\@@tmp}\edef\@@nam{\@@nam{\@@tmp}}}% \edef\@@num{\the\count@}% \def\XC@@gt{\textgreater}\def\@@tmp{OT1}% \ifx\f@encoding\@@tmp \@expandtwoargs\in@{,\f@family,}{,cmtt,pcr,}% \ifin@\def\XC@@gt{>}\fi \fi \def\XC@@xcp@{-1}\ifnum\XC@tracing>1 \def\XC@tracing{1}\fi \def\testcolor{\@testopt{\@testcolor}{}}% \def\@testcolor[##1]##2% {\XC@mdef\@@mod{##1}\XC@edef\@@clr{##2}% \ifx\@@mod\@empty \let\@@arg\@@clr\XC@replace\@@arg>\XC@@gt\else \edef\@@arg{[\@@mod]{\@@clr}}\XC@definecolor[]{*}\@@mod\@@clr \def\@@clr{*}\fi \XC@append\@@arg{&}\extractcolorspecs\@@clr\@@mod\@@clr \@testc@lor}% \def\@testc@lor {\count@\z@ \expandafter\@tfor\expandafter\@@tmp\expandafter:\expandafter=\@@nam\do {\ifx\@@clr\@empty \edef\@@cmd{\noexpand\textbf{\@@tmp}}% \else \convertcolorspec\@@mod\@@clr\@@tmp\@@cmd \edef\@@cmd {\noexpand\@testc@l@r{\@@tmp}{\@@cmd}% \ifx\@@mod\@@tmp\noexpand\underline\fi {\expandafter\XC@strip@comma\@@cmd,,\@nnil}}% \fi \expandafter\XC@append\expandafter\@@arg\expandafter{\@@cmd}% \advance\count@\@ne \ifnum\count@=\@@num\XC@append\@@arg{\\}\else\XC@append\@@arg{&}\fi}% \@@arg}% \def\@testc@l@r##1##2% {\fboxsep\z@\fbox{\colorbox[##1]{##2}{\phantom{XX}}} }% \tabular{@{}l*{\@@num}{l}@{}}% \def\@@arg{\textbf{color}& }\let\@@clr\@empty\@testc@lor}% {\endtabular\ignorespacesafterend} \def\color@setgroup{\begingroup\set@color} \let\color@begingroup\begingroup \def\color@endgroup{\endgraf\endgroup} \def\color@hbox{\hbox\bgroup\color@begingroup} \def\color@vbox{\vbox\bgroup\color@begingroup} \def\color@endbox{\color@endgroup\egroup} \def\convertcolorspec#1#2#3#4% {\begingroup \XC@sdef\sm{#1}\XC@sdef\tm{#3}\edef\@@tmp{#2}% \ifx\sm\XC@mod@named\extractcolorspecs\@@tmp\sm\@@tmp\fi \ifx\sm\tm\else\csname XC@cnv@\sm\expandafter\endcsname\@@tmp,\fi \aftergroupdef#4\@@tmp} \def\XC@coremodel#1#2% {\XC@ifxcase#1% {\XC@mod@RGB {\convertcolorspec#1#2\XC@mod@rgb#2\let#1\XC@mod@rgb}% \XC@mod@HTML{\convertcolorspec#1#2\XC@mod@rgb#2\let#1\XC@mod@rgb}% \XC@mod@Hsb {\convertcolorspec#1#2\XC@mod@hsb#2\let#1\XC@mod@hsb}% \XC@mod@tHsb{\convertcolorspec#1#2\XC@mod@hsb#2\let#1\XC@mod@hsb}% \XC@mod@HSB {\convertcolorspec#1#2\XC@mod@hsb#2\let#1\XC@mod@hsb}% \XC@mod@Gray{\convertcolorspec#1#2\XC@mod@gray#2\let#1\XC@mod@gray}% \XC@mod@wave{\convertcolorspec#1#2\XC@mod@hsb#2\let#1\XC@mod@hsb}% \XC@mod@named{}% \XC@mod@ps{}}% {\expandafter\XC@calc@#2,,,,:N\let#2\@@tmp}} \def\XC@cnv@rgb#1,#2,#3,% {\XC@ifxcase\tm {\XC@mod@cmy {\XC@calc@#1,#2,#3,,:C}% \XC@mod@cmyk {\XC@calc@#1,#2,#3,,:C\expandafter\XC@cnv@cmy@cmyk\@@tmp,}% \XC@mod@RGB {\edef\@@scl{\rangeRGB}\XC@calc@#1,#2,#3,,:M}% \XC@mod@HTML{\edef\@@scl{\@cclv}\XC@calc@#1,#2,#3,,:M% \expandafter\XC@calc@\@@tmp,,:H% \expandafter\XC@cnv@rgb@HTML\@@tmp,}% \XC@mod@gray{\XC@cnv@rgb@gray#1,#2,#3,}% \XC@mod@Gray{\XC@cnv@rgb@gray#1,#2,#3,\XC@cnv@gray\@@tmp,}}% {\XC@cnv@rgb@hsb#1,#2,#3,\XC@cnv@hsb@}} \def\XC@cnv@rgb@ {\ifx\tm\XC@mod@rgb\else\expandafter\XC@cnv@rgb\@@tmp,\fi} \def\XC@cnv@rgb@hsb#1,#2,#3,% {\count@\z@ \ifdim#2\p@>#1\p@ \else\advance\count@4 \fi \ifdim#3\p@>#2\p@ \else\advance\count@2 \fi \ifdim#1\p@>#3\p@ \else\advance\count@1 \fi \ifcase\count@\or \XC@c@v@rgb@hsb{#3}{#2}{#1}3{}\or \XC@c@v@rgb@hsb{#2}{#1}{#3}1{}\or \XC@c@v@rgb@hsb{#2}{#3}{#1}3-\or \XC@c@v@rgb@hsb{#1}{#3}{#2}5{}\or \XC@c@v@rgb@hsb{#3}{#1}{#2}5-\or \XC@c@v@rgb@hsb{#1}{#2}{#3}1-\or \def\@tempa{0}\def\@tempb{0}\XC@calcN{#3}\@tempc \fi \edef\@@tmp{\@tempa,\@tempb,\@tempc}} \def\XC@c@v@rgb@hsb#1#2#3#4#5% {\XC@calcN{#1}\@tempc \llshiftset\dimen@{#1}% \llshiftset\@tempdimb{-#3}\advance\@tempdimb\dimen@ \llshiftset\@tempdima{-#5#2}\advance\@tempdima#5\dimen@ \advance\@tempdima#4\@tempdimb \rdivide\@tempdima{6\@tempdimb}% \edef\@tempa{\ifdim\@tempdima>\p@1\else\strip@pt\@tempdima\fi}% \rdivide\@tempdimb\dimen@ \edef\@tempb{\strip@pt\@tempdimb}} \def\XC@cnv@rgb@gray#1,#2,#3,% {\llshiftset\dimen@{#1}\@tempdima30\dimen@ \llshiftset\dimen@{#2}\advance\@tempdima59\dimen@ \llshiftset\dimen@{#3}\advance\@tempdima11\dimen@ \rrshift\@tempdima \rdivide\@tempdima{100}% \edef\@@tmp{\strip@pt\@tempdima}} \def\XC@cnv@rgb@HTML#1,#2,#3,% {\edef\@@tmp{#1#2#3}} \def\XC@cnv@cmy#1,#2,#3,% {\XC@ifxcase\tm {\XC@mod@cmyk{\XC@cnv@cmy@cmyk#1,#2,#3,}% \XC@mod@gray{\XC@cnv@rgb@gray#1,#2,#3,\XC@calcC\@@tmp\@@tmp}% \XC@mod@Gray{\XC@cnv@rgb@gray#1,#2,#3,\XC@calcC\@@tmp\@@tmp \XC@cnv@gray\@@tmp,}}% {\XC@calc@#1,#2,#3,,:C\XC@cnv@rgb@}} \def\XC@cnv@cmy@cmyk#1,#2,#3,% {\edef\@@scl {\ifdim#1\p@<#2\p@ \ifdim#1\p@<#3\p@ #1\else #3\fi \else \ifdim#2\p@<#3\p@ #2\else #3\fi \fi}% \expandafter\XC@calc@\adjustUCRBG,:S% \expandafter\XC@c@v@cmy@cmyk\@@tmp,#1,#2,#3,} \def\XC@c@v@cmy@cmyk#1,#2,#3,#4,#5,#6,#7,% {\XC@add#5,#6,#7,,-#1,-#2,-#3,,\@@tmp \edef\@@tmp{\@@tmp,#4}% \expandafter\XC@calc@\@@tmp,:N} \def\XC@cnv@cmyk#1,#2,#3,#4,% {\XC@ifxcase\tm {\XC@mod@gray{\XC@cnv@rgb@gray#1,#2,#3,\edef\@@arg{#4}% \XC@calcT\@@tmp\@@tmp \XC@calcC\@@tmp\@@tmp}% \XC@mod@Gray{\XC@cnv@rgb@gray#1,#2,#3,\edef\@@arg{#4}% \XC@calcT\@@tmp\@@tmp \XC@calcC\@@tmp\@@tmp \XC@cnv@gray\@@tmp,}}% {\XC@cnv@cmyk@cmy#1,#2,#3,#4,% \ifx\tm\XC@mod@cmy\else\expandafter\XC@cnv@cmy\@@tmp,\fi}} \def\XC@cnv@cmyk@cmy#1,#2,#3,#4,% {\edef\@@arg{#4}\XC@calc@#1,#2,#3,,:T} \def\XC@cnv@hsb#1,#2,#3,% {\XC@ifxcase\tm {\XC@mod@Hsb {\XC@cnv@hsb@Hsb#1,#2,#3,}% \XC@mod@tHsb{\XC@cnv@hsb@Hsb#1,#2,#3,\expandafter\XC@cnv@Hsb\@@tmp,}% \XC@mod@HSB {\edef\@@scl{\rangeHSB}\XC@calc@#1,#2,#3,,:M}}% {\XC@cnv@hsb@rgb#1,#2,#3,\XC@cnv@rgb@}} \def\XC@cnv@hsb@ {\ifx\tm\XC@mod@hsb\else\expandafter\XC@cnv@hsb\@@tmp,\fi} \def\XC@cnv@hsb@rgb#1,#2,#3,% {\llshiftset\dimen@{#1}\dimen@6\dimen@ \rrshift\dimen@ \afterassignment\dimen@\count@=\the\dimen@ \edef\@@tmp{\strip@pt\dimen@}% \ifodd\count@\else\XC@calcC\@@tmp\@@tmp\fi \edef\@@tmp {\ifcase\count@ 0,\@@tmp,1\or \@@tmp,0,1\or 1,0,\@@tmp\or 1,\@@tmp,0\or \@@tmp,1,0\or 0,1,\@@tmp\or 0,\@@tmp,1\fi}% \edef\@@scl{#2}\expandafter\XC@calc@\@@tmp,,:S% \expandafter\XC@calc@\@@tmp,,:C% \edef\@@scl{#3}\expandafter\XC@calc@\@@tmp,,:S% \expandafter\XC@calc@\@@tmp,,:N} \def\XC@cnv@hsb@Hsb#1,#2,#3,% {\XC@c@lcS\rangeHsb{,#2,#3}{#1}\@@tmp} \def\XC@cnv@gray#1,% {\XC@ifxcase\tm {\XC@mod@rgb {\XC@calcN{#1}\@@tmp \edef\@@tmp{\@@tmp,\@@tmp,\@@tmp}}% \XC@mod@cmy {\XC@calcC{#1}\@@tmp \edef\@@tmp{\@@tmp,\@@tmp,\@@tmp}}% \XC@mod@cmyk{\XC@calcC{#1}\@@tmp \edef\@@tmp{0,0,0,\@@tmp}}% \XC@mod@RGB {\edef\@@scl{\rangeRGB}\XC@calcM{#1}\@@tmp \edef\@@tmp{\@@tmp,\@@tmp,\@@tmp}}% \XC@mod@HTML{\edef\@@scl{\@cclv}\XC@calcM{#1}\@@tmp \XC@calcH\@@tmp\@@tmp \edef\@@tmp{\@@tmp\@@tmp\@@tmp}}% \XC@mod@HSB {\edef\@@scl{\rangeHSB}\XC@calcM{#1}\@@tmp \edef\@@tmp{0,0,\@@tmp}}% \XC@mod@Gray{\edef\@@scl{\rangeGray}\XC@calcM{#1}\@@tmp}}% {\XC@calcN{#1}\@@tmp \edef\@@tmp{0,0,\@@tmp}}} \def\XC@cnv@RGB#1,#2,#3,% {\edef\@@scl{\rangeRGB}\XC@calc@#1,#2,#3,,:D\XC@cnv@rgb@} \def\XC@cnv@HTML#1,% {\edef\@@tmp{\expandafter\@hex@Hex#1\relax}\expandafter\XC@cnv@HTML@\@@tmp \edef\@@scl{\@cclv}\expandafter\XC@calc@\@@tmp,,:D\XC@cnv@rgb@} \def\XC@cnv@HTML@#1#2#3#4#5#6% {\edef\@@tmp{\number"#1#2,\number"#3#4,\number"#5#6}} \def\XC@cnv@Hsb#1,#2,#3,% {\ifx\tm\XC@mod@tHsb\XC@cnv@@Hsb#1,#2,#3,\XC@cnv@Hsb@ \else\XC@cnv@Hsb@hsb#1,#2,#3,\XC@cnv@hsb@\fi} \def\XC@cnv@Hsb@hsb#1,#2,#3,% {\XC@c@lcD\rangeHsb{,#2,#3}{#1}\@@tmp} \def\XC@cnv@@Hsb#1,#2,#3,#4% {\dimen@\rangeHsb\p@ \advance\dimen@\p@ \edef\@@tmp{\strip@pt\dimen@}% \edef\@@tmp{0,0;\rangetHsb;\rangeHsb,\rangeHsb;\@@tmp,\@@tmp;}% \dimen@#1\p@ \expandafter#4\@@tmp\@nnil \edef\@@tmp{\strip@pt\dimen@,#2,#3}} \def\XC@cnv@Hsb@#1,#2;#3,#4;% {\ifdim\dimen@<#4\p@ \@tempdima#3\p@ \advance\@tempdima-#1\p@ \@tempdimb#4\p@ \advance\@tempdimb-#2\p@ \rdivide\@tempdima\@tempdimb \advance\dimen@-#2\p@ \rmultiply\dimen@{\strip@pt\@tempdima}% \advance\dimen@#1\p@ \expandafter\remove@to@nnil \else \def\@@tmp{\XC@cnv@Hsb@#3,#4;}\expandafter\@@tmp \fi} \def\XC@cnv@tHsb#1,#2,#3,% {\XC@cnv@@Hsb#1,#2,#3,\XC@cnv@tHsb@ \ifx\tm\XC@mod@Hsb\else\expandafter\XC@cnv@Hsb\@@tmp,\fi} \def\XC@cnv@tHsb@#1,#2;#3,#4;% {\ifdim\dimen@<#3\p@ \@tempdima#4\p@ \advance\@tempdima-#2\p@ \@tempdimb#3\p@ \advance\@tempdimb-#1\p@ \rdivide\@tempdima\@tempdimb \advance\dimen@-#1\p@ \rmultiply\dimen@{\strip@pt\@tempdima}% \advance\dimen@#2\p@ \expandafter\remove@to@nnil \else \def\@@tmp{\XC@cnv@tHsb@#3,#4;}\expandafter\@@tmp \fi} \def\XC@cnv@HSB#1,#2,#3,% {\edef\@@scl{\rangeHSB}\XC@calc@#1,#2,#3,,:D\XC@cnv@hsb@} \def\XC@cnv@Gray#1,% {\XC@c@lcD\rangeGray{}{#1}\@@tmp \XC@cnv@gray\@@tmp,} \def\XC@cnv@wave#1,% {\XC@cnv@wave@hsb#1,\XC@cnv@hsb@} \def\XC@cnv@wave@hsb#1,% {\@tempdima#1\p@ \ifdim\@tempdima<440\p@ \XC@c@v@wave@hsb{-.0166667}{7.33333}4{}\else \ifdim\@tempdima<490\p@ \XC@c@v@wave@hsb{.02}{-8.8}4-\else \ifdim\@tempdima<510\p@ \XC@c@v@wave@hsb{-.05}{25.5}2{}\else \ifdim\@tempdima<580\p@ \XC@c@v@wave@hsb{.0142857}{-7.28571}2-\else \ifdim\@tempdima<645\p@ \XC@c@v@wave@hsb{-.0153846}{9.92308}0{}\else \dimen@\z@ \fi\fi\fi\fi\fi \divide\dimen@6\relax \edef\@@tmp{\strip@pt\dimen@,1,}% \ifdim\@tempdima<420\p@ \XC@c@v@wave@hsb{.0175}{-6.35}0{}\else \ifdim\@tempdima>700\p@ \XC@c@v@wave@hsb{-.00875}{7.125}0{}\else \dimen@\p@ \fi\fi \edef\@@tmp{\@@tmp\strip@pt\dimen@}} \def\XC@c@v@wave@hsb#1#2#3#4% {\dimen@#1\@tempdima \advance\dimen@#2\p@ \XC@calcR{\strip@pt\dimen@}\@tempa \dimen@#4\@tempa\p@ \advance\dimen@#3\p@} \def\XC@cnv@cmyk@compl#1,#2,#3,#4,% {\XC@cnv@cmyk@cmy#1,#2,#3,#4,% \expandafter\XC@calc@\@@tmp,,:C\expandafter\XC@cnv@cmy@cmyk\@@tmp,} \def\XC@cnv@hsb@compl#1,#2,#3,% {\lshiftset\dimen@{#1}\advance\dimen@\ifdim\dimen@<5\p@-\fi-5\p@ \rshift\dimen@ \edef\@@tmp{\strip@pt\dimen@}% \lshiftset\dimen@{#3}\@tempdima#2\dimen@ \@tempdimb\@tempdima \advance\@tempdimb10\p@ \advance\@tempdimb-\dimen@ \ifdim\@tempdimb=\z@ \edef\@@tmp{\@@tmp,0,0}% \else \rdivide\@tempdima\@tempdimb \rshift\@tempdimb \edef\@@tmp{\@@tmp,\strip@pt\@tempdima,\strip@pt\@tempdimb}% \fi} \def\substitutecolormodel#1#2% {\XC@sdef\XC@@tmp{\expandafter\XC@substitutecolormodel#2/ignore/\@nnil}% \ifx\XC@@tmp\XC@mod@ignore \XC@let@cN{color@#1}\color@ignore \else \expandafter\edef\csname color@#1\endcsname##1##2% {\noexpand\convertcolorspec \expandafter\noexpand\csname XC@mod@#1\endcsname{##2}% \expandafter\noexpand\csname XC@mod@\XC@@tmp\endcsname \noexpand\XC@@tmp\noexpand\expandafter \expandafter\noexpand\csname color@\XC@@tmp\endcsname \noexpand\expandafter##1\noexpand\expandafter{\noexpand\XC@@tmp}}% \fi \expandafter\xglobalize@\csname color@#1\endcsname \xglobal@stop \PackageInfo{xcolor}{Model `#1' substituted by `\XC@@tmp'}} \def\XC@substitutecolormodel#1/% {\@ifundefinedmodel{#1}{\XC@substitutecolormodel}{#1\remove@to@nnil}} \def\color@ignore#1#2{\def#1{}} \@ifundefinedmodel{rgb}% {\substitutecolormodel{rgb}{RGB/HTML/hsb/Hsb/HSB/cmy/cmyk/gray/Gray}}{} \@ifundefinedmodel{cmyk}{\substitutecolormodel{cmyk}{cmy/rgb}}{} \@ifundefinedmodel{cmy}% {\PackageInfo{xcolor}{Model `cmy' substituted by `cmy0'} \def\color@cmy#1#2{\color@cmyk#1{#2,0}}}{} \@ifundefinedmodel{hsb}{\@tempswatrue}% {\XC@ifcase\XC@@drv{{dvipdfm,textures}\@tempswatrue}\@tempswafalse} \if@tempswa \substitutecolormodel{hsb}{Hsb/HSB/rgb} \fi \@ifundefinedmodel{RGB}% {\substitutecolormodel{RGB}{HTML/rgb}} {\PackageInfo{xcolor}{Model `RGB' extended} \let\XC@color@RGB\color@RGB \def\color@RGB#1#2% {\relax\ifnum\rangeRGB=255 \XC@color@RGB#1{#2}% \else \convertcolorspec\XC@mod@RGB{#2}\XC@mod@rgb\XC@@tmp \expandafter\color@rgb\expandafter#1\expandafter{\XC@@tmp}% \fi}} \@ifundefinedmodel{gray}{\substitutecolormodel{gray}{Gray/rgb}}{} \@ifundefinedmodel{HTML}{\substitutecolormodel{HTML}{rgb}}{} \@ifundefinedmodel{Hsb}{\substitutecolormodel{Hsb}{hsb}}{} \@ifundefinedmodel{tHsb}{\substitutecolormodel{tHsb}{hsb}}{} \@ifundefinedmodel{HSB}{\substitutecolormodel{HSB}{hsb}}{} \@ifundefinedmodel{Gray}{\substitutecolormodel{Gray}{gray}}{} \@ifundefinedmodel{wave}{\substitutecolormodel{wave}{hsb}}{} \def\XC@getcolor#1#2% {\begingroup\toks@{#1}\XC@getc@lor#1\XC@@\aftergroupdef#2{\@@tmp}} \def\XC@getc@lor#1#2\XC@@ {\@ifxempty{#2}% {\expandafter\XC@getc@l@r#1\XC@@}% {\let\set@color\relax \ifx#1[% \expandafter\@undeclaredcolor\the\toks@\else \expandafter\@declaredcolor\expandafter{\the\toks@}\fi \let\@@tmp\XC@current@color}} \def\XC@getc@l@r#1#2\XC@@ {\ifx#1\xcolor@ \def\@@tmp{\xcolor@#2}% \else \let\set@color\relax \expandafter\@declaredcolor\expandafter{\the\toks@}% \let\@@tmp\XC@current@color \fi} \def\XC@usecolor#1{\expandafter\XC@usec@lor#1\XC@@} \def\XC@usec@lor#1#2\XC@@ {\ifx#1\xcolor@ \expandafter\expandafter\expandafter\c@lor@to@ps#1#2\@@ \else \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter \expandafter\c@lor@to@ps\csname\string\color@#1#2\endcsname\@@ \fi \space} \let\XC@c@lor@to@ps\XC@usecolor \let\pst@getcolor\XC@getcolor \let\pst@usecolor\XC@usecolor \def\c@lor@special#1#2{\edef\@tempa{\write#1{#2}}\@tempa} \def\normalcolor{\let\current@color\default@color\set@color} \AtBeginDocument{\let\default@color\current@color} \XC@ifcase\XC@@drv {{dvipdf,dvipdfm,dvipdfmx,dvips,pctex32}% {\def\c@lor@@named#1,#2,#3\@@#4% {\edef#4{\expandafter\expandafter\expandafter\@thirdoffive \csname\string\color@#1\endcsname}} \def\define@color@named#1#2% {\@namedef{\string\color@#1}{{}{}{ \colornameprefix#1}{}{}}}}% {dvipsone,pctexps,pdftex,tcidvi,truetex,vtex,xetex}% {\def\c@lor@@named#1,#2,#3\@@#4% {\edef#4{\expandafter\expandafter\expandafter\@thirdoffive \csname\string\color@#1\endcsname}} \def\define@color@named#1#2% {\let\@@cls\@empty\@namedef{\string\color@#1}{{}{}{#2}{}{}}}}% {textures}% {\def\c@lor@@named#1,#2,#3\@@#4% {\edef\@tempa{\color@P@custom{#1}{\if!#2!1\else#2\fi}}% \expandafter\def\expandafter#4\@tempa} \def\define@color@named#1#2% {\edef\@tempa{{#1}{#2}}\expandafter\AddCustomColor\@tempa} \def\c@lor@ps@#1 #2\@@ {\expandafter\expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\c@lor@to@ps@ \csname\string\color@#1\expandafter\endcsname\space #2. \@@{#1}}}% }{} \definecolorset{rgb/hsb/cmyk/gray}{}{}% {red,1,0,0/0,1,1/0,1,1,0/.3;% green,0,1,0/.33333,1,1/1,0,1,0/.59;% blue,0,0,1/.66667,1,1/1,1,0,0/.11;% brown,.75,.5,.25/.083333,.66667,.75/0,.25,.5,.25/.5475;% lime,.75,1,0/.20833,1,1/.25,0,1,0/.815;% orange,1,.5,0/.083333,1,1/0,.5,1,0/.595;% pink,1,.75,.75/0,.25,1/0,.25,.25,0/.825;% purple,.75,0,.25/.94444,1,.75/0,.75,.5,.25/.2525;% teal,0,.5,.5/.5,1,.5/.5,0,0,.5/.35;% violet,.5,0,.5/.83333,1,.5/0,.5,0,.5/.205}% \definecolorset{cmyk/rgb/hsb/gray}{}{}% {cyan,1,0,0,0/0,1,1/.5,1,1/.7;% magenta,0,1,0,0/1,0,1/.83333,1,1/.41;% yellow,0,0,1,0/1,1,0/.16667,1,1/.89;% olive,0,0,1,.5/.5,.5,0/.16667,1,.5/.39} \definecolorset{gray/rgb/hsb/cmyk}{}{}% {black,0/0,0,0/0,0,0/0,0,0,1;% darkgray,.25/.25,.25,.25/0,0,.25/0,0,0,.75;% gray,.5/.5,.5,.5/0,0,.5/0,0,0,.5;% lightgray,.75/.75,.75,.75/0,0,.75/0,0,0,.25;% white,1/1,1,1/0,0,1/0,0,0,0} \XC@@names \AtBeginDocument{\let\XC@@stack\@empty} \let\colornameprefix\XC@@nameprefix \XC@catcodes \csname xcolorcmd\endcsname \color{black} \endinput %% %% End of file `xcolor.sty'. rivet-1.8.3/data/texmf/tex/latex/pst-3d/0000755000175000017500000000000012116077756016147 5ustar sunsunrivet-1.8.3/data/texmf/tex/latex/pst-3d/pst-3d.sty0000644000175000017500000000237112116077756020025 0ustar sunsun%% %% This is file `pst-3d.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% pst-3d.dtx (with options: `latex-wrapper') %% %% IMPORTANT NOTICE: %% %% For the copyright see the source file. %% %% Any modified versions of this file must be renamed %% with new filenames distinct from pst-3d.sty. %% %% For distribution of the original source see the terms %% for copying and modification in the file pst-3d.dtx. %% %% This generated file may be distributed as long as the %% original source files, as listed above, are part of the %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% %% Package `pst-3d.dtx' %% %% Timothy Van Zandt (tvz) %% Herbert Voss (hv) %% %% September 03, 2005 %% %% This file is under the LaTeX Project Public License %% See CTAN archives in directory macros/latex/base/lppl.txt. %% %% DESCRIPTION: %% `pst-3d' is a PSTricks package for tilting and other pseudo-3D tricks %% %% \RequirePackage{pstricks} \ProvidesPackage{pst-3d}[2005/09/02 package wrapper for pst-3d.tex (hv)] \input{pst-3d.tex} \ProvidesFile{pst-3d.tex} [\filedate\space v\fileversion\space `PST-3d' (tvz)] \endinput %% %% End of file `pst-3d.sty'. rivet-1.8.3/data/texmf/tex/latex/pst-grad/0000755000175000017500000000000012116077756016556 5ustar sunsunrivet-1.8.3/data/texmf/tex/latex/pst-grad/pst-grad.sty0000644000175000017500000000043012116077756021035 0ustar sunsun\RequirePackage{pstricks} \ProvidesPackage{pst-grad}[2004/07/15 package wrapper for pst-grad.tex (hv)] \input{pst-grad.tex} \ProvidesFile{pst-grad.tex} [\filedate\space \fileversion\space `pst-grad' (tvz)] \IfFileExists{pst-grad.pro}{\@addtofilelist{pst-grad.pro}}{}% \endinput rivet-1.8.3/data/texmf/tex/latex/pst-text/0000755000175000017500000000000012116077756016625 5ustar sunsunrivet-1.8.3/data/texmf/tex/latex/pst-text/pst-text.sty0000644000175000017500000000043012116077756021153 0ustar sunsun\RequirePackage{pstricks} \ProvidesPackage{pst-text}[2006/01/01 package wrapper for pst-text.tex (hv)] \input{pst-text.tex} \ProvidesFile{pst-text.tex} [\filedate\space \fileversion\space `pst-text' (tvz)] \IfFileExists{pst-text.pro}{\@addtofilelist{pst-text.pro}}{}% \endinput rivet-1.8.3/data/texmf/dvips/0000755000175000017500000000000012116077756014245 5ustar sunsunrivet-1.8.3/data/texmf/dvips/pstricks/0000755000175000017500000000000012116077756016107 5ustar sunsunrivet-1.8.3/data/texmf/dvips/pstricks/pstricks.pro0000644000175000017500000005353412116077756020505 0ustar sunsun% $Id: pstricks.pro 34 2008-06-25 17:20:01Z herbert $ % %% PostScript prologue for pstricks.tex. %% Version 1.05, 2008/06/25 %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives %% in directory macros/latex/base/lppl.txt. % % % Define the follwing gs-functions if not known, eg when using distiller % systemdict /.setopacityalpha known not {/.setopacityalpha { pop } def } if systemdict /.setblendmode known not {/.setblendmode { pop } def } if systemdict /.setshapealpha known not {/.setshapealpha { pop } def } if % /tx@Dict 200 dict def % the main PSTricks dictionary tx@Dict begin /ADict 25 dict def % The arrow dictionaray /CM { matrix currentmatrix } bind def /SLW /setlinewidth load def /CLW /currentlinewidth load def /CP /currentpoint load def /ED { exch def } bind def /L /lineto load def /T /translate load def /TMatrix { } def /RAngle { 0 } def /Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def % return 0 for negative arguments /Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known /ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter) /Div { dup 0 eq { pop } { div } ifelse } def % control the division /tan { dup cos abs 1.e-10 lt { pop 1.e10 } % return 1.e10 as infinit { dup sin exch cos div } ifelse % default sin/cos } def /Tan { dup sin exch cos Div } def % sin(x)/cos(x) x in degrees /Acos {dup dup mul neg 1 add dup 0 lt { % arc cos, returns 0 when negative root pop pop 0 }{ sqrt exch atan} ifelse } def /NET { neg exch neg exch T } def % change coordinate system to the negative one /Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, expects 2 parameter /Pyth2 { % Pythagoras, xA yA xB yB 3 -1 roll % xA xB yB yA sub % xA xB yB-yA 3 1 roll % yB-yA xA xB sub % yB-yA xA-xB Pyth } def /PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian /Rand { rand 4294967295 div } def % a real random number %----------------- hv added 20050516 --------------- /PiDiv2 1.57079632680 def /Pi 3.14159265359 def /TwoPi 6.28318530718 def /Euler 2.71828182846 def %/e Euler bind def /RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees /DegtoRad { Pi mul 180 div } bind def % viceversa %----------------- hv end--------------------------- /PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def /PathLength { flattenpath /z 0 def { /y1 ED /x1 ED /y2 y1 def /x2 x1 def } { /y ED /x ED PathLength@ } {} { /y y2 def /x x2 def PathLength@ } /pathforall load stopped { pop pop pop pop } if z } def % /STP { .996264 dup scale } def % BP/PT scaling /STV { SDict begin normalscale end STP } def % % %%-------------- DG begin patch 15 ---------------%% %/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def %PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y %mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul %/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ] %0 } ifelse setdash stroke } def /DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse /b ED /x1 ED /y1 ED /x ED /y ED /z y x add y1 add x1 add def /Coef b a .5 sub 2 mul y mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div def /y y Coef mul def /x x Coef mul def /y1 y1 Coef mul def /x1 x1 Coef mul def x1 0 gt y1 0 gt or x 0 gt or y 0 gt and { [ y x y1 x1 ] 1 a sub y mul } { [ 1 0 ] 0 } ifelse setdash stroke } def %%-------------- DG end patch 15 ---------------%% /DotLine { /b PathLength def /a ED /z ED /y CLW def /z y z add def a 0 gt { /b b a div def }{ a 0 eq { /b b y sub def }{ a -3 eq { /b b y add def } if } ifelse } ifelse [ 0 b b z Div round Div dup 0 le { pop 1 } if ] a 0 gt { 0 }{ y 2 div a -2 gt { neg }if } ifelse setdash 1 setlinecap stroke } def % /LineFill { % hv ------------ patch 7 ------------- gsave abs /hatchWidthInc ED abs /hatchSepInc ED abs CLW add /a ED a 0 dtransform round exch round exch 2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict /setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1 a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add hatchWidthInc 0 gt { CLW add } if def hatchSepInc 0 gt hatchWidthInc 0 gt or { /a a hatchSepInc add def CLW hatchWidthInc add SLW } if } repeat grestore pop pop } def % /PenroseFill {% on stack: scaling factor dup dup scale 1 exch div round /penroseFactor ED a 0 dtransform round exch round exch 2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a Div cvi /x1 ED /y2 y2 y1 sub def clip newpath systemdict /setstrokeadjust known { true setstrokeadjust } if /I/S/L/W/G/+/Z/F/E/D[/def/exch/for{E D}/add{s E get mul} { Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall [0 72 1008 {dup sin E cos }F ]1 setlinejoin/s W{/a W{/b I 10{/i I 4{/m I moveto i m +/j I 10{/l Z b m l + G a l G sub s m get div .2 + floor .3 + 25 mul j l + S rmoveto}F i L j L stroke }F}F}F}F grestore pop pop } def % %gsave abs CLW add /a ED a 0 dtransform round exch round exch %2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 %% DG/SR modification begin - Dec. 12, 1997 - Patch 2 %%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a %itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a %% DG/SR modification end %Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict %/setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1 %% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) %% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore } %% def %a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore %pop pop } def %% DG/SR modification end % /BeginArrow { ADict begin % hold it local, for end see EndArrow /@mtrx CM def gsave 2 copy T 2 index sub neg exch 3 index sub exch Atan rotate newpath } def % /EndArrow { @mtrx setmatrix CP grestore end } def % end the ADict % /Arrow { CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 h T 1 -1 scale } if w neg h moveto 0 0 L w h L w neg a neg rlineto gsave fill grestore } def % /ArrowD { % the sides are drawn as curves (hv 20071211) CLW mul add dup 2 div /w ED mul dup /h ED mul /Inset ED { 0 h T 1 -1 scale } if % changes the direction % we use y=w/h^2 * x^2 as equation for the control points % for the coordinates the arrow is seen from top to bottom % the bottom (tip) is (0;0) w neg h moveto % lower left of > w 9 div 4 mul neg h 3 div 2 mul w 9 div neg h 3 div 0 0 curveto % tip of > w 9 div h 3 div w 9 div 4 mul h 3 div 2 mul w h curveto % upper left of > w neg Inset neg rlineto % move to x=0 and inset gsave fill grestore } def % /Tbar { CLW mul add /z ED z -2 div CLW 2 div moveto z 0 rlineto stroke 0 CLW moveto } def % /Bracket { CLW mul add dup CLW sub 2 div /x ED mul CLW add /y ED /z CLW 2 div def x neg y moveto x neg CLW 2 div L x CLW 2 div L x y L stroke 0 CLW moveto } def % /RoundBracket { CLW mul add dup 2 div /x ED mul /y ED /mtrx CM def 0 CLW 2 div T x y mul 0 ne { x y scale } if 1 1 moveto .85 .5 .35 0 0 0 curveto -.35 0 -.85 .5 -1 1 curveto mtrx setmatrix stroke 0 CLW moveto } def % /SD { 0 360 arc fill } def % /EndDot { % DS is the dot size { /z DS def } { /z 0 def } ifelse /b ED 0 z DS SD b { 0 z DS CLW sub SD } if 0 DS z add CLW 4 div sub moveto } def % /Shadow { [ { /moveto load } { /lineto load } { /curveto load } { /closepath load } /pathforall load stopped { pop pop pop pop CP /moveto load } if ] cvx newpath 3 1 roll T exec } def % %/NArray { % aload length 2 div dup dup cvi eq not { exch pop } if /n exch % cvi def %} def % /NArray { % holds the coordinates and on top of stack the showpoints boolean /showpoints ED counttomark 2 div dup cvi /n ED n eq not { exch pop } if showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def % /Line { NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def n { Lineto } repeat CP 4 2 roll ArrowB L pop pop } if } def % /Arcto { /a [ 6 -2 roll ] cvx def a r /arcto load stopped { 5 } { 4 } ifelse { pop } repeat a } def % /CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq and { pop pop /n n 1 sub def } if } def /Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto Lineto pop pop closepath } ifelse } def /Diamond { /mtrx CM def T rotate /h ED /w ED dup 0 eq { pop } { CLW mul neg /d ED /a w h Atan def /h d a sin Div h add def /w d a cos Div w add def } ifelse mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 div /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx setmatrix } def % DG modification begin - Jan. 15, 1997 %/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq { %pop } { CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2 %div dup cos exch sin Div mul sub def } ifelse mark 0 d w neg d 0 h w d 0 %d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx %setmatrix } def /Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2 div dup cos exch sin Div mul sub def mark 0 d w neg d 0 h w d 0 d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx % DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) % setmatrix } def setmatrix pop } def % DG/SR modification end % /CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth def } def % /CC { /l0 l1 def /x1 x dx sub def /y1 y dy sub def /dx0 dx1 def /dy0 dy1 def CCA /dx dx0 l1 c exp mul dx1 l0 c exp mul add def /dy dy0 l1 c exp mul dy1 l0 c exp mul add def /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul dx dy Pyth Div 2 div def /x2 x l0 dx mul m mul sub def /y2 y l0 dy mul m mul sub def /dx l1 dx mul m mul neg def /dy l1 dy mul m mul neg def } def % /IC { /c c 1 add def c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse /a a 2 mul 3 div 45 cos b exp div def CCA /dx 0 def /dy 0 def } def % /BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def /NC { CC x1 y1 x2 y2 x y curveto } def /EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def /BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def /NAC { x2 y2 x y curveto CC x1 y1 } def /EAC { x2 y2 x y ArrowB curveto pop pop } def % /OpenCurve { NArray n 3 lt { n { pop pop } repeat } { BOC /n n 3 sub def n { NC } repeat EOC } ifelse } def % /AltCurve { { false NArray n 2 mul 2 roll [ n 2 mul 3 sub 1 roll ] aload /Points ED n 2 mul -2 roll } { false NArray } ifelse n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse } def % /ClosedCurve { NArray n 3 lt { n { pop pop } repeat } { n 3 gt { CheckClosed } if 6 copy n 2 mul 6 add 6 roll IC CC x y moveto n { NC } repeat closepath pop pop } ifelse } def % /SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def /ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def /SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore } def /FontDot { DS 2 mul dup matrix scale matrix concatmatrix exch matrix rotate matrix concatmatrix exch findfont exch makefont setfont } def /Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto x1 y1 lineto closepath } def /OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1 y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse /b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath } ifelse } def /Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add /y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq { pop pop Rect } { OvalFrame } ifelse } def % /BezierNArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop } if n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def % /OpenBezier { BezierNArray n 1 eq { pop pop } { ArrowA n 4 sub 3 idiv { 6 2 roll 4 2 roll curveto } repeat 6 2 roll 4 2 roll ArrowB curveto } ifelse } def % /ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { 6 2 roll 4 2 roll curveto } repeat closepath } ifelse } def % /BezierShowPoints { gsave Points aload length 2 div cvi /n ED moveto n 1 sub { lineto } repeat CLW 2 div SLW [ 4 4 ] 0 setdash stroke grestore } def % /Parab { /y0 ED /x0 ED /y1 ED /x1 ED /dx x0 x1 sub 3 div def /dy y0 y1 sub 3 div def x0 dx sub y0 dy add x1 y1 ArrowA x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB curveto /Points [ x1 y1 x0 y0 x0 2 mul x1 sub y1 ] def } def % /Grid { newpath /a 4 string def /b ED /c ED /n ED cvi dup 1 lt { pop 1 } if /s ED s div dup 0 eq { pop 1 } if /dy ED s div dup 0 eq { pop 1 } if /dx ED dy div round dy mul /y0 ED dx div round dx mul /x0 ED dy div round cvi /y2 ED dx div round cvi /x2 ED dy div round cvi /y1 ED dx div round cvi /x1 ED /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def b 0 gt { /z1 b 4 div CLW 2 div add def % /Helvetica findfont b scalefont setfont /b b .95 mul CLW 2 div add def } if systemdict /setstrokeadjust known { true setstrokeadjust /t { } def } { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } bind def } ifelse gsave n 0 gt { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse /i x1 def /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if { i dx mul dup y0 moveto b 0 gt { gsave c i a cvs dup stringwidth pop /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse h 0 gt {b neg}{z1} ifelse rmoveto show grestore } if dup t f moveto g t L stroke /i i w add def } repeat grestore gsave n 0 gt % DG/SR modification begin - Nov. 7, 1997 - Patch 1 %{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash } { 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash } % DG/SR modification end { 2 setlinecap } ifelse /i y1 def /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if { newpath i dy mul dup x0 exch moveto b 0 gt { gsave c i a cvs dup stringwidth pop /z2 ED w 0 gt {z1 z2 add neg} {z1} ifelse h 0 gt {z1} {b neg} ifelse rmoveto show grestore } if dup f exch t moveto g exch t L stroke /i i h add def } repeat grestore } def % /ArcArrow { /d ED /b ED /a ED gsave newpath 0 -1000 moveto clip newpath 0 1 0 0 b grestore c mul /e ED pop pop pop r a e d PtoC y add exch x add exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c mul neg d } def % /Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def % /ArcAdjust { %%%% Vincent Guirardel % given a target length (targetLength) and an initial angle (angle0) [in the stack], % let M(angle0)=(rx*cos(angle0),ry*sin(angle0))=(x0,y0). % This computes an angle t such that (x0,y0) is at distance % targetLength from the point M(t)=(rx*cos(t),ry*sin(t)). % NOTE: this an absolute angle, it does not have to be added or substracted to angle0 % contrary to TvZ's code. % To achieve, this, one iterates the following process: start with some angle t, % compute the point M' at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]. % Now take t' (= new angle) so that (0,0) M(t') and M' are aligned. % % Another difference with TvZ's code is that we need d (=add/sub) to be defined. % the value of d = add/sub is used to know on which side we have to move. % It is only used in the initialisation of the angle before the iteration. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Input stack: 1: target length 2: initial angle % variables used : rx, ry, d (=add/sub) % /targetLength ED /angle0 ED /x0 rx angle0 cos mul def /y0 ry angle0 sin mul def % we are looking for an angle t such that (x0,y0) is at distance targetLength % from the point M(t)=(rx*cos(t),ry*sin(t))) %initialisation of angle (using 1st order approx = TvZ's code) targetLength 57.2958 mul angle0 sin rx mul dup mul angle0 cos ry mul dup mul add sqrt div % if initialisation angle is two large (more than 90 degrees) set it to 90 degrees % (if the ellipse is very curved at the point where we draw the arrow, % % the value can be much more than 360 degrees !) % this should avoid going on the wrong side (more than 180 degrees) or go near % a bad attractive point (at 180 degrees) dup 90 ge { pop 90 } if angle0 exch d % add or sub % maximum number of times to iterate the iterative procedure: % iterative procedure: takes an angle t on top of stack, computes a % better angle (and put it on top of stack) 30 { dup % compute distance D between (x0,y0) and M(t) dup cos rx mul x0 sub dup mul exch sin ry mul y0 sub dup mul add sqrt % if D almost equals targetLength, we stop dup targetLength sub abs 1e-5 le { pop exit } if % stack now contains D t % compute the point M(t') at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]: % M(t')= ( (x(t)-x0)*targetLength/d+x0 , (y(t)-y0)*targetLength/d+y0 ) exch dup cos rx mul x0 sub exch sin ry mul y0 sub % stack contains: y(t)-y0, x(t)-x0, d 2 index Div targetLength mul y0 add ry Div exch 2 index Div targetLength mul x0 add rx Div % stack contains x(t')/rx , y(t')/ry , d % now compute t', and remove D from stack atan exch pop } repeat % we don't look at what happened... in particular, if targetLength is greater % than the diameter of the ellipse... % the final angle will be around /angle0 + 180. maybe we should treat this pathological case... % after iteration, stack contains an angle t such that M(t) is the tail of the arrow % to give back the result as a an angle relative to angle0 we could add the following line: % angle0 sub 0 exch d % % begin bug fix 2006-01-11 % we want to adjust the new angle t' by a multiple of 360 so that | t'-angle0 | <= 180 %(we don't want to make the ellipse turn more or less than it should)... dup angle0 sub dup abs 180 gt { 180 add 360 div floor 360 mul sub } { pop } ifelse % end bug fix } def % /EllipticArcArrow { /d ED % is add or sub /b ED % arrow procedure /a1 ED % angle gsave newpath 0 -1000 moveto clip % Set clippath far from arrow. newpath 0 1 0 0 b % Draw arrow to determine length. grestore % Length of arrow is on top of stack. Next 3 numbers are junk. % a1 exch ArcAdjust % Angular position of base of arrow. /a2 ED pop pop pop a2 cos rx mul xOrig add % hv 2007-08-29 x->xOrig a2 sin ry mul yOrig add % hv 2007-08-29 y->yOrig a1 cos rx mul xOrig add % a1 sin ry mul yOrig add % % Now arrow tip coor and base coor are on stack. b pop pop pop pop % Draw arrow, and discard coordinates. a2 CLW 8 div % change value of d (test it by looking if `` 1 1 d '' gives 2 or not ) 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse ArcAdjust % resets original value of d 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse % Adjust angle to give overlap. } def %%------------------ tvz/DG/hv (2004-05-10) end -------------------%% % /Rot { CP CP translate 3 -1 roll neg rotate NET } def % /RotBegin { tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if /TMatrix [ TMatrix CM ] cvx def /a ED a Rot /RAngle [ RAngle dup a add ] cvx def } def % /RotEnd { /TMatrix [ TMatrix setmatrix ] cvx def /RAngle [ RAngle pop ] cvx def } def % /PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def /PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def /PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def /Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } { h1 abs h sub dup s mul abs } ifelse } def /UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q { x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add exch } def /BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { Visible /IfVisible true def } if } { IfVisible { Invisible /IfVisible false def } if } ifelse } def /InitOL { /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def /Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit neg exch neg exch idtransform T moveto } def /BOL { BeginOL } def /IfVisible true def } def end %-----------------------------------------------------------------------------% % END pstricks.pro rivet-1.8.3/data/texmf/dvips/pstricks/pst-node.pro0000644000175000017500000003214312116077756020365 0ustar sunsun% $Id: pst-node.pro 26 2008-06-14 11:50:02Z herbert $ %% %% PostScript prologue for pst-node.tex. %% Version 1.00, 2008/01/01. %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives %% in directory macros/latex/base/lppl.txt. % /tx@NodeDict 400 dict def tx@NodeDict begin tx@Dict begin % from main pstricks dict /T /translate load def end /NewNode { % on stack: { x y } boolean N@name type InitXnode gsave /next ED % { x y } boolean N@name type dict dup % { x y } boolean N@name dict dict 3 1 roll def % { x y } boolean dict N@name dict def exch { dup 3 1 roll def } if % { x y } dict boolean begin % { x y } dict begin tx@Dict begin STV CP T exec % set scaling end /NodeMtrx CM def % save CM next % InitXNode end grestore } def % /InitPnode { /Y ED /X ED /NodePos { NodeSep Cos mul NodeSep Sin mul } def } def % /InitCnode { /r ED /Y ED /X ED /NodePos { NodeSep r add dup Cos mul exch Sin mul } def } def % /GetRnodePos { Cos 0 gt { /dx r NodeSep add def } { /dx l NodeSep sub def } ifelse Sin 0 gt { /dy u NodeSep add def } { /dy d NodeSep sub def } ifelse dx Sin mul abs dy Cos mul abs gt { dy Cos mul Sin div dy } { dx dup Sin mul Cos Div } ifelse } def % /InitRnode { /Y ED /X ED X sub /r ED /l X neg def Y add neg /d ED Y sub /u ED /NodePos { GetRnodePos } def } def % /DiaNodePos { w h mul w Sin mul abs h Cos mul abs add Div NodeSep add dup Cos mul exch Sin mul } def % /TriNodePos { Sin s lt { d NodeSep sub dup Cos mul Sin Div exch } { w h mul w Sin mul h Cos abs mul add Div NodeSep add dup Cos mul exch Sin mul } ifelse } def /InitTriNode { sub 2 div exch 2 div exch 2 copy T 2 copy 4 index index /d ED pop pop pop pop -90 mul rotate /NodeMtrx CM def /X 0 def /Y 0 def d sub abs neg /d ED d add /h ED 2 div h mul h d sub Div /w ED /s d w Atan sin def /NodePos { TriNodePos } def } def /OvalNodePos { /ww w NodeSep add def /hh h NodeSep add def Sin ww mul Cos hh mul Atan dup cos ww mul exch sin hh mul } def /GetCenter { begin X Y NodeMtrx transform CM itransform end } def % /XYPos { dup sin exch cos Do /Cos ED /Sin ED /Dist ED Cos 0 gt { Dist Dist Sin mul Cos div } { Cos 0 lt { Dist neg Dist Sin mul Cos div neg } { 0 Dist Sin mul } ifelse } ifelse Do } def /GetEdge { dup 0 eq { pop begin 1 0 NodeMtrx dtransform CM idtransform exch atan sub dup sin /Sin ED cos /Cos ED /NodeSep ED NodePos NodeMtrx dtransform CM idtransform end } { 1 eq {{exch}} {{}} ifelse /Do ED pop XYPos } ifelse } def /AddOffset { 1 index 0 eq { pop pop } { 2 copy 5 2 roll cos mul add 4 1 roll sin mul sub exch } ifelse } def /GetEdgeA { NodeSepA AngleA NodeA NodeSepTypeA GetEdge OffsetA AngleA AddOffset yA add /yA1 ED xA add /xA1 ED } def /GetEdgeB { NodeSepB AngleB NodeB NodeSepTypeB GetEdge OffsetB AngleB AddOffset yB add /yB1 ED xB add /xB1 ED } def /GetArmA { ArmTypeA 0 eq { /xA2 ArmA AngleA cos mul xA1 add def /yA2 ArmA AngleA sin mul yA1 add def } { ArmTypeA 1 eq {{exch}} {{}} ifelse /Do ED ArmA AngleA XYPos OffsetA AngleA AddOffset yA add /yA2 ED xA add /xA2 ED } ifelse } def /GetArmB { ArmTypeB 0 eq { /xB2 ArmB AngleB cos mul xB1 add def /yB2 ArmB AngleB sin mul yB1 add def } { ArmTypeB 1 eq {{exch}} {{}} ifelse /Do ED ArmB AngleB XYPos OffsetB AngleB AddOffset yB add /yB2 ED xB add /xB2 ED } ifelse } def /InitNC { /b ED /a ED % second and first node /NodeSepTypeB ED /NodeSepTypeA ED /NodeSepB ED /NodeSepA ED /OffsetB ED /OffsetA ED tx@NodeDict a known tx@NodeDict b known and dup { /NodeA a load def /NodeB b load def NodeA GetCenter /yA ED /xA ED NodeB GetCenter /yB ED /xB ED } if } def % /LPutLine { 4 copy 3 -1 roll sub neg 3 1 roll sub Atan /NAngle ED 1 t sub mul 3 1 roll 1 t sub mul 4 1 roll t mul add /Y ED t mul add /X ED } def /LPutLines { mark LPutVar counttomark 2 div 1 sub /n ED t floor dup n gt { pop n 1 sub /t 1 def } { dup t sub neg /t ED } ifelse cvi 2 mul { pop } repeat LPutLine cleartomark } def /BezierMidpoint { /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED /t ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3 mul cx sub def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx sub def /ay y3 y0 sub cy sub by sub def ax t 3 exp mul bx t t mul mul add cx t mul add x0 add ay t 3 exp mul by t t mul mul add cy t mul add y0 add 3 ay t t mul mul mul 2 by t mul mul add cy add 3 ax t t mul mul mul 2 bx t mul mul add cx add atan /NAngle ED /Y ED /X ED } def /HPosBegin { yB yA ge { /t 1 t sub def } if /Y yB yA sub t mul yA add def } def /HPosEnd { /X Y yyA sub yyB yyA sub Div xxB xxA sub mul xxA add def /NAngle yyB yyA sub xxB xxA sub Atan def } def /HPutLine { HPosBegin /yyA ED /xxA ED /yyB ED /xxB ED HPosEnd } def /HPutLines { HPosBegin yB yA ge { /check { le } def } { /check { ge } def } ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { dup Y check { exit } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark HPosEnd } def /VPosBegin { xB xA lt { /t 1 t sub def } if /X xB xA sub t mul xA add def } def /VPosEnd { /Y X xxA sub xxB xxA sub Div yyB yyA sub mul yyA add def /NAngle yyB yyA sub xxB xxA sub Atan def } def /VPutLine { VPosBegin /yyA ED /xxA ED /yyB ED /xxB ED VPosEnd } def /VPutLines { VPosBegin xB xA ge { /check { le } def } { /check { ge } def } ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { 1 index X check { exit } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark VPosEnd } def /HPutCurve { gsave newpath /SaveLPutVar /LPutVar load def LPutVar 8 -2 roll moveto curveto flattenpath /LPutVar [ {} {} {} {} pathforall ] cvx def grestore exec /LPutVar /SaveLPutVar load def } def /NCCoor { /AngleA yB yA sub xB xA sub Atan def /AngleB AngleA 180 add def GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 xA1 yA1 ] cvx def /LPutPos { LPutVar LPutLine } def /HPutPos { LPutVar HPutLine } def /VPutPos { LPutVar VPutLine } def LPutVar } def /NCLine { NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB lineto pop pop end } def /NCLines { false NArray n 0 eq { NCLine } { 2 copy yA sub exch xA sub Atan /AngleA ED n 2 mul dup index exch index yB sub exch xB sub Atan /AngleB ED GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 n 2 mul 4 add 4 roll xA1 yA1 ] cvx def mark LPutVar tx@Dict begin false Line end /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def } ifelse } def /NCCurve { GetEdgeA GetEdgeB xA1 xB1 sub yA1 yB1 sub Pyth 2 div dup 3 -1 roll mul /ArmA ED mul /ArmB ED /ArmTypeA 0 def /ArmTypeB 0 def GetArmA GetArmB xA2 yA2 xA1 yA1 tx@Dict begin ArrowA end xB2 yB2 xB1 yB1 tx@Dict begin ArrowB end curveto /LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ] cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines } HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def } def % /NCAngles { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate def xA2 yA2 mtrx transform pop xB2 yB2 mtrx transform exch pop mtrx itransform /y0 ED /x0 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 x0 y0 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA2 yA2 xA1 yA1 ] cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def } def % /NCAngle { GetEdgeA GetEdgeB GetArmB /mtrx AngleA matrix rotate def xB2 yB2 mtrx itransform pop xA1 yA1 mtrx itransform exch pop mtrx transform /y0 ED /x0 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 x0 y0 xA1 yA1 tx@Dict begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA1 yA1 ] cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def } def /NCBar { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate def xA2 yA2 mtrx itransform pop xB2 yB2 mtrx itransform pop sub dup 0 mtrx transform 3 -1 roll 0 gt { /yB2 exch yB2 add def /xB2 exch xB2 add def } { /yA2 exch neg yA2 add def /xA2 exch neg xA2 add def } ifelse mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def } def /NCDiag { GetEdgeA GetEdgeB GetArmA GetArmB mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def } def /NCDiagg { GetEdgeA GetArmA yB yA2 sub xB xA2 sub Atan 180 add /AngleB ED GetEdgeB mark xB1 yB1 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def } def /NCLoop { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate def xA2 yA2 mtrx transform loopsize add /yA3 ED /xA3 ED /xB3 xB2 yB2 mtrx transform pop def xB3 yA3 mtrx itransform /yB3 ED /xB3 ED xA3 yA3 mtrx itransform /yA3 ED /xA3 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 xA1 yA1 ] cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def } def % DG/SR modification begin - May 9, 1997 - Patch 1 %/NCCircle { 0 0 NodesepA nodeA \tx@GetEdge pop xA sub 2 div dup 2 exp r %r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add %exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360 %mul add dup 5 1 roll 90 sub \tx@PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED /NCCircle { NodeSepA 0 NodeA 0 GetEdge pop 2 div dup 2 exp r r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360 mul add dup 5 1 roll 90 sub PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED % DG/SR modification end } def /HPutPos { LPutPos } def /VPutPos { LPutPos } def r AngleA 90 sub a add AngleA 270 add a sub tx@Dict begin /angleB ED /angleA ED /r ED /c 57.2957 r Div def /y ED /x ED } def /NCBox { /d ED /h ED /AngleB yB yA sub xB xA sub Atan def /AngleA AngleB 180 add def GetEdgeA GetEdgeB /dx d AngleB sin mul def /dy d AngleB cos mul neg def /hx h AngleB sin mul neg def /hy h AngleB cos mul def /LPutVar [ xA1 hx add yA1 hy add xB1 hx add yB1 hy add xB1 dx add yB1 dy add xA1 dx add yA1 dy add ] cvx def /LPutPos { LPutLines } def /HPutPos { xB yB xA yA LPutLine } def /VPutPos { HPutPos } def mark LPutVar tx@Dict begin false Polygon end } def /NCArcBox { /l ED neg /d ED /h ED /a ED /AngleA yB yA sub xB xA sub Atan def /AngleB AngleA 180 add def /tA AngleA a sub 90 add def /tB tA a 2 mul add def /r xB xA sub tA cos tB cos sub Div dup 0 eq { pop 1 } if def /x0 xA r tA cos mul add def /y0 yA r tA sin mul add def /c 57.2958 r div def /AngleA AngleA a sub 180 add def /AngleB AngleB a add 180 add def GetEdgeA GetEdgeB /AngleA tA 180 add yA yA1 sub xA xA1 sub Pyth c mul sub def /AngleB tB 180 add yB yB1 sub xB xB1 sub Pyth c mul add def l 0 eq { x0 y0 r h add AngleA AngleB arc x0 y0 r d add AngleB AngleA arcn } { x0 y0 translate /tA AngleA l c mul add def /tB AngleB l c mul sub def 0 0 r h add tA tB arc r h add AngleB PtoC r d add AngleB PtoC 2 copy 6 2 roll l arcto 4 { pop } repeat r d add tB PtoC l arcto 4 { pop } repeat 0 0 r d add tB tA arcn r d add AngleA PtoC r h add AngleA PtoC 2 copy 6 2 roll l arcto 4 { pop } repeat r h add tA PtoC l arcto 4 { pop } repeat } ifelse closepath /LPutVar [ x0 y0 r AngleA AngleB h d ] cvx def /LPutPos { LPutVar /d ED /h ED /AngleB ED /AngleA ED /r ED /y0 ED /x0 ED t 1 le { r h add AngleA 1 t sub mul AngleB t mul add dup 90 add /NAngle ED PtoC } { t 2 lt { /NAngle AngleB 180 add def r 2 t sub h mul t 1 sub d mul add add AngleB PtoC } { t 3 lt { r d add AngleB 3 t sub mul AngleA 2 t sub mul add dup 90 sub /NAngle ED PtoC } { /NAngle AngleA 180 add def r 4 t sub d mul t 3 sub h mul add add AngleA PtoC } ifelse } ifelse } ifelse y0 add /Y ED x0 add /X ED } def /HPutPos { LPutPos } def /VPutPos { LPutPos } def } def /Tfan { /AngleA yB yA sub xB xA sub Atan def GetEdgeA w xA1 xB sub yA1 yB sub Pyth Pyth w Div CLW 2 div mul 2 div dup AngleA sin mul yA1 add /yA1 ED AngleA cos mul xA1 add /xA1 ED /LPutVar [ xA1 yA1 m { xB w add yB xB w sub yB } { xB yB w sub xB yB w add } ifelse xA1 yA1 ] cvx def /LPutPos { LPutLines } def /VPutPos@ { LPutVar flag { 8 4 roll pop pop pop pop } { pop pop pop pop 4 2 roll } ifelse } def /VPutPos { VPutPos@ VPutLine } def /HPutPos { VPutPos@ HPutLine } def mark LPutVar tx@Dict begin /ArrowA { moveto } def /ArrowB { } def false Line closepath end } def /LPutCoor { NAngle tx@Dict begin /NAngle ED end gsave CM STV CP Y sub neg exch X sub neg exch moveto setmatrix CP grestore } def /LPut { tx@NodeDict /LPutPos known { LPutPos } { CP /Y ED /X ED /NAngle 0 def } ifelse LPutCoor } def /HPutAdjust { Sin Cos mul 0 eq { 0 } { d Cos mul Sin div flag not { neg } if h Cos mul Sin div flag { neg } if 2 copy gt { pop } { exch pop } ifelse } ifelse s add flag { r add neg } { l add } ifelse X add /X ED } def /VPutAdjust { Sin Cos mul 0 eq { 0 } { l Sin mul Cos div flag { neg } if r Sin mul Cos div flag not { neg } if 2 copy gt { pop } { exch pop } ifelse } ifelse s add flag { d add } { h add neg } ifelse Y add /Y ED } def end % END pst-node.pro rivet-1.8.3/data/texmf/dvips/pstricks/pst-dots.pro0000644000175000017500000001517312116077756020415 0ustar sunsun% $Id: pst-dots.pro 26 2008-06-14 11:50:02Z herbert $ % %% PostScript prologue for pstricks.tex. %% Version 2.02, 2008/04/18 %% %% For distribution, see pstricks.tex. %% %% Timothy Van Zandt %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives %% in directory macros/latex/base/lppl.txt. %% %% Modified by Etienne Riga - Dec. 16, 1999 %% Modified by Etienne Riga - 2005/01/01 (er) %% to add /Diamond, /SolidDiamond and /BoldDiamond %% Modified by Herbert Voss (hv) - 2008/04/17 % 10 dict dup begin % hold local /FontType 3 def /FontMatrix [.001 0 0 .001 0 0] def /FontBBox [-571.5 -742.5 571.5 742.5] def % /FontBBox [-1000 -1000 1000 1000] def % See end of file in /BuildGlyph /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for % fill the array with /.notdef Encoding % replace with given dot names dup (b) 0 get /Bullet put % get the numerical position of b in ASCII % % and save /Bullet at this place in Encoding dup (c) 0 get /Circle put dup (C) 0 get /BoldCircle put % 67 dup (u) 0 get /SolidTriangle put dup (t) 0 get /Triangle put dup (T) 0 get /BoldTriangle put dup (r) 0 get /SolidSquare put dup (s) 0 get /Square put dup (S) 0 get /BoldSquare put dup (q) 0 get /SolidPentagon put dup (p) 0 get /Pentagon put dup (P) 0 get /BoldPentagon put %%% dup (k) 0 get /Asterisk put dup (K) 0 get /BoldAsterisk put dup (J) 0 get /SolidAsterisk put dup (h) 0 get /Hexagon put dup (H) 0 get /BoldHexagon put dup (G) 0 get /SolidHexagon put dup (f) 0 get /Octogon put % 2008-04-18 hv dup (F) 0 get /BoldOctogon put % 2008-04-18 hv dup (g) 0 get /SolidOctogon put % 2008-04-18 hv dup (a) 0 get /Add put dup (A) 0 get /BoldAdd put % 65 dup (x) 0 get /Mul put dup (X) 0 get /BoldMul put dup (m) 0 get /Oplus put dup (M) 0 get /BOplus put dup (e) 0 get /SolidOplus put dup (n) 0 get /Otimes put dup (N) 0 get /BOtimes put dup (E) 0 get /SolidOtimes put dup (i) 0 get /Bar put dup (I) 0 get /BoldBar put dup (l) 0 get /SolidDiamond put dup (d) 0 get /Diamond put (D) 0 get /BoldDiamond put %%% /CharProcs 47 dict def CharProcs begin /CirclePath {0 0 500 0 360 arc closepath} def /Bullet {CirclePath fill} def /Circle {CirclePath .9 .9 scale CirclePath eofill} def /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath} def /SolidTriangle {TrianglePath fill} def /Triangle {TrianglePath .85 .85 scale TrianglePath eofill} def /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto closepath} def /SolidSquare {SquarePath fill} def /Square {SquarePath .89 .89 scale SquarePath eofill} def /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def /PentagonPath { -337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto 0 574.7 lineto -546.6 177.6 lineto closepath } def /SolidPentagon {PentagonPath fill} def /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def %-------------- hv begin 2004/07/25 from: er 2003/03/24 /HexagonPath { 0 550 moveto -476 275 lineto -476 -275 lineto 0 -550 lineto 476 -275 lineto 476 275 lineto closepath } def /SolidHexagon {HexagonPath fill} def /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def % 2008-04-18 hv /OctogonPath { 550 dup 22.5 tan mul dup neg dup add /xMove exch def exch moveto 7 { xMove 0 rlineto 45 rotate } repeat closepath } def /SolidOctogon { OctogonPath fill } def /Octogon { OctogonPath .89 .89 scale OctogonPath eofill } def /BoldOctogon { OctogonPath .79 .79 scale OctogonPath eofill } def % /AsteriskPath { 20 0 moveto 10 250 180 500 0 500 curveto -180 500 -10 250 -20 0 curveto closepath } def /Asterisk { AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath fill } def % /Basterp {50 250 220 500 0 500 curveto -220 500 -50 250 -50 30 cos 100 mul curveto} def /BoldAsteriskPath { 50 30 cos 100 mul moveto Basterp 60 rotate Basterp 60 rotate Basterp 60 rotate Basterp 60 rotate Basterp 60 rotate Basterp closepath } def /BoldAsterisk {BoldAsteriskPath fill} def /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def /CrossPath { 40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto 40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath } def /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto 80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath } def /Add {CrossPath fill} def /Mul {45 rotate CrossPath fill} def /BoldAdd {BoldCrossPath fill} def /BoldMul {45 rotate BoldCrossPath fill} def /Oplus {CirclePath .9 .9 scale CirclePath eofill .775 .775 scale CrossPath fill } def /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def /BOplus {CirclePath .8 .8 scale CirclePath eofill .775 .775 scale BoldCrossPath fill} def /Otimes {CirclePath .9 .9 scale CirclePath eofill 45 rotate .775 .775 scale CrossPath fill} def /BOtimes {CirclePath .8 .8 scale CirclePath eofill 45 rotate .775 .775 scale BoldCrossPath fill } def /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto closepath} def /Bar {BarPath fill} def /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto closepath} def /BoldBar {BoldBarPath fill} def /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto 428.5 0 lineto closepath} def /SolidDiamond {DiamondPath fill} def /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def %%% /.notdef { } def end % /BuildGlyph { exch begin % Metrics 1 index get exec 0 0 0 % BBoxes 3 index get exec -1000 -1000 1000 1000 % -571.5 -742.5 571.5 742.5 setcachedevice CharProcs begin load exec end end } def % /BuildChar { 1 index /Encoding get exch get 1 index /BuildGlyph get exec } bind def end /PSTricksDotFont exch definefont pop %% endrivet-1.8.3/data/texmf/dvips/pstricks/pst-algparser.pro0000644000175000017500000007047112116077756021426 0ustar sunsun% $Id: pst-algparser.pro 26 2008-06-14 11:50:02Z herbert $ %% %% PostScript prologue for PSTricks algorithm parser %% Version 0.01, 2008/01/01 %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives %% in directory macros/latex/base/lppl.txt. %% %%-----------------------------------------------------------------------------% % /AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez % /tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin % % PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 % E->T|E+T % T->FS|T*FS % FS -> F | +FS | -FS % F->P|F^SF % P->(E)|literal % literal->number|var|var[E]|func(params) % params->E|E,param % number->TOBEFINISHED % %% E expression, T term, SF signed factor, F factor, P power % %% parser % %% str % %% C->EE %% STR index -> STR index+lenExpr /AnalyzeCond { AnalyzeExpr ReadCondOp AnalyzeExpr EvalCondOp } def % %% analyze Expression List (separator , or | ) %% STR index -> STR index+lenExpr %% /AnalyzeListOfE { %% { NextNonBlankChar pop AnalyzeExpr%%dup Strlen eq { exit } if NextNonBlankChar %% NextNonBlankChar dup 0 eq { pop exit } if %% dup 44 ne 1 index 124 ne and { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } if %% pop NextNonBlankChar dup 0 eq { exit } if 124 ne { PROBLEMCONTACTBILLOU } if 1 add NextNonBlankChar 0 eq {toto} if } loop %% AnalyzeListOfEPostHook %% } def /AnalyzeListOfE { /NotFirst false def { NextNonBlankChar pop AnalyzeExpr NotFirst { EvalListOfExpr } { /NotFirst true def } ifelse dup Strlen eq { exit } if NextNonBlankChar dup 44 ne 1 index 124 ne and { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } if pop 1 add } loop AnalyzeListOfEPostHook } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% E->T|E+T %% STR index -> STR index+lenExpr /AnalyzeExpr { AnalyzePreHook AnalyzeTerm IsEndingExpr { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } { { RollOp 1 add NextNonBlankChar pop AnalyzeTerm PreEvalHook EvalAddSub IsEndingExpr { pop exit } if } loop } ifelse AnalyzePostHook } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% T->FS|T*FS %% STR index /AnalyzeTerm { AnalyzePreHook AnalyzeSignedFactor IsEndingTerm { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } { { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor PreEvalHook EvalMulDiv IsEndingTerm { pop exit } if} loop } ifelse AnalyzePostHook } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% FS -> F | +FS | -FS %% STR index /AnalyzeSignedFactor { AnalyzePreHook 2 copy get dup IsUnaryOp { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor EvalUnaryOp } { pop AnalyzeFactor } ifelse AnalyzePostHook } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% F->P|F^P %% STR index /AnalyzeFactor { AnalyzePreHook AnalyzePower IsEndingFactor { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower IsEndingFactor { pop exit } if} loop } ifelse AnalyzePostHook } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% P->(E)|literal %% STR index /AnalyzePower { %% depending of first char either a number, or a literal 2 copy get dup 40 eq%%an open par { pop 1 add NextNonBlankChar pop AnalyzeExpr 1 add NextNonBlankChar pop } { AnalyzeLiteral } ifelse } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% STR index STR[index] -> STR index %/AnalyzeLiteral { IsNumber { EvalNumber } { EvalLiteral } ifelse } def /AnalyzeLiteral { dup IsUnaryOp exch IsNumber or { EvalNumber } { EvalLiteral } ifelse } def%%dr 09102006 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% recognize + or - %% chr -> T/F /IsUnaryOp { dup 43 eq exch 45 eq or } bind def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% a number can contain only : 0123456789. %% chr -> T/F /IsNumber { dup 48 ge exch dup 57 le 3 -1 roll and exch 46 eq or } bind def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% STR index -> STR index number %% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)? %% STR index -> STR index' number /ReadNumber { exch dup 3 -1 roll dup 3 1 roll %%read mantissa { 1 add 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsNumber not { exit } if pop } loop dup 101 eq exch 69 eq or %%% there is a "e" or "E" -> read exponant { 1 add 2 copy get dup IsUnaryOp { pop 1 add 2 copy get } if { IsNumber not { exit } if 1 add 2 copy get } loop } if dup 4 1 roll 3 -1 roll exch 1 index sub getinterval } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% a number can contain only : 0123456789. %% chr -> T/F /IsCondOp { dup 30 eq exch dup 60 ge exch 62 le and or } bind def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% STR index -> STR index number %% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)? %% STR index -> STR index' number /ReadCondOp { NextNonBlankChar 1 index 4 1 roll { IsCondOp not { exit } if 1 add 2 copy get } loop 2 copy 5 -1 roll exch 1 index sub getinterval 3 1 roll } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% a literal can contain only : 0123456789. %% chr -> T/F /IsLiteral {% dup 48 ge exch dup 57 le 3 -1 roll and exch dup 65 ge exch dup 90 le 3 -1 roll and 3 -1 roll or exch dup 97 ge exch 122 le and or } bind def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% a literal can be of the form [a-zA-Z][a-zA-Z0-9]*\(\((Expression)\)|\(\[Expression\]\)\)? %% STR index -> literal STR index' nextchr /ReadLiteral { exch dup 3 -1 roll dup 3 1 roll %%read literal core { 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsLiteral not { exit } if pop 1 add } loop 4 1 roll dup 5 1 roll 3 -1 roll exch 1 index sub getinterval 4 1 roll } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% expr is ended by end of str or a clpar %% STR index -> STR index STR[index] T/F /IsEndingExpr {% 2 copy dup Strlen eq %% if end of str is reached -> end ! { pop pop 0 true } %% ending chr -> clpar, comma, |, <, >, =, !, {get dup dup 41 eq exch dup 124 eq exch dup 93 eq exch dup 44 eq exch dup 30 eq exch dup 60 ge exch 62 le and or or or or or} ifelse } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% expr is ended by end of str or a +- %% STR index -> STR index STR[index] T/F /IsEndingTerm { IsEndingExpr { true } { dup dup 43 eq exch 45 eq or } ifelse } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% expr is ended by end of str or */ %% STR index -> STR index STR[index] T/F /IsEndingFactor { IsEndingTerm { true } { dup dup 42 eq exch 47 eq or } ifelse } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% expr is ended by end of str or ^ %% STR index -> STR index STR[index] T/F /IsEndingPower { IsEndingFactor { true } { dup 94 eq } ifelse } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% STR index -> STR index STR[index] /NextNonBlankChar { { dup Strlen eq { 0 exit } if 2 copy get dup neBlkChar { exit } if pop 1 add } loop } bind def /neBlkChar { dup 32 ne exch dup 10 ne exch 9 ne and and } bind def %%%%%%%%%%%%%%%%%%%%%%%% %% DEBUG /BRK {false} def /BRKtrue {/BRK true def} def /BRKStop {BRK {BRKtoto} if } def /BRKEvalStop {BRK exch if } def /BRKBRK2true {BRK {BRK2true} if } def /BRK2 {false} def /BRK2true {/BRK2 true def} def /BRK2Stop {BRK2 {BRK2toto} if } def/BRK {false} def end % %-------------------------------------------------------------------------------% % /tx@AlgToPs 12 dict def tx@AlgToPs begin % %% algExpr -> PSVector /AlgToPs { tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE pop pop EndingSequence end } def /EndingSequence { ExpressionVector aload length /end cvx exch 1 add array astore } def /InitParser { /ExpressionVector [ /tx@AddMathFunc cvx /begin cvx ] def dup length /Strlen exch def 0 } def /Strlen 0 def /EvalListOfExpr {} def% /EvalNumber {% ReadNumber cvr /ExpressionVector ExpressionVector aload length dup 3 add -1 roll cvx exch 1 add array astore def NextNonBlankChar pop } def /EvalAddSub {% /ExpressionVector ExpressionVector aload length dup 5 add -1 roll 43 eq { /add } { /sub } ifelse cvx exch 1 add array astore def } def /EvalMulDiv {% /ExpressionVector ExpressionVector aload length dup 5 add -1 roll 42 eq { /mul } { /div } ifelse cvx exch 1 add array astore def } def /EvalPower {% /ExpressionVector ExpressionVector aload length dup 5 add -1 roll pop /exp cvx exch 1 add array astore def } def /EvalLiteral {% ReadLiteral dup 40 eq%%% there is an open par -> function call { pop 2 index dup (Sum) eq { EvalSum } { dup (IfTE) eq { EvalCond } { dup (Derive) eq { pop EvalDerive } { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc /ExpressionVector ExpressionVector aload length dup 5 add -1 roll cvn cvx exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse } { /ExpressionVector ExpressionVector aload length dup 6 add -1 roll cvn cvx exch 1 add array astore def dup 91 eq%%% there is an open bracket -> vector element { pop 1 add NextNonBlankChar pop AnalyzeExpr /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def 1 add } { pop NextNonBlankChar pop } ifelse} ifelse } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% the derive function : Derive(n,f(x)) %% firstparindex lastparindex -> /EvalDerive { %% manage the function descripiton 1 add ReadNumber 3 1 roll NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if 1 add NextNonBlankChar pop 3 -1 roll cvi dup 0 eq { pop AnalyzeExpr 3 -1 roll pop 1 add } { 1 sub 3 1 roll (x) exch tx@Derive begin DeriveIndexed end 4 -1 roll { (x) tx@Derive begin Derive end } repeat ExpressionVector exch /ExpressionVector [] def AlgToPs aload length /ExpressionVector 1 index 3 add -1 roll aload length dup 3 add -1 roll /l2 exch def /l1 exch def l1 l2 add 1 add l2 neg roll l1 l2 add array astore def 3 -1 roll pop 1 add 1 index length /Strlen exch def } ifelse } def /EvalSum {% pop 1 add NextNonBlankChar pop %% read the variable name ReadLiteral pop NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if %% read the initial value 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if %% read the increment value 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if %% read the limit value 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if /ExpressionVector ExpressionVector aload length dup 7 add -3 roll 0 4 1 roll 5 -1 roll 4 add array astore def %% keep ExpressionVector for later and create a new one for internal Sum computation ExpressionVector 3 1 roll /ExpressionVector [ 6 -1 roll cvn /exch cvx /def cvx ] def 1 add NextNonBlankChar pop AnalyzeExpr %% add each term /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def /ExpressionVector 4 -1 roll aload length ExpressionVector cvx /for cvx 3 -1 roll 2 add array astore def 3 -1 roll pop 1 add } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Convert to radians if trigo function call %% (name) -> /TrigoFunc { dup (cos) eq 1 index (sin) eq or exch (tan) eq or { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add array astore def } if } def /EvalCond {% pop 1 add AnalyzeCond NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if ExpressionVector 3 1 roll /ExpressionVector [] def 1 add AnalyzeExpr ExpressionVector 3 1 roll /ExpressionVector [] def NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if 1 add AnalyzeExpr NextNonBlankChar 41 ne { ANALYZER_ERROR_missing_ending parenthesis_in_IfTE } if ExpressionVector /ExpressionVector 6 -1 roll aload length dup 6 add -1 roll cvx exch dup 4 add -1 roll cvx /ifelse cvx 3 -1 roll 3 add array astore def 1 add 3 -1 roll pop } def %% CondOp STR index /EvalCondOp {% 3 -1 roll dup (=) eq { /eq } {% dup (<) eq { /lt } {% dup (>) eq { /gt } {% dup (>=) eq { /ge } {% dup (<=) eq { /ge } {% dup (!=) eq { /ne } { ERROR_non_valid_conditional_operator } ifelse } ifelse } ifelse } ifelse } ifelse } ifelse cvx exch pop /ExpressionVector ExpressionVector aload length dup 3 add -1 roll exch 1 add array astore def } def /EvalUnaryOp { 3 -1 roll 45 eq { /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def } if } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% H O O K S /AnalyzePreHook {} bind def /PreEvalHook {} bind def /AnalyzeListOfEPostHook {} bind def /AnalyzePostHook {} def /RollOp { 3 1 roll } bind def end %tx@CoreAnalyzerDict % %--------------------------------------------------------------------% % /tx@Derive 41 dict def tx@Derive begin %%increase ^^ for each function added %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% algExpr variable -> PSVector /Derive {% 10240 string 3 1 roll 0 3 1 roll /Variable exch def tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE end } def /Strlen 0 def /InitParser { dup length /Strlen exch def 0 } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% algExpr variable index -> PSVector /DeriveIndexed {% 3 1 roll 10240 string 3 1 roll 0 3 1 roll /Variable exch def tx@CoreAnalyzerDict begin InitParser pop 4 -1 roll AnalyzeExpr 4 -2 roll pop pop 4 -2 roll exch pop end } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% (u,v)'=-(u',v') /EvalListOfExpr {% 4 2 roll 2 copy 9 -1 roll dup length 4 1 roll putinterval add AddPipe 2 copy 7 -1 roll dup length 4 1 roll putinterval add 6 -2 roll pop pop 2 copy pop 0 6 2 roll GetIntervalNewStr 5 1 roll 2 copy 0 exch getinterval 6 1 roll } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% (-u)'=-(u') /EvalUnaryOp { 4 -2 roll 4 index (0) eq { (0) StrConcat 7 -1 roll pop } { 7 -1 roll 45 eq { AddSub AddOpPar true } { false } ifelse 3 1 roll 5 index StrConcat 3 -1 roll { AddClPar } if } ifelse 2 copy pop 0 6 2 roll GetIntervalNewStr 7 -2 roll pop pop 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% (number)'=0 /EvalNumber { ReadNumber (0) 6 2 roll } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% (u+v)'=u'+v' /EvalAddSub {% 7 index dup (0) eq { pop true }%% du=0 nothing added { dup length exch 5 index 5 index 3 -1 roll putinterval 4 -1 roll add 3 1 roll false } ifelse 5 index dup (0) eq { pop { (0) } { 4 -2 roll 2 copy pop 0 6 2 roll GetIntervalNewStr } ifelse }%%dv=0 { exch { 5 -2 roll 7 index 45 eq { AddSub } if false } %%nothing yet added { 5 -2 roll 7 index 43 eq%%something yet added { AddAdd false } { AddSub AddOpPar true } ifelse } ifelse 11 1 roll 3 -1 roll StrConcat 10 -1 roll { AddClPar } if 2 copy pop 0 6 2 roll GetIntervalNewStr } ifelse mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% (u*v)' or (u/v)' /EvalMulDiv { 6 index 42 eq {EvalMul} {EvalDiv} ifelse } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% (u*v)'=u'*v+u*v' /EvalMul {% 4 -2 roll 7 index dup (0) eq { pop false }%%du=0 { (1) eq%%du=1 { false } { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if true }%%du!=0 ifelse 5 1 roll 5 index (0) eq { 5 -1 roll not { (0) StrConcat } if }%%dv=0 { 5 -1 roll { AddAdd } if 4 index (1) eq { 8 index StrConcat } { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar } ifelse }%%dv!=0 ifelse 2 copy pop 0 6 2 roll GetIntervalNewStr mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% (u/v)'=(u'*v-u*v')/v^2 /EvalDiv {% 4 -2 roll 4 index (0) eq%%dv=0 -> u'/v { 7 index (0) eq { (0) StrConcat } { AddOpPar 7 index StrConcat AddClPar AddDiv 5 index StrConcat } ifelse } { 7 index dup (0) eq { pop }%%du=0 { (1) eq%%du=1 { false } { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if}%%du!=0 ifelse AddSub 4 index (1) eq { 8 index StrConcat } { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar } ifelse %}%%dv!=0 2 copy GetIntervalNewStr 3 1 roll pop 0 AddOpPar 3 -1 roll StrConcat AddClPar AddDiv AddOpPar 5 index StrConcat AddClPar 2 copy (^2) putinterval 2 add } ifelse 2 copy pop 0 6 2 roll GetIntervalNewStr mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% str1 index str2 -> str1 index /StrConcat { dup length 4 2 roll 2 copy 6 -1 roll putinterval 3 -1 roll add } bind def /GetIntervalNewStr { 0 exch getinterval dup length string copy } bind def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% (u^v)'=(u^v)'=u'vu^(v-1)+v'u^(v)ln(u) /EvalPower {% 4 -2 roll 7 index (0) eq {%%if du=0 then (u^v)'=v'ln(u)u^v 4 index (0) eq { (0) StrConcat }%%if dv=0 then (u^v)'=0 { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if 8 index (e) ne { (ln\() StrConcat 8 index StrConcat (\)*) StrConcat } if AddOpPar 8 index StrConcat (\)^\() StrConcat 5 index StrConcat AddClPar } ifelse } {%%du!=0 4 index (0) eq {%%if dv=0 then (u^v)'=vu'u^(v-1) 5 index dup IsStrNumber { dup (0) eq { StrConcat } { dup dup (1) eq exch (1.0) eq or { StrConcat } { StrConcat 7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 1 { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 09102006 (*\() StrConcat 8 index StrConcat (\)) StrConcat 5 index dup dup (2) eq exch (2.0) eq or { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse } { pop AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat 5 index StrConcat (-1\)) StrConcat } ifelse } {%%if dv!=0 and du!=0 then (u^v)'=u'vu^(v-1)+v'u^(v)ln(u) 7 index (1) ne { AddOpPar 7 index StrConcat (\)*) StrConcat } if AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat 5 index StrConcat (-1\)+\() StrConcat 4 index (1) ne { 4 index StrConcat (\)*\() StrConcat } if 8 index StrConcat (\)^\() StrConcat 5 index StrConcat (\)*ln\() StrConcat 8 index StrConcat AddClPar } ifelse } ifelse 2 copy pop 0 6 2 roll GetIntervalNewStr mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% str -> true/false /IsStrNumber {% true exch { dup 48 lt exch dup 57 gt 3 -1 roll or exch dup 46 ne%%. exch dup 43 ne%%+ exch 45 ne%%- and and and { pop false } if } forall } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% literal switch -> func call, vector, variables /EvalLiteral {% ReadLiteral dup 40 eq%%% there is an open par -> function call { pop (EvalFunc_ ) 9 4 index StrConcat 0 exch getinterval cvn cvx exec } { dup 91 eq%%% there is an open bracket -> vector element { ERROR_vector_not_yet_implemented } { pop EvalVariable } ifelse } ifelse } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% first last parpos Expr[first:parpos-1] -> /EvalVariable { 2 index Variable eq { (1) } { (0) } ifelse 4 -1 roll exch 6 2 roll } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% (f(u))'=u'f'(u) /EvalFunc { 4 2 roll 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if (Eval ) 4 8 index StrConcat 0 exch getinterval cvn cvx exec 2 copy pop 0 6 2 roll GetIntervalNewStr mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Func derivative -> Eval /EvalFunc_sin {% PreCommonFunc { (cos\() StrConcat 5 index StrConcat AddClPar } if PostCommonFunc } def /EvalFunc_cos {% PreCommonFunc { (\(-sin\() StrConcat 5 index StrConcat (\)\)) StrConcat } if PostCommonFunc } def /EvalFunc_tan {% PreCommonFunc { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/cos\() StrConcat 5 index StrConcat (\)^2) StrConcat } if PostCommonFunc } def /EvalFunc_asin {% PreCommonFunc { (1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if PostCommonFunc } def /EvalFunc_acos {% PreCommonFunc { (-1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if PostCommonFunc } def /EvalFunc_atg {% PreCommonFunc { (1/\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if PostCommonFunc } def /EvalFunc_ln {% PreCommonFunc { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\() StrConcat 5 index StrConcat AddClPar } if PostCommonFunc } def /EvalFunc_exp {% PreCommonFunc { (exp\() StrConcat 5 index StrConcat AddClPar } if PostCommonFunc } def /EvalFunc_sqrt {% PreCommonFunc { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if PostCommonFunc } def /EvalFunc_Fact {% PreCommonFunc { ERROR_no_variable_expression_in_Fact } if PostCommonFunc } def /EvalFunc_sh {% PreCommonFunc { (ch\() StrConcat 5 index StrConcat AddClPar } if PostCommonFunc } def /EvalFunc_ch {% PreCommonFunc { (sh\() StrConcat 5 index StrConcat AddClPar } if PostCommonFunc } def /EvalFunc_th {% PreCommonFunc { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/ch\() StrConcat 5 index StrConcat (\)^2) StrConcat } if PostCommonFunc } def /EvalFunc_Argsh {% PreCommonFunc { (1/sqrt\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if PostCommonFunc } def /EvalFunc_Argch {% PreCommonFunc { (1/sqrt\(\() StrConcat 5 index StrConcat (\)^2-1\)\)) StrConcat } if PostCommonFunc } def /EvalFunc_Argth {% PreCommonFunc { (1/\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if PostCommonFunc } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /PreCommonFunc { 1 add NextNonBlankChar pop 3 -1 roll 5 1 roll AnalyzeExpr 1 add NextNonBlankChar pop 4 2 roll 4 index (0) eq { (0) StrConcat false } { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if true } ifelse } def /PostCommonFunc { 2 copy pop 0 6 2 roll GetIntervalNewStr mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll } def /EvalFunc_Derive {% 1 add ReadNumber cvi 1 add dup cvr log 1 add cvi string cvs 4 -1 roll pop 5 1 roll 1 add NextNonBlankChar pop AnalyzeExpr 1 add 4 -2 roll (Derive\() StrConcat 7 -1 roll StrConcat (,) StrConcat 6 -1 roll StrConcat AddClPar 2 copy pop 0 6 2 roll GetIntervalNewStr 6 -1 roll pop 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% literal switch -> func call, vector, variables /EvalFunc_Sum {% 1 add NextNonBlankChar pop %% read the variable name ReadLiteral pop 3 -1 roll pop NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if %% read the initial value 1 add NextNonBlankChar pop ReadNumber pop 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if %% read the increment value 1 add NextNonBlankChar pop ReadNumber pop 2 copy get 44 ne { ANALYZER_ERROR_missing_third_comma_in_Sum } if %% read the limit value 1 add NextNonBlankChar pop ReadNumber pop 2 copy get 44 ne { ANALYZER_ERROR_missing_fourth_comma_in_Sum } if 1 add NextNonBlankChar pop dup 6 1 roll 3 -1 roll pop AnalyzeExpr 1 add NextNonBlankChar pop 4 -2 roll 3 index 8 index dup 9 index exch sub getinterval StrConcat 4 index StrConcat AddClPar 2 copy pop 0 6 2 roll GetIntervalNewStr mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% literal switch -> func call, vector, variables /EvalFunc_IfTE {% 3 -1 roll pop 1 add NextNonBlankChar pop SkipCond NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if 1 add NextNonBlankChar pop dup 5 1 roll AnalyzeExpr NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if 1 add NextNonBlankChar pop AnalyzeExpr 1 add NextNonBlankChar pop 4 -2 roll 3 index 10 index dup 11 index exch sub getinterval StrConcat 6 index StrConcat (,) StrConcat 4 index StrConcat AddClPar 2 copy pop 0 6 2 roll GetIntervalNewStr mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% advance in str until a comma is found (no error detection!) %% str index -> str index' /SkipCond { { 1 add 2 copy get 44 eq {exit } if } loop } bind def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Convert to radians if trigo function call %% (name) -> /TrigoFunc { dup (cos) eq 1 index (sin) eq or exch (tan) eq or { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add array astore def } if } def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% No derivative for condition.... /EvalCondOp { 3 -1 roll pop } bind def /PutIntervalOneAdd {putinterval 1 add} bind def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Add open parenthesis in string at the given index %% str index -> str index+1 /AddOpPar {2 copy (\() PutIntervalOneAdd} bind def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Add close parenthesis in string at the given index %% str index -> str index+1 /AddClPar {2 copy (\)) PutIntervalOneAdd} bind def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Add 0 in string at the given index %% str index -> str index+1 /AddZero {2 copy (0) PutIntervalOneAdd} bind def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Add open parenthesis in string at the given index %% str index -> str index+1 /AddMul {2 copy (*) PutIntervalOneAdd} bind def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Add open parenthesis in string at the given index %% str index -> str index+1 /AddDiv {2 copy (/) PutIntervalOneAdd} bind def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Add a plus sign in string at the given index %% str index -> str index+1 /AddAdd {2 copy (+) PutIntervalOneAdd} bind def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Add a minus sign in string at the given index %% str index -> str index+1 /AddSub {2 copy (-) PutIntervalOneAdd} bind def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Add a pipe sign in string at the given index %% str index -> str index+1 /AddPipe {2 copy (|) PutIntervalOneAdd} bind def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% H O O K S /AnalyzePreHook { dup 5 1 roll } bind def /PreEvalHook {} def /AnalyzePostHook { 7 -1 roll pop } bind def /AnalyzeListOfEPostHook { 6 -1 roll mark 6 1 roll cleartomark } bind def /RollOp { 5 1 roll } bind def end%%%tx@CoreAnalyzerDict /tx@AddMathFunc 12 dict def tx@AddMathFunc begin %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% NEW FUNC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% function arcsine in radians asin(x)=atan(x/sqrt(1-x^2)) %% x -> theta /asin {% dup abs 1 gt { EQDFasinrangeerror } if dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if DegtoRad } def %% function arccosine in radians acos(x)=atan(sqrt(1-x^2)/x) %% x -> theta /acos {% dup abs 1 gt { EQDFacosrangeerror } if dup dup mul 1 exch sub sqrt exch atan DegtoRad } def %% function arctangent in radians %% x -> theta /atg { 1 atan dup 90 gt { 360 sub } if DegtoRad } bind def %% HYPERBOLIC FUNCTIONS /sh { dup Ex exch neg Ex sub 2 div } def /ch { dup Ex exch neg Ex add 2 div } def /th { dup sh exch ch div } def /Argsh { dup dup mul 1 add sqrt add ln } def /Argch { dup dup mul 1 sub sqrt add ln } def /Argth { dup 1 add exch 1 exch sub div ln 2 div } def %% modified exponential funtion for 0 %% x n -> x^n /Exp { dup 0 eq { pop pop 1 } { exp } ifelse } bind def %% modified exponential funtion for 0 %% x -> e^x /Ex { Euler exch exp } bind def %% %% factorial function %% n -> n! /Fact { 1 exch 2 exch 1 exch { mul } for } bind def /fact { Fact } bind def end % END pstricks.pro rivet-1.8.3/data/texmf/dvips/pstricks-add/0000755000175000017500000000000012116077756016635 5ustar sunsunrivet-1.8.3/data/texmf/dvips/pstricks-add/pstricks-add.pro0000644000175000017500000001044412116077756021752 0ustar sunsun%% $Id: pstricks-add.pro 23 2008-05-15 21:51:18Z herbert $ % PostScript prologue for pstricks-add.tex. % Version 0.20, 2008/01/01 % For distribution, see pstricks.tex. % % HISTORY -> see file Changes % /tx@addDict 410 dict def tx@addDict begin %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /GTriangle { gsave /mtrx CM def /colorA ED /colorB ED /colorC ED % save the colors /yA ED /xA ED % save the origin xA yA translate rotate % \psk@gangle /yB ED /xB ED /yC ED /xC ED % save other coordinates /ds [ % save data in a array 0 0 0 colorA aload pop % fd x y xr xg xb 0 xB xA sub yB yA sub colorB aload pop 0 xC xA sub yC yA sub colorC aload pop % 1 xC xB add yB colorA aload pop % for use with 4 points ABCD ] def newpath << /ShadingType 4 % single Gouraud /ColorSpace [ /DeviceRGB ] /DataSource ds >> shfill closepath mtrx setmatrix grestore} def % /RGBtoCMYK { % on stack r g b 3 dict begin /Blue ED /Green ED /Red ED 1 Red sub % Cyan 1 Green sub % Magenta 1 Blue sub % Yellow 0 % Black end } def % /CMYKtoGRAY { % c m y k on stack exch 0.11 mul add exch 0.59 mul add exch 0.3 mul add dup 1 gt { pop 1 } if neg 1 add } def % /RGBtoGRAY { 0.11 mul exch 0.59 mul add exch 0.3 mul add } def % /HSBtoGRAY { 6 dict begin /b exch def /s exch def 6 mul dup cvi dup /i exch def sub /f exch def /F [[0 1 f sub 1][f 0 1][1 0 1 f sub][1 f 0][1 f sub 1 0][0 1 f][0 1 1]] def F i get { s mul neg 1 add b mul} forall 0.11 mul exch 0.59 mul add exch 0.3 mul add end } def % %% convertisseur longueur d'onde ->R,G,B Manuel Luque %% lambda max=780 nanometres %% lambda min=380 nanometres %% adaptation de : %% http://www.physics.sfasu.edu/astro/color.html %% www.efg2.com/lab % /Gamma 0.8 def /calculateRGB { lambda 379 le {/Red 0 def /Green 0 def /Blue 0 def} if lambda 781 ge {/Red 0 def /Green 0 def /Blue 0 def} if lambda 380 ge {lambda 439 le { /R {lambda 440 sub neg 440 380 sub div} def /Red R factor mul Gamma exp def /G 0 def /Green G factor mul Gamma exp def /B 1 def /Blue B factor mul Gamma exp def} if } if lambda 440 ge { lambda 489 le { /G {lambda 440 sub 490 440 sub div} def /Green G factor mul Gamma exp def /R 0 def /Red 0 def /B 1 def /Blue B factor mul Gamma exp def } if } if lambda 490 ge {lambda 509 le { /B {lambda 510 sub neg 510 490 sub div} def /Blue B factor mul Gamma exp def /R 0 def /Red 0 def /G 1 def /Green G factor mul Gamma exp def } if } if lambda 510 ge {lambda 579 le { /R {lambda 510 sub 580 510 sub div } def /Red R factor mul Gamma exp def /Blue 0 def /G 1 def /Green G factor mul Gamma exp def } if } if lambda 580 ge {lambda 644 le { /G {lambda 645 sub neg 645 580 sub div } def /Green G factor mul Gamma exp def /Blue 0 def /R 1 def /Red R factor mul Gamma exp def } if } if lambda 645 ge { lambda 780 le { /Red 1 factor mul Gamma exp def /Blue 0 def /Green 0 def } if } if } def % /factor { lambda 380 ge {lambda 419 le { 0.3 0.7 lambda 380 sub mul 420 380 sub div add} if } if lambda 420 ge {lambda 700 le { 1 } if } if lambda 701 ge {lambda 780 le { 0.3 0.7 780 lambda sub mul 780 700 sub div add} if } if } def % /wavelengthToRGB { % the wavelength in nm must be on top of the stack cvi /lambda exch def % no floating point here calculateRGB } def % now the colors are saved in Red Green Blue % /wavelengthToCMYK { % the wavelength in nm must be on top of the stack cvi /lambda exch def % no floating point here gsave calculateRGB Red Green Blue RGBtoCMYK /Black ED /Yellow ED /Magenta ED /Cyan ED grestore } def % now the colors are saved in Cyan Magenta Yellow Black % /axfill { 8 dict begin /xw exch def /nl exch def /C1 exch def /y1 exch def/x1 exch def /C0 exch def /y0 exch def/x0 exch def << /ShadingType 2 /ColorSpace /DeviceRGB /Coords [ x0 y0 x1 y1 ] /EmulatorHints [ xw 2 div dup ] /Function << /FunctionType 2 /Domain [0 1] /C0 C0 /C1 C1 /N 1 >> >> shfill end } bind def % end % % END pstricks-add.pro rivet-1.8.3/data/texmf/Makefile.in0000644000175000017500000003153712116616064015165 0ustar sunsun# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = data/texmf DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = dvips tex cnf all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/texmf/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/texmf/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ dist-hook distclean distclean-generic distclean-libtool \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-data-local \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am uninstall uninstall-am uninstall-local install-data-local: for i in `find $(srcdir) -name \*.cfg -o -name \*.pro -o -name \*.sty -o -name \*.tex -o -name \*.cnf` ; \ do \ $(install_sh_DATA) $$i $(DESTDIR)$(pkgdatadir)/texmf/$${i#$(srcdir)/}; \ done uninstall-local: rm -rf $(DESTDIR)$(pkgdatadir)/texmf dist-hook: rm -rf `find $(distdir) -name '.svn'` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: rivet-1.8.3/data/texmf/Makefile.am0000644000175000017500000000053612116077756015160 0ustar sunsuninstall-data-local: for i in `find $(srcdir) -name \*.cfg -o -name \*.pro -o -name \*.sty -o -name \*.tex -o -name \*.cnf` ; \ do \ $(install_sh_DATA) $$i $(DESTDIR)$(pkgdatadir)/texmf/$${i#$(srcdir)/}; \ done uninstall-local: rm -rf $(DESTDIR)$(pkgdatadir)/texmf EXTRA_DIST = dvips tex cnf dist-hook: rm -rf `find $(distdir) -name '.svn'` rivet-1.8.3/data/anainfo/0000755000175000017500000000000012131473212013370 5ustar sunsunrivet-1.8.3/data/anainfo/ATLAS_2012_I1118269.info0000644000175000017500000000335612116077757016631 0ustar sunsunName: ATLAS_2012_I1118269 Year: 2012 Summary: Measurement of the b-hadron production cross section using decays to $D^{*}\mu^-X$ final states in pp collisions at sqrt(s) = 7 TeV with the ATLAS detector Experiment: ATLAS Collider: LHC SpiresID: 9626190 InspireID: 1118269 Status: VALIDATED Authors: - Andy Buckley - Sercan Sen - Peter Skands References: - arXiv:1206.3122 [hep-ex] RunInfo: pp to b-hadron + X at 7 TeV, i.e. switch on "HardQCD:gg2bbbar" and "HardQCD:qqbar2bbbar" flags in Pythia8. NumEvents: 1000000 Beams: [p+, p+] Energies: [7000] PtCuts: [0] Description: 'Measurement of $b$-hadron production cross section using 3.3 pb$^{-1}$ of integrated luminosity, collected during the 2010 LHC run. The $b$-hadrons are selected by partially reconstructing $D^{*}\mu^-X$ final states using only direct semileptonic decays of $b$ to $D^{*}\mu^-X$. Differential cross sections as functions of $p_\perp$ and $|\eta|$.' BibKey: :2012fc BibTeX: '@article{:2012fc, author = "Aad, Georges and others", title = "{Measurement of the b-hadron production cross section using decays to $D^{*}\mu^-X$ final states in pp collisions at sqrt(s) = 7 TeV with the ATLAS detector}", collaboration = "ATLAS Collaboration", journal = "Nucl.Phys.", volume = "B864", pages = "341-381", doi = "10.1016/j.nuclphysb.2012.07.009", year = "2012", eprint = "1206.3122", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-121", SLACcitation = "%%CITATION = ARXIV:1206.3122;%%", }' rivet-1.8.3/data/anainfo/ATLAS_2010_CONF_2010_049.info0000644000175000017500000000234512116077757017443 0ustar sunsunName: ATLAS_2010_CONF_2010_049 Year: 2010 Summary: Cross-section of and fragmentation function in anti-kt track jets Experiment: ATLAS Collider: LHC 7000GeV SpiresID: None Status: PRELIMINARY Authors: - Hendrik Hoeth References: - ATLAS-CONF-2010-049 RunInfo: pp QCD interactions at 7000 GeV including diffractive events. NumEvents: 1000000 Beams: [p+, p+] Energies: [7000] PtCuts: [0] Description: Jets are identified and their properties studied using tracks measured by the ATLAS Inner Detector. Events are selected using a minimum-bias trigger, allowing the emergence of jets at low transverse momentum to be observed and for jets to be studied independently of the calorimeter. Jets are reconstructed using the anti-kt algorithm applied to tracks with two parameter choices, 0.4 and 0.6. An inclusive jet transverse momentum cross section measurement from 4 GeV to 80 GeV is shown, integrated over $|\eta| < 0.57$ and corrected to charged particle-level truth jets. The probability that a particular particle carries a fixed fraction of the jet momentum (fragmentation function) is also measured. All data is corrected to the particle level. ATTENTION - Data read from plots! NeedCrossSection: yes rivet-1.8.3/data/anainfo/OPAL_1998_S3749908.info0000644000175000017500000000234612116077757016572 0ustar sunsunName: OPAL_1998_S3749908 Year: 1998 Summary: Photon and Light Meson Production in Hadronic $Z^0$ Decays Experiment: OPAL Collider: LEP 1 SpiresID: 3749908 Status: VALIDATED Authors: - Peter Richardson References: - Eur.Phys.J.C5:411-437,1998 - hep-ex/9805011 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: The inclusive production rates and differential cross sections of photons and mesons with a final state containing photons have been measured with the OPAL detector at LEP. The light mesons covered by the measurements are the $\pi^0$, $\eta$, $\rho(770)^\pm$, $\omega(782)$, $\eta'(958)$ and $a_0(980)^\pm$. BibKey: Ackerstaff:1998ap BibTeX: '@Article{Ackerstaff:1998ap, author = "Ackerstaff, K. and others", collaboration = "OPAL", title = "{Photon and light meson production in hadronic Z0 decays}", journal = "Eur. Phys. J.", volume = "C5", year = "1998", pages = "411-437", eprint = "hep-ex/9805011", archivePrefix = "arXiv", doi = "10.1007/s100520050286", SLACcitation = "%%CITATION = HEP-EX/9805011;%%" }' rivet-1.8.3/data/anainfo/PDG_HADRON_MULTIPLICITIES.info0000644000175000017500000000230612116077757020154 0ustar sunsunName: PDG_HADRON_MULTIPLICITIES Year: 2008 Summary: Hadron multiplicities in hadronic $e^+e^-$ events Experiment: PDG Collider: Various SpiresID: 7857373 Status: VALIDATED Authors: - Hendrik Hoeth References: - Phys. Lett. B, 667, 1 (2008) RunInfo: Hadronic events in $e^+ e^-$ collisions NumEvents: 1000000 Beams: [e+, e-] Energies: [10, 35, 91.2, 177] PtCuts: [0] Description: Hadron multiplicities in hadronic $e^+e^-$ events, taken from Review of Particle Properties 2008, table 40.1, page 355. Average hadron multiplicities per hadronic $e^+e^-$ annihilation event at $\sqrt{s} \approx {}$ 10, 29--35, 91, and 130--200 GeV. The numbers are averages from various experiments. Correlations of the systematic uncertainties were considered for the calculation of the averages. BibKey: Amsler:2008zzb BibTeX: '@Article{Amsler:2008zzb, author = "Amsler, Claude and others", collaboration = "Particle Data Group", title = "{Review of particle physics}", journal = "Phys. Lett.", volume = "B667", year = "2008", pages = "1", doi = "10.1016/j.physletb.2008.07.018", SLACcitation = "%%CITATION = PHLTA,B667,1;%%" }' rivet-1.8.3/data/anainfo/ALEPH_2001_S4656318.info0000644000175000017500000000241412116077757016625 0ustar sunsunName: ALEPH_2001_S4656318 Year: 2001 Summary: Study of the fragmentation of b quarks into B mesons at the Z peak Experiment: ALEPH Collider: LEP 1 SpiresID: 4656318 Status: VALIDATED Authors: - Peter Richardson References: - Phys.Lett.B512:30-48,2001. - hep-ex/0106051 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: Measurement of the $b$-quark fragmentation function by ALEPH using LEP 1 data. The fragmentation function for both weakly decaying and leading $b$-quarks has been determined. The data used for the plots has been renormalised to give a differential distribution rather than the bin-by-bin average in HEPDATA. BibKey: Heister:2001jg BibTeX: '@Article{Heister:2001jg, author = "Heister, A. and others", collaboration = "ALEPH", title = "{Study of the fragmentation of b quarks into B mesons at the Z peak}", journal = "Phys. Lett.", volume = "B512", year = "2001", pages = "30-48", eprint = "hep-ex/0106051", archivePrefix = "arXiv", doi = "10.1016/S0370-2693(01)00690-6", SLACcitation = "%%CITATION = HEP-EX/0106051;%%" }' rivet-1.8.3/data/anainfo/D0_2010_S8671338.info0000644000175000017500000000270512116077757016245 0ustar sunsunName: D0_2010_S8671338 Year: 2010 Summary: Measurement of differential $Z/\gamma^*$ pT Experiment: D0 Collider: Tevatron Run 2 SpiresID: 8671338 Status: VALIDATED Authors: - Flavia Dias - Gavin Hesketh - Frank Siegert References: - arXiv:1006.0618 [hep-ex] RunInfo: $p \bar{p} \to \mu^+ \mu^-$ + jets at 1960~GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $65 < m_{\mu\mu} < 115$ GeV. Restrict $Z/\gamma^*$ mass range to roughly $50~\text{GeV}/c^2 < m_{\mu\mu} < 120~\text{GeV}/c^2$ for efficiency. Weighted events and kinematic sampling enhancement can help to fill the pT tail. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: Cross section as a function of pT of the Z boson decaying into muons in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96 TeV, based on an integrated luminosity of 0.97 fb$^{-1}$. NeedCrossSection: yes BibKey: Abazov:2010kn BibTeX: '@Article{Abazov:2010kn, author = "Abazov, Victor Mukhamedovich and others", collaboration = "D0", title = "{Measurement of the normalized $Z/\gamma^*\to \mu^+\mu^-$ transverse momentum distribution in $p\bar{p}$ collisions at $\sqrt{s}=1.96$ TeV}", year = "2010", eprint = "1006.0618", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1006.0618;%%" }' rivet-1.8.3/data/anainfo/SLD_1996_S3398250.info0000644000175000017500000000223412116077757016441 0ustar sunsunName: SLD_1996_S3398250 Year: 1996 Summary: Charged particle multiplicities in heavy and light quark initiated events on the $Z^0$ peak Experiment: SLD Collider: SLC SpiresID: 3398250 Status: VALIDATED Authors: - Peter Richardson References: - Phys.Lett.B386:475-485,1996 - hep-ex/9608008 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: Measurements of the mean charged multiplicities separately for $b\bar b$, $c\bar c$ and light quark ($uds$) initiated events in $e^+e^-$ interactions at the $Z^0$ mass. BibKey: Abe:1996zi BibTeX: '@Article{Abe:1996zi, author = "Abe, K. and others", collaboration = "SLD", title = "{Measurement of the charged multiplicities in b, c and light quark events from Z0 decays}", journal = "Phys. Lett.", volume = "B386", year = "1996", pages = "475-485", eprint = "hep-ex/9608008", archivePrefix = "arXiv", doi = "10.1016/0370-2693(96)01025-8", SLACcitation = "%%CITATION = HEP-EX/9608008;%%" }' rivet-1.8.3/data/anainfo/SFM_1984_S1178091.info0000644000175000017500000000236212116077757016440 0ustar sunsunName: SFM_1984_S1178091 Year: 1984 Summary: Charged multiplicity distribution in pp interactions at CERN ISR energies Experiment: SFM Collider: CERN ISR SpiresID: 1178091 Status: UNVALIDATED Authors: - Holger Schulz - Andy Buckley References: - Phys.Rev.D30:528,1984 RunInfo: QCD events, double-diffractive events should be turned on as well. NumEvents: 1000000 Beams: [p+, p+] Energies: [30.4, 44.5, 52.2, 62.2] PtCuts: [0] Description: Charged multiplicities are measured at sqrt(s) = 30.4, 44.5, 52.2 and 62.2 GeV using a minimum-bias trigger. The data is sub-divided into inleastic as well as non-single-diffractive events. However, the implementation of the diffractive events will require some work. BibKey: Breakstone:1983ns BibTeX: '@Article{Breakstone:1983ns, author = "Breakstone, A. and others", collaboration = "Ames-Bologna-CERN-Dortmund-Heidelberg-Warsaw", title = "{Charged Multiplicity Distribution in p p Interactions at ISR Energies}", journal = "Phys. Rev.", volume = "D30", year = "1984", pages = "528", doi = "10.1103/PhysRevD.30.528", SLACcitation = "%%CITATION = PHRVA,D30,528;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2011_S8924791.info0000644000175000017500000000145112116077757016650 0ustar sunsunName: ATLAS_2011_S8924791 Year: 2010 Summary: Jet shapes at 7 TeV in ATLAS Experiment: ATLAS Collider: LHC SpiresID: 8924791 Status: VALIDATED Authors: - Andy Buckley - Francesc Vives - Judith Katzy References: - arXiv:1101.0070 RunInfo: pp QCD interactions at 7TeV GeV, corresponding to JX samples. Matching plots to kinematic pT cut samples, or merging from slices or pT-enhanced sampling is advised. NumEvents: 10000000 Beams: [p+, p+] Energies: [7000] PtCuts: [10, 20, 40, 70, 150, 200, 300] Description: Measurement of jet shapes in inclusive jet production in pp collisions at 7 TeV based on 3pb$^-1$ of data. Jets are reconstructed in $|\eta| < 5$ using the anti-$k_\perp$ algorithm with $30 < pT < 600$ GeV and $|y| < 2.8$. rivet-1.8.3/data/anainfo/CLEO_2004_S5809304.info0000644000175000017500000000235612116077757016522 0ustar sunsunName: CLEO_2004_S5809304 Summary: Charm hadrons from fragmentation near the $\Upsilon(4S)$ Status: VALIDATED Authors: - Peter Richardson References: - Phys.Rev.D70:112001,2004. - arXiv:hep-ex/0402040 RunInfo: $e^+ e^-$ analysis near the $\Upsilon(4S)$ resonance NumEvents: 1000000 SpiresID: 6265367 Beams: [e+, e-] Energies: [10.52] PtCuts: [0] Description: Analysis of charm quark fragmentation at 10.5 GeV, based on a data sample of 103 fb collected by the CLEO experiment. Fragmentation into charm is studied for the charmed hadron ground states, namely $D^0$, $D^+$, as well as the excited states $D^{*0}$ and $D^{*+}$. This analysis can be used to constrain charm fragmentation in Monte Carlo generators. BibKey: Artuso:2004pj BibTeX: '@Article{Artuso:2004pj, author = "Artuso, M. and others", collaboration = "CLEO", title = "{Charm meson spectra in e+ e- annihilation at 10.5-GeV c.m.e}", journal = "Phys. Rev.", volume = "D70", year = "2004", pages = "112001", eprint = "hep-ex/0402040", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.70.112001", SLACcitation = "%%CITATION = HEP-EX/0402040;%%" }' rivet-1.8.3/data/anainfo/OPAL_2001_S4553896.info0000644000175000017500000000273112116077757016540 0ustar sunsunName: OPAL_2001_S4553896 Year: 2001 Summary: Four-jet angles using Durham algorithm Experiment: OPAL Collider: LEP Run 1 SpiresID: 4553896 Status: VALIDATED Authors: - Frank Siegert References: - Eur.Phys.J.C20:601-615,2001 - doi:10.1007/s100520100699 - arXiv:hep-ex/0101044 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) Hadronisation should be turned off because the data is corrected back to the parton level. NumEvents: 10000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: 'Angles between the leading (in energy) four jets defined using the Durham algorithm with $y_\mathrm{cut}=0.008$. The data is presented at the parton level and includes the Bengtsson-Zerwas, Korner-Schierholz-Willrodt and Nachtmann-Reiter angles as well as the angle between the two softest jets.' BibKey: Abbiendi:2001qn BibTeX: '@Article{Abbiendi:2001qn, author = "Abbiendi, G. and others", collaboration = "OPAL", title = "{A simultaneous measurement of the QCD colour factors and the strong coupling}", journal = "Eur. Phys. J.", volume = "C20", year = "2001", pages = "601-615", eprint = "hep-ex/0101044", archivePrefix = "arXiv", doi = "10.1007/s100520100699", SLACcitation = "%%CITATION = HEP-EX/0101044;%%" }' ToDo: - Add y23 and R4(ycut) histograms - Get data from HepData when available (so far just read off the plots) rivet-1.8.3/data/anainfo/CDF_1997_S3541940.info0000644000175000017500000000204612116077757016411 0ustar sunsunName: CDF_1997_S3541940 Year: 1997 Summary: Properties of six jet events with large six jet mass Experiment: CDF Collider: Tevatron Run 1 SpiresID: 3541940 Status: UNVALIDATED Authors: - Frank Siegert References: - Phys.Rev.D56:2532-2543,1997 - doi:10.1103/PhysRevD.56.2532 - http://lss.fnal.gov/archive/1997/pub/Pub-97-093-E.pdf RunInfo: Pure QCD events without underlying event. NumEvents: 1000000 Beams: [p-, p+] Energies: [1800] PtCuts: [0] Description: Multijet distributions corresponding to 20 variables that span the 6-body parameter space in inclusive 6-jet events. BibKey: Abe:1997yb BibTeX: '@Article{Abe:1997yb, author = "Abe, F. and others", collaboration = "CDF", title = "{Properties of six-jet events with large six-jet mass at the Fermilab $p\bar{p}$ collider}", journal = "Phys. Rev.", volume = "D56", year = "1997", pages = "2532-2543", doi = "10.1103/PhysRevD.56.2532", SLACcitation = "%%CITATION = PHRVA,D56,2532;%%" }' rivet-1.8.3/data/anainfo/MC_PHOTONKTSPLITTINGS.info0000644000175000017500000000055412116077757017540 0ustar sunsunName: MC_PHOTONKTSPLITTINGS Summary: Monte Carlo validation observables for photon + jets production Status: VALIDATED Authors: - Frank Siegert References: RunInfo: Tevatron Run II ppbar -> gamma + jets. NumEvents: 10000000 PtCuts: [0] Description: Monte Carlo validation observables for photon + jets production NeedCrossSection: yes rivet-1.8.3/data/anainfo/ATLAS_2011_S9120807.info0000644000175000017500000000230412116077757016631 0ustar sunsunName: ATLAS_2011_S9120807 Year: 2011 Summary: Inclusive isolated diphoton analysis Experiment: ATLAS Collider: LHC 7TeV SpiresID: 9120807 Status: VALIDATED Authors: - Giovanni Marchiori References: - arXiv:1107.0581 [hep-ex] RunInfo: Inclusive diphoton+X events at $\sqrt{s} = 7$~TeV. NumEvents: 1000000 Beams: [p+, p+] Energies: [7000] PtCuts: [16] Description: 'A measurement of the cross section for inclusive isolated photon production at $sqrt{s} = 7$ TeV. The measurement is done in bins of $M_{\gamma\gamma}$, $p_{T\gamma\gamma}$, and $\Delta\phi_{\gamma\gamma}$, for isolated photons with $|\eta|<2.37$ and $E_T^\gamma>16$~GeV. The measurement uses 37 pb$^{-1}$ of integrated luminosity collected with the ATLAS detector.' NeedCrossSection: yes BibTeX: '@Article{Aad:2011mh, author = "Aad, Georges and others", title = "{Measurement of the isolated di-photon cross-section in pp collisions at sqrt(s) = 7 TeV with the ATLAS detector}", collaboration = "ATLAS Collaboration", year = "2011", eprint = "1107.0581", archivePrefix = "arXiv", primaryClass = "hep-ex", } rivet-1.8.3/data/anainfo/UA5_1987_S1640666.info0000644000175000017500000000163412116077757016413 0ustar sunsunName: UA5_1987_S1640666 Year: 1987 Summary: UA5 charged multiplicity measurements at 546 GeV Experiment: UA5 Collider: CERN SPS SpiresID: 1640666 Status: VALIDATED Authors: - Holger Schulz References: - Phys.Rept.154:247-383,1987 RunInfo: QCD and diffractive events at 546 GeV NumEvents: 1000000 Beams: [p-, p+] Energies: [546] PtCuts: Description: 'Charged particle multiplicity measurement.' BibKey: Alner:1987wb BibTeX: '@Article{Alner:1987wb, author = "Alner, G. J. and others", collaboration = "UA5", title = "{UA5: A general study of proton-antiproton physics at $\sqrt{s}$ = 546-GeV}", journal = "Phys. Rept.", volume = "154", year = "1987", pages = "247-383", doi = "10.1016/0370-1573(87)90130-X", SLACcitation = "%%CITATION = PRPLC,154,247;%%" }' ToDo: - Include more distributions rivet-1.8.3/data/anainfo/ARGUS_1993_S2789213.info0000644000175000017500000000236412116077757016703 0ustar sunsunName: ARGUS_1993_S2789213 Summary: Inclusive production of $K^*(892)$, $\rho^0(770)$, and $\omega(783)$ mesons in the upsilon energy region. Status: VALIDATED Authors: - Peter Richardson References: - Z.Phys. C61 (1994) 1-18 RunInfo: $e^+ e^-$ analysis in the 10 GeV CMS energy range NumEvents: 1000000 SpiresID: 2789213 Beams: [e+, e-] Energies: [9.46,10.45,10.58] PtCuts: [0] Description: Measurement of the inclusive production of the vector mesons $K^*(892)$, $\rho^0(770)$ and $\omega(783)$ in $e^+e^-$ annihilation in the Upsilon region by the Argus Collaboration. Useful for tuning simulations of B meson and bottomium decays. BibKey: Albrecht:1993fs BibTeX: '@article{Albrecht:1993fs, author = "Albrecht, H. and others", title = "{Inclusive production of $K^*(892)$, $\rho^0(770)$, and $\omega(783)$ mesons in the $\Upsilon$ energy region}", collaboration = "ARGUS Collaboration", journal = "Z.Phys.", volume = "C61", pages = "1-18", doi = "10.1007/BF01641882", year = "1994", reportNumber = "DESY-93-084", SLACcitation = "%%CITATION = ZEPYA,C61,1;%%", }' rivet-1.8.3/data/anainfo/ATLAS_2012_CONF_2012_153.info0000644000175000017500000000154312116077757017442 0ustar sunsunName: ATLAS_2012_CONF_2012_153 Year: 2012 Summary: 4 or more lepton plus missing transverse energy SUSY search Experiment: ATLAS Collider: LHC Status: PRELIMINARY Authors: - Peter Richardson References: - ATLAS-CONF-2012-153 RunInfo: BSM signal events at 8000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [8000] NeedCrossSection: yes Description: 'Search for SUSY using events with 4 or more leptons in association with missing transverse energy in proton-proton collisions at a centre-of-mass energy of 8 TeV. The data sample has a total integrated luminosity of 13.0 fb$^{-1}$. There is no reference data and in addition to the control plots from the paper the number of events in the two signal regions, correctly normalized to an integrated luminosity 13.0 fb$^{-1}$, are calculated.' rivet-1.8.3/data/anainfo/CDF_2008_S7782535.info0000644000175000017500000000403512116077757016404 0ustar sunsunName: CDF_2008_S7782535 Year: 2008 Summary: CDF Run II $b$-jet shape paper Experiment: CDF Collider: Tevatron Run 2 SpiresID: 7782535 Status: UNVALIDATED Authors: - Alison Lister - Emily Nurse - Andy Buckley References: - arXiv:0806.1699 - Phys.Rev.D78:072005,2008 RunInfo: Requires $2 \rightarrow 2$ QCD scattering processes. The minimum jet $E_\perp$ is 52\;GeV, so kinematic cuts on pTmin may be required for statistical validity. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: A measurement of the shapes of $b$-jets using 300 pb$^{-1}$ of data obtained with CDF II in $p\bar{p}$ collisions at $\sqrt{s}=1.96$ TeV. The measured quantity is the average integrated jet shape, which is computed over an ensemble of jets. This quantity is expressed as $\Psi(r/R) = \langle\frac{p_\perp(0 \rightarrow r)}{p_\perp(0 \rightarrow R)}\rangle$, where $p_\perp(0 \rightarrow r)$ is the scalar sum of the transverse momenta of all objects inside a sub-cone of radius $r$ around the jet axis. The integrated shapes are by definition normalized such that $\Psi(r/R =1) = 1$. The measurement is done in bins of jet pT in the range 52 to 300\;GeV/$c$. The jets have $|\eta| < 0.7$. The $b$-jets are expected to be broader than inclusive jets. Moreover, $b$-jets containing a single $b$-quark are expected to be narrower than those containing a $b \bar{b}$ pair from gluon splitting. BibKey: Aaltonen:2008de BibTeX: '@Article{Aaltonen:2008de, author = "Aaltonen, T. and others", collaboration = "CDF", title = "{Measurement of $b$-jet Shapes in Inclusive Jet Production in $p \bar{p}$ Collisions at $\sqrt{s}$ = 1.96-TeV}", journal = "Phys. Rev.", volume = "D78", year = "2008", pages = "072005", eprint = "0806.1699", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevD.78.072005", SLACcitation = "%%CITATION = 0806.1699;%%" }' rivet-1.8.3/data/anainfo/D0_2008_S7719523.info0000644000175000017500000000444512116077757016255 0ustar sunsunName: D0_2008_S7719523 Year: 2008 Summary: Isolated $\gamma$ + jet cross-sections, differential in pT($\gamma$) for various $y$ bins Experiment: D0 Collider: Tevatron Run 2 SpiresID: 7719523 Status: VALIDATED Authors: - Andy Buckley - Gavin Hesketh - Frank Siegert References: - Phys.Lett.B666:435-445,2008 - doi:10.1016/j.physletb.2008.06.076 - arXiv:0804.1107v2 [hep-ex] RunInfo: "Produce only gamma + jet ($q,\\bar{q},g$) hard processes (for Pythia 6, this means MSEL=10 and MSUB indices 14, 29 & 115 enabled). The lowest bin edge is at 30 GeV, so a kinematic pTmin cut is probably required to fill the histograms." NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [20] Description: The process $p \bar{p}$ -> photon + jet + X as studied by the D0 detector at the Fermilab Tevatron collider at center-of-mass energy sqrt(s) = 1.96 TeV. Photons are reconstructed in the central rapidity region $|y_\gamma| < 1.0$ with transverse momenta in the range 30--400 GeV, while jets are reconstructed in either the central $|y_\text{jet}| < 0.8$ or forward $1.5 < |y_\text{jet}| < 2.5$ rapidity intervals with $pT^\text{jet} > 15~\text{GeV}$. The differential cross section $\mathrm{d}^3 \sigma / \mathrm{d}{pT^\gamma} \mathrm{d}{y_\gamma} \mathrm{d}{y_\text{jet}}$ is measured as a function of $pT^\gamma$ in four regions, differing by the relative orientations of the photon and the jet. MC predictions have trouble with simultaneously describing the measured normalization and $pT^\gamma$ dependence of the cross section in any of the four measured regions. NeedCrossSection: yes BibKey: Abazov:2008er BibTeX: '@Article{Abazov:2008er, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the differential cross-section for the production of an isolated photon with associated jet in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96-TeV}", journal = "Phys. Lett.", volume = "B666", year = "2008", pages = "435-445", eprint = "0804.1107", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1016/j.physletb.2008.06.076", SLACcitation = "%%CITATION = 0804.1107;%%" }' rivet-1.8.3/data/anainfo/OPAL_1995_S3198391.info0000644000175000017500000000176112116077757016561 0ustar sunsunName: OPAL_1995_S3198391 Year: 1995 Summary: $\Delta^{++}$ Production in Hadronic $Z^0$ Decays Experiment: OPAL Collider: LEP 1 SpiresID: 3198391 Status: VALIDATED Authors: - Peter Richardson References: - Phys.Lett.B358:162-172,1995 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: The production of $\Delta^{++}$ baryons measured using 3.5 millon $Z^0$ events by the OPAL experiment at LEP. Only the fragmentation function is implemented. BibKey: Alexander:1995gq BibTeX: '@Article{Alexander:1995gq, author = "Alexander, G. and others", collaboration = "OPAL", title = "{$\Delta^{++}$ production in hadronic $Z^0$ decays}", journal = "Phys. Lett.", volume = "B358", year = "1995", pages = "162-172", doi = "10.1016/0370-2693(95)00935-E", SLACcitation = "%%CITATION = PHLTA,B358,162;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2011_CONF_2011_090.info0000644000175000017500000000116412116077757017437 0ustar sunsunName: ATLAS_2011_CONF_2011_090 Year: 2011 Summary: Single lepton search for supersymmetry Experiment: ATLAS Collider: LHC SpiresID: Status: VALIDATED Authors: - Angela Chen References: - ATLAS-CONF-2011-090 RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] Description: 'Single lepton search for supersymmmetric particles by ATLAS at 7 TeV. Event counts in electron and muon signal regions are implemented as one-bin histograms. Histograms for missing transverse energy and effective mass are implemented for the two signal regions.' rivet-1.8.3/data/anainfo/ATLAS_2012_I1125575.info0000644000175000017500000000333512116077757016624 0ustar sunsunName: ATLAS_2012_I1125575 Year: 2012 Summary: Distributions sensitive to the underlying event are studied in events containing one or more charged-particle. Experiment: ATLAS Collider: LHC InspireID: 1125575 Status: VALIDATED Authors: - Kiran Joshi References: - arXiv:1208.0563 [hep-ex] RunInfo: Minimum bias events at 7 TeV. NumEvents: 1000000 Beams: [p+, p+] Energies: [7000] Description: 'Distributions sensitive to the underlying event are studied in events containing one or more charged-particle. Jets are reconstructed using the antikt algorithm with radius parameter R varying between 0.2 and 1.0. Distributions of the charged-particle multiplicity, the scalar sum of the transverse momentum of charged particles, and the average charged-particle pT are measured as functions of pT^JET in regions transverse to and opposite the leading jet for 4 GeV < pT^JET < 100 GeV. In addition, the R-dependence of the mean values of these observables is studied.' BibKey: :2012fs BibTeX: '@article{:2012fs, author = "Aad, Georges and others", title = "{Underlying event characteristics and their dependence on jet size of charged-particle jet events in $pp$ collisions at $\sqrt{s}=7$ TeV with the ATLAS detector}", collaboration = "ATLAS Collaboration", journal = "Phys.Rev.", volume = "D86", pages = "072004", doi = "10.1103/PhysRevD.86.072004", year = "2012", eprint = "1208.0563", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-148", SLACcitation = "%%CITATION = ARXIV:1208.0563;%%", }' rivet-1.8.3/data/anainfo/MC_HJETS.info0000644000175000017500000000100312116077757015514 0ustar sunsunName: MC_HJETS Summary: Monte Carlo validation observables for $h[\tau^+ \, \tau^-]$ + jets production Status: VALIDATED Authors: - Frank Siegert RunInfo: $h [\to \tau^+ \tau^-]$ + jets. NumEvents: 1000000 PtCuts: [0] Description: The available observables are the Higgs mass, pT of jets 1--4, jet multiplicity, $\Delta\eta(h, \text{jet1})$, $\Delta R(\text{jet2}, \text{jet3})$, differential jet rates 0->1, 1->2, 2->3, 3->4, and integrated 0--4 jet rates. NeedCrossSection: yes rivet-1.8.3/data/anainfo/MC_ZINC.info0000644000175000017500000000066712116077757015421 0ustar sunsunName: MC_ZINC Summary: Monte Carlo validation observables for $Z[e^+ \, e^-]$ production Status: VALIDATED Authors: - Frank Siegert References: RunInfo: $e^+ e^-$ analysis. Needs mass cut on lepton pair to avoid photon singularity, e.g. a min range of $66 < m_{ee} < 116$ GeV NumEvents: 1000000 PtCuts: [0] Description: Monte Carlo validation observables for $Z[e^+ \, e^-]$ production NeedCrossSection: yes rivet-1.8.3/data/anainfo/CDF_1996_S3349578.info0000644000175000017500000000214012116077757016420 0ustar sunsunName: CDF_1996_S3349578 Year: 1996 Summary: Further properties of high-mass multijet events Experiment: CDF Collider: Tevatron Run 1 SpiresID: 3349578 Status: UNVALIDATED Authors: - Frank Siegert References: - Phys.Rev.D54:4221-4233,1996 - doi:10.1103/PhysRevD.54.4221 - arXiv:hep-ex/9605004 RunInfo: Pure QCD events without underlying event. NumEvents: 10000000 Beams: [p-, p+] Energies: [1800] PtCuts: [20] Description: Multijet distributions corresponding to ($4N-4$) variables that span the $N$-body parameter space in inclusive $N = 3$-, 4-, and 5-jet events. BibKey: Abe:1996nn BibTeX: '@Article{Abe:1996nn, author = "Abe, F. and others", collaboration = "CDF", title = "{Further Properties of High-Mass Multijet Events at the Fermilab Proton-Antiproton Collider}", journal = "Phys. Rev.", volume = "D54", year = "1996", pages = "4221-4233", eprint = "hep-ex/9605004", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.54.4221", SLACcitation = "%%CITATION = HEP-EX/9605004;%%" }' rivet-1.8.3/data/anainfo/CMS_2011_S8950903.info0000644000175000017500000000253712116077757016426 0ustar sunsunName: CMS_2011_S8950903 Year: 2011 Summary: Dijet azimuthal decorrelations in $pp$ collisions at $\sqrt{s} = 7$ TeV Experiment: CMS Collider: LHC SpiresID: 8950903 Status: VALIDATED Authors: - Tomo Umer References: - Phys. Rev. Lett. 106 (2011) 122003 - arXiv:1101.5029 [hep-ex] RunInfo: Inclusive QCD at 7TeV comEnergy, ptHat (or equivalent) greater than 20 GeV NumEvents: 100k Beams: [p+, p+] Energies: [7000] PtCuts: [20] Description: Measurements of dijet azimuthal decorrelations in pp collisions at sqrt(s) = 7 TeV using the CMS detector at the CERN LHC are presented. The analysis is based on an inclusive dijet event sample corresponding to an integrated luminosity of 2.9/pb. Jets are anti-kt with $R=0.5$, $p_\perp>80(30)$ GeV and $|\eta|<1.1$. BibKey: Khachatryan:2011zj BibTeX: '@article{Khachatryan:2011zj, author = "Khachatryan, Vardan and others", title = "{Dijet Azimuthal Decorrelations in $pp$ Collisions at $\sqrt{s} = 7$~TeV}", collaboration = "CMS Collaboration", journal = "Phys.Rev.Lett.", volume = "106", pages = "122003", doi = "10.1103/PhysRevLett.106.122003", year = "2011", eprint = "1101.5029", archivePrefix = "arXiv", primaryClass = "hep-ex",}' rivet-1.8.3/data/anainfo/CDF_1996_S3418421.info0000644000175000017500000000206612116077757016407 0ustar sunsunName: CDF_1996_S3418421 Year: 1996 Summary: Dijet angular distributions Experiment: CDF Collider: Tevatron Run 1 SpiresID: 3418421 Status: VALIDATED Authors: - Frank Siegert References: - Phys.Rev.Lett.77:5336-5341,1996 - doi:10.1103/PhysRevLett.77.5336 - arXiv:hep-ex/9609011 RunInfo: QCD dijet events at Tevatron $\sqrt{s}=1.8$ TeV without MPI. NumEvents: 1000000 Beams: [p-, p+] Energies: [1800] PtCuts: [0] Description: Measurement of jet angular distributions in events with two jets in the final state in 5 bins of dijet invariant mass. Based on $106 \mathrm{pb}^{-1}$ BibKey: Abe:1996mj BibTeX: '@Article{Abe:1996mj, author = "Abe, F. and others", collaboration = "CDF", title = "{Measurement of dijet angular distributions at CDF}", journal = "Phys. Rev. Lett.", volume = "77", year = "1996", pages = "5336-5341", eprint = "hep-ex/9609011", archivePrefix = "arXiv", doi = "10.1103/PhysRevLett.77.5336", SLACcitation = "%%CITATION = HEP-EX/9609011;%%" }' rivet-1.8.3/data/anainfo/DELPHI_1995_S3137023.info0000644000175000017500000000203112116077757016743 0ustar sunsunName: DELPHI_1995_S3137023 Year: 1995 Summary: Strange baryon production in $Z$ hadronic decays at Delphi Experiment: DELPHI Collider: LEP 1 SpiresID: 3137023 Status: VALIDATED Authors: - Hendrik Hoeth References: - Z. Phys. C, 67, 543--554 (1995) RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: Measurement of the $\Xi^-$ and $\Sigma^+(1385)/\Sigma^-(1385)$ scaled momentum distributions by DELPHI at LEP 1. The paper also has the production cross-sections of these particles, but that's not implemented in Rivet. BibKey: Abreu:1995qx BibTeX: '@Article{Abreu:1995qx, author = "Abreu, P. and others", collaboration = "DELPHI", title = "{Strange baryon production in Z hadronic decays}", journal = "Z. Phys.", volume = "C67", year = "1995", pages = "543-554", doi = "10.1007/BF01553980", SLACcitation = "%%CITATION = ZEPYA,C67,543;%%" }' rivet-1.8.3/data/anainfo/D0_2008_S7554427.info0000644000175000017500000000263112116077757016250 0ustar sunsunName: D0_2008_S7554427 Year: 2008 Summary: $Z/\gamma^* + X$ cross-section shape, differential in $pT(Z)$ Experiment: D0 Collider: Tevatron Run 2 SpiresID: 7554427 Status: VALIDATED Authors: - Andy Buckley - Frank Siegert References: - arXiv:0712.0803 RunInfo: "* $p \\bar{p} \\to e^+ e^-$ + jets at 1960~GeV. * Needs mass cut on lepton pair to avoid photon singularity, looser than $40 < m_{ee} < 200$ GeV." NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: Cross sections as a function of pT of the vector boson inclusive and in forward region ($|y| > 2$, $pT<30$ GeV) in the di-electron channel in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96 TeV, based on an integrated luminosity of 0.98~fb$^{-1}$. BibKey: :2007nt BibTeX: '@Article{:2007nt, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the shape of the boson transverse momentum distribution in $p \bar{p} \to Z / \gamma^{*} \to e^+ e^- + X$ events produced at $\sqrt{s}$=1.96-TeV}", journal = "Phys. Rev. Lett.", volume = "100", year = "2008", pages = "102002", eprint = "0712.0803", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevLett.100.102002", SLACcitation = "%%CITATION = 0712.0803;%%" }' rivet-1.8.3/data/anainfo/CMS_2011_S8941262.info0000644000175000017500000000327012116077757016417 0ustar sunsunName: CMS_2011_S8941262 Year: 2011 Summary: Production cross-sections of muons from $b$ hadron decays in $pp$ collisions Experiment: CMS Collider: LHC SpiresID: 8941262 Status: VALIDATED Authors: - Wolfram Erdmann References: - JHEP 1103,090 - doi:10.1007/JHEP03(2011)090 - arXiv:hep-ex/1101.3512 RunInfo: Inclusive QCD at 7 TeV, with no pT cuts. NumEvents: 10000000 Beams: [p+, p+] Energies: [7000] NeedsCrossSection: true Description: 'A measurement of the $b$-hadron production cross-section in proton-proton collisions at $\sqrt{s} = 7$~TeV. The dataset, corresponding to 85 inverse nanobarns, was recorded with the CMS experiment at the LHC using a low-threshold single-muon trigger. Events are selected by the presence of a muon with transverse momentum greater than 6 GeV with respect to the beam direction and pseudorapidity less than 2.1. The transverse momentum of the muon with respect to the closest jet discriminates events containing $b$ hadrons from background. The inclusive $b$-hadron production cross section is presented as a function of muon transverse momentum and pseudorapidity.' BibKey: Khachatryan:2011hf BibTeX: '@Article{Khachatryan:2011hf, author = "Khachatryan, Vardan and others", collaboration = "CMS", title = "{Inclusive $b$-hadron production cross-section with muons in $pp$ collisions at $\sqrt{s} = 7$~TeV}", journal = "JHEP", volume = "03", year = "2011", pages = "090", eprint = "1101.3512", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1007/JHEP03(2011)090", SLACcitation = "%%CITATION = 1101.3512;%%" }' rivet-1.8.3/data/anainfo/CMS_2011_S9215166.info0000644000175000017500000000217312116077757016416 0ustar sunsunName: CMS_2011_S9215166 Year: 2011 Summary: Forward energy flow in MB and dijet events at 0.9 and 7 TeV Experiment: CMS Collider: LHC SpiresID: 9215166 Status: VALIDATED Authors: - S. Dooling - A. Knutsson References: - JHEP 1111 148 - doi:10.1007/JHEP11(2011)148 - arXiv:hep-ex/1110.0211 RunInfo: $pp$ MB and QCD interactions at 0.9 and 7~TeV. No pT-cuts. NumEvents: 500000 Beams: [p+, p+] Energies: [900, 7000] Description: Forward energy flow measured by CMS at $\sqrt{s} = 0.9$ and 7~TeV in MB and dijet events. BibKey: Chatrchyan:2011wm BibTeX: '@Article{Chatrchyan:2011wm, author = "Chatrchyan, Serguei and others", collaboration = "CMS", title = "{Measurement of energy flow at large pseudorapidities in $pp$ collisions at $\sqrt{s}$ = 0.9 and 7 TeV}", journal = "JHEP", volume = "11", year = "2011", pages = "148", eprint = "1110.0211", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1007/JHEP11(2011)148", SLACcitation = "%%CITATION = 1110.0211;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2011_S9002537.info0000644000175000017500000000133212116077757016630 0ustar sunsunName: ATLAS_2011_S9002537 Year: 2011 Summary: Muon charge asymmetry in W events at 7 TeV in ATLAS Experiment: ATLAS Collider: LHC SpiresID: 9002537 Status: VALIDATED Authors: - Frank Krauss - Hendrik Hoeth References: - arXiv:1103.2929 RunInfo: W -> munu events at 7 TeV NumEvents: 10000000 Beams: [p+, p+] Energies: [7000] Description: Measurement of the muon charge asymmetry from W bosons produced in proton-proton collisions at a centre-of-mass energy of 7 TeV with ATLAS. The asymmetry is measured in the $W \rightarrow \mu$ decay mode as a function of the muon pseudorapidity using a data sample corresponding to a total integrated luminosity of 31pb$^-1$. rivet-1.8.3/data/anainfo/CDF_2009_S8436959.info0000644000175000017500000000267412116077757016423 0ustar sunsunName: CDF_2009_S8436959 Year: 2009 Summary: Measurement of the inclusive isolated prompt photon cross-section Experiment: CDF Collider: Tevatron Run 2 SpiresID: 8436959 Status: VALIDATED Authors: - Frank Siegert References: - arXiv:0910.3623 [hep-ex] RunInfo: $\gamma$ + jet processes in ppbar collisions at $\sqrt{s} = 1960$~GeV. Minimum pT cut on the photon in the analysis is 30~GeV. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [30] Description: A measurement of the cross section for the inclusive production of isolated photons. The measurement covers the pseudorapidity region $|\eta^\gamma|<1.0$ and the transverse energy range $E_T^\gamma>30$~GeV and is based on 2.5~fb$^{-1}$ of integrated luminosity. The cross section is measured differential in $E_\perp(\gamma)$. NeedCrossSection: yes BibKey: Aaltonen:2009ty BibTeX: '@Article{Aaltonen:2009ty, author = "Aaltonen, T. and others", collaboration = "CDF", title = "{Measurement of the Inclusive Isolated Prompt Photon Cross Section in ppbar Collisions at sqrt{s} = 1.96 TeV using the CDF Detector}", journal = "Phys. Rev.", volume = "D80", year = "2009", pages = "111106", eprint = "0910.3623", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevD.80.111106", SLACcitation = "%%CITATION = 0910.3623;%%" }' rivet-1.8.3/data/anainfo/ALICE_2011_S8909580.info0000644000175000017500000000260512116077757016622 0ustar sunsunName: ALICE_2011_S8909580 Year: 2011 Summary: Strange particle production in proton-proton collisions at sqrt(s) = 0.9 TeV with ALICE at the LHC. Experiment: ALICE Collider: LHC SpiresID: 8909580 Status: VALIDATED Authors: - Pablo Bueno Gomez - Eva Sicking References: - Eur.Phys.J.C71:1594,2011. RunInfo: Diffractive events need to be switched on. NumEvents: 5000000 Beams: [p+, p+] Energies: [900] PtCuts: Description: 'Tranverse momentum spectra of strange particles ($K^0_S$, $\Lambda$, $\phi$ and $\Xi$) in $pp$ collisions at $\sqrt{s} = 0.9$\;TeV with ALICE at the LHC. The ratio of cross-sections as a function of pT for $\Lambda/K^0_S$ is also included.' BibKey: Aamodt:2011zza BibTeX: '@article{Aamodt:2011zza, author = "Aamodt, K. and others", title = "{Strange particle production in proton-proton collisions at sqrt(s) = 0.9 TeV with ALICE at the LHC}", collaboration = "ALICE Collaboration", journal = "Eur.Phys.J.", volume = "C71", pages = "1594", doi = "10.1140/epjc/s10052-011-1594-5", year = "2011", eprint = "1012.3257", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2010-065", SLACcitation = "%%CITATION = ARXIV:1012.3257;%%", }' rivet-1.8.3/data/anainfo/D0_2009_S8320160.info0000644000175000017500000000221412116077757016230 0ustar sunsunName: D0_2009_S8320160 Year: 2009 Summary: Dijet angular distributions Experiment: D0 Collider: Tevatron Run 2 SpiresID: 8320160 Status: VALIDATED Authors: - Frank Siegert References: - arXiv:0906.4819 [hep-ex] RunInfo: $p \bar{p} \to$ jets at 1960 GeV NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: Dijet angular distributions in different bins of dijet mass from 0.25 TeV to above 1.1 TeV in $p \bar{p}$ collisions at $\sqrt{s} = 1.96$ TeV, based on an integrated luminosity of 0.7 fb$^{-1}$. BibKey: :2009mh BibTeX: '@Article{:2009mh, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of dijet angular distributions at sqrt{s}=1.96TeV and searches for quark compositeness and extra spatial dimensions}", journal = "Phys. Rev. Lett.", volume = "103", year = "2009", pages = "191803", eprint = "0906.4819", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevLett.103.191803", SLACcitation = "%%CITATION = 0906.4819;%%" }' rivet-1.8.3/data/anainfo/MC_ZZINC.info0000644000175000017500000000073512116077757015547 0ustar sunsunName: MC_ZZINC Summary: Monte Carlo validation observables for $Z[e^+ \, e^-]Z[\mu^+ \, \mu^-]$ production Status: VALIDATED Authors: - Frank Siegert References: RunInfo: $ZZ$ + jets analysis. Needs mass cut on lepton pairs to avoid photon singularity, e.g. a min range of $66 < m_{ee} < 116$ GeV NumEvents: 1000000 PtCuts: [0] Description: Monte Carlo validation observables for $Z[e^+ \, e^-]Z[\mu^+ \, \mu^-]$ production NeedCrossSection: yes rivet-1.8.3/data/anainfo/MC_TTBAR.info0000644000175000017500000000073112116077757015522 0ustar sunsunName: MC_TTBAR Summary: MC analysis for ttbar studies Status: VALIDATED Authors: - Hendrik Hoeth - Andy Buckley - Dave Mallows - Michal Kawalec RunInfo: "* For Pythia6, set MSEL=6 and fix $W^+$ and $W^-$ decays to semi-leptonic modes via the MDME array. * For Fortran Herwig/Jimmy select IPROC=1706." NumEvents: 10000 PtCuts: [0] Description: This is a pure Monte Carlo study for semi-leptonic $t\bar{t}$ production. rivet-1.8.3/data/anainfo/ATLAS_2011_S9041966.info0000644000175000017500000000154612116077757016650 0ustar sunsunName: ATLAS_2011_S9041966 Year: 2011 Summary: 1-lepton and 2-lepton search for first or second generation leptoquarks Experiment: ATLAS Collider: LHC SpiresID: 9041966 Status: UNVALIDATED Authors: - Angela Chen References: - arXiv:1104.4481 RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] Description: 'Single and dilepton search for first and second generation scalar leptoquarks by ATLAS at 7 TeV. Event counts in four signal regions (single lepton and dilepton for first and second generation) are implemented as one-bin histograms. Histograms for event transverse energy are implemented for dilepton signal regions and histograms for leptoquark mass are implemented for single lepton signal regions. Histograms for observables in six control regions are implemented.' rivet-1.8.3/data/anainfo/CMS_2012_I1107658.info0000644000175000017500000000511412131070323016354 0ustar sunsunName: CMS_2012_I1107658 Year: 2012 Summary: Measurement of the underlying event activity in the Drell-Yan process at a centre-of-mass energy of 7 TeV Experiment: CMS Collider: LHC InspireID: 1107658 Status: VALIDATED Authors: - Sunil Bansal (sunil.bansal@cern.ch) References: - CMS-QCD-11-012 - CERN-PH-EP-2012-085 - arXiv:1204.1411 [hep-ex] RunInfo: Drell-Yan events with $Z/\gamma^* \to \mu\mu$. $m(\mu,\mu) > 20$ GeV Beams: [p+, p+] Energies: [7000] NeedCrossSection: yes pT Cuts: $pT > 0.5$ GeV (all charged particles) Description: A measurement of the underlying event activity using Drell-Yan events using muonic final state. The production of charged particles with pseudorapidity $|\eta| < 2$ and transverse momentum $p_\perp > 0.5\,\GeV/c$ is studied in towards, transverse and away region w.r.t. to the direction of di-muon system. The UE activity is measured in terms of of a particle density and an energy density. The particle density is computed as the average number of primary charged particles per unit pseudorapidity and per unit azimuth. The energy density is expressed in terms of the average of the scalar sum of the transverse momenta of primary charged particles per unit pseudorapidity and azimuth. The ratio of the energy and particle density is also reported in 3 regions. UE activity is studied as a function of invariant mass of muon pair ($M_{\mu\mu}$) by limiting the ISR contribution by requiring transverse momentum of muon pair $p_\perp(\mu\mu) < 5\,\GeV/c$. The $p_\perp(\mu\mu)$ dependence is studied for the events having $M_{\mu\mu}$ in window of 81--101 GeV/$c$. The normalized charged particle multiplicity and $p_\perp$ spectrum of the charged particles in three regions also been reported for events having $M_{\mu\mu}$ in window of 81--101 GeV/$c$. Multiplicity and $p_\perp$ spectra in the transverse region are also reported, for events having $p_\perp(\mu\mu) < 5\,\GeV/c$. BibKey: Chatrchyan:2012tb BibTeX: '@article{Chatrchyan:2012tb, author = "Chatrchyan, Serguei and others", title = "{Measurement of the underlying event in the Drell-Yan process in proton-proton collisions at sqrt(s) = 7 TeV}", collaboration = "CMS Collaboration", year = "2012", eprint = "1204.1411", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CMS-QCD-11-012, CERN-PH-EP-2012-085", SLACcitation = "%%CITATION = ARXIV:1204.1411;%%",}' To do: - Update references once EPJ assignes numbers (it is accepted) rivet-1.8.3/data/anainfo/D0_2010_S8570965.info0000644000175000017500000000323712116077757016252 0ustar sunsunName: D0_2010_S8570965 Year: 2010 Summary: Direct photon pair production Experiment: CDF Collider: Tevatron Run 2 SpiresID: 8570965 Status: VALIDATED Authors: - Frank Siegert References: - arXiv:1002.4917 RunInfo: All processes that can produce prompt photon pairs, e.g. $jj \to jj$, $jj \to j\gamma$ and $jj \to \gamma \gamma$. Non-prompt photons from hadron decays like $\pi$ and $\eta$ have been corrected for. NumEvents: 10000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: Direct photon pair production cross sections are measured using 4.2 fb$^{-1}$ of data. They are binned in diphoton mass, the transverse momentum of the diphoton system, the azimuthal angle between the photons, and the polar scattering angle of the photons. Also available are double differential cross sections considering the last three kinematic variables in three diphoton mass bins. Note, the numbers in version 1 of the arXiv preprint were missing the dM normalisation in the double differential cross sections. This has been reported to and fixed by the authors in v2 and the journal submission. HepData as well as the Rivet analysis have also been updated. NeedCrossSection: yes BibKey: Abazov:2010ah BibTeX: '@Article{Abazov:2010ah, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of direct photon pair production cross sections in $p \bar{p}$ collisions at $\sqrt(s)=1.96$ TeV}", year = "2010", eprint = "1002.4917", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1002.4917;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2012_I1084540.info0000644000175000017500000000465512116077757016626 0ustar sunsunName: ATLAS_2012_I1084540 Year: 2012 Summary: 'Rapidity gap cross sections measured with the ATLAS detector in pp collisions at sqrt(s) = 7 TeV.' Experiment: ATLAS Collider: LHC 7TeV SpiresID: 1084540 Status: VALIDATED Authors: - Oldrich Kepka - Tim Martin - Paul Newman - Pavel Ruzicka References: - arXiv:1201.2808 [hep-ex] RunInfo: 'Minimum bias inelastic pp collision at 7 TeV including diffractive component and overall cross section.' NumEvents: 300000 Beams: [p+, p+] Energies: [7000] PtCuts: [0.2, 0.4, 0.6, 0.8] Description: 'Pseudorapidity gap distributions in proton-proton collisions at sqrt(s) = 7 TeV are studied using a minimum bias data sample with an integrated luminosity of 7.1 inverse microbarns. Cross sections are measured differentially in terms of Delta eta F, the larger of the pseudorapidity regions extending to the limits of the ATLAS sensitivity, at eta = +/- 4.9, in which no final state particles are produced above a transverse momentum threshold p_T Cut. The measurements span the region 0 < Delta eta F < 8 for 200 < p_T Cut < 800 MeV. At small Delta eta F, the data test the reliability of hadronisation models in describing rapidity and transverse momentum fluctuations in final state particle production. The measurements at larger gap sizes are dominated by contributions from the single diffractive dissociation process (pp -> Xp), enhanced by double dissociation (pp -> XY) where the invariant mass of the lighter of the two dissociation systems satisfies M_Y <~ 7 GeV. The resulting cross section is d sigma / d Delta eta F ~ 1 mb for Delta eta F >~ 3. The large rapidity gap data are used to constrain the value of the pomeron intercept appropriate to triple Regge models of soft diffraction. The cross section integrated over all gap sizes is compared with other LHC inelastic cross section measurements. ' NeedCrossSection: yes BibTeX: '@article{Collaboration:2012pw, author = "Collaboration, ATLAS", title = "{Rapidity gap cross sections measured with the ATLAS detector in pp collisions at sqrt(s) = 7 TeV}", year = "2012", eprint = "1201.2808", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-220", SLACcitation = "%%CITATION = ARXIV:1201.2808;%%", }' rivet-1.8.3/data/anainfo/ATLAS_2010_S8919674.info0000644000175000017500000000313512116077757016654 0ustar sunsunName: ATLAS_2010_S8919674 Year: 2010 Summary: W+jets jet multiplicities and pT Experiment: ATLAS Collider: LHC SpiresID: 8919674 Status: VALIDATED Authors: - Frank Siegert References: - arXiv:1012.5382 [hep-ex] RunInfo: W+jets events ideally with matrix element corrections to describe the higher jet multiplicities correctly. Both channels, electron and muon, are part of this analysis and should be run simultaneously. NumEvents: 1000000 Beams: [p+, p+] Energies: [7000] PtCuts: [0] Description: 'Cross sections, in both the electron and muon decay modes of the W boson, are presented as a function of jet multiplicity and of the transverse momentum of the leading and next-to-leading jets in the event. Measurements are also presented of the ratio of cross sections for inclusive jet multiplicities. The results, based on an integrated luminosity of 1.3 pb-1, have been corrected for all known detector effects and are quoted in a limited and well-defined range of jet and lepton kinematics.' NeedCrossSection: yes BibKey: Aad:2010pg BibTeX: '@Article{Aad:2010pg, author = "Collaboration, The ATLAS", title = "{Measurement of the production cross section for W-bosons in association with jets in pp collisions at sqrt(s) = 7 TeV with the ATLAS detector}", year = "2010", eprint = "1012.5382", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1012.5382;%%" }' ToDo: - Implement jet multiplicity ratio plots. - Export original AIDA file from HepForge. rivet-1.8.3/data/anainfo/MC_LEADJETUE.info0000644000175000017500000000142012116077757016144 0ustar sunsunName: MC_LEADJETUE Summary: Underlying event in leading jet events, extended to LHC Status: VALIDATED Authors: - Andy Buckley RunInfo: LHC pp QCD interactions at 0.9, 10 or 14 TeV. Particles with $c \tau > 10$ mm should be set stable. Several $p_\perp^\text{min}$ cutoffs are probably required to fill the profile histograms. NumEvents: 1000000 PtCuts: [0] Description: Rick Field's measurement of the underlying event in leading jet events, extended to the LHC. As usual, the leading jet of the defines an azimuthal toward/transverse/away decomposition, in this case the event is accepted within $|\eta| < 2$, as in the CDF 2008 version of the analysis. Since this isn't the Tevatron, I've chosen to use $k_\perp$ rather than midpoint jets. rivet-1.8.3/data/anainfo/CDF_2006_S6450792.info0000644000175000017500000000254012116077757016375 0ustar sunsunName: CDF_2006_S6450792 Year: 2006 Summary: Inclusive jet cross section differential in pT Experiment: CDF Collider: Tevatron Run 2 SpiresID: 6450792 Status: VALIDATED Authors: - Frank Siegert References: - Phys.Rev.D74:071103,2006 - doi:10.1103/PhysRevD.74.071103 - arXiv:hep-ex/0512020 RunInfo: $p\bar{p}$ -> jets at 1960 GeV NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [61] Description: Measurement of the inclusive jet cross section in ppbar interactions at $\sqrt{s}=1.96$ TeV using 385 $\mathrm{pb}^{-1}$ of data. The data cover the jet transverse momentum range from 61 to 620 GeV/c in $0.1 < |y| < 0.7$. This analysis has been updated with more data in more rapidity bins in CDF_2008_S7828950. NeedCrossSection: yes BibKey: Abulencia:2005yg BibTeX: '@Article{Abulencia:2005yg, author = "Abulencia, A. and others", collaboration = "CDF", title = "{Measurement of the inclusive jet cross section in $p\bar{p}$ interactions at $\sqrt{s} =$ 1.96-TeV using a cone-based jet algorithm}", journal = "Phys. Rev.", volume = "D74", year = "2006", pages = "071103", eprint = "hep-ex/0512020", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.74.071103", SLACcitation = "%%CITATION = HEP-EX/0512020;%%" }' rivet-1.8.3/data/anainfo/CDF_2005_S6080774.info0000644000175000017500000000301112116077757016365 0ustar sunsunName: CDF_2005_S6080774 Year: 2005 Summary: Differential cross sections for prompt diphoton production Experiment: CDF Collider: Tevatron Run 2 SpiresID: 6080774 Status: VALIDATED Authors: - Frank Siegert References: - Phys. Rev. Lett. 95, 022003 - doi:10.1103/PhysRevLett.95.022003 - arXiv:hep-ex/0412050 RunInfo: $p \bar{p} \to \gamma \gamma$ [+ jets] at 1960 GeV. The analysis uses photons with pT larger then 13 GeV. To allow for shifts in the shower, the ME cut on the transverse photon momentum shouldn't be too hard, e.g. 5 GeV. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [5] Description: Measurement of the cross section of prompt diphoton production in $p\bar{p}$ collisions at $\sqrt{s} = 1.96$ TeV using a data sample of 207~pb$^{-1}$ as a function of the diphoton mass, the transverse momentum of the diphoton system, and the azimuthal angle between the two photons. NeedCrossSection: yes BibKey: Acosta:2004sn BibTeX: '@Article{Acosta:2004sn, author = "Acosta, Darin E. and others", collaboration = "CDF", title = "{Measurement of the cross section for prompt diphoton production in $p\bar{p}$ collisions at $\sqrt{s} = 1.96$ TeV}", journal = "Phys. Rev. Lett.", volume = "95", year = "2005", pages = "022003", eprint = "hep-ex/0412050", archivePrefix = "arXiv", doi = "10.1103/PhysRevLett.95.022003", SLACcitation = "%%CITATION = HEP-EX/0412050;%%" }' rivet-1.8.3/data/anainfo/LHCB_2010_I867355.info0000644000175000017500000000300212116077757016405 0ustar sunsunName: LHCB_2010_I867355 Year: 2010 Summary: Measurement of sigma(pp to bbar{b} X at sqrt{s}=7 TeV in the forward region Experiment: LHCb Collider: LHC SpiresID: 8785570 InspireID: 867355 Status: VALIDATED Authors: - Andy Buckley - Sercan Sen - Peter Skands - Sheldon Stone References: - arXiv:1009.2731 [hep-ex] RunInfo: pp to b-hadron + X at 7 TeV. i.e., Swith on "HardQCD:gg2bbbar" and "HardQCD:qqbar2bbbar" flags in pythia8(v165). NumEvents: 1000000 Beams: [p+, p+] Energies: [7000] PtCuts: [0] Description: 'The average cross-section to produce b-flavoured or bbar-flavoured hadrons is measured in different pseudorapidity intervals over the entire range of pT assuming the LEP (and Tevatron) fractions for fragmentation into b-flavoured hadrons.' BibKey: Aaij:2010gn BibTeX: '@article{Aaij:2010gn, author = "Aaij, R. and others", title = "{Measurement of $\sigma(pp \to b \bar{b} X)$ at $\sqrt{s}=7~\rm{TeV}$ in the forward region}", collaboration = "LHCb Collaboration", journal = "Phys.Lett.", volume = "B694", pages = "209-216", doi = "10.1016/j.physletb.2010.10.010", year = "2010", eprint = "1009.2731", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2010-029", SLACcitation = "%%CITATION = ARXIV:1009.2731;%%" }' rivet-1.8.3/data/anainfo/CDF_2008_S7540469.info0000644000175000017500000000273512116077757016407 0ustar sunsunName: CDF_2008_S7540469 Year: 2008 Summary: Measurement of differential Z/$\gamma^*$ + jet + X cross sections Experiment: CDF Collider: Tevatron Run 2 SpiresID: 7540469 Status: VALIDATED Authors: - Frank Siegert References: - Phys.Rev.Lett.100:102001,2008 - arXiv:0711.3717 [hep-ex] RunInfo: $p \bar{p} \to e^+ e^-$ + jets at 1960 GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $66 < m_{ee} < 116$ NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: Cross sections as a function of jet transverse momentum in 1 and 2 jet events, and jet multiplicity in ppbar collisions at sqrt(s) = 1.96 TeV, based on an integrated luminosity of $1.7~\text{fb}^{-1}$. The measurements cover the rapidity region $|y_\text{jet}| < 2.1$ and the transverse momentum range $pT^\text{jet} > 30~\text{GeV}/c$. NeedCrossSection: yes BibKey: :2007cp BibTeX: '@Article{:2007cp, author = "Aaltonen, T. and others", collaboration = "CDF", title = "{Measurement of inclusive jet cross-sections in Z/gamma*(-- -> $e^{+} e^{-)}$ + jets production in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96-TeV}", journal = "Phys. Rev. Lett.", volume = "100", year = "2008", pages = "102001", eprint = "0711.3717", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "", SLACcitation = "%%CITATION = 0711.3717;%%" }' rivet-1.8.3/data/anainfo/H1_1994_S2919893.info0000644000175000017500000000260112116077757016276 0ustar sunsunName: H1_1994_S2919893 Year: 1994 Summary: H1 energy flow and charged particle spectra in DIS Experiment: H1 Collider: HERA SpiresID: 2919893 Status: VALIDATED Authors: - Peter Richardson References: - Z.Phys.C63:377-390,1994 - doi:10.1007/BF01580319 RunInfo: $e^- p$ / $e^+ p$ deep inelastic scattering, 820~GeV protons colliding with 26.7~GeV electrons NumEvents: 1000000 Beams: [[p+, e-], [p+, e+]] Energies: [[820, 26.7]] PtCuts: [0] Description: Global properties of the hadronic final state in deep inelastic scattering events at HERA are investigated. The data are corrected for detector effects. Energy flows in both the laboratory frame and the hadronic centre of mass system, and energy-energy correlations in the laboratory frame are presented. Historically, the Ariadne colour dipole model provided the only satisfactory description of this data, hence making it a useful 'target' analysis for MC shower models. BibKey: Abt:1994ye BibTeX: '@Article{Abt:1994ye, author = "Abt, I. and others", collaboration = "H1", title = "{Energy flow and charged particle spectrum in deep inelastic scattering at HERA}", journal = "Z. Phys.", volume = "C63", year = "1994", pages = "377-390", doi = "10.1007/BF01580319", SLACcitation = "%%CITATION = ZEPYA,C63,377;%%" }' rivet-1.8.3/data/anainfo/OPAL_1997_S3608263.info0000644000175000017500000000250012116077757016545 0ustar sunsunName: OPAL_1997_S3608263 Year: 1997 Summary: $K^{*0}$ meson production measured by OPAL at LEP 1. Experiment: OPAL Collider: LEP 1 SpiresID: 3608263 Status: VALIDATED Authors: - Peter Richardson References: - Phys.Lett.B412:210-224,1997 - hep-ex/9708022 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: The $K^{*0}$ fragmentation function has been measured in hadronic $Z^0$ decays. In addition the helicity density matrix elements for inclusive $K^*(892)^0$ mesons from hadronic $Z^0$ decays have been measured over the full range of $K^{*0}$ momentum using data taken with the OPAL experiment at LEP. Only the fragmentation function measurement is currently implemented. BibKey: Ackerstaff:1997kj BibTeX: '@Article{Ackerstaff:1997kj, author = "Ackerstaff, K. and others", collaboration = "OPAL", title = "{Spin alignment of leading K*(892)0 mesons in hadronic Z0 decays}", journal = "Phys. Lett.", volume = "B412", year = "1997", pages = "210-224", eprint = "hep-ex/9708022", archivePrefix = "arXiv", doi = "10.1016/S0370-2693(97)01077-0", SLACcitation = "%%CITATION = HEP-EX/9708022;%%" }' rivet-1.8.3/data/anainfo/ALICE_2010_S8625980.info0000644000175000017500000000256012116077757016620 0ustar sunsunName: ALICE_2010_S8625980 Year: 2010 Summary: Pseudorapidities at three energies, charged multiplicity at 7 TeV. Experiment: ALICE Collider: LHC SpiresID: 8625980 Status: VALIDATED Authors: - Holger Schulz - Jan Fiete Grosse-Oetringhaus@cern.ch References: - Eur.Phys.J. C68 (2010) 345-354 - arXiv:1004.3514 [hep-ex] RunInfo: Diffractive events need to be enabled. NumEvents: 1000000 Beams: [p+, p+] Energies: [900, 2360, 7000] Description: 'This is an ALICE publication with pseudorapities for $\unit{0.9, 2.36 and 7}{\TeV}$ and the charged multiplicity at $\unit{7}{\TeV}$. The analysis requires at least on charged particle in the event. Only the INEL distributions are considered here' BibKey: Aamodt:2010pp BibTeX: '@article{Aamodt:2010pp, author = "Aamodt, K. and others", title = "{Charged-particle multiplicity measurement in proton-proton collisions at $\sqrt{s} = 7$ TeV with ALICE at LHC}", collaboration = "ALICE", journal = "Eur.Phys.J.", volume = "C68", pages = "345-354", doi = "10.1140/epjc/s10052-010-1350-2", year = "2010", eprint = "1004.3514", archivePrefix = "arXiv", primaryClass = "hep-ex", }' rivet-1.8.3/data/anainfo/ALEPH_2004_S5765862.info0000644000175000017500000000246712116077757016646 0ustar sunsunName: ALEPH_2004_S5765862 Year: 2004 Summary: Jet rates and event shapes at LEP I and II Experiment: ALEPH Collider: LEP Run 1 and 2 SpiresID: 5765862 Status: VALIDATED Authors: - Frank Siegert References: - Eur.Phys.J.C35:457-486,2004 - doi:10.1140/epjc/s2004-01891-4 - http://cdsweb.cern.ch/record/690637/files/ep-2003-084.pdf RunInfo: $e^+ e^- \to$ jet jet (+ jets) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2, 133, 161, 172, 183, 189, 197, 200, 206] PtCuts: [0] Description: Jet rates, event-shape variables and inclusive charged particle spectra are measured in $e^+ e^-$ collisions at CMS energies between 91 and 209 GeV. The previously published data at 91.2 GeV and 133 GeV have been re-processed and the higher energy data are presented here for the first time. Note that the data have been corrected to include neutrinos. BibKey: Heister:2003aj BibTeX: '@Article{Heister:2003aj, author = "Heister, A. and others", collaboration = "ALEPH", title = "{Studies of QCD at e+ e- centre-of-mass energies between 91-GeV and 209-GeV}", journal = "Eur. Phys. J.", volume = "C35", year = "2004", pages = "457-486", doi = "10.1140/epjc/s2004-01891-4", SLACcitation = "%%CITATION = EPHJA,C35,457;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2012_CONF_2012_001.info0000644000175000017500000000157212116077757017434 0ustar sunsunName: ATLAS_2012_CONF_2012_001 Year: 2012 Summary: 4 or more lepton plus missing transverse energy SUSY search Experiment: ATLAS Collider: LHC Status: PRELIMINARY Authors: - Peter Richardson References: - ATLAS-CONF-2012-001 - ATLAS-CONF-2012-035 RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] NeedCrossSection: yes Description: 'Search for SUSY using events with 4 or more leptons in association with missing transverse energy in proton-proton collisions at a centre-of-mass energy of 7 TeV. The data sample has a total integrated luminosity of 2.06 fb$^{-1}$. There is no reference data and in addition to the control plots from the paper the number of events in the two signal regions, correctly normalized to an integrated luminosity 2.06 fb$^{-1}$, are calculated.' rivet-1.8.3/data/anainfo/BABAR_2007_S7266081.info0000644000175000017500000000267112116077757016613 0ustar sunsunName: BABAR_2007_S7266081 Summary: Measurements of Semi-Leptonic Tau Decays into Three Charged Hadrons Status: VALIDATED Authors: - Peter Richardson References: - Phys.Rev.Lett.100:011801,2008 - arXiv:0707.2981 - SLAC-R-936 RunInfo: Tau production, can be any process but original data was in $e^+ e^-$ at the $\Upsilon(4S)$ resonance, with CoM boost -- 8.0~GeV~($e^−$) and 3.5~GeV~($e^+$) NumEvents: 1000000 SpiresID: 7266081 Beams: [e+, e-] Energies: [[3.5, 8.0]] PtCuts: [0] Description: Measurement of tau decays to three charged hadrons using a data sample corresponding to an integrated luminosity of 342 $fb^{-1}$ collected with the BABAR detector at the SLAC PEP-II electron-positron storage ring operating at a center-of-mass energy near 10.58 GeV. BibKey: Aubert:2007mh BibTeX: '@Article{Aubert:2007mh, author = "Aubert, Bernard and others", collaboration = "BABAR", title = "{Exclusive branching fraction measurements of semileptonic tau decays into three charged hadrons, $\tau^- \to \phi \pi^- \nu_\tau$ and $\tau^- \to \phi K^- \nu_\tau$}", journal = "Phys. Rev. Lett.", volume = "100", year = "2008", pages = "011801", eprint = "0707.2981", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevLett.100.011801", SLACcitation = "%%CITATION = 0707.2981;%%" }' rivet-1.8.3/data/anainfo/MC_VH2BB.info0000644000175000017500000000062612116077757015454 0ustar sunsunName: MC_VH2BB Summary: MC unboosted VH2bb validation plots Collider: LHC Status: UNVALIDATED Authors: - Ben Smart - Andy Buckley RunInfo: $VH$ with $H \to b \bar{b}$ and the vector boson decaying to electron or muon channels. NumEvents: 100000 PtCuts: [0] Description: 'Various plots for characterising the process $V H \to b\bar{b}$' NeedCrossSection: yes rivet-1.8.3/data/anainfo/ATLAS_2010_S8817804.info0000644000175000017500000000300412116077757016637 0ustar sunsunName: ATLAS_2010_S8817804 Year: 2010 Summary: Inclusive jet cross section and di-jet mass and chi spectra at 7 TeV in ATLAS Experiment: ATLAS Collider: LHC 7TeV SpiresID: 8817804 Status: VALIDATED Authors: - James Monk References: - arXiv:1009.5908 RunInfo: pp QCD jet production with a minimum jet pT of 60 GeV (inclusive) or 30 GeV (di-jets) at 7 TeV. NumEvents: 10000000 Beams: [p+, p+] Energies: [7000] PtCuts: [30, 60] Description: The first jet cross section measurement made with the ATLAS detector at the LHC. Anti-kt jets with $R=0.4$ and $R=0.6$ are resconstructed within $|y|<2.8$ and above 60~GeV for the inclusive jet cross section plots. For the di-jet plots the second jet must have pT>30~GeV. Jet pT and di-jet mass spectra are plotted in bins or rapidity $|y|<0.3$, $0.3<|y|<0.8$, $0.8<|y|<1.2$, $1.2<|y|<2.1$, $2.1<|y|<2.8$. Di-jet $\chi$ spectra are plotted in bins of di-jet mass $340~GeV NumEvents: 50000 RunInfo: Any! Description: Plotting of distributions of PID codes (all/stable/unstable) and ID-specific distributions such as the $|\eta|$ of $K$, $\pi$ and $\Lambda$ mesons. rivet-1.8.3/data/anainfo/ALEPH_1991_S2435284.info0000644000175000017500000000254712116077757016650 0ustar sunsunName: ALEPH_1991_S2435284 Year: 1991 Summary: Hadronic Z decay charged multiplicity measurement Experiment: ALEPH Collider: LEP 1 SpiresID: 2435284 Status: VALIDATED Authors: - Andy Buckley References: - Phys. Lett. B, 273, 181 (1991) RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: The charged particle multiplicity distribution of hadronic Z decays, as measured on the peak of the Z resonance using the ALEPH detector at LEP. The unfolding procedure was model independent, and the distribution was found to have a mean of $20.85 \pm 0.24$, Comparison with lower energy data supports the KNO scaling hypothesis. The shape of the multiplicity distribution is well described by a log-normal distribution, as predicted from a cascading model for multi-particle production. BibKey: Decamp:1991uz BibTeX: '@Article{Decamp:1991uz, author = "Decamp, D. and others", collaboration = "ALEPH", title = "{Measurement of the charged particle multiplicity distribution in hadronic Z decays}", journal = "Phys. Lett.", volume = "B273", year = "1991", pages = "181-192", doi = "10.1016/0370-2693(91)90575-B", SLACcitation = "%%CITATION = PHLTA,B273,181;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2011_I945498.info0000644000175000017500000000335112116077757016556 0ustar sunsunName: ATLAS_2011_I945498 Year: 2011 Summary: Z+jets in pp at 7TeV Experiment: ATLAS Collider: LHC InspireID: 945498 Status: UNVALIDATED Authors: - Evelin Meoni evelin.meoni@cern.ch - Holger Schulz References: - arXiv:1111.2690v1 [hep-ex] - CERN-PH-EP-2011-162 RunInfo: Z+jets, electronic and muonic Z-decays. Jets with transverse momentum $p_T > 30$ GeV and jet rapidity $|y| < 4.4$. NumEvents: 1000000 Beams: [p+, p+] Energies: [7000] NeedCrossSection: True Description: 'Production of jets in association with a $Z/\gamma^*$ boson in proton-proton collisions at $\sqrt{s} = 7$ TeV with the ATLAS detector. The analysis includes the full 2010 data set, collected with a low rate of multiple proton-proton collisions in the accelerator, corresponding to an integrated luminosity of 36 pb$^{-1}$. Inclusive jet cross sections in $Z/\gamma^*$ events, with $Z/\gamma^*$ decaying into electron or muon pairs, are measured for jets with transverse momentum $p_T > 30$ GeV and jet rapidity $|y| < 4.4$.' BibKey: Aad:2011qv BibTeX: '@article{Aad:2011qv, key = "945498", title = "{Measurement of the production cross section for Z/gamma* in association with jets in pp collisions at sqrt(s) = 7 TeV with the ATLAS detector}", collaboration = "ATLAS Collaboration", year = "2011", eprint = "1111.2690", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-162", SLACcitation = "%%CITATION = ARXIV:1111.2690;%%", }' Todo: - Njet-ratio histo (d02-x01... ) - Find out what kind of events contribute to the Njet=0 case (contradiction with Figure caption). - Improve/remove weight counters. rivet-1.8.3/data/anainfo/DELPHI_2002_069_CONF_603.info0000644000175000017500000000133512116077757017473 0ustar sunsunName: DELPHI_2002_069_CONF_603 Year: 2002 (note) Summary: Study of the b-quark fragmentation function at LEP 1 Experiment: DELPHI Collider: LEP 1 Status: PRELIMINARY Authors: - Hendrik Hoeth References: - DELPHI note 2002-069-CONF-603 (ICHEP 2002) RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: Measurement of the $b$-quark fragmentation function by DELPHI using 1994 LEP 1 data. The fragmentation function for both weakly decaying and primary $b$-quarks has been determined in a model independent way. Nevertheless the authors trust $f(x_B^\text{weak})$ more than $f(x_B^\text{prim})$. rivet-1.8.3/data/anainfo/CDF_2010_S8591881_DY.info0000644000175000017500000000224612116077757016776 0ustar sunsunName: CDF_2010_S8591881_DY Year: 2010 Summary: CDF Run 2 underlying event in Drell-Yan Experiment: CDF Collider: Tevatron Run 2 SpiresID: 8591881 Status: VALIDATED Authors: - Hendrik Hoeth References: - Phys.Rev.D82:034001,2010 RunInfo: "ppbar collisions at 1960 GeV. * Drell-Yan events with $Z/\\gamma* -> e e$ and $Z/\\gamma* -> \\mu\\mu$. * A mass cut $m_{ll} > 70~\\text{GeV}$ can be applied on generator level. * Particles with $c \\tau > 10~\\text{mm}$ should be set stable." NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: Deepak Kar and Rick Field's measurement of the underlying event in Drell-Yan events. $Z -> ee$ and $Z -> \mu\mu$ events are selected using a $Z$ mass window cut between 70 and 110~GeV. ``Toward'', ``away'' and ``transverse'' regions are defined in the same way as in the original (2001) CDF underlying event analysis. The reconstructed $Z$ defines the $\phi$ direction of the toward region. The leptons are ignored after the $Z$ has been reconstructed. Thus the region most sensitive to the underlying event is the toward region (the recoil jet is boosted into the away region). rivet-1.8.3/data/anainfo/MC_WWINC.info0000644000175000017500000000056012116077757015535 0ustar sunsunName: MC_WWINC Summary: Monte Carlo validation observables for $W^+[e^+ \, \nu]W^-[\mu^- \, \nu]$ production Status: VALIDATED Authors: - Frank Siegert References: RunInfo: $WW$ analysis. NumEvents: 1000000 PtCuts: [0] Description: Monte Carlo validation observables for $W^+[e^+ \, \nu]W^-[\mu^- \, \nu]$ production NeedCrossSection: yes rivet-1.8.3/data/anainfo/CDF_2012_NOTE10874.info0000644000175000017500000000152312116077757016560 0ustar sunsunName: CDF_2012_NOTE10874 Year: 2012 Summary: CDF energy scan underlying event analysis Experiment: CDF Collider: Tevatron energy scan Status: VALIDATED Authors: - Rick Field References: - CDF Note 10874 RunInfo: $p\bar{p}$ QCD interactions at 300, 900, and 1960~GeV. Particles with $c \tau > {}$10 mm should be set stable. NumEvents: 1000000 Beams: [p-, p+] Energies: [300, 900, 1960] PtCuts: [] Description: In this analysis the behavior of the underlying event in hard scattering proton-antiproton collisions at 300 GeV, 900 GeV, and 1.96 TeV is studied. The 300 GeV and 900 GeV data are a result of the Tevatron Energy Scan which was performed just before the Tevatron was shut down. The energy ratio histograms can be created from different runs with a merging script available in the Rivet bin directory. rivet-1.8.3/data/anainfo/ATLAS_2012_I1186556.info0000644000175000017500000000231712116077757016631 0ustar sunsunName: ATLAS_2012_I1186556 Year: 2012 Summary: Search for a heavy top-quark partner in final states with two leptons. Experiment: ATLAS Collider: LHC InspireID: 1186556 Status: UNVALIDATED Authors: - Peter Richardson References: - arXiv:1209.4186 RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] Description: 'Search for direct pair production of heavy top-quark partners with 4.7 fb$^{-1}$ integrated luminosity at $\sqrt{s} = 7 TeV$ by the ATLAS experiment. Heavy top-quark partners decaying into a top quark and a neutral non-interacting particle are searched for in events with two leptons in the final state.' BibTeX: '@article{Aad:2012uu, author = "Aad, Georges and others", title = "{Search for a heavy top-quark partner in final states with two leptons with the ATLAS detector at the LHC}", collaboration = "ATLAS Collaboration", year = "2012", eprint = "1209.4186", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-199", SLACcitation = "%%CITATION = ARXIV:1209.4186;%%", }' rivet-1.8.3/data/anainfo/ATLAS_2011_S9225137.info0000644000175000017500000000307712116077757016643 0ustar sunsunName: ATLAS_2011_S9225137 Year: 2011 Summary: High jet multiplicity squark and gluino search Experiment: ATLAS Collider: LHC SpiresID: 9225137 Status: VALIDATED Authors: - Peter Richardson References: - arXiv:1110.2299 RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] NeedCrossSection: yes Description: 'Search for SUSY using events with 6 or more jets in association with missing transverse momentum produced in proton-proton collisions at a centre-of-mass energy of 7 TeV. The data sample has a total integrated luminosity of 1.34 fb$^{-1}$. Distributions in the W and top control regions are not produced, while in addition to the plots from the paper the count of events in the different signal regions is included.' BibKey: Aad:2011qa BibTeX: '@article{Aad:2011qa, author = "Aad, Georges and others", title = "{Search for new phenomena in final states with large jet multiplicities and missing transverse momentum using sqrt(s)=7 TeV pp collisions with the ATLAS detector.}", collaboration = "Atlas Collaboration", journal = "JHEP", volume = "1111", pages = "099", doi = "10.1007/JHEP11(2011)099", year = "2011", eprint = "1110.2299", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-155", SLACcitation = "%%CITATION = ARXIV:1110.2299;%%", }' rivet-1.8.3/data/anainfo/CDF_1990_S2089246.info0000644000175000017500000000253112116077757016406 0ustar sunsunName: CDF_1990_S2089246 Year: 1990 Summary: CDF pseudorapidity distributions at 630 and 1800 GeV Experiment: CDF Collider: Tevatron Run 0 SpiresID: 2089246 Status: VALIDATED Authors: - Andy Buckley References: - Phys.Rev.D41:2330,1990 - doi:10.1103/PhysRevD.41.2330 RunInfo: QCD min bias events at sqrt(s) = 630 and 1800 GeV. Particles with $c \tau > 10$mm should be set stable. NumEvents: 1000000 Beams: [p-, p+] Energies: [630, 1800] PtCuts: [0] Description: Pseudorapidity distributions based on the CDF 630 and 1800 GeV runs from 1987. All data is detector corrected. The data confirms the UA5 measurement of a $\d{N}/\d{\eta}$ rise with energy faster than $\ln{\sqrt{s}}$, and as such this analysis is important for constraining the energy evolution of minimum bias and underlying event characteristics in MC simulations. BibKey: Abe:1989td BibTeX: '@Article{Abe:1989td, author = "Abe, F. and others", collaboration = "CDF", title = "{Pseudorapidity distributions of charged particles produced in $\bar{p}p$ interactions at $\sqrt{s} = 630$ GeV and 1800 GeV}", journal = "Phys. Rev.", volume = "D41", year = "1990", pages = "2330", doi = "10.1103/PhysRevD.41.2330", SLACcitation = "%%CITATION = PHRVA,D41,2330;%%" }' rivet-1.8.3/data/anainfo/D0_2000_S4480767.info0000644000175000017500000000251212116077757016240 0ustar sunsunName: D0_2000_S4480767 Year: 2000 Summary: Transverse momentum of the W boson Experiment: D0 Collider: Tevatron Run 1 SpiresID: 4480767 Status: VALIDATED Authors: - Frank Siegert References: - Phys.Lett. B513 (2001) 292-300 - doi:10.1016/S0370-2693(01)00628-1 - arXiv:hep-ex/0010026 RunInfo: Production of W+ and W- decaying into the electron channel. NumEvents: 1000000 Beams: [p-, p+] Energies: [1800] PtCuts: [0] Description: Measurement of the differential cross section for W boson production as a function of its transverse momentum. The data were collected by the D0 experiment at the Fermilab Tevatron Collider during 1994-1995 and correspond to an integrated luminosity of 85 pb$^{-1}$. NeedCrossSection: yes BibKey: Abbott:2000xv BibTeX: '@Article{Abbott:2000xv, author = "Abbott, B. and others", collaboration = "D0", title = "{Differential cross section for $W$ boson production as a function of transverse momentum in $p\bar{p}$ collisions at $\sqrt{s} = 1.8$ TeV}", journal = "Phys. Lett.", volume = "B513", year = "2001", pages = "292-300", eprint = "hep-ex/0010026", archivePrefix = "arXiv", doi = "10.1016/S0370-2693(01)00628-1", SLACcitation = "%%CITATION = HEP-EX/0010026;%%" }' rivet-1.8.3/data/anainfo/D0_2010_S8566488.info0000644000175000017500000000227412116077757016257 0ustar sunsunName: D0_2010_S8566488 Year: 2010 Summary: Dijet invariant mass Experiment: D0 Collider: Tevatron Run 2 SpiresID: 8566488 Status: VALIDATED Authors: - Frank Siegert References: - arXiv:1002.4594 RunInfo: $p \bar{p} \to$ jets at 1960 GeV. Analysis needs two hard jets above 40 GeV. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [30] Description: The inclusive dijet production double differential cross section as a function of the dijet invariant mass and of the largest absolute rapidity ($|y|_\text{max}$) of the two jets with the largest transverse momentum in an event is measured using 0.7 fb$^{-1}$ of data. The measurement is performed in six rapidity regions up to $|y|_\text{max}=2.4$. NeedCrossSection: yes BibKey: Abazov:2010fr BibTeX: '@Article{Abazov:2010fr, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the dijet invariant mass cross section in $p\overline{p}$ collisions at $\sqrt{s} =$ 1.96 TeV}", year = "2010", eprint = "1002.4594", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1002.4594;%%" }' rivet-1.8.3/data/anainfo/DELPHI_1999_S3960137.info0000644000175000017500000000234112116077757016765 0ustar sunsunName: DELPHI_1999_S3960137 Year: 1999 Summary: Measurement of inclusive $\rho^0$, $f_0(980)$, $f_2(1270)$, $K^{*0}_2(1430)$ and $f'_2(1525)$ production in $Z^0$ decays Experiment: DELPHI Collider: LEP 1 SpiresID: 3960137 Status: VALIDATED Authors: - Peter Richardson References: - Phys.Lett.B449:364-382,1999 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: DELPHI results for the production of $\rho^0$, $f_0(980)$, $f_2(1270)$, $K^{*0}_2(1430)$ and $f'_2(1525)$ in $Z^0$ decays. Only the identified particle spectra for $\rho^0$, $f_0(980)$ and $f_2(1270)$ are implemented. BibKey: Abreu:1998nn BibTeX: '@Article{Abreu:1998nn, author = "Abreu, P. and others", collaboration = "DELPHI", title = "{Measurement of inclusive $\rho^0$, $f^0(980)$, $f_2(1270)$, $K^{*0}_2(1430)$ and $f^\prime_2(1525)$ production in $Z^0$ decays}", journal = "Phys. Lett.", volume = "B449", year = "1999", pages = "364-382", doi = "10.1016/S0370-2693(99)00105-7", SLACcitation = "%%CITATION = PHLTA,B449,364;%%" }' rivet-1.8.3/data/anainfo/ALICE_2010_S8624100.info0000644000175000017500000000313112116077757016572 0ustar sunsunName: ALICE_2010_S8624100 Year: 2010 Summary: Charged particle multiplicities at $\unit{0.9 \& 2.36}{\TeV}$ in three different pseudorapidity intervals. Experiment: ALICE Collider: LHC SpiresID: 8624100 Status: VALIDATED Authors: - Holger Schulz - Jan Fiete Grosse-Oetringhaus@cern.ch References: - Eur.Phys.J.C68:89-108,2010 - arXiv:1004.3034 [hep-ex] RunInfo: QCD and diffractive events at $\sqrt{s}=\unit{0.9}{\TeV}$ and $\sqrt{s}=\unit{2.36}{\TeV}$ NumEvents: 1000000 Beams: [p+, p+] Energies: [900, 2360] Description: 'This is an ALICE analysis where charged particle multiplicities (including the zero bin) have been measured in three different pseudorapidity intervals ($|\eta|<0.5; |\eta|<1.0; |\eta|<1.3$. Only the INEL distributions have been considered here, i.e. this analysis can only be meaningfully compared to PYTHIA 6 with diffractive processes disabled. The data were taken at 900 and 2360 GeV.' BibKey: Aamodt:2010ft BibTeX: '@Article{Aamodt:2010ft, author = "Aamodt, K. and others", collaboration = "ALICE", title = "{Charged-particle multiplicity measurement in proton-proton collisions at $\sqrt{s} = 0.9$ and 2.36 TeV with ALICE at LHC}", journal = "Eur. Phys. J.", volume = "C68", year = "2010", pages = "89-108", eprint = "1004.3034", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1140/epjc/s10052-010-1339-x", SLACcitation = "%%CITATION = 1004.3034;%%" }' rivet-1.8.3/data/anainfo/H1_2000_S4129130.info0000644000175000017500000000350612116077757016231 0ustar sunsunName: H1_2000_S4129130 Year: 2000 Summary: H1 energy flow in DIS Experiment: H1 Collider: HERA SpiresID: 4129130 Status: VALIDATED Authors: - Peter Richardson References: - Eur.Phys.J.C12:595-607,2000 - doi:10.1007/s100520000287 - arXiv:hep-ex/9907027v1 RunInfo: $e^+ p$ deep inelastic scattering with $p$ at 820 GeV, $e^+$ at 27.5 GeV -> sqrt(s) = 300 GeV NumEvents: 1000000 Beams: [p+, e+] Energies: [[820, 27.5]] PtCuts: [0] Description: Measurements of transverse energy flow for neutral current deep- inelastic scattering events produced in positron-proton collisions at HERA. The kinematic range covers squared momentum transfers $Q^2$ from 3.2 to 2200 GeV$^2$; the Bjorken scaling variable $x$ from $8 \times 10^{-5}$ to 0.11 and the hadronic mass $W$ from 66 to 233 GeV. The transverse energy flow is measured in the hadronic centre of mass frame and is studied as a function of $Q^2$, $x$, $W$ and pseudorapidity. The behaviour of the mean transverse energy in the central pseudorapidity region and an interval corresponding to the photon fragmentation region are analysed as a function of $Q^2$ and $W$. This analysis is useful for exploring the effect of photon PDFs and for tuning models of parton evolution and treatment of fragmentation and the proton remnant in DIS. BibKey: Adloff:1999ws BibTeX: '@Article{Adloff:1999ws, author = "Adloff, C. and others", collaboration = "H1", title = "{Measurements of transverse energy flow in deep inelastic- scattering at HERA}", journal = "Eur. Phys. J.", volume = "C12", year = "2000", pages = "595-607", eprint = "hep-ex/9907027", archivePrefix = "arXiv", doi = "10.1007/s100520000287", SLACcitation = "%%CITATION = HEP-EX/9907027;%%" }' rivet-1.8.3/data/anainfo/CDF_2001_S4563131.info0000644000175000017500000000227312116077757016361 0ustar sunsunName: CDF_2001_S4563131 Year: 2001 Summary: Inclusive jet cross section Experiment: CDF Collider: Tevatron Run 1 SpiresID: 4563131 Status: UNVALIDATED Authors: - Frank Siegert References: - Phys.Rev.D64:032001,2001 - doi:10.1103/PhysRevD.64.032001 - arXiv:hep-ph/0102074 RunInfo: Dijet events at Tevatron with $\sqrt{s}=1.8$ TeV NumEvents: 1000000 Beams: [p-, p+] Energies: [1800] PtCuts: [0] Description: Measurement of the inclusive jet cross section for jet transverse energies from 40 to 465 GeV in the pseudo-rapidity range $0.1<|\eta|<0.7$. The results are based on 87 $\mathrm{pb}^{-1}$ of data. NeedCrossSection: yes BibKey: Affolder:2001fa BibTeX: '@Article{Affolder:2001fa, author = "Affolder, Anthony Allen and others", collaboration = "CDF", title = "{Measurement of the inclusive jet cross section in $\bar{p}p$ collisions at $\sqrt{s} = 1.8$ TeV}", journal = "Phys. Rev.", volume = "D64", year = "2001", pages = "032001", eprint = "hep-ph/0102074", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.64.032001", SLACcitation = "%%CITATION = HEP-PH/0102074;%%" }' rivet-1.8.3/data/anainfo/LHCF_2012_I1115479.info0000644000175000017500000000246012116077757016474 0ustar sunsunName: LHCF_2012_I1115479 Year: 2012 Summary: Measurement of forward neutral pion transverse momentum spectra for $\sqrt{s}$ = 7 TeV proton-proton collisions at LHC Experiment: LHCF Collider: LHC SpireID: 9602062 InspireID: 1115479 Status: VALIDATED Authors: - Sercan Sen References: - arXiv:1205.4578 [hep-ex] RunInfo: Inelastic events (ND+SD+DD) at $\sqrt{s}$ = 7 TeV. NumEvents: 500000 Beams: [p+, p+] Energies: [7000] Description: The inclusive production rate of neutral pions has been measured by LHCf experiment during $\sqrt{s}=7$ TeV pp collision operation in early 2010. In order to ensure good event reconstruction efficiency, the range of the $\pi^0$ rapidity and $p_\perp$ are limited to $8.9 < y < 11.0$ and $p_\perp < 0.6$ GeV, respectively. BibKey: Adriani:2012ap BibTeX: '@Article{Adriani:2012ap, author = "Adriani, O. and others", title = "{Measurement of forward neutral pion transverse momentum spectra for $\sqrt{s}$ = 7TeV proton-proton collisions at LHC}", collaboration = "LHCf Collaboration", year = "2012", eprint = "1205.4578", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = ARXIV:1205.4578;%%",}' rivet-1.8.3/data/anainfo/MC_WKTSPLITTINGS.info0000644000175000017500000000063512116077757016737 0ustar sunsunName: MC_WKTSPLITTINGS Summary: Monte Carlo validation observables for $k_\perp$ splitting scales in $W[e \, \nu]$ + jets events Status: VALIDATED Authors: - Frank Siegert References: RunInfo: $e \, \nu$ + jets analysis. NumEvents: 1000000 PtCuts: [0] Description: Monte Carlo validation observables for $k_\perp$ splitting scales in $W[e \, \nu]$ + jets events NeedCrossSection: yes rivet-1.8.3/data/anainfo/OPAL_2002_S5361494.info0000644000175000017500000000301612116077757016526 0ustar sunsunName: OPAL_2002_S5361494 Year: 2002 Summary: Charged particle multiplicities in heavy and light quark initiated events above the $Z^0$ peak Experiment: OPAL Collider: LEP 2 SpiresID: 5361494 Status: VALIDATED Authors: - Peter Richardson References: - Phys.Lett. B550 (2002) 33-46 - hep-ex/0211007 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [130,136,161,172,183,189,192,196,200,202,206] PtCuts: [0] Description: Measurements of the mean charged multiplicities separately for $b\bar b$, $c\bar c$ and light quark ($uds$) initiated events in $e^+e^-$ interactions at energies above the $Z^0$ mass. The data is from the LEP running periods between 1995 and 2000. BibKey: Abbiendi:2002vn BibTeX: '@article{Abbiendi:2002vn, author = "Abbiendi, G. and others", title = "{Charged particle multiplicities in heavy and light quark initiated events above the Z0 peak}", collaboration = "OPAL Collaboration", journal = "Phys.Lett.", volume = "B550", pages = "33-46", doi = "10.1016/S0370-2693(02)02935-0", year = "2002", note = "18 pages, 5 figures Report-no: CERN-EP-2002-0079", eprint = "hep-ex/0211007", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-EP-2002-079", SLACcitation = "%%CITATION = HEP-EX/0211007;%%", }' rivet-1.8.3/data/anainfo/CDF_2001_S4517016.info0000644000175000017500000000271512116077757016363 0ustar sunsunName: CDF_2001_S4517016 Year: 2001 Summary: Two jet triply-differential cross-section Experiment: CDF Collider: Tevatron Run 1 SpiresID: 4517016 Status: UNVALIDATED Authors: - Frank Siegert References: - Phys.Rev.D64:012001,2001 - doi:10.1103/PhysRevD.64.012001 - arXiv:hep-ex/0012013 RunInfo: Dijet events at Tevatron with $\sqrt{s}=1.8$ TeV NumEvents: 1000000 Beams: [p-, p+] Energies: [1800] PtCuts: [0] Description: A measurement of the two-jet differential cross section, $\mathrm{d}^3\sigma/\mathrm{d}E_T \, \mathrm{d}\eta_1 \, \mathrm{d}\eta_2$, based on an integrated luminosity of $86 \mathrm{pb}^{-1}$. The differential cross section is measured as a function of the transverse energy, $E_\perp$, of a jet in the pseudorapidity region $0.1 < |\eta_1| < 0.7$ for four different pseudorapidity bins of a second jet restricted to $0.1 < |\eta_2| < 3.0$. NeedCrossSection: yes BibKey: Affolder:2000ew BibTeX: '@Article{Affolder:2000ew, author = "Affolder, Anthony Allen and others", collaboration = "CDF", title = "{Measurement of the two-jet differential cross section in $p\bar{p}$ collisions at $\sqrt{s} = 1800$ GeV}", journal = "Phys. Rev.", volume = "D64", year = "2001", pages = "012001", eprint = "hep-ex/0012013", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.64.012001", SLACcitation = "%%CITATION = HEP-EX/0012013;%%" }' rivet-1.8.3/data/anainfo/MC_WPOL.info0000644000175000017500000000055412116077757015432 0ustar sunsunName: MC_WPOL Summary: Monte Carlo validation observables for $W$ polarisation Status: VALIDATED Authors: - Frank Siegert References: RunInfo: $W \to e \, \nu$ + jets. NumEvents: 100000000 Description: 'Observables sensitive to the polarisation of the W boson: A0, ... A7, fR, fL, f0, separately for W+ and W-.' NeedCrossSection: yes rivet-1.8.3/data/anainfo/MC_JETS.info0000644000175000017500000000065312116077757015416 0ustar sunsunName: MC_JETS Summary: Monte Carlo validation observables for jet production Status: VALIDATED Authors: - Frank Siegert References: RunInfo: Pure QCD jet production events at an arbitrary collider. NumEvents: 1000000 PtCuts: [15] Description: Jets with $p_\perp>20$ GeV are constructed with a $k_\perp$ jet finder with $D=0.7$ and projected onto many different observables. NeedCrossSection: yes rivet-1.8.3/data/anainfo/ATLAS_2011_S8971293.info0000644000175000017500000000214112116077757016644 0ustar sunsunName: ATLAS_2011_S8971293 Year: 2011 Summary: Dijet azimuthal decorrelations Experiment: ATLAS Collider: LHC SpiresID: 8971293 Status: VALIDATED Authors: - Frank Siegert References: - arXiv:1102.2696 RunInfo: pp QCD interactions at 7000 GeV. The distributions are binned in leading pT starting at 110 GeV with the last bin starting at 800 GeV. NumEvents: 1000000000 Beams: [p+, p+] Energies: [7000] PtCuts: [20.0] Description: 'Dijet azimuthal decorrelation measured by ATLAS at 7 TeV. Jets are anti- kt with $R=0.6$, $p_\perp>100$ GeV, $|\eta|<0.8$. The analysis is binned in leading jet $p_\perp$ bins. All data is fully corrected.' BibKey: Aad:2011ni BibTeX: '@Article{Aad:2011ni, author = "Collaboration, The ATLAS", title = "{Measurement of Dijet Azimuthal Decorrelations in pp Collisions at sqrt(s)=7 TeV}", year = "2011", eprint = "1102.2696", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1102.2696;%%" }' ToDo: Check BibKey and BibTeX consistency when fixed on SPIRES. rivet-1.8.3/data/anainfo/ATLAS_2012_I1119557.info0000644000175000017500000000317512116077757016631 0ustar sunsunName: ATLAS_2012_I1119557 Year: 2012 Summary: Jet shapes and jet masses Experiment: ATLAS Collider: LHC 7TeV InspireID: 1119557 Status: VALIDATED Authors: - Lily Asquith - Roman Lysak References: - Phys.Rev. D86 (2012) 072006 - doi:10.1103/PhysRevD.86.072006 - arXiv:1206.5369 [hep-ex] RunInfo: QCD events at 7 TeV, leading-pT jets with $\pT > 300\;GeV$. NumEvents: 1000000 NeedCrossSection: no Beams: [p+, p+] Energies: [7000] PtCuts: [300] Description: 'Measurements are presented of the properties of high transverse momentum jets, produced in proton-proton collisions at a center-of-mass energy of $\sqrt{s} = 7$\;TeV. Jet mass, width, eccentricity, planar flow and angularity are measured for jets reconstructed using the anti-$k_t$ algorithm with distance parameters $R = 0.6$ and 1.0, with transverse momentum $pT > 300$\;GeV and pseudorapidity $|\eta| < 2$.' BibKey: Aad:2012meb BibTeX: '@article{Aad:2012meb, author = "Aad, Georges and others", title = "{ATLAS measurements of the properties of jets for boosted particle searches}", collaboration = "ATLAS Collaboration", journal = "Phys.Rev.", volume = "D86", pages = "072006", doi = "10.1103/PhysRevD.86.072006", year = "2012", eprint = "1206.5369", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-149", SLACcitation = "%%CITATION = ARXIV:1206.5369;%%", }' ToDo: - Validate the eccentricity plot (commented out for now) rivet-1.8.3/data/anainfo/ATLAS_2012_CONF_2012_104.info0000644000175000017500000000150012116077757017427 0ustar sunsunName: ATLAS_2012_CONF_2012_104 Year: 2012 Summary: Search for supersymmetry at 8 TeV in final states with jets, missing transverse momentum and one lepton with the ATLAS detector. Experiment: ATLAS Collider: LHC Status: UNVALIDATED Authors: - Peter Richardson References: - ATLAS-CONF-2012-104 RunInfo: BSM signal events at 8000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [8000] Description: 'One lepton search for supersymmmetric particles by ATLAS at 8 TeV with $5.8\,\text{fb}^{-1}$ integrated luminosity. Event counts in the signal regions are implemented as one-bin histograms. Histograms for effective mass are implemented for the two signal hard lepton signal regions and the ratio of missing transverse energy to effective mass for the soft lepton region.' rivet-1.8.3/data/anainfo/STAR_2006_S6870392.info0000644000175000017500000000216512116077757016557 0ustar sunsunName: STAR_2006_S6870392 Year: 2006 Summary: Inclusive jet cross-section in pp at 200 GeV Experiment: STAR Collider: RHIC pp 200 GeV SpiresID: 6870392 Status: VALIDATED Authors: - Hendrik Hoeth References: - Phys. Rev. Lett. 97, 252001 - hep-ex/0608030 RunInfo: pp at 200 GeV NumEvents: 1000000 Beams: [p+, p+] Energies: [200] PtCuts: [0] Description: Inclusive jet cross section as a function of pT in pp collisions at $\sqrt{s} = 200$ GeV, measured by the STAR experiment at RHIC. NeedCrossSection: yes BibKey: Abelev:2006uq BibTeX: '@Article{Abelev:2006uq, author = "Abelev, B. I. and others", collaboration = "STAR", title = "{Longitudinal double-spin asymmetry and cross section for inclusive jet production in polarized proton collisions at s**(1/2) = 200-GeV}", journal = "Phys. Rev. Lett.", volume = "97", year = "2006", pages = "252001", eprint = "hep-ex/0608030", archivePrefix = "arXiv", doi = "10.1103/PhysRevLett.97.252001", SLACcitation = "%%CITATION = HEP-EX/0608030;%%" }' rivet-1.8.3/data/anainfo/MC_QCD_PARTONS.info0000644000175000017500000000070312116077757016462 0ustar sunsunName: MC_QCD_PARTONS Summary: Generic parton-level Monte Carlo validation analysis for + jets. Status: VALIDATED Authors: - Frank Siegert References: RunInfo: Any + jets. NumEvents: 1000000 PtCuts: [0] Description: Only partons (excluding top quarks) are taken into account to construct a kt cluster sequence. Thus this analysis can be used as a generic validation tool for QCD activity. NeedCrossSection: yes rivet-1.8.3/data/anainfo/ATLAS_2011_S9108483.info0000644000175000017500000000212112116077757016634 0ustar sunsunName: ATLAS_2011_S9108483 Year: 2011 Summary: Long-lived heavy charged particle search Experiment: ATLAS Collider: LHC SpiresID: 9108483 Status: UNVALIDATED Authors: - Peter Richardson References: - arXiv:arXiv:1106.4495 RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] Description: 'ATLAS search for long-lived heavy charged particles for four different mass cuts. Currently only the slepton search is implemented.' NeedCrossSection: yes BibKey: Aad:2011hz BibTeX: '@Article{Aad:2011hz, author = "Aad, Georges and others", collaboration = "ATLAS", title = "{Search for Heavy Long-Lived Charged Particles with the ATLAS detector in pp collisions at sqrt(s) = 7 TeV}", journal = "Phys. Lett.", volume = "B703", year = "2011", pages = "428-446", eprint = "1106.4495", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1016/j.physletb.2011.08.042", SLACcitation = "%%CITATION = 1106.4495;%%" } ' rivet-1.8.3/data/anainfo/ATLAS_2012_I1125961.info0000644000175000017500000000113112116077757016613 0ustar sunsunName: ATLAS_2012_I1125961 Year: 2012 Summary: 0-lepton squark and gluino search Experiment: ATLAS Collider: LHC InspireID: 1125961 Status: VALIDATED Authors: - Peter Richardson - David Grellscheid - Chris Wymant References: - arXiv:1208.0949 RunInfo: BSM signal events at 7000 GeV. NumEvents: 10000 for BSM signals Beams: [p+, p+] Energies: [7000] Description: '0-lepton search for squarks and gluinos by ATLAS at 7 TeV. Event counts in five signal regions are implemented as one-bin histograms.' rivet-1.8.3/data/anainfo/D0_1996_S3324664.info0000644000175000017500000000245112116077757016261 0ustar sunsunName: D0_1996_S3324664 Year: 1996 Summary: Azimuthal decorrelation of jets widely separated in rapidity Experiment: D0 Collider: Tevatron Run 1 SpiresID: 3324664 Status: UNVALIDATED - currently wrong jet algorithm! Authors: - Frank Siegert References: - Phys.Rev.Lett.77:595-600,1996 - doi:10.1103/PhysRevLett.77.595 - arXiv:hep-ex/9603010 RunInfo: $p \bar{p} \to jets$ at 1800 GeV NumEvents: 10000000 Beams: [p-, p+] Energies: [1800] PtCuts: [10] Description: First measurement of the azimuthal decorrelation between jets with pseudorapidity separation up to five units. The data were accumulated using the D0 detector during Tevatron Run 1 at $\sqrt{s}=1.8$ TeV. ToDo: - So far, this analysis is using the wrong jet algorithm, namely the D0 Run II Improved Legacy cone. BibKey: Abachi:1996et BibTeX: '@Article{Abachi:1996et, author = "Abachi, S. and others", collaboration = "D0", title = "{The Azimuthal decorrelation of jets widely separated in rapidity}", journal = "Phys. Rev. Lett.", volume = "77", year = "1996", pages = "595-600", eprint = "hep-ex/9603010", archivePrefix = "arXiv", doi = "10.1103/PhysRevLett.77.595", SLACcitation = "%%CITATION = HEP-EX/9603010;%%" }' rivet-1.8.3/data/anainfo/LHCB_2011_I917009.info0000644000175000017500000000316112116077757016404 0ustar sunsunName: LHCB_2011_I917009 Year: 2011 Summary: $V^0$ production ratios in $pp$ collisions at $\sqrt{s}= 0.9$ and 7 TeV at LHCb Experiment: LHCb Collider: LHC InspireID: 917009 Status: VALIDATED Authors: - Alex Grecu References: - JHEP08:034,2011 - arXiv:1107.0882[hep-ex] - doi:10.1007/JHEP08(2011)034 RunInfo: QCD events. LHCb minimum bias, Perugia 0 and Perugia NOCR tune events used for reproducing published histograms. NumEvents: 5000000 Beams: [p+, p+] Energies: [900, 7000] # PtCuts: [[0.25, 2.5], [0.15,2.5]] Description: This paper presents the production ratios for $\bar{\Lambda}/\Lambda$ and $\bar{\Lambda}/K_{s}^{0}$ measured by LHCb detector in 2010 at $\sqrt{s} = 0.9$ TeV and 7 TeV as functions of the transverse momentum $p_\perp$ and the rapidity $y$ in the ranges $0.15 < p_\perp < \unit{2.50}{GeV/c}$ and $2.0 < y < 4.5$, respectively. The results for the two energies are merged and represented as a function of rapidity loss $\Delta y = y_{\mathrm{beam}} - y$. NeedsCrossSection: true BibKey: Aaij:2011va BibTeX: '@article{Aaij:2011va, author = "Aaij, R. and others", title = "{Measurement of $V^0$ production ratios in $pp$ collisions at $\sqrt{s} = 0.9$ and 7\,TeV}", collaboration = "LHCb Collaboration", journal = "JHEP", volume = "1108", pages = "034", doi = "10.1007/JHEP08(2011)034", year = "2011", note = "* Temporary entry *", eprint = "1107.0882", archivePrefix = "arXiv", primaryClass = "hep-ex", }' rivet-1.8.3/data/anainfo/STAR_2006_S6860818.info0000644000175000017500000000222012116077757016551 0ustar sunsunName: STAR_2006_S6860818 Year: 2006 Summary: Strange particle production in pp at 200 GeV Experiment: STAR Collider: RHIC pp 200 GeV SpiresID: 6860818 Status: VALIDATED Authors: - Hendrik Hoeth References: - Phys. Rev. C75, 064901 - nucl-ex/0607033 RunInfo: pp at 200 GeV NumEvents: 2500000 Beams: [p+, p+] Energies: [200] PtCuts: [0] Description: pT distributions of identified strange particles in pp collisions at $\sqrt{s} = 200$ GeV, measured by the STAR experiment at RHIC in non-single-diffractive minbias events. WARNING The $\langle pT \rangle$ vs. particle mass plot is not validated yet and might be wrong. BibKey: Abelev:2006cs BibTeX: '@Article{Abelev:2006cs, author = "Abelev, B. I. and others", collaboration = "STAR", title = "{Strange particle production in p + p collisions at s**(1/2) = 200-GeV}", journal = "Phys. Rev.", volume = "C75", year = "2007", pages = "064901", eprint = "nucl-ex/0607033", archivePrefix = "arXiv", doi = "10.1103/PhysRevC.75.064901", SLACcitation = "%%CITATION = NUCL-EX/0607033;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2012_I1093738.info0000644000175000017500000000307312116077757016630 0ustar sunsunName: ATLAS_2012_I1093738 Year: 2012 Summary: Isolated prompt photon + jet xsection Experiment: ATLAS Collider: LHC SpiresID: 1093738 Status: VALIDATED Authors: - Giovanni Marchiori References: - arXiv:1203.3161 [hep-ex] RunInfo: Inclusive photon+jet+X events at $\sqrt{s} = 7$~TeV. NumEvents: 1000000 Beams: [p+, p+] Energies: [7000] Description: 'A measurement of the production cross section for isolated photons in association with jets in $pp$ collisions at $sqrt{s} = 7$ TeV. Photons with $|\eta|<1.37$ and $E_T>25$~GeV and jets with $|y|<4.4$ and $p_T>20$ GeV are selected. The differential cross section as a function of the photon transverse energy is measured, for three leading jet rapidity configurations, separately for the cases where the photon and jet rapidities have the same or the opposite sign. The measurement uses 37 pb$^{-1}$ of integrated luminosity collected with the ATLAS detector.' NeedCrossSection: yes BibKey: Aad:2012cv BibTeX: '@article{Aad:2012cv, author = "Aad, Georges and others", title = "{Measurement of the production cross section of an isolated photon associated with jets in proton-proton collisions at sqrt(s) = 7 TeV with the ATLAS detector}", collaboration = "ATLAS", year = "2012", eprint = "1203.3161", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-009", SLACcitation = "%%CITATION = ARXIV:1203.3161;%%", }' rivet-1.8.3/data/anainfo/UA1_1990_S2044935.info0000644000175000017500000000217712116077757016402 0ustar sunsunName: UA1_1990_S2044935 Year: 1990 Summary: UA1 multiplicities, transverse momenta and transverse energy distributions. Experiment: UA1 Collider: SPS SpiresID: 2044935 Status: VALIDATED Authors: - Andy Buckley - Christophe Vaillant References: - "Nucl.Phys.B353:261,1990" RunInfo: QCD min bias events at sqrtS = 63, 200, 500 and 900 GeV. Description: Particle multiplicities, transverse momenta and transverse energy distributions at the UA1 experiment, at energies of 200, 500 and 900 GeV (with one plot at 63 GeV for comparison). Beams: [p-, p+] Energies: [63, 200, 500, 900] PtCuts: [0] NeedCrossSection: yes BibKey: Albajar:1989an BibTeX: '@Article{Albajar:1989an, author = "Albajar, C. and others", collaboration = "UA1", title = "{A Study of the General Characteristics of $p\bar{p}$ Collisions at $\sqrt{s}$ = 0.2-TeV to 0.9-TeV}", journal = "Nucl. Phys.", volume = "B335", year = "1990", pages = "261", doi = "10.1016/0550-3213(90)90493-W", SLACcitation = "%%CITATION = NUPHA,B335,261;%%" }' rivet-1.8.3/data/anainfo/BELLE_2001_S4598261.info0000644000175000017500000000260112116077757016617 0ustar sunsunName: BELLE_2001_S4598261 Summary: Measurement of inclusive production of neutral pions from $\Upsilon(4S)$ decays. Status: VALIDATED Authors: - Peter Richardson References: - Phys.Rev. D64 (2001) 072001 - hep-ex/0103041 RunInfo: $e^+ e^-$ analysis on the $\Upsilon(4S)$ resonance, with CoM boost -- 8.0~GeV~($e^−$) and 3.5~GeV~($e^+$) NumEvents: 1000000 SpiresID: 4598261 Beams: [e+, e-] Energies: [[3.5, 8.0]] PtCuts: [0] Description: Measurement of the mean multiplicity and the momentum spectrum of neutral pions from the decays of the Upsilon(4S) resonance using the Belle detector operating at the KEKB $e^+e^-$ storage ring. Useful for tuning $B$ meson decay models. BibKey: Abe:2001hj BibTeX: '@article{Abe:2001hj, author = "Abe, K. and others", title = "{Measurement of inclusive production of neutral pions from Upsilon(4S) decays}", collaboration = "Belle Collaboration", journal = "Phys.Rev.", volume = "D64", pages = "072001", doi = "10.1103/PhysRevD.64.072001", year = "2001", eprint = "hep-ex/0103041", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "KEK-PREPRINT-2001-2, BELLE-PREPRINT-2001-3", SLACcitation = "%%CITATION = HEP-EX/0103041;%%", }' rivet-1.8.3/data/anainfo/D0_1996_S3214044.info0000644000175000017500000000333512116077757016251 0ustar sunsunName: D0_1996_S3214044 Year: 1996 Summary: Topological distributions of inclusive three- and four-jet events Experiment: D0 Collider: Tevatron Run 1 SpiresID: 3214044 Status: UNVALIDATED - currently wrong jet algorithm! Authors: - Frank Siegert References: - Phys.Rev.D53:6000-6016,1996 - doi:10.1103/PhysRevD.53.6000 - arXiv:hep-ex/9509005 RunInfo: $p \bar{p} \to$ jets at 1800 GeV with minimum jet pT in analysis = 20 GeV NumEvents: 1000000 Beams: [p-, p+] Energies: [1800] PtCuts: [10] Description: The global topologies of inclusive three- and four-jet events produced in pbar p interactions are described. The three- and four-jet events are selected from data recorded by the D0 detector at the Fermilab Tevatron Collider operating at a center-of-mass energy of $\sqrt{s}$=1800 GeV. The studies also show that the topological distributions of the different subprocesses involving different numbers of quarks are very similar and reproduce the measured distributions well. The parton-shower Monte Carlo generators provide a less satisfactory description of the topologies of the three- and four-jet events. BibKey: Abachi:1995zv BibTeX: '@Article{Abachi:1995zv, author = "Abachi, S. and others", collaboration = "D0", title = "{Studies of Topological Distributions of the Three- and Four-Jet Events in $\bar{p}p$ Collisions at $\sqrt{s}=1800$ GeV with the D\O\\ Detector}", journal = "Phys. Rev.", volume = "D53", year = "1996", pages = "6000-6016", eprint = "hep-ex/9509005", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.53.6000", SLACcitation = "%%CITATION = HEP-EX/9509005;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2013_I1217867.info0000644000175000017500000000245212116077757016632 0ustar sunsunName: ATLAS_2013_I1217867 Year: 2013 Summary: kT splitting scales in W->lv events Experiment: ATLAS Collider: LHC InspireID: 1217867 Status: VALIDATED Authors: - Frank Siegert References: - arXiv:1302.1415 [hep-ex] RunInfo: W+jet events in the electron and/or the muon decay channel. NumEvents: 1000000 Beams: [p+, p+] Energies: [7000] PtCuts: [0] NeedCrossSection: False Description: 'Cluster splitting scales are measured in events containing W bosons decaying to electrons or muons. The measurement comprises the four hardest splitting scales in a kT cluster sequence of the hadronic activity accompanying the W boson, and ratios of these splitting scales.' BibKey: Aad:2013ueu BibTeX: ' @article{Aad:2013ueu, author = "Aad, Georges and others", title = "{Measurement of $k_T$ splitting scales in $W\to \ell\nu$ events at $\sqrt{s}$=7 TeV with the ATLAS detector}", collaboration = " The ATLAS Collaboration", year = "2013", eprint = "1302.1415", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2013-003", SLACcitation = "%%CITATION = ARXIV:1302.1415;%%", } ' ToDo: - Get data into Hepdata - Add journal information once available rivet-1.8.3/data/anainfo/CDF_2000_S4266730.info0000644000175000017500000000231312116077757016360 0ustar sunsunName: CDF_2000_S4266730 Year: 2000 Summary: Differential Dijet Mass Cross Section Experiment: CDF Collider: Tevatron Run 1 SpiresID: 4266730 Status: VALIDATED Authors: - Frank Siegert References: - Phys.Rev.D61:091101,2000 - doi:10.1103/PhysRevD.61.091101 - arXiv:hep-ex/9912022 RunInfo: Dijet events at Tevatron with $\sqrt{s}=1.8$ TeV NumEvents: 1000000 Beams: [p-, p+] Energies: [1800] PtCuts: [0] Description: Measurement of the cross section for production of two or more jets as a function of dijet mass in the range 180 to 1000 GeV. It is based on an integrated luminosity of $86 \mathrm{pb}^{-1}$. NeedCrossSection: yes BibKey: Affolder:1999ua BibTeX: '@Article{Affolder:1999ua, author = "Affolder, Anthony Allen and others", collaboration = "CDF", title = "{A measurement of the differential dijet mass cross section in $p\bar{p}$ collisions at $\sqrt{s} = 1.8$ TeV}", journal = "Phys. Rev.", volume = "D61", year = "2000", pages = "091101", eprint = "hep-ex/9912022", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.61.091101", SLACcitation = "%%CITATION = HEP-EX/9912022;%%" }' rivet-1.8.3/data/anainfo/MC_PHOTONJETUE.info0000644000175000017500000000133312116077757016451 0ustar sunsunName: MC_PHOTONJETUE Summary: Study the usual underlying event observables in photon + jet events Description: Modification of the MC leading jets underlying event analysis to study the UE in hard photon+jet events. This may be of interest, because the leading QCD dipole structure is different from that in either dijet or Drell-Yan hard processes. Observables are also extended to include the variation of transverse activity as a function of jet-photon balance, and using the photon rather than the jet to define the event alignment. RunInfo: Photon + jet events at any energy. pT cutoff at 10 GeV advised. Status: UNVALIDATED Authors: - Andy Buckley Beams: [[p+, p+], [p-, p+]] PtCuts: [0] rivet-1.8.3/data/anainfo/ATLAS_2011_CONF_2011_098.info0000644000175000017500000000146612116077757017454 0ustar sunsunName: ATLAS_2011_CONF_2011_098 Year: 2011 Summary: B-jets search for supersymmetry with 0-leptons Experiment: ATLAS Collider: LHC SpiresID: Status: UNVALIDATED Authors: - Angela Chen References: - arXiv:nnnn.nnnn RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] Description: 'Search for supersymmmetric particles by ATLAS at 7 TeV in events with b-jets, large missing energy, and no leptons. Event counts in four signal regions (1 b-jet, $m_eff>500$\,GeV; 1 b-jet, $m_eff>700$\,GeV; 2 b-jets, $m_eff>500$\,GeV; 2 b-jets, $m_eff>700$\,GeV) are implemented as one-bin histograms. Histograms for missing transverse energy, effective mass, and pT of the leading jet are implemented for the 1 b-tag and 2 b-tag signal regions.' rivet-1.8.3/data/anainfo/CMS_2012_I1102908.info0000644000175000017500000000405112116077757016371 0ustar sunsunName: CMS_2012_I1102908 Year: 2012 Summary: Measurement of inclusive and exclusive dijet production ratio at large rapidity intervals at center-of-mass energy 7 TeV. Experiment: CMS Collider: LHC NeedCrossSection: no InspireID: 1102908 Status: VALIDATED Authors: - Grzegorz Brona - Vladimir Gavrilov - Hannes Jung - Victor Kim - Victor Murzin - Vadim Oreshkin - Grigory Pivovarov - Ivan Pozdnyakov - Grigory Safronov References: - CMS-FWD-10-014 - CERN-PH-EP-2012-088 - arXiv:1204.0696 [hep-ex] - Submitted to the EPJ C RunInfo: Inclusive QCD at 7TeV comEnergy, ptHat (or equivalent) greater than 15 GeV NumEvents: 500M with ptHat > 15 Beams: [p+, p+] Energies: [[3500, 3500]] PtCuts: [15] Description: This is a measurement of the ratio of inclusive to exclusive dijet production as a function of the absolute distance in rapidity, $\Delta y$, between jets. The ratio of the Mueller-Navelet to exclusive dijet production is also measured. These measurements were performed with the CMS detector in proton-proton collisions at $\sqrt s = 7$ TeV for jets with $p_T > 35$ GeV and $|y| < 4.7$ taken from a mixture of two data samples, one of which containing dijets with moderate rapidity separation and the other containing dijets with large rapidity separation, with integrated luminosity of 33/nb and 5/pb respectively. The measured observables are corrected for detector effects. BibKey: Chatrchyan:2012pb BibTeX: '@article{Chatrchyan:2012pb, author = "Chatrchyan, Serguei and others", title = "{Ratios of dijet production cross sections as a function of the absolute difference in rapidity between jets in proton-proton collisions at sqrt(s) = 7 TeV}", collaboration = "CMS Collaboration", year = "2012", eprint = "1204.0696", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CMS-FWD-10-014, CERN-PH-EP-2012-088", SLACcitation = "%%CITATION = ARXIV:1204.0696;%%",}' rivet-1.8.3/data/anainfo/MC_DIJET.info0000644000175000017500000000072512116077757015510 0ustar sunsunName: MC_DIJET Summary: Analysis of dijet events at the LHC. Description: Analysis of dijet events for the upcoming runs at the LHC, specifically studying azimuthal angle, transverse momentum distributions (including for leading jet and secondary jet), as well as charged particle multiplicities and transverse momenta. RunInfo: "Generic QCD events at any energy." Status: UNVALIDATED Author: - Christophe Vaillant PtCuts: [0] rivet-1.8.3/data/anainfo/LHCB_2012_I1119400.info0000644000175000017500000000257012116077757016456 0ustar sunsunName: LHCB_2012_I1119400 Year: 2012 Summary: Measurement of prompt hadron production ratios in $pp$ collisions at $\sqrt{s} = $ 0.9 and 7 TeV Experiment: LHCb Collider: LHC SpireID: 9635220 InspireID: 1119400 Status: UNVALIDATED Authors: - Andrea Contu - Alex Grecu References: - arXiv:1206.5160 [hep-ex] RunInfo: Minimum bias events at sqrt(s) = 0.9 and 7 TeV. NumEvents: 500000 NeedCrossSection: no Beams: [p+, p+] Energies: [900, 7000] PtCuts: [0] Description: 'Measurement of the production ratios of prompt charged particles (protons, pions and kaons). Promptness is defined as originating from the primary interaction, either directly, or through the subsequent decay of a resonance.' BibKey: Aaij:2012ut BibTeX: '@article{Aaij:2012ut, author = "Aaij, R and others", title = "{Measurement of prompt hadron production ratios in $pp$ collisions at $\sqrt{s} = $ 0.9 and 7 TeV}", collaboration = "LHCb Collaboration", journal = "Eur.Phys.J.", volume = "C72", pages = "2168", year = "2012", eprint = "1206.5160", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-171, LHCB-PAPER-2011-037", SLACcitation = "%%CITATION = ARXIV:1206.5160;%%" }' rivet-1.8.3/data/anainfo/MC_PDFS.info0000644000175000017500000000054412116077757015404 0ustar sunsunName: MC_PDFS Summary: Analysis to study PDF sampling in any MC run Status: VALIDATED Authors: - Andy Buckley NumEvents: 10000 RunInfo: Any! Description: Plotting of PDF sampling info, such as the $Q^2$ and both $x$ values of the sampling (aggregated and distinguished as max/min, and some correlations with event properties. rivet-1.8.3/data/anainfo/D0_2010_S8821313.info0000644000175000017500000000234412116077757016232 0ustar sunsunName: D0_2010_S8821313 Year: 2010 Summary: Precise study of Z pT using novel technique Experiment: D0 Collider: Tevatron Run 2 SpiresID: 8821313 Status: VALIDATED Authors: - Frank Siegert References: - arXiv:1010.0262 RunInfo: Inclusive $Z/\gamma^*$ production in both electron and muon channels. Cut on invariant lepton mass should be wider than $70 - Holger Schulz - Christophe Vaillant References: - Eur. Phys. J. C33, 1, 1986 RunInfo: "* Single- and double-diffractive, plus non-diffractive inelastic, events. * $p\\bar{p}$ collider, sqrt(s) = 200 or 900 GeV. * The trigger implementation for NSD events is the same as in, e.g., the UA5_1989 analysis. No further cuts are needed." NumEvents: 1000000 Beams: [p-, p+] Energies: [200, 900] PtCuts: [0] Description: This study comprises measurements of pseudorapidity distributions measured with the UA5 detector at 200 and 900 GeV center of momentum energy. There are distributions for non-single diffractive (NSD) events and also for the combination of single- and double-diffractive events. The NSD distributions are further studied for certain ranges of the events charged multiplicity. BibKey: Alner:1986xu BibTeX: '@Article{Alner:1986xu, author = "Alner, G. J. and others", collaboration = "UA5", title = "{Scaling of Pseudorapidity Distributions at c.m. Energies Up to 0.9-TeV}", journal = "Z. Phys.", volume = "C33", year = "1986", pages = "1-6", doi = "10.1007/BF01410446", SLACcitation = "%%CITATION = ZEPYA,C33,1;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2011_S9131140.info0000644000175000017500000000262712116077757016631 0ustar sunsunName: ATLAS_2011_S9131140 Year: 2011 Summary: Measurement of the Z pT with electrons and muons at 7 TeV Experiment: ATLAS Collider: LHC SpiresID: 9131140 Status: VALIDATED Authors: - Elena Yatsenko - Judith Katzy References: - arXiv:1107.2381 [hep-ex] RunInfo: Run with inclusive $Z$ events, with $Z/\gamma^*$ decays to electrons and/or muons. NumEvents: 100k Beams: [p+, p+] Energies: [7000] PtCuts: [20] Description: 'The Z pT at $\sqrt{s} = 7$\;TeV is measured using electron and muon $Z$ decay channels. The dressed leptons definition uses photons clustered in a cone around the charged leptons, while the bare lepton definition uses the post-FSR charged leptons only in the $Z$ reconstruction. The data used in the bare leptons calculation are based on a forward application of a PHOTOS-based energy loss correction and are hence not quite model-independent.' BibKey: Aad:2011gj BibTeX: '@Article{Aad:2011gj, author = "Aad, Georges and others", collaboration = "ATLAS", title = "{Measurement of the transverse momentum distribution of $Z/\gamma^*$ bosons in proton-proton collisions at $\sqrt{s} = 7$\;TeV with the ATLAS detector}", year = "2011", eprint = "1107.2381", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1107.2381;%%" }' rivet-1.8.3/data/anainfo/CDF_2002_S4796047.info0000644000175000017500000000361412116077757016400 0ustar sunsunName: CDF_2002_S4796047 Year: 2002 Summary: CDF Run 1 charged multiplicity measurement Experiment: CDF Collider: Tevatron Run 1 SpiresID: 4796047 Status: VALIDATED Authors: - Hendrik Hoeth References: - Phys.Rev.D65:072005,2002 - doi:10.1103/PhysRevD.65.072005 RunInfo: QCD events at sqrt(s) = 630 and 1800 GeV. NumEvents: 1000000 Beams: [p-, p+] Energies: [630, 1800] PtCuts: [0] Description: A study of $p\bar{p}$ collisions at sqrt(s) = 1800 and 630 GeV collected using a minimum bias trigger in which the data set is divided into two classes corresponding to `soft' and `hard' interactions. For each subsample, the analysis includes measurements of the multiplicity, transverse momentum (pT) spectra, and the average pT and event-by-event pT dispersion as a function of multiplicity. A comparison of results shows distinct differences in the behavior of the two samples as a function of the center of mass energy. The properties of the soft sample are invariant as a function of c.m. energy. It should be noticed that minimum bias tunings of PYTHIA made by ATLAS in early 2010, which used this among all other available data from CDF and from ATLAS at 900~GeV and 7~TeV, found an unavoidable tension between this data and the rest. Accordingly, this data was excluded from the fits. Whether this reflects a problem with this dataset or with the PYTHIA MPI model is a judgement for users to make! BibKey: Acosta:2001rm BibTeX: '@Article{Acosta:2001rm, author = "Acosta, Darin E. and others", collaboration = "CDF", title = "{Soft and hard interactions in $p\bar{p}$ collisions at $\sqrt{s}=$ 1800-GeV and 630-GeV}", journal = "Phys. Rev.", volume = "D65", year = "2002", pages = "072005", doi = "10.1103/PhysRevD.65.072005", SLACcitation = "%%CITATION = PHRVA,D65,072005;%%" }' rivet-1.8.3/data/anainfo/CDF_2008_NOTE_9351.info0000644000175000017500000000223412116077757016642 0ustar sunsunName: CDF_2008_NOTE_9351 Year: 2008 Summary: CDF Run 2 underlying event in Drell-Yan Experiment: CDF Collider: Tevatron Run 2 SpiresID: NONE Status: OBSOLETE Authors: - Hendrik Hoeth References: - CDF public note 9351 RunInfo: "ppbar collisions at 1960 GeV. * Drell-Yan events with $Z/\\gamma* -> e e$ and $Z/\\gamma* -> \\mu\\mu$. * A mass cut $m_{ll} > 70~\\text{GeV}$ can be applied on generator level. * Particles with $c \\tau > 10~\\text{mm}$ should be set stable." NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: Deepak Kar and Rick Field's measurement of the underlying event in Drell-Yan events. $Z -> ee$ and $Z -> \mu\mu$ events are selected using a $Z$ mass window cut between 70 and 110~GeV. ``Toward'', ``away'' and ``transverse'' regions are defined in the same way as in the original (2001) CDF underlying event analysis. The reconstructed $Z$ defines the $\phi$ direction of the toward region. The leptons are ignored after the $Z$ has been reconstructed. Thus the region most sensitive to the underlying event is the toward region (the recoil jet is boosted into the away region). rivet-1.8.3/data/anainfo/ATLAS_2012_I1183818.info0000644000175000017500000000326512116077757016632 0ustar sunsunName: ATLAS_2012_I1183818 Year: 2012 Summary: pseudorapidity dependence of the total transverse energy at 7 TeV Experiment: ATLAS Collider: LHC 7TeV InspireID: 1183818 Status: VALIDATED Authors: - Robindra Prabhu - Peter Wijeratne - Roman Lysak References: - arXiv:1208.6256 RunInfo: pp QCD interactions at 7 TeV, min bias and di-jet events NumEvents: 1000000 NeedCrossSection: no Beams: [p+, p+] Energies: [7000] Description: 'The measurement of the sum of the transverse energy of particles as a function of particle pseudorapidity, eta, in proton-proton collisions at a centre-of-mass energy, $\sqrt(s) = 7 TeV$ using the ATLAS detector at the Large Hadron Collider. The measurements are performed in the region $|\eta| < 4.8$ for two event classes: those requiring the presence of particles with a low transverse momentum and those requiring particles with a significant transverse momentum (dijet events where both jets have $E_T > 20$ GeV). In the second dataset measurements are made in the region transverse to the hard scatter.' BibKey: :2012dr BibTeX: '@article{:2012dr, author = "Aad, Georges and others", title = "{Measurements of the pseudorapidity dependence of the total transverse energy in proton-proton collisions at sqrt(s) = 7 TeV with ATLAS}", collaboration = "ATLAS Collaboration", year = "2012", eprint = "1208.6256", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-196", SLACcitation = "%%CITATION = ARXIV:1208.6256;%%", }' rivet-1.8.3/data/anainfo/D0_2008_S7863608.info0000644000175000017500000000300012116077757016243 0ustar sunsunName: D0_2008_S7863608 Year: 2008 Summary: Measurement of differential $Z/\gamma^*$ + jet + $X$ cross sections Experiment: D0 Collider: Tevatron Run 2 SpiresID: 7863608 Status: VALIDATED Authors: - Andy Buckley - Gavin Hesketh - Frank Siegert References: - Phys.Lett. B669 (2008) 278-286 - doi:10.1016/j.physletb.2008.09.060 - arXiv:0808.1296 [hep-ex] RunInfo: $p \bar{p} \to \mu^+ \mu^-$ + jets at 1960~GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $65 < m_{\mu\mu} < 115$ GeV. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: Cross sections as a function of pT and rapidity of the boson and pT and rapidity of the leading jet in the di-muon channel in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96 TeV, based on an integrated luminosity of 1.0 fb$^{-1}$. NeedCrossSection: yes BibKey: Abazov:2008ez BibTeX: '@Article{Abazov:2008ez, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of differential $Z / \gamma^{*}$ + jet + $X$ cross sections in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96-TeV}", journal = "Phys. Lett.", volume = "B669", year = "2008", pages = "278-286", eprint = "0808.1296", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1016/j.physletb.2008.09.060", SLACcitation = "%%CITATION = 0808.1296;%%" }' rivet-1.8.3/data/anainfo/JADE_OPAL_2000_S4300807.info0000644000175000017500000000213312116077757017274 0ustar sunsunName: JADE_OPAL_2000_S4300807 Year: 2000 Summary: Jet rates in $e^+e^-$ at JADE [35--44 GeV] and OPAL [91--189 GeV]. Experiment: JADE_OPAL Collider: PETRA and LEP SpiresID: 4300807 Status: VALIDATED Authors: - Frank Siegert References: - Eur.Phys.J.C17:19-51,2000 - arXiv:hep-ex/0001055 RunInfo: $e^+ e^- \to$ jet jet (+ jets) NumEvents: 1000000 Beams: [e+, e-] Energies: [35, 44, 91.2, 133, 161, 172, 183, 189] PtCuts: [0] Description: Differential and integrated jet rates for Durham and JADE jet algorithms. BibKey: Pfeifenschneider:1999rz BibTeX: '@Article{Pfeifenschneider:1999rz, author = "Pfeifenschneider, P. and others", collaboration = "JADE", title = "{QCD analyses and determinations of alpha(s) in e+ e- annihilation at energies between 35-GeV and 189-GeV}", journal = "Eur. Phys. J.", volume = "C17", year = "2000", pages = "19-51", eprint = "hep-ex/0001055", archivePrefix = "arXiv", doi = "10.1007/s100520000432", SLACcitation = "%%CITATION = HEP-EX/0001055;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2012_I943401.info0000644000175000017500000000345712116077757016544 0ustar sunsunName: ATLAS_2012_I943401 Year: 2012 Summary: Search for supersymmetry with 2 leptons and missing transverse energy Experiment: ATLAS Collider: LHC InspireID: 943401 Status: VALIDATED Authors: - Peter Richardson References: - arXiv:1110.6189 RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] Description: 'Results of three searches for the production of supersymmetric particles decaying into final states with missing transverse momentum and exactly two isolated leptons, electrons or muons. The analysis uses a data sample collected during the first half of 2011 that corresponds to a total integrated luminosity of 1 $\text{fb}^{-1}$ of $\sqrt{s} = 7$\,TeV proton-proton collisions recorded with the ATLAS detector at the Large Hadron Collider. Opposite-sign and same-sign dilepton events are studied separately. Additionally, in opposite- sign events, a search is made for an excess of same-flavour over different-flavour lepton pairs.' BibKey: Aad:2011cwa BibTeX: '@article{Aad:2011cwa, author = "Aad, Georges and others", title = "{Searches for supersymmetry with the ATLAS detector using final states with two leptons and missing transverse momentum in sqrt{s} = 7 TeV proton-proton collisions}", collaboration = "ATLAS Collaboration", journal = "Phys.Lett.", volume = "B709", pages = "137-157", doi = "10.1016/j.physletb.2012.01.076", year = "2012", eprint = "1110.6189", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-165", SLACcitation = "%%CITATION = ARXIV:1110.6189;%%", }' rivet-1.8.3/data/anainfo/ATLAS_2011_S8994773.info0000644000175000017500000000133112116077757016654 0ustar sunsunName: ATLAS_2011_S8994773 Year: 2011 Summary: Calo-based underlying event at 900 GeV and 7 TeV in ATLAS Experiment: ATLAS Collider: LHC SpiresID: 8994773 Status: VALIDATED Authors: - Jinlong Zhang - Andy Buckley References: - arXiv:1103.1816 RunInfo: pp QCD interactions at 900 GeV and 7 TeV. Diffractive events should be included, but only influence the lowest bins. Multiple kinematic cuts should not be required. NumEvents: 10000000 Beams: [p+, p+] Energies: [900, 7000] PtCuts: [0] Description: Underlying event measurements with the ATLAS detector at the LHC at center-of-mass energies of 900 GeV and 7 TeV, using calorimeter clusters rather than charged tracks. rivet-1.8.3/data/anainfo/MC_PHOTONJETS.info0000644000175000017500000000054012116077757016341 0ustar sunsunName: MC_PHOTONJETS Summary: Monte Carlo validation observables for photon + jets production Status: VALIDATED Authors: - Frank Siegert References: RunInfo: Tevatron Run II ppbar -> gamma + jets. NumEvents: 10000000 PtCuts: [0] Description: Different observables related to the photon and extra jets. NeedCrossSection: yes rivet-1.8.3/data/anainfo/MC_HINC.info0000644000175000017500000000052312116077757015366 0ustar sunsunName: MC_HINC Summary: Monte Carlo validation observables for $h[\tau^+ \, \tau^-]$ production Status: VALIDATED Authors: - Frank Siegert RunInfo: $h [\to \tau^+ \tau^-]$. NumEvents: 1000000 PtCuts: [0] Description: Monte Carlo validation observables for $h[\tau^+ \, \tau^-]$ production NeedCrossSection: yes rivet-1.8.3/data/anainfo/CMS_2012_I1193338.info0000644000175000017500000000261112116077757016400 0ustar sunsunName: CMS_2012_I1193338 Year: 2012 Summary: Measurement of the inelastic proton-proton cross section at sqrt(s)=7 TeV Experiment: CMS Collider: LHC SpireID: InspireID: 1193338 Status: VALIDATED Authors: - Sercan Sen References: - arXiv:1210.6718 [hep-ex] RunInfo: Inelastic events (non-diffractive and inelastic diffractive). NumEvents: 100000 NeedCrossSection: no Beams: [p+, p+] Energies: [7000] PtCuts: [0] Description: 'The inelastic cross-section is measured through two independent methods based on information from (i) forward calorimetry (for pseudorapidity $3 < |\eta| < 5$), in collisions where at least one proton loses more than $\xi > 5 \cdot 10^{-6}$ of its longitudinal momentum, and (ii) the central tracker ($|\eta| < 2.4$), in collisions containing an interaction vertex with more than 1, 2, or 3 tracks with $p_\perp > 200$ MeV/c.' BibKey: :2012 BibTeX: '@article{:2012, author = "Chatrchyan, Serguei and others", title = "{Measurement of the inelastic proton-proton cross section at sqrt(s) = 7 TeV}", collaboration = " CMS Collaboration", year = "2012", eprint = "1210.6718", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CMS-FWD-11-001, CERN-PH-EP-2012-293", SLACcitation = "%%CITATION = ARXIV:1210.6718;%%",}' rivet-1.8.3/data/anainfo/ATLAS_2012_I1094061.info0000644000175000017500000000331312123033122016563 0ustar sunsunName: ATLAS_2012_I1094061 Year: 2012 Summary: Measurement of two-particle correlation function at 900 GeV and 7 TeV Experiment: ATLAS Collider: LHC InspireID: 1094061 Status: VALIDATED Authors: - James Monk References: - JHEP 1205 (2012) 157 - CERN-PH-EP-2012-011 - doi:10.1007/JHEP05(2012)157 - arxiv:1203.3549 RunInfo: Soft-QCD proton-proton interactions (including diffraction) at 900 GeV or 7 TeV. Generated events should include an average lifetime cut of ctau < 10mm NumEvents: 1000000 NeedCrossSection: no Beams: [p+, p+] Energies: [900, 7000] Description: 'Two-particle angular correlations are measured in proton-proton collisions at $\sqrt(s)=900$ GeV and 7 TeV. Correlations are determined for charged particles with $\pT > 100 MeV$ and $|\eta| < 2.5$. A complicated function of both pseudorapidity and azimuth is observed. Results are obtained from an inclusive sample of events (900 GeV and 7 TeV), as well as a sample satisfying $n_{ch} \ge 20$ (7 TeV only).' BibKey: ATLAS:2012ap BibTeX: '@article{ATLAS:2012ap, author = "Aad, Georges and others", title = "{Measurement of inclusive two-particle angular correlations in pp collisions with the ATLAS detector at the LHC}", collaboration = "ATLAS Collaboration", journal = "JHEP", volume = "1205", pages = "157", doi = "10.1007/JHEP05(2012)157", year = "2012", eprint = "1203.3549", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-011", SLACcitation = "%%CITATION = ARXIV:1203.3549;%%", }' rivet-1.8.3/data/anainfo/ATLAS_2011_I944826.info0000644000175000017500000000360112116077757016546 0ustar sunsunName: ATLAS_2011_I944826 Year: 2011 Summary: KS0 and Lambda production at 0.9 and 7 TeV with ATLAS Experiment: ATLAS Collider: LHC InspireID: 944826 Status: VALIDATED Authors: - Holger Schulz References: - arXiv:1111.1297v2 [hep-ex] - Phys.Rev. D85 (2012) 012001 RunInfo: QCD events, 900GeV and 7TeV, Lambdas and Kshorts must be able to decay. Allow only charged decay modes to improve efficiency. NumEvents: 1000000 NeedCrossSection: no Beams: [p+, p+] Energies: [900, 7000] Description: 'The production of Kshort and Lambda hadrons is studied in inelastic pp collisions at sqrt(s) = 0.9 and 7 TeV collected with the ATLAS detector at the LHC using a minimum-bias trigger. The observed distributions of transverse momentum, rapidity, and multiplicity are corrected to hadron level in a model-independent way within well defined phase-space regions. The distribution of the production ratio of Lambdabar to Lambda baryons is also measured. The results are compared with various Monte Carlo simulation models. Although most of these models agree with data to within 15% in the Kshort distributions, substantial disagreements with data are found in the Lambda distributions of transverse momentum. ' BibKey: Aad:2011hd BibTeX: '@article{Aad:2011hd, author = "Aad, Georges and others", title = "{Kshort and Lambda production in pp interactions at sqrt(s) = 0.9 and 7 TeV measured with the ATLAS detector at the LHC}", collaboration = "ATLAS Collaboration", journal = "Phys.Rev.", volume = "D85", pages = "012001", year = "2012", eprint = "1111.1297", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-168", SLACcitation = "%%CITATION = ARXIV:1111.1297;%%", }' rivet-1.8.3/data/anainfo/CDF_2006_S6653332.info0000644000175000017500000000301112116077757016362 0ustar sunsunName: CDF_2006_S6653332 Year: 2006 Summary: b-jet cross section in Z + jets events Experiment: CDF Collider: Tevatron Run 2 SpiresID: 6653332 Status: VALIDATED Authors: - Lars Sonnenschein - Steffen Schumann References: - Phys.Rev.D.74:032008,2006 - doi:10.1103/PhysRevD.74.032008 - arXiv:hep-ex/0605099v2 RunInfo: Z + jets events at sqrt(s) = 1960 GeV. Jets min pT cut = 20~GeV, leptons min pT cut = 10~GeV NumEvents: 1000000 Beams: [p-, p+] PtCuts: [10] Energies: [1960] Description: Measurement of the $b$-jet cross section in events with $Z$ boson in $p\bar{p}$ collisions at center-of-mass energy sqrt(s) = 1.96 TeV. The data cover jet transverse momenta above 20 GeV and jet pseudorapidities in the range -1.5 to 1.5. $Z$ bosons are identified in their electron and muon decay modes in an invariant dilepton mass range between 66 and 116 GeV. NeedCrossSection: yes BibKey: Abulencia:2006ce BibTeX: '@Article{Abulencia:2006ce, author = "Abulencia, A. and others", collaboration = "CDF", title = "{Measurement of the $b$ jet cross-section in events with a $Z$ boson in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96- TeV}", journal = "Phys. Rev.", volume = "D74", year = "2006", pages = "032008", eprint = "hep-ex/0605099", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.74.032008", SLACcitation = "%%CITATION = HEP-EX/0605099;%%" }' rivet-1.8.3/data/anainfo/PDG_HADRON_MULTIPLICITIES_RATIOS.info0000644000175000017500000000250012116077757021231 0ustar sunsunName: PDG_HADRON_MULTIPLICITIES_RATIOS Year: 2008 Summary: Ratios (w.r.t. $\pi^+/\pi^-$) of hadron multiplicities in hadronic $e^+e^-$ events Experiment: PDG Collider: Various SpiresID: 7857373 Status: VALIDATED Authors: - Holger Schulz References: - Phys. Lett. B, 667, 1 (2008) RunInfo: Hadronic events in $e^+ e^-$ collisions NumEvents: 1000000 Beams: [e+, e-] Energies: [10, 35, 91.2, 177] PtCuts: [0] Description: Ratios (w.r.t. $\pi^+/\pi^-$) of hadron multiplicities in hadronic $e^+ e^-$ events, taken from Review of Particle Properties 2008, table 40.1, page 355. Average hadron multiplicities per hadronic $e^+ e^-$ annihilation event at $\sqrt{s} \approx$ 10, 29--35, 91, and 130--200 GeV, normalised to the pion multiplicity. The numbers are averages from various experiments. Correlations of the systematic uncertainties were considered for the calculation of the averages. BibKey: Amsler:2008zzb BibTeX: '@Article{Amsler:2008zzb, author = "Amsler, Claude and others", collaboration = "Particle Data Group", title = "{Review of particle physics}", journal = "Phys. Lett.", volume = "B667", year = "2008", pages = "1", doi = "10.1016/j.physletb.2008.07.018", SLACcitation = "%%CITATION = PHLTA,B667,1;%%" }' rivet-1.8.3/data/anainfo/DELPHI_2003_WUD_03_11.info0000644000175000017500000000116012116077757017217 0ustar sunsunName: DELPHI_2003_WUD_03_11 Year: 2003 Summary: 4-jet angular distributions at LEP (note) Experiment: DELPHI Collider: LEP 1 Status: UNVALIDATED Authors: - Hendrik Hoeth References: - Diploma thesis WUD-03-11, University of Wuppertal RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: The 4-jet angular distributions (Bengtsson-Zerwas, K\"orner-Schierholz- Willrodt, Nachtmann-Reiter, and $\alpha_{34}$) have been measured with DELPHI at LEP 1 using Jade and Durham cluster algorithms. rivet-1.8.3/data/anainfo/ATLAS_2012_I1083318.info0000644000175000017500000000253012116077757016616 0ustar sunsunName: ATLAS_2012_I1083318 Year: 2012 Summary: W+jets production at 7 TeV Experiment: ATLAS Collider: LHC InspireID: 1083318 Status: UNVALIDATED Authors: - Frank Siegert References: - arXiv:1201.1276 [hep-ex] RunInfo: W+jet events in either the electron or the muon decay channel (but not both). NumEvents: 1000000 Beams: [p+, p+] Energies: [7000] PtCuts: [0] NeedCrossSection: True Description: 'Differential cross-sections of properties of the four leading jets in $W$+jets production, using the full 2010 dataset of 36 pb$^-1$. Observables include jet multiplicities, $pT$, $H_T$, angular distances, and others. All observables are available using jets with $pT>30$ and $pT>20$ GeV.' BibKey: Aad:2012en BibTeX: ' @article{Aad:2012en, author = "Aad, Georges and others", title = "{Study of jets produced in association with a $W$ boson in $pp$ collisions at $\sqrt{s} = 7~$TeV with the ATLAS detector}", collaboration = "ATLAS Collaboration", year = "2012", eprint = "1201.1276", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-218", SLACcitation = "%%CITATION = ARXIV:1201.1276;%%", }' ToDo: - Get data into Hepdata - Clarify remaining minor deviations in validation plots rivet-1.8.3/data/anainfo/E735_1998_S3905616.info0000644000175000017500000000230012116077757016436 0ustar sunsunName: E735_1998_S3905616 Year: 1998 Summary: Charged particle multiplicity in ppbar collisions at sqrt(s) = 1.8 TeV Experiment: E735 Collider: Tevatron SpiresID: 3905616 Status: UNVALIDATED - need trigger etc. Authors: - Holger Schulz - Andy Buckley References: - Phys.Lett.B435:453-457,1998 RunInfo: QCD events, diffractive processes need to be switched on in order to fill the low multiplicity regions. The measurement was done in $\left|\eta\right| ~< ~3.25$ and was extrapolated to full phase space. However, the method of extrapolation remains unclear. NumEvents: 1000000 Beams: [p-, p+] Energies: [1800] PtCuts: [0] Description: A measurement of the charged multiplicity distribution at sqrt(s) = 1.8 TeV. BibKey: Alexopoulos:1998bi BibTeX: '@Article{Alexopoulos:1998bi, author = "Alexopoulos, T. and others", title = "{The role of double parton collisions in soft hadron interactions}", journal = "Phys. Lett.", volume = "B435", year = "1998", pages = "453-457", doi = "10.1016/S0370-2693(98)00921-6", SLACcitation = "%%CITATION = PHLTA,B435,453;%%" }' rivet-1.8.3/data/anainfo/CDF_2008_S8093652.info0000644000175000017500000000211012116077757016370 0ustar sunsunName: CDF_2008_S8093652 Year: 2008 Summary: Dijet mass spectrum Experiment: CDF Collider: Tevatron Run 2 SpiresID: 8093652 Status: VALIDATED Authors: - Frank Siegert References: - arXiv:0812.4036 [hep-ex] RunInfo: $p \bar{p} \to$ jets at 1960 GeV NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: Dijet mass spectrum from 0.2 TeV to 1.4 TeV in $p \bar{p}$ collisions at $\sqrt{s} = 1.96$ TeV, based on an integrated luminosity of 1.13 fb$^{-1}$. NeedCrossSection: yes BibKey: Aaltonen:2008dn BibTeX: '@Article{Aaltonen:2008dn, author = "Aaltonen, T. and others", collaboration = "CDF", title = "{Search for new particles decaying into dijets in proton- antiproton collisions at sqrt(s) = 1.96 TeV}", journal = "Phys. Rev.", volume = "D79", year = "2009", pages = "112002", eprint = "0812.4036", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevD.79.112002", SLACcitation = "%%CITATION = 0812.4036;%%" }' rivet-1.8.3/data/anainfo/MC_PHOTONS.info0000644000175000017500000000110712116077757015776 0ustar sunsunName: MC_PHOTONS Summary: Monte Carlo validation observables for general photons Status: VALIDATED Authors: - Steve Lloyd - Andy Buckley RunInfo: Any event type, but there are many observables for photons associated to (semi-)hard leptons. NumEvents: 10000 PtCuts: [0] Description: Observables for testing general unisolated photon properties, especially those associated with charged leptons (e and mu). NeedCrossSection: no ToDo: - Add a cone size cut on the photon--lepton association. - Add FastJet-based clustering of photons on to leptons. rivet-1.8.3/data/anainfo/ATLAS_2012_I1126136.info0000644000175000017500000000244612116077757016620 0ustar sunsunName: ATLAS_2012_I1126136 Year: 2012 Summary: SUSY Top partner search in jets with missing transverse momentum Experiment: ATLAS Collider: LHC InspireID: 1126136 Status: UNVALIDATED Authors: - Peter Richardson References: - arXiv:1208.1447 RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] NeedCrossSection: yes Description: 'Search for direct pair production of supersymmetric top squarks, assuming the stop_1 decays into a top quark and the lightest supersymmetric particle, and that both top quarks decay to purely hadronic final states. This search has an integrated luminosity of 4.7 fb$^{-1}$ at $\sqrt{s}=8$\,TeV.' BibTeX: '@article{:2012si, author = "Aad, Georges and others", title = "{Search for a supersymmetric partner to the top quark in final states with jets and missing transverse momentum at sqrt(s) = 7 TeV with the ATLAS detector}", collaboration = "ATLAS Collaboration", year = "2012", eprint = "1208.1447", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-201", SLACcitation = "%%CITATION = ARXIV:1208.1447;%%", }' rivet-1.8.3/data/anainfo/STAR_2008_S7869363.info0000644000175000017500000000230012116077757016557 0ustar sunsunName: STAR_2008_S7869363 Year: 2008 Summary: Multiplicities and pT spectra from STAR for pp at 200 GeV Experiment: STAR Collider: RHIC SpiresID: 7869363 Status: UNVALIDATED Authors: - Holger Schulz References: - arXiv:0808.2041 - http://drupal.star.bnl.gov/STAR/files/starpublications/124/data.html RunInfo: QCD (pp) events at 200 GeV NumEvents: 1.000.000 Beams: [p+, p+] Energies: [200] PtCuts: Description: 'Charged Mulitplicity and identified charged particle spectra' BibKey: :2008ez BibTeX: '@Article{:2008ez, author = "Abelev, B. I. and others", collaboration = "STAR", title = "{Systematic Measurements of Identified Particle Spectra in $p p, d^+$ Au and Au+Au Collisions from STAR}", journal = "Phys. Rev.", volume = "C79", year = "2009", pages = "034909", eprint = "0808.2041", archivePrefix = "arXiv", primaryClass = "nucl-ex", doi = "10.1103/PhysRevC.79.034909", SLACcitation = "%%CITATION = 0808.2041;%%" }' ToDo: - Understand first bin in multiplicity distribution - Normalise to generator values (just scale by 1/nPassedCuts?) rather than data areas rivet-1.8.3/data/anainfo/MC_GENERIC.info0000644000175000017500000000043512116077757015723 0ustar sunsunName: MC_GENERIC Summary: Generic MC testing analysis Status: VALIDATED Authors: - Ian Bruce - Andy Buckley NumEvents: 50000 RunInfo: Any! Description: Generic analysis of typical event distributions such as $\eta$, $y$, $pT$, $\phi$\dots rivet-1.8.3/data/anainfo/MC_ZJETS.info0000644000175000017500000000113412116077757015543 0ustar sunsunName: MC_ZJETS Summary: Monte Carlo validation observables for $Z[e^+ \, e^-]$ + jets production Status: VALIDATED Authors: - Frank Siegert References: RunInfo: $e^+ e^-$ + jets analysis. Needs mass cut on lepton pair to avoid photon singularity, e.g. a min range of $66 < m_{ee} < 116$ GeV NumEvents: 1000000 PtCuts: [0] Description: Available observables are Z mass, pT of jets 1-4, jet multiplicity, $\Delta\eta(Z, \text{jet1})$, $\Delta R(\text{jet2}, \text{jet3})$, differential jet rates 0->1, 1->2, 2->3, 3->4, integrated 0--4 jet rates. NeedCrossSection: yes rivet-1.8.3/data/anainfo/BELLE_2006_S6265367.info0000644000175000017500000000326212116077757016630 0ustar sunsunName: BELLE_2006_S6265367 Summary: Charm hadrons from fragmentation and B decays on the $\Upsilon(4S)$ Status: VALIDATED Authors: - Jan Eike von Seggern References: - Phys.Rev.D73:032002,2006. - arXiv:hep-ex/0506068 - doi:10.1103/PhysRevD.73.032002 RunInfo: $e^+ e^-$ analysis on the $\Upsilon(4S)$ resonance, with CoM boost -- 8.0~GeV~($e^−$) and 3.5~GeV~($e^+$) NumEvents: 1000000 SpiresID: 6265367 Beams: [e+, e-] Energies: [[3.5, 8.0],[3.5,7.91]] PtCuts: [0] Description: Analysis of charm quark fragmentation at 10.6 GeV, based on a data sample of 103 fb collected by the Belle detector at the KEKB accelerator. Fragmentation into charm is studied for the main charmed hadron ground states, namely $D^0$, $D^+$, $D^+_s$ and $\Lambda_c^+$, as well as the excited states $D^{*0}$ and $D^{*+}$. This analysis can be used to constrain charm fragmentation in Monte Carlo generators. As the original data are not corrected for the branching ratios of the decay modes used to observed the charm hadrons we also include distributions with unit normalisation which are more useful for Monte Carlo tuning. BibKey: Seuster:2005tr BibTeX: '@Article{Seuster:2005tr, author = "Seuster, R. and others", collaboration = "Belle", title = "{Charm hadrons from fragmentation and B decays in e+ e- annihilation at $\sqrt{s}$ = 10.6\,GeV}", journal = "Phys. Rev.", volume = "D73", year = "2006", pages = "032002", eprint = "hep-ex/0506068", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.73.032002", SLACcitation = "%%CITATION = HEP-EX/0506068;%%" }' rivet-1.8.3/data/anainfo/CMS_2012_PAS_FWD_11_003.info0000644000175000017500000000143312116077757017443 0ustar sunsunName: CMS_2012_PAS_FWD_11_003 Year: 2011 Summary: Study of the Underlying Event at Forward Rapidity in Proton-Proton Collisions at the LHC Experiment: CMS Collider: LHC SpiresID: Status: VALIDATED Authors: - Samantha Dooling References: - CMS-PAS-FWD-11-003 - http://cdsweb.cern.ch/record/1434458 RunInfo: Inelastic events (non-diffractive and diffractive) at $\sqrt{s}$ = 0.9, 2.76 and 7 TeV. NumEvents: 1 Mio Beams: [p+, p+] Energies: [900, 2760, 7000] Description: 'Ratio of the energy deposited in the pseudorapidity range $-6.6 < \eta < -5.2$ for events with a charged particle jet with $|\eta|<2$ with respect to the energy in inclusive events, as a function of charged particle jet transverse momentum for $\sqrt{s}=$0.9, 2.76 and 7 TeV.' rivet-1.8.3/data/anainfo/OPAL_2000_S4418603.info0000644000175000017500000000261312116077757016520 0ustar sunsunName: OPAL_2000_S4418603 Year: 2000 Summary: Multiplicities of $\pi^0$, $\eta$, $K^0$ and of charged particles in quark and gluon jets Experiment: OPAL Collider: LEP 1 SpiresID: 4418603 Status: VALIDATED Authors: - Peter Richardson References: - Eur.Phys.J.C17:373-387,2000 - hep-ex/0007017 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: Multiplicities of $\pi^0$, $\eta$, $K^0$ and of charged particles in quark and gluon jets in 3-jet events, as measured by the OPAL experiment at LEP. The main implemented measurement is the $K^0$ fragmentation function. BibKey: Abbiendi:2000cv BibTeX: '@article{Abbiendi:2000cv, author = "Abbiendi, G. and others", title = "{Multiplicities of pi0, eta, K0 and of charged particles in quark and gluon jets}", collaboration = "OPAL Collaboration", journal = "Eur.Phys.J.", volume = "C17", pages = "373-387", doi = "10.1007/s100520000505", year = "2000", eprint = "hep-ex/0007017", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-EP-2000-070", SLACcitation = "%%CITATION = HEP-EX/0007017;%%", }' rivet-1.8.3/data/anainfo/CDF_2005_S6217184.info0000644000175000017500000000246612116077757016377 0ustar sunsunName: CDF_2005_S6217184 Year: 2005 Summary: CDF Run II jet shape analysis Experiment: CDF Collider: Tevatron Run 2 SpiresID: 6217184 Status: VALIDATED Authors: - Lars Sonnenschein - Andy Buckley References: - Phys.Rev.D71:112002,2005 - doi:10.1103/PhysRevD.71.112002 - arXiv:hep-ex/0505013 RunInfo: QCD events at sqrt(s) = 1960 GeV. Jet pTmin in plots is 37 GeV/c --- choose generator min pT somewhere well below this. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [30] Description: Measurement of jet shapes in inclusive jet production in p pbar collisions at center-of-mass energy sqrt(s) = 1.96 TeV. The data cover jet transverse momenta from 37--380 GeV and absolute jet rapidities in the range 0.1--0.7. BibKey: Acosta:2005ix BibTeX: '@Article{Acosta:2005ix, author = "Acosta, Darin E. and others", collaboration = "CDF", title = "{Study of jet shapes in inclusive jet production in $p\bar{p}$ collisions at $\sqrt{s}=1.96$ TeV}", journal = "Phys. Rev.", volume = "D71", year = "2005", pages = "112002", eprint = "hep-ex/0505013", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.71.112002", SLACcitation = "%%CITATION = HEP-EX/0505013;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2011_S8983313.info0000644000175000017500000000212712116077757016644 0ustar sunsunName: ATLAS_2011_S8983313 Year: 2011 Summary: 0-lepton squark and gluino search Experiment: ATLAS Collider: LHC SpiresID: 8983313 Status: VALIDATED Authors: - David Grellscheid References: - arXiv:1102.5290 RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] Description: '0-lepton search for squarks and gluinos by ATLAS at 7 TeV with an integrated luminosity of $35\,\mathrm{pb}^{-1}$. Event counts in four signal regions A-D are implemented as one-bin histograms.' BibKey: daCosta:2011qk BibTeX: '@Article{daCosta:2011qk, author = "da Costa, Joao Barreiro Guimaraes and others", collaboration = "ATLAS", title = "{Search for squarks and gluinos using final states with jets and missing transverse momentum with the ATLAS detector in $\sqrt{s}$ = 7 TeV proton-proton collisions}", year = "2011", eprint = "1102.5290", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1102.5290;%%" } ' rivet-1.8.3/data/anainfo/ALICE_2012_I1181770.info0000644000175000017500000000367012116077757016576 0ustar sunsunName: ALICE_2012_I1181770 Year: 2012 Summary: Measurement of inelastic, single- and double-diffraction cross sections in proton--proton collisions at the LHC with ALICE Experiment: ALICE Collider: LHC SpireID: 9732586 InspireID: 1181770 Status: VALIDATED Authors: - Martin Poghosyan - Sercan Sen - Burak Bilki - Andy Buckley References: - arXiv:1208.4968 [hep-ex] RunInfo: Inelastic events (non-diffractive and inelastic diffractive). NumEvents: 100K Beams: [p+, p+] Energies: [900, 2760, 7000] Description: 'Measurements of cross-sections of inelastic and diffractive processes in proton-proton collisions at $\sqrt{s} = 900$, 2760 and 7000 GeV. The fractions of diffractive processes in inelastic collisions were determined from a study of gaps in charged particle pseudorapidity distributions. Single-diffractive events are selected with $M_{X} < 200\;\GeV/c^2$ and double-diffractive events defined as NSD events with $\Delta\eta > 3$. To measure the inelastic cross-section, beam properties were determined with van der Meer scans using a simulation of diffraction adjusted to data. Note that these are experimental approximations to theoretical concepts -- it is not totally clear whether the data point values are model-independent.' BibKey: :2012sja BibTeX: '@article{:2012sja, author = "Abelev, Betty and others", title = "{Measurement of inelastic, single- and double-diffraction cross sections in proton--proton collisions at the LHC with ALICE}", collaboration = "ALICE Collaboration", journal = "Eur. Phys. J. C", year = "2012", eprint = "1208.4968", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-138", SLACcitation = "%%CITATION = ARXIV:1208.4968;%%", }' rivet-1.8.3/data/anainfo/MC_WINC.info0000644000175000017500000000054612116077757015412 0ustar sunsunName: MC_WINC Summary: Monte Carlo validation observables for inclusive $W[e \, \nu]$ production Status: VALIDATED Authors: - Frank Siegert References: RunInfo: $e \, \nu$ + jets analysis. NumEvents: 1000000 PtCuts: [0] Description: Monte Carlo validation observables for inclusive $W[e \, \nu]$ production NeedCrossSection: yes rivet-1.8.3/data/anainfo/OPAL_2004_S6132243.info0000644000175000017500000000266612116077757016527 0ustar sunsunName: OPAL_2004_S6132243 Year: 2004 Summary: Event shape distributions and moments in $e^+ e^-$ -> hadrons at 91--209 GeV Experiment: OPAL Collider: LEP 1 & 2 SpiresID: 6132243 Status: VALIDATED Authors: - Andy Buckley References: - Eur.Phys.J.C40:287-316,2005 - hep-ex/0503051 RunInfo: Hadronic $e^+ e^-$ events at 4 representative energies (91, 133, 177, 197). Runs need to have ISR suppressed, since the analysis was done using a cut of $\sqrt{s} - \sqrt{s_\text{reco}} < 1\,\text{GeV}$. Particles with a livetime $> 3 \cdot 10^{-10}\,\text{s}$ are considered to be stable. NumEvents: 200000 Beams: [e+, e-] Energies: [91.2, 133, 177, 197] PtCuts: [0] Description: Measurement of $e^+ e^-$ event shape variable distributions and their 1st to 5th moments in LEP running from the Z pole to the highest LEP 2 energy of 209 GeV. BibKey: Abbiendi:2004qz BibTeX: '@Article{Abbiendi:2004qz, author = "Abbiendi, G. and others", collaboration = "OPAL", title = "{Measurement of event shape distributions and moments in e+ e- --> hadrons at 91-GeV - 209-GeV and a determination of alpha(s)}", journal = "Eur. Phys. J.", volume = "C40", year = "2005", pages = "287-316", eprint = "hep-ex/0503051", archivePrefix = "arXiv", doi = "10.1140/epjc/s2005-02120-6", SLACcitation = "%%CITATION = HEP-EX/0503051;%%" }' rivet-1.8.3/data/anainfo/CDF_1996_S3108457.info0000644000175000017500000000203512116077757016410 0ustar sunsunName: CDF_1996_S3108457 Year: 1996 Summary: Properties of High-Mass Multijet Events Experiment: CDF Collider: Tevatron Run 1 SpiresID: 3108457 Status: UNVALIDATED Authors: - Frank Siegert References: - Phys.Rev.Lett.75:608-612,1995 - doi:10.1103/PhysRevLett.75.608 RunInfo: Pure QCD events without underlying event. NumEvents: 1000000 Beams: [p-, p+] Energies: [1800] PtCuts: [20] Description: Properties of two-, three-, four-, five-, and six-jet events... Multijet-mass, leading jet angle, jet pT. NeedCrossSection: yes ToDo: - This is at 1800 GeV only, or also 630 GeV? BibKey: Abe:1995rw BibTeX: '@Article{Abe:1995rw, author = "Abe, F. and others", collaboration = "CDF", title = "{Properties of high mass multi - jet events at the Fermilab $p\bar{p}$ collider}", journal = "Phys. Rev. Lett.", volume = "75", year = "1995", pages = "608-612", doi = "10.1103/PhysRevLett.75.608", SLACcitation = "%%CITATION = PRLTA,75,608;%%" }' rivet-1.8.3/data/anainfo/ZEUS_2001_S4815815.info0000644000175000017500000000356412116077757016570 0ustar sunsunName: ZEUS_2001_S4815815 Year: 2001 Summary: Dijet photoproduction analysis Experiment: ZEUS Collider: HERA Run I SpiresID: 4815815 Status: UNVALIDATED Authors: - Jon Butterworth References: - Eur.Phys.J.C23:615,2002 - DESY 01/220 - hep-ex/0112029 RunInfo: 820 GeV protons colliding with 27.5 GeV positrons; Direct and resolved photoproduction of dijets; Leading jet $pT > 14$ GeV, second jet $pT > 11$ GeV; Jet pseudorapidity $-1 < |\eta| < 2.4$ NumEvents: 1000000 Beams: [p+, e+] Energies: [[820, 27.5]] PtCuts: [0] Description: ZEUS photoproduction of jets from proton--positron collisions at beam energies of 820~GeV on 27.5~GeV. Photoproduction can either be direct, in which case the photon interacts directly with the parton, or resolved, in which case the photon acts as a source of quarks and gluons. A photon-proton centre of mass energy of between 134~GeV and 227~GeV is probed, with values of $x_P$, the fractional momentum of the partons inside the proton, predominantly in the region between 0.01 and 0.1. The fractional momentum of the partons from the photon, $x\gamma$, is in the region 0.1 to 1. Jets are reconstructed in the range $-1 < |\eta| < 2.4$ using the $k_\perp$ algorithm with an $R$ parameter of 1.0. The minimum pT of the leading jet should be greater than 14~GeV, and at least one other jet must have $pT > 11$~GeV. BibKey: Chekanov:2001bw BibTeX: '@Article{Chekanov:2001bw, author = "Chekanov, S. and others", collaboration = "ZEUS", title = "{Dijet photoproduction at HERA and the structure of the photon}", journal = "Eur. Phys. J.", volume = "C23", year = "2002", pages = "615-631", eprint = "hep-ex/0112029", archivePrefix = "arXiv", doi = "10.1007/s100520200936", SLACcitation = "%%CITATION = HEP-EX/0112029;%%" }' rivet-1.8.3/data/anainfo/CDF_1998_S3618439.info0000644000175000017500000000237212116077757016424 0ustar sunsunName: CDF_1998_S3618439 Year: 1998 Summary: Differential cross-section for events with large total transverse energy Experiment: CDF Collider: Tevatron Run 1 SpiresID: 3618439 Status: UNVALIDATED Authors: - Frank Siegert References: - Phys.Rev.Lett.80:3461-3466,1998 - 10.1103/PhysRevLett.80.3461 RunInfo: QCD events at Tevatron with $\sqrt{s}=1.8$ TeV without MPI. NumEvents: 1000000 Beams: [p-, p+] Energies: [1800] PtCuts: [0] Description: Measurement of the differential cross section $\mathrm{d}\sigma/\mathrm{d}E_\perp^j$ for the production of multijet events in $p\bar{p}$ collisions where the sum is over all jets with transverse energy $E_\perp^j > E_\perp^\mathrm{min}$. NeedCrossSection: yes BibKey: Abe:1997eua BibTeX: '@Article{Abe:1997eua, author = "Abe, F. and others", collaboration = "CDF", title = "{Measurement of the differential cross section for events with large total transverse energy in $p\bar{p}$ collisions at $\sqrt{s} = 1.8$ TeV}", journal = "Phys. Rev. Lett.", volume = "80", year = "1998", pages = "3461-3466", doi = "10.1103/PhysRevLett.80.3461", SLACcitation = "%%CITATION = PRLTA,80,3461;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2010_S8918562.info0000644000175000017500000000227512116077757016653 0ustar sunsunName: ATLAS_2010_S8918562 Year: 2010 Summary: Track-based minimum bias at 900 GeV and 2.36 and 7 TeV in ATLAS Experiment: ATLAS Collider: LHC SpiresID: 8918562 Status: VALIDATED Authors: - Thomas Burgess - Andy Buckley References: - arXiv:1012.5104 RunInfo: pp QCD interactions at 0.9, 2.36, and 7 TeV. Diffractive events should be included. Multiple kinematic cuts should not be required. NumEvents: 1000000 Beams: [p+, p+] Energies: [900, 2360, 7000] PtCuts: [0] Description: Measurements from proton-proton collisions at centre-of-mass energies of sqrt(s) = 0.9, 2.36, and 7 TeV recorded with the ATLAS detector at the LHC. Events were collected using a single-arm minimum-bias trigger. The charged-particle multiplicity, its dependence on transverse momentum and pseudorapidity and the relationship between the mean transverse momentum and charged-particle multiplicity are measured. Measurements in different regions of phase-space are shown, providing diffraction-reduced measurements as well as more inclusive ones. The observed distributions are corrected to well-defined phase-space regions, using model-independent corrections. rivet-1.8.3/data/anainfo/CMS_2012_PAS_QCD_11_010.info0000644000175000017500000000177512116077757017441 0ustar sunsunName: CMS_2012_PAS_QCD_11_010 Year: 2011 Summary: Strange particle production in underlying events in proton--proton collisions at $\sqrt{s} = 7$ TeV Experiment: CMS Collider: LHC InspireID: Status: PRELIMINARY Authors: - Sercan Sen References: - CMS-PAS-QCD-11-010 - http://cdsweb.cern.ch/record/1463352 RunInfo: Inelastic events (non-diffractive and inelastic diffractive) at $\sqrt{s} = 7$\;TeV. NumEvents: 500000 NeedCrossSection: no Beams: [p+, p+] Energies: [7000] PtCuts: [0] Description: 'Measurements of the production of $K^0_S$, $\Lambda$ and $\bar{Lambda}$ particles in the underlying activity of events with a pT scale ranging from 1 to 50 GeV/$c$ in $pp$ collisions at $\sqrt{s} = 7$\;TeV.' BibKey: CMS-PAS-QCD-11-010 BibTeX: '@article{CMS-PAS-QCD-11-010, title = "Measurement of strange particle production in underlying events in proton--proton collisions at $\sqrt{s} = 7$\;TeV", year = "2012", }' rivet-1.8.3/data/anainfo/TASSO_1990_S2148048.info0000644000175000017500000000221212116077757016673 0ustar sunsunName: TASSO_1990_S2148048 Year: 1990 Summary: Event shapes in e+e- annihilation at 14-44 GeV Experiment: TASSO Collider: PETRA SpiresID: 2148048 Status: VALIDATED Authors: - Holger Schulz holger.schulz@physik.hu-berlin.de References: - Z.Phys.C47:187-198,1990 - DESY-90-013 RunInfo: '$e^+ e^- \to \text{jet jet}$ (+ jets). Kinematic cuts such as CKIN(1) in Pythia need to be set slightly below the CMS energy.' NumEvents: 100000 Beams: [e-, e+] Energies: [14.03, 21.99, 35, 43.7] PtCuts: Description: 'Event shapes Thrust, Sphericity, Aplanarity at four different energies' BibKey: Braunschweig:1990yd BibTeX: '@Article{Braunschweig:1990yd, author = "Braunschweig, W. and others", collaboration = "TASSO", title = "{GLOBAL JET PROPERTIES AT 14-GeV TO 44-GeV CENTER-OF-MASS ENERGY IN e+ e- ANNIHILATION}", journal = "Z. Phys.", volume = "C47", year = "1990", pages = "187-198", doi = "10.1007/BF01552339", SLACcitation = "%%CITATION = ZEPYA,C47,187;%%" }' ToDo: - Add the missing distributions - Add missing Trigger conditions, move to Trigger Projection rivet-1.8.3/data/anainfo/ATLAS_2011_S9128077.info0000644000175000017500000000227212116077757016644 0ustar sunsunName: ATLAS_2011_S9128077 Year: 2011 Summary: Measurement of multi-jet cross sections Experiment: ATLAS Collider: LHC SpiresID: 9128077 Status: VALIDATED Authors: - Frank Siegert References: - arXiv:1107.2092 RunInfo: Pure QCD, inclusive enough for jet pT down to 60 GeV. NumEvents: 1000000 Beams: [p+, p+] Energies: [7000] PtCuts: [0] Description: 'Inclusive multi-jet production is studied using an integrated luminosity of 2.4 pb-1. Results on multi-jet cross sections are presented differential in pT of the four leading jets, HT. Additionally three-to-two jet fractions are presented differential in different observables. Jets are anti-kt with $R=0.4$ and $R=0.6$, $p_\perp>80(60)$ GeV and $|\eta|<2.8$.' NeedCrossSection: yes BibKey: Collaboration:2011tq BibTeX: '@Article{Collaboration:2011tq, author = "Collaboration, ATLAS", title = "{Measurement of multi-jet cross sections in proton-proton collisions at a 7 TeV center-of-mass energy}", year = "2011", eprint = "1107.2092", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1107.2092;%%" }' ToDo: - Validate. rivet-1.8.3/data/anainfo/ATLAS_2011_I9035664.info0000644000175000017500000000317512116077757016634 0ustar sunsunName: ATLAS_2011_I9035664 Year: 2011 Summary: Measurement of J/Psi production Experiment: ATLAS Collider: LHC SpiresID: 9035664 Status: VALIDATED Authors: - References: - - arXiv:1104.3038 [hep-ex] RunInfo: pp to hadrons including both prompt J/Psi production and the production in B decays NumEvents: 1000000 Beams: [p+, p+] Energies: [7000] PtCuts: Description: 'The inclusive $J/\psi$ production cross-section and fraction of $J/\psi$ mesons produced in B-hadron decays are measured in proton-proton collisions at $\sqrt{s} = 7$ TeV with the ATLAS detector at the LHC, as a function of the transverse momentum and rapidity of the J/psi, using 2.3$\textrm{pb}^{-1}$ of integrated luminosity. The cross section is measured from a minimum $p_T$ of 1 GeV to a maximum of 70 GeV and for rapidities within $|y| < 2.4$ giving the widest reach of any measurement of $J/\psi$ production to date.' NeedCrossSection: yes BibKey: Aad:2011sp BibTeX: '@article{Aad:2011sp, author = "Aad, Georges and others", title = "{Measurement of the differential cross-sections of inclusive, prompt and non-prompt $J/\psi$ production in proton-proton collisions at $\sqrt{s}=7$ TeV}", collaboration = "ATLAS Collaboration", journal = "Nucl.Phys.", volume = "B850", pages = "387-444", doi = "10.1016/j.nuclphysb.2011.05.015", year = "2011", eprint = "1104.3038", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = ARXIV:1104.3038;%%", }' rivet-1.8.3/data/anainfo/UA5_1989_S1926373.info0000644000175000017500000000305712116077757016420 0ustar sunsunName: UA5_1989_S1926373 Year: 1989 Summary: UA5 charged multiplicity measurements Experiment: UA5 Collider: CERN SPS SpiresID: 1926373 Status: VALIDATED Authors: - Holger Schulz - Christophe L. J. Vaillant - Andy Buckley References: - Z. Phys. C - Particles and Fields 43, 357-374 (1989) - doi:10.1007/BF01506531 RunInfo: Minimum bias events at sqrt(s) = 200 and 900 GeV. Enable single and double diffractive events in addition to non-diffractive processes. NumEvents: 1000000 Beams: [p-, p+] Energies: [200, 900] PtCuts: [0] Description: Multiplicity distributions of charged particles produced in non-single-diffractive collisions between protons and antiprotons at centre-of-mass energies of 200 and 900 GeV. The data were recorded in the UA5 streamer chambers at the CERN collider, which was operated in a pulsed mode between the two energies. This analysis confirms the violation of KNO scaling in full phase space found by the UA5 group at an energy of 546 GeV, with similar measurements at 200 and 900 GeV. BibKey: Ansorge:1988kn BibTeX: '@Article{Ansorge:1988kn, author = "Ansorge, R. E. and others", collaboration = "UA5", title = "{Charged Particle Multiplicity Distributions at 200-GeV and 900-GeV Center-Of-Mass Energy}", journal = "Z. Phys.", volume = "C43", year = "1989", pages = "357", doi = "10.1007/BF01506531", SLACcitation = "%%CITATION = ZEPYA,C43,357;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2011_S9019561.info0000644000175000017500000000211512116077757016635 0ustar sunsunName: ATLAS_2011_S9019561 Year: 2011 Summary: Two lepton supersymmetry search Experiment: ATLAS Collider: LHC SpiresID: 9019561 Status: VALIDATED Authors: - Angela Chen References: - arXiv:1103.6214 RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] Description: '2-lepton search for supersymmetric particles by ATLAS at 7 TeV. Event counts in signal regions (3 same sign and 3 opposite sign) are implemented as one bin histograms. Histograms for missing transverse energy are implemented.' BibKey: Aad:2011xm BibTeX: '@Article{Aad:2011xm, author = "Aad, Georges and others", collaboration = "ATLAS", title = "{Search for supersymmetric particles in events with lepton pairs and large missing transverse momentum in sqrt{s} = 7 TeV proton-proton collisions with the ATLAS experiment}", year = "2011", eprint = "1103.6214", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1103.6214;%%" } ' rivet-1.8.3/data/anainfo/OPAL_1997_S3396100.info0000644000175000017500000000214612116077757016545 0ustar sunsunName: OPAL_1997_S3396100 Year: 1997 Summary: Strange baryon production in $Z$ hadronic decays at OPAL Experiment: OPAL Collider: LEP 1 SpiresID: 3396100 Status: VALIDATED Authors: - Peter Richardson References: - Z. Phys. C, 73, 569--586 (1997) RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: Measurement of the $\Xi^-$, $\Lambda^0$, $\Sigma^+(1385)$, $\Sigma^-(1385)$, $\Xi^0(1530)$ and $\Lambda^0(1520)$ scaled momentum distributions by OPAL at LEP 1. The paper also has the production cross-sections of these particles, but that is not implemented in Rivet. BibKey: Alexander:1996qj BibTeX: '@Article{Alexander:1996qj, author = "Alexander, G. and others", collaboration = "OPAL", title = "{Strange baryon production in hadronic $Z^0$ decays}", journal = "Z. Phys.", volume = "C73", year = "1997", pages = "569-586", doi = "10.1007/s002880050349", SLACcitation = "%%CITATION = ZEPYA,C73,569;%%" }' rivet-1.8.3/data/anainfo/CMS_QCD_10_024.info0000644000175000017500000000164012116077757016265 0ustar sunsunName: CMS_QCD_10_024 Year: 2010 Summary: Pseudorapidity distributions of charged particles at sqrt(s)=0.9 and 7 TeV Experiment: CMS Collider: LHC SpiresID: Status: VALIDATED Authors: - P. Katsas - A. Knutsson References: - CMS-PAS-QCD-10-024 - https://cdsweb.cern.ch/record/1341853?ln=en RunInfo: $pp$ collisions at 0.9 and 7~TeV. Minimum bias events. NumEvents: 1000000 Beams: [p+, p+] Energies: [900, 7000] Description: Pseudorapidity distributions of charged particles in $pp$ collisions at $\sqrt{s} = 0.9$ and 7~TeV with at least one central charged particle. BibKey: CMS-PAS-QCD-10-024 BibTeX: '@article{CMS-PAS-QCD-10-024, title = "Pseudorapidity distributions of charged particles in pp collisions at $\sqrt{s} = 7$~TeV with at least one central charged particle", year = "2011", }' rivet-1.8.3/data/anainfo/EXAMPLE.info0000644000175000017500000000103512116077757015360 0ustar sunsunName: EXAMPLE Summary: A demo to show aspects of writing a Rivet analysis Status: EXAMPLE Authors: - Andy Buckley RunInfo: All event types will be accepted. NumEvents: 1000000 PtCuts: [0] Description: "This analysis is a demonstration of the Rivet analysis structure and functionality: booking histograms; the initialisation, analysis and finalisation phases; and a simple loop over event particles. It has no physical meaning, but can be used as a simple pedagogical template for writing real analyses." rivet-1.8.3/data/anainfo/CMS_2011_S9088458.info0000644000175000017500000000272512116077757016435 0ustar sunsunName: CMS_2011_S9088458 Year: 2011 Summary: Measurement of ratio of the 3-jet over 2-jet cross section in pp collisions at sqrt(s) = 7 TeV Experiment: CMS Collider: LHC SpiresID: 9088458 Status: VALIDATED Authors: - Tomo Umer References: - Phys. Lett. B 702 (2011) 336 RunInfo: Inclusive QCD at 7TeV comEnergy, ptHat (or equivalent) greater than 30 GeV NumEvents: 100k Beams: [p+, p+] Energies: [7000] PtCuts: jet PT higher than 50 GeV Description: A measurement of the ratio of the inclusive 3-jet to 2-jet cross sections as a function of the total jet transverse momentum, HT, in the range 0.2 < HT < 2.5 TeV is presented. The data have been collected at a proton-proton centre-of-mass energy of 7 TeV with the CMS detector at the LHC, and correspond to an integrated luminosity of 36/pb. Jets are anti-kt with $R=0.5$, $p_\perp>50$ GeV and $|\eta|<2.5$. BibKey: Chatrchyan:2011wn BibTeX: '@article{Chatrchyan:2011wn, author = "Chatrchyan, Serguei and others", title = "{Measurement of the Ratio of the 3-jet to 2-jet Cross Sections in pp Collisions at sqrt(s) = 7 TeV}", collaboration = "CMS Collaboration", journal = "Phys.Lett.", volume = "B702", pages = "336-354", year = "2011", note = "* Temporary entry *", eprint = "1106.0647", archivePrefix = "arXiv", primaryClass = "hep-ex",}' rivet-1.8.3/data/anainfo/CDF_1994_S2952106.info0000644000175000017500000000304112116077757016401 0ustar sunsunName: CDF_1994_S2952106 Year: 1994 Summary: CDF Run I color coherence analysis. Experiment: CDF Collider: Tevatron Run 1 SpiresID: 2952106 Status: VALIDATED Authors: - Lars Sonnenschein - Andy Buckley References: - Phys.Rev.D50,5562,1994 - doi:10.1103/PhysRevD.50.5562 RunInfo: QCD events at sqrt(s) = 1800 GeV. Leading jet pTmin = 100 GeV. NumEvents: 1000000 Beams: [p-, p+] Energies: [1800] PtCuts: [90] Description: CDF Run I color coherence analysis. Events with $\ge 3$ jets are selected and Et distributions of the three highest-pT jets are obtained. The plotted quantities are the $\Delta{R}$ between the 2nd and 3rd leading jets in the pT and pseudorapidity of the 3rd jet, and $\alpha = \mathrm{d}{\eta}/\mathrm{d}{\phi}$, where $\mathrm{d}{\eta}$ is the pseudorapidity difference between the 2nd and 3rd jets and $\mathrm{d}{\phi}$ is their azimuthal angle difference. Since the data has not been detector-corrected, a bin by bin correction is applied, based on the distributions with ideal and CDF simulation as given in the publication. BibKey: Abe:1994nj BibTeX: '@Article{Abe:1994nj, author = "Abe, F. and others", collaboration = "CDF", title = "{Evidence for color coherence in $p\bar{p}$ collisions at $\sqrt{s} = 1.8$ TeV}", journal = "Phys. Rev.", volume = "D50", year = "1994", pages = "5562-5579", doi = "10.1103/PhysRevD.50.5562", SLACcitation = "%%CITATION = PHRVA,D50,5562;%%" }' rivet-1.8.3/data/anainfo/CDF_2007_S7057202.info0000644000175000017500000000321212116077757016361 0ustar sunsunName: CDF_2007_S7057202 Year: 2007 Summary: CDF Run II inclusive jet cross-section using the kT algorithm Experiment: CDF Collider: Tevatron Run 2 SpiresID: 7057202 Status: VALIDATED Authors: - David Voong - Frank Siegert References: - Phys.Rev.D75:092006,2007 - Erratum-ibid.D75:119901,2007 - FNAL-PUB 07/026-E - hep-ex/0701051 RunInfo: p-pbar collisions at 1960~GeV. Jet pT bins from 54~GeV to 700~GeV. Jet rapidity $< |2.1|$. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: CDF Run II measurement of inclusive jet cross sections at a p-pbar collision energy of 1.96~TeV. Jets are reconstructed in the central part of the detector ($|y|<2.1$) using the kT algorithm with an $R$ parameter of 0.7. The minimum jet pT considered is 54~GeV, with a maximum around 700~GeV. The inclusive jet pT is plotted in bins of rapidity $|y|<0.1$, $0.1<|y|<0.7$, $0.7<|y|<1.1$, $1.1<|y|<1.6$ and $1.6<|y|<2.1$. NeedCrossSection: yes BibKey: Abulencia:2007ez BibTeX: '@Article{Abulencia:2007ez, author = "Abulencia, A. and others", collaboration = "CDF", title = "{Measurement of the Inclusive Jet Cross Section using the {\boldmath $k_{\rm T}$} algorithmin{\boldmath $p\overline{p}$} Collisions at{\boldmath $\sqrt{s}$} = 1.96 TeV with the CDF II Detector}", journal = "Phys. Rev.", volume = "D75", year = "2007", pages = "092006", eprint = "hep-ex/0701051", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.75.092006", SLACcitation = "%%CITATION = HEP-EX/0701051;%%" }' rivet-1.8.3/data/anainfo/JADE_1998_S3612880.info0000644000175000017500000000244712116077757016530 0ustar sunsunName: JADE_1998_S3612880 Year: 1998 Summary: Event shapes for 22, 35 and 44 GeV Experiment: JADE Collider: PETRA SpiresID: 3612880 Status: VALIDATED Authors: - Holger Schulz holger.schulz@physik.hu-berlin.de References: - hep-ex/9708034 - Eur.Phys.J.C1:461-478,1998 RunInfo: Z->hadronic final states, bbar contributions have been corrected for as well as ISR NumEvents: 1000000 Beams: [e-, e+] Energies: [22, 35,44] PtCuts: Use an inv. mass cut close to sqrt{s} to avoid photon cotribution (e.g. CKIN(1)) Description: Thrust, Jet Mass and Broadenings, Y23 for 35 and 44 GeV and only Y23 at 22 GeV. BibKey: MovillaFernandez:1997fr BibTeX: '@Article{MovillaFernandez:1997fr, author = "Movilla Fernandez, P. A. and Biebel, O. and Bethke, S. and Kluth, S. and Pfeifenschneider, P.", collaboration = "JADE", title = "{A study of event shapes and determinations of alpha(s) using data of e+ e- annihilations at s**(1/2) = 22-GeV to 44-GeV}", journal = "Eur. Phys. J.", volume = "C1", year = "1998", pages = "461-478", eprint = "hep-ex/9708034", archivePrefix = "arXiv", doi = "10.1007/s100520050096", SLACcitation = "%%CITATION = HEP-EX/9708034;%%" }' ToDo: - Trigger conditions? rivet-1.8.3/data/anainfo/OPAL_1996_S3257789.info0000644000175000017500000000225112116100006016532 0ustar sunsunName: OPAL_1996_S3257789 Year: 1995 Summary: $J/\psi$ and $\psi^\prime$ Production in Hadronic $Z^0$ Decays Experiment: OPAL Collider: LEP 1 SpiresID: 3257789 Status: VALIDATED Authors: - Peter Richardson References: - Z.Phys. C70 (1996) 197-210 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: The production of $J/\psi$ and $\psi^\prime$ mesons measured by the OPAL experiment at LEP. The fragmentation function for $J/\psi$ and the multiplicities of $J/\psi$ and $\psi^\prime$ are included. BibKey: Alexander:1995qb BibTeX: '@article{Alexander:1995qb, author = "Alexander, G. and others", title = "{$J/\psi$ and $\psi^\prime$ production in hadronic $Z^0$ decays}", collaboration = "OPAL Collaboration", journal = "Z.Phys.", volume = "C70", pages = "197-210", doi = "10.1007/s002880050096", year = "1996", reportNumber = "CERN-PPE-95-153", SLACcitation = "%%CITATION = ZEPYA,C70,197;%%", }' rivet-1.8.3/data/anainfo/ARGUS_1993_S2669951.info0000644000175000017500000000242612116077757016710 0ustar sunsunName: ARGUS_1993_S2669951 Summary: Production of the $\eta'(958)$ and $f_0(980)$ in $e^+e^-$ annihilation in the Upsilon region. Status: VALIDATED Authors: - Peter Richardson References: - Z.Phys. C58 (1993) 199-206 RunInfo: $e^+ e^-$ analysis near the $\Upsilon(4S)$ resonance. NumEvents: 1000000 SpiresID: 2669951 Beams: [e+, e-] Energies: [9.46,10.02,10.45] PtCuts: [0] Description: Measurement of the inclusive production of the $\eta'(958)$ and $f_0(980)$ mesons in $e^+e^-$ annihilation in the Upsilon region. Data are taken on the $\Upsilon(1S)$, $\Upsilon(2S)$ and $\Upsilon(4S)$ resonances and in the nearby continuum (9.36 to 10.45 GeV cm energy) BibKey: Albrecht:1992nu BibTeX: '@article{Albrecht:1992nu, author = "Albrecht, H. and others", title = "{Inclusive production of eta-prime (958) and f0 (975) mesons in the upsilon energy region}", collaboration = "ARGUS Collaboration", journal = "Z.Phys.", volume = "C58", pages = "199-206", doi = "10.1007/BF01560338", year = "1993", reportNumber = "DESY-92-174", SLACcitation = "%%CITATION = ZEPYA,C58,199;%%", } ' rivet-1.8.3/data/anainfo/CDF_2004_S5839831.info0000644000175000017500000000404112116077757016375 0ustar sunsunName: CDF_2004_S5839831 Year: 2004 Summary: Transverse cone and `Swiss cheese' underlying event studies Experiment: CDF Collider: Tevatron Run 1 SpiresID: 5839831 Status: VALIDATED Authors: - Andy Buckley References: - Phys. Rev. D70, 072002 (2004) - arXiv:hep-ex/0404004 RunInfo: QCD events at sqrt(s) = 630 & 1800 GeV. Several pTmin cutoffs are probably required to fill the profile histograms, e.g. 0 (min bias), 30, 90, 150 GeV at 1800 GeV, and 0 (min bias), 20, 90, 150 GeV at 630 GeV. NumEvents: 1000000 Beams: [p-, p+] Energies: [630, 1800] PtCuts: [0, 30, 90, 150] # for 1800, [0, 20, 90, 150] for 630 Description: This analysis studies the underlying event via transverse cones of $R = 0.7$ at 90 degrees in \phi relative to the leading (highest E) jet, at sqrt(s) = 630 and 1800 GeV. This is similar to the 2001 CDF UE analysis, except that cones, rather than the whole central \eta range are used. The transverse cones are categorised as TransMIN and TransMAX on an event-by-event basis, to give greater sensitivity to the UE component. `Swiss Cheese' distributions, where cones around the leading $n$ jets are excluded from the distributions, are also included for $n = 2, 3$. This analysis is useful for constraining the energy evolution of the underlying event, since it performs the same analyses at two distinct CoM energies. WARNING! The pT plots are normalised to raw number of events. The min bias data have not been reproduced by MC, and are not recommended for tuning. BibKey: Acosta:2004wqa BibTeX: '@Article{Acosta:2004wqa, author = "Acosta, Darin E. and others", collaboration = "CDF", title = "{The underlying event in hard interactions at the Tevatron $\bar{p}p$ collider}", journal = "Phys. Rev.", volume = "D70", year = "2004", pages = "072002", eprint = "hep-ex/0404004", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.70.072002", SLACcitation = "%%CITATION = HEP-EX/0404004;%%" }' rivet-1.8.3/data/anainfo/BABAR_2003_I593379.info0000644000175000017500000000252112116100037016467 0ustar sunsunName: BABAR_2003_I593379 Summary: Measurement of inclusive charmonium production Status: VALIDATED Authors: - Peter Richardson References: - Phys.Rev. D67 032002, 2003 - hep-ex/0207097 RunInfo: Production of charmionum at the $\Upsilon(4S)$ resonace. NumEvents: 1000000 InspireID: 593379 Beams: [e+, e-] Energies: [[3.5, 8.0]] PtCuts: [0] Description: Measurement of $J/\psi$, $\psi'$, $\chi_{c1}$ and $\chi_{c2}$ production using a data sample corresponding to an integrated luminosity of 20.3\;fb$^{-1}$ collected with the BABAR detector at the SLAC PEP-II electron-positron storage ring operating at a centre-of-mass energy near 10.58\;GeV. BibKey: Aubert:2002hc BibTeX: '@article{Aubert:2002hc, author = "Aubert, Bernard and others", title = "{Study of inclusive production of charmonium mesons in $B$ decay}", collaboration = "BABAR Collaboration", journal = "Phys.Rev.", volume = "D67", pages = "032002", doi = "10.1103/PhysRevD.67.032002", year = "2003", eprint = "hep-ex/0207097", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "SLAC-PUB-9327, BABAR-PUB-02-04", SLACcitation = "%%CITATION = HEP-EX/0207097;%%", }' rivet-1.8.3/data/anainfo/D0_2001_S4674421.info0000644000175000017500000000262412116077757016235 0ustar sunsunName: D0_2001_S4674421 Year: 2001 Summary: Tevatron Run I differential W/Z boson cross-section analysis Experiment: D0 Collider: Tevatron Run 1 SpiresID: 4674421 Status: VALIDATED Authors: - Lars Sonnenschein References: - Phys.Lett.B517:299-308,2001 - doi:10.1016/S0370-2693(01)01020-6 - arXiv:hep-ex/0107012v2 RunInfo: W/Z events with decays to first generation leptons, in ppbar collisions at sqrt(s) = 1800~GeV NumEvents: 1000000 Beams: [p-, p+] Energies: [1800] PtCuts: [0] Description: Measurement of differential W/Z boson cross section and ratio in $p \bar{p}$ collisions at center-of-mass energy sqrt(s) = 1.8 TeV. The data cover electrons and neutrinos in a pseudo-rapidity range of -2.5 to 2.5. NeedCrossSection: yes BibKey: Abazov:2001nta BibTeX: '@Article{Abazov:2001nta, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the ratio of differential cross sections for $W$ and $Z$ boson production as a function of transverse momentum in $p\bar{p}$ collisions at $\sqrt{s} = 1.8$ TeV}", journal = "Phys. Lett.", volume = "B517", year = "2001", pages = "299-308", eprint = "hep-ex/0107012", archivePrefix = "arXiv", doi = "10.1016/S0370-2693(01)01020-6", SLACcitation = "%%CITATION = HEP-EX/0107012;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2011_I894867.info0000644000175000017500000000251712116077757016564 0ustar sunsunName: ATLAS_2011_I894867 Year: 2011 Summary: Measurement of the inelastic proton-proton cross-section at sqrt{s}=7 TeV. Experiment: ATLAS Collider: LHC SpireID: 9021310 InspireID: 894867 Status: VALIDATED Authors: - Anton Karneyeu - Sercan Sen References: - arXiv:1104.0326 [hep-ex] RunInfo: Inelastic events (non-diffractive and inelastic diffractive). NumEvents: 100K Beams: [p+, p+] Energies: [7000] Description: 'Inelastic cross-section is measured for $\xi > 5 \times 10^{-6}$, where $\xi=M_X^2/s$ is calculated from the invariant mass, $M_X$, of hadrons selected using the largest rapidity gap in the event.' BibKey: Aad:2011eu BibTeX: '@Article{Aad:2011eu, author = "Aad, Georges and others", title = "{Measurement of the Inelastic Proton-Proton Cross-Section at $\sqrt{s}=7$ TeV with the ATLAS Detector}", collaboration = "ATLAS Collaboration", journal = "Nature Commun.", volume = "2", pages = "463", doi = "10.1038/ncomms1472", year = "2011", eprint = "1104.0326", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-047", SLACcitation = "%%CITATION = ARXIV:1104.0326;%%",}' rivet-1.8.3/data/anainfo/CMS_2011_S8957746.info0000644000175000017500000000237312116077757016440 0ustar sunsunName: CMS_2011_S8957746 Year: 2011 Summary: Event shapes Experiment: CMS Collider: LHC SpiresID: 8957746 Status: VALIDATED Authors: - Hendrik Hoeth References: - Phys.Lett.B699:48-67,2011 - arXiv:1102.0068 RunInfo: pp QCD interactions at 7000 GeV. Particles with c*tau>10mm are stable. NumEvents: 1000000000 Beams: [p+, p+] Energies: [7000] PtCuts: [30.0] Description: Central transverse Thrust and Minor have been measured in proton-proton collisions at sqrt(s)=7 TeV, with a data sample collected with the CMS detector at the LHC. The sample corresponds to an integrated luminosity of 3.2 inverse picobarns. Input for the variables are anti-kt jets with $R=0.5$. BibKey: Khachatryan:2011dx BibTeX: '@Article{Khachatryan:2011dx, author = "Khachatryan, Vardan and others", collaboration = "CMS", title = "{First Measurement of Hadronic Event Shapes in pp Collisions at sqrt(s)=7 TeV}", journal = "Phys. Lett.", volume = "B699", year = "2011", pages = "48-67", eprint = "1102.0068", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1016/j.physletb.2011.03.060", SLACcitation = "%%CITATION = 1102.0068;%%" }' ToDo: rivet-1.8.3/data/anainfo/ATLAS_2011_I954993.info0000644000175000017500000000325312116077757016557 0ustar sunsunName: ATLAS_2011_I954993 Year: 2011 Summary: WZ fiducial cross-section at 7 TeV in ATLAS Experiment: ATLAS Collider: LHC 7TeV InspireID: 954993 Status: VALIDATED Authors: - Lynn Marx - Roman Lysak References: - Phys.Lett. B709 (2012) 341-357 - arXiv:1111.5570 RunInfo: pp WZ events at 7 TeV with direct e, mu W/Z boson decays (no taus from W/Z) NumEvents: 1000000 NeedCrossSection: yes Beams: [p+, p+] Energies: [7000] PtCuts: [0] Description: 'This is a measurement of WZ production in 1.02 $fb^{-1}$ of pp collision data at $\sqrt{s} = $7 TeV collected by the ATLAS experiment in 2011. Doubly leptonic decay events are selected with electrons, muons and missing transverse momentum in the final state. The measurement of the combined fiducial cross section for the WZ bosons decaying directly into electrons and muons is performed.' BibKey: Aad:2011cx BibTeX: '@article{Aad:2011cx, author = "Aad, Georges and others", title = "{Measurement of the WZ production cross section and limits on anomalous triple gauge couplings in proton-proton collisions at sqrt(s) = 7 TeV with the ATLAS detector}", collaboration = "ATLAS Collaboration", journal = "Phys.Lett.", volume = "B709", pages = "341-357", doi = "10.1016/j.physletb.2012.02.053", year = "2012", eprint = "1111.5570", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-184", SLACcitation = "%%CITATION = ARXIV:1111.5570;%%", }' rivet-1.8.3/data/anainfo/ATLAS_2012_CONF_2012_105.info0000644000175000017500000000165012116077757017436 0ustar sunsunName: ATLAS_2012_CONF_2012_105 Year: 2012 Summary: Search for supersymmetry with 2 same-sign leptons, jets and missing transverse energy Experiment: ATLAS Collider: LHC Status: UNVALIDATED Authors: - Peter Richardson References: - ATLAS-CONF-2012-105 RunInfo: BSM signal events at 8000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [8000] Description: 'Results of the search for the production of supersymmetric particles decaying into final states with missing transverse momentum and two isolated same-sign leptons, electrons or muons. The analysis uses a data sample collected during the first half of 2012 that corresponds to a total integrated luminosity o1 $5.8\,\text{fb}^{-1}$ of $\sqrt{s} = 8$\,TeV proton-proton collisions recorded with the ATLAS detector at the Large Hadron Collider. Opposite-sign and same-sign dilepton events are studied separately.' rivet-1.8.3/data/anainfo/D0_2008_S7837160.info0000644000175000017500000000316112116077757016245 0ustar sunsunName: D0_2008_S7837160 Year: 2008 Summary: Measurement of W charge asymmetry from D0 Run II Experiment: D0 Collider: Tevatron Run 2 SpiresID: 7837160 Status: VALIDATED Authors: - Andy Buckley - Gavin Hesketh References: - Phys.Rev.Lett.101:211801,2008 - doi:10.1103/PhysRevLett.101.211801 - arXiv:0807.3367v1 [hep-ex] RunInfo: "* Event type: W production with decay to $e \\, \\nu_e$ only * for Pythia 6: MSEL = 12, MDME(206,1) = 1 * Energy: 1.96 TeV" NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: Measurement of the electron charge asymmetry in $p \bar p \to W + X \to e \nu_e + X$ events at a center of mass energy of 1.96 TeV. The asymmetry is measured as a function of the electron transverse momentum and pseudorapidity in the interval (-3.2, 3.2). This data is sensitive to proton parton distribution functions due to the valence asymmetry in the incoming quarks which produce the W. Initial state radiation should also affect the pT distribution. BibKey: Abazov:2008qv BibTeX: '@Article{Abazov:2008qv, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the electron charge asymmetry in $p \bar{p} \to W + X \to e \nu + X$ events at $\sqrt{s}$ = 1.96-TeV}", journal = "Phys. Rev. Lett.", volume = "101", year = "2008", pages = "211801", eprint = "0807.3367", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevLett.101.211801", SLACcitation = "%%CITATION = 0807.3367;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2011_S9212353.info0000644000175000017500000000230112116077757016624 0ustar sunsunName: ATLAS_2011_S9212353 Year: 2011 Summary: Single lepton search for supersymmetry Experiment: ATLAS Collider: LHC SpiresID: 9212353 Status: UNVALIDATED Authors: - References: - Phys. Rev.D85:012006,2012 - arXiv:1109.6606 RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] Description: 'Single lepton search for supersymmmetric particles by ATLAS at 7 TeV. Event counts in electron and muon signal regions are implemented as one-bin histograms. Histograms for missing transverse energy and effective mass are implemented for the two signal regions.' BibKey: ATLAS:2011ad BibTeX: '@Article{ATLAS:2011ad, author = "Aad, Georges and others", collaboration = "ATLAS", title = "{Search for supersymmetry in final states with jets, missing transverse momentum and one isolated lepton in sqrt{s} = 7 TeV pp collisions using 1 fb-1 of ATLAS data}", journal = "Phys. Rev.", volume = "D85", year = "2012", pages = "012006", eprint = "1109.6606", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1109.6606;%%" }' rivet-1.8.3/data/anainfo/OPAL_1993_S2692198.info0000644000175000017500000000170012116077757016553 0ustar sunsunName: OPAL_1993_S2692198 Year: 1993 Summary: Measurement of photon production at LEP 1 Experiment: OPAL Collider: LEP Run 1 SpiresID: 2692198 Status: VALIDATED Authors: - Peter Richardson References: - Z.Phys.C58:405-418,1993 - doi:10.1007/BF01557697 RunInfo: $e^+ e^- \to$ jet jet (+ photons) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: Measurement of the production of photons in $e^+ e^-\to q \bar q$ events at LEP 1. BibKey: Acton:1992jk BibTeX: '@Article{Acton:1992jk, author = "Acton, P. D. and others", collaboration = "OPAL", title = "{Studies of strong and electroweak interactions using final state photon emission in hadronic Z0 decays}", journal = "Z. Phys.", volume = "C58", year = "1993", pages = "405-418", doi = "10.1007/BF01557697", SLACcitation = "%%CITATION = ZEPYA,C58,405;%%" } ' rivet-1.8.3/data/anainfo/CDF_2000_S4155203.info0000644000175000017500000000416112116077757016353 0ustar sunsunName: CDF_2000_S4155203 Year: 2000 Summary: Z pT measurement in CDF Z -> $e^+e^-$ events Experiment: CDF Collider: Tevatron Run 1 SpiresID: 4155203 Status: VALIDATED Authors: - Hendrik Hoeth References: - Phys.Rev.Lett.84:845-850,2000 - arXiv:hep-ex/0001021 - doi:10.1103/PhysRevLett.84.845 RunInfo: $p\bar{p}$ collisions at 1800 GeV. $Z/\gamma^*$ Drell-Yan events with $e^+e^-$ decay mode only. Restrict $Z/\gamma^*$ mass range to roughly $50~\text{GeV}/c^2 < m_{ee} < 120~\text{GeV}/c^2$ for efficiency. NumEvents: 100000 Beams: [p-, p+] Energies: [1800] PtCuts: [0] Description: Measurement of transverse momentum and total cross section of $e^+e^-$ pairs in the Z-boson region of $66~\text{GeV}/c^2 < m_{ee} < 116~\text{GeV}/c^2$ from pbar-p collisions at sqrt(s) = 1.8 TeV, with the Tevatron CDF detector. The Z pT, in a fully-factorised picture, is generated by the momentum balance against initial state radiation (ISR) and the primordial/intrinsic pT of the Z's parent partons in the incoming hadrons. The Z pT is important in generator tuning to fix the interplay of ISR and multi-parton interactions (MPI) ingenerating `underlying event' activity. This analysis is subject to ambiguities in the experimental Z pT definition, since the Rivet implementation reconstructs the Z momentum from the dilepton pair with finite cones for QED bremstrahlung summation, rather than non-portable direct use of the (sometimes absent) Z in the event record. NeedCrossSection: yes BibKey: Affolder:1999jh BibTeX: '@Article{Affolder:1999jh, author = "Affolder, Anthony Allen and others", collaboration = "CDF", title = "{The transverse momentum and total cross section of $e^+e^- $ pairs in the $Z$ boson region from $p\bar{p}$ collisions at $\sqrt{s} = 1.8$ TeV}", journal = "Phys. Rev. Lett.", volume = "84", year = "2000", pages = "845-850", eprint = "hep-ex/0001021", archivePrefix = "arXiv", doi = "10.1103/PhysRevLett.84.845", SLACcitation = "%%CITATION = HEP-EX/0001021;%%" }' rivet-1.8.3/data/anainfo/D0_2007_S7075677.info0000644000175000017500000000260412116077757016254 0ustar sunsunName: D0_2007_S7075677 Year: 2007 Summary: $Z/\gamma^* + X$ cross-section shape, differential in $y(Z)$ Experiment: D0 Collider: Tevatron Run 2 SpiresID: 7075677 Status: VALIDATED Authors: - Andy Buckley - Gavin Hesketh - Frank Siegert References: - Phys.Rev.D76:012003,2007 - arXiv:hep-ex/0702025 RunInfo: Drell-Yan $p \bar{p} \to Z/\gamma^*$ + jets events at $\sqrt{s}$ = 1960 GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $71 < m_{ee} < 111$ GeV NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: Cross sections as a function of di-electron rapidity $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96 TeV, based on an integrated luminosity of $0.4~\text{fb}^{-1}$. BibKey: Abazov:2007jy BibTeX: '@Article{Abazov:2007jy, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the shape of the boson rapidity distribution for $p \bar{p} \to Z/gamma^* \to e^{+} e^{-}$ + $X$ events produced at $\sqrt{s}$ of 1.96-TeV}", journal = "Phys. Rev.", volume = "D76", year = "2007", pages = "012003", eprint = "hep-ex/0702025", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.76.012003", SLACcitation = "%%CITATION = HEP-EX/0702025;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2012_CONF_2012_103.info0000644000175000017500000000160412116077757017433 0ustar sunsunName: ATLAS_2012_CONF_2012_103 Year: 2012 Summary: High jet multiplicity squark and gluino search Experiment: ATLAS Collider: LHC Status: UNVALIDATED Authors: - Peter Richardson References: - ATLAS-CONF-2012-103 - arXiv:1206.1760 RunInfo: BSM signal events at 8000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [8000] NeedCrossSection: yes Description: 'Search for SUSY using events with 6 or more jets in association with missing transverse momentum produced in proton-proton collisions at a centre-of-mass energy of 8 TeV. The data sample has a total integrated luminosity of 5.8 fb$^{-1}$. Distributions in the W and top control regions are not produced, while in addition to the plots from the paper the count of events in the different signal regions is included. The analysis is identical to the previous 7 TeV paper.' rivet-1.8.3/data/anainfo/STAR_2008_S7993412.info0000644000175000017500000000253312116077757016560 0ustar sunsunName: STAR_2008_S7993412 Year: 2008 Summary: Di-hadron correlations in d-Au at 200 GeV Experiment: STAR Collider: RHIC d-Au 200 GeV SpiresID: 7993412 Status: UNVALIDATED Authors: - Christine Nattrass - Hendrik Hoeth References: - arXiv:0809.5261 [nucl-ex] RunInfo: d-Au at 200 GeV (use pp Monte Carlo! See description) NumEvents: 1000000 Beams: [p+, p+] Energies: [200] PtCuts: [0] Description: Correlation in $\eta$ and $\phi$ between the charged hadron with the highest pT (``trigger particle'') and the other charged hadrons in the event (``associated particles''). The data was collected in d-Au collisions at 200 GeV. Nevertheless, it is very proton-proton like and can therefore be compared to $pp$ Monte Carlo (not for tuning, but for qualitative studies.) BibKey: Nattrass:2008tw BibTeX: '@Article{Nattrass:2008tw, author = "Nattrass, Christine", title = "{Energy and system dependence of high-$p_T$ triggered two- particle near-side correlations}", journal = "Eur. Phys. J.", volume = "C62", year = "2009", pages = "265-269", eprint = "0809.5261", archivePrefix = "arXiv", primaryClass = "nucl-ex", doi = "10.1140/epjc/s10052-009-1037-8", SLACcitation = "%%CITATION = 0809.5261;%%" }' rivet-1.8.3/data/anainfo/CDF_1988_S1865951.info0000644000175000017500000000222412116077757016420 0ustar sunsunName: CDF_1988_S1865951 SpiresID: 1865951 Summary: CDF transverse momentum distributions at 630 GeV and 1800 GeV. Description: Transverse momentum distributions at 630 GeV and 1800 GeV based on data from the CDF experiment at the Tevatron collider. Status: VALIDATED Experiment: CDF Collider: Tevatron Run I Year: 1988 Authors: - Christophe Vaillant - Andy Buckley References: - Phys.Rev.Lett.61:1819,1988 - doi:10.1103/PhysRevLett.61.1819 RunInfo: QCD min bias events at sqrt(s) = 630 GeV and 1800 GeV, $|\eta| < 1.0$. Beams: [p-, p+] Energies: [630, 1800] PtCuts: [0] NeedCrossSection: yes BibKey: Abe:1988yu BibTeX: '@Article{Abe:1988yu, author = "Abe, F. and others", collaboration = "CDF", title = "{Transverse momentum distributions of charged particles produced in $\bar{p}p$ interactions at $\sqrt{s} = 630$ GeV and 1800 GeV}", journal = "Phys. Rev. Lett.", volume = "61", year = "1988", pages = "1819", doi = "10.1103/PhysRevLett.61.1819", SLACcitation = "%%CITATION = PRLTA,61,1819;%%" }' rivet-1.8.3/data/anainfo/CDF_2009_NOTE_9936.info0000644000175000017500000000162512116077757016657 0ustar sunsunName: CDF_2009_NOTE_9936 Year: 2009 Summary: CDF Run 2 min bias charged multiplicity analysis Experiment: CDF Collider: Tevatron Run 2 SpiresID: None Status: PRELIMINARY Authors: - Holger Schulz References: - CDF public note 9936 - "http://www-cdf.fnal.gov/physics/new/qcd/minbias_mult09/multpage.html" RunInfo: $p\bar{p}$ QCD interactions at 1960~GeV. Particles with $c \\tau > {}$10 mm should be set stable. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: "Niccolo Moggi's min bias analysis. Minimum bias events are used to measure the charged multiplicity distribution. The multiplicity distribution was not published in S8233977 but the numbers and a public note are available from the CDF website given above. Note: the systematic and statistical errors in Rivet were added in quadrature." ToDo: - Merge with CDF_2009_S8233977 rivet-1.8.3/data/anainfo/UA5_1988_S1867512.info0000644000175000017500000000432012116077757016410 0ustar sunsunName: UA5_1988_S1867512 Year: 1988 Summary: Charged particle correlations in UA5 $p \\bar{p}$ NSD events at sqrt(s) = 200, 546 and 900 GeV. Experiment: UA5 Collider: CERN SPS SpiresID: 1867512 Status: VALIDATED Authors: - Holger Schulz References: - Z.Phys.C37:191-213,1988 RunInfo: "ppbar events. Non-single diffractive events need to be switched on. The trigger implementation is the same as in UA5_1989_S1926373. Important: Only the correlation strengths with symmetric eta bins should be used for tuning." NumEvents: 100000 Beams: [p-, p+] Energies: [200, 546, 900] PtCuts: [0] Description: "Data on two-particle pseudorapidity and multiplicity correlations of charged particles for non single-diffractive $\\bar{p}p$ collisions at c.m. energies of 200, 546 and 900 GeV. Pseudorapidity correlations interpreted in terms of a cluster model, which has been motivated by this and other experiments, require on average about two charged particles per cluster. The decay width of the clusters in pseudorapidity is approximately independent of multiplicity and of c.m. energy. The investigations of correlations in terms of pseudorapidity gaps confirm the picture of cluster production. The strength of forward-backward multiplicity correlations increases linearly with ins and depends strongly on position and size of the pseudorapidity gap separating the forward and backward interval. All our correlation studies can be understood in terms of a cluster model in which clusters contain on average about two charged particles, i.e. are of similar magnitude to earlier estimates from the ISR." BibKey: Ansorge:1988fg BibTeX: '@Article{Ansorge:1988fg, author = "Ansorge, R. E. and others", collaboration = "UA5", title = "{CHARGED PARTICLE CORRELATIONS IN ANTI-P P COLLISIONS AT C.M. ENERGIES OF 200-GEV, 546-GEV AND 900-GEV}", journal = "Z. Phys.", volume = "C37", year = "1988", pages = "191-213", doi = "10.1007/BF01579906", SLACcitation = "%%CITATION = ZEPYA,C37,191;%%" }' ToDo: - Check sanity of implementation of b with assymetric eta bins - Get rid of vectors, use temp. histos instead rivet-1.8.3/data/anainfo/MC_ZKTSPLITTINGS.info0000644000175000017500000000072512116077757016742 0ustar sunsunName: MC_ZKTSPLITTINGS Summary: Monte Carlo validation observables for $Z[e^+ \, e^-]$ + jets production Status: VALIDATED Authors: - Frank Siegert References: RunInfo: $e^+ e^-$ + jets analysis. Needs mass cut on lepton pair to avoid photon singularity, e.g. a min range of $66 < m_{ee} < 116$ GeV NumEvents: 1000000 PtCuts: [0] Description: Monte Carlo validation observables for $Z[e^+ \, e^-]$ + jets production NeedCrossSection: yes rivet-1.8.3/data/anainfo/ATLAS_2011_S9126244.info0000644000175000017500000000334112116077757016634 0ustar sunsunName: ATLAS_2011_S9126244 Year: 2011 Summary: Measurement of dijet production with a veto on additional central jet activity Experiment: ATLAS Collider: LHC SpiresID: 9126244 Status: VALIDATED Authors: - Graham Jones References: - arXiv:1107.1641 [hep-ex] RunInfo: Require QCD interactions at 7TeV. A substantial number of events are required to populate the large rapidity seperation region. NumEvents: 10000000 Beams: [p+, p+] Energies: [7000] PtCuts: [0] Description: 'A measurement of the jet activity in rapidity intervals bounded by a dijet system. The fraction of events passing a veto requirement are shown as a function of both the rapidity interval size and the average transverse momentum of the dijet system. The average number of jets above the veto threshold are also shown as a function of the same variables. There are two possible selection criteria applied to data. Either the two highest transverse momentum jets or the jets most forward and backward in rapidity are taken to define the dijet system, where the veto threhsold is 20GeV. Additionally for the latter selection an alternative veto transverse momentum threshold which is equal to the average transverse momentum is applied. Jet selections are based on anti-kt with $R=0.6$, $p_\perp>20$ GeV and $|y|<4.4$.' BibTeX: '@Article{Aad:2011jz, author = "Aad, Georges and others", collaboration = "ATLAS", title = "{Measurement of dijet production with a veto on additional central jet activity in pp collisions at sqrt(s)=7 TeV using the ATLAS detector}", year = "2011", eprint = "1107.1641", archivePrefix = "arXiv", primaryClass = "hep-ex", }' rivet-1.8.3/data/anainfo/ATLAS_2012_I1082009.info0000644000175000017500000000267212116077757016621 0ustar sunsunName: ATLAS_2012_I1082009 Year: 2012 Summary: $D^{*\pm}$ production in jets Experiment: ATLAS Collider: LHC InspireID: 1082009 Status: UNVALIDATED Authors: - Peter Richardson References: - arXiv:1112.4432 RunInfo: All flavours of quark and gluon jet production at 7 TeV NumEvents: 10000000 Beams: [p+, p+] Energies: [7000] Description: Measurement of $D^{*\pm}$ meson production in jets from proton-proton collisions at a centre-of-mass energy of $\sqrt{s}=7$ TeV at the LHC. The measurement is based on a data sample recorded with the ATLAS detector with an integrated luminosity of $0.30\,\text{pb}^{-1}$ for jets with transverse momentum between 25 and 70 GeV in the pseudorapidity range $|eta| < 2.5$. BibKey: Aad:2011td BibTeX: '@Article{Aad:2011td, author = "Aad, Georges and others", title = "{Measurement of $D^{*\pm}$ meson production in jets from pp collisions at $\sqrt{s}=7$ TeV with the ATLAS detector}", collaboration = "ATLAS Collaboration", journal = "Phys.Rev.", volume = "D85", pages = "052005", year = "2012", note = "Long author list - awaiting processing", eprint = "1112.4432", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-180", SLACcitation = "%%CITATION = ARXIV:1112.4432;%%", }' rivet-1.8.3/data/anainfo/ATLAS_2010_S8591806.info0000644000175000017500000000265112116077757016647 0ustar sunsunName: ATLAS_2010_S8591806 Year: 2010 Summary: Charged particles at 900 GeV in ATLAS Experiment: ATLAS Collider: LHC 900GeV SpiresID: 8591806 Status: VALIDATED Authors: - Frank Siegert References: - arXiv:1003.3124 RunInfo: pp QCD interactions at 900 GeV including diffractive events. NumEvents: 1000000 Beams: [p+, p+] Energies: [900] PtCuts: [0] Description: The first measurements with the ATLAS detector at the LHC. Data were collected using a minimum-bias trigger in December 2009 during proton-proton collisions at a centre of mass energy of 900 GeV. The charged- particle density, its dependence on transverse momentum and pseudorapid- ity, and the relationship between transverse momentum and charged-particle multiplicity are measured for events with at least one charged particle in the kinematic range $|\eta| < 2.5$ and $p_\perp > 500$ MeV. All data is corrected to the particle level. BibKey: Aad:2010rd BibTeX: '@Article{Aad:2010rd, author = "Aad, G. and others", collaboration = "ALTAS", title = "{Charged-particle multiplicities in pp interactions at sqrt(s) = 900 GeV measured with the ATLAS detector at the LHC}", year = "2010", eprint = "1003.3124", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1016/j.physletb.2010.03.064", SLACcitation = "%%CITATION = 1003.3124;%%" }' rivet-1.8.3/data/anainfo/MC_XS.info0000644000175000017500000000060412116077757015177 0ustar sunsunName: MC_XS Summary: MC analysis for process total cross section Status: VALIDATED Authors: - Marek Schoenherr RunInfo: Suitable for any process. NumEvents: 1000 PtCuts: [0] Description: Analysis for bookkeeping of the total cross section, number of generated events and the ratio of events with positive and negative weights. NeedsCrossSection: yes rivet-1.8.3/data/anainfo/ATLAS_2010_S8894728.info0000644000175000017500000000253112116077757016655 0ustar sunsunName: ATLAS_2010_S8894728 Year: 2010 Summary: Track-based underlying event at 900 GeV and 7 TeV in ATLAS Experiment: ATLAS Collider: LHC SpiresID: 8894728 Status: VALIDATED Authors: - Andy Buckley - Holger Schulz References: - arXiv:1012.0791 RunInfo: pp QCD interactions at 900 GeV and 7 TeV. Diffractive events should be included, but only influence the lowest bins. Multiple kinematic cuts should not be required. NumEvents: 10000000 Beams: [p+, p+] Energies: [900, 7000] PtCuts: [0] Description: The underlying event measurements with the ATLAS detector at the LHC at the center of mass energies of 900 GeV and 7 TeV. The observables sensitive to the underlying event, i.e the charged particle density and charged pT sum, as well as their standard deviations and the average pT, are measured as functions of the leading track. A track pT cut of 500 MeV is applied for most observables, but the main profile plots are also shown for a lower track cut of 100 MeV, which includes much more of the soft cross-section. The angular distribution of the charged tracks with respect to the leading track is also studied, as are the correlation between mean transverse momentum and charged particle multiplicity, and the `plateau' height as a function of the leading track $|\eta|$. rivet-1.8.3/data/anainfo/ATLAS_2012_I1180197.info0000644000175000017500000000163312116077757016624 0ustar sunsunName: ATLAS_2012_I1180197 Year: 2012 Summary: Search for supersymmetry at 7 TeV in final states with jets, missing transverse momentum and isolated leptons with the ATLAS detector. Experiment: ATLAS Collider: LHC InspireID: 1180197 Status: UNVALIDATED Authors: - Peter Richardson References: - ATLAS-CONF-2012-041 - arXiv:1208.4688 RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] Description: 'One and two lepton search for supersymmmetric particles by ATLAS at 7 TeV. Event counts in the signal regions are implemented as one-bin histograms. Histograms for effective mass are implemented for the two signal hard lepton signal regions and the ratio of missing transverse energy to effective mass for the soft lepton region. Only the one lepton plots are currently implemented as taken from a conf note originally.' rivet-1.8.3/data/anainfo/UA5_1982_S875503.info0000644000175000017500000000217412116077757016325 0ustar sunsunName: UA5_1982_S875503 SpiresID: 875503 Summary: UA5 multiplicity and pseudorapidity distributions for $pp$ and $p\bar{p}$. Status: VALIDATED Experiment: UA5 Collider: SPS Year: 1982 RunInfo: Min bias QCD events at sqrt(s) = 53~GeV. Run with both $pp$ and $p\bar{p}$ beams. Beams: [[p-, p+], [p+, p+]] Energies: [53] PtCuts: [0] Authors: - Andy Buckley - Christophe Vaillant References: - Phys.Lett.112B:183,1982 Description: Comparisons of multiplicity and pseudorapidity distributions for $pp$ and $p\bar{p}$ collisions at 53 GeV, based on the UA5 53~GeV runs in 1982. Data confirms the lack of significant difference between the two beams. BibKey: Alpgard:1982zx BibTeX: '@Article{Alpgard:1982zx, author = "Alpgard, K. and others", collaboration = "UA5", title = "{COMPARISON OF p anti-p and p p INTERACTIONS AT s**(1/2) = 53-GeV}", journal = "Phys. Lett.", volume = "B112", year = "1982", pages = "183", doi = "10.1016/0370-2693(82)90325-2", SLACcitation = "%%CITATION = PHLTA,B112,183;%%" }' rivet-1.8.3/data/anainfo/MC_PRINTEVENT.info0000644000175000017500000000062412116077757016345 0ustar sunsunName: MC_PRINTEVENT Summary: Print out a dump of each event to standard output Status: VALIDATED Authors: - Andy Buckley RunInfo: Can be used with any event type. NumEvents: 1 Description: 'Print out a dump of the event structure to the terminal standard output, in a conveniently human readable form with e.g. particle names in addition to the usual numerical ID codes.' rivet-1.8.3/data/anainfo/ALEPH_1996_S3486095.info0000644000175000017500000000201512116077757016652 0ustar sunsunName: ALEPH_1996_S3486095 Year: 1996 Summary: Studies of QCD with the ALEPH detector. Experiment: ALEPH Collider: LEP 1 SpiresID: 3486095 Status: VALIDATED Authors: - Holger Schulz References: - Phys. Rept., 294, 1--165 (1998) RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: Summary paper of QCD results as measured by ALEPH at LEP 1. The publication includes various event shape variables, multiplicities (identified particles and inclusive), and particle spectra. BibKey: Barate:1996fi BibTeX: '@Article{Barate:1996fi, author = "Barate, R. and others", collaboration = "ALEPH", title = "{Studies of quantum chromodynamics with the ALEPH detector}", journal = "Phys. Rept.", volume = "294", year = "1998", pages = "1-165", doi = "10.1016/S0370-1573(97)00045-8", SLACcitation = "%%CITATION = PRPLC,294,1;%%" }' rivet-1.8.3/data/anainfo/ALICE_2010_S8706239.info0000644000175000017500000000246712116077757016623 0ustar sunsunName: ALICE_2010_S8706239 Year: 2010 Summary: Charged particle $\langle p_\perp \rangle$ vs. $N_\text{ch}$ in $pp$ collisions at 900 GeV Experiment: ALICE Collider: LHC SpiresID: 8706239 Status: VALIDATED Authors: - Holger Schulz - Jan Fiete Grosse-Oetringhaus@cern.ch References: - Phys.Lett.B693:53-68,2010 - arXiv:1007.0719 [hep-ex] RunInfo: Diffractive events need to be switched on NumEvents: 1000000 Beams: [p+, p+] Energies: [900] PtCuts: Description: 'ALICE measurement of $\langle p_\perp \rangle$ vs. $N_\text{ch}$ and invariant particle yield (as function of $p_\perp$) in proton-proton collisions at $\sqrt{s}=\unit{900}{\GeV}$.' BibKey: Aamodt:2010my BibTeX: '@Article{Aamodt:2010my, author = "Aamodt, K and others", collaboration = "ALICE", title = "{Transverse momentum spectra of charged particles in proton-proton collisions at $\sqrt{s} = 900$~GeV with ALICE at the LHC}", journal = "Phys. Lett.", volume = "B693", year = "2010", pages = "53-68", eprint = "1007.0719", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1016/j.physletb.2010.08.026", SLACcitation = "%%CITATION = 1007.0719;%%" }' rivet-1.8.3/data/anainfo/CMS_2011_S8884919.info0000644000175000017500000000377212116077757016445 0ustar sunsunName: CMS_2011_S8884919 Year: 2011 Summary: Measurement of the NSD charged particle multiplicity at sqrt(s) = 0.9, 2.36, and 7 TeV with the CMS detector. Experiment: CMS Collider: LHC SpiresID: 8884919 Status: VALIDATED Authors: - Romain Rougny References: - J. High Energy Phys. 01 (2011) 079 - doi:10.1007/JHEP01(2011)079 - arXiv:1011.5531 [hep-ex] RunInfo: Non-single-diffractive (NSD) events only. Should include double-diffractive (DD) events and non-diffractive (ND) events but NOT single-diffractive (SD) events. For example, in Pythia6 the SD processes to be turned off are 92 and 93 and in Pythia8 the SD processes are 103 and 104 (also called SoftQCD:singleDiffractive). NumEvents: 100000 Beams: [p+, p+] Energies: [900, 2360, 7000] PtCuts: Description: Measurements of primary charged hadron multiplicity distributions are presented for non-single-diffractive events in proton-proton collisions at centre-of-mass energies of sqrt(s) = 0.9, 2.36, and 7 TeV, in five pseudorapidity ranges from |eta|<0.5 to |eta|<2.4. The data were collected with the minimum-bias trigger of the CMS experiment during the LHC commissioning runs in 2009 and the 7 TeV run in 2010. The average transverse momentum as a function of the multiplicity is also presented. The measurement of higher-order moments of the multiplicity distribution confirms the violation of Koba-Nielsen-Olesen scaling that has been observed at lower energies. BibKey: Khachatryan:2010nk BibTeX: '@Article{Khachatryan:2010nk, author = "Khachatryan, Vardan and others", collaboration = "CMS", title = "{Charged particle multiplicities in pp interactions at sqrt(s) = 0.9, 2.36, and 7 TeV}", journal = "JHEP", volume = "01", year = "2011", pages = "079", eprint = "1011.5531", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1007/JHEP01(2011)079", SLACcitation = "%%CITATION = 1011.5531;%%" }' ToDo: rivet-1.8.3/data/anainfo/ALEPH_1999_S4193598.info0000644000175000017500000000210712116077757016663 0ustar sunsunName: ALEPH_1999_S4193598 Year: 1999 Summary: Scaled energy distribution of $D^*$ at LEP Experiment: ALEPH Collider: LEP SpiresID: 4193598 Status: VALIDATED Authors: - Holger Schulz References: - Eur.Phys.J.C16:597-611,2000 - hep-ex/9909032 - CERN-EP-99-094 RunInfo: Hadronic $Z$ decays at 91.2~GeV. NumEvents: 1000000 NeedCrossSection: no Beams: [e+, e-] Energies: [91.2] Description: 'Study of Charm Production in $Z$ Decays. Here, only the scaled energy distribution of $D^{*\pm}$ is implemented. Should be very important for fragmentation tuning.' BibKey: Barate:1999bg BibTeX: '@article{Barate:1999bg, author = "Barate, R. and others", title = "{Study of charm production in Z decays}", collaboration = "ALEPH Collaboration", journal = "Eur.Phys.J.", volume = "C16", pages = "597-611", doi = "10.1007/s100520000421", year = "2000", eprint = "hep-ex/9909032", archivePrefix = "arXiv", primaryClass = "hep-ex", }' rivet-1.8.3/data/anainfo/MC_ZZJETS.info0000644000175000017500000000126612116077757015703 0ustar sunsunName: MC_ZZJETS Summary: Monte Carlo validation observables for $Z[e^+ \, e^-]Z[\mu^+ \, \mu^-]$ + jets production Status: VALIDATED Authors: - Frank Siegert References: RunInfo: $ZZ$ + jets analysis. Needs mass cut on lepton pairs to avoid photon singularity, e.g. a min range of $66 < m_{ee} < 116$ GeV NumEvents: 1000000 PtCuts: [0] Description: In addition to the typical jet observables this analysis contains observables related to properties of the ZZ-pair momentum, correlations between the ZZ, properties of the Z bosons, properties of the leptons, correlations between the opposite charge leptons and correlations with jets. NeedCrossSection: yes rivet-1.8.3/data/anainfo/DELPHI_2000_S4328825.info0000644000175000017500000000263012116077757016737 0ustar sunsunName: DELPHI_2000_S4328825 Year: 2000 Summary: Hadronization properties of $b$ quarks compared to light quarks in $e^+e^-\to q \bar q$ from 183 GeV to 200 GeV Experiment: OPAL Collider: LEP 2 SpiresID: 4328825 Status: VALIDATED Authors: - Peter Richardson References: - Phys.Lett.B479:118-128,2000 - hep-ex/0103022 - DELPHI 2002-052 CONF 586 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [183,189,192,196,200,206] PtCuts: [0] Description: Measurements of the mean charged multiplicities separately for $b\bar b$, $c\bar c$ and light quark ($uds$) initiated events in $e^+e^-$ interactions at energies above the $Z^0$ mass. In addition to the energy points in the original paper one additional point at 206 GeV is included from a later preliminary result. BibKey: Abreu:2000nt BibTeX: '@Article{Abreu:2000nt, author = "Abreu, P. and others", collaboration = "DELPHI", title = "{Hadronization properties of b quarks compared to light quarks in e+ e- --> q anti-q from 183-GeV to 200-GeV}", journal = "Phys. Lett.", volume = "B479", year = "2000", pages = "118-128", eprint = "hep-ex/0103022", archivePrefix = "arXiv", doi = "10.1016/S0370-2693(00)00312-9", SLACcitation = "%%CITATION = HEP-EX/0103022;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2010_S8914702.info0000644000175000017500000000230612116077757016636 0ustar sunsunName: ATLAS_2010_S8914702 Year: 2010 Summary: Inclusive isolated prompt photon analysis Experiment: ATLAS Collider: LHC 7TeV SpiresID: 8914702 Status: VALIDATED Authors: - Mike Hance References: - arXiv:1012.4389 [hep-ex] RunInfo: Inclusive photon+X events (primary gamma+jet events) at $\sqrt{s} = 7$~TeV. NumEvents: 1000000 Beams: [p+, p+] Energies: [7000] PtCuts: [15] Description: 'A measurement of the cross section for inclusive isolated photon production at $sqrt{s} = 7$ TeV. The measurement covers three ranges in $|\eta|$: [0.00,0.60), [0.60,1.37), and [1.52,1.81), for $E_T^\gamma>15$~GeV. The measurement uses 880nb$^{-1}$ of integrated luminosity collected with the ATLAS detector.' NeedCrossSection: yes BibKey: Collaboration:2010sp BibTeX: '@Article{Collaboration:2010sp, author = "Collaboration, The ATLAS", title = "{Measurement of the inclusive isolated prompt photon cross section in pp collisions at sqrt(s) = 7 TeV with the ATLAS detector}", year = "2010", eprint = "1012.4389", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1012.4389;%%" }' rivet-1.8.3/data/anainfo/CMS_2011_S9086218.info0000644000175000017500000000303412116077757016417 0ustar sunsunName: CMS_2011_S9086218 Year: 2011 Summary: Measurement of the inclusive jet cross-section in $pp$ collisions at $\sqrt{s} = 7$ TeV Experiment: CMS Collider: LHC SpiresID: 9086218 Status: VALIDATED Authors: - Rasmus Sloth Hansen References: - http://cdsweb.cern.ch/record/1355680 RunInfo: Inclusive QCD at 7TeV comEnergy, ptHat (or equivalent) greater than 10 GeV NumEvents: 100k Beams: [p+, p+] Energies: [7000] PtCuts: jet PT higher than 18 GeV Description: The inclusive jet cross section is measured in pp collisions with a center-of-mass energy of 7 TeV at the LHC using the CMS experiment. The data sample corresponds to an integrated luminosity of 34 inverse picobarns. The measurement is made for jet transverse momenta in the range 18-1100 GeV and for absolute values of rapidity less than 3. Jets are anti-kt with $R=0.5$, $p_\perp>18$ GeV and $|y|<3.0$. NeedCrossSection: yes BibKey: :2011me BibTeX: '@article{:2011me, author = "Chatrchyan, Serguei and others", title = "{Measurement of the Inclusive Jet Cross Section in pp Collisions at sqrt(s) = 7 TeV}", collaboration = "CMS Collaboration", journal = "Phys. Rev. Lett.", volume = "107", pages = "132001", doi = "10.1103/PhysRevLett.107.132001", year = "2011", note = "Long author list - awaiting processing", eprint = "1106.0208", archivePrefix = "arXiv", primaryClass = "hep-ex", }' rivet-1.8.3/data/anainfo/ALICE_2011_S8945144.info0000644000175000017500000000253012116077757016613 0ustar sunsunName: ALICE_2011_S8945144 Year: 2011 Summary: Tranverse momentum spectra of pions, kaons and protons in pp collisions at 0.9 TeV Experiment: ALICE Collider: LHC SpiresID: 8945144 Status: VALIDATED Authors: - Pablo Bueno Gomez - Eva Sicking References: - Eur.Phys.J.C71:1655,2011. RunInfo: Diffractive events need to be enabled. NumEvents: 1000000 Beams: [p+, p+] Energies: [900] PtCuts: Description: 'Obtaining the tranverse momentum spectra of pions, kaons and protons in $pp$ collisions at $\sqrt{s} = 0.9$ TeV with ALICE at the LHC. Mean transverse momentum as a function of the mass of the emitted particle is also included.' BibKey: Aamodt:2011zj BibTeX: '@article{Aamodt:2011zj, author = "Aamodt, K. and others", title = "{Production of pions, kaons and protons in $pp$ collisions at $\sqrt{s}= 900$ GeV with ALICE at the LHC}", collaboration = "ALICE", journal = "Eur.Phys.J.", volume = "C71", pages = "1655", doi = "10.1140/epjc/s10052-011-1655-9", year = "2011", eprint = "1101.4110", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2010-085", SLACcitation = "%%CITATION = ARXIV:1101.4110;%%", }' rivet-1.8.3/data/anainfo/STAR_2009_UE_HELEN.info0000644000175000017500000000230312116077757017013 0ustar sunsunName: STAR_2009_UE_HELEN Year: 2009 Summary: UE measurement in pp at 200 GeV Experiment: STAR Collider: RHIC pp 200 GeV SpiresID: None Status: PRELIMINARY Authors: - Helen Caines - Hendrik Hoeth References: - arXiv:0910.5203 - arXiv:0907.3460 - WARNING! Mark as "STAR preliminary" and contact authors when using it! RunInfo: pp at 200 GeV NumEvents: 1000000 Beams: [p+, p+] Energies: [200] PtCuts: [2, 10] Description: UE analysis similar to Rick Field's leading jet analysis. SIScone with radius/resolution parameter R=0.7 is used. Particles with $pT > 0.2~\text{GeV}$ and $|\eta| < 1$ are included in the analysis. All particles are assumed to have zero mass. Only jets with neutral energy $< 0.7$ are included. For the transMIN and transMAX $\Delta(\phi)$ is between $\pi/3$ and $2\pi/3$, and $\Delta(\eta) < 2.0$. For the jet region the area of the jet is used for the normalization, i.e. the scaling factor is $\pi R^2$ and not $\mathrm{d}\phi\mathrm{d}\eta$ (this is different from what Rick Field does!). The tracking efficiency is $\sim 0.8$, but that is an approximation, as below $pT \sim 0.6~\text{GeV}$ it is falling quite steeply. rivet-1.8.3/data/anainfo/MC_WWKTSPLITTINGS.info0000644000175000017500000000061612116077757017065 0ustar sunsunName: MC_WWKTSPLITTINGS Summary: Monte Carlo validation observables for $W^+[e^+ \, \nu]W^-[\mu^- \, \nu]$ + jets production Status: VALIDATED Authors: - Frank Siegert References: RunInfo: $WW$ + jets analysis. NumEvents: 1000000 PtCuts: [0] Description: Monte Carlo validation observables for $W^+[e^+ \, \nu]W^-[\mu^- \, \nu]$ + jets production NeedCrossSection: yes rivet-1.8.3/data/anainfo/CDF_2001_S4751469.info0000644000175000017500000000326112116077757016374 0ustar sunsunName: CDF_2001_S4751469 Year: 2001 Summary: Field & Stuart Run I underlying event analysis. Experiment: CDF Collider: Tevatron Run 1 SpiresID: 4751469 Status: VALIDATED Authors: - Andy Buckley References: - Phys.Rev.D65:092002,2002 - FNAL-PUB 01/211-E RunInfo: $p\bar{p}$ QCD interactions at 1800 GeV. The leading jet is binned from 0--49 GeV, and histos can usually can be filled with a single generator run without kinematic sub-samples. NumEvents: 1000000 Beams: [p-, p+] Energies: [1800] PtCuts: [0] Description: The original CDF underlying event analysis, based on decomposing each event into a transverse structure with ``toward'', ``away'' and ``transverse'' regions defined relative to the azimuthal direction of the leading jet in the event. Since the toward region is by definition dominated by the hard process, as is the away region by momentum balance in the matrix element, the transverse region is most sensitive to multi-parton interactions. The transverse regions occupy $|\phi| \in [60\degree, 120\degree]$ for $|\eta| < 1$. The pT ranges for the leading jet are divided experimentally into the `min-bias' sample from 0--20 GeV, and the `JET20' sample from 18--49 GeV. BibKey: Affolder:2001xt BibTeX: '@Article{Affolder:2001xt, author = "Affolder, Anthony Allen and others", collaboration = "CDF", title = "{Charged jet evolution and the underlying event in $p\bar{p}$ collisions at 1.8 TeV}", journal = "Phys. Rev.", volume = "D65", year = "2002", pages = "092002", doi = "10.1103/PhysRevD.65.092002", SLACcitation = "%%CITATION = PHRVA,D65,092002;%%" }' rivet-1.8.3/data/anainfo/ALEPH_1996_S3196992.info0000644000175000017500000000262212116077757016662 0ustar sunsunName: ALEPH_1996_S3196992 Year: 1996 Summary: Measurement of the quark to photon fragmentation function Experiment: ALEPH Collider: LEP Run 1 SpiresID: 3196992 Status: VALIDATED Authors: - Frank Siegert References: - Z.Phys.C69:365-378,1996 - doi:10.1007/s002880050037 RunInfo: $e^+e^-\to$ jets with $\pi$ and $\eta$ decays turned off. NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: Earlier measurements at LEP of isolated hard photons in hadronic Z decays, attributed to radiation from primary quark pairs, have been extended in the ALEPH experiment to include hard photon production inside hadron jets. Events are selected where all particles combine democratically to form hadron jets, one of which contains a photon with a fractional energy $z > 0.7$. After statistical subtraction of non-prompt photons, the quark-to-photon fragmentation function, $D(z)$, is extracted directly from the measured 2-jet rate. BibKey: Buskulic:1995au BibTeX: '@Article{Buskulic:1995au, author = "Buskulic, D. and others", collaboration = "ALEPH", title = "{First measurement of the quark to photon fragmentation function}", journal = "Z. Phys.", volume = "C69", year = "1996", pages = "365-378", doi = "10.1007/s002880050037", SLACcitation = "%%CITATION = ZEPYA,C69,365;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2012_I1094568.info0000644000175000017500000000245412116077757016634 0ustar sunsunName: ATLAS_2012_I1094568 Year: 2012 Summary: Measurement of ttbar production with a veto on additional central jet activity Experiment: ATLAS Collider: LHC SpiresID: 1094568 Status: VALIDATED Authors: - Kiran Joshi References: - arXiv:1203.5015 [hep-ex] RunInfo: Require dileptonic ttbar events at 7TeV. NumEvents: 1000000 Beams: [p+, p+] Energies: [7000] PtCuts: [0] Description: 'A measurement of the additional jet activity in dileptonic ttbar events. The fraction of events passing a veto requirement are shown as a function the veto scale for four central rapidity intervals. Two veto definitions are used: events are vetoed if they contain an additional jet in the rapidity interval with transverse momentum above a threshold, or alternatively, if the scalar transverse momentum sum of all additional jets in the rapidity interval is above a threshold.' BibTeX: '@article{Aad:2012jr, author = "Aad, Georges and others", collaboration = "ATLAS", title = "{Measurement of ttbar production with a veto on additional central jet activity in pp collisions at sqrt(s) = 7 TeV using the ATLAS detector}", year = "2012", eprint = "1203.5015", archivePrefix = "arXiv", primaryClass = "hep-ex", }' rivet-1.8.3/data/anainfo/ARGUS_1993_S2653028.info0000644000175000017500000000237412116077757016676 0ustar sunsunName: ARGUS_1993_S2653028 Summary: Inclusive production of charged pions, kaons and protons in $\Upsilon(4S)$ decays. Status: VALIDATED Authors: - Peter Richardson References: - Z.Phys. C58 (1993) 191-198 RunInfo: $e^+ e^-$ analysis on the $\Upsilon(4S)$ resonance. NumEvents: 1000000 SpiresID: 2653028 Beams: [e+, e-] Energies: [10.58] PtCuts: [0] Description: Measurement of inclusive production of charged pions, kaons and protons from $\Upsilon(4S)$ decays. Kaon spectra are determined in two different ways using particle identification and detecting decays in-flight. Results are background continuum subtracted. This analysis is useful for tuning $B$ meson decay modes. BibKey: Albrecht:1992qf BibTeX: '@article{Albrecht:1992qf, author = "Albrecht, H. and others", title = "{Inclusive production of charged pions, kaons and protons in upsilon (4S) decays}", collaboration = "ARGUS Collaboration", journal = "Z.Phys.", volume = "C58", pages = "191-198", doi = "10.1007/BF01560337", year = "1993", reportNumber = "DESY-92-155", SLACcitation = "%%CITATION = ZEPYA,C58,191;%%", }' rivet-1.8.3/data/anainfo/OPAL_1998_S3780481.info0000644000175000017500000000233112116077757016553 0ustar sunsunName: OPAL_1998_S3780481 Year: 1998 Summary: Measurements of flavor dependent fragmentation functions in $Z^0 -> q \bar{q}$ events Experiment: OPAL Collider: LEP 1 SpiresID: 3780481 Status: VALIDATED Authors: - Hendrik Hoeth References: - Eur. Phys. J, C7, 369--381 (1999) - hep-ex/9807004 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: Measurement of scaled momentum distributions and total charged multiplicities in flavour tagged events at LEP 1. OPAL measured these observables in uds-, c-, and b-events separately. An inclusive measurement is also included. BibKey: Ackerstaff:1998hz BibTeX: '@Article{Ackerstaff:1998hz, author = "Ackerstaff, K. and others", collaboration = "OPAL", title = "{Measurements of flavour dependent fragmentation functions in Z0 --> q anti-q events}", journal = "Eur. Phys. J.", volume = "C7", year = "1999", pages = "369-381", eprint = "hep-ex/9807004", archivePrefix = "arXiv", doi = "10.1007/s100529901067", SLACcitation = "%%CITATION = HEP-EX/9807004;%%" }' rivet-1.8.3/data/anainfo/LHCB_2010_S8758301.info0000644000175000017500000000300212116077757016475 0ustar sunsunName: LHCB_2010_S8758301 Year: 2010 Summary: LHCb differential cross section measurement of prompt $K^0_S$ production in three rapidity windows at $\sqrt{s}$=0.9 TeV Experiment: LHCB Collider: LHC 900 GeV SpiresID: 8758301 Status: VALIDATED Authors: - Holger Schulz - Alex Grecu References: - Phys.Lett.B693:69-80,2010 - arXiv:1008.3105[hep-ex] RunInfo: QCD events. See paper for MC discussion. NumEvents: 1000000 Beams: [p+, p+] Energies: [900] PtCuts: [0, 1.6] Description: The paper presents the cross-section and double differential cross-section measurement for prompt $K^0_S$ production in pp collisions at $\sqrt{s}$=0.9 TeV. The data were taken during the LHCb run in December 2009 and cover a transversal momentum range from 0 to 1.6 GeV/c. The differential production cross-section is calculated for three rapidity windows $2.5 < y < 3.0$, $3.0 < y < 3.5$ and $3.5 < y < 4.0$ as well as the whole rapidity domain $2.5 < y < 4.0$. BibKey: Aaij:2010nx BibTeX: '@Article{Aaij:2010nx, author = "Aaij, R and others", collaboration = "LHCb", title = "{Prompt K_short production in pp collisions at sqrt(s)=0.9 TeV}", journal = "Phys. Lett.", volume = "B693", year = "2010", pages = "69-80", eprint = "1008.3105", archivePrefix = "arXiv", primaryClass = "Unknown", doi = "10.1016/j.physletb.2010.08.055", SLACcitation = "%%CITATION = 1008.3105;%%" }' rivet-1.8.3/data/anainfo/CMS_2012_I1184941.info0000644000175000017500000000333712116077757016406 0ustar sunsunName: CMS_2012_I1184941 Year: 2012 Summary: Measurement of the differential cross section for inclusive dijet production as a function of $\xi$ in 7 TeV proton-proton collisions. Experiment: CMS Collider: LHC SpireID: 9762035 InspireID: 1184941 Status: VALIDATED Authors: - Sercan Sen - Alexander Proskuryakov References: - arXiv:1209.1805 [hep-ex] - Submitted to Phys. Rev. D RunInfo: High statistics is needed to observe events in the lowest (xi) bin. Distributions are presented for HardQCD events (i.e., in PYTHIA with ptHatMin=15GeV) and Diffractive events. NumEvents: 100M NeedCrossSection: no Beams: [p+, p+] Energies: [7000] PtCuts: [15] Description: Measurement of the differential cross section for inclusive dijet production as a function of $\xi$ which approximates the fractional momentum loss of the scattered proton in single-diffraction events. The data used has a total integrated luminosity of 2.7 nb-1 collected during 2010 with low instantaneous luminosity. Events are selected with at least two jets in $|\eta| < 4.4$ with $pT > 20$ GeV and all final states particles are used for the reconstruction of $\xi$. BibKey: :2012vc BibTeX: '@article{:2012vc, author = "Chatrchyan, Serguei and others", title = "{Observation of a diffractive contribution to dijet production in proton-proton collisions at sqrt(s)=7 TeV}", collaboration = "CMS Collaboration", year = "2012", eprint = "1209.1805", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CMS-FWD-10-004, CERN-PH-EP-2012-248", SLACcitation = "%%CITATION = ARXIV:1209.1805;%%",}' rivet-1.8.3/data/anainfo/MC_WJETS.info0000644000175000017500000000054112116077757015541 0ustar sunsunName: MC_WJETS Summary: Monte Carlo validation observables for $W[e \, \nu]$ + jets production Status: VALIDATED Authors: - Frank Siegert References: RunInfo: $e \, \nu$ + jets analysis. NumEvents: 1000000 PtCuts: [0] Description: Monte Carlo validation observables for $W[e \, \nu]$ + jets production NeedCrossSection: yes rivet-1.8.3/data/anainfo/CDF_2008_S7541902.info0000644000175000017500000000472412116077757016400 0ustar sunsunName: CDF_2008_S7541902 Year: 2008 Summary: Jet pT and multiplicity distributions in W + jets events Experiment: CDF Collider: Tevatron Run 2 SpiresID: 7541902 Status: UNVALIDATED Authors: - Ben Cooper - Emily Nurse References: - arXiv:0711.4044 [hep-ex] - Phys.Rev.D77:011108,2008 RunInfo: Requires the process $p\bar{p} \rightarrow {W} \rightarrow {e}\nu$. Additional hard jets will also have to be included to get a good description. The LO process in Herwig is set with IPROC=1451. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: Measurement of the cross section for W boson production in association with jets in $p\bar{p}$ collisions at $\sqrt{s}=1.96$ TeV. The analysis uses 320 pb$^{-1}$ of data collected with the CDF II detector. W bosons are identified in their $e\nu$ decay channel and jets are reconstructed using an $R < 0.4$ cone algorithm. For each $W + \geq$ n-jet sample (where n = 1--4) a measurement of d$\sigma({p}\bar{p} \rightarrow W + \geq$ n jet)/d$E_T(n^{th}$-jet) $\times$ BR($W \rightarrow{e}\nu$) is made, where d$E_T(n^{th}$-jet) is the Et of the n$^{th}$-highest Et jet above 20 GeV. A measurement of the total cross section, $\sigma(p\bar{p} \rightarrow W + \geq$ $n$-jet) $\times$ BR($W \rightarrow{e}\nu)$ with $E_T(n^{th}-jet) > 25$ GeV is also made. Both measurements are made for jets with $|\eta| < 2$ and for a limited region of the $W \rightarrow{e}\nu$ decay phase space; $|\eta^{e}| < 1.1$, $p_{T}^{e} > 20$ GeV, $p_{T}^{\nu} > 30$ GeV and $M_{T} > 20$ GeV. The cross sections are corrected for all detector effects and can be directly compared to particle level $W$ + jet(s) predictions. These measurements can be used to test and tune QCD predictions for the number of jets in and kinematics of $W$ + jets events. NeedCrossSection: yes BibKey: Aaltonen:2007ip BibTeX: '@Article{Aaltonen:2007ip, author = "Aaltonen, T. and others", collaboration = "CDF", title = "{Measurement of the cross section for $W^-$ boson production in association with jets in ppbar collisions at $\sqrt{s}$ = 1.96-TeV}", journal = "Phys. Rev.", volume = "D77", year = "2008", pages = "011108", eprint = "0711.4044", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevD.77.011108", SLACcitation = "%%CITATION = 0711.4044;%%" }' rivet-1.8.3/data/anainfo/CDF_2009_S8233977.info0000644000175000017500000000253412116077757016411 0ustar sunsunName: CDF_2009_S8233977 Year: 2009 Summary: CDF Run 2 min bias cross-section analysis Experiment: CDF Collider: Tevatron Run 2 SpiresID: 8233977 Status: VALIDATED Authors: - Hendrik Hoeth - Niccolo' Moggi References: - Phys.Rev.D79:112005,2009 - doi:10.1103/PhysRevD.79.112005 - arXiv:0904.1098 [hep-ex] RunInfo: $p\bar{p}$ QCD interactions at 1960~GeV. Particles with $c \\tau > {}$10 mm should be set stable. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: Niccolo Moggi's min bias analysis. Minimum bias events are used to measure the average track pT vs. charged multiplicity, a track pT distribution and an inclusive $\sum E_T$ distribution. NeedCrossSection: yes BibKey: Aaltonen:2009ne BibTeX: '@Article{Aaltonen:2009ne, author = "Aaltonen, T. and others", collaboration = "CDF", title = "{Measurement of Particle Production and Inclusive Differential Cross Sections in $p\bar{p}$ Collisions at $\sqrt{s}=1.96$ TeV}", journal = "Phys. Rev.", volume = "D79", year = "2009", pages = "112005", eprint = "0904.1098", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevD.79.112005", SLACcitation = "%%CITATION = 0904.1098;%%" }' rivet-1.8.3/data/anainfo/CMS_2011_S8973270.info0000644000175000017500000000322212116077757016420 0ustar sunsunName: CMS_2011_S8973270 Year: 2011 Summary: 'B/anti-B angular correlations based on secondary vertex reconstruction in pp collisions' Experiment: CMS Collider: LHC SpiresID: 8973270 Status: VALIDATED Authors: - Lukas Wehrli References: - JHEP 1103 136 - doi:10.1007/JHEP03(2011)136 - arXiv:hep-ex/1102.3194 RunInfo: Inclusive QCD at 7TeV comEnergy, pthat cut (or similar) recommended (leading jet pt > 56 GeV required) NumEvents: 100000 Beams: [p+, p+] Energies: [7000] PtCuts: [56, 84, 120] NeedsCrossSection: true Description: 'The differential $B\bar{B}$ cross-section is measured as a function of the opening angle $\Delta{R}$ and $\Delta\phi$ using data collected with the CMS detector during 2010 and corresponding to an integrated luminosity of 3.1 pb$^{-1}$. The measurement is performed for three different event energy scales, characterized by the transverse momentum of the leading jet in the event (above 56 GeV, above 84 GeV and above 120 GeV). Simulated events are normalised in the region $\Delta{R} > 2.4$ and $\Delta\phi > 3/4\pi$ respectively.' BibKey: Khachatryan:2011wq BibTeX: '@Article{Khachatryan:2011wq, author = "Khachatryan, Vardan and others", collaboration = "CMS", title = "{Measurement of $B \bar{B}$ angular correlations based on secondary vertex reconstruction at $\sqrt{s} = 7$~TeV}", journal = "JHEP", volume = "03", year = "2011", pages = "136", eprint = "1102.3194", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1007/JHEP03(2011)136", SLACcitation = "%%CITATION = 1102.3194;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2011_I925932.info0000644000175000017500000000235712116077757016552 0ustar sunsunName: ATLAS_2011_I925932 Year: 2011 Summary: Measurement of the W pT with electrons and muons at 7 TeV Experiment: ATLAS Collider: LHC InspireID: 925932 Status: VALIDATED Authors: - Elena Yatsenko - Judith Katzy References: - arXiv:1108.6308v1 [hep-ex] RunInfo: Run with $W$ decays to $e\,\nu_e$ and/or $\mu\,\nu_\mu$. NumEvents: 100k Beams: [p+, p+] Energies: [7000] PtCuts: [0] Description: The W pT at $\sqrt{s} = 7$\;TeV is measured using $W\to e \, \nu_e$ and $W\to \mu \, \nu_\mu$ decay channels. The dressed leptons kinematics calculated from the sum of the post-FSR lepton momentum and the momenta of all photons radiated in a cone around the lepton, while the bare uses the lepton kinematics after all QED radiation. BibKey: Aad:2011fp BibTeX: '@article{Aad:2011fp, author = "Aad, Georges and others", title = "Measurement of the transverse momentum distribution of $W$ bosons in $pp$ Collisions at $\sqrt{s} = 7$~TeV with the {ATLAS Detector}", collaboration = "The ATLAS", year = "2011", eprint = "1108.6308", archivePrefix = "arXiv", primaryClass = "hep-ex", }' rivet-1.8.3/data/anainfo/ATLAS_2011_I919017.info0000644000175000017500000000237212116077757016544 0ustar sunsunName: ATLAS_2011_I919017 Year: 2011 Summary: Measurement of ATLAS track jet properties at 7 TeV Experiment: ATLAS Collider: LHC InspireID: 919017 Status: VALIDATED Authors: - Seth Zenz - Andy Buckley References: - Phys.Rev.D 84 (2011) 054001 - doi:10.1103/PhysRevD.84.054001 - arXiv:1107.3311 - ATLAS-STDM-2010-14 - CERN-PH-EP-2011-110 RunInfo: Min bias QCD at 7 TeV. NumEvents: 10000000 Beams: [p+, p+] Energies: [7000] PtCuts: [0, 15] Description: ATLAS measurement of track jet pT, multiplicity per jet, longitudinal fragmentation, transverse momentum, radius w.r.t jet axis distributions, with jets constructed from charged tracks with $pT > 300$ MeV, using the anti-$k_T$ jet algorithm with $R = 0.4, 0.6$. NeedCrossSection: yes BibKey: Aad:2011gn BibTeX: '@article{Aad:2011gn, author = "Aad, Georges and others", title = "{Properties of jets measured from tracks in proton--proton collisions at center-of-mass energy $\sqrt{s} = 7$\;TeV with the ATLAS detector}", collaboration = "ATLAS", year = "2011", eprint = "1107.3311", archivePrefix = "arXiv", primaryClass = "hep-ex", }' rivet-1.8.3/data/anainfo/CMS_2011_S8968497.info0000644000175000017500000000265112116077757016444 0ustar sunsunName: CMS_2011_S8968497 Year: 2011 Summary: Measurement of dijet angular distributions and search for quark compositeness in $pp$ collisions at $\sqrt{s} = 7$ TeV Experiment: CMS Collider: CERN LHC SpiresID: 8968497 Status: VALIDATED Authors: - A. Hinzmann References: - Phys.Rev.Lett.106:201804,2011 - doi:10.1103/PhysRevLett.106.201804 - arXiv:hep-ex/1102.2020 Beams: [p+, p+] Energies: [7000] RunInfo: Description: Measurement of dijet angular distributions in proton-proton collisions at a center-of-mass energy of 7 TeV. The data sample, collected with single jet triggers, has a total integrated luminosity of 36 pb-1, with jets being reconstructed using the anti-KT clustering algorithm using R=0.5. The data are presented for the variable CHI defined as EXP(|Y1-Y2|) where Y1 and Y2 are the rapidities of the two leading (highest PT) jets.' BibKey: Khachatryan:2011as BibTeX: '@Article{Khachatryan:2011as, author = "Khachatryan, Vardan and others", collaboration = "CMS", title = "{Measurement of Dijet Angular Distributions and Search for Quark Compositeness in pp Collisions at 7 TeV}", journal = "Phys. Rev. Lett.", volume = "106", year = "2011", pages = "201804", eprint = "1102.2020", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevLett.106.201804", SLACcitation = "%%CITATION = 1102.2020;%%" }' rivet-1.8.3/data/anainfo/MC_KTSPLITTINGS.info0000644000175000017500000000054412116077757016607 0ustar sunsunName: MC_KTSPLITTINGS Summary: Monte Carlo validation observables for jet production Status: VALIDATED Authors: - Frank Siegert References: RunInfo: Pure QCD jet production events at an arbitrary collider. NumEvents: 1000000 PtCuts: [15] Description: Monte Carlo validation observables for jet production NeedCrossSection: yes rivet-1.8.3/data/anainfo/D0_2009_S8202443.info0000644000175000017500000000251712116077757016241 0ustar sunsunName: D0_2009_S8202443 Year: 2009 Summary: $Z/\gamma^*$ + jet + $X$ cross sections differential in pT(jet 1,2,3) Experiment: D0 Collider: Tevatron Run 2 SpiresID: 8202443 Status: VALIDATED Authors: - Frank Siegert References: - arXiv:0903.1748 [hep-ex] RunInfo: $p \bar{p} \to e^+ e^-$ + jets at 1960~GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $65 < m_{ee} < 115$ GeV. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: Cross sections as a function of pT of the three leading jets in $Z/\gamma^{*} (\to e^{+} e^{-})$ + jet + X production in $p \bar{p}$ collisions at $\sqrt{s} = 1.96$ TeV, based on an integrated luminosity of 1.0 fb$^{-1}$. BibKey: Abazov:2009av BibTeX: '@Article{Abazov:2009av, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurements of differential cross sections of $Z /\gamma^\ast$+jets+X events in proton anti-proton collisions at $\sqrt{s}$=1.96 TeV}", journal = "Phys. Lett.", volume = "B678", year = "2009", pages = "45-54", eprint = "0903.1748", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1016/j.physletb.2009.05.058", SLACcitation = "%%CITATION = 0903.1748;%%" }' rivet-1.8.3/data/anainfo/D0_2008_S7662670.info0000644000175000017500000000255112116077757016251 0ustar sunsunName: D0_2008_S7662670 Year: 2008 Summary: Measurement of D0 Run II differential jet cross sections Experiment: D0 Collider: Tevatron Run 2 SpiresID: 7662670 Status: VALIDATED Authors: - Andy Buckley - Gavin Hesketh References: - Phys.Rev.Lett.101:062001,2008 - doi:10.1103/PhysRevLett.101.062001 - arXiv:0802.2400v3 [hep-ex] RunInfo: QCD events at sqrt(s) = 1960 GeV. A pTmin cut is probably necessary since the lowest jet pT bin is at 50 GeV NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [40] Description: Measurement of the inclusive jet cross section in $p \bar{p}$ collisions at center-of-mass energy sqrt(s) = 1.96 TeV. The data cover jet transverse momenta from 50--600 GeV and jet rapidities in the range -2.4 to 2.4. NeedCrossSection: yes BibKey: :2008hua BibTeX: '@Article{:2008hua, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the inclusive jet cross-section in $p \bar{p}$ collisions at $s^{91/2)}$ =1.96-TeV}", journal = "Phys. Rev. Lett.", volume = "101", year = "2008", pages = "062001", eprint = "0802.2400", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevLett.101.062001", SLACcitation = "%%CITATION = 0802.2400;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2012_I946427.info0000644000175000017500000000245312116077757016552 0ustar sunsunName: ATLAS_2012_I946427 Year: 2012 Summary: Search for supersymmetry with diphotons and mising Transverse Momentum Experiment: ATLAS Collider: LHC InspireID: 946427 Status: UNVALIDATED Authors: - Peter Richardson References: - arXiv:1111.4116 - Phys. Lett. B710 (2012) 519-537 RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] Description: 'Search for diphoton events with large missing transverse momentum with integrated luminosity 1.07$\text{fb}^{-1}$ at $\sqrt{s}=7$. No excess of events was observed.' BibKey: Aad:2011zj BibTeX: '@article{Aad:2011zj, author = "Aad, Georges and others", title = "{Search for Diphoton Events with Large Missing Transverse Momentum in $1\,\text{fb}^{-1}$ of 7 TeV Proton-Proton Collision Data with the ATLAS Detector}", collaboration = "ATLAS Collaboration", journal = "Phys.Lett.", volume = "B710", pages = "519-537", year = "2012", eprint = "1111.4116", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-160", SLACcitation = "%%CITATION = ARXIV:1111.4116;%%", }' rivet-1.8.3/data/anainfo/D0_2009_S8349509.info0000644000175000017500000000336512116077757016262 0ustar sunsunName: D0_2009_S8349509 Year: 2009 Summary: Z+jets angular distributions Experiment: D0 Collider: Tevatron Run 2 SpiresID: 8349509 Status: VALIDATED Authors: - Frank Siegert References: - arXiv:0907.4286 [hep-ex] RunInfo: $p \bar{p} \to \mu^+ \mu^-$ + jets at 1960~GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $65 < m_{ee} < 115$ GeV. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: First measurements at a hadron collider of differential cross sections for $Z (\to \mu\mu)$+jet+X production in $\Delta\phi(Z, j)$, $|\Delta y(Z, j)|$ and $|y_\mathrm{boost}(Z, j)|$. Vector boson production in association with jets is an excellent probe of QCD and constitutes the main background to many small cross section processes, such as associated Higgs production. These measurements are crucial tests of the predictions of perturbative QCD and current event generators, which have varied success in describing the data. Using these measurements as inputs in tuning event generators will increase the experimental sensitivity to rare signals. NeedCrossSection: yes BibKey: Abazov:2009pp BibTeX: '@Article{Abazov:2009pp, author = "Abazov, Victor Mukhamedovich and others", collaboration = "D0", title = "{Measurement of $Z / \gamma^\ast +jet+X$ angular distributions in $p \bar{p}$ collisions at $\sqrt{s}=1.96$ TeV}", journal = "Phys. Lett.", volume = "B682", year = "2010", pages = "370-380", eprint = "0907.4286", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1016/j.physletb.2009.11.012", SLACcitation = "%%CITATION = 0907.4286;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2012_I1117704.info0000644000175000017500000000145712116077757016622 0ustar sunsunName: ATLAS_2012_I1117704 Year: 2012 Summary: High jet multiplicity squark and gluino search Experiment: ATLAS Collider: LHC Status: VALIDATED Authors: - Peter Richardson References: - arXiv:1206.1760 RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] NeedCrossSection: yes Description: 'Search for SUSY using events with 6 or more jets in association with missing transverse momentum produced in proton-proton collisions at a centre-of-mass energy of 7 TeV. The data sample has a total integrated luminosity of 4.7 fb$^{-1}$. Distributions in the W and top control regions are not produced, while in addition to the plots from the paper the count of events in the different signal regions is included.' rivet-1.8.3/data/anainfo/ATLAS_2012_I1082936.info0000644000175000017500000000373212116077757016630 0ustar sunsunName: ATLAS_2012_I1082936 Year: 2012 Summary: Inclusive jet and dijet cross sections at 7 TeV Experiment: ATLAS Collider: LHC InspireID: 1082936 Status: VALIDATED Authors: - Holger Schulz hschulz@physik.hu-berlin.de References: - arXiv:1112.6297v2 [hep-ex] - CERN-PH-EP-2011-192 RunInfo: QCD jet production with a minimum leading jet pT of 30 GeV and minimum second jet pT of 20 GeV at 7 TeV. NumEvents: 1000000 NeedCrossSection: no Beams: [p+, p+] Energies: [[3500, 3500]] PtCuts: [15] NeedCrossSection: True Description: 'Inclusive jet and dijet cross sections have been measured in proton-proton collisions at a centre-of-mass energy of 7 TeV using the ATLAS detector at the Large Hadron Collider. The cross sections were measured using jets clustered with the anti-kT algorithm with parameters R=0.4 and R=0.6. These measurements are based on the 2010 data sample, consisting of a total integrated luminosity of 37 inverse picobarns. Inclusive jet double-differential cross sections are presented as a function of jet transverse momentum, in bins of jet rapidity. Dijet double-differential cross sections are studied as a function of the dijet invariant mass, in bins of half the rapidity separation of the two leading jets. The measurements are performed in the jet rapidity range $|y|<4.4$, covering jet transverse momenta from 20 GeV to 1.5 TeV and dijet invariant masses from 70 GeV to 5 TeV. This is the successor analysis of ATLAS_2010_S8817804' BibKey: Aad:2011fc BibTeX: '@article{Aad:2011fc, author = "Aad, Georges and others", title = "{Measurement of inclusive jet and dijet production in pp collisions at sqrt(s) = 7 TeV using the ATLAS detector}", collaboration = "ATLAS Collaboration", year = "2011", eprint = "1112.6297", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-192", SLACcitation = "%%CITATION = ARXIV:1112.6297;%%", }' rivet-1.8.3/data/anainfo/SLD_2004_S5693039.info0000644000175000017500000000253712116077757016431 0ustar sunsunName: SLD_2004_S5693039 Year: 2004 Summary: Production of $\pi^+$, $\pi^-$, $K^+$, $K^-$, $p$ and $\bar p$ in Light ($uds$), $c$ and $b$ Jets from Z Decays Experiment: SLD Collider: SLC SpiresID: 5693039 Status: VALIDATED Authors: - Peter Richardson References: - Phys.Rev.D69:072003,2004 - hep-ex/0310017 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: Measurements of the differential production rates of stable charged particles in hadronic $Z^0$ decays, and of charged pions, kaons and protons identified over a wide momentum range. In addition to flavour-inclusive $Z^0$ decays, measurements are made for $Z^0$ decays into light ($u$, $d$, $s$), $c$ and $b$ primary flavors. BibKey: Abe:2003iy BibTeX: '@Article{Abe:2003iy, author = "Abe, Koya and others", collaboration = "SLD", title = "{Production of $\pi^+$, $\pi^-$, $K^+$, $K^-$, $p$ and $\bar p$ in light (uds), c and b jets from $Z^0$ decays}", journal = "Phys. Rev.", volume = "D69", year = "2004", pages = "072003", eprint = "hep-ex/0310017", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.69.072003", SLACcitation = "%%CITATION = HEP-EX/0310017;%%" }' rivet-1.8.3/data/anainfo/Makefile.in0000644000175000017500000005256112123054610015444 0ustar sunsun# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = data/anainfo DIST_COMMON = $(dist_pkgdata_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgdatadir)" DATA = $(dist_pkgdata_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ dist_pkgdata_DATA = \ ALEPH_1991_S2435284.info \ ALEPH_1996_S3486095.info \ ALEPH_1996_S3196992.info \ ALEPH_1999_S4193598.info \ ALEPH_2001_S4656318.info \ ALEPH_2002_S4823664.info \ ALEPH_2004_S5765862.info \ ALICE_2010_S8624100.info \ ALICE_2010_S8625980.info \ ALICE_2010_S8706239.info \ ALICE_2011_S8909580.info \ ALICE_2011_S8945144.info \ ALICE_2012_I1181770.info \ ARGUS_1993_S2653028.info \ ARGUS_1993_S2669951.info \ ARGUS_1993_S2789213.info \ ATLAS_2010_S8591806.info \ ATLAS_2010_S8817804.info \ ATLAS_2010_S8894728.info \ ATLAS_2010_S8914702.info \ ATLAS_2010_S8918562.info \ ATLAS_2010_S8919674.info \ ATLAS_2011_S8924791.info \ ATLAS_2011_S8971293.info \ ATLAS_2011_S8983313.info \ ATLAS_2010_CONF_2010_049.info \ ATLAS_2011_S8994773.info \ ATLAS_2011_S9002537.info \ ATLAS_2011_S9019561.info \ ATLAS_2011_S9041966.info \ ATLAS_2011_CONF_2011_090.info \ ATLAS_2011_CONF_2011_098.info \ ATLAS_2011_S9120807.info \ ATLAS_2011_S9126244.info \ ATLAS_2011_S9128077.info \ ATLAS_2011_S9131140.info \ ATLAS_2011_S9108483.info \ ATLAS_2011_S9212183.info \ ATLAS_2011_I894867.info \ ATLAS_2011_I9035664.info \ ATLAS_2011_I919017.info \ ATLAS_2011_I925932.info \ ATLAS_2011_I926145.info \ ATLAS_2011_I944826.info \ ATLAS_2011_I945498.info \ ATLAS_2011_I954993.info \ ATLAS_2011_S9225137.info \ ATLAS_2011_S9212353.info \ ATLAS_2012_I1083318.info \ ATLAS_2012_I1082936.info \ ATLAS_2012_I1084540.info \ ATLAS_2012_I1093738.info \ ATLAS_2012_I1094568.info \ ATLAS_2012_I1095236.info \ ATLAS_2012_I943401.info \ ATLAS_2012_I1082009.info \ ATLAS_2012_I1091481.info \ ATLAS_2012_I1094061.info \ ATLAS_2012_I1119557.info \ ATLAS_2012_I1125575.info \ ATLAS_2012_I1183818.info \ ATLAS_2012_I1188891.info \ ATLAS_2012_I946427.info \ ATLAS_2012_CONF_2012_001.info \ ATLAS_2012_I1112263.info \ ATLAS_2012_I1125961.info \ ATLAS_2012_I1126136.info \ ATLAS_2012_I1117704.info \ ATLAS_2012_I1118269.info \ ATLAS_2012_I1180197.info \ ATLAS_2012_I1186556.info \ ATLAS_2012_I1190891.info \ ATLAS_2012_CONF_2012_103.info \ ATLAS_2012_CONF_2012_104.info \ ATLAS_2012_CONF_2012_105.info \ ATLAS_2012_CONF_2012_109.info \ ATLAS_2012_CONF_2012_153.info \ ATLAS_2013_I1217867.info \ BABAR_2003_I593379.info \ BABAR_2005_S6181155.info \ BABAR_2007_S6895344.info \ BABAR_2007_S7266081.info \ BELLE_2001_S4598261.info \ BELLE_2006_S6265367.info \ CDF_1988_S1865951.info \ CDF_1990_S2089246.info \ CDF_1993_S2742446.info \ CDF_1994_S2952106.info \ CDF_1996_S3108457.info \ CDF_1996_S3349578.info \ CDF_1996_S3418421.info \ CDF_1997_S3541940.info \ CDF_1998_S3618439.info \ CDF_2000_S4155203.info \ CDF_2000_S4266730.info \ CDF_2001_S4517016.info \ CDF_2001_S4563131.info \ CDF_2001_S4751469.info \ CDF_2002_S4796047.info \ CDF_2004_S5839831.info \ CDF_2005_S6080774.info \ CDF_2005_S6217184.info \ CDF_2006_S6450792.info \ CDF_2006_S6653332.info \ CDF_2007_S7057202.info \ CDF_2008_LEADINGJETS.info \ CDF_2008_NOTE_9351.info \ CDF_2008_S7540469.info \ CDF_2008_S7541902.info \ CDF_2008_S7782535.info \ CDF_2008_S7828950.info \ CDF_2008_S8093652.info \ CDF_2008_S8095620.info \ CDF_2009_S8233977.info \ CDF_2009_NOTE_9936.info \ CDF_2009_S8383952.info \ CDF_2009_S8436959.info \ CDF_2010_S8591881_DY.info \ CDF_2010_S8591881_QCD.info \ CDF_2012_NOTE10874.info \ CLEO_2004_S5809304.info\ CMS_2010_S8547297.info \ CMS_2010_S8656010.info \ CMS_2011_S8884919.info \ CMS_2011_S9215166.info \ CMS_2011_I954992.info \ CMS_2011_S8941262.info \ CMS_2011_S8950903.info \ CMS_2011_S8957746.info \ CMS_2011_S8968497.info \ CMS_2011_S8973270.info \ CMS_2011_S8978280.info \ CMS_2011_S9086218.info \ CMS_2011_S9088458.info \ CMS_2011_S9120041.info \ CMS_2012_I1087342.info \ CMS_2012_I1102908.info \ CMS_2012_I1107658.info \ CMS_2012_I1184941.info \ CMS_2012_I1193338.info \ CMS_2012_PAS_FWD_11_003.info \ CMS_2012_PAS_QCD_11_010.info \ CMS_QCD_10_024.info \ D0_1996_S3214044.info \ D0_1996_S3324664.info \ D0_2000_S4480767.info \ D0_2001_S4674421.info \ D0_2004_S5992206.info \ D0_2006_S6438750.info \ D0_2007_S7075677.info \ D0_2008_S6879055.info \ D0_2008_S7554427.info \ D0_2008_S7662670.info \ D0_2008_S7719523.info \ D0_2008_S7837160.info \ D0_2008_S7863608.info \ D0_2009_S8202443.info \ D0_2009_S8320160.info \ D0_2009_S8349509.info \ D0_2010_S8566488.info \ D0_2010_S8570965.info \ D0_2010_S8671338.info \ D0_2010_S8821313.info \ D0_2011_I895662.info \ E735_1998_S3905616.info \ DELPHI_1995_S3137023.info \ DELPHI_1996_S3430090.info \ DELPHI_1999_S3960137.info \ DELPHI_2000_S4328825.info \ DELPHI_2002_069_CONF_603.info \ DELPHI_2003_WUD_03_11.info \ EXAMPLE.info \ H1_1994_S2919893.info \ H1_1995_S3167097.info \ H1_2000_S4129130.info \ JADE_OPAL_2000_S4300807.info \ JADE_1998_S3612880.info \ LHCB_2010_S8758301.info \ LHCB_2010_I867355.info \ LHCB_2011_I917009.info \ LHCB_2011_I919315.info \ LHCB_2012_I1119400.info \ LHCF_2012_I1115479.info \ MC_DIJET.info \ MC_DIPHOTON.info \ MC_GENERIC.info \ MC_HINC.info \ MC_HJETS.info \ MC_HKTSPLITTINGS.info \ MC_IDENTIFIED.info \ MC_JETS.info \ MC_KTSPLITTINGS.info \ MC_LEADJETUE.info \ MC_PDFS.info \ MC_PHOTONINC.info \ MC_PHOTONJETS.info \ MC_PHOTONKTSPLITTINGS.info \ MC_PHOTONJETUE.info \ MC_PHOTONS.info \ MC_PRINTEVENT.info \ MC_QCD_PARTONS.info \ MC_SUSY.info \ MC_TTBAR.info \ MC_VH2BB.info \ MC_WINC.info \ MC_WJETS.info \ MC_WKTSPLITTINGS.info \ MC_WPOL.info \ MC_WWINC.info \ MC_WWJETS.info \ MC_WWKTSPLITTINGS.info \ MC_XS.info \ MC_ZINC.info \ MC_ZJETS.info \ MC_ZKTSPLITTINGS.info \ MC_ZZINC.info \ MC_ZZJETS.info \ MC_ZZKTSPLITTINGS.info \ OPAL_1993_S2692198.info \ OPAL_1994_S2927284.info \ OPAL_1995_S3198391.info \ OPAL_1996_S3257789.info \ OPAL_1997_S3396100.info \ OPAL_1997_S3608263.info \ OPAL_1998_S3702294.info \ OPAL_1998_S3780481.info \ OPAL_1998_S3749908.info \ OPAL_2000_S4418603.info \ OPAL_2001_S4553896.info \ OPAL_2002_S5361494.info \ OPAL_2004_S6132243.info \ PDG_HADRON_MULTIPLICITIES.info \ PDG_HADRON_MULTIPLICITIES_RATIOS.info \ SFM_1984_S1178091.info \ SLD_1996_S3398250.info \ SLD_1999_S3743934.info \ SLD_2002_S4869273.info \ SLD_2004_S5693039.info \ STAR_2006_S6500200.info \ STAR_2006_S6860818.info \ STAR_2006_S6870392.info \ STAR_2008_S7869363.info \ STAR_2008_S7993412.info \ STAR_2009_UE_HELEN.info \ TASSO_1990_S2148048.info \ TOTEM_2012_I1115294.info \ TOTEM_2012_002.info \ ZEUS_2001_S4815815.info \ UA1_1990_S2044935.info \ UA5_1982_S875503.info \ UA5_1986_S1583476.info \ UA5_1987_S1640666.info \ UA5_1988_S1867512.info \ UA5_1989_S1926373.info all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/anainfo/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/anainfo/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_pkgdataDATA: $(dist_pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-dist_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_pkgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_pkgdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dist_pkgdataDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am uninstall uninstall-am uninstall-dist_pkgdataDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: rivet-1.8.3/data/anainfo/ATLAS_2012_I1112263.info0000644000175000017500000000313712116077757016612 0ustar sunsunName: ATLAS_2012_I1112263 Year: 2012 Summary: 3 lepton plus missing transverse energy SUSY search Experiment: ATLAS Collider: LHC Status: VALIDATED Authors: - Peter Richardson References: - ATLAS-CONF-2012-023 - arXiv:1204.5638 RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] NeedCrossSection: yes Description: 'Search for SUSY using events with 3 leptons in association with missing transverse energy in proton-proton collisions at a centre-of-mass energy of 7 TeV. The data sample has a total integrated luminosity of 2.06 fb$^{-1}$. There is no reference data and in addition to the control plots from the paper the number of events in the two signal regions, correctly normalized to an integrated luminosity 2.06 fb$^{-1}$, are calculated.' BibKey: Aad:2012I1112263 BibTeX: '@article{Aad:2012I1112263, author = "Aad, Georges and others", title = "{Search for supersymmetry in events with three leptons and missing transverse momentum in $\sqrt{s}$ = 7 TeV pp collisions with the ATLAS detector}", collaboration = "ATLAS Collaboration", year = "2012", note = "5 pages plus author list (18 pages total), 2 figures, 1 table, submitted to Physics Review Letters", eprint = "1204.5638", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-098", SLACcitation = "%%CITATION = ARXIV:1204.5638;%%", }' rivet-1.8.3/data/anainfo/SLD_2002_S4869273.info0000644000175000017500000000217012116077757016424 0ustar sunsunName: SLD_2002_S4869273 Year: 2002 Summary: Measurement of the b-quark fragmentation function in $Z^0$ decays Experiment: SLD Collider: SLC SpiresID: 4869273 Status: VALIDATED Authors: - Peter Richardson References: - Phys. Rev.D65:092006,2002 - hep-ex/0202031 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: Measurement of the $b$-quark fragmentation function by SLC. The fragmentation function for weakly decaying $b$-quarks has been measured. BibKey: Abe:2002iq BibTeX: '@Article{Abe:2002iq, author = "Abe, Koya and others", collaboration = "SLD", title = "{Measurement of the b-quark fragmentation function in Z0 decays}", journal = "Phys. Rev.", volume = "D65", year = "2002", pages = "092006", eprint = "hep-ex/0202031", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.65.092006", note = "[Erratum-ibid.D66:079905,2002]", SLACcitation = "%%CITATION = HEP-EX/0202031;%%" }' rivet-1.8.3/data/anainfo/CDF_2008_S8095620.info0000644000175000017500000000366212116077757016402 0ustar sunsunName: CDF_2008_S8095620 Year: 2008 Summary: CDF Run II Z+b-jet cross section paper, 2 fb-1 Experiment: CDF Collider: Tevatron Run 2 SpiresID: 8095620 Status: VALIDATED Authors: - Emily Nurse - Steffen Schumann References: - arXiv:0812.4458 RunInfo: Requires the process $p\bar{p} \rightarrow {Z} \rightarrow{\ell}\ell$, where $\ell$ is $e$ or $\mu$. Additional hard jets will also have to be included to get a good description. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: Measurement of the b-jet production cross section for events containing a $Z$ boson produced in $p\bar{p}$ collisions at $\sqrt{s}=1.96$ TeV, using data corresponding to an integrated luminosity of 2 fb$^{-1}$ collected by the CDF II detector at the Tevatron. $Z$ bosons are selected in the electron and muon decay modes. Jets are considered with transverse energy $E_T>20$ GeV and pseudorapidity $|\eta|<1.5$. The ratio of the integrated $Z$ + b-jet cross section to the inclusive $Z$ production cross section is measured differentially in jet $E_T$, jet $\eta$, $Z$-boson transverse momentum, number of jets, and number of b-jets. The first two measurements have an entry for each b-jet in the event, the last three measurements have one entry per event. BibKey: Aaltonen:2008mt BibTeX: '@Article{Aaltonen:2008mt, author = "Aaltonen, T. and others", collaboration = "CDF", title = "{Measurement of Cross Sections for $b$ Jet Production in Events with a $Z$ Boson in $p^-$ anti-p Collisions at $\sqrt{s}$ = 1.96-TeV}", journal = "Phys. Rev.", volume = "D79", year = "2009", pages = "052008", eprint = "0812.4458", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevD.79.052008", SLACcitation = "%%CITATION = 0812.4458;%%" }' rivet-1.8.3/data/anainfo/TOTEM_2012_I1115294.info0000644000175000017500000000135512116077757016645 0ustar sunsunName: TOTEM_2012_I1115294 Year: 2012 Summary: Forward dN/deta at 7 TeV Experiment: TOTEM Collider: LHC #InspireID: Status: VALIDATED Authors: - Hendrik Hoeth References: - Europhys.Lett. 98 (2012) 31002 - arXiv:1205.4105 - CERN-PH-EP-2012-106 - TOTEM 2012-01 RunInfo: pp QCD interactions at 900 GeV and 7 TeV. NumEvents: 1000000 NeedCrossSection: no Beams: [p+, p+] Energies: [7000] PtCuts: [0] Description: 'The TOTEM experiment has measured the charged particle pseudorapidity density $dN_\text{ch}/d\eta$ in pp collisions at $\sqrt{s} = 7$\,TeV for $5.3 < |\eta| < 6.4$ in events with at least one charged particle with transverse momentum above 40 MeV/c in this pseudorapidity range.' BibKey: BibTeX: '' rivet-1.8.3/data/anainfo/MC_PHOTONINC.info0000644000175000017500000000056512116077757016214 0ustar sunsunName: MC_PHOTONINC Summary: Monte Carlo validation observables for single isolated photon production Status: VALIDATED Authors: - Frank Siegert References: RunInfo: Tevatron Run II ppbar -> gamma + jets. NumEvents: 10000000 PtCuts: [0] Description: Monte Carlo validation observables for single isolated photon production NeedCrossSection: yes rivet-1.8.3/data/anainfo/ALEPH_2002_S4823664.info0000644000175000017500000000245412116077757016632 0ustar sunsunName: ALEPH_2002_S4823664 Year: 2002 Summary: $\eta$ and $\omega$ Production in Hadronic $Z^0$ Decays Experiment: OPAL Collider: LEP 1 SpiresID: 4823664 Status: VALIDATED Authors: - Peter Richardson References: - Phys.Lett. B528 (2002) 19-33 - hep-ex/0201012 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: The production of $\eta$ and $\omega$ mesons measured using 4 millon $Z^0$ events by the ALEPH experiment at LEP. Only the fragmentation functions are implemented. BibKey: Heister:2001kp BibTeX: '@article{Heister:2001kp, author = "Heister, A. and others", title = "{Inclusive production of the omega and eta mesons in Z decays, and the muonic branching ratio of the omega}", collaboration = "ALEPH Collaboration", journal = "Phys.Lett.", volume = "B528", pages = "19-33", doi = "10.1016/S0370-2693(02)01220-0", year = "2002", eprint = "hep-ex/0201012", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-EP-2001-090", SLACcitation = "%%CITATION = HEP-EX/0201012;%%", }' rivet-1.8.3/data/anainfo/ATLAS_2012_CONF_2012_109.info0000644000175000017500000000116712116077757017445 0ustar sunsunName: ATLAS_2012_CONF_2012_109 Year: 2012 Summary: 0-lepton squark and gluino search Experiment: ATLAS Collider: LHC InspireID: 1125961 Status: UNVALIDATED Authors: - Peter Richardson - David Grellscheid - Chris Wymant References: - arXiv:1208.0949 - ATLAS-CONF-2012-109 RunInfo: BSM signal events at 8000 GeV. NumEvents: 10000 for BSM signals Beams: [p+, p+] Energies: [8000] Description: '0-lepton search for squarks and gluinos by ATLAS at 8 TeV. Event counts in five signal regions are implemented as one-bin histograms.' rivet-1.8.3/data/anainfo/MC_HKTSPLITTINGS.info0000644000175000017500000000056112116077757016716 0ustar sunsunName: MC_HKTSPLITTINGS Summary: Monte Carlo validation observables for $h[\tau^+ \, \tau^-]$ + jets production Status: VALIDATED Authors: - Frank Siegert RunInfo: $h [\to \tau^+ \tau^-]$ + jets. NumEvents: 1000000 PtCuts: [0] Description: Monte Carlo validation observables for $h[\tau^+ \, \tau^-]$ + jets production NeedCrossSection: yes rivet-1.8.3/data/anainfo/MC_SUSY.info0000644000175000017500000000107212116077757015450 0ustar sunsunName: MC_SUSY Summary: Validate generic SUSY events, including various lepton invariant mass Description: Analysis of generic SUSY events at the LHC, based on Atlas Herwig++ validation analysis contents. Plotted are eta, phi and pT observables for charged tracks, photons, isolated photons, electrons, muons, and jets, as well as various dilepton mass `edge' plots for different event selection criteria. RunInfo: SUSY events at any energy. pT cutoff at 10 GeV may be advised. Status: VALIDATED Authors: - Andy Buckley PtCuts: [0] rivet-1.8.3/data/anainfo/CMS_2010_S8656010.info0000644000175000017500000000414012116077757016405 0ustar sunsunName: CMS_2010_S8656010 Year: 2010 Summary: Charged particle transverse momentum and pseudorapidity spectra from proton-proton collisions at 7000 GeV. Experiment: CMS Collider: LHC SpiresID: 8656010 Status: VALIDATED Authors: - A. Knutsson References: - Phys.Rev.Lett.105:022002,2010 - doi:10.1103/PhysRevLett.105.022002 - arXiv:1005.3299 [hep-ex] RunInfo: Non-single-diffractive (NSD) events only. Should include double-diffractive (DD) events and non-diffractive (ND) events but NOT single-diffractive (SD) events. For example, in Pythia6 the SD processes to be turned off are 92 and 93, and in Pythia8 the SD processes are 103 and 104 (also called SoftQCD:singleDiffractive). NumEvents: 200000 Beams: [p+, p+] Energies: [7000] Description: Charged particle spectra are measured in proton-proton collisions at center-of-mass energies 7000 GeV. The spectra are normalized to all non-single-diffractive (NSD) events using corrections for trigger and selection efficiency, acceptance, and branching ratios. There are transverse-momentum (pT) spectra from 0.1 to 2 GeV in bins of pseudorapidity (eta) and the pT spectrum from 0.1 to 6 GeV for |eta|<2.4. The eta spectra come from the average of three methods and cover |eta|<2.5 and are corrected to include all pT. The data were corrected according to the SD/DD/ND content of the CMS trigger, as predicted by pythia6. The uncertainties connected with correct or uncorrect modelling of diffraction were included in the systematic errors. BibKey: Khachatryan:2010us BibTeX: '@Article{Khachatryan:2010us, author = "Khachatryan, Vardan and others", collaboration = "CMS", title = "{Transverse-momentum and pseudorapidity distributions of charged hadrons in pp collisions at sqrt(s) = 7 TeV}", journal = "Phys. Rev. Lett.", volume = "105", year = "2010", pages = "022002", eprint = "1005.3299", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevLett.105.022002", SLACcitation = "%%CITATION = 1005.3299;%%"}' rivet-1.8.3/data/anainfo/ATLAS_2012_I1091481.info0000644000175000017500000000331112116077757016614 0ustar sunsunName: ATLAS_2012_I1091481 Year: 2012 Summary: Azimuthal ordering of charged hadrons Experiment: ATLAS Collider: LHC InspireID: 1091481 Status: UNVALIDATED Authors: - Sharka Todorova - Holger Schulz References: - CERN-PH-EP-2011-197 - arXiv:1203.0419 [hep-ex] RunInfo: QCD events with diffractives switched on. NumEvents: 1000000 NeedCrossSection: no Beams: [p+, p+] Energies: [900, 7000] Description: 'Measurement of the ordering of charged hadrons in the azimuthal angle relative to the beam axis at the Large Hadron Collider (LHC). A spectral analysis of correlations between longitudinal and transverse components of the momentum of the charged hadrons is performed. Data were recorded with the ATLAS detector at centre-of-mass energies of $\sqrt{s} = \unit{900}{\GeV}$ and $\sqrt{s} = \unit{7}{\TeV}$. The correlations measured in a phase space region dominated by low-pT particles are not well described by conventional models of hadron production. The measured spectra show features consistent with the fragmentation of a QCD string represented by a helix-like ordered gluon chain.' BibKey: :2012fa BibTeX: '@article{:2012fa, author = "Aad, Georges and others", title = "{Measurement of the azimuthal ordering of charged hadrons with the ATLAS detector}", collaboration = "ATLAS Collaboration", year = "2012", eprint = "1203.0419", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-197", SLACcitation = "%%CITATION = ARXIV:1203.0419;%%", }' ToDo: - Check normalisation(s) - Check the -1 in the fill expression rivet-1.8.3/data/anainfo/D0_2006_S6438750.info0000644000175000017500000000356612116077757016255 0ustar sunsunName: D0_2006_S6438750 Year: 2006 Summary: Inclusive isolated photon cross-section, differential in pT(gamma) Experiment: D0 Collider: Tevatron Run 2 SpiresID: 6438750 Status: VALIDATED Authors: - Andy Buckley - Gavin Hesketh - Frank Siegert References: - Phys.Lett.B639:151-158,2006, Erratum-ibid.B658:285-289,2008 - doi:10.1016/j.physletb.2006.04.048 - arXiv:hep-ex/0511054 (plus erratum) RunInfo: ppbar collisions at sqrt(s) = 1960 GeV. Requires gamma + jet (q,qbar,g) hard processes, which for Pythia 6 means MSEL=10 for with MSUB indices 14, 18, 29, 114, 115 enabled. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [15] Description: Measurement of differential cross section for inclusive production of isolated photons in p pbar collisions at sqrt(s) = 1.96 TeV with the D\O detector at the Fermilab Tevatron collider. The photons span transverse momenta 23--300 GeV and have pseudorapidity $|\eta| < 0.9$. Isolated direct photons are probes of pQCD via the annihilation ($q \bar{q} -> \gamma g$) and quark-gluon Compton scattering ($q g -> \gamma q$) processes, the latter of which is also sensitive to the gluon PDF. The initial state radiation / resummation formalisms are sensitive to the resulting photon pT spectrum NeedCrossSection: yes BibKey: Abazov:2005wc BibTeX: '@Article{Abazov:2005wc, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the isolated photon cross section in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96-TeV}", journal = "Phys. Lett.", volume = "B639", year = "2006", pages = "151-158", eprint = "hep-ex/0511054", archivePrefix = "arXiv", doi = "10.1016/j.physletb.2006.04.048", SLACcitation = "%%CITATION = HEP-EX/0511054;%%" }' rivet-1.8.3/data/anainfo/CDF_2008_LEADINGJETS.info0000644000175000017500000000212412116077757017143 0ustar sunsunName: CDF_2008_LEADINGJETS Year: 2008 Summary: CDF Run 2 underlying event in leading jet events Experiment: CDF Collider: Tevatron Run 2 SpiresID: NONE Status: OBSOLETE Authors: - Hendrik Hoeth RunInfo: $p\bar{p}$ QCD interactions at 1960~GeV. Particles with $c \tau > {}$10 mm should be set stable. Several $p_\perp^\text{min}$ cutoffs are probably required to fill the profile histograms. $p_\perp^\text{min} = {}$ 0 (min bias), 10, 20, 50, 100, 150 GeV. The corresponding merging points are at $p_T = $ 0, 30, 50, 80, 130, 180 GeV NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0, 10, 20, 50, 100, 150] Description: Rick Field's measurement of the underlying event in leading jet events. If the leading jet of the event is within $|\eta| < 2$, the event is accepted and ``toward'', ``away'' and ``transverse'' regions are defined in the same way as in the original (2001) CDF underlying event analysis. The leading jet defines the $\phi$ direction of the toward region. The transverse regions are most sensitive to the underlying event. rivet-1.8.3/data/anainfo/ATLAS_2012_I1188891.info0000644000175000017500000000267312116077757016642 0ustar sunsunName: ATLAS_2012_I1188891 Year: 2012 Summary: flavour composition of dijet events at 7 TeV Experiment: ATLAS Collider: LHC 7TeV InspireID: 1188891 Status: VALIDATED Authors: - Cecile Lapoire - Roman Lysak References: - arXiv:1210.0441 RunInfo: pp di-jet events at 7 TeV NumEvents: 1000000 NeedCrossSection: no Beams: [p+, p+] Energies: [7000] Description: 'The measurement of the flavour composition of dijet events produced in pp collisions at $\sqrt{s}=7 TeV$ using the ATLAS detector. Six possible combinations of light, charm and bottom jets are identified in the dijet events, where the jet flavour is defined by the presence of bottom, charm or solely light flavour hadrons in the jet. The fractions of these dijet flavour states as functions of the leading jet transverse momentum in the range 40 GeV to 500 GeV and jet rapidity $|y| < 2.1$ are measured.' BibKey: Aad:2012ma BibTeX: '@article{Aad:2012ma, author = "Aad, Georges and others", title = "{Measurement of the flavour composition of dijet events in $pp$ collisions at $\sqrt{s}=7$ TeV with the ATLAS detector}", collaboration = "ATLAS Collaboration", year = "2012", eprint = "1210.0441", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = ARXIV:1210.0441;%%", }' rivet-1.8.3/data/anainfo/CMS_2012_I1087342.info0000644000175000017500000000264412116077757016403 0ustar sunsunName: CMS_2012_I1087342 Year: 2011 Summary: Measurement of forward and forward+central jets at sqrt(s) = 7 TeV Experiment: CMS Collider: LHC SpiresID: 1087342 Status: VALIDATED Authors: - Albert Knutsson - Rasmus Sloth Hansen - Bo Zhu References: - JHEP 1206 (2012) 036 - CMS-FWD-11-002 - CERN-PH-EP-2011-179 - doi 10.1007/JHEP06(2012)036 - arXiv:1202.0704 [hep-ex] RunInfo: pp QCD interactions at 7 TeV. NumEvents: 500000 Beams: [p+, p+] Energies: [7000] Description: Inclusive forward jets and forward+central jets measured by CMS at sqrt(s)=7 TeV. NeedCrossSection: yes BibKey: Chatrchyan:2012gwa BibTeX: '@article{Chatrchyan:2012gwa, author = "Chatrchyan, Serguei and others", title = "{Measurement of the inclusive production cross sections for forward jets and for dijet events with one forward and one central jet in pp collisions at sqrt(s) = 7 TeV}", collaboration = "CMS Collaboration", journal = "JHEP", volume = "1206", pages = "036", doi = "10.1007/JHEP06(2012)036", year = "2012", eprint = "1202.0704", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CMS-FWD-11-002, CERN-PH-EP-2011-179", SLACcitation = "%%CITATION = ARXIV:1202.0704;%%",}' rivet-1.8.3/data/anainfo/CDF_2010_S8591881_QCD.info0000644000175000017500000000220112116077757017060 0ustar sunsunName: CDF_2010_S8591881_QCD Year: 2010 Summary: CDF Run 2 underlying event in leading jet events Experiment: CDF Collider: Tevatron Run 2 SpiresID: 8591881 Status: VALIDATED Authors: - Hendrik Hoeth References: - Phys.Rev.D82:034001,2010 RunInfo: $p\bar{p}$ QCD interactions at 1960~GeV. Particles with $c \tau > {}$10 mm should be set stable. Several $p_\perp^\text{min}$ cutoffs are probably required to fill the profile histograms. $p_\perp^\text{min} = {}$ 0 (min bias), 10, 20, 50, 100, 150 GeV. The corresponding merging points are at $p_T = $ 0, 30, 50, 80, 130, 180 GeV NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0, 10, 20, 50, 100, 150] Description: Rick Field's measurement of the underlying event in leading jet events. If the leading jet of the event is within $|\eta| < 2$, the event is accepted and ``toward'', ``away'' and ``transverse'' regions are defined in the same way as in the original (2001) CDF underlying event analysis. The leading jet defines the $\phi$ direction of the toward region. The transverse regions are most sensitive to the underlying event. rivet-1.8.3/data/anainfo/D0_2011_I895662.info0000644000175000017500000000250612116077757016153 0ustar sunsunName: D0_2011_I895662 Year: 2011 Summary: 3-jet invariant mass Experiment: D0 Collider: Tevatron Run 2 InspireID: 895662 Status: VALIDATED Authors: - Hendrik Hoeth References: - arxiv:1104.1986 RunInfo: QCD events, three jets above 40 GeV. NumEvents: 1000000 NeedCrossSection: yes Beams: [p-, p+] Energies: [1960] PtCuts: [40] Description: Inclusive three-jet differential cross-section as a function of invariant mass of the three jets with the largest transverse momenta. The measurement is made in three rapidity regions ($|y|<0.8, 1.6, 2.4$) and with jets above 40, 70, and 100 GeV. BibKey: Abazov:2011ub BibTeX: '@article{Abazov:2011ub, author = "Abazov, Victor Mukhamedovich and others", title = "{Measurement of three-jet differential cross sections $d\sigma_{\text{3jet}} / dM_{\text{3jet}}$ in $p\bar{p}$ collisions at $\sqrt{s}=1.96$ TeV}", collaboration = "D0 Collaboration", journal = "Phys.Lett.", volume = "B704", pages = "434-441", year = "2011", eprint = "1104.1986", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "FERMILAB-PUB-11-173-E", SLACcitation = "%%CITATION = ARXIV:1104.1986;%%", }' rivet-1.8.3/data/anainfo/MC_DIPHOTON.info0000644000175000017500000000054712116077757016077 0ustar sunsunName: MC_DIPHOTON Summary: Monte Carlo validation observables for diphoton production at LHC Status: VALIDATED Authors: - Frank Siegert RunInfo: LHC pp -> jet+jet, photon+jet, photon+photon, all with EW+QCD shower NumEvents: 10000000 PtCuts: [0] Description: Different observables related to the two photons NeedCrossSection: yes rivet-1.8.3/data/anainfo/TOTEM_2012_002.info0000644000175000017500000000267212116077757016212 0ustar sunsunName: TOTEM_2012_002 Year: 2012 Summary: Measurement of proton-proton elastic scattering and total cross section at sqrt(s) = 7 TeV. Experiment: TOTEM Collider: LHC #InspireID: Status: VALIDATED Authors: - Sercan Sen - Peter Skands References: - CERN-PH-EP-2012-239 - http://cds.cern.ch/record/1472948 RunInfo: Elastic events only. NumEvents: 1000000 Beams: [p+, p+] Energies: [7000] PtCuts: [0] Description: 'Measurement of the elastic differential cross-section in proton-proton interactions at a centre-of-mass energy $\sqrt{s}=7$ TeV at the LHC. The data, which cover the $|t|$ range 0.005--0.2 $\text{GeV}^2$, were collected using Roman Pot detectors very close to the outgoing beam in October 2011, allowing the precise extrapolation down to the optical point, $t = 0$, and hence the derivation of the elastic as well as the total cross-section via the optical theorem.' BibKey: Antchev:1472948 BibTeX: '@techreport{Antchev:1472948, author = "Antchev, G. and others", collaboration = "TOTEM", title = "Measurement of proton-proton elastic scattering and total cross-section at $\sqrt{s}$ = 7 TeV", institution = "CERN", address = "Geneva", number = "CERN-PH-EP-2012-239. TOTEM-2012-002", month = "Aug", year = "2012"}' ToDo: - Rename and add Inspire ID field when available. rivet-1.8.3/data/anainfo/DELPHI_1996_S3430090.info0000644000175000017500000000264212116077757016754 0ustar sunsunName: DELPHI_1996_S3430090 Year: 1996 Summary: Delphi MC tuning on event shapes and identified particles. Experiment: DELPHI Collider: LEP 1 SpiresID: 3430090 Status: VALIDATED Authors: - Andy Buckley - Hendrik Hoeth References: - Z.Phys.C73:11-60,1996 - doi:10.1007/s002880050295 RunInfo: sqrt(s) = 91.2 GeV, $e^+ e^- -> Z^0$ production with hadronic decays only NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: Event shape and charged particle inclusive distributions measured using 750000 decays of Z bosons to hadrons from the DELPHI detector at LEP. This data, combined with identified particle distributions from all LEP experiments, was used for tuning of shower-hadronisation event generators by the original PROFESSOR method. This is a critical analysis for MC event generator tuning of final state radiation and both flavour and kinematic aspects of hadronisation models. BibKey: Abreu:1996na BibTeX: '@Article{Abreu:1996na, author = "Abreu, P. and others", collaboration = "DELPHI", title = "{Tuning and test of fragmentation models based on identified particles and precision event shape data}", journal = "Z. Phys.", volume = "C73", year = "1996", pages = "11-60", doi = "10.1007/s002880050295", SLACcitation = "%%CITATION = ZEPYA,C73,11;%%" }' rivet-1.8.3/data/anainfo/CDF_1993_S2742446.info0000644000175000017500000000245512116077757016414 0ustar sunsunName: CDF_1993_S2742446 Year: 1993 Summary: Angular distribution of prompt photon Experiment: CDF Collider: Tevatron Run 1 SpiresID: 2742446 Status: UNVALIDATED Authors: - Frank Siegert References: - Phys.Rev.Lett.71:679-683,1993 - doi:10.1103/PhysRevLett.71.679 RunInfo: All prompt photon production processes in $p \bar{p}$ at 1800 GeV. Hadronisation should be switched off, because non-prompt photon production has been corrected for. NumEvents: 10000000 Beams: [p-, p+] Energies: [1800] PtCuts: [15] Description: Data taken with the Collider Detector at Fermilab (CDF) during the 1988-1989 run of the Tevatron are used to measure the distribution of the center-of-mass (rest frame of the initial state partons) angle between isolated prompt photons and the beam direction. BibKey: Abe:1993cv BibTeX: '@Article{Abe:1993cv, author = "Abe, F. and others", collaboration = "CDF", title = "{The Center-of-mass angular distribution of prompt photons produced in $p\bar{p}$ collisions at $\sqrt{s} = 1.8$ TeV}", journal = "Phys. Rev. Lett.", volume = "71", year = "1993", pages = "679-683", doi = "10.1103/PhysRevLett.71.679", SLACcitation = "%%CITATION = PRLTA,71,679;%%" }' ToDo: rivet-1.8.3/data/anainfo/CDF_2008_S7828950.info0000644000175000017500000000322712116077757016410 0ustar sunsunName: CDF_2008_S7828950 Year: 2008 Summary: CDF Run II inclusive jet cross-section using the Midpoint algorithm Experiment: CDF Collider: Tevatron Run 2 SpiresID: 7828950 Status: VALIDATED Authors: - Craig Group - Frank Siegert References: - arXiv:0807.2204 - Phys.Rev.D78:052006,2008 RunInfo: Requires $2\rightarrow{2}$ QCD scattering processes. The minimum jet $E_\perp$ is 62 GeV, so a cut on kinematic pTmin may be required for good statistics. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [62] Description: Measurement of the inclusive jet cross section in $p\bar{p}$ collisions at $\sqrt{s}=1.96$ TeV as a function of jet $E_\perp$, for $E_\perp >$ 62 GeV. The data is collected by the CDF II detector and has an integrated luminosity of 1.13 fb$^{-1}$. The measurement was made using the cone-based Midpoint jet clustering algorithm in rapidity bins within $|y|<2.1$. This measurement can be used to provide increased precision in PDFs at high parton momentum fraction $x$. NeedCrossSection: yes BibKey: Aaltonen:2008eq BibTeX: '@Article{Aaltonen:2008eq, author = "Aaltonen, T. and others", collaboration = "CDF", title = "{Measurement of the Inclusive Jet Cross Section at the Fermilab Tevatron p-pbar Collider Using a Cone-Based Jet Algorithm}", journal = "Phys. Rev.", volume = "D78", year = "2008", pages = "052006", eprint = "0807.2204", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevD.78.052006", SLACcitation = "%%CITATION = 0807.2204;%%" }' rivet-1.8.3/data/anainfo/CMS_2011_I954992.info0000644000175000017500000000327312116077757016336 0ustar sunsunName: CMS_2011_I954992 Year: 2011 Summary: Exclusive photon-photon production of muon pairs in proton-proton collisions at $\sqrt{s} = 7$ TeV Experiment: CMS Collider: LHC SpiresID: 9279938 InspireID: 954992 Status: VALIDATED Authors: - David d'Enterria - Jonathan Hollar - Sercan Sen References: - arXiv:1111.5536 [hep-ex] RunInfo: gamma gamma TO mu+ mu- process. NumEvents: 50000 NeedCrossSection: no Beams: [p+, p+] Energies: [7000] PtCuts: [0] Description: 'A measurement of the exclusive two-photon production of muon pairs in proton-proton collisions at at a centre-of-mass energy 7 TeV with the final state $p \mu^+ \mu^- p$, is reported using data corresponding to an integrated luminosity of 40 pb$^-1$ collected in 2010. The measured cross section is obtained with a fit to the dimuon $p_T$ distribution for muon pairs with invariant mass greater than 11.5 GeV with each muon $p_T > 4$ GeV and $|\eta| < 2.1$.' BibKey: Chatrchyan:2011ci BibTeX: '@article{Chatrchyan:2011ci, author = "Chatrchyan, Serguei and others", title = "{Exclusive photon-photon production of muon pairs in proton-proton collisions at sqrt(s) = 7 TeV}", collaboration = "CMS Collaboration", journal = "JHEP", volume = "1201", pages = "052", doi = "10.1007/JHEP01(2012)052", year = "2012", eprint = "1111.5536", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-187, CMS-FWD-10-005", SLACcitation = "%%CITATION = ARXIV:1111.5536;%%",}' rivet-1.8.3/data/anainfo/OPAL_1994_S2927284.info0000644000175000017500000000212512116077757016553 0ustar sunsunName: OPAL_1994_S2927284 Year: 1994 Summary: Measurement of the production rates of charged hadrons in $e^+e^-$ annihilation at the $Z^0$ Experiment: OPAL Collider: LEP 1 SpiresID: 2927284 Status: VALIDATED Authors: - Peter Richardson References: - Z.Phys.C63:181-196,1994 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: The inclusive production rates of $\pi^\pm$, $K^\pm$ and $p\bar{p}$ in $Z^0$ decays measured using the OPAL detector at LEP. Only the differential cross sections are currently implemented. BibKey: Akers:1994ez BibTeX: '@Article{Akers:1994ez, author = "Akers, R. and others", collaboration = "OPAL", title = "{Measurement of the production rates of charged hadrons in e+ e- annihilation at the Z0}", journal = "Z. Phys.", volume = "C63", year = "1994", pages = "181-196", doi = "10.1007/BF01411010", SLACcitation = "%%CITATION = ZEPYA,C63,181;%%" } ' rivet-1.8.3/data/anainfo/SLD_1999_S3743934.info0000644000175000017500000000227512116077757016454 0ustar sunsunName: SLD_1999_S3743934 Year: 1999 Summary: Production of $\pi^+$, $K^+$, $K^0$, $K^{*0}$, $\Phi$, $p$ and $\Lambda^0$ in hadronic $Z^0$ decay Experiment: SLD Collider: SLC SpiresID: 3743934 Status: VALIDATED Authors: - Peter Richardson References: - Phys.Rev.D59:052001,1999 - hep-ex/9805029 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: Measurement of scaled momentum distributions and fragmentation functions in flavour tagged events at SLC. SLD measured these observables in uds-, c-, and b-events separately. An inclusive measurement is also included. BibKey: Abe:1998zs BibTeX: '@Article{Abe:1998zs, author = "Abe, K. and others", collaboration = "SLD", title = "{Production of pi+, K+, K0, K*0, Phi, p and Lambda0 in hadronic Z0 decays}", journal = "Phys. Rev.", volume = "D59", year = "1999", pages = "052001", eprint = "hep-ex/9805029", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.59.052001", SLACcitation = "%%CITATION = HEP-EX/9805029;%%" }' rivet-1.8.3/data/anainfo/Makefile.am0000644000175000017500000001541612123033122015424 0ustar sunsundist_pkgdata_DATA = \ ALEPH_1991_S2435284.info \ ALEPH_1996_S3486095.info \ ALEPH_1996_S3196992.info \ ALEPH_1999_S4193598.info \ ALEPH_2001_S4656318.info \ ALEPH_2002_S4823664.info \ ALEPH_2004_S5765862.info \ ALICE_2010_S8624100.info \ ALICE_2010_S8625980.info \ ALICE_2010_S8706239.info \ ALICE_2011_S8909580.info \ ALICE_2011_S8945144.info \ ALICE_2012_I1181770.info \ ARGUS_1993_S2653028.info \ ARGUS_1993_S2669951.info \ ARGUS_1993_S2789213.info \ ATLAS_2010_S8591806.info \ ATLAS_2010_S8817804.info \ ATLAS_2010_S8894728.info \ ATLAS_2010_S8914702.info \ ATLAS_2010_S8918562.info \ ATLAS_2010_S8919674.info \ ATLAS_2011_S8924791.info \ ATLAS_2011_S8971293.info \ ATLAS_2011_S8983313.info \ ATLAS_2010_CONF_2010_049.info \ ATLAS_2011_S8994773.info \ ATLAS_2011_S9002537.info \ ATLAS_2011_S9019561.info \ ATLAS_2011_S9041966.info \ ATLAS_2011_CONF_2011_090.info \ ATLAS_2011_CONF_2011_098.info \ ATLAS_2011_S9120807.info \ ATLAS_2011_S9126244.info \ ATLAS_2011_S9128077.info \ ATLAS_2011_S9131140.info \ ATLAS_2011_S9108483.info \ ATLAS_2011_S9212183.info \ ATLAS_2011_I894867.info \ ATLAS_2011_I9035664.info \ ATLAS_2011_I919017.info \ ATLAS_2011_I925932.info \ ATLAS_2011_I926145.info \ ATLAS_2011_I944826.info \ ATLAS_2011_I945498.info \ ATLAS_2011_I954993.info \ ATLAS_2011_S9225137.info \ ATLAS_2011_S9212353.info \ ATLAS_2012_I1083318.info \ ATLAS_2012_I1082936.info \ ATLAS_2012_I1084540.info \ ATLAS_2012_I1093738.info \ ATLAS_2012_I1094568.info \ ATLAS_2012_I1095236.info \ ATLAS_2012_I943401.info \ ATLAS_2012_I1082009.info \ ATLAS_2012_I1091481.info \ ATLAS_2012_I1094061.info \ ATLAS_2012_I1119557.info \ ATLAS_2012_I1125575.info \ ATLAS_2012_I1183818.info \ ATLAS_2012_I1188891.info \ ATLAS_2012_I946427.info \ ATLAS_2012_CONF_2012_001.info \ ATLAS_2012_I1112263.info \ ATLAS_2012_I1125961.info \ ATLAS_2012_I1126136.info \ ATLAS_2012_I1117704.info \ ATLAS_2012_I1118269.info \ ATLAS_2012_I1180197.info \ ATLAS_2012_I1186556.info \ ATLAS_2012_I1190891.info \ ATLAS_2012_CONF_2012_103.info \ ATLAS_2012_CONF_2012_104.info \ ATLAS_2012_CONF_2012_105.info \ ATLAS_2012_CONF_2012_109.info \ ATLAS_2012_CONF_2012_153.info \ ATLAS_2013_I1217867.info \ BABAR_2003_I593379.info \ BABAR_2005_S6181155.info \ BABAR_2007_S6895344.info \ BABAR_2007_S7266081.info \ BELLE_2001_S4598261.info \ BELLE_2006_S6265367.info \ CDF_1988_S1865951.info \ CDF_1990_S2089246.info \ CDF_1993_S2742446.info \ CDF_1994_S2952106.info \ CDF_1996_S3108457.info \ CDF_1996_S3349578.info \ CDF_1996_S3418421.info \ CDF_1997_S3541940.info \ CDF_1998_S3618439.info \ CDF_2000_S4155203.info \ CDF_2000_S4266730.info \ CDF_2001_S4517016.info \ CDF_2001_S4563131.info \ CDF_2001_S4751469.info \ CDF_2002_S4796047.info \ CDF_2004_S5839831.info \ CDF_2005_S6080774.info \ CDF_2005_S6217184.info \ CDF_2006_S6450792.info \ CDF_2006_S6653332.info \ CDF_2007_S7057202.info \ CDF_2008_LEADINGJETS.info \ CDF_2008_NOTE_9351.info \ CDF_2008_S7540469.info \ CDF_2008_S7541902.info \ CDF_2008_S7782535.info \ CDF_2008_S7828950.info \ CDF_2008_S8093652.info \ CDF_2008_S8095620.info \ CDF_2009_S8233977.info \ CDF_2009_NOTE_9936.info \ CDF_2009_S8383952.info \ CDF_2009_S8436959.info \ CDF_2010_S8591881_DY.info \ CDF_2010_S8591881_QCD.info \ CDF_2012_NOTE10874.info \ CLEO_2004_S5809304.info\ CMS_2010_S8547297.info \ CMS_2010_S8656010.info \ CMS_2011_S8884919.info \ CMS_2011_S9215166.info \ CMS_2011_I954992.info \ CMS_2011_S8941262.info \ CMS_2011_S8950903.info \ CMS_2011_S8957746.info \ CMS_2011_S8968497.info \ CMS_2011_S8973270.info \ CMS_2011_S8978280.info \ CMS_2011_S9086218.info \ CMS_2011_S9088458.info \ CMS_2011_S9120041.info \ CMS_2012_I1087342.info \ CMS_2012_I1102908.info \ CMS_2012_I1107658.info \ CMS_2012_I1184941.info \ CMS_2012_I1193338.info \ CMS_2012_PAS_FWD_11_003.info \ CMS_2012_PAS_QCD_11_010.info \ CMS_QCD_10_024.info \ D0_1996_S3214044.info \ D0_1996_S3324664.info \ D0_2000_S4480767.info \ D0_2001_S4674421.info \ D0_2004_S5992206.info \ D0_2006_S6438750.info \ D0_2007_S7075677.info \ D0_2008_S6879055.info \ D0_2008_S7554427.info \ D0_2008_S7662670.info \ D0_2008_S7719523.info \ D0_2008_S7837160.info \ D0_2008_S7863608.info \ D0_2009_S8202443.info \ D0_2009_S8320160.info \ D0_2009_S8349509.info \ D0_2010_S8566488.info \ D0_2010_S8570965.info \ D0_2010_S8671338.info \ D0_2010_S8821313.info \ D0_2011_I895662.info \ E735_1998_S3905616.info \ DELPHI_1995_S3137023.info \ DELPHI_1996_S3430090.info \ DELPHI_1999_S3960137.info \ DELPHI_2000_S4328825.info \ DELPHI_2002_069_CONF_603.info \ DELPHI_2003_WUD_03_11.info \ EXAMPLE.info \ H1_1994_S2919893.info \ H1_1995_S3167097.info \ H1_2000_S4129130.info \ JADE_OPAL_2000_S4300807.info \ JADE_1998_S3612880.info \ LHCB_2010_S8758301.info \ LHCB_2010_I867355.info \ LHCB_2011_I917009.info \ LHCB_2011_I919315.info \ LHCB_2012_I1119400.info \ LHCF_2012_I1115479.info \ MC_DIJET.info \ MC_DIPHOTON.info \ MC_GENERIC.info \ MC_HINC.info \ MC_HJETS.info \ MC_HKTSPLITTINGS.info \ MC_IDENTIFIED.info \ MC_JETS.info \ MC_KTSPLITTINGS.info \ MC_LEADJETUE.info \ MC_PDFS.info \ MC_PHOTONINC.info \ MC_PHOTONJETS.info \ MC_PHOTONKTSPLITTINGS.info \ MC_PHOTONJETUE.info \ MC_PHOTONS.info \ MC_PRINTEVENT.info \ MC_QCD_PARTONS.info \ MC_SUSY.info \ MC_TTBAR.info \ MC_VH2BB.info \ MC_WINC.info \ MC_WJETS.info \ MC_WKTSPLITTINGS.info \ MC_WPOL.info \ MC_WWINC.info \ MC_WWJETS.info \ MC_WWKTSPLITTINGS.info \ MC_XS.info \ MC_ZINC.info \ MC_ZJETS.info \ MC_ZKTSPLITTINGS.info \ MC_ZZINC.info \ MC_ZZJETS.info \ MC_ZZKTSPLITTINGS.info \ OPAL_1993_S2692198.info \ OPAL_1994_S2927284.info \ OPAL_1995_S3198391.info \ OPAL_1996_S3257789.info \ OPAL_1997_S3396100.info \ OPAL_1997_S3608263.info \ OPAL_1998_S3702294.info \ OPAL_1998_S3780481.info \ OPAL_1998_S3749908.info \ OPAL_2000_S4418603.info \ OPAL_2001_S4553896.info \ OPAL_2002_S5361494.info \ OPAL_2004_S6132243.info \ PDG_HADRON_MULTIPLICITIES.info \ PDG_HADRON_MULTIPLICITIES_RATIOS.info \ SFM_1984_S1178091.info \ SLD_1996_S3398250.info \ SLD_1999_S3743934.info \ SLD_2002_S4869273.info \ SLD_2004_S5693039.info \ STAR_2006_S6500200.info \ STAR_2006_S6860818.info \ STAR_2006_S6870392.info \ STAR_2008_S7869363.info \ STAR_2008_S7993412.info \ STAR_2009_UE_HELEN.info \ TASSO_1990_S2148048.info \ TOTEM_2012_I1115294.info \ TOTEM_2012_002.info \ ZEUS_2001_S4815815.info \ UA1_1990_S2044935.info \ UA5_1982_S875503.info \ UA5_1986_S1583476.info \ UA5_1987_S1640666.info \ UA5_1988_S1867512.info \ UA5_1989_S1926373.info rivet-1.8.3/data/anainfo/D0_2004_S5992206.info0000644000175000017500000000246312116077757016246 0ustar sunsunName: D0_2004_S5992206 Year: 2004 Summary: Run II jet azimuthal decorrelation analysis Experiment: D0 Collider: Tevatron Run 2 SpiresID: 5992206 Status: VALIDATED Authors: - Lars Sonnenschein References: - Phys. Rev. Lett., 94, 221801 (2005) - arXiv:hep-ex/0409040 RunInfo: QCD events in ppbar interactions at sqrt(s) = 1960 GeV. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: Correlations in the azimuthal angle between the two largest pT jets have been measured using the D0 detector in ppbar collisions at 1960~GeV. The analysis is based on an inclusive dijet event sample in the central rapidity region. The correlations are determined for four different pT intervals. BibKey: Abazov:2004hm BibTeX: '@Article{Abazov:2004hm, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of dijet azimuthal decorrelations at central rapidities in $p\bar{p}$ collisions at $\sqrt{s} = 1.96$ TeV}", journal = "Phys. Rev. Lett.", volume = "94", year = "2005", pages = "221801", eprint = "hep-ex/0409040", archivePrefix = "arXiv", doi = "10.1103/PhysRevLett.94.221801", SLACcitation = "%%CITATION = HEP-EX/0409040;%%" }' rivet-1.8.3/data/anainfo/STAR_2006_S6500200.info0000644000175000017500000000220412116077757016523 0ustar sunsunName: STAR_2006_S6500200 Year: 2006 Summary: Identified hadron spectra in pp at 200 GeV Experiment: STAR Collider: RHIC pp 200 GeV SpiresID: 6500200 Status: VALIDATED Authors: - Bedanga Mohanty - Hendrik Hoeth References: - Phys. Lett. B637, 161 - nucl-ex/0601033 RunInfo: pp at 200 GeV NumEvents: 2500000 Beams: [p+, p+] Energies: [200] PtCuts: [0] Description: pT distributions of charged pions and (anti)protons in pp collisions at $\sqrt{s} = 200$ GeV, measured by the STAR experiment at RHIC in non-single-diffractive minbias events. BibKey: Adams:2006nd BibTeX: '@Article{Adams:2006nd, author = "Adams, John and others", collaboration = "STAR", title = "{Identified hadron spectra at large transverse momentum in p + p and d + Au collisions at s(NN)**(1/2) = 200-GeV}", journal = "Phys. Lett.", volume = "B637", year = "2006", pages = "161-169", eprint = "nucl-ex/0601033", archivePrefix = "arXiv", doi = "10.1016/j.physletb.2006.04.032", SLACcitation = "%%CITATION = NUCL-EX/0601033;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2012_I1190891.info0000644000175000017500000000242312116077757016624 0ustar sunsunName: ATLAS_2012_I1190891 Year: 2012 Summary: 4 or more lepton plus missing transverse energy SUSY search Experiment: ATLAS Collider: LHC InspireID: 1190891 Status: UNVALIDATED Authors: - Peter Richardson References: - ATLAS-CONF-2012-001 - ATLAS-CONF-2012-035 - arXiv:1210.4457 RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] NeedCrossSection: yes Description: 'Search for R-parity violating SUSY using events with 4 or more leptons in association with missing transverse energy in proton-proton collisions at a centre-of-mass energy of 7 TeV. The data sample has a total integrated luminosity of 4.7 fb$^{-1}$.' BibTeX: '@article{Aad:2012kr, author = "Aad, Georges and others", title = "{Search for R-parity-violating supersymmetry in events with four or more leptons in sqrt(s) = 7 TeV pp collisions with the ATLAS detector}", collaboration = "ATLAS Collaboration", year = "2012", eprint = "1210.4457", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-276", SLACcitation = "%%CITATION = ARXIV:1210.4457;%%", }' rivet-1.8.3/data/anainfo/BABAR_2005_S6181155.info0000644000175000017500000000320312116077757016576 0ustar sunsunName: BABAR_2005_S6181155 Summary: Production and decay of $\Xi^0_c$ at BABAR. Status: VALIDATED Authors: - Peter Richardson References: - Phys.Rev.Lett. 95 (2005) 142003 - hep-ex/0504014 RunInfo: $e^+ e^-$ analysis on the $\Upsilon(4S)$ resonance, with CoM boost -- 8.0~GeV~($e^−$) and 3.5~GeV~($e^+$) NumEvents: 1000000 SpiresID: 6895344 Beams: [e+, e-] Energies: [[3.5, 8.0],[3.5,7.91]] PtCuts: [0] Description: Analysis of $\Xi_c^0$ production in B decays and from the $c\bar{c}$ continuum, with the $\Xi_c^0$ decaying into $\Omega^- K^+$ and $\Xi^- \pi^+$ final states measured using 116.1 $\text{fb}^{-1}$ of data collected by the BABAR detector. The normalisation of the data as been modifed from that presented in the original paper in order to produce a differential cross section rather than the cross section in each bin. In addition to the data presented in the paper plots are alos made with unit normalisation which can be more useful for Monte Carlo tuning. BibKey: Aubert:2005cu BibTeX: '@article{Aubert:2005cu, author = "Aubert, Bernard and others", title = "{Production and decay of $\Xi_c^0$ at BABAR}", collaboration = "BABAR Collaboration", journal = "Phys.Rev.Lett.", volume = "95", pages = "142003", doi = "10.1103/PhysRevLett.95.142003", year = "2005", eprint = "hep-ex/0504014", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "SLAC-PUB-11100, BABAR-PUB-05-008", SLACcitation = "%%CITATION = HEP-EX/0504014;%%", }' rivet-1.8.3/data/anainfo/OPAL_1998_S3702294.info0000644000175000017500000000235112116077757016551 0ustar sunsunName: OPAL_1998_S3702294 Year: 1998 Summary: Production of $f_0(980)$, $f_2(1270)$ and $\phi(1020)$ in hadronic $Z^0$ decay Experiment: OPAL Collider: LEP 1 SpiresID: 3702294 Status: VALIDATED Authors: - Peter Richardson References: - Eur.Phys.J.C4:19-28,1998 - hep-ex/9802013 RunInfo: Hadronic Z decay events generated on the Z pole (sqrt(s) = 91.2 GeV) NumEvents: 1000000 Beams: [e+, e-] Energies: [91.2] PtCuts: [0] Description: Inclusive production of the $f_0(980)$, $f_2(1270)$ and $\phi(1020)$ resonances studied in a sample of 4.3 million hadronic $Z^0$ decays from the OPAL experiment at LEP. Fragmentation functions are reported for the three states. BibKey: Ackerstaff:1998ue BibTeX: '@Article{Ackerstaff:1998ue, author = "Ackerstaff, K. and others", collaboration = "OPAL", title = "{Production of f0(980), f2(1270) and Phi(1020) in hadronic Z0 decay}", journal = "Eur. Phys. J.", volume = "C4", year = "1998", pages = "19-28", eprint = "hep-ex/9802013", archivePrefix = "arXiv", doi = "10.1007/s100520050183", SLACcitation = "%%CITATION = HEP-EX/9802013;%%" }' rivet-1.8.3/data/anainfo/MC_ZZKTSPLITTINGS.info0000644000175000017500000000076412116077757017077 0ustar sunsunName: MC_ZZKTSPLITTINGS Summary: Monte Carlo validation observables for $Z[e^+ \, e^-]Z[\mu^+ \, \mu^-]$ + jets production Status: VALIDATED Authors: - Frank Siegert References: RunInfo: $ZZ$ + jets analysis. Needs mass cut on lepton pairs to avoid photon singularity, e.g. a min range of $66 < m_{ee} < 116$ GeV NumEvents: 1000000 PtCuts: [0] Description: Monte Carlo validation observables for $Z[e^+ \, e^-]Z[\mu^+ \, \mu^-]$ + jets production NeedCrossSection: yes rivet-1.8.3/data/anainfo/D0_2008_S6879055.info0000644000175000017500000000254312116077757016260 0ustar sunsunName: D0_2008_S6879055 Year: 2008 Summary: Measurement of the ratio sigma($Z/\gamma^*$ + $n$ jets)/sigma($Z/\gamma^*$) Experiment: D0 Collider: Tevatron Run 2 SpiresID: 6879055 Status: VALIDATED Authors: - Giulio Lenzi - Frank Siegert References: - hep-ex/0608052 RunInfo: $p \bar{p} \to e^+ e^-$ + jets at 1960~GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $75 < m_{ee} < 105$ GeV. NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: Cross sections as a function of pT of the three leading jets and $n$-jet cross section ratios in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96 TeV, based on an integrated luminosity of $0.4~\text{fb}^{-1}$. BibKey: Abazov:2006gs BibTeX: '@Article{Abazov:2006gs, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the ratios of the Z/G* + >= n jet production cross sections to the total inclusive Z/G* cross section in ppbar collisions at sqrt(s) = 1.96 TeV}", journal = "Phys. Lett.", volume = "B658", year = "2008", pages = "112-119", eprint = "hep-ex/0608052", archivePrefix = "arXiv", doi = "10.1016/j.physletb.2007.10.046", SLACcitation = "%%CITATION = HEP-EX/0608052;%%" }' rivet-1.8.3/data/anainfo/CMS_2011_S8978280.info0000644000175000017500000000471712116077757016440 0ustar sunsunName: CMS_2011_S8978280 Year: 2011 Summary: Kshort, Lambda, and Cascade- transverse momentum and rapidity spectra from proton-proton collisions at 900 and 7000 GeV. Experiment: CMS Collider: LHC SpiresID: 8978280 Status: VALIDATED Authors: - Kevin Stenson References: - JHEP 05 (2011) 064 - doi:10.1007/JHEP05(2011)064 - arXiv:1102.4282 [hep-ex] RunInfo: Non-single-diffractive (NSD) events only. Should include double-diffractive (DD) events and non-diffractive (ND) events but NOT single-diffractive (SD) events. For example, in Pythia6 the SD processes to be turned off are 92 and 93, and in Pythia8 the SD processes are 103 and 104 (also called SoftQCD:singleDiffractive). NumEvents: 1000000 Beams: [p+, p+] Energies: [900, 7000] PtCuts: Description: The spectra of Kshort, Lambda, and Cascade- particles were measured versus transverse-momentum (pT) and rapidity(y) in proton-proton collisions at center-of-mass energies 900 and 7000 GeV. The production is normalized to all non-single-diffractive (NSD) events using corrections for trigger and selection efficiency, acceptance, and branching ratios. The results cover a rapidity range of |y|<2 and a pT range from 0 to 10 GeV (Kshort and Lambda) and 0 to 6 GeV (Cascade-). Antiparticles are included in all measurements so only the sum of Lambda and Lambdabar and Cascade- and anti-Cascade- are given. The rapidity distributions are shown versus |y| but normalized to a unit of y. Ratios of Lambda/Kshort and Cascade-/Lambda production versus pT and |y| are also given, with somewhat smaller systematic uncertainties than obtained from taking the ratio of the individual distributions.' The data were corrected according to the SD/DD/ND content of the CMS trigger, as predicted by pythia6. The uncertainties connected with correct or uncorrect modelling of diffraction were included in the systematic errors. BibKey: Khachatryan:2011tm BibTeX: '@Article{Khachatryan:2011tm, author = "Khachatryan, Vardan and others", collaboration = "CMS", title = "{Strange Particle Production in pp Collisions at sqrt(s) = 0.9 and 7 TeV}", journal = "JHEP", volume = "05", year = "2011", pages = "064", eprint = "1102.4282", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1007/JHEP05(2011)064", SLACcitation = "%%CITATION = 1102.4282;%%"}' ToDo: rivet-1.8.3/data/anainfo/ATLAS_2012_I1095236.info0000644000175000017500000000273712116077757016631 0ustar sunsunName: ATLAS_2012_I1095236 Year: 2011 Summary: b-jets search for supersymmetry with 0- and 1-leptons Experiment: ATLAS Collider: LHC InspireID: 1095236 Status: UNVALIDATED Authors: - Peter Richardson References: - arXiv:1203.6193 RunInfo: BSM signal events at 7000 GeV. NumEvents: 25000 for BSM signals Beams: [p+, p+] Energies: [7000] Description: 'Search for supersymmmetric particles by ATLAS at 7 TeV in events with b-jets, large missing energy, and zero or one leptons. Event counts in six zero lepton and two one lepton signal regions are implemented as one-bin histograms. Histograms for missing transverse energy, and effective mass are also implemented for some signal regions.' BibKey: ATLAS2012:1095236 BibTeX: '@article{ATLAS2012:1095236, author = "Aad, Georges and others", title = "{Search for supersymmetry in pp collisions at sqrt(s) = 7 TeV in final states with missing transverse momentum and b-jets with the ATLAS detector}", collaboration = "ATLAS Collaboration", year = "2012", note = "15 pages plus author list (28 pages total), 11 figures, 8 tables, submitted to Physical Review D", eprint = "1203.6193", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-052", SLACcitation = "%%CITATION = ARXIV:1203.6193;%%", }' rivet-1.8.3/data/anainfo/CDF_2009_S8383952.info0000644000175000017500000000241112116077757016402 0ustar sunsunName: CDF_2009_S8383952 Year: 2009 Summary: Z rapidity measurement Experiment: CDF Collider: Tevatron Run 2 SpiresID: 8383952 Status: VALIDATED Authors: - Frank Siegert References: - arXiv:0908.3914 [hep-ex] RunInfo: $p \bar{p} \to e^+ e^-$ + jets at 1960 GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $66 < m_{ee} < 116$ GeV NumEvents: 1000000 Beams: [p-, p+] Energies: [1960] PtCuts: [0] Description: CDF measurement of the total cross section and rapidity distribution, $\mathrm{d}\sigma/\mathrm{d}y$, for $q\bar{q}\to \gamma^{*}/Z\to e^{+}e^{-}$ events in the $Z$ boson mass region ($66 0.5 GeV (all tracks). Description: A measurement of the underlying activity in scattering processes with a hard scale in the several-GeV region is performed in proton-proton collisions at Energies of 0.9 and 7 TeV, using data collected by the CMS experiment at the LHC. The production of charged particles with pseudorapidity |eta| < 2 and transverse momentum pT > 0.5 GeV/c is studied in the azimuthal region transverse to that of the leading set of charged particles forming a track-jet. Various comparisons are made between the two different energies and also beteen two sets of cuts on pT for leading track jet pT-leading > 3 GeV and pT-leading > 20 GeV. The activity is studied using 5 types of plots. 2 profile plots for the multiplcity of charged particles and the scalar sum of pT. and 3 distributions for the two previous quantities as well we pT for all the particles in the transverse region. BibKey: Chatrchyan:2011id BibTeX: '@article{Chatrchyan:2011id, author = "Chatrchyan, Serguei and others", title = "{Measurement of the Underlying Event Activity at the LHC with sqrt(s)= 7 TeV and Comparison with sqrt(s) = 0.9 TeV}", collaboration = "CMS Collaboration", year = "2011", eprint = "1107.0330", archivePrefix = "arXiv", primaryClass = "hep-ex",}' rivet-1.8.3/data/anainfo/ATLAS_2011_I926145.info0000644000175000017500000000264212116077757016544 0ustar sunsunName: ATLAS_2011_I926145 Year: 2011 Summary: Measurement of electron and muon differential cross-section from heavy-flavour decays Experiment: ATLAS Collider: LHC SpiresID: 9185208 Status: VALIDATED Authors: - Paul Bell - Holger Schulz References: - CERN-PH-EP-2011-108 - arXiv:1109.0525 [hep-ex] RunInfo: pp to ele + X or mu + X at 7 TeV, heavy-flavour (bb and cc) production with B/D -> ele or muon NumEvents: 1000000 Beams: [p+, p+] Energies: [7000] PtCuts: Description: 'Measurement of inclusive electron and muon cross sections for $7 < \pT <26$~GeV in $|\eta| <2.0$, excluding $1.37<|\eta|<1.52$, and muon cross section for $4 < \pT < 100$~GeV in $|\eta| <2.50$. W/Z/gamma* component must be subtracted to leave the heavy flavour contribution.' NeedCrossSection: yes BibKey: Aad:2011rr BibTeX: '@article{Aad:2011rr, author = "Aad, Georges and others", title = "{Measurements of the electron and muon inclusive cross-sections in proton-proton collisions at sqrt(s) = 7 TeV with the ATLAS detector}", collaboration = "ATLAS Collaboration", year = "2011", eprint = "1109.0525", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-108", SLACcitation = "%%CITATION = ARXIV:1109.0525;%%", }' rivet-1.8.3/data/anainfo/H1_1995_S3167097.info0000644000175000017500000000266312116077757016277 0ustar sunsunName: H1_1995_S3167097 Year: 1995 Summary: Transverse energy and forward jet production in the low-$x$ regime at H1 Experiment: H1 Collider: HERA Run I SpiresID: 3167097 Status: UNVALIDATED Authors: - Leif Lonnblad References: - Phys.Lett.B356:118,1995 - hep-ex/9506012 RunInfo: 820~GeV protons colliding with 26.7~GeV electrons. DIS events with an outgoing electron energy $> 12~\text{GeV}$. $5~\text{GeV}^2 < Q^2 < 100~\text{GeV}^2$, $10^{-4} < x < 10^{-2}$. NumEvents: 1000000 Beams: [p+, e-] Energies: [[820, 26.7]] PtCuts: [0] Description: DIS events at low $x$ may be sensitive to new QCD dynamics such as BFKL or CCFM radiation. In particular, BFKL is expected to produce more radiation at high transverse energy in the rapidity span between the proton remnant and the struck quark jet. Performing a transverse energy sum in bins of $x$ and $\eta$ may distinguish between DGLAP and BFKL evolution. BibKey: Aid:1995we BibTeX: '@Article{Aid:1995we, author = "Aid, S. and others", collaboration = "H1", title = "{Transverse energy and forward jet production in the low x regime at HERA}", journal = "Phys. Lett.", volume = "B356", year = "1995", pages = "118-128", eprint = "hep-ex/9506012", archivePrefix = "arXiv", doi = "10.1016/0370-2693(95)00804-T", SLACcitation = "%%CITATION = HEP-EX/9506012;%%" }' rivet-1.8.3/data/anainfo/ATLAS_2011_S9212183.info0000644000175000017500000000221012116077757016624 0ustar sunsunName: ATLAS_2011_S9212183 Year: 2011 Summary: 0-lepton squark and gluino search Experiment: ATLAS Collider: LHC SpiresID: 9212183 Status: VALIDATED Authors: - Chris Wymant - David Grellscheid References: - arXiv:1109.6572 RunInfo: BSM signal events at 7000 GeV. NumEvents: 10000 for BSM signals Beams: [p+, p+] Energies: [7000] Description: '0-lepton search for squarks and gluinos by ATLAS at 7 TeV with an integrated luminosity of $1.04\,\mathrm{fb}^{-1}$. Event counts in five signal regions are implemented as one-bin histograms.' BibKey: Aad:2011ib BibTeX: '@article{Aad:2011ib, author = "Aad, Georges and others", title = "{Search for squarks and gluinos using final states with jets and missing transverse momentum with the ATLAS detector in $\sqrt{s}$ = 7 TeV proton-proton collisions}", collaboration = "ATLAS", year = "2011", note = "* Temporary entry *", eprint = "1109.6572", archivePrefix = "arXiv", primaryClass = "hep-ex", }' rivet-1.8.3/data/anainfo/MC_WWJETS.info0000644000175000017500000000111612116077757015667 0ustar sunsunName: MC_WWJETS Summary: Monte Carlo validation observables for $W^+[e^+ \, \nu]W^-[\mu^- \, \nu]$ + jets production Status: VALIDATED Authors: - Frank Siegert References: RunInfo: $WW$ + jets analysis. NumEvents: 1000000 PtCuts: [0] Description: In addition to the typical jet observables this analysis contains observables related to properties of the WW-pair momentum, correlations between the WW, properties of the W bosons, properties of the leptons, correlations between the opposite charge leptons and correlations with jets. NeedCrossSection: yes rivet-1.8.3/data/anainfo/BABAR_2007_S6895344.info0000644000175000017500000000266712116077757016631 0ustar sunsunName: BABAR_2007_S6895344 Summary: Inclusive $\Lambda_c^+$ Production in $e^+e^-$ Annihilation at $\sqrt{s}=10.54$ GeV and in $\Upsilon(4S)$ Decays. Status: VALIDATED Authors: - Peter Richardson References: - Phys.Rev. D75 (2007) 012003 - hep-ex/0609004 RunInfo: $e^+ e^-$ analysis on the $\Upsilon(4S)$ resonance, with CoM boost -- 8.0~GeV~($e^−$) and 3.5~GeV~($e^+$) NumEvents: 1000000 SpiresID: 6895344 Beams: [e+, e-] Energies: [[3.5, 8.0],[3.5,7.91]] PtCuts: [0] Description: Measurements of the total production rates and momentum distributions of the charmed baryon $\Lambda_c^+$ in $e^+e^- \to$ hadrons at a centre-of-mass energy of 10.54 GeV and in $\Upsilon(4S)$ decays. BibKey: Aubert:2006cp BibTeX: '@article{Aubert:2006cp, author = "Aubert, Bernard and others", title = "{Inclusive $\Lambda_c^+$ Production in $e^+ e^-$ Annihilations at $\sqrt{s}=10.54$ GeV and in $\Upsilon(4S)$ Decays}", collaboration = "BABAR Collaboration", journal = "Phys.Rev.", volume = "D75", pages = "012003", doi = "10.1103/PhysRevD.75.012003", year = "2007", eprint = "hep-ex/0609004", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "SLAC-PUB-12074, BABAR-PUB-06-054", SLACcitation = "%%CITATION = HEP-EX/0609004;%%", }' rivet-1.8.3/data/plotinfo/0000755000175000017500000000000012131473213013610 5ustar sunsunrivet-1.8.3/data/plotinfo/SFM_1984_S1178091.plot0000644000175000017500000000302012116077756016671 0ustar sunsun# BEGIN PLOT /SFM_1984_S1178091/d01-x01-y01 Title=Charged multiplicity at $\sqrt{s} = 30.4~\text{GeV}$ (inelastic events) XLabel=$N_\text{ch}$ YLabel=$\text{Probability}~(N_\text{ch})$ # END PLOT # BEGIN PLOT /SFM_1984_S1178091/d01-x01-y02 Title=Charged multiplicity at $\sqrt{s} = 44.5~\text{GeV}$ (inelastic events) XLabel=$N_\text{ch}$ YLabel=$\text{Probability}~(N_\text{ch})$ # END PLOT # BEGIN PLOT /SFM_1984_S1178091/d01-x01-y03 Title=Charged multiplicity at $\sqrt{s} = 52.6~\text{GeV}$ (inelastic events) XLabel=$N_\text{ch}$ YLabel=$\text{Probability}~(N_\text{ch})$ # END PLOT # BEGIN PLOT /SFM_1984_S1178091/d01-x01-y04 Title=Charged multiplicity at $\sqrt{s} = 62.2~\text{GeV}$ (inelastic events) XLabel=$N_\text{ch}$ YLabel=$\text{Probability}~(N_\text{ch})$ # END PLOT # BEGIN PLOT /SFM_1984_S1178091/d02-x01-y01 Title=Charged multiplicity at $\sqrt{s} = 30.4~\text{GeV}$ (NSD events) XLabel=$N_\text{ch}$ YLabel=$\text{Probability}~(N_\text{ch})$ # END PLOT # BEGIN PLOT /SFM_1984_S1178091/d02-x01-y02 Title=Charged multiplicity at $\sqrt{s} = 44.5~\text{GeV}$ (NSD events) XLabel=$N_\text{ch}$ YLabel=$\text{Probability}~(N_\text{ch})$ # END PLOT # BEGIN PLOT /SFM_1984_S1178091/d02-x01-y03 Title=Charged multiplicity at $\sqrt{s} = 52.6~\text{GeV}$ (NSD events) XLabel=$N_\text{ch}$ YLabel=$\text{Probability}~(N_\text{ch})$ # END PLOT # BEGIN PLOT /SFM_1984_S1178091/d02-x01-y04 Title=Charged multiplicity at $\sqrt{s} = 62.2~\text{GeV}$ (NSD events) XLabel=$N_\text{ch}$ YLabel=$\text{Probability}~(N_\text{ch})$ # END PLOT rivet-1.8.3/data/plotinfo/CDF_2008_S7540469.plot0000644000175000017500000000106012116077756016636 0ustar sunsun# BEGIN PLOT /CDF_2008_S7540469/d01-x01-y01 Title=Jet multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(N_{\text{jet}})$ XMajorTickMarks=10 XMinorTickMarks=0 # END PLOT # BEGIN PLOT /CDF_2008_S7540469/d02-x01-y01 Title=Jet $p_\perp$ for inclusive $N_{\text{jet}} \geq 1$ XLabel=$p_\perp$(jet) [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet})$ # END PLOT # BEGIN PLOT /CDF_2008_S7540469/d03-x01-y01 Title=Jet $p_\perp$ for inclusive $N_{\text{jet}} \geq 2$ XLabel=$p_\perp$(jet) [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet})$ # END PLOT rivet-1.8.3/data/plotinfo/MC_QCD_PARTONS.plot0000644000175000017500000000340312116077756016723 0ustar sunsun# BEGIN PLOT /MC_QCD_PARTONS/.* LegendAlign=r # END PLOT # BEGIN PLOT /MC_QCD_PARTONS/log10_R_0 Title=$\log_{10}$(Integrated $0$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{0}$ # END PLOT # BEGIN PLOT /MC_QCD_PARTONS/log10_R_1 Title=$\log_{10}$(Integrated $1$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{1}$ # END PLOT # BEGIN PLOT /MC_QCD_PARTONS/log10_R_2 Title=$\log_{10}$(Integrated $2$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{2}$ # END PLOT # BEGIN PLOT /MC_QCD_PARTONS/log10_R_3 Title=$\log_{10}$(Integrated $3$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{3}$ # END PLOT # BEGIN PLOT /MC_QCD_PARTONS/log10_R_4 Title=$\log_{10}$(Integrated $4$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{\geq4}$ # END PLOT # BEGIN PLOT /MC_QCD_PARTONS/log10_d_01 Title=$\log_{10}$($k_\perp$ jet resolution $0 \to 1$ [GeV]) XLabel=$\log_{10}(d_{01}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{01}/\text{GeV})$ [pb] # END PLOT # BEGIN PLOT /MC_QCD_PARTONS/log10_d_12 Title=$\log_{10}$($k_\perp$ jet resolution $1 \to 2$ [GeV]) XLabel=$\log_{10}(d_{12}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{12}/\text{GeV})$ [pb] # END PLOT # BEGIN PLOT /MC_QCD_PARTONS/log10_d_23 Title=$\log_{10}$($k_\perp$ jet resolution $2 \to 3$ [GeV]) XLabel=$\log_{10}(d_{23}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{23}/\text{GeV})$ [pb] # END PLOT # BEGIN PLOT /MC_QCD_PARTONS/log10_d_34 Title=$\log_{10}$($k_\perp$ jet resolution $3 \to 4$ [GeV]) XLabel=$\log_{10}(d_{34}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{34}/\text{GeV})$ [pb] # END PLOT rivet-1.8.3/data/plotinfo/MC_WWJETS.plot0000644000175000017500000001755312116077756016144 0ustar sunsun# BEGIN PLOT /MC_WWJETS/WW_jet1_dR Title=Separation between W boson pair and leading jet XLabel=$\Delta R(\text{WW, 1st jet})$ YLabel=$\text{d}\sigma/\text{d}\Delta R(\text{WW, 1st jet})$ [pb] LegendXPos=0.25 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_WWJETS/WW_jet1_deta Title= XLabel=$\Delta{\eta}(\text{WW, 1st jet})$ YLabel=$\text{d}\sigma/\text{d}\Delta{\eta}(\text{WW, 1st jet})$ [pb] # END PLOT # BEGIN PLOT /MC_WWJETS/We_jet1_dR Title=Separation between $e^+$ and leading jet XLabel=$\Delta R(e^+,\text{1st jet})$ YLabel=$\text{d}\sigma/\text{d}\Delta R(e^+,\text{1st jet})$ [pb] LegendXPos=0.25 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_WWJETS/jets_dphi_12 Title=Azimuthal decorrelation of leading and second leading jet XLabel=$\Delta{\phi}(\text{jet 1, jet 2})$ YLabel=$\text{d}\sigma/\text{d}\Delta{\phi}(\text{jet 1, jet 2})$ [pb] LegendXPos=0.10 LogY=0 # END PLOT # BEGIN PLOT /MC_WWJETS/jets_m_12 Title=Invariant mass of leading and second leading jet XLabel=$m_{12}$ [GeV] YLabel=$\text{d}\sigma/\text{d}m_{12}$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_WWJETS/HT Title=HT XLabel=$H_T$ [GeV] YLabel=$\text{d}\sigma/\text{d}H_T$ [pb/GeV] LogX=1 # END PLOT # BEGIN PLOT /MC_WWJETS/jets_dR_ Title=$\Delta R$ separation between jets LegendXPos=0.10 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_WWJETS/jets_dR_12 XLabel=$\Delta{R}(\text{jet 1, jet 2})$ YLabel=$\text{d}\sigma/\text{d}\Delta{R}(\text{jet 1, jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_WWJETS/jets_dR_13 XLabel=$\Delta{R}(\text{jet 1, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta{R}(\text{jet 1, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_WWJETS/jets_dR_23 XLabel=$\Delta{R}(\text{jet 2, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta{R}(\text{jet 2, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_WWJETS/jets_deta_ Title=Pseudorapidity separation between jets LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_WWJETS/jets_deta_12 XLabel=$\Delta\eta(\text{jet 1, jet 2})$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta(\text{jet 1, jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_WWJETS/jets_deta_13 XLabel=$\Delta\eta(\text{jet 1, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta(\text{jet 1, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_WWJETS/jets_deta_23 XLabel=$\Delta\eta(\text{jet 2, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta(\text{jet 2, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_WWJETS/jets_dphi_ Title=Pseudorapidity separation between jets LegendXPos=0.1 # END PLOT # BEGIN PLOT /MC_WWJETS/jets_dphi_12 XLabel=$\Delta\phi(\text{jet 1, jet 2})$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi(\text{jet 1, jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_WWJETS/jets_dphi_13 XLabel=$\Delta\phi(\text{jet 1, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi(\text{jet 1, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_WWJETS/jets_dphi_23 XLabel=$\Delta\phi(\text{jet 2, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi(\text{jet 2, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_WWJETS/jet_eta_1 Title=Pseudorapidity of leading jet XLabel=$\eta(\text{jet 1})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 1})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_WWJETS/jet_eta_2 Title=Pseudorapidity of second jet XLabel=$\eta(\text{jet 2})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 2})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_WWJETS/jet_eta_3 Title=Pseudorapidity of third jet XLabel=$\eta(\text{jet 3})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 3})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_WWJETS/jet_eta_4 Title=Pseudorapidity of fourth jet XLabel=$\eta(\text{jet 4})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 4})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_WWJETS/jet_eta_pmratio_1 Title=Pseudorapidity $+/-$ ratio of first jet XLabel=$\eta(\text{jet 1})_+/\eta(\text{jet 1})_-$ YLabel=$|\eta(\text{jet 1}|$ # END PLOT # BEGIN PLOT /MC_WWJETS/jet_eta_pmratio_2 Title=Pseudorapidity $+/-$ ratio of second jet XLabel=$\eta(\text{jet 2})_+/\eta(\text{jet 2})_-$ YLabel=$|\eta(\text{jet 2}|$ # END PLOT # BEGIN PLOT /MC_WWJETS/jet_eta_pmratio_3 Title=Pseudorapidity $+/-$ ratio of third jet XLabel=$\eta(\text{jet 3})_+/\eta(\text{jet 3})_-$ YLabel=$|\eta(\text{jet 3}|$ # END PLOT # BEGIN PLOT /MC_WWJETS/jet_eta_pmratio_4 Title=Pseudorapidity $+/-$ ratio of fourth jet XLabel=$\eta(\text{jet 4})_+/\eta(\text{jet 4})_-$ YLabel=$|\eta(\text{jet 4}|$ # END PLOT # BEGIN PLOT /MC_WWJETS/jet_y_1 Title=Rapidity of first jet XLabel=$y(\text{jet 1})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 1})$ [pb] # END PLOT # BEGIN PLOT /MC_WWJETS/jet_y_2 Title=Rapidity of second jet XLabel=$y(\text{jet 2})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_WWJETS/jet_y_3 Title=Rapidity of third jet XLabel=$y(\text{jet 3})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_WWJETS/jet_y_4 Title=Rapidity of fourth jet XLabel=$y(\text{jet 4})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 4})$ [pb] # END PLOT # BEGIN PLOT /MC_WWJETS/jet_y_pmratio_1 Title=Rapidity $+/-$ ratio of first jet XLabel=$y(\text{jet 1})_+/y(\text{jet 1})_-$ YLabel=$|y(\text{jet 1}|$ # END PLOT # BEGIN PLOT /MC_WWJETS/jet_y_pmratio_2 Title=Rapidity $+/-$ ratio of second jet XLabel=$y(\text{jet 2})_+/y(\text{jet 2})_-$ YLabel=$|y(\text{jet 2}|$ # END PLOT # BEGIN PLOT /MC_WWJETS/jet_y_pmratio_3 Title=Rapidity $+/-$ ratio of third jet XLabel=$y(\text{jet 3})_+/y(\text{jet 3})_-$ YLabel=$|y(\text{jet 3}|$ # END PLOT # BEGIN PLOT /MC_WWJETS/jet_y_pmratio_4 Title=Rapidity $+/-$ ratio of fourth jet XLabel=$y(\text{jet 4})_+/y(\text{jet 4})_-$ YLabel=$|y(\text{jet 4}|$ # END PLOT # BEGIN PLOT /MC_WWJETS/jet_mass_1 Title=Mass of first jet XLabel=$m(\text{jet 1})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 1})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_WWJETS/jet_mass_2 Title=Mass of second jet XLabel=$m(\text{jet 2})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 2})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_WWJETS/jet_mass_3 Title=Mass of third jet XLabel=$m(\text{jet 3})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 3})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_WWJETS/jet_mass_4 Title=Mass of fourth jet XLabel=$m(\text{jet 4})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 4})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_WWJETS/jet_multi_exclusive Title=Exclusive jet multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(N_{\text{jet}})$ [pb] XMajorTickMarks=10 XMinorTickMarks=0 ErrorBands=1 # END PLOT # BEGIN PLOT /MC_WWJETS/jet_multi_inclusive Title=Inclusive jet multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(\geq N_{\text{jet}})$ [pb] XMajorTickMarks=10 XMinorTickMarks=0 ErrorBands=1 # END PLOT # BEGIN PLOT /MC_WWJETS/jet_multi_ratio Title=Ratio of jet multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(\geq N_{\text{jet}})/\sigma(\geq N_{\text{jet}}-1)$ XMajorTickMarks=10 XMinorTickMarks=0 LogY=0 ErrorBands=1 # END PLOT # BEGIN PLOT /MC_WWJETS/jet_pT_1 Title=Transverse momentum of leading jet XLabel=$p_\perp(\text{jet 1})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 1})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_WWJETS/jet_pT_2 Title=Transverse momentum of second jet XLabel=$p_\perp(\text{jet 2})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 2})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_WWJETS/jet_pT_3 Title=Transverse momentum of third jet XLabel=$p_\perp(\text{jet 3})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 3})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_WWJETS/jet_pT_4 Title=Transverse momentum of fourth jet XLabel=$p_\perp(\text{jet 4})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 4})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_WWJETS/jet_HT Title=Scalar sum of jet transverse momenta (HT) XLabel=$HT$ [GeV] YLabel=$\text{d}\sigma/\text{d}HT$ [pb/GeV] LogX=1 # END PLOT rivet-1.8.3/data/plotinfo/CDF_2008_S7782535.plot0000644000175000017500000000130512116077756016642 0ustar sunsun# BEGIN PLOT /CDF_2008_S7782535/d01-x02-y01 Title=Integral jet shape $\Psi$ for $52 < p_\perp < 80$ XLabel=r/R YLabel=$\Psi$(r/R) # END PLOT # BEGIN PLOT /CDF_2008_S7782535/d02-x02-y01 Title=Integral jet shape $\Psi$ for $80 < p_\perp < 104$ XLabel=r/R YLabel=$\Psi$(r/R) # END PLOT # BEGIN PLOT /CDF_2008_S7782535/d03-x02-y01 Title=Integral jet shape $\Psi$ for $104 < p_\perp < 142$ XLabel=r/R YLabel=$\Psi$(r/R) # END PLOT # BEGIN PLOT /CDF_2008_S7782535/d04-x02-y01 Title=Integral jet shape $\Psi$ for $142 < p_\perp < 300$ XLabel=r/R YLabel=$\Psi$(r/R) # END PLOT # BEGIN PLOT /CDF_2008_S7782535/d05-x01-y01 Title=$1 - \Psi$ vs jet $p_\perp$ XLabel=$p_\perp$ [GeV] YLabel=1-$\Psi$(0.2/R) # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2010_S8918562.plot0000644000175000017500000002420312116077756017107 0ustar sunsun# BEGIN PLOT /ATLAS_2010_S8918562/d16-x01-y01 Title=Charged multiplicity $\ge 1$ at 2360\,GeV, track $p_\perp > 500\,\text{MeV}$ LogY=1 FullRange=1 XLabel=$N_\text{ch}$ YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d09-x01-y01 Title=Charged particle $p_\perp$ at 2360\,GeV, track $p_\perp > 500\,\text{MeV}$, for $N_\text{ch} \ge 1$ LogY=1 LogX=1 XLabel=$p_\perp$ \; [GeV] YLabel=$1/N_\text{ev} \, 1/2\pi{}p_\perp \, \mathrm{d}\sigma/\mathrm{d}\eta\mathrm{d}p_\perp$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d02-x01-y01 Title=Charged particle $\eta$ at 2360\,GeV, track $p_\perp > 500\,\text{MeV}$, for $N_\text{ch} \ge 1$ LogY=0 XLabel=$\eta$ YLabel=$1/N_\text{ev} \, \mathrm{d}N_\text{ch}/\mathrm{d}\eta$ LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d19-x01-y01 Title=Charged multiplicity $\ge 2$ at 7\,TeV, track $p_\perp > 100\,\text{MeV}$ LogY=1 FullRange=1 XLabel=$N_\text{ch}$ YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d12-x01-y01 Title=Charged particle $p_\perp$ at 7\,TeV, track $p_\perp > 100\,\text{MeV}$, for $N_\text{ch} \ge 2$ LogY=1 LogX=1 XLabel=$p_\perp$ \; [GeV] YLabel=$1/N_\text{ev} \, 1/2\pi{}p_\perp \, \mathrm{d}\sigma/\mathrm{d}\eta\mathrm{d}p_\perp$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d05-x01-y01 Title=Charged particle $\eta$ at 7\,TeV, track $p_\perp > 100\,\text{MeV}$, for $N_\text{ch} \ge 2$ LogY=0 XLabel=$\eta$ YLabel=$1/N_\text{ev} \, \mathrm{d}N_\text{ch}/\mathrm{d}\eta$ LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d25-x01-y01 Title=Charged $\langle p_\perp \rangle$ vs. $N_\text{ch}$ at 7\,TeV, track $p_\perp > 100\,\text{MeV}$, for $N_\text{ch} \ge 2$ LogY=0 XLabel=$N_\text{ch}$ YLabel=$\langle p_\perp \rangle$ \; [GeV] LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d35-x01-y01 Title=Charged multiplicity $\ge 20$ at 7\,TeV, track $p_\perp > 100\,\text{MeV}$ LogY=1 FullRange=1 XLabel=$N_\text{ch}$ YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d31-x01-y01 Title=Charged particle $p_\perp$ at 7\,TeV, track $p_\perp > 100\,\text{MeV}$, for $N_\text{ch} \ge 20$ LogY=1 LogX=1 XLabel=$p_\perp$ \; [GeV] YLabel=$1/N_\text{ev} \, 1/2\pi{}p_\perp \, \mathrm{d}\sigma/\mathrm{d}\eta\mathrm{d}p_\perp$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d27-x01-y01 Title=Charged particle $\eta$ at 7\,TeV, track $p_\perp > 100\,\text{MeV}$, for $N_\text{ch} \ge 20$ LogY=0 XLabel=$\eta$ YLabel=$1/N_\text{ev} \, \mathrm{d}N_\text{ch}/\mathrm{d}\eta$ LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d37-x01-y01 Title=Charged multiplicity $\ge 1$ at 7\,TeV, track $p_\perp > 2500\,\text{MeV}$ LogY=1 FullRange=1 XLabel=$N_\text{ch}$ YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d33-x01-y01 Title=Charged particle $p_\perp$ at 7\,TeV, track $p_\perp > 2500\,\text{MeV}$, for $N_\text{ch} \ge 1$ LogY=1 LogX=1 XLabel=$p_\perp$ \; [GeV] YLabel=$1/N_\text{ev} \, 1/2\pi{}p_\perp \, \mathrm{d}\sigma/\mathrm{d}\eta\mathrm{d}p_\perp$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d29-x01-y01 Title=Charged particle $\eta$ at 7\,TeV, track $p_\perp > 2500\,\text{MeV}$, for $N_\text{ch} \ge 1$ LogY=0 XLabel=$\eta$ YLabel=$1/N_\text{ev} \, \mathrm{d}N_\text{ch}/\mathrm{d}\eta$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d39-x01-y01 Title=Charged $\langle p_\perp \rangle$ vs. $N_\text{ch}$ at 7\,TeV, track $p_\perp > 2500\,\text{MeV}$, for $N_\text{ch} \ge 1$ LogY=0 XLabel=$N_\text{ch}$ YLabel=$\langle p_\perp \rangle$ \; [GeV] LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d17-x01-y01 Title=Charged multiplicity $\ge 1$ at 7\,TeV, track $p_\perp > 500\,\text{MeV}$ LogY=1 FullRange=1 XLabel=$N_\text{ch}$ YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d10-x01-y01 Title=Charged particle $p_\perp$ at 7\,TeV, track $p_\perp > 500\,\text{MeV}$, for $N_\text{ch} \ge 1$ LogY=1 LogX=1 XLabel=$p_\perp$ \; [GeV] YLabel=$1/N_\text{ev} \, 1/2\pi{}p_\perp \, \mathrm{d}\sigma/\mathrm{d}\eta\mathrm{d}p_\perp$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d03-x01-y01 Title=Charged particle $\eta$ at 7\,TeV, track $p_\perp > 500\,\text{MeV}$, for $N_\text{ch} \ge 1$ LogY=0 XLabel=$\eta$ YLabel=$1/N_\text{ev} \, \mathrm{d}N_\text{ch}/\mathrm{d}\eta$ LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d23-x01-y01 Title=Charged $\langle p_\perp \rangle$ vs. $N_\text{ch}$ at 7\,TeV, track $p_\perp > 500\,\text{MeV}$, for $N_\text{ch} \ge 1$ LogY=0 XLabel=$N_\text{ch}$ YLabel=$\langle p_\perp \rangle$ \; [GeV] LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d21-x01-y01 Title=Charged multiplicity $\ge 6$ at 7\,TeV, track $p_\perp > 500\,\text{MeV}$ LogY=1 FullRange=1 XLabel=$N_\text{ch}$ YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d14-x01-y01 Title=Charged particle $p_\perp$ at 7\,TeV, track $p_\perp > 500\,\text{MeV}$, for $N_\text{ch} \ge 6$ LogY=1 LogX=1 XLabel=$p_\perp$ \; [GeV] YLabel=$1/N_\text{ev} \, 1/2\pi{}p_\perp \, \mathrm{d}\sigma/\mathrm{d}\eta\mathrm{d}p_\perp$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d07-x01-y01 Title=Charged particle $\eta$ at 7\,TeV, track $p_\perp > 500\,\text{MeV}$, for $N_\text{ch} \ge 6$ LogY=0 XLabel=$\eta$ YLabel=$1/N_\text{ev} \, \mathrm{d}N_\text{ch}/\mathrm{d}\eta$ LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d18-x01-y01 Title=Charged multiplicity $\ge 2$ at 900\,GeV, track $p_\perp > 100\,\text{MeV}$ LogY=1 FullRange=1 XLabel=$N_\text{ch}$ YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d11-x01-y01 Title=Charged particle $p_\perp$ at 900\,GeV, track $p_\perp > 100\,\text{MeV}$, for $N_\text{ch} \ge 2$ LogY=1 LogX=1 XLabel=$p_\perp$ \; [GeV] YLabel=$1/N_\text{ev} \, 1/2\pi{}p_\perp \, \mathrm{d}\sigma/\mathrm{d}\eta\mathrm{d}p_\perp$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d04-x01-y01 Title=Charged particle $\eta$ at 900\,GeV, track $p_\perp > 100\,\text{MeV}$, for $N_\text{ch} \ge 2$ LogY=0 XLabel=$\eta$ YLabel=$1/N_\text{ev} \, \mathrm{d}N_\text{ch}/\mathrm{d}\eta$ LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d24-x01-y01 Title=Charged $\langle p_\perp \rangle$ vs. $N_\text{ch}$ at 900\,GeV, track $p_\perp > 100\,\text{MeV}$, for $N_\text{ch} \ge 2$ LogY=0 XLabel=$N_\text{ch}$ YLabel=$\langle p_\perp \rangle$ \; [GeV] LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d34-x01-y01 Title=Charged multiplicity $\ge 20$ at 900\,GeV, track $p_\perp > 100\,\text{MeV}$ LogY=1 FullRange=1 XLabel=$N_\text{ch}$ YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d30-x01-y01 Title=Charged particle $p_\perp$ at 900\,GeV, track $p_\perp > 100\,\text{MeV}$, for $N_\text{ch} \ge 20$ LogY=1 LogX=1 XLabel=$p_\perp$ \; [GeV] YLabel=$1/N_\text{ev} \, 1/2\pi{}p_\perp \, \mathrm{d}\sigma/\mathrm{d}\eta\mathrm{d}p_\perp$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d26-x01-y01 Title=Charged particle $\eta$ at 900\,GeV, track $p_\perp > 100\,\text{MeV}$, for $N_\text{ch} \ge 20$ LogY=0 XLabel=$\eta$ YLabel=$1/N_\text{ev} \, \mathrm{d}N_\text{ch}/\mathrm{d}\eta$ LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d36-x01-y01 Title=Charged multiplicity $\ge 1$ at 900\,GeV, track $p_\perp > 2500\,\text{MeV}$ LogY=1 FullRange=1 XLabel=$N_\text{ch}$ YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d32-x01-y01 Title=Charged particle $p_\perp$ at 900\,GeV, track $p_\perp > 2500\,\text{MeV}$, for $N_\text{ch} \ge 1$ LogY=1 LogX=1 XLabel=$p_\perp$ \; [GeV] YLabel=$1/N_\text{ev} \, 1/2\pi{}p_\perp \, \mathrm{d}\sigma/\mathrm{d}\eta\mathrm{d}p_\perp$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d28-x01-y01 Title=Charged particle $\eta$ at 900\,GeV, track $p_\perp > 2500\,\text{MeV}$, for $N_\text{ch} \ge 1$ LogY=0 XLabel=$\eta$ YLabel=$1/N_\text{ev} \, \mathrm{d}N_\text{ch}/\mathrm{d}\eta$ LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d38-x01-y01 Title=Charged $\langle p_\perp \rangle$ vs. $N_\text{ch}$ at 900\,GeV, track $p_\perp > 2500\,\text{MeV}$, for $N_\text{ch} \ge 1$ LogY=0 XLabel=$N_\text{ch}$ YLabel=$\langle p_\perp \rangle$ \; [GeV] LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d15-x01-y01 Title=Charged multiplicity $\ge 1$ at 900\,GeV, track $p_\perp > 500\,\text{MeV}$ LogY=1 FullRange=1 XLabel=$N_\text{ch}$ YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d08-x01-y01 Title=Charged particle $p_\perp$ at 900\,GeV, track $p_\perp > 500\,\text{MeV}$, for $N_\text{ch} \ge 1$ LogY=1 LogX=1 XLabel=$p_\perp$ \; [GeV] YLabel=$1/N_\text{ev} \, 1/2\pi{}p_\perp \, \mathrm{d}\sigma/\mathrm{d}\eta\mathrm{d}p_\perp$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d01-x01-y01 Title=Charged particle $\eta$ at 900\,GeV, track $p_\perp > 500\,\text{MeV}$, for $N_\text{ch} \ge 1$ LogY=0 XLabel=$\eta$ YLabel=$1/N_\text{ev} \, \mathrm{d}N_\text{ch}/\mathrm{d}\eta$ LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d22-x01-y01 Title=Charged $\langle p_\perp \rangle$ vs. $N_\text{ch}$ at 900\,GeV, track $p_\perp > 500\,\text{MeV}$, for $N_\text{ch} \ge 1$ LogY=0 XLabel=$N_\text{ch}$ YLabel=$\langle p_\perp \rangle$ \; [GeV] LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d20-x01-y01 Title=Charged multiplicity $\ge 6$ at 900\,GeV, track $p_\perp > 500\,\text{MeV}$ LogY=1 FullRange=1 XLabel=$N_\text{ch}$ YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d13-x01-y01 Title=Charged particle $p_\perp$ at 900\,GeV, track $p_\perp > 500\,\text{MeV}$, for $N_\text{ch} \ge 6$ LogY=1 LogX=1 FullRange=1 XLabel=$p_\perp$ \; [GeV] YLabel=$1/N_\text{ev} \, 1/2\pi{}p_\perp \, \mathrm{d}\sigma/\mathrm{d}\eta\mathrm{d}p_\perp$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8918562/d06-x01-y01 Title=Charged particle $\eta$ at 900\,GeV, track $p_\perp > 500\,\text{MeV}$, for $N_\text{ch} \ge 6$ LogY=0 XLabel=$\eta$ YLabel=$1/N_\text{ev} \, \mathrm{d}N_\text{ch}/\mathrm{d}\eta$ LegendYPos=0.4 # END PLOT rivet-1.8.3/data/plotinfo/CDF_2009_S8233977.plot0000644000175000017500000000144312116077756016650 0ustar sunsun# BEGIN PLOT /CDF_2009_S8233977/d01-x01-y01 Title=track $p_T$, $|\eta|<1$, $p_\perp > 0.4$ GeV XLabel=$p_T$ / GeV YLabel=$\text{d}^3 \sigma / p_T \text{d}p_T \text{d}y \text{d}\phi$ / (mb/GeV$^2$) YLabelSep=5.5 LogX=1 LogY=1 FullRange=1 # END PLOT # BEGIN HISTOGRAM /CDF_2009_S8233977/d01-x01-y01 ErrorBars=0 # END HISTOGRAM # BEGIN PLOT /CDF_2009_S8233977/d02-x01-y01 Title=Mean track $p_T$ vs multiplicity, $|\eta|<1$, $p_\perp > 0.4$ GeV XLabel=$N_\text{ch}$ YLabel=$\langle p_T \rangle$ / GeV LegendXPos=0.10 LogY=0 ShowZero=0 # END PLOT # BEGIN PLOT /CDF_2009_S8233977/d03-x01-y01 Title=$\sum E_T$, $|\eta|<1$ XLabel=$\sum E_T$ / GeV YLabel=$\text{d}^3 \sigma / \text{d}E_T \text{d}\eta \text{d}\phi$ / (mb/GeV) YLabelSep=5.5 LegendXPos=0.10 LegendYPos=0.85 LogX=1 LogY=1 FullRange=1 # END PLOT rivet-1.8.3/data/plotinfo/CMS_2011_S8950903.plot0000644000175000017500000000145012116077756016660 0ustar sunsun# BEGIN PLOT /CMS_2011_S8950903/d.* XLabel=$\Delta\phi$ [rad] YLabel=$\frac{1}{\sigma}\frac{d\sigma}{d\Delta\phi}$ [rad$^{-1}$] FullRange=1 LogY=1 LegendXPos=0.1 # END PLOT # BEGIN PLOT /CMS_2011_S8950903/d01-x01-y01 Title=Di-jet azimuthal decorrelation, $80300$~GeV # END PLOT rivet-1.8.3/data/plotinfo/CDF_2009_S8383952.plot0000644000175000017500000000060312116077756016644 0ustar sunsun# BEGIN PLOT /CDF_2009_S8383952/d01-x01-y01 Title=Total XS for $66 < M_{ee}/\mathrm{GeV} < 116$ XLabel=$\sqrt{s}$ YLabel=$\sigma$ [pb] LogY=0 XMajorTickMarks=20 XMinorTickMarks=0 YMin=150 YMax=350 XMin=1955 XMax=1965 # END PLOT # BEGIN PLOT /CDF_2009_S8383952/d02-x01-y01 Title=$e^+ e^-$ pair rapidity XLabel=$|y_{e^+ e^-}|$ YLabel=$\mathrm{d}\sigma/\mathrm{d}y$ [pb] LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/UA5_1987_S1640666.plot0000644000175000017500000000057212116077756016654 0ustar sunsun# BEGIN PLOT /UA5_1987_S1640666/d01-x01-y01 Title=Mean charged multiplicity at $\sqrt{s} = 546~\text{GeV}$, $|\eta| < 5.0$ XLabel=$\text{GeV}$ YLabel=$N_\text{ch}$ # END PLOT # BEGIN PLOT /UA5_1987_S1640666/d03-x01-y01 Title=Charged multiplicity at $\sqrt{s} = 546~\text{GeV}$, $|\eta| < 5.0$ XLabel=$N_\text{ch}$ YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{N_\text{ch}}$ # END PLOT rivet-1.8.3/data/plotinfo/MC_PHOTONS.plot0000644000175000017500000000476012116077756016247 0ustar sunsun# BEGIN PLOT /MC_PHOTONS/Ptgamma Title=Photon $p_\perp$ XLabel=$p_\perp^\gamma$ [GeV] #YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}p_\perp^\gamma$ [GeV$^{-1}$] # END PLOT # BEGIN PLOT /MC_PHOTONS/Egamma Title=Photon energy XLabel=$E_\gamma$ [GeV] #YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}E_\gamma$ [GeV$^{-1}$] # END PLOT # BEGIN PLOT /MC_PHOTONS/sumPtgamma Title=Scalar sum of photon $p_\perp$ XLabel=$\sum{p_\perp^\gamma}$ [GeV] YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}\sum{p_\perp^\gamma}$ [GeV$^{-1}$] # END PLOT # BEGIN PLOT /MC_PHOTONS/sumEgamma Title=Sum of photon energies XLabel=$\sum{E_\gamma}$ [GeV] YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}\sum{E_\gamma}$ [GeV$^{-1}$] # END PLOT # BEGIN PLOT /MC_PHOTONS/DeltaR Title=$\Delta{R}$ between photons and associated leptons XLabel=$\Delta{R}$ #YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}\Delta{R}$ # END PLOT # BEGIN PLOT /MC_PHOTONS/DeltaR_ptweighted Title=$p_\perp$-weighted $\Delta{R}$ between photons and associated leptons XLabel=$\Delta{R}$ #YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}\Delta{R}$ # END PLOT # BEGIN PLOT /MC_PHOTONS/DeltaR_R Title=Phase-space weighted $\Delta{R}$ between photons and associated leptons XLabel=$\Delta{R}$ #YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}\Delta{R}$ # END PLOT # BEGIN PLOT /MC_PHOTONS/DeltaR_R_ptweighted Title=Phase-space \& $p_\perp$-weighted $\Delta{R}$ between photons and associated leptons XLabel=$\Delta{R}$ #YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}\Delta{R}$ # END PLOT # BEGIN PLOT /MC_PHOTONS/.*_vs_pTlep XLabel=Lepton $p_\perp$ [GeV] # END PLOT # BEGIN PLOT /MC_PHOTONS/DeltaR_vs_pTlep Title=$\Delta{R}_{\gamma\ell}$ vs. lepton $p_\perp$ YLabel=$\langle\Delta{R}_{\gamma\ell}\rangle$ # END PLOT # BEGIN PLOT /MC_PHOTONS/DeltaR_ptweighted_vs_pTlep Title=$p_\perp$-weighted $\Delta{R}_{\gamma\ell}$ vs. lepton $p_\perp$ YLabel=$\langle\text{Weighted}\quad\Delta{R}_{\gamma\ell}\rangle$ # END PLOT # BEGIN PLOT /MC_PHOTONS/DeltaR_R_ptweighted_vs_pTlep Title=$1/R$-weighted $\Delta{R}_{\gamma\ell}$ vs. lepton $p_\perp$ YLabel=$\langle\text{Weighted}\quad\Delta{R}_{\gamma\ell}\rangle$ # END PLOT # BEGIN PLOT /MC_PHOTONS/DeltaR_R_ptweighted_vs_pTlep Title=$p_\perp/R$-weighted $\Delta{R}_{\gamma\ell}$ vs. lepton $p_\perp$ YLabel=$\langle\text{Weighted}\quad\Delta{R}_{\gamma\ell}\rangle$ # END PLOT # BEGIN PLOT /MC_PHOTONS/sumPtGamma_vs_pTlep Title=Scalar $\sum{p_\perp}^\gamma$ vs. associated lepton $p_\perp$ YLabel=$\langle\sum{p_\perp}^\gamma\rangle$ [GeV] # END PLOT rivet-1.8.3/data/plotinfo/STAR_2008_S7993412.plot0000644000175000017500000000050312116077756017014 0ustar sunsun# BEGIN PLOT /STAR_2008_S7993412/d01-x01-y01 Title=Jet yield vs $p_T^\text{trigger}$ XLabel=$p_T^\text{trigger}$/GeV YLabel=$Y_\text{jet}$ # END PLOT # BEGIN PLOT /STAR_2008_S7993412/d02-x01-y01 Title=Jet yield vs $p_T^\text{associated}$ XLabel=$p_T^\text{associated}$/GeV YLabel=$1/p_T \, dY_\text{jet}/dp_T$ # END PLOT rivet-1.8.3/data/plotinfo/D0_2010_S8566488.plot0000644000175000017500000000242112116077756016512 0ustar sunsun# BEGIN PLOT /D0_2010_S8566488/d01-x01-y01 Title=Dijet invariant mass for $|y|_\mathrm{max}<0.4$ XLabel=$M_{jj}$ [TeV] YLabel=$\mathrm{d}^2\sigma/\mathrm{d}M_{jj}\,\mathrm{d}|y|_\mathrm{max}$ [pb/TeV] # END PLOT # BEGIN PLOT /D0_2010_S8566488/d02-x01-y01 Title=Dijet invariant mass for $0.4<|y|_\mathrm{max}<0.8$ XLabel=$M_{jj}$ [TeV] YLabel=$\mathrm{d}^2\sigma/\mathrm{d}M_{jj}\,\mathrm{d}|y|_\mathrm{max}$ [pb/TeV] # END PLOT # BEGIN PLOT /D0_2010_S8566488/d03-x01-y01 Title=Dijet invariant mass for $0.8<|y|_\mathrm{max}<1.2$ XLabel=$M_{jj}$ [TeV] YLabel=$\mathrm{d}^2\sigma/\mathrm{d}M_{jj}\,\mathrm{d}|y|_\mathrm{max}$ [pb/TeV] # END PLOT # BEGIN PLOT /D0_2010_S8566488/d04-x01-y01 Title=Dijet invariant mass for $1.2<|y|_\mathrm{max}<1.6$ XLabel=$M_{jj}$ [TeV] YLabel=$\mathrm{d}^2\sigma/\mathrm{d}M_{jj}\,\mathrm{d}|y|_\mathrm{max}$ [pb/TeV] # END PLOT # BEGIN PLOT /D0_2010_S8566488/d05-x01-y01 Title=Dijet invariant mass for $1.6<|y|_\mathrm{max}<2.0$ XLabel=$M_{jj}$ [TeV] YLabel=$\mathrm{d}^2\sigma/\mathrm{d}M_{jj}\,\mathrm{d}|y|_\mathrm{max}$ [pb/TeV] # END PLOT # BEGIN PLOT /D0_2010_S8566488/d06-x01-y01 Title=Dijet invariant mass for $2.0<|y|_\mathrm{max}<2.4$ XLabel=$M_{jj}$ [TeV] YLabel=$\mathrm{d}^2\sigma/\mathrm{d}M_{jj}\,\mathrm{d}|y|_\mathrm{max}$ [pb/TeV] # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_S8971293.plot0000644000175000017500000000474512116077756017121 0ustar sunsun# BEGIN PLOT /ATLAS_2011_S8971293/d01-x01-y01 Title=Dijet azimuthal decorrelations for $110800$ XLabel=$\Delta\phi$ [rad/$\pi$] YLabel=$1/\sigma\;\mathrm{d}\sigma/\mathrm{d}\Delta\phi$ [$\pi$/rad] RatioPlotYMin=0.0 RatioPlotYMax=2.0 XMin=0.5 XMax=1.0 # END PLOT rivet-1.8.3/data/plotinfo/LHCF_2012_I1115479.plot0000644000175000017500000000144112116077756016733 0ustar sunsun# BEGIN PLOT /LHCF_2012_I1115479/d0 XLabel=$p_\perp$ [GeV] YLabel=$1/\sigma_\text{inel}$ $E \mathrm{d}^3\sigma/\mathrm{d}p^3$ [GeV$^{-2}$] # END PLOT # BEGIN PLOT /LHCF_2012_I1115479/d01-x01-y01 Title=$\pi^0$ $p_\perp$ spectrum, $8.9 < y < 9.0$ # END PLOT # BEGIN PLOT /LHCF_2012_I1115479/d02-x01-y01 Title=$\pi^0$ $p_\perp$ spectrum, $9.0 < y < 9.2$ # END PLOT # BEGIN PLOT /LHCF_2012_I1115479/d03-x01-y01 Title=$\pi^0$ $p_\perp$ spectrum, $9.2 < y < 9.4$ # END PLOT # BEGIN PLOT /LHCF_2012_I1115479/d04-x01-y01 Title=$\pi^0$ $p_\perp$ spectrum, $9.4 < y < 9.6$ # END PLOT # BEGIN PLOT /LHCF_2012_I1115479/d05-x01-y01 Title=$\pi^0$ $p_\perp$ spectrum, $9.6 < y < 10.0$ # END PLOT # BEGIN PLOT /LHCF_2012_I1115479/d06-x01-y01 Title=$\pi^0$ $p_\perp$ spectrum, $10.0 < y < 11.0$ # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_I1186556.plot0000644000175000017500000000203112116077756017063 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1186556/count_SR_SF Title=Number of events in the same-flavour region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1186556/count_SR_OF Title=Number of events in the opposite-flavour region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1186556/hist_mT2_SF_exp Title=$m_{T2}$ for the same-flavour region XLabel=$m_{T2}$ [GeV] YLabel=$\mathrm{Events}/5 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1186556/hist_mT2_OF_exp Title=$m_{T2}$ for the opposite-flavour region XLabel=$m_{T2}$ [GeV] YLabel=$\mathrm{Events}/5 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1186556/hist_mT2_SF_MC Title=$m_{T2}$ for the same-flavour region XLabel=$m_{T2}$ [GeV] YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{m_{T2}} [\mathrm{fb/GeV}] $ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1186556/hist_mT2_OF_MC Title=$m_{T2}$ for the opposite-flavour region XLabel=$m_{T2}$ [GeV] YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{m_{T2}} [\mathrm{fb/GeV}] $ LogY=1 # END PLOT rivet-1.8.3/data/plotinfo/CMS_2010_S8547297.plot0000644000175000017500000001025112116077756016666 0ustar sunsun# BEGIN PLOT /CMS_2010_S8656010/d0[1-6] XLabel=$p_\perp$ [GeV/$c$] YLabel=$d^2N_\text{ch}\,/d\eta\, dp_\perp\; [(\text{GeV}/c)^{-1}]$ FullRange=1 # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d01-x01-y01 Title=Charged hadron $p_\perp$ for $|\eta|=0.1$ at $\sqrt{s} = 0.9\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d01-x01-y02 Title=Charged hadron $p_\perp$ for $|\eta|=0.3$ at $\sqrt{s} = 0.9\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d01-x01-y03 Title=Charged hadron $p_\perp$ for $|\eta|=0.5$ at $\sqrt{s} = 0.9\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d01-x01-y04 Title=Charged hadron $p_\perp$ for $|\eta|=0.7$ at $\sqrt{s} = 0.9\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d02-x01-y01 Title=Charged hadron $p_\perp$ for $|\eta|=0.9$ at $\sqrt{s} = 0.9\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d02-x01-y02 Title=Charged hadron $p_\perp$ for $|\eta|=1.1$ at $\sqrt{s} = 0.9\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d02-x01-y03 Title=Charged hadron $p_\perp$ for $|\eta|=1.3$ at $\sqrt{s} = 0.9\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d02-x01-y04 Title=Charged hadron $p_\perp$ for $|\eta|=1.5$ at $\sqrt{s} = 0.9\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d03-x01-y01 Title=Charged hadron $p_\perp$ for $|\eta|=1.7$ at $\sqrt{s} = 0.9\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d03-x01-y02 Title=Charged hadron $p_\perp$ for $|\eta|=1.9$ at $\sqrt{s} = 0.9\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d03-x01-y03 Title=Charged hadron $p_\perp$ for $|\eta|=2.1$ at $\sqrt{s} = 0.9\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d03-x01-y04 Title=Charged hadron $p_\perp$ for $|\eta|=2.3$ at $\sqrt{s} = 0.9\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d04-x01-y01 Title=Charged hadron $p_\perp$ for $|\eta|=0.1$ at $\sqrt{s} = 2.36\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d04-x01-y02 Title=Charged hadron $p_\perp$ for $|\eta|=0.3$ at $\sqrt{s} = 2.36\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d04-x01-y03 Title=Charged hadron $p_\perp$ for $|\eta|=0.5$ at $\sqrt{s} = 2.36\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d04-x01-y04 Title=Charged hadron $p_\perp$ for $|\eta|=0.7$ at $\sqrt{s} = 2.36\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d05-x01-y01 Title=Charged hadron $p_\perp$ for $|\eta|=0.9$ at $\sqrt{s} = 2.36\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d05-x01-y02 Title=Charged hadron $p_\perp$ for $|\eta|=1.1$ at $\sqrt{s} = 2.36\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d05-x01-y03 Title=Charged hadron $p_\perp$ for $|\eta|=1.3$ at $\sqrt{s} = 2.36\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d05-x01-y04 Title=Charged hadron $p_\perp$ for $|\eta|=1.5$ at $\sqrt{s} = 2.36\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d06-x01-y01 Title=Charged hadron $p_\perp$ for $|\eta|=1.7$ at $\sqrt{s} = 2.36\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d06-x01-y02 Title=Charged hadron $p_\perp$ for $|\eta|=1.9$ at $\sqrt{s} = 2.36\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d06-x01-y03 Title=Charged hadron $p_\perp$ for $|\eta|=2.1$ at $\sqrt{s} = 2.36\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d06-x01-y04 Title=Charged hadron $p_\perp$ for $|\eta|=2.3$ at $\sqrt{s} = 2.36\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d07 XLabel=$p_\perp$ [GeV/$c$] YLabel=$(1/2\pi p_\perp)\; d^2N_\text{ch}\,/d\eta\, dp_\perp\; [(\text{GeV}/c)^{-2}]$ FullRange=1 # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d07-x01-y01 Title=Charged hadron $p_\perp$ for $|\eta|<2.4$ at $\sqrt{s} = 0.9\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d07-x01-y02 Title=Charged hadron $p_\perp$ for $|\eta|<2.4$ at $\sqrt{s} = 2.36\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d08 XLabel=$\eta$ YLabel=$dN_\text{ch}\,/d\eta$ LogY=0 # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d08-x01-y01 Title=Charged hadron $\eta$ integrated over $p_\perp$ at $\sqrt{s} = 0.9\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8547297/d08-x01-y02 Title=Charged hadron $\eta$ integrated over $p_\perp$ at $\sqrt{s} = 2.36\,\text{TeV}$ # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_I1188891.plot0000644000175000017500000000114312116077756017072 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1188891/d0 XLabel=Leading jet $p_\perp$~[GeV] LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1188891/d01-x01-y01 YLabel=$bb$ fraction [\%] # END PLOT # BEGIN PLOT /ATLAS_2012_I1188891/d02-x01-y01 YLabel=$bc$ fraction [\%] # END PLOT # BEGIN PLOT /ATLAS_2012_I1188891/d03-x01-y01 YLabel=$cc$ fraction [\%] # END PLOT # BEGIN PLOT /ATLAS_2012_I1188891/d04-x01-y01 YLabel=$b$-light fraction [\%] # END PLOT # BEGIN PLOT /ATLAS_2012_I1188891/d05-x01-y01 YLabel=$c$-light fraction [\%] # END PLOT # BEGIN PLOT /ATLAS_2012_I1188891/d06-x01-y01 YLabel=light-light fraction [\%] # END PLOT rivet-1.8.3/data/plotinfo/SLD_2004_S5693039.plot0000644000175000017500000001662412116077756016674 0ustar sunsun# BEGIN PLOT /SLD_2004_S5693039/d01-x01-y01 Title=Charged Particle Momentum XLabel=$p$ [GeV] YLabel=$\text{d}N/\text{d}p$ [$\text{GeV}^{-1}$] # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d02-x01-y02 Title=$\pi^\pm$ scaled Momentum XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d03-x01-y02 Title=$K^\pm$ scaled Momentum XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d04-x01-y02 Title=$p,\bar p$ scaled Momentum XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d05-x01-y01 Title=$\pi^\pm$ scaled Momentum, ($uds$) events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d05-x01-y02 Title=$\pi^\pm$ scaled Momentum, $c$ events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d05-x01-y03 Title=$\pi^\pm$ scaled Momentum, $b$ events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d06-x01-y01 Title=$K^\pm$ scaled Momentum, ($uds$) events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d06-x01-y02 Title=$K^\pm$ scaled Momentum, $c$ events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d06-x01-y03 Title=$K^\pm$ scaled Momentum, $b$ events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d07-x01-y01 Title=$p,\bar p$ scaled Momentum, ($uds$) events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d07-x01-y02 Title=$p,\bar p$ scaled Momentum, $c$ events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d07-x01-y03 Title=$p,\bar p$ scaled Momentum, $b$ events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d08-x01-y01 Title=Charged particle scaled Momentum, ($uds$) events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d08-x01-y02 Title=Charged particle scaled Momentum, $c$ events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d08-x01-y03 Title=Charged particle scaled Momentum, $b$ events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d02-x02-y02 Title=$\pi^\pm$ multiplicity XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ LegendXPos=0.60 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d03-x02-y02 Title=$K^\pm$ multiplicity XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ LegendXPos=0.60 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d04-x02-y02 Title=$p,\bar p$ multiplicity XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ LegendXPos=0.60 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d05-x02-y01 Title=$\pi^\pm$ multiplicity, ($uds$) events XLabel= YLabel=$N_{\pi^\pm}$ LegendXPos=0.60 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d05-x02-y02 Title=$\pi^\pm$ multiplicity, $c$ events XLabel= YLabel=$N_{\pi^\pm}$ LegendXPos=0.60 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d05-x02-y03 Title=$\pi^\pm$ multiplicity, $b$ events XLabel= YLabel=$N_{\pi^\pm}$ LegendXPos=0.60 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d06-x02-y01 Title=$K^\pm$ multiplicity, ($uds$) events XLabel= YLabel=$N_{K^\pm}$ LegendXPos=0.60 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d06-x02-y02 Title=$K^\pm$ multiplicity, $c$ events XLabel= YLabel=$N_{K^\pm}$ LegendXPos=0.60 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d06-x02-y03 Title=$K^\pm$ multiplicity, $b$ events XLabel= YLabel=$N_{K^\pm}$ LegendXPos=0.60 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d07-x02-y01 Title=$p, \bar p$ multiplicity, ($uds$) events XLabel= YLabel=$N_{p, \bar p}$ LegendXPos=0.60 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d07-x02-y02 Title=$p, \bar p$ multiplicity, $c$ events XLabel= YLabel=$N_{p, \bar p}$ LegendXPos=0.60 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d07-x02-y03 Title=$p, \bar p$ multiplicity, $b$ events XLabel= YLabel=$N_{p, \bar p}$ LegendXPos=0.60 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d08-x02-y01 Title=Charged particle multiplicity, ($uds$) events XLabel= YLabel=$N_{\text{charged}}$ LegendXPos=0.60 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d08-x02-y02 Title=Charged particle multiplicity, $c$ events XLabel= YLabel=$N_{\text{charged}}$ LegendXPos=0.60 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d08-x02-y03 Title=Charged particle multiplicity, $b$ events XLabel= YLabel=$N_{\text{charged}}$ LegendXPos=0.60 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d08-x03-y02 Title=Difference in Charged multiplicity between $c$ and $uds$ events XLabel=$E_\mathrm{CMS}/GeV$ YLabel=$\delta_{bl}$ LegendXPos=0.60 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d08-x03-y03 Title=Difference in Charged multiplicity between $b$ and $uds$ events XLabel=$E_\mathrm{CMS}/GeV$ YLabel=$\delta_{bl}$ LegendXPos=0.60 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d09-x01-y01 Title=$R^q_{\pi^+}=\frac1{2N_{\rm events}}\frac{\text{d}}{\text{d}x_p}\left[N(q\to\pi^+)+N(\bar q\to\pi^-)\right]$ XLabel=$x_p$ YLabel=$R^q_{\pi^+}$ LegendXPos=0.60 LegendYPos=0.85 FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d09-x01-y02 Title=$R^q_{\pi^-}=\frac1{2N_{\rm events}}\frac{\text{d}}{\text{d}x_p}\left[N(q\to\pi^-)+N(\bar q\to\pi^+)\right]$ XLabel=$x_p$ YLabel=$R^q_{\pi^-}$ LegendXPos=0.60 LegendYPos=0.85 FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d09-x01-y03 Title=$D^q_{\pi^-}=(R^q_{\pi^-}-R^q_{\pi^+})/(R^q_{\pi^-}+R^q_{\pi^+})$ XLabel=$x_p$ YLabel=$D^q_{\pi^-}$ [\%] LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d10-x01-y01 Title=$R^q_{K^+}=\frac1{2N_{\rm events}}\frac{\text{d}}{\text{d}x_p}\left[N(q\to K^+)+N(\bar q\to K^-)\right]$ XLabel=$x_p$ YLabel=$R^q_{K^+}$ LegendXPos=0.60 LegendYPos=0.85 FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d10-x01-y02 Title=$R^q_{K^-}=\frac1{2N_{\rm events}}\frac{\text{d}}{\text{d}x_p}\left[N(q\to K^-)+N(\bar q\to K^+)\right]$ XLabel=$x_p$ YLabel=$R^q_{K^-}$ LegendXPos=0.60 LegendYPos=0.85 FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d10-x01-y03 Title=$D^q_{K^-}=(R^q_{K^-}-R^q_{K^+})/(R^q_{K^-}+R^q_{K^+})$ XLabel=$x_p$ YLabel=$D^q_{K^-}$ [\%] LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d11-x01-y01 Title=$R^q_{p}=\frac1{2N_{\rm events}}\frac{\text{d}}{\text{d}x_p}\left[N(q\to p)+N(\bar q\to \bar p)\right]$ XLabel=$x_p$ YLabel=$R^q_{p}$ LegendXPos=0.60 LegendYPos=0.85 FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d11-x01-y02 Title=$R^q_{\bar p}=\frac1{2N_{\rm events}}\frac{\text{d}}{\text{d}x_p}\left[N(q\to \bar p)+N(\bar q\to p)\right]$ XLabel=$x_p$ YLabel=$R^q_{\bar p}$ LegendXPos=0.60 LegendYPos=0.85 FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /SLD_2004_S5693039/d11-x01-y03 Title=$D^q_{p}=(R^q_{p}-R^q_{\bar p})/(R^q_{p}+R^q_{\bar p})$ XLabel=$x_p$ YLabel=$D^q_{p}$ [\%] LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOTrivet-1.8.3/data/plotinfo/ATLAS_2010_CONF_2010_049.plot0000644000175000017500000000743712116077756017713 0ustar sunsun# BEGIN PLOT /ATLAS_2010_CONF_2010_049/d01-x01-y01 Title=Jet x-sec for anti-$k_t$ track jets with $R=0.6$, $|\eta|<0.57$, $\sqrt{s}=\text{7\,TeV}$ XLabel=track jet $p_\perp$ [GeV] YLabel=$\mathrm{d}^2 \sigma_\text{jet} /\mathrm{d}\eta\mathrm{d}p_\perp$ [$\mu$b/GeV] LegendXPos=0.37 CustomLegend={\large ATLAS preliminary} # END PLOT # BEGIN PLOT /ATLAS_2010_CONF_2010_049/d02-x01-y01 Title=Jet x-sec for anti-$k_t$ track jets with $R=0.4$, $|\eta|<0.57$, $\sqrt{s}=\text{7\,TeV}$ XLabel=track jet $p_\perp$ [GeV] YLabel=$\mathrm{d}^2 \sigma_\text{jet} /\mathrm{d}\eta\mathrm{d}p_\perp$ [$\mu$b/GeV] LegendXPos=0.37 CustomLegend={\large ATLAS preliminary} # END PLOT # BEGIN PLOT /ATLAS_2010_CONF_2010_049/d03-x01-y01 Title=$z$ in anti-$k_t$ jets, $R=0.6$, $p_\perp \in [4..6]\,\text{GeV}$, $|\eta|<0.57$, $\sqrt{s}=\text{7\,TeV}$ XLabel=$z_\text{track}$ YLabel=$(1/N_\text{jet})\mathrm{d}N_\text{track}/\mathrm{d}z_\text{track}$ LogY=0 LegendXPos=0.37 CustomLegend={\large ATLAS preliminary} # END PLOT # BEGIN PLOT /ATLAS_2010_CONF_2010_049/d03-x02-y01 Title=$z$ in anti-$k_t$ jets, $R=0.6$, $p_\perp \in [6..10]\,\text{GeV}$, $|\eta|<0.57$, $\sqrt{s}=\text{7\,TeV}$ XLabel=$z_\text{track}$ YLabel=$(1/N_\text{jet})\mathrm{d}N_\text{track}/\mathrm{d}z_\text{track}$ LogY=0 LegendXPos=0.37 CustomLegend={\large ATLAS preliminary} # END PLOT # BEGIN PLOT /ATLAS_2010_CONF_2010_049/d03-x03-y01 Title=$z$ in anti-$k_t$ jets, $R=0.6$, $p_\perp \in [10..15]\,\text{GeV}$, $|\eta|<0.57$, $\sqrt{s}=\text{7\,TeV}$ XLabel=$z_\text{track}$ YLabel=$(1/N_\text{jet})\mathrm{d}N_\text{track}/\mathrm{d}z_\text{track}$ LogY=0 LegendXPos=0.37 CustomLegend={\large ATLAS preliminary} # END PLOT # BEGIN PLOT /ATLAS_2010_CONF_2010_049/d03-x04-y01 Title=$z$ in anti-$k_t$ jets, $R=0.6$, $p_\perp \in [15..24]\,\text{GeV}$, $|\eta|<0.57$, $\sqrt{s}=\text{7\,TeV}$ XLabel=$z_\text{track}$ YLabel=$(1/N_\text{jet})\mathrm{d}N_\text{track}/\mathrm{d}z_\text{track}$ LogY=0 LegendXPos=0.37 CustomLegend={\large ATLAS preliminary} # END PLOT # BEGIN PLOT /ATLAS_2010_CONF_2010_049/d04-x01-y01 Title=$z$ in anti-$k_t$ jets, $R=0.4$, $p_\perp \in [4..6]\,\text{GeV}$, $|\eta|<0.57$, $\sqrt{s}=\text{7\,TeV}$ XLabel=$z_\text{track}$ YLabel=$(1/N_\text{jet})\mathrm{d}N_\text{track}/\mathrm{d}z_\text{track}$ LogY=0 LegendXPos=0.37 CustomLegend={\large ATLAS preliminary} # END PLOT # BEGIN PLOT /ATLAS_2010_CONF_2010_049/d04-x02-y01 Title=$z$ in anti-$k_t$ jets, $R=0.4$, $p_\perp \in [6..10]\,\text{GeV}$, $|\eta|<0.57$, $\sqrt{s}=\text{7\,TeV}$ XLabel=$z_\text{track}$ YLabel=$(1/N_\text{jet})\mathrm{d}N_\text{track}/\mathrm{d}z_\text{track}$ LogY=0 LegendXPos=0.37 CustomLegend={\large ATLAS preliminary} # END PLOT # BEGIN PLOT /ATLAS_2010_CONF_2010_049/d04-x03-y01 Title=$z$ in anti-$k_t$ jets, $R=0.4$, $p_\perp \in [10..15]\,\text{GeV}$, $|\eta|<0.57$, $\sqrt{s}=\text{7\,TeV}$ XLabel=$z_\text{track}$ YLabel=$(1/N_\text{jet})\mathrm{d}N_\text{track}/\mathrm{d}z_\text{track}$ LogY=0 LegendXPos=0.37 CustomLegend={\large ATLAS preliminary} # END PLOT # BEGIN PLOT /ATLAS_2010_CONF_2010_049/d04-x04-y01 Title=$z$ in anti-$k_t$ jets, $R=0.4$, $p_\perp \in [15..24]\,\text{GeV}$, $|\eta|<0.57$, $\sqrt{s}=\text{7\,TeV}$ XLabel=$z_\text{track}$ YLabel=$(1/N_\text{jet})\mathrm{d}N_\text{track}/\mathrm{d}z_\text{track}$ LogY=0 LegendXPos=0.37 CustomLegend={\large ATLAS preliminary} # END PLOT # d01-x01-y01 jet cross-section 0.6 fig_06 # d02-x01-y01 jet cross-section 0.4 fig_07 # d03-x01-y01 frag. 4-6 0.6 fig_08a # d03-x02-y01 frag. 6-10 0.6 fig_08b # d03-x03-y01 frag. 10-15 0.6 fig_08c # d03-x04-y01 frag. 15-24 0.6 fig_08d # d04-x01-y01 frag. 4-6 0.4 fig_09a # d04-x02-y01 frag. 6-10 0.4 fig_09b # d04-x03-y01 frag. 10-15 0.4 fig_09c # d04-x04-y01 frag. 15-24 0.4 fig_09d rivet-1.8.3/data/plotinfo/OPAL_1993_S2692198.plot0000644000175000017500000000404212116077756017016 0ustar sunsun# BEGIN PLOT /OPAL_1993_S2692198/d01-x01-y01 Title=Number of photon vs $y_{\rm cut}$, Jade XLabel=$y_{\rm cut}$ YLabel=$No. of photons/1000 MH$ LegendXPos=0.50 LegendYPos=0.85 FullRange=1 # END PLOT # BEGIN PLOT /OPAL_1993_S2692198/d02-x01-y01 Title=Number of photon vs $y_{\rm cut}$, Durham XLabel=$y_{\rm cut}$ YLabel=No. of photons/1000 MH LegendXPos=0.50 LegendYPos=0.85 FullRange=1 # END PLOT # BEGIN PLOT /OPAL_1993_S2692198/d03-x01-y01 Title=Number of 1 jet events vs $y_{\rm cut}$, Jade XLabel=$y_{\rm cut}$ YLabel=No. of 1 jet events/1000 MH LegendXPos=0.50 LegendYPos=0.85 FullRange=1 # END PLOT # BEGIN PLOT /OPAL_1993_S2692198/d03-x01-y02 Title=Number of 2 jet events vs $y_{\rm cut}$, Jade XLabel=$y_{\rm cut}$ YLabel=No. of 2 jet events/1000 MH LegendXPos=0.50 LegendYPos=0.85 FullRange=1 # END PLOT # BEGIN PLOT /OPAL_1993_S2692198/d03-x01-y03 Title=Number of 3 jet events vs $y_{\rm cut}$, Jade XLabel=$y_{\rm cut}$ YLabel=No. of 3 jet events/1000 MH LegendXPos=0.50 LegendYPos=0.85 FullRange=1 # END PLOT # BEGIN PLOT /OPAL_1993_S2692198/d03-x01-y04 Title=Number of $>3$ jet events vs $y_{\rm cut}$, Jade XLabel=$y_{\rm cut}$ YLabel=No. of $>3$ jet events/1000 MH LegendXPos=0.50 LegendYPos=0.85 FullRange=1 # END PLOT # BEGIN PLOT /OPAL_1993_S2692198/d04-x01-y01 Title=Number of 1 jet events vs $y_{\rm cut}$, Durham XLabel=$y_{\rm cut}$ YLabel=No. of 1 jet events/1000 MH LegendXPos=0.50 LegendYPos=0.85 FullRange=1 # END PLOT # BEGIN PLOT /OPAL_1993_S2692198/d04-x01-y02 Title=Number of 2 jet events vs $y_{\rm cut}$, Durham XLabel=$y_{\rm cut}$ YLabel=No. of 2 jet events/1000 MH LegendXPos=0.50 LegendYPos=0.85 FullRange=1 # END PLOT # BEGIN PLOT /OPAL_1993_S2692198/d04-x01-y03 Title=Number of 3 jet events vs $y_{\rm cut}$, Durham XLabel=$y_{\rm cut}$ YLabel=No. of 3 jet events/1000 MH LegendXPos=0.50 LegendYPos=0.85 FullRange=1 # END PLOT # BEGIN PLOT /OPAL_1993_S2692198/d04-x01-y04 Title=Number of $>3$ jet events vs $y_{\rm cut}$, Durham XLabel=$y_{\rm cut}$ YLabel=No. of $>3$ jet events/1000 MH LegendXPos=0.50 LegendYPos=0.85 FullRange=1 # END PLOT rivet-1.8.3/data/plotinfo/UA5_1982_S875503.plot0000644000175000017500000000141312116077756016561 0ustar sunsun# BEGIN PLOT /UA5_1982_S875503/d02-x01-y01 Title=Mean charged multiplicity for $pp$ collisions at $\sqrt{s} = 53~\text{GeV}$ XLabel=$\sqrt{s}$ / GeV YLabel=$\langle N_\text{ch} \rangle$ # END PLOT # BEGIN PLOT /UA5_1982_S875503/d02-x01-y02 Title=Mean charged multiplicity for $p\bar{p}$ collisions at $\sqrt{s} = 53~\text{GeV}$ XLabel=$\sqrt{s}$ / GeV YLabel=$\langle N_\text{ch} \rangle$ # END PLOT # BEGIN PLOT /UA5_1982_S875503/d03-x01-y01 Title=Pseudorapidity for $pp$ collisions at $\sqrt{s} = 53~\text{GeV}$ XLabel=$\eta$ YLabel=$\mathrm{d}N_\text{ch}/\mathrm{d}\eta$ # END PLOT # BEGIN PLOT /UA5_1982_S875503/d04-x01-y01 Title=Pseudorapidity for $p\bar{p}$ collisions at $\sqrt{s} = 53~\text{GeV}$ XLabel=$\eta$ YLabel=$\mathrm{d}N_\text{ch}/\mathrm{d}\eta$ # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_I1094061.plot0000644000175000017500000000677212123033122017041 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1094061/d01-x01-y01 Title=Two-particle correlation, $\sqrt$s = 900 GeV, $n_{ch}\ge2$, $0<\Delta\phi<\pi$ XLabel=$\Delta\eta$ YLabel=$R(\Delta\eta)$ LogY=0 LogX=0 LegendXPos=0.6 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /ATLAS_2012_I1094061/d01-x01-y02 Title=Two-particle correlation, $\sqrt$s = 7 TeV, $n_{ch}\ge2$, $0<\Delta\phi<\pi$ XLabel=$\Delta\eta$ YLabel=$R(\Delta\eta)$ LogY=0 LogX=0 LegendXPos=0.6 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /ATLAS_2012_I1094061/d01-x01-y03 Title=Two-particle correlation, $\sqrt$s = 7 TeV, $n_{ch}\ge20$, $0<\Delta\phi<\pi$ XLabel=$\Delta\eta$ YLabel=$R(\Delta\eta)$ LogY=0 LogX=0 LegendXPos=0.6 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /ATLAS_2012_I1094061/d02-x01-y01 Title=Two-particle correlation, $\sqrt$s = 900 GeV, $n_{ch}\ge2$, $0<\Delta\phi<\pi/2$ XLabel=$\Delta\eta$ YLabel=$R(\Delta\eta)$ LogY=0 LogX=0 LegendXPos=0.6 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /ATLAS_2012_I1094061/d02-x01-y02 Title=Two-particle correlation, $\sqrt$s = 7 TeV, $n_{ch}\ge2$, $0<\Delta\phi<\pi/2$ XLabel=$\Delta\eta$ YLabel=$R(\Delta\eta)$ LogY=0 LogX=0 LegendXPos=0.6 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /ATLAS_2012_I1094061/d02-x01-y03 Title=Two-particle correlation, $\sqrt$s = 7 TeV, $n_{ch}\ge20$, $0<\Delta\phi<\pi/2$ XLabel=$\Delta\eta$ YLabel=$R(\Delta\eta)$ LogY=0 LogX=0 LegendXPos=0.6 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /ATLAS_2012_I1094061/d03-x01-y01 Title=Two-particle correlation, $\sqrt$s = 900 GeV, $n_{ch}\ge2$, $\pi/2<\Delta\phi<\pi$ XLabel=$\Delta\eta$ YLabel=$R(\Delta\eta)$ LogY=0 LogX=0 LegendXPos=0.05 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /ATLAS_2012_I1094061/d03-x01-y02 Title=Two-particle correlation, $\sqrt$s = 7 TeV, $n_{ch}\ge2$, $\pi/2<\Delta\phi<\pi$ XLabel=$\Delta\eta$ YLabel=$R(\Delta\eta)$ LogY=0 LogX=0 LegendXPos=0.05 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /ATLAS_2012_I1094061/d03-x01-y03 Title=Two-particle correlation, $\sqrt$s = 7 TeV, $n_{ch}\ge20$, $\pi/2<\Delta\phi<\pi$ XLabel=$\Delta\eta$ YLabel=$R(\Delta\eta)$ LogY=0 LogX=0 LegendXPos=0.05 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /ATLAS_2012_I1094061/d04-x01-y01 Title=Two-particle correlation, $\sqrt$s = 900 GeV, $n_{ch}\ge2$, $0<\Delta\eta<2$ XLabel=$\Delta\phi$ YLabel=$R(\Delta\phi)$ LogY=0 LogX=0 LegendXPos=0.4 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /ATLAS_2012_I1094061/d04-x01-y02 Title=Two-particle correlation, $\sqrt$s = 7 TeV, $n_{ch}\ge2$, $0<\Delta\eta<2$ XLabel=$\Delta\phi$ YLabel=$R(\Delta\phi)$ LogY=0 LogX=0 LegendXPos=0.4 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /ATLAS_2012_I1094061/d04-x01-y03 Title=Two-particle correlation, $\sqrt$s = 7 TeV, $n_{ch}\ge20$, $0<\Delta\eta<2$ XLabel=$\Delta\phi$ YLabel=$R(\Delta\phi)$ LogY=0 LogX=0 LegendXPos=0.4 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /ATLAS_2012_I1094061/d05-x01-y01 Title=Two-particle correlation, $\sqrt$s = 900 GeV, $n_{ch}\ge2$, $2<\Delta\eta<5$ XLabel=$\Delta\phi$ YLabel=$R(\Delta\phi)$ LogY=0 LogX=0 LegendXPos=0.1 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /ATLAS_2012_I1094061/d05-x01-y02 Title=Two-particle correlation, $\sqrt$s = 7 TeV, $n_{ch}\ge2$, $2<\Delta\eta<5$ XLabel=$\Delta\phi$ YLabel=$R(\Delta\phi)$ LogY=0 LogX=0 LegendXPos=0.1 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /ATLAS_2012_I1094061/d05-x01-y03 Title=Two-particle correlation, $\sqrt$s = 7 TeV, $n_{ch}\ge20$, $2<\Delta\eta<5$ XLabel=$\Delta\phi$ YLabel=$R(\Delta\phi)$ LogY=0 LogX=0 LegendXPos=0.1 RatioPlotMode=deviation # END PLOT rivet-1.8.3/data/plotinfo/D0_2007_S7075677.plot0000644000175000017500000000027212116077756016514 0ustar sunsun# BEGIN PLOT /D0_2007_S7075677/d01-x01-y01 Title=Inclusive Z boson rapidity XLabel=$|y|$(Z) YLabel=$1/\sigma \; \text{d}\sigma/\text{d}|y|(Z)$ LegendXPos=0.15 LegendYPos=0.6 # END PLOT rivet-1.8.3/data/plotinfo/TASSO_1990_S2148048.plot0000644000175000017500000000472012116077756017142 0ustar sunsun# BEGIN PLOT /TASSO_1990_S2148048/d02-x01-y01 Title=Scaled momentum distribution ($\sqrt{s}=\unit{14}{GeV}$) XLabel=$x_p$ YLabel=$1/\sigma \mathrm{d}\sigma/\mathrm{d}x_p$ # END PLOT # BEGIN PLOT /TASSO_1990_S2148048/d02-x01-y02 Title=Scaled momentum distribution ($\sqrt{s}=\unit{22}{GeV}$) XLabel=$x_p$ YLabel=$1/\sigma \mathrm{d}\sigma/\mathrm{d}x_p$ # END PLOT # BEGIN PLOT /TASSO_1990_S2148048/d02-x01-y03 Title=Scaled momentum distribution ($\sqrt{s}=\unit{35}{GeV}$) XLabel=$x_p$ YLabel=$1/\sigma \mathrm{d}\sigma/\mathrm{d}x_p$ # END PLOT # BEGIN PLOT /TASSO_1990_S2148048/d02-x01-y04 Title=Scaled momentum distribution ($\sqrt{s}=\unit{44}{GeV}$) XLabel=$x_p$ YLabel=$1/\sigma \mathrm{d}\sigma/\mathrm{d}x_p$ # END PLOT # BEGIN PLOT /TASSO_1990_S2148048/d06-x01-y01 Title=Sphericity ($\sqrt{s}=\unit{14}{GeV}$) XLabel=$S$ YLabel=$1/N \mathrm{d}N/\mathrm{d}S$ # END PLOT # BEGIN PLOT /TASSO_1990_S2148048/d06-x01-y02 Title=Sphericity ($\sqrt{s}=\unit{22}{GeV}$) XLabel=$S$ YLabel=$1/N \mathrm{d}N/\mathrm{d}S$ # END PLOT # BEGIN PLOT /TASSO_1990_S2148048/d06-x01-y03 Title=Sphericity ($\sqrt{s}=\unit{35}{GeV}$) XLabel=$S$ YLabel=$1/N \mathrm{d}N/\mathrm{d}S$ # END PLOT # BEGIN PLOT /TASSO_1990_S2148048/d06-x01-y04 Title=Sphericity ($\sqrt{s}=\unit{44}{GeV}$) XLabel=$S$ YLabel=$1/N \mathrm{d}N/\mathrm{d}S$ # END PLOT # BEGIN PLOT /TASSO_1990_S2148048/d07-x01-y01 Title=Aplanarity ($\sqrt{s}=\unit{14}{GeV}$) XLabel=$A$ YLabel=$1/N \mathrm{d}N/\mathrm{d}A$ # END PLOT # BEGIN PLOT /TASSO_1990_S2148048/d07-x01-y02 Title=Aplanarity ($\sqrt{s}=\unit{22}{GeV}$) XLabel=$A$ YLabel=$1/N \mathrm{d}N/\mathrm{d}A$ # END PLOT # BEGIN PLOT /TASSO_1990_S2148048/d07-x01-y03 Title=Aplanarity ($\sqrt{s}=\unit{35}{GeV}$) XLabel=$A$ YLabel=$1/N \mathrm{d}N/\mathrm{d}A$ # END PLOT # BEGIN PLOT /TASSO_1990_S2148048/d07-x01-y04 Title=Aplanarity ($\sqrt{s}=\unit{44}{GeV}$) XLabel=$A$ YLabel=$1/N \mathrm{d}N/\mathrm{d}A$ # END PLOT # BEGIN PLOT /TASSO_1990_S2148048/d08-x01-y01 Title=Thrust ($\sqrt{s}=\unit{14}{GeV}$) XLabel=$T$ YLabel=$1/N \mathrm{d}N/\mathrm{d}T$ # END PLOT # BEGIN PLOT /TASSO_1990_S2148048/d08-x01-y02 Title=Thrust ($\sqrt{s}=\unit{22}{GeV}$) XLabel=$T$ YLabel=$1/N \mathrm{d}N/\mathrm{d}T$ # END PLOT # BEGIN PLOT /TASSO_1990_S2148048/d08-x01-y03 Title=Thrust ($\sqrt{s}=\unit{35}{GeV}$) XLabel=$T$ YLabel=$1/N \mathrm{d}N/\mathrm{d}T$ # END PLOT # BEGIN PLOT /TASSO_1990_S2148048/d08-x01-y04 Title=Thrust ($\sqrt{s}=\unit{44}{GeV}$) XLabel=$T$ YLabel=$1/N \mathrm{d}N/\mathrm{d}T$ # END PLOT rivet-1.8.3/data/plotinfo/ALEPH_2004_S5765862.plot0000644000175000017500000013765412116077756017116 0ustar sunsun# BEGIN PLOT /ALEPH_2004_S5765862/d01-x01-y01 Title=Charged multiplicity at a function of energy XLabel=$E_\mathrm{CMS}/GeV$ YLabel=$N_\text{ch}$ LegendXPos=0.20 LegendYPos=0.85 LogY=0 YMin=18 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d02-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=133$ GeV) XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d03-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=161$ GeV) XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d04-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=172$ GeV) XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d05-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=183$ GeV) XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d06-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=189$ GeV) XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d07-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=196$ GeV) XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d08-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=200$ GeV) XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d09-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=206$ GeV) XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d11-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=133$ GeV) XLabel=$\xi_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\xi_p$ FullRange=1 LegendYPos=0.65 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d12-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=161$ GeV) XLabel=$\xi_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\xi_p$ FullRange=1 LegendYPos=0.65 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d13-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=172$ GeV) XLabel=$\xi_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\xi_p$ FullRange=1 LegendYPos=0.65 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d14-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=183$ GeV) XLabel=$\xi_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\xi_p$ FullRange=1 LegendYPos=0.65 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d15-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=189$ GeV) XLabel=$\xi_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\xi_p$ FullRange=1 LegendYPos=0.65 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d16-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=196$ GeV) XLabel=$\xi_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\xi_p$ FullRange=1 LegendYPos=0.65 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d17-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=200$ GeV) XLabel=$\xi_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\xi_p$ FullRange=1 LegendYPos=0.65 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d18-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=206$ GeV) XLabel=$\xi_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\xi_p$ FullRange=1 LegendYPos=0.65 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d19-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=133$ GeV) XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_E}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d20-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=161$ GeV) XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_E}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d21-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=172$ GeV) XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_E}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d22-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=183$ GeV) XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_E}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d23-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=189$ GeV) XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_E}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d24-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=196$ GeV) XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_E}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d25-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=200$ GeV) XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_E}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d26-x01-y01 Title=Charged particle spectrum ($E_\mathrm{CMS}=206$ GeV) XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_E}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d27-x01-y01 Title=In-plane $p_\perp$ in GeV w.r.t. thrust axes ($E_\mathrm{CMS}=133$ GeV) XLabel=$p_\perp^\text{in}$ / GeV YLabel=$N \, \text{d}{\sigma}/\text{d}{p_\perp^\text{in}}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d28-x01-y01 Title=In-plane $p_\perp$ in GeV w.r.t. thrust axes ($E_\mathrm{CMS}=161$ GeV) XLabel=$p_\perp^\text{in}$ / GeV YLabel=$N \, \text{d}{\sigma}/\text{d}{p_\perp^\text{in}}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d29-x01-y01 Title=In-plane $p_\perp$ in GeV w.r.t. thrust axes ($E_\mathrm{CMS}=172$ GeV) XLabel=$p_\perp^\text{in}$ / GeV YLabel=$N \, \text{d}{\sigma}/\text{d}{p_\perp^\text{in}}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d30-x01-y01 Title=In-plane $p_\perp$ in GeV w.r.t. thrust axes ($E_\mathrm{CMS}=183$ GeV) XLabel=$p_\perp^\text{in}$ / GeV YLabel=$N \, \text{d}{\sigma}/\text{d}{p_\perp^\text{in}}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d31-x01-y01 Title=In-plane $p_\perp$ in GeV w.r.t. thrust axes ($E_\mathrm{CMS}=189$ GeV) XLabel=$p_\perp^\text{in}$ / GeV YLabel=$N \, \text{d}{\sigma}/\text{d}{p_\perp^\text{in}}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d32-x01-y01 Title=In-plane $p_\perp$ in GeV w.r.t. thrust axes ($E_\mathrm{CMS}=196$ GeV) XLabel=$p_\perp^\text{in}$ / GeV YLabel=$N \, \text{d}{\sigma}/\text{d}{p_\perp^\text{in}}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d33-x01-y01 Title=In-plane $p_\perp$ in GeV w.r.t. thrust axes ($E_\mathrm{CMS}=200$ GeV) XLabel=$p_\perp^\text{in}$ / GeV YLabel=$N \, \text{d}{\sigma}/\text{d}{p_\perp^\text{in}}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d34-x01-y01 Title=In-plane $p_\perp$ in GeV w.r.t. thrust axes ($E_\mathrm{CMS}=206$ GeV) XLabel=$p_\perp^\text{in}$ / GeV YLabel=$N \, \text{d}{\sigma}/\text{d}{p_\perp^\text{in}}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d35-x01-y01 Title=Out-of-plane $p_\perp$ in GeV w.r.t. thrust axes ($E_\mathrm{CMS}=206$ GeV) XLabel=$p_\perp^\text{out}$ / GeV YLabel=$N \, \text{d}{\sigma}/\text{d}{p_\perp^\text{out}}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d36-x01-y01 Title=Rapidity w.r.t. thrust axes, $y_T$ ($E_\mathrm{CMS}=133$ GeV) XLabel=$y_T$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_T}$ FullRange=1 LegendXPos=0.05 LegendYPos=0.2 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d37-x01-y01 Title=Rapidity w.r.t. thrust axes, $y_T$ ($E_\mathrm{CMS}=161$ GeV) XLabel=$y_T$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_T}$ FullRange=1 LegendXPos=0.05 LegendYPos=0.2 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d38-x01-y01 Title=Rapidity w.r.t. thrust axes, $y_T$ ($E_\mathrm{CMS}=172$ GeV) XLabel=$y_T$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_T}$ FullRange=1 LegendXPos=0.05 LegendYPos=0.2 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d39-x01-y01 Title=Rapidity w.r.t. thrust axes, $y_T$ ($E_\mathrm{CMS}=183$ GeV) XLabel=$y_T$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_T}$ FullRange=1 LegendXPos=0.05 LegendYPos=0.2 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d40-x01-y01 Title=Rapidity w.r.t. thrust axes, $y_T$ ($E_\mathrm{CMS}=189$ GeV) XLabel=$y_T$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_T}$ FullRange=1 LegendXPos=0.05 LegendYPos=0.2 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d41-x01-y01 Title=Rapidity w.r.t. thrust axes, $y_T$ ($E_\mathrm{CMS}=196$ GeV) XLabel=$y_T$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_T}$ FullRange=1 LegendXPos=0.05 LegendYPos=0.2 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d42-x01-y01 Title=Rapidity w.r.t. thrust axes, $y_T$ ($E_\mathrm{CMS}=200$ GeV) XLabel=$y_T$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_T}$ FullRange=1 LegendXPos=0.05 LegendYPos=0.2 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d43-x01-y01 Title=Rapidity w.r.t. thrust axes, $y_T$ ($E_\mathrm{CMS}=206$ GeV) XLabel=$y_T$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_T}$ FullRange=1 LegendXPos=0.05 LegendYPos=0.2 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d44-x01-y01 Title=Rapidity w.r.t. sphericity axes, $y_S$ ($E_\mathrm{CMS}=133$ GeV) XLabel=$y_S$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_S}$ FullRange=1 LegendXPos=0.05 LegendYPos=0.2 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d45-x01-y01 Title=Rapidity w.r.t. sphericity axes, $y_S$ ($E_\mathrm{CMS}=161$ GeV) XLabel=$y_S$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_S}$ FullRange=1 LegendXPos=0.05 LegendYPos=0.2 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d46-x01-y01 Title=Rapidity w.r.t. sphericity axes, $y_S$ ($E_\mathrm{CMS}=172$ GeV) XLabel=$y_S$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_S}$ FullRange=1 LegendXPos=0.05 LegendYPos=0.2 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d47-x01-y01 Title=Rapidity w.r.t. sphericity axes, $y_S$ ($E_\mathrm{CMS}=183$ GeV) XLabel=$y_S$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_S}$ FullRange=1 LegendXPos=0.05 LegendYPos=0.2 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d48-x01-y01 Title=Rapidity w.r.t. sphericity axes, $y_S$ ($E_\mathrm{CMS}=189$ GeV) XLabel=$y_S$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_S}$ FullRange=1 LegendXPos=0.05 LegendYPos=0.2 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d49-x01-y01 Title=Rapidity w.r.t. sphericity axes, $y_S$ ($E_\mathrm{CMS}=196$ GeV) XLabel=$y_S$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_S}$ FullRange=1 LegendXPos=0.05 LegendYPos=0.2 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d50-x01-y01 Title=Rapidity w.r.t. sphericity axes, $y_S$ ($E_\mathrm{CMS}=200$ GeV) XLabel=$y_S$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_S}$ FullRange=1 LegendXPos=0.05 LegendYPos=0.2 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d51-x01-y01 Title=Rapidity w.r.t. sphericity axes, $y_S$ ($E_\mathrm{CMS}=206$ GeV) XLabel=$y_S$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_S}$ FullRange=1 LegendXPos=0.05 LegendYPos=0.2 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d54-x01-y01 Title=Thrust ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$T$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}T$ LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d55-x01-y01 Title=Thrust ($E_\mathrm{CMS}=133$ GeV) XLabel=$1-T$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}(1-T)$ LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d56-x01-y01 Title=Thrust ($E_\mathrm{CMS}=161$ GeV) XLabel=$1-T$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}(1-T)$ LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d57-x01-y01 Title=Thrust ($E_\mathrm{CMS}=172$ GeV) XLabel=$1-T$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}(1-T)$ LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d58-x01-y01 Title=Thrust ($E_\mathrm{CMS}=183$ GeV) XLabel=$1-T$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}(1-T)$ LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d59-x01-y01 Title=Thrust ($E_\mathrm{CMS}=189$ GeV) XLabel=$1-T$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}(1-T)$ LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d60-x01-y01 Title=Thrust ($E_\mathrm{CMS}=200$ GeV) XLabel=$1-T$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}(1-T)$ LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d61-x01-y01 Title=Thrust ($E_\mathrm{CMS}=206$ GeV) XLabel=$1-T$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}(1-T)$ LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d62-x01-y01 Title=Heavy jet mass ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$\rho$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\rho$ LegendXPos=0.25 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d63-x01-y01 Title=Heavy jet mass ($E_\mathrm{CMS}=133$ GeV) XLabel=$\rho$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\rho$ LegendXPos=0.65 LegendYPos=1.1 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d64-x01-y01 Title=Heavy jet mass ($E_\mathrm{CMS}=161$ GeV) XLabel=$\rho$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\rho$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d65-x01-y01 Title=Heavy jet mass ($E_\mathrm{CMS}=172$ GeV) XLabel=$\rho$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\rho$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d66-x01-y01 Title=Heavy jet mass ($E_\mathrm{CMS}=183$ GeV) XLabel=$\rho$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\rho$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d67-x01-y01 Title=Heavy jet mass ($E_\mathrm{CMS}=189$ GeV) XLabel=$\rho$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\rho$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d68-x01-y01 Title=Heavy jet mass ($E_\mathrm{CMS}=200$ GeV) XLabel=$\rho$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\rho$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d69-x01-y01 Title=Heavy jet mass ($E_\mathrm{CMS}=206$ GeV) XLabel=$\rho$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\rho$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d70-x01-y01 Title=Total jet broadening ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$B_T$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}B_T$ LegendXPos=0.15 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d71-x01-y01 Title=Total jet broadening ($E_\mathrm{CMS}=133$ GeV) XLabel=$B_T$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}B_T$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d72-x01-y01 Title=Total jet broadening ($E_\mathrm{CMS}=161$ GeV) XLabel=$B_T$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}B_T$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d73-x01-y01 Title=Total jet broadening ($E_\mathrm{CMS}=172$ GeV) XLabel=$B_T$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}B_T$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d74-x01-y01 Title=Total jet broadening ($E_\mathrm{CMS}=183$ GeV) XLabel=$B_T$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}B_T$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d75-x01-y01 Title=Total jet broadening ($E_\mathrm{CMS}=189$ GeV) XLabel=$B_T$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}B_T$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d76-x01-y01 Title=Total jet broadening ($E_\mathrm{CMS}=200$ GeV) XLabel=$B_T$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}B_T$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d77-x01-y01 Title=Total jet broadening ($E_\mathrm{CMS}=206$ GeV) XLabel=$B_T$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}B_T$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d78-x01-y01 Title=Wide jet broadening ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$B_W$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}B_W$ LegendXPos=0.15 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d79-x01-y01 Title=Wide jet broadening ($E_\mathrm{CMS}=133$ GeV) XLabel=$B_W$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}B_W$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d80-x01-y01 Title=Wide jet broadening ($E_\mathrm{CMS}=161$ GeV) XLabel=$B_W$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}B_W$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d81-x01-y01 Title=Wide jet broadening ($E_\mathrm{CMS}=172$ GeV) XLabel=$B_W$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}B_W$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d82-x01-y01 Title=Wide jet broadening ($E_\mathrm{CMS}=183$ GeV) XLabel=$B_W$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}B_W$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d83-x01-y01 Title=Wide jet broadening ($E_\mathrm{CMS}=189$ GeV) XLabel=$B_W$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}B_W$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d84-x01-y01 Title=Wide jet broadening ($E_\mathrm{CMS}=200$ GeV) XLabel=$B_W$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}B_W$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d85-x01-y01 Title=Wide jet broadening ($E_\mathrm{CMS}=206$ GeV) XLabel=$B_W$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}B_W$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d86-x01-y01 Title=C-Parameter ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$C$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}C$ LegendXPos=0.15 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d87-x01-y01 Title=C-Parameter ($E_\mathrm{CMS}=133$ GeV) XLabel=$C$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}C$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d88-x01-y01 Title=C-Parameter ($E_\mathrm{CMS}=161$ GeV) XLabel=$C$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}C$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d89-x01-y01 Title=C-Parameter ($E_\mathrm{CMS}=172$ GeV) XLabel=$C$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}C$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d90-x01-y01 Title=C-Parameter ($E_\mathrm{CMS}=183$ GeV) XLabel=$C$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}C$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d91-x01-y01 Title=C-Parameter ($E_\mathrm{CMS}=189$ GeV) XLabel=$C$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}C$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d92-x01-y01 Title=C-Parameter ($E_\mathrm{CMS}=200$ GeV) XLabel=$C$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}C$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d93-x01-y01 Title=C-Parameter ($E_\mathrm{CMS}=206$ GeV) XLabel=$C$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}C$ LegendXPos=0.15 LegendYPos=0.3 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d94-x01-y01 Title=Thrust major ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$T_\mathrm{major}$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}T_\mathrm{major}$ LegendXPos=0.15 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d95-x01-y01 Title=Thrust major ($E_\mathrm{CMS}=133$ GeV) XLabel=$T_\mathrm{major}$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}T_\mathrm{major}$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d96-x01-y01 Title=Thrust major ($E_\mathrm{CMS}=161$ GeV) XLabel=$T_\mathrm{major}$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}T_\mathrm{major}$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d97-x01-y01 Title=Thrust major ($E_\mathrm{CMS}=172$ GeV) XLabel=$T_\mathrm{major}$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}T_\mathrm{major}$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d98-x01-y01 Title=Thrust major ($E_\mathrm{CMS}=183$ GeV) XLabel=$T_\mathrm{major}$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}T_\mathrm{major}$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d99-x01-y01 Title=Thrust major ($E_\mathrm{CMS}=189$ GeV) XLabel=$T_\mathrm{major}$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}T_\mathrm{major}$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d100-x01-y01 Title=Thrust major ($E_\mathrm{CMS}=200$ GeV) XLabel=$T_\mathrm{major}$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}T_\mathrm{major}$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d101-x01-y01 Title=Thrust major ($E_\mathrm{CMS}=206$ GeV) XLabel=$T_\mathrm{major}$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}T_\mathrm{major}$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d102-x01-y01 Title=Thrust minor ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$\ln(T_\mathrm{minor})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(T_\mathrm{minor})$ LegendXPos=0.35 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d103-x01-y01 Title=Thrust minor ($E_\mathrm{CMS}=133$ GeV) XLabel=$T_\mathrm{minor}$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}T_\mathrm{minor}$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d104-x01-y01 Title=Thrust minor ($E_\mathrm{CMS}=161$ GeV) XLabel=$T_\mathrm{minor}$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}T_\mathrm{minor}$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d105-x01-y01 Title=Thrust minor ($E_\mathrm{CMS}=172$ GeV) XLabel=$T_\mathrm{minor}$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}T_\mathrm{minor}$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d106-x01-y01 Title=Thrust minor ($E_\mathrm{CMS}=183$ GeV) XLabel=$T_\mathrm{minor}$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}T_\mathrm{minor}$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d107-x01-y01 Title=Thrust minor ($E_\mathrm{CMS}=189$ GeV) XLabel=$T_\mathrm{minor}$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}T_\mathrm{minor}$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d108-x01-y01 Title=Thrust minor ($E_\mathrm{CMS}=200$ GeV) XLabel=$T_\mathrm{minor}$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}T_\mathrm{minor}$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d109-x01-y01 Title=Thrust minor ($E_\mathrm{CMS}=206$ GeV) XLabel=$T_\mathrm{minor}$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}T_\mathrm{minor}$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d110-x01-y01 Title=Jet mass difference ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$M_D$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}M_D$ LegendXPos=0.05 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d111-x01-y01 Title=Jet mass difference ($E_\mathrm{CMS}=133$ GeV) XLabel=$M_D$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}M_D$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d112-x01-y01 Title=Jet mass difference ($E_\mathrm{CMS}=161$ GeV) XLabel=$M_D$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}M_D$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d113-x01-y01 Title=Jet mass difference ($E_\mathrm{CMS}=1722$ GeV) XLabel=$M_D$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}M_D$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d114-x01-y01 Title=Jet mass difference ($E_\mathrm{CMS}=183$ GeV) XLabel=$M_D$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}M_D$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d115-x01-y01 Title=Jet mass difference ($E_\mathrm{CMS}=189$ GeV) XLabel=$M_D$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}M_D$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d116-x01-y01 Title=Jet mass difference ($E_\mathrm{CMS}=200$ GeV) XLabel=$M_D$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}M_D$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d117-x01-y01 Title=Jet mass difference ($E_\mathrm{CMS}=206$ GeV) XLabel=$M_D$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}M_D$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d118-x01-y01 Title=Aplanarity ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$A$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}A$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d119-x01-y01 Title=Aplanarity ($E_\mathrm{CMS}=133$ GeV) XLabel=$A$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}A$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d120-x01-y01 Title=Aplanarity ($E_\mathrm{CMS}=161$ GeV) XLabel=$A$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}A$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d121-x01-y01 Title=Aplanarity ($E_\mathrm{CMS}=172$ GeV) XLabel=$A$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}A$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d122-x01-y01 Title=Aplanarity ($E_\mathrm{CMS}=183$ GeV) XLabel=$A$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}A$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d123-x01-y01 Title=Aplanarity ($E_\mathrm{CMS}=189$ GeV) XLabel=$A$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}A$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d124-x01-y01 Title=Aplanarity ($E_\mathrm{CMS}=200$ GeV) XLabel=$A$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}A$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d125-x01-y01 Title=Aplanarity ($E_\mathrm{CMS}=206$ GeV) XLabel=$A$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}A$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d126-x01-y01 Title=Planarity ($E_\mathrm{CMS}=133$ GeV) XLabel=$P$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}P$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d127-x01-y01 Title=Planarity ($E_\mathrm{CMS}=161$ GeV) XLabel=$P$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}P$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d128-x01-y01 Title=Planarity ($E_\mathrm{CMS}=172$ GeV) XLabel=$P$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}P$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d129-x01-y01 Title=Planarity ($E_\mathrm{CMS}=183$ GeV) XLabel=$P$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}P$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d130-x01-y01 Title=Planarity ($E_\mathrm{CMS}=189$ GeV) XLabel=$P$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}P$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d131-x01-y01 Title=Planarity ($E_\mathrm{CMS}=200$ GeV) XLabel=$P$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}P$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d132-x01-y01 Title=Planarity ($E_\mathrm{CMS}=206$ GeV) XLabel=$P$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}P$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d133-x01-y01 Title=Oblateness ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$O$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}O$ LegendXPos=0.05 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d134-x01-y01 Title=Oblateness ($E_\mathrm{CMS}=133$ GeV) XLabel=$O$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}O$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d135-x01-y01 Title=Oblateness ($E_\mathrm{CMS}=161$ GeV) XLabel=$O$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}O$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d136-x01-y01 Title=Oblateness ($E_\mathrm{CMS}=172$ GeV) XLabel=$O$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}O$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d137-x01-y01 Title=Oblateness ($E_\mathrm{CMS}=183$ GeV) XLabel=$O$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}O$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d138-x01-y01 Title=Oblateness ($E_\mathrm{CMS}=189$ GeV) XLabel=$O$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}O$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d139-x01-y01 Title=Oblateness ($E_\mathrm{CMS}=200$ GeV) XLabel=$O$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}O$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d140-x01-y01 Title=Oblateness ($E_\mathrm{CMS}=206$ GeV) XLabel=$O$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}O$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d141-x01-y01 Title=Sphericity ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$S$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}S$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d142-x01-y01 Title=Sphericity ($E_\mathrm{CMS}=133$ GeV) XLabel=$S$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}S$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d143-x01-y01 Title=Sphericity ($E_\mathrm{CMS}=161$ GeV) XLabel=$S$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}S$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d144-x01-y01 Title=Sphericity ($E_\mathrm{CMS}=172$ GeV) XLabel=$S$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}S$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d145-x01-y01 Title=Sphericity ($E_\mathrm{CMS}=183$ GeV) XLabel=$S$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}S$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d146-x01-y01 Title=Sphericity ($E_\mathrm{CMS}=189$ GeV) XLabel=$S$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}S$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d147-x01-y01 Title=Sphericity ($E_\mathrm{CMS}=200$ GeV) XLabel=$S$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}S$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d148-x01-y01 Title=Sphericity ($E_\mathrm{CMS}=206$ GeV) XLabel=$S$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}S$ # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d149-x01-y01 Title=Durham jet resolution $2 \to 1$ ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$-\ln(y_{12})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{12})$ LegendXPos=0.05 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d150-x01-y01 Title=Durham jet resolution $2 \to 1$ ($E_\mathrm{CMS}=133$ GeV) XLabel=$-\ln(y_{12})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{12})$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d151-x01-y01 Title=Durham jet resolution $2 \to 1$ ($E_\mathrm{CMS}=161$ GeV) XLabel=$-\ln(y_{12})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{12})$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d152-x01-y01 Title=Durham jet resolution $2 \to 1$ ($E_\mathrm{CMS}=173$ GeV) XLabel=$-\ln(y_{12})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{12})$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d153-x01-y01 Title=Durham jet resolution $2 \to 1$ ($E_\mathrm{CMS}=183$ GeV) XLabel=$-\ln(y_{12})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{12})$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d154-x01-y01 Title=Durham jet resolution $2 \to 1$ ($E_\mathrm{CMS}=189$ GeV) XLabel=$-\ln(y_{12})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{12})$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d155-x01-y01 Title=Durham jet resolution $2 \to 1$ ($E_\mathrm{CMS}=200$ GeV) XLabel=$-\ln(y_{12})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{12})$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d156-x01-y01 Title=Durham jet resolution $2 \to 1$ ($E_\mathrm{CMS}=206$ GeV) XLabel=$-\ln(y_{12})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{12})$ LegendXPos=0.65 LegendYPos=0.8 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d157-x01-y01 Title=Durham jet resolution $3 \to 2$ ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$-\ln(y_{23})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{23})$ LegendXPos=0.15 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d158-x01-y01 Title=Durham jet resolution $3 \to 2$ ($E_\mathrm{CMS}=133$ GeV) XLabel=$-\ln(y_{23})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{23})$ LegendXPos=0.15 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d159-x01-y01 Title=Durham jet resolution $3 \to 2$ ($E_\mathrm{CMS}=161$ GeV) XLabel=$-\ln(y_{23})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{23})$ LegendXPos=0.15 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d160-x01-y01 Title=Durham jet resolution $3 \to 2$ ($E_\mathrm{CMS}=172$ GeV) XLabel=$-\ln(y_{23})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{23})$ LegendXPos=0.15 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d161-x01-y01 Title=Durham jet resolution $3 \to 2$ ($E_\mathrm{CMS}=183$ GeV) XLabel=$-\ln(y_{23})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{23})$ LegendXPos=0.15 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d162-x01-y01 Title=Durham jet resolution $3 \to 2$ ($E_\mathrm{CMS}=189$ GeV) XLabel=$-\ln(y_{23})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{23})$ LegendXPos=0.15 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d163-x01-y01 Title=Durham jet resolution $3 \to 2$ ($E_\mathrm{CMS}=200$ GeV) XLabel=$-\ln(y_{23})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{23})$ LegendXPos=0.15 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d164-x01-y01 Title=Durham jet resolution $3 \to 2$ ($E_\mathrm{CMS}=206$ GeV) XLabel=$-\ln(y_{23})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{23})$ LegendXPos=0.15 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d165-x01-y01 Title=Durham jet resolution $4 \to 3$ ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$-\ln(y_{34})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{34})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d166-x01-y01 Title=Durham jet resolution $4 \to 3$ ($E_\mathrm{CMS}=133$ GeV) XLabel=$-\ln(y_{34})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{34})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d167-x01-y01 Title=Durham jet resolution $4 \to 3$ ($E_\mathrm{CMS}=161$ GeV) XLabel=$-\ln(y_{34})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{34})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d168-x01-y01 Title=Durham jet resolution $4 \to 3$ ($E_\mathrm{CMS}=172$ GeV) XLabel=$-\ln(y_{34})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{34})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d169-x01-y01 Title=Durham jet resolution $4 \to 3$ ($E_\mathrm{CMS}=183$ GeV) XLabel=$-\ln(y_{34})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{34})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d170-x01-y01 Title=Durham jet resolution $4 \to 3$ ($E_\mathrm{CMS}=189$ GeV) XLabel=$-\ln(y_{34})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{34})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d171-x01-y01 Title=Durham jet resolution $4 \to 3$ ($E_\mathrm{CMS}=200$ GeV) XLabel=$-\ln(y_{34})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{34})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d172-x01-y01 Title=Durham jet resolution $4 \to 3$ ($E_\mathrm{CMS}=206$ GeV) XLabel=$-\ln(y_{34})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{34})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d173-x01-y01 Title=Durham jet resolution $5 \to 4$ ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$-\ln(y_{45})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{45})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d174-x01-y01 Title=Durham jet resolution $5 \to 4$ ($E_\mathrm{CMS}=133$ GeV) XLabel=$-\ln(y_{45})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{45})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d175-x01-y01 Title=Durham jet resolution $5 \to 4$ ($E_\mathrm{CMS}=161$ GeV) XLabel=$-\ln(y_{45})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{45})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d176-x01-y01 Title=Durham jet resolution $5 \to 4$ ($E_\mathrm{CMS}=172$ GeV) XLabel=$-\ln(y_{45})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{45})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d177-x01-y01 Title=Durham jet resolution $5 \to 4$ ($E_\mathrm{CMS}=183$ GeV) XLabel=$-\ln(y_{45})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{45})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d178-x01-y01 Title=Durham jet resolution $5 \to 4$ ($E_\mathrm{CMS}=189$ GeV) XLabel=$-\ln(y_{45})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{45})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d179-x01-y01 Title=Durham jet resolution $5 \to 4$ ($E_\mathrm{CMS}=200$ GeV) XLabel=$-\ln(y_{45})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{45})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d180-x01-y01 Title=Durham jet resolution $6 \to 5$ ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$-\ln(y_{56})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{56})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d181-x01-y01 Title=Durham jet resolution $6 \to 5$ ($E_\mathrm{CMS}=133$ GeV) XLabel=$-\ln(y_{56})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{56})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d182-x01-y01 Title=Durham jet resolution $6 \to 5$ ($E_\mathrm{CMS}=161$ GeV) XLabel=$-\ln(y_{56})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{56})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d183-x01-y01 Title=Durham jet resolution $6 \to 5$ ($E_\mathrm{CMS}=172$ GeV) XLabel=$-\ln(y_{56})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{56})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d184-x01-y01 Title=Durham jet resolution $6 \to 5$ ($E_\mathrm{CMS}=183$ GeV) XLabel=$-\ln(y_{56})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{56})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d185-x01-y01 Title=Durham jet resolution $6 \to 5$ ($E_\mathrm{CMS}=189$ GeV) XLabel=$-\ln(y_{56})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{56})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d186-x01-y01 Title=Durham jet resolution $6 \to 5$ ($E_\mathrm{CMS}=200$ GeV) XLabel=$-\ln(y_{56})$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\ln(y_{56})$ LegendXPos=0.25 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d187-x01-y01 Title=1-jet fraction ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$\ln(y_\mathrm{cut})$ YLabel=$\sigma(\text{1 jet})/\sigma(\text{inclusive})$ LegendYPos=0.5 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d188-x01-y01 Title=1-jet fraction ($E_\mathrm{CMS}=133$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{1 jet})/\sigma(\text{inclusive})$ LegendYPos=0.8 LegendXPos=0.05 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d189-x01-y01 Title=1-jet fraction ($E_\mathrm{CMS}=161$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{1 jet})/\sigma(\text{inclusive})$ LegendYPos=0.8 LegendXPos=0.05 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d190-x01-y01 Title=1-jet fraction ($E_\mathrm{CMS}=172$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{1 jet})/\sigma(\text{inclusive})$ LegendYPos=0.8 LegendXPos=0.05 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d191-x01-y01 Title=1-jet fraction ($E_\mathrm{CMS}=183$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{1 jet})/\sigma(\text{inclusive})$ LegendYPos=0.8 LegendXPos=0.05 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d192-x01-y01 Title=1-jet fraction ($E_\mathrm{CMS}=189$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{1 jet})/\sigma(\text{inclusive})$ LegendYPos=0.8 LegendXPos=0.05 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d193-x01-y01 Title=1-jet fraction ($E_\mathrm{CMS}=200$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{1 jet})/\sigma(\text{inclusive})$ LegendYPos=0.8 LegendXPos=0.05 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d194-x01-y01 Title=1-jet fraction ($E_\mathrm{CMS}=206$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{1 jet})/\sigma(\text{inclusive})$ LegendYPos=0.8 LegendXPos=0.05 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d195-x01-y01 Title=2-jet fraction ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$\ln(y_\mathrm{cut})$ YLabel=$\sigma(\text{2 jet})/\sigma(\text{inclusive})$ LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d196-x01-y01 Title=2-jet fraction ($E_\mathrm{CMS}=133$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{2 jet})/\sigma(\text{inclusive})$ LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d197-x01-y01 Title=2-jet fraction ($E_\mathrm{CMS}=161$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{2 jet})/\sigma(\text{inclusive})$ LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d198-x01-y01 Title=2-jet fraction ($E_\mathrm{CMS}=172$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{2 jet})/\sigma(\text{inclusive})$ LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d199-x01-y01 Title=2-jet fraction ($E_\mathrm{CMS}=183$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{2 jet})/\sigma(\text{inclusive})$ LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d200-x01-y01 Title=2-jet fraction ($E_\mathrm{CMS}=189$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{2 jet})/\sigma(\text{inclusive})$ LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d201-x01-y01 Title=2-jet fraction ($E_\mathrm{CMS}=200$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{2 jet})/\sigma(\text{inclusive})$ LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d202-x01-y01 Title=2-jet fraction ($E_\mathrm{CMS}=206$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{2 jet})/\sigma(\text{inclusive})$ LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d203-x01-y01 Title=3-jet fraction ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$\ln(y_\mathrm{cut})$ YLabel=$\sigma(\text{3 jet})/\sigma(\text{inclusive})$ LegendXPos=0.25 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d204-x01-y01 Title=3-jet fraction ($E_\mathrm{CMS}=133$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{3 jet})/\sigma(\text{inclusive})$ LegendXPos=0.25 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d205-x01-y01 Title=3-jet fraction ($E_\mathrm{CMS}=161$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{3 jet})/\sigma(\text{inclusive})$ LegendXPos=0.25 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d206-x01-y01 Title=3-jet fraction ($E_\mathrm{CMS}=172$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{3 jet})/\sigma(\text{inclusive})$ LegendXPos=0.25 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d207-x01-y01 Title=3-jet fraction ($E_\mathrm{CMS}=183$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{3 jet})/\sigma(\text{inclusive})$ LegendXPos=0.25 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d208-x01-y01 Title=3-jet fraction ($E_\mathrm{CMS}=189$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{3 jet})/\sigma(\text{inclusive})$ LegendXPos=0.25 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d209-x01-y01 Title=3-jet fraction ($E_\mathrm{CMS}=200$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{3 jet})/\sigma(\text{inclusive})$ LegendXPos=0.25 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d210-x01-y01 Title=3-jet fraction ($E_\mathrm{CMS}=206$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{3 jet})/\sigma(\text{inclusive})$ LegendXPos=0.25 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d211-x01-y01 Title=4-jet fraction ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$\ln(y_\mathrm{cut})$ YLabel=$\sigma(\text{4 jet})/\sigma(\text{inclusive})$ LegendXPos=0.15 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d212-x01-y01 Title=4-jet fraction ($E_\mathrm{CMS}=133$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{4 jet})/\sigma(\text{inclusive})$ LegendXPos=0.35 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d213-x01-y01 Title=4-jet fraction ($E_\mathrm{CMS}=161$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{4 jet})/\sigma(\text{inclusive})$ LegendXPos=0.35 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d214-x01-y01 Title=4-jet fraction ($E_\mathrm{CMS}=172$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{4 jet})/\sigma(\text{inclusive})$ LegendXPos=0.35 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d215-x01-y01 Title=4-jet fraction ($E_\mathrm{CMS}=183$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{4 jet})/\sigma(\text{inclusive})$ LegendXPos=0.35 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d216-x01-y01 Title=4-jet fraction ($E_\mathrm{CMS}=189$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{4 jet})/\sigma(\text{inclusive})$ LegendXPos=0.35 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d217-x01-y01 Title=4-jet fraction ($E_\mathrm{CMS}=200$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{4 jet})/\sigma(\text{inclusive})$ LegendXPos=0.35 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d218-x01-y01 Title=4-jet fraction ($E_\mathrm{CMS}=206$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{4 jet})/\sigma(\text{inclusive})$ LegendXPos=0.35 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d219-x01-y01 Title=5-jet fraction ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$\ln(y_\mathrm{cut})$ YLabel=$\sigma(\text{5 jet})/\sigma(\text{inclusive})$ LegendXPos=0.15 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d220-x01-y01 Title=5-jet fraction ($E_\mathrm{CMS}=133$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{5 jet})/\sigma(\text{inclusive})$ LegendXPos=0.35 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d221-x01-y01 Title=5-jet fraction ($E_\mathrm{CMS}=161$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{5 jet})/\sigma(\text{inclusive})$ LegendXPos=0.35 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d222-x01-y01 Title=5-jet fraction ($E_\mathrm{CMS}=172$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{5 jet})/\sigma(\text{inclusive})$ LegendXPos=0.35 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d223-x01-y01 Title=5-jet fraction ($E_\mathrm{CMS}=183$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{5 jet})/\sigma(\text{inclusive})$ LegendXPos=0.35 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d224-x01-y01 Title=5-jet fraction ($E_\mathrm{CMS}=189$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{5 jet})/\sigma(\text{inclusive})$ LegendXPos=0.35 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d225-x01-y01 Title=5-jet fraction ($E_\mathrm{CMS}=200$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{5 jet})/\sigma(\text{inclusive})$ LegendXPos=0.35 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d226-x01-y01 Title=5-jet fraction ($E_\mathrm{CMS}=206$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma(\text{5 jet})/\sigma(\text{inclusive})$ LegendXPos=0.35 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d227-x01-y01 Title=$\geq$6-jet fraction ($E_\mathrm{CMS}=91.2$ GeV) XLabel=$\ln(y_\mathrm{cut})$ YLabel=$\sigma($\geq$\text{6 jet})/\sigma(\text{inclusive})$ LegendXPos=0.05 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d228-x01-y01 Title=$\geq$6-jet fraction ($E_\mathrm{CMS}=133$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma($\geq$\text{6 jet})/\sigma(\text{inclusive})$ LegendXPos=0.05 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d229-x01-y01 Title=$\geq$6-jet fraction ($E_\mathrm{CMS}=161$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma($\geq$\text{6 jet})/\sigma(\text{inclusive})$ LegendXPos=0.05 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d230-x01-y01 Title=$\geq$6-jet fraction ($E_\mathrm{CMS}=172$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma($\geq$\text{6 jet})/\sigma(\text{inclusive})$ LegendXPos=0.05 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d231-x01-y01 Title=$\geq$6-jet fraction ($E_\mathrm{CMS}=183$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma($\geq$\text{6 jet})/\sigma(\text{inclusive})$ LegendXPos=0.05 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d232-x01-y01 Title=$\geq$6-jet fraction ($E_\mathrm{CMS}=189$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma($\geq$\text{6 jet})/\sigma(\text{inclusive})$ LegendXPos=0.05 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d233-x01-y01 Title=$\geq$6-jet fraction ($E_\mathrm{CMS}=200$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma($\geq$\text{6 jet})/\sigma(\text{inclusive})$ LegendXPos=0.05 LegendYPos=0.6 # END PLOT # BEGIN PLOT /ALEPH_2004_S5765862/d234-x01-y01 Title=$\geq$6-jet fraction ($E_\mathrm{CMS}=206$ GeV) XLabel=$\log(y_\mathrm{cut})$ YLabel=$\sigma($\geq$\text{6 jet})/\sigma(\text{inclusive})$ LegendXPos=0.05 LegendYPos=0.6 # END PLOT rivet-1.8.3/data/plotinfo/D0_2004_S5992206.plot0000644000175000017500000000222512116077756016503 0ustar sunsun# BEGIN PLOT /D0_2004_S5992206/d01-x02-y01 Title=Jet--jet azimuthal angle, $p_\perp^\text{max} \in [75,100]\text{ GeV}$ XLabel=$\Delta \phi_\text{dijet}$ / rad YLabel=$1/\sigma_\text{dijet} \, \text{d}\sigma_\text{dijet}/\text{d}\Delta\phi_\text{dijet}$ LegendXPos=0.10 FullRange=1 # END PLOT # BEGIN PLOT /D0_2004_S5992206/d02-x02-y01 Title=Jet--jet azimuthal angle, $p_\perp^\text{max} \in [100..130]\text{ GeV}$ XLabel=$\Delta \phi_\text{dijet}$ / rad YLabel=$1/\sigma_\text{dijet} \, \text{d}\sigma_\text{dijet}/\text{d}\Delta\phi_\text{dijet}$ LegendXPos=0.10 FullRange=1 # END PLOT # BEGIN PLOT /D0_2004_S5992206/d03-x02-y01 Title=Jet--jet azimuthal angle, $p_\perp^\text{max} \in [130..180]\text{ GeV}$ XLabel=$\Delta \phi_\text{dijet}$ / rad YLabel=$1/\sigma_\text{dijet} \, \text{d}\sigma_\text{dijet}/\text{d}\Delta\phi_\text{dijet}$ LegendXPos=0.10 FullRange=1 # END PLOT # BEGIN PLOT /D0_2004_S5992206/d04-x02-y01 Title=Jet--jet azimuthal angle, $p_\perp^\text{max} > 180\text{ GeV}$ XLabel=$\Delta \phi_\text{dijet}$ / rad YLabel=$1/\sigma_\text{dijet} \, \text{d}\sigma_\text{dijet}/\text{d}\Delta\phi_\text{dijet}$ LegendXPos=0.10 FullRange=1 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_CONF_2012_104.plot0000644000175000017500000000150412116077756017674 0ustar sunsun# BEGIN PLOT /ATLAS_2012_CONF_2012_104/count_e Title=Number of events in the electron channel XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_104/count_mu Title=Number of events in the muon channel XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_104/count_soft_channel Title=Number of events in the soft lepton channel XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_104/hist_eTmiss_e Title=$E_{\mathrm{T}}^{\rm miss}$ in the electron channel XLabel=$E_{\mathrm{T}}^{\rm miss}$ YLabel=$\mathrm{Events}/40\,$GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_104/hist_eTmiss_mu Title=$E_{\mathrm{T}}^{\rm miss}$ in the muon channel XLabel=$E_{\mathrm{T}}^{\rm miss}$ YLabel=$\mathrm{Events}/40\,$GeV LogY=1 # END PLOT rivet-1.8.3/data/plotinfo/OPAL_1998_S3780481.plot0000644000175000017500000000361612116077756017023 0ustar sunsun# BEGIN PLOT /OPAL_1998_S3780481/d01-x01-y01 Title=$uds$ events scaled momentum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_p$ FullRange=1 # END PLOT # BEGIN PLOT /OPAL_1998_S3780481/d02-x01-y01 Title=$c$ events scaled momentum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_p$ FullRange=1 # END PLOT # BEGIN PLOT /OPAL_1998_S3780481/d03-x01-y01 Title=$b$ events scaled momentum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_p$ FullRange=1 # END PLOT # BEGIN PLOT /OPAL_1998_S3780481/d04-x01-y01 Title=All events scaled momentum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_p$ FullRange=1 # END PLOT # BEGIN PLOT /OPAL_1998_S3780481/d05-x01-y01 Title=$uds$ events $\ln(1/x_p)$ XLabel=$\xi_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\xi_p$ FullRange=1 LegendYPos=0.65 # END PLOT # BEGIN PLOT /OPAL_1998_S3780481/d06-x01-y01 Title=$c$ events $\ln(1/x_p)$ XLabel=$\xi_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\xi_p$ FullRange=1 LegendYPos=0.65 # END PLOT # BEGIN PLOT /OPAL_1998_S3780481/d07-x01-y01 Title=$b$ events $\ln(1/x_p)$ XLabel=$\xi_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\xi_p$ FullRange=1 LegendYPos=0.65 # END PLOT # BEGIN PLOT /OPAL_1998_S3780481/d08-x01-y01 Title=All events $\ln(1/x_p)$ XLabel=$\xi_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\xi_p$ FullRange=1 LegendYPos=0.65 # END PLOT # BEGIN PLOT /OPAL_1998_S3780481/d09-x01-y01 Title=$uds$ events mean charged multiplicity XLabel= YLabel=Multiplicity ShowZero=0 # END PLOT # BEGIN PLOT /OPAL_1998_S3780481/d09-x01-y02 Title=$c$ events mean charged multiplicity XLabel= YLabel=Multiplicity ShowZero=0 # END PLOT # BEGIN PLOT /OPAL_1998_S3780481/d09-x01-y03 Title=$b$ events mean charged multiplicity XLabel= YLabel=Multiplicity ShowZero=0 # END PLOT # BEGIN PLOT /OPAL_1998_S3780481/d09-x01-y04 Title=All events mean charged multiplicity XLabel= YLabel=Multiplicity ShowZero=0 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_I1183818.plot0000644000175000017500000000426112116077756017070 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1183818/d0[1-2] XLabel=$|\eta|$ YLabel=$\langle \frac{\mathrm{d}^{2}\sum E_{\perp}}{\mathrm{d}\eta \mathrm{d}\phi} \rangle$~[GeV] LogY=0 LegendXPos=0.1 LegendYPos=0.5 # END PLOT # BEGIN PLOT /ATLAS_2012_I1183818/d01-x01-y01 Title=$E_{\perp}$ density for the minimum bias selection # END PLOT # BEGIN PLOT /ATLAS_2012_I1183818/d02-x01-y01 Title=$E_{\perp}$ density for the dijet selection in the transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1183818/d((0[3-9])|1) XLabel=$\sum E_{\perp}$~[GeV] YLabel=$\frac{1}{N_\text{evt}} \frac{\mathrm{d} N_\text{evt}}{\mathrm{d}\sum E_{\perp}}~[GeV$^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2012_I1183818/d03-x01-y01 Title=$\sum E_{\perp}$ for the minimum bias selection, $0.0 < |\eta| < 0.8$ # END PLOT # BEGIN PLOT /ATLAS_2012_I1183818/d04-x01-y01 Title=$\sum E_{\perp}$ for the minimum bias selection, $0.8 < |\eta| < 1.6$ # END PLOT # BEGIN PLOT /ATLAS_2012_I1183818/d05-x01-y01 Title=$\sum E_{\perp}$ for the minimum bias selection, $1.6 < |\eta| < 2.4$ # END PLOT # BEGIN PLOT /ATLAS_2012_I1183818/d06-x01-y01 Title=$\sum E_{\perp}$ for the minimum bias selection, $2.4 < |\eta| < 3.2$ # END PLOT # BEGIN PLOT /ATLAS_2012_I1183818/d07-x01-y01 Title=$\sum E_{\perp}$ for the minimum bias selection, $3.2 < |\eta| < 4.0$ # END PLOT # BEGIN PLOT /ATLAS_2012_I1183818/d08-x01-y01 Title=$\sum E_{\perp}$ for the minimum bias selection, $4.0 < |\eta| < 4.8$ # END PLOT # BEGIN PLOT /ATLAS_2012_I1183818/d09-x01-y01 Title=$\sum E_{\perp}$ for the dijet selection, $0.0 < |\eta| < 0.8$ # END PLOT # BEGIN PLOT /ATLAS_2012_I1183818/d10-x01-y01 Title=$\sum E_{\perp}$ for the dijet selection, $0.8 < |\eta| < 1.6$ # END PLOT # BEGIN PLOT /ATLAS_2012_I1183818/d11-x01-y01 Title=$\sum E_{\perp}$ for the dijet selection, $1.6 < |\eta| < 2.4$ # END PLOT # BEGIN PLOT /ATLAS_2012_I1183818/d12-x01-y01 Title=$\sum E_{\perp}$ for the dijet selection, $2.4 < |\eta| < 3.2$ # END PLOT # BEGIN PLOT /ATLAS_2012_I1183818/d13-x01-y01 Title=$\sum E_{\perp}$ for the dijet selection, $3.2 < |\eta| < 4.0$ # END PLOT # BEGIN PLOT /ATLAS_2012_I1183818/d14-x01-y01 Title=$\sum E_{\perp}$ for the dijet selection, $4.0 < |\eta| < 4.8$ # END PLOT rivet-1.8.3/data/plotinfo/MC_IDENTIFIED.plot0000644000175000017500000000213012116077756016506 0ustar sunsun# BEGIN PLOT /MC_GENERIC/EtaK Title=Pseudorapidity distribution of kaon multiplicity XLabel=$\eta$ YLabel=$1/\sigma_K \; \mathrm{d}\sigma_K/\mathrm{d}\eta$ LogY=0 LegendXPos=0.3 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_GENERIC/EtaLambda Title=Pseudorapidity distribution of $\Lambda$ multiplicity XLabel=$\eta$ YLabel=$1/\sigma_\Lambda \; \mathrm{d}\sigma_\Lambda/\mathrm{d}\eta$ LogY=0 LegendXPos=0.3 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_GENERIC/EtaPi Title=Pseudorapidity distribution of pion multiplicity XLabel=$\eta$ YLabel=$1/\sigma_\pi \; \mathrm{d}\sigma_\pi/\mathrm{d}\eta$ LogY=0 LegendXPos=0.3 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_GENERIC/Mults.*PIDs XLabel=$|\text{PID}|$ YLabel=$\langle N_\text{PID} \rangle$ LogY=1 # END PLOT # BEGIN PLOT /MC_GENERIC/MultsDecayedPIDs Title=Average per-event multiplicity of decayed particle IDs # END PLOT # BEGIN PLOT /MC_GENERIC/MultsStablePIDs Title=Average per-event multiplicity of stable particle IDs # END PLOT # BEGIN PLOT /MC_GENERIC/MultsAllPIDs Title=Average per-event multiplicity of \emph{all} (unphysical) particle IDs # END PLOT rivet-1.8.3/data/plotinfo/MC_GENERIC.plot0000644000175000017500000000563712116077756016175 0ustar sunsun# BEGIN PLOT /MC_GENERIC/E$ Title=Energy of all particles XLabel=$E$ [GeV] YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}E$ [GeV$^{-1}$] # END PLOT # BEGIN PLOT /MC_GENERIC/ECh Title=Energy of charged particles XLabel=$E$ [GeV] YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}E$ [GeV$^{-1}$] # END PLOT # BEGIN PLOT /MC_GENERIC/Eta XLabel=$\eta$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\eta$ LogY=0 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_GENERIC/Eta$ Title=Pseudorapidity of all particles # END PLOT # BEGIN PLOT /MC_GENERIC/EtaCh Title=Pseudorapidity of charged particles # END PLOT # BEGIN PLOT /MC_GENERIC/Eta.*PMRatio XLabel=$|\eta|$ YLabel=$\mathrm{d}\sigma/\mathrm{d}\eta_+ \; / \; \mathrm{d}\sigma/\mathrm{d}\eta_-$ LogY=0 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_GENERIC/EtaPMRatio Title=Pseudorapidity $+/-$ ratio of all particles # END PLOT # BEGIN PLOT /MC_GENERIC/EtaChPMRatio Title=Pseudorapidity $+/-$ ratio of charged particles # END PLOT # BEGIN PLOT /MC_GENERIC/EtaSumEt Title=Pseudorapidity distribution of $\langle \sum E_\perp \rangle$ XLabel=$\eta$ YLabel=$\langle \sum E_\perp \rangle$ LogY=0 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_GENERIC/MultCh Title=Charged multiplicity of events XLabel=$N_\text{ch}$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}N_\text{ch}$ LogY=0 # END PLOT # BEGIN PLOT /MC_GENERIC/Mult$ Title=Total multiplicity of events XLabel=$N$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}N$ LogY=0 # END PLOT # BEGIN PLOT /MC_GENERIC/Phi$ Title=Azimuthal distribution of all particles XLabel=$\phi$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\phi$ LogY=0 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_GENERIC/PhiCh Title=Azimuthal distribution of charged particles XLabel=$\phi$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}\phi$ LogY=0 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_GENERIC/Pt$ Title=Transverse momentum of all particles XLabel=$p_\perp$ [GeV] YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}p_\perp$ [GeV$^{-1}$] FullRange=1 # END PLOT # BEGIN PLOT /MC_GENERIC/PtCh Title=Transverse momentum of charged particles XLabel=$p_\perp$ [GeV] YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}p_\perp$ [GeV$^{-1}$] FullRange=1 # END PLOT # BEGIN PLOT /MC_GENERIC/Rapidity$ Title=Rapidity of all particles XLabel=$y$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}y$ LogY=0 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_GENERIC/RapidityPMRatio Title=Rapidity $+/-$ ratio of all particles XLabel=$|y|$ YLabel=$\mathrm{d}\sigma/\mathrm{d}y_+ \; / \; \mathrm{d}\sigma/\mathrm{d}y_-$ LogY=0 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_GENERIC/RapidityCh$ Title=Rapidity of charged particles XLabel=$y$ YLabel=$1/\sigma \; \mathrm{d}\sigma/\mathrm{d}y$ LogY=0 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_GENERIC/RapidityChPMRatio Title=Rapidity $+/-$ ratio of charged particles XLabel=$|y|$ YLabel=$\mathrm{d}\sigma/\mathrm{d}y_+ \; / \; \mathrm{d}\sigma/\mathrm{d}y_-$ LogY=0 LegendYPos=0.5 # END PLOT rivet-1.8.3/data/plotinfo/CDF_1996_S3349578.plot0000644000175000017500000001447012116077756016672 0ustar sunsun# BEGIN PLOT /CDF_1996_S3349578/d01-x01-y01 Title=Multijet mass in inclusive 3-jet events XLabel=$m_{3J}$ [GeV] YLabel=$1/N \mathrm{d}N/\mathrm{d}m$ [1/GeV] # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d01-x01-y02 Title=Multijet mass in inclusive 4-jet events XLabel=$m_{4J}$ [GeV] YLabel=$1/N \mathrm{d}N/\mathrm{d}m$ [1/GeV] # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d01-x01-y03 Title=Multijet mass in inclusive 5-jet events XLabel=$m_{5J}$ [GeV] YLabel=$1/N \mathrm{d}N/\mathrm{d}m$ [1/GeV] # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d02-x01-y01 Title=Dalitz distribution in inclusive 3-jet events XLabel=$X_3$ YLabel=$1/N \mathrm{d}N/\mathrm{d}X_3$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d03-x01-y01 Title=Dalitz distribution in inclusive 3-jet events XLabel=$X_4$ YLabel=$1/N \mathrm{d}N/\mathrm{d}X_4$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d04-x01-y01 Title=Dalitz distribution in inclusive 4-jet events XLabel=$X_3^{'}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}X_3^{'}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d05-x01-y01 Title=Dalitz distribution in inclusive 4-jet events XLabel=$X_4^{'}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}X_4^{'}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d06-x01-y01 Title=Dalitz distribution in inclusive 5-jet events XLabel=$X_3^{''}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}X_3^{''}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d07-x01-y01 Title=Dalitz distribution in inclusive 5-jet events XLabel=$X_4^{''}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}X_4^{''}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d08-x01-y01 Title=Leading jet angle in inclusive 3-jet events XLabel=$|\cos \theta_3|$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos\theta_3$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d09-x01-y01 Title=Angular distribution in inclusive 3-jet events XLabel=$\Psi_3$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\Psi_3$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d10-x01-y01 Title=Leading jet angle in inclusive 4-jet events XLabel=$|\cos \theta_{3^'}|$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos\theta_{3^'}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d11-x01-y01 Title=Angular distribution in inclusive 4-jet events XLabel=$\Psi_{3^'}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\Psi_{3^'}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d12-x01-y01 Title=Leading jet angle in inclusive 5-jet events XLabel=$|\cos \theta_{3^{''}}|$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos\theta_{3^{''}}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d13-x01-y01 Title=Angular distribution in inclusive 5-jet events XLabel=$\Psi_{3^{''}}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\Psi_{3^{''}}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d14-x01-y01 Title=Single-jet mass fraction in inclusive 3-jet events XLabel=$f_3$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_3$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d14-x01-y02 Title=Single-jet mass fraction in inclusive 3-jet events XLabel=$f_4$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_4$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d14-x01-y03 Title=Single-jet mass fraction in inclusive 3-jet events XLabel=$f_5$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_5$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d15-x01-y01 Title=Single-jet mass fraction in inclusive 4-jet events XLabel=$f_3^{'}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_3^{'}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d15-x01-y02 Title=Single-jet mass fraction in inclusive 4-jet events XLabel=$f_4^{'}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_4^{'}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d15-x01-y03 Title=Single-jet mass fraction in inclusive 4-jet events XLabel=$f_5^{'}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_5^{'}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d16-x01-y01 Title=Single-jet mass fraction in inclusive 5-jet events XLabel=$f_3^{''}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_3^{''}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d16-x01-y02 Title=Single-jet mass fraction in inclusive 5-jet events XLabel=$f_4^{''}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_4^{''}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d16-x01-y03 Title=Single-jet mass fraction in inclusive 5-jet events XLabel=$f_5^{''}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_5^{''}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d17-x01-y01 Title=Two-body energy sharing in inclusive 4-jet events XLabel=$X_A$ YLabel=$1/N \mathrm{d}N/\mathrm{d}X_A$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d18-x01-y01 Title=Two-body energy sharing in inclusive 5-jet events XLabel=$X_A^{'}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}X_A^{'}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d18-x01-y02 Title=Two-body energy sharing in inclusive 5-jet events XLabel=$X_C$ YLabel=$1/N \mathrm{d}N/\mathrm{d}X_C$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d19-x01-y01 Title=Two-body angular distribution in inclusive 4-jet events XLabel=$\Psi^{'}_{AB}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\Psi^{'}_{AB}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d20-x01-y01 Title=Two-body angular distribution in inclusive 5-jet events XLabel=$\Psi^{''}_{A^{'}B^{'}}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\Psi^{''}_{A^{'}B^{'}}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d20-x01-y02 Title=Two-body angular distribution in inclusive 5-jet events XLabel=$\Psi^{''}_{CD}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\Psi^{''}_{CD}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d21-x01-y01 Title=Single-body mass fraction in inclusive 4-jet events XLabel=$f_A$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_A$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d21-x01-y02 Title=Single-body mass fraction in inclusive 4-jet events XLabel=$f_B$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_B$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d22-x01-y01 Title=Single-body mass fraction in inclusive 5-jet events XLabel=$f_A^{'}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_A^{'}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d23-x01-y01 Title=Single-body mass fraction in inclusive 5-jet events XLabel=$f_B^{'}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_B^{'}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d24-x01-y01 Title=Single-body mass fraction in inclusive 5-jet events XLabel=$f_C$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_C$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3349578/d25-x01-y01 Title=Single-body mass fraction in inclusive 5-jet events XLabel=$f_D$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_D$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/ALICE_2010_S8624100.plot0000644000175000017500000000213712116077756017040 0ustar sunsun# BEGIN PLOT /ALICE_2010_S8624100/d11-x01-y01 Title=Charged multiplicity, $|\eta|<0.5$ ,$\sqrt{s}=0.9$ TeV (INEL) XLabel=$N_\text{ch}$ YLabel=$\text{d}N/\text{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ALICE_2010_S8624100/d12-x01-y01 Title=Charged multiplicity, $|\eta|<1.0$ ,$\sqrt{s}=0.9$ TeV (INEL) XLabel=$N_\text{ch}$ YLabel=$\text{d}N/\text{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ALICE_2010_S8624100/d13-x01-y01 Title=Charged multiplicity, $|\eta|<1.3$ ,$\sqrt{s}=0.9$ TeV (INEL) XLabel=$N_\text{ch}$ YLabel=$\text{d}N/\text{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ALICE_2010_S8624100/d17-x01-y01 Title=Charged multiplicity, $|\eta|<0.5$ ,$\sqrt{s}=2.36$ TeV (INEL) XLabel=$N_\text{ch}$ YLabel=$\text{d}N/\text{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ALICE_2010_S8624100/d18-x01-y01 Title=Charged multiplicity, $|\eta|<1.0$ ,$\sqrt{s}=2.36$ TeV (INEL) XLabel=$N_\text{ch}$ YLabel=$\text{d}N/\text{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ALICE_2010_S8624100/d19-x01-y01 Title=Charged multiplicity, $|\eta|<1.3$ ,$\sqrt{s}=2.36$ TeV (INEL) XLabel=$N_\text{ch}$ YLabel=$\text{d}N/\text{d}N_\text{ch}$ # END PLOT rivet-1.8.3/data/plotinfo/MC_SUSY.plot0000644000175000017500000001321012116077756015706 0ustar sunsun# BEGIN PLOT /MC_SUSY/eta-e Title=$\eta$ distribution for $e^+$, $e^-$ XLabel=$\eta$ YLabel=$\mathrm{d}N_e/\mathrm{d}\eta$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/eta-gamma Title=$\eta$ distribution for photons XLabel=$\eta$ YLabel=$\mathrm{d}N_\gamma/\mathrm{d}\eta$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/eta-gamma-iso Title=$\eta$ distribution for $\Delta{R}=0.2$ jet-isolated photons XLabel=$\eta$ YLabel=$\mathrm{d}N_{\gamma\text{iso}}/\mathrm{d}\eta$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/eta-jet Title=$\eta$ distribution for $R=0.7$ anti-$k_\perp$ jets XLabel=$\eta$ YLabel=$\mathrm{d}N_\text{jet}/\mathrm{d}\eta$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/eta-mu Title=$\eta$ distribution for $\mu^+$, $\mu^-$ XLabel=$\eta$ YLabel=$\mathrm{d}N_\mu/\mathrm{d}\eta$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/eta-trk Title=$\eta$ distribution for charged tracks XLabel=$\eta$ YLabel=$\mathrm{d}N_\text{ch}/\mathrm{d}\eta$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/Etmiss Title=$E_\perp^\text{miss}$ distribution XLabel=$E_\perp^\text{miss}$ YLabel=$\mathrm{d}N_\text{evt}/\mathrm{d}E_\perp^\text{miss}$ LogY=1 # END PLOT # BEGIN PLOT /MC_SUSY/mll-ossf-mumu Title=$m_{\mu\mu}$ distribution for leading $\mu^+ \mu^-$ XLabel=$m_{\mu\mu}$ YLabel=$\mathrm{d}N_\text{evt}/\mathrm{d}m_{\mu\mu}$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/mll-2-ossf-mumu Title=$m_{\mu\mu}$ distribution for clean $\mu^+ \mu^-$ XLabel=$m_{\mu\mu}$ YLabel=$\mathrm{d}N_\text{evt}/\mathrm{d}m_{\mu\mu}$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/mll-all-ossf-mumu Title=$m_{\mu\mu}$ distribution for combinatoric $\mu^+ \mu^-$ XLabel=$m_{\mu\mu}$ YLabel=$\mathrm{d}N_\text{cand}/\mathrm{d}m_{\mu\mu}$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/mll-ossf-ee Title=$m_{ee}$ distribution for leading $e^+ e^-$ XLabel=$m_{ee}$ YLabel=$\mathrm{d}N_\text{evt}/\mathrm{d}m_{ee}$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/mll-2-ossf-ee Title=$m_{ee}$ distribution for clean $e^+ e^-$ XLabel=$m_{ee}$ YLabel=$\mathrm{d}N_\text{evt}/\mathrm{d}m_{ee}$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/mll-all-ossf-ee Title=$m_{ee}$ distribution for combinatoric $e^+ e^-$ XLabel=$m_{ee}$ YLabel=$\mathrm{d}N_\text{cand}/\mathrm{d}m_{ee}$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/mll-osof-emu Title=$m_{e\mu}$ distribution for leading $e^\pm \mu^\mp$ XLabel=$m_{e\mu}$ YLabel=$\mathrm{d}N_\text{evt}/\mathrm{d}m_{e\mu}$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/mll-2-osof-emu Title=$m_{e\mu}$ distribution for clean $e^\pm \mu^\mp$ XLabel=$m_{e\mu}$ YLabel=$\mathrm{d}N_\text{evt}/\mathrm{d}m_{e\mu}$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/mll-all-osof-emu Title=$m_{e\mu}$ distribution for combinatoric $e^\pm \mu^\mp$ XLabel=$m_{e\mu}$ YLabel=$\mathrm{d}N_\text{cand}/\mathrm{d}m_{e\mu}$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/n-e Title=Multiplicity distribution for $e^+$, $e^-$ XLabel=$N$ YLabel=$\mathrm{d}N_\text{evt}/\mathrm{d}N_e$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/n-gamma Title=Multiplicity distribution for photons XLabel=$N_\gamma$ YLabel=$\mathrm{d}N_\text{evt}/\mathrm{d}N_\gamma$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/n-gamma-iso Title=Multiplicity distribution for $\Delta{R}=0.2$ jet-isolated photons XLabel=$N_\gamma\text{iso}$ YLabel=$\mathrm{d}N_\text{evt}/\mathrm{d}N_\gamma\text{iso}$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/n-jet Title=Multiplicity distribution for $R=0.7$ anti-$k_\perp$ jets XLabel=$N_\text{jet}$ YLabel=$\mathrm{d}N_\text{evt}/\mathrm{d}N_\text{jet}$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/n-mu Title=Multiplicity distribution for $\mu^+$, $\mu^-$ XLabel=$N_\mu$ YLabel=$\mathrm{d}N_\text{evt}/\mathrm{d}N_\mu$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/n-trk Title=Multiplicity distribution for charged tracks XLabel=$N_\text{ch}$ YLabel=$\mathrm{d}N_\text{evt}/\mathrm{d}N_\text{ch}$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/phi-e Title=$\phi$ distribution for $e^+$, $e^-$ XLabel=$\phi$ YLabel=$\mathrm{d}N_e/\mathrm{d}\phi$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/phi-gamma Title=$\phi$ distribution for photons XLabel=$\phi$ YLabel=$\mathrm{d}N_\gamma/\mathrm{d}\phi$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/phi-gamma-iso Title=$\phi$ distribution for $\Delta{R}=0.2$ jet-isolated photons XLabel=$\phi$ YLabel=$\mathrm{d}N_{\gamma\text{iso}}/\mathrm{d}\phi$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/phi-jet Title=$\phi$ distribution for $R=0.7$ anti-$k_\perp$ jets XLabel=$\phi$ YLabel=$\mathrm{d}N_\text{jet}/\mathrm{d}\phi$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/phi-mu Title=$\phi$ distribution for $\mu^+$, $\mu^-$ XLabel=$\phi$ YLabel=$\mathrm{d}N_\mu/\mathrm{d}\phi$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/phi-trk Title=$\phi$ distribution for charged tracks XLabel=$\phi$ YLabel=$\mathrm{d}N_\text{ch}/\mathrm{d}\phi$ LogY=0 # END PLOT # BEGIN PLOT /MC_SUSY/pt-e Title=$p_\perp$ distribution for $e^+$, $e^-$ XLabel=$p_\perp$ YLabel=$\mathrm{d}N_e/\mathrm{d}p_\perp$ LogY=1 # END PLOT # BEGIN PLOT /MC_SUSY/pt-gamma Title=$p_\perp$ distribution for photons XLabel=$p_\perp$ YLabel=$\mathrm{d}N_\gamma/\mathrm{d}p_\perp$ LogY=1 # END PLOT # BEGIN PLOT /MC_SUSY/pt-gamma-iso Title=$p_\perp$ distribution for $\Delta{R}=0.2$ jet-isolated photons XLabel=$p_\perp$ YLabel=$\mathrm{d}N_{\gamma\text{iso}}/\mathrm{d}p_\perp$ LogY=1 # END PLOT # BEGIN PLOT /MC_SUSY/pt-jet Title=$p_\perp$ distribution for $R=0.7$ anti-$k_\perp$ jets XLabel=$p_\perp$ YLabel=$\mathrm{d}N_\text{jet}/\mathrm{d}p_\perp$ LogY=1 # END PLOT # BEGIN PLOT /MC_SUSY/pt-mu Title=$p_\perp$ distribution for $\mu^+$, $\mu^-$ XLabel=$p_\perp$ YLabel=$\mathrm{d}N_\mu/\mathrm{d}p_\perp$ LogY=1 # END PLOT # BEGIN PLOT /MC_SUSY/pt-trk Title=$p_\perp$ distribution for charged tracks XLabel=$p_\perp$ YLabel=$\mathrm{d}N_\text{ch}/\mathrm{d}p_\perp$ LogY=1 # END PLOT rivet-1.8.3/data/plotinfo/CDF_2001_S4563131.plot0000644000175000017500000000031312116077756016613 0ustar sunsun# BEGIN PLOT /CDF_2001_S4563131/d01-x01-y01 Title=Inclusive jet cross section XLabel=$E_\perp^{\mathrm{jet}}$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}E_\perp/\mathrm{d}\eta$ [nb/GeV] LogX=1 # END PLOT rivet-1.8.3/data/plotinfo/UA1_1990_S2044935.plot0000644000175000017500000001013612116077756016635 0ustar sunsun# BEGIN PLOT /UA1_1990_S2044935/d01-x01-y01 Title=Multiplicity distribution at $\sqrt{s} = \unit{200}{\GeV}$ XLabel=$n_\text{ch}$ YLabel=$\mathrm{d}\sigma/\mathrm{d}{ n_\text{ch}}$ [mb] # END PLOT # BEGIN PLOT /UA1_1990_S2044935/d01-x01-y02 Title=Multiplicity distribution at $\sqrt{s} = \unit{500}{\GeV}$ XLabel=$n_\text{ch}$ YLabel=$\mathrm{d}\sigma/\mathrm{d}{ n_\text{ch}}$ [mb] # END PLOT # BEGIN PLOT /UA1_1990_S2044935/d01-x01-y03 Title=Multiplicity distribution at $\sqrt{s} = \unit{900}{\GeV}$ XLabel=$n_\text{ch}$ YLabel=$\mathrm{d}\sigma/\mathrm{d}{ n_\text{ch}}$ [mb] # END PLOT # BEGIN PLOT /UA1_1990_S2044935/d02-x01-y01 Title=$E \, \mathrm{d}^3\sigma/\mathrm{d}p^3$ at $\eta =0$, $\sqrt{s} = \unit{200}{\GeV}$ XLabel=$p_\perp$ [GeV] YLabel=$E \mathrm{d}^3\sigma/\mathrm{d}p^3$ [\milli\barn\,\rpsquare\GeV] # END PLOT # BEGIN PLOT /UA1_1990_S2044935/d02-x01-y02 Title=$E \, \mathrm{d}^3\sigma/\mathrm{d}p^3$ at $\eta =0$, $\sqrt{s} = \unit{500}{\GeV}$ XLabel=$p_\perp$ [GeV] YLabel=$E \mathrm{d}^3\sigma/\mathrm{d}p^3$ [\milli\barn\,\rpsquare\GeV] # END PLOT # BEGIN PLOT /UA1_1990_S2044935/d02-x01-y03 Title=$E \, \mathrm{d}^3\sigma/\mathrm{d}p^3$ at $\eta =0$, $\sqrt{s} = \unit{900}{\GeV}$ XLabel=$p_\perp$ [GeV] YLabel=$E \mathrm{d}^3\sigma/\mathrm{d}p^3$ [\milli\barn\,\rpsquare\GeV] # END PLOT # BEGIN PLOT /UA1_1990_S2044935/d03-x01-y01 Title=$E \, \mathrm{d}^3\sigma/\mathrm{d}p^3$ at $\eta=0$, $\sqrt{s} = \unit{900}{\GeV}$ ($\mathrm{d}n_\text{ch}/\mathrm{d}\eta = 0.8 \dots 4$) XLabel=$p_\perp$ [GeV] YLabel=$E \mathrm{d}^3\sigma/\mathrm{d}p^3$ [\micro\barn\,\rpsquare\GeV] # END PLOT # BEGIN PLOT /UA1_1990_S2044935/d04-x01-y01 Title=$E \, \mathrm{d}^3\sigma/\mathrm{d}p^3$ at $\eta=0$, $\sqrt{s} = \unit{900}{\GeV}$ ($\mathrm{d}n_\text{ch}/\mathrm{d}\eta = 4 \dots 8$) XLabel=$p_\perp$ [GeV] YLabel=$E \mathrm{d}^3\sigma/\mathrm{d}p^3$ [\micro\barn\,\rpsquare\GeV] # END PLOT # BEGIN PLOT /UA1_1990_S2044935/d05-x01-y01 Title=$E \, \mathrm{d}^3\sigma/\mathrm{d}p^3$ at $\eta=0$, $\sqrt{s} = \unit{900}{\GeV}$ ($\mathrm{d}n_\text{ch}/\mathrm{d}\eta > 8$) XLabel=$p_\perp$ [GeV] YLabel=$E \mathrm{d}^3\sigma/\mathrm{d}p^3$ [\micro\barn\,\rpsquare\GeV] # END PLOT # BEGIN PLOT /UA1_1990_S2044935/d06-x01-y01 Title=$\langle p_\perp \rangle$ vs. $n_\text{ch}$ at $\sqrt{s} = \unit{200}{\GeV}$ XLabel=$n_\text{ch}$ YLabel=$\langle p_\perp \rangle$ [GeV] # END PLOT # BEGIN PLOT /UA1_1990_S2044935/d07-x01-y01 Title=$\langle p_\perp \rangle$ vs. $n_\text{ch}$ at $\sqrt{s} = \unit{900}{\GeV}$ XLabel=$n_\text{ch}$ YLabel=$\langle p_\perp \rangle$ [GeV] # END PLOT # BEGIN PLOT /UA1_1990_S2044935/d08-x01-y01 Title=$\langle p_\perp \rangle$ vs. $n_\text{ch}$ at $\sqrt{s} = \unit{63}{\GeV}$ XLabel=$n_\text{ch}$ YLabel=$\langle p_\perp \rangle$ [GeV] # END PLOT # BEGIN PLOT /UA1_1990_S2044935/d09-x01-y01 Title=Transverse energy cross section at $\sqrt{s} = \unit{200}{\GeV}$ and $|\eta|<6$ XLabel=$\Sigma E_\perp$ [GeV] YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{\sum E_\perp}$ [mb\,\reciprocal\GeV] # END PLOT # BEGIN PLOT /UA1_1990_S2044935/d10-x01-y01 Title=Transverse energy cross section at $\sqrt{s} = \unit{500}{\GeV}$ and $|\eta|<6$ XLabel=$\Sigma E_\perp$ [GeV] YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{\sum E_\perp}$ [mb\,\reciprocal\GeV] # END PLOT # BEGIN PLOT /UA1_1990_S2044935/d11-x01-y01 Title=Transverse energy cross section at $\sqrt{s} = \unit{900}{\GeV}$ and $|\eta|<6$ XLabel=$\Sigma E_\perp$ [GeV] YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{\sum E_\perp}$ [\unit{\millibarn\,\reciprocal\GeV}] # END PLOT # BEGIN PLOT /UA1_1990_S2044935/d12-x01-y01 Title=$\langle \Sigma E_\perp \rangle$ vs. $n_\text{ch}$ at $\sqrt{s} = \unit{200}{\GeV}$ and $|\eta|<2.5$ XLabel=$n_\text{ch}$ YLabel=$\Sigma E_\perp$ [GeV] # END PLOT # BEGIN PLOT /UA1_1990_S2044935/d12-x01-y02 Title=$\langle \Sigma E_\perp \rangle$ vs. $n_\text{ch}$ at $\sqrt{s} = \unit{500}{\GeV}$ and $|\eta|<2.5$ XLabel=$n_\text{ch}$ YLabel=$\Sigma E_\perp$ [GeV] # END PLOT # BEGIN PLOT /UA1_1990_S2044935/d12-x01-y03 Title=$\langle \Sigma E_\perp \rangle$ vs. $n_\text{ch}$ at $\sqrt{s} = \unit{900}{\GeV}$ and $|\eta|<2.5$ XLabel=$n_\text{ch}$ YLabel=$\Sigma E_\perp$ [GeV] # END PLOT rivet-1.8.3/data/plotinfo/D0_2009_S8349509.plot0000644000175000017500000000527312116077756016523 0ustar sunsun# BEGIN PLOT /D0_2009_S8349509/d01-x01-y01 Title=Azimuthal distribution for $p_\perp^Z > 25$ GeV XLabel=$\Delta \phi$(Z, jet) [rad] YLabel=$1/\sigma_\mathrm{Z} \times \mathrm{d}\sigma_\mathrm{Z+jet}/\mathrm{d}\Delta \phi$ [1/rad] LegendXPos=0.10 # END PLOT # BEGIN PLOT /D0_2009_S8349509/d02-x01-y01 Title=Azimuthal distribution for $p_\perp^Z>45$ GeV XLabel=$\Delta \phi$(Z, jet) [rad] YLabel=$1/\sigma_\mathrm{Z} \times \mathrm{d}\sigma_\mathrm{Z+jet}/\mathrm{d}\Delta \phi$ [1/rad] LegendXPos=0.10 # END PLOT # BEGIN PLOT /D0_2009_S8349509/d03-x01-y01 Title=Rapidity difference for $p_\perp^Z>25$ GeV XLabel=$|\Delta y$(Z, jet)$|$ YLabel=$1/\sigma_\mathrm{Z} \times \mathrm{d}\sigma_\mathrm{Z+jet}/\mathrm{d}|\Delta y|$ # END PLOT # BEGIN PLOT /D0_2009_S8349509/d04-x01-y01 Title=Rapidity difference for $p_\perp^Z>45$ GeV XLabel=$|\Delta y$(Z, jet)$|$ YLabel=$1/\sigma_\mathrm{Z} \times \mathrm{d}\sigma_\mathrm{Z+jet}/\mathrm{d}|\Delta y|$ # END PLOT # BEGIN PLOT /D0_2009_S8349509/d05-x01-y01 Title=Rapidity average for $p_\perp^Z>25$ GeV XLabel=$|y_\mathrm{boost}$(Z+jet)$|$ YLabel=$1/\sigma_\mathrm{Z} \times \mathrm{d}\sigma_\mathrm{Z+jet}/\mathrm{d}|\Delta y_\mathrm{boost}|$ # END PLOT # BEGIN PLOT /D0_2009_S8349509/d06-x01-y01 Title=Rapidity average for $p_\perp^Z>45$ GeV XLabel=$|y_\mathrm{boost}$(Z+jet)$|$ YLabel=$1/\sigma_\mathrm{Z} \times \mathrm{d}\sigma_\mathrm{Z+jet}/\mathrm{d}|\Delta y_\mathrm{boost}|$ # END PLOT # BEGIN PLOT /D0_2009_S8349509/d01-x01-y02 Title=Azimuthal distribution for $p_\perp^Z > 25$ GeV XLabel=$\Delta \phi$(Z, jet) [rad] YLabel=$\mathrm{d}\sigma_\mathrm{Z+jet}/\mathrm{d}\Delta \phi$ [pb/rad] LegendXPos=0.10 # END PLOT # BEGIN PLOT /D0_2009_S8349509/d02-x01-y02 Title=Azimuthal distribution for $p_\perp^Z>45$ GeV XLabel=$\Delta \phi$(Z, jet) [rad] YLabel=$\mathrm{d}\sigma_\mathrm{Z+jet}/\mathrm{d}\Delta \phi$ [pb/rad] LegendXPos=0.10 # END PLOT # BEGIN PLOT /D0_2009_S8349509/d03-x01-y02 Title=Rapidity difference for $p_\perp^Z>25$ GeV XLabel=$|\Delta y$(Z, jet)$|$ YLabel=$\mathrm{d}\sigma_\mathrm{Z+jet}/\mathrm{d}|\Delta y|$ [pb] # END PLOT # BEGIN PLOT /D0_2009_S8349509/d04-x01-y02 Title=Rapidity difference for $p_\perp^Z>45$ GeV XLabel=$|\Delta y$(Z, jet)$|$ YLabel=$\mathrm{d}\sigma_\mathrm{Z+jet}/\mathrm{d}|\Delta y|$ [pb] # END PLOT # BEGIN PLOT /D0_2009_S8349509/d05-x01-y02 Title=Rapidity average for $p_\perp^Z>25$ GeV XLabel=$|y_\mathrm{boost}$(Z+jet)$|$ YLabel=$\mathrm{d}\sigma_\mathrm{Z+jet}/\mathrm{d}|\Delta y_\mathrm{boost}|$ [pb] # END PLOT # BEGIN PLOT /D0_2009_S8349509/d06-x01-y02 Title=Rapidity average for $p_\perp^Z>45$ GeV XLabel=$|y_\mathrm{boost}$(Z+jet)$|$ YLabel=$\mathrm{d}\sigma_\mathrm{Z+jet}/\mathrm{d}|\Delta y_\mathrm{boost}|$ [pb] # END PLOT rivet-1.8.3/data/plotinfo/D0_2008_S6879055.plot0000644000175000017500000000145612116077756016523 0ustar sunsun# BEGIN PLOT /D0_2008_S6879055/d01-x01-y01 Title=Inclusive jet multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(Z \, + \geq N_{\text{jet}}\;\text{jets}) / \sigma(Z \; \text{inclusive})$ XMajorTickMarks=10 XMinorTickMarks=0 # END PLOT # BEGIN PLOT /D0_2008_S6879055/d02-x01-y01 Title=$p_\perp$ of 1st jet (not detector-corrected!) XLabel=$p_\perp$(1st jet) [GeV] YLabel=$1/\sigma \; \text{d}\sigma/\text{d}p_\perp$ # END PLOT # BEGIN PLOT /D0_2008_S6879055/d03-x01-y01 Title=$p_\perp$ of 2nd jet (not detector-corrected!) XLabel=$p_\perp$(2nd jet) [GeV] YLabel=$1/\sigma \; \text{d}\sigma/\text{d}p_\perp$ # END PLOT # BEGIN PLOT /D0_2008_S6879055/d04-x01-y01 Title=$p_\perp$ of 3rd jet (not detector-corrected!) XLabel=$p_\perp$(3rd jet) [GeV] YLabel=$1/\sigma \; \text{d}\sigma/\text{d}p_\perp$ # END PLOT rivet-1.8.3/data/plotinfo/MC_ZZJETS.plot0000644000175000017500000001726512116077756016152 0ustar sunsun# BEGIN PLOT /MC_ZZJETS/ZZ_jet1_dR Title=Separation between Z boson pair and leading jet XLabel=$\Delta R(\text{ZZ, 1st jet})$ YLabel=$\text{d}\sigma/\text{d}\Delta R(\text{ZZ, 1st jet})$ [pb] LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_ZZJETS/ZZ_jet1_deta Title= XLabel=$\Delta{\eta}(\text{ZZ, 1st jet})$ YLabel=$\text{d}\sigma/\text{d}\Delta{\eta}(\text{ZZ, 1st jet})$ [pb] # END PLOT # BEGIN PLOT /MC_ZZJETS/Ze_jet1_dR Title=Separation between $e^+$ and leading jet XLabel=$\Delta R(e^+,\text{1st jet})$ YLabel=$\text{d}\sigma/\text{d}\Delta R(e^+,\text{1st jet})$ [pb] LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_ZZJETS/HT Title=HT XLabel=$H_T$ [GeV] YLabel=$\text{d}\sigma/\text{d}H_T$ [pb/GeV] LogX=1 LegendXPos=0.10 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_ZZJETS/jets_dR_ Title=$\Delta R$ separation between jets LegendXPos=0.10 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_ZZJETS/jets_dR_12 XLabel=$\Delta{R}(\text{jet 1, jet 2})$ YLabel=$\text{d}\sigma/\text{d}\Delta{R}(\text{jet 1, jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_ZZJETS/jets_dR_13 XLabel=$\Delta{R}(\text{jet 1, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta{R}(\text{jet 1, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_ZZJETS/jets_dR_23 XLabel=$\Delta{R}(\text{jet 2, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta{R}(\text{jet 2, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_ZZJETS/jets_deta_ Title=Pseudorapidity separation between jets LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_ZZJETS/jets_deta_12 XLabel=$\Delta\eta(\text{jet 1, jet 2})$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta(\text{jet 1, jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_ZZJETS/jets_deta_13 XLabel=$\Delta\eta(\text{jet 1, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta(\text{jet 1, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_ZZJETS/jets_deta_23 XLabel=$\Delta\eta(\text{jet 2, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta(\text{jet 2, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_ZZJETS/jets_dphi_ Title=Pseudorapidity separation between jets LegendXPos=0.1 # END PLOT # BEGIN PLOT /MC_ZZJETS/jets_dphi_12 XLabel=$\Delta\phi(\text{jet 1, jet 2})$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi(\text{jet 1, jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_ZZJETS/jets_dphi_13 XLabel=$\Delta\phi(\text{jet 1, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi(\text{jet 1, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_ZZJETS/jets_dphi_23 XLabel=$\Delta\phi(\text{jet 2, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi(\text{jet 2, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_eta_1 Title=Pseudorapidity of leading jet XLabel=$\eta(\text{jet 1})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 1})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_eta_2 Title=Pseudorapidity of second jet XLabel=$\eta(\text{jet 2})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 2})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_eta_3 Title=Pseudorapidity of third jet XLabel=$\eta(\text{jet 3})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 3})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_eta_4 Title=Pseudorapidity of fourth jet XLabel=$\eta(\text{jet 4})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 4})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_eta_pmratio_1 Title=Pseudorapidity $+/-$ ratio of first jet XLabel=$\eta(\text{jet 1})_+/\eta(\text{jet 1})_-$ YLabel=$|\eta(\text{jet 1}|$ # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_eta_pmratio_2 Title=Pseudorapidity $+/-$ ratio of second jet XLabel=$\eta(\text{jet 2})_+/\eta(\text{jet 2})_-$ YLabel=$|\eta(\text{jet 2}|$ # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_eta_pmratio_3 Title=Pseudorapidity $+/-$ ratio of third jet XLabel=$\eta(\text{jet 3})_+/\eta(\text{jet 3})_-$ YLabel=$|\eta(\text{jet 3}|$ # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_eta_pmratio_4 Title=Pseudorapidity $+/-$ ratio of fourth jet XLabel=$\eta(\text{jet 4})_+/\eta(\text{jet 4})_-$ YLabel=$|\eta(\text{jet 4}|$ # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_y_1 Title=Rapidity of first jet XLabel=$y(\text{jet 1})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 1})$ [pb] # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_y_2 Title=Rapidity of second jet XLabel=$y(\text{jet 2})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_y_3 Title=Rapidity of third jet XLabel=$y(\text{jet 3})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_y_4 Title=Rapidity of fourth jet XLabel=$y(\text{jet 4})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 4})$ [pb] # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_y_pmratio_1 Title=Rapidity $+/-$ ratio of first jet XLabel=$y(\text{jet 1})_+/y(\text{jet 1})_-$ YLabel=$|y(\text{jet 1}|$ # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_y_pmratio_2 Title=Rapidity $+/-$ ratio of second jet XLabel=$y(\text{jet 2})_+/y(\text{jet 2})_-$ YLabel=$|y(\text{jet 2}|$ # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_y_pmratio_3 Title=Rapidity $+/-$ ratio of third jet XLabel=$y(\text{jet 3})_+/y(\text{jet 3})_-$ YLabel=$|y(\text{jet 3}|$ # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_y_pmratio_4 Title=Rapidity $+/-$ ratio of fourth jet XLabel=$y(\text{jet 4})_+/y(\text{jet 4})_-$ YLabel=$|y(\text{jet 4}|$ # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_mass_1 Title=Mass of first jet XLabel=$m(\text{jet 1})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 1})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_mass_2 Title=Mass of second jet XLabel=$m(\text{jet 2})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 2})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_mass_3 Title=Mass of third jet XLabel=$m(\text{jet 3})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 3})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_mass_4 Title=Mass of fourth jet XLabel=$m(\text{jet 4})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 4})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_multi_exclusive Title=Exclusive jet multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(N_{\text{jet}})$ [pb] XMajorTickMarks=10 XMinorTickMarks=0 ErrorBands=1 # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_multi_inclusive Title=Inclusive jet multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(\geq N_{\text{jet}})$ [pb] XMajorTickMarks=10 XMinorTickMarks=0 ErrorBands=1 # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_multi_ratio Title=Ratio of jet multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(\geq N_{\text{jet}})/\sigma(\geq N_{\text{jet}}-1)$ XMajorTickMarks=10 XMinorTickMarks=0 LogY=0 ErrorBands=1 # END PLOT # BEGIN PLOT /MC_ZZJETS/log10_R_0 Title=$\log_{10}$(Integrated $0$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{0}$ Rebin=2 LegendYPos=0.8 LegendXPos=0.75 # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_pT_1 Title=Transverse momentum of leading jet XLabel=$p_\perp(\text{jet 1})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 1})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_pT_2 Title=Transverse momentum of second jet XLabel=$p_\perp(\text{jet 2})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 2})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_pT_3 Title=Transverse momentum of third jet XLabel=$p_\perp(\text{jet 3})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 3})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_pT_4 Title=Transverse momentum of fourth jet XLabel=$p_\perp(\text{jet 4})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 4})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_ZZJETS/jet_HT Title=Scalar sum of jet transverse momenta (HT) XLabel=$HT$ [GeV] YLabel=$\text{d}\sigma/\text{d}HT$ [pb/GeV] LogX=1 # END PLOT rivet-1.8.3/data/plotinfo/CMS_2011_S9120041.plot0000644000175000017500000000550712116077756016646 0ustar sunsun# BEGIN PLOT /CMS_2011_S9120041/d0[1-4] XLabel=$p_\perp$ (leading track-jet) [GeV] LogY=0 # END PLOT # BEGIN PLOT /CMS_2011_S9120041/d01-x01-y01 Title=Transverse $N_\text{ch}$ density vs. $p_\perp^\text{jet 1}$, $\sqrt{s} = \text{7000~GeV}$ YLabel=$\langle\mathrm{d}^2 N/\mathrm{d}\eta\mathrm{d}\phi\rangle$ # END PLOT # BEGIN PLOT /CMS_2011_S9120041/d02-x01-y01 Title=Transverse $\sum{p_\perp}$ density vs. $p_\perp^\text{jet 1}$, $\sqrt{s} = \text{7000~GeV}$ YLabel=$\langle\mathrm{d}^2 \sum{p_\perp}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ [GeV] # END PLOT # BEGIN PLOT /CMS_2011_S9120041/d03-x01-y01 Title=Transverse $N_\text{ch}$ density vs. $p_\perp^\text{jet 1}$, $\sqrt{s} = \text{900~GeV}$ YLabel=$\langle\mathrm{d}^2 N/\mathrm{d}\eta\mathrm{d}\phi\rangle$ # END PLOT # BEGIN PLOT /CMS_2011_S9120041/d04-x01-y01 Title=Transverse $\sum{p_\perp}$ density vs. $p_\perp^\text{jet 1}$, $\sqrt{s} = \text{900~GeV}$ YLabel=$\langle\mathrm{d}^2 \sum{p_\perp}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ [GeV] # END PLOT # BEGIN PLOT /CMS_2011_S9120041/d(05|08|11) XLabel=$N_\text{ch}$ YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /CMS_2011_S9120041/d05-x01-y01 Title=Transverse charged multiplicity, $p_\perp^\text{jet 1} > \text{3~GeV}, $\sqrt{s} = \text{7000~GeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S9120041/d08-x01-y01 Title=Transverse charged multiplicity, $p_\perp^\text{jet 1} > \text{20~GeV}, $\sqrt{s} = \text{7000~GeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S9120041/d11-x01-y01 Title=Transverse charged multiplicity, $p_\perp^\text{jet 1} > \text{3~GeV}, $\sqrt{s} = \text{900~GeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S9120041/d(06|09|12) XLabel=$\sum p_\perp$ [GeV] YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}\sum p_\perp$ [GeV$^{-1}$] # END PLOT # BEGIN PLOT /CMS_2011_S9120041/d06-x01-y01 Title=Transverse $\sum{p_\perp}$, $p_\perp^\text{jet 1} > \text{3~GeV}, $\sqrt{s} = \text{7000~GeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S9120041/d09-x01-y01 Title=Transverse $\sum{p_\perp}$, $p_\perp^\text{jet 1} > \text{20~GeV}, $\sqrt{s} = \text{7000~GeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S9120041/d12-x01-y01 Title=Transverse $\sum{p_\perp}$, $p_\perp^\text{jet 1} > \text{3~GeV}, $\sqrt{s} = \text{900~GeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S9120041/d(07|10|13) XLabel=$p_\perp$ [GeV] YLabel=$1/N_\text{ev} \, \mathrm{d}N_\text{ch} / \mathrm{d}p_\perp$ [GeV$^{-1}$] # END PLOT # BEGIN PLOT /CMS_2011_S9120041/d07-x01-y01 Title=Transverse $p_\perp$, $p_\perp^\text{jet 1} > \text{3~GeV}, $\sqrt{s} = \text{7000~GeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S9120041/d10-x01-y01 Title=Transverse $p_\perp$, $p_\perp^\text{jet 1} > \text{20~GeV}, $\sqrt{s} = \text{7000~GeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S9120041/d13-x01-y01 Title=Transverse $p_\perp$, $p_\perp^\text{jet 1} > \text{3~GeV}, $\sqrt{s} = \text{900~GeV}$ # END PLOT rivet-1.8.3/data/plotinfo/MC_WWINC.plot0000644000175000017500000000663512116077756016007 0ustar sunsun# BEGIN PLOT /MC_WWINC/WW_pT$ Title=Transverse momentum of boson pair XLabel=$p_\perp^{\text{WW}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\text{WW}}$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_WWINC/WW_pT_peak Title=Peak region of transverse momentum of boson pair XLabel=$p_\perp^{\text{WW}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\text{WW}}$ [pb/GeV] LogY=0 LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_WWINC/WW_eta Title=Pseudorapidity of boson pair XLabel=$\eta_{\text{WW}}$ YLabel=$\text{d}\sigma/\text{d}\eta_{\text{WW}}$ [pb] LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_WWINC/WW_phi Title=Azimuthal angle of boson pair XLabel=$\phi_{\text{WW}}$ YLabel=$\text{d}\sigma/\text{d}\phi_{\text{WW}}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_WWINC/WW_m Title=Invariant mass of boson pair XLabel=$m_{\text{WW}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}m_{\text{WW}}$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_WWINC/WW_dphi Title=Azimuthal angle difference of boson pair XLabel=$\Delta\phi_{\text{WW}}$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi_{\text{WW}}$ [pb] LegendXPos=0.10 # END PLOT # BEGIN PLOT /MC_WWINC/WW_deta Title=Pseudorapidity difference of boson pair XLabel=$\Delta\eta_{\text{WW}}$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta_{\text{WW}}$ [pb] LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_WWINC/WW_dR Title=Separation of boson pair XLabel=$\Delta R_{\text{WW}}$ YLabel=$\text{d}\sigma/\text{d}\Delta R_{\text{WW}}$ [pb] LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_WWINC/WW_dpT Title=Transverse momentum difference of boson pair XLabel=$\Delta p_\perp^{\text{WW}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}\Delta p_\perp^{\text{WW}}$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_WWINC/WW_costheta_planes Title=Angle between the boson decay planes XLabel=$\cos(\Psi_{\text{e}\nu,\mu\nu})$ YLabel=$\text{d}\sigma/\text{d}\cos(\Psi_{\text{e}\nu,\mu\nu})$ [pb] # END PLOT # BEGIN PLOT /MC_WWINC/W_pT Title=W $p_\perp$ XLabel=$p_\perp^{\text{W}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\text{W}}$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_WWINC/W_eta Title=W pseudorapidity XLabel=$\eta_{\text{W}}$ YLabel=$\text{d}\sigma/\text{d}\eta_{\text{W}}$ [pb] LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_WWINC/Wl_pT Title=Lepton $p_\perp$ XLabel=$p_\perp^{\text{l}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\text{l}}$ [pb/GeV] LogX=1 # END PLOT # BEGIN PLOT /MC_WWINC/Wl_eta Title=Lepton $\eta$ XLabel=$\eta_{\text{l}}$ YLabel=$\text{d}\sigma/\text{d}\eta_{\text{l}}$ [pb] # END PLOT # BEGIN PLOT /MC_WWINC/WeWm_dphi Title=Azimuthal angle difference between oppositely charged leptons XLabel=$\Delta\phi_{e^+,\mu^-}$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi$ [pb] LegendXPos=0.10 # END PLOT # BEGIN PLOT /MC_WWINC/WeWm_deta Title=Pseudorapidity difference between oppositely charged leptons XLabel=$\Delta\eta_{e^+,\mu^-}$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta$ [pb] LegendXPos=0.30 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_WWINC/WeWm_dR Title=Separation between oppositely charged leptons XLabel=$\Delta R_{e^+,\mu^-}$ YLabel=$\text{d}\sigma/\text{d}\Delta R$ [pb] # END PLOT # BEGIN PLOT /MC_WWINC/WeWm_m Title=Invariant mass of oppositely charged leptons XLabel=$m_{e^+,\mu^-}$ [GeV] YLabel=$\text{d}\sigma/\text{d}m$ [pb/GeV] # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_I1119557.plot0000644000175000017500000000311612116077756017065 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1119557/d01-x01-y01 Title=Anti-$k_T$ jets, $R = 0.6$, $p_T > 300$\;GeV, $|\eta|<2$ XLabel=Jet mass [GeV] YLabel=$1/N\cdot \text{d}N/\text{d}M$~[GeV$^{-1}$] LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1119557/d01-x02-y01 Title=Anti-$k_T$ jets, $R = 1.0$, $p_T > 300 $\;GeV, $|\eta|<2$ XLabel=Jet mass [GeV] YLabel=$1/N\cdot \text{d}N/\text{d}M$~[GeV$^{-1}$] LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1119557/d02-x01-y01 Title=Anti-$k_T$ jets, $R = 0.6$, $p_T > 300$\;GeV, $|\eta|<2$ XLabel=Width YLabel=$1/N\cdot \text{d}N/\text{d}W$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1119557/d02-x02-y01 Title=Anti-$k_T$ jets, $R = 1.0$, $p_T > 300$\;GeV, $|\eta|<2$ XLabel=Width YLabel=$1/N\cdot \text{d}N/\text{d}W$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1119557/d03-x01-y01 #Title=Anti-$k_T$ jets, $R = 0.6$, $p_T > 300$\;GeV, $|\eta|<0.7$, $M > 100$\;GeV #XLabel=Eccentricity #YLabel=$1/N\cdot \text{d}N/\text{d}E$ #LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1119557/d03-x02-y01 #Title=Anti-$k_T$ jets, $R = 1.0$, $p_T > 300$\;GeV, $|\eta|<0.7$, $M > 100$\;GeV #XLabel=Eccentricity #YLabel=$1/N\cdot \text{d}N/\text{d}E$ #LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1119557/d04-x02-y01 Title=Anti-$k_T$ jets, $R = 1.0$, $p_T > 300$\;GeV, $|\eta|<0.7$, $130 < M < 210$\;GeV XLabel=Planar flow YLabel=$1/N\cdot \text{d}N/\text{d}P$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1119557/d05-x01-y01 Title=Anti-$k_T$ jets, $R = 0.6$, $p_T > 300$\;GeV, $|\eta|<0.7$, $100 < M < 130$\;GeV XLabel=Angularity $\tau_{-2}$ YLabel=$1/N\cdot \text{d}N/\text{d}$\tau_{-2}$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/ALEPH_1999_S4193598.plot0000644000175000017500000000033712116077756017127 0ustar sunsun# BEGIN PLOT /ALEPH_1999_S4193598/d01-x01-y01 Title=Scaled energy of $D^{*\pm}$ in $e^+e^-\to Z\to\text{hadronic}$ at $\sqrt{s}=91.2$~GeV XLabel=$X_E$ YLabel=$1/N_\text{Zhad} \text{d}N(D^{*})/\text{d}X_E$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/CMS_2011_S8968497.plot0000644000175000017500000000337712116077756016713 0ustar sunsun# BEGIN PLOT /CMS_2011_S8968497/d0 XLabel=$\chi_{\text{dijet}}$ YLabel=$1/\sigma_{\text{dijet}}$ $d\sigma_{\text{dijet}}/d\chi_{\text{dijet}}$ LogY=0 YMax=0.12 # END PLOT # BEGIN PLOT /CMS_2011_S8968497/d01-x01-y01 Title=$\chi_{\text{dijet}}$ for $M_{jj} > 2.2\,\text{TeV}$, $|y_1+y_2|/2 < 1.11$, $\sqrt{s} = 7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S8968497/d02-x01-y01 Title=$\chi_{\text{dijet}}$ for $1.8\,\text{TeV} 0.35$ XLabel= YLabel=$N_{\eta'}$ LogY=0 # END PLOT # BEGIN PLOT /ARGUS_1993_S2669951/d01-x01-y02 Title=$\eta'$ multiplicity, $x_p>0.35$ XLabel= YLabel=$N_{\eta'}$ LogY=0 # END PLOT # BEGIN PLOT /ARGUS_1993_S2669951/d05-x01-y01 Title=$f_0$ multiplicity XLabel= YLabel=$N_{f_0}$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/BABAR_2003_I593379.plot0000644000175000017500000000410712116100037016733 0ustar sunsun# BEGIN PLOT /BABAR_2003_I593379/d01-x01-y01 Title=$\text{Br}(B\to J/\psi)$ at the $\Upsilon(4S)$ YLabel=$\text{Br}(B\to J/\psi)$ [\%] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2003_I593379/d01-x01-y02 Title=$\text{Br}(B\to J/\psi)$~direct at the $\Upsilon(4S)$ YLabel=$\text{Br}(B\to J/\psi)$ [\%] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2003_I593379/d01-x01-y03 Title=$\text{Br}(B\to \chi_{c1})$ at the $\Upsilon(4S)$ YLabel=$\text{Br}(B\to \chi_{c1})$ [\%] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2003_I593379/d01-x01-y04 Title=$\text{Br}(B\to \chi_{c1})$~direct at the $\Upsilon(4S)$ YLabel=$\text{Br}(B\to \chi_{c1})$ [\%] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2003_I593379/d01-x01-y05 Title=$\text{Br}(B\to \chi_{c2})$ at the $\Upsilon(4S)$ YLabel=$\text{Br}(B\to \chi_{c2})$ [\%] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2003_I593379/d01-x01-y06 Title=$\text{Br}(B\to \chi_{c2})$~direct at the $\Upsilon(4S)$ YLabel=$\text{Br}(B\to \chi_{c2})$ [\%] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2003_I593379/d01-x01-y07 Title=$\text{Br}(B\to \psi')$ at the $\Upsilon(4S)$ YLabel=$\text{Br}(B\to \psi')$ [\%] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2003_I593379/d06-x01-y01 Title=$\text{Br}(B\to J/\psi)$ at the $\Upsilon(4S)$ XLabel=$p^*_{J/\psi}$ [GeV] YLabel=$\text{d}B/\text{d}p^*_{J/\psi}$ [0.1/GeV] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2003_I593379/d07-x01-y01 Title=$\text{Br}(B\to \chi_{c1})$ at the $\Upsilon(4S)$ XLabel=$p^*_{\chi_{c1}}$ [GeV] YLabel=$\text{d}B/\text{d}p^*_{\chi_{c1}}$ [0.1/GeV] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2003_I593379/d07-x01-y02 Title=$\text{Br}(B\to \chi_{c2})$ at the $\Upsilon(4S)$ XLabel=$p^*_{\chi_{c2}}$ [GeV] YLabel=$\text{d}B/\text{d}p^*_{\chi_{c2}}$ [0.1/GeV] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2003_I593379/d08-x01-y01 Title=$\text{Br}(B\to \psi')$ at the $\Upsilon(4S)$ XLabel=$p^*_{\psi'}$ [GeV] YLabel=$\text{d}B/\text{d}p^*_{\psi'}$ [0.1/GeV] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2003_I593379/d10-x01-y01 Title=$\text{Br}(B\to J/\psi)$~(direct) at the $\Upsilon(4S)$ XLabel=$p^*_{J/\psi}$ [GeV] YLabel=$\text{d}B/\text{d}p^*_{J/\psi}$ [0.1/GeV] LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/E735_1998_S3905616.plot0000644000175000017500000000026212116077756016704 0ustar sunsun# BEGIN PLOT /E735_1998_S3905616/d01-x01-y01 Title=Charged multiplicity at $\sqrt{s} = 1800~\text{GeV}$ XLabel=$N_\text{ch}$ YLabel=$\text{Probability}~(N_\text{ch})$ # END PLOT rivet-1.8.3/data/plotinfo/LHCB_2010_I867355.plot0000644000175000017500000000161212116077756016653 0ustar sunsun# BEGIN PLOT /LHCB_2010_I867355/d0 XLabel=$\eta(H_b)$ LegendXPos=0.05 LegendYPos=0.40 # END PLOT # BEGIN PLOT /LHCB_2010_I867355/d01 YLabel=$\mathrm{d}\sigma(pp \to H_b X) / \mathrm{d}\eta$ [$\mu$b] # END PLOT # BEGIN PLOT /LHCB_2010_I867355/d01-x01-y01 Title=$b$ production cross-section at $\sqrt{s}=7$ TeV, with LEP fragmentation fractions # END PLOT # BEGIN PLOT /LHCB_2010_I867355/d01-x01-y02 Title=$b$ production cross-section at $\sqrt{s}=7$ TeV, with Tevatron fragmentation fractions # END PLOT # BEGIN PLOT /LHCB_2010_I867355/d02 YLabel=$\sigma(pp \to H_b X)|_{2<\eta<6}$ [$\mu$b] # END PLOT # BEGIN PLOT /LHCB_2010_I867355/d02-x01-y01 Title=$b$ production cross-section at $\sqrt{s}=7$ TeV, with LEP fragmentation fractions # END PLOT # BEGIN PLOT /LHCB_2010_I867355/d02-x01-y02 Title=$b$ production cross-section at $\sqrt{s}=7$ TeV, with Tevatron fragmentation fractions # END PLOT rivet-1.8.3/data/plotinfo/STAR_2009_UE_HELEN.plot0000644000175000017500000000143412116077756017260 0ustar sunsun# BEGIN PLOT /STAR_2009_UE_HELEN/d01-x01-y01 Title=TransMAX region charged particle density XLabel=$p_T(\text{leading jet})$ / GeV YLabel=$\langle N_\text{ch} \rangle / \text{d}\eta\,\text{d}\phi$ CustomLegend={\large STAR preliminary} LogY=0 LegendXPos=0.05 LegendYPos=0.5 # END PLOT # BEGIN PLOT /STAR_2009_UE_HELEN/d02-x01-y01 Title=TransMIN region charged particle density XLabel=$p_T(\text{leading jet})$ / GeV YLabel=$\langle N_\text{ch} \rangle / \text{d}\eta\,\text{d}\phi$ CustomLegend={\large STAR preliminary} LogY=0 # END PLOT # BEGIN PLOT /STAR_2009_UE_HELEN/d03-x01-y01 Title=Away region charged particle density XLabel=$p_T(\text{leading jet})$ / GeV YLabel=$\langle N_\text{ch} \rangle / \text{jet area}$ CustomLegend={\large STAR preliminary} LogY=0 LegendYPos=0.5 # END PLOT rivet-1.8.3/data/plotinfo/MC_PHOTONJETS.plot0000644000175000017500000001662412116077756016614 0ustar sunsun# BEGIN PLOT /MC_PHOTONJETS/photon_jet1_dR Title= XLabel=$\Delta R(\gamma\text{, 1st jet})$ YLabel=$\text{d}\sigma/\text{d}\Delta R(\gamma\text{, 1st jet})$ [pb] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/photon_jet1_deta Title= XLabel=$\Delta{\eta}(\gamma\text{, 1st jet})$ YLabel=$\text{d}\sigma/\text{d}\Delta{\eta}(\gamma\text{, 1st jet})$ [pb] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/photon_jet1_dphi Title= XLabel=$\Delta{\phi}(\gamma\text{, 1st jet})$ YLabel=$\text{d}\sigma/\text{d}\Delta{\phi}(\gamma\text{, 1st jet})$ [pb] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jets_dR_ Title=$\Delta R$ separation between jets LegendXPos=0.10 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jets_dR_12 XLabel=$\Delta{R}(\text{jet 1, jet 2})$ YLabel=$\text{d}\sigma/\text{d}\Delta{R}(\text{jet 1, jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jets_dR_13 XLabel=$\Delta{R}(\text{jet 1, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta{R}(\text{jet 1, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jets_dR_23 XLabel=$\Delta{R}(\text{jet 2, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta{R}(\text{jet 2, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jets_deta_ Title=Pseudorapidity separation between jets LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jets_deta_12 XLabel=$\Delta\eta(\text{jet 1, jet 2})$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta(\text{jet 1, jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jets_deta_13 XLabel=$\Delta\eta(\text{jet 1, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta(\text{jet 1, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jets_deta_23 XLabel=$\Delta\eta(\text{jet 2, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta(\text{jet 2, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jets_dphi_ Title=Pseudorapidity separation between jets LegendXPos=0.1 # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jets_dphi_12 XLabel=$\Delta\phi(\text{jet 1, jet 2})$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi(\text{jet 1, jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jets_dphi_13 XLabel=$\Delta\phi(\text{jet 1, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi(\text{jet 1, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jets_dphi_23 XLabel=$\Delta\phi(\text{jet 2, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi(\text{jet 2, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_eta_1 Title=Pseudorapidity of leading jet XLabel=$\eta(\text{jet 1})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 1})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_eta_2 Title=Pseudorapidity of second jet XLabel=$\eta(\text{jet 2})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 2})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_eta_3 Title=Pseudorapidity of third jet XLabel=$\eta(\text{jet 3})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 3})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_eta_4 Title=Pseudorapidity of fourth jet XLabel=$\eta(\text{jet 4})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 4})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_eta_pmratio_1 Title=Pseudorapidity $+/-$ ratio of first jet XLabel=$\eta(\text{jet 1})_+/\eta(\text{jet 1})_-$ YLabel=$|\eta(\text{jet 1}|$ # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_eta_pmratio_2 Title=Pseudorapidity $+/-$ ratio of second jet XLabel=$\eta(\text{jet 2})_+/\eta(\text{jet 2})_-$ YLabel=$|\eta(\text{jet 2}|$ # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_eta_pmratio_3 Title=Pseudorapidity $+/-$ ratio of third jet XLabel=$\eta(\text{jet 3})_+/\eta(\text{jet 3})_-$ YLabel=$|\eta(\text{jet 3}|$ # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_eta_pmratio_4 Title=Pseudorapidity $+/-$ ratio of fourth jet XLabel=$\eta(\text{jet 4})_+/\eta(\text{jet 4})_-$ YLabel=$|\eta(\text{jet 4}|$ # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_y_1 Title=Rapidity of first jet XLabel=$y(\text{jet 1})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 1})$ [pb] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_y_2 Title=Rapidity of second jet XLabel=$y(\text{jet 2})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_y_3 Title=Rapidity of third jet XLabel=$y(\text{jet 3})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_y_4 Title=Rapidity of fourth jet XLabel=$y(\text{jet 4})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 4})$ [pb] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_y_pmratio_1 Title=Rapidity $+/-$ ratio of first jet XLabel=$y(\text{jet 1})_+/y(\text{jet 1})_-$ YLabel=$|y(\text{jet 1}|$ # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_y_pmratio_2 Title=Rapidity $+/-$ ratio of second jet XLabel=$y(\text{jet 2})_+/y(\text{jet 2})_-$ YLabel=$|y(\text{jet 2}|$ # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_y_pmratio_3 Title=Rapidity $+/-$ ratio of third jet XLabel=$y(\text{jet 3})_+/y(\text{jet 3})_-$ YLabel=$|y(\text{jet 3}|$ # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_y_pmratio_4 Title=Rapidity $+/-$ ratio of fourth jet XLabel=$y(\text{jet 4})_+/y(\text{jet 4})_-$ YLabel=$|y(\text{jet 4}|$ # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_mass_1 Title=Mass of first jet XLabel=$m(\text{jet 1})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 1})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_mass_2 Title=Mass of second jet XLabel=$m(\text{jet 2})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 2})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_mass_3 Title=Mass of third jet XLabel=$m(\text{jet 3})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 3})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_mass_4 Title=Mass of fourth jet XLabel=$m(\text{jet 4})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 4})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_multi_exclusive Title=Exclusive jet multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(N_{\text{jet}})$ [pb] XMajorTickMarks=10 XMinorTickMarks=0 ErrorBands=1 # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_multi_inclusive Title=Inclusive jet multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(\geq N_{\text{jet}})$ [pb] XMajorTickMarks=10 XMinorTickMarks=0 ErrorBands=1 # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_multi_ratio Title=Ratio of jet multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(\geq N_{\text{jet}})/\sigma(\geq N_{\text{jet}}-1)$ XMajorTickMarks=10 XMinorTickMarks=0 LogY=0 ErrorBands=1 # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_pT_1 Title=Transverse momentum of leading jet XLabel=$p_\perp(\text{jet 1})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 1})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_pT_2 Title=Transverse momentum of second jet XLabel=$p_\perp(\text{jet 2})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 2})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_pT_3 Title=Transverse momentum of third jet XLabel=$p_\perp(\text{jet 3})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 3})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_pT_4 Title=Transverse momentum of fourth jet XLabel=$p_\perp(\text{jet 4})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 4})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_PHOTONJETS/jet_HT Title=Scalar sum of jet transverse momenta (HT) XLabel=$HT$ [GeV] YLabel=$\text{d}\sigma/\text{d}HT$ [pb/GeV] LogX=1 # END PLOT rivet-1.8.3/data/plotinfo/CMS_2011_S8978280.plot0000644000175000017500000001005412116077756016670 0ustar sunsun# BEGIN PLOT /CMS_2011_S8978280/d01-x01-y01 Title=$\text{K}^0_\text{S}$ rapidity distribution at $\sqrt{s}$ = 0.9 TeV XLabel=$\text{K}^0_\text{S}$ $|y|$ YLabel=$(1/N_\text{NSD})\; dN/dy$ LogY=0 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d01-x01-y02 Title=$\text{K}^0_\text{S}$ rapidity distribution at $\sqrt{s}$ = 7 TeV XLabel=$\text{K}^0_\text{S}$ $|y|$ YLabel=$(1/N_\text{NSD})\; dN/dy$ LogY=0 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d02-x01-y01 Title=$\text{K}^0_\text{S}$ transverse momentum distribution at $\sqrt{s}$ = 0.9 TeV XLabel=$\text{K}^0_\text{S}$ $p_T$ [GeV/$c$] YLabel=$(1/N_\text{NSD})\; dN/dp_T \;(\text{GeV}/c)^{-1}$ FullRange=1 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d02-x01-y02 Title=$\text{K}^0_\text{S}$ transverse momentum distribution at $\sqrt{s}$ = 7 TeV XLabel=$\text{K}^0_\text{S}$ $p_T$ [GeV/$c$] YLabel=$(1/N_\text{NSD})\; dN/dp_T \;(\text{GeV}/c)^{-1}$ FullRange=1 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d03-x01-y01 Title=$\Lambda$ rapidity distribution at $\sqrt{s}$ = 0.9 TeV XLabel=$\Lambda$ $|y|$ YLabel=$(1/N_\text{NSD})\; dN/dy$ LogY=0 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d03-x01-y02 Title=$\Lambda$ rapidity distribution at $\sqrt{s}$ = 7 TeV XLabel=$\Lambda$ $|y|$ YLabel=$(1/N_\text{NSD})\; dN/dy$ LogY=0 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d04-x01-y01 Title=$\Lambda$ transverse momentum distribution at $\sqrt{s}$ = 0.9 TeV XLabel=$\Lambda$ $p_T$ [GeV/$c$] YLabel=$(1/N_\text{NSD})\; dN/dp_T \;(\text{GeV}/c)^{-1}$ FullRange=1 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d04-x01-y02 Title=$\Lambda$ transverse momentum distribution at $\sqrt{s}$ = 7 TeV XLabel=$\Lambda$ $p_T$ [GeV/$c$] YLabel=$(1/N_\text{NSD})\; dN/dp_T \;(\text{GeV}/c)^{-1}$ FullRange=1 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d05-x01-y01 Title=$\Xi^-$ rapidity distribution at $\sqrt{s}$ = 0.9 TeV XLabel=$\Xi^-$ $|y|$ YLabel=$(1/N_\text{NSD})\; dN/dy$ LogY=0 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d05-x01-y02 Title=$\Xi^-$ rapidity distribution at $\sqrt{s}$ = 7 TeV XLabel=$\Xi^-$ $|y|$ YLabel=$(1/N_\text{NSD})\; dN/dy$ LogY=0 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d06-x01-y01 Title=$\Xi^-$ transverse momentum distribution at $\sqrt{s}$ = 0.9 TeV XLabel=$\Xi^-$ $p_T$ [GeV/$c$] YLabel=$(1/N_\text{NSD})\; dN/dp_T \;(\text{GeV}/c)^{-1}$ FullRange=1 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d06-x01-y02 Title=$\Xi^-$ transverse momentum distribution at $\sqrt{s}$ = 7 TeV XLabel=$\Xi^-$ $p_T$ [GeV/$c$] YLabel=$(1/N_\text{NSD})\; dN/dp_T \;(\text{GeV}/c)^{-1}$ FullRange=1 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d07-x01-y01 Title=$\Lambda / \text{K}^0_\text{S}$ versus transverse momentum at $\sqrt{s}$ = 0.9 TeV XLabel=$p_T$ [GeV/$c$] YLabel=$N(\Lambda)\, /\, N(\text{K}^0_\text{S})$ LogY=0 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d07-x01-y02 Title=$\Lambda / \text{K}^0_\text{S}$ versus transverse momentum at $\sqrt{s}$ = 7 TeV XLabel=$p_T$ [GeV/$c$] YLabel=$N(\Lambda)\, /\, N(\text{K}^0_\text{S})$ LogY=0 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d08-x01-y01 Title=$\Xi^- / \Lambda$ versus transverse momentum at $\sqrt{s}$ = 0.9 TeV XLabel=$p_T$ [GeV/$c$] YLabel=$N(\Xi^-)\, /\, N(\Lambda)$ LogY=0 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d08-x01-y02 Title=$\Xi^- / \Lambda$ versus transverse momentum at $\sqrt{s}$ = 7 TeV XLabel=$p_T$ [GeV/$c$] YLabel=$N(\Xi^-)\, /\, N(\Lambda)$ LogY=0 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d09-x01-y01 Title=$\Lambda / \text{K}^0_\text{S}$ versus rapidity at $\sqrt{s}$ = 0.9 TeV XLabel=$|y|$ YLabel=$N(\Lambda)\, /\, N(\text{K}^0_\text{S})$ LogY=0 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d09-x01-y02 Title=$\Lambda / \text{K}^0_\text{S}$ versus rapidity at $\sqrt{s}$ = 7 TeV XLabel=$|y|$ YLabel=$N(\Lambda)\, /\, N(\text{K}^0_\text{S})$ LogY=0 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d10-x01-y01 Title=$\Xi^- / \Lambda$ versus rapidity at $\sqrt{s}$ = 0.9 TeV XLabel=$|y|$ YLabel=$N(\Xi^-)\, /\, N(\Lambda)$ LogY=0 # END PLOT # BEGIN PLOT /CMS_2011_S8978280/d10-x01-y02 Title=$\Xi^- / \Lambda$ versus rapidity at $\sqrt{s}$ = 7 TeV XLabel=$|y|$ YLabel=$N(\Xi^-)\, /\, N(\Lambda)$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/CDF_2005_S6080774.plot0000644000175000017500000000623412116077756016640 0ustar sunsun# BEGIN PLOT /CDF_2005_S6080774/d01-x01-y01 Title=Invariant mass of diphoton pair XLabel=$M_{\gamma \gamma}$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}M_{\gamma \gamma}$ [pb/GeV] YMin=0.0005 YMax=11.0 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /CDF_2005_S6080774/d01-x01-y02 Title=Invariant mass of diphoton pair (compared to DIPHOX) XLabel=$M_{\gamma \gamma}$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}M_{\gamma \gamma}$ [pb/GeV] YMin=0.0005 YMax=11.0 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /CDF_2005_S6080774/d01-x01-y03 Title=Invariant mass of diphoton pair (compared to RESBOS) XLabel=$M_{\gamma \gamma}$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}M_{\gamma \gamma}$ [pb/GeV] YMin=0.0005 YMax=11.0 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /CDF_2005_S6080774/d01-x01-y04 Title=Invariant mass of diphoton pair (compared to PYTHIA) XLabel=$M_{\gamma \gamma}$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}M_{\gamma \gamma}$ [pb/GeV] YMin=0.0005 YMax=11.0 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /CDF_2005_S6080774/d02-x01-y01 Title=Transverse momentum of diphoton pair XLabel=$p_{\perp}^{\gamma \gamma}$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}p_{\perp}^{\gamma \gamma}$ [pb/GeV] YMax=11.0 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /CDF_2005_S6080774/d02-x01-y02 Title=Transverse momentum of diphoton pair (compared to DIPHOX) XLabel=$p_{\perp}^{\gamma \gamma}$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}p_{\perp}^{\gamma \gamma}$ [pb/GeV] YMax=11.0 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /CDF_2005_S6080774/d02-x01-y03 Title=Transverse momentum of diphoton pair (compared to RESBOS) XLabel=$p_{\perp}^{\gamma \gamma}$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}p_{\perp}^{\gamma \gamma}$ [pb/GeV] YMax=11.0 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /CDF_2005_S6080774/d02-x01-y04 Title=Transverse momentum of diphoton pair (compared to PYTHIA) XLabel=$p_{\perp}^{\gamma \gamma}$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}p_{\perp}^{\gamma \gamma}$ [pb/GeV] YMax=11.0 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /CDF_2005_S6080774/d03-x01-y01 Title=Azimuthal angle between photons XLabel=$\Delta\Phi_{\gamma \gamma}$ [$\pi\cdot$rad] YLabel=$\mathrm{d}\sigma/\mathrm{d}\Delta\Phi_{\gamma \gamma}$ [pb/$\pi\cdot$rad] YMax=110.0 LegendXPos=0.05 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /CDF_2005_S6080774/d03-x01-y02 Title=Azimuthal angle between photons (compared to DIPHOX) XLabel=$\Delta\Phi_{\gamma \gamma}$ [$\pi\cdot$rad] YLabel=$\mathrm{d}\sigma/\mathrm{d}\Delta\Phi_{\gamma \gamma}$ [pb/$\pi\cdot$rad] YMax=110.0 LegendXPos=0.05 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /CDF_2005_S6080774/d03-x01-y03 Title=Azimuthal angle between photons (compared to RESBOS) XLabel=$\Delta\Phi_{\gamma \gamma}$ [$\pi\cdot$rad] YLabel=$\mathrm{d}\sigma/\mathrm{d}\Delta\Phi_{\gamma \gamma}$ [pb/$\pi\cdot$rad] YMax=110.0 LegendXPos=0.05 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /CDF_2005_S6080774/d03-x01-y04 Title=Azimuthal angle between photons (compared to PYTHIA) XLabel=$\Delta\Phi_{\gamma \gamma}$ [$\pi\cdot$rad] YLabel=$\mathrm{d}\sigma/\mathrm{d}\Delta\Phi_{\gamma \gamma}$ [pb/$\pi\cdot$rad] YMax=110.0 LegendXPos=0.05 RatioPlotMode=deviation # END PLOT rivet-1.8.3/data/plotinfo/CMS_2010_S8656010.plot0000644000175000017500000000425112116077756016651 0ustar sunsun# BEGIN PLOT /CMS_2010_S8656010/d0[1-3] XLabel=$p_\perp$ [GeV/$c$] YLabel=$d^2N_\text{ch}\,/d\eta\, dp_\perp\; [(\text{GeV}/c)^{-1}]$ FullRange=1 # END PLOT # BEGIN PLOT /CMS_2010_S8656010/d01-x01-y01 Title=Charged hadron $p_\perp$ for $|\eta|=0.1$ at $\sqrt{s} = 7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8656010/d01-x01-y02 Title=Charged hadron $p_\perp$ for $|\eta|=0.3$ at $\sqrt{s} = 7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8656010/d01-x01-y03 Title=Charged hadron $p_\perp$ for $|\eta|=0.5$ at $\sqrt{s} = 7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8656010/d01-x01-y04 Title=Charged hadron $p_\perp$ for $|\eta|=0.7$ at $\sqrt{s} = 7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8656010/d02-x01-y01 Title=Charged hadron $p_\perp$ for $|\eta|=0.9$ at $\sqrt{s} = 7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8656010/d02-x01-y02 Title=Charged hadron $p_\perp$ for $|\eta|=1.1$ at $\sqrt{s} = 7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8656010/d02-x01-y03 Title=Charged hadron $p_\perp$ for $|\eta|=1.3$ at $\sqrt{s} = 7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8656010/d02-x01-y04 Title=Charged hadron $p_\perp$ for $|\eta|=1.5$ at $\sqrt{s} = 7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8656010/d03-x01-y01 Title=Charged hadron $p_\perp$ for $|\eta|=1.7$ at $\sqrt{s} = 7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8656010/d03-x01-y02 Title=Charged hadron $p_\perp$ for $|\eta|=1.9$ at $\sqrt{s} = 7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8656010/d03-x01-y03 Title=Charged hadron $p_\perp$ for $|\eta|=2.1$ at $\sqrt{s} = 7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8656010/d03-x01-y04 Title=Charged hadron $p_\perp$ for $|\eta|=2.3$ at $\sqrt{s} = 7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2010_S8656010/d04-x01-y01 Title=Charged hadron $p_\perp$ for $|\eta|<2.4$ at $\sqrt{s} = 7\,\text{TeV}$ XLabel=$p_\perp$ [GeV/$c$] YLabel=$(1/2\pi p_\perp)\; d^2N_\text{ch}\,/d\eta\, dp_\perp\; [(\text{GeV}/c)^{-2}]$ FullRange=1 # END PLOT # BEGIN PLOT /CMS_2010_S8656010/d05-x01-y01 Title=Charged hadron $\eta$ integrated over $p_\perp$ at $\sqrt{s} = 7\,\text{TeV}$ XLabel=$\eta$ YLabel=$dN_\text{ch}\,/d\eta$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_CONF_2012_105.plot0000644000175000017500000000245212116077756017700 0ustar sunsun# BEGIN PLOT /ATLAS_2012_CONF_2012_105/count_ee Title=Number of $ee$ signal events XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_105/count_mumu Title=Number of $\mu\mu$ signal events XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_105/count_emu Title=Number of $e\mu$ signal events XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_105/count_ll Title=Number of $\ell\ell$ signal events XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_105/eTmiss_ee Title=Missing Transverse Energy for $ee$ events XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/50$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_105/eTmiss_emu Title=Missing Transverse Energy for $e\mu$ events XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/50$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_105/eTmiss_mumu Title=Missing Transverse Energy for $\mu\mu$ events XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/50$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_105/eTmiss_ll Title=Missing Transverse Energy for $\ell\ell$ events XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/50$\,GeV LogY=1 # END PLOT rivet-1.8.3/data/plotinfo/MC_PHOTONINC.plot0000644000175000017500000000072412116077756016452 0ustar sunsun# BEGIN PLOT /MC_PHOTONINC/photon_pT$ Title=Photon $p_\perp$ XLabel=$p_\perp^{\gamma}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\gamma}$ [pb/GeV] LogX=1 # END PLOT # BEGIN PLOT /MC_PHOTONINC/photon_pT_lin$ Title=Photon $p_\perp$ XLabel=$p_\perp^{\gamma}$ [GeV] YLabel=$\text{d}\sigma/\text{d}y_{\gamma}$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_PHOTONINC/photon_y Title=Photon rapidity XLabel=$y_{\gamma}$ YLabel=$\text{d}\sigma/\text{d}y_{\gamma}$ [pb] # END PLOT rivet-1.8.3/data/plotinfo/CDF_2002_S4796047.plot0000644000175000017500000000173712116077756016645 0ustar sunsun# BEGIN PLOT /CDF_2002_S4796047/d01-x01-y01 Title=Charged multiplicity at $\sqrt{s} = 630~\text{GeV}$, $|\eta| < 1$, $p_T > 0.4~\text{GeV}$ XLabel=$N_\text{ch}$ YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ FullRange=1 # END PLOT # BEGIN PLOT /CDF_2002_S4796047/d02-x01-y01 Title=Charged multiplicity at $\sqrt{s} = 1800~\text{GeV}$, $|\eta| < 1$, $p_T > 0.4~\text{GeV}$ XLabel=$N_\text{ch}$ YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ FullRange=1 # END PLOT # BEGIN PLOT /CDF_2002_S4796047/d03-x01-y01 Title=$\langle p_\perp \rangle$ vs. multiplicity at $\sqrt{s} = 630~\text{GeV}$, $|\eta| < 1$, $p_T > 0.4~\text{GeV}$ XLabel=$N_\text{ch}$ YLabel=$\langle p_T \rangle$ LogY=0 LegendXPos=0.10 ShowZero=0 # END PLOT # BEGIN PLOT /CDF_2002_S4796047/d04-x01-y01 Title=$\langle p_\perp \rangle$ vs. multiplicity at $\sqrt{s} = 1800~\text{GeV}$, $|\eta| < 1$, $p_T > 0.4~\text{GeV}$ XLabel=$N_\text{ch}$ YLabel=$\langle p_T \rangle$ LogY=0 LegendXPos=0.10 ShowZero=0 # END PLOT rivet-1.8.3/data/plotinfo/D0_2010_S8570965.plot0000644000175000017500000000671212116077756016514 0ustar sunsun# BEGIN PLOT /D0_2010_S8570965/d01-x01-y01 Title=Diphoton mass XLabel=$M_{\gamma\gamma}$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}M_{\gamma\gamma}$ [pb/GeV] RatioPlotMode=deviation # END PLOT # BEGIN PLOT /D0_2010_S8570965/d02-x01-y01 Title=$p_\perp$ of the diphoton system XLabel=$p_\perp^{\gamma\gamma}$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}p_\perp^{\gamma\gamma}$ [pb/GeV] XMin=0.1 RatioPlotMode=deviation # END PLOT # BEGIN PLOT /D0_2010_S8570965/d03-x01-y01 Title=Azimuthal angle between the photons XLabel=$\Delta\phi_{\gamma\gamma}$ [rad] YLabel=$\mathrm{d}\sigma/\mathrm{d}\Delta\phi_{\gamma\gamma}$ [pb/rad] RatioPlotMode=deviation LegendXPos=0.05 # END PLOT # BEGIN PLOT /D0_2010_S8570965/d04-x01-y01 Title=Polar scattering angle of the photons XLabel=$|\cos\theta^*|$ YLabel=$\mathrm{d}\sigma/\mathrm{d}|\cos\theta^*|$ [pb] RatioPlotMode=deviation # END PLOT # BEGIN PLOT /D0_2010_S8570965/d05-x01-y01 Title=$p_\perp$ of the diphoton system (30 GeV$55$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/count_8j55 Title=Number of events in 8 jet, $p_\perp>55$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/count_6j80 Title=Number of events in 6 jet, $p_\perp>80$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/count_7j80 Title=Number of events in 7 jet, $p_\perp>80$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d01-x01-y01 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 6 jets with $p_\perp>55$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d01-x01-y02 Title=Background $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 6 jets with $p_\perp>55$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d01-x01-y03 Title=Signal $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 6 jets with $p_\perp>55$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d13-x01-y01 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 7 jets with $p_\perp>55$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d13-x01-y02 Title=Background $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 7 jets with $p_\perp>55$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d13-x01-y03 Title=Signal $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 7 jets with $p_\perp>55$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d15-x01-y01 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 8 jets with $p_\perp>55$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d15-x01-y02 Title=Background $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 8 jets with $p_\perp>55$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d15-x01-y03 Title=Signal $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 8 jets with $p_\perp>55$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d02-x01-y01 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 5 jets with $p_\perp>80$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d02-x01-y02 Title=Background $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 5 jets with $p_\perp>80$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d02-x01-y03 Title=Signal $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 5 jets with $p_\perp>80$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d14-x01-y01 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 6 jets with $p_\perp>80$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d14-x01-y02 Title=Background $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 6 jets with $p_\perp>80$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d14-x01-y03 Title=Signal $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 6 jets with $p_\perp>80$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d16-x01-y01 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 7 jets with $p_\perp>80$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d16-x01-y02 Title=Background $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 7 jets with $p_\perp>80$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d16-x01-y03 Title=Signal $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 7 jets with $p_\perp>80$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/0.25$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9225137/d03-x01-y01 Title=Observed number of jets with $p_\perp>55$\,GeV for $1.555$\,GeV for $1.555$\,GeV for $1.555$\,GeV for $255$\,GeV for $255$\,GeV for $255$\,GeV for $355$\,GeV for $355$\,GeV for $380$\,GeV for $1.580$\,GeV for $1.580$\,GeV for $1.580$\,GeV for $280$\,GeV for $280$\,GeV for $280$\,GeV for $380$\,GeV for $380$\,GeV for $355$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_103/count_8j55 Title=Number of events in 8 jet, $p_\perp>55$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_103/count_9j55 Title=Number of events in 9 jet, $p_\perp>55$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_103/count_6j80 Title=Number of events in 6 jet, $p_\perp>80$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_103/count_7j80 Title=Number of events in 7 jet, $p_\perp>80$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_038/count_8j80 Title=Number of events in 8 jet, $p_\perp>80$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_103/hist_njet55 Title=Observed number of jets with $p_\perp>55$\,GeV for $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}>4\,\mathrm{GeV}^{\frac12}$ XLabel=Number of Jets YLabel=Number of events LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_103/hist_njet80 Title=Observed number of jets with $p_\perp>80$\,GeV for $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}>4\,\mathrm{GeV}^{\frac12}$ XLabel=Number of Jets YLabel=Number of events LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_103/etmiss_HT_7j55 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 7 jets with $p_\perp>55$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/2$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_103/etmiss_HT_8j55 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 8 jets with $p_\perp>55$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/2$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_103/etmiss_HT_9j55 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 9 jets with $p_\perp>55$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/2$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_103/etmiss_HT_6j80 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 6 jets with $p_\perp>80$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/2$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_103/etmiss_HT_7j80 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 7 jets with $p_\perp>80$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/2$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_103/etmiss_HT_8j80 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 8 jets with $p_\perp>80$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/2$\,GeV LogY=1 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_S9002537.plot0000644000175000017500000000024612116077756017074 0ustar sunsun# BEGIN PLOT /ATLAS_2011_S9002537/d01-x01-y01 LogY=0 LegendXPos=0.1 Title=Muon charge asymmetry in $W$ decays XLabel=$|\eta_\mu|$ YLabel=$\mathcal{A}_\mu$ # END PLOT rivet-1.8.3/data/plotinfo/EXAMPLE.plot0000644000175000017500000000221112116077756015616 0ustar sunsun# BEGIN PLOT /EXAMPLE/Aplanarity Title=Aplanarity XLabel=$A$ YLabel=$1/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{A}$ # END PLOT # BEGIN PLOT /EXAMPLE/HadrTotalChMult Title=Total hadronic charged multiplicity XLabel=$N_\text{Hch}$ YLabel=$1/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{N_\text{Hch}}$ # END PLOT # BEGIN PLOT /EXAMPLE/HadrTotalMult Title=Total hadronic multiplicity XLabel=$N_\text{H}$ YLabel=$1/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{N_\text{H}}$ # END PLOT # BEGIN PLOT /EXAMPLE/Major Title=Thrust major XLabel=$M$ YLabel=$1/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{M}$ # END PLOT # BEGIN PLOT /EXAMPLE/Sphericity Title=Sphericity XLabel=$S$ YLabel=$1/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{S}$ # END PLOT # BEGIN PLOT /EXAMPLE/Thrust Title=Thrust XLabel=$T$ YLabel=$1/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{T}$ # END PLOT # BEGIN PLOT /EXAMPLE/TotalChMult Title=Total charged multiplicity XLabel=$N_\text{ch}$ YLabel=$1/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{N_\text{ch}}$ # END PLOT # BEGIN PLOT /EXAMPLE/TotalMult Title=Total multiplicity XLabel=$N_\text{tot}$ YLabel=$1/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{N_\text{tot}}$ # END PLOT rivet-1.8.3/data/plotinfo/MC_WKTSPLITTINGS.plot0000644000175000017500000000367612116077756017210 0ustar sunsun# BEGIN PLOT /MC_WKTSPLITTINGS/log10_R_0 Title=$\log_{10}$(Integrated $0$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{0}$ Rebin=2 LegendYPos=0.8 LegendXPos=0.75 # END PLOT # BEGIN PLOT /MC_WKTSPLITTINGS/log10_R_1 Title=$\log_{10}$(Integrated $1$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{1}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_WKTSPLITTINGS/log10_R_2 Title=$\log_{10}$(Integrated $2$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{2}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_WKTSPLITTINGS/log10_R_3 Title=$\log_{10}$(Integrated $3$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{3}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_WKTSPLITTINGS/log10_R_4 Title=$\log_{10}$(Integrated $4$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{\geq4}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_WKTSPLITTINGS/log10_d_01 Title=$\log_{10}$($k_\perp$ jet resolution $0 \to 1$ [GeV]) XLabel=$\log_{10}(d_{01}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{01}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_WKTSPLITTINGS/log10_d_12 Title=$\log_{10}$($k_\perp$ jet resolution $1 \to 2$ [GeV]) XLabel=$\log_{10}(d_{12}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{12}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_WKTSPLITTINGS/log10_d_23 Title=$\log_{10}$($k_\perp$ jet resolution $2 \to 3$ [GeV]) XLabel=$\log_{10}(d_{23}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{23}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_WKTSPLITTINGS/log10_d_34 Title=$\log_{10}$($k_\perp$ jet resolution $3 \to 4$ [GeV]) XLabel=$\log_{10}(d_{34}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{34}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT rivet-1.8.3/data/plotinfo/CDF_1998_S3618439.plot0000644000175000017500000000066612116077756016671 0ustar sunsun# BEGIN PLOT /CDF_1998_S3618439/d01-x01-y01 Title=$E_\perp$ sum for jets with $E_\perp>20$ GeV XLabel=$\sum E_\perp^\mathrm{jet}$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}\sum E_\perp^\mathrm{jet}$ [pb/GeV] # END PLOT # BEGIN PLOT /CDF_1998_S3618439/d01-x01-y02 Title=$E_\perp$ sum for jets with $E_\perp>100$ GeV XLabel=$\sum E_\perp^\mathrm{jet}$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}\sum E_\perp^\mathrm{jet}$ [pb/GeV] # END PLOT rivet-1.8.3/data/plotinfo/CDF_1996_S3108457.plot0000644000175000017500000000510512116077756016652 0ustar sunsun# BEGIN PLOT /CDF_1996_S3108457/d01-x01-y01 Title=Multijet mass in 2-jet events XLabel=$m$ [GeV] YLabel=$1/N \mathrm{d}N/\mathrm{d}m$ [1/40 GeV] # END PLOT # BEGIN PLOT /CDF_1996_S3108457/d02-x01-y01 Title=Multijet mass in 3-jet events XLabel=$m$ [GeV] YLabel=$1/N \mathrm{d}N/\mathrm{d}m$ [1/40 GeV] # END PLOT # BEGIN PLOT /CDF_1996_S3108457/d03-x01-y01 Title=Multijet mass in 4-jet events XLabel=$m$ [GeV] YLabel=$1/N \mathrm{d}N/\mathrm{d}m$ [1/40 GeV] # END PLOT # BEGIN PLOT /CDF_1996_S3108457/d04-x01-y01 Title=Multijet mass in 5-jet events XLabel=$m$ [GeV] YLabel=$1/N \mathrm{d}N/\mathrm{d}m$ [1/40 GeV] # END PLOT # BEGIN PLOT /CDF_1996_S3108457/d05-x01-y01 Title=Multijet mass in 6-jet events XLabel=$m$ [GeV] YLabel=$1/N \mathrm{d}N/\mathrm{d}m$ [1/40 GeV] # END PLOT # BEGIN PLOT /CDF_1996_S3108457/d10-x01-y01 Title=Leading jet angle in 2-jet events XLabel=$|\cos \theta^*|$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos\theta^*$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3108457/d11-x01-y01 Title=Leading jet angle in 3-jet events XLabel=$|\cos \theta^*|$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos\theta^*$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3108457/d12-x01-y01 Title=Leading jet angle in 4-jet events XLabel=$|\cos \theta^*|$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos\theta^*$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3108457/d13-x01-y01 Title=Leading jet angle in 5-jet events XLabel=$|\cos \theta^*|$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos\theta^*$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3108457/d14-x01-y01 Title=Leading jet angle in 6-jet events XLabel=$|\cos \theta^*|$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos\theta^*$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3108457/d15-x01-y01 Title=Inclusive jet $p_\perp$ in 2-jet events XLabel=$p_\perp(\mathrm{jet})$ [GeV] YLabel=$1/N \mathrm{d}N/\mathrm{d}p_\perp$ [1/20 GeV] # END PLOT # BEGIN PLOT /CDF_1996_S3108457/d16-x01-y01 Title=Inclusive jet $p_\perp$ in 3-jet events XLabel=$p_\perp(\mathrm{jet})$ [GeV] YLabel=$1/N \mathrm{d}N/\mathrm{d}p_\perp$ [1/20 GeV] # END PLOT # BEGIN PLOT /CDF_1996_S3108457/d17-x01-y01 Title=Inclusive jet $p_\perp$ in 4-jet events XLabel=$p_\perp(\mathrm{jet})$ [GeV] YLabel=$1/N \mathrm{d}N/\mathrm{d}p_\perp$ [1/20 GeV] # END PLOT # BEGIN PLOT /CDF_1996_S3108457/d18-x01-y01 Title=Inclusive jet $p_\perp$ in 5-jet events XLabel=$p_\perp(\mathrm{jet})$ [GeV] YLabel=$1/N \mathrm{d}N/\mathrm{d}p_\perp$ [1/20 GeV] # END PLOT # BEGIN PLOT /CDF_1996_S3108457/d19-x01-y01 Title=Inclusive jet $p_\perp$ in 6-jet events XLabel=$p_\perp(\mathrm{jet})$ [GeV] YLabel=$1/N \mathrm{d}N/\mathrm{d}p_\perp$ [1/20 GeV] # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_CONF_2011_090.plot0000644000175000017500000000301412116077756017674 0ustar sunsun# BEGIN PLOT /ATLAS_2011_CONF_2011_090/count_electron_channel Title=Number of events in the electron channel XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_CONF_2011_090/count_muon_channel Title=Number of events in the muon channel XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_CONF_2011_090/Et_miss_e Title=Missing transverse Energy in the electron channel XLabel=$E_{\mathrm{T}}^{\rm miss}$ [GeV] YLabel=$\mathrm{Events}/10 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_CONF_2011_090/Et_miss_mu Title=Missing transverse Energy in the muon channel XLabel=$E_{\mathrm{T}}^{\rm miss}$ [GeV] YLabel=$\mathrm{Events}/10 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_CONF_2011_090/m_eff_e Title=Effective Mass in the electron channel before final selectron XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/25 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_CONF_2011_090/m_eff_mu Title=Effective Mass in the muon channel before final selectron XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/25 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_CONF_2011_090/m_eff_e_final Title=Effective Mass in the electron channel after final selectron XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/25 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_CONF_2011_090/m_eff_mu_final Title=Effective Mass in the muon channel after final selectron XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/25 \mathrm{GeV}$ LogY=1 # END PLOT rivet-1.8.3/data/plotinfo/OPAL_1997_S3608263.plot0000644000175000017500000000022412116077756017007 0ustar sunsun# BEGIN PLOT /OPAL_1997_S3608263/d01-x01-y01 Title=$K^{*0}$ scaled momentum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_p$ # END PLOT rivet-1.8.3/data/plotinfo/CDF_2009_NOTE_9936.plot0000644000175000017500000000026412116077756017116 0ustar sunsun# BEGIN PLOT /CDF_2009_NOTE_9936/d01-x01-y01 Title=MinBias Charged multiplicity in $p\bar{p}$ events at $\sqrt{s}=1.96$ TeV XLabel=$N_\text{ch}$ YLabel=$P(N_\text{ch})$ # END PLOT rivet-1.8.3/data/plotinfo/OPAL_2002_S5361494.plot0000644000175000017500000000170012116077756016765 0ustar sunsun# BEGIN PLOT /OPAL_2002_S5361494/d01-x01-y01 Title=Charged multiplicity as a function of energy in $b$ events XLabel=$E_\mathrm{CMS}/GeV$ YLabel=$\langle n\rangle_{b\bar b}$ LegendXPos=0.20 LegendYPos=0.85 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /OPAL_2002_S5361494/d01-x01-y02 Title=Charged multiplicity as a function of energy in $c$ events XLabel=$E_\mathrm{CMS}/GeV$ YLabel=$\langle n\rangle_{c\bar c}$ LegendXPos=0.20 LegendYPos=0.85 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /OPAL_2002_S5361494/d01-x01-y03 Title=Charged multiplicity as a function of energy in $uds$ events XLabel=$E_\mathrm{CMS}/GeV$ YLabel=$\langle n\rangle_{l\bar l}$ LegendXPos=0.20 LegendYPos=0.85 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /OPAL_2002_S5361494/d01-x01-y04 Title=Difference in Charged multiplicity as a function of energy between $b$ and $uds$ events XLabel=$E_\mathrm{CMS}/GeV$ YLabel=$\delta_{bl}$ LegendXPos=0.20 LegendYPos=0.85 FullRange=1 LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_I954993.plot0000644000175000017500000000026612116077756017021 0ustar sunsun# BEGIN PLOT /ATLAS_2011_I954993/d01-x01-y01 Title=Total fiducial cross-section $WZ\to\ell\nu\ell\ell$ XLabel=$\sqrt{s}$~[GeV] YLabel=$\sigma_{WZ\to\ell\nu\ell\ell}$~[fb] # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2010_S8817804.plot0000644000175000017500000001553712116077756017116 0ustar sunsun# BEGIN PLOT /ATLAS_2010_S8817804/d01-x01-y01 Title=Inclusive jet $p_T$ spectrum for $|y|<0.3$. anti-KT, $R=0.4$. XLabel=$p_{T}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}p_{T}\,\mathrm{d}y$ [pb/GeV] LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d02-x01-y01 Title=Inclusive jet $p_T$ spectrum for $0.3<|y|<0.8$. anti-KT, $R=0.4$. XLabel=$p_{T}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}p_{T}\,\mathrm{d}y$ [pb/GeV] LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d03-x01-y01 Title=Inclusive jet $p_T$ spectrum for $0.8<|y|<1.2$. anti-KT, $R=0.4$. XLabel=$p_{T}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}p_{T}\,\mathrm{d}y$ [pb/GeV] LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d04-x01-y01 Title=Inclusive jet $p_T$ spectrum for $1.2<|y|<2.1$. anti-KT, $R=0.4$. XLabel=$p_{T}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}p_{T}\,\mathrm{d}y$ [pb/GeV] LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d05-x01-y01 Title=Inclusive jet $p_T$ spectrum for $2.1<|y|<2.8$. anti-KT, $R=0.4$. XLabel=$p_{T}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}p_{T}\,\mathrm{d}y$ [pb/GeV] LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d06-x01-y01 Title=Inclusive jet $p_T$ spectrum for $|y|<0.3$. anti-KT, $R=0.6$. XLabel=$p_{T}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}p_{T}\,\mathrm{d}y$ [pb/GeV] LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d07-x01-y01 Title=Inclusive jet $p_T$ spectrum for $0.3<|y|<0.8$. anti-KT, $R=0.6$. XLabel=$p_{T}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}p_{T}\,\mathrm{d}y$ [pb/GeV] LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d08-x01-y01 Title=Inclusive jet $p_T$ spectrum for $0.8<|y|<1.2$. anti-KT, $R=0.6$. XLabel=$p_{T}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}p_{T}\,\mathrm{d}y$ [pb/GeV] LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d09-x01-y01 Title=Inclusive jet $p_T$ spectrum for $1.2<|y|<2.1$. anti-KT, $R=0.6$. XLabel=$p_{T}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}p_{T}\,\mathrm{d}y$ [pb/GeV] LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d10-x01-y01 Title=Inclusive jet $p_T$ spectrum for $2.1<|y|<2.8$. anti-KT, $R=0.6$. XLabel=$p_{T}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}p_{T}\,\mathrm{d}y$ [pb/GeV] LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d11-x01-y01 Title=Dijet mass spectrum for $|y_\text{max}|<0.3$. anti-KT, $R=0.4$. XLabel=$m_{12}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}m\,\mathrm{d}|y_\text{max}|$ [pb/GeV] LogX=1 LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d12-x01-y01 Title=Dijet mass spectrum for $0.3<|y_\text{max}|<0.8$. anti-KT, $R=0.4$. XLabel=$m_{12}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}m\,\mathrm{d}|y_\text{max}|$ [pb/GeV] LogX=1 LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d13-x01-y01 Title=Dijet mass spectrum for $0.8<|y_\text{max}|<1.2$. anti-KT, $R=0.4$. XLabel=$m_{12}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}m\,\mathrm{d}|y_\text{max}|$ [pb/GeV] LogX=1 LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d14-x01-y01 Title=Dijet mass spectrum for $1.2<|y_\text{max}|<2.1$. anti-KT, $R=0.4$. XLabel=$m_{12}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}m\,\mathrm{d}|y_\text{max}|$ [pb/GeV] LogX=1 LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d15-x01-y01 Title=Dijet mass spectrum for $2.1<|y_\text{max}|<2.8$. anti-KT, $R=0.4$. XLabel=$m_{12}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}m\,\mathrm{d}|y_\text{max}|$ [pb/GeV] LogX=1 LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d16-x01-y01 Title=Dijet mass spectrum for $|y_\text{max}|<0.3$. anti-KT, $R=0.6$. XLabel=$m_{12}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}m\,\mathrm{d}|y_\text{max}|$ [pb/GeV] LogX=1 LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d17-x01-y01 Title=Dijet mass spectrum for $0.3<|y_\text{max}|<0.8$. anti-KT, $R=0.6$. XLabel=$m_{12}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}m\,\mathrm{d}|y_\text{max}|$ [pb/GeV] LogX=1 LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d18-x01-y01 Title=Dijet mass spectrum for $0.8<|y_\text{max}|<1.2$. anti-KT, $R=0.6$. XLabel=$m_{12}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}m\,\mathrm{d}|y_\text{max}|$ [pb/GeV] LogX=1 LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d19-x01-y01 Title=Dijet mass spectrum for $1.2<|y_\text{max}|<2.1$. anti-KT, $R=0.6$. XLabel=$m_{12}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}m\,\mathrm{d}|y_\text{max}|$ [pb/GeV] LogX=1 LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d20-x01-y01 Title=Dijet mass spectrum for $2.1<|y_\text{max}|<2.8$. anti-KT, $R=0.6$. XLabel=$m_{12}$ [GeV] YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}m\,\mathrm{d}|y_\text{max}|$ [pb/GeV] LogX=1 LogY=1 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8817804/d21-x01-y01 Title=Dijet $\chi$ for $340~GeV 500\,\text{GeV}$, $|\eta| < 2.4$, $\sqrt{s} = 0.9\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S8884919/d21-x01-y01 Title=Charged hadron multiplicity, $p_\perp > 500\,\text{GeV}$, $|\eta| < 2.4$, $\sqrt{s} = 2.36\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S8884919/d22-x01-y01 Title=Charged hadron multiplicity, $p_\perp > 500\,\text{GeV}$, $|\eta| < 2.4$, $\sqrt{s} = 7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S8884919/d23-x01-y01 Title=Mean $p_\perp$ vs charged hadron multiplicity, $|\eta| < 2.4$, $\sqrt{s} = 0.9\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S8884919/d24-x01-y01 Title=Mean $p_\perp$ vs charged hadron multiplicity, $|\eta| < 2.4$, $\sqrt{s} = 2.36\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S8884919/d25-x01-y01 Title=Mean $p_\perp$ vs charged hadron multiplicity, $|\eta| < 2.4$, $\sqrt{s} = 7\,\text{TeV}$ # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2010_S8591806.plot0000644000175000017500000000160712116077756017110 0ustar sunsun# BEGIN PLOT /ATLAS_2010_S8591806/d02-x01-y01 Title=Charged particle multiplicity as function of $\eta$ XLabel=$\eta$ YLabel=$1/N_\mathrm{ev} \mathrm{d}N_\mathrm{ch}/\mathrm{d}\eta$ LogY=0 YMin=0.75 YMax=1.55 # END PLOT # BEGIN PLOT /ATLAS_2010_S8591806/d03-x01-y01 Title=Charged particle multiplicity as function of $p_\perp$ XLabel=$p_\perp$ [GeV] YLabel=$1/N_\mathrm{ev} \; 1/(2\pi p_\perp) \; \mathrm{d}^2N_\mathrm{ch}/\mathrm{d}\eta\mathrm{d}p_\perp$ [GeV$^{-2}$] YMin=2e-11 YMax=10 LogX=1 # END PLOT # BEGIN PLOT /ATLAS_2010_S8591806/d04-x01-y01 Title=Charged particle density XLabel=$N_\mathrm{ch}$ YLabel=$1/N_\mathrm{ev} \mathrm{d}N_\mathrm{ev}/\mathrm{d}N_\mathrm{ch}$ # END PLOT # BEGIN PLOT /ATLAS_2010_S8591806/d05-x01-y01 Title=Average transverse momentum as function of $N_\mathrm{ch}$ XLabel=$N_\mathrm{ch}$ YLabel=$\langle p_\perp \rangle$ [GeV] YMin=0.55 YMax=1.3 LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/D0_2009_S8320160.plot0000644000175000017500000000516212116077756016476 0ustar sunsun# BEGIN PLOT /D0_2009_S8320160/d01-x01-y01 Title=Dijet angular distribution in $0.25 < M_{jj}/\mathrm{TeV} < 0.3$ XLabel=$\chi_{\mathrm{dijet}} = \exp(|y_1-y_2|)$ YLabel=$1/\sigma_{\mathrm{dijet}} \, \mathrm{d}\sigma/\mathrm{d}\chi_{\mathrm{dijet}}$ LogY=0 # END PLOT # BEGIN PLOT /D0_2009_S8320160/d02-x01-y01 Title=Dijet angular distribution in $0.3 < M_{jj}/\mathrm{TeV} < 0.4$ XLabel=$\chi_{\mathrm{dijet}} = \exp(|y_1-y_2|)$ YLabel=$1/\sigma_{\mathrm{dijet}} \, \mathrm{d}\sigma/\mathrm{d}\chi_{\mathrm{dijet}}$ LogY=0 # END PLOT # BEGIN PLOT /D0_2009_S8320160/d03-x01-y01 Title=Dijet angular distribution in $0.4 < M_{jj}/\mathrm{TeV} < 0.5$ XLabel=$\chi_{\mathrm{dijet}} = \exp(|y_1-y_2|)$ YLabel=$1/\sigma_{\mathrm{dijet}} \, \mathrm{d}\sigma/\mathrm{d}\chi_{\mathrm{dijet}}$ LogY=0 # END PLOT # BEGIN PLOT /D0_2009_S8320160/d04-x01-y01 Title=Dijet angular distribution in $0.5 < M_{jj}/\mathrm{TeV} < 0.6$ XLabel=$\chi_{\mathrm{dijet}} = \exp(|y_1-y_2|)$ YLabel=$1/\sigma_{\mathrm{dijet}} \, \mathrm{d}\sigma/\mathrm{d}\chi_{\mathrm{dijet}}$ LogY=0 # END PLOT # BEGIN PLOT /D0_2009_S8320160/d05-x01-y01 Title=Dijet angular distribution in $0.6 < M_{jj}/\mathrm{TeV} < 0.7$ XLabel=$\chi_{\mathrm{dijet}} = \exp(|y_1-y_2|)$ YLabel=$1/\sigma_{\mathrm{dijet}} \, \mathrm{d}\sigma/\mathrm{d}\chi_{\mathrm{dijet}}$ LogY=0 # END PLOT # BEGIN PLOT /D0_2009_S8320160/d06-x01-y01 Title=Dijet angular distribution in $0.7 < M_{jj}/\mathrm{TeV} < 0.8$ XLabel=$\chi_{\mathrm{dijet}} = \exp(|y_1-y_2|)$ YLabel=$1/\sigma_{\mathrm{dijet}} \, \mathrm{d}\sigma/\mathrm{d}\chi_{\mathrm{dijet}}$ LogY=0 # END PLOT # BEGIN PLOT /D0_2009_S8320160/d07-x01-y01 Title=Dijet angular distribution in $0.8 < M_{jj}/\mathrm{TeV} < 0.9$ XLabel=$\chi_{\mathrm{dijet}} = \exp(|y_1-y_2|)$ YLabel=$1/\sigma_{\mathrm{dijet}} \, \mathrm{d}\sigma/\mathrm{d}\chi_{\mathrm{dijet}}$ LogY=0 # END PLOT # BEGIN PLOT /D0_2009_S8320160/d08-x01-y01 Title=Dijet angular distribution in $0.9 < M_{jj}/\mathrm{TeV} < 1.0$ XLabel=$\chi_{\mathrm{dijet}} = \exp(|y_1-y_2|)$ YLabel=$1/\sigma_{\mathrm{dijet}} \, \mathrm{d}\sigma/\mathrm{d}\chi_{\mathrm{dijet}}$ LogY=0 # END PLOT # BEGIN PLOT /D0_2009_S8320160/d09-x01-y01 Title=Dijet angular distribution in $1.0 < M_{jj}/\mathrm{TeV} < 1.1$ XLabel=$\chi_{\mathrm{dijet}} = \exp(|y_1-y_2|)$ YLabel=$1/\sigma_{\mathrm{dijet}} \, \mathrm{d}\sigma/\mathrm{d}\chi_{\mathrm{dijet}}$ LogY=0 # END PLOT # BEGIN PLOT /D0_2009_S8320160/d10-x01-y01 Title=Dijet angular distribution in $M_{jj}/\mathrm{TeV} > 1.1$ XLabel=$\chi_{\mathrm{dijet}} = \exp(|y_1-y_2|)$ YLabel=$1/\sigma_{\mathrm{dijet}} \, \mathrm{d}\sigma/\mathrm{d}\chi_{\mathrm{dijet}}$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/DELPHI_1999_S3960137.plot0000644000175000017500000000070712116077756017232 0ustar sunsun# BEGIN PLOT /DELPHI_1999_S3960137/d01-x01-y01 Title=$\rho^0$ scaled momentum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_p$ # END PLOT # BEGIN PLOT /DELPHI_1999_S3960137/d01-x01-y02 Title=$f^0(980)$ scaled momentum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_p$ # END PLOT # BEGIN PLOT /DELPHI_1999_S3960137/d01-x01-y03 Title=$f_2(1270)$ scaled momentum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_p$ # END PLOT rivet-1.8.3/data/plotinfo/OPAL_1997_S3396100.plot0000644000175000017500000000361712116077756017012 0ustar sunsun# BEGIN PLOT /OPAL_1997_S3396100/d01-x01-y01 Title=$\Lambda^0$ scaled momentum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_p$ # END PLOT # BEGIN PLOT /OPAL_1997_S3396100/d02-x01-y01 Title=$\Lambda^0$ scaled momentum XLabel=$\ln(1/x_p)$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\ln(1/x_p)$ # END PLOT # BEGIN PLOT /OPAL_1997_S3396100/d03-x01-y01 Title=$\Xi^-$ scaled momentum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_p$ # END PLOT # BEGIN PLOT /OPAL_1997_S3396100/d04-x01-y01 Title=$\Xi^-$ scaled momentum XLabel=$\ln(1/x_p)$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\ln(1/x_p)$ # END PLOT # BEGIN PLOT /OPAL_1997_S3396100/d05-x01-y01 Title=$\Sigma^+(1385)$ scaled momentum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_p$ # END PLOT # BEGIN PLOT /OPAL_1997_S3396100/d06-x01-y01 Title=$\Sigma^+(1385)$ scaled momentum XLabel=$\ln(1/x_p)$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\ln(1/x_p)$ # END PLOT # BEGIN PLOT /OPAL_1997_S3396100/d07-x01-y01 Title=$\Sigma^-(1385)$ scaled momentum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_p$ # END PLOT # BEGIN PLOT /OPAL_1997_S3396100/d08-x01-y01 Title=$\Sigma^-(1385)$ scaled momentum XLabel=$\ln(1/x_p)$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\ln(1/x_p)$ # END PLOT # BEGIN PLOT /OPAL_1997_S3396100/d09-x01-y01 Title=$\Xi^0(1530)$ scaled momentum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_p$ # END PLOT # BEGIN PLOT /OPAL_1997_S3396100/d10-x01-y01 Title=$\Xi^0(1530)$ scaled momentum XLabel=$\ln(1/x_p)$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\ln(1/x_p)$ # END PLOT # BEGIN PLOT /OPAL_1997_S3396100/d11-x01-y01 Title=$\Lambda^0(1520)$ scaled momentum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_p$ # END PLOT # BEGIN PLOT /OPAL_1997_S3396100/d12-x01-y01 Title=$\Lambda^0(1520)$ scaled momentum XLabel=$\ln(1/x_p)$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\ln(1/x_p)$ # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_CONF_2012_153.plot0000644000175000017500000000115712116077756017704 0ustar sunsun# BEGIN PLOT /ATLAS_2012_CONF_2012_153/count_SR1 Title=Number of events in the SR1 signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_153/count_SR2 Title=Number of events in the SR2 signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_153/hist_etmiss Title=Missing Transverse Energy XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_153/hist_m_eff Title=Effective Mass XLabel=$M_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/20$\,GeV LogY=1 # END PLOT rivet-1.8.3/data/plotinfo/OPAL_1994_S2927284.plot0000644000175000017500000000074612116077756017023 0ustar sunsun# BEGIN PLOT /OPAL_1994_S2927284/d01-x01-y01 Title=$\pi^\pm$ momentum XLabel=$p$ [GeV] YLabel=$1/\sigma \, \text{d}\sigma/\text{d}p$ [$\text{GeV}^-1$] # END PLOT # BEGIN PLOT /OPAL_1994_S2927284/d02-x01-y01 Title=$K^\pm$ momentum XLabel=$p$ [GeV] YLabel=$1/\sigma \, \text{d}\sigma/\text{d}p$ [$\text{GeV}^-1$] # END PLOT # BEGIN PLOT /OPAL_1994_S2927284/d03-x01-y01 Title=$p,\bar{p}$ momentum XLabel=$p$ [GeV] YLabel=$1/\sigma \, \text{d}\sigma/\text{d}p$ [$\text{GeV}^-1$] # END PLOT rivet-1.8.3/data/plotinfo/UA5_1989_S1926373.plot0000644000175000017500000000451512116077756016661 0ustar sunsun# BEGIN PLOT /UA5_1989_S1926373/d01-x01-y01 Title=Charged multiplicity at $\sqrt{s} = 200~\text{GeV}$, $|\eta| < 5.0$ XLabel=$n_\text{ch}$ YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ # END PLOT # BEGIN PLOT /UA5_1989_S1926373/d02-x01-y01 Title=Charged multiplicity at $\sqrt{s} = 900~\text{GeV}$, $|\eta| < 5.0$ XLabel=$n_\text{ch}$ YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ # END PLOT # BEGIN PLOT /UA5_1989_S1926373/d03-x01-y01 Title=Charged multiplicity at $\sqrt{s} = 200~\text{GeV}$, $|\eta| < 0.5$ XLabel=$n_\text{ch}$ YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ # END PLOT # BEGIN PLOT /UA5_1989_S1926373/d04-x01-y01 Title=Charged multiplicity at $\sqrt{s} = 200~\text{GeV}$, $|\eta| < 1.5$ XLabel=$n_\text{ch}$ YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ # END PLOT # BEGIN PLOT /UA5_1989_S1926373/d05-x01-y01 Title=Charged multiplicity at $\sqrt{s} = 200~\text{GeV}$, $|\eta| < 3.0$ XLabel=$n_\text{ch}$ YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ # END PLOT # BEGIN PLOT /UA5_1989_S1926373/d06-x01-y01 Title=Charged multiplicity at $\sqrt{s} = 200~\text{GeV}$, $|\eta| < 5.0$ XLabel=$n_\text{ch}$ YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ # END PLOT # BEGIN PLOT /UA5_1989_S1926373/d07-x01-y01 Title=Charged multiplicity at $\sqrt{s} = 900~\text{GeV}$, $|\eta| < 0.5$ XLabel=$n_\text{ch}$ YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ # END PLOT # BEGIN PLOT /UA5_1989_S1926373/d08-x01-y01 Title=Charged multiplicity at $\sqrt{s} = 900~\text{GeV}$, $|\eta| < 1.5$ XLabel=$n_\text{ch}$ YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ # END PLOT # BEGIN PLOT /UA5_1989_S1926373/d09-x01-y01 Title=Charged multiplicity at $\sqrt{s} = 900~\text{GeV}$, $|\eta| < 3.0$ XLabel=$n_\text{ch}$ YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ # END PLOT # BEGIN PLOT /UA5_1989_S1926373/d10-x01-y01 Title=Charged multiplicity at $\sqrt{s} = 900~\text{GeV}$, $|\eta| < 5.0$ XLabel=$n_\text{ch}$ YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ # END PLOT # BEGIN PLOT /UA5_1989_S1926373/d11-x01-y01 Title=Mean charged multiplicity at $\sqrt{s} = 200~\text{GeV}$, $|\eta| < 5.0$ XLabel=$\text{GeV}$ YLabel=$n_\text{ch}$ # END PLOT # BEGIN PLOT /UA5_1989_S1926373/d11-x01-y02 Title=Mean charged multiplicity at $\sqrt{s} = 900~\text{GeV}$, $|\eta| < 5.0$ XLabel=$\text{GeV}$ YLabel=$n_\text{ch}$ # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_I1112263.plot0000644000175000017500000000523112116077756017050 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1112263/count_SR1 Title=Number of events in the SR1 signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1112263/count_SR2 Title=Number of events in the SR2 signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1112263/hist_lepton_pT_1_SR1 Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the leading lepton in SR1 XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1112263/hist_lepton_pT_2_SR1 Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the $2^{\rm nd}$ leading lepton in SR1 XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1112263/hist_lepton_pT_3_SR1 Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the $3^{\rm rd}$ leading lepton in SR1 XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1112263/hist_lepton_pT_1_SR2 Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the leading lepton in SR2 XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1112263/hist_lepton_pT_2_SR2 Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the $2^{\rm nd}$ leading lepton in SR2 XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1112263/hist_lepton_pT_3_SR2 Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the $3^{\rm rd}$ leading lepton in SR2 XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1112263/hist_etmiss_SR1_A Title=Missing Transverse Energy in SR1 XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20$\,GeV LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1112263/hist_etmiss_SR1_B Title=Missing Transverse Energy in SR1 XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1112263/hist_etmiss_SR2_A Title=Missing Transverse Energy in SR2 XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20$\,GeV LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1112263/hist_etmiss_SR2_B Title=Missing Transverse Energy in SR2 XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1112263/hist_mSFOF Title=Mass of SFOF lepton pair closest to the $Z^0$ mass in SR1 XLabel=$M_{\mathrm{SFOS}}$ [GeV] YLabel=$\mathrm{Events}/20$\,GeV LogY=1 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_I919017.plot0000644000175000017500000010706112116077756017006 0ustar sunsun# BEGIN PLOT /ATLAS_2011_I919017/d01-x01-.* XLabel=Charged jet $p_\perp$ [GeV] YLabel=$\mathrm{d}^2\sigma/\mathrm{d}p_\perp\mathrm{d}y$ [$\mu$b/GeV] FullRange=1 RatioPlotYMax=2.0 RatioPlotYMin=0.5 # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x01-y01 Title=Charged jet cross section vs. $p_\perp$ (anti-$k_t$, R = 0.4, $y$ 0.0-0.5) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x01-y02 Title=Charged jet cross section vs. $p_\perp$ (anti-$k_t$, R = 0.4, $y$ 0.5-1.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x01-y03 Title=Charged jet cross section vs. $p_\perp$ (anti-$k_t$, R = 0.4, $y$ 1.0-1.5) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x01-y04 Title=Charged jet cross section vs. $p_\perp$ (anti-$k_t$, R = 0.4, $y$ 1.5-1.9) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-.* XLabel=$N$ YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}N$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y01 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y02 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y03 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y04 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y05 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y06 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y07 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y08 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y09 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y10 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y11 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y12 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y13 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y14 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y15 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y16 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y17 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y18 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y19 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y20 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y21 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y22 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y23 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y24 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x02-y25 Title=Charged jet multiplicity (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-.* XLabel=Charged particle $z$ YLabel=$1/N_\text{jet} \, \mathrm{d}N/\mathrm{d}z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y01 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y02 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y03 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y04 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y05 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y06 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y07 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y08 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y09 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y10 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y11 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y12 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y13 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y14 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y15 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y16 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y17 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y18 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y19 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y20 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y21 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y22 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y23 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y24 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x03-y25 Title=Charged jet $z$ (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-.* XLabel=Charged particle $p_\perp^\text{rel}$ [GeV] YLabel=$1/N_\text{jet} \, \mathrm{d}N/\mathrm{d}p_\perp^\text{rel}$ [GeV$^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y01 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y02 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y03 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y04 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y05 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y06 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y07 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y08 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y09 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y10 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y11 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y12 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y13 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y14 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y15 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y16 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y17 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y18 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y19 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y20 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y21 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y22 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y23 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y24 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x04-y25 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y01 XLabel=Charged particle $r$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y01 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y02 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 6.0-10.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y03 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 10.0-15.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y04 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 15.0-24.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y05 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 0.0-1.9, $p_\perp$ 24.0-40.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y06 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 4.0-6.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y07 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 6.0-10.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y08 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 10.0-15.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y09 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 15.0-24.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y10 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 0.0-0.5, $p_\perp$ 24.0-40.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y11 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 4.0-6.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y12 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 6.0-10.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y13 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 10.0-15.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y14 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 15.0-24.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y15 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 0.5-1.0, $p_\perp$ 24.0-40.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y16 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 4.0-6.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y17 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 6.0-10.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y18 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 10.0-15.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y19 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 15.0-24.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y20 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 1.0-1.5, $p_\perp$ 24.0-40.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y21 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 4.0-6.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y22 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 6.0-10.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y23 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 10.0-15.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y24 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 15.0-24.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d01-x05-y25 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.4, $y$ 1.5-1.9, $p_\perp$ 24.0-40.0) XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x01-y01 -x01-y01 Title=Charged jet cross section vs. $p_\perp$ (anti-$k_t$, R = 0.6, $y$ 0.0-0.5) YLabel=d$\sigma$/d$p_\perp$d$y$ [$\mu$b/GeV] XLabel=Charged Jet $p_\perp$ [GeV] FullRange=1 RatioPlotYMax=2.0 RatioPlotYMin=0.5 # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x01-y02 -x01-y02 Title=Charged jet cross section vs. $p_\perp$ (anti-$k_t$, R = 0.6, $y$ 0.5-1.0) YLabel=d$\sigma$/d$p_\perp$d$y$ [$\mu$b/GeV] XLabel=Charged Jet $p_\perp$ [GeV] FullRange=1 RatioPlotYMax=2.0 RatioPlotYMin=0.5 # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x01-y03 -x01-y03 Title=Charged jet cross section vs. $p_\perp$ (anti-$k_t$, R = 0.6, $y$ 1.0-1.5) YLabel=d$\sigma$/d$p_\perp$d$y$ [$\mu$b/GeV] XLabel=Charged Jet $p_\perp$ [GeV] FullRange=1 RatioPlotYMax=2.0 RatioPlotYMin=0.5 # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x01-y04 -x01-y04 Title=Charged jet cross section vs. $p_\perp$ (anti-$k_t$, R = 0.6, $y$ 1.5-1.9) YLabel=d$\sigma$/d$p_\perp$d$y$ [$\mu$b/GeV] XLabel=Charged Jet $p_\perp$ [GeV] FullRange=1 RatioPlotYMax=2.0 RatioPlotYMin=0.5 # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y01 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 4.0-6.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y02 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 6.0-10.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y03 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 10.0-15.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y04 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 15.0-24.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y05 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 24.0-40.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y06 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 4.0-6.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y07 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 6.0-10.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y08 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 10.0-15.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y09 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 15.0-24.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y10 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 24.0-40.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y11 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 4.0-6.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y12 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 6.0-10.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y13 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 10.0-15.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y14 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 15.0-24.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y15 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 24.0-40.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y16 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 4.0-6.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y17 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 6.0-10.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y18 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 10.0-15.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y19 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 15.0-24.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y20 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 24.0-40.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y21 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 4.0-6.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y22 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 6.0-10.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y23 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 10.0-15.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y24 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 15.0-24.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x02-y25 Title=Charged jet multiplicity (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 24.0-40.0) XLabel=N # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y01 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 4.0-6.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y02 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 6.0-10.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y03 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 10.0-15.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y04 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 15.0-24.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y05 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 24.0-40.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y06 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 4.0-6.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y07 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 6.0-10.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y08 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 10.0-15.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y09 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 15.0-24.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y10 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 24.0-40.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y11 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 4.0-6.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y12 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 6.0-10.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y13 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 10.0-15.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y14 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 15.0-24.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y15 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 24.0-40.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y16 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 4.0-6.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y17 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 6.0-10.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y18 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 10.0-15.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y19 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 15.0-24.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y20 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 24.0-40.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y21 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 4.0-6.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y22 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 6.0-10.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y23 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 10.0-15.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y24 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 15.0-24.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x03-y25 Title=Charged jet $z$ (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 24.0-40.0) XLabel=Charged Particle $z$ YLabel=(1/Njet)dN/d$z$ # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y01 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 4.0-6.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y02 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 6.0-10.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y03 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 10.0-15.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y04 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 15.0-24.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y05 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 24.0-40.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y06 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 4.0-6.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y07 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 6.0-10.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y08 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 10.0-15.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y09 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 15.0-24.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y10 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 24.0-40.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y11 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 4.0-6.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y12 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 6.0-10.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y13 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 10.0-15.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y14 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 15.0-24.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y15 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 24.0-40.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y16 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 4.0-6.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y17 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 6.0-10.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y18 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 10.0-15.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y19 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 15.0-24.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y20 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 24.0-40.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y21 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 4.0-6.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y22 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 6.0-10.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y23 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 10.0-15.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y24 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 15.0-24.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x04-y25 Title=Charged jet $p_\perp^\text{rel}$ (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 24.0-40.0) XLabel=Charged Particle $p_\perp^\text{rel}$ [GeV] YLabel=(1/Njet)dN/d$p_\perp^\text{rel}$ [$\mathrm{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-.* XLabel=Charged Particle r # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y01 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y02 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y03 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y04 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y05 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 0.0-1.9, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y06 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y07 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y08 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y09 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y10 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 0.0-0.5, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y11 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y12 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y13 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y14 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y15 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 0.5-1.0, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y16 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y17 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y18 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y19 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y20 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 1.0-1.5, $p_\perp$ 24.0-40.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y21 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 4.0-6.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y22 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 6.0-10.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y23 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 10.0-15.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y24 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 15.0-24.0) # END PLOT # BEGIN PLOT /ATLAS_2011_I919017/d02-x05-y25 Title=Charged jet $\rho_\text{ch}(r)$ (anti-$k_t$, R = 0.6, $y$ 1.5-1.9, $p_\perp$ 24.0-40.0) # END PLOT rivet-1.8.3/data/plotinfo/CMS_2011_S9215166.plot0000644000175000017500000000116412116077756016656 0ustar sunsun# BEGIN PLOT /CMS_2011_S9215166/ XLabel=$\eta$ YLabel=$\mathrm{d}E/\mathrm{d}\eta$ [GeV] FullRange=1 LogY=1 LegendXPos=0.05 # END PLOT # BEGIN PLOT /CMS_2011_S9215166/d01-x01-y01 Title=Energy flow in MB events, $\sqrt{s}=0.9$ TeV # END PLOT # BEGIN PLOT /CMS_2011_S9215166/d02-x01-y01 Title=Energy flow in dijet events, $\sqrt{s}=0.9$ TeV, $p_\perp^\text{jets} > 8$ GeV # END PLOT # BEGIN PLOT /CMS_2011_S9215166/d03-x01-y01 Title=Energy flow in MB events, $\sqrt{s}=7$ TeV # END PLOT # BEGIN PLOT /CMS_2011_S9215166/d04-x01-y01 Title=Energy flow in dijet events, $\sqrt{s}=7$ TeV, $p_\perp^\text{jets} > 20$ GeV # END PLOT rivet-1.8.3/data/plotinfo/CDF_1988_S1865951.plot0000644000175000017500000000055012116077756016661 0ustar sunsun# BEGIN PLOT /CDF_1988_S1865951/d01-x01-y01 Title=$p_\perp$ distribution at $\sqrt{s} = 1800$ GeV XLabel=$p_\perp$ YLabel=$E \, \mathrm{d}^3\sigma/\mathrm{d}p^3$ LogX=1 # END PLOT # BEGIN PLOT /CDF_1988_S1865951/d02-x01-y01 Title=$p_\perp$ distribution at $\sqrt{s} = 630$ GeV XLabel=$p_\perp$ YLabel=$E \, \mathrm{d}^3\sigma/\mathrm{d}p^3$ LogX=1 # END PLOT rivet-1.8.3/data/plotinfo/MC_HINC.plot0000644000175000017500000000226112116077756015630 0ustar sunsun# BEGIN PLOT /MC_HINC/H_mass Title=Higgs boson mass XLabel=$m_{\text{h}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}m_{\text{h}}$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_HINC/H_pT$ Title=Higgs boson $p_\perp$ XLabel=$p_\perp^{\text{h}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\text{h}}$ [pb/GeV] LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_HINC/H_pT_peak Title=Higgs boson $p_\perp$ in peak region XLabel=$p_\perp^{\text{h}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\text{h}}$ [pb/GeV] LogY=0 LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_HINC/H_y Title=Higgs boson rapidity XLabel=$y_{\text{h}}$ YLabel=$\text{d}\sigma/\text{d}y_{\text{h}}$ [pb] LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_HINC/H_phi Title=Higgs boson azimuthal angle XLabel=$\phi_{\text{h}}$ YLabel=$\text{d}\sigma/\text{d}\phi_{\text{h}}$ [pb] # END PLOT # BEGIN PLOT /MC_HINC/lepton_pT Title=Lepton $p_\perp$ XLabel=$p_\perp^{\text{l}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\text{l}}$ [pb/GeV] LogX=1 # END PLOT # BEGIN PLOT /MC_HINC/lepton_eta Title=Lepton $\eta$ XLabel=$\eta_{\text{l}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}\eta_{\text{l}}$ [pb] # END PLOT rivet-1.8.3/data/plotinfo/OPAL_1998_S3702294.plot0000644000175000017500000000070512116077756017013 0ustar sunsun# BEGIN PLOT /OPAL_1998_S3702294/d02-x01-y01 Title=$f_0(980)$ scaled momentum XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_E$ # END PLOT # BEGIN PLOT /OPAL_1998_S3702294/d02-x01-y02 Title=$f_2(1270)$ scaled momentum XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_E$ # END PLOT # BEGIN PLOT /OPAL_1998_S3702294/d02-x01-y03 Title=$\phi(1020)$ scaled momentum XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_E$ # END PLOT rivet-1.8.3/data/plotinfo/CDF_2008_S8093652.plot0000644000175000017500000000030212116077756016632 0ustar sunsun# BEGIN PLOT /CDF_2008_S8093652/d01-x01-y01 Title=Dijet mass spectrum XLabel=$m_{\mathrm{jj}}$ [GeV/$c^2$] YLabel=$\mathrm{d}\sigma/\mathrm{d}m_{\mathrm{jj}}$ [pb/(GeV/$c^2$)] LogX=1 # END PLOT rivet-1.8.3/data/plotinfo/CDF_2008_NOTE_9351.plot0000644000175000017500000001074112116077756017105 0ustar sunsun# BEGIN PLOT /CDF_2008_NOTE_9351/d01-x01-y01 Title=Toward region charged particle density XLabel=$p_T(Z)$ / GeV YLabel=$\langle N_\text{ch} \rangle / \text{d}\eta\,\text{d}\phi$ LogY=0 LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d02-x01-y01 Title=Transverse region charged particle density XLabel=$p_T(Z)$ / GeV YLabel=$\langle N_\text{ch} \rangle / \text{d}\eta\,\text{d}\phi$ LogY=0 LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d03-x01-y01 Title=TransMAX region charged particle density XLabel=$p_T(Z)$ / GeV YLabel=$\langle N_\text{ch} \rangle / \text{d}\eta\,\text{d}\phi$ LogY=0 LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d04-x01-y01 Title=TransMIN region charged particle density XLabel=$p_T(Z)$ / GeV YLabel=$\langle N_\text{ch} \rangle / \text{d}\eta\,\text{d}\phi$ LogY=0 LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d05-x01-y01 Title=TransDIF region charged particle density XLabel=$p_T(Z)$ / GeV YLabel=$\langle N_\text{ch} \rangle / \text{d}\eta\,\text{d}\phi$ LogY=0 LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d06-x01-y01 Title=Away region charged particle density XLabel=$p_T(Z)$ / GeV YLabel=$\langle N_\text{ch} \rangle / \text{d}\eta\,\text{d}\phi$ LogY=0 LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d07-x01-y01 Title=Toward region charged $p_\perp^\text{sum}$ density XLabel=$p_T(Z)$ / GeV YLabel=$\langle \sum p_T^\text{track} \rangle / \text{d}\eta\,\text{d}\phi$ / GeV LogY=0 LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d08-x01-y01 Title=Transverse region charged $p_\perp^\text{sum}$ density XLabel=$p_T(Z)$ / GeV YLabel=$\langle \sum p_T^\text{track} \rangle / \text{d}\eta\,\text{d}\phi$ / GeV LogY=0 LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d09-x01-y01 Title=TransMAX region charged $p_\perp^\text{sum}$ density XLabel=$p_T(Z)$ / GeV YLabel=$\langle \sum p_T^\text{track} \rangle / \text{d}\eta\,\text{d}\phi$ / GeV LogY=0 LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d10-x01-y01 Title=TransMIN region charged $p_\perp^\text{sum}$ density XLabel=$p_T(Z)$ / GeV YLabel=$\langle \sum p_T^\text{track} \rangle / \text{d}\eta\,\text{d}\phi$ / GeV LogY=0 LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d11-x01-y01 Title=TransDIF region charged $p_\perp^\text{sum}$ density XLabel=$p_T(Z)$ / GeV YLabel=$\langle \sum p_T^\text{track} \rangle / \text{d}\eta\,\text{d}\phi$ / GeV LogY=0 LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d12-x01-y01 Title=Away region charged $p_\perp^\text{sum}$ density XLabel=$p_T(Z)$ / GeV YLabel=$\langle \sum p_T^\text{track} \rangle / \text{d}\eta\,\text{d}\phi$ / GeV LogY=0 LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d13-x01-y01 Title=Toward region charged $p_\perp$ average XLabel=$p_T(Z)$ / GeV YLabel=$\langle p_T^\text{track} \rangle$ / GeV LogY=0 LegendYPos=0.5 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d14-x01-y01 Title=Transverse region charged $p_\perp$ average XLabel=$p_T(Z)$ / GeV YLabel=$\langle p_T^\text{track} \rangle$ / GeV LogY=0 LegendYPos=0.5 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d15-x01-y01 Title=Away region charged $p_\perp$ average XLabel=$p_T(Z)$ / GeV YLabel=$\langle p_T^\text{track} \rangle$ / GeV LogY=0 LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d16-x01-y01 Title=Toward region charged $p_\perp$ maximum XLabel=$p_T(Z)$ / GeV YLabel=max $p_T^\text{track}$ / GeV LogY=0 LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d17-x01-y01 Title=Transverse region charged $p_\perp$ maximum XLabel=$p_T(Z)$ / GeV YLabel=max $p_T^\text{track}$ / GeV LogY=0 LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d18-x01-y01 Title=Away region charged $p_\perp$ maximum XLabel=$p_T(Z)$ / GeV YLabel=max $p_T^\text{track}$ / GeV LogY=0 LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d19-x01-y01 Title=Average lepton-pair $p_\perp$ versus charged multiplicity XLabel=$N_\text{ch}$ YLabel=$\langle p_T(Z) \rangle$ / GeV LegendXPos=0.10 LogY=0 ShowZero=0 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d20-x01-y01 Title=Average charged $p_\perp$ vs charged multiplicity XLabel=$N_\text{ch}$ YLabel=$\langle p_T \rangle$ / GeV LegendXPos=0.10 LogY=0 ShowZero=0 # END PLOT # BEGIN PLOT /CDF_2008_NOTE_9351/d21-x01-y01 Title=Average charged $p_\perp$ vs charged multiplicity, $p_\perp(Z)$ less than 10 GeV XLabel=$N_\text{ch}$ YLabel=$\langle p_T \rangle$ / GeV LegendXPos=0.10 LogY=0 ShowZero=0 # END PLOT rivet-1.8.3/data/plotinfo/DELPHI_1995_S3137023.plot0000644000175000017500000000046712116077756017217 0ustar sunsun# BEGIN PLOT /DELPHI_1995_S3137023/d02-x01-y01 Title=$\Xi^-$ scaled momentum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_p$ # END PLOT # BEGIN PLOT /DELPHI_1995_S3137023/d03-x01-y01 Title=$\Sigma^\pm(1385)$ scaled momentum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_p$ # END PLOT rivet-1.8.3/data/plotinfo/MC_TTBAR.plot0000644000175000017500000000422312116077756015763 0ustar sunsun# BEGIN PLOT /MC_TTBAR/jet.?_[1234]_pT XLabel=$p_\perp$ [GeV] YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}p_\perp$ [GeV$^{-1}$] LogX=1 # END PLOT # BEGIN PLOT /MC_TTBAR/jet_1_pT Title=Transverse momentum distribution for jet 1 # END PLOT # BEGIN PLOT /MC_TTBAR/jet_2_pT Title=Transverse momentum distribution for jet 2 # END PLOT # BEGIN PLOT /MC_TTBAR/jet_3_pT Title=Transverse momentum distribution for jet 3 # END PLOT # BEGIN PLOT /MC_TTBAR/jet_4_pT Title=Transverse momentum distribution for jet 4 # END PLOT # BEGIN PLOT /MC_TTBAR/jet_HT Title=$H_T$ distribution for all jets XLabel=$H_T$ [GeV] YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}H_T$ [GeV$^{-1}$] LogX=1 # END PLOT # BEGIN PLOT /MC_TTBAR/jetb_1_pT Title=Transverse momentum distribution for $b$-jet 1 # END PLOT # BEGIN PLOT /MC_TTBAR/jetb_2_pT Title=Transverse momentum distribution for $b$-jet 2 # END PLOT # BEGIN PLOT /MC_TTBAR/jetl_1_pT Title=Transverse momentum distribution for light jet 1 # END PLOT # BEGIN PLOT /MC_TTBAR/jetl_2_pT Title=Transverse momentum distribution for light jet 2 # END PLOT # BEGIN PLOT /MC_TTBAR/W_mass Title=Mass distribution for $W$ bosons XLabel=$m_{jj}$ [GeV] YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}m_{jj}$ [GeV$^{-1}$] LogY=0 # END PLOT # BEGIN PLOT /MC_TTBAR/t_mass Title=Mass distribution for reconstructed top XLabel=$m_{q\bar{q}b}$ [GeV] YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}m_{q\bar{q}b}$ [GeV$^{-1}$] LogY=0 # END PLOT # BEGIN PLOT /MC_TTBAR/t_mass_W_cut Title=Mass distribution for reconstructed top after $m_W$ cut XLabel=$m_{q\bar{q}b}$ [GeV] YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}m_{q\bar{q}b}$ [GeV$^{-1}$] LogY=0 # END PLOT # BEGIN PLOT /MC_TTBAR/.*_mass XLabel=$m$ [GeV] YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}m$ [GeV$^{-1}$] # END PLOT # BEGIN PLOT /MC_TTBAR/.*_dR XLabel=$\Delta R$ YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}\Delta R$ LogY=0 # END PLOT # BEGIN PLOT /MC_TTBAR/.*_deta XLabel=$\Delta \eta$ YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}\Delta \eta$ LogY=0 # END PLOT # BEGIN PLOT /MC_TTBAR/.*_dphi XLabel=$\Delta \phi$ YLabel=$1/\sigma \, \mathrm{d}\sigma/\mathrm{d}\Delta \phi$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/TOTEM_2012_I1115294.plot0000644000175000017500000000027412116077756017105 0ustar sunsun# BEGIN PLOT /TOTEM_2012_I1115294/d01-x01-y01 Title=Charged particle $|\eta|$ at 7\,TeV, track $p_\perp>40$\,MeV, for $N_\text{ch}\ge1$ XLabel=$|\eta|$ YLabel=$dN/d\eta$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_S8924791.plot0000644000175000017500000004546612116077756017127 0ustar sunsun## BEGIN PLOT /ATLAS_2011_S8924791/d..-x..-y01 XLabel=$r$ YLabel=$\rho(r)$ ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d..-x..-y02 XLabel=$r$ YLabel=$\Psi(r)$ LogY=0 LegendYPos=0.6 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d01-x01-y01 Title=Jet shape $\rho$ for $p_\perp \in 30$--40\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d01-x01-y02 Title=Jet shape $\Psi$ for $p_\perp \in 30$--40\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d01-x02-y01 Title=Jet shape $\rho$ for $p_\perp \in 30$--40\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d01-x02-y02 Title=Jet shape $\Psi$ for $p_\perp \in 30$--40\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d01-x03-y01 Title=Jet shape $\rho$ for $p_\perp \in 30$--40\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d01-x03-y02 Title=Jet shape $\Psi$ for $p_\perp \in 30$--40\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d01-x04-y01 Title=Jet shape $\rho$ for $p_\perp \in 30$--40\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d01-x04-y02 Title=Jet shape $\Psi$ for $p_\perp \in 30$--40\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d01-x05-y01 Title=Jet shape $\rho$ for $p_\perp \in 30$--40\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d01-x05-y02 Title=Jet shape $\Psi$ for $p_\perp \in 30$--40\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d01-x06-y01 Title=Jet shape $\rho$ for $p_\perp \in 30$--40\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d01-x06-y02 Title=Jet shape $\Psi$ for $p_\perp \in 30$--40\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d02-x01-y01 Title=Jet shape $\rho$ for $p_\perp \in 40$--60\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d02-x01-y02 Title=Jet shape $\Psi$ for $p_\perp \in 40$--60\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d02-x02-y01 Title=Jet shape $\rho$ for $p_\perp \in 40$--60\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d02-x02-y02 Title=Jet shape $\Psi$ for $p_\perp \in 40$--60\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d02-x03-y01 Title=Jet shape $\rho$ for $p_\perp \in 40$--60\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d02-x03-y02 Title=Jet shape $\Psi$ for $p_\perp \in 40$--60\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d02-x04-y01 Title=Jet shape $\rho$ for $p_\perp \in 40$--60\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d02-x04-y02 Title=Jet shape $\Psi$ for $p_\perp \in 40$--60\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d02-x05-y01 Title=Jet shape $\rho$ for $p_\perp \in 40$--60\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d02-x05-y02 Title=Jet shape $\Psi$ for $p_\perp \in 40$--60\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d02-x06-y01 Title=Jet shape $\rho$ for $p_\perp \in 40$--60\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d02-x06-y02 Title=Jet shape $\Psi$ for $p_\perp \in 40$--60\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d03-x01-y01 Title=Jet shape $\rho$ for $p_\perp \in 60$--80\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d03-x01-y02 Title=Jet shape $\Psi$ for $p_\perp \in 60$--80\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d03-x02-y01 Title=Jet shape $\rho$ for $p_\perp \in 60$--80\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d03-x02-y02 Title=Jet shape $\Psi$ for $p_\perp \in 60$--80\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d03-x03-y01 Title=Jet shape $\rho$ for $p_\perp \in 60$--80\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d03-x03-y02 Title=Jet shape $\Psi$ for $p_\perp \in 60$--80\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d03-x04-y01 Title=Jet shape $\rho$ for $p_\perp \in 60$--80\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d03-x04-y02 Title=Jet shape $\Psi$ for $p_\perp \in 60$--80\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d03-x05-y01 Title=Jet shape $\rho$ for $p_\perp \in 60$--80\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d03-x05-y02 Title=Jet shape $\Psi$ for $p_\perp \in 60$--80\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d03-x06-y01 Title=Jet shape $\rho$ for $p_\perp \in 60$--80\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d03-x06-y02 Title=Jet shape $\Psi$ for $p_\perp \in 60$--80\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d04-x01-y01 Title=Jet shape $\rho$ for $p_\perp \in 80$--110\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d04-x01-y02 Title=Jet shape $\Psi$ for $p_\perp \in 80$--110\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d04-x02-y01 Title=Jet shape $\rho$ for $p_\perp \in 80$--110\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d04-x02-y02 Title=Jet shape $\Psi$ for $p_\perp \in 80$--110\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d04-x03-y01 Title=Jet shape $\rho$ for $p_\perp \in 80$--110\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d04-x03-y02 Title=Jet shape $\Psi$ for $p_\perp \in 80$--110\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d04-x04-y01 Title=Jet shape $\rho$ for $p_\perp \in 80$--110\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d04-x04-y02 Title=Jet shape $\Psi$ for $p_\perp \in 80$--110\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d04-x05-y01 Title=Jet shape $\rho$ for $p_\perp \in 80$--110\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d04-x05-y02 Title=Jet shape $\Psi$ for $p_\perp \in 80$--110\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d04-x06-y01 Title=Jet shape $\rho$ for $p_\perp \in 80$--110\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d04-x06-y02 Title=Jet shape $\Psi$ for $p_\perp \in 80$--110\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d05-x01-y01 Title=Jet shape $\rho$ for $p_\perp \in 110$--160\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d05-x01-y02 Title=Jet shape $\Psi$ for $p_\perp \in 110$--160\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d05-x02-y01 Title=Jet shape $\rho$ for $p_\perp \in 110$--160\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d05-x02-y02 Title=Jet shape $\Psi$ for $p_\perp \in 110$--160\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d05-x03-y01 Title=Jet shape $\rho$ for $p_\perp \in 110$--160\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d05-x03-y02 Title=Jet shape $\Psi$ for $p_\perp \in 110$--160\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d05-x04-y01 Title=Jet shape $\rho$ for $p_\perp \in 110$--160\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d05-x04-y02 Title=Jet shape $\Psi$ for $p_\perp \in 110$--160\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d05-x05-y01 Title=Jet shape $\rho$ for $p_\perp \in 110$--160\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d05-x05-y02 Title=Jet shape $\Psi$ for $p_\perp \in 110$--160\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d05-x06-y01 Title=Jet shape $\rho$ for $p_\perp \in 110$--160\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d05-x06-y02 Title=Jet shape $\Psi$ for $p_\perp \in 110$--160\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d06-x01-y01 Title=Jet shape $\rho$ for $p_\perp \in 160$--210\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d06-x01-y02 Title=Jet shape $\Psi$ for $p_\perp \in 160$--210\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d06-x02-y01 Title=Jet shape $\rho$ for $p_\perp \in 160$--210\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d06-x02-y02 Title=Jet shape $\Psi$ for $p_\perp \in 160$--210\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d06-x03-y01 Title=Jet shape $\rho$ for $p_\perp \in 160$--210\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d06-x03-y02 Title=Jet shape $\Psi$ for $p_\perp \in 160$--210\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d06-x04-y01 Title=Jet shape $\rho$ for $p_\perp \in 160$--210\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d06-x04-y02 Title=Jet shape $\Psi$ for $p_\perp \in 160$--210\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d06-x05-y01 Title=Jet shape $\rho$ for $p_\perp \in 160$--210\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d06-x05-y02 Title=Jet shape $\Psi$ for $p_\perp \in 160$--210\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d06-x06-y01 Title=Jet shape $\rho$ for $p_\perp \in 160$--210\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d06-x06-y02 Title=Jet shape $\Psi$ for $p_\perp \in 160$--210\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d07-x01-y01 Title=Jet shape $\rho$ for $p_\perp \in 210$--260\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d07-x01-y02 Title=Jet shape $\Psi$ for $p_\perp \in 210$--260\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d07-x02-y01 Title=Jet shape $\rho$ for $p_\perp \in 210$--260\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d07-x02-y02 Title=Jet shape $\Psi$ for $p_\perp \in 210$--260\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d07-x03-y01 Title=Jet shape $\rho$ for $p_\perp \in 210$--260\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d07-x03-y02 Title=Jet shape $\Psi$ for $p_\perp \in 210$--260\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d07-x04-y01 Title=Jet shape $\rho$ for $p_\perp \in 210$--260\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d07-x04-y02 Title=Jet shape $\Psi$ for $p_\perp \in 210$--260\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d07-x05-y01 Title=Jet shape $\rho$ for $p_\perp \in 210$--260\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d07-x05-y02 Title=Jet shape $\Psi$ for $p_\perp \in 210$--260\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d07-x06-y01 Title=Jet shape $\rho$ for $p_\perp \in 210$--260\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d07-x06-y02 Title=Jet shape $\Psi$ for $p_\perp \in 210$--260\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d08-x01-y01 Title=Jet shape $\rho$ for $p_\perp \in 260$--310\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d08-x01-y02 Title=Jet shape $\Psi$ for $p_\perp \in 260$--310\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d08-x02-y01 Title=Jet shape $\rho$ for $p_\perp \in 260$--310\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d08-x02-y02 Title=Jet shape $\Psi$ for $p_\perp \in 260$--310\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d08-x03-y01 Title=Jet shape $\rho$ for $p_\perp \in 260$--310\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d08-x03-y02 Title=Jet shape $\Psi$ for $p_\perp \in 260$--310\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d08-x04-y01 Title=Jet shape $\rho$ for $p_\perp \in 260$--310\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d08-x04-y02 Title=Jet shape $\Psi$ for $p_\perp \in 260$--310\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d08-x05-y01 Title=Jet shape $\rho$ for $p_\perp \in 260$--310\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d08-x05-y02 Title=Jet shape $\Psi$ for $p_\perp \in 260$--310\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d08-x06-y01 Title=Jet shape $\rho$ for $p_\perp \in 260$--310\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d08-x06-y02 Title=Jet shape $\Psi$ for $p_\perp \in 260$--310\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d09-x01-y01 Title=Jet shape $\rho$ for $p_\perp \in 310$--400\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d09-x01-y02 Title=Jet shape $\Psi$ for $p_\perp \in 310$--400\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d09-x02-y01 Title=Jet shape $\rho$ for $p_\perp \in 310$--400\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d09-x02-y02 Title=Jet shape $\Psi$ for $p_\perp \in 310$--400\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d09-x03-y01 Title=Jet shape $\rho$ for $p_\perp \in 310$--400\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d09-x03-y02 Title=Jet shape $\Psi$ for $p_\perp \in 310$--400\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d09-x04-y01 Title=Jet shape $\rho$ for $p_\perp \in 310$--400\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d09-x04-y02 Title=Jet shape $\Psi$ for $p_\perp \in 310$--400\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d09-x05-y01 Title=Jet shape $\rho$ for $p_\perp \in 310$--400\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d09-x05-y02 Title=Jet shape $\Psi$ for $p_\perp \in 310$--400\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d09-x06-y01 Title=Jet shape $\rho$ for $p_\perp \in 310$--400\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d09-x06-y02 Title=Jet shape $\Psi$ for $p_\perp \in 310$--400\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d10-x01-y01 Title=Jet shape $\rho$ for $p_\perp \in 400$--500\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d10-x01-y02 Title=Jet shape $\Psi$ for $p_\perp \in 400$--500\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d10-x02-y01 Title=Jet shape $\rho$ for $p_\perp \in 400$--500\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d10-x02-y02 Title=Jet shape $\Psi$ for $p_\perp \in 400$--500\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d10-x03-y01 Title=Jet shape $\rho$ for $p_\perp \in 400$--500\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d10-x03-y02 Title=Jet shape $\Psi$ for $p_\perp \in 400$--500\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d10-x04-y01 Title=Jet shape $\rho$ for $p_\perp \in 400$--500\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d10-x04-y02 Title=Jet shape $\Psi$ for $p_\perp \in 400$--500\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d10-x05-y01 Title=Jet shape $\rho$ for $p_\perp \in 400$--500\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d10-x05-y02 Title=Jet shape $\Psi$ for $p_\perp \in 400$--500\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d10-x06-y01 Title=Jet shape $\rho$ for $p_\perp \in 400$--500\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d10-x06-y02 Title=Jet shape $\Psi$ for $p_\perp \in 400$--500\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d11-x01-y01 Title=Jet shape $\rho$ for $p_\perp \in 500$--600\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d11-x01-y02 Title=Jet shape $\Psi$ for $p_\perp \in 500$--600\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d11-x02-y01 Title=Jet shape $\rho$ for $p_\perp \in 500$--600\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d11-x02-y02 Title=Jet shape $\Psi$ for $p_\perp \in 500$--600\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d11-x03-y01 Title=Jet shape $\rho$ for $p_\perp \in 500$--600\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d11-x03-y02 Title=Jet shape $\Psi$ for $p_\perp \in 500$--600\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d11-x04-y01 Title=Jet shape $\rho$ for $p_\perp \in 500$--600\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d11-x04-y02 Title=Jet shape $\Psi$ for $p_\perp \in 500$--600\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d11-x05-y01 Title=Jet shape $\rho$ for $p_\perp \in 500$--600\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d11-x05-y02 Title=Jet shape $\Psi$ for $p_\perp \in 500$--600\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d11-x06-y01 Title=Jet shape $\rho$ for $p_\perp \in 500$--600\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d11-x06-y02 Title=Jet shape $\Psi$ for $p_\perp \in 500$--600\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d12-x01-y01 Title=Jet shape $\rho$ for $p_\perp \in 30$--600\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d12-x01-y02 Title=Jet shape $\Psi$ for $p_\perp \in 30$--600\,GeV, $y \in 0.0$--0.3 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d12-x02-y01 Title=Jet shape $\rho$ for $p_\perp \in 30$--600\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d12-x02-y02 Title=Jet shape $\Psi$ for $p_\perp \in 30$--600\,GeV, $y \in 0.3$--0.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d12-x03-y01 Title=Jet shape $\rho$ for $p_\perp \in 30$--600\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d12-x03-y02 Title=Jet shape $\Psi$ for $p_\perp \in 30$--600\,GeV, $y \in 0.8$--1.2 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d12-x04-y01 Title=Jet shape $\rho$ for $p_\perp \in 30$--600\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d12-x04-y02 Title=Jet shape $\Psi$ for $p_\perp \in 30$--600\,GeV, $y \in 1.2$--2.1 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d12-x05-y01 Title=Jet shape $\rho$ for $p_\perp \in 30$--600\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d12-x05-y02 Title=Jet shape $\Psi$ for $p_\perp \in 30$--600\,GeV, $y \in 2.1$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d12-x06-y01 Title=Jet shape $\rho$ for $p_\perp \in 30$--600\,GeV, $y \in 0.0$--2.8 ## END PLOT ## BEGIN PLOT /ATLAS_2011_S8924791/d12-x06-y02 Title=Jet shape $\Psi$ for $p_\perp \in 30$--600\,GeV, $y \in 0.0$--2.8 ## END PLOT rivet-1.8.3/data/plotinfo/CDF_1994_S2952106.plot0000644000175000017500000000132512116077756016645 0ustar sunsun# BEGIN PLOT /CDF_1994_S2952106/d01-x01-y01 Title=$E_\perp$ of leading jet XLabel=$E_\perp^1$ [GeV] YLabel=Fraction of events # END PLOT # BEGIN PLOT /CDF_1994_S2952106/d02-x01-y01 Title=$E_\perp$ of 2nd leading jet XLabel=$E_\perp^2$ [GeV] YLabel=Fraction of events # END PLOT # BEGIN PLOT /CDF_1994_S2952106/d03-x01-y01 Title=Pseudorapidity, $\eta$, of 3rd jet XLabel=$\eta_3$ YLabel=Fraction of events LogY=0 LegendXPos=0.33 LegendYPos=0.33 # END PLOT # BEGIN PLOT /CDF_1994_S2952106/d04-x01-y01 Title=$R$ distance between 2nd and 3rd jet XLabel=$R_{23}$ YLabel=Fraction of events LogY=0 # END PLOT # BEGIN PLOT /CDF_1994_S2952106/d05-x01-y01 Title=$\alpha$ XLabel=$\alpha$ YLabel=Fraction of events LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/UA5_1988_S1867512.plot0000644000175000017500000000222012116077756016646 0ustar sunsun# BEGIN PLOT /UA5_1988_S1867512/d02-x01-y01 Title=Forward-backward correlation $b$ vs. gap size $\sqrt{s}=200$ \unit{GeV} XLabel=Central gap size $\delta\eta$ YLabel=$b$ LogY=0 # END PLOT # BEGIN PLOT /UA5_1988_S1867512/d02-x01-y02 Title=Forward-backward correlation $b$ vs. gap size $\sqrt{s}=546$ \unit{GeV} XLabel=Central gap size $\delta\eta$ YLabel=$b$ LogY=0 # END PLOT # BEGIN PLOT /UA5_1988_S1867512/d02-x01-y03 Title=Forward-backward correlation $b$ vs. gap size $\sqrt{s}=900$ \unit{GeV} XLabel=Central gap size $\delta\eta$ YLabel=$b$ LogY=0 # END PLOT # BEGIN PLOT /UA5_1988_S1867512/d03-x01-y01 Title=Forward-backward correlation $b$ vs. gap center $\sqrt{s}=200$ \unit{GeV} XLabel=Center of separating gap $\delta\eta$ YLabel=$b$ LogY=0 # END PLOT # BEGIN PLOT /UA5_1988_S1867512/d03-x01-y02 Title=Forward-backward correlation $b$ vs. gap center $\sqrt{s}=546$ \unit{GeV} XLabel=Center of separating gap $\delta\eta$ YLabel=$b$ LogY=0 # END PLOT # BEGIN PLOT /UA5_1988_S1867512/d03-x01-y03 Title=Forward-backward correlation $b$ vs. gap center $\sqrt{s}=900$ \unit{GeV} XLabel=Center of separating gap $\delta\eta$ YLabel=$b$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/D0_2006_S6438750.plot0000644000175000017500000000033412116077756016504 0ustar sunsun# BEGIN PLOT /D0_2006_S6438750/d01-x01-y01 Title=$p_\perp$ spectrum for leading photon XLabel=$p_\perp^\gamma$ [GeV] YLabel=$\mathrm{d}{\sigma}/\mathrm{d}p_\perp^\gamma/\mathrm{d}\eta^\gamma$ [pb/GeV] LogX=1 # END PLOT rivet-1.8.3/data/plotinfo/TOTEM_2012_002.plot0000644000175000017500000000107712116077756016451 0ustar sunsun# BEGIN PLOT /TOTEM_2012_002/d01-x01-y01 Title=Differential elastic cross-section vs. $|t|$ (low $t$) XLabel=$|t|$ [$\text{GeV}^2$] YLabel=$\mathrm{d}\sigma_\text{el} / \mathrm{d}t$ [mb/$\text{GeV}^2$] # END PLOT # BEGIN PLOT /TOTEM_2012_002/d02-x01-y01 Title=Differential elastic cross-section vs. $|t|$ (high $t$) XLabel=$|t|$ [$\text{GeV}^2$] YLabel=$\mathrm{d}\sigma_\text{el} / \mathrm{d}t$ [mb/$\text{GeV}^2$] # END PLOT # BEGIN PLOT /TOTEM_2012_002/d03-x01-y01 Title=Total elastic cross-section XLabel=$\sqrt{s}$ [GeV] YLabel=$\sigma_\text{elastic}$ [mb] # END PLOT rivet-1.8.3/data/plotinfo/CMS_2012_I1102908.plot0000644000175000017500000000110312116077756016625 0ustar sunsun# BEGIN PLOT /CMS_2012_I1102908/d01-x01-y01 Title=Inclusive to exclusive dijet production ratio XLabel=$\Delta y$ YLabel=$\frac{\mathrm{d} \sigma^\text{inc}} {\mathrm{d} y} / \frac{\mathrm{d} \sigma^\text{exc}}{\mathrm{d} y}$ LegendXPos=0.7 LegendYPos=0.2 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /CMS_2012_I1102908/d02-x01-y01 Title=Mueller-Navelet to exclusive dijet production ratio XLabel=$\Delta y$ YLabel=$\frac{\mathrm{d} \sigma^\text{MN}}{\mathrm{d} y} / \frac{\mathrm{d} \sigma^\text{exc}}{\mathrm{d} y}$ LegendXPos=0.7 LegendYPos=0.2 FullRange=1 LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_S9131140.plot0000644000175000017500000000135012116077756017062 0ustar sunsun# BEGIN PLOT /ATLAS_2011_S9131140/d.* YLabel=$1/\sigma\mathrm{d}\sigma/\mathrm{d}p_\perp$ [$\text{GeV}^{-1}$] LogX=1 XMin=1.0 YMin=0.000001 LegendXPos=0.05 LegendYPos=0.5 # END PLOT # BEGIN PLOT /ATLAS_2011_S9131140/d01-x01-y02 Title=$Z$ $p_\perp$ reconstructed from dressed electrons XLabel=$p_\perp(ee)$ [GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_S9131140/d01-x01-y03 Title=$Z$ $p_\perp$ reconstructed from bare electrons XLabel=$p_\perp(ee)$ [GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_S9131140/d02-x01-y02 Title=$Z$ $p_\perp$ reconstructed from dressed muons XLabel=$p_\perp(\mu\mu)$ [GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_S9131140/d02-x01-y03 Title=$Z$ $p_\perp$ reconstructed from bare muons XLabel=$p_\perp(\mu\mu)$ [GeV] # END PLOT rivet-1.8.3/data/plotinfo/STAR_2006_S6870392.plot0000644000175000017500000000062712116077756017021 0ustar sunsun# BEGIN PLOT /STAR_2006_S6870392/d01-x01-y01 Title=Inclusive jet cross-section, minbias trigger XLabel=jet $p_\perp$/GeV YLabel=$1/(2\pi) \, d^2\sigma/(d\eta dp_\perp)$ [pb/GeV] FullRange=1 # END PLOT # BEGIN PLOT /STAR_2006_S6870392/d02-x01-y01 Title=Inclusive jet cross-section, high tower trigger XLabel=jet $p_\perp$/GeV YLabel=$1/(2\pi) \, d^2\sigma/(d\eta dp_\perp)$ [pb/GeV] FullRange=1 # END PLOT rivet-1.8.3/data/plotinfo/PDG_HADRON_MULTIPLICITIES_RATIOS.plot0000644000175000017500000003556212116077756021510 0ustar sunsun# BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d XLabel= YLabel=Relative multiplicity ShowZero=0 LogY=0 # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d02-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\pi^0$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d02-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\pi^0$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d02-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\pi^0$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d03-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $K^+$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d03-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $K^+$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d03-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $K^+$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d03-x01-y04 Title=Ratio (w.r.t. $\pi^\pm$) of mean $K^+$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d04-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $K^0$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d04-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $K^0$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d04-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $K^0$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d04-x01-y04 Title=Ratio (w.r.t. $\pi^\pm$) of mean $K^0$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d05-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\eta$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d05-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\eta$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d05-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\eta$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d06-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\eta'(958)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d06-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\eta'(958)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d06-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\eta'(958)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d07-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D^+$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d07-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D^+$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d07-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D^+$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d08-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D^0$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d08-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D^0$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d08-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D^0$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d09-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D^+_s$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d09-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D^+_s$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d09-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D^+_s$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d10-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $B^+, B^0_d$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d11-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $B^+_u$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d12-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $B^0_s$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d13-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $f_0(980)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d13-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $f_0(980)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d13-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $f_0(980)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d14-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $a_0^+(980)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d15-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\rho^0(770)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d15-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\rho^0(770)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d15-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\rho^0(770)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d16-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\rho^+(770)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d17-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\omega(782)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d17-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\omega(782)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d18-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $K^{*+}(892)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d18-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $K^{*+}(892)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d18-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $K^{*+}(892)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d19-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $K^{*0}(892)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d19-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $K^{*0}(892)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d19-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $K^{*0}(892)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d20-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\phi(1020)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d20-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\phi(1020)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d20-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\phi(1020)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d21-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D^{*+}(2010)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d21-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D^{*+}(2010)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d21-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D^{*+}(2010)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d22-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D^{*0}(2007)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d22-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D^{*0}(2007)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d23-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D^{*+}_s(2112)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d23-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D^{*+}_s(2112)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d24-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $B^*$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d25-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $J/\psi(1S)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d25-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $J/\psi(1S)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d26-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\psi(2S)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d27-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Upsilon(1S)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d28-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $f_1(1285)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d29-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $f_1(1420)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d30-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\chi_{c1}(3510)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d31-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $f_2(1270)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d31-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $f_2(1270)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d31-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $f_2(1270)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d32-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $f_2'(1525)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d33-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $K_2^{*+}(1430)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d34-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $K_2^{*0}(1430)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d34-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $K_2^{*0}(1430)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d35-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $B^{**}$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d36-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D_{s1}^+$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d37-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $D_{s2}^+$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d38-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $p$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d38-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $p$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d38-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $p$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d38-x01-y04 Title=Ratio (w.r.t. $\pi^\pm$) of mean $p$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d39-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Lambda$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d39-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Lambda$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d39-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Lambda$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d39-x01-y04 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Lambda$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d40-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Sigma^0$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d40-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Sigma^0$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d41-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Sigma^-$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d42-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Sigma^+$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d43-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Sigma^\pm$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d44-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Xi^-$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d44-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Xi^-$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d44-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Xi^-$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d45-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Delta^{++}(1232)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d45-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Delta^{++}(1232)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d46-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Sigma^-(1385)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d46-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Sigma^-(1385)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d46-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Sigma^-(1385)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d47-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Sigma^+(1385)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d47-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Sigma^+(1385)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d47-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Sigma^+(1385)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d48-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Sigma^\pm(1385)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d48-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Sigma^\pm(1385)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d48-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Sigma^\pm(1385)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d49-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Xi^0(1530)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d49-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Xi^0(1530)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d50-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Omega^-$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d50-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Omega^-$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d50-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Omega^-$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d51-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Lambda_c^+$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d51-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Lambda_c^+$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d51-x01-y03 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Lambda_c^+$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d52-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Lambda_b^0$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d53-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Sigma_c^{++}, Sigma\_c0$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d54-x01-y01 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Lambda(1520)$ multiplicity # END PLOT # BEGIN PLOT /PDG_HADRON_MULTIPLICITIES_RATIOS/d54-x01-y02 Title=Ratio (w.r.t. $\pi^\pm$) of mean $\Lambda(1520)$ multiplicity # END PLOT rivet-1.8.3/data/plotinfo/ARGUS_1993_S2653028.plot0000644000175000017500000000326312116077756017135 0ustar sunsun# BEGIN PLOT /ARGUS_1993_S2653028/d01-x01-y01 Title=$\pi^+$ momentum, no $\Lambda$, $K^0_S$ XLabel=$p$ [GeV] YLabel=$1/\sigma\text{d}\sigma/dp$ [$\text{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ARGUS_1993_S2653028/d02-x01-y01 Title=$\pi^+$ momentum, including $\Lambda$, $K^0_S$ XLabel=$p$ [GeV] YLabel=$1/\sigma\text{d}\sigma/dp$ [$\text{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ARGUS_1993_S2653028/d04-x01-y01 Title=Proton momentum, no $\Lambda$, $K^0_S$ XLabel=$p$ [GeV] YLabel=$1/\sigma\text{d}\sigma/dp$ [$\text{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ARGUS_1993_S2653028/d05-x01-y01 Title=Proton momentum, including $\Lambda$, $K^0_S$ XLabel=$p$ [GeV] YLabel=$1/\sigma\text{d}\sigma/dp$ [$\text{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ARGUS_1993_S2653028/d03-x01-y01 Title=$K^+$ momentum XLabel=$p$ [GeV] YLabel=$1/\sigma\text{d}\sigma/dp$ [$\text{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ARGUS_1993_S2653028/d06-x01-y01 Title=$K^+$ momentum from time-of-flight XLabel=$p$ [GeV] YLabel=$1/\sigma\text{d}\sigma/dp$ [$\text{GeV}^{-1}$] # END PLOT # BEGIN PLOT /ARGUS_1993_S2653028/d07-x01-y01 Title=$\pi^+$ multiplicity, no $\Lambda$, $K^0_S$ XLabel= YLabel=$N_{\pi^+}$ LogY=0 # END PLOT # BEGIN PLOT /ARGUS_1993_S2653028/d08-x01-y01 Title=$\pi^+$ multiplicity, including $\Lambda$, $K^0_S$ XLabel= YLabel=$N_{\pi^+}$ LogY=0 # END PLOT # BEGIN PLOT /ARGUS_1993_S2653028/d09-x01-y01 Title=$K^+$ multiplicity XLabel= YLabel=$N_{K^+}$ LogY=0 # END PLOT # BEGIN PLOT /ARGUS_1993_S2653028/d10-x01-y01 Title=Proton multiplicity, no $\Lambda$, $K^0_S$ XLabel= YLabel=$N_{p}$ LogY=0 # END PLOT # BEGIN PLOT /ARGUS_1993_S2653028/d11-x01-y01 Title=Proton multiplicity, including $\Lambda$, $K^0_S$ XLabel= YLabel=$N_{p}$ LogY=0 # END PLOTrivet-1.8.3/data/plotinfo/CMS_2011_S8941262.plot0000644000175000017500000000132012116077756016652 0ustar sunsun# BEGIN PLOT /CMS_2011_S8941262/d01-x01-y01 Title=Inclusive $b$-hadron production with muons, $p_\perp^\mu > 6$ GeV, $|\eta^\mu| < 2.1$ XLabel=$\sqrt{s}$ [GeV] YLabel=$\sigma(pp \to b + X \to \mu + X')$ [$\mu$b] # END PLOT # BEGIN PLOT /CMS_2011_S8941262/d02-x01-y01 Title=Inclusive $b$-hadron production with muons, $|\eta^\mu| < 2.1$ XLabel=Muon $p_\perp$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}p_\perp (pp \to b + X \to \mu + X')$ [nb/GeV] FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /CMS_2011_S8941262/d03-x01-y01 Title=Inclusive $b$-hadron production with muons, $p_\perp^\mu > 6$ GeV XLabel=Muon $\eta$ YLabel=$\mathrm{d}\sigma/\mathrm{d}\eta (pp \to b + X \to \mu + X')$ [nb/GeV] FullRange=1 LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/CDF_2008_LEADINGJETS.plot0000644000175000017500000000415612116077756017413 0ustar sunsun# BEGIN PLOT /CDF_2008_LEADINGJETS/d01-x01-y01 Title=Transverse region charged particle density XLabel=$p_T(\text{leading jet})$ / GeV YLabel=$\langle N_\text{ch} \rangle / \text{d}\eta\,\text{d}\phi$ LogY=0 LegendYPos=0.6 # END PLOT # BEGIN PLOT /CDF_2008_LEADINGJETS/d02-x01-y01 Title=TransMAX region charged particle density XLabel=$p_T(\text{leading jet})$ / GeV YLabel=$\langle N_\text{ch} \rangle / \text{d}\eta\,\text{d}\phi$ LogY=0 LegendYPos=0.6 # END PLOT # BEGIN PLOT /CDF_2008_LEADINGJETS/d03-x01-y01 Title=TransMIN region charged particle density XLabel=$p_T(\text{leading jet})$ / GeV YLabel=$\langle N_\text{ch} \rangle / \text{d}\eta\,\text{d}\phi$ LogY=0 # END PLOT # BEGIN PLOT /CDF_2008_LEADINGJETS/d04-x01-y01 Title=TransDIF region charged particle density XLabel=$p_T(\text{leading jet})$ / GeV YLabel=$\langle N_\text{ch} \rangle / \text{d}\eta\,\text{d}\phi$ LogY=0 LegendYPos=0.5 # END PLOT # BEGIN PLOT /CDF_2008_LEADINGJETS/d05-x01-y01 Title=Transverse region charged $\sum p_\perp$ density XLabel=$p_T(\text{leading jet})$ / GeV YLabel=$\langle \sum p_T^\text{track} \rangle / \text{d}\eta\,\text{d}\phi$ / GeV LogY=0 LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2008_LEADINGJETS/d06-x01-y01 Title=TransMAX region charged $\sum p_\perp$ density XLabel=$p_T(\text{leading jet})$ / GeV YLabel=$\langle \sum p_T^\text{track} \rangle / \text{d}\eta\,\text{d}\phi$ / GeV LogY=0 LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2008_LEADINGJETS/d07-x01-y01 Title=TransMIN region charged $\sum p_\perp$ density XLabel=$p_T(\text{leading jet})$ / GeV YLabel=$\langle \sum p_T^\text{track} \rangle / \text{d}\eta\,\text{d}\phi$ / GeV LogY=0 # END PLOT # BEGIN PLOT /CDF_2008_LEADINGJETS/d08-x01-y01 Title=TransDIF region charged $\sum p_\perp$ density XLabel=$p_T(\text{leading jet})$ / GeV YLabel=$\langle \sum p_T^\text{track} \rangle / \text{d}\eta\,\text{d}\phi$ / GeV LogY=0 LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2008_LEADINGJETS/d09-x01-y01 Title=Transverse region charged $p_\perp$ average XLabel=$p_T(\text{leading jet})$ / GeV YLabel=$\langle p_T^\text{track} \rangle$ / GeV LogY=0 LegendXPos=0.10 ShowZero=0 # END PLOT rivet-1.8.3/data/plotinfo/CDF_2006_S6653332.plot0000644000175000017500000000071012116077756016626 0ustar sunsun# BEGIN PLOT /CDF_2006_S6653332/d01-x01-y01 Title=$\sigma(\text{Z + b jet})$ XLabel=$E$ / GeV YLabel=$\sigma(Z+b)$ / pb # END PLOT # BEGIN PLOT /CDF_2006_S6653332/d02-x01-y01 Title=$\sigma(\text{Z + b jet}) / \sigma(\text{Z})$ XLabel=$E$ / GeV YLabel=$\sigma(Z+b) / \sigma(Z)$ # END PLOT # BEGIN PLOT /CDF_2006_S6653332/d03-x01-y01 Title=$\sigma(Z + b jet) / \sigma(Z + jet)$ XLabel=$E$ / GeV YLabel=$\sigma(\text{Z+b}) / \sigma(\text{Z+j})$ # END PLOT rivet-1.8.3/data/plotinfo/DELPHI_2000_S4328825.plot0000644000175000017500000000171012116077756017176 0ustar sunsun# BEGIN PLOT /DELPHI_2000_S4328825/d01-x01-y01 Title=Charged multiplicity as a function of energy in $b$ events XLabel=$E_\mathrm{CMS}/GeV$ YLabel=$\langle n\rangle_{b\bar b}$ LegendXPos=0.20 LegendYPos=0.85 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /DELPHI_2000_S4328825/d01-x01-y02 Title=Charged multiplicity as a function of energy in $c$ events XLabel=$E_\mathrm{CMS}/GeV$ YLabel=$\langle n\rangle_{c\bar c}$ LegendXPos=0.20 LegendYPos=0.85 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /DELPHI_2000_S4328825/d01-x01-y03 Title=Charged multiplicity as a function of energy in $uds$ events XLabel=$E_\mathrm{CMS}/GeV$ YLabel=$\langle n\rangle_{l\bar l}$ LegendXPos=0.20 LegendYPos=0.85 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /DELPHI_2000_S4328825/d01-x01-y04 Title=Difference in Charged multiplicity as a function of energy between $b$ and $uds$ events XLabel=$E_\mathrm{CMS}/GeV$ YLabel=$\delta_{bl}$ LegendXPos=0.20 LegendYPos=0.85 FullRange=1 LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/D0_2008_S7837160.plot0000644000175000017500000000154412116077756016511 0ustar sunsun# BEGIN PLOT /D0_2008_S7837160/d01-x01-y01 Title=W charge asymmetry for $25 > E_\perp > 35$ GeV XLabel=$|\eta|$ of charged lepton YLabel=$\mathcal{A}(\mathrm{d}{\sigma^+}\!/\!\mathrm{d}{|\eta|},\, \mathrm{d}{\sigma^-}\!/\!\mathrm{d}{|\eta|})$ LogY=0 LegendXPos=0.05 LegendYPos=0.4 # END PLOT # BEGIN PLOT /D0_2008_S7837160/d01-x01-y02 Title=W charge asymmetry for $E_\perp > 35$ GeV XLabel=$|\eta|$ of charged lepton YLabel=$\mathcal{A}(\mathrm{d}{\sigma^+}\!/\!\mathrm{d}{|\eta|},\, \mathrm{d}{\sigma^-}\!/\!\mathrm{d}{|\eta|})$ LogY=0 LegendXPos=0.05 LegendYPos=0.4 # END PLOT # BEGIN PLOT /D0_2008_S7837160/d01-x01-y03 Title=W charge asymmetry for $E_\perp > 25$ GeV XLabel=$|\eta|$ of charged lepton YLabel=$\mathcal{A}(\mathrm{d}{\sigma^+}\!/\!\mathrm{d}{|\eta|},\, \mathrm{d}{\sigma^-}\!/\!\mathrm{d}{|\eta|})$ LogY=0 LegendXPos=0.05 LegendYPos=0.4 # END PLOT rivet-1.8.3/data/plotinfo/MC_ZZKTSPLITTINGS.plot0000644000175000017500000000370712116077756017340 0ustar sunsun# BEGIN PLOT /MC_ZZKTSPLITTINGS/log10_R_0 Title=$\log_{10}$(Integrated $0$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{0}$ Rebin=2 LegendYPos=0.8 LegendXPos=0.75 # END PLOT # BEGIN PLOT /MC_ZZKTSPLITTINGS/log10_R_1 Title=$\log_{10}$(Integrated $1$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{1}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_ZZKTSPLITTINGS/log10_R_2 Title=$\log_{10}$(Integrated $2$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{2}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_ZZKTSPLITTINGS/log10_R_3 Title=$\log_{10}$(Integrated $3$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{3}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_ZZKTSPLITTINGS/log10_R_4 Title=$\log_{10}$(Integrated $4$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{\geq4}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_ZZKTSPLITTINGS/log10_d_01 Title=$\log_{10}$($k_\perp$ jet resolution $0 \to 1$ [GeV]) XLabel=$\log_{10}(d_{01}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{01}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_ZZKTSPLITTINGS/log10_d_12 Title=$\log_{10}$($k_\perp$ jet resolution $1 \to 2$ [GeV]) XLabel=$\log_{10}(d_{12}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{12}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_ZZKTSPLITTINGS/log10_d_23 Title=$\log_{10}$($k_\perp$ jet resolution $2 \to 3$ [GeV]) XLabel=$\log_{10}(d_{23}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{23}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_ZZKTSPLITTINGS/log10_d_34 Title=$\log_{10}$($k_\perp$ jet resolution $3 \to 4$ [GeV]) XLabel=$\log_{10}(d_{34}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{34}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT rivet-1.8.3/data/plotinfo/MC_PDFS.plot0000644000175000017500000000144112116077756015642 0ustar sunsun# BEGIN PLOT /MC_PDFS/PdfX Title=PDF sampling $x$ value distribution XLabel=$x$ YLabel=$1/N_\text{evt} \ \mathrm{d}N_\text{evt}/\mathrm{d}x$ LogX=1 LogY=1 FullRange=1 LegendXPos=0.1 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_PDFS/PdfXmin Title=PDF sampling $x_\text{min}$ value distribution XLabel=$x_\text{min}$ # END PLOT # BEGIN PLOT /MC_PDFS/PdfXmax Title=PDF sampling $x_\text{max}$ value distribution XLabel=$x_\text{max}$ LegendXPos=0.3 XMin=0.00005 # END PLOT # BEGIN PLOT /MC_PDFS/PdfQ Title=PDF sampling $Q$ value distribution XLabel=$Q$ YLabel=$1/N_\text{evt} \ \mathrm{d}N_\text{evt}/\mathrm{d}Q$ LogX=0 LogY=1 FullRange=1 LegendYPos=0.9 # END PLOT # # BEGIN PLOT /MC_PDFS/PdfXQ # Title=PDF sampling $x, Q$ value distribution # XLabel=$x$ # YLabel=$Q$ # LogX=0 # LogY=0 # # END PLOT rivet-1.8.3/data/plotinfo/MC_PHOTONJETUE.plot0000644000175000017500000000335612116077756016721 0ustar sunsun# BEGIN PLOT /MC_PHOTONJETUE/gammajet-dR Title=$\Delta{R}$ between leading jet and leading photon XLabel=$\Delta{R}$ YLabel=$\mathrm{d}N/\mathrm{d}\Delta{R}$ # END PLOT # BEGIN PLOT /MC_PHOTONJETUE/gammajet-dphi Title=$\Delta{\phi}$ between leading jet and leading photon XLabel=$\Delta{\phi}$ YLabel=$\mathrm{d}N/\mathrm{d}\Delta{\phi}$ # END PLOT # BEGIN PLOT /MC_PHOTONJETUE/trans-nchg Title=Transverse region charged particle density XLabel=Leading jet $p_\perp$ / GeV YLabel=$\mathrm{d}{N_\text{ch}}/\mathrm{d}{\phi}$ LogY=0 XMin=20 # END PLOT # BEGIN PLOT /MC_PHOTONJETUE/trans-maxnchg Title=TransMAX region charged particle density XLabel=Leading jet $p_\perp$ / GeV YLabel=$\mathrm{d}{N_\text{ch}}/\mathrm{d}{\phi}$ LogY=0 XMin=20 # END PLOT # BEGIN PLOT /MC_PHOTONJETUE/trans-minnchg Title=TransMIN region charged particle density XLabel=Leading jet $p_\perp$ / GeV YLabel=$\mathrm{d}{N_\text{ch}}/\mathrm{d}{\phi}$ LogY=0 XMin=20 # END PLOT # BEGIN PLOT /MC_PHOTONJETUE/trans-ptsum Title=Transverse region charged pT sum density XLabel=Leading jet $p_\perp$ / GeV YLabel=$\mathrm{d}{\sum p_\perp^\text{sum}}/\mathrm{d}{\phi}$ LogY=0 XMin=20 # END PLOT # BEGIN PLOT /MC_PHOTONJETUE/trans-maxptsum Title=TransMAX region charged pT sum density XLabel=Leading jet $p_\perp$ / GeV YLabel=$\mathrm{d}{\sum p_\perp^\text{sum}}/\mathrm{d}{\phi}$ LogY=0 XMin=20 # END PLOT # BEGIN PLOT /MC_PHOTONJETUE/trans-minptsum Title=TransMIN region charged pT sum density XLabel=Leading jet $p_\perp$ / GeV YLabel=$\mathrm{d}{\sum p_\perp^\text{sum}}/\mathrm{d}{\phi}$ LogY=0 XMin=20 # END PLOT # BEGIN PLOT /MC_PHOTONJETUE/trans-ptavg Title=Transverse region charged pT average XLabel=Leading jet $p_\perp$ / GeV YLabel=$\langle p_\perp \rangle$ LogY=0 XMin=20 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_I1094568.plot0000644000175000017500000000334412116077756017074 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1094568/d0[1234]-x0[12]-y01 LegendXPos=0.45 LegendYPos=0.75 LogY=0 RatioPlotYMin=0.8 RatioPlotYMax=1.2 YMin=0.45 YMax=1.01 # END PLOT # BEGIN PLOT /ATLAS_2012_I1094568/d0[1234]-x01-y01 XLabel=$Q_{0}$ [GeV] YLabel=$f_\text{gap}$ # END PLOT # BEGIN PLOT /ATLAS_2012_I1094568/d01-x01-y01 Title=Gap fraction vs. $Q_{0}$ for veto region: $|y| < 0.8$ RatioPlotYMin=0.95 RatioPlotYMax=1.05 YMin=0.7 # END PLOT # BEGIN PLOT /ATLAS_2012_I1094568/d02-x01-y01 Title=Gap fraction vs. $Q_{0}$ for veto region: $0.8 < |y| < 1.5$ RatioPlotYMin=0.96 RatioPlotYMax=1.04 YMin=0.75 # END PLOT # BEGIN PLOT /ATLAS_2012_I1094568/d03-x01-y01 Title=Gap fraction vs. $Q_{0}$ for veto region: $1.5 < |y| < 2.1$ RatioPlotYMin=0.97 RatioPlotYMax=1.03 YMin=0.82 # END PLOT # BEGIN PLOT /ATLAS_2012_I1094568/d04-x01-y01 Title=Gap fraction vs. $Q_{0}$ for veto region: $|y| < 2.1$ RatioPlotYMin=0.88 RatioPlotYMax=1.12 # END PLOT # BEGIN PLOT /ATLAS_2012_I1094568/d0[1234]-x02-y01 XLabel=$Q_\text{sum}$ [GeV] YLabel=$f_\text{gap}$ # END PLOT # BEGIN PLOT /ATLAS_2012_I1094568/d01-x02-y01 Title=Gap fraction vs. $Q_\text{sum}$ for veto region: $|y| < 0.8$ RatioPlotYMin=0.97 RatioPlotYMax=1.03 YMin=0.85 # END PLOT # BEGIN PLOT /ATLAS_2012_I1094568/d02-x02-y01 Title=Gap fraction vs. $Q_\text{sum}$ for veto region: $0.8 < |y| < 1.5$ RatioPlotYMin=0.97 RatioPlotYMax=1.03 YMin=0.86 # END PLOT # BEGIN PLOT /ATLAS_2012_I1094568/d03-x02-y01 Title=Gap fraction vs. $Q_\text{sum}$ for veto region: $1.5 < |y| < 2.1$ RatioPlotYMin=0.97 RatioPlotYMax=1.03 LegendYPos=0.60 YMin=0.92 # END PLOT # BEGIN PLOT /ATLAS_2012_I1094568/d04-x02-y01 Title=Gap fraction vs. $Q_\text{sum}$ for veto region: $|y| < 2.1$ RatioPlotYMin=0.95 RatioPlotYMax=1.05 YMin=0.65 # END PLOT rivet-1.8.3/data/plotinfo/JADE_OPAL_2000_S4300807.plot0000644000175000017500000005336412116077756017551 0ustar sunsun# BEGIN PLOT /JADE_OPAL_2000_S4300807/d07-x01-y01 Title=Integrated 2-jet rate with Jade algorithm (35 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_2$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d07-x01-y02 Title=Integrated 3-jet rate with Jade algorithm (35 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_3$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d07-x01-y03 Title=Integrated 4-jet rate with Jade algorithm (35 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_4$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d07-x01-y04 Title=Integrated 5-jet rate with Jade algorithm (35 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_5$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d07-x01-y05 Title=Integrated $\geq$6-jet rate with Jade algorithm (35 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_{\geq 6}$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d08-x01-y01 Title=Integrated 2-jet rate with Jade algorithm (44 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_2$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d08-x01-y02 Title=Integrated 3-jet rate with Jade algorithm (44 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_3$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d08-x01-y03 Title=Integrated 4-jet rate with Jade algorithm (44 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_4$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d08-x01-y04 Title=Integrated 5-jet rate with Jade algorithm (44 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_5$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d08-x01-y05 Title=Integrated $\geq$6-jet rate with Jade algorithm (44 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_{\geq 6}$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d09-x01-y01 Title=Integrated 2-jet rate with Jade algorithm (91.2 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_2$ LogX=1 LegendYPos=0.65 FullRange=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d09-x01-y02 Title=Integrated 3-jet rate with Jade algorithm (91.2 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_3$ LogX=1 LegendYPos=0.65 FullRange=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d09-x01-y03 Title=Integrated 4-jet rate with Jade algorithm (91.2 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_4$ LogX=1 LegendXPos=0.30 LegendYPos=0.65 FullRange=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d09-x01-y04 Title=Integrated 5-jet rate with Jade algorithm (91.2 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_5$ LogX=1 LegendXPos=0.25 LegendYPos=0.65 FullRange=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d09-x01-y05 Title=Integrated $\geq$6-jet rate with Jade algorithm (91.2 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_{\geq 6}$ LogX=1 LegendXPos=0.10 LegendYPos=0.65 FullRange=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d10-x01-y01 Title=Integrated 2-jet rate with Jade algorithm (133 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_2$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d10-x01-y02 Title=Integrated 3-jet rate with Jade algorithm (133 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_3$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d10-x01-y03 Title=Integrated 4-jet rate with Jade algorithm (133 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_4$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d10-x01-y04 Title=Integrated 5-jet rate with Jade algorithm (133 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_5$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d10-x01-y05 Title=Integrated $\geq$6-jet rate with Jade algorithm (133 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_{\geq 6}$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d11-x01-y01 Title=Integrated 2-jet rate with Jade algorithm (161 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_2$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d11-x01-y02 Title=Integrated 3-jet rate with Jade algorithm (161 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_3$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d11-x01-y03 Title=Integrated 4-jet rate with Jade algorithm (161 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_4$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d11-x01-y04 Title=Integrated 5-jet rate with Jade algorithm (161 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_5$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d11-x01-y05 Title=Integrated $\geq$6-jet rate with Jade algorithm (161 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_{\geq 6}$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d12-x01-y01 Title=Integrated 2-jet rate with Jade algorithm (172 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_2$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d12-x01-y02 Title=Integrated 3-jet rate with Jade algorithm (172 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_3$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d12-x01-y03 Title=Integrated 4-jet rate with Jade algorithm (172 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_4$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d12-x01-y04 Title=Integrated 5-jet rate with Jade algorithm (172 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_5$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d12-x01-y05 Title=Integrated $\geq$6-jet rate with Jade algorithm (172 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_{\geq 6}$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d13-x01-y01 Title=Integrated 2-jet rate with Jade algorithm (183 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_2$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d13-x01-y02 Title=Integrated 3-jet rate with Jade algorithm (183 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_3$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d13-x01-y03 Title=Integrated 4-jet rate with Jade algorithm (183 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_4$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d13-x01-y04 Title=Integrated 5-jet rate with Jade algorithm (183 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_5$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d13-x01-y05 Title=Integrated $\geq$6-jet rate with Jade algorithm (183 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_{\geq 6}$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d14-x01-y01 Title=Integrated 2-jet rate with Jade algorithm (189 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_2$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d14-x01-y02 Title=Integrated 3-jet rate with Jade algorithm (189 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_3$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d14-x01-y03 Title=Integrated 4-jet rate with Jade algorithm (189 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_4$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d14-x01-y04 Title=Integrated 5-jet rate with Jade algorithm (189 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_5$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d14-x01-y05 Title=Integrated $\geq$6-jet rate with Jade algorithm (189 GeV) XLabel=$y_{\text{cut}}^\text{Jade}$ YLabel=$R_{\geq 6}$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d16-x01-y01 Title=Integrated 2-jet rate with Durham algorithm (35 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_2$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d16-x01-y02 Title=Integrated 3-jet rate with Durham algorithm (35 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_3$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d16-x01-y03 Title=Integrated 4-jet rate with Durham algorithm (35 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_4$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d16-x01-y04 Title=Integrated 5-jet rate with Durham algorithm (35 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_5$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d16-x01-y05 Title=Integrated $\geq$6-jet rate with Durham algorithm (35 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_{\geq 6}$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d17-x01-y01 Title=Integrated 2-jet rate with Durham algorithm (44 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_2$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d17-x01-y02 Title=Integrated 3-jet rate with Durham algorithm (44 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_3$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d17-x01-y03 Title=Integrated 4-jet rate with Durham algorithm (44 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_4$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d17-x01-y04 Title=Integrated 5-jet rate with Durham algorithm (44 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_5$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d17-x01-y05 Title=Integrated $\geq$6-jet rate with Durham algorithm (44 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_{\geq 6}$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d18-x01-y01 Title=Integrated 2-jet rate with Durham algorithm (91.2 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_2$ LogX=1 LegendYPos=0.6 FullRange=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d18-x01-y02 Title=Integrated 3-jet rate with Durham algorithm (91.2 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_3$ LogX=1 LegendYPos=0.6 LegendXPos=0.35 FullRange=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d18-x01-y03 Title=Integrated 4-jet rate with Durham algorithm (91.2 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_4$ LogX=1 LegendYPos=0.6 LegendXPos=0.25 FullRange=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d18-x01-y04 Title=Integrated 5-jet rate with Durham algorithm (91.2 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_5$ LogX=1 LegendYPos=0.6 LegendXPos=0.30 FullRange=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d18-x01-y05 Title=Integrated $\geq$6-jet rate with Durham algorithm (91.2 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_{\geq 6}$ LogX=1 LegendYPos=0.6 LegendXPos=0.05 FullRange=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d19-x01-y01 Title=Integrated 2-jet rate with Durham algorithm (133 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_2$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d19-x01-y02 Title=Integrated 3-jet rate with Durham algorithm (133 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_3$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d19-x01-y03 Title=Integrated 4-jet rate with Durham algorithm (133 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_4$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d19-x01-y04 Title=Integrated 5-jet rate with Durham algorithm (133 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_5$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d19-x01-y05 Title=Integrated $\geq$6-jet rate with Durham algorithm (133 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_{\geq 6}$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d20-x01-y01 Title=Integrated 2-jet rate with Durham algorithm (161 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_2$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d20-x01-y02 Title=Integrated 3-jet rate with Durham algorithm (161 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_3$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d20-x01-y03 Title=Integrated 4-jet rate with Durham algorithm (161 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_4$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d20-x01-y04 Title=Integrated 5-jet rate with Durham algorithm (161 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_5$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d20-x01-y05 Title=Integrated $\geq$6-jet rate with Durham algorithm (161 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_{\geq 6}$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d21-x01-y01 Title=Integrated 2-jet rate with Durham algorithm (172 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_2$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d21-x01-y02 Title=Integrated 3-jet rate with Durham algorithm (172 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_3$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d21-x01-y03 Title=Integrated 4-jet rate with Durham algorithm (172 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_4$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d21-x01-y04 Title=Integrated 5-jet rate with Durham algorithm (172 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_5$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d21-x01-y05 Title=Integrated $\geq$6-jet rate with Durham algorithm (172 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_{\geq 6}$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d22-x01-y01 Title=Integrated 2-jet rate with Durham algorithm (183 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_2$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d22-x01-y02 Title=Integrated 3-jet rate with Durham algorithm (183 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_3$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d22-x01-y03 Title=Integrated 4-jet rate with Durham algorithm (183 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_4$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d22-x01-y04 Title=Integrated 5-jet rate with Durham algorithm (183 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_5$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d22-x01-y05 Title=Integrated $\geq$6-jet rate with Durham algorithm (183 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_{\geq 6}$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d23-x01-y01 Title=Integrated 2-jet rate with Durham algorithm (189 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_2$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d23-x01-y02 Title=Integrated 3-jet rate with Durham algorithm (189 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_3$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d23-x01-y03 Title=Integrated 4-jet rate with Durham algorithm (189 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_4$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d23-x01-y04 Title=Integrated 5-jet rate with Durham algorithm (189 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_5$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d23-x01-y05 Title=Integrated $\geq$6-jet rate with Durham algorithm (189 GeV) XLabel=$y_{\text{cut}}^\text{Durham}$ YLabel=$R_{\geq 6}$ LogX=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d24-x01-y01 Title=Differential 2-jet rate with Durham algorithm (35 GeV) XLabel=$y_{23}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{23}$ LogX=1 LegendXPos=0.25 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d24-x01-y02 Title=Differential 3-jet rate with Durham algorithm (35 GeV) XLabel=$y_{34}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{34}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d24-x01-y03 Title=Differential 4-jet rate with Durham algorithm (35 GeV) XLabel=$y_{45}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{45}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d24-x01-y04 Title=Differential 5-jet rate with Durham algorithm (35 GeV) XLabel=$y_{56}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{56}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d25-x01-y01 Title=Differential 2-jet rate with Durham algorithm (44 GeV) XLabel=$y_{23}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{23}$ LogX=1 LegendXPos=0.25 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d25-x01-y02 Title=Differential 3-jet rate with Durham algorithm (44 GeV) XLabel=$y_{34}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{34}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d25-x01-y03 Title=Differential 4-jet rate with Durham algorithm (44 GeV) XLabel=$y_{45}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{45}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d25-x01-y04 Title=Differential 5-jet rate with Durham algorithm (44 GeV) XLabel=$y_{56}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{56}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d26-x01-y01 Title=Differential 2-jet rate with Durham algorithm (91.2 GeV) XLabel=$y_{23}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{23}$ LogX=1 LegendXPos=0.25 LegendYPos=0.5 FullRange=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d26-x01-y02 Title=Differential 3-jet rate with Durham algorithm (91.2 GeV) XLabel=$y_{34}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{34}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 FullRange=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d26-x01-y03 Title=Differential 4-jet rate with Durham algorithm (91.2 GeV) XLabel=$y_{45}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{45}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 FullRange=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d26-x01-y04 Title=Differential 5-jet rate with Durham algorithm (91.2 GeV) XLabel=$y_{56}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{56}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 FullRange=1 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d27-x01-y01 Title=Differential 2-jet rate with Durham algorithm (133 GeV) XLabel=$y_{23}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{23}$ LogX=1 LegendXPos=0.25 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d27-x01-y02 Title=Differential 3-jet rate with Durham algorithm (133 GeV) XLabel=$y_{34}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{34}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d27-x01-y03 Title=Differential 4-jet rate with Durham algorithm (133 GeV) XLabel=$y_{45}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{45}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d27-x01-y04 Title=Differential 5-jet rate with Durham algorithm (133 GeV) XLabel=$y_{56}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{56}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d28-x01-y01 Title=Differential 2-jet rate with Durham algorithm (161 GeV) XLabel=$y_{23}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{23}$ LogX=1 LegendXPos=0.25 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d28-x01-y02 Title=Differential 3-jet rate with Durham algorithm (161 GeV) XLabel=$y_{34}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{34}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d28-x01-y03 Title=Differential 4-jet rate with Durham algorithm (161 GeV) XLabel=$y_{45}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{45}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d28-x01-y04 Title=Differential 5-jet rate with Durham algorithm (161 GeV) XLabel=$y_{56}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{56}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d29-x01-y01 Title=Differential 2-jet rate with Durham algorithm (172 GeV) XLabel=$y_{23}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{23}$ LogX=1 LegendXPos=0.25 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d29-x01-y02 Title=Differential 3-jet rate with Durham algorithm (172 GeV) XLabel=$y_{34}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{34}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d29-x01-y03 Title=Differential 4-jet rate with Durham algorithm (172 GeV) XLabel=$y_{45}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{45}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d29-x01-y04 Title=Differential 5-jet rate with Durham algorithm (172 GeV) XLabel=$y_{56}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{56}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d30-x01-y01 Title=Differential 2-jet rate with Durham algorithm (183 GeV) XLabel=$y_{23}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{23}$ LogX=1 LegendXPos=0.25 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d30-x01-y02 Title=Differential 3-jet rate with Durham algorithm (183 GeV) XLabel=$y_{34}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{34}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d30-x01-y03 Title=Differential 4-jet rate with Durham algorithm (183 GeV) XLabel=$y_{45}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{45}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d30-x01-y04 Title=Differential 5-jet rate with Durham algorithm (183 GeV) XLabel=$y_{56}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{56}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d31-x01-y01 Title=Differential 2-jet rate with Durham algorithm (189 GeV) XLabel=$y_{23}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{23}$ LogX=1 LegendXPos=0.25 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d31-x01-y02 Title=Differential 3-jet rate with Durham algorithm (189 GeV) XLabel=$y_{34}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{34}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d31-x01-y03 Title=Differential 4-jet rate with Durham algorithm (189 GeV) XLabel=$y_{45}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{45}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /JADE_OPAL_2000_S4300807/d31-x01-y04 Title=Differential 5-jet rate with Durham algorithm (189 GeV) XLabel=$y_{56}^\text{Durham}$ YLabel=$\text{d}\sigma/\text{d}y_{56}$ LogX=1 LegendXPos=0.15 LegendYPos=0.5 # END PLOT rivet-1.8.3/data/plotinfo/CDF_1990_S2089246.plot0000644000175000017500000000060412116077756016646 0ustar sunsun# BEGIN PLOT /CDF_1990_S2089246/d03-x01-y01 Title=Pseudorapidity distribution at $\sqrt{s} = \unit{1800}{\GeV}$ XLabel=$\eta$ YLabel=$\mathrm{d}{N_\text{ch}}/\mathrm{d}{\eta}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1990_S2089246/d04-x01-y01 Title=Pseudorapidity distribution at $\sqrt{s} = \unit{630}{\GeV}$ XLabel=$\eta$ YLabel=$\mathrm{d}{N_\text{ch}}/\mathrm{d}{\eta}$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_I1091481.plot0000644000175000017500000000462112116077756017062 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1091481/d01-x01-y01 Title=Power spectrum $p_\perp>100$MeV, $p_\perp^\text{max}<10$GeV, $\sqrt{s}=7$TeV XLabel=$\omega[\text{GeV}^-1]$ YLabel=$\text{S}_\text{E}(\omega)-1$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1091481/d01-x01-y02 Title=Power spectrum $p_\perp>100$MeV, $p_\perp^\text{max}<1$GeV, $\sqrt{s}=7$TeV XLabel=$\omega[\text{GeV}^-1]$ YLabel=$\text{S}_\text{E}(\omega)-1$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1091481/d01-x01-y03 Title=Power spectrum $p_\perp>500$MeV, $p_\perp^\text{max}<10$GeV, $\sqrt{s}=7$TeV XLabel=$\omega[\text{GeV}^-1]$ YLabel=$\text{S}_\text{E}(\omega)-1$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1091481/d02-x01-y01 Title=Power spectrum $p_\perp>100$MeV, $p_\perp^\text{max}<10$GeV, $\sqrt{s}=900$GeV XLabel=$\omega[\text{GeV}^-1]$ YLabel=$\text{S}_\text{E}(\omega)-1$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1091481/d02-x01-y02 Title=Power spectrum $p_\perp>100$MeV, $p_\perp^\text{max}<1$GeV, $\sqrt{s}=900$GeV XLabel=$\omega[\text{GeV}^-1]$ YLabel=$\text{S}_\text{E}(\omega)-1$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1091481/d02-x01-y03 Title=Power spectrum $p_\perp>500$MeV, $p_\perp^\text{max}<10$GeV, $\sqrt{s}=900$GeV XLabel=$\omega[\text{GeV}^-1]$ YLabel=$\text{S}_\text{E}(\omega)-1$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1091481/d01-x02-y01 Title=Power spectrum $p_\perp>100$MeV, $p_\perp^\text{max}<10$GeV, $\sqrt{s}=7$TeV XLabel=$\xi$ YLabel=$\text{S}_\eta(\xi)-1$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1091481/d01-x02-y02 Title=Power spectrum $p_\perp>100$MeV, $p_\perp^\text{max}<1$GeV, $\sqrt{s}=7$TeV XLabel=$\xi$ YLabel=$\text{S}_\eta(\xi)-1$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1091481/d01-x02-y03 Title=Power spectrum $p_\perp>500$MeV, $p_\perp^\text{max}<10$GeV, $\sqrt{s}=7$TeV XLabel=$\xi$ YLabel=$\text{S}_\eta(\xi)-1$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1091481/d02-x02-y01 Title=Power spectrum $p_\perp>100$MeV, $p_\perp^\text{max}<10$GeV, $\sqrt{s}=900$GeV XLabel=$\xi$ YLabel=$\text{S}_\eta(\xi)-1$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1091481/d02-x02-y02 Title=Power spectrum $p_\perp>100$MeV, $p_\perp^\text{max}<1$GeV, $\sqrt{s}=900$GeV XLabel=$\xi$ YLabel=$\text{S}_\eta(\xi)-1$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1091481/d02-x02-y03 Title=Power spectrum $p_\perp>500$MeV, $p_\perp^\text{max}<10$GeV, $\sqrt{s}=900$GeV XLabel=$\xi$ YLabel=$\text{S}_\eta(\xi)-1$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/MC_JETS.plot0000644000175000017500000001520612116077756015657 0ustar sunsun# BEGIN PLOT /MC_JETS/jets_dR_ Title=$\Delta R$ separation between jets LegendXPos=0.10 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_JETS/jets_dR_12 XLabel=$\Delta{R}(\text{jet 1, jet 2})$ YLabel=$\text{d}\sigma/\text{d}\Delta{R}(\text{jet 1, jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_JETS/jets_dR_13 XLabel=$\Delta{R}(\text{jet 1, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta{R}(\text{jet 1, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_JETS/jets_dR_23 XLabel=$\Delta{R}(\text{jet 2, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta{R}(\text{jet 2, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_JETS/jets_deta_ Title=Pseudorapidity separation between jets LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_JETS/jets_deta_12 XLabel=$\Delta\eta(\text{jet 1, jet 2})$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta(\text{jet 1, jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_JETS/jets_deta_13 XLabel=$\Delta\eta(\text{jet 1, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta(\text{jet 1, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_JETS/jets_deta_23 XLabel=$\Delta\eta(\text{jet 2, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta(\text{jet 2, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_JETS/jets_dphi_ Title=Pseudorapidity separation between jets LegendXPos=0.1 # END PLOT # BEGIN PLOT /MC_JETS/jets_dphi_12 XLabel=$\Delta\phi(\text{jet 1, jet 2})$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi(\text{jet 1, jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_JETS/jets_dphi_13 XLabel=$\Delta\phi(\text{jet 1, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi(\text{jet 1, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_JETS/jets_dphi_23 XLabel=$\Delta\phi(\text{jet 2, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi(\text{jet 2, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_JETS/jet_eta_1 Title=Pseudorapidity of leading jet XLabel=$\eta(\text{jet 1})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 1})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_JETS/jet_eta_2 Title=Pseudorapidity of second jet XLabel=$\eta(\text{jet 2})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 2})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_JETS/jet_eta_3 Title=Pseudorapidity of third jet XLabel=$\eta(\text{jet 3})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 3})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_JETS/jet_eta_4 Title=Pseudorapidity of fourth jet XLabel=$\eta(\text{jet 4})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 4})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_JETS/jet_eta_pmratio_1 Title=Pseudorapidity $+/-$ ratio of first jet XLabel=$\eta(\text{jet 1})_+/\eta(\text{jet 1})_-$ YLabel=$|\eta(\text{jet 1}|$ # END PLOT # BEGIN PLOT /MC_JETS/jet_eta_pmratio_2 Title=Pseudorapidity $+/-$ ratio of second jet XLabel=$\eta(\text{jet 2})_+/\eta(\text{jet 2})_-$ YLabel=$|\eta(\text{jet 2}|$ # END PLOT # BEGIN PLOT /MC_JETS/jet_eta_pmratio_3 Title=Pseudorapidity $+/-$ ratio of third jet XLabel=$\eta(\text{jet 3})_+/\eta(\text{jet 3})_-$ YLabel=$|\eta(\text{jet 3}|$ # END PLOT # BEGIN PLOT /MC_JETS/jet_eta_pmratio_4 Title=Pseudorapidity $+/-$ ratio of fourth jet XLabel=$\eta(\text{jet 4})_+/\eta(\text{jet 4})_-$ YLabel=$|\eta(\text{jet 4}|$ # END PLOT # BEGIN PLOT /MC_JETS/jet_y_1 Title=Rapidity of first jet XLabel=$y(\text{jet 1})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 1})$ [pb] # END PLOT # BEGIN PLOT /MC_JETS/jet_y_2 Title=Rapidity of second jet XLabel=$y(\text{jet 2})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_JETS/jet_y_3 Title=Rapidity of third jet XLabel=$y(\text{jet 3})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_JETS/jet_y_4 Title=Rapidity of fourth jet XLabel=$y(\text{jet 4})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 4})$ [pb] # END PLOT # BEGIN PLOT /MC_JETS/jet_y_pmratio_1 Title=Rapidity $+/-$ ratio of first jet XLabel=$y(\text{jet 1})_+/y(\text{jet 1})_-$ YLabel=$|y(\text{jet 1}|$ # END PLOT # BEGIN PLOT /MC_JETS/jet_y_pmratio_2 Title=Rapidity $+/-$ ratio of second jet XLabel=$y(\text{jet 2})_+/y(\text{jet 2})_-$ YLabel=$|y(\text{jet 2}|$ # END PLOT # BEGIN PLOT /MC_JETS/jet_y_pmratio_3 Title=Rapidity $+/-$ ratio of third jet XLabel=$y(\text{jet 3})_+/y(\text{jet 3})_-$ YLabel=$|y(\text{jet 3}|$ # END PLOT # BEGIN PLOT /MC_JETS/jet_y_pmratio_4 Title=Rapidity $+/-$ ratio of fourth jet XLabel=$y(\text{jet 4})_+/y(\text{jet 4})_-$ YLabel=$|y(\text{jet 4}|$ # END PLOT # BEGIN PLOT /MC_JETS/jet_mass_1 Title=Mass of first jet XLabel=$m(\text{jet 1})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 1})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_JETS/jet_mass_2 Title=Mass of second jet XLabel=$m(\text{jet 2})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 2})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_JETS/jet_mass_3 Title=Mass of third jet XLabel=$m(\text{jet 3})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 3})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_JETS/jet_mass_4 Title=Mass of fourth jet XLabel=$m(\text{jet 4})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 4})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_JETS/jet_multi_exclusive Title=Exclusive jet multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(N_{\text{jet}})$ [pb] XMajorTickMarks=10 XMinorTickMarks=0 ErrorBands=1 # END PLOT # BEGIN PLOT /MC_JETS/jet_multi_inclusive Title=Inclusive jet multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(\geq N_{\text{jet}})$ [pb] XMajorTickMarks=10 XMinorTickMarks=0 ErrorBands=1 # END PLOT # BEGIN PLOT /MC_JETS/jet_multi_ratio Title=Ratio of jet multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(\geq N_{\text{jet}})/\sigma(\geq N_{\text{jet}}-1)$ XMajorTickMarks=10 XMinorTickMarks=0 LogY=0 ErrorBands=1 # END PLOT # BEGIN PLOT /MC_JETS/jet_pT_1 Title=Transverse momentum of leading jet XLabel=$p_\perp(\text{jet 1})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 1})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_JETS/jet_pT_2 Title=Transverse momentum of second jet XLabel=$p_\perp(\text{jet 2})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 2})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_JETS/jet_pT_3 Title=Transverse momentum of third jet XLabel=$p_\perp(\text{jet 3})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 3})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_JETS/jet_pT_4 Title=Transverse momentum of fourth jet XLabel=$p_\perp(\text{jet 4})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 4})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_JETS/jet_HT Title=Scalar sum of jet transverse momenta (HT) XLabel=$HT$ [GeV] YLabel=$\text{d}\sigma/\text{d}HT$ [pb/GeV] LogX=1 # END PLOT rivet-1.8.3/data/plotinfo/LHCB_2011_I917009.plot0000644000175000017500000001340412116077756016646 0ustar sunsun# BEGIN PLOT /LHCB_2011_I917009/d01-x01-y01 Title=$\bar{\Lambda}/\Lambda$ ratio at $\sqrt{s}=0.9$ TeV ($0.25 < p_\perp < 0.65$ GeV/$c$) XLabel=Rapidity ($y$) YLabel=$\bar{\Lambda}/\Lambda$ LogY=0 ErrorBars=1 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d01-x01-y02 Title=$\bar{\Lambda}/\Lambda$ ratio at $\sqrt{s}=0.9$ TeV ($0.65 < p_\perp < 1.00$ Gev/$c$) XLabel=Rapidity ($y$) YLabel=$\bar{\Lambda}/\Lambda$ LogY=0 LegendXPos=0.05 LegendYPos=0.4 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d01-x01-y03 Title=$\bar{\Lambda}/\Lambda$ ratio at $\sqrt{s}=0.9$ TeV ($1.00 < p_\perp < 2.50$ GeV/$c$) XLabel=Rapidity ($y$) YLabel=$\bar{\Lambda}/\Lambda$ LogY=0 LegendXPos=0.05 LegendYPos=0.35 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d02-x01-y01 Title=$\bar{\Lambda}/K_{s}^{0}$ ratio at $\sqrt{s}=0.9$ TeV ($0.25 < p_\perp < 0.65$ GeV/$c$) XLabel=Rapidity ($y$) YLabel=$\bar{\Lambda}/K_{s}^{0}$ LogY=0 LegendXPos=0.05 LegendYPos=0.35 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d02-x01-y02 Title=$\bar{\Lambda}/K_{s}^{0}$ ratio at $\sqrt{s}=0.9$ TeV ($0.65 < p_\perp < 1.00$ GeV/$c$) XLabel=Rapidity ($y$) YLabel=$\bar{\Lambda}/K_{s}^{0}$ LogY=0 LegendXPos=0.05 LegendYPos=0.33 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d02-x01-y03 Title=$\bar{\Lambda}/K_{s}^{0}$ ratio at $\sqrt{s}=0.9$ TeV ($1.00 < p_\perp < 2.50$ GeV/$c$) XLabel=Rapidity ($y$) YLabel=$\bar{\Lambda}/K_{s}^{0}$ LogY=0 YMax=0.7 FullRange=1 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d03-x01-y01 Title=$\bar{\Lambda}/\Lambda$ ratio at $\sqrt{s}=0.9$ TeV ($0.25 < p_\perp < 2.50$ Gev/$c$) XLabel=Rapidity ($y$) YLabel=$\bar{\Lambda}/\Lambda$ LogY=0 LegendXPos=0.05 LegendYPos=0.55 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d04-x01-y01 Title=$\bar{\Lambda}/K_{s}^{0}$ ratio at $\sqrt{s}=0.9$ TeV ($0.25 < p_\perp < 2.50$ GeV/$c$) XLabel=Rapidity ($y$) YLabel=$\bar{\Lambda}/K_{s}^{0}$ LogY=0 LegendXPos=0.05 LegendYPos=0.35 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d05-x01-y01 Title=$\bar{\Lambda}/\Lambda$ ratio at $\sqrt{s}=0.9$ TeV ($2.0 < y < 4.0$) XLabel=$p_\perp$ [GeV/$c$] YLabel=$\bar{\Lambda}/\Lambda$ LogY=0 LegendYPos=0.48 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d06-x01-y01 Title=$\bar{\Lambda}/K_{s}^{0}$ ratio at $\sqrt{s}=0.9$ TeV ($2.0 < y < 4.0$) XLabel=$p_\perp$ [GeV/$c$] YLabel=$\bar{\Lambda}/K_{s}^{0}$ LogY=0 LegendYPos=0.3 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d07-x01-y01 Title=$\bar{\Lambda}/\Lambda$ ratio at $\sqrt{s}=0.9$ TeV ($0.25 < p_\perp < 2.50$ GeV/$c$) XLabel=Rapidity loss ($\Delta y$) YLabel=$\bar{\Lambda}/\Lambda$ LogY=0 LegendYPos=0.5 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d08-x01-y01 Title=$\bar{\Lambda}/K_{s}^{0}$ ratio at $\sqrt{s}=0.9$ TeV ($0.25 < p_\perp < 2.50$ Gev/$c$) XLabel=Rapidity loss ($\Delta y$) YLabel=$\bar{\Lambda}/K_{s}^{0}$ LogY=0 LegendYPos=0.3 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d09-x01-y01 Title=$\bar{\Lambda}/\Lambda$ ratio at $\sqrt{s}=7$ TeV ($0.15 < p_\perp < 0.65$ GeV/$c$) XLabel=Rapidity ($y$) YLabel=$\bar{\Lambda}/\Lambda$ LogY=0 YMin=0.65 YMax=1.2 FullRange=1 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d09-x01-y02 Title=$\bar{\Lambda}/\Lambda$ ratio at $\sqrt{s}=7$ TeV ($0.65 < p_\perp < 1.00$ GeV/$c$) XLabel=Rapidity ($y$) YLabel=$\bar{\Lambda}/\Lambda$ LogY=0 YMin=0.65 LegendYPos=0.3 LegendXPos=0.1 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d09-x01-y03 Title=$\bar{\Lambda}/\Lambda$ ratio at $\sqrt{s}=7$ TeV ($1.00 < p_\perp < 2.50$ GeV/$c$) XLabel=Rapidity ($y$) YLabel=$\bar{\Lambda}/\Lambda$ LogY=0 YMin=0.65 LegendYPos=0.3 LegendXPos=0.1 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d10-x01-y01 Title=$\bar{\Lambda}/K_{s}^{0}$ ratio at $\sqrt{s}=7$ TeV ($0.15 < p_\perp < 0.65$ GeV/$c$) XLabel=Rapidity ($y$) YLabel=$\bar{\Lambda}/K_{s}^{0}$ LogY=0 YMin=0.1 LegendXPos=0.4 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d10-x01-y02 Title=$\bar{\Lambda}/K_{s}^{0}$ ratio at $\sqrt{s}=7$ TeV ($0.65 < p_\perp < 1.00$ GeV/$c$) XLabel=Rapidity (y) YLabel=$\bar{\Lambda}/K_{s}^{0}$ LogY=0 YMin=0.1 YMax=0.48 FullRange=1 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d10-x01-y03 Title=$\bar{\Lambda}/K_{s}^{0}$ ratio at $\sqrt{s}=7$ TeV ($1.00 < p_\perp < 2.50$ GeV/$c$) XLabel=Rapidity ($y$) YLabel=$\bar{\Lambda}/K_{s}^{0}$ LogY=0 YMin=0.1 YMax=0.7 FullRange=1 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d11-x01-y01 Title=$\bar{\Lambda}/\Lambda$ ratio at $\sqrt{s}=7$ TeV ($0.15 < p_\perp < 2.50$ GeV/$c$) XLabel=Rapidity ($y$) YLabel=$\bar{\Lambda}/\Lambda$ LogY=0 YMin=0.65 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d12-x01-y01 Title=$\bar{\Lambda}/K_{s}^{0}$ ratio at $\sqrt{s}=7$ TeV ($0.15 < p_\perp < 2.5$ GeV/$c$) XLabel=Rapidity (y) YLabel=$\bar{\Lambda}/K_{s}^{0}$ LogY=0 YMin=0.1 YMax=0.43 FullRange=1 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d13-x01-y01 Title=$\bar{\Lambda}/\Lambda$ ratio at $\sqrt{s}=7$ TeV ($2.0 < y < 4.5$) XLabel=$p_\perp$ [GeV/$c$] YLabel=$\bar{\Lambda}/\Lambda$ LogY=0 YMin=0.65 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d14-x01-y01 Title=$\bar{\Lambda}/K_{s}^{0}$ ratio at $\sqrt{s}=7$ TeV ($2.0 < y < 4.5$) XLabel=$p_\perp$ [GeV/$c$] YLabel=$\bar{\Lambda}/K_{s}^{0}$ LogY=0 LegendYPos=0.33 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d15-x01-y01 Title=$\bar{\Lambda}/\Lambda$ ratio at $\sqrt{s}=7$ TeV ($0.15 < p_\perp < 2.50$ GeV/$c$) XLabel=Rapidity loss ($\Delta y$) YLabel=$\bar{\Lambda}/\Lambda$ LogY=0 YMin=0.25 LegendYPos=0.65 RatioPlot=0 # END PLOT # BEGIN PLOT /LHCB_2011_I917009/d16-x01-y01 Title=$\bar{\Lambda}/K_{s}^{0}$ ratio at $\sqrt{s}=7$ TeV ($0.15 < p_\perp < 2.50$ GeV/$c$) XLabel=Rapidity loss ($\Delta y$) YLabel=$\bar{\Lambda}/K_{s}^{0}$ LogY=0 LegendYPos=0.33 RatioPlot=0 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_S9128077.plot0000644000175000017500000000774212116077756017114 0ustar sunsun# BEGIN PLOT /ATLAS_2011_S9128077/d01-x01-y01 Title=Inclusive jet multiplicity ($R=0.4$) XLabel=$N_\text{jet}$ YLabel=$\sigma$ [pb] XMajorTickMarks=10 XMinorTickMarks=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9128077/d02-x01-y01 Title=Inclusive jet multiplicity ratio $N/N-1$ ($R=0.4$) XLabel=$N_\text{jet}$ YLabel=$\sigma_N/\sigma_{N-1}$ XMajorTickMarks=10 XMinorTickMarks=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9128077/d03-x01-y01 Title=Transverse momentum of the leading jet ($R=0.4$) XLabel=$p_\perp$(leading jet) [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}p_\perp$ [pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_S9128077/d04-x01-y01 Title=Transverse momentum of the 2nd leading jet ($R=0.4$) XLabel=$p_\perp$(2nd jet) [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}p_\perp$ [pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_S9128077/d05-x01-y01 Title=Transverse momentum of the 3rd leading jet ($R=0.4$) XLabel=$p_\perp$(3rd jet) [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}p_\perp$ [pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_S9128077/d06-x01-y01 Title=Transverse momentum of the 4th leading jet ($R=0.4$) XLabel=$p_\perp$(4th jet) [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}p_\perp$ [pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_S9128077/d07-x01-y01 Title=$H_T$ for events with $N_\text{jet} \geq 2$ ($R=0.4$) XLabel=$H_T$ [GeV] YLabel=$\mathrm{d}\sigma(N_\text{jet} \geq 2) / \mathrm{d}H_T$ [pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_S9128077/d08-x01-y01 Title=$H_T$ for events with $N_\text{jet} \geq 3$ ($R=0.4$) XLabel=$H_T$ [GeV] YLabel=$\mathrm{d}\sigma(N_\text{jet} \geq 3) / \mathrm{d}H_T$ [pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_S9128077/d09-x01-y01 Title=$H_T$ for events with $N_\text{jet} \geq 4$ ($R=0.4$) XLabel=$H_T$ [GeV] YLabel=$\mathrm{d}\sigma(N_\text{jet} \geq 4) / \mathrm{d}H_T$ [pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_S9128077/d10-x01-y01 Title=3-to-2 jet ratio for $p_\perp^\text{jets} > 60$\;GeV ($R=0.6$) XLabel=$p_\perp$(leading jet) [GeV] YLabel=$[\mathrm{d}\sigma/\mathrm{d}p_\perp^\text{lead}]^{\geq 3} / [\mathrm{d}\sigma/\mathrm{d}p_\perp^\text{lead}]^{\geq 2}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9128077/d11-x01-y01 Title=3-to-2 jet ratio for $p_\perp^\text{jets}>80$\;GeV ($R=0.6$) XLabel=$p_\perp$(leading jet) [GeV] YLabel=$[\mathrm{d}\sigma/\mathrm{d}p_\perp^\text{lead}]^{\geq 3} / [\mathrm{d}\sigma/\mathrm{d}p_\perp^\text{lead}]^{\geq 2}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9128077/d12-x01-y01 Title=3-to-2 jet ratio for $p_\perp^\text{jets}>110$\;GeV ($R=0.6$) XLabel=$p_\perp$(leading jet) [GeV] YLabel=$[\mathrm{d}\sigma/\mathrm{d}p_\perp^\text{lead}]^{\geq 3} / [\mathrm{d}\sigma/\mathrm{d}p_\perp^\text{lead}]^{\geq 2}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9128077/d13-x01-y01 Title=3-to-2 jet ratio for $p_\perp^\text{jets}>60$\;GeV ($R=0.4$) XLabel=$p_\perp$(leading jet) [GeV] YLabel=$[\mathrm{d}\sigma/\mathrm{d}p_\perp^\text{lead}]^{\geq 3} / [\mathrm{d}\sigma/\mathrm{d}p_\perp^\text{lead}]^{\geq 2}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9128077/d14-x01-y01 Title=3-to-2 jet ratio for $p_\perp^\text{jets}>80$\;GeV ($R=0.4$) XLabel=$p_\perp$(leading jet) [GeV] YLabel=$[\mathrm{d}\sigma/\mathrm{d}p_\perp^\text{lead}]^{\geq 3} / [\mathrm{d}\sigma/\mathrm{d}p_\perp^\text{lead}]^{\geq 2}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9128077/d15-x01-y01 Title=3-to-2 jet ratio for $p_\perp^\text{jets}>110$\;GeV ($R=0.4$) XLabel=$p_\perp$(leading jet) [GeV] YLabel=$[\mathrm{d}\sigma/\mathrm{d}p_\perp^\text{lead}]^{\geq 3} / [\mathrm{d}\sigma/\mathrm{d}p_\perp^\text{lead}]^{\geq 2}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9128077/d16-x01-y01 Title=3-to-2 jet ratio for $p_\perp^\text{jets}>60$\;GeV ($R=0.6$) XLabel=$H_T^{(2)}$ [GeV] YLabel=$[\mathrm{d}\sigma/\mathrm{d}H_T^{(2)}]^{\geq 3} / [\mathrm{d}\sigma/\mathrm{d}H_T^{(2)}]^{\geq 2}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9128077/d17-x01-y01 Title=3-to-2 jet ratio for $p_\perp^\text{jets}>60$\;GeV ($R=0.4$) XLabel=$H_T^{(2)}$ [GeV] YLabel=$[\mathrm{d}\sigma/\mathrm{d}H_T^{(2)}]^{\geq 3} / [\mathrm{d}\sigma/\mathrm{d}H_T^{(2)}]^{\geq 2}$ # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_S8994773.plot0000644000175000017500000000604712116077756017126 0ustar sunsun# BEGIN PLOT /ATLAS_2011_S8994773/d01-x01-y01 Title=Transverse $N$ density vs. $p_\perp^\text{clus1}$, $\sqrt{s} = \text{900~GeV}$ XLabel=$p_\perp$ (leading particle) [GeV] YLabel=$\langle\mathrm{d}^2 N/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.4 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2011_S8994773/d02-x01-y01 Title=Transverse $N$ density vs. $p_\perp^\text{clus1}$, $\sqrt{s} = \text{7~TeV}$ XLabel=$p_\perp$ (leading particle) [GeV] YLabel=$\langle\mathrm{d}^2 N/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.4 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2011_S8994773/d03-x01-y01 Title=Transverse $\sum{p_\perp}$ density vs. $p_\perp^\text{clus1}$, $\sqrt{s} = \text{900~GeV}$ XLabel=$p_\perp$ (leading particle) [GeV] YLabel=$\langle\mathrm{d}^2 \sum{p_\perp}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.4 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2011_S8994773/d04-x01-y01 Title=Transverse $\sum{p_\perp}$ density vs. $p_\perp^\text{clus1}$, $\sqrt{s} = \text{7~TeV}$ XLabel=$p_\perp$ (leading particle) [GeV] YLabel=$\langle\mathrm{d}^2 \sum{p_\perp}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.4 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2011_S8994773/d13-x01-y01 Title=$N$ density vs. $\Delta\phi$, $p_\perp^\text{clus1} > 1.0$ GeV, $\sqrt{s} = \text{900~GeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading particle) [rad] YLabel=$\langle\mathrm{d}^2 N/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.4 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2011_S8994773/d13-x01-y02 Title=$N$ density vs. $\Delta\phi$, $p_\perp^\text{clus1} > 2.0$ GeV, $\sqrt{s} = \text{900~GeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading particle) [rad] YLabel=$\langle\mathrm{d}^2 N/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.4 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2011_S8994773/d13-x01-y03 Title=$N$ density vs. $\Delta\phi$, $p_\perp^\text{clus1} > 3.0$ GeV, $\sqrt{s} = \text{900~GeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading particle) [rad] YLabel=$\langle\mathrm{d}^2 N/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.4 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2011_S8994773/d14-x01-y01 Title=$N$ density vs. $\Delta\phi$, $p_\perp^\text{clus1} > 1.0$ GeV, $\sqrt{s} = \text{7~TeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading particle) [rad] YLabel=$\langle\mathrm{d}^2 N/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.4 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2011_S8994773/d14-x01-y02 Title=$N$ density vs. $\Delta\phi$, $p_\perp^\text{clus1} > 2.0$ GeV, $\sqrt{s} = \text{7~TeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading particle) [rad] YLabel=$\langle\mathrm{d}^2 N/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.4 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2011_S8994773/d14-x01-y03 Title=$N$ density vs. $\Delta\phi$, $p_\perp^\text{clus1} > 3.0$ GeV, $\sqrt{s} = \text{7~TeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading particle) [rad] YLabel=$\langle\mathrm{d}^2 N/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.4 LegendYPos=0.4 # END PLOT rivet-1.8.3/data/plotinfo/SLD_1999_S3743934.plot0000644000175000017500000004413212116077756016713 0ustar sunsun# BEGIN PLOT /SLD_1999_S3743934/d01-x01-y01 Title=Ratio $N_{\pi^+}/N_{\rm charged}$ XLabel=$x_p$ YLabel=$\text{d}\left(N_{\pi^+}/N_{\rm charged}\right)/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d01-x01-y02 Title=$\pi^+$ scaled momentum XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d02-x01-y01 Title=Ratio $N_{K^+}/N_{\rm charged}$ XLabel=$x_p$ YLabel=$\text{d}\left(N_{K^+}/N_{\rm charged}\right)/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d02-x01-y02 Title=$K^+$ scaled momentum XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d03-x01-y01 Title=Ratio $N_{p^+}/N_{\rm charged}$ XLabel=$x_p$ YLabel=$\text{d}\left(N_{p^+}/N_{\rm charged}\right)/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d03-x01-y02 Title=$p^+$ scaled momentum XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d04-x01-y01 Title=Charged Particle scaled momentum XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d05-x01-y01 Title=$K^0$ scaled momentum XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d07-x01-y01 Title=$\Lambda^0$ scaled momentum XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d08-x01-y01 Title=$K^{*0}$ scaled momentum XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d09-x01-y01 Title=$\phi^0$ scaled momentum XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d10-x01-y01 Title=$\pi^+$ scaled momentum, (uds) events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d10-x01-y02 Title=$\pi^+$ scaled momentum, c events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d10-x01-y03 Title=$\pi^+$ scaled momentum, b events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d11-x01-y01 Title=$\pi^+$ scaled momentum, ratio c to uds events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d11-x01-y02 Title=$\pi^+$ scaled momentum, ratio b to uds events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d12-x01-y01 Title=$K^+$ scaled momentum, (uds) events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d12-x01-y02 Title=$K^+$ scaled momentum, c events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d12-x01-y03 Title=$K^+$ scaled momentum, b events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d13-x01-y01 Title=$K^+$ scaled momentum, ratio c to uds events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d13-x01-y02 Title=$K^+$ scaled momentum, ratio b to uds events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d14-x01-y01 Title=$K^{*0}$ scaled momentum, (uds) events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d14-x01-y02 Title=$K^{*0}$ scaled momentum, c events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d14-x01-y03 Title=$K^{*0}$ scaled momentum, b events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d15-x01-y01 Title=$K^{*0}$ scaled momentum, ratio c to uds events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d15-x01-y02 Title=$K^{*0}$ scaled momentum, ratio b to uds events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d16-x01-y01 Title=$p^+$ scaled momentum, (uds) events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d16-x01-y02 Title=$p^+$ scaled momentum, c events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d16-x01-y03 Title=$p^+$ scaled momentum, b events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d17-x01-y01 Title=$p^+$ scaled momentum, ratio c to uds events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d17-x01-y02 Title=$p^+$ scaled momentum, ratio b to uds events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d18-x01-y01 Title=$\Lambda^0$ scaled momentum, (uds) events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d18-x01-y02 Title=$\Lambda^0$ scaled momentum, c events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d18-x01-y03 Title=$\Lambda^0$ scaled momentum, b events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d19-x01-y01 Title=$\Lambda^0$ scaled momentum, ratio c to uds events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d19-x01-y02 Title=$\Lambda^0$ scaled momentum, ratio b to uds events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d20-x01-y01 Title=$K^0$ scaled momentum, (uds) events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d20-x01-y02 Title=$K^0$ scaled momentum, c events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d20-x01-y03 Title=$K^0$ scaled momentum, b events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d21-x01-y01 Title=$K^0$ scaled momentum, ratio c to uds events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d21-x01-y02 Title=$K^0$ scaled momentum, ratio b to uds events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d22-x01-y01 Title=$\phi^0$ scaled momentum, (uds) events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d22-x01-y02 Title=$\phi^0$ scaled momentum, c events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d22-x01-y03 Title=$\phi^0$ scaled momentum, b events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d23-x01-y01 Title=$\phi^0$ scaled momentum, ratio c to uds events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d23-x01-y02 Title=$\phi^0$ scaled momentum, ratio b to uds events XLabel=$x_p$ YLabel=$\text{d}N/\text{d}x_p$ # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d26-x01-y01 Title=$R^q_{\pi^+}=\frac1{2N_{\rm events}}\frac{\text{d}}{\text{d}x_p}\left[N(q\to\pi^+)+N(\bar q\to\pi^-)\right]$ XLabel=$x_p$ YLabel=$R^q_{\pi^+}$ LegendXPos=0.60 LegendYPos=0.85 FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d26-x01-y02 Title=$R^q_{\pi^-}=\frac1{2N_{\rm events}}\frac{\text{d}}{\text{d}x_p}\left[N(q\to\pi^-)+N(\bar q\to\pi^+)\right]$ XLabel=$x_p$ YLabel=$R^q_{\pi^-}$ LegendXPos=0.60 LegendYPos=0.85 FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d27-x01-y01 Title=$D^q_{\pi^-}=(R^q_{\pi^-}-R^q_{\pi^+})/(R^q_{\pi^-}+R^q_{\pi^+})$ XLabel=$x_p$ YLabel=$D^q_{\pi^-}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d28-x01-y01 Title=$R^q_{K^{*0}}=\frac1{2N_{\rm events}}\frac{\text{d}}{\text{d}x_p}\left[N(q\to K^{*0})+N(\bar q\to \bar K^{*0})\right]$ XLabel=$x_p$ YLabel=$R^q_{K^{*0}}$ LegendXPos=0.60 LegendYPos=0.85 FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d28-x01-y02 Title=$R^q_{\bar K^{*0}}=\frac1{2N_{\rm events}}\frac{\text{d}}{\text{d}x_p}\left[N(q\to \bar K^{*0})+N(\bar q\to K^{*0})\right]$ XLabel=$x_p$ YLabel=$R^q_{\bar K^{*0}}$ LegendXPos=0.60 LegendYPos=0.85 FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d29-x01-y01 Title=$D^q_{\bar K^{*0}}=(R^q_{\bar K^{*0}}-R^q_{K^{*0}})/(R^q_{\bar K^{*0}}+R^q_{K^{*0}})$ XLabel=$x_p$ YLabel=$D^q_{\bar K^{*0}}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d30-x01-y01 Title=$R^q_{K^+}=\frac1{2N_{\rm events}}\frac{\text{d}}{\text{d}x_p}\left[N(q\to K^+)+N(\bar q\to K^-)\right]$ XLabel=$x_p$ YLabel=$R^q_{K^+}$ LegendXPos=0.60 LegendYPos=0.85 FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d30-x01-y02 Title=$R^q_{K^-}=\frac1{2N_{\rm events}}\frac{\text{d}}{\text{d}x_p}\left[N(q\to K^-)+N(\bar q\to K^+)\right]$ XLabel=$x_p$ YLabel=$R^q_{K^-}$ LegendXPos=0.60 LegendYPos=0.85 FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d31-x01-y01 Title=$D^q_{K^-}=(R^q_{K^-}-R^q_{K^+})/(R^q_{K^-}+R^q_{K^+})$ XLabel=$x_p$ YLabel=$D^q_{K^-}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d32-x01-y01 Title=$R^q_{p}=\frac1{2N_{\rm events}}\frac{\text{d}}{\text{d}x_p}\left[N(q\to p)+N(\bar q\to \bar p)\right]$ XLabel=$x_p$ YLabel=$R^q_{p}$ LegendXPos=0.60 LegendYPos=0.85 FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d32-x01-y02 Title=$R^q_{\bar p}=\frac1{2N_{\rm events}}\frac{\text{d}}{\text{d}x_p}\left[N(q\to \bar p)+N(\bar q\to p)\right]$ XLabel=$x_p$ YLabel=$R^q_{\bar p}$ LegendXPos=0.60 LegendYPos=0.85 FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d33-x01-y01 Title=$D^q_{p}=(R^q_{p}-R^q_{\bar p})/(R^q_{p}+R^q_{\bar p})$ XLabel=$x_p$ YLabel=$D^q_{p}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d34-x01-y01 Title=$R^q_{\Lambda^0}=\frac1{2N_{\rm events}}\frac{\text{d}}{\text{d}x_p}\left[N(q\to \Lambda^0)+N(\bar q\to \bar \Lambda^0)\right]$ XLabel=$x_p$ YLabel=$R^q_{\Lambda^0}$ LegendXPos=0.60 LegendYPos=0.85 FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d34-x01-y02 Title=$R^q_{\bar \Lambda^0}=\frac1{2N_{\rm events}}\frac{\text{d}}{\text{d}x_p}\left[N(q\to \bar \Lambda^0)+N(\bar q\to \Lambda^0)\right]$ XLabel=$x_p$ YLabel=$R^q_{\bar \Lambda^0}$ LegendXPos=0.60 LegendYPos=0.85 FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d35-x01-y01 Title=$D^q_{\Lambda^0}=(R^q_{\Lambda^0}-R^q_{\bar \Lambda^0})/(R^q_{\Lambda^0}+R^q_{\bar \Lambda^0})$ XLabel=$x_p$ YLabel=$D^q_{\Lambda^0}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x01-y01 Title=Multiplicity of $\pi^\pm$ XLabel= YLabel=$N_{\pi^\pm}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x02-y01 Title=Multiplicity of $K^\pm$ XLabel= YLabel=$N_{K^\pm}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x03-y01 Title=Multiplicity of $K^0,\bar K^0$ XLabel= YLabel=$N_{K^0,\bar K^0}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x04-y01 Title=Multiplicity of $K^{*0},\bar K^{*0}$ XLabel= YLabel=$N_{K^{*0},\bar K^{*0}}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x05-y01 Title=Multiplicity of $\phi$ XLabel= YLabel=$N_{\phi}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x06-y01 Title=Multiplicity of $p,\bar p$ XLabel= YLabel=$N_{p,\bar p}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x07-y01 Title=Multiplicity of $\Lambda^0, \bar \Lambda^0$ XLabel= YLabel=$N_{\Lambda^0, \bar \Lambda^0}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x01-y02 Title=Multiplicity of $\pi^\pm$ in ($uds$) events XLabel= YLabel=$N_{\pi^\pm}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x02-y02 Title=Multiplicity of $K^\pm$ in ($uds$) events XLabel= YLabel=$N_{K^\pm}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x03-y02 Title=Multiplicity of $K^0,\bar K^0$ in ($uds$) events XLabel= YLabel=$N_{K^0,\bar K^0}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x04-y02 Title=Multiplicity of $K^{*0},\bar K^{*0}$ in ($uds$) events XLabel= YLabel=$N_{K^{*0},\bar K^{*0}}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x05-y02 Title=Multiplicity of $\phi$ in ($uds$) events XLabel= YLabel=$N_{\phi}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x06-y02 Title=Multiplicity of $p,\bar p$ in ($uds$) events XLabel= YLabel=$N_{p,\bar p}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x07-y02 Title=Multiplicity of $\Lambda^0, \bar \Lambda^0$ in ($uds$) events XLabel= YLabel=$N_{\Lambda^0, \bar \Lambda^0}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x01-y03 Title=Multiplicity of $\pi^\pm$ in $c$ events XLabel= YLabel=$N_{\pi^\pm}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x02-y03 Title=Multiplicity of $K^\pm$ in $c$ events XLabel= YLabel=$N_{K^\pm}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x03-y03 Title=Multiplicity of $K^0,\bar K^0$ in $c$ events XLabel= YLabel=$N_{K^0,\bar K^0}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x04-y03 Title=Multiplicity of $K^{*0},\bar K^{*0}$ in $c$ events XLabel= YLabel=$N_{K^{*0},\bar K^{*0}}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x05-y03 Title=Multiplicity of $\phi$ in $c$ events XLabel= YLabel=$N_{\phi}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x06-y03 Title=Multiplicity of $p,\bar p$ in $c$ events XLabel= YLabel=$N_{p,\bar p}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x07-y03 Title=Multiplicity of $\Lambda^0, \bar \Lambda^0$ in $c$ events XLabel= YLabel=$N_{\Lambda^0, \bar \Lambda^0}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x01-y04 Title=Multiplicity of $\pi^\pm$ in $b$ events XLabel= YLabel=$N_{\pi^\pm}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x02-y04 Title=Multiplicity of $K^\pm$ in $b$ events XLabel= YLabel=$N_{K^\pm}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x03-y04 Title=Multiplicity of $K^0,\bar K^0$ in $b$ events XLabel= YLabel=$N_{K^0,\bar K^0}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x04-y04 Title=Multiplicity of $K^{*0},\bar K^{*0}$ in $b$ events XLabel= YLabel=$N_{K^{*0},\bar K^{*0}}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x05-y04 Title=Multiplicity of $\phi$ in $b$ events XLabel= YLabel=$N_{\phi}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x06-y04 Title=Multiplicity of $p,\bar p$ in $b$ events XLabel= YLabel=$N_{p,\bar p}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d24-x07-y04 Title=Multiplicity of $\Lambda^0, \bar \Lambda^0$ in $b$ events XLabel= YLabel=$N_{\Lambda^0, \bar \Lambda^0}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d25-x01-y01 Title=Multiplicity difference $c$-$uds$ for $\pi^\pm$ XLabel= YLabel=$\delta_{cl}^{\pi^\pm}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d25-x02-y01 Title=Multiplicity difference $c$-$uds$ for $K^\pm$ XLabel= YLabel=$\delta_{cl}^{K^\pm}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d25-x03-y01 Title=Multiplicity difference $c$-$uds$ for $K^0,\bar K^0$ XLabel= YLabel=$\delta_{cl}^{K^0,\bar K^0}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d25-x04-y01 Title=Multiplicity difference $c$-$uds$ for $K^{*0},\bar K^{*0}$ XLabel= YLabel=$\delta_{cl}^{K^{*0},\bar K^{*0}}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d25-x05-y01 Title=Multiplicity difference $c$-$uds$ for $\phi$ XLabel= YLabel=$\delta_{cl}^{\phi}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d25-x06-y01 Title=Multiplicity difference $c$-$uds$ for $p,\bar p$ XLabel= YLabel=$\delta_{cl}^{p,\bar p}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d25-x07-y01 Title=Multiplicity difference $c$-$uds$ for $\Lambda^0, \bar \Lambda^0$ XLabel= YLabel=$\delta_{cl}^{\Lambda^0, \bar \Lambda^0}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d25-x01-y02 Title=Multiplicity difference $b$-$uds$ for $\pi^\pm$ XLabel= YLabel=$\delta_{cl}^{\pi^\pm}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d25-x02-y02 Title=Multiplicity difference $b$-$uds$ for $K^\pm$ XLabel= YLabel=$\delta_{cl}^{K^\pm}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d25-x03-y02 Title=Multiplicity difference $b$-$uds$ for $K^0,\bar K^0$ XLabel= YLabel=$\delta_{cl}^{K^0,\bar K^0}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d25-x04-y02 Title=Multiplicity difference $b$-$uds$ for $K^{*0},\bar K^{*0}$ XLabel= YLabel=$\delta_{cl}^{K^{*0},\bar K^{*0}}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d25-x05-y02 Title=Multiplicity difference $b$-$uds$ for $\phi$ XLabel= YLabel=$\delta_{cl}^{\phi}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d25-x06-y02 Title=Multiplicity difference $b$-$uds$ for $p,\bar p$ XLabel= YLabel=$\delta_{cl}^{p,\bar p}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1999_S3743934/d25-x07-y02 Title=Multiplicity difference $b$-$uds$ for $\Lambda^0, \bar \Lambda^0$ XLabel= YLabel=$\delta_{cl}^{\Lambda^0, \bar \Lambda^0}$ LegendXPos=0.20 LegendYPos=0.5 FullRange=1 LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/H1_1994_S2919893.plot0000644000175000017500000000274712116077756016552 0ustar sunsun# BEGIN PLOT /H1_1994_S2919893/d01-x01-y01 Title=Transverse energy flow as a function of rapidity, $x < 10^{-3}$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV # END PLOT # BEGIN PLOT /H1_1994_S2919893/d01-x01-y02 Title=Transverse energy flow as a function of rapidity, $x > 10^{-3}$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV # END PLOT # BEGIN PLOT /H1_1994_S2919893/d02-x01-y01 Title=Transverse energy--energy correlation for $x < 10^{-3}$ XLabel=$\omega$ YLabel=$\mathrm{d}{\text{EEC}_\perp}/\mathrm{d}{\omega}$ # END PLOT # BEGIN PLOT /H1_1994_S2919893/d02-x01-y02 Title=Transverse energy--energy correlation for $x > 10^{-3}$ XLabel=$\omega$ YLabel=$\mathrm{d}{\text{EEC}_\perp}/\mathrm{d}{\omega}$ # END PLOT # BEGIN PLOT /H1_1994_S2919893/d03-x01-y01 Title=$50 < W < 100$ XLabel=$x_L$ YLabel=$1/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{x_L}$ # END PLOT # BEGIN PLOT /H1_1994_S2919893/d03-x01-y02 Title=$100 < W < 150$ XLabel=$x_L$ YLabel=$1/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{x_L}$ # END PLOT # BEGIN PLOT /H1_1994_S2919893/d03-x01-y03 Title=$150 < W < 200$ XLabel=$x_L$ YLabel=$1/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{x_L}$ # END PLOT # BEGIN PLOT /H1_1994_S2919893/d03-x01-y04 Title=all $W$ XLabel=$x_L$ YLabel=$1/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{x_L}$ # END PLOT # BEGIN PLOT /H1_1994_S2919893/d04-x01-y01 Title=$\langle p_\perp^2 \rangle$ as a function of $x_L$ XLabel=$x_L$ YLabel=$\langle p_\perp^2 \rangle$ # END PLOT rivet-1.8.3/data/plotinfo/MC_LEADJETUE.plot0000644000175000017500000000250712116077756016414 0ustar sunsun# BEGIN PLOT /MC_LEADJETUE/trans-nchg Title=Transverse region charged particle density XLabel=Leading jet $p_\perp$ / GeV YLabel=$\mathrm{d}{N_\text{ch}}/\mathrm{d}{\phi}$ LogY=0 # END PLOT # BEGIN PLOT /MC_LEADJETUE/trans-maxnchg Title=TransMAX region charged particle density XLabel=Leading jet $p_\perp$ / GeV YLabel=$\mathrm{d}{N_\text{ch}}/\mathrm{d}{\phi}$ LogY=0 # END PLOT # BEGIN PLOT /MC_LEADJETUE/trans-minnchg Title=TransMIN region charged particle density XLabel=Leading jet $p_\perp$ / GeV YLabel=$\mathrm{d}{N_\text{ch}}/\mathrm{d}{\phi}$ LogY=0 # END PLOT # BEGIN PLOT /MC_LEADJETUE/trans-ptsum Title=Transverse region charged pT sum density XLabel=Leading jet $p_\perp$ / GeV YLabel=$\mathrm{d}{\sum p_\perp^\text{sum}}/\mathrm{d}{\phi}$ LogY=0 # END PLOT # BEGIN PLOT /MC_LEADJETUE/trans-maxptsum Title=TransMAX region charged pT sum density XLabel=Leading jet $p_\perp$ / GeV YLabel=$\mathrm{d}{\sum p_\perp^\text{sum}}/\mathrm{d}{\phi}$ LogY=0 # END PLOT # BEGIN PLOT /MC_LEADJETUE/trans-minptsum Title=TransMIN region charged pT sum density XLabel=Leading jet $p_\perp$ / GeV YLabel=$\mathrm{d}{\sum p_\perp^\text{sum}}/\mathrm{d}{\phi}$ LogY=0 # END PLOT # BEGIN PLOT /MC_LEADJETUE/trans-ptavg Title=Transverse region charged pT average XLabel=Leading jet $p_\perp$ / GeV YLabel=$\langle p_\perp \rangle$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/CMS_2011_S9088458.plot0000644000175000017500000000025412116077756016671 0ustar sunsun# BEGIN PLOT /CMS_2011_S9088458/d01-x01-y01 Title=3 jets over 2 jets ratio XLabel=H$_{T}$ [TeV] YLabel=R$_{32}$ FullRange=1 LogY=0 LegendYPos=0.4 LegendXPos=0.5 # END PLOT rivet-1.8.3/data/plotinfo/MC_HKTSPLITTINGS.plot0000644000175000017500000000367612116077756017171 0ustar sunsun# BEGIN PLOT /MC_HKTSPLITTINGS/log10_R_0 Title=$\log_{10}$(Integrated $0$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{0}$ Rebin=2 LegendYPos=0.8 LegendXPos=0.75 # END PLOT # BEGIN PLOT /MC_HKTSPLITTINGS/log10_R_1 Title=$\log_{10}$(Integrated $1$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{1}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_HKTSPLITTINGS/log10_R_2 Title=$\log_{10}$(Integrated $2$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{2}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_HKTSPLITTINGS/log10_R_3 Title=$\log_{10}$(Integrated $3$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{3}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_HKTSPLITTINGS/log10_R_4 Title=$\log_{10}$(Integrated $4$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{\geq4}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_HKTSPLITTINGS/log10_d_01 Title=$\log_{10}$($k_\perp$ jet resolution $0 \to 1$ [GeV]) XLabel=$\log_{10}(d_{01}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{01}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_HKTSPLITTINGS/log10_d_12 Title=$\log_{10}$($k_\perp$ jet resolution $1 \to 2$ [GeV]) XLabel=$\log_{10}(d_{12}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{12}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_HKTSPLITTINGS/log10_d_23 Title=$\log_{10}$($k_\perp$ jet resolution $2 \to 3$ [GeV]) XLabel=$\log_{10}(d_{23}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{23}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_HKTSPLITTINGS/log10_d_34 Title=$\log_{10}$($k_\perp$ jet resolution $3 \to 4$ [GeV]) XLabel=$\log_{10}(d_{34}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{34}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT rivet-1.8.3/data/plotinfo/OPAL_1996_S3257789.plot0000644000175000017500000000061312116100006016774 0ustar sunsun# BEGIN PLOT /OPAL_1996_S3257789/d01-x01-y01 Title=$J/\psi$ scaled momentum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_p/0.1$ # END PLOT # BEGIN PLOT /OPAL_1996_S3257789/d02-x01-y01 Title=$J/\psi$ Multiplicity XLabel=$x_p$ YLabel=$N_{J\psi}$ # END PLOT # BEGIN PLOT /OPAL_1996_S3257789/d02-x01-y02 Title=$\psi^\prime$ Multiplicity XLabel=$x_p$ YLabel=$N_{\psi^\prime}$ # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2013_I1217867.plot0000644000175000017500000000554512116077756017101 0ustar sunsun# BEGIN PLOT /ATLAS_2013_I1217867/.* RatioPlotYMin=0.001 RatioPlotYMax=1.999 # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d01.* XLabel=$\sqrt{d_{0}}$ [GeV] YLabel=$1/\sigma$ d$\sigma$/d$\sqrt{d_{0}}$ [1/GeV] LegendXPos=0.1 LegendYPos=0.6 LogX=1 # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d02.* XLabel=$\sqrt{d_{1}}$ [GeV] YLabel=$1/\sigma$ d$\sigma$/d$\sqrt{d_{1}}$ [1/GeV] LegendXPos=0.1 LegendYPos=0.6 LogX=1 # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d03.* XLabel=$\sqrt{d_{2}}$ [GeV] YLabel=$1/\sigma$ d$\sigma$/d$\sqrt{d_{2}}$ [1/GeV] LegendXPos=0.1 LegendYPos=0.6 LogX=1 # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d04.* XLabel=$\sqrt{d_{3}}$ [GeV] YLabel=$1/\sigma$ d$\sigma$/d$\sqrt{d_{3}}$ [1/GeV] LegendXPos=0.1 LegendYPos=0.6 LogX=1 # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d05.* XLabel=$\sqrt{d_{1}/d_{0}}$ YLabel=$1/\sigma$ d$\sigma$/d$\sqrt{d_{1}/d_{0}}$ LegendXPos=0.05 LogX=1 LogY=0 YMax=4.0 # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d06.* XLabel=$\sqrt{d_{2}/d_{1}}$ YLabel=$1/\sigma$ d$\sigma$/d$\sqrt{d_{2}/d_{1}}$ LegendXPos=0.05 LogX=1 LogY=0 YMax=3.0 # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d07.* XLabel=$\sqrt{d_{3}/d_{2}}$ YLabel=$1/\sigma$ d$\sigma$/d$\sqrt{d_{3}/d_{2}}$ LegendXPos=0.05 LogX=1 LogY=0 YMax=3.0 # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d01-x01-y01 Title=$k_\perp$ scale of $0\to 1$ clustering ($W\to e\nu$) # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d02-x01-y01 Title=$k_\perp$ scale of $1\to 2$ clustering ($W\to e\nu$) # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d03-x01-y01 Title=$k_\perp$ scale of $2\to 3$ clustering ($W\to e\nu$) # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d04-x01-y01 Title=$k_\perp$ scale of $3\to 4$ clustering ($W\to e\nu$) # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d05-x01-y01 Title=Ratio of subsequent clustering scales ($W\to e\nu$) # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d06-x01-y01 Title=Ratio of subsequent clustering scales ($W\to e\nu$) # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d07-x01-y01 Title=Ratio of subsequent clustering scales ($W\to e\nu$) # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d01-x01-y02 Title=$k_\perp$ scale of $0\to 1$ clustering ($W\to \mu\nu$) # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d02-x01-y02 Title=$k_\perp$ scale of $1\to 2$ clustering ($W\to \mu\nu$) # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d03-x01-y02 Title=$k_\perp$ scale of $2\to 3$ clustering ($W\to \mu\nu$) # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d04-x01-y02 Title=$k_\perp$ scale of $3\to 4$ clustering ($W\to \mu\nu$) # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d05-x01-y02 Title=Ratio of subsequent clustering scales ($W\to \mu\nu$) # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d06-x01-y02 Title=Ratio of subsequent clustering scales ($W\to \mu\nu$) # END PLOT # BEGIN PLOT /ATLAS_2013_I1217867/d07-x01-y02 Title=Ratio of subsequent clustering scales ($W\to \mu\nu$) # END PLOT rivet-1.8.3/data/plotinfo/CDF_1993_S2742446.plot0000644000175000017500000000032112116077756016643 0ustar sunsun# BEGIN PLOT /CDF_1993_S2742446/d01-x01-y01 Title=Angular distribution of prompt photons XLabel=$|\cos\theta^*|=|\tanh((\eta_j-\eta_\gamma)/2.0)|$ YLabel=$\mathrm{d}N/\mathrm{d}\cos\theta^*$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/BABAR_2005_S6181155.plot0000644000175000017500000000313512116077756017043 0ustar sunsun# BEGIN PLOT /BABAR_2005_S6181155/d01-x01-y01 Title=$\sigma(e^+e^-\to \Xi_c^0+\bar{\Xi}_c^0+X)$ with $\Xi_c^0\to\Xi^-\pi^+$ at the $\Upsilon(4S)$ XLabel=$p_{\Xi_c^0}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_{\Xi_c^0}$ [fb/GeV] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2005_S6181155/d02-x01-y01 Title=$\sigma(e^+e^-\to \Xi_c^0+\bar{\Xi}_c^0+X)$ with $\Xi_c^0\to\Xi^-\pi^+$ at the $\Upsilon(4S)$ XLabel=$p_{\Xi_c^0}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_{\Xi_c^0}$ [fb/GeV] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2005_S6181155/d02-x01-y02 Title=$\sigma(e^+e^-\to \Xi_c^0+\bar{\Xi}_c^0+X)$ with $\Xi_c^0\to\Xi^-\pi^+$ in the continuum region XLabel=$p_{\Xi_c^0}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_{\Xi_c^0}$ [fb/GeV] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2005_S6181155/d03-x01-y01 Title=$\sigma(e^+e^-\to \Xi_c^0+\bar{\Xi}_c^0+X)$ with $\Xi_c^0\to\Xi^-\pi^+$ XLabel=$\sqrt{s}$ [GeV] YLabel=$\sigma$ [fb] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2005_S6181155/d04-x01-y01 Title=$\sigma(e^+e^-\to \Xi_c^0+\bar{\Xi}_c^0+X)$ at the $\Upsilon(4S)$ XLabel=$p_{\Xi_c^0}$ [GeV] YLabel=$1/\sigma\text{d}\sigma/\text{d}p_{\Xi_c^0}$ [$\text{GeV}^{-1}$] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2005_S6181155/d05-x01-y01 Title=$\sigma(e^+e^-\to \Xi_c^0+\bar{\Xi}_c^0+X)$ at the $\Upsilon(4S)$ XLabel=$p_{\Xi_c^0}$ [GeV] YLabel=$1/\sigma\text{d}\sigma/\text{d}p_{\Xi_c^0}$ [$\text{GeV}^{-1}$] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2005_S6181155/d05-x01-y02 Title=$\sigma(e^+e^-\to \Xi_c^0+\bar{\Xi}_c^0+X)$ in the continuum region XLabel=$p_{\Xi_c^0}$ [GeV] YLabel=$1/\sigma\text{d}\sigma/\text{d}p_{\Xi_c^0}$ [$\text{GeV}^{-1}$] LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/CDF_2007_S7057202.plot0000644000175000017500000000302312116077756016622 0ustar sunsun# BEGIN PLOT /CDF_2007_S7057202/d01-x01-y01 Title=Inclusive jet cross-section vs $p_T$ for $|\eta| < 0.1, D=0.7$ XLabel=Jet $p_T$ [GeV] YLabel=$\mathrm{d}^2\sigma/\mathrm{d}p_T\mathrm{d}y$ [nb/GeV] LogX=1 # END PLOT # BEGIN PLOT /CDF_2007_S7057202/d02-x01-y01 Title=Inclusive jet cross-section vs $p_T$ for $0.1 < |\eta| < 0.7, D=0.7$ XLabel=Jet $p_T$ [GeV] YLabel=$\mathrm{d}^2\sigma/\mathrm{d}p_T\mathrm{d}y$ [nb/GeV] LogX=1 # END PLOT # BEGIN PLOT /CDF_2007_S7057202/d03-x01-y01 Title=Inclusive jet cross-section vs $p_T$ for $0.7 < |\eta| < 1.1, D=0.7$ XLabel=Jet $p_T$ [GeV] YLabel=$\mathrm{d}^2\sigma/\mathrm{d}p_T\mathrm{d}y$ [nb/GeV] LogX=1 # END PLOT # BEGIN PLOT /CDF_2007_S7057202/d04-x01-y01 Title=Inclusive jet cross-section vs $p_T$ for $1.1 < |\eta| < 1.6, D=0.7$ XLabel=Jet $p_T$ [GeV] YLabel=$\mathrm{d}^2\sigma/\mathrm{d}p_T\mathrm{d}y$ [nb/GeV] LogX=1 # END PLOT # BEGIN PLOT /CDF_2007_S7057202/d05-x01-y01 Title=Inclusive jet cross-section vs $p_T$ for $1.6 < |\eta| < 2.1, D=0.7$ XLabel=Jet $p_T$ [GeV] YLabel=$\mathrm{d}^2\sigma/\mathrm{d}p_T\mathrm{d}y$ [nb/GeV] LogX=1 # END PLOT # BEGIN PLOT /CDF_2007_S7057202/d06-x01-y01 Title=Inclusive jet cross-section vs $p_T$ for $0.1 < |\eta| < 0.7, D=0.5$ XLabel=Jet $p_T$ [GeV] YLabel=$\mathrm{d}^2\sigma/\mathrm{d}p_T\mathrm{d}y$ [nb/GeV] LogX=1 # END PLOT # BEGIN PLOT /CDF_2007_S7057202/d07-x01-y01 Title=Inclusive jet cross-section vs $p_T$ for $0.1 < |\eta| < 0.7, D=1.0$ XLabel=Jet $p_T$ [GeV] YLabel=$\mathrm{d}^2\sigma/\mathrm{d}p_T\mathrm{d}y$ [nb/GeV] LogX=1 # END PLOT rivet-1.8.3/data/plotinfo/ALEPH_1991_S2435284.plot0000644000175000017500000000031712116077756017102 0ustar sunsun# BEGIN PLOT /ALEPH_1991_S2435284/d01-x01-y01 Title=Total charged multiplicity XLabel=$n_\text{ch}$ YLabel=$2/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{n_\text{ch}}$ LegendXPos=0.25 LegendYPos=0.7 # END PLOT rivet-1.8.3/data/plotinfo/OPAL_1998_S3749908.plot0000644000175000017500000000420112116077756017023 0ustar sunsun# BEGIN PLOT /OPAL_1998_S3749908/d02-x01-y01 Title=Photon scaled momentum XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_E$ # END PLOT # BEGIN PLOT /OPAL_1998_S3749908/d03-x01-y01 Title=Photon scaled momentum XLabel=$\ln(1/x_p)$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\ln(1/x_p)$ # END PLOT # BEGIN PLOT /OPAL_1998_S3749908/d04-x01-y01 Title=$\pi^0$ scaled momentum XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_E$ # END PLOT # BEGIN PLOT /OPAL_1998_S3749908/d05-x01-y01 Title=$\pi^0$ scaled momentum XLabel=$\ln(1/x_p)$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\ln(1/x_p)$ # END PLOT # BEGIN PLOT /OPAL_1998_S3749908/d06-x01-y01 Title=$\eta$ scaled momentum XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_E$ # END PLOT # BEGIN PLOT /OPAL_1998_S3749908/d07-x01-y01 Title=$\eta$ scaled momentum XLabel=$\ln(1/x_p)$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\ln(1/x_p)$ # END PLOT # BEGIN PLOT /OPAL_1998_S3749908/d08-x01-y01 Title=$\rho^\pm$ scaled momentum XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_E$ # END PLOT # BEGIN PLOT /OPAL_1998_S3749908/d09-x01-y01 Title=$\rho^\pm$ scaled momentum XLabel=$\ln(1/x_p)$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\ln(1/x_p)$ # END PLOT # BEGIN PLOT /OPAL_1998_S3749908/d10-x01-y01 Title=$\omega$ scaled momentum XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_E$ # END PLOT # BEGIN PLOT /OPAL_1998_S3749908/d11-x01-y01 Title=$\omega$ scaled momentum XLabel=$\ln(1/x_p)$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\ln(1/x_p)$ # END PLOT # BEGIN PLOT /OPAL_1998_S3749908/d12-x01-y01 Title=$\eta'$ scaled momentum XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_E$ # END PLOT # BEGIN PLOT /OPAL_1998_S3749908/d13-x01-y01 Title=$\eta'$ scaled momentum XLabel=$\ln(1/x_p)$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\ln(1/x_p)$ # END PLOT # BEGIN PLOT /OPAL_1998_S3749908/d14-x01-y01 Title=$a_0^\pm$ scaled momentum XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}x_E$ # END PLOT # BEGIN PLOT /OPAL_1998_S3749908/d15-x01-y01 Title=$a_0^\pm$ scaled momentum XLabel=$\ln(1/x_p)$ YLabel=$1/\sigma \, \text{d}\sigma/\text{d}\ln(1/x_p)$ # END PLOT rivet-1.8.3/data/plotinfo/CDF_2006_S6450792.plot0000644000175000017500000000042312116077756016634 0ustar sunsun# BEGIN PLOT /CDF_2006_S6450792/d01-x01-y01 Title=Inclusive jet differential cross section (hadron level) XLabel=$p_{\perp,\text{jet}}$ (GeV/c) YLabel=$\mathrm{d}^2\sigma/\mathrm{d}y\mathrm{d}p_{\perp}$ [nb/(Gev/c)] YLabelSep=6.0 LogY=1 LogX=1 YMin=1e-8 YMax=99.0 # END PLOT rivet-1.8.3/data/plotinfo/MC_KTSPLITTINGS.plot0000644000175000017500000000366512116077756017057 0ustar sunsun# BEGIN PLOT /MC_KTSPLITTINGS/log10_R_0 Title=$\log_{10}$(Integrated $0$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{0}$ Rebin=2 LegendYPos=0.8 LegendXPos=0.75 # END PLOT # BEGIN PLOT /MC_KTSPLITTINGS/log10_R_1 Title=$\log_{10}$(Integrated $1$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{1}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_KTSPLITTINGS/log10_R_2 Title=$\log_{10}$(Integrated $2$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{2}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_KTSPLITTINGS/log10_R_3 Title=$\log_{10}$(Integrated $3$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{3}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_KTSPLITTINGS/log10_R_4 Title=$\log_{10}$(Integrated $4$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{\geq4}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_KTSPLITTINGS/log10_d_01 Title=$\log_{10}$($k_\perp$ jet resolution $0 \to 1$ [GeV]) XLabel=$\log_{10}(d_{01}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{01}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_KTSPLITTINGS/log10_d_12 Title=$\log_{10}$($k_\perp$ jet resolution $1 \to 2$ [GeV]) XLabel=$\log_{10}(d_{12}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{12}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_KTSPLITTINGS/log10_d_23 Title=$\log_{10}$($k_\perp$ jet resolution $2 \to 3$ [GeV]) XLabel=$\log_{10}(d_{23}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{23}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_KTSPLITTINGS/log10_d_34 Title=$\log_{10}$($k_\perp$ jet resolution $3 \to 4$ [GeV]) XLabel=$\log_{10}(d_{34}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{34}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT rivet-1.8.3/data/plotinfo/D0_2001_S4674421.plot0000644000175000017500000000101512116077756016467 0ustar sunsun# BEGIN PLOT /D0_2001_S4674421/d01-x01-y01 Title=$\mathrm{d}{\sigma} / \mathrm{d}{p_\perp(W)}$ XLabel=$p_\perp$ / GeV/$c$ YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{p_\perp(W)}$ # END PLOT # BEGIN PLOT /D0_2001_S4674421/d01-x01-y02 Title=$\mathrm{d}{\sigma} / \mathrm{d}{p_\perp(Z)}$ XLabel=$p_\perp$ / GeV/$c$ YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{p_\perp(Z)}$ # END PLOT # BEGIN PLOT /D0_2001_S4674421/d02-x01-y01 Title=$W/Z$ differential cross section ratio XLabel=$p_\perp$ / GeV/$c$ YLabel=$R_{p_\perp}$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/CMS_2012_I1184941.plot0000644000175000017500000000043212116077756016640 0ustar sunsun# BEGIN PLOT /CMS_2012_I1184941/d01-x01-y01 Title=$\sqrt{s}=7$ TeV, $pp \to \text{jet}_{1}\text{jet}_{2}$, $|\eta^{j_1,j_2}|<4.4$, $p_{T}^{j_1,j_2} > 20$ GeV XLabel=$\xi$ YLabel=$\mathrm{d}{\sigma_{jj}}/\mathrm{d}{\xi}$ [$\mu$b] FullRange=1 LogX=1 LogY=1 LegendXPos=0.08 # END PLOT rivet-1.8.3/data/plotinfo/D0_2010_S8821313.plot0000644000175000017500000000175212116077756016475 0ustar sunsun# BEGIN PLOT /D0_2010_S8821313/d.* LegendXPos=0.1 LegendYPos=0.5 # END PLOT # BEGIN PLOT /D0_2010_S8821313/d01-x01-y01 Title=Electron channel ($|y_Z|<1$) XLabel=$\phi^*_\eta$ YLabel=$1/\sigma\;\mathrm{d}\sigma/\mathrm{d}\phi^*_\eta$ LogX=1 XMin=5e-3 # END PLOT # BEGIN PLOT /D0_2010_S8821313/d01-x01-y02 Title=Electron channel ($1<|y_Z|<2$) XLabel=$\phi^*_\eta$ YLabel=$1/\sigma\;\mathrm{d}\sigma/\mathrm{d}\phi^*_\eta$ LogX=1 XMin=5e-3 # END PLOT # BEGIN PLOT /D0_2010_S8821313/d01-x01-y03 Title=Electron channel ($|y_Z|>2$) XLabel=$\phi^*_\eta$ YLabel=$1/\sigma\;\mathrm{d}\sigma/\mathrm{d}\phi^*_\eta$ LogX=1 XMin=5e-3 # END PLOT # BEGIN PLOT /D0_2010_S8821313/d02-x01-y01 Title=Muon channel ($|y_Z|<1$) XLabel=$\phi^*_\eta$ YLabel=$1/\sigma\;\mathrm{d}\sigma/\mathrm{d}\phi^*_\eta$ LogX=1 XMin=5e-3 # END PLOT # BEGIN PLOT /D0_2010_S8821313/d02-x01-y02 Title=Muon channel ($1<|y_Z|<2$) XLabel=$\phi^*_\eta$ YLabel=$1/\sigma\;\mathrm{d}\sigma/\mathrm{d}\phi^*_\eta$ LogX=1 XMin=5e-3 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_I1118269.plot0000644000175000017500000000063112116077756017063 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1118269/d01-x01-y01 Title=$b$ hadron $p_\perp$ at $\sqrt{s}=7$ TeV XLabel=$p_\perp(H_b)$ [GeV] YLabel=$\mathrm{d}\sigma(H_bX)/\mathrm{d} p_\perp(H_b)$ [nb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2012_I1118269/d02-x01-y01 Title=$b$ hadron $\eta$ at $\sqrt{s}=7$ TeV XLabel=$|\eta|(H_b)$ YLabel=$\mathrm{d}\sigma(H_bX) / \mathrm{d}|\eta|(H_b)$ [$\mu$b] LogY=0 LegendYPos=0.4 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_I1125575.plot0000644000175000017500000013506312116077756017071 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1125575/d0[123]-x..-y.. XLabel=$p_\perp^\text{jet}$ [GeV] LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d01-x..-y.. YLabel=$\langle N_\text{ch} \rangle / \Delta\eta \Delta\phi$ LegendYPos=0.5 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d02-x..-y.. YLabel=$\langle p_\perp \rangle$ [GeV] LegendYPos=0.5 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d03-x..-y.. YLabel=$\langle \sum p_\perp \rangle / \Delta\eta \Delta\phi$ LegendYPos=0.5 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d01-x01-y01 Title=Mean $N_\text{ch}$ vs. leading jet $p_\perp$, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d01-x01-y02 Title=Mean $N_\text{ch}$ vs. leading jet $p_\perp$, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d01-x02-y01 Title=Mean $N_\text{ch}$ vs. leading jet $p_\perp$, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d01-x02-y02 Title=Mean $N_\text{ch}$ vs. leading jet $p_\perp$, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d01-x03-y01 Title=Mean $N_\text{ch}$ vs. leading jet $p_\perp$, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d01-x03-y02 Title=Mean $N_\text{ch}$ vs. leading jet $p_\perp$, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d01-x04-y01 Title=Mean $N_\text{ch}$ vs. leading jet $p_\perp$, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d01-x04-y02 Title=Mean $N_\text{ch}$ vs. leading jet $p_\perp$, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d01-x05-y01 Title=Mean $N_\text{ch}$ vs. leading jet $p_\perp$, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d01-x05-y02 Title=Mean $N_\text{ch}$ vs. leading jet $p_\perp$, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d02-x01-y01 Title=Mean $p_\perp$ vs. leading jet $p_\perp$, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d02-x01-y02 Title=Mean $p_\perp$ vs. leading jet $p_\perp$, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d02-x02-y01 Title=Mean $p_\perp$ vs. leading jet $p_\perp$, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d02-x02-y02 Title=Mean $p_\perp$ vs. leading jet $p_\perp$, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d02-x03-y01 Title=Mean $p_\perp$ vs. leading jet $p_\perp$, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d02-x03-y02 Title=Mean $p_\perp$ vs. leading jet $p_\perp$, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d02-x04-y01 Title=Mean $p_\perp$ vs. leading jet $p_\perp$, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d02-x04-y02 Title=Mean $p_\perp$ vs. leading jet $p_\perp$, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d02-x05-y01 Title=Mean $p_\perp$ vs. leading jet $p_\perp$, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d02-x05-y02 Title=Mean $p_\perp$ vs. leading jet $p_\perp$, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d03-x01-y01 Title=Mean $\sum p_\perp$ vs. leading jet $p_\perp$, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d03-x01-y02 Title=Mean $\sum p_\perp$ vs. leading jet $p_\perp$, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d03-x02-y01 Title=Mean $\sum p_\perp$ vs. leading jet $p_\perp$, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d03-x02-y02 Title=Mean $\sum p_\perp$ vs. leading jet $p_\perp$, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d03-x03-y01 Title=Mean $\sum p_\perp$ vs. leading jet $p_\perp$, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d03-x03-y02 Title=Mean $\sum p_\perp$ vs. leading jet $p_\perp$, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d03-x04-y01 Title=Mean $\sum p_\perp$ vs. leading jet $p_\perp$, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d03-x04-y02 Title=Mean $\sum p_\perp$ vs. leading jet $p_\perp$, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d03-x05-y01 Title=Mean $\sum p_\perp$ vs. leading jet $p_\perp$, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d03-x05-y02 Title=Mean $\sum p_\perp$ vs. leading jet $p_\perp$, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x..-y.. XLabel=$N_\text{ch}$ YLabel=$1 / N_{\text{ev}} \,\, \mathrm{d}N_{\text{ev}} / \mathrm{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x..-y.. XLabel=$p_\perp$ YLabel=$1 / N_{\text{ev}} \,\, \mathrm{d}N_{\text{ev}} / \mathrm{d}p_\perp$ # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x..-y.. XLabel=$\sum p_\perp$ YLabel=$1 / N_{\text{ev}} \,\, \mathrm{d}N_{\text{ev}} / \mathrm{d}\sum p_\perp$ # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y01 Title=$N_\text{ch}$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y02 Title=$N_\text{ch}$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y03 Title=$N_\text{ch}$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y04 Title=$N_\text{ch}$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y05 Title=$N_\text{ch}$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y06 Title=$N_\text{ch}$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y07 Title=$N_\text{ch}$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y08 Title=$N_\text{ch}$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y09 Title=$N_\text{ch}$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y10 Title=$N_\text{ch}$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y11 Title=$N_\text{ch}$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y12 Title=$N_\text{ch}$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y13 Title=$N_\text{ch}$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y14 Title=$N_\text{ch}$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y15 Title=$N_\text{ch}$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y16 Title=$N_\text{ch}$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y17 Title=$N_\text{ch}$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y18 Title=$N_\text{ch}$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y19 Title=$N_\text{ch}$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x01-y20 Title=$N_\text{ch}$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y01 Title=$N_\text{ch}$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y02 Title=$N_\text{ch}$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y03 Title=$N_\text{ch}$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y04 Title=$N_\text{ch}$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y05 Title=$N_\text{ch}$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y06 Title=$N_\text{ch}$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y07 Title=$N_\text{ch}$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y08 Title=$N_\text{ch}$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y09 Title=$N_\text{ch}$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y10 Title=$N_\text{ch}$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y11 Title=$N_\text{ch}$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y12 Title=$N_\text{ch}$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y13 Title=$N_\text{ch}$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y14 Title=$N_\text{ch}$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y15 Title=$N_\text{ch}$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y16 Title=$N_\text{ch}$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y17 Title=$N_\text{ch}$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y18 Title=$N_\text{ch}$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y19 Title=$N_\text{ch}$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x02-y20 Title=$N_\text{ch}$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y01 Title=$N_\text{ch}$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y02 Title=$N_\text{ch}$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y03 Title=$N_\text{ch}$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y04 Title=$N_\text{ch}$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y05 Title=$N_\text{ch}$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y06 Title=$N_\text{ch}$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y07 Title=$N_\text{ch}$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y08 Title=$N_\text{ch}$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y09 Title=$N_\text{ch}$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y10 Title=$N_\text{ch}$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y11 Title=$N_\text{ch}$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y12 Title=$N_\text{ch}$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y13 Title=$N_\text{ch}$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y14 Title=$N_\text{ch}$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y15 Title=$N_\text{ch}$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y16 Title=$N_\text{ch}$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y17 Title=$N_\text{ch}$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y18 Title=$N_\text{ch}$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y19 Title=$N_\text{ch}$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x03-y20 Title=$N_\text{ch}$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y01 Title=$N_\text{ch}$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y02 Title=$N_\text{ch}$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y03 Title=$N_\text{ch}$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y04 Title=$N_\text{ch}$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y05 Title=$N_\text{ch}$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y06 Title=$N_\text{ch}$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y07 Title=$N_\text{ch}$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y08 Title=$N_\text{ch}$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y09 Title=$N_\text{ch}$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y10 Title=$N_\text{ch}$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y11 Title=$N_\text{ch}$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y12 Title=$N_\text{ch}$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y13 Title=$N_\text{ch}$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y14 Title=$N_\text{ch}$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y15 Title=$N_\text{ch}$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y16 Title=$N_\text{ch}$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y17 Title=$N_\text{ch}$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y18 Title=$N_\text{ch}$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y19 Title=$N_\text{ch}$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x04-y20 Title=$N_\text{ch}$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y01 Title=$N_\text{ch}$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y02 Title=$N_\text{ch}$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y03 Title=$N_\text{ch}$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y04 Title=$N_\text{ch}$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y05 Title=$N_\text{ch}$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y06 Title=$N_\text{ch}$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y07 Title=$N_\text{ch}$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y08 Title=$N_\text{ch}$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y09 Title=$N_\text{ch}$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y10 Title=$N_\text{ch}$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y11 Title=$N_\text{ch}$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y12 Title=$N_\text{ch}$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y13 Title=$N_\text{ch}$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y14 Title=$N_\text{ch}$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y15 Title=$N_\text{ch}$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y16 Title=$N_\text{ch}$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y17 Title=$N_\text{ch}$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y18 Title=$N_\text{ch}$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y19 Title=$N_\text{ch}$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d04-x05-y20 Title=$N_\text{ch}$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y01 Title=$p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y02 Title=$p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y03 Title=$p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y04 Title=$p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y05 Title=$p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y06 Title=$p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y07 Title=$p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y08 Title=$p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y09 Title=$p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y10 Title=$p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y11 Title=$p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y12 Title=$p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y13 Title=$p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y14 Title=$p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y15 Title=$p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y16 Title=$p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y17 Title=$p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y18 Title=$p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y19 Title=$p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x01-y20 Title=$p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y01 Title=$p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y02 Title=$p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y03 Title=$p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y04 Title=$p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y05 Title=$p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y06 Title=$p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y07 Title=$p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y08 Title=$p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y09 Title=$p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y10 Title=$p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y11 Title=$p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y12 Title=$p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y13 Title=$p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y14 Title=$p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y15 Title=$p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y16 Title=$p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y17 Title=$p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y18 Title=$p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y19 Title=$p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x02-y20 Title=$p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y01 Title=$p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y02 Title=$p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y03 Title=$p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y04 Title=$p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y05 Title=$p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y06 Title=$p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y07 Title=$p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y08 Title=$p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y09 Title=$p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y10 Title=$p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y11 Title=$p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y12 Title=$p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y13 Title=$p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y14 Title=$p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y15 Title=$p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y16 Title=$p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y17 Title=$p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y18 Title=$p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y19 Title=$p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x03-y20 Title=$p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y01 Title=$p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y02 Title=$p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y03 Title=$p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y04 Title=$p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y05 Title=$p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y06 Title=$p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y07 Title=$p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y08 Title=$p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y09 Title=$p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y10 Title=$p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y11 Title=$p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y12 Title=$p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y13 Title=$p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y14 Title=$p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y15 Title=$p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y16 Title=$p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y17 Title=$p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y18 Title=$p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y19 Title=$p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x04-y20 Title=$p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y01 Title=$p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y02 Title=$p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y03 Title=$p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y04 Title=$p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y05 Title=$p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y06 Title=$p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y07 Title=$p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y08 Title=$p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y09 Title=$p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y10 Title=$p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y11 Title=$p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y12 Title=$p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y13 Title=$p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y14 Title=$p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y15 Title=$p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y16 Title=$p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y17 Title=$p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y18 Title=$p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y19 Title=$p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d05-x05-y20 Title=$p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y01 Title=$\sum p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y02 Title=$\sum p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y03 Title=$\sum p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y04 Title=$\sum p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y05 Title=$\sum p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y06 Title=$\sum p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y07 Title=$\sum p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y08 Title=$\sum p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y09 Title=$\sum p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y10 Title=$\sum p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y11 Title=$\sum p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y12 Title=$\sum p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y13 Title=$\sum p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y14 Title=$\sum p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y15 Title=$\sum p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y16 Title=$\sum p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y17 Title=$\sum p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y18 Title=$\sum p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y19 Title=$\sum p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.2$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x01-y20 Title=$\sum p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.2$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y01 Title=$\sum p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y02 Title=$\sum p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y03 Title=$\sum p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y04 Title=$\sum p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y05 Title=$\sum p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y06 Title=$\sum p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y07 Title=$\sum p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y08 Title=$\sum p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y09 Title=$\sum p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y10 Title=$\sum p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y11 Title=$\sum p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y12 Title=$\sum p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y13 Title=$\sum p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y14 Title=$\sum p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y15 Title=$\sum p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y16 Title=$\sum p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y17 Title=$\sum p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y18 Title=$\sum p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y19 Title=$\sum p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.4$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x02-y20 Title=$\sum p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.4$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y01 Title=$\sum p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y02 Title=$\sum p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y03 Title=$\sum p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y04 Title=$\sum p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y05 Title=$\sum p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y06 Title=$\sum p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y07 Title=$\sum p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y08 Title=$\sum p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y09 Title=$\sum p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y10 Title=$\sum p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y11 Title=$\sum p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y12 Title=$\sum p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y13 Title=$\sum p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y14 Title=$\sum p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y15 Title=$\sum p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y16 Title=$\sum p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y17 Title=$\sum p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y18 Title=$\sum p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y19 Title=$\sum p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.6$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x03-y20 Title=$\sum p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.6$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y01 Title=$\sum p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y02 Title=$\sum p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y03 Title=$\sum p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y04 Title=$\sum p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y05 Title=$\sum p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y06 Title=$\sum p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y07 Title=$\sum p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y08 Title=$\sum p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y09 Title=$\sum p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y10 Title=$\sum p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y11 Title=$\sum p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y12 Title=$\sum p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y13 Title=$\sum p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y14 Title=$\sum p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y15 Title=$\sum p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y16 Title=$\sum p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y17 Title=$\sum p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y18 Title=$\sum p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y19 Title=$\sum p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.8$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x04-y20 Title=$\sum p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=0.8$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y01 Title=$\sum p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y02 Title=$\sum p_\perp$ for $4 \le p_\perp^\text{jet} < 5$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y03 Title=$\sum p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y04 Title=$\sum p_\perp$ for $5 \le p_\perp^\text{jet} < 6$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y05 Title=$\sum p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y06 Title=$\sum p_\perp$ for $6 \le p_\perp^\text{jet} < 8$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y07 Title=$\sum p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y08 Title=$\sum p_\perp$ for $8 \le p_\perp^\text{jet} < 11$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y09 Title=$\sum p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y10 Title=$\sum p_\perp$ for $11 \le p_\perp^\text{jet} < 14$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y11 Title=$\sum p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y12 Title=$\sum p_\perp$ for $14 \le p_\perp^\text{jet} < 19$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y13 Title=$\sum p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y14 Title=$\sum p_\perp$ for $19 \le p_\perp^\text{jet} < 24$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y15 Title=$\sum p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y16 Title=$\sum p_\perp$ for $24 \le p_\perp^\text{jet} < 31$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y17 Title=$\sum p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y18 Title=$\sum p_\perp$ for $31 \le p_\perp^\text{jet} < 50$ GeV, $R=1.0$, Transverse region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y19 Title=$\sum p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=1.0$, Away region # END PLOT # BEGIN PLOT /ATLAS_2012_I1125575/d06-x05-y20 Title=$\sum p_\perp$ for $50 \le p_\perp^\text{jet} < 100$ GeV, $R=1.0$, Transverse region # END PLOT rivet-1.8.3/data/plotinfo/SLD_2002_S4869273.plot0000644000175000017500000000027712116077756016673 0ustar sunsun# BEGIN PLOT /SLD_2002_S4869273/d01-x01-y01 Title=$b$ quark fragmentation function $f(x_B^\text{weak})$ XLabel=$x_B$ YLabel=$1/N \, \text{d}{N}/\text{d}x_B$ LegendYPos=0.60 LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/CMS_2012_I1087342.plot0000644000175000017500000000122312116077756016634 0ustar sunsun# BEGIN PLOT /CMS_2012_I1087342/d01-x01-y01 Title= Measurement of forward jets in pp collisions at $\sqrt{s}= 7$\,TeV XLabel=$p_{T}$ [GeV] YLabel=$\frac{d^2\sigma}{dp_{T}d\eta}$ [pb/GeV] FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /CMS_2012_I1087342/d02-x01-y01 Title= Measurement of forward+central jets at $\sqrt{s}= 7$\,TeV XLabel=Forward Jet $p_{T}$ [GeV] YLabel=$\frac{d^2\sigma}{dp_{T}d\eta}$ [pb/GeV] FullRange=1 LogY=1 # END PLOT # BEGIN PLOT /CMS_2012_I1087342/d03-x01-y01 Title= Measurement of forward+central jets at $\sqrt{s}= 7$\,TeV XLabel=Central Jet $p_{T}$ [GeV] YLabel=$\frac{d^2\sigma}{dp_{T}d\eta}$ [pb/GeV] FullRange=1 LogY=1 # END PLOT rivet-1.8.3/data/plotinfo/CDF_2005_S6217184.plot0000644000175000017500000001663012116077756016636 0ustar sunsun# BEGIN PLOT /CDF_2005_S6217184/d01-x01-y01 Title=Differential jet shape $\rho$, $37\,\text{GeV}/c < p_\perp^\text{jet} < 45\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d01-x01-y02 Title=Differential jet shape $\rho$, $45\,\text{GeV}/c < p_\perp^\text{jet} < 55\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d01-x01-y03 Title=Differential jet shape $\rho$, $55\,\text{GeV}/c < p_\perp^\text{jet} < 63\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d02-x01-y01 Title=Differential jet shape $\rho$, $63\,\text{GeV}/c < p_\perp^\text{jet} < 73\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d02-x01-y02 Title=Differential jet shape $\rho$, $73\,\text{GeV}/c < p_\perp^\text{jet} < 84\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d02-x01-y03 Title=Differential jet shape $\rho$, $84\,\text{GeV}/c < p_\perp^\text{jet} < 97\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d03-x01-y01 Title=Differential jet shape $\rho$, $97\,\text{GeV}/c < p_\perp^\text{jet} < 112\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d03-x01-y02 Title=Differential jet shape $\rho$, $112\,\text{GeV}/c < p_\perp^\text{jet} < 128\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d03-x01-y03 Title=Differential jet shape $\rho$, $128\,\text{GeV}/c < p_\perp^\text{jet} < 148\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d04-x01-y01 Title=Differential jet shape $\rho$, $148\,\text{GeV}/c < p_\perp^\text{jet} < 166\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d04-x01-y02 Title=Differential jet shape $\rho$, $166\,\text{GeV}/c < p_\perp^\text{jet} < 186\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d04-x01-y03 Title=Differential jet shape $\rho$, $186\,\text{GeV}/c < p_\perp^\text{jet} < 208\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d05-x01-y01 Title=Differential jet shape $\rho$, $208\,\text{GeV}/c < p_\perp^\text{jet} < 229\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d05-x01-y02 Title=Differential jet shape $\rho$, $229\,\text{GeV}/c < p_\perp^\text{jet} < 250\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d05-x01-y03 Title=Differential jet shape $\rho$, $250\,\text{GeV}/c < p_\perp^\text{jet} < 277\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d06-x01-y01 Title=Differential jet shape $\rho$, $277\,\text{GeV}/c < p_\perp^\text{jet} < 304\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d06-x01-y02 Title=Differential jet shape $\rho$, $304\,\text{GeV}/c < p_\perp^\text{jet} < 340\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d06-x01-y03 Title=Differential jet shape $\rho$, $340\,\text{GeV}/c < p_\perp^\text{jet} < 380\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\rho(r/R)$ # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d07-x01-y01 Title=Integral jet shape $\Psi$, $37\,\text{GeV}/c < p_\perp^\text{jet} < 45\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d07-x01-y02 Title=Integral jet shape $\Psi$, $45\,\text{GeV}/c < p_\perp^\text{jet} < 55\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d07-x01-y03 Title=Integral jet shape $\Psi$, $55\,\text{GeV}/c < p_\perp^\text{jet} < 63\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d08-x01-y01 Title=Integral jet shape $\Psi$, $63\,\text{GeV}/c < p_\perp^\text{jet} < 73\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d08-x01-y02 Title=Integral jet shape $\Psi$, $73\,\text{GeV}/c < p_\perp^\text{jet} < 84\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d08-x01-y03 Title=Integral jet shape $\Psi$, $84\,\text{GeV}/c < p_\perp^\text{jet} < 97\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d09-x01-y01 Title=Integral jet shape $\Psi$, $97\,\text{GeV}/c < p_\perp^\text{jet} < 112\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d09-x01-y02 Title=Integral jet shape $\Psi$, $112\,\text{GeV}/c < p_\perp^\text{jet} < 128\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d09-x01-y03 Title=Integral jet shape $\Psi$, $128\,\text{GeV}/c < p_\perp^\text{jet} < 148\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d10-x01-y01 Title=Integral jet shape $\Psi$, $148\,\text{GeV}/c < p_\perp^\text{jet} < 166\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d10-x01-y02 Title=Integral jet shape $\Psi$, $166\,\text{GeV}/c < p_\perp^\text{jet} < 186\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d10-x01-y03 Title=Integral jet shape $\Psi$, $186\,\text{GeV}/c < p_\perp^\text{jet} < 208\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d11-x01-y01 Title=Integral jet shape $\Psi$, $208\,\text{GeV}/c < p_\perp^\text{jet} < 229\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d11-x01-y02 Title=Integral jet shape $\Psi$, $229\,\text{GeV}/c < p_\perp^\text{jet} < 250\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d11-x01-y03 Title=Integral jet shape $\Psi$, $250\,\text{GeV}/c < p_\perp^\text{jet} < 277\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d12-x01-y01 Title=Integral jet shape $\Psi$, $277\,\text{GeV}/c < p_\perp^\text{jet} < 304\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d12-x01-y02 Title=Integral jet shape $\Psi$, $304\,\text{GeV}/c < p_\perp^\text{jet} < 340\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d12-x01-y03 Title=Integral jet shape $\Psi$, $340\,\text{GeV}/c < p_\perp^\text{jet} < 380\,\text{GeV}/c$ XLabel=$r/R$ YLabel=$\Psi(r/R)$ LegendYPos=0.4 LogY=0 YMin=0.0 YMax=1.19 # END PLOT # BEGIN PLOT /CDF_2005_S6217184/d13-x01-y01 Title=Integral jet shape, $\Psi$(0.3/$R$), vs. $p_\perp^\text{jet}$ XLabel=$p_\perp^\text{jet}$ / GeV/$c$ YLabel=$\Psi(0.3/R)$ LogY=0 YMin=0.0 YMax=1.19 LegendXPos=0.10 LegendYPos=0.4 # END PLOT rivet-1.8.3/data/plotinfo/DELPHI_2003_WUD_03_11.plot0000644000175000017500000000373612116077756017473 0ustar sunsun# BEGIN PLOT /DELPHI_2003_WUD_03_11/d01-x01-y01 Title=Bengtsson-Zerwas $|\cos(\chi_\text{BZ})|$, Durham $y_\text{cut}=0.008$ XLabel=$|\cos(\chi_\text{BZ})|$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}|\cos(\chi_\text{BZ})|$ LogY=0 # END PLOT # BEGIN PLOT /DELPHI_2003_WUD_03_11/d01-x02-y01 Title=Bengtsson-Zerwas $|\cos(\chi_\text{BZ})|$, Jade $y_\text{cut}=0.015$ XLabel=$|\cos(\chi_\text{BZ})|$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}|\cos(\chi_\text{BZ})|$ LogY=0 # END PLOT # BEGIN PLOT /DELPHI_2003_WUD_03_11/d02-x01-y01 Title=K\"orner-Schierholz-Willrodt $\cos(\phi_\text{KSW})$, Durham $y_\text{cut}=0.008$ XLabel=$\cos(\phi_\text{KSW})$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}\,\cos(\phi_\text{KSW})$ LogY=0 # END PLOT # BEGIN PLOT /DELPHI_2003_WUD_03_11/d02-x02-y01 Title=K\"orner-Schierholz-Willrodt $\cos(\phi_\text{KSW})$, Jade $y_\text{cut}=0.015$ XLabel=$\cos(\phi_\text{KSW})$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}\,\cos(\phi_\text{KSW})$ LogY=0 # END PLOT # BEGIN PLOT /DELPHI_2003_WUD_03_11/d03-x01-y01 Title=Nachtmann-Reiter (mod.) $|\cos(\theta^*_\text{NR})|$, Durham $y_\text{cut}=0.008$ XLabel=$|\cos(\theta^*_\text{NR})|$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}|\cos(\theta^*_\text{NR})|$ LogY=0 # END PLOT # BEGIN PLOT /DELPHI_2003_WUD_03_11/d03-x02-y01 Title=Nachtmann-Reiter (mod.) $|\cos(\theta^*_\text{NR})|$, Jade $y_\text{cut}=0.015$ XLabel=$|\cos(\theta^*_\text{NR})|$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}|\cos(\theta^*_\text{NR})|$ LogY=0 # END PLOT # BEGIN PLOT /DELPHI_2003_WUD_03_11/d04-x01-y01 Title=$\cos(\alpha_{34})$, Durham $y_\text{cut}=0.008$ XLabel=$\cos(\alpha_{34})$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}\,\cos(\alpha_{34})$ LogY=0 LegendXPos=0.05 LegendYPos=0.6 # END PLOT # BEGIN PLOT /DELPHI_2003_WUD_03_11/d04-x02-y01 Title=$\cos(\alpha_{34})$, Jade $y_\text{cut}=0.015$ XLabel=$\cos(\alpha_{34})$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}\,\cos(\alpha_{34})$ LogY=0 LegendXPos=0.05 LegendYPos=0.6 # END PLOT rivet-1.8.3/data/plotinfo/MC_DIPHOTON.plot0000644000175000017500000000213212116077756016330 0ustar sunsun# BEGIN PLOT /MC_DIPHOTON/m_PP Title=Invariant mass of diphoton pair XLabel=$M_{\gamma \gamma}$ (GeV/$c^2$) YLabel=$\mathrm{d}\sigma/\mathrm{d}M_{\gamma \gamma}$ (pb/(GeV/$c^2$)) LogX=1 RatioPlotYMin=0.0 # END PLOT # BEGIN PLOT /MC_DIPHOTON/pT_PP Title=Transverse momentum of diphoton pair XLabel=$p_{\perp}^{\gamma \gamma}$ (GeV/$c$) YLabel=$\mathrm{d}\sigma/\mathrm{d}p_{\perp}^{\gamma \gamma}$ (pb/(GeV/$c$)) LogX=1 RatioPlotYMin=0.0 # END PLOT # BEGIN PLOT /MC_DIPHOTON/pT_P1 Title=Transverse momentum of leading photon XLabel=$p_{\perp}^{\gamma_1}$ (GeV/$c$) YLabel=$\mathrm{d}\sigma/\mathrm{d}p_{\perp}^{\gamma_1}$ (pb/(GeV/$c$)) LogX=0 RatioPlotYMin=0.0 # END PLOT # BEGIN PLOT /MC_DIPHOTON/pT_P2 Title=Transverse momentum of second photon XLabel=$p_{\perp}^{\gamma_2}$ (GeV/$c$) YLabel=$\mathrm{d}\sigma/\mathrm{d}p_{\perp}^{\gamma_2}$ (pb/(GeV/$c$)) LogX=0 RatioPlotYMin=0.0 # END PLOT # BEGIN PLOT /MC_DIPHOTON/dphi_PP Title=Azimuthal angle between photons XLabel=$\Delta\Phi_{\gamma \gamma}$ (rad) YLabel=$\mathrm{d}\sigma/\mathrm{d}\Delta\Phi_{\gamma \gamma}$ (pb/rad) RatioPlotYMin=0.0 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2010_S8914702.plot0000644000175000017500000000166212116077756017103 0ustar sunsun# BEGIN PLOT /ATLAS_2010_S8914702/d01-x01-y01 Title=Transverse energy of isolated prompt photon, $|\eta| < 0.60$ XLabel=$E_\perp^\gamma$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}E_\perp^\gamma$ [pb/GeV] # + any additional plot settings you might like, see make-plots documentation # END PLOT # BEGIN PLOT /ATLAS_2010_S8914702/d01-x01-y02 Title=Transverse energy of isolated prompt photon, $0.60 \leq |\eta| < 1.37$ XLabel=$E_\perp^\gamma$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}E_\perp^\gamma$ [pb/GeV] # + any additional plot settings you might like, see make-plots documentation # END PLOT # BEGIN PLOT /ATLAS_2010_S8914702/d01-x01-y03 Title=Transverse energy of isolated prompt photon, $1.52 \leq |\eta| < 1.81$ XLabel=$E_\perp^\gamma$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}E_\perp^\gamma$ [pb/GeV] # + any additional plot settings you might like, see make-plots documentation # END PLOT # ... add more histograms as you need them ... rivet-1.8.3/data/plotinfo/MC_PHOTONKTSPLITTINGS.plot0000644000175000017500000000375312116077756020005 0ustar sunsun# BEGIN PLOT /MC_PHOTONKTSPLITTINGS/log10_R_0 Title=$\log_{10}$(Integrated $0$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{0}$ Rebin=2 LegendYPos=0.8 LegendXPos=0.75 # END PLOT # BEGIN PLOT /MC_PHOTONKTSPLITTINGS/log10_R_1 Title=$\log_{10}$(Integrated $1$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{1}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_PHOTONKTSPLITTINGS/log10_R_2 Title=$\log_{10}$(Integrated $2$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{2}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_PHOTONKTSPLITTINGS/log10_R_3 Title=$\log_{10}$(Integrated $3$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{3}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_PHOTONKTSPLITTINGS/log10_R_4 Title=$\log_{10}$(Integrated $4$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{\geq4}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_PHOTONKTSPLITTINGS/log10_d_01 Title=$\log_{10}$($k_\perp$ jet resolution $0 \to 1$ [GeV]) XLabel=$\log_{10}(d_{01}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{01}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_PHOTONKTSPLITTINGS/log10_d_12 Title=$\log_{10}$($k_\perp$ jet resolution $1 \to 2$ [GeV]) XLabel=$\log_{10}(d_{12}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{12}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_PHOTONKTSPLITTINGS/log10_d_23 Title=$\log_{10}$($k_\perp$ jet resolution $2 \to 3$ [GeV]) XLabel=$\log_{10}(d_{23}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{23}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_PHOTONKTSPLITTINGS/log10_d_34 Title=$\log_{10}$($k_\perp$ jet resolution $3 \to 4$ [GeV]) XLabel=$\log_{10}(d_{34}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{34}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT rivet-1.8.3/data/plotinfo/D0_2008_S7554427.plot0000644000175000017500000000053412116077756016511 0ustar sunsun# BEGIN PLOT /D0_2008_S7554427/d01-x01-y01 Title=Z boson pT XLabel=$p_{\perp}$(Z) [GeV] YLabel=$1/\sigma \; \text{d}\sigma/\text{d}p_\perp(Z)$ [1/GeV] # END PLOT # BEGIN PLOT /D0_2008_S7554427/d03-x01-y01 Title=Z boson pT (forward region only) XLabel=$p_{\perp}$(Z) [GeV] YLabel=$1/\sigma \; \text{d}\sigma/\text{d}p_\perp(Z)$ [1/GeV] # END PLOT rivet-1.8.3/data/plotinfo/DELPHI_1996_S3430090.plot0000644000175000017500000002172712116077756017222 0ustar sunsun# BEGIN PLOT /DELPHI_1996_S3430090/d01-x01-y01 Title=In-plane $p_\perp$ in GeV w.r.t. thrust axes XLabel=$p_\perp^\text{in}$ / GeV YLabel=$N \, \text{d}{\sigma}/\text{d}{p_\perp^\text{in}}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d02-x01-y01 Title=Out-of-plane $p_\perp$ in GeV w.r.t. thrust axes XLabel=$p_\perp^\text{out}$ / GeV YLabel=$N \, \text{d}{\sigma}/\text{d}{p_\perp^\text{out}}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d03-x01-y01 Title=In-plane $p_\perp$ in GeV w.r.t. sphericity axes XLabel=$p_\perp^\text{in}$ / GeV YLabel=$N \, \text{d}{\sigma}/\text{d}{p_\perp^\text{in}}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d04-x01-y01 Title=Out-of-plane $p_\perp$ in GeV w.r.t. sphericity axes XLabel=$p_\perp^\text{out}$ / GeV YLabel=$N \, \text{d}{\sigma}/\text{d}{p_\perp^\text{out}}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d05-x01-y01 Title=Rapidity w.r.t. thrust axes, $y_T$ XLabel=$y_T$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_T}$ FullRange=1 LegendXPos=0.15 LegendYPos=0.8 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d06-x01-y01 Title=Rapidity w.r.t. sphericity axes, $y_S$ XLabel=$y_S$ YLabel=$N \, \text{d}{\sigma}/\text{d}{y_S}$ FullRange=1 LegendXPos=0.15 LegendYPos=0.8 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d07-x01-y01 Title=Scaled momentum, $x_p = |p|/|p_\text{beam}|$ XLabel=$x_p$ YLabel=$N \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d08-x01-y01 Title=Log of scaled momentum, $\log(1/x_p)$ XLabel=$\log(1/x_p)$ YLabel=$N \, \text{d}{\sigma}/\text{d}{\log(1/x_p)}$ FullRange=1 LegendYPos=0.8 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d09-x01-y01 Title=Mean out-of-plane $p_\perp$ in GeV w.r.t. thrust axes vs. $x_p$ XLabel=$x_p$ YLabel=$p_\perp^\text{out}$ / GeV LogY=0 LegendXPos=0.35 LegendYPos=0.7 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d10-x01-y01 Title=Mean $p_\perp$ in GeV vs. $x_p$ XLabel=$x_p$ YLabel=$p_\perp$ / GeV LogY=0 LegendXPos=0.35 LegendYPos=0.7 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d11-x01-y01 Title=$1-\text{Thrust}$ XLabel=$1-T$ YLabel=$N \, \text{d}{\sigma}/\text{d}{(1-T)}$ LegendXPos=0.15 LegendYPos=0.6 FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d12-x01-y01 Title=Thrust major, $M$ XLabel=$M$ YLabel=$N \, \text{d}{\sigma}/\text{d}{M}$ LegendXPos=0.15 LegendYPos=0.6 FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d13-x01-y01 Title=Thrust minor, $m$ XLabel=$m$ YLabel=$N \, \text{d}{\sigma}/\text{d}{m}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d14-x01-y01 Title=Oblateness = $M - m$ XLabel=$O$ YLabel=$N \, \text{d}{\sigma}/\text{d}{O}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d15-x01-y01 Title=Sphericity, $S$ XLabel=$S$ YLabel=$N \, \text{d}{\sigma}/\text{d}{S}$ LegendXPos=0.65 FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d16-x01-y01 Title=Aplanarity, $A$ XLabel=$A$ YLabel=$N \, \text{d}{\sigma}/\text{d}{A}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d17-x01-y01 Title=Planarity, $P$ XLabel=$P$ YLabel=$N \, \text{d}{\sigma}/\text{d}{P}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d18-x01-y01 Title=$C$ parameter XLabel=$C$ YLabel=$N \, \text{d}{\sigma}/\text{d}{C}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d19-x01-y01 Title=$D$ parameter XLabel=$D$ YLabel=$N \, \text{d}{\sigma}/\text{d}{D}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d20-x01-y01 Title=Heavy hemisphere masses, $M_h^2/E_\text{vis}^2$ XLabel=$M_h^2/E_\text{vis}^2$ YLabel=$N \, \text{d}{\sigma}/\text{d}{M_h^2/E_\text{vis}^2}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d21-x01-y01 Title=Light hemisphere masses, $M_l^2/E_\text{vis}^2$ XLabel=$M_l^2/E_\text{vis}^2$ YLabel=$N \, \text{d}{\sigma}/\text{d}{M_l^2/E_\text{vis}^2}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d22-x01-y01 Title=Difference in hemisphere masses, $M_d^2/E_\text{vis}^2$ XLabel=$M_d^2/E_\text{vis}^2$ YLabel=$N \, \text{d}{\sigma}/\text{d}{M_d^2/E_\text{vis}^2}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d23-x01-y01 Title=Wide hemisphere broadening, $B_\text{max}$ XLabel=$B_\text{max}$ YLabel=$N \, \text{d}{\sigma}/\text{d}{B_\text{max}}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d24-x01-y01 Title=Narrow hemisphere broadening, $B_\text{min}$ XLabel=$B_\text{min}$ YLabel=$N \, \text{d}{\sigma}/\text{d}{B_\text{min}}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d25-x01-y01 Title=Total hemisphere broadening, $B_\text{sum}$ XLabel=$B_\text{sum}$ YLabel=$N \, \text{d}{\sigma}/\text{d}{B_\text{sum}}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d26-x01-y01 Title=Difference in hemisphere broadening, $B_\text{diff}$ XLabel=$B_\text{diff}$ YLabel=$N \, \text{d}{\sigma}/\text{d}{B_\text{diff}}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d27-x01-y01 Title=Differential 3-jet rate with Durham algorithm, $D_2^\text{Durham}$ XLabel=$D_2^\text{Durham}$ YLabel=$N \, \text{d}{\sigma}/\text{d}{D_2^\text{Durham}}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d28-x01-y01 Title=Differential 3-jet rate with Jade algorithm, $D_2^\text{Jade}$ XLabel=$D_2^\text{Jade}$ YLabel=$N \, \text{d}{\sigma}/\text{d}{D_2^\text{Jade}}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d29-x01-y01 Title=Differential 4-jet rate with Durham algorithm, $D_3^\text{Durham}$ XLabel=$D_3^\text{Durham}$ YLabel=$N \, \text{d}{\sigma}/\text{d}{D_3^\text{Durham}}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d30-x01-y01 Title=Differential 4-jet rate with Jade algorithm, $D_3^\text{Jade}$ XLabel=$D_3^\text{Jade}$ YLabel=$N \, \text{d}{\sigma}/\text{d}{D_3^\text{Jade}}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d31-x01-y01 Title=Differential 5-jet rate with Durham algorithm, $D_4^\text{Durham}$ XLabel=$D_4^\text{Durham}$ YLabel=$N \, \text{d}{\sigma}/\text{d}{D_4^\text{Durham}}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d32-x01-y01 Title=Differential 5-jet rate with Jade algorithm, $D_4^\text{Jade}$ XLabel=$D_4^\text{Jade}$ YLabel=$N \, \text{d}{\sigma}/\text{d}{D_4^\text{Jade}}$ FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d33-x01-y01 Title=Energy-energy correlation, EEC XLabel=$\cos{\chi}$ YLabel=EEC LegendXPos=0.45 FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d34-x01-y01 Title=Asymmetry of the energy-energy correlation, AEEC XLabel=$\cos{\chi}$ YLabel=AEEC FullRange=1 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d(3[5-9]|40) XLabel= YLabel=Multiplicity ShowZero=0 LogY=0 # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d35-x01-y01 Title=Mean charged multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d36-x01-y01 Title=Mean $\pi^+/\pi^-$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d36-x01-y02 Title=Mean $\pi^0$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d36-x01-y03 Title=Mean $K^+/K^-$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d36-x01-y04 Title=Mean $K^0$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d36-x01-y05 Title=Mean $\eta$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d36-x01-y06 Title=Mean $\eta'$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d36-x01-y07 Title=Mean $D^+$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d36-x01-y08 Title=Mean $D^0$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d36-x01-y09 Title=Mean $B^+/B^-/B^0$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d37-x01-y01 Title=Mean $f_0(980)$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d38-x01-y01 Title=Mean $\rho$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d38-x01-y02 Title=Mean $K^*(892)^+/K^*(892)^-$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d38-x01-y03 Title=Mean $K^*(892)^0$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d38-x01-y04 Title=Mean $\phi$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d38-x01-y05 Title=Mean $D^*(2010)^+/D^*(2010)^-$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d39-x01-y01 Title=Mean $f_2(1270)$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d39-x01-y02 Title=Mean $K_2^*(1430)^0$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d40-x01-y01 Title=Mean $p$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d40-x01-y02 Title=Mean $\Lambda^0$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d40-x01-y03 Title=Mean $\Xi^-$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d40-x01-y04 Title=Mean $\Omega^-$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d40-x01-y05 Title=Mean $\Delta(1232)^{++}$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d40-x01-y06 Title=Mean $\Sigma(1385)^+/\Sigma(1385)^-$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d40-x01-y07 Title=Mean $\Xi(1530)^0$ multiplicity # END PLOT # BEGIN PLOT /DELPHI_1996_S3430090/d40-x01-y08 Title=Mean $\Lambda_b^0$ multiplicity # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_I943401.plot0000644000175000017500000001717412116077756017006 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I943401/count_OS_SR1 Title=Number of events in the OS-SR1 signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/count_OS_SR2 Title=Number of events in the OS-SR2 signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/count_OS_SR3 Title=Number of events in the OS-SR3 signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/count_SS_SR1 Title=Number of events in the SS-SR1 signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/count_SS_SR2 Title=Number of events in the SS-SR2 signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/count_FS_SR1 Title=Number of events in the FS-SR1 signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/count_FS_SR2 Title=Number of events in the FS-SR2 signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/count_FS_SR3 Title=Number of events in the FS-SR3 signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d01-x01-y01 Title=$m_{\ell\ell}$ for same-sign events (data) XLabel=$m_{\ell\ell}$ [GeV] YLabel=$\mathrm{Events}/20$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d01-x01-y02 Title=$m_{\ell\ell}$ for same-sign events (back) XLabel=$m_{\ell\ell}$ [GeV] YLabel=$\mathrm{Events}/20$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d02-x01-y01 Title=Missing Transverse Energy for same-sign events (data) XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d02-x01-y02 Title=Missing Transverse Energy for same-sign events (back) XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d03-x01-y01 Title=$m_{\ell\ell}$ for same-sign events with 2 jets (data) XLabel=$m_{\ell\ell}$ [GeV] YLabel=$\mathrm{Events}/50$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d03-x01-y02 Title=$m_{\ell\ell}$ for same-sign events with 2 jets (back) XLabel=$m_{\ell\ell}$ [GeV] YLabel=$\mathrm{Events}/50$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d05-x01-y01 Title=Number of Jets for same-sign events (data) XLabel=Number of Jets YLabel=Events LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d05-x01-y02 Title=Number of Jets for same-sign events (back) XLabel=Number of Jets YLabel=Events LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d06-x01-y01 Title=$p_{\mathrm{T}}$ of the leading jet for same-sign events (data) XLabel=$p_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d06-x01-y02 Title=$p_{\mathrm{T}}$ of the leading jet for same-sign events (back) XLabel=$p_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d07-x01-y01 Title=$p_{\mathrm{T}}$ of the second jet for same-sign events (data) XLabel=$p_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d07-x01-y02 Title=$p_{\mathrm{T}}$ of the second jet for same-sign events (back) XLabel=$p_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d08-x01-y01 Title=$p_{\mathrm{T}}$ of the leading lepton for same-sign events (data) XLabel=$p_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/5 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d08-x01-y02 Title=$p_{\mathrm{T}}$ of the leading lepton for same-sign events (back) XLabel=$p_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/5 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d09-x01-y01 Title=$p_{\mathrm{T}}$ of the second lepton for same-sign events (data) XLabel=$p_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/5 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d09-x01-y02 Title=$p_{\mathrm{T}}$ of the second lepton for same-sign events (back) XLabel=$p_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/5 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d10-x01-y01 Title=$m_{\ell\ell}$ for opposite-sign events (data) XLabel=$m_{\ell\ell}$ [GeV] YLabel=$\mathrm{Events}/10$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d10-x01-y02 Title=$m_{\ell\ell}$ for opposite-sign events (back) XLabel=$m_{\ell\ell}$ [GeV] YLabel=$\mathrm{Events}/10$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d11-x01-y01 Title=Missing Transverse Energy for opposite-sign events (data) XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/10$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d11-x01-y02 Title=Missing Transverse Energy for opposite-sign events (back) XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/10$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d12-x01-y01 Title=Missing Transverse Energy for opposite-sign events with 3 jets (data) XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/10$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d12-x01-y02 Title=Missing Transverse Energy for opposite-sign events with 3 jets (back) XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/10$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d13-x01-y01 Title=Missing Transverse Energy for opposite-sign events with 4 jets (data) XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/10$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d13-x01-y02 Title=Missing Transverse Energy for opposite-sign events with 4 jets (back) XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/10$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d14-x01-y01 Title=Number of Jets for opposite-sign events (data) XLabel=Number of Jets YLabel=Events LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d14-x01-y02 Title=Number of Jets for opposite-sign events (back) XLabel=Number of Jets YLabel=Events LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d15-x01-y01 Title=$p_{\mathrm{T}}$ of the leading jet for opposite-sign events (data) XLabel=$p_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d15-x01-y02 Title=$p_{\mathrm{T}}$ of the leading jet for opposite-sign events (back) XLabel=$p_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d16-x01-y01 Title=$p_{\mathrm{T}}$ of the second jet for opposite-sign events (data) XLabel=$p_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d16-x01-y02 Title=$p_{\mathrm{T}}$ of the second jet for opposite-sign events (back) XLabel=$p_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d17-x01-y01 Title=$p_{\mathrm{T}}$ of the leading lepton for opposite-sign events (data) XLabel=$p_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d17-x01-y02 Title=$p_{\mathrm{T}}$ of the leading lepton for opposite-sign events (back) XLabel=$p_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d18-x01-y01 Title=$p_{\mathrm{T}}$ of the second lepton for opposite-sign events (data) XLabel=$p_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I943401/d18-x01-y02 Title=$p_{\mathrm{T}}$ of the second lepton for opposite-sign events (back) XLabel=$p_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=1 # END PLOT rivet-1.8.3/data/plotinfo/MC_HJETS.plot0000644000175000017500000001603212116077756015765 0ustar sunsun# BEGIN PLOT /MC_HJETS/H_jet1_dR Title=Separation between Higgs boson and leading jet XLabel=$\Delta R(\text{h, 1st jet})$ YLabel=$\text{d}\sigma/\text{d}\Delta R(\text{h, 1st jet})$ [pb] # END PLOT # BEGIN PLOT /MC_HJETS/H_jet1_deta Title= XLabel=$\Delta{\eta}(\text{h, 1st jet})$ YLabel=$\text{d}\sigma/\text{d}\Delta{\eta}(\text{h, 1st jet})$ [pb] # END PLOT # BEGIN PLOT /MC_HJETS/jets_dR_ Title=$\Delta R$ separation between jets LegendXPos=0.10 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_HJETS/jets_dR_12 XLabel=$\Delta{R}(\text{jet 1, jet 2})$ YLabel=$\text{d}\sigma/\text{d}\Delta{R}(\text{jet 1, jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_HJETS/jets_dR_13 XLabel=$\Delta{R}(\text{jet 1, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta{R}(\text{jet 1, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_HJETS/jets_dR_23 XLabel=$\Delta{R}(\text{jet 2, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta{R}(\text{jet 2, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_HJETS/jets_deta_ Title=Pseudorapidity separation between jets LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_HJETS/jets_deta_12 XLabel=$\Delta\eta(\text{jet 1, jet 2})$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta(\text{jet 1, jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_HJETS/jets_deta_13 XLabel=$\Delta\eta(\text{jet 1, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta(\text{jet 1, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_HJETS/jets_deta_23 XLabel=$\Delta\eta(\text{jet 2, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta(\text{jet 2, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_HJETS/jets_dphi_ Title=Pseudorapidity separation between jets LegendXPos=0.1 # END PLOT # BEGIN PLOT /MC_HJETS/jets_dphi_12 XLabel=$\Delta\phi(\text{jet 1, jet 2})$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi(\text{jet 1, jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_HJETS/jets_dphi_13 XLabel=$\Delta\phi(\text{jet 1, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi(\text{jet 1, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_HJETS/jets_dphi_23 XLabel=$\Delta\phi(\text{jet 2, jet 3})$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi(\text{jet 2, jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_HJETS/jet_eta_1 Title=Pseudorapidity of leading jet XLabel=$\eta(\text{jet 1})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 1})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_HJETS/jet_eta_2 Title=Pseudorapidity of second jet XLabel=$\eta(\text{jet 2})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 2})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_HJETS/jet_eta_3 Title=Pseudorapidity of third jet XLabel=$\eta(\text{jet 3})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 3})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_HJETS/jet_eta_4 Title=Pseudorapidity of fourth jet XLabel=$\eta(\text{jet 4})$ YLabel=$\text{d}\sigma/\text{d}\eta(\text{jet 4})$ [pb] LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_HJETS/jet_eta_pmratio_1 Title=Pseudorapidity $+/-$ ratio of first jet XLabel=$\eta(\text{jet 1})_+/\eta(\text{jet 1})_-$ YLabel=$|\eta(\text{jet 1}|$ # END PLOT # BEGIN PLOT /MC_HJETS/jet_eta_pmratio_2 Title=Pseudorapidity $+/-$ ratio of second jet XLabel=$\eta(\text{jet 2})_+/\eta(\text{jet 2})_-$ YLabel=$|\eta(\text{jet 2}|$ # END PLOT # BEGIN PLOT /MC_HJETS/jet_eta_pmratio_3 Title=Pseudorapidity $+/-$ ratio of third jet XLabel=$\eta(\text{jet 3})_+/\eta(\text{jet 3})_-$ YLabel=$|\eta(\text{jet 3}|$ # END PLOT # BEGIN PLOT /MC_HJETS/jet_eta_pmratio_4 Title=Pseudorapidity $+/-$ ratio of fourth jet XLabel=$\eta(\text{jet 4})_+/\eta(\text{jet 4})_-$ YLabel=$|\eta(\text{jet 4}|$ # END PLOT # BEGIN PLOT /MC_HJETS/jet_y_1 Title=Rapidity of first jet XLabel=$y(\text{jet 1})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 1})$ [pb] # END PLOT # BEGIN PLOT /MC_HJETS/jet_y_2 Title=Rapidity of second jet XLabel=$y(\text{jet 2})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 2})$ [pb] # END PLOT # BEGIN PLOT /MC_HJETS/jet_y_3 Title=Rapidity of third jet XLabel=$y(\text{jet 3})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 3})$ [pb] # END PLOT # BEGIN PLOT /MC_HJETS/jet_y_4 Title=Rapidity of fourth jet XLabel=$y(\text{jet 4})$ YLabel=$\text{d}\sigma/\text{d}y(\text{jet 4})$ [pb] # END PLOT # BEGIN PLOT /MC_HJETS/jet_y_pmratio_1 Title=Rapidity $+/-$ ratio of first jet XLabel=$y(\text{jet 1})_+/y(\text{jet 1})_-$ YLabel=$|y(\text{jet 1}|$ # END PLOT # BEGIN PLOT /MC_HJETS/jet_y_pmratio_2 Title=Rapidity $+/-$ ratio of second jet XLabel=$y(\text{jet 2})_+/y(\text{jet 2})_-$ YLabel=$|y(\text{jet 2}|$ # END PLOT # BEGIN PLOT /MC_HJETS/jet_y_pmratio_3 Title=Rapidity $+/-$ ratio of third jet XLabel=$y(\text{jet 3})_+/y(\text{jet 3})_-$ YLabel=$|y(\text{jet 3}|$ # END PLOT # BEGIN PLOT /MC_HJETS/jet_y_pmratio_4 Title=Rapidity $+/-$ ratio of fourth jet XLabel=$y(\text{jet 4})_+/y(\text{jet 4})_-$ YLabel=$|y(\text{jet 4}|$ # END PLOT # BEGIN PLOT /MC_HJETS/jet_mass_1 Title=Mass of first jet XLabel=$m(\text{jet 1})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 1})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_HJETS/jet_mass_2 Title=Mass of second jet XLabel=$m(\text{jet 2})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 2})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_HJETS/jet_mass_3 Title=Mass of third jet XLabel=$m(\text{jet 3})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 3})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_HJETS/jet_mass_4 Title=Mass of fourth jet XLabel=$m(\text{jet 4})$ YLabel=$\text{d}\sigma/\text{d}m(\text{jet 4})$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_HJETS/jet_multi_exclusive Title=Exclusive jet multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(N_{\text{jet}})$ [pb] XMajorTickMarks=10 XMinorTickMarks=0 ErrorBands=1 # END PLOT # BEGIN PLOT /MC_HJETS/jet_multi_inclusive Title=Inclusive jet multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(\geq N_{\text{jet}})$ [pb] XMajorTickMarks=10 XMinorTickMarks=0 ErrorBands=1 # END PLOT # BEGIN PLOT /MC_HJETS/jet_multi_ratio Title=Ratio of jet multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(\geq N_{\text{jet}})/\sigma(\geq N_{\text{jet}}-1)$ XMajorTickMarks=10 XMinorTickMarks=0 LogY=0 ErrorBands=1 # END PLOT # BEGIN PLOT /MC_HJETS/jet_pT_1 Title=Transverse momentum of leading jet XLabel=$p_\perp(\text{jet 1})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 1})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_HJETS/jet_pT_2 Title=Transverse momentum of second jet XLabel=$p_\perp(\text{jet 2})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 2})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_HJETS/jet_pT_3 Title=Transverse momentum of third jet XLabel=$p_\perp(\text{jet 3})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 3})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_HJETS/jet_pT_4 Title=Transverse momentum of fourth jet XLabel=$p_\perp(\text{jet 4})$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(\text{jet 4})$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 XMin=20.0 # END PLOT # BEGIN PLOT /MC_HJETS/jet_HT Title=Scalar sum of jet transverse momenta (HT) XLabel=$HT$ [GeV] YLabel=$\text{d}\sigma/\text{d}HT$ [pb/GeV] LogX=1 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_I894867.plot0000644000175000017500000000034112116077756017016 0ustar sunsun# BEGIN PLOT /ATLAS_2011_I894867/d01-x01-y01 Title=$\sigma_\text{inel}$ for $\xi > 5 \cdot 10^{-6}$ at $\sqrt{s}=7$ TeV XLabel=$\sqrt{s}$ [GeV] YLabel=$\sigma_\text{inel}$ [mb] YMin=45 XCustomMajorTicks=7000 7000 # END PLOT rivet-1.8.3/data/plotinfo/CMS_2012_PAS_FWD_11_003.plot0000644000175000017500000000123612116077756017705 0ustar sunsun# BEGIN PLOT /CMS_2012_PAS_FWD_11_003/d0 XLabel=Leading charged jet $p_\perp$ [GeV] YLabel=$(\mathrm{d}E^\text{hard} / \mathrm{d}\eta) / (\mathrm{d} E^\text{incl} / \mathrm{d}\eta)$ LegendXPos=0.05 LogY=0 # END PLOT # BEGIN PLOT /CMS_2012_PAS_FWD_11_003/d01-x01-y01 Title=Ratio of energy deposited in $-6.6 < \eta < -5.2$ for $\sqrt{s}=0.9$ TeV # END PLOT # BEGIN PLOT /CMS_2012_PAS_FWD_11_003/d02-x01-y01 Title=Ratio of energy deposited in $-6.6 < \eta < -5.2$ for $\sqrt{s}=2.76$ TeV # END PLOT # BEGIN PLOT /CMS_2012_PAS_FWD_11_003/d03-x01-y01 Title=Ratio of energy deposited in $-6.6 < \eta < -5.2$ for $\sqrt{s}=7$ TeV LegendXPos=0.45 LegendYPos=0.4 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_S9212183.plot0000644000175000017500000000323012116077756017070 0ustar sunsun# BEGIN PLOT /ATLAS_2011_S9212183/count_2j Title=Number of events in the 2 jet signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212183/count_3j Title=Number of events in the 2 jet signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212183/count_4j5 Title=Number of events in the 4 jet, $m_{\rm eff}>500$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212183/count_4j10 Title=Number of events in the 4 jet, $m_{\rm eff}>1000$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212183/count_H Title=Number of events in the higg mass signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212183/d01-x01-y01 Title=Effective Mass in the 2 jet Signal Region XLabel=$M_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/100 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212183/d02-x01-y01 Title=Effective Mass in the 3 jet Signal Region XLabel=$M_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/100 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212183/d03-x01-y01 Title=Effective Mass in the 4 jet Signal Region XLabel=$M_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/100 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212183/d04-x01-y01 Title=Effective Mass in the high mass Signal Region XLabel=$M_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/150 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212183/Et_miss Title=Missing transverse Energy XLabel=$E_{\mathrm{T}}^{\rm miss}$ [GeV] YLabel=$\mathrm{Events} \mathrm{GeV}$ LogY=1 # END PLOTrivet-1.8.3/data/plotinfo/ALEPH_1996_S3486095.plot0000644000175000017500000001672012116077756017123 0ustar sunsun# BEGIN PLOT /ALEPH_1996_S3486095/d01-x01-y01 Title=Sphericity, $S$ (charged) XLabel=$S$ YLabel=$1/N \, \text{d}{N}/\text{d}{S}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d02-x01-y01 Title=Aplanarity, $A$ (charged) XLabel=$A$ YLabel=$1/N \, \text{d}{N}/\text{d}{A}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d03-x01-y01 Title=1-Thrust, $1-T$ (charged) XLabel=$1-T$ YLabel=$1/N \, \text{d}{N}/\text{d}{(1-T)}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d04-x01-y01 Title=Thrust minor, $m$ (charged) XLabel=$m$ YLabel=$1/N \, \text{d}{N}/\text{d}{m}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d05-x01-y01 Title=Two-jet resolution variable, $Y_3$ (charged) XLabel=$Y_3$ YLabel=$1/N \, \text{d}{N}/\text{d}{Y_3}$ LegendXPos=0.15 LegendYPos=0.8 FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d06-x01-y01 Title=Heavy jet mass (charged) XLabel=$M_h^2/s$ YLabel=$1/N \, \text{d}{N}/\text{d}{(M_h^2/s)}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d07-x01-y01 Title=$C$ parameter (charged) XLabel=$C$ YLabel=$1/N \, \text{d}{N}/\text{d}{C}$ LegendXPos=0.15 LegendYPos=0.65 FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d08-x01-y01 Title=Oblateness, $M - m$ (charged) XLabel=$O$ YLabel=$1/N \, \text{d}{N}/\text{d}{O}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d09-x01-y01 Title=Scaled momentum, $x_p = |p|/|p_\text{beam}|$ (charged) XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d10-x01-y01 Title=Rapidity w.r.t. thrust axes, $y_T$ (charged) XLabel=$y_T$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{y_T}$ LegendXPos=0.15 LegendYPos=0.8 FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d11-x01-y01 Title=In-plane $p_T$ in GeV w.r.t. sphericity axes (charged) XLabel=$p_\perp^\text{in}$ / GeV YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{p_\perp^\text{in}}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d12-x01-y01 Title=Out-of-plane $p_T$ in GeV w.r.t. sphericity axes (charged) XLabel=$p_\perp^\text{out}$ / GeV YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{p_\perp^\text{out}}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d17-x01-y01 Title=Log of scaled momentum, $\log(1/x_p)$ (charged) XLabel=$\xi_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{\xi_p}$ LegendYPos=0.8 FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d18-x01-y01 Title=Charged multiplicity distribution XLabel=$N_\text{ch}$ YLabel=$1/N \, \text{d}{N}/\text{d}{N_\text{ch}}$ LegendXPos=0.20 LegendYPos=0.75 FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d19-x01-y01 Title=Mean charged multiplicity XLabel= YLabel=Multiplicity ShowZero=0 LogY=0 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d20-x01-y01 Title=Mean charged multiplicity for rapidity $|Y| < 0.5$ XLabel= YLabel=Multiplicity ShowZero=0 LogY=0 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d21-x01-y01 Title=Mean charged multiplicity for rapidity $|Y| < 1.0$ XLabel= YLabel=Multiplicity ShowZero=0 LogY=0 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d22-x01-y01 Title=Mean charged multiplicity for rapidity $|Y| < 1.5$ XLabel= YLabel=Multiplicity ShowZero=0 LogY=0 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d23-x01-y01 Title=Mean charged multiplicity for rapidity $|Y| < 2.0$ XLabel= YLabel=Multiplicity ShowZero=0 LogY=0 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d25-x01-y01 Title=$\pi^\pm$ spectrum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d26-x01-y01 Title=$K^\pm$ spectrum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d27-x01-y01 Title=$p$ spectrum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d28-x01-y01 Title=$\gamma$ spectrum XLabel=$\xi_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{\xi_p}$ LegendYPos=0.75 FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d29-x01-y01 Title=$\pi^0$ spectrum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d30-x01-y01 Title=$\eta$ spectrum XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_E}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d31-x01-y01 Title=$\eta'$ spectrum XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_E}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d32-x01-y01 Title=$K^0$ spectrum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d33-x01-y01 Title=$\Lambda^0$ spectrum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d34-x01-y01 Title=$\Xi^-$ spectrum XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_E}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d35-x01-y01 Title=$\Sigma^\pm(1385)$ spectrum XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_E}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d36-x01-y01 Title=$\Xi^0(1530)$ spectrum XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_E}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d37-x01-y01 Title=$\rho$ spectrum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d38-x01-y01 Title=$\omega(782)$ spectrum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d39-x01-y01 Title=$K^{*0}(892)$ spectrum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d40-x01-y01 Title=$\phi$ spectrum XLabel=$x_p$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_p}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d43-x01-y01 Title=$K^{*\pm}(892)$ spectrum XLabel=$x_E$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}{x_E}$ FullRange=1 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d44- XLabel= YLabel=Multiplicity ShowZero=0 LogY=0 # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d44-x01-y02 Title=Mean $\pi^0$ multiplicity # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d44-x01-y03 Title=Mean $\eta$ multiplicity # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d44-x01-y04 Title=Mean $\eta'$ multiplicity # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d44-x01-y05 Title=Mean $K_S + K_L$ multiplicity # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d44-x01-y06 Title=Mean $\rho^0$ multiplicity # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d44-x01-y07 Title=Mean $\omega(782)$ multiplicity # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d44-x01-y08 Title=Mean $\phi$ multiplicity # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d44-x01-y09 Title=Mean $K^{*\pm}$ multiplicity # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d44-x01-y10 Title=Mean $K^{*0}$ multiplicity # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d44-x01-y11 Title=Mean $\Lambda$ multiplicity # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d44-x01-y12 Title=Mean $\Sigma$ multiplicity # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d44-x01-y13 Title=Mean $\Xi$ multiplicity # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d44-x01-y14 Title=Mean $\Sigma(1385)$ multiplicity # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d44-x01-y15 Title=Mean $\Xi(1530)$ multiplicity # END PLOT # BEGIN PLOT /ALEPH_1996_S3486095/d44-x01-y16 Title=Mean $\Omega^\mp$ multiplicity # END PLOT rivet-1.8.3/data/plotinfo/MC_WINC.plot0000644000175000017500000000376212116077756015656 0ustar sunsun# BEGIN PLOT /MC_WINC/W_chargeasymm_eta Title=Charge asymmetry vs. $\eta(\ell)$ XLabel=$\eta(\ell)$ [GeV] YLabel=$(\mathrm{d}\sigma(\ell^+)-\mathrm{d}\sigma(\ell^-))\;/\;(\mathrm{d}\sigma(\ell^+)+\mathrm{d}\sigma(\ell^-))$ LogY=0 Scale=1.0 # END PLOT # BEGIN PLOT /MC_WINC/W_chargeasymm_pT Title=Charge asymmetry vs. $p_\perp(W)$ XLabel=$p_\perp(W)$ [GeV] YLabel=$\mathrm{d}\sigma(W^+)\;/\;\mathrm{d}\sigma(W^-)$ LogX=1 LogY=0 Scale=1.0 YMin=0.0 YMax=3.0 # END PLOT # BEGIN PLOT /MC_WINC/W_mass Title=W mass XLabel=$m_{\text{W}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}m_{\text{W}}$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_WINC/W_pT$ Title=W boson $p_\perp$ XLabel=$p_\perp^{\text{W}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\text{W}}$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_WINC/W_pT_peak Title=W boson $p_\perp$ in peak region XLabel=$p_\perp^{\text{W}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\text{W}}$ [pb/GeV] LogY=0 LogX=0 LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_WINC/W_y Title=W boson rapidity XLabel=$y_{\text{W}}$ YLabel=$\text{d}\sigma/\text{d}y_{\text{W}}$ [pb] LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_WINC/W_phi Title=W azimuthal angle XLabel=$\phi_{\text{W}}$ YLabel=$\text{d}\sigma/\text{d}\phi_{\text{W}}$ [pb] # END PLOT # BEGIN PLOT /MC_WINC/Wplus_pT$ Title=$p_\perp$ of $W^+$ boson XLabel=$p_\perp^{W^+}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{W^+}$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_WINC/Wminus_pT$ Title=$p_\perp$ of $W^-$ boson XLabel=$p_\perp^{W^-}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{W^-}$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_WINC/lepton_pT Title=Lepton $p_\perp$ XLabel=$p_\perp^{\text{l}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\text{l}}$ [pb/GeV] LogX=1 # END PLOT # BEGIN PLOT /MC_WINC/lepton_eta Title=Lepton $\eta$ XLabel=$\eta_{\text{l}}$ YLabel=$\text{d}\sigma/\text{d}\eta_{\text{l}}$ [pb] # END PLOT rivet-1.8.3/data/plotinfo/D0_2009_S8202443.plot0000644000175000017500000000234012116077756016474 0ustar sunsun# BEGIN PLOT /D0_2009_S8202443/d01-x01-y01 Title=pT of 1st jet (constrained electrons) XLabel=$p_{\perp}^{\text{1st jet}}$ [GeV] YLabel=$1/\sigma \; \text{d}\sigma/\text{d}p_{\perp}^{\text{1st jet}}$ [1/GeV] # END PLOT # BEGIN PLOT /D0_2009_S8202443/d02-x01-y01 Title=pT of 1st jet XLabel=$p_{\perp}^{\text{1st jet}}$ [GeV] YLabel=$1/\sigma \; \text{d}\sigma/\text{d}p_{\perp}^{\text{1st jet}}$ [1/GeV] # END PLOT # BEGIN PLOT /D0_2009_S8202443/d03-x01-y01 Title=pT of 2nd jet (constrained electrons) XLabel=$p_{\perp}^{\text{2nd jet}}$ [GeV] YLabel=$1/\sigma \; \text{d}\sigma/\text{d}p_{\perp}^{\text{2nd jet}}$ [1/GeV] # END PLOT # BEGIN PLOT /D0_2009_S8202443/d04-x01-y01 Title=pT of 2nd jet XLabel=$p_{\perp}^{\text{2nd jet}}$ [GeV] YLabel=$1/\sigma \; \text{d}\sigma/\text{d}p_{\perp}^{\text{2nd jet}}$ [1/GeV] # END PLOT # BEGIN PLOT /D0_2009_S8202443/d05-x01-y01 Title=pT of 3rd jet (constrained electrons) XLabel=$p_{\perp}^{\text{3rd jet}}$ [GeV] YLabel=$1/\sigma \; \text{d}\sigma/\text{d}p_{\perp}^{\text{3rd jet}}$ [1/GeV] # END PLOT # BEGIN PLOT /D0_2009_S8202443/d06-x01-y01 Title=pT of 3rd jet XLabel=$p_{\perp}^{\text{3rd jet}}$ [GeV] YLabel=$1/\sigma \; \text{d}\sigma/\text{d}p_{\perp}^{\text{3rd jet}}$ [1/GeV] # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2010_S8919674.plot0000644000175000017500000000260712116077756017120 0ustar sunsun# BEGIN PLOT /ATLAS_2010_S8919674/d01-x01-y01 Title=Inclusive jet multiplicity (electron channel) XLabel=$N_{\text{jet}}$ YLabel=$\sigma(W \, + \geq N_{\text{jet}}\;\text{jets})$ [pb] XMajorTickMarks=10 XMinorTickMarks=0 RatioPlotYMin=0.45 RatioPlotYMax=1.57 # END PLOT # BEGIN PLOT /ATLAS_2010_S8919674/d02-x01-y01 Title=Inclusive jet multiplicity (muon channel) XLabel=$N_{\text{jet}}$ YLabel=$\sigma(W \, + \geq N_{\text{jet}}\;\text{jets})$ [pb] XMajorTickMarks=10 XMinorTickMarks=0 RatioPlotYMin=0.45 RatioPlotYMax=1.57 # END PLOT # BEGIN PLOT /ATLAS_2010_S8919674/d05-x01-y01 Title=$p_\perp$ of 1st jet (electron channel) XLabel=$p_\perp$(1st jet) [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp$ [pb/GeV] RatioPlotYMin=0.4 RatioPlotYMax=1.6 # END PLOT # BEGIN PLOT /ATLAS_2010_S8919674/d06-x01-y01 Title=$p_\perp$ of 1st jet (muon channel) XLabel=$p_\perp$(1st jet) [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp$ [pb/GeV] RatioPlotYMin=0.4 RatioPlotYMax=1.6 # END PLOT # BEGIN PLOT /ATLAS_2010_S8919674/d07-x01-y01 Title=$p_\perp$ of 2nd jet (electron channel) XLabel=$p_\perp$(2nd jet) [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp$ [pb/GeV] RatioPlotYMin=-0.1 RatioPlotYMax=2.2 # END PLOT # BEGIN PLOT /ATLAS_2010_S8919674/d08-x01-y01 Title=$p_\perp$ of 2nd jet (muon channel) XLabel=$p_\perp$(2nd jet) [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp$ [pb/GeV] RatioPlotYMin=-0.1 RatioPlotYMax=2.2 # END PLOT rivet-1.8.3/data/plotinfo/MC_VH2BB.plot0000644000175000017500000010041012116077756015705 0ustar sunsun# BEGIN PLOT /MC_VH2BB/pure_bb_Delta_eta Title= $\Delta\eta$ between b-hadron pair (without cuts) XLabel= $\Delta\eta$ YLabel= $\text{d}\sigma/\text{d}\Delta\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_bb_Delta_phi Title= $\Delta\phi$ between b-hadron pair (without cuts) XLabel= $\Delta\phi$ YLabel= $\text{d}\sigma/\text{d}\Delta\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_bb_Delta_pT Title= $\Delta{p_T}$ between b-hadron pair (without cuts) XLabel= $\Delta{p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}\Delta{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_bb_Delta_R Title= $\Delta{R}$ between b-hadron pair (without cuts) XLabel= $\Delta{R}$ YLabel= $\text{d}\sigma/\text{d}\Delta{R}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_b_eta Title= $\eta$ of b-hadron (without cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_b_multiplicity Title= b-hadron multiplicity (without cuts) XLabel= $N_{b-Hadron}$ YLabel= $\text{d}\sigma/\text{d}N_{b-Hadron}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_b_phi Title= $\phi$ of b-hadron (without cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_b_pT Title= ${p_T}$ of b-hadron (without cuts) XLabel= ${p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_H_eta_using_bb Title= $\eta$ of Higgs candidate from b-hadron pair (without cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_H_mass_using_bb Title= mass of Higgs candidate from b-hadron pair (without cuts) XLabel= $m$ YLabel= $\text{d}\sigma/\text{d}m$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_H_phi_using_bb Title= $\phi$ of Higgs candidate from b-hadron pair (without cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_H_pT_using_bb Title= ${p_T}$ of Higgs candidate from b-hadron pair (without cuts) XLabel= ${p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}p_T$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_VBbb_Delta_eta Title= $\Delta\eta$ between Higgs candidate and W (without cuts) XLabel= $\Delta\eta$ YLabel= $\text{d}\sigma/\text{d}\Delta\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_VBbb_Delta_phi Title= $\Delta\phi$ between Higgs candidate and W (without cuts) XLabel= $\Delta\phi$ YLabel= $\text{d}\sigma/\text{d}\Delta\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_VBbb_Delta_pT Title= $\Delta{p_T}$ between Higgs candidate and W (without cuts) XLabel= $\Delta{p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}\Delta{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_VBbb_Delta_R Title= $\Delta{R}$ between Higgs candidate and W (without cuts) XLabel= $\Delta{R}$ YLabel= $\text{d}\sigma/\text{d}\Delta{R}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_bb_Delta_eta Title= $\Delta\eta$ between b-hadron pair (with cuts) XLabel= $\Delta\eta$ YLabel= $\text{d}\sigma/\text{d}\Delta\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_bb_Delta_phi Title= $\Delta\phi$ between b-hadron pair (with cuts) XLabel= $\Delta\phi$ YLabel= $\text{d}\sigma/\text{d}\Delta\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_bb_Delta_pT Title= $\Delta{p_T}$ between b-hadron pair (with cuts) XLabel= $\Delta{p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}\Delta{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_bb_Delta_R Title= $\Delta{R}$ between b-hadron pair (with cuts) XLabel= $\Delta{R}$ YLabel= $\text{d}\sigma/\text{d}\Delta{R}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_b_eta Title= $\eta$ of b-hadron (with cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_b_phi Title= $\phi$ of b-hadron (with cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_b_pT Title= ${p_T}$ of b-hadron (with cuts) XLabel= ${p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_H_eta_using_bb Title= $\eta$ of Higgs candidate from b-hadron pair (with cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_H_mass_using_bb Title= mass of Higgs candidate from b-hadron pair (with cuts) XLabel= $m$ YLabel= $\text{d}\sigma/\text{d}m$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_H_phi_using_bb Title= $\phi$ of Higgs candidate from b-hadron pair (with cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_H_pT_using_bb Title= ${p_T}$ of Higgs candidate from b-hadron pair (with cuts) XLabel= ${p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}p_T$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_VBbb_Delta_eta Title= $\Delta\eta$ between Higgs candidate and W (with cuts) XLabel= $\Delta\eta$ YLabel= $\text{d}\sigma/\text{d}\Delta\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_VBbb_Delta_phi Title= $\Delta\phi$ between Higgs candidate and W (with cuts) XLabel= $\Delta\phi$ YLabel= $\text{d}\sigma/\text{d}\Delta\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_VBbb_Delta_pT Title= $\Delta{p_T}$ between Higgs candidate and W (with cuts) XLabel= $\Delta{p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}\Delta{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_VBbb_Delta_R Title= $\Delta{R}$ between Higgs candidate and W (with cuts) XLabel= $\Delta{R}$ YLabel= $\text{d}\sigma/\text{d}\Delta{R}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_b_multiplicity Title= b-hadron multiplicity (with cuts) XLabel= $N_{b-Hadron}$ YLabel= $\text{d}\sigma/\text{d}N_{b-Hadron}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_bb_Delta_eta Title= $\Delta\eta$ between b-jet pair (anti-$k_t$ $R=0.4$ jets without cuts) XLabel= $\Delta\eta$ YLabel= $\text{d}\sigma/\text{d}\Delta\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_bb_Delta_phi Title= $\Delta\phi$ between b-jet pair (anti-$k_t$ $R=0.4$ jets without cuts) XLabel= $\Delta\phi$ YLabel= $\text{d}\sigma/\text{d}\Delta\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_bb_Delta_pT Title= $\Delta{p_T}$ between b-jet pair (anti-$k_t$ $R=0.4$ jets without cuts) XLabel= $\Delta{p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}\Delta{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_bb_Delta_R Title= $\Delta{R}$ between b-jet pair (anti-$k_t$ $R=0.4$ jets without cuts) XLabel= $\Delta{R}$ YLabel= $\text{d}\sigma/\text{d}\Delta{R}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_b_jet_eta Title= $\eta$ of b-jet (anti-$k_t$ $R=0.4$ jet without cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_b_jet_multiplicity Title= b-jet multiplicity (anti-$k_t$ $R=0.4$ jet without cuts) XLabel= $N_{b-jet}$ YLabel= $\text{d}\sigma/\text{d}N_{b-jet}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_b_jet_phi Title= $\phi$ of b-jet (anti-$k_t$ $R=0.4$ jet without cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_b_jet_pT Title= ${p_T}$ of b-jet (anti-$k_t$ $R=0.4$ jet without cuts) XLabel= ${p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}p_T$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_H_eta_using_bb Title= $\eta$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.4$ jets without cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_H_mass_using_bb Title= $m$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.4$ jets without cuts) XLabel= $m [GeV]$ YLabel= $\text{d}\sigma/\text{d}m$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_H_phi_using_bb Title= $\phi$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.4$ jets without cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_H_pT_using_bb Title= ${p_T}$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.4$ jets without cuts) XLabel= $p_T [GeV]$ YLabel= $\text{d}\sigma/\text{d}p_T$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_jet_eta Title= $\eta$ of jet (anti-$k_t$ $R=0.4$ jet without cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_jet_multiplicity Title= jet multiplicity (anti-$k_t$ $R=0.4$ jet without cuts) XLabel= $N_{jet}$ YLabel= $\text{d}\sigma/\text{d}N_{jet}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_jet_phi Title= $\phi$ of jet (anti-$k_t$ $R=0.4$ jet without cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_jet_pT Title= ${p_T}$ of jet (anti-$k_t$ $R=0.4$ jet without cuts) XLabel= ${p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}p_T$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_VBbb_Delta_eta Title= $\Delta\eta$ between Higgs candidate and W (anti-$k_t$ $R=0.4$ jets without cuts) XLabel= $\Delta\eta$ YLabel= $\text{d}\sigma/\text{d}\Delta\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_VBbb_Delta_phi Title= $\Delta\phi$ between Higgs candidate and W (anti-$k_t$ $R=0.4$ jets without cuts) XLabel= $\Delta\phi$ YLabel= $\text{d}\sigma/\text{d}\Delta\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_VBbb_Delta_pT Title= $\Delta{p_T}$ between Higgs candidate and W (anti-$k_t$ $R=0.4$ jets without cuts) XLabel= $\Delta{p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}\Delta{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_VBbb_Delta_R Title= $\Delta{R}$ between Higgs candidate and W (anti-$k_t$ $R=0.4$ jets without cuts) XLabel= $\Delta{R}$ YLabel= $\text{d}\sigma/\text{d}\Delta{R}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_bb_Delta_eta Title= $\Delta\eta$ between b-jet pair (anti-$k_t$ $R=0.4$ jets with cuts) XLabel= $\Delta\eta$ YLabel= $\text{d}\sigma/\text{d}\Delta\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_bb_Delta_phi Title= $\Delta\phi$ between b-jet pair (anti-$k_t$ $R=0.4$ jets with cuts) XLabel= $\Delta\phi$ YLabel= $\text{d}\sigma/\text{d}\Delta\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_bb_Delta_pT Title= $\Delta{p_T}$ between b-jet pair (anti-$k_t$ $R=0.4$ jets with cuts) XLabel= $\Delta{p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}\Delta{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_bb_Delta_R Title= $\Delta{R}$ between b-jet pair (anti-$k_t$ $R=0.4$ jets with cuts) XLabel= $\Delta{R}$ YLabel= $\text{d}\sigma/\text{d}\Delta{R}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_b_jet_eta Title= $\eta$ of b-jet (anti-$k_t$ $R=0.4$ jet with cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_b_jet_phi Title= $\phi$ of b-jet (anti-$k_t$ $R=0.4$ jet with cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_b_jet_pT Title= ${p_T}$ of b-jet (anti-$k_t$ $R=0.4$ jet with cuts) XLabel= ${p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}p_T$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_H_eta_using_bb Title= $\eta$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.4$ jets with cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_H_mass_using_bb Title= $m$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.4$ jets) XLabel= $m [GeV]$ YLabel= $\text{d}\sigma/\text{d}m$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_H_phi_using_bb Title= $\phi$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.4$ jets with cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_H_pT_using_bb Title= ${p_T}$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.4$ jets with cuts) XLabel= $p_T [GeV]$ YLabel= $\text{d}\sigma/\text{d}p_T$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_VBbb_Delta_eta Title= $\Delta\eta$ between Higgs candidate and W (anti-$k_t$ $R=0.4$ jets with cuts) XLabel= $\Delta\eta$ YLabel= $\text{d}\sigma/\text{d}\Delta\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_VBbb_Delta_phi Title= $\Delta\phi$ between Higgs candidate and W (anti-$k_t$ $R=0.4$ jets with cuts) XLabel= $\Delta\phi$ YLabel= $\text{d}\sigma/\text{d}\Delta\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_VBbb_Delta_pT Title= $\Delta{p_T}$ between Higgs candidate and W (anti-$k_t$ $R=0.4$ jets with cuts) XLabel= $\Delta{p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}\Delta{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_VBbb_Delta_R Title= $\Delta{R}$ between Higgs candidate and W (anti-$k_t$ $R=0.4$ jets with cuts) XLabel= $\Delta{R}$ YLabel= $\text{d}\sigma/\text{d}\Delta{R}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_b_jet_multiplicity Title= b-jet multiplicity (anti-$k_t$ $R=0.4$ jet with cuts) XLabel= $N_{b-jet}$ YLabel= $\text{d}\sigma/\text{d}N_{b-jet}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_bb_Delta_eta Title= $\Delta\eta$ between b-jet pair (anti-$k_t$ $R=0.5$ jets without cuts) XLabel= $\Delta\eta$ YLabel= $\text{d}\sigma/\text{d}\Delta\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_bb_Delta_phi Title= $\Delta\phi$ between b-jet pair (anti-$k_t$ $R=0.5$ jets without cuts) XLabel= $\Delta\phi$ YLabel= $\text{d}\sigma/\text{d}\Delta\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_bb_Delta_pT Title= $\Delta{p_T}$ between b-jet pair (anti-$k_t$ $R=0.5$ jets without cuts) XLabel= $\Delta{p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}\Delta{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_bb_Delta_R Title= $\Delta{R}$ between b-jet pair (anti-$k_t$ $R=0.5$ jets without cuts) XLabel= $\Delta{R}$ YLabel= $\text{d}\sigma/\text{d}\Delta{R}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_b_jet_eta Title= $\eta$ of b-jet (anti-$k_t$ $R=0.5$ jet without cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_b_jet_multiplicity Title= b-jet multiplicity (anti-$k_t$ $R=0.5$ jet without cuts) XLabel= $N_{b-jet}$ YLabel= $\text{d}\sigma/\text{d}N_{b-jet}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_b_jet_phi Title= $\phi$ of b-jet (anti-$k_t$ $R=0.5$ jet without cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_b_jet_pT Title= ${p_T}$ of b-jet (anti-$k_t$ $R=0.5$ jet without cuts) XLabel= ${p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}p_T$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_H_eta_using_bb Title= $\eta$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.5$ jets without cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_H_mass_using_bb Title= $m$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.5$ jets without cuts) XLabel= $m [GeV]$ YLabel= $\text{d}\sigma/\text{d}m$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_H_phi_using_bb Title= $\phi$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.5$ jets without cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_H_pT_using_bb Title= ${p_T}$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.5$ jets without cuts) XLabel= $p_T [GeV]$ YLabel= $\text{d}\sigma/\text{d}p_T$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_jet_eta Title= $\eta$ of jet (anti-$k_t$ $R=0.5$ jet without cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_jet_multiplicity Title= jet multiplicity (anti-$k_t$ $R=0.5$ jet without cuts) XLabel= $N_{jet}$ YLabel= $\text{d}\sigma/\text{d}N_{jet}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_jet_phi Title= $\phi$ of jet (anti-$k_t$ $R=0.5$ jet without cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_jet_pT Title= ${p_T}$ of jet (anti-$k_t$ $R=0.5$ jet without cuts) XLabel= ${p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}p_T$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_VBbb_Delta_eta Title= $\Delta\eta$ between Higgs candidate and W (anti-$k_t$ $R=0.5$ jets without cuts) XLabel= $\Delta\eta$ YLabel= $\text{d}\sigma/\text{d}\Delta\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_VBbb_Delta_phi Title= $\Delta\phi$ between Higgs candidate and W (anti-$k_t$ $R=0.5$ jets without cuts) XLabel= $\Delta\phi$ YLabel= $\text{d}\sigma/\text{d\Delta\phi}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_VBbb_Delta_pT Title= $\Delta{p_T}$ between Higgs candidate and W (anti-$k_t$ $R=0.5$ jets without cuts) XLabel= $\Delta{p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}\Delta{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_VBbb_Delta_R Title= $\Delta{R}$ between Higgs candidate and W (anti-$k_t$ $R=0.5$ jets without cuts) XLabel= $\Delta{R}$ YLabel= $\text{d}\sigma/\text{d}\Delta{R}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_bb_Delta_eta Title= $\Delta\eta$ between b-jet pair (anti-$k_t$ $R=0.5$ jets with cuts) XLabel= $\Delta\eta$ YLabel= $\text{d}\sigma/\text{d}\Delta\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_bb_Delta_phi Title= $\Delta\phi$ between b-jet pair (anti-$k_t$ $R=0.5$ jets with cuts) XLabel= $\Delta\phi$ YLabel= $\text{d}\sigma/\text{d}\Delta\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_bb_Delta_pT Title= $\Delta{p_T}$ between b-jet pair (anti-$k_t$ $R=0.5$ jets with cuts) XLabel= $\Delta{p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}\Delta{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_bb_Delta_R Title= $\Delta{R}$ between b-jet pair (anti-$k_t$ $R=0.5$ jets with cuts) XLabel= $\Delta{R}$ YLabel= $\text{d}\sigma/\text{d}\Delta{R}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_b_jet_eta Title= $\eta$ of b-jet (anti-$k_t$ $R=0.5$ jet with cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_b_jet_phi Title= $\phi$ of b-jet (anti-$k_t$ $R=0.5$ jet with cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_b_jet_pT Title= ${p_T}$ of b-jet (anti-$k_t$ $R=0.5$ jet with cuts) XLabel= ${p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}p_T$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_H_eta_using_bb Title= $\eta$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.5$ jets with cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_H_mass_using_bb Title= $m$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.5$ jets with cuts) XLabel= $m [GeV]$ YLabel= $\text{d}\sigma/\text{d}m$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_H_phi_using_bb Title= $\phi$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.5$ jets with cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_H_pT_using_bb Title= ${p_T}$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.5$ jets with cuts) XLabel= $p_T [GeV]$ YLabel= $\text{d}\sigma/\text{d}p_T$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_VBbb_Delta_eta Title= $\Delta\eta$ between Higgs candidate and W (anti-$k_t$ $R=0.5$ jets with cuts) XLabel= $\Delta\eta$ YLabel= $\text{d}\sigma/\text{d}\Delta\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_VBbb_Delta_phi Title= $\Delta\phi$ between Higgs candidate and W (anti-$k_t$ $R=0.5$ jets with cuts) XLabel= $\Delta\phi$ YLabel= $\text{d}\sigma/\text{d}\Delta\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_VBbb_Delta_pT Title= $\Delta{p_T}$ between Higgs candidate and W (anti-$k_t$ $R=0.5$ jets with cuts) XLabel= $\Delta{p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}\Delta{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_VBbb_Delta_R Title= $\Delta{R}$ between Higgs candidate and W (anti-$k_t$ $R=0.5$ jets with cuts) XLabel= $\Delta{R}$ YLabel= $\text{d}\sigma/\text{d}\Delta{R}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_b_jet_multiplicity Title= b-jet multiplicity (anti-$k_t$ $R=0.5$ jet with cuts) XLabel= $N_{b-jet}$ YLabel= $\text{d}\sigma/\text{d}N_{b-jet}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_bb_Delta_eta Title= $\Delta\eta$ between b-jet pair (anti-$k_t$ $R=0.6$ jets without cuts) XLabel= $\Delta\eta$ YLabel= $\text{d}\sigma/\text{d}\Delta\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_bb_Delta_phi Title= $\Delta\phi$ between b-jet pair (anti-$k_t$ $R=0.6$ jets without cuts) XLabel= $\Delta\phi$ YLabel= $\text{d}\sigma/\text{d}\Delta\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_bb_Delta_pT Title= $\Delta{p_T}$ between b-jet pair (anti-$k_t$ $R=0.6$ jets without cuts) XLabel= $\Delta{p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}\Delta{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_bb_Delta_R Title= $\Delta{R}$ between b-jet pair (anti-$k_t$ $R=0.6$ jets without cuts) XLabel= $\Delta{R}$ YLabel= $\text{d}\sigma/\text{d}\Delta{R}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_b_jet_eta Title= $\eta$ of b-jet (anti-$k_t$ $R=0.6$ jet without cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_b_jet_multiplicity Title= b-jet multiplicity (anti-$k_t$ $R=0.6$ jet without cuts) XLabel= $N_{jet}$ YLabel= $\text{d}\sigma/\text{d}N_{jet}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_b_jet_phi Title= $\phi$ of b-jet (anti-$k_t$ $R=0.6$ jet without cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_b_jet_pT Title= ${p_T}$ of b-jet (anti-$k_t$ $R=0.6$ jet without cuts) XLabel= ${p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}p_T$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_H_eta_using_bb Title= $\eta$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.6$ jets without cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_H_mass_using_bb Title= $m$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.6$ jets without cuts) XLabel= $m [GeV]$ YLabel= $\text{d}\sigma/\text{d}m$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_H_phi_using_bb Title= $\phi$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.6$ jets without cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_H_pT_using_bb Title= ${p_T}$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.6$ jets without cuts) XLabel= $p_T [GeV]$ YLabel= $\text{d}\sigma/\text{d}p_T$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_jet_eta Title= $\eta$ of jet (anti-$k_t$ $R=0.6$ jet without cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_jet_multiplicity Title= jet multiplicity (anti-$k_t$ $R=0.6$ jet without cuts) XLabel= $N_{jet}$ YLabel= $\text{d}\sigma/\text{d}N_{jet}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_jet_phi Title= $\phi$ of jet (anti-$k_t$ $R=0.6$ jet without cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_jet_pT Title= ${p_T}$ of jet (anti-$k_t$ $R=0.6$ jet without cuts) XLabel= ${p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}p_T$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_VBbb_Delta_eta Title= $\Delta\eta$ between Higgs candidate and W (anti-$k_t$ $R=0.6$ jets without cuts) XLabel= $\Delta\eta$ YLabel= $\text{d}\sigma/\text{d}\Delta\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_VBbb_Delta_phi Title= $\Delta\phi$ between Higgs candidate and W (anti-$k_t$ $R=0.6$ jets without cuts) XLabel= $\Delta\phi$ YLabel= $\text{d}\sigma/\text{d}\Delta\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_VBbb_Delta_pT Title= $\Delta{p_T}$ between Higgs candidate and W (anti-$k_t$ $R=0.6$ jets without cuts) XLabel= $\Delta{p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}\Delta{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_VBbb_Delta_R Title= $\Delta{R}$ between Higgs candidate and W (anti-$k_t$ $R=0.6$ jets without cuts) XLabel= $\Delta{R}$ YLabel= $\text{d}\sigma/\text{d}\Delta{R}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_bb_Delta_eta Title= $\Delta\eta$ between b-jet pair (anti-$k_t$ $R=0.6$ jets with cuts) XLabel= $\Delta\eta$ YLabel= $\text{d}\sigma/\text{d}\Delta\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_bb_Delta_phi Title= $\Delta\phi$ between b-jet pair (anti-$k_t$ $R=0.6$ jets with cuts) XLabel= $\Delta\phi$ YLabel= $\text{d}\sigma/\text{d}\Delta\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_bb_Delta_pT Title= $\Delta{p_T}$ between b-jet pair (anti-$k_t$ $R=0.6$ jets with cuts) XLabel= $\Delta{p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}\Delta{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_bb_Delta_R Title= $\Delta{R}$ between b-jet pair (anti-$k_t$ $R=0.6$ jets with cuts) XLabel= $\Delta{R}$ YLabel= $\text{d}\sigma/\text{d}\Delta{R}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_b_jet_eta Title= $\eta$ of b-jet (anti-$k_t$ $R=0.6$ jet with cuts XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_b_jet_phi Title= $\phi$ of b-jet (anti-$k_t$ $R=0.6$ jet with cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_b_jet_pT Title= ${p_T}$ of b-jet (anti-$k_t$ $R=0.6$ jet with cuts) XLabel= ${p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}p_T$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_H_eta_using_bb Title= $\eta$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.6$ jets with cuts) XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_H_mass_using_bb Title= $m$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.6$ jets with cuts) XLabel= $m [GeV]$ YLabel= $\text{d}\sigma/\text{d}m$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_H_phi_using_bb Title= $\phi$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.6$ jets with cuts) XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_H_pT_using_bb Title= ${p_T}$ of Higgs candidate from b-jet pair (anti-$k_t$ $R=0.6$ jets with cuts) XLabel= $p_T [GeV]$ YLabel= $\text{d}\sigma/\text{d}p_T$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_VBbb_Delta_eta Title= $\Delta\eta$ between Higgs candidate and W (anti-$k_t$ $R=0.6$ jets with cuts) XLabel= $\Delta\eta$ YLabel= $\text{d}\sigma/\text{d}\Delta\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_VBbb_Delta_phi Title= $\Delta\phi$ between Higgs candidate and W (anti-$k_t$ $R=0.6$ jets with cuts) XLabel= $\Delta\phi$ YLabel= $\text{d}\sigma/\text{d}\Delta\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_VBbb_Delta_pT Title= $\Delta{p_T}$ between Higgs candidate and W (anti-$k_t$ $R=0.6$ jets with cuts) XLabel= $\Delta{p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}\Delta{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_VBbb_Delta_R Title= $\Delta{R}$ between Higgs candidate and W (anti-$k_t$ $R=0.6$ jets with cuts) XLabel= $\Delta{R}$ YLabel= $\text{d}\sigma/\text{d}\Delta{R}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_b_jet_multiplicity Title= b-jet multiplicity (anti-$k_t$ $R=0.6$ jet with cuts) XLabel= $N_{b-jet}$ YLabel= $\text{d}\sigma/\text{d}N_{b-jet}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/VB_eta Title= $\eta$ of vector boson XLabel= $\eta$ YLabel= $\text{d}\sigma/\text{d}\eta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/VB_mass Title= $m$ of vector boson XLabel= $m$ [GeV] YLabel= $\text{d}\sigma/\text{d}m$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/Z_multiplicity Title= Z boson multiplicity XLabel= $N_{Z}$ YLabel= $\text{d}\sigma/\text{d}N_{Z}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/W_multiplicity Title= W boson multiplicity XLabel= $N_{W}$ YLabel= $\text{d}\sigma/\text{d}N_{W}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/VB_phi Title= $\phi$ of W XLabel= $\phi$ YLabel= $\text{d}\sigma/\text{d}\phi$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/VB_pT Title= ${p_T}$ of W XLabel= ${p_T}$ [GeV] YLabel= $\text{d}\sigma/\text{d}{p_T}$ [pb/GeV] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_bVB_angle_Hframe Title= $\theta_{MIN}$ between b-hadron and W, in Higgs rest frame (without cuts) XLabel= $\theta$ YLabel= $\text{d}\sigma/\text{d}\theta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_bVB_angle_Hframe Title= $\theta_{MIN}$ between b-hadron and W, in Higgs rest frame (with cuts) XLabel= $\theta$ YLabel= $\text{d}\sigma/\text{d}\theta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_bVB_angle_Hframe Title= $\theta_{MIN}$ between b-jet and W, in Higgs rest frame (anti-$k_t$ $R=0.4$ jets without cuts) XLabel= $\theta$ YLabel= $\text{d}\sigma/\text{d}\theta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_bVB_angle_Hframe Title= $\theta_{MIN}$ between b-jet and W, in Higgs rest frame (anti-$k_t$ $R=0.4$ jets with cuts) XLabel= $\theta$ YLabel= $\text{d}\sigma/\text{d}\theta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_bVB_angle_Hframe Title= $\theta_{MIN}$ between b-jet and W, in Higgs rest frame (anti-$k_t$ $R=0.5$ jets without cuts) XLabel= $\theta$ YLabel= $\text{d}\sigma/\text{d}\theta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_bVB_angle_Hframe Title= $\theta_{MIN}$ between b-jet and W, in Higgs rest frame (anti-$k_t$ $R=0.5$ jets with cuts) XLabel= $\theta$ YLabel= $\text{d}\sigma/\text{d}\theta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_bVB_angle_Hframe Title= $\theta_{MIN}$ between b-jet and W, in Higgs rest frame (anti-$k_t$ $R=0.6$ jets without cuts) XLabel= $\theta$ YLabel= $\text{d}\sigma/\text{d}\theta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_bVB_angle_Hframe Title= $\theta_{MIN}$ between b-jet and W, in Higgs rest frame (anti-$k_t$ $R=0.6$ jets with cuts) XLabel= $\theta$ YLabel= $\text{d}\sigma/\text{d}\theta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_bb_angle_Hframe Title= $\theta$ between b-hadrons, in Higgs rest frame (without cuts) XLabel= $\theta$ YLabel= $\text{d}\sigma/\text{d}\theta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_bb_angle_Hframe Title= $\theta$ between b-hadrons, in Higgs rest frame (with cuts) XLabel= $\theta$ YLabel= $\text{d}\sigma/\text{d}\theta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_bb_angle_Hframe Title= $\theta$ between b-jets, in Higgs rest frame (anti-$k_t$ $R=0.4$ jets without cuts) XLabel= $\theta$ YLabel= $\text{d}\sigma/\text{d}\theta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_bb_angle_Hframe Title= $\theta$ between b-jets, in Higgs rest frame (anti-$k_t$ $R=0.4$ jets with cuts) XLabel= $\theta$ YLabel= $\text{d}\sigma/\text{d}\theta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_bb_angle_Hframe Title= $\theta$ between b-jets, in Higgs rest frame (anti-$k_t$ $R=0.5$ jets without cuts) XLabel= $\theta$ YLabel= $\text{d}\sigma/\text{d}\theta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_bb_angle_Hframe Title= $\theta$ between b-jets, in Higgs rest frame (anti-$k_t$ $R=0.5$ jets with cuts) XLabel= $\theta$ YLabel= $\text{d}\sigma/\text{d}\theta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_bb_angle_Hframe Title= $\theta$ between b-jets, in Higgs rest frame (anti-$k_t$ $R=0.6$ jets without cuts) XLabel= $\theta$ YLabel= $\text{d}\sigma/\text{d}\theta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_bb_angle_Hframe Title= $\theta$ between b-jets, in Higgs rest frame (anti-$k_t$ $R=0.6$ jets with cuts) XLabel= $\theta$ YLabel= $\text{d}\sigma/\text{d}\theta$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R04_cuts_bb_deltaR_v_HpT Title= $\Delta{R}$ between b-jets against $p_T$ of Higgs candidate (anti-$k_t$ $R=0.4$ jets with cuts) XLabel= $p_T$ [GeV] YLabel= $\Delta{R}$ LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R05_cuts_bb_deltaR_v_HpT Title= $\Delta{R}$ between b-jets against $p_T$ of Higgs candidate (anti-$k_t$ $R=0.5$ jets with cuts) XLabel= $p_T$ [GeV] YLabel= $\Delta{R}$ LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/R06_cuts_bb_deltaR_v_HpT Title= $\Delta{R}$ between b-jets against $p_T$ of Higgs candidate (anti-$k_t$ $R=0.6$ jets with cuts) XLabel= $p_T$ [GeV] YLabel= $\Delta{R}$ LogY=0 # END PLOT # BEGIN PLOT /MC_VH2BB/pure_cuts_bb_deltaR_v_HpT Title= $\Delta{R}$ between b-hadrons against $p_T$ of Higgs candidate (with cuts) XLabel= $p_T$ [GeV] YLabel= $\Delta{R}$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/ZEUS_2001_S4815815.plot0000644000175000017500000000016112116077756017017 0ustar sunsun# BEGIN PLOT /ZEUS_2001_S4815815/JetET1 Title=Jet transverse energy XLabel=$E_{\perp}$ YLabel=Events # END PLOT rivet-1.8.3/data/plotinfo/ALICE_2011_S8945144.plot0000644000175000017500000000211712116077756017055 0ustar sunsun# BEGIN PLOT /ALICE_2011_S8945144/d0 XLabel=$p_\perp$ [GeV/c] YLabel=$1/N_\text{event} d^{2}N/dy/dp_\perp$ [GeV/c]$^{-1}$ # END PLOT # BEGIN PLOT /ALICE_2011_S8945144/d01-x01-y01 Title=$\pi^+$ tranverse momentum, $|\eta|<0.5$, $\sqrt{s}=0.9$ TeV (INEL) # END PLOT # BEGIN PLOT /ALICE_2011_S8945144/d01-x01-y02 Title=$\pi^-$ tranverse momentum, $|\eta|<0.5$, $\sqrt{s}=0.9$ TeV (INEL) # END PLOT # BEGIN PLOT /ALICE_2011_S8945144/d02-x01-y01 Title=$K^+$ tranverse momentum, $|\eta|<0.5$, $\sqrt{s}=0.9$ TeV (INEL) # END PLOT # BEGIN PLOT /ALICE_2011_S8945144/d02-x01-y02 Title=$K^-$ tranverse momentum, $|\eta|<0.5$, $\sqrt{s}=0.9$ TeV (INEL) # END PLOT # BEGIN PLOT /ALICE_2011_S8945144/d03-x01-y01 Title=$p$ tranverse momentum, $|\eta|<0.5$, $\sqrt{s}=0.9$ TeV (INEL) # END PLOT # BEGIN PLOT /ALICE_2011_S8945144/d03-x01-y02 Title=$\bar p$ tranverse momentum, $|\eta|<0.5$, $\sqrt{s}=0.9$ TeV (INEL) # END PLOT # BEGIN PLOT /ALICE_2011_S8945144/d04-x01-y01 Title=Average $p_\perp$ vs mass, $|\eta|<0.5$, $\sqrt{s}=0.9$ TeV (INEL) XLabel=mass YLabel=$\langle p_\perp \rangle$ [GeV/c] # END PLOT rivet-1.8.3/data/plotinfo/STAR_2006_S6860818.plot0000644000175000017500000000625312116077756017024 0ustar sunsun# BEGIN PLOT /STAR_2006_S6860818/d01-x01-y01 Title=$K^0_\text{s}$ transverse momentum XLabel=$p_\perp$ [GeV] YLabel=$1/(2\pi) \, d^2N/(p_\perp dy dp_\perp)$ [GeV$^{-2}$] FullRange=1 # END PLOT # BEGIN PLOT /STAR_2006_S6860818/d01-x02-y01 Title=$K^-$ transverse momentum XLabel=$p_\perp$ [GeV] YLabel=$1/(2\pi) \, d^2N/(p_\perp dy dp_\perp)$ [GeV$^{-2}$] FullRange=1 # END PLOT # BEGIN PLOT /STAR_2006_S6860818/d01-x03-y01 Title=$K^+$ transverse momentum XLabel=$p_\perp$ [GeV] YLabel=$1/(2\pi) \, d^2N/(p_\perp dy dp_\perp)$ [GeV$^{-2}$] FullRange=1 # END PLOT # BEGIN PLOT /STAR_2006_S6860818/d01-x04-y01 Title=$\Lambda$ transverse momentum XLabel=$p_\perp$ [GeV] YLabel=$1/(2\pi) \, d^2N/(p_\perp dy dp_\perp)$ [GeV$^{-2}$] FullRange=1 # END PLOT # BEGIN PLOT /STAR_2006_S6860818/d01-x05-y01 Title=$\bar \Lambda$ transverse momentum XLabel=$p_\perp$ [GeV] YLabel=$1/(2\pi) \, d^2N/(p_\perp dy dp_\perp)$ [GeV$^{-2}$] FullRange=1 # END PLOT # BEGIN PLOT /STAR_2006_S6860818/d01-x06-y01 Title=$\Xi^-$ transverse momentum XLabel=$p_\perp$ [GeV] YLabel=$1/(2\pi) \, d^2N/(p_\perp dy dp_\perp)$ [GeV$^{-2}$] FullRange=1 # END PLOT # BEGIN PLOT /STAR_2006_S6860818/d01-x07-y01 Title=$\Xi^+$ transverse momentum XLabel=$p_\perp$ [GeV] YLabel=$1/(2\pi) \, d^2N/(p_\perp dy dp_\perp)$ [GeV$^{-2}$] FullRange=1 # END PLOT # BEGIN PLOT /STAR_2006_S6860818/d01-x08-y01 Title=$\Omega$ transverse momentum XLabel=$p_\perp$ [GeV] YLabel=$1/(2\pi) \, d^2N/(p_\perp dy dp_\perp)$ [GeV$^{-2}$] FullRange=1 # END PLOT # BEGIN PLOT /STAR_2006_S6860818/d02-x01-y01 Title=Anti-baryon over baryon ratio vs strangeness XLabel=strangeness YLabel=anti-baryon/baryon ratio XCustomMajorTicks=0 0 ($\bar p / p$) 1 1 ($\bar \Lambda / \Lambda$) 2 2 ($\bar \Xi / \Xi$) 3 3 ($\bar \Omega / \Omega$) LogY=0 ShowZero=0 # END PLOT # BEGIN PLOT /STAR_2006_S6860818/d02-x02-y01 Title=Ratio of $\bar \Lambda / \Lambda$ as function of $p_\perp$ XLabel=$p_\perp$ [GeV] YLabel=$\bar \Lambda / \Lambda$ LogY=0 YMin=0 YMax=2 # END PLOT # BEGIN PLOT /STAR_2006_S6860818/d02-x03-y01 Title=Ratio of $\Xi^+ / \Xi^-$ as function of $p_\perp$ XLabel=$p_\perp$ [GeV] YLabel=$\Xi^+ / \Xi^-$ LogY=0 YMin=0 YMax=2 # END PLOT # BEGIN PLOT /STAR_2006_S6860818/d03-x01-y01 Title=Mean $p_\perp$ vs particle mass XLabel=mass [GeV] YLabel=$\langle p_\perp \rangle$ [GeV] LogY=0 XMin=0 XMax=1.8 # END PLOT # BEGIN HISTOGRAM /STAR_2006_S6860818/d03-x01-y01 ErrorBars=1 PolyMarker=o # END HISTOGRAM # BEGIN SPECIAL /STAR_2006_S6860818/d03-x01-y01 \rput[B]\physicscoor(0.145, 0.14){\small $\pi^-$} \rput[B]\physicscoor(0.480, 0.14){\small $K^-$} \rput[B]\physicscoor(0.510, 0.25){\small $K^0$} \rput[B]\physicscoor(0.775, 0.14){\small $\rho^0$} \rput[B]\physicscoor(0.896, 0.14){\small $K^{*0}$} \rput[B]\physicscoor(0.938, 0.25){\small $\bar p$} \rput[B]\physicscoor(1.019, 0.14){\small $\phi$} \rput[B]\physicscoor(1.105, 0.14){\small $\Lambda$} \rput[B]\physicscoor(1.125, 0.25){\small $\bar \Lambda$} \rput[B]\physicscoor(1.312, 0.14){\small $\Xi^-$} \rput[B]\physicscoor(1.332, 0.25){\small $\bar \Xi^+$} \rput[B]\physicscoor(1.384, 0.14){\small $\Sigma$} \rput[B]\physicscoor(1.520, 0.14){\small $\Lambda$} \rput[B]\physicscoor(1.672, 0.14){\small $(\Omega + \bar\Omega)$} # END SPECIAL rivet-1.8.3/data/plotinfo/ATLAS_2012_I1082009.plot0000644000175000017500000000153112116077756017053 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1082009/d08-x01-y01 Title=$R(p_\perp,z)$ for $255x10^{-6}$ 1.5 $n_\text{ch} > 1$ 2.5 $n_\text{ch} > 2$ 3.5 $n_\text{ch} > 3$ YLabel=$\sigma_\text{inel}$ [mb] LegendYPos=0.4 LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/CMS_2011_S9086218.plot0000644000175000017500000000132012116077756016654 0ustar sunsun# BEGIN PLOT /CMS_2011_S9086218/d.* XLabel=$p_{T}$ [GeV] YLabel=d$^2\sigma$/d$p_{T}$d$y$ [pb/GeV] FullRange=1 LogY=1 LogX=1 LegendYPos=0.9 # END PLOT # BEGIN PLOT /CMS_2011_S9086218/d01-x01-y01 Title=Inclusive jets, $0.0 < |y| < 0.5$ # END PLOT # BEGIN PLOT /CMS_2011_S9086218/d02-x01-y01 Title=Inclusive jets, $0.5 < |y| < 1.0$ # END PLOT # BEGIN PLOT /CMS_2011_S9086218/d03-x01-y01 Title=Inclusive jets, $1.0 < |y| < 1.5$ # END PLOT # BEGIN PLOT /CMS_2011_S9086218/d04-x01-y01 Title=Inclusive jets, $1.5 < |y| < 2.0$ # END PLOT # BEGIN PLOT /CMS_2011_S9086218/d05-x01-y01 Title=Inclusive jets, $2.0 < |y| < 2.5$ # END PLOT # BEGIN PLOT /CMS_2011_S9086218/d06-x01-y01 Title=Inclusive jets, $2.5 < |y| < 3.0$ # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_CONF_2011_098.plot0000644000175000017500000000355512116077756017716 0ustar sunsun# BEGIN PLOT /ATLAS_2011_CONF_2011_098/count_threeJA Title=Number of events in the 3 jets signal region A XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_CONF_2011_098/count_threeJB Title=Number of events in the 3 jets signal region B XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_CONF_2011_098/count_threeJC Title=Number of events in the 3 jets signal region C XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_CONF_2011_098/count_threeJD Title=Number of events in the 3 jets signal region D XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_CONF_2011_098/meff_1bjet Title=Effective Mass for events with 1 b-taggged jet XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/50 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_CONF_2011_098/eTmiss_1bjet Title=Missing transverse Energy for events with 1 b-taggged jet XLabel=$E_{\mathrm{T}}^{\rm miss}$ [GeV] YLabel=$\mathrm{Events}/100 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_CONF_2011_098/pTjet_1bjet Title=$p_{\mathrm{T}}$ of the leading jet for events with 1 b-taggged jet XLabel=$p_{\mathrm{T}}^{\rm miss}$ [GeV] YLabel=$\mathrm{Events}/40 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_CONF_2011_098/meff_2bjet Title=Effective Mass for events with 2 b-taggged jets XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/50 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_CONF_2011_098/eTmiss_2bjet Title=Missing transverse Energy for events with 2 b-taggged jets XLabel=$E_{\mathrm{T}}^{\rm miss}$ [GeV] YLabel=$\mathrm{Events}/100 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_CONF_2011_098/pTjet_2bjet Title=$p_{\mathrm{T}}$ of the leading jet for events with 2 b-taggged jets XLabel=$p_{\mathrm{T}}^{\rm miss}$ [GeV] YLabel=$\mathrm{Events}/40 \mathrm{GeV}$ LogY=1 # END PLOT rivet-1.8.3/data/plotinfo/D0_1996_S3324664.plot0000644000175000017500000000173312116077756016524 0ustar sunsun# BEGIN PLOT /D0_1996_S3324664/d01-x01-y01 Title=Pseudorapidity difference of the two opposite jets XLabel=$\Delta \eta = |\eta_1 - \eta_2|$ YLabel=$\mathrm{d}N/\mathrm{d}\Delta\eta$ # END PLOT # BEGIN PLOT /D0_1996_S3324664/d02-x01-y01 Title=Azimuthal angle difference for $0 < \Delta \eta < 2$ XLabel=$1 - \Delta \phi/\pi$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\Delta\phi$ # END PLOT # BEGIN PLOT /D0_1996_S3324664/d02-x01-y02 Title=Azimuthal angle difference for $2 < \Delta \eta < 4$ XLabel=$1 - \Delta \phi/\pi$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\Delta\phi$ # END PLOT # BEGIN PLOT /D0_1996_S3324664/d02-x01-y03 Title=Azimuthal angle difference for $4 < \Delta \eta < 6$ XLabel=$1 - \Delta \phi/\pi$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\Delta\phi$ # END PLOT # BEGIN PLOT /D0_1996_S3324664/d03-x01-y01 Title=Correlation of the jets XLabel=$\Delta \eta = |\eta_1 - \eta_2|$ YLabel=$\langle\cos(\pi-\Delta\phi)\rangle$ LogY=0 YMin=0.4 YMax=1.0 LegendXPos=0.05 LegendYPos=0.5 # END PLOT rivet-1.8.3/data/plotinfo/ALICE_2012_I1181770.plot0000644000175000017500000000147412116077756017037 0ustar sunsun# BEGIN PLOT /ALICE_2012_I1181770/d XLabel=$\sqrt{s}$ [GeV] # END PLOT # BEGIN PLOT /ALICE_2012_I1181770/d01-x01-y0 Title=Production ratios of SD with $M_{X} < 200\;\GeV/c^2$ to INEL YLabel=$\sigma_\text{SD} / \sigma_\text{inel}$ # END PLOT # BEGIN PLOT /ALICE_2012_I1181770/d02-x01-y0 Title=Production ratios of DD with $\Delta\eta >3$ to INEL YLabel=$\sigma_\text{DD} / \sigma_\text{inel}$ # END PLOT # BEGIN PLOT /ALICE_2012_I1181770/d03-x01-y0 Title=Single diffraction cross-section for $M_{X} < 200\;\GeV/c^2$ YLabel=$\sigma_\text{SD}$ [mb] # END PLOT # BEGIN PLOT /ALICE_2012_I1181770/d04-x01-y0 Title=Double diffraction cross-section for $\Delta\eta > 3$ YLabel=$\sigma_\text{DD}$ [mb] # END PLOT # BEGIN PLOT /ALICE_2012_I1181770/d05-x01-y0 Title=Inelastic cross-section YLabel=$\sigma_\text{inel}$ [mb] # END PLOT rivet-1.8.3/data/plotinfo/D0_2011_I895662.plot0000644000175000017500000000123212116077756016407 0ustar sunsun# BEGIN PLOT /D0_2011_I895662/d.* XLabel=$m_\text{3jet}$ [GeV] YLabel=$d\sigma_\text{3jet} / dm_\text{3jet}$ [pb/GeV] # END PLOT # BEGIN PLOT /D0_2011_I895662/d01-x01-y01 Title=3-jet mass, $|y|<0.8$, $p_{\perp,3} > 40$\,GeV # END PLOT # BEGIN PLOT /D0_2011_I895662/d02-x01-y01 Title=3-jet mass, $|y|<1.6$, $p_{\perp,3} > 40$\,GeV # END PLOT # BEGIN PLOT /D0_2011_I895662/d03-x01-y01 Title=3-jet mass, $|y|<2.4$, $p_{\perp,3} > 40$\,GeV # END PLOT # BEGIN PLOT /D0_2011_I895662/d04-x01-y01 Title=3-jet mass, $|y|<2.4$, $p_{\perp,3} > 70$\,GeV # END PLOT # BEGIN PLOT /D0_2011_I895662/d05-x01-y01 Title=3-jet mass, $|y|<2.4$, $p_{\perp,3} > 100$\,GeV # END PLOT rivet-1.8.3/data/plotinfo/H1_1995_S3167097.plot0000644000175000017500000000403512116077756016533 0ustar sunsun# BEGIN PLOT /H1_1995_S3167097/1 Title=Stat $\mathrm{d}E_\perp/\mathrm{d}[c]$ CMS bin = 11 XLabel=$\eta$ YLabel=$1/\mathrm{N} \mathrm{d}E_{\perp}/d\eta [GeV]$ # END PLOT # BEGIN PLOT /H1_1995_S3167097/2 Title=Stat $\mathrm{d}E_\perp/\mathrm{d}[c]$ CMS bin = 12 XLabel=$\eta$ YLabel=$1/\mathrm{N} \mathrm{d}E_{\perp}/d\eta [GeV]$ # END PLOT # BEGIN PLOT /H1_1995_S3167097/21tmp Title=$\langle E_\perp \rangle$ vs kin. bin XLabel=Kinematic bin YLabel=$\langle \mathrm{E}_{\perp}\rangle$ # END PLOT # BEGIN PLOT /H1_1995_S3167097/22tmp Title=$\langle x \rangle$ vs kin. bin XLabel=Kinematic bin YLabel=$\langle x \rangle$ # END PLOT # BEGIN PLOT /H1_1995_S3167097/23tmp Title=$\langle Q^2 \rangle$ vs kin. bin XLabel=Kinematic bin YLabel=$\langle Q^{2}\rangle$ # END PLOT # BEGIN PLOT /H1_1995_S3167097/24 Title=Num events vs kin. bin XLabel=Kinematic bin YLabel=N # END PLOT # BEGIN PLOT /H1_1995_S3167097/3 Title=Stat $\mathrm{d}E_\perp/\mathrm{d}[c]$ CMS bin = 13 XLabel=$\eta$ YLabel=$1/\mathrm{N} \mathrm{d}E_{\perp}/d\eta [GeV]$ # END PLOT # BEGIN PLOT /H1_1995_S3167097/4 Title=Stat $\mathrm{d}E_\perp/\mathrm{d}[c]$ CMS bin = 14 XLabel=$\eta$ YLabel=$1/\mathrm{N} \mathrm{d}E_{\perp}/d\eta [GeV]$ # END PLOT # BEGIN PLOT /H1_1995_S3167097/5 Title=Stat $\mathrm{d}E_\perp/\mathrm{d}[c]$ CMS bin = 15 XLabel=$\eta$ YLabel=$1/\mathrm{N} \mathrm{d}E_{\perp}/d\eta [GeV]$ # END PLOT # BEGIN PLOT /H1_1995_S3167097/6 Title=Stat $\mathrm{d}E_\perp/\mathrm{d}[c]$ CMS bin = 16 XLabel=$\eta$ YLabel=$1/\mathrm{N} \mathrm{d}E_{\perp}/d\eta [GeV]$ # END PLOT # BEGIN PLOT /H1_1995_S3167097/7 Title=Stat $\mathrm{d}E_\perp/\mathrm{d}[c]$ CMS bin = 17 XLabel=$\eta$ YLabel=$1/\mathrm{N} \mathrm{d}E_{\perp}/d\eta [GeV]$ # END PLOT # BEGIN PLOT /H1_1995_S3167097/8 Title=Stat $\mathrm{d}E_\perp/\mathrm{d}[c]$ CMS bin = 18 XLabel=$\eta$ YLabel=$1/\mathrm{N} \mathrm{d}E_{\perp}/d\eta [GeV]$ # END PLOT # BEGIN PLOT /H1_1995_S3167097/9 Title=Stat $\mathrm{d}E_\perp/\mathrm{d}[c]$ CMS bin = 19 XLabel=$\eta$ YLabel=$1/\mathrm{N} \mathrm{d}E_{\perp}/d\eta [GeV]$ # END PLOT rivet-1.8.3/data/plotinfo/D0_2008_S7662670.plot0000644000175000017500000000213412116077756016507 0ustar sunsun# BEGIN PLOT /D0_2008_S7662670/d01-x01-y01 Title=Inclusive jet $p_\perp$, $0.0 < |y| < 0.4$ XLabel=Jet $p_\perp$ / GeV YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{p_\perp}$ LogX=1 # END PLOT # BEGIN PLOT /D0_2008_S7662670/d02-x01-y01 Title=Inclusive jet $p_\perp$, $0.4 < |y| < 0.8$ XLabel=Jet $p_\perp$ / GeV YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{p_\perp}$ LogX=1 # END PLOT # BEGIN PLOT /D0_2008_S7662670/d03-x01-y01 Title=Inclusive jet $p_\perp$, $0.8 < |y| < 1.2$ XLabel=Jet $p_\perp$ / GeV YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{p_\perp}$ LogX=1 # END PLOT # BEGIN PLOT /D0_2008_S7662670/d04-x01-y01 Title=Inclusive jet $p_\perp$, $1.2 < |y| < 1.6$ XLabel=Jet $p_\perp$ / GeV YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{p_\perp}$ LogX=1 # END PLOT # BEGIN PLOT /D0_2008_S7662670/d05-x01-y01 Title=Inclusive jet $p_\perp$, $1.6 < |y| < 2.0$ XLabel=Jet $p_\perp$ / GeV YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{p_\perp}$ LogX=1 # END PLOT # BEGIN PLOT /D0_2008_S7662670/d06-x01-y01 Title=Inclusive jet $p_\perp$, $2.0 < |y| < 2.4$ XLabel=Jet $p_\perp$ / GeV YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{p_\perp}$ LogX=1 # END PLOT rivet-1.8.3/data/plotinfo/BELLE_2001_S4598261.plot0000644000175000017500000000041612116077756017062 0ustar sunsun# BEGIN PLOT /BELLE_2001_S4598261/d01-x01-y01 Title=$\pi^0$ momentum XLabel=$p$ [GeV] YLabel=$1/\sigma\text{d}\sigma/dp$ [$\text{GeV}^{-1}$] # END PLOT # BEGIN PLOT /BELLE_2001_S4598261/d02-x01-y01 Title=$\pi^0$ multiplicity XLabel= YLabel=$N_{\pi^0}$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/LHCB_2011_I919315.plot0000644000175000017500000000325712116077756016655 0ustar sunsun# BEGIN PLOT /LHCB_2011_I919315/d0[2-6]-x01-y.. Title=Transverse momentum of $\Phi$-mesons XLabel=$p_T^\Phi$ [GeV] YLabel=$\text{d}\sigma /\text{d}p_\perp$ $[\mu \text{b}/\text{MeV}]$ LogY=1 # END PLOT # BEGIN PLOT /LHCB_2011_I919315/d01-x02-y01 Title=Rapidity of $\Phi$-mesons XLabel=$y^\Phi$ YLabel=$\text{d}\sigma /\text{d}y$ $[\mu \text{b}]$ LogY=0 CustomLegend=$(0.6 < p_\perp^\Phi/\text{GeV} < 5.0)$ LegendXPos=0.05 LegendYPos=0.4 # END PLOT # BEGIN PLOT /LHCB_2011_I919315/d01-x01-y01 CustomLegend=$(2.4420$ GeV XLabel=$\cos(\theta^*)$ YLabel=$\mathrm{d}\sigma/\mathrm{d}\cos(\theta^*)$ [pb] LogX=0 LogY=0 # END PLOT # BEGIN PLOT /MC_WPOL/phistar_wplus Title=$\phi^*$ inclusive for $W^+$ XLabel=$\phi^*$ YLabel=$\mathrm{d}\sigma/\mathrm{d}\phi^*$ [pb] LogX=0 LogY=0 # END PLOT # BEGIN PLOT /MC_WPOL/phistar_ptw20_wplus Title=$\phi^*$ for $p_\perp(W^+)>20$ GeV XLabel=$\phi^*$ YLabel=$\mathrm{d}\sigma/\mathrm{d}\phi^*$ [pb] LogX=0 LogY=0 # END PLOT # BEGIN PLOT /MC_WPOL/A0_wminus Title=$A_0$ for $W^-$ XLabel=$p_\perp(W)$ [GeV] YLabel=$A_0$ LogX=1 LogY=0 YMin=0.0 YMax=0.6 # END PLOT # BEGIN PLOT /MC_WPOL/A1_wminus Title=$A_1$ for $W^-$ XLabel=$p_\perp(W)$ [GeV] YLabel=$A_1$ LogX=1 LogY=0 YMin=-0.4 YMax=0.4 # END PLOT # BEGIN PLOT /MC_WPOL/A2_wminus Title=$A_2$ for $W^-$ XLabel=$p_\perp(W)$ [GeV] YLabel=$A_2$ LogX=1 LogY=0 YMin=0.0 YMax=0.6 # END PLOT # BEGIN PLOT /MC_WPOL/A3_wminus Title=$A_3$ for $W^-$ XLabel=$p_\perp(W)$ [GeV] YLabel=$A_3$ LogX=1 LogY=0 YMin=-0.2 YMax=0.3 # END PLOT # BEGIN PLOT /MC_WPOL/A4_wminus Title=$A_4$ for $W^-$ XLabel=$p_\perp(W)$ [GeV] YLabel=$A_4$ LogX=1 LogY=0 YMin=0.3 YMax=0.8 # END PLOT # BEGIN PLOT /MC_WPOL/A5_wminus Title=$A_5$ for $W^-$ XLabel=$p_\perp(W)$ [GeV] YLabel=$A_5$ LogX=1 LogY=0 YMin=-0.1 YMax=0.1 # END PLOT # BEGIN PLOT /MC_WPOL/A6_wminus Title=$A_6$ for $W^-$ XLabel=$p_\perp(W)$ [GeV] YLabel=$A_6$ LogX=1 LogY=0 YMin=-0.1 YMax=0.1 # END PLOT # BEGIN PLOT /MC_WPOL/A7_wminus Title=$A_7$ for $W^-$ XLabel=$p_\perp(W)$ [GeV] YLabel=$A_7$ LogX=1 LogY=0 YMin=-0.1 YMax=0.1 # END PLOT # BEGIN PLOT /MC_WPOL/fL_wminus Title=$f_L$ for $W^-$ XLabel=$p_\perp(W)$ [GeV] YLabel=$f_L$ LogX=1 LogY=0 YMin=0.0 YMax=0.45 # END PLOT # BEGIN PLOT /MC_WPOL/fR_wminus Title=$f_R$ for $W^-$ XLabel=$p_\perp(W)$ [GeV] YLabel=$f_R$ LogX=1 LogY=0 YMin=0.4 YMax=0.8 # END PLOT # BEGIN PLOT /MC_WPOL/f0_wminus Title=$f_0$ for $W^-$ XLabel=$p_\perp(W)$ [GeV] YLabel=$f_0$ LogX=1 LogY=0 YMin=0.0 YMax=0.3 # END PLOT # BEGIN PLOT /MC_WPOL/thetastar_wminus Title=$\cos(\theta^*)$ inclusive for $W^-$ XLabel=$\cos(\theta^*)$ YLabel=$\mathrm{d}\sigma/\mathrm{d}\cos(\theta^*)$ [pb] LogX=0 LogY=0 # END PLOT # BEGIN PLOT /MC_WPOL/thetastar_ptw20_wminus Title=$\cos(\theta^*)$ for $p_\perp(W^-)>20$ GeV XLabel=$\cos(\theta^*)$ YLabel=$\mathrm{d}\sigma/\mathrm{d}\cos(\theta^*)$ [pb] LogX=0 LogY=0 # END PLOT # BEGIN PLOT /MC_WPOL/phistar_wminus Title=$\phi^*$ inclusive for $W^-$ XLabel=$\phi^*$ YLabel=$\mathrm{d}\sigma/\mathrm{d}\phi^*$ [pb] LogX=0 LogY=0 # END PLOT # BEGIN PLOT /MC_WPOL/phistar_ptw20_wminus Title=$\phi^*$ for $p_\perp(W^-)>20$ GeV XLabel=$\phi^*$ YLabel=$\mathrm{d}\sigma/\mathrm{d}\phi^*$ [pb] LogX=0 LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/DELPHI_2002_069_CONF_603.plot0000644000175000017500000000134612116077756017736 0ustar sunsun# BEGIN PLOT /DELPHI_2002_069_CONF_603/d01-x01-y01 Title=$b$ quark fragmentation function $f(x_B^\text{prim})$ XLabel=$x_B$ YLabel=$1/N \, \text{d}{N}/\text{d}x_B$ LegendYPos=0.60 # END PLOT # BEGIN PLOT /DELPHI_2002_069_CONF_603/d02-x01-y01 Title=$b$ quark fragmentation function $f(x_B^\text{weak})$ XLabel=$x_B$ YLabel=$1/N \, \text{d}{N}/\text{d}x_B$ LegendXPos=0.10 # END PLOT # BEGIN PLOT /DELPHI_2002_069_CONF_603/d04-x01-y01 Title=Mean of $b$ quark fragmentation function $f(x_B^\text{prim})$ XLabel= YLabel=$\langle x_B \rangle$ ShowZero=0 # END PLOT # BEGIN PLOT /DELPHI_2002_069_CONF_603/d05-x01-y01 Title=Mean of $b$ quark fragmentation function $f(x_B^\text{weak})$ XLabel= YLabel=$\langle x_B \rangle$ ShowZero=0 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_I1082936.plot0000644000175000017500000001633712116077756017076 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1082936/d01-x01-y01 Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.4 ($\left|y\right| < 0.3$) XLabel=$p_\perp$~[GeV] YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d01-x01-y02 Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.4 ($0.3 \leq \left|y\right| < 0.8$) XLabel=$p_\perp$~[GeV] YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] YMin=1e-5 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d01-x01-y03 Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.4 ($0.8 \leq \left|y\right| < 1.2$) XLabel=$p_\perp$~[GeV] YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] YMin=1e-5 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d01-x01-y04 Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.4 ($1.2 \leq \left|y\right| < 2.1$) XLabel=$p_\perp$~[GeV] YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] YMin=1e-6 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d01-x01-y05 Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.4 ($2.1 \leq \left|y\right| < 2.8$) XLabel=$p_\perp$~[GeV] YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] YMin=1e-6 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d01-x01-y06 Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.4 ($2.8 \leq \left|y\right| < 3.6$) XLabel=$p_\perp$~[GeV] YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] YMin=1e-3 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d01-x01-y07 Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.4 ($3.6 \leq \left|y\right| < 4.4$) XLabel=$p_\perp$~[GeV] YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] YMin=1e-1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d02-x01-y01 Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.6 ($\left|y\right| < 0.3$) XLabel=$p_\perp$~[GeV] YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d02-x01-y02 Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.6 ($0.3 \leq \left|y\right| < 0.8$) XLabel=$p_\perp$~[GeV] YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] YMin=1e-5 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d02-x01-y03 Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.6 ($0.8 \leq \left|y\right| < 1.2$) XLabel=$p_\perp$~[GeV] YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] YMin=1e-5 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d02-x01-y04 Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.6 ($1.2 \leq \left|y\right| < 2.1$) XLabel=$p_\perp$~[GeV] YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] YMin=1e-6 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d02-x01-y05 Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.6 ($2.1 \leq \left|y\right| < 2.8$) XLabel=$p_\perp$~[GeV] YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] YMin=1e-6 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d02-x01-y06 Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.6 ($2.8 \leq \left|y\right| < 3.6$) XLabel=$p_\perp$~[GeV] YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] YMin=1e-3 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d02-x01-y07 Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.6 ($3.6 \leq \left|y\right| < 4.4$) XLabel=$p_\perp$~[GeV] YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] YMin=1e-1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d03-x01-y01 Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($y^* < 0.5$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d03-x01-y02 Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($0.5 \leq y^* < 1.0$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d03-x01-y03 Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($1.0 \leq y^* < 1.5$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d03-x01-y04 Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($1.5 \leq y^* < 2.0$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d03-x01-y05 Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($2.0 \leq y^* < 2.5$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d03-x01-y06 Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($2.5 \leq y^* < 3.0$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d03-x01-y07 Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($3.0 \leq y^* < 3.5$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d03-x01-y08 Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($3.5 \leq y^* < 4.0$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d03-x01-y09 Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($4.0 \leq y^* < 4.4$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d04-x01-y01 Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($y^* < 0.5$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d04-x01-y02 Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($0.5 \leq y^* < 1.0$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d04-x01-y03 Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($1.0 \leq y^* < 1.5$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d04-x01-y04 Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($1.5 \leq y^* < 2.0$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d04-x01-y05 Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($2.0 \leq y^* < 2.5$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d04-x01-y06 Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($2.5 \leq y^* < 3.0$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d04-x01-y07 Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($3.0 \leq y^* < 3.5$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d04-x01-y08 Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($3.5 \leq y^* < 4.0$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1082936/d04-x01-y09 Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($4.0 \leq y^* < 4.4$) XLabel=$m_{12}$~[TeV] YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] #YMin=1e-4 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_I944826.plot0000644000175000017500000000644412116077756017017 0ustar sunsun# BEGIN PLOT /ATLAS_2011_I944826/d01-x01-y01 Title=$K_S^0$ transverse momentum, $\sqrt{s}=7000$~GeV XLabel=$p_\perp[\text{GeV/c}]$ YLabel=$1/N_\text{KS}\; \text{d}N_\text{KS}/\text{d}p_\perp$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_I944826/d02-x01-y01 Title=$K_S^0$ rapidity, $\sqrt{s}=7000$~GeV XLabel=$y$ YLabel=$1/N_\text{KS}\; \text{d}N_\text{KS}/\text{d}y$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_I944826/d03-x01-y01 Title=$K_S^0$ multiplicity, $\sqrt{s}=7000$~GeV XLabel=$K_S^0$ multiplicity YLabel=$1/N_\text{ev}\; \text{d}N_\text{ev}/\text{d}N_\text{KS}$ LogY=0 YMin=-0.2 XCustomMajorTicks=0 0 1 1 2 2 3 3 # END PLOT # BEGIN PLOT /ATLAS_2011_I944826/d04-x01-y01 Title=$K_S^0$ transverse momentum, $\sqrt{s}=900$~GeV XLabel=$p_\perp[\text{GeV/c}]$ YLabel=$1/N_\text{KS}\; \text{d}N_\text{KS}/\text{d}p_\perp$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_I944826/d05-x01-y01 Title=$K_S^0$ rapidity, $\sqrt{s}=900$~GeV XLabel=$y$ YLabel=$1/N_\text{KS}\; \text{d}N_\text{KS}/\text{d}y$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_I944826/d06-x01-y01 Title=$K_S^0$ multiplicity, $\sqrt{s}=900$~GeV XLabel=$K_S^0$ multiplicity YLabel=$1/N_\text{ev}\; \text{d}N_\text{ev}/\text{d}N_\text{KS}$ LogY=0 YMin=-0.2 XCustomMajorTicks=0 0 1 1 2 2 3 3 # END PLOT # BEGIN PLOT /ATLAS_2011_I944826/d07-x01-y01 Title=$\Lambda$ transverse momentum, $\sqrt{s}=7000$~GeV XLabel=$p_\perp[\text{GeV/c}]$ YLabel=$1/N_\Lambda\; \text{d}N_\Lambda/\text{d}p_\perp$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_I944826/d08-x01-y01 Title=$\Lambda$ rapidity, $\sqrt{s}=7000$~GeV XLabel=$y$ YLabel=$1/N_\Lambda\; \text{d}N_\Lambda/\text{d}y$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_I944826/d09-x01-y01 Title=$\Lambda$ multiplicity, $\sqrt{s}=7000$~GeV XLabel=$\Lambda$ multiplicity YLabel=$1/N_\text{ev}\; \text{d}N_\text{ev}/\text{d}N_\Lambda$ LogY=0 YMin=-0.2 XCustomMajorTicks=0 0 1 1 2 2 3 3 # END PLOT # BEGIN PLOT /ATLAS_2011_I944826/d10-x01-y01 Title=$\Lambda$ transverse momentum, $\sqrt{s}=900$~GeV XLabel=$p_\perp[\text{GeV/c}]$ YLabel=$1/N_\Lambda\; \text{d}N_\Lambda/\text{d}p_\perp$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_I944826/d11-x01-y01 Title=$\Lambda$ rapidity, $\sqrt{s}=900$~GeV XLabel=$y$ YLabel=$1/N_\Lambda\; \text{d}N_\Lambda/\text{d}y$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_I944826/d12-x01-y01 Title=$\Lambda$ multiplicity, $\sqrt{s}=900$~GeV XLabel=$\Lambda$ multiplicity YLabel=$1/N_\text{ev}\; \text{d}N_\text{ev}/\text{d}N_\Lambda$ LogY=0 YMin=-0.2 XCustomMajorTicks=0 0 1 1 2 2 3 3 # END PLOT # BEGIN PLOT /ATLAS_2011_I944826/d14-x01-y01 Title=Production ratio of $\bar{\Lambda}$ and $\Lambda$ vs. $p_\perp$, $\sqrt{s}=7000$~GeV XLabel=$p_\perp$~[GeV] YLabel=ratio $(\bar{\Lambda}/\Lambda)$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_I944826/d13-x01-y01 Title=Production ratio of $\bar{\Lambda}$ and $\Lambda$ vs. $|y|$, $\sqrt{s}=7000$~GeV XLabel=$|y|$ YLabel=ratio $(\bar{\Lambda}/\Lambda)$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_I944826/d16-x01-y01 Title=Production ratio of $\bar{\Lambda}$ and $\Lambda$ vs. $p_\perp$, $\sqrt{s}=900$~GeV XLabel=$p_\perp$~[GeV] YLabel=ratio $(\bar{\Lambda}/\Lambda)$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_I944826/d15-x01-y01 Title=Production ratio of $\bar{\Lambda}$ and $\Lambda$ vs. $|y|$, $\sqrt{s}=900$~GeV XLabel=$|y|$ YLabel=ratio $(\bar{\Lambda}/\Lambda)$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/STAR_2006_S6500200.plot0000644000175000017500000000266612116077756017000 0ustar sunsun# BEGIN PLOT /STAR_2006_S6500200/d01-x01-y01 Title=$\pi^+$ transverse momentum XLabel=$p_\perp$ [GeV] YLabel=$1/(2\pi) \, d^2N/(p_\perp dy dp_\perp)$ [GeV$^{-2}$] FullRange=1 # END PLOT # BEGIN PLOT /STAR_2006_S6500200/d01-x02-y01 Title=$\pi^-$ transverse momentum XLabel=$p_\perp$ [GeV] YLabel=$1/(2\pi) \, d^2N/(p_\perp dy dp_\perp)$ [GeV$^{-2}$] FullRange=1 # END PLOT # BEGIN PLOT /STAR_2006_S6500200/d01-x03-y01 Title=Proton transverse momentum XLabel=$p_\perp$ [GeV] YLabel=$1/(2\pi) \, d^2N/(p_\perp dy dp_\perp)$ [GeV$^{-2}$] FullRange=1 # END PLOT # BEGIN PLOT /STAR_2006_S6500200/d01-x04-y01 Title=Anti-proton transverse momentum XLabel=$p_\perp$ [GeV] YLabel=$1/(2\pi) \, d^2N/(p_\perp dy dp_\perp)$ [GeV$^{-2}$] FullRange=1 # END PLOT # BEGIN PLOT /STAR_2006_S6500200/d02-x01-y01 Title=Ratio of $\pi^- / \pi^+$ as function of $p_\perp$ XLabel=$p_\perp$ [GeV] YLabel=$\pi^- / \pi^+$ LogY=0 YMin=0 YMax=2 # END PLOT # BEGIN PLOT /STAR_2006_S6500200/d02-x02-y01 Title=Ratio of $\bar p / p$ as function of $p_\perp$ XLabel=$p_\perp$ [GeV] YLabel=$\bar p / p$ LogY=0 YMin=0 YMax=2 # END PLOT # BEGIN PLOT /STAR_2006_S6500200/d02-x03-y01 Title=Ratio of $p / \pi^+$ as function of $p_\perp$ XLabel=$p_\perp$ [GeV] YLabel=$p / \pi^+$ LogY=0 YMin=0 YMax=0.8 # END PLOT # BEGIN PLOT /STAR_2006_S6500200/d02-x04-y01 Title=Ratio of $\bar p / \pi^-$ as function of $p_\perp$ XLabel=$p_\perp$ [GeV] YLabel=$\bar p / \pi^-$ LogY=0 YMin=0 YMax=0.8 # END PLOT rivet-1.8.3/data/plotinfo/LHCB_2010_S8758301.plot0000644000175000017500000000307012116077756016743 0ustar sunsun# BEGIN PLOT /LHCB_2010_S8758301/d01-x01-y01 Title=Cross-section for prompt $K_S^0$ production ($2.520$ \bf{GeV} # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d01-x01-y0[12] Title=Inclusive Jet Multiplicity XLabel=$N_{\text{jet}}$ YLabel=$\sigma(W \, + \geq N_{\text{jet}}\;\text{jets})$ [pb] XMajorTickMarks=10 XMinorTickMarks=0 RatioPlotYMin=0.0 RatioPlotYMax=2.0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d02-x01-y0[12] Title=Inclusive Jet Multiplicity Ratio XLabel=$N_{\text{jet}}$ YLabel=$\sigma(\geq N_{\text{jet}}\;\text{jets})/\sigma(\geq N_{\text{jet}}-1\;\text{jets})$ LogY=0 RatioPlot=0 XMajorTickMarks=10 XMinorTickMarks=0 LegendYPos=0.5 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d03-x01-y0[12] Title=First Jet $p_\perp$ XLabel=$p_\perp$ [GeV] YLabel=d$\sigma$/d$p_\perp$ [pb/GeV] RatioPlotYMin=0.35 RatioPlotYMax=1.65 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d04-x01-y0[12] Title=First Jet $p_\perp$ ($W+\geq 2$ jets) XLabel=$p_\perp$ [GeV] YLabel=d$\sigma$/d$p_\perp$ [pb/GeV] RatioPlotYMin=0.35 RatioPlotYMax=1.65 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d05-x01-y0[12] Title=First Jet $p_\perp$ ($W+\geq 3$ jets) XLabel=$p_\perp$ [GeV] YLabel=d$\sigma$/d$p_\perp$ [pb/GeV] RatioPlotYMin=0.35 RatioPlotYMax=1.65 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d06-x01-y0[12] Title=First Jet $p_\perp$ ($W+\geq 4$ jets) XLabel=$p_\perp$ [GeV] YLabel=d$\sigma$/d$p_\perp$ [pb/GeV] RatioPlotYMin=0.35 RatioPlotYMax=1.65 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d07-x01-y0[12] Title=Second Jet $p_\perp$ XLabel=$p_\perp$ [GeV] YLabel=d$\sigma$/d$p_\perp$ [pb/GeV] RatioPlotYMin=0.35 RatioPlotYMax=1.99 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d08-x01-y0[12] Title=Second Jet $p_\perp$ ($W+\geq 3$ jets) XLabel=$p_\perp$ [GeV] YLabel=d$\sigma$/d$p_\perp$ [pb/GeV] RatioPlotYMin=0.35 RatioPlotYMax=1.99 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d09-x01-y0[12] Title=Second Jet $p_\perp$ ($W+\geq 4$ jets) XLabel=$p_\perp$ [GeV] YLabel=d$\sigma$/d$p_\perp$ [pb/GeV] RatioPlotYMin=0.35 RatioPlotYMax=1.99 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d10-x01-y0[12] Title=Third Jet $p_\perp$ XLabel=$p_\perp$ [GeV] YLabel=d$\sigma$/d$p_\perp$ [pb/GeV] RatioPlotYMin=0.35 RatioPlotYMax=1.99 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d11-x01-y0[12] Title=Third Jet $p_\perp$ ($W+\geq 4$ jets) XLabel=$p_\perp$ [GeV] YLabel=d$\sigma$/d$p_\perp$ [pb/GeV] RatioPlotYMin=0.35 RatioPlotYMax=1.99 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d12-x01-y0[12] Title=Fourth Jet $p_\perp$ XLabel=$p_\perp$ [GeV] YLabel=d$\sigma$/d$p_\perp$ [pb/GeV] RatioPlotYMin=0.35 RatioPlotYMax=1.99 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d13-x01-y0[12] Title=$H_T$ ($W+\geq 1$ jets) XLabel=$H_\mathrm{T}$ [GeV] YLabel=d$\sigma$/d$H_\mathrm{T}$ [pb/GeV] RatioPlotYMin=0.35 RatioPlotYMax=1.65 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d14-x01-y0[12] Title=$H_T$ ($W+\geq 2$ jets) XLabel=$H_\mathrm{T}$ [GeV] YLabel=d$\sigma$/d$H_\mathrm{T}$ [pb/GeV] RatioPlotYMin=0.35 RatioPlotYMax=1.99 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d15-x01-y0[12] Title=$H_T$ ($W+\geq 3$ jets) XLabel=$H_\mathrm{T}$ [GeV] YLabel=d$\sigma$/d$H_\mathrm{T}$ [pb/GeV] RatioPlotYMin=0.35 RatioPlotYMax=1.99 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d16-x01-y0[12] Title=$H_T$ ($W+\geq 4$ jets) XLabel=$H_\mathrm{T}$ [GeV] YLabel=d$\sigma$/d$H_\mathrm{T}$ [pb/GeV] RatioPlotYMin=0.35 RatioPlotYMax=1.99 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d17-x01-y0[12] Title=Jet Invariant Mass ($W+\geq 2$ jets) XLabel=$m$(jets) [GeV] YLabel=d$\sigma$/d$m$ [pb/GeV] RatioPlotYMin=0.25 RatioPlotYMax=2.35 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d18-x01-y0[12] Title=Jet Invariant Mass ($W+\geq 3$ jets) XLabel=$m$(jets) [GeV] YLabel=d$\sigma$/d$m$ [pb/GeV] RatioPlotYMin=0.25 RatioPlotYMax=2.35 LegendXPos=0.15 LegendYPos=0.5 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d19-x01-y0[12] Title=Jet Invariant Mass ($W+\geq 4$ jets) XLabel=$m$(jets) [GeV] YLabel=d$\sigma$/d$m$ [pb/GeV] RatioPlotYMin=0.25 RatioPlotYMax=2.35 LegendXPos=0.2 LegendYPos=0.5 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d20-x01-y0[12] Title=First Jet Rapidity XLabel=$y$ YLabel=d$\sigma$/d$y$ [pb] LogY=0 RatioPlotYMin=0.0 RatioPlotYMax=1.99 LegendXPos=0.05 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d21-x01-y0[12] Title=Lepton-Jet Rapidity Difference XLabel=$y(\text{Lepton})-y(\text{First Jet})$ YLabel=d$\sigma$/d$\Delta y$ [pb] LogY=0 RatioPlotYMin=0.0 RatioPlotYMax=1.99 LegendXPos=0.05 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d22-x01-y0[12] Title=Lepton-Jet Rapidity Sum XLabel=$y(\text{Lepton})+y(\text{First Jet})$ YLabel=d$\sigma$/d$\Sigma y$ [pb] LogY=0 RatioPlotYMin=0.25 RatioPlotYMax=1.99 LegendXPos=0.3 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d23-x01-y0[12] Title=$\Delta R$ Distance of Leading Jets XLabel=$\Delta R$(First Jet, Second Jet) YLabel=d$\sigma$/d$\Delta R$ [pb] LogY=0 RatioPlotYMin=0.0 RatioPlotYMax=1.99 LegendXPos=0.05 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d24-x01-y0[12] Title=Rapidity Distance of Leading Jets XLabel=$\Delta y$(First Jet, Second Jet) YLabel=d$\sigma$/d$\Delta y$ [pb] LogY=0 RatioPlotYMin=0.0 RatioPlotYMax=1.99 LegendXPos=0.05 # END PLOT # BEGIN PLOT /ATLAS_2012_I1083318/d25-x01-y0[12] Title=Azimuthal Distance of Leading Jets XLabel=$\Delta \phi$(First Jet, Second Jet) YLabel=d$\sigma$/d$\Delta \phi$ [pb] LogY=0 RatioPlotYMin=0.5 RatioPlotYMax=1.5 LegendXPos=0.05 # END PLOT rivet-1.8.3/data/plotinfo/Makefile.in0000644000175000017500000005235712123054611015667 0ustar sunsun# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = data/plotinfo DIST_COMMON = $(dist_pkgdata_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgdatadir)" DATA = $(dist_pkgdata_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ dist_pkgdata_DATA = \ ALEPH_1991_S2435284.plot \ ALEPH_1996_S3486095.plot \ ALEPH_1996_S3196992.plot \ ALEPH_1999_S4193598.plot \ ALEPH_2001_S4656318.plot \ ALEPH_2002_S4823664.plot \ ALEPH_2004_S5765862.plot \ ALICE_2010_S8624100.plot \ ALICE_2010_S8625980.plot \ ALICE_2010_S8706239.plot \ ALICE_2011_S8909580.plot \ ALICE_2011_S8945144.plot \ ALICE_2012_I1181770.plot \ ARGUS_1993_S2653028.plot \ ARGUS_1993_S2669951.plot \ ARGUS_1993_S2789213.plot \ ATLAS_2010_S8591806.plot \ ATLAS_2010_S8817804.plot \ ATLAS_2010_S8894728.plot \ ATLAS_2010_S8914702.plot \ ATLAS_2010_S8918562.plot \ ATLAS_2010_S8919674.plot \ ATLAS_2011_S8924791.plot \ ATLAS_2011_S8971293.plot \ ATLAS_2011_S8994773.plot \ ATLAS_2011_S9002537.plot \ ATLAS_2010_CONF_2010_049.plot \ ATLAS_2011_S9120807.plot \ ATLAS_2011_S9126244.plot \ ATLAS_2011_S9128077.plot \ ATLAS_2011_S9131140.plot \ ATLAS_2011_I894867.plot \ ATLAS_2011_I919017.plot \ ATLAS_2011_I925932.plot \ ATLAS_2011_I926145.plot \ ATLAS_2011_I944826.plot \ ATLAS_2011_I945498.plot \ ATLAS_2011_I954993.plot \ ATLAS_2011_S9225137.plot \ ATLAS_2011_S9212183.plot \ ATLAS_2011_CONF_2011_090.plot \ ATLAS_2011_CONF_2011_098.plot \ ATLAS_2011_S8983313.plot \ ATLAS_2011_S9212353.plot \ ATLAS_2012_I1082936.plot \ ATLAS_2012_I1083318.plot \ ATLAS_2012_I1084540.plot \ ATLAS_2012_I1091481.plot \ ATLAS_2012_I1093738.plot \ ATLAS_2012_I1094061.plot \ ATLAS_2012_I1094568.plot \ ATLAS_2012_I1095236.plot \ ATLAS_2012_I943401.plot \ ATLAS_2012_I946427.plot \ ATLAS_2012_CONF_2012_001.plot \ ATLAS_2012_I1119557.plot \ ATLAS_2012_I1125575.plot \ ATLAS_2012_I1112263.plot \ ATLAS_2012_I1125961.plot \ ATLAS_2012_I1126136.plot \ ATLAS_2012_I1117704.plot \ ATLAS_2012_I1118269.plot \ ATLAS_2012_I1180197.plot \ ATLAS_2012_I1082009.plot \ ATLAS_2012_I1183818.plot \ ATLAS_2012_I1188891.plot \ ATLAS_2012_I1186556.plot \ ATLAS_2012_I1190891.plot \ ATLAS_2012_CONF_2012_103.plot \ ATLAS_2012_CONF_2012_104.plot \ ATLAS_2012_CONF_2012_105.plot \ ATLAS_2012_CONF_2012_109.plot \ ATLAS_2012_CONF_2012_153.plot \ ATLAS_2013_I1217867.plot \ BABAR_2003_I593379.plot \ BABAR_2005_S6181155.plot \ BABAR_2007_S6895344.plot \ BABAR_2007_S7266081.plot \ BELLE_2001_S4598261.plot \ BELLE_2006_S6265367.plot \ CDF_1988_S1865951.plot \ CDF_1990_S2089246.plot \ CDF_1993_S2742446.plot \ CDF_1994_S2952106.plot \ CDF_1996_S3108457.plot \ CDF_1996_S3349578.plot \ CDF_1996_S3418421.plot \ CDF_1997_S3541940.plot \ CDF_1998_S3618439.plot \ CDF_2000_S4155203.plot \ CDF_2000_S4266730.plot \ CDF_2001_S4517016.plot \ CDF_2001_S4563131.plot \ CDF_2001_S4751469.plot \ CDF_2002_S4796047.plot \ CDF_2004_S5839831.plot \ CDF_2005_S6080774.plot \ CDF_2005_S6217184.plot \ CDF_2006_S6450792.plot \ CDF_2006_S6653332.plot \ CDF_2007_S7057202.plot \ CDF_2008_LEADINGJETS.plot \ CDF_2008_NOTE_9351.plot \ CDF_2008_S7540469.plot \ CDF_2008_S7541902.plot \ CDF_2008_S7782535.plot \ CDF_2008_S7828950.plot \ CDF_2008_S8093652.plot \ CDF_2008_S8095620.plot \ CDF_2009_S8233977.plot \ CDF_2009_NOTE_9936.plot \ CDF_2009_S8383952.plot \ CDF_2009_S8436959.plot \ CDF_2010_S8591881_DY.plot \ CDF_2010_S8591881_QCD.plot \ CDF_2012_NOTE10874.plot \ CLEO_2004_S5809304.plot \ CMS_2010_S8547297.plot \ CMS_2010_S8656010.plot \ CMS_2011_S8884919.plot \ CMS_2011_S8941262.plot \ CMS_2011_S8950903.plot \ CMS_2011_S8957746.plot \ CMS_2011_S8968497.plot \ CMS_2011_S8973270.plot \ CMS_2011_S8978280.plot \ CMS_2011_S9086218.plot \ CMS_2011_S9088458.plot \ CMS_2011_S9120041.plot \ CMS_2011_S9215166.plot \ CMS_2011_I954992.plot \ CMS_2012_I1087342.plot \ CMS_2012_I1102908.plot \ CMS_2012_I1107658.plot \ CMS_2012_I1184941.plot \ CMS_2012_I1193338.plot \ CMS_2012_PAS_FWD_11_003.plot \ CMS_2012_PAS_QCD_11_010.plot \ CMS_QCD_10_024.plot \ D0_1996_S3214044.plot \ D0_1996_S3324664.plot \ D0_2000_S4480767.plot \ D0_2001_S4674421.plot \ D0_2004_S5992206.plot \ D0_2006_S6438750.plot \ D0_2007_S7075677.plot \ D0_2008_S6879055.plot \ D0_2008_S7554427.plot \ D0_2008_S7662670.plot \ D0_2008_S7719523.plot \ D0_2008_S7837160.plot \ D0_2008_S7863608.plot \ D0_2009_S8202443.plot \ D0_2009_S8320160.plot \ D0_2009_S8349509.plot \ D0_2010_S8566488.plot \ D0_2010_S8570965.plot \ D0_2010_S8671338.plot \ D0_2010_S8821313.plot \ D0_2011_I895662.plot \ E735_1998_S3905616.plot \ DELPHI_1995_S3137023.plot \ DELPHI_1996_S3430090.plot \ DELPHI_1999_S3960137.plot \ DELPHI_2000_S4328825.plot \ DELPHI_2002_069_CONF_603.plot \ DELPHI_2003_WUD_03_11.plot \ EXAMPLE.plot \ H1_1994_S2919893.plot \ H1_1995_S3167097.plot \ H1_2000_S4129130.plot \ JADE_OPAL_2000_S4300807.plot \ JADE_1998_S3612880.plot \ LHCB_2010_S8758301.plot \ LHCB_2010_I867355.plot \ LHCB_2011_I917009.plot \ LHCB_2011_I919315.plot \ LHCB_2012_I1119400.plot \ LHCF_2012_I1115479.plot \ MC_GENERIC.plot \ MC_IDENTIFIED.plot \ MC_LEADJETUE.plot \ MC_DIJET.plot \ MC_DIPHOTON.plot \ MC_PHOTONJETUE.plot \ MC_SUSY.plot \ MC_TTBAR.plot \ MC_JETS.plot \ MC_KTSPLITTINGS.plot \ MC_PHOTONINC.plot \ MC_PHOTONJETS.plot \ MC_PHOTONKTSPLITTINGS.plot \ MC_PHOTONS.plot \ MC_QCD_PARTONS.plot \ MC_VH2BB.plot \ MC_HINC.plot \ MC_HJETS.plot \ MC_HKTSPLITTINGS.plot \ MC_PDFS.plot \ MC_WINC.plot \ MC_WJETS.plot \ MC_WKTSPLITTINGS.plot \ MC_WPOL.plot \ MC_WWINC.plot \ MC_WWJETS.plot \ MC_WWKTSPLITTINGS.plot \ MC_XS.plot \ MC_ZINC.plot \ MC_ZJETS.plot \ MC_ZKTSPLITTINGS.plot \ MC_ZZINC.plot \ MC_ZZJETS.plot \ MC_ZZKTSPLITTINGS.plot \ OPAL_1993_S2692198.plot \ OPAL_1994_S2927284.plot \ OPAL_1995_S3198391.plot \ OPAL_1996_S3257789.plot \ OPAL_1997_S3396100.plot \ OPAL_1997_S3608263.plot \ OPAL_1998_S3702294.plot \ OPAL_1998_S3749908.plot \ OPAL_1998_S3780481.plot \ OPAL_2000_S4418603.plot \ OPAL_2001_S4553896.plot \ OPAL_2002_S5361494.plot \ OPAL_2004_S6132243.plot \ PDG_HADRON_MULTIPLICITIES.plot \ PDG_HADRON_MULTIPLICITIES_RATIOS.plot \ SFM_1984_S1178091.plot \ SLD_1996_S3398250.plot \ SLD_1999_S3743934.plot \ SLD_2002_S4869273.plot \ SLD_2004_S5693039.plot \ STAR_2006_S6500200.plot \ STAR_2006_S6860818.plot \ STAR_2006_S6870392.plot \ STAR_2008_S7869363.plot \ STAR_2008_S7993412.plot \ STAR_2009_UE_HELEN.plot \ TASSO_1990_S2148048.plot \ TOTEM_2012_I1115294.plot \ TOTEM_2012_002.plot \ ZEUS_2001_S4815815.plot \ UA1_1990_S2044935.plot \ UA5_1982_S875503.plot \ UA5_1986_S1583476.plot \ UA5_1987_S1640666.plot \ UA5_1988_S1867512.plot \ UA5_1989_S1926373.plot all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/plotinfo/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/plotinfo/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_pkgdataDATA: $(dist_pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-dist_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_pkgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_pkgdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dist_pkgdataDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am uninstall uninstall-am uninstall-dist_pkgdataDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: rivet-1.8.3/data/plotinfo/CMS_2012_I1107658.plot0000644000175000017500000000674312116077756016653 0ustar sunsun# BEGIN PLOT /CMS_2012_I1107658/d0 LogY=0 LegendYPos=0.4 # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d0[1-3] XLabel=$p_\perp(\mu\mu)$ [GeV] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d01-x01-y01 Title=Toward $N_\text{chg}$ density vs $p_\perp^{\mu\mu}$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d02-x01-y01 Title=Transverse $N_\text{chg}$ density vs $p_\perp^{\mu\mu}$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d03-x01-y01 Title=Away $N_\text{chg}$ density vs $p_\perp^{\mu\mu}$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d0[4-6] XLabel=$p_\perp(\mu\mu)$ [GeV] YLabel=$\langle\mathrm{d}^2 \sum p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ [GeV] # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d04-x01-y01 Title=Toward $\sum p_\perp$ density vs $p_\perp^{\mu\mu}$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d05-x01-y01 Title=Transverse $\sum p_\perp$ density vs $p_\perp^{\mu\mu}$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d06-x01-y01 Title=Away $\sum p_\perp$ density vs $p_\perp^{\mu\mu}$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d0[7-9] XLabel=$p_\perp(\mu\mu)$ [GeV] YLabel=$\langle p_\perp \rangle$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d07-x01-y01 Title=Toward $\langle p_\perp \rangle$ vs $p_\perp^{\mu\mu}$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d08-x01-y01 Title=Transverse $\langle p_\perp \rangle$ vs $p_\perp^{\mu\mu}$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d09-x01-y01 Title=Away $\langle p_\perp \rangle$ vs $p_\perp^{\mu\mu}$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d1[0-2] XLabel=$m_{\mu\mu}$ [GeV] YMin=0.5 LogY=0 LegendYPos=0.4 # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d10-x01-y01 Title=Towards $+$ transverse $N_\text{chg}$ density vs $m_{\mu\mu}$, $p_\perp^{\mu\mu} < 5$ GeV YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d11-x01-y01 Title=Towards $+$ transverse $\sum p_\perp$ density vs $m_{\mu\mu}$, $p_\perp^{\mu\mu} < 5$ GeV YLabel=$\langle\mathrm{d}^2 \sum p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ [GeV] # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d12-x01-y01 Title=Towards $+$ transverse $\langle p_\perp \rangle$ vs $m_{\mu\mu}$, $p_\perp^{\mu\mu} < 5$ GeV YLabel=$\langle p_\perp \rangle$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d1[3-5] XLabel=$N_\text{chg}$ YLabel=$1/N_\text{ev} \; \mathrm{d} N_\text{ev} / \mathrm{d} N_\text{chg}$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d13-x01-y01 Title=Toward $N_\text{chg}$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d14-x01-y01 Title=Transverse $N_\text{chg}$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d15-x01-y01 Title=Away $N_\text{chg}$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d1[6-8] XLabel=$p_\perp$ [GeV] YLabel=$1/N_\text{ev} \; \mathrm{d} N_\text{chg} / \mathrm{d} p_\perp$ [GeV$^{-1}$] # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d16-x01-y01 Title=Toward $p_\perp$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d17-x01-y01 Title=Transverse $p_\perp$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d18-x01-y01 Title=Away $p_\perp$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d19-x01-y01 Title=Transverse $N_\text{chg}$, $p_\perp(\mu\mu) < 5$ GeV XLabel=$N_\text{chg}$ YLabel=$1/N_\text{ev} \; \mathrm{d} N_\text{ev} / \mathrm{d} N_\text{chg}$ # END PLOT # BEGIN PLOT /CMS_2012_I1107658/d20-x01-y01 Title=Transverse $p_\perp$, $p_\perp(\mu\mu) < 5$ GeV XLabel=$p_\perp$ [GeV] YLabel=$1/N_\text{ev} \; \mathrm{d} N_\text{chg} / \mathrm{d} p_\perp$ [GeV$^{-1}$] # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_I1126136.plot0000644000175000017500000000170512116077756017056 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1126136/count_SR_A Title=Number of events in the $E_{\mathrm{T}}^{\rm miss}>130\,$GeV XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1126136/count_SR_B Title=Number of events in the $E_{\mathrm{T}}^{\rm miss}>260\,$GeV XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1126136/hist_mjjj1 Title=$m_{jjj}$ for closest-triplet XLabel=$m_{jjj}$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1126136/hist_mjjj2 Title=$m_{jjj}$ for second-triplet XLabel=$m_{jjj}$ [GeV] YLabel=$\mathrm{Events}/20 \mathrm{GeV}$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1126136/hist_ETmiss Title=$E_{\mathrm{T}}^{\rm miss}$ XLabel=$E_{\mathrm{T}}^{\rm miss}$ [GeV] YLabel=$\mathrm{Events}/50 \mathrm{GeV}$ LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1126136/hist_mT2 Title=$m_{T2}$ XLabel=$m_{T2}$ [GeV] YLabel=$\mathrm{Events}/\mathrm{GeV}$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/ALICE_2011_S8909580.plot0000644000175000017500000000207012116077756017057 0ustar sunsun# BEGIN PLOT /ALICE_2011_S8909580/d0 XLabel=$p_\perp$ $[\text{GeV}/c]$ YLabel=$1/N_\text{evt} \, d^{2}N/dy\,dp_\perp$ $[(\text{GeV}/c)^{-1}]$ # END PLOT # BEGIN PLOT /ALICE_2011_S8909580/d01-x01-y01 Title=$K^0_s$ transverse momentum, $|y|<0.75$, $\sqrt{s}=0.9\,\text{TeV}$ (INEL) # END PLOT # BEGIN PLOT /ALICE_2011_S8909580/d02-x01-y01 Title=$\Lambda$ transverse momentum, $|y|<0.75$, $\sqrt{s}=0.9\,\text{TeV}$ (INEL) # END PLOT # BEGIN PLOT /ALICE_2011_S8909580/d03-x01-y01 Title=$\bar \Lambda$ transverse momentum, $|y|<0.75$, $\sqrt{s}=0.9\,\text{TeV}$ (INEL) # END PLOT # BEGIN PLOT /ALICE_2011_S8909580/d04-x01-y01 Title=$\Xi$ transverse momentum, $|y|<0.8$, $\sqrt{s}=0.9\,\text{TeV}$ (INEL) # END PLOT # BEGIN PLOT /ALICE_2011_S8909580/d05-x01-y01 Title=$\phi(1020)$ transverse momentum, $|y|<0.6$, $\sqrt{s}=0.9\,\text{TeV}$ (INEL) # END PLOT # BEGIN PLOT /ALICE_2011_S8909580/d06-x01-y01 Title=$\Lambda / K^0_s$ ratio, $|y|<0.75$, $\sqrt{s}=0.9\,\text{TeV}$ (INEL) YLabel=$(\sigma(\Lambda)+\sigma(\bar \Lambda))/2 \sigma(K^0_s)$ LogY=0 LegendYPos=0.4 # END PLOT rivet-1.8.3/data/plotinfo/CDF_2000_S4155203.plot0000644000175000017500000000036312116077756016614 0ustar sunsun# BEGIN PLOT /CDF_2000_S4155203/d01-x01-y01 Title=$p_\perp(Z)$ in $Z \to e^+ e^-$ events XLabel=$p_\perp(Z)$ [$\text{GeV}\!/\!c$] YLabel=$\mathrm{d}{\sigma}/\mathrm{d}{p_\perp(Z)}$ [$\text{pb} / (\text{GeV}\!/\!c)$] LogY=0 XMax=45 # END PLOT rivet-1.8.3/data/plotinfo/CMS_2011_S8973270.plot0000644000175000017500000000131712116077756016664 0ustar sunsun# BEGIN PLOT /CMS_2011_S8973270/d0[123]-x01-y01 XLabel=$\Delta{R}$ between two $B$ hadrons YLabel=$\mathrm{d}\sigma / \mathrm{d}\Delta{R}$ [pb] # END PLOT # BEGIN PLOT /CMS_2011_S8973270/d0[456]-x01-y01 XLabel=$\Delta\phi$ between two $B$ hadrons YLabel=$\mathrm{d}\sigma / \mathrm{d}\Delta\phi$ [pb] # END PLOT # BEGIN PLOT /CMS_2011_S8973270/d0[14]-x01-y01 Title= $B\bar{B}$ production cross-section (leading jet $p_\perp > 56$ GeV) # END PLOT # BEGIN PLOT /CMS_2011_S8973270/d0[25]-x01-y01 Title= $B\bar{B}$ production cross-section (leading jet $p_\perp > 84$ GeV) # END PLOT # BEGIN PLOT /CMS_2011_S8973270/d0[36]-x01-y01 Title= $B\bar{B}$ production cross-section (leading jet $p_\perp > 120$ GeV) # END PLOT rivet-1.8.3/data/plotinfo/D0_2010_S8671338.plot0000644000175000017500000000070012116077756016477 0ustar sunsun# BEGIN PLOT /D0_2010_S8671338/d0 LegendXPos=0.4 LegendYPos=0.9 FullRange=1 # END PLOT # BEGIN PLOT /D0_2010_S8671338/d01-x01-y01 Title=$Z$ boson $p_\perp$ (normalised) XLabel=$p_{\perp}$(Z) [GeV] YLabel=$1/\sigma \; \text{d}\sigma/\text{d}p_\perp(Z)$ [1/GeV] # END PLOT # BEGIN PLOT /D0_2010_S8671338/d02-x01-y01 Title=$Z$ boson $p_\perp$ (unnormalised) XLabel=$p_{\perp}$(Z) [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp(Z)$ [pb/GeV] # END PLOT rivet-1.8.3/data/plotinfo/CDF_2010_S8591881_DY.plot0000644000175000017500000000574112116077756017242 0ustar sunsun# BEGIN PLOT /CDF_2010_S8591881_DY/d XLabel=$p_T(Z)$ / GeV LogY=0 # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d0[12] YLabel=$\langle N_\text{ch} \rangle / \text{d}\eta\,\text{d}\phi$ # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d01-x01-y01 Title=Toward region charged particle density LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d01-x01-y02 Title=Transverse region charged particle density LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d01-x01-y03 Title=Away region charged particle density LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d02-x01-y01 Title=TransMAX region charged particle density LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d02-x01-y02 Title=TransMIN region charged particle density LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d02-x01-y03 Title=TransDIF region charged particle density LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d0[34] YLabel=$\langle \sum p_T^\text{track} \rangle / \text{d}\eta\,\text{d}\phi$ / GeV LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d03-x01-y01 Title=Toward region charged $p_\perp^\text{sum}$ density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d03-x01-y02 Title=Transverse region charged $p_\perp^\text{sum}$ density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d03-x01-y03 Title=Away region charged $p_\perp^\text{sum}$ density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d04-x01-y01 Title=TransMAX region charged $p_\perp^\text{sum}$ density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d04-x01-y02 Title=TransMIN region charged $p_\perp^\text{sum}$ density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d04-x01-y03 Title=TransDIF region charged $p_\perp^\text{sum}$ density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d05 YLabel=$\langle p_T^\text{track} \rangle$ / GeV LegendYPos=0.5 # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d05-x01-y01 Title=Toward region charged $p_\perp$ average # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d05-x01-y02 Title=Transverse region charged $p_\perp$ average # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d06 YLabel=max $p_T^\text{track}$ / GeV LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d06-x01-y01 Title=Toward region charged $p_\perp$ maximum # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d06-x01-y02 Title=Transverse region charged $p_\perp$ maximum # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d0[789] XLabel=$N_\text{ch}$ LegendXPos=0.10 ShowZero=0 YLabel=$\langle p_T \rangle$ / GeV # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d07-x01-y01 Title=Average lepton-pair $p_\perp$ versus charged multiplicity YLabel=$\langle p_T(Z) \rangle$ / GeV # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d08-x01-y01 Title=Average charged $p_\perp$ vs charged multiplicity # END PLOT # BEGIN PLOT /CDF_2010_S8591881_DY/d09-x01-y01 Title=Average charged $p_\perp$ vs charged multiplicity, $p_\perp(Z) < 10\,\text{GeV}$ # END PLOT rivet-1.8.3/data/plotinfo/LHCB_2012_I1119400.plot0000644000175000017500000001301512116077756016713 0ustar sunsun# BEGIN PLOT /LHCB_2012_I1119400/d XLabel=$\eta$ LogY=0 LegendXPos=0.05 LegendYPos=0.4 # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d0[1-2]- YLabel=$\bar{p}/p$ # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d01-x01-y01 Title=$\bar{p}/p$ ratio at $\sqrt{s}=0.9$ TeV ($0.0 < p_\perp < 0.8$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d01-x01-y02 Title=$\bar{p}/p$ ratio at $\sqrt{s}=0.9$ TeV ($0.8 < p_\perp < 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d01-x01-y03 Title=$\bar{p}/p$ ratio at $\sqrt{s}=0.9$ TeV ($p_\perp > 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d02-x01-y01 Title=$\bar{p}/p$ ratio at $\sqrt{s}=7$ TeV ($0.0 < p_\perp < 0.8$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d02-x01-y02 Title=$\bar{p}/p$ ratio at $\sqrt{s}=7$ TeV ($0.8 < p_\perp < 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d02-x01-y03 Title=$\bar{p}/p$ ratio at $\sqrt{s}=7$ TeV ($p_\perp > 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d0[3-4]- YLabel=$K^-/K^+$ # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d03-x01-y01 Title=$K^-/K^+$ ratio at $\sqrt{s}=0.9$ TeV ($0.0 < p_\perp < 0.8$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d03-x01-y02 Title=$K^-/K^+$ ratio at $\sqrt{s}=0.9$ TeV ($0.8 < p_\perp < 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d03-x01-y03 Title=$K^-/K^+$ ratio at $\sqrt{s}=0.9$ TeV ($p_\perp > 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d04-x01-y01 Title=$K^-/K^+$ ratio at $\sqrt{s}=7$ TeV ($0.0 < p_\perp < 0.8$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d04-x01-y02 Title=$K^-/K^+$ ratio at $\sqrt{s}=7$ TeV ($0.8 < p_\perp < 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d04-x01-y03 Title=$K^-/K^+$ ratio at $\sqrt{s}=7$ TeV ($p_\perp > 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d0[5-6]- YLabel=$\pi^-/\pi^+$ # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d05-x01-y01 Title=$\pi^-/\pi^+$ ratio at $\sqrt{s}=0.9$ TeV ($0.0 < p_\perp < 0.8$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d05-x01-y02 Title=$\pi^-/\pi^+$ ratio at $\sqrt{s}=0.9$ TeV ($0.8 < p_\perp < 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d05-x01-y03 Title=$\pi^-/\pi^+$ ratio at $\sqrt{s}=0.9$ TeV ($p_\perp > 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d06-x01-y01 Title=$\pi^-/\pi^+$ ratio at $\sqrt{s}=7$ TeV ($0.0 < p_\perp < 0.8$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d06-x01-y02 Title=$\pi^-/\pi^+$ ratio at $\sqrt{s}=7$ TeV ($0.8 < p_\perp < 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d06-x01-y03 Title=$\pi^-/\pi^+$ ratio at $\sqrt{s}=7$ TeV ($p_\perp > 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d0[7-8]- YLabel=$(p+\bar{p})/(\pi^+ + \pi^-)$ # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d07-x01-y01 Title=$(p+\bar{p})/(\pi^+ + \pi^-)$ ratio at $\sqrt{s}=0.9$ TeV ($0.0 < p_\perp < 0.8$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d07-x01-y02 Title=$(p+\bar{p})/(\pi^+ + \pi^-)$ ratio at $\sqrt{s}=0.9$ TeV ($0.8 < p_\perp < 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d07-x01-y03 Title=$(p+\bar{p})/(\pi^+ + \pi^-)$ ratio at $\sqrt{s}=0.9$ TeV ($p_\perp > 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d08-x01-y01 Title=$(p+\bar{p})/(\pi^+ + \pi^-)$ ratio at $\sqrt{s}=7$ TeV ($0.0 < p_\perp < 0.8$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d08-x01-y02 Title=$(p+\bar{p})/(\pi^+ + \pi^-)$ ratio at $\sqrt{s}=7$ TeV ($0.8 < p_\perp < 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d08-x01-y03 Title=$(p+\bar{p})/(\pi^+ + \pi^-)$ ratio at $\sqrt{s}=7$ TeV ($p_\perp > 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d(09|10)- YLabel=$(K^+ + K^-)/(\pi^+ + \pi^-)$ # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d09-x01-y01 Title=$(K^+ + K^-)/(\pi^+ + \pi^-)$ ratio at $\sqrt{s}=0.9$ TeV ($0.0 < p_\perp < 0.8$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d09-x01-y02 Title=$(K^+ + K^-)/(\pi^+ + \pi^-)$ ratio at $\sqrt{s}=0.9$ TeV ($0.8 < p_\perp < 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d09-x01-y03 Title=$(K^+ + K^-)/(\pi^+ + \pi^-)$ ratio at $\sqrt{s}=0.9$ TeV ($p_\perp > 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d10-x01-y01 Title=$(K^+ + K^-)/(\pi^+ + \pi^-)$ ratio at $\sqrt{s}=7$ TeV ($0.0 < p_\perp < 0.8$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d10-x01-y02 Title=$(K^+ + K^-)/(\pi^+ + \pi^-)$ ratio at $\sqrt{s}=7$ TeV ($0.8 < p_\perp < 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d10-x01-y03 Title=$(K^+ + K^-)/(\pi^+ + \pi^-)$ ratio at $\sqrt{s}=7$ TeV ($p_\perp > 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d1[1-2]- YLabel=$(p+\bar{p})/(K^+ + K^-)$ # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d11-x01-y01 Title=$(p+\bar{p})/(K^+ + K^-)$ ratio at $\sqrt{s}=0.9$ TeV ($0.0 < p_\perp < 0.8$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d11-x01-y02 Title=$(p+\bar{p})/(K^+ + K^-)$ ratio at $\sqrt{s}=0.9$ TeV ($0.8 < p_\perp < 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d11-x01-y03 Title=$(p+\bar{p})/(K^+ + K^-)$ ratio at $\sqrt{s}=0.9$ TeV ($p_\perp > 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d12-x01-y01 Title=$(p+\bar{p})/(K^+ + K^-)$ ratio at $\sqrt{s}=7$ TeV ($0.0 < p_\perp < 0.8$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d12-x01-y02 Title=$(p+\bar{p})/(K^+ + K^-)$ ratio at $\sqrt{s}=7$ TeV ($0.8 < p_\perp < 1.2$ GeV/$c$) # END PLOT # BEGIN PLOT /LHCB_2012_I1119400/d12-x01-y03 Title=$(p+\bar{p})/(K^+ + K^-)$ ratio at $\sqrt{s}=7$ TeV ($p_\perp > 1.2$ GeV/$c$) # END PLOT rivet-1.8.3/data/plotinfo/CDF_1997_S3541940.plot0000644000175000017500000000612612116077756016655 0ustar sunsun# BEGIN PLOT /CDF_1997_S3541940/d01-x01-y01 Title=Multijet mass XLabel=$m_{6J}$ [GeV] YLabel=$1/N \mathrm{d}N/\mathrm{d}m$ [1/GeV] # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d02-x01-y01 Title=Dalitz distribution XLabel=$X_3^{'''}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}X_3^{'''}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d03-x01-y01 Title=Dalitz distribution XLabel=$X_4^{'''}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}X_4^{'''}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d04-x01-y01 Title=Leading jet angle XLabel=$|\cos \theta_{3^{'''}}|$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos\theta_{3^{'''}}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d05-x01-y01 Title=Angular distribution XLabel=$\Psi_{3^{'''}}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\Psi_{3^{'''}}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d06-x01-y01 Title=Single-jet mass fraction XLabel=$f_3^{'''}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_3^{'''}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d06-x01-y02 Title=Single-jet mass fraction XLabel=$f_4^{'''}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_4^{'''}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d06-x01-y03 Title=Single-jet mass fraction XLabel=$f_5^{'''}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_5^{'''}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d07-x01-y01 Title=Two-body energy sharing XLabel=$X_A^{''}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}X_A^{''}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d08-x01-y01 Title=Two-body energy sharing XLabel=$X_C^{'}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}X_C^{'}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d09-x01-y01 Title=Two-body energy sharing XLabel=$X_E$ YLabel=$1/N \mathrm{d}N/\mathrm{d}X_E$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d10-x01-y01 Title=Two-body angular distribution XLabel=$\Psi_{A^{''}B^{''}}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\Psi_{A^{''}B^{''}}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d11-x01-y01 Title=Two-body angular distribution XLabel=$\Psi_{C^{'}D^{'}}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\Psi_{C^{'}D^{'}}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d12-x01-y01 Title=Two-body angular distribution XLabel=$\Psi_{EF}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\Psi_{EF}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d13-x01-y01 Title=Single-body mass fraction XLabel=$f_A^{''}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_A^{''}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d14-x01-y01 Title=Single-body mass fraction XLabel=$f_B^{''}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_B^{''}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d15-x01-y01 Title=Single-body mass fraction XLabel=$f_C^{'}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_C^{'}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d16-x01-y01 Title=Single-body mass fraction XLabel=$f_D^{'}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_D^{'}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d17-x01-y01 Title=Single-body mass fraction XLabel=$f_E$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_E$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1997_S3541940/d18-x01-y01 Title=Single-body mass fraction XLabel=$f_F$ YLabel=$1/N \mathrm{d}N/\mathrm{d}f_F$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/CMS_QCD_10_024.plot0000644000175000017500000000250312116077756016525 0ustar sunsun# BEGIN PLOT /CMS_QCD_10_024/ XLabel=$\eta$ YLabel=$\frac{1}{N}\frac{\mathrm{d}N_\text{ch}}{\mathrm{d}\eta}$ LogY=0 YMin=1 LegendXPos=0.5 LegendYPos=0.3 # END PLOT # BEGIN PLOT /CMS_QCD_10_024/d01-x01-y01 Title=$n_\text{ch} \ge 1,~p_\perp > 0.5$~GeV in $|\eta|<0.8$; $\sqrt{s}=7$ TeV YMax=3.5 # END PLOT # BEGIN PLOT /CMS_QCD_10_024/d02-x01-y01 Title=$n_\text{ch} \ge 1,~p_\perp > 1$~GeV in $|\eta|<0.8$; $\sqrt{s}=7$ TeV YMin=0.4 YMax=2.2 # END PLOT # BEGIN PLOT /CMS_QCD_10_024/d03-x01-y01 Title=$n_\text{ch} \ge 1,~p_\perp > 0.5$~GeV in $|\eta|<2.4$; $\sqrt{s}=7$ TeV YMin=1 YMax=3 # END PLOT # BEGIN PLOT /CMS_QCD_10_024/d04-x01-y01 Title=$n_\text{ch} \ge 1,~p_\perp > 1$~GeV in $|\eta|<2.4$; $\sqrt{s}=7$ TeV YMin=0.4 YMax=1.4 # END PLOT # BEGIN PLOT /CMS_QCD_10_024/d05-x01-y01 Title=$n_\text{ch} \ge 1,~p_\perp > 0.5$~GeV in $|\eta|<0.8$; $\sqrt{s}=0.9$ TeV YMin=0 YMax=2.4 # END PLOT # BEGIN PLOT /CMS_QCD_10_024/d06-x01-y01 Title=$n_\text{ch} \ge 1,~p_\perp > 1$~GeV in $|\eta|<0.8$; $\sqrt{s}=0.9$ TeV YMin=0 YMax=1.4 # END PLOT # BEGIN PLOT /CMS_QCD_10_024/d07-x01-y01 Title=$n_\text{ch} \ge 1,~p_\perp > 0.5$~GeV in $|\eta|<2.4$; $\sqrt{s}=0.9$ TeV YMin=0.5 YMax=1.8 # END PLOT # BEGIN PLOT /CMS_QCD_10_024/d08-x01-y01 Title=$n_\text{ch} \ge 1,~p_\perp > 1$~GeV in $|\eta|<2.4$; $\sqrt{s}=0.9$ TeV YMin=0.2 YMax=0.8 # END PLOT rivet-1.8.3/data/plotinfo/MC_ZZINC.plot0000644000175000017500000000655212116077756016013 0ustar sunsun# BEGIN PLOT /MC_ZZINC/ZZ_pT$ Title=Transverse momentum of boson pair XLabel=$p_\perp^{\text{ZZ}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\text{ZZ}}$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_ZZINC/ZZ_pT_peak Title=Peak region of transverse momentum of boson pair XLabel=$p_\perp^{\text{ZZ}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\text{ZZ}}$ [pb/GeV] LogY=0 LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_ZZINC/ZZ_eta Title=Pseudorapidity of boson pair XLabel=$\eta_{\text{ZZ}}$ YLabel=$\text{d}\sigma/\text{d}\eta_{\text{ZZ}}$ [pb] LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_ZZINC/ZZ_phi Title=Azimuthal angle of boson pair XLabel=$\phi_{\text{ZZ}}$ YLabel=$\text{d}\sigma/\text{d}\phi_{\text{ZZ}}$ [pb] LogY=0 # END PLOT # BEGIN PLOT /MC_ZZINC/ZZ_m Title=Invariant mass of boson pair XLabel=$m_{\text{ZZ}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}m_{\text{ZZ}}$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_ZZINC/ZZ_dphi Title=Azimuthal angle difference of boson pair XLabel=$\Delta\phi_{\text{ZZ}}$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi_{\text{ZZ}}$ [pb] LegendXPos=0.10 # END PLOT # BEGIN PLOT /MC_ZZINC/ZZ_deta Title=Pseudorapidity difference of boson pair XLabel=$\Delta\eta_{\text{ZZ}}$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta_{\text{ZZ}}$ [pb] LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_ZZINC/ZZ_dR Title=Separation of boson pair XLabel=$\Delta R_{\text{ZZ}}$ YLabel=$\text{d}\sigma/\text{d}\Delta R_{\text{ZZ}}$ [pb] LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_ZZINC/ZZ_dpT Title=Transverse momentum difference of boson pair XLabel=$\Delta p_\perp^{\text{ZZ}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}\Delta p_\perp^{\text{ZZ}}$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_ZZINC/ZZ_costheta_planes Title=Angle between the boson decay planes XLabel=$\cos(\Psi_{\text{ee},\mu\mu})$ YLabel=$\text{d}\sigma/\text{d}\cos(\Psi_{\text{ee},\mu\mu})$ [pb] # END PLOT # BEGIN PLOT /MC_ZZINC/Z_pT Title=Z $p_\perp$ XLabel=$p_\perp^{\text{Z}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\text{Z}}$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_ZZINC/Z_eta Title=Z pseudorapidity XLabel=$\eta_{\text{Z}}$ YLabel=$\text{d}\sigma/\text{d}\eta_{\text{Z}}$ [pb] LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_ZZINC/Zl_pT Title=Lepton $p_\perp$ XLabel=$p_\perp^{\text{l}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\text{l}}$ [pb/GeV] LogX=1 # END PLOT # BEGIN PLOT /MC_ZZINC/Zl_eta Title=Lepton $\eta$ XLabel=$\eta_{\text{l}}$ YLabel=$\text{d}\sigma/\text{d}\eta_{\text{l}}$ [pb] # END PLOT # BEGIN PLOT /MC_ZZINC/ZeZm_dphi Title=Azimuthal angle difference between oppositely charged leptons XLabel=$\Delta\phi_{e^+,\mu^-}$ YLabel=$\text{d}\sigma/\text{d}\Delta\phi$ [pb] # END PLOT # BEGIN PLOT /MC_ZZINC/ZeZm_deta Title=Pseudorapidity difference between oppositely charged leptons XLabel=$\Delta\eta_{e^+,\mu^-}$ YLabel=$\text{d}\sigma/\text{d}\Delta\eta$ [pb] # END PLOT # BEGIN PLOT /MC_ZZINC/ZeZm_dR Title=Separation between oppositely charged leptons XLabel=$\Delta R_{e^+,\mu^-}$ YLabel=$\text{d}\sigma/\text{d}\Delta R$ [pb] # END PLOT # BEGIN PLOT /MC_ZZINC/ZeZm_m Title=Invariant mass of oppositely charged leptons XLabel=$m_{e^+,\mu^-}$ [GeV] YLabel=$\text{d}\sigma/\text{d}m$ [pb/GeV] # END PLOT rivet-1.8.3/data/plotinfo/CDF_2001_S4751469.plot0000644000175000017500000001036212116077756016635 0ustar sunsun# BEGIN PLOT /CDF_2001_S4751469/d01-x01-y01 Title=$\langle N_\text{ch}\rangle$ vs. $\Delta\phi$ from leading jet ($p_\perp^\text{lead} > 2\text{ GeV}$) XLabel=$\Delta\phi$ / degrees YLabel=$\langle N_\text{ch}\rangle$ # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d01-x01-y02 Title=$\langle N_\text{ch}\rangle$ vs. $\Delta\phi$ from leading jet ($p_\perp^\text{lead} > 5\text{ GeV}$) XLabel=$\Delta\phi$ / degrees YLabel=$\langle N_\text{ch}\rangle$ # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d01-x01-y03 Title=$\langle N_\text{ch}\rangle$ vs. $\Delta\phi$ from leading jet ($p_\perp^\text{lead} > 30\text{ GeV}$) XLabel=$\Delta\phi$ / degrees YLabel=$\langle N_\text{ch}\rangle$ # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d02-x01-y01 Title=$\langle p_\perp^\text{sum}\rangle$ vs. $\Delta\phi$ from leading jet ($p_\perp^\text{lead} > 2\text{ GeV}$) XLabel=$\Delta\phi$ / degrees YLabel=$\langle p_\perp^\text{sum}\rangle$ # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d02-x01-y02 Title=$\langle p_\perp^\text{sum}\rangle$ vs. $\Delta\phi$ from leading jet ($p_\perp^\text{lead} > 5\text{ GeV}$) XLabel=$\Delta\phi$ / degrees YLabel=$\langle p_\perp^\text{sum}\rangle$ # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d02-x01-y03 Title=$\langle p_\perp^\text{sum}\rangle$ vs. $\Delta\phi$ from leading jet ($p_\perp^\text{lead} > 30\text{ GeV}$) XLabel=$\Delta\phi$ / degrees YLabel=$\langle p_\perp^\text{sum}\rangle$ # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d03-x01-y01 Title=$N_\text{ch}$ (toward) for min-bias XLabel=$p_\perp^\text{lead}$ / GeV YLabel=$N_\text{ch}$ LogY=0 LegendYPos=0.5 # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d03-x01-y02 Title=$N_\text{ch}$ (transverse) for min-bias XLabel=$p_\perp^\text{lead}$ / GeV YLabel=$N_\text{ch}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d03-x01-y03 Title=$N_\text{ch}$ (away) for min-bias XLabel=$p_\perp^\text{lead}$ / GeV YLabel=$N_\text{ch}$ LogY=0 # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d04-x01-y01 Title=$N_\text{ch}$ (toward) for JET20 XLabel=$p_\perp^\text{lead}$ / GeV YLabel=$N_\text{ch}$ LegendYPos=0.5 LogY=0 # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d04-x01-y02 Title=$N_\text{ch}$ (transverse) for JET20 XLabel=$p_\perp^\text{lead}$ / GeV YLabel=$N_\text{ch}$ LegendYPos=0.5 LogY=0 # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d04-x01-y03 Title=$N_\text{ch}$ (away) for JET20 XLabel=$p_\perp^\text{lead}$ / GeV YLabel=$N_\text{ch}$ LegendYPos=0.5 LogY=0 # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d05-x01-y01 Title=$p_\perp^\text{sum}$ (toward) for min-bias XLabel=$p_\perp^\text{lead}$ / GeV YLabel=$p_\perp^\text{sum}$ / GeV LegendXPos=0.10 LogY=0 # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d05-x01-y02 Title=$p_\perp^\text{sum}$ (transverse) for min-bias XLabel=$p_\perp^\text{lead}$ / GeV YLabel=$p_\perp^\text{sum}$ / GeV LegendXPos=0.10 LogY=0 # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d05-x01-y03 Title=$p_\perp^\text{sum}$ (away) for min-bias XLabel=$p_\perp^\text{lead}$ / GeV YLabel=$p_\perp^\text{sum}$ / GeV LegendXPos=0.10 LogY=0 # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d06-x01-y01 Title=$p_\perp^\text{sum}$ (toward) for JET20 XLabel=$p_\perp^\text{lead}$ / GeV YLabel=$p_\perp^\text{sum}$ / GeV LegendXPos=0.10 LogY=0 ShowZero=0 # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d06-x01-y02 Title=$p_\perp^\text{sum}$ (transverse) for JET20 XLabel=$p_\perp^\text{lead}$ / GeV YLabel=$p_\perp^\text{sum}$ / GeV LegendXPos=0.10 LogY=0 # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d06-x01-y03 Title=$p_\perp^\text{sum}$ (away) for JET20 XLabel=$p_\perp^\text{lead}$ / GeV YLabel=$p_\perp^\text{sum}$ / GeV LegendXPos=0.10 LogY=0 # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d07-x01-y01 Title=$p_\perp$ distribution (transverse, $p_\perp^\text{lead} > 2\text{ GeV}$) XLabel=$p_\perp$ / GeV YLabel=$1/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{p_\perp}$ FullRange=1 # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d07-x01-y02 Title=$p_\perp$ distribution (transverse, $p_\perp^\text{lead} > 5\text{ GeV}$) XLabel=$p_\perp$ / GeV YLabel=$1/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{p_\perp}$ FullRange=1 # END PLOT # BEGIN PLOT /CDF_2001_S4751469/d07-x01-y03 Title=$p_\perp$ distribution (transverse, $p_\perp^\text{lead} > 30 \text{GeV}$) XLabel=$p_\perp$ / GeV YLabel=$1/\sigma \, \mathrm{d}{\sigma}/\mathrm{d}{p_\perp}$ FullRange=1 # END PLOT rivet-1.8.3/data/plotinfo/D0_2008_S7719523.plot0000644000175000017500000000612512116077756016513 0ustar sunsun# BEGIN PLOT /D0_2008_S7719523/d01-x01-y01 Title=Leading photon $p_\perp$ (central jets, same-sign rapidity) XLabel=$p_\perp^\gamma$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}p_\perp^\gamma/\mathrm{d}\eta^\gamma/\mathrm{d}\eta^\mathrm{jet}$ [pb/GeV] LogX=1 XMin=20.0 XMax=400.0 # END PLOT # BEGIN PLOT /D0_2008_S7719523/d02-x01-y01 Title=Leading photon $p_\perp$ (central jets, opp-sign rapidity) XLabel=$p_\perp^\gamma$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}p_\perp^\gamma/\mathrm{d}\eta^\gamma/\mathrm{d}\eta^\mathrm{jet}$ [pb/GeV] LogX=1 XMin=20.0 XMax=400.0 # END PLOT # BEGIN PLOT /D0_2008_S7719523/d03-x01-y01 Title=Leading photon $p_\perp$ (forward jets, same-sign rapidity) XLabel=$p_\perp^\gamma$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}p_\perp^\gamma/\mathrm{d}\eta^\gamma/\mathrm{d}\eta^\mathrm{jet}$ [pb/GeV] LogX=1 XMin=20.0 XMax=400.0 # END PLOT # BEGIN PLOT /D0_2008_S7719523/d04-x01-y01 Title=Leading photon $p_\perp$ (forward jets, opp-sign rapidity) XLabel=$p_\perp^\gamma$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}p_\perp^\gamma/\mathrm{d}\eta^\gamma/\mathrm{d}\eta^\mathrm{jet}$ [pb/GeV] LogX=1 XMin=20.0 XMax=400.0 # END PLOT # BEGIN PLOT /D0_2008_S7719523/d05-x01-y01 Title=Differential Cross Section Ratio $\frac{\mathrm{d}\sigma(|y^{\mathrm{jet}}|<0.8,\,y^\gamma \cdot y^{\mathrm{jet}}<0)}{\mathrm{d}\sigma(|y^{\mathrm{jet}}|<0.8,\,y^\gamma \cdot y^{\mathrm{jet}}>0)}$ XLabel=$p_\perp(\gamma)$ [GeV] YLabel=Ratio LogX=1 XMin=20.0 XMax=400.0 # END PLOT # BEGIN PLOT /D0_2008_S7719523/d06-x01-y01 Title=Differential Cross Section Ratio $\frac{\mathrm{d}\sigma(|y^{\mathrm{jet}}|<0.8,\,y^\gamma \cdot y^{\mathrm{jet}}>0)}{\mathrm{d}\sigma(1.5<|y^{\mathrm{jet}}|<2.5,\,y^\gamma \cdot y^{\mathrm{jet}}>0)}$ XLabel=$p_\perp(\gamma)$ [GeV] YLabel=Ratio LogX=1 XMin=20.0 XMax=400.0 # END PLOT # BEGIN PLOT /D0_2008_S7719523/d07-x01-y01 Title=Differential Cross Section Ratio $\frac{\mathrm{d}\sigma(|y^{\mathrm{jet}}|<0.8,\,y^\gamma \cdot y^{\mathrm{jet}}>0)}{\mathrm{d}\sigma(1.5<|y^{\mathrm{jet}}|<2.5,\,y^\gamma \cdot y^{\mathrm{jet}}<0)}$ XLabel=$p_\perp(\gamma)$ [GeV] YLabel=Ratio LogX=1 XMin=20.0 XMax=400.0 # END PLOT # BEGIN PLOT /D0_2008_S7719523/d08-x01-y01 Title=Differential Cross Section Ratio $\frac{\mathrm{d}\sigma(1.5<|y^{\mathrm{jet}}|<2.5,\,y^\gamma \cdot y^{\mathrm{jet}}<0)}{\mathrm{d}\sigma(1.5<|y^{\mathrm{jet}}|<2.5,\,y^\gamma \cdot y^{\mathrm{jet}}>0)}$ XLabel=$p_\perp(\gamma)$ [GeV] YLabel=Ratio LogX=1 XMin=20.0 XMax=400.0 # END PLOT # BEGIN PLOT /D0_2008_S7719523/d09-x01-y01 Title=Differential Cross Section Ratio $\frac{\mathrm{d}\sigma(|y^{\mathrm{jet}}|<0.8,\,y^\gamma \cdot y^{\mathrm{jet}}<0)}{\mathrm{d}\sigma(1.5<|y^{\mathrm{jet}}|<2.5,\,y^\gamma \cdot y^{\mathrm{jet}}>0)}$ XLabel=$p_\perp(\gamma)$ [GeV] YLabel=Ratio LogX=1 XMin=20.0 XMax=400.0 # END PLOT # BEGIN PLOT /D0_2008_S7719523/d10-x01-y01 Title=Differential Cross Section Ratio $\frac{\mathrm{d}\sigma(|y^{\mathrm{jet}}|<0.8,\,y^\gamma \cdot y^{\mathrm{jet}}<0)}{\mathrm{d}\sigma(1.5<|y^{\mathrm{jet}}|<2.5,\,y^\gamma \cdot y^{\mathrm{jet}}<0)}$ XLabel=$p_\perp(\gamma)$ [GeV] YLabel=Ratio LogX=1 XMin=20.0 XMax=400.0 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_S8983313.plot0000644000175000017500000000234512116077756017107 0ustar sunsun# BEGIN PLOT /ATLAS_2011_S8983313/count_A Title=Number of events in signal region A XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S8983313/count_B Title=Number of events in signal region B XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S8983313/count_C Title=Number of events in signal region C XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S8983313/count_D Title=Number of events in signal region D XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S8983313/m_eff_A Title=Effective Mass in the 2 jet Signal Region (A) XLabel=$M_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/100 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S8983313/m_eff_C_D Title=Effective Mass in the 3 jet Signal Regions (C and D) XLabel=$M_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/100 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S8983313/m_T2 Title=$M_{T2}$ in the Signal Region B XLabel=$M_{T2}$ [GeV] YLabel=$\mathrm{Events}/40 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S8983313/Et_miss Title=Missing transverse Energy XLabel=$E_{\mathrm{T}}^{\rm miss}$ [GeV] YLabel=$\mathrm{Events}/50 \mathrm{GeV}$ LogY=1 # END PLOT rivet-1.8.3/data/plotinfo/ALICE_2010_S8706239.plot0000644000175000017500000000120412116077756017050 0ustar sunsun# BEGIN PLOT /ALICE_2010_S8706239/d04-x01-y01 Title=Invariant Yield XLabel=$p_\perp$ [GeV] YLabel=$1/(N_\text{ev} 2\pi p_\perp) (\text{d}^2 N_\text{ch})/(\text{d}\eta\text{d}p_\perp)$ LogX=1 # END PLOT # BEGIN PLOT /ALICE_2010_S8706239/d11-x01-y01 Title=Avg. transv. momentum vs. $N_\text{ch}$ ($ 0.15\leq p_\perp\leq 4$ GeV) XLabel=$N_\text{ch}$ YLabel=$\langle p_\perp \rangle$ vs. $N_\text{ch}$ [GeV] LogY=0 # END PLOT # BEGIN PLOT /ALICE_2010_S8706239/d12-x01-y01 Title=Avg. transv. momentum vs. $N_\text{ch}$ ($ 0.5\leq p_\perp\leq 4$ GeV) XLabel=$N_\text{ch}$ YLabel=$\langle p_\perp \rangle$ vs. $N_\text{ch}$ [GeV] LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_I1190891.plot0000644000175000017500000000113412116077756017063 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1190891/count_SR1 Title=Number of events in the SR1 signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1190891/count_SR2 Title=Number of events in the SR2 signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1190891/hist_etmiss Title=Missing Transverse Energy XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/50$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1190891/hist_m_eff Title=Effective Mass XLabel=$M_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/150$\,GeV LogY=1 # END PLOT rivet-1.8.3/data/plotinfo/CDF_1996_S3418421.plot0000644000175000017500000000215312116077756016645 0ustar sunsun# BEGIN PLOT /CDF_1996_S3418421/d01-x01-y01 Title=Dijet events with $241 < m_\mathrm{dijet}/\mathrm{GeV} < 300$ XLabel=$\chi = \exp(|\eta_1-\eta_2|)$ YLabel=1/N dN/d$\chi$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3418421/d01-x01-y02 Title=Dijet events with $300 < m_\mathrm{dijet}/\mathrm{GeV} < 400$ XLabel=$\chi = \exp(|\eta_1-\eta_2|)$ YLabel=1/N dN/d$\chi$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3418421/d01-x01-y03 Title=Dijet events with $400 < m_\mathrm{dijet}/\mathrm{GeV} < 517$ XLabel=$\chi = \exp(|\eta_1-\eta_2|)$ YLabel=1/N dN/d$\chi$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3418421/d01-x01-y04 Title=Dijet events with $517 < m_\mathrm{dijet}/\mathrm{GeV} < 625$ XLabel=$\chi = \exp(|\eta_1-\eta_2|)$ YLabel=1/N dN/d$\chi$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3418421/d01-x01-y05 Title=Dijet events with $625 < m_\mathrm{dijet}/\mathrm{GeV}$ XLabel=$\chi = \exp(|\eta_1-\eta_2|)$ YLabel=1/N dN/d$\chi$ LogY=0 # END PLOT # BEGIN PLOT /CDF_1996_S3418421/d02-x01-y01 Title=Dijet angular ratio as function of dijet mass XLabel=$m_{jj}$ [GeV] YLabel=Ratio $R_\chi=N(\chi<2.5)/N(2.5<\chi<5)$ # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_I1084540.plot0000644000175000017500000000123312117132453017037 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1084540/d0 Title=Rapidity gap size in $\eta$ starting from $\eta = \pm 4.9$, $p_T > 200$ MeV XLabel=$\Delta\eta^\text{F}$ YLabel=$\mathrm{d}\sigma / \mathrm{d}\Delta\eta^\text{F}$ [mb] LogY=1 YMin=0.1 YMax=200 # END PLOT # BEGIN PLOT /ATLAS_2012_I1084540/d02-x01-y01 Title=Rapidity gap size in $\eta$ starting from $\eta = \pm 4.9$, $p_T > 400$ MeV # END PLOT # BEGIN PLOT /ATLAS_2012_I1084540/d03-x01-y01 Title=Rapidity gap size in $\eta$ starting from $\eta = \pm 4.9$, $p_T > 600$ MeV # END PLOT # BEGIN PLOT /ATLAS_2012_I1084540/d04-x01-y01 Title=Rapidity gap size in $\eta$ starting from $\eta = \pm 4.9$, $p_T > 800$ MeV # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_I945498.plot0000644000175000017500000002406612116077756017025 0ustar sunsun# BEGIN PLOT /ATLAS_2011_I945498/d01-x01-y03 Title=$\sigma(\geq N_\text{jet})$, $Z\to \ell^+\ell^-$, $p_\perp(\text{jet})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$N_\text{jet}$ YLabel=$\sigma(Z\to \ell^+\ell^- + \geq N_\text{jet})$~[pb] YLabelSep=4.5 # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d01-x01-y01 Title=$\sigma(\geq N_\text{jet})$, $Z\to e^+e^-$, $p_\perp(\text{jet})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$N_\text{jet}$ YLabel=$\sigma(Z\to e^+e^- + \geq N_\text{jet})$~[pb] YLabelSep=4.5 # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d01-x01-y02 Title=$\sigma(\geq N_\text{jet})$, $Z\to\mu^+\mu^-$, $p_\perp(\text{jet})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$N_\text{jet}$ YLabel=$\sigma(Z\to \mu^+\mu^- + \geq N_\text{jet})$~[pb] YLabelSep=4.5 # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d02-x01-y03 Title=$\sigma(N_\text{jet}) / \sigma(N_\text{jet}-1)$, $Z\to \ell^+\ell^-$, $p_\perp(\text{jet})>30$~GeV, $|y\text{jet}<4.4|$ XLabel=$N_\text{jet}$ YLabel=$\frac{\sigma(Z\to \ell^+\ell^- + \geq N_\text{jet})}{ \sigma(Z\to \ell^+\ell^- + \geq N_\text{jet}-1)}$ YLabelSep=4.5 LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d02-x01-y01 Title=$\sigma(N_\text{jet}) / \sigma(N_\text{jet}-1)$, $Z\to e^+e^-$, $p_\perp(\text{jet})>30$~GeV, $|y\text{jet}<4.4|$ XLabel=$N_\text{jet}$ YLabel=$\frac{\sigma(Z\to e^+e^- + \geq N_\text{jet})}{ \sigma(Z\to e^+e^- + \geq N_\text{jet}-1)}$ YLabelSep=4.5 LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d02-x01-y02 Title=$\sigma(N_\text{jet}) / \sigma(N_\text{jet}-1)$, $Z\to\mu^+\mu^-$, $p_\perp(\text{jet})>30$~GeV, $|y\text{jet}<4.4|$ XLabel=$N_\text{jet}$ YLabel=$\frac{\sigma(Z\to \mu^+\mu^- + \geq N_\text{jet}) }{ \sigma(Z\to \mu^+\mu^- + \geq N_\text{jet}-1)}$ YLabelSep=4.5 LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d02-x01-y03 Title=$\sigma(N_\text{jet}) / \sigma(N_\text{jet}-1)$, $Z\to\ell^+\ell^-$, $p_\perp(\text{jet})>30$~GeV, $|y\text{jet}_<4.4|$ XLabel=$N_\text{jet}$ YLabel=$\frac{\sigma(Z\to \mu^+\mu^- + \geq N_\text{jet}) }{ \sigma(Z\to \mu^+\mu^- + \geq N_\text{jet}-1)}$ YLabelSep=4.5 # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d03-x01-y03 Title=Incl. jet x-section, $Z\to\ell^+\ell^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$p_\perp^\text{jet}$~[GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp (\text{jet})$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d03-x01-y01 Title=Incl. jet x-section, $Z\to e^+ e^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$p_\perp^\text{jet}$~[GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp (\text{jet})$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d03-x01-y02 Title=Incl. jet x-section, $Z\to \mu^+ \mu^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$p_\perp^\text{jet}$~[GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp (\text{jet})$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d04-x01-y03 Title=Jet x-section, $Z\to\ell^+\ell^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$p_\perp^\text{leading jet}$~[GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp (\text{leading jet})$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d04-x01-y01 Title=Jet x-section, $Z\to e^+ e^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$p_\perp^\text{leading jet}$~[GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp (\text{leading jet})$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d04-x01-y02 Title=Jet x-section, $Z\to \mu^+ \mu^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$p_\perp^\text{leading jet}$~[GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp (\text{leading jet})$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d05-x01-y03 Title=Jet x-section, $Z\to\ell^+\ell^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$p_\perp^\text{2nd leading jet}$~[GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp (\text{2nd leading jet})$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d05-x01-y01 Title=Jet x-section, $Z\to e^+ e^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$p_\perp^\text{2nd leading jet}$~[GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp (\text{2nd leading jet})$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d05-x01-y02 Title=Jet x-section, $Z\to\mu^+\mu^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$p_\perp^\text{2nd leading jet}$~[GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp (\text{2nd leading jet})$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d06-x01-y03 Title=Incl. jet x-section, $Z\to\ell^+\ell^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left|y^\text{jet}\right|$ YLabel=$\text{d}\sigma/\text{d}\left|y^\text{jet}\right|$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d06-x01-y01 Title=Incl. jet x-section, $Z\to e^+ e^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left|y^\text{jet}\right|$ YLabel=$\text{d}\sigma/\text{d}\left|y^\text{jet}\right|$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d06-x01-y02 Title=Incl. jet x-section, $Z\to\mu^+\mu^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left|y^\text{jet}\right|$ YLabel=$\text{d}\sigma/\text{d}\left|y^\text{jet}\right|$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d07-x01-y03 Title=Jet x-section, $Z\to\ell^+\ell^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left|y^\text{leading jet}\right|$ YLabel=$\text{d}\sigma/\text{d}\left|y^\text{leading jet}\right|$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d07-x01-y01 Title=Jet x-section, $Z\to e^+ e^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left|y^\text{leading jet}\right|$ YLabel=$\text{d}\sigma/\text{d}\left|y^\text{leading jet}\right|$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d07-x01-y02 Title=Jet x-section, $Z\to \mu^+ \mu^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left|y^\text{leading jet}\right|$ YLabel=$\text{d}\sigma/\text{d}\left|y^\text{leading jet}\right|$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d08-x01-y03 Title=Jet x-section, $Z\to\ell^+\ell^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left|y^\text{2nd leading jet}\right|$ YLabel=$\text{d}\sigma/\text{d}\left|y^\text{2nd leading jet}\right|$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d08-x01-y01 Title=Jet x-section, $Z\to e^+ e^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left|y^\text{2nd leading jet}\right|$ YLabel=$\text{d}\sigma/\text{d}\left|y^\text{2nd leading jet}\right|$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d08-x01-y02 Title=Jet x-section, $Z\to\mu^+\mu^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left|y^\text{2nd leading jet}\right|$ YLabel=$\text{d}\sigma/\text{d}\left|y^\text{2nd leading jet}\right|$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d09-x01-y03 Title=Jet x-section, $Z\to\ell^+\ell^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$m^\text{jj}$ (leading jet, 2nd leading jet)~[GeV] YLabel=$\text{d}\sigma/\text{d}m^\text{jj}$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d09-x01-y01 Title=Jet x-section, $Z\to e^+ e^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$m^\text{jj}$ (leading jet, 2nd leading jet)~[GeV] YLabel=$\text{d}\sigma/\text{d}m^\text{jj}$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d09-x01-y02 Title=Jet x-section, $Z\to\mu^+\mu^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$m^\text{jj}$ (leading jet, 2nd leading jet)~[GeV] YLabel=$\text{d}\sigma/\text{d}m^\text{jj}$~[pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d10-x01-y03 Title=Jet x-section, $Z\to\ell^+\ell^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left| \Delta y^\text{jj}\right|$ (leading jet, 2nd leading jet) YLabel=$\text{d}\sigma/\text{d}\left| \Delta y^\text{jj}\right|$ # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d10-x01-y01 Title=Jet x-section, $Z\to e^+ e^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left| \Delta y^\text{jj}\right|$ (leading jet, 2nd leading jet) YLabel=$\text{d}\sigma/\text{d}\left| \Delta y^\text{jj}\right|$ # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d10-x01-y02 Title=Jet x-section, $Z\to\mu^+\mu^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left| \Delta y^\text{jj}\right|$ (leading jet, 2nd leading jet) YLabel=$\text{d}\sigma/\text{d}\left| \Delta y^\text{jj}\right|$ # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d11-x01-y03 Title=Jet x-section, $Z\to\ell^+\ell^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left| \Delta \Phi^\text{jj}\right|$ (leading jet, 2nd leading jet)~[rad] YLabel=$\text{d}\sigma/\text{d}\left| \Delta \Phi^\text{jj}\right|$~[pb/rad] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d11-x01-y01 Title=Jet x-section, $Z\to e^+ e^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left| \Delta \Phi^\text{jj}\right|$ (leading jet, 2nd leading jet)~[rad] YLabel=$\text{d}\sigma/\text{d}\left| \Delta \Phi^\text{jj}\right|$~[pb/rad] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d11-x01-y02 Title=Jet x-section, $Z\to\mu^+\mu^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left| \Delta \Phi^\text{jj}\right|$ (leading jet, 2nd leading jet)~[rad] YLabel=$\text{d}\sigma/\text{d}\left| \Delta \Phi^\text{jj}\right|$~[pb/rad] # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d12-x01-y03 Title=Jet x-section, $Z\to\ell^+\ell^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left| \Delta \text{R}^\text{jj}\right|$ (leading jet, 2nd leading jet) YLabel=$\text{d}\sigma/\text{d}\left| \Delta \text{R}^\text{jj}\right|$ # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d12-x01-y01 Title=Jet x-section, $Z\to e^+ e^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left| \Delta \text{R}^\text{jj}\right|$ (leading jet, 2nd leading jet) YLabel=$\text{d}\sigma/\text{d}\left| \Delta \text{R}^\text{jj}\right|$ # END PLOT # BEGIN PLOT /ATLAS_2011_I945498/d12-x01-y02 Title=Jet x-section, $Z\to\mu^+\mu^-$, $p_\perp(\text{lead})>30$~GeV, $|y_\text{jet}<4.4|$ XLabel=$\left| \Delta \text{R}^\text{jj}\right|$ (leading jet, 2nd leading jet) YLabel=$\text{d}\sigma/\text{d}\left| \Delta \text{R}^\text{jj}\right|$ # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_S9212353.plot0000644000175000017500000001255712116077756017103 0ustar sunsun# BEGIN PLOT /ATLAS_2011_S9212353/3jl_count_electron_channel Title=Number of events in the 3 jet loose electron channel XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/3jl_count_muon_channel Title=Number of events in the 3 jet loose muon channel XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/3jt_count_electron_channel Title=Number of events in the 3 jet tight electron channel XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/3jt_count_muon_channel Title=Number of events in the 3 jet tight muon channel XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/4jl_count_electron_channel Title=Number of events in the 4 jet loose electron channel XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/4jl_count_muon_channel Title=Number of events in the 4 jet loose muon channel XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/4jt_count_electron_channel Title=Number of events in the 4 jet tight electron channel XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/4jt_count_muon_channel Title=Number of events in the 4 jet tight muon channel XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/3j_Et_miss_e Title=Missing transverse Energy in the 3 jet electron channel XLabel=$E_{\mathrm{T}}^{\rm miss}$ [GeV] YLabel=$\mathrm{Events}/10 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/3j_Et_miss_mu Title=Missing transverse Energy in the 3 jet muon channel XLabel=$E_{\mathrm{T}}^{\rm miss}$ [GeV] YLabel=$\mathrm{Events}/10 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/4j_Et_miss_e Title=Missing transverse Energy in the 4 jet electron channel XLabel=$E_{\mathrm{T}}^{\rm miss}$ [GeV] YLabel=$\mathrm{Events}/10 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/4j_Et_miss_mu Title=Missing transverse Energy in the 4 jet muon channel XLabel=$E_{\mathrm{T}}^{\rm miss}$ [GeV] YLabel=$\mathrm{Events}/10 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/3j_mT_e Title=Transverse mass in the 3 jet electron channel XLabel=$m_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/10 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/3j_mT_mu Title=Transverse mass in the 3 jet muon channel XLabel=$m_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/10 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/4j_mT_e Title=Transverse mass in the 4 jet electron channel XLabel=$m_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/10 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/4j_mT_mu Title=Transverse mass in the 4 jet muon channel XLabel=$m_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/10 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/3j_m_eff_e Title=Effective Mass in the 3 jet electron channel before final selectron XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/50 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/3j_m_eff_mu Title=Effective Mass in the 3 jet muon channel before final selectron XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/50 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/4j_m_eff_e Title=Effective Mass in the 4 jet electron channel before final selectron XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/50 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/4j_m_eff_mu Title=Effective Mass in the 4 jet muon channel before final selectron XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/50 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/3jl_m_eff_e_final Title=Effective Mass in the 3 jet loose electron channel after final selectron XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/50 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/3jl_m_eff_mu_final Title=Effective Mass in the 3 jet loose muon channel after final selectron XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/50 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/4jl_m_eff_e_final Title=Effective Mass in the 4 jet loose electron channel after final selectron XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/50 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/4jl_m_eff_mu_final Title=Effective Mass in the 4 jet loose muon channel after final selectron XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/50 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/3jt_m_eff_e_final Title=Effective Mass in the 3 jet tight electron channel after final selectron XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/50 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/3jt_m_eff_mu_final Title=Effective Mass in the 3 jet tight muon channel after final selectron XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/50 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/4jt_m_eff_e_final Title=Effective Mass in the 4 jet tight electron channel after final selectron XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/50 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2011_S9212353/4jt_m_eff_mu_final Title=Effective Mass in the 4 jet tight muon channel after final selectron XLabel=$m_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/50 \mathrm{GeV}$ LogY=1 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_I925932.plot0000644000175000017500000000166112116077756017010 0ustar sunsun# BEGIN PLOT /ATLAS_2011_I925932/d01-x01-y01 Title=$W\to e\nu_e$ $p_\perp$ with "dressed" kinematics XLabel=$p_\perp^W$ [GeV] YLabel=$(1/\sigma_{fid})(\mathrm{d}\sigma_{fid}/\mathrm{d}p_\perp^W)$ [GeV$^{-1}$] YMin=0.000001 # END PLOT # BEGIN PLOT /ATLAS_2011_I925932/d01-x01-y02 Title=$W\to e\nu_e$ $p_\perp$ with "bare" kinematics XLabel=$p_\perp^W$ [GeV] YLabel=$(1/\sigma_{fid})(\mathrm{d}\sigma_{fid}/\mathrm{d}p_\perp^W)$ [GeV$^{-1}$] YMin=0.000001 # END PLOT # BEGIN PLOT /ATLAS_2011_I925932/d02-x01-y01 Title=$W\to \mu\nu_{\mu}$ $p_\perp$ with "dressed" kinematics XLabel=$p_\perp^W$ [GeV] YLabel=$(1/\sigma_{fid})(\mathrm{d}\sigma_{fid}/\mathrm{d}p_\perp^W)$ [GeV$^{-1}$] YMin=0.000001 # END PLOT # BEGIN PLOT /ATLAS_2011_I925932/d02-x01-y02 Title=$W\to \mu\nu_{\mu}$ $p_\perp$ with "bare" kinematics XLabel=$p_\perp^W$ [GeV] YLabel=$(1/\sigma_{fid})(\mathrm{d}\sigma_{fid}/\mathrm{d}p_\perp^W)$ [GeV$^{-1}$] YMin=0.000001 # END PLOT rivet-1.8.3/data/plotinfo/Makefile.am0000644000175000017500000001521012123033122015633 0ustar sunsundist_pkgdata_DATA = \ ALEPH_1991_S2435284.plot \ ALEPH_1996_S3486095.plot \ ALEPH_1996_S3196992.plot \ ALEPH_1999_S4193598.plot \ ALEPH_2001_S4656318.plot \ ALEPH_2002_S4823664.plot \ ALEPH_2004_S5765862.plot \ ALICE_2010_S8624100.plot \ ALICE_2010_S8625980.plot \ ALICE_2010_S8706239.plot \ ALICE_2011_S8909580.plot \ ALICE_2011_S8945144.plot \ ALICE_2012_I1181770.plot \ ARGUS_1993_S2653028.plot \ ARGUS_1993_S2669951.plot \ ARGUS_1993_S2789213.plot \ ATLAS_2010_S8591806.plot \ ATLAS_2010_S8817804.plot \ ATLAS_2010_S8894728.plot \ ATLAS_2010_S8914702.plot \ ATLAS_2010_S8918562.plot \ ATLAS_2010_S8919674.plot \ ATLAS_2011_S8924791.plot \ ATLAS_2011_S8971293.plot \ ATLAS_2011_S8994773.plot \ ATLAS_2011_S9002537.plot \ ATLAS_2010_CONF_2010_049.plot \ ATLAS_2011_S9120807.plot \ ATLAS_2011_S9126244.plot \ ATLAS_2011_S9128077.plot \ ATLAS_2011_S9131140.plot \ ATLAS_2011_I894867.plot \ ATLAS_2011_I919017.plot \ ATLAS_2011_I925932.plot \ ATLAS_2011_I926145.plot \ ATLAS_2011_I944826.plot \ ATLAS_2011_I945498.plot \ ATLAS_2011_I954993.plot \ ATLAS_2011_S9225137.plot \ ATLAS_2011_S9212183.plot \ ATLAS_2011_CONF_2011_090.plot \ ATLAS_2011_CONF_2011_098.plot \ ATLAS_2011_S8983313.plot \ ATLAS_2011_S9212353.plot \ ATLAS_2012_I1082936.plot \ ATLAS_2012_I1083318.plot \ ATLAS_2012_I1084540.plot \ ATLAS_2012_I1091481.plot \ ATLAS_2012_I1093738.plot \ ATLAS_2012_I1094061.plot \ ATLAS_2012_I1094568.plot \ ATLAS_2012_I1095236.plot \ ATLAS_2012_I943401.plot \ ATLAS_2012_I946427.plot \ ATLAS_2012_CONF_2012_001.plot \ ATLAS_2012_I1119557.plot \ ATLAS_2012_I1125575.plot \ ATLAS_2012_I1112263.plot \ ATLAS_2012_I1125961.plot \ ATLAS_2012_I1126136.plot \ ATLAS_2012_I1117704.plot \ ATLAS_2012_I1118269.plot \ ATLAS_2012_I1180197.plot \ ATLAS_2012_I1082009.plot \ ATLAS_2012_I1183818.plot \ ATLAS_2012_I1188891.plot \ ATLAS_2012_I1186556.plot \ ATLAS_2012_I1190891.plot \ ATLAS_2012_CONF_2012_103.plot \ ATLAS_2012_CONF_2012_104.plot \ ATLAS_2012_CONF_2012_105.plot \ ATLAS_2012_CONF_2012_109.plot \ ATLAS_2012_CONF_2012_153.plot \ ATLAS_2013_I1217867.plot \ BABAR_2003_I593379.plot \ BABAR_2005_S6181155.plot \ BABAR_2007_S6895344.plot \ BABAR_2007_S7266081.plot \ BELLE_2001_S4598261.plot \ BELLE_2006_S6265367.plot \ CDF_1988_S1865951.plot \ CDF_1990_S2089246.plot \ CDF_1993_S2742446.plot \ CDF_1994_S2952106.plot \ CDF_1996_S3108457.plot \ CDF_1996_S3349578.plot \ CDF_1996_S3418421.plot \ CDF_1997_S3541940.plot \ CDF_1998_S3618439.plot \ CDF_2000_S4155203.plot \ CDF_2000_S4266730.plot \ CDF_2001_S4517016.plot \ CDF_2001_S4563131.plot \ CDF_2001_S4751469.plot \ CDF_2002_S4796047.plot \ CDF_2004_S5839831.plot \ CDF_2005_S6080774.plot \ CDF_2005_S6217184.plot \ CDF_2006_S6450792.plot \ CDF_2006_S6653332.plot \ CDF_2007_S7057202.plot \ CDF_2008_LEADINGJETS.plot \ CDF_2008_NOTE_9351.plot \ CDF_2008_S7540469.plot \ CDF_2008_S7541902.plot \ CDF_2008_S7782535.plot \ CDF_2008_S7828950.plot \ CDF_2008_S8093652.plot \ CDF_2008_S8095620.plot \ CDF_2009_S8233977.plot \ CDF_2009_NOTE_9936.plot \ CDF_2009_S8383952.plot \ CDF_2009_S8436959.plot \ CDF_2010_S8591881_DY.plot \ CDF_2010_S8591881_QCD.plot \ CDF_2012_NOTE10874.plot \ CLEO_2004_S5809304.plot \ CMS_2010_S8547297.plot \ CMS_2010_S8656010.plot \ CMS_2011_S8884919.plot \ CMS_2011_S8941262.plot \ CMS_2011_S8950903.plot \ CMS_2011_S8957746.plot \ CMS_2011_S8968497.plot \ CMS_2011_S8973270.plot \ CMS_2011_S8978280.plot \ CMS_2011_S9086218.plot \ CMS_2011_S9088458.plot \ CMS_2011_S9120041.plot \ CMS_2011_S9215166.plot \ CMS_2011_I954992.plot \ CMS_2012_I1087342.plot \ CMS_2012_I1102908.plot \ CMS_2012_I1107658.plot \ CMS_2012_I1184941.plot \ CMS_2012_I1193338.plot \ CMS_2012_PAS_FWD_11_003.plot \ CMS_2012_PAS_QCD_11_010.plot \ CMS_QCD_10_024.plot \ D0_1996_S3214044.plot \ D0_1996_S3324664.plot \ D0_2000_S4480767.plot \ D0_2001_S4674421.plot \ D0_2004_S5992206.plot \ D0_2006_S6438750.plot \ D0_2007_S7075677.plot \ D0_2008_S6879055.plot \ D0_2008_S7554427.plot \ D0_2008_S7662670.plot \ D0_2008_S7719523.plot \ D0_2008_S7837160.plot \ D0_2008_S7863608.plot \ D0_2009_S8202443.plot \ D0_2009_S8320160.plot \ D0_2009_S8349509.plot \ D0_2010_S8566488.plot \ D0_2010_S8570965.plot \ D0_2010_S8671338.plot \ D0_2010_S8821313.plot \ D0_2011_I895662.plot \ E735_1998_S3905616.plot \ DELPHI_1995_S3137023.plot \ DELPHI_1996_S3430090.plot \ DELPHI_1999_S3960137.plot \ DELPHI_2000_S4328825.plot \ DELPHI_2002_069_CONF_603.plot \ DELPHI_2003_WUD_03_11.plot \ EXAMPLE.plot \ H1_1994_S2919893.plot \ H1_1995_S3167097.plot \ H1_2000_S4129130.plot \ JADE_OPAL_2000_S4300807.plot \ JADE_1998_S3612880.plot \ LHCB_2010_S8758301.plot \ LHCB_2010_I867355.plot \ LHCB_2011_I917009.plot \ LHCB_2011_I919315.plot \ LHCB_2012_I1119400.plot \ LHCF_2012_I1115479.plot \ MC_GENERIC.plot \ MC_IDENTIFIED.plot \ MC_LEADJETUE.plot \ MC_DIJET.plot \ MC_DIPHOTON.plot \ MC_PHOTONJETUE.plot \ MC_SUSY.plot \ MC_TTBAR.plot \ MC_JETS.plot \ MC_KTSPLITTINGS.plot \ MC_PHOTONINC.plot \ MC_PHOTONJETS.plot \ MC_PHOTONKTSPLITTINGS.plot \ MC_PHOTONS.plot \ MC_QCD_PARTONS.plot \ MC_VH2BB.plot \ MC_HINC.plot \ MC_HJETS.plot \ MC_HKTSPLITTINGS.plot \ MC_PDFS.plot \ MC_WINC.plot \ MC_WJETS.plot \ MC_WKTSPLITTINGS.plot \ MC_WPOL.plot \ MC_WWINC.plot \ MC_WWJETS.plot \ MC_WWKTSPLITTINGS.plot \ MC_XS.plot \ MC_ZINC.plot \ MC_ZJETS.plot \ MC_ZKTSPLITTINGS.plot \ MC_ZZINC.plot \ MC_ZZJETS.plot \ MC_ZZKTSPLITTINGS.plot \ OPAL_1993_S2692198.plot \ OPAL_1994_S2927284.plot \ OPAL_1995_S3198391.plot \ OPAL_1996_S3257789.plot \ OPAL_1997_S3396100.plot \ OPAL_1997_S3608263.plot \ OPAL_1998_S3702294.plot \ OPAL_1998_S3749908.plot \ OPAL_1998_S3780481.plot \ OPAL_2000_S4418603.plot \ OPAL_2001_S4553896.plot \ OPAL_2002_S5361494.plot \ OPAL_2004_S6132243.plot \ PDG_HADRON_MULTIPLICITIES.plot \ PDG_HADRON_MULTIPLICITIES_RATIOS.plot \ SFM_1984_S1178091.plot \ SLD_1996_S3398250.plot \ SLD_1999_S3743934.plot \ SLD_2002_S4869273.plot \ SLD_2004_S5693039.plot \ STAR_2006_S6500200.plot \ STAR_2006_S6860818.plot \ STAR_2006_S6870392.plot \ STAR_2008_S7869363.plot \ STAR_2008_S7993412.plot \ STAR_2009_UE_HELEN.plot \ TASSO_1990_S2148048.plot \ TOTEM_2012_I1115294.plot \ TOTEM_2012_002.plot \ ZEUS_2001_S4815815.plot \ UA1_1990_S2044935.plot \ UA5_1982_S875503.plot \ UA5_1986_S1583476.plot \ UA5_1987_S1640666.plot \ UA5_1988_S1867512.plot \ UA5_1989_S1926373.plot rivet-1.8.3/data/plotinfo/ATLAS_2012_I1125961.plot0000644000175000017500000000555712116077756017074 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1125961/count_A_tight Title=Number of events in the tight A signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125961/count_A_medium Title=Number of events in the medium A signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125961/count_A_loose Title=Number of events in the loose A signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125961/count_Ap_medium Title=Number of events in the medium ${\rm A}'$ signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125961/count_B_tight Title=Number of events in the tight B signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125961/count_C_tight Title=Number of events in the tight C signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125961/count_C_medium Title=Number of events in the medium C signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125961/count_C_loose Title=Number of events in the loose C signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125961/count_D_tight Title=Number of events in the tight D signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125961/count_E_tight Title=Number of events in the tight E signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125961/count_E_medium Title=Number of events in the medium E signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125961/count_E_loose Title=Number of events in the loose E signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125961/hist_m_eff_A Title=Effective Mass in the A Signal Region XLabel=$M_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/100 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125961/hist_m_eff_Ap Title=Effective Mass in the ${\rm A}'$ Signal Region XLabel=$M_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/100 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125961/hist_m_eff_B Title=Effective Mass in the B Signal Region XLabel=$M_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/100 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125961/hist_m_eff_C Title=Effective Mass in the C Signal Region XLabel=$M_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/100 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125961/hist_m_eff_D Title=Effective Mass in the D Signal Region XLabel=$M_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/100 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1125961/hist_m_eff_E Title=Effective Mass in the E Signal Region XLabel=$M_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/100 \mathrm{GeV}$ LogY=1 # END PLOT rivet-1.8.3/data/plotinfo/BABAR_2007_S6895344.plot0000644000175000017500000000151512116077756017061 0ustar sunsun# BEGIN PLOT /BABAR_2007_S6895344/d01-x01-y01 Title=$\Lambda_c^+$ scaled momentum in the continuum region XLabel=$x_p$ YLabel=$1/\sigma\times\text{d}\sigma/\text{d}x_p$ LogY=0 # END PLOT # BEGIN PLOT /BABAR_2007_S6895344/d03-x01-y01 Title=$\Lambda_c^+$ scaled momentum in the resonance region XLabel=$x_p$ YLabel=$1/\sigma\times\text{d}\sigma/\text{d}x_p$ LogY=0 # END PLOT # BEGIN PLOT /BABAR_2007_S6895344/d02-x01-y01 Title=Production rate for $\Lambda_c^++\bar{\Lambda}_c^-$ in the continuum region XLabel=$\sqrt{s}/\text{GeV}$ YLabel=$N(\Lambda_c^++\bar{\Lambda}_c^-)/N(q\bar q)$ LogY=0 # END PLOT # BEGIN PLOT /BABAR_2007_S6895344/d04-x01-y01 Title=Cross Section for $e^+e^-\to \Lambda_c^++\bar{\Lambda}_c^-+X$ in the resonance region XLabel=$\sqrt{s}/\text{GeV}$ YLabel=$N(\Lambda_c^++\bar{\Lambda}_c^-)/N(q\bar q)$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/BABAR_2007_S7266081.plot0000644000175000017500000000611212116077756017046 0ustar sunsun# BEGIN PLOT /BABAR_2007_S7266081/d01-x01-y01 Title=$\pi^-\pi^-\pi^+$ mass in $\tau^-\to\pi^-\pi^-\pi^+\nu_\tau$ decays XLabel=$m_{\pi^-\pi^-\pi^+}$ [GeV] YLabel=$1/\Gamma\text{d}\Gamma/\text{d}m_{\pi^-\pi^-\pi^+}$ [ $\text{GeV}^{-1}$] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2007_S7266081/d02-x01-y01 Title=$\pi^-\pi^+$ mass in $\tau^-\to\pi^-\pi^-\pi^+\nu_\tau$ decays XLabel=$m_{\pi^-\pi^+}$ [GeV] YLabel=$1/\Gamma\text{d}\Gamma/\text{d}m_{\pi^-\pi^+}$ [ $\text{GeV}^{-1}$] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2007_S7266081/d03-x01-y01 Title=$K^-\pi^-\pi^+$ mass in $\tau^-\to K^-\pi^-\pi^+\nu_\tau$ decays XLabel=$m_{K^-\pi^-\pi^+}$ [GeV] YLabel=$1/\Gamma\text{d}\Gamma/\text{d}m_{K^-\pi^-\pi^+}$ [ $\text{GeV}^{-1}$] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2007_S7266081/d04-x01-y01 Title=$K^-\pi^+$ mass in $\tau^-\to K^-\pi^-\pi^+\nu_\tau$ decays XLabel=$m_{K^-\pi^+}$ [GeV] YLabel=$1/\Gamma\text{d}\Gamma/\text{d}m_{K^-\pi^+}$ [ $\text{GeV}^{-1}$] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2007_S7266081/d05-x01-y01 Title=$\pi^-\pi^+$ mass in $\tau^-\to K^-\pi^-\pi^+\nu_\tau$ decays XLabel=$m_{\pi^-\pi^+}$ [GeV] YLabel=$1/\Gamma\text{d}\Gamma/\text{d}m_{\pi^-\pi^+}$ [ $\text{GeV}^{-1}$] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2007_S7266081/d06-x01-y01 Title=$K^-\pi^-K^+$ mass in $\tau^-\to K^-\pi^-K^+\nu_\tau$ decays XLabel=$m_{K^-\pi^-K^+}$ [GeV] YLabel=$1/\Gamma\text{d}\Gamma/\text{d}m_{K^-\pi^-K^+}$ [ $\text{GeV}^{-1}$] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2007_S7266081/d07-x01-y01 Title=$K^-K^+$ mass in $\tau^-\to K^-\pi^-K^+\nu_\tau$ decays XLabel=$m_{K^-K^+}$ [GeV] YLabel=$1/\Gamma\text{d}\Gamma/\text{d}m_{K^-K^+}$ [ $\text{GeV}^{-1}$] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2007_S7266081/d08-x01-y01 Title=$\pi^-K^+$ mass in $\tau^-\to K^-\pi^-K^+\nu_\tau$ decays XLabel=$m_{\pi^-K^+}$ [GeV] YLabel=$1/\Gamma\text{d}\Gamma/\text{d}m_{\pi^-K^+}$ [ $\text{GeV}^{-1}$] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2007_S7266081/d09-x01-y01 Title=$K^-K^-K^+$ mass in $\tau^-\to K^-K^-K^+\nu_\tau$ decays XLabel=$m_{K^-K^-K^+}$ [GeV] YLabel=$1/\Gamma\text{d}\Gamma/\text{d}m_{K^-K^-K^+}$ [ $\text{GeV}^{-1}$] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2007_S7266081/d10-x01-y01 Title=$K^-K^+$ mass in $\tau^-\to K^-K^-K^+\nu_\tau$ decays XLabel=$m_{K^-K^+}$ [GeV] YLabel=$1/\Gamma\text{d}\Gamma/\text{d}m_{K^-K^+}$ [ $\text{GeV}^{-1}$] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2007_S7266081/d11-x01-y01 Title=Branching ratio for $\tau^-\to\pi^-\pi^-\pi^+\nu_\tau$ decays XLabel= YLabel=$\matrhcal{B}(\tau^-\to\pi^-\pi^-\pi^+\nu_\tau)$ [\%] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2007_S7266081/d12-x01-y01 Title=Branching ratio for $\tau^-\to K^-\pi^-\pi^+\nu_\tau$ decays XLabel= YLabel=$\matrhcal{B}(\tau^-\to K^-\pi^-\pi^+\nu_\tau)$ [\%] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2007_S7266081/d13-x01-y01 Title=Branching ratio for $\tau^-\to K^-\pi^-K^+\nu_\tau$ decays XLabel= YLabel=$\matrhcal{B}(\tau^-\to K^-\pi^-K^+\nu_\tau)$ [\%] LogY=0 # END PLOT # BEGIN PLOT /BABAR_2007_S7266081/d14-x01-y01 Title=Branching ratio for $\tau^-\to K^-K^-K^+\nu_\tau$ decays XLabel= YLabel=$\matrhcal{B}(\tau^-\to K^-K^-K^+\nu_\tau)$ [\%] LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/CMS_2011_S8957746.plot0000644000175000017500000000247212116077756016701 0ustar sunsun# BEGIN PLOT /CMS_2011_S8957746/d LegendYPos=0.4 LogY=0 # END PLOT # BEGIN PLOT /CMS_2011_S8957746/d0[135] XLabel=$\ln(1-T_\mathcal{C})$ YLabel=$1/N \,\, \text{d}N/\text{d}\,\ln(1-T_\mathcal{C})$ # END PLOT # BEGIN PLOT /CMS_2011_S8957746/d0[246] XLabel=$\ln(T_{m,\mathcal{C}})$ YLabel=$1/N \,\, \text{d}N/\text{d}\,\ln(T_{m,\mathcal{C}})$ # END PLOT # BEGIN PLOT /CMS_2011_S8957746/d01-x01-y01 Title=Central Transv. Thrust, $90\,\text{GeV} < p_\perp^\text{jet 1} < 125\,\text{GeV}$, $\sqrt{s}=7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S8957746/d02-x01-y01 Title=Central Transv. Minor, $90\,\text{GeV} < p_\perp^\text{jet 1} < 125\,\text{GeV}$, $\sqrt{s}=7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S8957746/d03-x01-y01 Title=Central Transv. Thrust, $125\,\text{GeV} < p_\perp^\text{jet 1} < 200\,\text{GeV}$, $\sqrt{s}=7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S8957746/d04-x01-y01 Title=Central Transv. Minor, $125\,\text{GeV} < p_\perp^\text{jet 1} < 200\,\text{GeV}$, $\sqrt{s}=7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S8957746/d05-x01-y01 Title=Central Transv. Thrust, $p_\perp^\text{jet 1} > 200\,\text{GeV}$, $\sqrt{s}=7\,\text{TeV}$ # END PLOT # BEGIN PLOT /CMS_2011_S8957746/d06-x01-y01 Title=Central Transv. Minor, $p_\perp^\text{jet 1} > 200\,\text{GeV}$, $\sqrt{s}=7\,\text{TeV}$ # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2010_S8894728.plot0000644000175000017500000004267612116077756017134 0ustar sunsun# BEGIN PLOT /ATLAS_2010_S8894728/d01-x01-y01 Title=Transverse $N_\text{chg}$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{900~GeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d01-x01-y02 Title=Toward $N_\text{chg}$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{900~GeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d01-x01-y03 Title=Away $N_\text{chg}$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{900~GeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d02-x01-y01 Title=Transverse $N_\text{chg}$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{7~TeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d02-x01-y02 Title=Toward $N_\text{chg}$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{7~TeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d02-x01-y03 Title=Away $N_\text{chg}$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{7~TeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d03-x01-y01 Title=Transverse $\sum p_\perp$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{900~GeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 \sum p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ [GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d03-x01-y02 Title=Toward $\sum p_\perp$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{900~GeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 \sum p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ [GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d03-x01-y03 Title=Away $\sum p_\perp$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{900~GeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 \sum p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ [GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d04-x01-y01 Title=Transverse $\sum p_\perp$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{7~TeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 \sum p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ [GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d04-x01-y02 Title=Toward $\sum p_\perp$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{7~TeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 \sum p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ [GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d04-x01-y03 Title=Away $\sum p_\perp$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{7~TeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 \sum p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ [GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d05-x01-y01 Title=Std. dev. Transverse $N_\text{chg}$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{900~GeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=Std. dev. $\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d06-x01-y01 Title=Std. dev. Transverse $N_\text{chg}$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{7~TeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=Std. dev. $\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d07-x01-y01 Title=Std. dev. Transverse $\sum p_\perp$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{900~GeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=Std. dev. $\mathrm{d}^2 \sum p_\perp/\mathrm{d}\eta\mathrm{d}\phi$[GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d08-x01-y01 Title=Std. dev. Transverse $\sum p_\perp$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{7~TeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=Std. dev. $\mathrm{d}^2 \sum p_\perp/\mathrm{d}\eta\mathrm{d}\phi$[GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d09-x01-y01 Title=Transverse $\langle p_\perp \rangle$ vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{900~GeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle p_\perp \rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d09-x01-y02 Title=Toward $\langle p_\perp \rangle$ vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{900~GeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle p_\perp \rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d09-x01-y03 Title=Away $\langle p_\perp \rangle$ vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{900~GeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle p_\perp \rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d10-x01-y01 Title=Transverse $\langle p_\perp \rangle$ vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{7~TeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle p_\perp \rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d10-x01-y02 Title=Toward $\langle p_\perp \rangle$ vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{7~TeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle p_\perp \rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d10-x01-y03 Title=Away $\langle p_\perp \rangle$ vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{7~TeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle p_\perp \rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d11-x01-y01 Title=Transverse $\langle p_\perp \rangle$ vs. $N_\text{chg}$, $\sqrt{s} = \text{900~GeV}$ XLabel=$N_\text{chg}$ YLabel=$\langle p_\perp \rangle$ [GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d11-x01-y02 Title=Toward $\langle p_\perp \rangle$ vs. $N_\text{chg}$, $\sqrt{s} = \text{900~GeV}$ XLabel=$N_\text{chg}$ YLabel=$\langle p_\perp \rangle$ [GeV] LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d11-x01-y03 Title=Away $\langle p_\perp \rangle$ vs. $N_\text{chg}$, $\sqrt{s} = \text{900~GeV}$ XLabel=$N_\text{chg}$ YLabel=$\langle p_\perp \rangle$ [GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d12-x01-y01 Title=Transverse $\langle p_\perp \rangle$ vs. $N_\text{chg}$, $\sqrt{s} = \text{7~TeV}$ XLabel=$N_\text{chg}$ YLabel=$\langle p_\perp \rangle$ [GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d12-x01-y02 Title=Toward $\langle p_\perp \rangle$ vs. $N_\text{chg}$, $\sqrt{s} = \text{7~TeV}$ XLabel=$N_\text{chg}$ YLabel=$\langle p_\perp \rangle$ [GeV] LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d12-x01-y03 Title=Away $\langle p_\perp \rangle$ vs. $N_\text{chg}$, $\sqrt{s} = \text{7~TeV}$ XLabel=$N_\text{chg}$ YLabel=$\langle p_\perp \rangle$ [GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d13-x01-y01 Title=$N_\text{chg}$ density vs. $\Delta\phi$, $p_\perp^\text{trk1} > 1.0$ GeV, $\sqrt{s} = \text{900~GeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading track) [rad] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d13-x01-y02 Title=$N_\text{chg}$ density vs. $\Delta\phi$, $p_\perp^\text{trk1} > 1.5$ GeV, $\sqrt{s} = \text{900~GeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading track) [rad] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d13-x01-y03 Title=$N_\text{chg}$ density vs. $\Delta\phi$, $p_\perp^\text{trk1} > 2.0$ GeV, $\sqrt{s} = \text{900~GeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading track) [rad] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d13-x01-y04 Title=$N_\text{chg}$ density vs. $\Delta\phi$, $p_\perp^\text{trk1} > 2.5$ GeV, $\sqrt{s} = \text{900~GeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading track) [rad] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d14-x01-y01 Title=$N_\text{chg}$ density vs. $\Delta\phi$, $p_\perp^\text{trk1} > 1.0$ GeV, $\sqrt{s} = \text{7~TeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading track) [rad] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d14-x01-y02 Title=$N_\text{chg}$ density vs. $\Delta\phi$, $p_\perp^\text{trk1} > 2.0$ GeV, $\sqrt{s} = \text{7~TeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading track) [rad] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d14-x01-y03 Title=$N_\text{chg}$ density vs. $\Delta\phi$, $p_\perp^\text{trk1} > 3.0$ GeV, $\sqrt{s} = \text{7~TeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading track) [rad] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d14-x01-y04 Title=$N_\text{chg}$ density vs. $\Delta\phi$, $p_\perp^\text{trk1} > 5.0$ GeV, $\sqrt{s} = \text{7~TeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading track) [rad] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d15-x01-y01 Title=$p_\perp$ density vs. $\Delta\phi$, $p_\perp^\text{trk1} > 1.0$ GeV, $\sqrt{s} = \text{900~GeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading track) [rad] YLabel=$\langle\mathrm{d}^2 p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d15-x01-y02 Title=$p_\perp$ density vs. $\Delta\phi$, $p_\perp^\text{trk1} > 1.5$ GeV, $\sqrt{s} = \text{900~GeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading track) [rad] YLabel=$\langle\mathrm{d}^2 p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d15-x01-y03 Title=$p_\perp$ density vs. $\Delta\phi$, $p_\perp^\text{trk1} > 2.0$ GeV, $\sqrt{s} = \text{900~GeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading track) [rad] YLabel=$\langle\mathrm{d}^2 p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d15-x01-y04 Title=$p_\perp$ density vs. $\Delta\phi$, $p_\perp^\text{trk1} > 2.5$ GeV, $\sqrt{s} = \text{900~GeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading track) [rad] YLabel=$\langle\mathrm{d}^2 p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d16-x01-y01 Title=$p_\perp$ density vs. $\Delta\phi$, $p_\perp^\text{trk1} > 1.0$ GeV, $\sqrt{s} = \text{7~TeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading track) [rad] YLabel=$\langle\mathrm{d}^2 p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d16-x01-y02 Title=$p_\perp$ density vs. $\Delta\phi$, $p_\perp^\text{trk1} > 2.0$ GeV, $\sqrt{s} = \text{7~TeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading track) [rad] YLabel=$\langle\mathrm{d}^2 p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d16-x01-y03 Title=$p_\perp$ density vs. $\Delta\phi$, $p_\perp^\text{trk1} > 3.0$ GeV, $\sqrt{s} = \text{7~TeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading track) [rad] YLabel=$\langle\mathrm{d}^2 p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d16-x01-y04 Title=$p_\perp$ density vs. $\Delta\phi$, $p_\perp^\text{trk1} > 5.0$ GeV, $\sqrt{s} = \text{7~TeV}$ XLabel=$\left|\phi\right|$ (w.r.t. leading track) [rad] YLabel=$\langle\mathrm{d}^2 p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d17-x01-y01 Title=Transverse $N_\text{chg}$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{900~GeV}$, $p_\perp > \text{100~MeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d17-x01-y02 Title=Toward $N_\text{chg}$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{900~GeV}$, $p_\perp > \text{100~MeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d17-x01-y03 Title=Away $N_\text{chg}$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{900~GeV}$, $p_\perp > \text{100~MeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d18-x01-y01 Title=Transverse $N_\text{chg}$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{7~TeV}$, $p_\perp > \text{100~MeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d18-x01-y02 Title=Toward $N_\text{chg}$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{7~TeV}$, $p_\perp > \text{100~MeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d18-x01-y03 Title=Away $N_\text{chg}$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{7~TeV}$, $p_\perp > \text{100~MeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d19-x01-y01 Title=Transverse $\sum p_\perp$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{900~GeV}$, $p_\perp > \text{100~MeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 \sum p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ [GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d19-x01-y02 Title=Toward $\sum p_\perp$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{900~GeV}$, $p_\perp > \text{100~MeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 \sum p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ [GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d19-x01-y03 Title=Away $\sum p_\perp$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{900~GeV}$, $p_\perp > \text{100~MeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 \sum p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ [GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d20-x01-y01 Title=Transverse $\sum p_\perp$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{7~TeV}$, $p_\perp > \text{100~MeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 \sum p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ [GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d20-x01-y02 Title=Toward $\sum p_\perp$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{7~TeV}$, $p_\perp > \text{100~MeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 \sum p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ [GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d20-x01-y03 Title=Away $\sum p_\perp$ density vs. $p_\perp^\text{trk1}$, $\sqrt{s} = \text{7~TeV}$, $p_\perp > \text{100~MeV}$ XLabel=$p_\perp$ (leading track) [GeV] YLabel=$\langle\mathrm{d}^2 \sum p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ [GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d21-x01-y01 Title=Transverse $N_\text{chg}$ density vs. $|\eta^\text{trk1}|$, $\sqrt{s} = \text{7~TeV}$, $p_\perp > \text{100~MeV}$ XLabel=$|\eta|$ (leading track) YLabel=$\langle\mathrm{d}^2 N_\text{chg}/\mathrm{d}\eta\mathrm{d}\phi\rangle$ LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT # BEGIN PLOT /ATLAS_2010_S8894728/d22-x01-y01 Title=Transverse $\sum p_\perp$ density vs. $|\eta^\text{trk1}|$, $\sqrt{s} = \text{7~TeV}$, $p_\perp > \text{100~MeV}$ XLabel=$|\eta|$ (leading track) YLabel=$\langle\mathrm{d}^2 \sum p_\perp/\mathrm{d}\eta\mathrm{d}\phi\rangle$ [GeV] LogY=0 LegendXPos=0.5 LegendYPos=0.4 # END PLOT rivet-1.8.3/data/plotinfo/CDF_2010_S8591881_QCD.plot0000644000175000017500000000400012116077756017320 0ustar sunsun# BEGIN PLOT /CDF_2010_S8591881_QCD/d XLabel=$p_T(\text{leading jet})$ / GeV LogY=0 # END PLOT # BEGIN PLOT /CDF_2010_S8591881_QCD/d1[01] YLabel=$\langle N_\text{ch} \rangle / \text{d}\eta\,\text{d}\phi$ LegendYPos=0.5 # END PLOT # BEGIN PLOT /CDF_2010_S8591881_QCD/d10-x01-y01 Title=Toward region charged particle density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_QCD/d10-x01-y02 Title=Transverse region charged particle density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_QCD/d10-x01-y03 Title=Away region charged particle density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_QCD/d11-x01-y01 Title=TransMAX region charged particle density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_QCD/d11-x01-y02 Title=TransMIN region charged particle density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_QCD/d11-x01-y03 Title=TransDIF region charged particle density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_QCD/d1[23] YLabel=$\langle \sum p_T^\text{track} \rangle / \text{d}\eta\,\text{d}\phi$ / GeV LegendXPos=0.10 # END PLOT # BEGIN PLOT /CDF_2010_S8591881_QCD/d12-x01-y01 Title=Toward region charged $\sum p_\perp$ density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_QCD/d12-x01-y02 Title=Transverse region charged $\sum p_\perp$ density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_QCD/d12-x01-y03 Title=Away region charged $\sum p_\perp$ density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_QCD/d13-x01-y01 Title=TransMAX region charged $\sum p_\perp$ density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_QCD/d13-x01-y02 Title=TransMIN region charged $\sum p_\perp$ density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_QCD/d13-x01-y03 Title=TransDIF region charged $\sum p_\perp$ density # END PLOT # BEGIN PLOT /CDF_2010_S8591881_QCD/d1[45] LegendXPos=0.10 ShowZero=0 YLabel=$\langle p_T^\text{track} \rangle$ / GeV # END PLOT # BEGIN PLOT /CDF_2010_S8591881_QCD/d14-x01-y01 Title=Transverse region charged $p_\perp$ average # END PLOT # BEGIN PLOT /CDF_2010_S8591881_QCD/d15-x01-y01 Title=Transverse region charged $p_\perp$ max # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_I1093738.plot0000644000175000017500000000270212116077756017067 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1093738/d01-x01-y01 Title=Leading photon $E_\perp$ (central jets, same-sign rapidity) XLabel=$E_\perp^\gamma$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}E_\perp^\gamma$ [pb/GeV] LogX=1 XMin=25.0 XMax=400.0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1093738/d02-x01-y01 Title=Leading photon $E_\perp$ (forward jets, same-sign rapidity) XLabel=$E_\perp^\gamma$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}E_\perp^\gamma$ [pb/GeV] LogX=1 XMin=25.0 XMax=400.0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1093738/d03-x01-y01 Title=Leading photon $E_\perp$ (very forward jets, same-sign rapidity) XLabel=$E_\perp^\gamma$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}E_\perp^\gamma$ [pb/GeV] LogX=1 XMin=25.0 XMax=200.0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1093738/d04-x01-y01 Title=Leading photon $E_\perp$ (central jets, opposite-sign rapidity) XLabel=$E_\perp^\gamma$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}E_\perp^\gamma$ [pb/GeV] LogX=1 XMin=25.0 XMax=400.0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1093738/d05-x01-y01 Title=Leading photon $E_\perp$ (forward jets, opposite-sign rapidity) XLabel=$E_\perp^\gamma$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}E_\perp^\gamma$ [pb/GeV] LogX=1 XMin=25.0 XMax=400.0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1093738/d06-x01-y01 Title=Leading photon $E_\perp$ (very forward jets, opposite-sign rapidity) XLabel=$E_\perp^\gamma$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}E_\perp^\gamma$ [pb/GeV] LogX=1 XMin=25.0 XMax=200.0 # END PLOT rivet-1.8.3/data/plotinfo/MC_DIJET.plot0000644000175000017500000000370212116077756015747 0ustar sunsun# BEGIN PLOT /MC_DIJET/d01-x01-y01 Title=Jetcounts XLabel=Number of jets YLabel= # END PLOT # BEGIN PLOT /MC_DIJET/d02-x01-y01 Title=Pt distributions of dijet events XLabel=$P_{t}$ YLabel=$\\frac{d \\sigma}{d P_{t}}$ # END PLOT # BEGIN PLOT /MC_DIJET/d03-x01-y01 Title=$\\log{P_{t}}$ distributions of dijet events XLabel=$\\log{P_{t}}$ YLabel=$\\frac{d \\sigma}{d P_{t}}$ # END PLOT # BEGIN PLOT /MC_DIJET/d04-x01-y01 Title=Pt distributions of leading jets in dijet events XLabel=$P_{t}$ YLabel=$\\frac{d \\sigma}{d P_{t}}$ # END PLOT # BEGIN PLOT /MC_DIJET/d05-x01-y01 Title=Pt distributions of 2nd leading jets in dijet events XLabel=$P_{t}$ YLabel=$\\frac{d \\sigma}{d P_{t}}$ # END PLOT # BEGIN PLOT /MC_DIJET/d06-x01-y01 Title=Phi distributions of dijet events XLabel=$\\phi$ YLabel=$\\frac{d \\sigma}{d \\phi}$ # END PLOT # BEGIN PLOT /MC_DIJET/d07-x01-y01 Title=Pseudorapidity distributions of dijet events XLabel=$\\eta$ YLabel=$\\frac{d \\sigma}{d P_{t}}$ # END PLOT # BEGIN PLOT /MC_DIJET/d08-x01-y01 Title=$\\Delta \\phi$ distributions of dijet events XLabel=$\\phi$ YLabel=$\\frac{d \\sigma}{d \\phi}$ # END PLOT # BEGIN PLOT /MC_DIJET/d09-x01-y01 Title=$\\Delta \\eta$ distributions of dijet events XLabel=$\\eta$ YLabel=$\\frac{d \\sigma}{d \\eta}$ # END PLOT # BEGIN PLOT /MC_DIJET/d10-x01-y01 Title=Multiplicity of charged particles XLabel=$n_{ch}$ YLabel=$\\frac{d \\sigma}{d n_{ch}}$ # END PLOT # BEGIN PLOT /MC_DIJET/d11-x01-y01 Title=Mean $p_{T}$ of charged particles XLabel=$p_{T}^{\\mathrm{mean}}$ YLabel=$\\frac{d \\sigma}{d p}$ # END PLOT # BEGIN PLOT /MC_DIJET/d12-x01-y01 Title=$p_{T}$ of charged particles XLabel=$p_{T}$ YLabel=$\\frac{d \\sigma}{d p}$ # END PLOT # BEGIN PLOT /MC_DIJET/d13-x01-y01 Title=$\\log{p_{T}}$ of charged particles XLabel=$p_{T}$ YLabel=$\\frac{d \\sigma}{d p}$ # END PLOT # BEGIN PLOT /MC_DIJET/d14-x01-y01 Title=RMS $p_{T}$ of charged particles XLabel=$p_{T}^{\\mathrm{RMS}}$ YLabel=$\\frac{d \\sigma}{d p}$ # END PLOTrivet-1.8.3/data/plotinfo/H1_2000_S4129130.plot0000644000175000017500000001744112116077756016475 0ustar sunsun# BEGIN PLOT /H1_2000_S4129130/d01-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 0.08\cdot 10^{-3}, \langle Q^2 \rangle = 3.2 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d02-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 0.14\cdot 10^{-3}, \langle Q^2 \rangle = 3.8 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d03-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 0.26\cdot 10^{-3}, \langle Q^2 \rangle = 3.9 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d04-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 0.57\cdot 10^{-3}, \langle Q^2 \rangle = 4.2 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d05-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 0.16\cdot 10^{-3}, \langle Q^2 \rangle = 6.3 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d06-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 0.27\cdot 10^{-3}, \langle Q^2 \rangle = 7.0 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d07-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 0.50\cdot 10^{-3}, \langle Q^2 \rangle = 7.0 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d08-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 1.10\cdot 10^{-3}, \langle Q^2 \rangle = 7.3 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d09-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 0.36\cdot 10^{-3}, \langle Q^2 \rangle = 13.1 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d10-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 0.63\cdot 10^{-3}, \langle Q^2 \rangle = 14.1 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d11-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 1.10\cdot 10^{-3}, \langle Q^2 \rangle = 14.1 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d12-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 2.30\cdot 10^{-3}, \langle Q^2 \rangle = 14.9 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d13-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 0.93\cdot 10^{-3}, \langle Q^2 \rangle = 28.8 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d14-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 2.10\cdot 10^{-3}, \langle Q^2 \rangle = 31.2 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d15-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 4.70\cdot 10^{-3}, \langle Q^2 \rangle = 33.2 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d16-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 2.00\cdot 10^{-3}, \langle Q^2 \rangle = 59.4 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d17-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 7.00\cdot 10^{-3}, \langle Q^2 \rangle = 70.2 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d18-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 0.0043, \langle Q^2 \rangle = 175 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d19-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 0.01, \langle Q^2 \rangle = 253 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d20-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 0.026, \langle Q^2 \rangle = 283 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d21-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 0.012, \langle Q^2 \rangle = 511 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d22-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 0.026, \langle Q^2 \rangle = 617 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d23-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 0.076, \langle Q^2 \rangle = 682 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d24-x01-y01 Title=Transverse energy flow for $\langle x \rangle = 0.11, \langle Q^2 \rangle = 2200 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d25-x01-y01 Title=Transverse energy flow for $\langle Q^2 \rangle = 2.5-5 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d26-x01-y01 Title=Transverse energy flow for $\langle Q^2 \rangle = 5-10 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d27-x01-y01 Title=Transverse energy flow for $\langle Q^2 \rangle = 10-20 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d28-x01-y01 Title=Transverse energy flow for $\langle Q^2 \rangle = 20-50 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d29-x01-y01 Title=Transverse energy flow for $\langle Q^2 \rangle = 50-100 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d30-x01-y01 Title=Transverse energy flow for $\langle Q^2 \rangle = 100-220 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d31-x01-y01 Title=Transverse energy flow for $\langle Q^2 \rangle = 220-400 \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d32-x01-y01 Title=Transverse energy flow for $\langle Q^2 \rangle \text{ GeV}^2$ XLabel=$\eta$ YLabel=$1/N \, \mathrm{d}{E_\perp}/\mathrm{d}{\eta}$ / GeV LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d33-x01-y01 Title=Average $E_\perp$ in the central region XLabel=$Q^2$ / $\text{GeV}^2$ YLabel=$\langle E_\perp \rangle$ / GeV LogX=1 LogY=0 # END PLOT # BEGIN PLOT /H1_2000_S4129130/d34-x01-y01 Title=Average $E_\perp$ in the forward region XLabel=$Q^2$ / $\text{GeV}^2$ YLabel=$\langle E_\perp \rangle$ / GeV LogX=1 LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/CMS_2012_PAS_QCD_11_010.plot0000644000175000017500000000177212116077756017677 0ustar sunsun# BEGIN PLOT /CMS_2012_PAS_QCD_11_010/d0 XLabel=leading jet $p_\perp$ [GeV] LegendYPos=0.5 # END PLOT # BEGIN PLOT /CMS_2012_PAS_QCD_11_010/d01-x01-y01 Title=Transverse ${\Lambda+\bar \Lambda}$ particle density at $\sqrt{s}=7$ TeV, $p_\perp>1.5$ GeV YLabel=$\langle N_{\Lambda+\bar \Lambda} \rangle / \text{d}\eta\text{d}\phi$ # END PLOT # BEGIN PLOT /CMS_2012_PAS_QCD_11_010/d02-x01-y01 Title=Transverse $K_s^0$ particle density at $\sqrt{s}=7$ TeV, $p_\perp > 0.6$ GeV YLabel=$\langle N_K \rangle / \text{d}\eta\text{d}\phi$ # END PLOT # BEGIN PLOT /CMS_2012_PAS_QCD_11_010/d03-x01-y01 Title=Transverse $\sum p_\perp(\Lambda + \bar\Lambda)$ at $\sqrt{s}=7$ TeV, $p_\perp > 1.5$ GeV YLabel=$\langle \sum p_\perp^(\Lambda + \bar\Lambda) \rangle / \text{d}\eta\text{d}\phi$ [GeV] # END PLOT # BEGIN PLOT /CMS_2012_PAS_QCD_11_010/d04-x01-y01 Title=Transverse $\sum p_\perp(K_s^0)$ at $\sqrt{s}=7$ TeV, $p_\perp > 0.6$ GeV YLabel=$\langle \sum p_\perp(K_s^0) \rangle / \text{d}\eta\text{d}\phi$ [GeV] # END PLOT rivet-1.8.3/data/plotinfo/D0_1996_S3214044.plot0000644000175000017500000001165112116077756016512 0ustar sunsun# BEGIN PLOT /D0_1996_S3214044/d01-x01-y01 Title=Energy fraction of hardest jet in 3-jet events XLabel=$x_3 = \frac{2E_3}{\sqrt{s}}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}x_3$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d02-x01-y01 Title=Energy fraction of 3rd jet in 3-jet events XLabel=$x_5 = \frac{2E_5}{\sqrt{s}}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}x_5$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d03-x01-y01 Title=Leading jet polar angle XLabel=$\cos(\theta_3^*)$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos(\theta_3^*)$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d04-x01-y01 Title=$\psi^*$ angle XLabel=$\psi^*$ (degree) YLabel=$1/N \mathrm{d}N/\mathrm{d}\psi^*$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d05-x01-y01 Title=Scaled invariant mass of jet pair XLabel=$\mu_{34}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\mu_{34}$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d06-x01-y01 Title=Scaled invariant mass of jet pair XLabel=$\mu_{35}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\mu_{35}$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d07-x01-y01 Title=Scaled invariant mass of jet pair XLabel=$\mu_{45}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\mu_{45}$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d08-x01-y01 Title=Energy fraction of hardest jet in 4-jet events XLabel=$x_3 = \frac{2E_3}{\sqrt{s}}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}x_3$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d09-x01-y01 Title=Energy fraction of 2nd jet in 4-jet events XLabel=$x_4 = \frac{2E_4}{\sqrt{s}}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}x_4$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d10-x01-y01 Title=Energy fraction of 3rd jet in 4-jet events XLabel=$x_5 = \frac{2E_5}{\sqrt{s}}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}x_5$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d11-x01-y01 Title=Energy fraction of 4th jet in 4-jet events XLabel=$x_6 = \frac{2E_6}{\sqrt{s}}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}x_6$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d12-x01-y01 Title=Polar angle of leading jet XLabel=$\cos(\theta_3^*)$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos(\theta_3^*)$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d13-x01-y01 Title=Polar angle of 2nd jet XLabel=$\cos(\theta_4^*)$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos(\theta_4^*)$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d14-x01-y01 Title=Polar angle of 3rd jet XLabel=$\cos(\theta_5^*)$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos(\theta_5^*)$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d15-x01-y01 Title=Polar angle of 4th jet XLabel=$\cos(\theta_6^*)$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos(\theta_6^*)$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d16-x01-y01 Title=Space angle between jet pair XLabel=$\cos(\omega_{34})$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos(\omega_{34}$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d17-x01-y01 Title=Space angle between jet pair XLabel=$\cos(\omega_{35})$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos(\omega_{35})$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d18-x01-y01 Title=Space angle between jet pair XLabel=$\cos(\omega_{36})$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos(\omega_{36})$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d19-x01-y01 Title=Space angle between jet pair XLabel=$\cos(\omega_{45})$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos(\omega_{45})$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d20-x01-y01 Title=Space angle between jet pair XLabel=$\cos(\omega_{46})$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos(\omega_{46})$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d21-x01-y01 Title=Space angle between jet pair XLabel=$\cos(\omega_{56})$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos(\omega_{56})$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d22-x01-y01 Title=Scaled invariant mass of jet pair XLabel=$\mu_{34}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\mu_{34}$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d23-x01-y01 Title=Scaled invariant mass of jet pair XLabel=$\mu_{35}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\mu_{35}$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d24-x01-y01 Title=Scaled invariant mass of jet pair XLabel=$\mu_{36}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\mu_{36}$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d25-x01-y01 Title=Scaled invariant mass of jet pair XLabel=$\mu_{45}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\mu_{45}$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d26-x01-y01 Title=Scaled invariant mass of jet pair XLabel=$\mu_{46}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\mu_{46}$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d27-x01-y01 Title=Scaled invariant mass of jet pair XLabel=$\mu_{56}$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\mu_{56}$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d28-x01-y01 Title=Angle between jet planes XLabel=$\chi_\mathrm{BZ}$ (degree) YLabel=$1/N \mathrm{d}N/\mathrm{d}\chi_\mathrm{BZ}$ LogY=0 # END PLOT # BEGIN PLOT /D0_1996_S3214044/d29-x01-y01 Title=Angle between jet planes XLabel=$\cos(\theta_\mathrm{NR})$ YLabel=$1/N \mathrm{d}N/\mathrm{d}\cos(\theta_\mathrm{NR})$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_I1117704.plot0000644000175000017500000000566012116077756017063 0ustar sunsun# BEGIN PLOT /ATLAS_2012_I1117704/count_7j55 Title=Number of events in 7 jet, $p_\perp>55$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1117704/count_8j55 Title=Number of events in 8 jet, $p_\perp>55$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1117704/count_9j55 Title=Number of events in 9 jet, $p_\perp>55$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1117704/count_6j80 Title=Number of events in 6 jet, $p_\perp>80$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1117704/count_7j80 Title=Number of events in 7 jet, $p_\perp>80$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_038/count_8j80 Title=Number of events in 8 jet, $p_\perp>80$\,GeV signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_I1117704/hist_njet55 Title=Observed number of jets with $p_\perp>55$\,GeV for $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}>4\,\mathrm{GeV}^{\frac12}$ XLabel=Number of Jets YLabel=Number of events LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1117704/hist_njet80 Title=Observed number of jets with $p_\perp>80$\,GeV for $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}>4\,\mathrm{GeV}^{\frac12}$ XLabel=Number of Jets YLabel=Number of events LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1117704/etmiss_HT_7j55 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 7 jets with $p_\perp>55$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/2$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1117704/etmiss_HT_8j55 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 8 jets with $p_\perp>55$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/2$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1117704/etmiss_HT_9j55 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 9 jets with $p_\perp>55$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/2$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1117704/etmiss_HT_6j80 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 6 jets with $p_\perp>80$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/2$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1117704/etmiss_HT_7j80 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 7 jets with $p_\perp>80$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/2$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_I1117704/etmiss_HT_8j80 Title=Observed $E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ for 8 jets with $p_\perp>80$\,GeV XLabel=$E_{\mathrm{T}}/\sqrt{H_{\mathrm{T}}}$ [$\mathrm{GeV}^{\frac12}$] YLabel=$\mathrm{Events}/2$\,GeV LogY=1 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2012_CONF_2012_001.plot0000644000175000017500000000671512116077756017701 0ustar sunsun# BEGIN PLOT /ATLAS_2012_CONF_2012_001/count_SR1 Title=Number of events in the SR1 signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_001/count_SR2 Title=Number of events in the SR2 signal region XLabel= YLabel=Number of Events LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_001/d01-x01-y01 Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the leading lepton XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV] YLabel=$\mathrm{Events}/10 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_001/d02-x01-y01 Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the $2^{\rm nd}$ leading lepton XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV] YLabel=$\mathrm{Events}/10 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_001/d03-x01-y01 Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the $3^{\rm rd}$ leading lepton XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV] YLabel=$\mathrm{Events}/5 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_001/d04-x01-y01 Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the $4^{\rm th}$ leading lepton XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV] YLabel=$\mathrm{Events}/5 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_001/d05-x01-y01 Title=Number of Jets XLabel=Number of Jets YLabel=Events LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_001/d06-x01-y01 Title=Missing Transverse Energy XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_001/d07-x01-y01 Title=Mass of SFOF lepton pair closest to the $Z^0$ mass XLabel=$M_{\mathrm{SFOS}}$ [GeV] YLabel=$\mathrm{Events}/20$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_001/d08-x01-y01 Title=Effective Mass XLabel=$M_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/50$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_001/hist_lepton_pT_1 Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the leading lepton XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV] YLabel=$\mathrm{Events}/10 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_001/hist_lepton_pT_2 Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the $2^{\rm nd}$ leading lepton XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV] YLabel=$\mathrm{Events}/10 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_001/hist_lepton_pT_3 Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the $3^{\rm rd}$ leading lepton XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV] YLabel=$\mathrm{Events}/5 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_001/hist_lepton_pT_4 Title=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ for the $4^{\rm th}$ leading lepton XLabel=$E^e_{\mathrm{T}}(p^\mu_{\mathrm{T}})$ [GeV] YLabel=$\mathrm{Events}/5 \mathrm{GeV}$ LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_001/hist_njet Title=Number of Jets XLabel=Number of Jets YLabel=Events LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_001/hist_etmiss Title=Missing Transverse Energy XLabel=$E^{\rm miss}_{\mathrm{T}}$ [GeV] YLabel=$\mathrm{Events}/20$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_001/hist_m_SFOS Title=Mass of SFOF lepton pair closest to the $Z^0$ mass XLabel=$M_{\mathrm{SFOS}}$ [GeV] YLabel=$\mathrm{Events}/20$\,GeV LogY=1 # END PLOT # BEGIN PLOT /ATLAS_2012_CONF_2012_001/hist_m_eff Title=Effective Mass XLabel=$M_{\mathrm{eff}}$ [GeV] YLabel=$\mathrm{Events}/50$\,GeV LogY=1 # END PLOT rivet-1.8.3/data/plotinfo/MC_WWKTSPLITTINGS.plot0000644000175000017500000000370712116077756017332 0ustar sunsun# BEGIN PLOT /MC_WWKTSPLITTINGS/log10_R_0 Title=$\log_{10}$(Integrated $0$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{0}$ Rebin=2 LegendYPos=0.8 LegendXPos=0.75 # END PLOT # BEGIN PLOT /MC_WWKTSPLITTINGS/log10_R_1 Title=$\log_{10}$(Integrated $1$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{1}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_WWKTSPLITTINGS/log10_R_2 Title=$\log_{10}$(Integrated $2$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{2}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_WWKTSPLITTINGS/log10_R_3 Title=$\log_{10}$(Integrated $3$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{3}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_WWKTSPLITTINGS/log10_R_4 Title=$\log_{10}$(Integrated $4$ jet rate in $k_\perp$ [GeV]) XLabel=$\log_{10}(d_{\text{cut}}/\text{GeV})$ YLabel=$R_{\geq4}$ Rebin=2 # END PLOT # BEGIN PLOT /MC_WWKTSPLITTINGS/log10_d_01 Title=$\log_{10}$($k_\perp$ jet resolution $0 \to 1$ [GeV]) XLabel=$\log_{10}(d_{01}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{01}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_WWKTSPLITTINGS/log10_d_12 Title=$\log_{10}$($k_\perp$ jet resolution $1 \to 2$ [GeV]) XLabel=$\log_{10}(d_{12}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{12}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_WWKTSPLITTINGS/log10_d_23 Title=$\log_{10}$($k_\perp$ jet resolution $2 \to 3$ [GeV]) XLabel=$\log_{10}(d_{23}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{23}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT # BEGIN PLOT /MC_WWKTSPLITTINGS/log10_d_34 Title=$\log_{10}$($k_\perp$ jet resolution $3 \to 4$ [GeV]) XLabel=$\log_{10}(d_{34}/\text{GeV})$ YLabel=$\text{d}\sigma/\text{d}\log_{10}(d_{34}/\text{GeV})$ [pb] LegendXPos=0.15 LegendYPos=0.5 Rebin=2 # END PLOT rivet-1.8.3/data/plotinfo/STAR_2008_S7869363.plot0000644000175000017500000000301312116077756017022 0ustar sunsun# BEGIN PLOT /STAR_2008_S7869363/d01-x01-y01 Title=Raw charged multiplicity ($|\eta|<0.5 \quad p_\perp>0.2$ [GeV]) XLabel=$N_\text{ch}^\text{raw}$ YLabel=$P(N_\text{ch}^\text{raw})$ # END PLOT # BEGIN PLOT /STAR_2008_S7869363/d02-x01-y01 Title=$\pi^-\quad p_\perp$ spectrum XLabel=$p_\perp$ [\unit{GeV}] YLabel=$\frac{1}{2\pi} \frac{\text{d}^2N}{p_\perp \text{d}p_\perp \text{d}y} [\text{GeV}^{-2}]$ # END PLOT # BEGIN PLOT /STAR_2008_S7869363/d02-x01-y02 Title=$\pi^+\quad p_\perp$ spectrum XLabel=$p_\perp$ [\unit{GeV}] YLabel=$\frac{1}{2\pi} \frac{\text{d}^2N}{p_\perp \text{d}p_\perp \text{d}y} [\text{GeV}^{-2}]$ # END PLOT # BEGIN PLOT /STAR_2008_S7869363/d02-x01-y03 Title=$K^-\quad p_\perp$ spectrum XLabel=$p_\perp$ [\unit{GeV}] YLabel=$\frac{1}{2\pi} \frac{\text{d}^2N}{p_\perp \text{d}p_\perp \text{d}y} [\text{GeV}^{-2}]$ # END PLOT # BEGIN PLOT /STAR_2008_S7869363/d02-x01-y04 Title=$K^+\quad p_\perp$ spectrum XLabel=$p_\perp$ [\unit{GeV}] YLabel=$\frac{1}{2\pi} \frac{\text{d}^2N}{p_\perp \text{d}p_\perp \text{d}y} [\text{GeV}^{-2}]$ # END PLOT # BEGIN PLOT /STAR_2008_S7869363/d02-x01-y05 Title=Antiproton $p_\perp$ spectrum XLabel=$p_\perp$ [\unit{GeV}] YLabel=$\frac{1}{2\pi} \frac{\text{d}^2N}{p_\perp \text{d}p_\perp \text{d}y} [\text{GeV}^{-2}]$ # END PLOT # BEGIN PLOT /STAR_2008_S7869363/d02-x01-y06 Title=Proton $p_\perp$ spectrum XLabel=$p_\perp$ [\unit{GeV}] YLabel=$\frac{1}{2\pi} \frac{\text{d}^2N}{p_\perp \text{d}p_\perp \text{d}y} [\text{GeV}^{-2}]$ # END PLOT # ... add more histograms as you need them ... rivet-1.8.3/data/plotinfo/ALICE_2010_S8625980.plot0000644000175000017500000000120612116077756017055 0ustar sunsun# BEGIN PLOT /ALICE_2010_S8625980/d03-x01-y01 Title=Charged Multiplicity $\sqrt(s)=7$ TeV XLabel=$N_\text{ch}$ YLabel=$\text{d}N/\text{d}N_\text{ch}$ # END PLOT # BEGIN PLOT /ALICE_2010_S8625980/d04-x01-y01 Title=Pseudorapidity $\sqrt(s)=0.9$ TeV, INEL $>0$ XLabel=$\eta$ YLabel=$\text{d}N/\text{d}\eta$ LogY=0 # END PLOT # BEGIN PLOT /ALICE_2010_S8625980/d05-x01-y01 Title=Pseudorapidity $\sqrt(s)=2.36$ TeV, INEL $>0$ XLabel=$\eta$ YLabel=$\text{d}N/\text{d}\eta$ LogY=0 # END PLOT # BEGIN PLOT /ALICE_2010_S8625980/d06-x01-y01 Title=Pseudorapidity $\sqrt(s)=7$ TeV, INEL $>0$ XLabel=$\eta$ YLabel=$\text{d}N/\text{d}\eta$ LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/CDF_2012_NOTE10874.plot0000644000175000017500000000222712116077756017023 0ustar sunsun# BEGIN PLOT /CDF_2012_NOTE10874/d XLabel=$p_\perp^\text{max}$ [GeV/c] LogY=0 LegendYPos=0.4 # END PLOT # BEGIN PLOT /CDF_2012_NOTE10874/d01 Title=Transverse Charged Particle Density YLabel=$\langle \mathrm{d}N/\mathrm{d}\eta \mathrm{d}\phi \rangle$ # END PLOT # BEGIN PLOT /CDF_2012_NOTE10874/d02 Title=Transverse Charged $\sum p_\perp$ density YLabel=$\langle \mathrm{d}\sum p_\perp/ \mathrm{d}\eta \mathrm{d}\phi \rangle$ [GeV/c] # END PLOT # BEGIN PLOT /CDF_2012_NOTE10874/d03 Title=Transverse Charged Particle Average $p_\perp$ YLabel=$\langle p_\perp \rangle$ [GeV/c] # END PLOT # BEGIN PLOT /CDF_2012_NOTE10874/d0.-x0.-y0[4-6] YLabel=Ratio # END PLOT # BEGIN PLOT /CDF_2012_NOTE10874/d0.-x0.-y01 CustomLegend=300 GeV # END PLOT # BEGIN PLOT /CDF_2012_NOTE10874/d0.-x0.-y02 CustomLegend=900 GeV # END PLOT # BEGIN PLOT /CDF_2012_NOTE10874/d0.-x0.-y03 CustomLegend=1960 GeV # END PLOT # BEGIN PLOT /CDF_2012_NOTE10874/d0.-x0.-y04 CustomLegend=Energy Ratio 1960/300 # END PLOT # BEGIN PLOT /CDF_2012_NOTE10874/d0.-x0.-y05 CustomLegend=Energy Ratio 900/300 # END PLOT # BEGIN PLOT /CDF_2012_NOTE10874/d0.-x0.-y06 CustomLegend=Energy Ratio 1960/900 # END PLOT rivet-1.8.3/data/plotinfo/MC_ZINC.plot0000644000175000017500000000220312116077756015646 0ustar sunsun# BEGIN PLOT /MC_ZINC/Z_mass Title=Z mass XLabel=$m_{\text{Z}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}m_{\text{Z}}$ [pb/GeV] # END PLOT # BEGIN PLOT /MC_ZINC/Z_pT$ Title=Z $p_\perp$ XLabel=$p_\perp^{\text{Z}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\text{Z}}$ [pb/GeV] LogX=1 LegendXPos=0.05 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_ZINC/Z_pT_peak Title=Z $p_\perp$ in peak region XLabel=$p_\perp^{\text{Z}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\text{Z}}$ [pb/GeV] LogY=0 LegendYPos=0.5 LegendXPos=0.30 # END PLOT # BEGIN PLOT /MC_ZINC/Z_y Title=Z rapidity XLabel=$y_{\text{Z}}$ YLabel=$\text{d}\sigma/\text{d}y_{\text{Z}}$ [pb] LegendXPos=0.35 LegendYPos=0.5 # END PLOT # BEGIN PLOT /MC_ZINC/Z_phi Title=Z azimuthal angle XLabel=$\phi_{\text{Z}}$ YLabel=$\text{d}\sigma/\text{d}\phi_{\text{Z}}$ [pb] # END PLOT # BEGIN PLOT /MC_ZINC/lepton_pT Title=Lepton $p_\perp$ XLabel=$p_\perp^{\text{l}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^{\text{l}}$ [pb/GeV] LogX=1 # END PLOT # BEGIN PLOT /MC_ZINC/lepton_eta Title=Lepton $\eta$ XLabel=$\eta_{\text{l}}$ [GeV] YLabel=$\text{d}\sigma/\text{d}\eta_{\text{l}}$ [pb/GeV] # END PLOT rivet-1.8.3/data/plotinfo/SLD_1996_S3398250.plot0000644000175000017500000000207512116077756016705 0ustar sunsun# BEGIN PLOT /SLD_1996_S3398250/d01-x01-y01 Title=Charged multiplicity in $b$ events XLabel=$E_\mathrm{CMS}/GeV$ YLabel=$\langle n\rangle_{b\bar b}$ LegendXPos=0.20 LegendYPos=0.85 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1996_S3398250/d02-x01-y01 Title=Charged multiplicity in $c$ events XLabel=$E_\mathrm{CMS}/GeV$ YLabel=$\langle n\rangle_{c\bar c}$ LegendXPos=0.20 LegendYPos=0.85 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1996_S3398250/d03-x01-y01 Title=Charged multiplicity in $uds$ events XLabel=$E_\mathrm{CMS}/GeV$ YLabel=$\langle n\rangle_{l\bar l}$ LegendXPos=0.20 LegendYPos=0.85 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1996_S3398250/d04-x01-y01 Title=Difference in Charged multiplicity between $c$ and $uds$ events XLabel=$E_\mathrm{CMS}/GeV$ YLabel=$\delta_{cl}$ LegendXPos=0.20 LegendYPos=0.85 FullRange=1 LogY=0 # END PLOT # BEGIN PLOT /SLD_1996_S3398250/d05-x01-y01 Title=Difference in Charged multiplicity between $b$ and $uds$ events XLabel=$E_\mathrm{CMS}/GeV$ YLabel=$\delta_{bl}$ LegendXPos=0.20 LegendYPos=0.85 FullRange=1 LogY=0 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_I926145.plot0000644000175000017500000000121012116077756016773 0ustar sunsun# BEGIN PLOT /ATLAS_2011_I926145/d01-x01-y01 Title=Electron diff. cross-section $|\eta|<2.0$~excl.~$1.37<|\eta|<1.52$ XLabel=$p_\perp~[\text{GeV}]$ YLabel=$\text{d}\sigma/\text{d}p_\perp~[\mu\text{b}/\text{GeV}]$ # END PLOT # BEGIN PLOT /ATLAS_2011_I926145/d02-x01-y01 Title=Muon diff. cross-section $|\eta|<2.0$~excl.~$1.37<|\eta|<1.52$ XLabel=$p_\perp~[\text{GeV}]$ YLabel=$\text{d}\sigma/\text{d}p_\perp~[\mu\text{b}/\text{GeV}]$ # END PLOT # BEGIN PLOT /ATLAS_2011_I926145/d03-x01-y01 Title=Muon differential cross-section $|\eta|<2.5$ XLabel=$p_\perp~[\text{GeV}]$ YLabel=$\text{d}\sigma/\text{d}p_\perp~[\mu\text{b}/\text{GeV}]$ # END PLOT rivet-1.8.3/data/plotinfo/D0_2000_S4480767.plot0000644000175000017500000000022512116077756016500 0ustar sunsun# BEGIN PLOT /D0_2000_S4480767/d01-x01-y01 Title=W boson pT XLabel=$p_{\perp}^W$ [GeV] YLabel=$\text{d}\sigma/\text{d}p_\perp^W$ [pb/GeV] # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_S9120807.plot0000644000175000017500000000117112116077756017073 0ustar sunsun# BEGIN PLOT /ATLAS_2011_S9120807/d01-x01-y01 Title=Invariant mass of the diphoton system XLabel=$M_{\gamma\gamma}$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}M_{\gamma\gamma}$ [pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_S9120807/d02-x01-y01 Title=Transverse momentum of the diphoton system XLabel=$p_{\perp\gamma\gamma}$ [GeV] YLabel=$\mathrm{d}\sigma/\mathrm{d}p_{\perp\gamma\gamma}$ [pb/GeV] # END PLOT # BEGIN PLOT /ATLAS_2011_S9120807/d03-x01-y01 Title=Azimuthal separation of the photons XLabel=$\Delta\phi_{\gamma\gamma}$ [rad] YLabel=$\mathrm{d}\sigma/\mathrm{d}\Delta\phi_{\gamma\gamma}$ [pb/rad] LegendXPos=0.1 # END PLOT rivet-1.8.3/data/plotinfo/ATLAS_2011_S9126244.plot0000644000175000017500000002727212116077756017106 0ustar sunsun # ** Gap fractions vs PtBar ** # BEGIN PLOT /ATLAS_2011_S9126244/d0[12345]-x01-y0[12] XLabel=$\overline{P_{T}}$ [GeV] YLabel=Gap fraction YMin=0.0 YMax=1.05 LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d01-x01-y01 Title=Gap fraction vs $\overline{P_{T}}$ for $1.0<|\Delta{}y|<2.0$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d01-x01-y02 Title=Gap fraction vs $\overline{P_{T}}$ for $1.0<|\Delta{}y|<2.0$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d02-x01-y01 Title=Gap fraction vs $\overline{P_{T}}$ for $2.0<|\Delta{}y|<3.0$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d02-x01-y02 Title=Gap fraction vs $\overline{P_{T}}$ for $2.0<|\Delta{}y|<3.0$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d03-x01-y01 Title=Gap fraction vs $\overline{P_{T}}$ for $3.0<|\Delta{}y|<4.0$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d03-x01-y02 Title=Gap fraction vs $\overline{P_{T}}$ for $3.0<|\Delta{}y|<4.0$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d04-x01-y01 Title=Gap fraction vs $\overline{P_{T}}$ for $4.0<|\Delta{}y|<5.0$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d04-x01-y02 Title=Gap fraction vs $\overline{P_{T}}$ for $4.0<|\Delta{}y|<5.0$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d05-x01-y01 Title=Gap fraction vs $\overline{P_{T}}$ for $5.0<|\Delta{}y|<6.0$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d05-x01-y02 Title=Gap fraction vs $\overline{P_{T}}$ for $5.0<|\Delta{}y|<6.0$, Fwd/Bwd # END PLOT # ** Gap fractions vs Delta Y ** # BEGIN PLOT /ATLAS_2011_S9126244/d0[6789]-x01-y0[12] XLabel=$|\Delta{}y|$ YLabel=Gap fraction YMin=0.0 YMax=1.05 LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d1[012]-x01-y0[12] XLabel=$|\Delta{}y|$ YLabel=Gap fraction YMin=0.0 YMax=1.05 LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d1[9]-x01-y0[1] XLabel=$|\Delta{}y|$ YLabel=Gap fraction YMin=0.0 YMax=1.05 LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d2[012345]-x01-y0[1] XLabel=$|\Delta{}y|$ YLabel=Gap fraction YMin=0.0 YMax=1.05 LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d06-x01-y01 Title=Gap fraction vs $|\Delta{}y|$ for $70<\overline{P_{T}}<90$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d06-x01-y02 Title=Gap fraction vs $|\Delta{}y|$ for $70<\overline{P_{T}}<90$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d07-x01-y01 Title=Gap fraction vs $|\Delta{}y|$ for $90<\overline{P_{T}}<120$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d07-x01-y02 Title=Gap fraction vs $|\Delta{}y|$ for $90<\overline{P_{T}}<120$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d08-x01-y01 Title=Gap fraction vs $|\Delta{}y|$ for $120<\overline{P_{T}}<150$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d08-x01-y02 Title=Gap fraction vs $|\Delta{}y|$ for $120<\overline{P_{T}}<150$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d09-x01-y01 Title=Gap fraction vs $|\Delta{}y|$ for $150<\overline{P_{T}}<180$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d09-x01-y02 Title=Gap fraction vs $|\Delta{}y|$ for $150<\overline{P_{T}}<180$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d10-x01-y01 Title=Gap fraction vs $|\Delta{}y|$ for $180<\overline{P_{T}}<210$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d10-x01-y02 Title=Gap fraction vs $|\Delta{}y|$ for $180<\overline{P_{T}}<210$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d11-x01-y01 Title=Gap fraction vs $|\Delta{}y|$ for $210<\overline{P_{T}}<240$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d11-x01-y02 Title=Gap fraction vs $|\Delta{}y|$ for $210<\overline{P_{T}}<240$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d12-x01-y01 Title=Gap fraction vs $|\Delta{}y|$ for $240<\overline{P_{T}}<270$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d12-x01-y02 Title=Gap fraction vs $|\Delta{}y|$ for $240<\overline{P_{T}}<270$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d19-x01-y01 Title=Gap fraction vs $|\Delta{}y|$ for $70<\overline{P_{T}}<90$, Fwd/Bwd $Q_{0}=\overline{P_{T}}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d20-x01-y01 Title=Gap fraction vs $|\Delta{}y|$ for $90<\overline{P_{T}}<120$, Fwd/Bwd $Q_{0}=\overline{P_{T}}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d21-x01-y01 Title=Gap fraction vs $|\Delta{}y|$ for $120<\overline{P_{T}}<150$, Fwd/Bwd $Q_{0}=\overline{P_{T}}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d22-x01-y01 Title=Gap fraction vs $|\Delta{}y|$ for $150<\overline{P_{T}}<180$, Fwd/Bwd $Q_{0}=\overline{P_{T}}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d23-x01-y01 Title=Gap fraction vs $|\Delta{}y|$ for $180<\overline{P_{T}}<210$, Fwd/Bwd $Q_{0}=\overline{P_{T}}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d24-x01-y01 Title=Gap fraction vs $|\Delta{}y|$ for $210<\overline{P_{T}}<240$, Fwd/Bwd $Q_{0}=\overline{P_{T}}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d25-x01-y01 Title=Gap fraction vs $|\Delta{}y|$ for $240<\overline{P_{T}}<270$, Fwd/Bwd $Q_{0}=\overline{P_{T}}$ # END PLOT # ** Gap fractions vs Q_0 ** # BEGIN PLOT /ATLAS_2011_S9126244/d1[345678]-x01-y0[12] XLabel=$Q_{0}$ [GeV] YLabel=Gap fraction YMin=0.0 YMax=1.05 LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d13-x01-y01 Title=Gap fraction vs $Q_{0}$ for $70<\overline{P_{T}}<90$ $2<|\Delta{}y|<3$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d13-x01-y02 Title=Gap fraction vs $Q_{0}$ for $70<\overline{P_{T}}<90$ $2<|\Delta{}y|<3$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d14-x01-y01 Title=Gap fraction vs $Q_{0}$ for $70<\overline{P_{T}}<90$ $4<|\Delta{}y|<5$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d14-x01-y02 Title=Gap fraction vs $Q_{0}$ for $70<\overline{P_{T}}<90$ $4<|\Delta{}y|<5$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d15-x01-y01 Title=Gap fraction vs $Q_{0}$ for $120<\overline{P_{T}}<150$ $2<|\Delta{}y|<3$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d15-x01-y02 Title=Gap fraction vs $Q_{0}$ for $120<\overline{P_{T}}<150$ $2<|\Delta{}y|<3$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d16-x01-y01 Title=Gap fraction vs $Q_{0}$ for $120<\overline{P_{T}}<150$ $4<|\Delta{}y|<5$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d16-x01-y02 Title=Gap fraction vs $Q_{0}$ for $120<\overline{P_{T}}<150$ $4<|\Delta{}y|<5$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d17-x01-y01 Title=Gap fraction vs $Q_{0}$ for $210<\overline{P_{T}}<240$ $2<|\Delta{}y|<3$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d17-x01-y02 Title=Gap fraction vs $Q_{0}$ for $210<\overline{P_{T}}<240$ $2<|\Delta{}y|<3$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d18-x01-y01 Title=Gap fraction vs $Q_{0}$ for $210<\overline{P_{T}}<240$ $4<|\Delta{}y|<5$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d18-x01-y02 Title=Gap fraction vs $Q_{0}$ for $210<\overline{P_{T}}<240$ $4<|\Delta{}y|<5$, Fwd/Bwd # END PLOT # ** Average NJet vs PtBar ** # BEGIN PLOT /ATLAS_2011_S9126244/d2[6789]-x01-y0[12] XLabel=$\overline{P_{T}}$ [GeV] YLabel=$\overline{N_{jet}}$ YMin=0.0 YMax=3.0 LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d26-x01-y01 Title=$\overline{N_{jet}}$ vs $\overline{P_{T}}$ for $1<|\Delta{}y|<2$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d26-x01-y02 Title=$\overline{N_{jet}}$ vs $\overline{P_{T}}$ for $1<|\Delta{}y|<2$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d27-x01-y01 Title=$\overline{N_{jet}}$ vs $\overline{P_{T}}$ for $2<|\Delta{}y|<3$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d27-x01-y02 Title=$\overline{N_{jet}}$ vs $\overline{P_{T}}$ for $2<|\Delta{}y|<3$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d28-x01-y01 Title=$\overline{N_{jet}}$ vs $\overline{P_{T}}$ for $3<|\Delta{}y|<4$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d28-x01-y02 Title=$\overline{N_{jet}}$ vs $\overline{P_{T}}$ for $3<|\Delta{}y|<4$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d29-x01-y01 Title=$\overline{N_{jet}}$ vs $\overline{P_{T}}$ for $4<|\Delta{}y|<5$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d29-x01-y02 Title=$\overline{N_{jet}}$ vs $\overline{P_{T}}$ for $4<|\Delta{}y|<5$, Fwd/Bwd # END PLOT # ** Average NJet vs Delta Y ** # BEGIN PLOT /ATLAS_2011_S9126244/d3[0123456]-x01-y0[1] XLabel=$|\Delta{}y|$ YLabel=$\overline{N_{jet}}$ YMin=0.0 YMax=3.0 LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d3[789]-x01-y0[12] XLabel=$|\Delta{}y|$ YLabel=$\overline{N_{jet}}$ YMin=0.0 YMax=3.0 LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d4[0123]-x01-y0[12] XLabel=$|\Delta{}y|$ YLabel=$\overline{N_{jet}}$ YMin=0.0 YMax=3.0 LogY=0 # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d30-x01-y01 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $70<\overline{P_{T}}<90$, Fwd/Bwd $Q_{0}=\overline{P_{T}}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d31-x01-y01 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $90<\overline{P_{T}}<120$, Fwd/Bwd $Q_{0}=\overline{P_{T}}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d32-x01-y01 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $120<\overline{P_{T}}<150$, Fwd/Bwd $Q_{0}=\overline{P_{T}}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d33-x01-y01 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $150<\overline{P_{T}}<180$, Fwd/Bwd $Q_{0}=\overline{P_{T}}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d34-x01-y01 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $180<\overline{P_{T}}<210$, Fwd/Bwd $Q_{0}=\overline{P_{T}}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d35-x01-y01 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $210<\overline{P_{T}}<240$, Fwd/Bwd $Q_{0}=\overline{P_{T}}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d36-x01-y01 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $240<\overline{P_{T}}<270$, Fwd/Bwd $Q_{0}=\overline{P_{T}}$ # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d37-x01-y01 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $70<\overline{P_{T}}<90$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d37-x01-y02 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $70<\overline{P_{T}}<90$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d38-x01-y01 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $90<\overline{P_{T}}<120$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d38-x01-y02 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $90<\overline{P_{T}}<120$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d39-x01-y01 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $120<\overline{P_{T}}<150$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d39-x01-y02 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $120<\overline{P_{T}}<150$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d40-x01-y01 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $150<\overline{P_{T}}<180$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d40-x01-y02 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $150<\overline{P_{T}}<180$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d41-x01-y01 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $180<\overline{P_{T}}<210$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d41-x01-y02 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $180<\overline{P_{T}}<210$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d42-x01-y01 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $210<\overline{P_{T}}<240$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d42-x01-y02 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $210<\overline{P_{T}}<240$, Fwd/Bwd # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d43-x01-y01 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $240<\overline{P_{T}}<270$, Leading Jet # END PLOT # BEGIN PLOT /ATLAS_2011_S9126244/d43-x01-y02 Title=$\overline{N_{jet}}$ vs $|\Delta{}y|$ for $240<\overline{P_{T}}<270$, Fwd/Bwd # END PLOT rivet-1.8.3/data/plotinfo/OPAL_2001_S4553896.plot0000644000175000017500000000215112116077756016775 0ustar sunsun# BEGIN PLOT /OPAL_2001_S4553896/d03-x01-y01 Title=Bengtsson-Zerwas angle (parton level) XLabel=$|\cos(\chi_\text{BZ})|$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}|\cos(\chi_\text{BZ})|$ LogY=0 RatioPlotYMin=0.9 RatioPlotYMax=1.1 LegendXPos=0.1 LegendYPos=0.9 # END PLOT # BEGIN PLOT /OPAL_2001_S4553896/d04-x01-y01 Title=K\"orner-Schierholz-Willrodt angle (parton level) XLabel=$\cos(\phi_\text{KSW})$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}\,\cos(\phi_\text{KSW})$ LogY=0 RatioPlotYMin=0.9 RatioPlotYMax=1.1 LegendXPos=0.25 LegendYPos=0.9 # END PLOT # BEGIN PLOT /OPAL_2001_S4553896/d05-x01-y01 Title=Modified Nachtmann-Reiter angle (parton level) XLabel=$|\cos(\theta^*_\text{NR})|$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}|\cos(\theta^*_\text{NR})|$ LogY=0 YMin=0.4 LegendXPos=0.05 RatioPlotYMin=0.9 RatioPlotYMax=1.1 # END PLOT # BEGIN PLOT /OPAL_2001_S4553896/d06-x01-y01 Title=Angle between the two softest jets (parton level) XLabel=$\cos(\alpha_{34})$ YLabel=$1/\sigma \, \text{d}{\sigma}/\text{d}\,\cos(\alpha_{34})$ LogY=0 LegendXPos=0.05 LegendYPos=0.5 RatioPlotYMin=0.9 RatioPlotYMax=1.1 # END PLOT rivet-1.8.3/data/Makefile.in0000644000175000017500000005443212116616064014041 0ustar sunsun# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = data DIST_COMMON = $(am__dist_pkgdata_DATA_DIST) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__dist_pkgdata_DATA_DIST = rivet-completion am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgdatadir)" DATA = $(dist_pkgdata_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @ENABLE_PYEXT_TRUE@dist_pkgdata_DATA = rivet-completion @ENABLE_PYEXT_TRUE@bashcomp_dir = $(prefix)/etc/bash_completion.d @ENABLE_PYEXT_FALSE@EXTRA_DIST = rivet-completion SUBDIRS = refdata anainfo plotinfo texmf all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_pkgdataDATA: $(dist_pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-dist_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @ENABLE_PYEXT_FALSE@uninstall-local: @ENABLE_PYEXT_FALSE@install-data-local: clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-dist_pkgdataDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-dist_pkgdataDATA uninstall-local .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local install-dist_pkgdataDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-dist_pkgdataDATA \ uninstall-local @ENABLE_PYEXT_TRUE@install-data-local: @ENABLE_PYEXT_TRUE@ if [[ -d "$(bashcomp_dir)" && -w "$(bashcomp_dir)" ]]; then \ @ENABLE_PYEXT_TRUE@ install --mode 644 rivet-completion $(bashcomp_dir)/; fi @ENABLE_PYEXT_TRUE@uninstall-local: @ENABLE_PYEXT_TRUE@ rm -f $(bashcomp_dir)/rivet-completion # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: rivet-1.8.3/data/Makefile.am0000644000175000017500000000063212116077756014032 0ustar sunsun## bash completion if ENABLE_PYEXT dist_pkgdata_DATA = rivet-completion bashcomp_dir = $(prefix)/etc/bash_completion.d install-data-local: if [[ -d "$(bashcomp_dir)" && -w "$(bashcomp_dir)" ]]; then \ install --mode 644 rivet-completion $(bashcomp_dir)/; fi uninstall-local: rm -f $(bashcomp_dir)/rivet-completion else EXTRA_DIST = rivet-completion endif SUBDIRS = refdata anainfo plotinfo texmf rivet-1.8.3/doc/0000755000175000017500000000000012131473214011613 5ustar sunsunrivet-1.8.3/doc/make-plots.html0000644000175000017500000013115312123054632014561 0ustar sunsun make-plots

About

make-plots reads histogram files in a simple text format and converts them into PostScript or PDF files. This is done by creating a LaTeX file and running latex, dvips, and maybe ps2pdf.

Usage

To run make-plots call

 make-plots [options] file.dat [file2.dat ...]

All available options can be listed by running

 make-plots --help

Configuration files

make-plots typically takes the plotting instructions and settings from the input ascii files as described in the "Input Format" chapter. It is also possible though to pass a global configuration file to make-plots (cf. --help) which allows to specify/overwrite settings for certain plots or histograms in a plot on top of what the input files specify. This could be useful if the ascii files are generated automatically (e.g. with rivet-mkhtml or compare-histos) and you still want to apply custom plotting options.

An example for this looks like:

# BEGIN PLOT figures/MC_WJETS/W_mass.dat
XMin=60.0
XMax=100.0
LegendXPos=0.65
# END PLOT

.*myLOrun.aida/D0_2008_S7554427/d01-x01-y01::Scale=1.0

Here first the options in the PLOT section of a specific ascii file are being amended/overwritten. The second part shows how to overwrite the Scale property of one specific histogram line using the ID of the histogram.

Input Format

The ascii files which can be read by make-plots are divided into sections. There are four types of sections which are called PLOT, HISTOGRAM, FUNCTION, and SPECIAL. Every file must contain exactly one PLOT section and at least one section of the other three types. There may be multiple HISTOGRAM, FUNCTION, and SPECIAL sections.

Empty lines and lines starting with # are ignored, except for the section delimiters described below.

PLOT

The PLOT section starts with

# BEGIN PLOT

and ends with

# END PLOT

Every file must have exactly one PLOT section. In this section global parameters are specified, like the axis labels, the plot title, size, … An empty PLOT section is perfectly legal, though.

In this section the following parameters can be set:

Titles, Labels

Title=<title>

The title of the plot.

XLabel=<label>
YLabel=<label>
ZLabel=<label>

Axis labels for the x-, y-, and z-axis.

XLabelSep=<distance>
YLabelSep=<distance>
ZLabelSep=<distance>

Distance between the axis label and the plot in units of \labelsep.

XMajorTickMarks=<last_digit>
YMajorTickMarks=<last_digit>
ZMajorTickMarks=<last_digit>
XMinorTickMarks=<nticks>
YMinorTickMarks=<nticks>
ZMinorTickMarks=<nticks>

make-plots tries to guess the distance between tickmarks automatically. If you are not satisfied with its result, you can override this by setting <last_digit> to 1, 2, 5, or 10, and <nticks> to the number of minor ticks you like. Note: These options are not available for logarithmic axes.

XTwosidedTicks=<0|1>
YTwosidedTicks=<0|1>

Draw tickmarks also on the upper and/or right side of the plot.

XCustomMajorTicks=<list>
YCustomMajorTicks=<list>
ZCustomMajorTicks=<list>

To specify major ticks at arbitrary positions and/or with arbitrary labels. <list> is a tab separated list of format value1 <tab> label1 <tab> value2 <tab> label2 ....

XCustomMinorTicks=<list>
YCustomMinorTicks=<list>
ZCustomMinorTicks=<list>

To specify minor ticks at arbitrary positions. <list> is a tab separated list of format value1 <tab> value2 <tab> value3 ....

PlotTickLabels=<0|1>
RatioPlotTickLabels=<0|1>

Disable/enable plotting of the tick labels in the plot and ratio plot (useful if multiple plots are to be combined manually later).

Axes

LogX=<0|1>
LogY=<0|1>
LogZ=<0|1>

Use a logarithmic x-, y-, or z-axis. Default is linear.

XMin=<value>
XMax=<value>
YMin=<value>
YMax=<value>
ZMin=<value>
ZMax=<value>
FullRange=<0|1>
ShowZero=<0|1>

Specify the plot range. By default the range is chosen such that all data is visible in linear plots, and the zero is visible. ShowZero=0 suppresses plotting the zero in linear plots and thus zooms into the actual y-value range of the distribution. In logarithmic plots the automatic choice of YMin is limited to be not smaller than 2e-4*YMax, but manually you can specify any value. FullRange=1 also overrides the 2e-4*YMax limit and plots the full range in y.

Normalization, Rebinning

NormalizeToIntegral=<1|0>
NormalizeToSum=<1|0>
Scale=<factor>

Normalize all histograms to their integral, to their sum of entries, or scale them by some arbitrary factor. Normalization and scale options in the PLOT section override the corresponding option in the HISTOGRAM section. The scale factor is applied after normalization.

Rebin=<nbins>

Rebin all histograms in this plot. Syntax and functionality is the same as for the Rebin option in the HISTOGRAM section.

Sizes and Margins

PlotSize=<xsize,ysize>

Size in x and y direction of the plot. This can be specified in any unit LaTeX understands.

LeftMargin=<size>
RightMargin=<size>
TopMargin=<size>
BottomMargin=<size>

Distance between the plot and the paper edge.

FrameColor=<color>

Background color for the margin around the plot.

Legends

Legend=<0|1>

Display a legend in the plot.

CustomLegend=<text>

Custom text that is added to the legend.

LegendXPos=<pos>
LegendYPos=<pos>

Position of the legend within the plot. Anchor point is the top left corner of the legend, so units typically range between 0.0 and 1.0.

LegendAlign=<align>

Horizontal alignment of the legend: LegendAlign=l is the default and will create a left-aligned legend, while LegendAlign=r is right-aligned with the keys on the right hand side.

LegendOnly=<list>

Whitespace separated list of IDs. These can be histograms or functions. The legend is only shown for the listed objects. Without this option, all plotted objects which have a title enter the legend. The legend titles are plotted in the given order, so there are cases in which it makes sense to use LegendOnly together with all histogram IDs. It is also possible to specify the legend order on an entry-by-entry basis using the LegendOrder=<int> setting for each histogram or function.

Plotting Options

DrawOnly=<list>

Whitespace separated list of histogram IDs. Only the histograms in this list are plotted, even if there are more histograms defined in the file. The histograms are plotted in the given order, so there are cases in which it makes sense to use DrawOnly together with all histogram IDs. This is especially useful for the Stack option. It is also possible to specify the plotting order on a histogram-by-histogram basis using the PlotOrder=<int> setting for each histogram.

Stack=<list>

Whitespace separated list of histogram IDs. The histograms will be added on top of each other. This is useful for example to compare data with background if the background has contributions from several histograms.

DrawSpecialFirst=<0|1>
DrawFunctionFirst=<0|1>

By default the SPECIAL and FUNCTION sections are plotted after the histograms. With these options you can override that behaviour.

ConnectGaps=<0|1>

If error bars are disabled and you want to bridge gaps in a histogram, you can set this parameter. By default it is off. Setting it in the PLOT section affects all histograms, but you can also set it in the HISTOGRAM section for individual histograms. The local setting overrides the global setting.

Comparison Plots

With the

RatioPlot=1
RatioPlotReference=<histogram_ID>

options you can create ratio plots for two or more histograms. Note that you must specify your reference data ID. This option is used by the compare-histos script.

RatioPlotMode=<default|deviation|datamc>

By default, the ratio plot displays MC/Data. You can switch to (MC-data)/uncertainty (deviation) or Data/MC (datamc) with this option.

In ratio plots the following additional options are available and work in a similar way as their regular counterparts:

RatioPlotYLabel=<label>
RatioPlotYMin=<value>
RatioPlotYMax=<value>
RatioPlotYSize=<size>
RatioPlotErrorBandColor=<color>

By default, the reference data is plotted using a yellow error band around the central value of the ratio plot. If you would rather have it plotted in the same style as in the main plot (e.g. with black errorbars), you can specify:

RatioPlotSameStyle=1

If you only want the ratio plot without showing the actual data distribution, you can switch off the main plot. This option implies RatioPlot=1:

MainPlot=0

Goodness of Fit

make-plots can calculate the goodness of fit between histograms and display the result in the legend. It is also possible to change the color of the margin around the plot depending on the GoF. This is useful to provide a quick overview when looking at many plots.

GofType=chi2

The type of GoF. The default is chi2 and currently that’s the only option.

GofReference=<histogram_ID>

specifies the reference histogram to be used for the GoF calculation. If this option is omitted, the fallback is RatioPlotReference.

The GoF calculation is activated by two options:

GofLegend=<0|1>
GofFrame=<histogram_ID>

GofLegend calculates the GoF for all histograms and displays the results in the legend. With GofFrame you can specify a single histogram for which the GoF result will be shown in the legend and used to assign a color to the plot margins. Note that FrameColor overrides the color choice for the margin. You can use

GofFrameColor=<colorthresholds>

to specify the thresholds for the frame color. This option takes a list of <threshold>:<color> pairs, separated by whitespace. The default is GofFrameColor=0:green 3:yellow 6:red!70. Again, if you use FrameColor, this option is disabled.

Color Palettes for 2-dim Plots

With the option ColorSeries you can define a custom color palette for 2-dimensional plots. The syntax is the same as for the \definecolorseries command in the xcolor LaTeX package after the color series name, i.e. {core-model}{method}[begin-model]{begin-spec}[end-model]{end-spec}. For more information you can consult the xcolor documentation. Here is an example:

ColorSeries={rgb}{last}[rgb]{1,0.97,0.94}[rgb]{0.6,0.0,0.05}

HISTOGRAM

The HISTOGRAM section starts with

# BEGIN HISTOGRAM <ID>

and ends with

# END HISTOGRAM

There can be more than one HISTOGRAM section in a file. Histograms are identified by <ID> which can be any string not containing whitespace.

Data Format

Lines starting with a number (positive or negative) are interpreted as data. Each line specifies one bin. The fields in each line must be separated by tabs, not spaces (this needs to be fixes some day). For 1-dimensional histograms the format can be

<lowerbinedge>  <upperbinedge>  <value>  <error>
<lowerbinedge>  <upperbinedge>  <value>  <minuserror>  <pluserror>

2-dimensional histograms are supported, too. They are plotted as colormap (errors are ignored) and specified as

<lowerxbinedge>  <upperxbinedge>  <lowerybinedge>  <upperybinedge>  <value>  <error>

Titles

Title=<title>

Title of the histogram. This is used for the legend.

Linestyles

LineStyle=<style>

Any linestyle that is understood by the LaTeX pstricks package, e.g. solid, dotted, dashed, none, as well as a special dashdotted (or dotdashed) linestyle which does what you might expect.

LineColor=<color>

Color of the line. Default is black, but any color that pstricks understands can be used, including constructions like red!70!blue!20 (for mixing colors), {[rgb]{0.8,0,0.7}} (for RGB-colors), {[wave]{580}} (for wavelengths in nm), LineColor={[cmyk]{1,1,0,0}} for CMYK-colors, or [hsb]{0.5,1,1} for HSB-colors.

LineOpacity=<opacity>

Set the opacity of the line. Default is 1.0. This might not work for ps output.

LineWidth=<width>

Width of the line.

LineDash=<dashstyle>

If LineStyle is set to dashed, you can specify the dash style with this option. Anything that is understood by pstrick’s dash=... option is valid. An example for a dash-dotted line is LineDash=3pt 3pt .8pt 3pt. You can use LineStyle=dashdotted or LineStyle=dotdashed as an abbreviation for LineStyle=dashed with LineDash=3pt 3pt .8pt 3pt.

ConnectGaps=<0|1>

If error bars are disabled and you want to bridge gaps in a histogram, you can set this parameter. By default it is off. Setting it in the PLOT section affects all histograms, but you can also set it in the HISTOGRAM section for individual histograms. The local setting overrides the global setting.

SmoothLine=<0|1>

Draw a smooth curve rather than a histogram

Fillstyles

FillStyle=<style>
FillColor=<color>

To fill the area below a histogram, set FillStyle and FillColor to something pstricks understands. Examples for the style are solid or vlines. See LineColor for examples of color definitions.

FillOpacity=<opacity>

Set the opacity of the solid fillcolor. Default is 1.0. This might not work for ps output.

HatchColor=<color>

The color of a hatch pattern used for filling the area below a histogram. This is used for example when you use vlines as style.

Data Points

ErrorBars=<0|1>

Turn on error bars.

ErrorBands=<0|1>
ErrorBandColor=<color>

Turn on error bands and set their color (see LineColor for a description of color definitions).

ErrorBandOpacity=<opacity>

Set the opacity of the error band. Default is 1.0. This might not work for ps output.

PolyMarker=<dotstyle>

The marker style of the points. Any dot style which is understood by pstricks is valid, e.g. *, o, triangle, diamond, …

DotSize=<size>
DotScale=<factor>

The size of the markers. With DotSize you can specify the absolute size, e.g. in units of pt, while DotScale is a relative measure with respect to the default size.

Normalization, Rebinning

NormalizeToIntegral=<1|0>
NormalizeToSum=<1|0>
Scale=<factor>

Normalize the histogram to the integral, to the sum of entries, or scale it by some arbitrary factor. If normalization and a scale factor are given, the scale factor is applied after normalization. This is useful for stacking histograms when the ratios are known.

Rebin=<nbins>
ErrorType=<stat|env>

Rebin the histogram. Starting with the lowest bin <nbins> bins are combined into a new bin. If the number of bins in the histogram is not a multiple of <nbins>, the remaining bins at the upper histogram end are silently ignored (i.e. if the original histogram has 10 bins and <nbins> is 3, the plotted histogram shows three bins combining the bins 1—9 of the original histogram). The treatment of the errors is determined by the given ErrorType: stat (default) assumes the errors are of statistical nature and combines them in quadrature sum, while env allows to treat errors as envelope of various uncertainty runs which are combined linearly.

FUNCTION

make-plots can draw arbitrary functions. These functions are defined as python code sniplets which are evaluated by make-plots. The code sniplet must come after all other options in a FUNCTION section and are preceded by Code= on a single line. An example FUNCTION section might look like this:

# BEGIN FUNCTION f_cc
LineColor=red
Code=
p0=16.4
p1=1.25
p2=0.9832
from scipy.special import erf
x-=0.5
if x<=0:
    return 0
else:
    return .5*p2*(1.+erf( (x-p0)/sqrt(x*p1) ))
# END FUNCTION

Common Options with HISTOGRAM

The following options have the same meaning as in the HISTOGRAM section:

Title=<title>
LineStyle=<style>
LineColor=<color>
LineWidth=<width>
LineDash=<dashstyle>
FillStyle=<style>
FillColor=<color>
HatchColor=<color>

Function Range

You can limit the plot range of functions by specifying

XMin=<value>
XMax=<value>

SPECIAL

The SPECIAL sections are used to include any custom pstricks code. This is useful for drawing arrows and lines, put text at any position into the plot, etc. The default coordinate system is defined to be (0,0) at the lower left and (1,1) at the upper right corner of the plot. By putting the \physicscoor command in front of a coordinate pair, these coordinates are interpreted not in the pstricks coordinate system, but in the physics coordinate system of the plot, which is useful e.g. for marking cut values in a plot. Similar \physicsxcoor and \physicsycoor commands exist which will only treat the x or y coordinate respectively as being in physics units.

Hint: If you want to clip your SPECIAL code to the plot area, you can use

\psclip{\psframe[linewidth=0, linestyle=none](0,0)(1,1)}
   ...
\endpsclip

An example of a SPECIAL section might look like this:

# BEGIN SPECIAL
\psclip{\psframe[linewidth=0, linestyle=none](0,0)(1,1)}
\psline[linewidth=1.2pt,linecolor=red]{<-}\physicscoor(2.83,2)\physicscoor(2.83,18)
\uput{4pt}[180]{0}\physicscoor(2.83,12){observed}
\psline[linewidth=0.8pt,linecolor=red,linestyle=dashed]\physicscoor( 3.17,0)\physicscoor( 3.17,28.14)
\psline[linewidth=0.8pt,linecolor=red,linestyle=dashed]\physicscoor(-3.59,0)\physicscoor(-3.59,28.14)
\endpsclip
# END SPECIAL

rivet-1.8.3/doc/rivet-manual.tex0000644000175000017500000023265312116077755014771 0ustar sunsun\documentclass{JHEP3} %\JHEP{00(2007)000} \include{preamble} \title{Rivet user manual\\ {\smaller \textsc{version \RivetVersion}}} \author{Andy Buckley\\ PPE Group, School of Physics, University of Edinburgh, UK.\\ E-mail: \email{andy.buckley@ed.ac.uk}} \author{Jonathan Butterworth\\ HEP Group, Dept. of Physics and Astronomy, UCL, London, UK.\\ E-mail: \email{J.Butterworth@ucl.ac.uk}} \author{Hendrik Hoeth\\ IPPP, Durham University, UK.\\ E-mail: \email{hendrik.hoeth@cern.ch}} \author{Leif L\"onnblad\\ Theoretical Physics, Lund University, Sweden.\\ E-mail: \email{lonnblad@thep.lu.se}} \author{James Monk\\ HEP Group, Dept. of Physics and Astronomy, UCL, London, UK.\\ E-mail: \email{jmonk@hep.ucl.ac.uk}} \author{Holger Schulz\\ Institut f\"ur Physik, Berlin Humboldt University, Germany.\\ E-mail: \email{holger.schulz@physik.hu-berlin.de}} \author{Jan Eike von Seggern\\ Institut f\"ur Physik, Berlin Humboldt University, Germany.\\ E-mail: \email{vseggern@physik.hu-berlin.de}} \author{Frank Siegert\\ Physikalisches Institut, Freiburg University, Germany.\\ E-mail: \email{frank.siegert@cern.ch}} \author{Lars Sonnenschein\\ RWTH Aachen University, III. Phys. Inst. A, 52056 Aachen, Germany.\\ E-mail: \email{Lars.Sonnenschein@cern.ch}} \preprint{} \abstract{This is the manual and user guide for the Rivet system for the validation and tuning of Monte Carlo event generators. As well as the core Rivet library, this manual describes the usage of the \kbd{rivet} program and the AGILe generator interface library. The depth and level of description is chosen for users of the system, starting with the basics of using validation code written by others, and then covering sufficient details to write new Rivet analyses and calculational components.} \keywords{Event generator, simulation, validation, tuning, QCD} \begin{document} \section{Introduction} This manual is a users' guide to using the Rivet generator validation system. Rivet is a C++ class library, which provides the infrastructure and calculational tools for simulation-level analyses for high energy collider experiments, enabling physicists to validate event generator models and tunings with minimal effort and maximum portability. Rivet is designed to scale effectively to large numbers of analyses for truly global validation, by transparent use of an automated result caching system. The Rivet ethos, if it may be expressed succinctly, is that user analysis code should be extremely clean and easy to write --- ideally it should be sufficiently self-explanatory to in itself be a reference to the experimental analysis algorithm --- without sacrificing power or extensibility. The machinery to make this possible is intentionally hidden from the view of all but the most prying users. Generator independence is explicitly required by virtue of all analyses operating on the generic ``HepMC'' event record. The simplest way to use Rivet is via the \kbd{rivet} command line tool, which analyses textual HepMC event records as they are generated and produces output distributions in a structured textual format. The input events are generated using the generator's own steering program, if one is provided; for generators which provide no default way to produce HepMC output, the AGILe generator interface library, and in particular the \kbd{agile-runmc} command which it provides, may be useful. For those who wish to embed their analyses in some larger framework, Rivet can also be run programmatically on HepMC event objects with no special executable being required. Before we get started, a declaration of intent: this manual is intended to be a guide to using Rivet, rather than a comprehensive and painstakingly maintained reference to the application programming interface (API) of the Rivet library. For that purpose the online documentation at \url{http://rivet.hepforge.org} should be sufficient -- in case of confusion please contact the authors at \url{rivet@projects.hepforge.org}. Similar API documentation is maintained for AGILe at \url{http://agile.hepforge.org}. \subsection{Typographic conventions} As is normal in computer user manuals, the typography in this manual is used to indicate whether we are describing source code elements, commands to be run in a terminal, the output of a command etc. The main such clue will be the use of \kbd{typewriter-style} text: this indicates the name of a command or code element --- class names, function names etc. Typewriter font is also used for commands to be run in a terminal, but in this case it will be prefixed by a dollar sign, as in \inp{echo ''Hello'' | cat}. The output of such a command on the terminal will be typeset in \outp{sans-serif} font. When we are documenting a code feature in detail (which is not the main point of this manual), we will use square brackets to indicate optional arguments, and italic font between angle brackets to represent an argument name which should be replaced by a value, e.g. \code{Event::applyProjection(\val{proj})}. Following the example of Donald Knuth in his books on \TeX{}, in this document we will indicate paragraphs of particular technicality or esoteric nature with a ``dangerous bend''\marginpar{\bendimg\\Dangerous bend} sign. These will typically describe internals of Rivet of which most people will be fortunate enough to remain happily ignorant without adverse effects. However they may be of interest to detail obsessives, the inordinately curious and Rivet hackers. You can certainly skip them on a first reading. Similarly, you may see double bend signs \marginpar{\dblbendimg\\Double bend} --- the same rules apply for these, but even more strongly. \cleardoublepage \part{Getting started with Rivet} \label{part:gettingstarted} As with many things, Rivet may be meaningfully approached at several distinct levels of detail: \begin{itemize} \item The simplest, and we hope the most common, is to use the analyses which are already in the library to study events from a variety of generators and tunes: this is enormously valuable in itself and we encourage all manner of experimentalists and phenomenologists alike to use Rivet in this mode. \item A more involved level of usage is to write your own Rivet analyses --- this may be done without affecting the installed standard analyses by use of a ``plugin'' system (although we encourage users who develop analyses to submit them to the Rivet developers for inclusion into a future release of the main package). This approach requires some understanding of programming within Rivet but you don't \emph{need} to know about exactly what the system is doing with the objects that you have defined. \item Finally, Rivet developers and people who want to do non-standard things with their analyses will need to know something about the messy details of what Rivet's infrastructure is doing behind the scenes. But you'd probably rather be doing some physics! \end{itemize} The current part of this manual is for the first sort of user, who wants to get on with studying some observables with a generator or tune, or comparing several such models. Since everyone will fall into this category at some point, our present interest is to get you to that all-important ``physics plots'' stage as quickly as possible. Analysis authors and Rivet service-mechanics will find the more detailed information that they crave in Part~\ref{part:writinganalyses}. \section{Quickstart} The point of this section is to get you up and running with Rivet as soon as possible. Doing this by hand may be rather frustrating, as Rivet depends on several external libraries --- you'll get bored downloading and building them by hand in the right order. Here we recommend two much simpler ways --- for the full details of how to build Rivet by hand, please consult the Rivet Web page. \paragraph{Ubuntu/Debian package archive} A selection of HEP packages, including Rivet, are maintained as Debian/Ubuntu Linux packages on the Launchpad PPA system: \url{https://launchpad.net/~hep/+archive}. This is the nicest option for Debian/Ubuntu, since not only will it work more easily than anything else, but you will also automatically benefit from bug fixes and version upgrades as they appear. The PPA packages have been built as binaries for a variety of architectures, and the package interdependencies are automatically known and used: all you need to do on a Debian-type Linux system (Ubuntu included) is to add the Launchpad archive address to your APT sources list and then request installation of the \kbd{rivet} package in the usual way. See the Launchpad and system documentation for all the details. \paragraph{Bootstrap script} For those not using Debian/Ubuntu systems, we have written a bootstrapping script which will download tarballs of Rivet, AGILe and the other required libraries, expand them and build them in the right order with the correct build flags. This is generally nicer than doing it all by hand, and virtually essential if you want to use the existing versions of FastJet, HepMC, generator libraries, and so on from CERN AFS: there are issues with these versions which the script works around, which you won't find easy to do yourself. To run the script, we recommend that you choose a personal installation directory. Personally, I make a \kbd{\home/local} directory for this purpose, to avoid polluting my home directory with a lot of files. If you already use a directory of the same name, you might want to use a separate one, say \kbd{\home/rivetlocal}, such that if you need to delete everything in the installation area you can do so without difficulties. Now, change directory to your build area (you may also want to make this, e.g. \kbd{\home/build}), and download the script:\\ \inp{wget \url{http://svn.hepforge.org/rivet/bootstrap/rivet-bootstrap}}\\ \inp{chmod +x rivet-bootstrap}\\ Now run it to get some help: \inp{./rivet-bootstrap --help}\\ Now to actually do the install: for example, to bootstrap Rivet and AGILe to the install area specified as the prefix argument, run this:\\ \inp{./rivet-bootstrap --install-agile --prefix=\val{localdir}} If you are running on a system where the CERN AFS area is mounted as \path{/afs/cern.ch}, then the bootstrap script will attempt to use the pre-built HepMC\cite{Dobbs:2001ck}, LHAPDF\cite{Whalley:2005nh}, FastJet\cite{Cacciari:2005hq,fastjetweb} and GSL libraries from the LCG software area. Either way, finally the bootstrap script will write out a file containing the environment settings which will make the system useable. You can source this file, e.g. \kbd{source rivetenv.sh} to make your current shell ready-to-go for a Rivet run (use \kbd{rivetenv.csh} if you are a C shell user). You now have a working, installed copy of the Rivet and AGILe libraries, and the \kbd{rivet} and \kbd{agile-runmc} executables: respectively these are the command-line frontend to the Rivet analysis library, and a convenient steering command for generators which do not provide their own main program with HepMC output. To test that they work as expected, source the setup scripts as above, if you've not already done so, and run this:\\ \inp{rivet --help}\\ % This should print a quick-reference user guide for the \kbd{rivet} command to the terminal. Similarly, for \kbd{agile-runmc},\\ \inp{agile-runmc --help}\\ \inp{agile-runmc --list-gens}\\ \inp{agile-runmc --beams=pp:14000 Pythia6:425}\\ which should respectively print the help, list the available generators and make 10 LHC-type events using the Fortran Pythia\cite{Sjostrand:2006za} 6.423 generator. You're on your way! If no generators are listed, you probaby need to install a local Genser-type generator repository: see \SectionRef{sec:genser}. In this manual, because of its convenience, we will use \kbd{agile-runmc} as our canonical way of producing a stream of HepMC event data; if your interest is in running a generator like Sherpa\cite{Gleisberg:2008ta}, Pythia~8\cite{Sjostrand:2007gs,Sjostrand:2008vc}, or Herwig++\cite{Bahr:2008pv} which provides their own native way to make HepMC output, or a generator like PHOJET which is not currently supported by AGILe, then substitute the appropriate command in what follows. We'll discuss using these commands in detail in \SectionRef{sec:agile-runmc}. \subsection{Getting generators for AGILe} \label{sec:genser} One last thing before continuing, though: the generators themselves. Again, if you're running on a system with the CERN LCG AFS area mounted, then \kbd{agile-runmc} will attempt to automatically use the generators packaged by the LCG Genser team. Otherwise, you'll have to build your own mirror of the LCG generators. This process is evolving with time, and so, rather than provide information in this manual which will be outdated by the time you read it, we simply refer you to the relevant page on the Rivet wiki: \url{http://rivet.hepforge.org/trac/wiki/GenserMirror}. If you are interested in using a generator not currently supported by AGILe, which does not output HepMC events in its native state, then please contact the authors (via the Rivet developer contact email address) and hopefully we can help. \subsection{Command completion} A final installation point worth considering is using the supplied bash-shell programmable completion setup for the \kbd{rivet} and \kbd{agile-runmc} commands. Despite being cosmetic and semi-trivial, programmable completion makes using \kbd{rivet} positively pleasant, especially since you no longer need to remember the somewhat cryptic analysis names\footnote{Standard Rivet analyses have names which, as well as the publication date and experiment name, incorporate the 8-digit Spires ID code.}! To use programmable completion, source the appropriate files from the install location:\\ \inp{. \val{localdir}/share/Rivet/rivet-completion}\\ \inp{. \val{localdir}/share/AGILe/agile-completion}\\ (if you are using the setup script \kbd{rivetenv.sh} this is automatically done for you). If there is already a \kbd{\val{localdir}/etc/bash_completion.d} directory in your install path, Rivet and AGILe's installation scripts will install extra copies into that location, since automatically sourcing all completion files in such a path is quite standard. Apologies to \{C,k,z,\dots\}-shell users, but this feature is currently only available for the \kbd{bash} shell. Anyone who feels like supplying fixes or additions for their favourite shell is very welcome to get in touch with the developers. \section{Running Rivet analyses} \label{sec:agile-runmc} The \kbd{rivet} executable is the easiest way to use Rivet, and will be our example throughout this manual. This command reads HepMC events in the standard ASCII format, either from file or from a text stream. \subsection{The FIFO idiom} \label{sec:fifo-idiom} Since you rarely want to store simulated HepMC events and they are computationally cheap to produce (at least when compared to the remainder of experiment simulation chains), we recommend using a Unix \emph{named pipe} (or ``FIFO'' --- first-in, first-out) to stream the events. While this may seem unusual at first, it is just a nice way of ``pretending'' that we are writing to and reading from a file, without actually involving any slow disk access or building of huge files: a 1M event LHC run would occupy $\sim 60 GB$ on disk, and typically it takes twice as long to make and analyse the events when the filesystem is involved! Here is an example:\\ \inp{mkfifo fifo.hepmc}\\ \inp{agile-runmc Pythia6:425 -o fifo.hepmc \&}\\ \inp{rivet -a EXAMPLE fifo.hepmc}\\ % Note that the generator process (\kbd{agile-runmc} in this case) is \emph{backgrounded} before \kbd{rivet} is run. Notably, \kbd{mkfifo} will not work if applied to a directory mounted via the AFS distributed filesystem, as widely used in HEP. This is not a big problem: just make your FIFO object somewhere not mounted via AFS, e.g. \kbd{/tmp}. There is no performance penalty, as the filesystem object is not written to during the streaming process. In the following command examples, we will assume that a generator has been set up to write to the \kbd{fifo.hepmc} FIFO, and just list the \kbd{rivet} command that reads from that location. Some typical \kbd{agile-runmc} commands are listed in \AppendixRef{app:agilerunmc}. \subsection{Analysis status} The standard Rivet analyses are divided into four status classes: validated, preliminary, obsolete, and unvalidated (in roughly decreasing order of academic acceptability). The Rivet ``validation procedure'' is not (as of February 2011) formally defined, but generally implies that an analysis has been checked to ensure reproduction of MC points shown in the paper where possible, and is believed to have no outstanding issues with analysis procedure or cuts. Additionally, analyses marked as ``validated'' and distributed with Rivet should normally have been code-checked by an experienced developer to ensure that the code is a good example of Rivet usage and is not more complex than required or otherwise difficult to read or maintain. Such analyses are regarded as fully ready for use in any MC validation or tuning studies. Validated analyses which implement an unfinished piece of experimental work are considered to be trustworthy in their implementation of a conference note or similar ``informal'' publication, but do not have the magic stamp of approval that comes from a journal publication. This remains the standard mark of experimental respectability and accordingly we do not include such analyses in the Rivet standard analysis libraries, but in a special ``preliminary'' library. While preliminary analyses may be used for physics studies, please be aware of the incomplete status of the corresponding experimental study, and also be aware that the histograms in such analyses may be renamed or removed entirely, as may the analysis itself. Preliminary analyses will not have a SPIRES preprint number, and hence on their move into the standard Rivet analysis library they will normally undergo a name change: please ensure when you upgrade between Rivet versions that any scripts or programs which were using preliminary analyses are not broken by the disappearance or change of that analysis in the newer version. The minor perils of using preliminary analyses can be avoided by the cautious by building Rivet with the \kbd{-{}-disable-preliminary} configuration flag, in which case their temptation will not even be offered. To make transitions between Rivet versions more smooth and predictable for users of preliminary analyses, preliminary analyses which are superseded by a validated version will be reclassified as obsolete and will be retained for one major version of Rivet with a status of "obsolete" before being removed, to give users time to migrate their run scripts, i.e. if an analysis is marked as obsolete in version 1.4.2, it will remain in Rivet's distribution until version 1.5.0. Obsolete analyses may have different reference histograms from the final version and will not be maintained. Obsolete analyses will not be built if either the \kbd{-{}-disable-obsolete} configuration flag is specified at build time: for convenience, the default value of this flag is the value of the \kbd{-{}-disable-preliminary} flag. Finally, unvalidated analyses are those whose implementation is incomplete, flawed or just troubled by doubts. Running such analyses is not a good idea if you aren't trying to fix them, and Rivet's command line tools will print copious warning messages if you do. Unvalidated analyses in the Rivet distribution are not built by default, as they are only of interest to developers and would be distracting clutter for the majority of users: if you \emph{really} need them, building Rivet with the \kbd{-{}-enable-unvalidated} configuration flag will slake your thirst for danger. \subsection{Example \kbd{rivet} commands} \begin{itemize} \item \paragraph{Getting help:}{\kbd{rivet --help} will print a (hopefully) helpful list of options which may be used with the \kbd{rivet} command, as well as other information such as environment variables which may affect the run.} \item \paragraph{Choosing analyses:}{\kbd{rivet --list-analyses} will list the available analyses, including both those in the Rivet distribution and any plugins which are found at runtime. \kbd{rivet --show-analysis \val{patt}} will show a lot of details about any analyses whose name match the \val{patt} regular expression pattern --- simple bits of analysis name are a perfectly valid subset of this. For example, \kbd{rivet --show-analysis CDF_200} exploits the standard Rivet analysis naming scheme to show details of all available CDF experiment analyses published in the ``noughties.''} \item \paragraph{Running analyses:}{\kbd{rivet -a~DELPHI_1996_S3430090 fifo.hepmc} will run the Rivet \kbd{DELPHI_1996_S3430090}\cite{Abreu:1996na} analysis on the events in the \kbd{fifo.hepmc} file (which, from the name, is probably a filesystem named pipe rather than a normal \emph{file}). This analysis is the one originally used for the \Delphi ``\textsc{Professor}'' generator tuning. If the first event in the data file does not have appropriate beam particles, the analysis will be disabled; since there is only one analysis in this case, the command will exit immediately with a warning if the first event is not an $\Ppositron\Pelectron$ event.} % \item \paragraph{Using all analyses:}{\kbd{rivet -n~50000 -A -} will read up to % 50k events from standard input (specified by the special ``-'' input % filename) and analyse them with \emph{all} the Rivet library analyses. As % above, incompatible analyses will be removed before the main analysis run % begins.} \item \paragraph{Histogramming:}{\kbd{rivet fifo.hepmc -H~foo.aida} will read all the events in the \kbd{fifo.hepmc} file. The \kbd{-H} switch is used to specify that the output histogram file will be named \kbd{foo.aida}. By default the output file is called \kbd{Rivet.aida}.} \item \paragraph{Fine-grained logging:}{\kbd{rivet fifo.hepmc -A -l~Rivet.Analysis=DEBUG~\cmdbreak -l~Rivet.Projection=DEBUG -l~Rivet.Projection.FinalState=TRACE~\cmdbreak -l~NEvt=WARN} will analyse events as before, but will print different status information as the run progresses. Hierarchical logging control is possible down to the level of individual analyses and projections as shown above; this is useful for debugging without getting overloaded with debug information from \emph{all} the components at once. The default level is ``\textsc{info}'', which lies between ``\textsc{debug}'' and ``\textsc{warning}''; the ``\textsc{trace}'' level is for very low level information, and probably isn't needed by normal users.} \end{itemize} \section{Using analysis data} In this section, we summarise how to use the data files which Rivet produces for plotting, validation and tuning. \subsection{Histogram formats} Rivet currently produces output histogram data in the AIDA XML format. Most people aren't familiar with AIDA (and we recommend that you remain that way!), and it will disappear entirely from Rivet in version 2.0. You will probably wish to cast the AIDA files to a different format for plotting, and for this we supply several scripts. \paragraph{Conversion to ROOT} Your knee-jerk reaction is probably to want to know how to plot your Rivet histograms in ROOT\cite{Antcheva:2009zz}. Don't worry: a few months of therapy can work wonders. For unrepentant ROOT junkies, Rivet installs an \kbd{aida2root} script, which converts the AIDA records to a \kbd{.root} file full of ROOT \texttt{TGraph}s. One word of warning: a bug in ROOT means that \texttt{TGraph}s do not render properly from file because the axis is not drawn by default. To display the plots correctly in ROOT you will need to pass the \kbd{"AP"} drawing option string to either the \kbd{TGraph::Draw()} method, or in the options box in the \kbd{TBrowser} GUI interface. \paragraph{Conversion to ``flat format''} Most of our histogramming is based around a ``flat'' plain text format, which can easily be read (and written) by hand. We provide a script called \kbd{aida2flat} to do this conversion. Run \kbd{aida2flat -h} to get usage instructions; in particular the Gnuplot and ``split output'' options are useful for further visualisation. Aside from anything else, this is useful for simply checking the contents of an AIDA file, with \kbd{aida2flat Rivet.aida | less}. \vspace{1.8em} \begin{detail} We get asked a lot about why we don't use ROOT internally: aside from a general unhappiness about the design and quality of the data objects in ROOT, the monolithic nature of the system makes it a big dependency for a system as small as Rivet. While not an issue for experimentalists, most theorists and generator developers do not use ROOT and we preferred to embed the AIDA system, which in its LWH implementation requires no external package. The replacement for AIDA will be another lightweight system rather than ROOT, with an emphasis on friendly, intuitive data object design, and correct handling of sample merging statistics for all data objects. \end{detail} \subsection{Chopping histograms} \newcommand{\chophisto}{\kbd{rivet-chopbins}\xspace} In some cases you don't want to keep the complete histograms produced by Rivet. For generator tuning purposes, for example, you want to get rid of the bins you already know your generator is incapable of describing. You can use the script \chophisto to specify those bin-ranges you want to keep individually for each histogram in a Rivet output-file. The bin-ranges have to be specified using the corresponding x-values of that histogram. The usage is very simple. You can specify bin ranges of histograms to keep on the command-line via the \kbd{-b} switch, which can be given multiple times, e.g.\\ \kbd{\chophisto -b /CDF\_2001\_S4751469/d03-x01-y01:5:13 Rivet.aida}\\ % will chop all bins with $x<5$ and $x>13$ from the histogram \kbd{/CDF\_2001\_S4751469/d03\-x01\-y01} in the file \kbd{Rivet.aida}. (In this particular case, $x$ would be a leading jet \pT.) \subsection{Normalising histograms} \newcommand{\normhisto}{\kbd{rivet-rescale }} Sometimes you want to use histograms normalised to, e.g., the generator cross-section or the area of a reference-data histogram. The script \normhisto was designed for these purposes. The usage is the following:\\ \kbd{\normhisto -O observables -r RIVETDATA -o normalised Rivet.aida}\\ % By default, the normalised histograms are written to file in the AIDA-XML format. You can also give the \kbd{-f} switch on the command line to produce flat histograms. \paragraph{Normalising to reference data} You will need an output-file of Rivet, \kbd{Rivet.aida}, a folder that contains the reference-data histograms (e.g. \kbd{rivet-config --datadir}) and optionally, a text-file, \kbd{observables} that contains the names of the histograms you would like to normalise - those not given in the file will remain un-normalised. These are examples of how your \kbd{observables} file might look like: % \begin{snippet} /CDF_2000_S4155203/d01-x01-y01 \end{snippet} If a histogram \kbd{/CDF\_2000\_S4155203/d01-x01-y01} is found in one of the reference-data files in the folder specified via the \kbd{-r} switch, then this will result in a histogram \kbd{/CDF\_2000\_S4155203/d01-x01-y01} being normalised to the area of the corresponding reference-data histogram. You can further specify a certain range of bins to normalise: % \begin{snippet} /CDF_2000_S4155203/d01-x01-y01:2:35 \end{snippet} % \noindent will chop off the bins with $x<2$ and $x>35$ of both, the histogram in your \kbd{Rivet.aida} and the reference-data histogram. The remaining MC histogram is then normalised to the remaining area of the reference-data histogram. \paragraph{Normalising to arbitrary areas}% In the file \kbd{observables} you can further specify an arbitrary number, e.g. a generator cross-section, as follows: % \begin{snippet} /CDF_2000_S4155203/d01-x01-y01 1.0 \end{snippet} \noindent will result in the histogram \kbd{/CDF\_2000\_S4155203/d01-x01-y01} being normalised to 1.0, and % \begin{snippet} /CDF_2000_S4155203/d01-x01-y01:2:35 1.0 \end{snippet} % \noindent will chop off the bins with $x<2$ and $x>35$ of the histogram\\ \kbd{/CDF\_2000\_S4155203/d01-x01-y01} first and normalise the remaining histogram to one. \subsection{Plotting and comparing data} Rivet comes with three commands --- \kbd{rivet-mkhtml}, \kbd{compare-histos} and \kbd{make-plots} --- for comparing and plotting data files. These commands produce nice comparison plots of publication quality from the AIDA format text files. The high level program \kbd{rivet-mkhtml} will automatically create a plot webpage from the given AIDA files. It searches for reference data automatically and uses the other two commands internally. Example:\\ \inp{rivet-mkhtml withUE.aida:'Title=With UE' withoutUE.aida:'LineColor=blue'}\\ Run \kbd{rivet-mkhtml --help} to find out about all features and options. You can also run the other two commands separately: % \begin{itemize} \item \kbd{compare-histos} will accept a number of AIDA files as input (ending in \kbd{.aida}), identify which plots are available in them, and combine the MC and reference plots appropriately into a set of plot data files ending with \kbd{.dat}. More options are described by running \kbd{compare-histos --help}. Incidentally, the reference files for each Rivet analysis are to be found in the installed Rivet shared data directory, \kbd{\val{installdir}/share/Rivet}. You can find the location of this by using the \kbd{rivet-config} command:\\ \inp{rivet-config --datadir} \item You can plot the created data files using the \kbd{make-plots} command:\\ \inp{make-plots --pdf *.dat}\\ The \kbd{--pdf} flag makes the output plots in PDF format: by default the output is in PostScript (\kbd{.ps}), and flags for conversion to EPS and PNG are also available. \end{itemize} \cleardoublepage \part{Standard Rivet analyses} \label{part:analyses} %\section{Rivet analyses reference guide} In this section we describe the standard experimental analyses included with the Rivet library. To maintain synchronisation with the code, these descriptions are generated automatically from the metadata in the analysis objects themselves. \input{analyses} \cleardoublepage \part{How Rivet works} \label{part:writinganalyses} Hopefully by now you've run Rivet a few times and got the hang of the command line interface and viewing the resulting analysis data files. Maybe you've got some ideas of analyses that you would like to see in Rivet's library. If so, then you'll need to know a little about Rivet's internal workings before you can start coding: with any luck by the end of this section that won't seem particularly intimidating. The core objects in Rivet are ``projections'' and ``analyses''. Hopefully ``analyses'' isn't a surprise --- that's just the collection of routines that will make histograms to compare with reference data, and the only things that might differ there from experiences with HZTool\cite{Bromley:1995np} are the new histogramming system and the fact that we've used some object orientation concepts to make life a bit easier. The meaning of ``projections'', as applied to event analysis, will probably be less obvious. We'll discuss them soon, but first a semi-philosophical aside on the ``right way'' to do physics analyses on and involving simulated data. \section{The science and art of physically valid MC analysis} The world of MC event generators is a wonderfully convenient one for experimentalists: we are provided with fully exclusive events whose most complex correlations can be explored and used to optimise analysis algorithms and some kinds of detector correction effects. It is absolutely true that the majority of data analyses and detector designs in modern collider physics would be very different without MC simulation. But it is very important to remember that it is just simulation: event generators encode much of known physics and phenomenologically explore the non-perturbative areas of QCD, but only unadulterated experiment can really tell us about how the world behaves. The richness and convenience of MC simulation can be seductive, and it is important that experimental use of MC strives to understand and minimise systematic biases which may result from use of simulated data, and to not ``unfold'' imperfect models when measuring the real world. The canonical example of the latter effect is the unfolding of hadronisation (a deeply non-perturbative and imperfectly-understood process) at the Tevatron (Run I), based on MC models. Publishing ``measured quarks'' is not physics --- much of the data thus published has proven of little use to either theory or experiment in the following years. In the future we must be alert to such temptation and avoid such gaffes --- and much more subtle ones. These concerns on how MC can be abused in treating measured data also apply to MC validation studies. A key observable in QCD tunings is the \pT of the \PZ boson, which has no phase space at exactly $\pT = 0$ but a very sharp peak at $\mathcal{O}(\unit{1-2}{\GeV})$. The exact location of this peak is mostly sensitive to the width parameter of a nucleon ``intrinsic \pT'' in MC generators, plus some soft initial state radiation and QED bremstrahlung. Unfortunately, all the published Tevatron measurements of this observable have either ``unfolded'' the QED effects to the ``\PZ \pT'' as attached to the object in the HepMC/HEPEVT event record with a PDG ID code of 23, or have used MC data to fill regions of phase space where the detector could not measure. Accordingly, it is very hard to make an accurate and portable MC analysis to fit this data, without similarly delving into the event record in search of ``the boson''. While common practice, this approach intrinsically limits the precision of measured data to the calculational order of the generator --- often not analytically well-defined. We can do better. Away from this philosophical propaganda (which nevertheless we hope strikes some chords in influential places\dots), there are also excellent pragmatic reasons for MC analyses to avoid treating the MC ``truth'' record as genuine truth. The key argument is portability: there is no MC generator which is the ideal choice for all scenarios, and an essential tool for understanding sub-leading variability in theoretical approaches to various areas of physics is to use several generators with similar leading accuracies but different sub-leading formalisms. While the HEPEVT record as written by HERWIG and PYTHIA has become familiar to many, there are many ambiguities in how it is filled, from the allowed graph structures to the particle content. Notably, the Sherpa event generator explicitly elides Feynman diagram propagators from the event record, perhaps driven by a desire to protect us from our baser analytical instincts. The Herwig++ event generator takes the almost antipodal approach of expressing different contributing Feynman diagram topologies in different ways (\emph{not} physically meaningful!) and seamlessly integrating shower emissions with the hard process particles. The general trend in MC simulation is to blur the practically-induced line between the sampled matrix element and the Markovian parton cascade, challenging many established assumptions about ``how MC works''. In short, if you want to ``find'' the \PZ to see what its \pT or $\eta$ spectrum looks like, many new generators may break your honed PYTHIA code\dots or silently give systematically wrong results. The unfortunate truth is that most of the event record is intended for generator debugging rather than physics interpretation. Fortunately, the situation is not altogether negative: in practice it is usually as easy to write a highly functional MC analysis using only final state particles and their physically meaningful on-shell decay parents. These are, since the release of HepMC 2.5, standardised to have status codes of 1 and 2 respectively. \PZ-finding is then a matter of choosing decay lepton candidates, windowing their invariant mass around the known \PZ mass, and choosing the best \PZ candidate: effectively a simplified version of an experimental analysis of the same quantity. This is a generally good heuristic for a safe MC analysis! Note that since it's known that you will be running the analysis on signal events, and there are no detector effects to deal with, almost all the details that make a real analysis hard can be ignored. The one detail that is worth including is summing momentum from photons around the charged leptons, before mass-windowing: this physically corresponds to the indistinguishability of collinear energy deposits in trackers and calorimeters and would be the ideal published experimental measurement of Drell-Yan \pT for MC tuning. Note that similar analyses for \PW bosons have the luxury over a true experiment of being able to exactly identify the decay neutrino rather than having to mess around with missing energy. Similarly, detailed unstable hadron (or tau) reconstruction is unnecessary, due to the presence of these particles in the event record with status code 2. In short, writing an effective analysis which is automatically portable between generators is no harder than trying to decipher the variable structures and multiple particle copies of the debugging-level event objects. And of course Rivet provides lots of tools to do almost all the standard fiddly bits for you, so there's no excuse!\\[\lineskip] \noindent Good luck, and be careful! % While the event record "truth" structure may look very % compellingly like a history of the event processes, it is extremely important to % understand that this is not the case. For starters, such a picture is not % quantum mechanically robust: it is impossible to reconcile such a concept of a % single history with the true picture of contributing and interfering % amplitudes. A good example of this is in parton showers, where QM interference % leads to colour coherence. In the HERWIG-type parton showers, this colour % coherence is implemented as an angular-ordered series of emissions, while in % PYTHIA-type showers, an angular veto is instead applied. The exact history of % which particles are emitted in which order is not physically meaningful but % rather an artefact of the model used by the generator --- and is primarily % useful for generator authors' debugging rather than physics analysis. This is in % general true for all particles in the event without status codes of 1, 2 or 4. % Another problem is that the way in which the event internals is documented is % not well defined: it is for authors' use and as such they can do anything they % like with the "non-physics" entities stored within. Some examples: % * Sherpa does not write matrix element particles (i.e. W, Z, Higgs, ...) into the event record in most processes % * Herwig++ uses very low-mass Ws in its event record to represent very off-shell weak decay currents of B and D mesons (among others) % * In Drell-Yan events, Herwig++ sometimes calls the propagating boson a Z, and sometimes a photon, probabilistically depending on the no-mixing admixture terms % * Sherpa events (and maybe others) can have "bottleneck" particles through which everything flows. Asking if a particle has e.g. a b-quark (NB. an unphysical degree of freedom!) ancestor might always give the answer "yes", depending on the way that the event graph has been implemented % * Different generators do not even use the same status codes for "documentation" event record entries: newer ones tend to represent all internals as generator-specific particles, and emphasise their lack of physical meaning % * The generator-level barcodes do not have any reliable meaning: any use of them is based on HEPEVT conventions whihc may break, especially for new generators which have never used HEPEVT % * Many (all?) generators contain multiple copies of single internal particles, as a bookkeeping tools for various stages of event processing. Determining which (if any) is physically meaningful (e.g. which boosts were or weren't applied, whether QED radiation was included, etc.) is not defined in a cross-generator way. % * The distinction between "matrix element" and "parton shower" is ill-defined: ideally everything would be emitted from the parton shower and indeed the trend is to head at least partially in this direction (cf. CKKW/POWHEG). You probably can't make a physically useful interpretation of the "hard process", even if particular event records allow you to identify such a thing. % * Quark and gluon jets aren't as simple as the names imply on the "truth" level: to perform colour neutralisation, jets must include more contributions than a single hard process parton. When you look at event graphs, it becomes hard to define these things on a truth level. Use an observable-based heuristic definition instead. % Hence, any truth-structure assumptions need to checked and probably modified % when moving from one generator to another: clearly this can lead to % prohibitively large maintenance and development hurdles. The best approach, % whenever possible, is to only use truth information to access the particles % with status code 1 (and those with status = 2, if decays of physically % meaningful particles (i.e. hadrons) are being studied. In practice, this % adds relatively little to most analyses, and the portability of the analyses % is massively improved, allowing for wider and more reliable physics % studies. If you need to dig deeper, be very careful! % A final point of warning, more physical than the technicalities above, is that % the bosons or similar that are written in the event record are imperfect % calculational objects, rather than genuine truth. MC techniques are improving % all the time, and you should be extremely careful if planning to do something % like "unfolding" of QED radiation or initial state QCD radiation on data, based % on event record internals: the published end result must be meaningfully % comparable to future fixed order or N^kLL resummation calculations, particularly % in precision measurements. If not handled with obsessive care, you may end up % publishing a measurement of the internals of an MC generator rather than % physical truth! Again, this is not an absolute prohibition --- there are only % shades of grey in this area --- but just be very careful and stick to statuses % 1, 2 and 4 whenever possible. \section{Projections} The name ``projection'' is meant to evoke thoughts of projection operators, low-dimensional slices/views of high-dimensional spaces, and other things that might appeal to physicists who view the world through quantum-tinted lenses. A more mundane, but equally applicable, name would be ``observable calculators'', but since that's a long name, the things they return aren't \emph{necessarily} observable, and they all inherit from the \kbd{Projection} base class, we'll stick to that name. It doesn't take long to get used to using the name as a synonym for ``calculator'', without being intimidated by ideas that they might be some sort of high-powered deep magic. 90\% of them is simple and self-explanatory, as a peek under the bonnet of e.g. the all-important \kbd{FinalState} projection will reveal. Projections can be relatively simple things like event shapes (i.e. scalar, vector or tensor quantities), or arbitrarily complex things like lossy or selective views of the event final state. Most users will see them attached to analyses by declarations in each analysis' initialisation, but they can also be recursively ``nested'' inside other projections\footnote{Provided there are no dependency loops in the projection chains! Strictly, only acyclic graphs of projection dependencies are valid, but there is currently no code in Rivet that will attempt to verify this restriction.} (provided there are no infinite loops in the nesting chain.) Calling a complex projection in an analysis may actually transparently execute many projections on each event. \subsection{Projection caching} Aside from semantic issues of how the class design assigns the process of analysing events, projections are important computationally because they live in a framework which automatically stores (``caches'') their results between events. This is a crucial feature for the long-term scalability of Rivet, as the previous experience with HZTool was that HERA validation code ran very slowly due to repeated calculation of the same $k_\perp$ clustering algorithm (at that time notorious for scaling as the 3rd power of the number of particles.) A concrete example may help in understanding how this works. Let's say we have two analyses which have the same run conditions, i.e. incoming beam types, beam energies, etc. Each also uses the thrust event shape measure to define a set of basis vectors for their analysis. For each event that gets passed to Rivet, whichever analysis gets called first will immediately (although maybe indirectly) call a \kbd{FinalState} projection to get a list of stable, physical particles (filtering out the intermediate and book-keeping entries in the HepMC event record). That FS projection is then ``attached'' to the event. Next, the first analysis will call a \kbd{Thrust} projection which internally uses the same final state projection to define the momentum vectors used in calculating the thrust. Once finished, the thrust projection will also be attached to the event. So far, projections have offered no benefits. However, when the second analysis runs it will similarly try to apply its final state and thrust projections to the event. Rather than repeat the calculations, Rivet's infrastructure will detect that an equivalent calculation has already been run and will just return references to the already-run projections. Since projections can also contain and use other projections, this model allows some substantial computational savings, without the analysis author even needing to be particularly aware of what is going on. Observant readers may have noticed a problem with all this projection caching cleverness: what if the final states aren't defined the same way? One might provide charged final state particles only, or the acceptances (defined in pseudorapidity range and a IR \pT cutoff) might differ. Rivet handles this by making each projection provide a comparison operator which is used to decide whether the cached version is acceptable or if the calculation must be re-run with different settings. Because projections can be nested, applying a top-level projection to an event can spark off a cascade of comparisons, calculations and cache accesses, making use of existing results wherever possible. \subsection{Using projection caching} So far this is all theory --- how does one actually use projections in Rivet? First, you should understand that projections, while semantically stored within each other, are actually all registered with a central \code{ProjectionHandler} object.\footnote{As of version 1.1 onwards --- previously, they were stored as class members inside other \code{Projection}s and \code{Analysis} classes.} The reason for this central registration is to ensure that all projections' lifespans are managed in a consistent way, and to protect projection and analysis authors from some technical subtleties in how C++ polymorphism works. Inside the constructor of a \code{Projection} or the \code{init} method of an \code{Analysis} class, you must call the \code{addProjection} function. This takes two arguments, the projection to be registered (by \code{const} reference), and a name. The name is local to the parent object, so you need not worry about name clashes between objects. A very important point is that the passed \code{Projection} is not the one that is actually centrally registered --- that distinction belongs to a newly created heap object which is created within the \code{addProjection} method by means of the overloaded \code{Projection::clone()} method. Hence it is completely safe --- and recommended --- to use only local (stack) objects in \code{Projection} and \code{Analysis} constructors. \begin{philosophy} At this point, if you have rightly bought into C++ ideas like super-strong type-safety, this proliferation of dynamic casting may worry you: the compiler can't possibly check if a projection of the requested name has been registered, nor whether the downcast to the requested concrete type is legal. These are very legitimate concerns! In truth, we'd like to have this level of extra safety! But in the past, when projections were held as members of \code{ProjectionApplier} classes rather than in the central \code{ProjectionHandler} repository, the benefits of the strong typing were outweighed by more serious and subtle bugs relating to projection lifetime and object ``slicing''. At least when the current approach goes wrong it will throw an unmissable \emph{runtime} error --- until it's fixed, of course! --- rather than silently do the wrong thing. Our problems here are a microcosm of the perpetual language battle between strict and dynamic typing, runtime versus compile time errors. In practice, this manifests itself as a trade-off between the benefits of static type safety and the inconvenience of the type-system gymnastics that it engenders. We take some comfort from the number of very good programs have been and are still written in dynamically typed, interpreted languages like Python, where virtually all error checking (barring first-scan parsing errors) must be done at runtime. By pushing \emph{some} checking to the domain of runtime errors, Rivet's code is (we believe) in practice safer, and certainly more clear and elegant. However, we believe that with runtime checking should come a culture of unit testing, which is not yet in place in Rivet. As a final thought, one reason for Rivet's internal complexity is that C++ is just not a very good language for this sort of thing: we are operating on the boundary between event generator codes, number crunching routines (including third party libraries like FastJet) and user routines. The former set unavoidably require native interfaces and benefit from static typing; the latter benefit from interface flexibility, fast prototyping and syntactic clarity. Maybe a future version of Rivet will break through the technical barriers to a hybrid approach and allow users to run compiled projections from interpreted analysis code. For now, however, we hope that our brand of ``slightly less safe C++'' will be a pleasant compromise. \end{philosophy} % \begin{detail} % \TODO{How projection caching \emph{really} works} % (skippable, but useful as a reference) % \end{detail} % \subsection{Standard projection summary} % \TODO{foo} % \subsection{Example projection} % \TODO{bar} % \subsection{Cuts and constraints} % \TODO{baz} \section{Analyses} \subsection{Writing a new analysis} This section provides a recipe that can be followed to write a new analysis using the Rivet projections. Every analysis must inherit from \code{Rivet::Analysis} and, in addition to the constructor, must implement a minimum of three methods. Those methods are \code{init()}, \code{analyze(const Rivet::Event\&)} and \code{finalize()}, which are called once at the beginning of the analysis, once per event and once at the end of the analysis respectively. The new analysis should include the header for the base analysis class plus whichever Rivet projections are to be used, and should work under the \code{Rivet} namespace. Since analyses are hardly ever intended to be inherited from, they are usually implemented within a single \kbd{.cc} file with no corresponding header. The skeleton of a new analysis named \code{UserAnalysis} that uses the \code{FinalState} projection might therefore start off looking like this, in a file named \kbd{UserAnalysis.cc}: % \begin{snippet} #include "Rivet/Analysis.hh" namespace Rivet { class UserAnalysis : public Analysis { public: UserAnalysis() : Analysis("USERANA") { } void init() { ... } void analyze(const Event& event) { ... } void finalize() { ... } }; } \end{snippet} The constructor body is usually left empty, as all event loop setup is done in the \code{init()} method: the one \emph{required} constructor feature is to make a call to its base \code{Analysis} constructor, passing a string by which the analysis will \emph{register} itself with the Rivet framework. This name is the one exposed to a command-line or API user of this analysis: usually it is the same as the class name, which for official analyses is always in upper case. \begin{warning} Early versions of Rivet required the user to declare allowed beam types, energies, whether a cross-section is required, etc. in the analysis constructor via methods like \code{setBeams(...)} and \code{setNeedsCrossSection(...)}. This information is now \emph{much} preferred to be taken from the \kbd{.info} file for the analysis, and \emph{must} be done this way in analyses submitted for inclusion in future Rivet releases. \end{warning} % for the \code{UserAnalysis} may impose certain % requirements upon the events that the analysis will work with. A call to the % \code{setBeams} method declares that the analysis may only be run on events with % specific types of beam particles, for example adding the line % % % \begin{snippet} % setBeams(PROTON, PROTON); % \end{snippet} % % % \noindent ensures that the analysis can only be run on events from proton-proton % collisions. Other types of beam particles that may be used include % \code{ANTIPROTON}, \code{ELECTRON}, \code{POSITRON}, \code{MUON} and \code{ALL}. % The latter of these declares that the analysis is suitable for use with any type % of collision and is the default. % Some analyses need to know the interaction cross section that was generated by % the Monte Carlo generator, typically in order to normalise histograms. % Depending on the Monte Carlo that is used and its interface to Rivet, the cross % section may or may not be known. An analysis can therefore declare at the % beginning of a run that it will need the cross section information during the % finalisation stages. Such a declaration can be used to prevent what would % otherwise be fruitless analyses from running. An analysis sets itself as % requiring the cross section by calling inside the constructor % % % \begin{snippet} % setNeedsCrossSection(true); % \end{snippet} % % % \noindent In the absence of this call the default is to assume that the analysis % does not need to know the cross section. The \code{init()} method for the \code{UserAnalysis} class should add to the analysis all of the projections that will be used. Projections can be added to an analysis with a call to \code{addProjection(Projection, std::string)}, which takes as argument the projection to be added and a name by which that projection can later be referenced. For this example the \code{FinalState} projection is to be referenced by the string \code{"FS"} to provide access to all of the final state particles inside a detector pseudorapidity coverage of $\pm 5.0$. The syntax to create and add that projection is as follows: % \begin{snippet} init() { const FinalState fs(-5.0, 5.0); addProjection(fs, "FS"); } \end{snippet} % A second task of the \code{init()} method is the booking of all histograms which are later to be filled in the analysis code. Information about the histogramming system can be found in Section~\ref{section:histogramming}. % It is often the case that an analysis is only appropriate for a limited range of % Monte Carlo kinematic settings. For example, an analysis may only be suitable % if the minimum \pT in the hard scatter is above a certain value. A mechanism % exists with the \code{Analysis} object to declare the existence of such a cut. % However, the relevant information must be made available by the Monte Carlo % generator and, given the potentially large number of such generator-dependent % cuts, this information is not currently checked by the AGILe generator % interface. Nevertheless, an analysis can add a cut in the constructor with a % call to \code{addCut(const string\&, const Comparison\&, const double)}, which % takes as its arguments the name of the cut, the comparison operator and a value % to compare the cut quantity with. For example, to add a cut stating that the % hard scatter \pT must be above \unit{3}{\GeV} one should call % \begin{snippet} % addCut("PT", MORE_EQ, 3.0*GeV); % \end{snippet} \subsection{Utility classes} Rivet provides quite a few object types for physics purposes, such as three- and four-vectors, matrices and Lorentz boosts, and convenience proxy objects for e.g. particles and jets. We now briefly summarise the most important features of some of these objects; more complete interface descriptions can be found in the generated Doxygen web pages on the Rivet web site, or simply by browsing the relevant header files. \subsubsection{\code{FourMomentum}} The \code{FourMomentum} class is the main physics vector that you will encounter when writing Rivet analyses. Its functionality and interface are similar to the CLHEP \code{HepLorentzVector} with which many users will be familiar, but without some of the historical baggage. \paragraph{Vector components}% The \code{FourMomentum} \code{E()}, \code{px()}, \code{py()}, \code{pz()} \& \code{mass()} methods are (unsurprisingly) accessors for the vector's energy, momentum components and mass. The \code{vector3()} method returns a spatial \code{Vector3} object, i.e. the 3 spatial components of the 4-vector. \paragraph{Useful properties}% The \code{pT()} and \code{Et()} methods are used to calculate the transverse momentum and transverse energy. Angular variables are accessed via the \code{eta()}, \code{phi()} and \code{theta()} for the pseudorapidity, azimuthal angle and polar angle respectively. More explicitly named versions of these also exist, named \code{pseudorapidity()}, \code{azimuthalAngle()} and \code{polarAngle()}. Finally, the true rapidity is accessed via the \code{rapidity()} method. Many of these functions are also available as external functions, as are algebraic functions such as \code{cross(vec3a, vec3b)}, which is perhaps more palatable than \code{vec3a.cross(vec3b)}. \paragraph{Distances}% The $\eta$--$\phi$ distance between any two four-vectors (and/or three-vectors) can be computed using a range of overloaded external functions of the type \code{deltaR(vec1, vec2)}. Angles between such vectors can be calculated via the similar \code{angle(vec1, vec2)} functions. \subsubsection{\code{Particle}} This class is a wrapper around the HepMC \code{GenParticle} class. \code{Particle} objects are usually obtained as a vector from the \code{particles()} method of a \code{FinalState} projection. Rather than having to directly use the HepMC objects, and e.g. translate HepMC four-vectors into the Rivet equivalent, several key properties are accessed directly via the \code{Particle} interface (and more may be added). The main methods of interest are \code{momentum()}, which returns a \code{FourMomentum}, and \code{pdgId()}, which returns the PDG particle ID code. The PDG code can be used to access particle properties by using functions such as \code{PID::isHadron()}, \code{PID::threeCharge()}, etc. (these are defined in \kbd{Rivet/Tools/ParticleIDMethods.hh}.) \subsubsection{\code{Jet}} Jets are obtained from one of the jet accessor methods of a projection that implements the \code{JetAlg} interface, e.g. \code{FastJets::jetsByPt()} (this returns the jets sorted by \pT, such that the first element in the vector is the hardest jet --- usually what you want.) The most useful methods are \code{particles()}, \code{momenta()}, \code{momentum()} (a representative \code{FourMomentum}), and some checks on the jet contents such as \code{containsParticleId(pid)}, \code{containsCharm()} and \code{containsBottom()}. \subsubsection{Mathematical utilities} The \kbd{Rivet/Math/MathUtils.hh} header defines a variety of mathematical utility functions. These include testing functions such as \code{isZero(a)}, \code{fuzzyEquals(a, b)} and \code{inRange(a, low, high)}, whose purpose is hopefully self-evident, and angular range-mapping functions such as \code{mapAngle0To2Pi(a)}, \code{mapAngleMPiToPi(a)}, etc. \subsection{Histogramming} \label{section:histogramming} Rivet's histogramming uses the AIDA interfaces, composed of abstract classes \code{IHistogram1D}, \code{IProfile1D}, \code{IDataPointSet} etc. which are built by a factories system. Since it's our feeling that much of the factory infrastructure constitutes an abstraction overload, we provide histogram booking functions as part of the \code{Analysis} class, so that in the \code{init} method of your analysis you should book histograms with function calls like: % % Should this be recommended without titles/labels, or is this what we want for % plugin analyses? % \begin{snippet} void init() { _h_one = bookHistogram1D(2,1,1); _h_two = bookProfile1D(3,1,2); _h_three = bookHistogram1D("d00-x00-y00", 50, 0.0, 1.0); } \end{snippet} % Here the first two bookings have a rather cryptic 3-integer sequence as the first arguments. This is the recommended scheme, as it makes use of the exported data files from HepData, in which 1D histograms are constructed from a combination of $x$ and $y$ axes in a dataset $d$, corresponding to names of the form \kbd{d\val{d}-x\val{x}-y\val{y}}. This auto-booking of histograms saves you from having to copy out reams of bin edges and values into your code, and makes sure that any data fixes in HepData are easily propagated to Rivet. The reference data files which are used for these booking methods are distributed and installed with Rivet, you can find them in the \kbd{\val{installdir}/share/Rivet} directory of your installation. The third booking is for a histogram for which there is no such HepData entry: it uses the usual scheme of specifying the name, number of bins and the min/max $x$-axis limits manually. Filling the histograms is done in the \code{MyAnalysis::analyse()} function. Remember to specify the event weight as you fill: % \begin{snippet} void analyze(const Event& e) { [projections, cuts, etc.] ... _h_one->fill(pT, event.weight()); _h_two->fill(pT, Nch, event.weight()); _h_three->fill(fabs(eta), event.weight()); } \end{snippet} Finally, histogram normalisations, scalings, divisions etc. are done in the \code{MyAnalysis::\-finalize()} method. For normalisations and scalings you will find appropriate convenience methods \code{Analysis::normalize(histo, norm)} and \code{Analysis::scale(histo, scalefactor)}. Many analyses need to be scaled to the generator cross-section, with the number of event weights to pass cuts being included in the normalisation factor: for this you will have to track the passed-cuts weight sum yourself via a member variable, but the analysis class provides \code{Analysis::crossSection()} and \code{Analysis::sumOfWeights()} methods to access the pre-cuts cross-section and weight sum respectively. \subsection{Analysis metadata} To keep the analysis source code uncluttered, and to allow for iteration of data plot presentation without re-compilation and/or re-running, Rivet prefers that analysis metadata is provided via separate files rather than hard-coded into the analysis library. There are two such files: an \emph{analysis info} file, with the suffix \kbd{.info}, and a \emph{plot styling} file, with the suffix \kbd{.plot}. \subsubsection{Analysis info files} The analysis info files are in YAML format: a simple data format intended to be cleaner and more human-readable/writeable than XML. As well as the analysis name (which must coincide with the filename and the name provided to the \kbd{Analysis} constructor, this file stores details of the collider, experiment, date of the analysis, Rivet/data analysis authors and contact email addresses, one-line and more complete descriptions of the analysis, advice on how to run it, suggested generator-level cuts, and BibTeX keys and entries for this user manual. It is also where the validation status of the analysis is declared: See the standard analyses' info files for guidance on how to populate this file. Info files are searched for in the paths known to the \kbd{Rivet::getAnalysisInfoPaths()} function, which many be prepended to using the \var{RIVET_INFO_PATH} environment variable: the first matching file to be found will be used. \subsubsection{Plot styling files} The \kbd{.plot} files are in the header format for the \kbd{make-plots} plotting system and are picked up and merged with the plot data by the Rivet \kbd{compare-histos} script which produces the \kbd{make-plots} input data files. All the analysis' plots should have a \kbd{BEGIN PLOT ... END PLOT} section in this file, specifying the title and $x$/$y$-axis labels (the \kbd{Title}, and \kbd{XLabel}/\kbd{YLabel} directives). In addition, you can use this file to choose whether the $x$ and/or $y$ axes should be shown with a log scale (\kbd{LogX}, \kbd{LogY}), to position the legend box to minimise clashes with the data points and MC lines (\kbd{LegendXPos}, \kbd{LegendYPos}) and any other valid \kbd{make-plots} directives including special text labels or forced plot range boundaries. Regular expressions may be used to apply a directive to all analysis names matching a pattern rather than having to specify the same directive repeatedly for many plots. See the standard analyses' plot files and the \kbd{make-plots} documentation (e.g. on the Rivet website) for guidance on how to write these files. Plot info files are searched for in the paths known to the \kbd{Rivet::getAnalysisPlotPaths()} function, which many be prepended to using the \var{RIVET_PLOT_PATH} environment variable. As usual, the first matching file to be found will be used. \subsection{Pluggable analyses} Rivet's standard analyses are not actually built into the main \kbd{libRivet} library: they are loaded dynamically at runtime as an analysis \emph{plugin library}. While you don't need to worry too much about the technicalities of this, it does mean that you can similarly write analyses of your own, compile them into a similar plugin library and run them from \kbd{rivet} without ever having to modify any of the main Rivet sources or build system. This means that you can write and run your own analyses with a system-installed copy of Rivet, and not have to re-patch the main library when a newer version comes out (although chances are you will have to recompile, since the binary interface usually change between releases.) To get started writing your analysis and understand the plugin system better, you should check out the documentation in the wiki on the Rivet website: \url{http://rivet.hepforge.org/trac/wiki/}. The standard \kbd{rivet-mkanalysis} and \kbd{rivet-buildplugin} scripts can respectively be used to make an analysis template with many ``boilerplate'' details filled in (including bibliographic information from Inspire if available), and to build a plugin library with the appropriate compiler options. \subsubsection{Plugin paths} To load pluggable analyses you will need to set the \var{RIVET_ANALYSIS_PATH} environment variable: this is a standard colon-separated UNIX path, specifying directories in which analysis plugin libraries may be found. If it is unspecified, the Rivet loader system will assume that the only entry is the \kbd{lib} directory in the Rivet installation area. Specifying the variable adds new paths for searching \emph{before} the standard library area, and they will be searched in the left-to-right order in the path variable. If analyses with duplicate names are found, a warning message is issued and the first version to have been found will be used. This allows you to override standard analyses with same-named variants of your own, provided they are loaded from different directories. Several further environment variables are used to load analysis reference data and metadata files: \begin{description} \item[\var{RIVET_REF_PATH}:] A standard colon-separated path list, whose elements are searched in order for reference histogram files. If the required file is not found in this path, Rivet will fall back to looking in the analysis library paths (for convenience, as it is normal for plugin analysis developers to put analysis library and data files in the same directory and it would be annoying to have to set several variables to make this work), and then the standard Rivet installation data directory. \item[\var{RIVET_INFO_PATH}:] The path list searched first for analysis \kbd{.info} metadata files. The search fallback mechanism works as for \var{RIVET_REF_PATH}. \item[\var{RIVET_PLOT_PATH}:] The path list searched first for analysis \kbd{.plot} presentation style files. The search fallbacks again work as for \var{RIVET_REF_PATH}. \end{description} These paths can be accessed from the API using the \kbd{Rivet::getAnalysisLibPaths()} etc. functions, and can be searched for files using the Rivet lookup rules via the \kbd{Rivet::find\-Analysis\-LibFile(filename)} etc. functions. These functions are also available in the Python \kbd{rivet} module. See the Doxygen documentation for more details. \section{Using Rivet as a library} You don't have to use Rivet via the provided command-line programmes: for some applications you may want to have more direct control of how Rivet processes events. Here are some possible reasons: % \begin{itemize} \item You need to not waste CPU cycles and I/O resources on rendering HepMC events to a string representation which is immediately read back in. The FIFO idiom (Section~\ref{sec:fifo-idiom}) is not perfect: we use it in circumstances where the convenience and decoupling outweighs the CPU cost. \item You don't want to write out histograms to file, preferring to use them as code objects. Perhaps for applications which want to manipulate histogram data periodically before the end of the run. \item You enjoy tormenting Rivet developers who know their API is far from perfect, by complaining if it changes! \item \dots and many more! \end{itemize} The Rivet API (application programming interface) has been designed in the hope of very simple integration into other applications: all you have to do is create a \code{Rivet::Analysis\-Handler} object, tell it which analyses to apply on the events, and then call its \code{analyse(evt)} method for each HepMC event -- wherever they come from. The API is (we hope) stable, with the exception of the histogramming parts. \begin{warning} The histogramming interfaces in Rivet have long been advertised as marked for replacement, and while progress in that area has lagger far behind our ambitions, it \emph{will} happen with the 2.0.0 release, with unavoidable impact on the related parts of the API. You have been warned! \end{warning} The API is available for C++ and, in a more restricted form, Python. We will explain the C++ version here; if you wish to operate Rivet (or e.g. use its path-searching capabilities to find Rivet-related files in the standard way) from Python then take a look inside the \kbd{rivet} and \kbd{rivet-*} Python scripts (e.g. \kbd{less `which rivet`}) or use the module documentation cf. % \begin{snippet} > python >>> import rivet >>> help(rivet) \end{snippet} And now the C++ API. The best way to explain is, of course, by example. Here is a simple C++ example based on the \kbd{test/testApi.cc} source which we use in development to ensure continuing API functionality: % \begin{snippet} #include "Rivet/AnalysisHandler.hh" #include "HepMC/GenEvent.h" #include "HepMC/IO_GenEvent.h" using namespace std; int main() { // Create analysis handler Rivet::AnalysisHandler rivet; // Specify the analyses to be used rivet.addAnalysis("D0_2008_S7554427"); vector moreanalyses(1, "D0_2007_S7075677"); rivet.addAnalyses(moreanalyses); // The usual mess of reading from a HepMC file! std::istream* file = new std::fstream("testApi.hepmc", std::ios::in); HepMC::IO_GenEvent hepmcio(*file); HepMC::GenEvent* evt = hepmcio.read_next_event(); double sum_of_weights = 0.0; while (evt) { // Analyse the current event rivet.analyze(*evt); sum_of_weights += evt->weights()[0]; // Clean up and get next event delete evt; evt = 0; hepmcio >> evt; } delete file; file = 0; rivet.setCrossSection(1.0); rivet.setSumOfWeights(sum_of_weights); // not necessary, but allowed rivet.finalize(); rivet.writeData("out"); return 0; } \end{snippet} Compilation of this, if placed in a file called \kbd{myrivet.cc}, into an executable called \kbd{myrivet} is simplest and most robust with use of the \kbd{rivet-config} script: % \begin{snippet} g++ myrivet.cc -o myrivet `rivet-config --cppflags --ldflags --libs` \end{snippet} % It \emph{should} just work! If you are doing something a bit more advanced, for example using the AGILe package's similar API to generate Fortran generator Pythia events and pass them directly to the Rivet analysis handler, you will need to also add the various compiler and linker flags for the extra libraries, e.g. % \begin{snippet} g++ myrivet.cc -o myrivet \ `rivet-config --cppflags --ldflags --libs` \ `agile-config --cppflags --ldflags --libs` \end{snippet} % would be needed to compile the following AGILe+Rivet code: % \goodbreak \begin{snippet} #include "AGILe/Loader.hh" #include "AGILe/Generator.hh" #include "Rivet/AnalysisHandler.hh" #include "HepMC/GenEvent.h" #include "HepMC/IO_GenEvent.h" using namespace std; int main() { // Have a look what generators are available AGILe::Loader::initialize(); const vector gens = AGILe::Loader::getAvailableGens(); foreach (const string& gen, gens) { cout << gen << endl; } // Load libraries for a specific generator and instantiate it AGILe::Loader::loadGenLibs("Pythia6:425"); AGILe::Generator* generator = AGILe::Loader::createGen(); cout << "Running " << generator->getName() << " version " << generator->getVersion() << endl; // Set generator initial state for LEP const int particle1 = AGILe::ELECTRON; const int particle2 = AGILe::POSITRON; const double sqrts = 91; generator->setInitialState(particle1, energy1, sqrts/2.0, sqrts/2.0); generator->setSeed(14283); // Set some parameters generator->setParam("MSTP(5)", "320"); //< PYTHIA tune // ... // Set up Rivet with a LEP analysis Rivet::AnalysisHandler rivet; rivet.addAnalysis("DELPHI_1996_S3430090"); // Run events const int EVTMAX = 10000; HepMC::GenEvent evt; for (int i = 0; i < EVTMAX; ++i) { generator->makeEvent(evt); rivet.analyze(evt); } // Finalize Rivet and generator rivet.finalize(); rivet.writeData("out.aida"); generator->finalize(); return 0; } \end{snippet} % \cleardoublepage % \part{How Rivet \emph{really} works} % \label{part:internals} % % In time this will be the place to look for all the nitty gritty on what Rivet is % doing internally. Not very many people need to know that, and the few that do % currently don't need a manual for it! % % \section{Projection caching} % \TODO{TODO} % % \subsection{Writing a Projection comparison operator} % \TODO{TODO} \cleardoublepage \part{Appendices} \appendix \section{Typical \kbd{agile-runmc} commands} \label{app:agilerunmc} \begin{itemize} \item \paragraph{Simple run:}{\kbd{agile-runmc Herwig:6510 -P~lep1.params --beams=LEP:91.2 \cmdbreak -n~1000} will use the Fortran Herwig 6.5.10 generator (the \kbd{-g} option switch) to generate 1000 events (the \kbd{-n} switch) in LEP1 mode, i.e. $\Ppositron\Pelectron$ collisions at $\sqrt{s} = \unit{91.2}{\GeV}$.} \item \paragraph{Parameter changes:}{\kbd{agile-runmc Pythia6:425 --beams=LEP:91.2 \cmdbreak -n~1000 -P~myrun.params -p~"PARJ(82)=5.27"} will generate 1000 events using the Fortran Pythia 6.423 generator, again in LEP1 mode. The \kbd{-P} switch is actually the way of specifying a parameters file, with one parameter per line in the format ``\val{key} \val{value}'': in this case, the file \kbd{lep1.params} is loaded from the \kbd{\val{installdir}/share/AGILe} directory, if it isn't first found in the current directory. The \kbd{-p} (lower-case) switch is used to change a named generator parameter, here Pythia's \kbd{PARJ(82)}, which sets the parton shower cutoff scale. Being able to change parameters on the command line is useful for scanning parameter ranges from a shell loop, or rapid testing of parameter values without needing to write a parameters file for use with~\kbd{-P}.} \item \paragraph{Writing out HepMC events:}{\kbd{agile-runmc Pythia6:425 --beams=LHC:14TeV -n~50 -o~out.hepmc -R} will generate 50 LHC events with Pythia. The~\kbd{-o} switch is being used here to tell \kbd{agile-runmc} to write the generated events to the \kbd{out.hepmc} file. This file will be a plain text dump of the HepMC event records in the standard HepMC format. Use of filename ``-'' will result in the event stream being written to standard output (i.e. dumping to the terminal.} \end{itemize} \section{Acknowledgements} \label{app:acknowledgements} Rivet development has been supported by a variety of sources: \begin{itemize} \item All authors aknowledge support from the EU MCnet research network. MCnet is a Marie Curie Research Training Network funded under Framework Programme 6 contract MRTN-CT-2006-035606. \item Andy Buckley has been supported by grants from the UK Science and Technology Facilities Council (Special Project Grant), the Scottish Universities Physics Alliance (Advanced Research Fellowship), the Institute for Particle Physics Phenomenology (Associateship), and a CERN Scientific Associateship. \item Holger Schulz acknowledges the support of the German Research Foundation (DFG). \end{itemize} We also wish to thank the CERN MCplots (\url{http://mcplots.cern.ch}) team, and especially Anton Karneyeu, for doing the pre-release testing of the Rivet 1.5 series and later and pointing out all the bits that we got wrong: Rivet is a much better system as a result! \cleardoublepage \part{Bibliography} \bibliographystyle{h-physrev3} {\raggedright \bibliography{refs,analyses} } \end{document} rivet-1.8.3/doc/refs.bib0000644000175000017500000004012712116077755013251 0ustar sunsun@Article{Sherstnev:2008dm, author = "Sherstnev, A. and Thorne, R. S.", title = "{Different PDF approximations useful for LO Monte Carlo generators}", year = "2008", eprint = "0807.2132", archivePrefix = "arXiv", primaryClass = "hep-ph", doi = "10.3360/dis.2008.149", SLACcitation = "%%CITATION = 0807.2132;%%" } @Article{Lai:1999wy, author = "Lai, H. L. and others", collaboration = "CTEQ", title = "{Global {QCD} analysis of parton structure of the nucleon: CTEQ5 parton distributions}", journal = "Eur. Phys. J.", volume = "C12", year = "2000", pages = "375-392", eprint = "hep-ph/9903282", archivePrefix = "arXiv", doi = "10.1007/s100529900196", SLACcitation = "%%CITATION = HEP-PH/9903282;%%" } @Article{Lai:1994bb, author = "Lai, H. L. and others", title = "{Global QCD analysis and the CTEQ parton distributions}", journal = "Phys. Rev.", volume = "D51", year = "1995", pages = "4763-4782", eprint = "hep-ph/9410404", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.51.4763", SLACcitation = "%%CITATION = HEP-PH/9410404;%%" } @Article{Decamp:1991uz, author = "Decamp, D. and others", collaboration = "ALEPH", title = "{Measurement of the charged particle multiplicity distribution in hadronic Z decays}", journal = "Phys. Lett.", volume = "B273", year = "1991", pages = "181-192", doi = "10.1016/0370-2693(91)90575-B", SLACcitation = "%%CITATION = PHLTA,B273,181;%%" } @Article{Barate:1996fi, author = "Barate, R. and others", collaboration = "ALEPH", title = "{Studies of quantum chromodynamics with the ALEPH detector}", journal = "Phys. Rept.", volume = "294", year = "1998", pages = "1-165", doi = "10.1016/S0370-1573(97)00045-8", SLACcitation = "%%CITATION = PRPLC,294,1;%%" } @Article{Knutsson:2008qs, author = "Knutsson, A. and Bacchetta, A. and Jung, H. and Kutak, K.", title = "{An approach to fast fits of the unintegrated gluon density}", year = "2008", eprint = "0808.0847", archivePrefix = "arXiv", primaryClass = "hep-ph", doi = "10.3360/dis.2008.45", SLACcitation = "%%CITATION = 0808.0847;%%" } @Article{Buckley:2006np, author = "Buckley, A. and others", title = "{HepData and JetWeb: HEP data archiving and model validation}", year = "2006", eprint = "hep-ph/0605048", archivePrefix = "arXiv", SLACcitation = "%%CITATION = HEP-PH/0605048;%%" } @Article{Buckley:2008vh, author = "Buckley, Andy", title = "{Tools for event generator tuning and validation}", year = "2008", eprint = "0809.4638", archivePrefix = "arXiv", primaryClass = "hep-ph", SLACcitation = "%%CITATION = 0809.4638;%%" } @Article{Buckley:2007hi, author = "Buckley, Andy", title = "{CEDAR: tools for event generator tuning}", journal = "PoS", volume = "ACAT2007", year = "2007", pages = "050", eprint = "0708.2655", archivePrefix = "arXiv", primaryClass = "hep-ph", SLACcitation = "%%CITATION = 0708.2655;%%" } @Article{Waugh:2006ip, author = "Waugh, B. M. and others", title = "{HZTool and Rivet: Toolkit and framework for the comparison of simulated final states and data at colliders}", year = "2006", eprint = "hep-ph/0605034", archivePrefix = "arXiv", SLACcitation = "%%CITATION = HEP-PH/0605034;%%" } @Article{Gleisberg:2008ta, author = "Gleisberg, T. and others", title = "{Event generation with Sherpa 1.1}", year = "2008", eprint = "0811.4622", archivePrefix = "arXiv", primaryClass = "hep-ph", SLACcitation = "%%CITATION = 0811.4622;%%" } @Article{Bromley:1995np, author = {J.~Bromley and others}, note = "ZEUS and H1 Collaborations", title = "{\textsc{HZTool}: A package for Monte Carlo-data comparison at HERA (version 1.0)}", year = 1995 } @Article{Dobbs:2001ck, author = "{M.~Dobbs and J.~B.~Hansen}", title = "{The HepMC C++ Monte Carlo event record for High Energy Physics}", journal = "Comput. Phys. Commun.", volume = "134", year = "2001", pages = "41-46", doi = "10.1016/S0010-4655(00)00189-2", SLACcitation = "%%CITATION = CPHCB,134,41;%%" } @Article{Cacciari:2005hq, author = "Cacciari, Matteo and Salam, Gavin P.", title = "{Dispelling the $N^{3}$ myth for the $k_t$ jet-finder}", journal = "Phys. Lett.", volume = "B641", year = "2006", pages = "57-61", eprint = "hep-ph/0512210", archivePrefix = "arXiv", doi = "10.1016/j.physletb.2006.08.037", SLACcitation = "%%CITATION = HEP-PH/0512210;%%" } @Article{fastjetweb, author = "{M.~Cacciari and G.~Salam and G.Soyez}", title = "{FastJet} Web site", note = "http://www.fastjet.fr" } @Article{Cacciari:2006sm, author = "{M.~Cacciari and G.~Salam and G.Soyez}", title = "{FastJet: Dispelling the N**3 myth for the k(t) jet-finder}", year = "2006", eprint = "hep-ph/0607071", archivePrefix = "arXiv", SLACcitation = "%%CITATION = HEP-PH/0607071;%%" } @Article{Corcella:2002jc, author = "G.~Corcella and others", title = "{\textsc{Herwig} 6.5 release note}", year = "2002", eprint = "hep-ph/0210213", archivePrefix = "arXiv", SLACcitation = "%%CITATION = HEP-PH/0210213;%%" } @Article{Sjostrand:2006za, author = "Sjostrand, Torbjorn and Mrenna, Stephen and Skands, Peter", title = "{\textsc{Pythia} 6.4 physics and manual}", journal = "JHEP", volume = "05", year = "2006", pages = "026", eprint = "hep-ph/0603175", archivePrefix = "arXiv", SLACcitation = "%%CITATION = HEP-PH/0603175;%%" } @Article{Bahr:2008pv, author = "Bahr, M. and others", title = "{Herwig++ Physics and Manual}", journal = "Eur. Phys. J.", volume = "C58", year = "2008", pages = "639-707", eprint = "0803.0883", archivePrefix = "arXiv", primaryClass = "hep-ph", doi = "10.1140/epjc/s10052-008-0798-9", SLACcitation = "%%CITATION = 0803.0883;%%" } @Article{Bahr:2008tf, author = "{B\"ahr}, M. and others", title = "{Herwig++ 2.3 Release Note}", note = "Herwig++ Collaboration", year = "2008", eprint = "0812.0529", archivePrefix = "arXiv", primaryClass = "hep-ph", SLACcitation = "%%CITATION = 0812.0529;%%" } @Article{Mangano:2002ea, author = "Mangano, Michelangelo L. and Moretti, Mauro and Piccinini, Fulvio and Pittau, Roberto and Polosa, Antonio D.", title = "{\textsc{AlpGen}, a generator for hard multiparton processes in hadronic collisions}", journal = "JHEP", volume = "07", year = "2003", pages = "001", eprint = "hep-ph/0206293", archivePrefix = "arXiv", SLACcitation = "%%CITATION = HEP-PH/0206293;%%" } @Article{Harris:2003db, author = "Harris, C. M. and Richardson, P. and Webber, B. R.", title = "{\textsc{Charybdis}: A black hole event generator}", journal = "JHEP", volume = "08", year = "2003", pages = "033", eprint = "hep-ph/0307305", archivePrefix = "arXiv", SLACcitation = "%%CITATION = HEP-PH/0307305;%%" } @Article{Butterworth:1996zw, author = "Butterworth, J. M. and Forshaw, Jeffrey R. and Seymour, M. H.", title = "{Multiparton interactions in photoproduction at HERA}", journal = "Z. Phys.", volume = "C72", year = "1996", pages = "637-646", eprint = "hep-ph/9601371", archivePrefix = "arXiv", doi = "10.1007/s002880050286", SLACcitation = "%%CITATION = HEP-PH/9601371;%%" } @Article{Sjostrand:2008vc, author = "Sjostrand, Torbjorn", title = "{Pythia 8 Status Report}", year = "2008", eprint = "0809.0303", archivePrefix = "arXiv", primaryClass = "hep-ph", SLACcitation = "%%CITATION = 0809.0303;%%" } @Article{Sjostrand:2007gs, author = "Sjostrand, Torbjorn and Mrenna, Stephen and Skands, Peter", title = "{A Brief Introduction to PYTHIA 8.1}", journal = "Comput. Phys. Commun.", volume = "178", year = "2008", pages = "852-867", eprint = "0710.3820", archivePrefix = "arXiv", primaryClass = "hep-ph", doi = "10.1016/j.cpc.2008.01.036", SLACcitation = "%%CITATION = 0710.3820;%%" } @Article{Abreu:1996na, author = "Abreu, P. and others", collaboration = "{\textsc{Delphi}}", title = "{Tuning and test of fragmentation models based on identified particles and precision event shape data}", journal = "Z. Phys.", volume = "C73", year = "1996", pages = "11-60", doi = "10.1007/s002880050295", SLACcitation = "%%CITATION = ZEPYA,C73,11;%%" } @Article{Hamacher:1995df, author = "Hamacher, Klaus and Weierstall, Michael", title = "{The Next Round of Hadronic Generator Tuning Heavily Based on Identified Particle Data}", year = "1995", eprint = "hep-ex/9511011", archivePrefix = "arXiv", SLACcitation = "%%CITATION = HEP-EX/9511011;%%" } @Article{Amsler:2008zz, author = "Amsler, C. and others", collaboration = "{Particle Data Group}", title = "{Review of particle physics}", journal = "Phys. Lett.", volume = "B667", year = "2008", pages = "1", doi = "10.1016/j.physletb.2008.07.018", SLACcitation = "%%CITATION = PHLTA,B667,1;%%" } @Article{delphi-2002, author = "G. Barker and others", collaboration = "{\textsc{Delphi}}", title = "{A Study of the $b$-Quark Fragmentation Function with the DELPHI Detector at LEP I}", year = "2002", eprint = "DELPHI 2002-069 CONF 603", } @Comment Was opal-1998 @Article{Ackerstaff:1998hz, author = "Ackerstaff, K. and others", collaboration = "{\textsc{Opal}}", title = "{Measurements of flavour dependent fragmentation functions in $Z^0 \to q \bar{q}$ events}", journal = "Eur. Phys. J.", volume = "C7", year = "1999", pages = "369-381", eprint = "hep-ex/9807004", archivePrefix = "arXiv", doi = "10.1007/s100529901067", SLACcitation = "%%CITATION = HEP-EX/9807004;%%" } @Article{numpy, author = {Travis E. Oliphant}, title = {Python for Scientific Computing}, journal ={Computing in Science and Engineering}, volume = {9}, number = {3}, issn = {1521-9615}, year = {2007}, pages = {10-20}, doi = {http://doi.ieeecomputersociety.org/10.1109/MCSE.2007.58}, publisher = {IEEE Computer Society}, address = {Los Alamitos, CA, USA}, note = "NumPy website: {http://numpy.scipy.org}" } % citing scipy: http://www.scipy.org/Citing_SciPy @Unpublished{scipy, author = {Eric Jones and Travis Oliphant and Pearu Peterson and others}, title = {{SciPy}: Open source scientific tools for {Python}}, year = {2001--}, note = "SciPy website: {http://www.scipy.org/}" } @Unpublished{pyminuit, author = "Jim Pivarski", title = "{PyMinuit} website: {http://code.google.com/p/pyminuit/}" } @Article{Affolder:1999jh, author = "T. Affolder and others", collaboration = "CDF", title = "{The transverse momentum and total cross section of $e^+e^- $ pairs in the $Z$ boson region from $p\bar{p}$ collisions at $\sqrt{s} = 1.8$ TeV}", journal = "Phys. Rev. Lett.", volume = "84", year = "2000", pages = "845-850", eprint = "hep-ex/0001021", archivePrefix = "arXiv", doi = "10.1103/PhysRevLett.84.845", SLACcitation = "%%CITATION = HEP-EX/0001021;%%" } @Article{Affolder:2001xt, author = "T. Affolder and others", collaboration = "CDF", title = "{Charged jet evolution and the underlying event in $p\bar{p}$ collisions at 1.8 TeV}", journal = "Phys. Rev.", volume = "D65", year = "2002", pages = "092002", doi = "10.1103/PhysRevD.65.092002", SLACcitation = "%%CITATION = PHRVA,D65,092002;%%" } @Article{Acosta:2001rm, author = "D. Acosta and others", collaboration = "CDF", title = "{Soft and hard interactions in $p\bar{p}$ collisions at $\sqrt{s}=$ 1800-GeV and 630-GeV}", journal = "Phys. Rev.", volume = "D65", year = "2002", pages = "072005", doi = "10.1103/PhysRevD.65.072005", SLACcitation = "%%CITATION = PHRVA,D65,072005;%%" } @Article{Acosta:2004wqa, author = "D. Acosta and others", collaboration = "CDF", title = "{The underlying event in hard interactions at the Tevatron $\bar{p}p$ collider}", journal = "Phys. Rev.", volume = "D70", year = "2004", pages = "072002", eprint = "hep-ex/0404004", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.70.072002", SLACcitation = "%%CITATION = HEP-EX/0404004;%%" } @Article{cdf-note9337, author = "N. Moggi and others", collaboration = "CDF", title = "{Measurement of Inelastic $p \bar p$ Inclusive Cross Sections at $\sqrt{s} = \text{1.96 GeV}$}", year = "2008", eprint = "CDF Note 9337", } @Article{cdf-note9351, author = "D. Kar and R. Field", collaboration = "CDF", title = "{Using Drell-Yan to Probe the Underlying Event in Run 2 at CDF}", year = "2008", eprint = "CDF Note 9351", } @Article{cdf-leadingjet, author = "R. Field", collaboration = "CDF", title = "{Underlying Event Studies in Leading Jet Events}", year = "unpublished", eprint = "private communication with Rick Field", } @Article{Abazov:2004hm, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of dijet azimuthal decorrelations at central rapidities in $p\bar{p}$ collisions at $\sqrt{s} = 1.96$ TeV}", journal = "Phys. Rev. Lett.", volume = "94", year = "2005", pages = "221801", eprint = "hep-ex/0409040", archivePrefix = "arXiv", doi = "10.1103/PhysRevLett.94.221801", SLACcitation = "%%CITATION = HEP-EX/0409040;%%" } @Article{Whalley:2005nh, author = "Whalley, M. R. and Bourilkov, D. and Group, R. C.", title = "{The Les Houches Accord PDFs (LHAPDF) and Lhaglue}", year = "2005", eprint = "hep-ph/0508110", archivePrefix = "arXiv", SLACcitation = "%%CITATION = HEP-PH/0508110;%%" } @Article{Jung:2000hk, author = "Jung, H. and Salam, G. P.", title = "{Hadronic final state predictions from CCFM: The hadron- level Monte Carlo generator CASCADE}", journal = "Eur. Phys. J.", volume = "C19", year = "2001", pages = "351-360", eprint = "hep-ph/0012143", archivePrefix = "arXiv", doi = "10.1007/s100520100604", SLACcitation = "%%CITATION = HEP-PH/0012143;%%" } @Article{Antcheva:2009zz, author = "Antcheva, I. and others", title = "{ROOT: A C++ framework for petabyte data storage, statistical analysis and visualization}", journal = "Comput. Phys. Commun.", volume = "180", year = "2009", pages = "2499-2512", doi = "10.1016/j.cpc.2009.08.005", SLACcitation = "%%CITATION = CPHCB,180,2499;%%" } rivet-1.8.3/doc/maybemath.sty0000644000175000017500000000423712116077755014346 0ustar sunsun\ProvidesPackage{maybemath}[2005/2/22 v1.1] \RequirePackage{amsmath} \RequirePackage{bm} %\RequirePackage{xspace} %% A few commands for making math fonts bold, upright, italic %% or sans-serif according to the context of surrounding text. %% It is particularly useful for avoiding problems with math %% boldness in section titles causing unwanted boldness %% in e.g. the table of contents. %% %% Thanks to Viet-Trung Luu on comp.text.tex for providing %% the first steps to solving this problem. %% %% This material is subject to the LaTeX Project Public License. %% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html %% for the details of that license. %% %% Author: Andy Buckley %% Mode names for bold, ext-bold, italic and sans-serif contexts \def\@boldname{b}% \def\@boldexname{bx}% \def\@italname{it}% \def\@sfname{cmss}% %% Use the bold symbol if reqd for math fonts \DeclareRobustCommand{\maybebm}[1]{\ensuremath{% \ifx\f@series\@boldname% {{\bm{#1}}}% \else\ifx\f@series\@boldexname% {{\bm{#1}}}% \else% {{#1}}% \fi\fi% }} %% Use \mathrm if not in italic context \DeclareRobustCommand{\mayberm}[1]{\ensuremath{% \ifx\f@shape\@italname% {#1}% \else% {\mathrm{#1}}% \fi% }} %% Use \mathit if in italic context \DeclareRobustCommand{\maybeit}[1]{\ensuremath{% \ifx\f@shape\@italname% {\mathit{#1}}% \else% {#1}% \fi% }} %% Use \mathrm if not in italic context %% and \mathit if in italic context \DeclareRobustCommand{\maybeitrm}[1]{\ensuremath{% \ifx\f@shape\@italname% {\mathit{#1}}% \else% {\mathrm{#1}}% \fi% }} %% Maybe-italic subscript shifting \DeclareRobustCommand{\maybeitsubscript}[1]{\ensuremath{% \ifx\f@shape\@italname% {\!\mspace{1mu}#1}% \else% {#1}% \fi% }} %% Maybe-sans font change \DeclareRobustCommand{\maybesf}[1]{\ensuremath{% \ifx\f@family\@sfname% {\mathsf{#1}}% \else% {#1}% \fi% }} %% Convenience command for following bold and sans-serif contexts \DeclareRobustCommand{\maybebmsf}[1]{% {\maybebm{\maybesf{#1}}}% } %% For reference purposes :-) %\DeclareRobustCommand{\maybemath}{\texttt{maybemath}\xspace} rivet-1.8.3/doc/rivet-manual.pdf0000644000175000017500000315542012131101213014707 0ustar sunsun%PDF-1.5 %ÐÔÅØ 13 0 obj << /Length 1152 /Filter /FlateDecode >> stream xÚÕ—Ënã6†÷~ -%`|Ê«.]9é8Sp'tQt¡Øt¤Z–R]2ðtÑW/ER5Ç–af5HQÐOòðÿxÈì ùƒ¥¡ðüÈw6‡ 2_ölZS#šZªÛõä‡;88‚9sÖ»n(?ÀÀ9vÖ[ç÷Cú*joJýÀm*Q¶-ß=ÄygÞŸë=Ê|Òœ)a€MçWQVi‘ëîB mŸÉ|=ùûÿغIq(ä]üŒ„À£ÈÁÀ"æ”ÂÙM~;…Œ B¶Bæ!Ÿ…zÖ›|{ÔSÞ6›}&Ž:P¹¢"Ÿøm?Lœ)øT÷Y­æ² ÝŸKc·h^ÞµïûèM±»ñ°›´ÂãÄ-2--vú¹JŽUº©Þé·yª–]õj¾Mó§FþœtÚ_ ­u SÀ\Ç2Ÿâ4û±³ª3 S˜FçUNAäÈßö³ÅºÓM-¡rŽÛ€³ÑÔ̱tž´i3±…xÍþ<Â0DoÇѳã:ÕEýüHtbñPäqÄyǰ®EùÉ£­û¹e ñô3³óîç«~žïÅKÝ’oÊxtÎP¿Ht㦪u÷¼8ÍZzKýi[ä8ñ(ž,’ËðÛ<-á0ÏN¤ã^!]›5›l€('Àh`GÒGÔ¨.âè%Ê‘L`MCäÛ2Ýk ÷…|"WŒâ¸X­VÆÝ÷M™Ä;ÉdV¶yömî3Œpÿ$¼â¾©™½jH ¹ÖÙF”9l’¡l²†¿–MçQô{OÔ×Q,EºÓÆ/ÿõ8GrÇæOY¼½f>Ñ]׉P[\倨ÓMûŒ3_žz˦˙Óù× ŸÚ|íɹù×0¢ÆèÛŒ,á0£N¤fÎŒ³:/5P‰ BT^‡òl¶ï#dT1ô¢~,06?ÄQiD¿ù~˜ïèt£ ¢ìNÂ+ìŒHÍü×Aº5k¹ Ÿl»ÓàWÙÅÐÏN’ ÈÔ÷Eö¬«"¹Ñ7I“}Ql,òªNë¦Ö¾JF˜º27 s›ÒJ®½1þV”Yšëö}sxR`²mmˆ}™orOˆRÖgǯEdÈzëMX–pV'Ò‡¡2 *åÑìE­’fú¤Û‹´£HöfvH=äŒè"ž^pÄG’®Èèꋹ¼—h{>©·W]­úî£xV`±›×DeaÅЈô³„Wˆ‘.î+eQ>& d9†v8}yhTÁôãD\Ö#&ïZ†e¬xí ÁTÈðê1Å¿Z@œ¥rw sJvD͹x羫ïÁT–]!ß{å}00@dD ZÂa`Hͼ+ã|•¶å­zÄþZ=rE/)Ì nÌ^Æ •¹ðåý+òÖ÷4qñ}ð0"îïë{sƒ©‚DvÎ2g±XÀé loE¹ PÒµîÉ#çrOùçC_c:)Aø# |Kx©3Ë l±úÂ(°céÃjT‘È•ZXIÈåA*ÿe— ˜¤I”º¸}0ùf¦ÿ"Ôê endstream endobj 23 0 obj << /Length 696 /Filter /FlateDecode >> stream xÚ…TK›0¾çWp4Ò‚yô¶»Ý­ú:´Ê­íÁ'±Jpd›Dù÷µ=†h¥J‘ÂÌ|ž™o^ÏëÕã%Qž¥MÖäÑzÕ$%¤Ž*š¥9ŽÖ]ô =m´Q,ƵæCügýåñ-§Ë7´I))£ àë½ÐqBp†üÞ ³ç 8°!Æ5Y2:@Œš+PíFÑôVª»÷?ÅɽçD}ц8Α >fü)¦%b½è˜r¸Æ´¢$dä…%R@îfİ‹“[o[øÿn_â â S½„O~rî9PíøÀ3Ré4Nª¬FOÚ0:ûÄû`,h}¦NÑJ¾<ÇÊstb/6Š©K\ô`5±o„Û¢œŽQvË¥ãºUb'.°ë¡¡2¤°g;:Çs²ùæR¼lnŽË”sw•8ÙÔÞ‚S\×ì¨äN±x†6Û¨!ô«Ñó¶v¨Óqšcë¦Ý¡÷Ród˜G pÓªásrF‡™|pEÚ0eü@9ÌYL)Íè Ó¢½ºz§‹£†÷qÓLo¦ÙêZéûëW¦*ÐY cx°m\‘/`6¤Ò.­zªHåûqõcÉÂv©9¢gyÙ  eÇ ½$(]àÃÀÏïYî®m(X±;kýäa<§ÄìGËúvì=O+œJôhùVHaëìšÁÌÞ1šdöŽAä¯ürv×KªNûûµz]¯r Ê¢<Ê‹*­q•MqÙDía•6‘ý9óß–L¸d|vçóv îÝù^ùt'ýy‿ÊÀ9(o”p¢‚ðãåã=¡"ÃiÕÜÊ‚iAgBý‡Î½3O'Bþ@ú›Ü endstream endobj 96 0 obj << /Length 2501 /Filter /FlateDecode >> stream xÚ­[ËR$·ÝóµlèêýXr1ãabÂ3vã•ËhæeèÛ៿ª’De‰Væ-SáôqN*ÏQêÕþãHt<þ':¯˜R¾sÚ2ç]wuwô˯¼»ŽûÐq&º?‡¸»NKÏLñ÷Ûn}ôãÑ/þóÎØNŒ‘Ýåo/PÜ1mMwyÝý²:{¸?Vbµß¦ÏÇ¿^~8:¿¬é­L9Õӳб0üõ÷—¨“v↔êg(ACâc`VÈÈó_ _ ¢ø¦P;> Ü®.âxåjÿôp|^½Úïb%ªT 7ÌÆJQ£/qD:5Ü{EÚ+¦QÍ= Vv'Â0îd35Á% ®OÍZ¦¸xIM˜Z +QIöJ!, Bwí@r%Š"–åÖNI/¥_ýýx|<|yÚ<Þ쮢FJ­®¢@ñ¿K·Ú¿öš=¿Í2íL±!ZŠ#’¬á†$}S4´.eŽž¨Àœôôl’–`§ƒÓ¹ ‰]¼šMž)í:€th6¥ ‚OpÁ\pSÂï·ûýîþKTÈ™Õó~ó´ß^§îö7é·Ÿvßúæ²Ýš_R(˜]s~õqD‚5Ü`hJ…–äEªѤ¥â<ÚD/ ‰ÉV㑰ƇóM¡`ãûñkœO±åý>ˆÕìx#<ÑñÐÍ'¯ÒÚ#ûµgø¸¹ßÜþý¼}µiÐ!0‹H£ÄÙÕp”PhAæ7>˜pššD9*I…4¾ D8i™Dôòf›&л‹wý¦îSú´»Þ=Ü5gÒHCÌ$4Ÿ. $›¡5˜ßå„f‚+J •jw¹ '-AÒÓa¶ìž“.qðÿúÜf„'„Aó¨á(aбϞ9ý¼åŠ:$•¨,Œj Ð0aÒ,Ì„ôü¯M¿äôÄq,'­ÇĈŠCàÓî[Úv×°*.›±"9ì*-gMqAЏ¸øXj¸$®j‰‹×oîú¥]TO|ý*ACfº±~$dý"ø¦PpýúùùeõÚŒ0~ºÞÄUL¬6­Å 0⋞Z —TÒM•ÐjÌîÚ8æ-µ,QI§öâÐÐ)ˆ“–)Ißïž÷ýýÄ]jŽqŸ~·Ù·'ÐH@L 4“Ž’ýüî¨%sÁRÒä¨,MsÙh¨48i‘’žÝ<<>¾œ¨nŠPmqF B4—.‰cšâ ãŸ?o¤cNJœ•Åi/]#*NZĤ?ôåv÷8iÑ’~¾}ד3îæ)ÿ»î—¢MS®‘” Í®†KrÙ¦\hEæÞ¼ª~QN:xóZ‚òÍ뉯ï_ƒbNuî@r)†àÜÅ#H˜’®÷Q ÍÓu}Ï:|lŸu=ÓÞäÛ…G$VÃ%šÏx)ænê”¶Ì+⽩ ™™Æ¦ !›:‚o 7uÏ?—-Ýuúeýñ¬ÿE“w€ßÖáÉÕp”Nh=f·?¥s–:Y•¨¤T{[аöGæö7!=B½/´ŒÄÖ²œ_H€ðVÿòêNM_a+ZÇc_SSZ‚8À$ÓÁ.CL¤ SÚµÔÊH¯[­oåx¥k8Êz¨º³wF*ÚÁRÏ9(¯¹i±Pß¡ŒÅv€‘p]Œô>,ã:ÀMgÓ-ÁZLX×J‚lzî¥x„å°"W`i¸ÍW[TÕù­.r[A`KTv\s'ÐPËá¤Ås”0] õ ðí¦ƒ´„ë– -®ƒ´k¥½åÁ4m7ðZé.¹éX ·ˆù&Ä­3n2ß"´É|Öµ –ÇÖ×2¨ n>¼Ô5\2_óM—w¾ù|d'oWJT1Ÿhšo„C͇³óAVÒ|1X.´æNˆã~#æ[‚6›²®µ’ÞËæÕ¨ a>´Ô5\qó—wöICX3üB˜/GóɦùF8Ô|8k1d%ÍÏù»´o7$ns³ù– Í惬Üh·²;q~R)9FLYÏ>ýðî­‰«h¦EhM¿å[ÑÿÞë¶?œû)í§ÏÇ^­N?>Ó‹ –¡Žgz]øðÒ"…‹>ð‹ÐJ—'!¦´ë~Síy{c3jGع†KCn>áÆš¿¶(Ãáò–(‚Súè`ÙÅZ{™íþOú¢«H_pý§Ðÿ »™ endstream endobj 240 0 obj << /Length 2738 /Filter /FlateDecode >> stream xÚ­œMo$Ç †ïús”êT‹õqt¼ë ‹… u3|XØÎÅAâ A?ŸjM—‡Õ²ØX†? Z¾-òÙGÓÞõ×þòïÂR3^rLK†|ùþ—‡¥^ÚßÛ—zðû±ç~î™üãËþòØj,ÕUyùÛ›r/?\¾}Äŧ§ï^><¼ù½ aTi®Û¿DS÷S³ÔP—Ò˜úÍ_ž <~ñ±'ÿã–eÉáõt…´Õüö;wù¡}íÃÅ-PËå?¯'¹À2´ÿúù²>üõnròK­0&ûZñNj‰KÜ/ò³cKnqeŒ]Á×Õ[Î/.”éˆû¹I³å^³!¼Iõ­3íËò€£+KM¡Mè× ·Ÿêèe½[9=9µ£GSçè·C&7ô’€žElGÆ®0çRYôn=œ '6ûXè‰>‡žWYÏÖ+,z^g=¯²ž?e=oh=?Z/ èyCëùÁzP“wŽEÏk­çUÖ£ÙYô¼õœÊzn´^eÑs:ë9•õÜ)ë9Cë9¯FÏZÏ ÖK®„,zNk=§²ÍdÑsJë-Îù9~©l$§ ~ýÔŽ_p~¤œ„ß$uÇoHâ·¶ÂoHnø?“Ø¿!v…ìB¨‘ÃôPÆOnö±Ü¿Äá'ø”ùRöôöS=Ï¢w+'¢'§vôhê½lg¾!y‚^¶3ßÛЋµºÂ¢wëá=±ÙÇrWô2‹ž8àsè¡Êz8Z/°è¡Îz¨²ž²ZõÖCCëáh½âbaïrI'è¡Êz4 ‹ÚY/ª¬Gë‹^ÔY/ª¬OY/nÍAôhrp·×ûwгˆíèÑØ5F_’c_ï‘NЋ*ëÑl¨,zÑÎzAe½0Z/²èõ‚Êzá”õB²C&7ô¼€žElGÆ®JM,zAk½ ²ÍŽŽE/ØYÏ«¬çGë!‹ž×YÏ«¬çOYÏZÏÖ zÞÐz4vEH> ·^k=¯²ÍŽžEÏ›Y«ÆzýTGÝhrz“Ô½!uŠÞvÚ ½!¹¡yôLbwô†Ø5y!²?pIeôäfË]Ñc7ò€Ï¡W4Öë§:zìFƒ”Ñ+ë ©ëÇwwækkHx=ùÙóÇvľWf›‘qI¹ØÄæ6-ô‡oZ€ì[ʤìŠÆxCvd·òpÏa—TÆK£ñØm)'b—TÆ£©2v)Ùa—Æ;Û*`gÛ±Kãm„ ìZÒ¿ vIe;šÙM†<ÜsØ¡Êv8ÚŽÝdr"v¨²ªm‡†¶Ãù뻎ÚnøfcIµýB;ÔÚU¶£Ù‘ÝbÈÃ=‡¨lƒí€Ý`r"v ²¨m†¶ƒùk»ŽÚnøf1UpÀ>2@ú7ÁT¶£Ù‘Ý^ÈÃmjXÛp6f€½¶ ÀviíBr‚ß/ €^Ú~ªz½²7VêÒnu.¤ÒëÚÍòÆR¯yËÓsuéñ婦Çÿý”âã§ýóï¿>=C»Óøôë§ŸÿûÛ¿¯)ÖÚô¢î¶¡Ÿ›\×±ÜuDì»ür+N™!V®ë¾ú©ë€–·û¥íÑ/¤Ú=1ì§f¡»†Ð/ß}uïž/,¯±ÛwüybhÆ ‡T_˽7øs»Qk¿LbÛKZ×î[‡ØÕ—„MœHÿd1È>–›P'÷uÅi¨+T K`©+NEÚ©£¡2uí¤u4µ½øvu±:»Wjˆì¬¤êÄFË]©c×JòpO?ËÓq˜‘·ŸÚÉ–¼[5‘<9´“GCeò’¡ïhj#/ ä%CßÑØ5T ÞñäÝú7!Olô±Ü•> stream xÚµZ]s[·}ç¯ÀcúP»øÎx2nšq?&ÉØî“Dztk)VHIµq}ˆ½ "çB–‰ÎP÷ƒ¼: ìbï‚XEŠ‚W¬¬IÊ*çñ§|Ê«h£ *Ť¢"cY%E”XeE–ýŠœ"ß)òÆ)Æ¥Ïø˜‘X1.“Šñ{JYe¯(ܞʥÃs —Á¬8ã24DqÎh áC^زµêøqYY‡p,~ò)(‹O?ZkH-þ5;»²Y9ãËA9‚GÊ1pAéð…rGµ8;傸Q.FœñI¹Ü(o Æ%å‰Ó ÔžËQÞ‚ß“ò.áÌʃ³ÊGèòè¿0ïK?âT0 _¢7 ü>©`)®Ð´à *<@©ПŸ˜qƒŸ²)©h€ ¨Hh\ 4ÁB gØý¿ YÅÀåa#ÄER11ÃlѪDg§Ã(Ñ«dÑ)œ\(ÿ¤`.€$•BŽ+\¦D¸1*eôS"• _F•‡­Ê¥?!-—þDS²·åŸdã>ª XR9C€Œ¡r‡ âq°ÚͶüÆè‘ŒÁC&Cú$—ÆhD¶¸p¦Œ¶€+Ïx4xÈÑŠ|œFe –ašÊ¸Æƒ#pˆ©ŒDô.1»òðØ–_ÐÃËšãL …½L úüàxölµ~ýéã¤Ö?]¼ŸVë?o7‡isØc:`½\­_NûíÝîrÚ—9qüæÓÕÍÅ÷Û_Õƒ/|öšÝM:å·+àì ØÔ§ÿ´Ùl÷Fÿ[ññxÄÆœ,G<†ã1éxÌÇãÛÕwßÝkämµþ~»»švµæmiäåA½Á Ö„^÷ž´A¿0š”Ñ4ŒdMÞâ¹WwïGœo6€¦ž=SëWjýÏ—«‡o~¹¸¹=l¿½Ø\}Òïî.?ÜNŸžOWúâRß}øƒB[žÞ—3šAÅAhgË :»ê‹›ówýýÝá0íþ³Ý®Ÿß]Þž× t4±õ<†ìŸÒ ëisµ»ù ¯·t9í6úòú+›c3i.ŽÒ’öðÎm?¥9·ÛÍæÝíÅÕóÃõôQßÞéýôµ±Q77ƺ¨MNOiÌÏ¿l7ž—†œk(N¬=&½5NÃÃ1:*Ò“Æñõööý´ÓûËë»Ûÿ>ÿxýi_Œv÷ÇwÓîöf£¯¾¶›˜£FàCKh!‚ Úò“ºéßûé=Ú¶Ø*„hè4ñ)¨ù”Výkw±ù ÷7šv8s`ÃOë_Ìá‹ÇQð)Íùñb·×¯0º§ l8Ýl~¯I?€²úÕõ‹›Ã_ìXgOÍu¾€O?2¼@ø'/Oúæk(×x€ªÆ¿¯Úm/_M…ñà µ~=ýzxè”Dþ,rð™‘Ã<=`Ú¦²¾pVÖ7Î°Ž¹¬7` ÷e®îúpøøízýs™Éû›ýþBßÖûÃÕ~ºØ}fþ2`=Åþ³Ž¾o€¯ìôvzvgu:×±ÁµU\Ê5(Ûj[Cº•˜^ƒº­QÝV•¶¢ØŠb+Š­(®¢¸Šâ*Š“¥AEqÅUWQ\EqÅW_Q|EñÅË £¢øŠâ+Н(¾¢„Š*J¨(¡¢„Šd¡RQBE %T”XQbE‰%V”XQbE‰²Þ©(±¢ÄŠ’*Jª(©¢¤Š’*Jª(©¢$Y6U”Ô[8ýfÔ/Mždµ…©B"mË;ë§RÒÎgÚæÊ_¶¯· £ÿ›ýtI‹Nò‹8½ñ:”@H=Á…—\­Ãúñâ}<ës °„¯²B¦ 3rÀKð¢V}¶Ú L:ó6µ^¨Mç±Îve§K·žÅê£Üéýçî0À°Œd"pÐþ¾aAË1.IÍc¤b)é0‘æ!l"u´dV4„…´)í°ž¯tÂ>yL”܆°ÏÈ6Ü¢ÔóGpɱR£Åvh¡•hØhŽömbcDÊ–Õò µÂÛÔvxÈ•Qì]™°aÅ%½E_kÏã,ÙªÍÜH›ÔëHËrÖ„XÙ,‹Ä‚_;l o“Ûá-ry\ršŒ=ÉeÄk—åŽÈÂÛävxÊ-ƒËØSœ-qÐ^–kÇÈy›Üo‘k‡Ì[¡‹]™·.–÷@KZݘi;sÎJ;¤E¨dWt+œü± XSäEìFÍÚ™·©íðŽ”ëj6Ù二lsÙ´£fíÌÛävx‹\?H.G‘¶6¹XºEï—厚µÂÛävxGÊ%ÖÁŸ|²#Ìßä–åºAr…·Éíð¹aˆ“²XÒ•­ÆÚܦò&6.¦|®B.— %:úž]mB8/ c„º “mé¬õ®c1Òú1îx&mR;¬¤ÎCØZ:¾yœ‡0ôÃq,ÆY?ÊϼMn‡w¤\È §ÔÇ2FsGì o,¬Më2k‘šIy S¤µ&éàò²ØA¾xæmj;¼Eî ¬–SÐÞÅ&—á¨|ŒËrùâ™w–Ûã…\6ƒäFÒ.ž"í±¼b²\?H®ð6¹Þ"wP²Ç>hgNÉ«ä—å†Ar…·Éí𹃲ŸR–²–Or]Ò¶‚t$Wx›Üo‘kÉe¤Ð÷‚[¤¯™–å¦Ar…·Éí𹃒¥SbJXL-«ÍƒÔ mS»L[ÄZ#SšJbÆPʊͱÎÖY`˜1rgâ&·C\ô†Az±26%‰^JI›^¢A+ª™xÖÛ#.z­¨(øzžõF«Íòk8è´¨š‰›ÞqÑ;hYEÞè\"Ѭ×GÐw" ZWÍÄMo‡¸è´®" wkù¤×1ò’^‚0ha57½b赃VóVŒ¦·¼ZèÅ"´²š‰›ÞqÑKöd_‰Úÿ{û ÂÏ8næüÿØcÀÎ|¶³£–ô¿z—A®µî\kݹֺs­u“ìI*ö$%{’š=IÑž¤jOR¶'©Û“îI*÷$¥{’Ú=Iñž¤zOR¾'©ß“ðI*ø$%|’>IŸ¤ŠORÆ'©ã“òI*ù$¥|’Z>I1Ÿ¤šORÎ'©ç“ôI*ú$EÒ[$ÝEseÁ“1CYðdd”}ºõ\ñØ9ËÖLÃr¶rvrör–-!Fö„ÙbOöé0 žlJb<<قIJýˆeT²ŒT&ÁcÁcÁ“=6̂ǂ';jxÞ²2ïY™7­È®–m+,ûVX6®°ì\aٺ²wåíùn'––ö´lˆÞÂô– ƒ2œ™xv;=ââve8±¼ÿ¹¯·¼ÿéê”âÌÄMo‡¸è”âDz`_~̾ƒrœ™¸éå¾}å8Ñ<°¯y̾ƒ²œ™¸é5}ûJsB*ÝšÞ±/Jsfⶇ$÷í;(Í ‘~«7>b_”æÌħP}ûŽÚ÷åØ7> stream xÚ­œMo$Ç †ïû+æ(Ô)²¾›Ý5"c‘À]Ã#N.±>Aþ|zfº$²5d³°„¶*ðí!=3N NaýNpé5Ÿj*Kõô·ß>,ý´þ¹|ùŸ`;ö4Î=‘ƒ|ùð‡ï ¯5–:œ^þñ®ÜË/§Ê‚õñ§—ï?|yy-ˆK,æ†íK4u;u”Šm ¥ðÔOŸ¿¡ÿ~‹Í¸„œ®'{,—z?þN¿¬_üþ–ØÛé?×£¿âzÕqý¿_Oç?ÜMÍy‰¸KÅúØZ—Ú»Olƒ%Tä±ç–Ö>å¾osëal‡ãç½/wÍ®ñ]*Àú0ëÁpShK/¸N9°‹`Án;5°k"voåTìôÔMÕ±‹à‡MÅAÁÎ#v`GcÏ-wh ÞG#æu¸>ш}Á´‹þüˆíá¯"ïoƒ;à]ð¾Ü÷$ò®R5Ç;˜4 \³]älš“fÁ¬YpÔ,3ïà¨Y(S¼;D¿òN£øôY„¬r“ÜilÍ"ìà'÷`’{`rA„=ØäLrf¹G¹.wT`Žr§±þËËíŽî(Á*Ù`’, ¯Eä.%»„Çì•vÁ¸°7N ö@b”ÓØ;HÝØc©Ÿï /á’C»üfR^jº¾œ½[Ú‚+ñ.±–Œ»ÇzN©…ZªDiŸNžÞç}¹yU"OŸí”ñJ uÛ©AŠÔ½•S©ÓSu4U¥®‚u4t¥êÔ%Pç;¨£±ç’b«9ˆÔ%«ë’Éu4»‘ºäç:4¹¹ë²HÚ\‡&סÕuXü¨CPç;¨£±çj.U~]‡VסÉu4»Hú¹L®îº"R6×Éu`u8º¸ëšB8º˜ëZí!g‘:°ºL®£Ù EêÀÍu¹[\7N êÄ )§QwºQÇR5ê.½¨c¡:u.±u,ö\s^š]GÚ§S§÷y_îF¸’Ñg;G]³¸nœÔ‰+RN¥®Y\ÇRUꚟëXèuÍÏu,ö\ËútVÅ×u¤}Ô5‹ëXv#úlç¨+&×î:q1BʩԓëŠÕuÅÑuÅîºâèºÂ\W¡gŒ"uÅêºbrÍnâ†BŸíuÙäºÌ\—Ä )§R—M®ËV×eG×e»ë²£ë2s]‹Šìºlu]6¹Žf7q?¡ÏvŽºhr]d®Kân‚”S©‹&×E«ë¢£ë¢ÝuÑÑu‘¹®•XB©‹V×E“ëhvwúlç¨C“ë»NÜMr*uhrZ]‡Ž®CP‡Ž®£±ç†S’ŸaÑê:4¹Žf7q7¡ÏvŽº`r]à®w¤œJ]0¹.X]]Š™ºàè:{nƒö ¬® &×Ñì&î&ôÙNQ—ºÅuãÔ NÜMru©u,U£îrЋ:ªSç»QÇbWêRÏAü0+iŸNÞç}¹kvwúl§?w’êâ|DÞvj'î'H9•<=uGSUòªŸïX¨ðù¾A^õó‹=·õgÆÔÄ×v¤}ä©}Þ—»‘'î'ôÙÎù®€…ºíÔ NÜOr*uzê Ž¦ªÔGßÑÐꊣïhìJ] ½ˆû Ò¾êÔ>ïËݨ÷úlç¨K&×%î:q?AÊ©Ô%“ë’ÕuÉÑuÉîºäèºÄ\W*Ä(».Y]—L®£Ù]ÜOè³£.š\¹ëÄý)§RM®‹V×]ïŸH>ÔE»ë4¹'ÝwýUm>ð¡]}©ƒ=Ìœ½–‹ÌZ͇&ó!3Ÿ¸ÎÐ'<ǘÌÜ|âý¤œÊ˜Ì“æ»ÔpbìâsHìÁÎ{½Tù%X½&ïóž¸ÒÐ'<Åt‹÷Æ©ÁžxW)§±wº±ÇR ì]Î;±Ç¢…·ù6öwÌ=Š/öH Ð+&ëÑhqµ¡x½l²^æÖoP åTô²ÉzyÒzÙÏzÙn½ìg½Ì¬‡Þ߀ôÊJ¶Z/›¬G£Äå†>à9ô¢Éz‘[O¼K”SÑ‹&ëÅIëE?ëE»õ¢Ÿõ"³^J ÅÕiázÑd½È¬'®6ôÏ¡‡&ë!·žx«)§¢‡&ëá¤õÐÏzh·úY™õRN]|_™´ð=4Y™õÄ¥†>àqê ô²škx*°þ{[äýïñ)Æø/ÿIëß¶øÿìôz endstream endobj 258 0 obj << /Type /ObjStm /N 100 /First 909 /Length 1838 /Filter /FlateDecode >> stream xÚÅšO‹GÅïý)â¸{éÎȈÈ? ¶…¼‡]–nB­Ô±0#F#°¿½#º#ºÀYxÐ0U9UïÕ/_vMätbiKÌXdÖóŠ@ÅÎ3p³s‚’육f;hlçz±ó ˜°6JÖ£Šd’v;›fÓ1Ñ–ÕкÙuE°£è@Nd2Šv· 9W>`k©ë­CÔƒ®[(Û­«ØA†ÜôÙQ¯Ë½Û!ªW LvP€ˆõézâÒØ¨<öT“ú(µ¬ÎÊLí@"•bO|y¨ÄÀ”¬G€ùrq¶ž \J=dÕâj(©wíÎú(’²Á!š2flÊŠ$dÊÈ ’.RL H5e¬ Í”±ôË u(hÊKɦ¬ƒ^È”s†Â¦œ5=¹ $C©¦œÊPo(Ý”õD£Ê¹A½ îPÉ”uÔ*›2!T1eôZL™j5eÒ‰ÑMYÃkÉ”uz44ejzPû¹eÖ„IgMRÕL4vcUïY'éºõ4è‚ÖÓuŠ©3é ½ŠöèI·”I£÷ž¤ ѺtÊ${b²Y¤SÉút†%6u²i*&¯¥£fúÔmêšMÒÔÍÁ¦¶ýZtV!š«’y°z ›‡Â Šy((b1T\ëS›Ög¯dª®4óлPGÝúÔC§v:¼xq8½ýãËN?><<>No¾ý÷ùrþïÏÿ;œ~z|út~‚wI?²éýáôëùã3¼SÞ£Œ¦_ŽÕXs>’~  ÑQSÒë~„/àôN¿<¾}„ÓKøÇ×óG9fþ'üðÃAþ?cIxLšÓ0Äc×!^ùð§ï³¼jwËm‡W‚xÝxò.Œcx¥oòM{ù–Þaœ~VµóÃóWû—“Ýn,_¿=}<[Wºvýçüé󇟿K·/O‹mé9¶®T¯?<©„¾–¯W_†ì«zÛÎ {"Û¸a­íÛ¸¶ã¼y{}rÛ³qmÑÛì-yËÞŠ·®7ôÉõ|ül‹Æµu=v=v=v=v=v=v=v=v=q=q=q=q=q=q=q=q=q=q½âzÅõŠë×+®W\¯¸^q½âzÅõªëU׫®W]¯º^u½êzÕõªëU×k®×\¯¹^s½æzÍõšë5×k®×\¯»^w½îzÝõºëu×ë®×]¯»žÏtNÉ[ô6{KÞ²·âmñöª÷þûß1•íËÒ:ß1UìËÒºxÇ­i†ñxǬŒí´¦©„·¼ÔvxƒÖ4Ãxò.Œ7hMSq“oÞË7hM3Œ'o^ç´¦©i“oÚÉ7j×Á0ž¼ioК¦´Í.©¾“/­i†ñÜ%Õ×ù­iJÝì‚«{ù­i†ñä­ë|ƒÖ4E6ù–½|ƒÖ4Ãxò–u¾AkšÂ›|y/ߨ]¼É——ù¶¨]o«òÊ]v±6¼Ë.Vå-wÙÅÚò]v±*o½Ë.ÖFwÙŪ¼í.»Xße«òö»ìbmr—]¬åÈé.»X[¹Ë.Vå/Ê?,Ö¶Ÿ endstream endobj 586 0 obj << /Length 2953 /Filter /FlateDecode >> stream xÚ­Ü=Çàœ¿bC2฿§;”  à{™ È‚[#þó®¹ëâÔ4YoMã, ,Ô««~zu;Å=ÿpô?ÿð.lmÏ=•mûã¿ØÚƒþ:~û_|/ûÌuŸEá_>üá'Ÿ©ÇÖ\ó—~Óîå·Ç/÷Í·O¿¾üüáO/_ú¶XšÌuý·dj¯²RCÝ\)×Ô>ÕøñåÏ?<9ú?gxI[‹áµ¾ÅrtýåW÷ø~óç‡Ûb«ÿ¾–þþˆ[Ø#ýêß燿7»Ô-¸á+ÎûïÄ6·•½®‰mqkÙ_c¿´œZ‹ã¬SË[Þ“yÆ\gL{l÷í}c³÷ôeîÆ'W·V5‰K7F¿Õ-€½ª Nx¶ƒq*”©wư9úû€2Û¸"–ÊØgm!íÍ«Ï)á¸Çv]`VÂ3¾ Ì7zº¿¡Z{ ôªÀ³ˆSY L½#ÐÓ«ó[×÷ ”Ù†À±,PÆ’ÀÝðxNÑÇ=¶ë‹*žñük ýÂ…d ìU,0¨ÏvP Ne2õŽ@ª!®(³ +bY Œ%ôZãuç pÜc».pWÂ3žXêq €½ˆýEÍßÙ ñÑ]ŸŒ¼ï(¾-Á'£±½%©ÝžL%z-í»Jïœ –'=4ëîªæží<»n­/–»^Åð’ ïlåáT¦'SïØ£úäó{2ÛÀ·"–ñÉØgs.丫úÎ)üà¸Çv`SÂ3ž˜»k¾òõ*˜Ug;(§²@™zG ÕÓ˜Ö”Ù†À±,PÆ’@ßrQß~ˆ)á¸Çvo¿}‹ùU <ãé·%ÑvÖ®bEx¶ƒq* ”©wR}yëú~2Û¸"–ÊØg#Õé¯ç pÜc».ЫáÏ¿ºÀÎzÃU,pWží @œÊeêTO߯(³ +bY Œ=–’*ðœ¢!Ž{l×U <ãy>l¹5K`¯bUx¶ƒq* ”©wRýÞÖ<‚¹dWIJ@{¤—@ý5ðœ¢!Ž{l×FU <ãi¹í[iÙÈU,P݃ˆvH ‘Ú^Ro<êkKK^²±À%±]à%–Fï“ÓŠ)bxÜc».P]„à3žX ì-½ª Œê"D´ƒq* ”©wR}[óæm\Êþdê³úf¬ªÏaÄ pØc»îO]ƒàž~’ ]ßj=‹á*ö§®AD;è§²?™zÇáquÍ&ø’m\Ëe, ÙëÏbÄ pÜc».P]ƒà3žÌô‹j=‹á*¨®AD;(§²@™zG`Ž›¯kÞ‡\²I`WIJ@ûãßþúÓ·±!ê¶æ« ¡m9Ýúj•8¿¯‰Í™¾»¦:§>sZŒ›YíúMS×=ØòüM‹¤z·VÞ\Å7M]øˆvð¦áT¾i2õÎM£ú°¯yætÉ6nÚŠX¾i2ö‹w5´XTç pÜc».P]üà3žèêîÖÊ›«X ºùí @œÊeêT÷5+ïK¶!pE, ”±‡À”Áû­sІ@8î±]¨n~ðÏ tǶ¾±?uïs6ƒü`$ë‘wðQy*‹Þk‰hÃÞŠT¶'R‰^ó©êÿùý:ACšôÐìÍ]T÷=ðl§Ù%úªc±ÞfqÃS×=¢’g¤vz—ÔöŽú\Ö¬¼/Ùß’ØŽï{è£WÔªéSÄüð¸Çv ºîÁg<ýF?íÇݵ4q T×=¢ˆSY L½#êKY³ò¾dWIJ@{LN_y‹)á¸Çv] ºîÁg<ÿXèg뿽\ÅÕuhâT(Sï¤ú=¯yÔtÉ6®ˆe2öU`.úkà9EC ÷Ø® T×=øŒç&ºÀÙZys T×=¢ˆSY L½#êk^ó¨é’m\ËeìïibE}Ü.¦h„ãÛu꺟ñ¼ÀH8Y+o®ê“ºîí @œÊeêTßÒš•÷%Û¸"–ÊØCà¾;õ]ˆ)á¸Çv] ºðÁgÆ5`.Ù†À±,Pƾ lú1EC ÷Ø® TwøŒçfºÀæGž¹ŠªÛÑ Ä©,P¦ÞHõ)¬Ùÿ^² +bY Œ%5V¯>€S4ÂqíÞ&u ‚Ïx^`¢ l~䙫X ºí @œÊeêTŸ}äù’m\Ëeì!°VýÇ>ˆ)á¸Çv] ºÁg<ýæ#ºÀÞzÃU,P]ƒˆvP Ne2õŽ@ª/‹>÷|É6®ˆe2öKK1éK ѧ=¶ëÕ->âù—@*ÌÞzþÂU PÝ‚ˆv Ne€2õ@ªß½¾dÀ®ˆe€2ö‹~¯E},¦h„ãÛuêŸñ´ÀÐŽûkm‚¹Šª[Ñ 4R»ÀKêùž½¶^XßùN çWÅ—L’ç¾zlB]^’Zý+âKê³æ´‡¦ÂÃÃðð”ÇvžºüÀG;¯Ò½5?óÌU^V—¢„‡SžL…ðêñÕ–5òd¨!oE,Ó“±ÏZrÑßÐ;ÇgЃsÛuzêÖî<½B×ü°3W1=uë!ÚAz8•éÉTHow›{ïÇ™ž U>ßÂôVÄ2=ûö“ƒ*!Žyl×å©Û|¶Óo8BN[mÖC®byê¾C´ƒòp*Ë“©P©qïý˜1Ë“¡†¼±,OÆ>énj^]´‰ñôàœÇvžºòÀ‡;ÿ¢ÛÖÌMW1=uç!ÚAz8•éÉTH/¹¾Y_CO†ôVÄ2=û¬-?ÜA¥wŽÏ ç<¶ëôÔe>Üyzḹ–¼·"†§®:ÎfÐŒdv"ª£ºPÛu"Ó@·"•щT2—]s꟭:GgC#šupênê¼7úñæÇ˜¹ŠÅ©« Ñ’élN¦BtTk^ƒN†êVIJ:{°Û÷¤~¦MŒÏpç<¶{“—Õ>Üiz¾—ÖÚërÓSw¢¢g¤vz—TDï(L‹ž§\B1½%±Þ%–èúO} "Ƈéá9í:=u™wú½…¯4«Ýz ÂULO]fˆvNez2Ò£ÂüÞÔ2=jÐ[Ëôdìñë#½gVéã3èÁ9í:=uwþU¯ÐÍÝ­*\ÅôÔ5†héáT¦'S!=*,ûš÷—PƒÞŠX¦'cz5TÞ9>ƒœóØ®ÓS÷øpçéeº¹ÅzsÁULOÝ_ˆvNez2ң½¬y¢r 5è­ˆez2öÙ\-Aÿó+b|=8ç±]§§n0ðáÎÓ‹ts‹µ¼åªN¯¨ ÑÒéLO¦BzTXKZCO†ôVÄ2={Ы)ëôÎñôàœÇvžºÁÀ‡;O/7×ÚÚrÓS7¢¤‡S™žL…ô¨°­Ù]2 y RžL}ý9Á.©`E Ï€§<¶ëðÔ>Z®2BC¥ÛzüXSúÿþ¾æŸ>Ç?¦ão‰þ©ÇÿQÞ§ endstream endobj 443 0 obj << /Type /ObjStm /N 100 /First 910 /Length 2049 /Filter /FlateDecode >> stream xÚ­›Ñ‹7Æßç¯ÐcîE£R©J˜@rÆ—‡Lì·àŸ3s°ÖÈý÷W¥-õì4¬nËxÝêÞžïÓO_OOiZFÂR ]¶rÑ}–ݯ¡4ÝozÇj–}N¡¡ì3„κŸ¤ÚOÈ '="Ѝ’LŠj2 å€U•[€ª²ÜtÕ­)ä¤ÂB–³¥‘Cεœ°bÈØ‹)! 4¤³ŒÚà+eiÔ[ÕF ¹w†hHCý2Ê?Mv´!畚NØPÁôˆªƒ6ĸ“eú8Y"Um´P`œÜCA=YvJѓů‰|Ï¡p…v ¥Êžö»tÐJÚç΀´Q  4dŒ ŒˆÈ¦@ŒÚ€@U2))j•O%¡¢*´A3JïÖÀ¤¿Å^ú‹5¾"ÝeFÕ“¹ë9-Ô¢¿J’,çt*r´VÉKÖ&“t£ö¦  ´ òÓrÖÊuP¤/ÒVX5ý‡V•@ºÑZ†‰WëEuzèI.’þtГ%¡ŽÊ$cÔKÖ†N¥H£È%ÆÚ Ð«tœ€CïIr!¥”ùD WR‚¢c*—’ÒAMÒÒà(ƒ´Ôž²^§œµ…zÅê,Wjj¬-¹T“HKK®Uù£-ñ€ŒÒ}yJ¾”ÅCÌä;ÉUB(P…•d|A ´…ú®*škÑ·kK<24}­xÈ©-ñÈr Þ¼9?þ÷ÏK8ÿpwwÿx:øëßcÿç¯wÿ9¼øýò~KòžMŸNç_/_Ão’KLÊ„+ê@ì¢Ice–ó~oÞ„ó‡pþ×ýÇûp~¾ûóó­þ#|ÿýIþþ¶2̱Ë{P†wØBÎÇ0¶m¿]¾p,ùuƯo¼ cåmN¼‰oyxщ7íò…u¾Ý‡Wn\bK¯Ü!x‹ï4ž¼+cáíɉ·ò-o;Ê—œxÍxãmË|;8ñò._>Ê—xy—/¯óÍN¼e—/å[xË._Zç‹N¼¸Ëu˜iÁÛœxq—ïÂXy‹/ìòÍxÀÛxa—ïÂXy_yÛ»J½'õ§¸HAÖ#k¡Ûk”’ó%ÚW^ÊRFí“éD]¹**ûD+%ÿ°é.…¡ÔðKØ>ÉNß wáë‰Ëé—×ÙF§Âjún¸¼NשIJK—Òuª«¦ï†KëtêHÄ]ºx®SY5}7\\§ëTF"ìÒÍéÒkoUIçÕ°K7/Ó• ¥oÚÅ›âe'Þ´‹7Õ5¯S™›Ž3l¼¹ä[}x§ïä]ù^§22×tË[òmN¼æ»ñÖƒ|ÊÈL»|ù ßîÄK»|ù _§22Ë×ÊÈ\ò…ä\v—ƒ€É 8Ó-0ê@Ü€ó.á…ñv*¯2ì†zœ€a—ðÂx;XÐw §£„ÑxoÀé a§ ÚmÂÐŽ.NÀí6á•ñv*²€o†z”°S•57àºNœª, ]Ât”°S™57`Z' Neà.ár”°S57àr°Sy—p>JةКÆp>HøæfùV„Dø×p~÷õñ§P›ð¼ÜNxw÷8tÞÞ¨ìLÄÐûhËiç÷÷_>\¤Oáüþí»pþxùû1|ºE{ÿùËéüOQ»Ü=~ ú0J^®0ßîÿzørÑCåéÐ/—ß¿~þñþï'bÎ\9´±uÁzÿùA$äæütö³oâ­ µGúŒpl»í[OõáÓl›m‹¶-¶%Û²m«m›mMLÏÆO >mMLLLLÏFSŸŽm6½lzÙô²éeÓ˦—M/›^6½lzhzhzhzhzhzhzhzhzhzhzÅôŠéÓ+¦WL¯˜^1½bzÅôŠé‘é‘é‘é‘é‘é‘é‘é‘é‘é‘é±é±é±é±é±é±é±é±é±é±éUÓ«¦WM¯š^5½jzÕôªéUÓ«¦×L¯=é}zýM§Ž¯êëvÓ©ã«úº¸é8Ív¦ñ¼é¬ŒÇMÇi¶SQnú¼zc‹qñU£ÓlgoÀ ãì4Û©:ÕGú8£ÜžûØi¶37à…ñvšíTÙ&]ë0S‰ÊØi¶37à…ñvšípÓÛÆË½Hµ»Àušë˜í¤]ØX§™K½áº(k¹ð×i¦37Þ…ñvšé°ÔÛø<^.ËêÙˆÓLgoÀ cÎN3–z[—tmÀ¥Ç‚mì4Ó™ÆðÂx;ÍtXêm-!7`,QJ«°ÓLgoÀ ãì4ÓaÈQ—émÀÐ#çÕG’ÓLgoÀ ãìô•2õ¹_ŸÔs*±æÕ=Ú©ÊšÆðÂx;UY4ž_ç²Ôzly1—E§*koKÇÆةʒ)@líÙZ¹Zb‡ENUÖ4Þ€Æةʒ¹Vìíú±$s§˜`QG£S•57à…ñöZý)õzª×:Z&©Òâc ê¬i|]íú²ñöZþ)õ:ÔkM˜d2´øXB§JkoÀ ãֻܽ¶˜ë³å®W׳S™e®×µ®/¹**z-ýìÇX˜¬)Eì‹*j¬i¼á.Œ°×ÚÏÚbyöåjiËrÉS5¯k]_6À^‹?£~ϵש­>œj¬i¼/Œ°×êÏÒ">[íJ‘Ûê ìTcMãëj×—ðv›ü÷æÀ endstream endobj 757 0 obj << /Length 2961 /Filter /FlateDecode >> stream xÚ­œIÇ…ïü}¦œûr¤f†š¡¹‰Ý„‚„%_LI°eÀ0üçÕ9•¬x9…IH€$0ô^eÄY¹t·>(úK´2SŽþ]˜¢‡¿ýöbÊú{þã¼Ð%ìºÆ]³ÀïN/þòZ{Ò˜²Êúpúû7r§_?]Å)˜—?ŸÞ¼¸;= jc&2÷Uå¸k‰ê¹š4©Ö®7ïŽÕôŸ‹­7S Ì6Ìr?ý¬¿ÐŸ½9¨ÉætøÏ9ò·ƒL´ôo_Ç?lšzOfmj”Ö®1MNù1¶IO!¦µí1íum–]ö“®[Ý×És+wöÖ>¶¶^kgìש4å`¨ÊŽ¢Ÿ@žÕSR]òJT%ÏŠä-r<ìZÉã®LÎs+WÈÓy¸¸»É‹´VI]òJT%/Šä-r<ìZÉã®< 4iyÜ´CÞÛJ·%ò²µVœóXú:äÁ<·r…<#’‹»›<'ÚÎôÈ+Q•¼$’·ÈAò°k%»Bò(ÐúAäqÓy#l+yÜöãËd¯^mŒ×(;©<ÄØ¨@µ°kã×?Þn˜ZKwc\m˜2¹­\·ÎŒK“7c<½žbnFª”ûz³Ó×âV®ôµû¶Îî¾v4+šn_—¨Ú×YìëEö5v­}Í]a_S 3ƒúš›vúz„míknÛíëÆ}͸Ùìkê íÆ¸ZÂ’^J+×í¾“÷zŒ©ËS2ÍP•Vbc/tvbÜÊ•ÆvbcÃÞÙÝØ†Ú¹ÛØ%ª4vTbc/r°±±kmlî ›]ÔØÜtô¹Íüášñ×® rÌ4‡I›1ž9Óÿ`מÊ8‘ó¥XÎaU[¹Â¹9‡(íæ\Ïèu9/Q•s-r¾ÈAαk圻¾½¿ùn tª™¹„úðÌúÒÈymkÔ&uÉO*š1¶)MÖ59~H!ZïEô–üuЃ‰nå zADVw/z>SÏvïûjTEO¼ïcr½ŽkAoåJè½ÞB/ÑÓœ#ÃsoÞå—R¶rO41ºò€Ï¶M”O›Ö¶´×ÞÅ,¡Çò‡ÑÉnå zâ…®înôõm÷¯FUôÄ ?&Ñî=îzúpº{·µ„¦RÓ:pŽÏ½|‹vjmöæw--†¸ÒËvÞ¬l•oûXî:ØÁ$·r;ñ¶Wv7v!’{»U±oû˜Ä»Vì¸k;Šq vܶƒÝ׊·=Oy&‹ =–À{0Ó­\aO¼ïÃåuT·yµrmü”À1J²“¥9þÚ;=¿®ê£YË­•˜óƒ}Ó)OAëâ³ñP%¦c¶:›M/¯³ WÇÇ—×–6ï_~ÿòõ¿þúç·±“Ö™=„PK~ŽFìRŽ(^‚Áïž L˜bîM— K9¦o×Ü:LY»Ã¢µ5 ” Žc˜ãçW[Ÿ7òjò3)˜S~æÎÒNi™Rn-·c8ï,‡¸Æ|ÞYr×£QŽh—ÛKî:ýr܈uqCU݉^înn— ‚›q{Ô‚¸AÇŠsüüÊÜhã¡ü ܘ©ÎÉÜF¸Vܘë1Eïåƒñ%uÚPбB›xÏ ‹º—6—C‰´• B›•h[´mØ±ÐÆ!mŽöÚŒ¡›mA¦mˆk¡»i£j]?Á¹äãs܈ÜÄËUXÕݸ%Óc-ÕEÍäDÐ’éR&UĪæ‹6ô¢ÃWu$¸"€k„e…«Zup4j™¬dž€•˜T.S€oõäêí¦)ÌŸ*ìu *Ly‘©G-ˆt¬d1G š0.fJ|%À××Ês=ê¢×â±À’»e(ÇXaM¼h‚UÝ›Ÿ?JØÃíTp "nZ7èXqcŽ7 ´vnÌ”pË·®7æzÔÙÅ¥Ù’»n(ÇXÁM¼ïU]Ÿ„î)€3—Âc€t~²,œ0%pÐñ[Kñ£€û»O¯žvÀ,ða~–V®”E¼ Áãß= ªõÝy D] #Ÿ058`Ó:pÓû­3GÍ87zoŸ×”ÎOÁ+SZ¸¸ Û&JÌÛHvm‚&ϳ<,éëÌ0Ï­\Ý?Ü<íUÄ,ð«?K+W #^Ráñïž÷[Gó7b¢Y{Þ>|¼ÿpú ¶*nU<ÞV®KLònh©¯m—€U çL€]+Ü@ÖŽ!€{~÷þîÓÃÀ2Šp¸­\@¼Å9Þ ­µêP¢*âê˜ÉA°k€»B(Щ?·¼x/A§øp¨­\)¾xW‰ó»»øôB7±[üU‹/.M™,>v­Åç®°øèâ˜êsÏû7w§£Xþe òÃÁ¶r¥üâÝ!ÎðîòÏû\×-‰ªå2ˆÉÁòc×Z~î ËO~PósÏû¿žŽß>œNï¿—1XÆÒÁº•+ˆWF8Ó{1ÐäîtƒU1¿‡É! :®ƒ•+Â`¼¬ŠžÁÊóáöîýéáõÃÝ­Äf¸•+ ˆ·78Í»HôM]JTe@ü%&À®•î  ÀÆ0À=Ñ‹€ ¡S}8ÖV®T_<¢Ç Þ]ýàÏ¿.Щ~‰ªÕ͆ÉÁêc×Z}î «Oô”CªÏ=ßÞ½º%–³¢oXÆÑA¸•+ˆ§ä8Ë»ðÔ;¦‹@‰ªˆ?|Âä ص"À]!xùàèóàžo_ËÀ2„NõáX[¹òAñŒ'xwõ-½=s·ú%êñ hãç1âù§E˜Þfù/Q=ÛZ~n ËOÏý6Q-?÷¼œÍ G‡8àV®0 žÚâ,ïfÀ¨)vkÔ#Zd`у `ÛÊ·… P`s¸ò¼0WË@:À·rñ<§¹FuLMòóÄè¥nʇóÿ7ŸÛ+?ÿÃÑûÿn›öï endstream endobj 630 0 obj << /Type /ObjStm /N 100 /First 909 /Length 2147 /Filter /FlateDecode >> stream xÚ­šM¹ †ïý+tL.j‘ÔcÝN `¬}3|p¼ƒ…`f1ž6ÿ>¤šRõJ‡ ¥®®zßz$•DV«P)â¡ä0k *J‰!w-)Ô¤emœWBÏú¹絩ӥä.B‰äˆ(æPJ ³V @©E* v­P€ž´’ð8¹LYÔ€0Nn±×K)]n-U9 ¶PªÜlÍZ€­v©`ÀÞµBRb©ä@€Z)Pî¥ÔˆšVZ ÜùRäJªIu8PC¹\¾¦žµ"íÀr¸4iˆÔµB!#Èå-‡L¤•r¸ÒjÈzEi-äÊx)­Kó´O㙤Yº\ŠVä<ÒÅY+òGÂÕ„½~/-_¤º4?Êá*^•Z½Tñª™›‘¿ ZéòGúi]©ˆWåñ BK¬”îC9,‚²V¤C³´ŸöG“›ºÔ^CkÒ×Un¬uÔJuOÒ´•Sè —V†Ð)iu@ÈÝ1…®Ã£ R¯ÒØ•e¬4éÁÊ5t–v–› œP+=0H;W¹9F釖R`ÒÛL¸È'½® _QàFrwâÇâ!•˜^š îÖ³u bÒÓe$&BRt©eiš&ýIYŒ©J¯6éHM¯Ž"¢çÉx±€"5¿—â2Þä˜xiËÉm”¤5ñ€ªWHó‚t,Œ W­‰ðh}Ò-iM<õþ¤Ù)ÓåÍ›Ëõã{ן^.׿ÿûe|þç·Çÿ\®?==ÿòð>%ydÓçËõ燯/ᓨEÖAH›>vˆ‘dÌæœbk,çýÞ¼ ×áú÷§Oáú6üåûÃ×súkøá‡‹üûÿŒ3—hÁ0.‘©mûò«Œè×ù.`è±çrc‰½• 08›ñÞàêœ(r>x!ÉaØð¢ïÍwán|nóÁ¥Î1É?ye&Ž©Ö /ùðNã ¼3ÀÝ ¸å(‹æÜ!ʤ²ÎNÀf¼€7Ƙ€ GYÝàZ#–¾.NÀf¼€7Æ üÚ©rç G˜ D*y\€ÍxoŒ08#Ë´{,JDU:qÃÛœxÍwñžû\tÂ… K!IJåíN¼f¼x7Ƙ|€‘9V ¦&pª±æÝšÄ>ÀÓxoŒpvî9Ž(Ó€‘!6jçÀÅ)ÊšÆxg<€¢,¬{¢¸Õ؉6ÀNQÖ4^Àãìeaɱó±(aÜÄÑÅ)ÌšÆ xc<€â,$Ž|Wbn1áfÒ*NqÖ4^Àãìg¡ÄëéX“0Â&Ê*NQ–Ù.ÚsÛëcI¶% =h¡E„M]œb¬i¼x7Æ \œb,ìGrœ¶ýëcMã¼1ÀN1ô©KtÍí7Qtq ²¦ñÞ`§( j‘@ñX’ ¡,³›(º8EYÓxoŒ°S”%ÏFÔ·“ ¸ï–$§(k/àñvв€J¬õˆ£%@•7KRuв¦ñÞ`§( 0ÅV8°ÅÆ›8º:EYÓxoŒðŸ&Ë·áSéE„×wß^þ¡oŒ#¹ÜNx÷ôø2tÞiVÔÇ™òÕõýóÓ×ráúþí»pýøðÇKøügœ÷_~}¸\ÿ& /ßC+M/W€ïO¿?}ÐCåvè_¿|ûòÓÓ7Ê¢q«¡g€JPÞy 9o§†ú.æúŠ]oIß°k©/Øoeµ²YÙ­ä[Ù“•`%Zi:=[izÝôºéuÓë¦Ç¦Ç¦Ç¦Ç¦Ç¦Ç¦Ç¦Ç¦Ç¦Ç7=}~+ÁJ´’¬ÌV+«•ÍÊn¥éééééééééY×ë{òQ¢é¡é¡é¡é¡é¡é¡é¡é¡é¡é‘é‘é‘é‘é‘é‘é‘é‘é‘é‘éeÓ˦—M/›^6½lzÙô²éeÓ˦WL¯˜^¹é}~ýÌ!Öš®™£’z“V§teÏ™cggõš£n®‹õÜu°:Å‘™’VݨTÏY¦'s]¬ç®ƒÕ)„Ô¸4Jç NÓR¾û5cc9(âFY×¢.9Tw&s:å}fºPOM©SÀ˜ ƱÑÔH‹d"íÕ)ã3×…zî:X‹Ë:“e"ÄžçB£F N¯aŸ•fš.Ôë`õÚ¥ ckÕѱ2R?§n»Ro¾Ç6Ís_O^Ý™ñŽW¦Ã\6¼N+Îô]¼ßÁÛ\Æ25ýI¬¹‹Þuë¤þ"vúc+$ŸÁ<]×v§í€õÚ’ZJ¬w9UŒµnp½Fó4>vhž»ëæõ»œ‡²¦5;`¯álÆ xc<€½öàb‰í.ç!ÂØÓx­ôÿù¡²Ÿ endstream endobj 917 0 obj << /Length 2824 /Filter /FlateDecode >> stream xÚ­œ[oÇ…ßõ+ö‘|P§ï—GRb$*”HkW¦C­†¥8‰‚ÈAþ|zv»gjš[§9Ø ™KçlU}Ý;SÓ\µ‘ùÚ(©E n¬Á„ÍÏ_ž‰´Éÿ ?þí™*aÏkÜsx¹{ö§?+—5D’Imv{$·ûeóã™RBéóŸvož]íFE¥ƒˆÚPcY~DmKTÏVG!½ŸÛ¾}Q=ÿ9¹æ—Ò>0?Èýø“Üü’øf#…Iqómúec„&õy³}öÝQS›D znz÷úvwûî/»íÝÍõnwýîÕ¶MÜ&'\°ÝŠ×¸Nê­Ü¡âÉ´¶.w!åŸãz[Eò:Þ }¨O£„“ª‡C‰q0,“ÄÛV¨-Ä!†ƒÜé8PÓ<S`¾­\aÀ² À"ÏpO`@y¡½ï1P¢F,ËÀ¤À¶•j ÈÖ»u ¦wï¯ßí®¾¿z·c1˜2é`Snå ŽÅÖyùV •¦GÁ!h„À±ŒjèY ž€§uZ‡âùÝ‹—GLC.kÉódÓ…MóDïΣ9»xíÜÆvÈC…nÄ wžåµvñîã£!¹w5jÏsà=D^Ƕ 7³Eì )ÙUØ›™n?lÿÊ5Ÿä€»“måJÿ×\áÅûŽR8—z”¨€À0éA°m€ÚBr`pq¨énw™·Ž€)‰0ÛV®Y`‰—oÎ £m€5Y&=H¶­P[H@tÚ¬C5ýþµ¾¼d ˜’è³må ‰%–xù`¥1ö(Q#‰%`Òƒ`ÛJµ…ä@Ã:PÓûëw/X¦:Àd[¹½¯–’Vxù ­ˆ®wõY£*Z²Lzl[ ¶í„tz¨éý›«{ H’è³må Š%–xù “ðª7˜ªQ#Š%`Òƒ`ÛJµ…äÀ¨ÖLÍLïŸ2“"ÉtH€Y·r…Í’K½x/pÉ u‡„5’ÀŽ(‰"¡c[H˜Ù"†@×™IÍLïïno8Hœl+W`‡’¸Â‹·’ÈeìP¢FØ¡$у`Û µ…ä@c×HÍLïÑåI¢C̶•+°#I\âå[€7"©ÞXºF°#I¢ À¶•j ðV¨•vêy/H`¶­\!€Fâ/ßl>ôÆB5j$€G=H¶­P[H@Œa±ÐÌôþI×$› 0íV® Àq­—oÆÛ›” v>8©A gÅ€xB rœ7ë ¦©ç|ãÇ—ßé;J³+]gÇ‚°°Ë׿Šùö®Ûõ5¶ =Øwl[Omaçs •ëÌ„f¦è`Ê¡Ó}˜l+WúÏq…—0|á{#¡5À‰ÛV¨-@¡ü:cá™é¼˜’è³må ìP—xñ¾ocÁôfB5j$€ =D@Ƕ0³E ɬ3š™><å €$ƒIÀY·r;Ä¥^¼Ø …M½ÙPª$v:Hô ض’@m! 9ЧuÆÃ3Óôn@’è³må ìt—xù^àB¾¦ëÍ„jÔH;$zl[  ¶€hý:w„3Óøv@²è Ómå ìX×xù&`µº7ªQ#ìXèA°mE€ÚBr Öë ˆg¦O{?˜²é Ónå ì€×Úæ"µy®½0žß ¢ÆÄŸ‘ñ~\ä7òÚJT :€ðˆ‚œ@ŒvC¤Ž¼°Ô1l¤ö†âü¹1êìê_þñùSþ&š³ÿøù¿_?}}Ü›|¨}-Loq—Óʕް£;\‚åËTJauopS£JwÄ‘ZgÒ†È]¥‡¨žk]¥Ôõꇋ·w7WìJ™;+Z·rÝnÀ|—®lN/”sè„aÖÉ$– t› ÑEòöׯ?ç/sºKdrÀ+¾’F¬t„lÂÔ/ãb~_éÍ5jTi ¿<ˆZײ…ÀáÙ™uœeŒ \öHm·:ÄtäJ~Dfªb‡@XîV®È>\À=^¾頻7\®Q•@Ë8ÉA±k%º^^Ó¿”¾ÜþblÔ‰#¥ D´jî«¥ò¿‰zøf¾>Ç÷Šmof»õ**åG© ¦—º•+ô±OUpo}:jámo–^£*}ž¥o’ƒôa×JuíÑ—c£õëÐG}3}з†m¥Ún}LÎXËÒ7U°C,u+wHY³Orp—ï}ÃeS÷`Wªô–¾IÒ‡]+}ÔµG_Ž=u_᣶øVp­ìQ×mÈ÷2²·¤~ö`¡[¹Âû wwùÎçt¾vî=@¨Q•½È²7ÉAö°keº^^ÝLsIÊžÝ?IbM8ñ`©k4ÙføÔ1ø¤ðù–cÛ|û’ooç¶[ëRÔž§oª`‡>XêV®ÐÇ>¾Âý]¾ó/RoîW‚*{‰eoƒèAËJ±ìg‚P§žc«àÛÌÜ­áZ¹#®[?Œû|`±«×¡U¹+̱ÏÉ`_—oxZíç æJÔ8kfM=ôÄ´c[¹£¶/n®nà’0úšä‰_¯÷ONf¶<{Ä6:!ƒ^Ç6Æý/Ìl·.Êd$©7°ƒ¬t+Wàc=áö.ßðäð½9sécl=H¶­ôQÛ7/íz.î?^cõ§áóJ8›lÓôÖ”>+d¾èYÅ6¡£ÛnÏUˆ’¥o*`‡>XéV®ÐÇ>åÀí]¼÷©4üFPïý¶Fô±§Eˆ¢¯c[è›ÙÞ½|u >#dfˆ´æÄ9¯óùîAÍ]__¼Ü·oß=6Z!]XÅ\ËaOsó·n†7Ù]ßÝ\¿¸Þ]_±çUH=1Œ¸ð­\‘}໽x+>,&/öŒ%j„‘ý…6¢aĶFj‹a ^¨S0V©ë“`\Á|„‘šó0N/ÂÈáÓü*/"¿ñï7ºÙ‹xqx ·üJ˜šÙY °ë­\Y 샌ÚòmÙK|ïÑ_Wû‹}D®l[WµÝí?€i»½=~?dóÉŸü‰“hDpªI9%yü†H—œO¶Í7DÃGNÍl·ZÙ(-{þT±ƒ ,w+Wd¿àG¢†¤º{$JéAmQ¹\„ìãœ&g¢jÐá¡Ôùs£Æ¿ÛóQ)_²ê Q=v@êÔñÎ!Ây=7ýûy¶ý–̓;{ÿë†ï>ýûðí·s£Ï~ÿ×oGŽK©}ňÓ°C\ç…µr¥aì \ŒõÈ´Ù«ó]XÔ›|áuyHò¿á¼˜9óÃÿlþ®Øÿ+ì'` endstream endobj 810 0 obj << /Type /ObjStm /N 100 /First 909 /Length 2161 /Filter /FlateDecode >> stream xÚ­šA«\¹…÷ý+´L6j©$•$031N ˜±wÆ ÇóLÀo°ßÀäß町®î3¤k1.˜AzmÝsôIj©ê¶:qH¡S™¤jF9Ca”%…ÚÊÚ”’BÏe £HYÃdéIeüÕë Ô•–~µJJR¡P2zßÛ…šT*ýÎJiès+¡¦ºVC¥œ€ÖC-E*#Ô ­­£‚ÎWž•êÈR¡Pg‘J -Ict¾å^/o´sh†Ým­He„ÆèÔ@ç[Çt¾ÍSô’I…gÈô‰¥R—ePpKPnÿ†J,ƒ4 ʃEpžà2CY¸dJI¸dŠt•eô…‹1èmÒeÈ ÷ÕC<ŠüFv®ÆÐJ¦<ÃÈÂÕeŒ„«gá—ŠôR¸z‘'¥‚v#¥Ëè-Œ)\ÃLÂÕ»LƒTF˜Ô¡Šÿg™SžðD㑱ĪT(L™½¥3—¼Ìâœ!Ë/Ëd ¬¿DEZa¦²Úc¦ SY9µ‰ÚÄL=wÔ²,Ý"5¬Â4¥ï³Œ—t9ç9/cÂ+ ]Ãóð’.Mx`MK XÔt>cU£×˜K< †‰¿ð­Àbš XØò<°²¥,mº¼xq¹¾ýïoáúãçÏO—ë›ßÿý´þþç§Ïÿ¹\züòË×ð.á+›Þ_®??|| ïêl±a±¼cLj¶œãO)Gh÷cxñ"\ß„ëßß>†ëËð—ß>üŠ>þ5üðÃÿý9_ŒsÄ„àû•¢¬kÐÄ‚•Qr˜Ðÿëûõá#Z×ï3ÞÀj¼ 㜿Ïw”X0‡Ø<âĪA/dÒ¤˜(ßÅÍß ["VÑv=`-ÛK>³K=ÅÄyÏ.õÓ4pcö™ÝÃxÆ®À­E9160SÌl“°o`Ãx'àš"¥gÀµG*pqVã l/àꌒú3`l”%YÀNÖa¼ ãÜœ€±Q–ú eépsVã l/`öÎð¯ù0>¯ÕfàÃxÆ ¸;œªã†pD àî¬Æ°e¼€‡0ÿ=îÛ°€‡°o`ÃxO'à–"Ó3àÖ#7 x:«ñ6Œx:…•¹´Èœ¢:B°\)v2äD¬Î›Øp^ÄÙ‰˜RìüŒe·C-§XëpÞĆó"þ&äyÞõ&¯~×WŸžþ´@²D´Á«ÇÏOKçU–­J[¤qsÕÑìúúËãÇ7èS¸¾~ù*\ß>üñÞ‹öúï—ëß öðùé+RÇ. Ì×Çß¿||Úí£=üòéÃO܈۔ƒW²nìX¯?|„d¼·ækоÂ\^H—ä]€”’ÞÊ¡å­ËòàVf-IË¢¥>_›–¬¥êUÕ«ª×T¯©^S=íÏ8úÓTO\Òþ[©zMõXõXõXõXõXõXõXõXõXõXõºêuÕëª×U¯«^W½®z]õºêuÕª7To¨ÞP½¡zCõ†ê Õª7ToªÞT½©zSõ¦êMÕ›ª7Uoªž.IIÞoeÖ’´,ZV-›–¬e×rh©zYõ²êå›Þûïß6zåØõK+Û–0¾ÌÝÚ6œ2–ÃùØ6,çµm8e,½ BMçFÙˈ­E씲ΛØp^ÄN)Kωù$¦i²E씳ΛØp^ÄN9KO9¦r§“É딲¨ïƽï»h nÛ¸< e³x2–Ãù¶œ±SÆÂ=!Žž'qGâ°Îæ»ÄN)ËἉ çE씲pk±P=‰‘|«±SÎr8obÃy;å,\S”V6qíY‡Eì”´ΛØp1%§¤…©F Ù61Î „4ÖËC§¤åpÞĆó"vJZ8ÍÈùŒ>çFÛ"vJZçMl8/b§ÄmÖXÄ81j¶¢rŠ·çMl8/b§x«õ‰xâŒ>Ú`ìÆÖiLNñÖá|[΋Ø)Þj\âÌg„ÙpfLó"9Å[‡ó&6œ±S¼ÕêˆÜϤáÌèÉŠ@È)â:œ7±á¼ˆb®VJ¬çqÜpdØû–SÄ¥¾÷¾ï¢uŠ·Z8kžáÊoÅŠ>È)Þ:œ7°á¼ˆâ­&%ŸÑGÃy1§a’S¼u8obÃy;Å[uô(WsâŠó¢³}8Å[‡óAl9 qvŠ·j§Xç}Tœ¬³8Å[‡ó&6œ±S¼U[rhsÅ,ZÑGqŠ·çMl8/b§x«V¹épFµÎ˜šµS§xëpÞĆó"..Ljn‘y_0©DòsÄ]^ò¹`r¸nXÃvÁ:…Z5áü£¶ت©ÇÚî—äuÁä0ÞÀ†±°Îné5&>&·ŒÓý3©øÌ­zî‹R÷M¨SHYÚÀ¶žÃÌí~HY¼fö0Þ¼†±+p-ò&é–ŸN³1»^W‡ã l/`§ºÐˆe½îPàÒ VØ)/<ŒÏ»Ž÷p÷ºë(_¨qSB~: `·»Ž7ã l/`§ š&Ýõ²CSEzZ `¯«Cj¼ ãìCÓ y‹t^Ùi7€ÒÂÃx_2Œ˜œBhâþí])œ| `§¼ð0>/xÞ7^ÀÙë‚'É;¤¸Mä§l¯ ž7ã l/`¯­…ã¬Ïîw|là:å„j{Þî¼k»`½n³R–·G;[ œ½˜AGòºÝysÞÀ†ó"öºÎš8V>I#9u¦ux]:œÏë÷ñ>þ"1¼ endstream endobj 1040 0 obj << /Length 2184 /Filter /FlateDecode >> stream xÚ•šK“ã¶Çïó)x U¶`‚ ø8îºâŠ·j«6Žœl8GḃBR;žò—Oã%B¡a•·,Ùüw? ñ"øF%#Œ•Q‘å¤`E´ïŸHÁ?ñô÷'ª­¶ÚlkÙ}Ü=}÷cMH•T4Ú½¸b»CôKL³Ío»OOß]Å*NÊ2³]&ú‰åP:RÒ!Ùl£ñîÔÀEÉâyß6Ã^ÿQq‘Åõ´¨;ã‹ú=Ÿ6,ßæv_wÝ›2úºÉÁ²kÊäó÷úÝ¡îÀpv –UŒPZ+ÓØ çÊÉÒ¥iåºå”’ žãš¥%á8MsÂxtšV†@k#šû@¯RhÔ¡#eƒþ2›mÎâÿ6û¥Ýli<ûá¬~pЀ\9‡Q/´²¤$UžF[ÊIšæÞàh’’ªà\ Íé58ÊíàŒ™±Ò|È»èhš–W‘%w':cò -,Éó[¯’çŠdY¼¯÷›´ŒOíp|‰^dvDLÊ.“+Ä„VÄØò²YÀd¬ ¦Ô‡É’Ã0¼jL7^ž €‰PËmb쯳¼âÄðð\9M,õÃëäÁ¬—çŒð’ãYÏ)\¹'ëYRHÖÃ:RvÖû Ç Æ›æ,a<Íá¸ršóÒ@KýxÿÉJÀV…ú¶Ò@üiÎ’CûîÕôÛë60?˜Ú¥cÏQe¹Zu¡yÕ‹g¾™ƒnô«ç@BCtå‚ÔÐzyœƒFí(@M[jþ¬·Ê¡Ôp¯†šíõç¥íÚE$¶7æºzžÅ¢ñ#ZÝ¡ñ¸rQæE„VÌNIYÐ0"] ÛœJª,muEt§kqNª,‹,Á{´Õ;¿<½ñ›S•ðl¿?Œ—éóØ7Ãré½PVÙ´Ü®œ†Â½PÐB?zF^†¦WÆj…’z¡¬‚(ǯŠí÷ ¬ŸÚ}×x¬’ h™]¹ ´ÀáeA2šH«ó±1 ®ßû@nü~j K gו ±ÀËú8‹z”ÕÊ"ó²XQ¸_ÃÂöû¹^NM_/b+A+9дþQÅò`„†ãÊiF¹—Züœ$IB¿±2Œ˜oà·ä°?àÕ´ Ûë?ÚySÝ÷È‚ÆÒ 0Apå‚LÐR?Î$£¤(Šme˜d^&«Ê÷j˜Ø^?˜]5Ùcúf©õR{á¬pÐH\9 §ðÂA‹ÿxRƒe)ç¡ßX]áø§a– šÔp¿&©Ù~oñ´Ã˨V5¿&4ƒu L¶wwÝtý®¸ÐÈ\¹ .´:Dz, δՊË;A³Q\¸_ƒËöû¥…j†N `¤÷x´VZh`®\Zg¾¬ÊIR…6Œ•¡Å}™Ï’Ã2_À«n#7^¿t—ã±~]H«½[;ª:-8<WNÓ)}tðò?Ü—²2B£¶±ºÒñ§>KëK¿º/Ýø|Z½z†¹ŸÌª ƒáÊÉ %p 4ãá)÷@‘ÂRx¶@-)d wèHÙ[ fϺdñOíWqz×è3½zÖuêÏ®}žêéÍ·Uj€o•⑺ršš÷¸¯+5V‘ªÌÃØ(¨YG‰<„KG ›6’¡ýøïwØÀe’E–Ô=lÊ(àÊkvëñÃù @hÜ ‡v/¿ÁÜ*g¶eÁ•S<2ï&(^ì›^”UA¬, -K¼#U;ïp¤¤„öa)ÝáŒþ)Ó‹rJã<ö>˵*µXØoB#­²|ÉwêcÛ5Ûé2ô{e|ë¦H@>5Æû±ïëáà=¢°BÆû^6W.įϳ%ã aÖF2²w0§0­±”îcFŽÔsÎâ{Áù÷a?¯]s86}3ˆ?? ÕY•+„ÖÄ£‰‘¥ MŒÆH†ö>/2Crd)Ý#¤Œþh’ËiÈÃís׊íñ ß|‰Ñ’Æ#ƒ+§yx7òî–ûwˆd )X&ì~ù-‰ðôS!z•–}d “¨‹þõôÏUÁxúk°ÒTů&о³,‹DÕ-âì~uv-sÔíä ®Jóí¬2xsŒÒÖ®½ÝI,qÓŠÅ»ÄÉÐEÚ©[æQ­~.s3ÍS×ÇK{hÔå2ŠßËù‰¼uÒÏÄDDÅDE¾Õ ÍT/ã¤Þøºá¹üÞ¨V'ïâÞü6/M/JÉJ÷õ›xÒøûo¾%Ž(I`„¾ù¾‹Â‘‰ý QF}ÊÅ`Yh¦F0KúVÜ)ã×S» Æ“2_ÀݯP:ýŠ,‹¸h‡—©ž— êú2é{êû*¸€ádéd9ä&¨xQÔKzÅsÛ Ú|Û5ªr<ºá¥Ë’s’‰i±(Ëu±5P*Iqqj'u%jøø¦®÷c×µÀó 7+¤i7œÅEÜL­ÈˆpµÌ¢.x4ÀªLC,ã3¼y’‡…s»oçEûT¸K¯ÐðíZ•C6£E9[kP©S6žËHY¶^(­¬1Îuíò,^.„¥ï¾¶ËIÝîÛ¡íeuÃíùl”Ÿ¹ñ̼ʡYÿ!ªv¯nœ¥0¬ŸÕi¨Ø,(S1ppZ]›œ¨1­ÕjǨµíӇƄ6^±¹mq’ç\•m†"×»• T|l¢±¿©Û˨~»z:jËAÇ ÿ–m úŸz"¿âƒßµ9ˆ¿T ZÓÅÈ»ñYmËW62hxߪ›Ï×ó`ñ^=Ìçzº27¡Û+zNñRHâ#Q<XËë³ÿË2öÐ0êöÔÌ—n±>­ýÆ×ýÓé…›4IIéiËKH’zþ§z·PæšÔý±‡æ9 endstream endobj 1078 0 obj << /Length 3458 /Filter /FlateDecode >> stream xÚ­ZYÜÆ~ׯX4 h)²Ù¼”—Ø‘e;à$ $Aœ.§w†‡óXiaÿø|u4‡ÍX,°löŪê:¾ªž¯î_¼~%7QaÝÜ?Þ •Û›ºã MÍMfÓ ‹³›ûÃÍ¿6÷{w{Çùæ¯õÓ­É7n¤×Ï}7¼’¡úQŸ:v(iæ³t>ÜÞÑ2]õñØ»ap[¦ªªÛjlžos»ñ» ò÷¥î7 ®—¾²-›çAf›ªã½·Já°ï¦f+Cþ«ÿ¾ÿñX¤Êc˜z“ÅQDZ°è>޽;¸† Ž6UãÊ–šŸÛJŸ+;y~èëÑɬ_¤§Þº²ñ›ˆ(¢MÑR¬ÿFiU»–d5úuƒkï ¥œŽ]öѺ2g EiP˜\ªGÚ†–$˦›Rúz÷èz×VÚ+»ãymöÚda_”IJ‘ÕË3À–Í®ƒ(öüEz? §›Féʪ¯Á­ÅYïd\6ïh߬U½LízÏ`žŸ1š 4v>1×õCÝ@άjy² nïlR¨ÂÚZXÑØ¾nË]Ì)½¿U©Pïž™AKɰu£ƒ2Ä¢7ÅfTYÔ]«g)ûz»u­´ûîàwu²ò©†\цÎÈH÷83¹æ1ͳ 2Â"¶'‘„›#}[ÎÔwÃ(­cÿ º¢ÍN^ÉNC¸ùÆmR!ªÛ­ÓEK^¹Ã“4®®ê±ÁfÏÒÕ»Ÿ¦ºKĽŽ<Õý8éÝ£GäSÑG™ L”*K¬8Ž?o:¯`å¨j>¶;ëY7;⢮äå‡(¶ßºãŸÿ…ÌrâäD¤«÷¢®º~‹v DAsÎ|\šdAìe-*“ASëñq,]¼A33˜ þ=K«ž³4Ø'fâñÊÒÄó©.uÁž=Ðëw‰Y:]/¤8Ì‚‚¤´$¦¯Ÿ°¯Z»êТ ³ÙzaÕâ°ðåZ"4v ¹×ö¶¯Å.dx>Tx®“Ö6Ô`0Âð&öØ€‚šŸD¶8 cÍÖælÍ+ÚË]ݸ»~jÕ%›^Â/Ïzn‚ŒF×6ï/ä1Ä@÷â$¡ëÀðrBxëzœŠi¼yGÜ‹ŒÌ†ðœóê´Qú±Q{ÜvÖ-·³\jQIjÏ…ô}PBgà ÏyM³ Ï5< ÝA½>$¾D# –Çž¸ëß¿’>Eé£tUÙ@A3tÒZ Ÿxƒ†šì»®<\ó'žU ÍsŸF³°e’l~tÕ8¬£ ›Ü$ ž¹ºc‚@²ŒÍÁi8²GsU-P ~䣫¦±°q"yއ>³8ÇêIœa¦¸ï+VýfóÓöŽ È0B¥Ýö•t—òغ /É“Ê,ŽérnÌ»z/@o^d3f2Ð5ž&Γ€Ò0‘Ínl—:´ÄÁž ˜I¼‰L»ìÇQ¦Ð;Q â93y%мìE}"J"ZA*¥¢ûî€dOðQXG=Ò?–u 1½Çîâq_ЇNg¯´Çé¡÷—2$Ì£á´<êò’å^9g8w\˜óC˜„_~ÿ‘jå£ (h2ŸšÇÊÛ‘íÛtaû¼´T?N½h©8ƒ8>mÛµ *®às[à™ª×ÛŠ‡¯¦9wð<pŒ¿æD£, ¢Â®·ÛãñÍë׌Œ‚½;BËw.À¿k.ÕÓSVƒ\ívJÉVÙQrž’‰‰þ,cµR_•ƒÎ±ÛMEbîÈï=B'»kÛfy`Su뙲OˆõЍâÀ鎑r‚O–l?#6c¢ "F—_ayý:Å뿜—[–y”­·cʼn6«µ„DPE”Æ•¿ ðI¢Pk2p(ëÙ¶–h‰@§‘`â㫉ñ[àƒ÷Û“æpþ¬" ÿ’û¥L‰ãåXF$¦@# 2‚Å4²'ÙØÍý-œÀó‘ðè†,ù¸çÜ%ù”ÑùDÿ7¹^>‡“Ó@@‰“ç‡ ÷¾ÔÌ[d—!¼­6Ú×Ê“¼Ü4ŠLçúI¶pÖR»I½yCô 4ÞQ"ò}ò³ØZ=?Z+Ï|ÿ¤õSeÙ'ù9÷‰c—¸iCÊ1Ô0ÆSÎmÉmÑ*ÅU‡“GPS»¦d|>:®‹õwÃøÜ¸Ïz™ Øål äaoĘTÑŒ™Õgðä*‰ 6WCRœ×¼OD]ø³#QsX§=´f(Žæ¬¬XÌJ£!!—¦5å …ÈTˆAˆm壎¨òq<®¸>ÃUœÌM…¦ë»Ó·Š¹ʰö’j!=ÏòÜc"wî4—ê«z_ƒÆu»ÐÆx¥Þ´Æ+­ŸæA<ÅXËž±W´óOyQð£'óa®Ï_Ýv E—+y!R$ ‡z×¾RP1ˆIªñú]šŸ{Ô¹Û …Zíô›_…$qnϾí*Ê‘“l^¾üÖ5M÷ò¥¼þ"ª¯ùvO‰¡âMqF ÙÌWÝ“…·°ªÂ‰X·¤˜œ|‡Ýx¬¥ÎÝÎg)Ý|:—1vQ #´œœ rÅ‘Cf0'é5y/ëm ‚c¯öÊv¸CHª?S把<ˆ“bµ˜Íþ›ª3pßså¤|ðÝÔ×bÒX`Iæa –IÐHEÝÒXl]^]IE¡™9ÙÄ–4Ò&ô-yx†¸,CSPN–.N_ÕÒ3)bï®Ñ¥ˆ[!ôñaót¿‡ÛŒÂ-a(¾ ²˜½{á8¾1ü4•Z¥W$¬:ï¥j©³W(âS”ŽR徯dNɘ/V÷»iXMì+yäʆa<¶?=ySß0ê5HâÃäÅ»F¼Ðœ-i6êÉ0Ú;ºPr§]¹ÁCK¢4^”\a0¾”2ák)R´4;ÏÎݦ;6HÊÔâ>ñdX/¡ë‘É©uÁ.¸ègÒ‚±»âίŸ\;¾yC¹áó÷‚Ýq¤w²ØDk¼™Ig¼«Xͱ±óöÇþ6,úñÒf¹× ×—ˆ]íÅ9è46k} Ę„’2 Ïïè®_®„ÚåÞÑÅaI¥y ÔËß’~jðþ#—'&©¹¤ü]áƒÞ8ñÿ÷Úé£ôýJ b`üЦ j),ýúœà5 Ó5ÿxµþü8ÿ“Iºç2 µnù¼ obdb‰f CE¨9–}É¹Æ ïr%“¬Ë—†JÜ¢ò„xjÇ%Z|ƒ& ß$ðtC7êÅ ÞZïMâËZh•ò [™-ìÕõݤ<ø‹¦/ˆ_ß¿ð¢M i‰Ù©/~z Ý„¹ÑŒE“‡ÒÛyì»^wˆnÞv/þ‚?¿éßõn±íWt×uyP¤©e­Ä¬$Á™Ù†í|Ë”ß&TZö%Ë4èŸA°þp ¥´É •0Æã«ƒÁ'$HÔ?S‰KÀß\Ä &53,×ú]9öÐr-¶ùÒ—x ¹xZt¯*Ä‘¿(´F/6]'&dÍ‚–U5¸qœZŸ©]à4̃4ÑLƵݴÛKþ/Å} ¯¨a í=|XÍüáRéúrV}ôÈñ­Ô¨BèÓVxê}e„°b̵ֻÈW¾õwÆ…¿þÓJ„^-¡u*~‡vÁ]¨*´§ª]õ]oQó ›$%Ä\š/€|ÈÃà_C䘗yw•R¦ØõÛšÉü§dø}-’ú[.èÙòýûe¨ã«Ü$)6ÿ¼Í «'ïÃá®§j‰ßx_¯%BQ–Áj¬zWßµ«_2ï‡ÑÿD ý;–zák>‹Ÿi¤0_ÉÉôÅ/>€Oþˆ`ÛMäbôuv : *y¤Y$Õ WS ăâß~jœÿ¥ÁñH›=_ó)žËÿ‹OEIæ—üïÊÚ OÑXyÝCEiФN‹Ko!D– ¸%sÍ-ÝÙ8 Â÷¥+…,žó@ˆv bO™Ü|.58®—x´óiÇUp®“n*ÔªÜEhDt¯OùYÖç¾`ªçóN#K= endstream endobj 1075 0 obj << /Type /XObject /Subtype /Image /Width 60 /Height 83 /BitsPerComponent 8 /ColorSpace /DeviceRGB /SMask 1082 0 R /Length 944 /Filter /FlateDecode >> stream xÚí›Í‘ò0 †i` î* 4k.4ðU@œr¤ fr¦ ¾w£ÅcbÇ‘Bì4ž–Ù$Y’eíó™RÇápø§Éñx|æ-—ËeeÈívË™ù|>²ª*Öp]×¥0µíe¿ß—ÂÜ4 €ñÚ.…y½^ÿô‚™3ƒm³Ùðº#ú,Ûíö~¿ç©a(¶7ŒÕóù7ºî÷WÖ<\JVÀ§Ó ``¤V„M%l†& `Rº®ÍÛ­a}tå€Í^Bœ 6<°˜ôU¹vÛ’—†ßµ½v ð"F"_tBìëõšÕ¢›ÂnæÆ¶ç¬m•ü €Yðýn·C˜†/ñÅLØ0éë½E€©Ÿ .ùŒ‘Œcpþ3)€Ajç~ µ­Ùpc>He›¾ÂoaÀŸ[¶¿ßxÁ*DI~bö$0ÛF°ª•`›ÛmÖp [ žBÛ6Öà.Ç–hX>Þ¼¸ ܼƒ\ÛñÀŽ)ÀzyWkŠõ* öÀÖÔÔ$·úÀI#I›K8†59Þј¶‘òŒæV{p‰=[±»®SÀ÷û«(>&AºƒšDu¯Dh~ò&<5U'ÁÒ\èe±¸¡ÄõiJnœE¯ô—Ãë…”x¨ªJââ|—këÙËØ² 0W¯˜b¦ ©ëšóÆH?à…Š'´ÒuÔÓÒ;3ù*Vh*Y5ÒÍ̼µY›×6ƒ/ñÇ^ŠeÔ)3l ˆmãµÉ«:jQƒÕËå…—¯£TÀ#6@^¶gžìëFb %̾»TþsSä±ÛªäÞhΠOfìæHª2 Ó&žsâãÿԎƘ#û$°zûÁ)´É¬›1{³„¢Ž<·*ÄžÇ 2«øÂiü–PX„ ïaÝØñÅž‚Í©RÒÇ*9¶ïN*; ód¡3Ëý¶oAÆdN°%—d‘(9pd%Á:…÷Âûì¥þ§?= ŠÀ¦E΀RkûCgmS9 åy¦é8ÆÉ‚}aF²x#‡ãH+ç­I†Š6°ÛÉSË,[’ÈZÒÌ ØÑ«/Á-£öªÙzi»Ýò,²í ,´÷R1sƒ+~VUU óápà^b®–¢gx’¯žçfæží²ô\bo<3ä ê/WÏõÜôEɯž¿ö\´þÆA_A®ÞùÈñxäÓRþçAfÆD¼nòx<‚qíj é;g–Y 4\‡ ‚¾›ê?‹Ï2ø endstream endobj 1082 0 obj << /Type /XObject /Subtype /Image /Width 60 /Height 83 /BitsPerComponent 8 /ColorSpace /DeviceGray /Length 393 /Filter /FlateDecode >> stream xÚí—KNÃ0EƒX£Á€Ï •Ø“ÎuÞt³öÑKa RÕHVä¦Í½ý¡¾+=9q}âÄõµŸ«jX©R„Ÿ 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 :l°„¢cý¿Öœ´¼`yÐò¾µæXkµÆZk»µ§X{™µ‡Z{·•3X¹Š•#Y¹™•Z¹¨•[¹·•ó[g ëŒc­â l°ÿ‰=Ä™nÇýîQ¯M|f÷u*¿S9N1mb‘âãbU—·ïº^´úøë·nµ+±y]½á[êVÛ6Ó~‡ïãT÷ø­Ôÿr¼ÞÒõ´ …Ž£—B]î‹çTŽšxÊæî<]eþÝÖÿëtŸb“®·ü¶‡ì¹ÃÂóÛþíiŒé]YÝ8ëÓ0t"º[ãÿI*ß3ÿÏ’ÿçU¿ýVðÚ°Ãÿ·…ºÇ&nvìÿIqêZƒ®:ü?(ø?öÿÐR?—ç¡Pè´ô Fé§Þ endstream endobj 1086 0 obj << /Length 2892 /Filter /FlateDecode >> stream xÚ•YKsÛȾûW0{1T1! ÞðÍ[»›ÝÔœD©â@rD"XV­+¿=_?)©œ­R 3=ï~~ÝüþîÍíOY¾2i˜¤y¼º»_•I˜$åªHó°HŠÕÝnõÏàãMb‚zoÖI‘¿Üüëîϼ,ŽÂ<3Z­Öq&U)+þdDZéö²ÀXkwÒylƃ´þÚ|¦}í(û™le¢°Š*Cû™029vVfUÆa•d«¼ŠpËtuwÄ6‰S¿ZǺ»‰ËàIzãÇ»wÔ‘“â‚NÒ™‹‰››5:VGlÝaÝýtc‚¶Õõé4ôõ–v8ð+ˆ¦[9ûùF–›`À¢ºú®qxÿVgµVÎoõÒý==/Ó÷ Ëó" ýóvv¬›ö½p&6œÉÃ$OÁî<,sáö§È¯01Ö3 ȹ1«<-ì”Cî¸wšáÍñÔZ7‚]i™u·#z<ò­eΡ?Ssw”µIpìÝ(¤m<öîÑ8×Ë´É]. ;0ËOŽxgžxh„Ñ:‡xj/˜5?$I¼Èå%u;ØzGòJâ éè›à$^Ìí¶Ù õ èNôuã$k’@ÅÈ4:¾ú£ŒÖBø|“å¸R=Âu3È’¿{ÛÙ¡ûÁéb"Ÿ6uÖ½Ç{RÖJÝ_~Õ 2eX±<Ìvýpì'ǺcÁÀ•vª7­мßÑÙö^Úz¶™HmÛmûi¨÷Ú­ÛVnBvc\~ùLÿ¢òš#ñ¥ƺ…V»ó/Š%J –ª`§îÕ}ÛïýRp¦mÔh’$Ui¨†­µký,N᬴g›Ý‰xM¾d&kiÃNp¡ÂünCÉŠ*¬ªB½ N3<Ð!Ȇ9ÂVÝ·rÝÌ™m]&2;AžœpžÖ:!ñÃñ}šQ‡žxÃiеÔ{ìdÖ’+iÆÖóä¬nõU(‹è¦µWÑT\\áÍè…—æYU‰:ž¾S!ÏÚO,„(¨Á¹ÄnÕ§c”ÍXôî½m­j:Ý®vºì|KŒmf³1yX±|™éÕ®–Ï'“¤§vÚ7Ýw2îžÜhÏžUpÙ*ˢД•<áS”EuK—ß“1g3 6k iü–=ÝCŒ"51é Ù/¯9ôBÛy’¤‘ó£¨7ê47mŽÍ¨´®ÊTUvQãŠ^“F’…q9‡ÅÙlŒÄJ¸€ûžt$ƒŸí¶íäš¾ºè%k9 ™s7Nãĺ‹î`[[³±eªŸ Š<3 Žîu’˜÷À.goÁVÞ¬3S"p°žaÙK¸ì×^˜¨Gì¦f`…(óÀÁ9P«¦n‡·‘î4äŒöBåËaÎØõñ(Úé&_íepGwÃ*[’¢áR/w ÖØ÷­B̼bü)Bp`³¼2ì!‹þ·û†ïÈ¢8ŒÒËåñóËòš1¾a]O~$u/‚Z`‰ÚÌþK½%À%~ ¥VXzó`¢¸IøÇ^­µð(i¹¢Ç gÿ†Q;?Tëi`]%¬CçÀhéóì±ÁLè‚I;»{ÑñúˆPUaΤ¥ ó(ó¦ùûß‹u?5°9<¿Œƒw¤‚ñRêÚˆÞ*–Á ¥÷' œD§­¬Åp„2êÈN¿]ß­ÏŽg0¼ÔõÄ\ÕýèZÆiÕ…ƒmΞ°§‘hœ@ÛÄ“&s\\*F">fÃЭĿ«®$^Ä€fÖ9Å7‚'õ4ñµÉ¬GÉ™›ogX¥×/ù> 6ÝýP»q˜¶êW(Pëö³Þ%\ã®»«»¹-ð’ Á÷þêj³ou6ì~¤£oº:Øábãg²Gy —¤ à²r§'®Ùº?</ ²šUŠ•Q’, r«ØNà0Q'É‹èÞ÷BÑ(Œ–¦$“d•pñÞH!ÀÄ‹’OYÃt¬tæ¨j¨â1!¦×”å‘3…¸‡[•X"çDâõl·Ó l9”Y™(®û~®ó=©Ã4>sVr4OBcA•TCEð–}q‘h(üØ 3Fmœ7·}}Î&2-kñ‚©iw'K²&i~Šöaž-éМ!!jöïÌÑí¤.äóbül}’õ(nBŸw.eªS²ÞÔçDT9³¾f3 Ú£' áHí‰3V‰”gsÉn˜Ë<ð?âË…òU²fËtý~'-!¡™ÓïÃkE †ù…ãõ~Ë|+Yè["úöî¥Òfœà«aêä³OÀµmß¹©µä±á…ÛOƒÜ”i`7Ò9!(©o6[z$®ô˜8•JÏß7SwÃÕ·Û즩9YÌ8§õá&眖ˆTedâAëÑß*GÇ… M‘¬bCE‡ü\!‚Þ;äÖêO–øíç?z´èsêŒÎç5dÁYüYYA™y °¯ì+ÀTT0Ðz!gï\«k:¶‡*®Š@øpËœ¡)“ ÿ*+¦/2ë$Ù¼Ïúu-?¨ÊUF üZOèã©Ös>~¤ü샌KBªlxÿÄÆž^?à0Ž'ÇËV´O˜ƒÑk“b± öö¶¥£éذ³ã-O­+&94^Cçý—²°@\XötûGÂ~QÐ —KFZfÅ=C}\[§@OZIL࿪½Q@"°ŽÌêä1ÅÂ/äÐ>½ÓÜEQ+¦týøš´sªhè;biî±r©fT {áAz¾r »­]ãWætÒhøä³JP¶µg±–T@›£àòH,n]/›åõ„£¶uëÏÐâcÇ5ƒñ%ç`€²\3sÑ}3íÅäiá—sÄXV×…cƒVÀ0{:í‡zçëÚÍy瓌×'­ÔCøÌ=ûÜÏ$¾ÙUîwVpœymÉ2e.–HÙ}¿U°!GÞ´šŸÕºlÓtô»ÂuzXK_/ùÝA·ò®¥dçEfØŒ–sqçsˆÂÔáUÏGa‘{·|ù²bŽ}´ÃüóÖ"îÛn+®RvN<ÿZþãò…–±i*_ ¤´»÷ˆš…ÿ)¢Ê%;t´Ré/•”c¨ßû½.´).³^$7ø¯Îä7~%’ÿÍ#âÿÓf endstream endobj 1097 0 obj << /Length 3369 /Filter /FlateDecode >> stream xÚµZ[oã¶~ß_á 2+"©ë}Øn»½`O±èæ<m›‰…•%W—$Fÿü™á u³œì§Q9ä g¾¹ÐßÞ¼º~'¢•ü,ÈÄêæn%ü Wü‰Uª|¥ÒUÆ~¢’ÕÍaõ»÷¹Íu¹i×2õNÇõf½Q2öÞçåZ&^÷D¯Í©iÍÛ‰÷Gÿ½íJœÔvô=/·E·3;ø&¸§¡ÑmEïz·ã޽[Bwå‰ìš¿éš:ò‡µÛJ‚3kÓ44 Èýyóó XÌäÀXE«D ?UŠ;áüª«a’н7n¨Ñ@×Ö )•xEÞ´Ô­Ë5`o%µjóWgè{Ü5­. Ýæká?ÂãQÕ]?·uý.’ñóU,|gÓ-ÖùƒiiÖôÐÆ¼©LùqNgµ•Ò§u[¿7´…¼¶b7Ý5.¨ï‡k{Èë4ô|+B1Ó û™Li…ÆQŽZxvXð¥¦å€q»ÊjѶ;RZUÒ¸»ªæ™EA£™¼òv¦ÕyÑø$`t,ÕF&pÄñêf{ûÖ*”WµM[kÐÙ(^³ÅC©óã¢@Á œ[ â•}9v5ɤÊÌ¡µã„Á1UùŽºxhQtdÖV8âDÔöÕÁ\lùA¯oÃÖT({è•öHáQT-5!¤ÕìÂX¸…ÿ‰{ØÂ©žÕZØÉ´ ³Ò³¥ÝŒùÒkô[%´,ÆÄÓ…Ö… 8:ôˆ«ÒÏÂh…/B(¶êу66FSewý9jÀ9î¬J»8ösdöŒvIùpÓ•?O½l˜yQÇÆÜ©"@1]Ãm± J9†–õ/ð}ZÊ+áÀ$A¡)ŒãÛ0ˆžÚ=ªØrE2ò¥âè'/gè`ú.¬üÖ=¼¹m„ÞVów~ ﵱꘃ]ªo»¢ÍMsƒ Âpöz¿T¨-뉑K—‡‡I2±Ê$&cKz «écO»ÇNÌ«zEÄŽƒv¦/ºh˜Tï¿ÑÔG‹$c¼Â^Þ¤ñïýçô‹%f¡Ÿ|™z' š¥BHy”‡yáÕ$mÏbR5¤äM^]„Gt‡ü4LW1rù/oT¦™ÛÀã=$[œGÞ¾m¯¯¯›‡Òß›# æ½ñáÊõmÅ16½o2½¾sqC´í'üÜýl÷‡jGúú‰ž´àl­©P—Öú…ÄH2%ÇŒ–ÙŽMPy–}kÊÕ…¼7ÅqQÄ`ý~$ú3¾ÄLÏ‹=ߺåg³Á.x¶y M,Œòâð};»²7jV™>$€è/„ãTSBˆªÇÂ\M¥qK~n’SÙá}ò3ÑU›%}4ì©Wؼ¤D óª¢XBµPBà,‡“!«áªËq(4lº™ı6øýÉ!Þ=å×€ÌYðhõ‹§|©Š^|÷îŒõ(~*’—XwÞßÊŒ˜e]ž¯˜€ËçYwƒ>›õUÇúrÝAEù¸2˨žp&8 Lõ.‰ÇÛŒ.íwFÎ H/A^]õÂ’#æçtÙç«+Ñiö2Ë<î%–gä,Ëáù¢‰/V^`™G}Ë3º¤1QDî?|ì}Oí¾^D¯T–l¼û60ö¹k)Xr@o©y%æŸà;Ç|•ûjš:)¡Gˆ‰2T¡ d²âP³Í¼Q8·TŠRad£!ËçP6êqSe¶`l¨“órDð‰òfêÚV\qÏÙo)ªÐ ÊàC^W¥«Ì…Æ´˜ë7¼è¸5ÞƒM-èJfL–KÿË%¥ “ ¸$8¯o ŽÒÔûm i¾u¹¶P¦†nÃ^Ï8w`#´ˆG‹‰Á(“YvÀD‚Kœ¬íèöQ¶)üæ%W¨Rap2%åÜÖHI:ÊîðmÛÕõ cä áÅ P Huw!dôî´i«Í}5¹/ =Ž'Á)Äú ¢õ…6wDOº$™(öƒX¸P©ç»,€DŽó6Jðg™5L•Û×[Î,,—®ôQcÊw1¡–$Ô‚£áßleÑVñÒÅÅþi:»<ÁM›Wõ'Ð\¬jÊÅÿ6€‚öB¨:º":ôØJPŠx2ml%šºâ:Œ¥;$A!?tËÒ¸^?ö…»?>i™B`å”è³®þèF'Ó™¸ê3‹ CøÍæ`˜¾pö°}iMÐEÈîãé|ód¶]‹ÆÛ`vAhl‘±O]Z–¢ÍÍè2¦áR•ñ Ìáœl ,ß–\Žà渿ª.Ý#É8óSg7=éñiÚ›#]œ‹"Xr„ó[ã†ìè× ÝR\|RÚ,à:™t¿5Á&m6ß­jH#Jê éžå¾RûŽã~‘K‰ · \ÈÊæäìùG狦~&ÅxÑ…DÐzaÉ‘ÀætûDøýP*jöç„M%LFè j–]Å";¡mˆŽo£tî_4‹ø¥¬ftù\4ÿš gvS,üT2"ýM „:åo'ªÿ³Ì… endstream endobj 1111 0 obj << /Length 3471 /Filter /FlateDecode >> stream xÚÕZÝã¶¿¿Â DFÖ²HŠ¢”>m®¹ä‚¤IïèCZ™k 'KŽ$ïÞ6ÿ|g8CYÒÚëä±HpKñc8ÎÇo†þúîÍúÐ …Y”‰ÅÝÃZé"‚ÿÄ"U¡RéÂÄIh”YÜí¿UÙõvs³\©8 ž—2 š#}Úæ>¿_Ê º]Gmír%‚ }õ ý-ë®Ï«Š>rúSÁP*rîþÖÖ[Û.E°ÂFïèÜ4‹“D°µµmó¾iiMki´éJè{þj¹Šµ :\l-MélÑ—M½üõîû7ßܽ|Ì83¡b8g±f ø‡? ÓV~Þj4ñëW8§ì$(C1ç@Ãrc䘃ˆ‡FûûY|ÿ9]·ˆ»/DE~šˆT˜$0M‰0UЦ½¯AhÒý®ì°•û¼Æû>æÕ u܃ÀMà.ªÈxc¸ y ¿eÏëŠÆ­{\Ò݉ †[-m]¸¦õÄ£¸ò©tú{QàvýNËñ½HTbB“©)ãù¶¬ìª=Öû‚ÖNÅ3>x¬âPe³ƒçŸãØ2ÿyÝÔ%*' Å;ˆ ³X/ŒHÂL¦´Ü$ÇœH’G¬Ð>œ‚nŽEYoi,§¡®om¾ŸNÿÎ~|K]–Dç¤ØS×&ïó¿aS%/ðƈVã:JZ`[Ûñ*w“4â¾AHõœ—“Y±šÈ™7ˆ$ôÅÞ|Z’ Ä" >îl{È™k·ˆE(¢lXyɾü¼Õhâýž“»Û#ÉËM“P'j¼é“ò³®my’œ®ï Ä±’ÁÏÏ`-9 #}! f¦RyU~Þ¦æäœÌËMSPmsE~Ö—Ü®“ÃÍ‹ÝÁ2â,½~džwíÈ3rîÈé‹M¥3-¯™gý‰#ÏèN®Ã^ûw¶}*·_~ùâö¬Éu+ðó®ð5'çD‘½ÜÔ„ Œ¾. ?ë‹bN—DÁÓ®,ÐñìèݸˆÇrc;Q¿³eKƒn試:ïKð^ƒGèL :SƒÎÔ­m.¸¥$…P+‰‘}î½’Š““#E—ÞŽ=F-†ü^2…fäÙpðçï~úþ›;?ɧš nzš[Û}5„ÎꙺºãáàbeÓx¢ù÷t*RFEéEbdÊNǹÅݾ}ÿƒu¡2Fù¹Ø,€î}×—=úüÞR R#?,ðm™ûÁ¢ÙCGdDA@â}å=õ<4 1 Æ]â&ÿµLu`¿ p›²+Ž]G뎅én”õ™ý­h*-¼;.WƒTllŸ—Õ¸O]jRf!ØŸ'zљдÕhÞ9_2%æìG½ØBfôxËs®„g]ÛqFÌmFð1š¹Z„ úc©Ciغ8­Ä{°R(ÿt³;ú~pZ Û¥Nu. ¡¹ Í8ñ§Ú¡ªñ¶ ºá–ؼ'(;ñ,‡ò@ç ua¢óŒ ›ãvx<ŠÔ§Y&ÒvßÙŠŒÕÏD"¸ÝæeÍdæàÄç¥Ãf_´ö‚'ÐY¦šÁÜ ádŽjú›ÓŸîR™=µŸÊ~G-2 , Þ~óáÔõÃÛo©qûî#S¼F­}sd˜E¹Ž´±HÈJ_Á®±‡•eSv¯cW9¤1xàÙip>c†:…Èg¼G§>ôdi.++Ì}³ÿ (×9-"@¯øÎpÒDÍ`à;Gøi©5pîôÞ{ì;^J"„—ÚµÔÙè çÐ'#°}àštA\í,g Ϙ‚cÒÁ.ÇŽÇ!‡Ðt0p–÷DzÚP“rK\ñTÓǾl[g30òí=©ç]ŽuÖ¹Ç4¸ãÜHྰ÷À맘+¨KŽÌ:oªÇ³¢-­emD&Ê=9 Øqë kn¨¼ìlë¹Íë+˜nAÀeNj°R¼Ü¦ö>xö]jg0µ£Šq&Øy~*`³¿dzÊ„RqØ‚` Y …;yÒ h“d±§£[5§%6ßPŽ_º` ôiÆ2èÊý"+¤:öÁI`N‚ª ¸HÕz²H[ƒ²“§" Ð\μê{JrGýÔ¦(éÓR™¥7¼OåW笌\›Ö9¾ëûÃWëu[>Ú>ÜÙÜËÖ†ðϺoóbTÖd ?’Bžñ = çW1Ø@´Ø'¥ïóœd¤%:1ê-I.Qt÷ƒNGô)ÊkJõ´î½„{ Ž{´x‰{´ô¸ÇßbÛ#Ž •w ñTÁâLBÐf¼¹!“³Î¥®ªàxQ)=l›ÿAs’HwÔG˜Ã—+ 0tð$ðÝõ Å7D—¡ô*›w<ƒ }^ð–ìöRt«;v—&øw¤£GLý”3ž:6¬é|˜Þ%ú¬.ƒµäQg»+ª±ìP•o6p±ì.¸£fO½ó”Žƒ× )çŒÇv¶:œ*Ñ¡HB(oê9„²! Ø$æAÝ™’U–L0äTa” ˜(âÚ¹(-×»‚;Ó…N.–C©V¹‚ (àn¸,WÄTcc[Òn¤Ç·ä~|¨ÇUI{ÞíVȤbUh›m›Ãï+ë÷t¾WÑ>ö ò¶?¨IÈÍišs\¯Ìÿ!MI;×rMÄRi€yzºµâµÝt÷"fk^‡+ã=•·Nj.—`8ÕIðwÛÊžeΑf¸Œ¢q×¶¹Ô߉C1¤¥ÒãØÎîËU‚)©p)²S#¾4¤™ßÃw…û 3½Àq>™ìh˜Ô㵚$Æ@ˆî.^Ë8§N²åt!»Ï®ì99;¶œÿá@ƧéQA¶(Š;ã^dÉÊ£E8IÁ–~Š ðQ7ô·jê­w2£Zþ€DÔ=h9\–Çu;&Û5{Ëé%º“öùÀ—‡18¯ž»’‘dïmÇòIÒ¤ˆª È"V f:##Ή1 „âÕhÚ_.áJ©uì±ðæ·)fŒw¡1±g`/é„‹ØF%UcFá†LʆCiy6ÂÆãºœ±áðð<øvs ‹f¦xgâ©„¿CýÛÆ+€²‰¥x†öÔ8*œª Ýq¨)ãZ__!Ð>Nþvd|„o† Ú¼Ý ”lžÊ$ …àHwËиj¶¥ßœŠéU;I‡¨)™‡K8oØÜˆÐDfºêíͧ›ÿÞ€UŠ$ †?¯ì-… 5ªÈ˜ÊöÚÞR¤ð5]tꮢÕvþÍ+UÇÞ/à›÷ÇÖN¥î3Û”3[èjjjÅôÔû¸w—‡ ¾Ë%°W<¨W$­B)8Š£_±[ÝBÇÓuî¨ ^eÁm½L¶æ<ÿi×PãÁÚª£æèƒöê™3~áTõ³íFï%è°6›µ™»|??ë¸>÷dóÈþ‚T©óU`É¡››S ‰Ti¨'”í¶“¼´c²ÓÊåÖöÓǃ¾ÙRìki§b¤2iTʦ4õèž.I¸/§_`ã€,E( c R’ûa¨-íÜCÇ |¼0íE•åb’HÁj À»×5FDq#“ã5¯æ}ƒÒ@j¢“ÙJûÙÇÞ+nøàËÒ‚´"ïJþA4ûuŒúŸõpµ8;U-ø7BTmÀ¥ì±³¡ˆèº) à>Ÿst”Lv×â«Asì/ÄmôN©È £Q!ÓÙAìK´:=~éÈ•¹ßׇ yªªi~&Ó^ÐðŽÙ;ûøö½;Î{ú¦R««g%½ºí™À> stream xÚ­YYo¹~÷¯˜AÐ4½Ý$ûÚ7ïÂÎn°Î.båâ<´f( ×}Lúll~|ê"§{4²  i^E²Î¯ŠßݼúæÖ›4‰«¤J77w›RÇZ—›Âäq¡‹ÍÍ~óÏHÇéÕÖÝìÕV—&z÷ã»+­¢Ÿ±¥#·w}{õ¯›?}ó.Í–Äà«Ü$ð—ºÊÄUª77-ÐýàºL’èË•*£~æÆp•Fõ#iÔÀçî}Ä)u‡ÿ'î™zþ§~:£k¯TÍM=Ù=wý`ï¿çOû€«­ÐH£»S$šF2{:XÙ¯ö4w}{œ§zr}W7ŒîÆÁÖG¼÷&uvQ`C’”|Q:h–EÇ>Tígº7ô|L²¤ÆëdyÔØzœ¸ûñ‡¤/ÜN²ç–'4dý`ÛÚu{;0‰þŽ»íç#md×âu‹H â\G¶ «™N“^?¹Š+“mò*‹ÓÄð…‘Áp8#ì‚G4e4®»ç‘š{þڹϬYºÔŽÅJeqRêõ&]ÝÚ«,!ÉIttGlÙKж$Uš8SjM ÙÜ|ª©6¨¿pƒŸ_s×ø “Ô ã´uÝ5rF…Ž~ž5<‹d‹Æi°u+}:*|u¦y™ÄŠO±R¿1›îÿýàä¤F*n䯶Æ9¨jºŠFk[îžié<Îuä::œüš8éejUôënbÝPÂEè¬Io ˜¹—Ñ*ºú–»kîÀ 6öZ¹é¾"%¥F»iË„–#&= |ûæ!lX“|áÆH¾¥Ç‰¼jïÆO2q·³4>rôFD{æËò,‰u%²½]#ç_pñ@òº·')5vü¯½,Ò÷ü»öMÔõÓßóÇ0w ¶÷s³—mÀÈËh·ÃÓ"?Ž,H2µ¶59ºÎ 0´t}ö‰N^pß:/ã $ºZ—ûUåÅ­Š*Ve±^òÇï^ØÈ$0;ÑëU½\…$:Îzƒ:Iw>ºhêý$fÎD¦³ØÀ™Ø+ןˆåd%9zËÈ£Zº›ž…Z°ÊBO+ëd?êæË(½ì aе 6σ(¯È‹B\·Z‘{-ù2Nlö¹ØqAš]E¤' Ùt†ýïP™Rrƒ “É*Ï.®’8+%îÖ´¥†(Q·ÇÆ~Ë"ÉWRL6ÛB5:P„¿®VXä[ÁLšÑ~ºswÀ¡Le~Å{lw—HoyÝÿH¿¾?¹K¢´É/_À_Öù·Feܱ}º;µÿðÿ;Äàì$»ÕüûöoÞÿòÓÛË¥’3…ÌrÎÅSþ¹ŸHˆYp´ÙI-îmg‡z¢(¦OPbá«4ÉK—ðÚ ŒŽó2[o»äì §ÖÐa½Þuþ¨Nޱ«G+3hä…è" Ü›_Q½½µ®wŸîüèg9ø±鈆Çbè(íâį°Ç T’t½–e~a×­®*˜¦×JÄ<Ðè³ãóÀ‘&Àþ\m2Ĺ:I½¾×UfÑõ×—$WàÕW‹Åê¾îSS¸V¦Ìzå£kÔ ,êú‰?8º Ÿ¸åîø·>‡S/ü³w€þ@'¿p³ígrQ“Ÿþàd"©1~¼y÷Á/ångœë¡ÓŒÈÒ,.TR'·xÍ,f­à*{˾_8"¬ £¬–*úáí/W²Äܺ%UAPt}ì¨ùçÖÝó˜Ømc[ ×& J±ÿgø -É\n°,)1‚Vz¨üWàÑ3iBá®L%MûÖòGOn -¡ƒá³µ`¶b±?€›×ø¥"ßÇ_µ|€¡)XàjÃo¦öøœ†X'ùz°2Ï*ÌýQ‘—|dþ=²½ `pæZôP”dR±§9ÀEˆš#³REx•`qЇÕgÁÌ”$‘æ©^°@—\gM I/iMHt²9¬HÊð¬áŒw¼Zp¾ôkq¼%:Þ‘ B«ëÚ‚¶³ø±*@’ ™è®or†M0sÂñxÍcd1VÖùqn­?b-ª¹c#4ätrqqþÆ£¸Ùkr†m!3‰³Â,ÒW<7°°|ºDBÏú,„›&]“{9Húè´AëåÞÄ®=®—B ×8þzñxZ§±ÎÏŽ÷¬¿_žLçàÉ“³•'iª+©‚2É%Ny _Òm>:¯˜`#ªFÉzÌ5˜}ÿ ù^¼$|çI~ ?]¸\žÇ¹“å&â!9ƒƒ‘±k÷ª1<°vA¢Hiþ«·7¯B@Ui\nµk_ÅÕ&®høS˜¶õ󶋉ßaqj}ÈsrtÖ7O6…0—B˜[ÐJdh¹¥ÌziË3b´¥xÚuål«±fV–àF\˜Ì×ÎËí a}LÈ•èXêi_ð¿R}у•‚‹p¦ÂõݾöÜú‹{‡Áy±)}F2ò–¢ÁT÷¦,sYznÝq ƒµr8êÝ5àuˆ0宿 ™‰êÆí±ÌFÅŽÑ6üd=ˆ+¿ ÝºÈâ´Ê$«»ûÆNÖGsöƒFª°E¶àˆn8Ö¡Ÿïôu´·;0²1øè~àŠÌãL¨ïê½mÝηvö°Ë5Ž­Ñj|£=\ÓYYµd?Ð †CT€“[¸ºâu0öõ2"-°Õ¥Óù²ÑÞ3r”zT’¦WkÖÐú¤y€‘°cq ÏŸ§çÊ3Ú˜¸ÌD 3¤z¨ÈÇë#|î¹Û{3ÅÉ£JE¹œŒs¨î[ŽêçeæÙt°Tfdä´¢=O°Ý8s‘H³\I…‹0…xÃTÉ…_½óyõet¥ôLìf<ô¸ù#R¬2ö_•O°àãX{ÔÂmAb4Ä»£»¥"”I½º"¡‘åæÀ³‡pÉJJ¶U e)¡ÚÉH?OdÊÈzÒà s¦q¶BË]A”ç7Б˜ÂçõA$:9S<î#d}7sýÑ$Ñ›ýÞ…Ò6C0®ËßëÚzXH®äx¥Ï‚¡¾æþPQ‡ï @¿,ϼ ËÔhŸ˜ÀuÁï˜àÒ&n‚¹òeÊ݇VàmÅEiF<• ƒ8‹D»·[©Û{e,ùJ´½Z–q]œ*¡C©Øx$+k÷¾–ÃGhúÕ2šÂÖ°®Ót¼Î* À­Òþá@Ì®5EщuHÓ«:é=ÊuyHp%O`C*W¼Å“±¦*åP1éJœt´ý?(Óùî¿gÇëÂéù €ÌZPSWÝh}üX¾›)‚2<çú°T=_$ó‡ß˜Ë`f–¯T»:\zƒ”î!jZ¡VËðÝꇸ•|ÞùÍf~.J#![_ˆo*à TÙ|YÝDïaù÷ü¹l!Hô­¦¹ Alœæ=øßg£’ÒàÜ*aâßÐtOÑÒ¨lq{l=Ü•wÅÜãP„§×!£Xïqhî(–¸ñÀÄ ¸;‹…QD Âß oLø,³éyˆ tÁ>ãŸéÙ§ò๖ö˜‚ƒþÞzS¢ÎA>zq.U€§à¢>¢G§Iëé¢;J0"UažãÝ£ Ü ›°ÿìN/’Øî¨G…Ø覩‡'w`˜b®>¬”â úE×q€¦7¦<:ηc$O€)¥MCûžÙÐ ÇŠâ+Œ¯,>߈¡(°kî%«†_ãCÏkÉ)ûÅäE` Ø-ÃÁܧ"¸èéP‹U)å—_vüìT,——¡¬RÊ‹ä茤 ¾Àªd¹¨ØïJžQ&&8ÊØ. 6~Èõ謞q2)F>4îv Á¶YxÊ®Kæ?ô CãÞ5óÞý̧àã4ú¥ìZH.„×½ bé`Ÿ0`©1_½êÁIæ_Šb0ÝËOOi~¦ðŽÝmtvŽ8=ò†çQ9*"˜#ïFõF‚Ux‚TÙ Ä……áÓ»$ ËĆÔݰÎ 4þ@!•¼¦ó!S‰s»~VxYg> >â˸> stream xÚ­ZYoÜF~÷¯ü ð0lvóÊc6ön ÄH´OIP3M'rÀöýñûUW5/¤ °0àé»»®¯êÛ»7_PÉŠÂ"*ÔÍÝñ­ü&Â?…Q¦i|“™4Ìtvsw¾ù9øØUµ=Û¦ìowq‘eSÖ}Õsï³­kn5íÀSyçÁ'ú¯’-üóÓÇï|ÿ·/]uélC‹dÚE0žiä#ØÜ½»Ýé(Á9¹jöîÈ,hN•í¸ynåÞ÷þz÷O"­ˆ…¶\‡Zç7™Va®5“&×·¸Ek:‰ý€ ËîÀ½-S2p—©·=õLPÛû®ìnUðÈ}œñÈë˜/ÔjÚî\ÖµŒÍ¡êäÊRV”g¹zOWÊæ¡úævgL\êªìŸ§F¥açLMÕôcGçÜNQ+ÆÃpb;òðxyèÊCÅ3Âä|v$òž5Éè Gw* J{jX°ß5i~8•²²t }äóû}g/ƒ¬i;¼t-žpîý3-S,]wk÷<¹QF±arÇÞ6þÐ…ŠÒ ‰„âÞZ¹ËTPvB¸STÇ®ýÃ]ÙxŽÌ¯gm@ã`ûòra^•]Itïݱ|ª'l–÷Û£?§æG9Íêr³¦.ͳPÅ“fBr¯“EÐTÂgùt=äBQÜù•àC+«äÕ­{žs„ç­Yñkfó¦é}Ùð°h ÎÞÚCuàÁ‰{òn"S…Q´%3‹ÃX¥Lç¾ÛŽî2ÇÿŒO@{´õA^¯0†q §ÙhqÑ×’x jJ,LÔúÎÝŽDz_W»%íî52.¯sšxóø¶ù%RæaìÊ Â= #IùðŽ;,F§çNm@Þ‰ù²á ž©½ì÷dðž8Û °TçË0]³†——TŸ&]ÆðB^°>¼Jðá©xÌO ÓD€ñî6Ç&ì“à\þ!HN½Ð[zGÏÉE0³”ºŸÜ¤SYÙzn;9µtï0Ý:±Æ‚øÔ€ˆv?¸xàè”±ÇaÜ„Z{›Úð5†#3µA 3i: Ë$Ûy½´¬^a•ñhb‚~ôfÖWl œ‘Ä8w(šÀÖöP~«c‰ÜAR}<—I˜–YºØÕUûºì{KÊè.=îÞ÷m] •§ø°¸È-Øœ4”¶ñg0«éFæÏ TüÎf C²òÈ"öê™aÈÅcï•Qmp>)àÖæÝ‰`ÓÛ™¼å±{§4Õ‘õHG~@`#=SL€áÃ;ÞÆ? ¬Q¨çõ ÍÁ:¼Xz¶ðZƒôf‰ FØuÃmñwr‰ +BföèéÜ’™Ãi‡³Y¾Œ/Ðã_€zÙ±¸_ÊüB¼´ZÎX˜»Â˜VÀu<&*€ÃÀ¥Òoõ¿N€8døJnf½=CO ¦ÅƆöÖÝmŸáII…¤NYð˜è!Ù·ì[3µ4@ì€ò‰{@çä:|*¬€_̃]u¤xbGBZøm:ôL¡úÇ®=ó­ ßµ%0úûp‹¬ÂŒYƒ8K£³ÙÄL÷lãàÕòƒá!ˆPƒ&±òYž tŒ?0¹z`ê§ŒCóÜoóCäàe’‰†óñQÕ+þTE –iÖ{f‡:©ãoº¼9Žò0ÍÖ§\ñ¦™xSn[ IzÁÛý x˜uQE! ¢–˜„,™"é$4ÃJ\4ç'¥”âÏL’ß0(ŽC£Ä‹ªc9Ö’ Ó!žzônöèý¶Ïæ÷kyÿ”gïÖ»Ís" žéHãaw‡¿ÅÄíÜïã…Sˆnâ€$‚ËLû§Ræ’›À±(uf?ñe:Y…©xG §–£(®oB1ÏÈkΧ_“¸Saæ›}KK†J®u¯ž•¶ÝÎltÚp–‰d°¿ý ÀÞµ#XvðÞ¬ÐL@m—1pÿ86ÍäJúQÂ7×[Rɳ#ŠEœ×ÁÁ´NS9¶9ðEöÀø¦ü"{äß9Q£c_M~œ^tšL—éÃ7²‹/äh]z|&&Ê;ÿtvÎÛ1fŸ§ÙÚ²·Oó£ ¬–e>h äÝN(ëö_$ˆ§U4árbaÆÎUï[>T²ÊQ ë‘VszšBásä¥p•F÷ß c¿³½e<µ Ø4»2Œ’C9U‹¸$›â’•Sã˜Ï‡u’$j§Û¨NpÀÅŽ™„[Sþ¿<¨mêÇçr!dø¡2ËHG»wká·z_¡8Tüúº½0âw3,<-t;ÖŸuÖgïI§tÞp°äxž‡SLíñrW.úK(ú³Ãd:fz·  \Ù"¥6“R3ž©Mvµ²†{ft·€ìŠþ#‹Ÿú¹Í¢p.V«SšÊ©FOvŸY Ù±^)E<%—¼éÅä2'D^¿{·«‡ÊcóiRΗn€¸Ðå)O}aϾ$Ös¢°qUFÁ£ú²¯çÔm–Å$UÛyýQCE¨~Ñ…ü`­Wîûf§#„ê9»\G’6Á{Ò¢/%¡µð*[nC¾œæ±w>ý._9]›PåÊ/<êye¼R›]…¦(nvpÊþÊ;µìÚ±ÜôÇþ½†¤œ¡¾|sMºàdgëïDQ»í¹&L K÷[|j‹'Aé+Itj%ˆ9Žð¯Q¼„nÀ/¬m/;ÙÄâ ½øÌƒœúŠÂ²\¦ð6¤‹7:Ä ÈÏå¢>³¨d¸.ùºJñªêCÏ¢t}ÁB¸O"¿éi±)Bäë"ïwR€’8ï³è® ˜Ÿù4ÓºpÖ-¶Í‘Ê«>„ÈÙOs–>í(5>Ù®mv+»™X¥ ± >2Y†i%³î§zÎ è%kü. apÝ–»± ¯ê´è)Lañ_Òé¿\™&h¹¢g¢96¹ªÝJ!Ìò«êMú¶›|èË ¥MŽx!6Τ*áåU×(_G%íg§ oå"t)éøÂ¨÷MRŽ1ìn xaÅy&™Ä¨pZ\'ö‰Ãse$£R}Ò EôëÞCE‰‚ºëP€6s ‡©²‘Ä“:<´,Y!õªàÖvï>¶ã´xm{JSQ»ŽƒkÊY“°$ 3L­7/%ÙŸÚÏ»e½y«q*NðšI‹N×4ÅLÈ}¹¥r®–‡ù¬Rö9ð´k‡Y±~½ÇLØï©å8Ÿ±€k¬çö U¾ª]ŠÔÇÁW°H縰ÛÖ'þ'²!‰çœ ä¶÷Õ`­ÿB£`ëà 0jÆÉ K<Üé<ŒˆØå=ÿng¯q{Ê´ÓÜ•W誇±.;¦ ú‚²ï§ö¥¤°áÉÿðOï6)ÌÛ¡_z%µþ°qÍ\MŒdL‚wæ¤QÆ›Šû F}Ó«ýP?òãâ(îöã}ÏËa'Q²„--ÒàÃm»24_qPòî%KÒHÓ4]¿ðeKBà‘ƒÆ$jh‡¿ûð[E¯Å¨‰ ²´8΀žìAu+Lͼ³ÈV_!³UŒJÕŽÅWÈŒx*"¶1Ug9†s‡µ]eKûÉEŽ8tSNòCd ÄË—J½l-Ïò¹büG§µÝ€<¯¾ ·ý©:L™Ï:ãøEiÓ´ãÉq±ê÷¯ûOýWüç”ã3âÓñ¾ç½'µÕ5ïYòïwïÿõñßÿ¦w¿ý„<0ŠŠˆgŽö؆§êrÞ¿–@I‡< u¶Hð¼„k\©Sz‰©4W–jÀ¬:/ù£ÂB¯7^¥åå·Ç©¢ÂÞꘟiÏ›÷wo&PL+1ùUûó›°¸ 7ýÇ´lç×í ¿}ú ÛãœhTôäÖ,Y> gE2³¼’½rã’àõ©Žà_¡MéÒF©ç¢ŠÔÇiH.Ïɾ,²‹E/Ë Xijyëÿ®_\*Ö»)ݬŸêS„h]ã DëIZø¥I4E=¬©ž'…Ø.ô2ëp C—®½fgNrçÛ1È7÷ýPçÙa/S [säï.rŸL0ÉgqÍ·.¿¦M&¦i²¥þš+¶Æœ#l¶&*ä óÝÉ×/×$âGÖùžF¥“Î>H‰ÕMøLÌ{ÓÉBôsïÒðíbðÕ»¾C&y²¯‘¤Iò-7€º¯Ýi" ^ë»Û˜êØ'¸4ûÒÕ&)Â9äê„·LôCÕTuÛ=·©8š«ÔÃH:øžœ™Š„Ùhl¹ÒÎô\†œÓYn8”C9o­ý(×rçR¾Ô«¢ùÜŸÈÐHyž#õçï…Š¿Jb¶> stream xÚµZMo7½ëWð¸9„êâg`°cx7@kØ>,`ø +AùŒ‘Œ$ÿ~_qš=3‘šZ«Cp×t³ëñ‹Å*²‹ Æ™â¢!f\“a¯×l$z\‹ñWr&¢M!2‰õÊ&{Á5›õL)ñŒœC.éb(d¨&o(–¤Ï eR!*‚6%vA…b˜RÀ«ÎæR%BW(ªÄ†ƒ¨v'†c½ç §T¥`8—*E#=ƒ”ŒÔ{ Âû7ŠIªdÄ—*h’v¯I’ t\rT-è¹”\¥`<R4žYõ‰_ïeã}¬Ì²öžñÉU‰`BÎ*±ñÅg`@Ap‰ôž7J•‚ R{/UJ&àŸJÙ„X-ÄÅ„Tô©8J}CÃS1ðZ¤Šú‘k¯`ê(¹JÁÄCŠ&F®R21á?ôÞÄTÀ`çÚ'É&VÔ”LRhÜ3 ¦U¢6‡QW­ Uz/£YpÚ7ÜŠ^zI{‘¡+9í-^L^¡w)ÕÁÁ¸¤\ús1ÙÕ¡+ÎdøJd`KíPQtõ©˜X» ʱz <(GuÂ`çTÉorÑÕ®À³Ýiï kW´/E`yHpQ¯‹.˜ª+¨›í;ž%54Áî%Õg‚z,à-EŸA?:¢úñ0«¿ûê¡ú˜«KÕWêà±>¯æŽ¤÷Ô R+=_UV—óQ‰6 û×ëlc:{öìlóîÏO[³y~}}sw¶yûùã]ýýÃÕõ/g›7»·;óÞa²»g›7Û‹;óch‹:U!Ëðâd³"•lá:h÷Ü<{f6oÍæŸ7ïnÌæ¥ùÇíö‚Äe¾ýö OCö%Ø Î0!"[Ô ;ÈŸÎ/™ã:Ü™q VÃÏÌ8‹Åê1–AŒ'ä™q¹2NƒGg“úOc“MEzŒý Æò̸ƒ\çu¸0¨ˆ­Â[çëâêînõðÒdÞ=êL–³õ1,“-Ǹ/Íû‚Æ™7fóêêî_…½@ZƒW7×wUÏ+,IXwö-걂îå€8–ªŒW6¯w7o·èŸÙ¼~ùÊlÞmÿ¸3Ni¾>¿Üžm¾ƒæíõÝ­†¥öF™ÝÞ|Þ]lo÷+A½÷ïíWç/nþØóG²Œ°=Ù\@òõùJú˾y5á-à5ÐNi:P¯%N×4]ótÝ©™À$P¸ Ò߄Є؄Ԅ܄¦™šfjš©i¦¦™šfjš©i¦¦™šfjš¹i榙›fnš¹i榙›fnš¹iæ¦Yšfiš¥i–¦Yšfiš¥i–½æ«gUòÑj¶€Ïºh»§Å(²:„ Áº µÍªìýYõt²˜Ì’d:=-“ ƒÈN¨3Ù¬’³B ]µ¤³$*‰Øb}^¦kiÌÑ€gÂà‘„‘ä/Ì„c‰¶,Äê=áAYOn„{À•0qçÅju2¹sLÎFŠ‹tãwn¨3Ùl%+ƒF×g+X‡æÑ ÁJYf;Ê›îÌww(]ÑUt½Ã¤ò¾£œyžùv€+á•k‚fT.¢|¥du¿‚`_Ôk(v=ðsð°!ž gÊèJ9 ¢Œ±Ž™”]±–]Ê£Fy‚ž)w GR‹Ÿî€L”CñÖçØ¥<¨RkÐrz(å„QÓʾQN5q—ñ J­!ÏŒ—‘+áAÅxÉjNßBWˆÞ"«í05ÂðÌ·<”0Ê¥¤Ûd0–ŒìR‡ð¨ž€gÂàJ8 riŽ6„Cà ¢9õŠÕ z¦ÜJxÂG‹4-]ʃbuƒž)w ‡PžÜÚ#uåq§…½”+Œ!Ü€gÂàJ8cŸÍºË<±Ïšô×°š©A7Ê=è”§ÂoK+!|$L®å$3)!êL¶[ÉŽ)ÿ=êP&Í68¯ç>6ûÅ D?fѸmu(*ûåDËË®’³¥œMáº;,à˜3ËçcƵ6®ŠÊ”ÿv®pŸ,•+GÆÏ‚p¹8k_ â:Î\#–Þø÷s¥‚©“ zÐaDPœ…e'cœXdÈ2z–3Iþ² ^’—·Áï·`®Èl”oŽoš£{ÓNîñ¦9d=¾ô´n =åû[è)>e ý˜qJÙ䤅—„QxäìàØ Ç¦Šz>›Ú¯z¼š]{¿Ú)EÖƒÉ|0×ÿóñgõúþ7}-…¾-Ñ æûnº~ÿ¨ms¼oÛì×OÔë•;ä^Ï.u¦#©ÖO9¬dUF)ÇÒÝö§¯uÞ}óûîêîêúòüúü×?o··÷¦C ýi `Æ{-œž¼ötÒÆ(þÿ9ž.Ǿ´ì%''T³Ç=yzíÑO] „Õ.Ð[J;l)í°¥´Ã–²ÞM$Ø JòXjGÇX¿CÉT'ëNòñêãʬnhõÓ› 3¸£ð#˜¼6Inî_¬j#IX‚bD²—P×n‡ ÙèË1P¿÷xueòÆ(*}Œóé/Òm[t6°uÓêýU¯|ùáïR?Œ§áü05Ÿ:ivz2É•/™‚P‘îÍÁ2a’›…Є؄Ԅ¼>fÃ=ô£6ïõP¢Æì„™‘PqÉbÌF^øÍåöúv»[é®°‰š-¡„Ö“aò¨‘@%W¬[ÈÓà8+÷¡õ± 4TvÈEõà­º²šcÝã(ù€Š”­~ ueá*@ÓoǪ öEö¡®¬ Y^6˰~ÓÇâ÷‡4ñ7§®[_^ýºýz÷ùú·‹¿†"÷HpÚ" 8ë¹Är Fµé; |`+>vZ0 JÒkAÅï÷ŸžÇ4ˆÓô]ÆÿŸ–ž¤(õûº–Ú 9~­Œ~îG¿ýk¢M_‹¬ h:©t+ +Ê*\QðqDšQ/zÞù§O{Ï{Øñ¦V:ŽwÚbÿ½F·…ƒ_åN ¯µ#û/©èŽÆÿÔ3H¿ØäôðZ¸:¥ý§8§Þ n½7”µÞÀˆ7šP Ö'1œt[|Yw´“Mׯÿ“^ë endstream endobj 1138 0 obj << /Length 3151 /Filter /FlateDecode >> stream xÚ•ZÛ’ÛÆ}×W0û°¢E0 .rùaeÉ’Sñ¥”u9)ÛX\Â.»Úr>>§§{@€"¹J©j9˜iÌt÷ôåtC¯o_üý[e*ð³ S‹ÛÍBùÒ‹ÿÔBa>Vj‘D±Ÿ„Éâv·øÕËë¼zêÊnyêÄ{,«ŠGwËkü-øa]vù]U¬¿¢ÇÔëÊzeWb¯ß­¹=šºzr#YšRÖî]7³Ê»â%ï e®Ùíòz½üýöàý Vé" •Ÿ†!K <‡¡W|*{E^¹Ûë2ï Ë –Ë~Ë£œ)—8,oë²¾çùrÿÌ(~ TÔv½lý@ôEMÝ/ÕÐä5/Ä3."^$~–öBp®R½ý̤‹Û5øþ›Íî 7£ÕâzB&»i=Ù-òÓ(›îõ[§¶Ã04É|¿©$¾l®¦/]‡‘öcm0Ð~hw„J˜ŠŸ!®ÇR½/»¾¹oóÝŠ}ÅôFOé³b(Gß–Ôg´ñ6å¦ñ·Å~·âçë÷2ß4~^®óSòa”¦baú&Éq–ùA¨æÆ‘xm‘¯y”ó”³5ÌÌtÒñœµRüÑ 1Ô‘SÅiä+-N5å4ÓÙ蓉ò‰ç¯“åU…¿¼ŽLêÝ^>_+ãǸÛÙPÝ3çê0ð“ôèÜ^²"XWÉØÂ£ÀºbÍ3}Ã3Ýá[•›'YÙæ½LÔ ý~É­³ ~d ™Ì^ѱ—[•Æ™¯a÷–·;>P\.‡{ŸÒŠ œa]²šÈø©J%é9м×Oì½ëb“U? áD–ðÀü$¬`T§YR .(NÜiÈàÏrf_'úÀÙIï 3l‹wªÿÇ;¿-ëâ·€ºÐ4ôªæþþœ§*û&K¿ÄUoä·â_òF¢þ×oÞ¾þùÝ)Y´Q°ÉQ7õ).À¦ò#“-®U„Iäó“~j›?ŠU_6µœu‚›5äÕ¿z¤‡¯o?Ü|óökaÀHÌ3¬ ³ÍYûáíCÿõ/7~8¸ÆùY-â †ÙëYÜÒçÎ¥ò`hŠóqøy¼Â\Þ1½8ʦi9¥"•[ÃÅ’Û4ôöm9¦2<®KØOˆL~˜Œ¼ dó²Æ~»œ´Ç®êǨÂdÊO‚TP½g(Å/™iŒÛ"ª18‘ èº¢óISI£hó‘'Aœ€'1™˜&¿¼ÂÁXîÛFV­ãÑfVܦëÊ;듘Z7Dú(§ÙeY‘労‡˜_ñ|³9+QÃÁ"–¨¬×åC¹ˆ»(ŒÒ{Zó²A¦ÈSsËòÛmGÖì4ƒ,;Ç7 €eJ‘¸_„àÍ Gã*x°.îÖI0K+”L sÕoa‰w_ô½ {~*ç·U“¯ É“3%|K‹K°›¶Ù‰s¨sÙ&LµDjÊéÑ(¯z.Q…À ÀêäÕ1m"Êõ×óÜ‹˜ pªï”“ë08Ë ïIYw‘Â?=XSɬ©Ð#]ýþ¦ÂHDÏ8µ†3«,žÝ-áLÍ3AëÔ×±ž¿{gÖ²%×:Å—2ÐÝÉã® ý2Q¢8zýê+ÒX6Æ /ä$JR–<Ûªosº¸Uñ &Èü46ÇÚ8n ²·Ý€H* èÕTXG§8§ ”ªá;¶KÓhÎõKW•¬y€Ðt‡*N ¢²«ÿ*…L]âó!¬[?¹Â; Kˆ?m'xpUÁ ’!%AM˜%D2Ä/r¹Í‘€ªŸ;Ž2‰‘€IIÌŠ‡™uÞŸAňº¬®4ôÔQŒPl$g#võ#8í8Ú¾äùÇ¥T®wªÈ¶ìÆmªÓœ09t…ÛPÈ,gvбž3ñ=Z®°'õühC?V×Ê_Ðî±V56ྜÙ„ Œ%m²lK¤¤¼ce5‘o›!6<7³ÖÎçhv4šY\&n9•càu!FúEb—ݰßWŒ; Ým.¸[µå¾ïN{©–&’"æ(†û@œŽI³$O+ï-üøãí7ky¥ýL›°¾¯œ­Np;·Crd‘÷1þú¢ýH!õBV_2I7Ù,AàÉ*5‹ØÐóQ•˜á•›2šåÙChe’3.^µ‘"‡ÔIQ+‰‡®ÕñÔéq “mZ2z êù•ÎzñööÅØIpHœ‡­v/€ýÌ.É®Ýõ„ðõç=ÔãíìÝ)õÙ©Q%éôÔ@–¦g Õ3gN¯÷h_«ºßá„ ¬ãMcƒ©Å^TÓ¶O¯–×1{MoŠGV×NJ¨­¨…§n¾—¼O«|,òy&³E‚÷Ã(uøŒ ·µ)kˆ¯-N@ÞQÞ·KD0ëIXê¶pĶt0)¬~ 1Yº}úc¨?×JGx™l÷…iUuÜCÎëKͱ03~¬³9ÛÔ{ÑmÓ{{ ½ø pâìmvoaíŽ 01w ½œò«¶†+­¾;ê7ϳå”víhA;¡ñ”³3ýs‚Κqêa6óÐåB<\‹½Ù0'ã…]Ò¾Ñ~ |3ÛööŒmûlÕ—&€!G±]ÁåkaK pÍ,5›É,— ¯è…˜Õ6ë»ë‰CRâÆcç—eDr²v‰‰]‘×ÓØÌ}é2P (ÖÙ eyÓ(fŒJæ¯Ê±ë†9‘o1Ì„<ŽÇˆßâa-g§Äåw,®3>ôR|]ЯkP[âSézàrlÍ6d½ãX…tÉ¡T'¥ÜzAp:ÚÕÕRÜÚÐ +e·¯ò ©0¨Y4œ!SÉéiÜÀÓgÄuþµ­o¦ˆ_yû¼ëg]¸Æ(Cˆ’¹”W7?]}aÝ¢Q%î[„Ó—Ddº{IÂôM­oÇyË&Uð¥ÃFÀ˜‡Ïc—Ì΄¾ÖócÙê^½zÓæa ^>Ç>.ݰ³vE¿•ç%3ØWe=ûxç$ëøaÒåúô9ýil}i´öS÷âöuÛ<¢=Ù×G™b"ײ}÷ówc]Ay¯h7PfnÁgqž]c§Ïƒ´ñS}ÊPaç2îóÍ«çz<‘ñJ… … DzI-(ŽeA Ûéw5^³Î‰¥»œ?ÏÔ,iWÐ#ÿ8¼â7áne} ©4ðÃD”ÝŸ¬THå ìi¬,^°DEÞ•ÎC߱྽©I …éǶìû¢¶i'îlÄ”["SžÄü_Îâ½­tLÖ2—óœ[g?ɉ?J :ØTyÿ\מ‘"2Ì^îmá›Ø0M¿\>PãÉæþlZN‘`0ÎÃRyAŒŽC”uê›ü©cû\Ÿà@#½žd÷¾~çà¾3ä÷/ÚjîeÛ~;/-íó¶/WC•·çL øÉij¦-*Øw Œýib¬qÉN‘ \©Ë=ƒ+^;z£•ÂÛuÅi’k6*懖 -Ï>”ÝW¨…{V¹Iï¦c³!Zi^OUå¸é»qÿKÂæ'Ü'¹õ€WTö-Ÿ»‹Ž¥GŒEÇÍYÖhÀí¯Ý{Ÿ;R±"ëøh}›f­¶è ÁŒ}aͧ—Í)<Ð*9=ÊfzâTo9£Æ¹¤^ÃÅDÃíÉ>fRO}|eˆ¯³¯]“ï™ÖÿË?(ÛOv—JÇáì'–5ÎFmdR?#ÀCKrìVƒ»?]µõ?¨Œ¦Æ endstream endobj 1143 0 obj << /Length 2966 /Filter /FlateDecode >> stream xÚ¥YëÛÆÿî¿BßJÇ5÷ŇQ´pâu&¨s¨[4EÀ÷$Ú©Ô=¾3;³”(Ów }à¾wv¿yH®øÉU®…Öù*SRH©V›ý‹ß^Ù4ó Κ~*M|;×aè廽\½é^ü~’ÏŒùÐøìÔo®_¼|+íJ&¢H ¹º¾]I‘(Þ!µ©5«ÌXae±ºÞ¯þ}Xç*rëØHmÝHrø´Vyä*îÒ§éü´ŒÊ›u¬²¨;òòûݺ4ym>°êÚ?ñžãÀcïqþ§Ÿ®i¸n±;º¾-›æñÕ:N ×ׯ¾í»=_ºþïõ÷³çHd€\e:)<Ú?gëZ×—Í:ÖEÛ]y8Ô­Èf„ã‚qç¨Q¹¡Þ¶¼¨­hð·cÙÔ#? ºÛÙ¶,ªÊ±ä)8Ùšè£ÛŒ|WÝÒLxïÕé—Vd’È÷'e£}×vpù®ÞP¿-ÇcÏsH~§ÅÃã0º=o,?y Ô­Gú–ô¹©·Ô¨ÜÁ³Âµ•k74xÛõ³Õçç–Ã%ýA©“DäIJô{#n0¸Áß×w^—F±UÍ¢»ºñtë¨õ …k[úÖÃptÔdZtäR8 ¯÷®Å£FË0W0oràÔÀ§?ºg¡@:1ÂË/Hs æ¢è•»óük:fPòÔÀ±¿)^£±qÒhì‘úÀÂ`8xèÝ­ë{WQwä³€¹ðžz_˜Ûñž×ïÞà ¯©d!£+ÈÀè@7`~Gó^Ýð;~IPi¨PäôÌÖ2)¢ƒMYÕûCãHì‘=♲lt4|F´Ÿ=ô××ê¸ñ– Kn‚ë€i‚¡ µ2z»ÎetB¤Ä\<13"Iõ¹O½ P‹-±Ú‡cOèØÁ{Y×nÃB÷à…ÌÃ'>À”7‹ÓãñÔŽ¾>ÀF_WÔ •I˜0pS·µfg–MïÊê‘°ðæ÷¹õ&Ö®¬-„´¬à|Jü3ç¯UàÙÀßvSÊÔY\…Dá0Á¦¯¢-0Öhý­IÂU4T\æ±þØÀm‡‘Ϊ™Â1©:W^03ZûúÎñô×saA_ÏkÒ^[ÌO;&€ÝÚ¦¾}üb[cm ºá$€¸/Û­;‰!û ÑR`àõzu[Õwuuĸ‹FNŠC¾£Þ¤éa‹›>“b³²ÇÃqŒI¤iœøLúJ¤¯ ¡-‡<ä)9ôw%AÁø‡àJâvÔñRo{ †›d#¸kÇ+=4òò^<Äwk XÐéjE*ï·–#˜€jfOõ²c²ÒâqXÓ஦´°p ú°to!òl"ñž|wS-X'cDQÁ^~tãâ½ x„„S´F©02Kè¹Â@DK‘e9­úëu™Hr³:[%€%r)8…ì¼dªr‘ª"„¨šùc×{ÜÀ\“#Uý|¤*/<¸IÀ(v?w{7Bû¹×ÎOÑh~éµÁëÏ€]a:Öï‘:W… Wì¾á¸9Ål³26}‡5ÅïuÈ\8 E§vêà_©³*…&•ña‹ó C2‡Ow]»q1g FÏ]hš±ã‡Å_ŠZJp(3*›Á£oÊ`LŸGbá&ÅÐ'P¨4”Nyfšö_TÜRަ!DO%§Ó³8œMñ:˜{@ýƒANPpÛ5 EÊ d¯–x0èØs^Mé'úv7ƒëï0FžªgôîŸß]¿y}ýš‡;úž+ÐWù©Kíþˆ<á¸öŽ"+w[‚¾TÀKm½Ôæ²ç…÷}=Ž®#æ,Ž„ø_ÿaŠd÷åè3‚£*…v¶$CD=gñSˆQ6C7/ž vЙœ0;¾ý#Á]ÓÍ„ÁÍBDF©¿ÇôŽݧ›¹O7iXdËóŸ1WF‹©y\äBæ Ð/ †«HØ,¤)5÷×ågöLÝP·XÒ‘4xn d`q‰yH~‚,HÒukX?\ÐŒP\™¥g©(ÖgBÒqõj£„ç1£ày%Àˆ7;Û~’ŸåŒMai"dl`Û•¯-¥yÈ$ åk32)pK±4‘»£ögà »æå†ÜûyG•Ñr@;'dŸ6Oç´q`Ûµ·Xö¨ào«êþ™ˆÌäBæv~œ÷±ž0Ž}Qã"3RXÔi_w@·ã“Op¬W³œrtAîO X˜_{†ËR6 m¶Ÿå¤åäk„ÏÊÉ‘­œæv˜uxÓC™A»ô¡qé÷9~ZÎ&– ׺šúS€£)±“'dÅ®ŠâØQ¹À/ijËÅGÎý(‹T§p25ü‡ò˜îݾ¬y˱O@~òsá&qhpéiX]…U õ­PÜq¹ÈƒÜTZ} ¸žôq§‡ê)šž‡©¢/ g¡HÚšvŸ¸ËŒ^tȱTyëÂC§Q\Û éC郴V%Ò²Ág E &Má–B šw¾ÀåMBå×`–÷©Ì$$xùùIÿeÚ¤BËó㨠‡>öˆ ›¨Hd×:è˜x®¶CB…&Á•ïÏUœdOi”™¿’¿|¬œÛ§2I¨ᨯT„=OðMЫBÏ/ûg¸£,Õzf»f¥ •ûšãDxÍO!ó„r.ÍÈ4U2k¬„ LÍi8É<$°)dàéEuãkõa†š‰)I0ŒéðWMìŸ ÁÍ^Ä|\`§?êh€óeCíiêT¬ËNÅ:¿pŽ øp ‘ æóº/±ißSQ ¢ðcÏá? ç…Y y¹ëGBBØâKoóÿT¸.ŽQð€CȉËX’›é?‚$¯Ô+m—„;„†3bˆ» ÍéìïD™´DÌï¸ñÅw×/þ)Ù6 endstream endobj 1146 0 obj << /Length 2332 /Filter /FlateDecode >> stream xÚ•YmÛ6þž_áD{XqÅ7½,®zÉæÃµX4[ÅÝ¡mz-T–\IÎÆhüÍpHÉÒÊvA`Š"9Ãy{žÑþýéÍÝ®4$[‹9¥•V,Ž'JÿX|6Ë‹u>§6Œ²Þ©’ÄE"9¨/i7šÉêáôË‚ÆlLcª• ×y—Otf7¡Ò:xïò¢‚;ðà™f¾7sÍ,(Ú^LE£ªnvyY´fíb§‹ô—öZó˜e"%­½X+Syc¬¢ÊY_úÛșۨÓÛX‹-N-¶…d\€Ö ꧦ¦¤°z*ÉAè²èš¼9Ò4êÐ^ œX²8Mq&YiºËG´GìH'UšKq ¹f©S/[Ó|Η¥¹¦…Ää†ðm?bJ×Ò`•[’`sh@­†fÛ½ i³*6Gše3žŠ“”e.º¡3*ŒñÃEQz˜æ–\bØ3†–RANKŸMeš¼«z¿jê¶ [³êŠººu^oéݦ†ºÄƒ}iïç FL'Ò:6MȯwïÞøUDQôë'ŵ‘¼[G<üÿ¿ y¤£¬vŘ®PÆS\g£B©0=ÚCÙÑØ&ºò5C†\pµ‹">pE÷+îÏ4KÆç9gP>f£ÔT.5áN¹õ8ä¦Ðz¨(×\À¿Æ÷â‹ê%GD ªû©W=FÉFÉ£úÒ àÖáL èyŒLë‰Ô]þ› ÷eÝ]“¨#É”˜XéOªKP+'®S™€¨u¼acñDÄ£HÚEÌ£ü®Ÿv”æ “[Ä( *@ZÓä½ ö „.ÄÆú°24S+3ÙÖÕ Êmƒ|ž©ª*I¬•¬æûò,V9Â%Çï¨ÐâÑÁ &^½›T†ï>¾Ç5ßy¨„ÂîR¶3_ܨ¿œ7¡rŠp°t V—Ê…ã~²öyK£ÒPF”ôV¸ k2¯dY> stream xÚ­ÛnÜÆõ]_ÁG.êÌ•CP+V§BšZ‹<ØõMŽ´¬¹ä–äÆòó9gÎ µ\QM Ĺœû}özwõÍ_L–Í”Îd²»OrŔʫ3f•Mvuò1ýi£DZÓf«¬IßÁGÀÿO»<²ä,ˤAdžl¥eªÈ ïn*»ºjÂ{ßü‚t\ Sveû8º‘è“Î ^¤#—@Œ'"Ê“DÔÉîtßuH"K§}3âʦ£«¦¦Ç_7Ò¦ŽÖµ«¡ù¼ÙÆ# Xán</KÝŽ•§nh®ÛÀj*[˜Eõ€MWµ§Ú´¯Í´Ò¨(²›Pµ5]¬aQ•¶ù<”Ãã&—)Ûls¥»M.Ò~³Õ™JeÓ!© ¿p¢Óñ±«P¶ýÐwÍX’ÒxAr ’—ªÞ«]»W°/r¼Ã™åˆè#a•C¸zpÊ ôóÒ_ˆžqfTF²—§©?€UÙ¶ ºRéýÐp¥ƒ5àèল.§’v¨]o„w¬É¼Þ•у³L–þ <N€Ôatí/¨·ÙxB°ÂO fsIgÀ–Zëôöf³¾pÀ± ±xw‹ß]”¨‚Hç€Tê< 1° ³ÜFú‚¼Aœ[À'Fß#îÕÍîêßWÑpBç,‹e\1©³¤:\}üÄ“.H¸Ï•¯ô(f3 «6¹»úÇÕ5ææR a$Óž×AQb…©Í™úc˜æ’qP|Áö¨™kкéÇ(Aä/UÎt&fàÏŠþðúË ¶pÛ3À.É‘æòW#’1®Îy¨ßãyAÌóüäsb+2 %¯Z ZÐÝ÷e9YALå*ý€̳ªÜ(™>Òi…ë}9<øê¬ˆ§vjŽmS5ÓèÁ•ãipXŠàJ D!Tê‚kâxíÊÃø:ÔÏü\x­™áhmçH–XVXî! ã9ø¾0ÁüiL+™õHI¹$e‹sZÿ䜯%Ñ6SÌXpÈYž)¾jóиYE0 -ˆÄ#]õaÙ+* ¸„#AEä¯îçUžÄÂp7XêÁª¡Ô£}WÙ[É2)"û7·7àž5J;Ú/Äà}wlßIÀÇïÞ¾¾Œa¡%Sà:#%Ë‹'‚mŸà| _´Ñ%1Ï?&î%ßœ3 XOôVR']r]ªZ…á"¹™'é´îc ùem4òÏ!˜úÝ[¬öo6`¥ÝÍÛUë¢1ziÝ7§iß‘ØþÜ˵/:,·1¢„]?ürv|W‡öv}òÍ÷Kë×8X(Ù/ûç6¶0SÉDg“B¼ìÜ·=\óî9Ï´DYÁhìó ºR…ÃJûçÊ £ÉáYÙ,t„â\¬µ² ž µ4, ã»ªYõŸä8¢  ïݽ\W¹}¨ ]-Pþ7'þ´GåG?˜ôÖMS®C=‘V½¢Z"rñ”çØa_Ìp˜vmSïOew ƒOÓþÑzœµEmF…6ƒêÑ©£Q‰FÇ0D=u4eucÚúÐ Ü·îÉkòK¨,8`X–›0ìŸ!*ƒ M›Då‚å¢cˆ†±(Ž!0Q‰‹1dÙ‹fZ&x®>rfM´Ö·¤Ä®œÛDt&HPäq¼•D\¤Ž·;4 Ä3fQ1wm<8Â[¨©Z-¡‡ƒÅÎz8ùoêfœàñq¢)1û{ºÙÏ^ÄÓ ä+š5ÇÍîkׯ·Ï/tƒŒë‚tkºÚã[†z°i€&EÂþ ã+ŸG 'áÉ“°¹ïO3JOß}‰)Ç褤ø)ðF†¯äksUÌÍA!e–:¼~áA<+®¹†6s•›Õ2Q„ešgKÓ²ßå%á!¡.ÿ»N òSéÿW'•Á;äB'©ƒÓ¾ër ÄçKyË¡~À×£…9Lum™ëÝé0>•xŠ ¿`ñðHÀñ*Óñt„sʪ~ *b¥”éß~ü;ŒH¿ Ò{ Kê2¡Šâƒ»ñLjˆ¶/CÆÒÞÇ Î àYA)ÒÇþââ·Yp(Ä‚4¿eÅÓ&O6h[Ú-~©éìóÜ?„g@nû‡mׇ2¢‘E e „êÔT¡»ðùg€™TUŽZ«Ä¢é¿òÛ‚´¾–T9K|úaÁü9s³õUØ9@86¬XQêý $RF¼ŠÚv\c£cé¯a‚·Ô~-ì7Uvˆ… endstream endobj 1162 0 obj << /Length 1538 /Filter /FlateDecode >> stream xÚ­WKsÛ6¾ûW°7jj"x}èÔ©6™dšÆž’æ@SPÄF"ŠŠãäÏw *¤D;éLÇžìãÛv¯O=Q*œå<Ñõ"²Š)e£L–©,ºžGoã”ÉY¢µŽÏg‰ˆŸÏD|‰‹—ÌÞ]?;¹¼>ùx"""Ú2£ŒçÏá·\Ÿ¼}Ç£9>‹8S¹n=é:R,3V«èê䯓ÇÇPD*™#yn&”f–I­þ¥V2γ±Ú+%r“çà‘Ëøm ×/•eÚˆ=ègyÿxüaO–ôtÉ€p¡8²\iMÅ)ãáh¨3P}Oç0¯óªŒa2fL²8Kµ ³®ØîZ·võLɸ›%ʪ¸Y௎»¥£»¢ý@Ë®¡³Í²éššömñ¾—Ptmëx±«Kÿ…ê9ЀS“ÞÇ®XoÏðäÑa‡&hÍRŽ>÷t.@*²<ãž"eÜBäiN4?O‰±°RQ2 ¢¤‹Êò¡¬¿9çD7vlbK3„°ÌEÄ—µkßWnoG:äHÁZ€Ä{¹)×)3§à¥b\–À/ÿî^Oê "FŽ»ü¼&»¶ê]>©>“ÌHÑ«?~ ×Ü«F$ðE¯v5A͈ hâjSµnKÁzqv˜ÒBK¦ †ÆpZ~ïEêé’¡Oê±)‡â<„þ*ª¶œi`Hœ¸M=Õ‘âÉ"jàR™, ¦C†ï¦#®dSÖ»üõLŽz1“J.¸êúòbÒÅÀ˜¦zìâó]·lÚ^`èìö…ˆÙ¬Ï/‘Ma¢eé ¢h‹úEÿªrï]ÛM©€Z‘Ù}ö.ݬ¡¶EFHà÷˜È’ÝT|ǼÆ¢d[økéÚš•èÇ#$Ò¦,•C$SÕ“ˆŽpŒm–6£xT““&r {å®uuéî˜2,?²7ìå ¿Û²ßL~¦Lš¨ÌžöôPQ¸ÿ{n\üùôø"C ã*…Z&˜´\ä@— §} Ž:"gZÖ£-çÒZÕ‰«ì(Ê:‡¾62æ@ucòZ§"cÊ+ÅozÙÜuEµú(ùÖÞïÛ»˜} ‹e@¤©‹Ù»ØHÔ·&v€\ Šûi21 ë´ÿë¶T/n«n9Ù²a²ò[«Sâžt“z_‹z>%Jб(9)*g0ÆöDsWtC¨•u»¶vsBÜ@|ó F2$JHmr¨ëÈ5öÕ¢]U®6×ãýd½ tQP… ?+ÁFµmVEçõÂî²hç´OsRà®jÚ\ó¶©«’vßÐ&Ù‘8$ètumu³C¡ÁqhLY¦È?™I¬ïóªŸÂ$gÍšVŠöŽ>>î`þ§©Šªõj%bGƒ?!G§7³?\è>w®ž{Sá« »4,¢Ÿ5<å†XiXUˆ ”±“TVN&Uu¹ÚÍQ®Ê÷>åàSÀÆOülÁr€ËbV‚Ô;<°>šH°hÚ5íôðqðOÑh7$ÊúLDŽ[ôz¨ ÓŸ– XTp‚ùˆ›ýô³<®ý÷rÂ!tb?Å«> ù¡…p3¹!ŽÄw“±ï)0AÃ#oÈô“BÆ¿LV>ì©ÌG¼üA]ð˜à21œ}W‹†ª›Ž™2̈úù¢ó52y‹O­YØ@¿c ÞtÁe¸OqÁóº©HÕõ¦£ïPN‰*\ŸŒÞZI×$!*Þéc‡«> stream xÚ­VIoÜ6¾Ï¯ÐQB#†û @ízÒ$È!‰9ÔõAÖÐ!š¥Z²Ô¾¤8–fd´‡À†¤Þò½ï-äåjñò5c ÁÈ`C’Õ}¢bL'ŠK¤˜JVëä&ˆe9ç<½Èr’¾ÏHºt‹o²ÛÕ»Årµø{A $!\#ɤ×7ð[n7·8YÃÇw FÌèä›Ý& )ÉaU'׋‹Ës(DPħHˆ1rƩ҈rösœjŠ0VS·×Œk‰€¨ Mo"‚èŸ2¸$GðLÿîó—£Xåò‘à „Ss!r~æU R0†‡OcŸƒÔù<1æ}Þ:—IN¤BR°…‘àd ¤ëוm³œi–îïÝ/O?þ~¾UÝ&¬º ß.Þ/¡`üÙÚv¶ìö òö1xà„׶ض¯Ü——¯‰cä ìHõrvZCFa/!Öb#LùeÎŒ†Kò‘Ø`ŠÒ©)eƶþ¹)s¹dH(`šh¤% ÂËm€ž‡kˆ áhW`.|Ü0–º%·ãéöó¬ÏÁÄ„¸å÷(ÑÔ6ÕÖî2Xu³îE’’è>¦\;$° âAÌùô'¾¯U‹áíÕ«ÓR%œ"©“RWæÙ‰rùHÐë4‚SsBlÑS×#j#‹3]¥ÎÏG Í"•ˆPtý|¢9ƒ"R‘éÏ!ø~{•Q £¨Z-¯f)E!ø”⋾Ûì›è0&D"Íý€AZŲ"jSXFLoöõƒmBƯˌªtãÀõõ?sn$TøSánΩ@b"  ò|’ƒX>’›ËñÔXðèÑ¢¶t#Ðß~õ£uWRwÓ´qôù]–ïmêj‡Öö-ƒNcrw¦0¢ÔÚ)3Œ+D€ú Üj6·æ…vñûd ¢Ÿì½mì®´Ïæ—Áµ5Qù þ0ƒÜ.ÀÏ¡C䡆+òH¤Ç͸dõ³ÝO¢ŠMJíS¿;Îõ¢ªvoŠu³ßUeÀúgÀ¹¶eá# §ö«ÛÀÔƒ„wm8{°0„‹Î®Ãv¿ šáBŠ–X CT÷µ}‚sø)ÌÿÆ@Zèìpþa’ ÃE"¨«^~úáð8‰/9y‰Lï©£-¢'ƒÏvŽ/` lýÂ0Ñã“ Œ£Œ5ŒoÝ(ë·Û¢ùáÑé¡̸ñàöZ…;ÞÀÀïkG¶Ûmøºµ® ‹¶oïîänH““‚Ë&óïÆ Ó…_ç8Q⪔ÉtåRä1ôwuU]å’çª]Y÷k°áÝ´Ç øSTXˆ„ÃPB²|T_3¡Ò¢©ö½/ 9*vîH¤í&FD¢NqWÛÖw „–Q§«€©êÂãd]ÅTëÁ\5ÍCÉ  °éª²Ž‚Ån8÷Q´U€á’ób" ƒ"DYº(k?ºr’8#Š™b;€/»¦*èa( è7Ž¡ŠÈЩC¿›P±€ÿêh¿t endstream endobj 1176 0 obj << /Length 1080 /Filter /FlateDecode >> stream xÚ­VKsÛ6¾ëWðHNMï‡Oµ-µŽ'ÓQmMu} EØâD¢\ŠLãæÏwI€2IÃM3“±<\‹ý¾}`ç«Ù»_‹F­"Íc:R\"ÅT´Ê£ÛX ž¤œóø,IIü!!ñ¢–—ÉÝêj¶XÍþš‘É×H2Ùí7ð\ïf·w8Êañ*ˆýÝ©î"†”ä m£›Ùï³ó×Tˆ ˆ™cLTiD9û1 š"ŒÕö†ÄÑൡñmϠǧL#.Éqà#Á¯]þtTK{½t  05ç<¯P1cØ/ 1½Ö·0'Æ:Ì»2J‰THJ¶0œø¬³­Í“”iÛÒVÏ­Ìã¼8ÔUqßÔžt«û‡Ö ÊQœ%E²PgmîT8Ž2 ; @Ó 2f„qZb̼­yƒDÕfV;ì‹¥÷ÒªÃ6î´Îm¶;œ:‹D-rŽ>²³^EØ „õÛO!3$6"æMQ:6¥ÌÄOò3• EZo–Ì)/Úàöè‡îà-P½]¹@ò‚ÃXÜŠð‰´o<þÕ~ bz£À-¾<Á&ÛªØÙ2©Â+È1%=üdãÒA·Là­CúTøŠ{**{py}??Â)b3)%ɼy{½t Øˆ1õ©¹ŽBߦÐ#Û'±×zlÀ¤T½ëuV7á sÕ£úL!è÷ó„jhתÕb 1lbr Κz³¯z HÀèÀ"Í»&†´ê뉨''öœ.÷ÛG[¹¼ß¬ªâMK®Ùþ‚‘PÚ/»yjFBay;ÉN-è…r<6æë–]Oñç§MËøùP|B0÷º—&½ORxÚj[”(·SŽŒD•’ ”C¯õŠã8ŒBc6rL²f”2…”Ð>E^õÚ>ØÊ–kûfV ÄÑ–ÿ—ÖES¡e¦çºBDž £ÀrBýk –z ß_Cû”Ú/ï |ÂŒ~Ûöwyr±¸þ-],ScRlx8´ rÅFį?ßr[gÅöG‡÷2Ë«}Y¬ƒÓéxÞÿ"0x¯’Ûuæ²äú|7á(‚¨“ ó£nJ‚ Í}}ú6ÄaHh¸¬v]jòvÌ3Ýõîy±Éª—ÕŽ…Žófí‡?|,Ê/'7¼FУ!1¸è!*Äx×üè$‚›ª ñ%ý‰§Zn=ézcpè// // O./ÎÏÿàÏÛ ê‰óÀˆ7LÑxýr•ò6åÊMOæ|qpÙ*vO[ÛN]è@µÍ‘»™ßlöÍ6w÷]¬{ùœ8™ÄÕóÑ@§°¯ê¬lW}A<ì}“~¨²Ç–²><®›²(]¥À=Z 6“¦½u ¿ºí;ý¯}_ürAЫ endstream endobj 1185 0 obj << /Length 1288 /Filter /FlateDecode >> stream xÚ­V[oÛ6~÷¯Ð£ŒU ï¤ X‚¸k‹ È£ÍòÀXL,Ä—T–×ýó;¼9’¬l-0Ø€ÈÃsùxn<çóÉÉ[Æ2‚Q‰K’Íï3Íc:S\"ÅT6¯²›\ 1-8çùÙ´ ùå”ä3·¸z7½˜Ìæ“/’aø‘Œp$“^¾„ïb=¹¹ÅY‡2ŒX©³¯žu1¤$‡Õ*»žü99?†BE¼„bLFŒ*(gÿQMƪoöšK!Ñpë’æ7 A²O™F\’ƒ ØGewüx`+_Ña0Tç!ydURP†ãQ×fäú/›eÞæ­3™D*$e º0œD—´ûêyZ0Íòí½ûò¼]Ú@¸oÌÃÚn¦Œæ­iëí¦Ïw¶_ö¦yÜR˜·áä<|Öv·ÝDÓÚÁÆç@‚Í-¤¤q)ùècÀÌáj<@=·f½;u''o‰îÞšs$° “糑²• {°†¤)Ex~S£aŲ¢ÃUQÚW¥Ê®®¿0Ư‹B2$ÄŽh¤% ̳mj{¸‡èJ¸-@ÂI¯À\ ù|ÃXî–@"nÇóßí§Q›QEÏq³oѽMÂ9j^Q$)IæÏ.gмi‡vaC<ˆ1ÛQ¾gûú©nì.ÄúýÅé0ù §ˆA褔à«òÕ’K|E‡Ñ§ÿCuB*ú¡i±ŽÆ‘ºK\G†GÛ­„ò“J¤Ò2í~<МA©äéOSBøûýÅ”jhÎàªùìbÔÅ (ï»ølß.·M2è:D"Í}ËBZ¥´"j SX&LWŠmmÒíc½p„¥i*(æ1KZ€…ƒøò¨Ëa È3I(H×[k`+:|#a(ëF}¬¿UûfiÖÈ,ÐþqˆŠ …4ø³cn$ת¾˜(!ø´« #Uò…ǸDÖöÞ6v³°¯†’ÉÈÆréüñ¼C—¶mѹ ô”á‚ë7îFc¶Š¨àçófiŸ ûí,_kT!ªØàîûø¸T¶5õê<ð3 Þ™ªÙn -|ûRº² ãý¨öoŸ@›)Uy» ´ ÝÚ´¶ [ÿ²ô@&MÌ=^ º]Ù—n9ŸBsòã $S„ÿt<1IPÉE& 4’²áÄa.JC@„ † þƒ–tñÚ×ÁænÌ_A׊Þú5\£$ˆÞšÔó3/hD{—.íáBkýÚݾ±ëèG‡qÓ <ømäÙ}iÈü#û ïF£û‚hxµéEág’`4 1Nb8Ì6ûÍ"íÜ(ÇÏaÞ=Xîwõæ!,Ãó‚$ì+ÓÓ´Vù<\ ‚Sêkà5VêÔˆ~BEˆÛm›°€áŠ–ù¶]†í×)ì¬Ì# I+‡•ʘÃeþpÅlª ±²¦rÔq8S.=0GÞ¹ƒÖÃLO¦8Ì€`xivÊ/ kãÕ*ל×õÆV(¹«<¤ yÊJ˜”Ê tªL{W»•‚x„RÔÑO@j×ÓjÊVE@ë":4×m³6«ú ÆOªpòP‡êÔh­ª¡»0×’}Ìj³Šxê]ÛÔwû5§ØŒ&ÔÇ (<ÔR„µK³ µQCâÁÄLòÂöÎ7£ÂQ> stream xÚ­W[oÛ6~÷¯Pßdlby¿°ñ–šµF’æA³˜X¨o“ä.AÿüEÑ–dm!DQß9çã¹ñør>yýc ÁÈ`C’ùc¢bL'ŠK¤˜JæErŸ $§ç<½˜f$½™’tæ·×Ó‡ù»Él>ùgB $!\#Éd+oà¹XOîpRÀÇw FÌèäߺNR’Ãj•|œü5¹<¥BE|È„bL#F•F”³ÿǨ¦c54û‘kʤäpjCÓûÀ اL#.ÉAì#“À¿ûüåË.ë#ÆêZ DXdÀ”áîSßf‡úžÍ‘²Öæƒ3 HÙGfD*$¥Õ N<ô3¦¤CÝIaŽL‹Ê7EL%åˆÒ€yU™@T€ÜVÛiÆhZìM¹ÝÀZ³´lŸ<½Î‹j»)1C„q¤yPs×A ÇQ¸ED´,1ÂxŽÑ1HHšd=Ø•]äS ôR;¼ó A >f„ƒ÷ K›¯ë7^!Ñ}…œ#M f;ˆìë>¯_bj4¬Ø€W§ Ü;P¥güŒqô˜™dH(H"¢‘–̃g[=•öpÑ—pZ „ƒ^94_!2Œ¥n [ĽñôOû)j³S1pÜìy×ÜVåÚnœŸ›¨yE‘¤‡l{;…¼¸¸ñÖ™›Ù­!-˜ùN…7/ºòß••­}š½½z3.DÂ)b=)%¸Ëœ-ÿ€ËzÀ¶‡‡«k)„46­1â ÖÓéub8Úú%´©ÂÑ›¼ÙÇcÍäÑ¡&?M !àì·WSªá¢WÍgWQƒ |á‹}³ÜVÁ ï EÛ¶O¤UÈ,ßO|×.}ÂQ±­|Æ}€¦˼*jèKZ€…ƒøò¤ãb Ì ÝÈ@)mó–õp‘0” £!×ß‹}µÌ×(_ ý—1+&ÒàÏž¹HÔ «¡ gAðéV #Uò…wqé 죭ìfaφ’É‘ÈÆréüñR£Û4È#"½T‹ÛÍ¡½@…xÄ(dÞŸO§¥Ýeöù5"˜Ð3>AT±‘KöÝ UØ&/W?à˜Ÿ!u¸îÚSßùL/ÜmäÜåwí×6¯6SªÒ¦ö{OúxÞØÂ¿¶·(H6KÛÓÄRè» º]Ù£Ÿcô)ô¬vƒëèïNç4& 2\$.GIÙxNãpY‡9M BFsÚ𪠺¸nµ·YÇü¥4³Î[¿ùc‚èá WAí˜ÂØ*—®à@k·®1*ݹñ\y?`sû»ªBÄŒg¦Q€<ˆVíà3;LQq[8±ʼúŽ!Jݼ2"¸¶Ð{j¾µÍë}Õ¦ ¼íëróä–2åÝ÷rµ M5΋Aw¥RMÜEF橊Ì`gÉsh¥’Ó¡f—ôªŸôÀõo÷òâ ûL‡Í ˜ ®}„èû‹Ã(¢ š½ºg_ Ý«ÆçRÞøLr³ŒŸÈ¿½ß¬àgÒ˨¨«ü)Hç]îÀ÷Ç=`7m2Õ~'¯:‰r½[Ù b äyaèÌ@žŠ®Ï|ó´Ëìo¡þþ2þ!ä endstream endobj 1201 0 obj << /Length 1442 /Filter /FlateDecode >> stream xÚÅÛrÓFô=_¡¾ÉZïý’§ … m)ñð<(ö&8¶+ɆŸïÙ=+Ç’•–2éÀ$G{î÷“§³“és!2F‰£Že³ëÌ "„ÍŒÔÄ“ÍÙ»\3)¤”ù“IÁòW–Ÿàõ‹É‡ÙÅÉùìäÏ–QøÇ2&-ÑBG~¿ç·'ï>ÐlÈ‹Œálö9’Þf‚-Ze—'œ<=6…)NdßN©Qj,áRü7J-'”š¾ÚKe´²šƒ×Žçï: :ý\X"5Ûó€~â2øПödEGWŽ˜0M`öH«b=KAM¨C‰êŸt„E‚ʬ`ÚçÈ¢DI†¸ ßN aE^—­o(ór½À77<÷ëð³E\³,·±|Oœø_¿Fàå@Høæð3ØIä,‘`°Džúò¶9 Øésf}‘’(‚é|"š$ÎÐH¡µP N9¤y4&Æ$²â€,‰â¼/ʸCYï)¥H×p¡Q2Â,±Z ñùÚ×7•ßû¡z¥H(ï*\8"ŒÈ´ÓDX›Ín£&E¥"ú1ÊÑ@èL ¯,½­‰ ŸÖå`-Ýc8ÄjB;,€¬c{Þ±ò+;lHeW™¡Ï4Ï´eDZyÈ(DÀN¬Ë(E›á=^$¼8À Ä#û/þíX^á¦+-•²òekÏ×Õm*âÑN4g]¡=J~qo Ö5|¼Ù­Ñ†ßXàðhÛX©$Á½z¿ÜV5ö´ÆÙép0ɉ€ª×ÐÈÚ¨gPGWÆy0¨½8Üi UCéH`;82ˆ:ª#Å£ûv1&͚˶lwã="!ÅÆt)x;aŒA"^žM¸…m¡šŸ†•’ý?ÙµËMÝ)‚D+ã '¶³ë=ef´q#Øõ|§äúfý²ò7¾nÇtÀœ5Ð܉oyg {!S.Œcýp†‘¬8 Kp_XÔx¬$ øóÜ×k2<²„[E?´dló Ñ‘}Ÿ¹51á=CªÑ”qÈÆ©Þøk_ûõÜ?˜1¡ådì|W“×Ëàù׆\gBJe iõãî*+’„Cû¾OÙÙï/›.*T¦x÷Ó̉®8 Ëõ@”0&éÔìS:ÿ8Ÿ6Á¹‚2ëX!RnhLù½¢±”#Ñ‘9ýX9G l6E9QLþ›XÅœ´íöt:/šÏáË_‘®PM¾œÖ~¾©Sí¨f Rå –¢çj®B QQP¨}ð×ã•f`)ˆ~éà‡V^ø¶¬VßQsGžÙ‡=ûá+Å‘üž+ÅŽ)ûCQ¨ž¸ŸFÓ+]ªÎøñ„Ù–\ÕöoM·èàŽs¶Ûÿ0¹•‚¤rÜÿxT2ŽGeXã̆c’»pL†ÜxG†Ä#åÝD™¼¬«òj·#<á‚ ZÏW»¦º›Ü“σ¬eYßøD³-ë¶š¯ºÙËfù¼­ËðÊ@|Bßú² ¨ÔTí÷ZFӛܔ0ß4ä¹ççÿ–í~ûÙSX2S8Ý—óÍjU5Õfâ*^ìðWà³_/ñÁ§ë¿®0tmˆ6¶¦_#ƒcI@L œ:ÄÀMFði¶ôlkWmvÍê+’lwW`ÅÒ'ÖEÙ–ˆ@sT8>9^–„2>ð‡Â£K×e8á¬3ɘìQË2X~†‰Ç—«8(Ðj_lëMtOã‘í2ñ-«›¥¯ŽúŠpr ðÔ‰t[ïgT*óN,Hðý«ýp3‡n]ojì4T»ÉºI=Ù KðÏ÷ß6m¢h—eÛc]€ÜÇ»p)µ1ð9¦nêØF{ƒ´ þŽ·HÜk¿këj½iºæ8½—0--Öè·t ´á[·þ}ÛÆ endstream endobj 1209 0 obj << /Length 1229 /Filter /FlateDecode >> stream xÚ­W[OãF~ϯð[-žzî3+­ThhaE% Ñ>@y0Î@¬MœÔv¶Eüùžñ±;1¥•V 1¶Ïœï;÷ÃÙ|òã/œ4&6¶4˜?†ÎM …"šë`¾îCIÌ4B„³iDÃó«ë‹ËéÃüóä|>ùsBƒ~h@%'’×-WAºžÜ?ÄÁ¾}b­ þª%×'Z 8­‚ÛÉcTjÂ,’ ÖÊTàKAä»ÀÐÓ!ì-õ1ã`¹eá}Ë Ågü%ewð‰ à×þÚ‰E­\Ô¡p¨®±üUJ€è©Š›}ÄZæ=¼¢íÁƒÕŒHÅ@OL¤ 3ª"ÉŸÝ4ↇIñ2å,ÜäþY„Ûb.vi•áKf¹W°jàiž¦ ˆÖjï™a4Àš¶"ËdQlò,E­ —&ú¥Dè¤Â÷3·Ú.³Æf4è¨æÌ%ëò#ÂQÓ‡‚ÈØ¶p®Q&Vǵ„$±$²Ò¢Ì‡15N<ˆzb*Ɔª´íëú#Žã1'D Š ¼Ö£8 Ÿç®xÎ\g‡ìß`-PŠ[½2’¨ðç¡?Â+êŸDø«û2ŠÙ¨8îüïm\Wdk—{ßW£ð5ŠuQ›a¯¨±=•«ók| 5‹1ðFÁüv›®Ä_Î>VŒpˆ‚¬’à×·j°•‹z‚uM M8TWSh»À!4$™€k=#¥ØJ¶^%)QZ¶—T»ñHC«ˆµn]ýeJ) O¯.gSfÂÓ)¸j~>u1\”R ]|º«–›¢‚ ª•á; 'F·yEõ'<¶œ.\¾(²¯ò èÀÌUË1 å§»†°<ò³¥„ (Êêýfˆ¹¨'8âuŠlɲ#úSꊜ¤Þ¡GŒ˜µÓ>¡±ŒBGl†¶ó˜B™!›l4tŒú&Ò„¢‘¼qO®pyêÞŒ‡¹7¸òßÂwG0r×Kï—’ø%@†?7ÍDéì#RðWH¨}™ûQýf3˜íš²éf—·}½J²Õ÷¶ãb?;€à’®Gˆ7 ߺoþ:ÓaUâ»g6©Üë‘7«¥ëiâá¶N—ÍÊí0ÆŸA[ñSÀHƒÄ¶Çû W”X!É$dŽ8ÜgÌÑvŸ‘„Òƒ}f8‹:]4‚6˜å˜¿ ~Óxëšá+¤m05 Ó¦[ ÝD€ò5ÜýÍ%å®p~B€K`(3NÃÍ“ÿËÐoþ ;12û+׫a +Ô»CÞ=:x€st’|Ðp_Lô®–aÇц1?¼È ‘:@¬³Ÿ›^öC²_à æùàò§÷aˆ©9DlMu&Ó`·ÿÛLƒuLü‹uµcË4Y¹†u½iã¾[ã›EVVEö¸óë`‰§ÌúšóçY÷ŸD@Á0uXÚõ‚‘ô ¨ÆTPߌ¸ çu1—mâëP‚ɪÜà—eRâ ¾Õ›*Èî7Uøš›²ŒJ—6l½ OÝæfÙáU–®\y‚"`]+“T?”hÍ%7ƒÚ’|Saeëí +:NÛc²ÿÞdØ*‚ aŽh?²Œ K›¶ùвL`¾¶ÝäßJ!¨ endstream endobj 1218 0 obj << /Length 1557 /Filter /FlateDecode >> stream xÚ­W[oÛ6~ϯÐÞd¬bI‘Å–ÔC³ÄèC/ŠÄÄBl9“ä¦AÿüoŽ$Ó[;1"ŠütnßáááÙòäù+J#‚‘Ä’DË›(§ˆÒ<,C‚ŠhYEcŽä,aŒÅóYBâÅÛ‹×ç³ÏË7'‹åÉß'$ÂðG"Â)âÔ|(i•›“ŸqTÁÚ›#*óèÁ 7E"c0ZGW'œÚ@¸@©¤c#ˆ”Y@+ØKòSÔæ “±Ú+Ê(ƃç2?z ¼þ”A¼8ßú‘Œà§—ïö°Äã’0`ÂTœõhå@ÉP'v Có_úF‚Œ¶ÏZY”‘"ž¥ #Έ]›«õýªž%4§ñŸ/õ“Åý®©›[;·mìS}™Ñ4Vþß[X·*îa³ÅMeuå€õ'L˜ª,þ¾hûº\«{0XÄÀlf 9SŦ{¡Wž¿"ùÐ#ÆÇ:ü§$‹’G8‡d\Z̯!19Œh” `NTšŽE 9”õ clqã8'l¬åµàE£ÚÛZíýàÃ/8x &a/—cÆQö ‚Ci¬‡0Eô‹ÿPïƒ:ˆQà_ m½qaªö³”xõs»çnmÊÛÅ…}!ÆŠr'`¤üê¾n=ýçóÓ¬&,E¸Ë² ‚%î%K@“Ûc¦âŒ ~7OUç1øl 1°¥<ê@q°„fœ Lpçz_ô»0Ó°å±>Ôïg„øôíù|–æñé Bµ\̃!†9gãŸîúÕ¶õŠ€€a@2”3](Ê…Ï+"B6Ù¡·é´©-ßg»R›u·V! ‚ œí³fueu&2’šB{”`‡KÀÁqFi¡m… ¡ëÝŒÄ`­0Öþ^ª¶AÆø³RIà C³BõÔ¡Œ‡Î-”16ªv5Ö8ø` ?BÁkÕTm}gYx½%àˆêWA Šì8 àGÊDÄs‰ ÄåÀÁ’'\ˆ‚±0«ÑšŠV{+ÿ=øöÔÀš`è fjÊØmЍìCSêà¾z ‚Y¸T7ªUM©Žn ÍÃoèb¥ý~ìÐKA_’dø™oe¦Z÷íÿÈù»óÃzJsˆ8øËà 8JµÃ%`ˆë‰8×› ‚±xÞaœæ9†³!•ü°IJðÈËu`F°º2½—˜³ârçJõE½þ'ÁõÑ(çNæ} Ù$ œFL@áátÚl2è?}³É!“fsÜ`ìeeN —S]ˆètyš³@ïºýÙÿ,Ô¿@¿Á~B$ľ§ ÊÃ]ЄH]þÐ_BZ èÓ Ÿ£4C•89šÉ‘ºûÖ¥jWöµéV!š5R3ZU»mêÒ¾Uª,ôùñØÙ÷m³~´Í(’¹K ŸÐ‘åXÜèë‹ÞñÐ]¥Òt¿ Âv¿zV¿g®ù…WI\´·Jß®* ðí¯}«›r½ëj+×NUu×·õõN»ÑYYUt»V9 €7m9 Çš²NåÖ)XÛÞØç‡½glâÕM­kׯ‰mgu°ßê§œ›¼i·;ݯ”ÚwÌlRUj_ûmkgŠÞ¢t_™óÙÙåªv«¢/tëËx\‚h0áºn hûˆ±=‹€6 {¡8»LÇžâŠ|ÜTHç“^,Ök;0]°^S_¹¶©†Qß¹Ð1ÄÚÂÉØušýéö\üíI/k*ô\''È0Ÿª6qIÙ&cM±‚:9uN?,™uFùD!±µFSÌã[Ž‚ÞÙ÷k“vl‰‚Á¶­oMl‹µ¸¸Ô{àÝ«ÅÕÕ»K=Å Ñzw¸W@£ÒSpûdqa_˶†¸zYES¬;5AиJ:·H6v‹Â•œÈ'¯D¬‚9'üUTûqcŸ:¯¿ƒ.ÜùÙU]¸ Íµ’û 7¹óð97EÀ(ßîZïHe×ïêFm@Néæ;— eßíí0¾Mü‚N9Í3ëØ˜`Sj6.¼jíî¿Ð2À1 K1†^(sÝþ7‹N¹= ¾ù#ëX6"] endstream endobj 1224 0 obj << /Length 1455 /Filter /FlateDecode >> stream xÚ­XÙnÛF}×Wð‘B­éì‹a·Y\4M„<$΃ b!Z\ŠJäç{È!%5²’ °ÓÔÌ=ç.sî]¿þ!DÆ(qÔ±l<Ϭ BØÌHMŒ0Ùx–½Ëat8’Ræ×ÃËon_>}6|?~>¸þ°Œâ‡eL9b©¨·:¡³éjðî=ÍføðyF‰p6û\/]e‚-ñ´Ì^þ\³`Z¥uLƒ9ç°ÖÉ~ª„£¾NS& :áZŸÞ&è:”ÃÙšwPFýÌO'ÕIü² qfµ‹é]ùÉj{Ì1•Š$¨â–Usb™î°R™èÀý’2cñ$"V)ÎcSÆõŠ.éä¨jn2èn’r³öŇ…ßû¡¢èÂ[fª¢¨D™^ !BäÕcH¥2ÿÓ¿Ib6&¢ÀÝü÷€M<÷Å¢Õ»$¼áÐmÖÂ_‡YcWTno^†XÍ"Þàªé=‹ÂoCM=»¾ìw&9ÈVУNöžvݨ³°î± }s5…¶ûõ¡-%Û: ¨]uœœ9 oĘ¦Ç¼.'å.iˆ5¦ õ›!c,rûìzÈmþdˆPo®“!ÆF¥zçöÉ®¼ß-M!Äʪ b[^w”™©ðØ’zYqñ¥/BÁ½ZL«÷“b¶Ý¬SPVb¿ýþ¨ßSêP%§OaÙ¨³.‘çž±˜0‰¹þ>Û÷“™LÉîcŸ•P†X´—(‚vÕ«8ò¨ i-’yäF£`d“˜°ò•Ÿû¯§þd*…–?”Êû*_¶äÖ—%¹’Ò]ÂŽ$¿hÒA«¹«Ëo×ô†™/'‹åÏfùt2+6k¤®V™·¡ìê¾P‘oý§:Éë!7y¹ ï>xhê¤ô³ðoÝÀ°³¼÷K"‡bëfé’–âÏ¡ “A•pˆ=OìB3â$ ;Ñz»DÓl'v\xAFä^_Ö25ÅŽwýáEEÖ/åc±háÑŽy’Œ¨¤òx„~„ `êûÚŸ©ÓÄÎ¥êÛˆ¥&ìÓ¼Ph0ö˜Woä>AL»ºËD»_$f!ì¥òÄy òhÇxоŠáœ}«[ÖÖwêc·öyUŸû<힬º/ÓɸGîiH•ªNÏç ×¼ïòC*0°.áÇ~^¯ühgðn8ÌÚ}#o -áÜž=d#Ée=ÚFóê^·¤úúD寗ïv1«ÙæåB/ƒËüaR”‹i+·Û ¿~Z“ð¦Òš„wœëºñ]­tã¬G!!RWë×t­{×´Ñ…—¾[—OÔeõ}‰3眀$öÀ7 ²³X=,ëo?ª¼ùi¾*a¸tSŽZ hJ¬éû_Ã^®ÃÖ¯m;üµžZJ endstream endobj 1231 0 obj << /Length 1576 /Filter /FlateDecode >> stream xÚ­WÛrÛ6}÷W°oÔ4Dp#.™éLãÚiq7ñä!—Z¢-N$R¡¨6m~¾‹›DPpܤx&v±{pv¹»8½>yüŒ±Œ`¤±&Ùõm¦bLe’ $™Ì®ÙÛ¼D„Ì Îy~6+H~~yõËÅìýõó“óë“'$Ãðd¤ÔHafj&²ùúäí{œ-@ø<Èi•ýiU×CRpX­²W'¿Ÿœ£ ‚¡RˆÅ'Ü*8ù¼j†ˆd±×WœQ¥h 7×4÷”k$è0ðtFüa¯V½b¤˜€05ç.N޼ !cØ‹Æ>½ÖC>'ƬÏ÷ÆeV©b%ØÂ¨š­ì—jÑwmów54] ‰AX¾é»Í¬`4¯û¡©·f“çÝ­1îDÄr)mX°3vãuâH`DtÐø¸«ú[çgÞ­7U_/œƒ¡s»«æn9çƒûi˜Lõ‡š6‰CkTâ=ŽÚëðL"-±U3 y£K픾ORkš#5o‹ãØ›z糬郒ÈÜwIø•²Üs”bxV"h¼ÃT¤ìa¡¾h§à”"ªá°Éêmß­!äŠåD1³àùÏõk·ccþ‡Oö 1 …c§uµÞ>q>‰ûä‚£'Á!bDh‰ xDZ‰Í(X±Tl(MI}Opb&L]’†ø,sÊçmÝßAÒ‡{”ã°R*”*¦€F‘ EW@ÁÚº‚{T>¢˜ÎͶˆÿi¥ü åÇRH¬ …åTªRu$%ïÅvä{9É™“Û8†ãÛ…&µ»‘õ”»IèÏ?…‚ѬëÖ~½I%…‚HB"¼¸šAZ=½4˜˜Åxy~å~Ðî(hÞDäþÕ¦éM2YzqödZ` §ˆAþ 5~_YzÅHÑ–ØøSsBh,S× #ÇFµ=h9N¶s¸>äkèhC5ìÒÙÊ!ÆR²_Ï!@öÅÙŒªü©aþúü,]!à»(yLñÓݰìúàW/ÅM‹bH>Þa"S Ü2€º2Xê¡îMÔyþ²™›eÕ/¶]›r¥Jp±?¾LQ1h’ ¹K$AÐ:B3À`2’ưšd©0ÜÆi¾¬oë¾nçõ½¡d‚S(—†Ž¿¶è²tÊ¥~Bˆ*Uè¾ÇÎ oá¼-ëMQzlЦôaã_cûÌÍÄ®aL \R—Ÿ?½øí™Û/•¸‡rDÍ6¾ÑË]ëJÓ¢ªfõ/ˆÿ´~~›;\oÐE=¯l8Üný‡MÛvFe>lÝÞ] ®Ìôe~šÙÏœ–õÈÌ‚³Žv«úP¤Sð)ÔDÊaì„öð7Çã=i^Â<íšóé|Ïa˜ ó½y¦LæûxØÛbðR¾ÕoS|)t­~p×€ÆìC ýmßM{[!'%Ò°i[á¯uµÝõµip@‰ã‘š¹ØšôÄÑ|]W­[…qçH‘ÙØ­†f³jæ›­ÍþÖÌ·5ÌÂ3’CH̯,}ôn»>5 íI¬Êo„õ&ÙÕeFmŒ‘±ixjA#Í›ûÆ¡BC[†^xôEØ0±¿ñ‰y¶N ¾±ÕAiþXnÆò Öªõ1²Ï_÷Ó??âÜO߈^:‘ÝÝbû˜ë.E|ì0›!L'9‰aOû³i!üW,¹ýÐe>JPØ ¦4h"Á+±ÕožÐ%(•ÿeBŸTºÃå)æPÊéímEƒ:67¯WáÊ„NBÕó£¼ß½J&óΜp,¹}óÝ~)M%ƒñ~ÂÏ›?ð A݈i ŸÌÄòºÚnѬ(¥Ì/Z|±hÜÛÜ\Ê>ư5 ž‰æ½íi(0e„r[ÉuÞδKZ­ÐU/Xt}s×´ÕÊŸ©Ü); iëÕ¨½bdÜë ÎÅÂm¸%,š½÷ùj·°É »þ jN:ñª2“aâ…Â$±o/{ÇM_¯š5`î}½„§ÔXäB•‘f¨‚qá‡ÙϾ¹K×>‡NõÉ`ø endstream endobj 1134 0 obj << /Type /ObjStm /N 100 /First 952 /Length 1960 /Filter /FlateDecode >> stream xÚÕZmo¹þ®_ÁWÂ%‡¾Òkîi´h¤@ di/ÒÙ‘ Iâûõ}†Úµ,KöFZÒ}ñŽÅÙ!9óCË9) Q&ˆR²Ò„Ò%åŠ} ¤â8wb¨Ìǹu+|çáHA9N4°Î*¥S8ÚÅX´¢rÉC?“Ø@ÇÞ”ÖHÊÛ$6¢SÞ1Æá °t€Y{.½Ã¿žƒx(AŠVfŒò)ÈL¬å$sI„¨‰‹V¦,‚Wì¨è;HE?[„4‰Ý‡u+â}”²âl¥û¨‚ "bÌ" AÜ@¢(ofVÁ;é=CYf•ñj´nôX’>â¢ÁÉOIâˆD’¨´’a}p"ƒø ‹Q ÜÅ´ÖÄáÇÑ·ÉX ¬‰h„Á$oËo^%æò«•~J2p`<¥T´‚JYü Ök g…Ÿ“a=è½( ª÷7«òÿ?§³ËAõó|1®ëNÌ'Ê“ HšBÝñ„£(9m£Ð?kJ½ŸŠCß«êïós… |w1½°ö/⌭ÀÄÎÐÝ×ðÙë˜ýSuW@ˆÛÀ ã]ÞÆ­p?‰M¨!¼±_Ø½Û ûd‡ý¾›@ÜWoiktôô„†§ ÉØW?æÀ’ )î 8î¿ÿ¾ø] &æÞ|‘ˆÄ2A Žü¥y¾éörØãeßßËÜéåûLQgÓ ×-_Ý÷â}ïJÖ7q?Œ7p=–L»cs˜ÃØïd#¿žJÙØ4BîŸ\Ò››`œ6^64V,ƒ‚iã£ù‰îç§­n÷÷>hg° pEÜŸŒö²upxþô`¸jÓíÞ½Yÿùn²Z]ÿPUÓÙòzº¨_Lêk=«WÕ².F“¿]ÿõ·élüýe}û=ÉÖ'ùC‡ˆÅ.Ê.)í±¿¡lµd°ƒÅ“¾iˆ_†Ó«Õü‡ál|«/nF—Wõí«Q½˜éÑd'¡sçZ¼­ÁQ‡žÒ0V“{Êvg:²Jcƒ=,Û¤ëdzÖ6û¾ué8šgaÏBžqhèÅ-á¸%?á°Ú6„‹ì@ŒÇ çŽ$\^{Þ.D¯-?3á°› ؇L8 -”T#õ %ÖȜۓ¢Ûo‹áìR/§õçz±ÚÇ·o âb¤ÐÁUŒ"Ÿü'j¤Cü5þªÇó©ž/>W25D·ZC)Áž1.îd‚Й ¶5ÖÐÙÃÑã¸xŸÍÏÃ˼‡—±7/ƒoX¸©èèÏšŽ(åMæƒéÈÒgíÉ#ø8™_‰z9šÜ\ýñêzr»œ^êÉÍ‹‹zq5éq½Ë€ÔÉ€ôgb@ܳe޾7¢m€©Ü©ÀçÌo³ãœz2@jtÔêÇ0àìÇÎ:h[ã›°_Ž*c‹}_Óéy‘x—ÉõæE3¬rxÙt*^„³æEàà졼 Cšyà T"r {/ÞÖ+, 念Ép1^Îg¯Æ7‹Éð‹ŽôÍå3’ïbƶƹ¯ yO½’û×+©-SR[¦¤“•)ñ¬ÑŸÈ¡£? úsgUmÏu¡\ewrf±{˜‘b†Üøï£5 |ú—­&7gk9—ÊæˆJ¦žRÂÌëÕä±³l¹rïÂ|ê¹Vv÷v™lèÍÛ+òaA#¸VhÉaù4œ0ç}¾åŒÉæÈû 'Ö÷;G¢ë~ç†bµÕòñGÃPÎQÏÊÐCÖLëu@ØîN¿‰ux¶³oÚ>“,yÁv}Öð@ãÜWKò»¹‚¨®ÈMB Ó ¶fÈZ¾×ºË 1:r™sÞÀºŒuñ¸¯ÝÀÞÕx‡ï`ªñäs°ôokô®ñÎå$œÝÓÞŸ|×Ð#¶B:Oì±> stream xÚ­V[oÛ6~÷¯Ð£ŒM,¯"9`ÀšÖYR¤Y–¶®ŠÅÄFb9•å¥Aÿüy(E²•l?˜¤Ï÷;.'o…H%–Z–\^'F!L¢eN´ÐÉe™|Ja|šI)Ó÷ÓŒ¥³“³£ãéçË“ÙåäË„%~,aÊCE¸jEžÌW“OŸiRÂÇ %šä!ˆ®At.au—\L~Ÿì³`¹ *χ48¥|ÖX"Ùë ZA˜CTšÛ}PÎ8ÑR¾ *g9QtÇåï~;=U‚H¥_ViÂ9ÂæTxÔ$7cD’qJ¸7|½h¶åã4F¤ëkÿ/Ófáðà*û²-ê[Ü\×ÅÍÊUSÁÒ¦h–ë*o«ùÓ®hPÅÉì X€¦.¥DÌW¬6?ù/o™é %¸Í‚|sQr†XMƒ„"àVA¬²(óØ+°³'Uq>T¥m_×ß”R”º5ó™«aˆÉ Ï*Wß,]g‡êßP`-P¢­^E¥"ùà!R¿„#æw2ýÕý1ŠU 7ûz—xêêeO›QxÍIÎY ÿ‹;`{*ذÀb <*€_@Ø·ãæJ®Ô-ÞÙùìäøãñéÛó)dÀŸ£pC)Þ{»mëºEøAó R6ãºõ*ÓcdpÙ’9rUY/oÑà£õ4ã&uÍb CCòé¼½¸hKµkJ–.u’s =QùB%6!6|¾íIJV.ë †ZÝ¡¹£A‘-YtD™»º"ó)ìöq mÒö Ñø¥G' í±Ú.(#*kÀf9:Î| ÅPÄ.rî®]íª¹{6z:×÷G¯ŸºÕºqX2~hdÐÃ3ßQ3ßߺÜ>~wÔf·—z6ÁÁL®ÅŽÛØÅJ×Ë»ÿa û®L,Êz]-çÈî/4¥tóÂÇöOÝ?~¥ÍuÚlðìÆA§)Wâ6´ZÑvéV“HïCƬïÜ“3ÆøsÉ!í`£ »ßJ"gÄJ} 'ÐÎP’0§Ú¡ ¶3”†Í¸Ó%8ЀæfÌ_†hÕzëg4ÃI×'Ûh&ŒP–GªñqÓÆ(h_Á宨lk·ŠŽô (Ž7ø‡âgÝh0}z~€NÇ:¯F#Ü#ÂŒ!Rcp«› ÜNPS7AýñÓ…Ý•güˆkŸýÀ €¦ÛͲºÁ%³Vâ*6s8¿²h Ò:‰·>â!ÞBJdvéóGJûDKw´ÂqG+ìÖ5.® Ítº'†íƒ¿æŠÛ»GÜc>ƒª?)ª÷0´Šúñ%ÇKŽsg@ô9Çóî’†Ö%†—ÐïD^›>yƆW ±f˜DR’CqÐ\½ZV¡ðO—þþO¤+lÑ¥»k?—Î× …ò-½;mH<øòà#«Ü¨”à³û4Öz …|ç6”Ūö(8 ãi½Ý4/;Ž­åЀë1ÇõŒöŽãÆ/=õg#ÆÖàÒב‡ZN¸Pý×ÕÃÒR%ÊÚž,¼5a6¶Óƒÿâ­àqÍÍo†ÎZ­k‡! •^T/™Ó^xZØüLõt£Ï×ÐZ£ÐóNQaÔbï…¢w4CÉ_pˆŸÂŒƒƒ¥+K?—ð\‚¡/a¬[Gî·8 6ÔomÛÿÊD“ endstream endobj 1246 0 obj << /Length 1133 /Filter /FlateDecode >> stream xÚ­VKoÛF¾ëW°7)'û~øT¹RŠêXB@ñ°h‹%»””¦ðŸï,—¤IjåF †;³óÍÎû|1zÿóˆ°ÄÒhqœ›H šëh±Š–±Ê“TÏ’”ÆãÉ4¹^ÌFÓÅèïþhD…¢euÑrÝlFËk­9‹pk¢*ÑMÄA+Ô}4}Û@…Ãm߈?/«âñEm–Zýh£‹>2#„£2Ê‘ *£¨Cè>ì\pB ÑèrËâecA‹¯9ÂÚ;ˆ6¿ckÅÒF.í†L¨ó/gG¨Fö,Ee¤fu1k©ÿÃ(«0¯$ª Ý*RPÏ›åû$å†Çe¶ÏwŽq±uPµêªVèP©Ðšê^^‹``Ájâ%€`Šq³^è]HbÑw±Z— /éúZ§ÌQz1`Zôôeõ“f®¬ª-¹|Ÿþ‘¾ö§ÙvåÚB¨¾––>Qc½Œ“ï?k±‰ ê<Ï6»3o5]»„IìÀ]TužˆÕmÞê«1Hñ·ë«Ò¯òVª\ac>QìŠ{áé6/}‡ìù0…ë®À-pÍ#epc¢Å¦B’„j¿¢¿,‰‘Lh,ñ”Ö'N€1 îÓØØ‘.ö9Us9àbÞÉšëÈ×–ëÈ!Wµ¸Žô\̦® Z£X¤ aÄó‹,õj9Ù¨åÂsÅ3Wx®ÿÂl æ(¦¨ªGÖ>ÿñˆWXœ—Å&ß&Híƒî× £M̓ßF1ò ý£1^ì›Ø•ú}sncApVé’Ú¶ƒ뢪|¤óÀåtq5öŸ¾Š¸˜^Vž¥%è~;(žùcQúžÃ㓳ac¤‚ÇR’‚Â9xª7riG0ô²ºÊ„f ¡1—^ëh ôäFê88ÿwÑ©Ûî|Ÿíá‚‹Y7ÿœPŠûÁÅÇIÂL$ÕÀØ~óŸù]^îCJƒÆNQß[ûY€P‘´ØÊ¬:a/–vä‚©ÛSV!Þ:+aç üí&/·pã¹Maɺ–œÂ(tdGÿÍÌ-<ðž!E0d ãäý葉òۼ̷7ùɈq%ޱ顄˵{ù¿;˜ÁïTŸQ›bScí èC¥õý®u¯ƒÊÊ/Å÷@1ãÊ‹Š$s³ã¥böriG0XÌ}u>½òÇ4ÿñ_D‰”GƵ‡àúÓQ q-u„¬iœl i]kW‡­ïe«|Ÿ÷o ¡9í×7¯…ÄkVÞ  @1]u¿“£ñUk&öŠšðsô]{¶k&6S û_7ñ&ºˆ»Êp¼/²{¯#Ûâ®±òtáyù[dW°f¹Å³Û‡Ò“C¹Î6½&š•ñù.òîïÊb¿ÞìüHqÔ®Ïr‹û´¬cøä…™õzžšìû3Vë endstream endobj 1255 0 obj << /Length 1002 /Filter /FlateDecode >> stream xÚ­VÛnÛF}×Wlß($ïýâ§Øµ\8H×òPÇ‚´ŽÔD’CQi‹ü|‡Ü¥ÌËZuм&ÏÎ9<3³³çÓÑÉ¥„QpÔ12} V€–©ÁC¦ r—)`rœK)³÷×c§²³wãûéÛÑd:ú:b„â#L*àÜÔÐd¾ÝÝS²À—o á,ù³†®‰£%®¾ÛÑo£ó¡&-8×ÕÀœ V#Á ùÿ° Êõ>ý–kÇ™³ãœ9žÝ5 ~.PÅ{Áßêõç,opy ˜ÐWKàbÀ* *5mV_µ9#êß8{ÁjÎûŠ’äLKàÊa, J²ðîW?Ûí ¿ö›±àY9Î…Ùö¡ú+³Çå¶Ün³Çb‹ ž-öórÕ<œ•ønr°šŠ"™DM2pœûÙzwZ½9¹d¶-WJP´ò·ÆùÑÄ€3´F …³íPwy• ƒFÉ[°Šón(ãÚ±>RJ®kb®(ƒ¦3 V‹žl|ñiåß¡Ú;~-J¢M\E±ôkôDˆ¬Zâ#Vý'³_ü‡$g Ñ1nò×cí¹/VM‚’ô†ƒæ¬¡Ç¶ÆL`[×았üçf¿ V J鈱::nW…ß… _]œö+˜IÓ¨µFßܳ}Óàò°®áî×ôÃ…¾‰Û§¶$nkEL4Oƒ'OK­h£â§—³rŸNºXP¦qýØ1†®_]Œ¹ÍΪL'I‹q£R²kñÙ¾\n‹†Ð6Dƒ•õ¹Ö4%ÆLJSX6š®+)¾ôE(½›Õ¼z°œ‹vp‚É*d8l_Ž*ÊQ9ÑŒãöüù`y —Hs/XW0tµ¾Yì‹ål ³9ì?÷U eÀ¢Ÿ-ºD 4¨ª®B9L>ïÊZ%ÓÈÆz‘1/zã|á7sÿl*…îmyY.‡ëeåÈß;øYÙSIU.™}ÝLÒ>QwÿxÑ\¼¿v¸°@…ÂsŽ·G:<âò0Õá½páN@QjNÎ/)SÊhg†óÙàPãm©IQ ÉfWÌú“·smáËÙêË R80Ö>oìÑñfŒ7ƒ Æ›=:Þ:¡ž¦[O?úŒéh‡û)Y8›¥jÄÿáË09âBÖƒåUxî »f¦`9`x4vʼuÓÀ2ŽAê›F(—>†ª®øþéš!ÄyÂÖÕ&åÇË´ê?_)Zž»xî^î¹ëzÞ-ˆCÁ|M¥EãБO7 ®Sqr –ñ£qðjãÃË«^ÌŒÁ̰,Z<‹9?Ü„üâÉÇ,^V$­Õ8*¿Œ aó÷¦}ÿH]ͯ endstream endobj 1262 0 obj << /Length 1264 /Filter /FlateDecode >> stream xÚ­WÛnÛF}×Wð‘BÍíÞ/ Ô®Ý6iЏ‰_qm‘(•¢zA~¾Ã]®Ì¥ÖN[ ŠœËÙ™Ù3'‹Ù·?2–Œ 6$[¾É0bFg:ÓMÆ’žÖÙ‡Ùo³‹S „kdLŒÃYGšñ¯“Ui$Ìä訡Šj>/ˆ¡ùm@òS&ôèù‘ÉàoÿùÓѬvÅÈ0aÎA ü$+W€T³âáÓ8ç`õ¥œ“`.ç}Ÿ2+ˆäˆ ±0œøo¿ÚrhíÆ6sFón^0©òíƒÿ·[Yÿ°k·ð@óê°ìêmã_¶eg÷±Ã²²*ÛG[ù«²j·Í`U7=€,Ç#ˆHÇt€ì`c€ŒÂÎD"Ì ôÜzgôM*FØ@SFfC,Ž_Šu‡1ÂÅD!žŒâ•MS¯êuéjàjÊ$Cü ÂÁ‘f}5såK¸ŸnÎ{“8¯A$‚˜ÄW@‹ …v´dÞò–›ý+oNôØœs$°™T™ÈQV˜V(rî2f©"S‡RÿªÈÔO(⪱ícmçc…H8ĸJžAÅËûGxEú_<ÿÉ~LæBD=»úkç&ܶu¸ ÉôŠ"IIH }uÙ{0o¯®ýâp¤Ò!|z10Ó®nÝe‚p¯/_M9‚pŠtO ‚¤Ï2S°+F†Ž%âCLÃyf¸qšZcÄÁm1AOÁê$qrI¸J ô¡+»Cº×œÁ™áãœÅ~}9§:?ï+¿¸ºL_ ˜*Á㟺ն ‰ ã‚H¤¹cv¤®;LT ”  ®{,¶³­¹÷õ²Xí·M*•âè¾:Ù˜ô 8–¦|~y³bd—èó$X ÅX¿¯íªÜ r‰Ÿ¦¨˜PHCAGéC¬NPÅ`ÂÀˆÐVì#U†ñ–ïíƒmm³´Ï¶’IþZyƒ®W}AþÞ£${E4™ Ï‚VI€CT±Û¡ñw¸²]Y¯¿6ŸÝ6…¶9†¹ñ#WÙeé`û·ö×àfNaïý»G Œ Ûºò?ÝO¿ÞC$–‚ëvmŸè,…Ÿ{Pβ¾ÙÚÛŠ9& 2†‰!° b¾ƒJ,Î'¹"WÊ8Ýf$±F%’d²EerJF§¡„/¸EñÏ^D$Aì3{ü’€¾˜Ëÿ ô½lª—1 W Ô@ä³K%’ˆñ$¨L…-à‘×ÈîK€%Ð!gÚõÀŒÃNŸ”ð&¡±´ûoÕ©´{ ,T Â, }¼óÃÈm¼Š¯ü,¼6þ± s|T*núÃäûuÌA„)P¤CèÎ.»mëo“²pwzY£yŽü¯wÍz`›#…T5P뉹ÇÕÕåÚ›.Ûí~`¡½u÷eï?”íœøF‡68†Àõf·vÿ+éiÌVÈã6.8P'ÇÀd ÝÏÞƒ ªïsà¢b2ki endstream endobj 1269 0 obj << /Length 1139 /Filter /FlateDecode >> stream xÚ­V[oÛ6~÷¯Ð£ŒV¬x' X‚x[‹ÍR£Éò ZL,Ô·Ér· ~‡"i‹2ƒî¡HKÔ9çûÎWóÉ»ß(Íp‰t©q6ÊE”ªL2$•Ù¼Îrް˜Œ±üãíTóüòfú8ÿ0™Í'OpVÂÎ0ãˆÙ+j*²ÅzòðXf5|ü•ˆj•ýÓ‹®3Ф`ð´Ê>Mþœ\sÀL!­cXkž@• )Ê~ªTˆë‘ëŸ(ÖŠj<-°&ùC`ð å¨ä䍸Hgðo?=ŠA®&(ŒÍõ?Ce˜Ê!jé? 1½Ô0GÆzÌG ™XpDÁR‰8ÃîË_e‰íG0aGZ–.x%bœA5×NðÍ/Y#%TV oÛí´ $¯‹®ÙnàYѼéYþGU·ÛM³ð¶Dd‹BòmJ{3÷ Va¥‡¤Ê'¸ ¥k³¨¦@éeïã Rd0-æ„®LµÞ_8ƒX 2†x©1ãEÄ€¤YEÁJ™&(iÄË›"$6%#!CI7 A—Øz9 Nx¶1íscŽ~ð¡oRìòš\¼…ÌPšÛG8Âöå¿›ÏILo" Üìß]ŸpÓ6k³±qî’ð’ Ap€‡Ñu£§G·dnf·î÷ý”¹wuWÛÝ`É»Só­ÏòfJdÞíÝÙ³©Zu¦v¯ýNÍni–hST·+si)þ&a4³WŽØîü&DFšñŒÓoB Vg¸ ÁunBñâ9ÚÂ1ì1÷©x)£ÅGëç†ÆˆwBÌÀ@+å©Â2µÖ™†ÉÁÀú”ç.6<ßÙÛ„åt€Ãí“û=]>¢mzšŸ€ Ž2 WšR8ËáòaŒ8¸úRµ/6³ÛÍÞa¯Mµ?´.§l§·Æ÷S³Þ­L65r¤´†âƒ¾fv£ߨßõ%ø=4ÊØQêƒ endstream endobj 1276 0 obj << /Length 1219 /Filter /FlateDecode >> stream xÚ­VÛnÛF}×Wð‘B«-÷¾ @íÚmc¨ëy°ãVZYDtq)*­‘ŸïY.)‘Ôª.Š B‘g朙™Ëé臟9OhFlfi2]$†ÎM¢…"šëd:ORI¨O„éo·c+Ó‹÷ãÇéÍèz:úsD“ ÿhB…$ŒéÚÐr•ÌÖ£‡Ç,™ããM’nMòW ]'œh%ð´J>Œ~]žj Âkû¨µ*ª1\|Vmˆ´ƒ£àLjmìxB-KZ-?ã’d’lÀOl‚?ÿùó6iq“0"aè®–ÀÔ «ÐPª»¬Yó©ËÙ ^ã8«9=%ª‹œP%“®3" Лñ„ëôí§LdQß½"‚úxÔà|3yfðËZÌÑ“ÈM¬ÎBa¥²h! ÆEépƒ³w`·å Y:ßϪb»Á³áiQÿ/Ò_óy¹Ý³˜(ÊQ[¢Uuß@DG’%ÔØW%Y"ëIºr³| I/;G8Oa)*`%èÒåëÝ›àš®C!ˆÌ!u Du„¡ŠLW×w17¸cïéj\!=WºwÆOY=æDq"5bO 1ŠðõÆ•O…;œCv-$N I‡´Ë =D}ÌpžúG¼¢þ—Hq£œ‹^à®ÿ~®îÊbí6>ÎU”^3¢méÑÙPèl5»óþú6ü µŽ}ã"Ð˦c<¥Û…2{wõfxw©`„#{J)„Ëží-nÒÖ··ˆ¡»ZBÛ³†Ôe³ŽÇHÛhQ'ÄÑ9¡$Žl^åÕ>žkÁQGº öÇ1¥Á~w5f&½ð‘Ÿ^_EC C)E?Ãûj¹-["$ …K[w\bt[Y_Má±Õt른ʕ¡âîÐðb™—óºF„ÉH0Ì—'M:cPž(Ê`AÏO†›tp‘4œõ“¾Öçûr™¯I>#ûÏCU\jbÏ]¤ZÔ‰ª~¸´H>ëË*¢idZ¡^D“—zç®t›™;›J®&ÿ-—÷ävé#ò²#~o‘éO:;^l¿J´­·Ûê £ÙÕ„iÞ+¦»}3Bæ®Ê‹Õ·V~Hµ¶ûP‹s?/üqÂ[÷¥ÎüfÌtZí»'‡N›Wn~Ös–ÕÒu<ñ¦Û•;F#¦Ÿ¡«0Á_&{>]¾¸¢Ä ™H&Ñ1Äpù§íò… ’–¯þ0:ø¢ûBù‹ÅË´›&ZoÃ1,%ì0'ÚfP’±F©aµsaÑLœ¯a;­C#³ôÙ/åqA6Ý.b#ó¸vb:aLöb´» ò|”C-f¯T}óÃj§ô;‚F-ölŽ\½™Ú0ÿMo/9+ˆaÕ9´vh&»£µËwû²®.ç_y/áK¨0¼ô”…Š×Îa š!ì+5|È«÷ÓxÞúdÔ9k¦‹ÀJ®P‡µžE™?Õ¾LŠ92…ä/ö›6o(€Å¶ŒF‘Y”Ía×x%U¸¶™¡Ýµfj.“H×^Ã~UÏ«bVT…k.ᙢAI+Ü…ÿËqÉPð4²0Ÿ©û/U€õœ÷æ¼lºC±™­ös7'aK¥ U‹d@>f,kÚÚ×€å<„ækÛ&þ}Þ<Ý endstream endobj 1283 0 obj << /Length 1280 /Filter /FlateDecode >> stream xÚ­WßoÛ6~÷_¡G­9ñ7Y`À’%ÛZth–}H–Åfb¡¶ìIr» ÿ|"iK24@‘–èã}¿;ÞO§£_þ 4ÁÒ™ÆÉô>QQªÉ’T&Óyr“r„ÕxÂK?]Œ5OO>Žo§FçÓÑ#œdð‡Ì8"D¶5Él5º¹Í’9|ù!ÉÕ*ùÖš®Ф`ð´L®FÿŒN9`¦Ö}XkA• )Ê~ªTˆëÁѯ(ÕgÙx‚5Ioƒ€O(G'»=€tÿöë/;³I°›t #†îZ D 2 Le5ó_u1½ÕK˜g-æ­…L&X0D¸_â {Iš*/ÌxBMïòêqLIº.í;K7ÕH:ßΚÂ-Ò´(­;=½Ä Ûº½ö6ý˜@6JLù¼Z—ÅÌy›Yn¡k7nÝæ¨ð9 GP" TÀ ¼2çèÔä«úĪ È♀ƛˆD"-³Ö"¤ ™4ÈÒÚ¼‰¹üÍh2é˜yW„ô]IÝõõo™‘a"(â œ)Añyiª‡ÂìÎÁ»;8œ(eÁ/Ïà~Š· ¥©}„%lßXú§ùÅô.zÂÿ¿iÃkªbeJ«~…— ²‹DâiÑ-™çî·^­_Ý14Fd×5B0Vž©/]LCiaà|{ÿ6y½­Œm Ic…‘éúÞ~*§›]€ÞÇ"=r_`y;¦0 ãJ&œç}¿ì3 EúŒ E‰Vv;tø}•ˆ@·íA¾„Gì²æÇðÄsx†Y9À{ó…pòâíu£ŠÛ`Gå%ä¥ôÕòòâ‚gÏ]ý:©)… Ÿâ6§™›ol†åå|—aÏ…›ê )"^ÉAq®cH‡C=Ë—ÆÓX­ÃMØ®Ž]ø)" *´ÞæEÝTÅÝÖÎÓm "éݘhW£H;\q?\7ç°HŠm}æ8ºúDÒMîJ“kưcY¯ÝÓ"÷î›­æÁv?ÍÃâ¬Z×õ¤6³!{›ýκtwª†Á+©v'ÚäUSÌ–¦ö=ÎЍã?|µ-×aaµYšü K½x¡¥û¼,¾Ú2mäðµ†òepA°ï)OΖ2‡÷Jíw[rbB endstream endobj 1290 0 obj << /Length 1443 /Filter /FlateDecode >> stream xÚ­XYoÛF~ׯà#…F›½j#n›Ä@ÒDÈCÒ<0âÊ""J.I5òç;{I$E'N[Ø€÷˜ùæúr9{ü+cÁÈ`C²å:Ó 1¦3Å%RLeË2{Ÿ DÌ|Á9Ï_¾š‘_\Ï?,ŸÏ®–³¿f$ÃðC2¢Tù‡†ÉlUÏÞÀY —Ï3Œ˜ÑÙgOZg )ÉaµÍÞÌþ˜]žc \#c†ˆ1jBªâH3þÿHU 3Rý “XSÉæ bhþ>!Hò) z|ò‘Éà×]:’-Ý¢G8aÌÎC úL*W€Tõ¥âxÕ—©¾'sÄÌËüàD¥ìS.ˆäˆ ¬1œÒ”ãL!£p0%ALH0¹jOõ'Æ,òä=Bðž¦×ÓàH0€g`·«Ú¶ûÝ|Á4Ëo›=,h^V]9Üí¡±e ù8‡û/aí¢WæàËü:œ]ø{}õ*<&È Ò 0<ˆ½´EÝ> ‰îCä l’6’ÈžšàUÝ·ÆOSl æ1hYQ:d¥ÌȲ“†[H†„‚8 iÉñÕÎ67•=ê!ú/h pâ+0ä´|†a,wK8"nÇóßìÛI™‘ÅÀpWw·ÞI¶©j»sîè&Å+Š$%I<ø ürq¤;0ÁG°!Ç”øÈ"ˆ1ƒo«Æ¶ÁÍÏž>çá1ðž”ÌeîÍàD·èúl*1fç!¤2­1âð¬Çq"Õ™àɺ-AR%Õ»¢;Lûš3ˆ#•ŒývNc?{:§Lµ¼z:ibx(zøâÐmöMèD"Í}DZ¥È"j SX&L¯ÛÙ&DÜëjå6ESºôŸ¤!eÕñùæ¬hb È3I(¼ ÷Wê@¶èÑM¸yÄl ±þRšMQ£b…ŸÆ¨˜PHƒ={â&b Q¡Z€ ΧCXÕ¤©’/<ú%’¾¶kÛØÝÊÞëJ&GOè˳Ǘ]Û®C—œÐ'”à¥üQêëca‹ÈáÇgcoöî1L)½G{D)ˆM¥´]Qm`‚õ{Q6ûÄ…¯`ïBL—vUxÄSû· Ýœª¼kÃÙ…Š]t¾›ÁÖ÷8xÙml4Âùžî·öT.§àS¨N”³ÌES„{>T1Iá"j e㡊ÃT†*˜ Éh¨6µÄ‹¨\™í”½4‚²­õsPÃDý&}@`tDªi`.]܃B5¼]nìTw=] …‹Ÿ¼˜è³ðÚßô3èí011a†šõˆ<ÁFâ×Mqã:#x v˜c˜ÈׇÝê´ÛmX|ô®¶6ž÷¦ØUGênß°ÓPšby7¡¡†Á~0¾|OKŽ¡A~ 8ƒ½Eð-!hþ,b-ʲêª9‰Á-!¸a㘄iòuhpF ¼=ÏÝV«ªs s¨´»vpP]SÝÅÛÚdç6ÄÕzß„«j·ÚÚ*dà7­ñ# â¸7€î™G•â¤$#,7dî’YzzÎ9â‚)TÁ HŒ†§ø{âCúÊ@žŸ¯cùY7û:¬QFN©äÝ¿¨PCã#«‡ˆO·gu!Æ 30úš+>úÀÁ&wU’bŸI&fl{™»½# áЄ“Psa±>l·aÕ»›x¸_Ë2Tƒ20‘ýç²ÃZv$$¤Þ§d8ÔAH€ÝMX–EWDµ‹OÞfÑJŸ+HÏ¡=ܨžþ)0å WŠ ÔÞ…V?œt·7þKÌýuS>pCa÷r·ý⼄SQðëcÁ4Ç‚éˆOÓíj÷™\šhÃEÕ.«CÓÄ /Ä]Õ·§aËð-xò!ÌÌÆMWHÓ˜`_Cr0ÊÉ×ÔLÿ)ãøb endstream endobj 1298 0 obj << /Length 1314 /Filter /FlateDecode >> stream xÚ­WÙnÛF}×Wð‘B­ÉlœÅ@&µÓÚP71òà$„4²„hq)ªMŸïá ‡!©’… ˆË{Î]æÌå‹ûɳ—BdŒK-Ëî—™D“i©ˆ:»_dïò‚p:I)ó?ȟ¿š~¸¿\ßOþš°ŒâeLŠk¿Ð •Í·“wh¶ÀËÛŒaMö7Ýf‚h%qµÉÞLþœ¼8åÀ¤!Ö90kMUKb„üPµ!……þFhʹ•Ó³<D|. B Þ­>±þ›×;³Y´›õ Æî<nOP¥SÝG¥í«>fkõ-Ì‘3ù¡ÌfLI _”’…wwÕ~:<_çõz¿Ãµù~Ù¬€oÕ÷­-±E“t¿0š \Äjê-a EFVz+ÚZ H=Ù3zO j Å»H E¸ä?Ì¿˜qí‘Cäån‘b 2 ¼§B¥¼k¢5ÿj×”÷\¯}re¾*Õ~·ž§pÅBE'‰P-aÆ¢ÿ-*y>Å– Ú3[¸y9E¡?‡fB©Ñ Lb‘ 6/\¹=\ÌôýIIP£È˵&ªÇ ½nú´~J¹P1 Õºâ|èJB|Oi2ÊêRhìfˆQ"_ï\õ¸v]Å -(õŠ¥S¨ŒysÙÖKÈü7÷6‰Ùº$îúÓ“ßE®ZoÝ®Is„ל(Î"<ô}ýõè ™W×wá†y)øÖE€/Z]{ZWîÚìæêr¬0Lr"P=¥ÒeÏêZ´›õ ½Æ ƒ»ó¢²Ž¡ %Ëzâ­N€“§™*°…u ½.ëcºÖR tLöÛ)c ɾ¹šr“?o2}•L1ºA…ŸëÕ¾Š@(@?!ŠéÏbtì,¦SœÂeät×Pqµ«Bǽ†(àÁª¬HqÉ@è–¯NŽÊÁ> stream xÚ­WÛnÛF}÷W°omö~ P I­¶1\ÔM„<äòÀH‹ˆ%¹• òó=Ë]J$EÇ1PX€Éåìœ3—™}6?{ü»£ÄQDzù‡Ì "„ÍŒÔē͗ٛ\Î&S)eþ÷ÕÄ©üéåäÝüâl6?û÷Œe,cRÜ4ÐÙb}öæÍ–øx‘Q"œÍ>7¢ëL£%žn²—gÿœ=;åÀ¤%Îõ90çìª‘Ä ùÿ K”˜þR鵓)s<Ó2hñ¹P„*~Ø|â2üÂç±i+7íŽPªk(z‚* ˜š.*MŸº˜Iê>̲ó]€Ì¦LK•ƒ.J”dñÛÕj[o7“©°"/6Ëð óËòz5<¯ãú_~׊\U[<ð|¹_Ôe\”y™>þY,«í¦\8Ó=bFb4¾N26q†6"Ž0ëYŽMB= Q®ïˆûEØ~ÝE;¹“ÄI ƒñŸÊ(ôÌëÝ“¨Ù®B)‰¢®%擈îCm—×ÏcjäTôx%Uœ÷U™žo)5sªQg–X-¢ðlã«ëÒìPÝ Ö‚mõ*ŠC¬!4BäáK,¼Éüÿj3©è9nö嶉¸¯Êµß4Y1 o8Ñœµð(-H”–=¹œ]ÅÖðƒO*"¼JGö¶¬ü.æ×óó'ÃÃÃ$'ÑÓZÃ]îÎ#ÛÊM;‚Íñé1Tl*ChK‰Ä¶ŽÆ‘sÛJj­Ѧ5½.êýx¬¥@Ó« c Î~~>á6¶œ®_û*fÜ T,¬ŠjjÉ’U@8l_TIÊÁ<ÓŒc»»4G±iGn$Ìe}¤Ïõ×å¾ZkR,Èþã•P†Xø³7’­Ô «¾„r>ïÓ*Gê)Üšâ’D_ø¾ò›…¿3”B¶üX,gûŠ\­‚O¾îÈùM=‘Œ!•Ì£¶±¦IÁÃófåo§þËcgQ2»ÃxÂؾO=hé뢼ù<„Ô¡±5ìuLéeh;Á'qÕjh3á&¯wqíÚ£`µ_Æ×¦_bg½òM"GÅÖí?VË1úʼnK‘…dJôoO‡(¡ºŸÊà>TS1¢$Úr;D)ÂØ`ˆê÷´V—t(è¨ ænÌ_– j%oýÍpŒðC»ik>8+UË£vò­±y}ã0T,nö»^uyZº ðü»‹q~(WCˆI]7Q`Qmw»(²ƒN–G=,O ¶P3%ɤÕåë0%ÉÏe½J YŒPÆ[³b-—è¦yÚ˜>rÓЀ9;öÆ$š/¶1aŠ2Ð(7×qùHâ«"ˆÄôŠŸßà &÷~_×¾Øí«&Ëø‘My†¥ÐyìÆxÃIÆo«¸RÔqÃå $YB4’yCë„Ã\â¢u7a^ f`—“GG9‘/Ò6pÿ$|¤ ¡÷áõkŠD›%ëÎ1ÂjQ¥ÏõÊ^‡Ô¨ Nô¹½¥‚Ìtšh62kªÀÑl[Œª¯ûÑwÙ( 6jȆ³û4'ŒŠ‡ á}j7¿É("éÉ>…Ñ‚‡´ÞüÚBJJ‰AE(,·íVªï”ÕK<Ä8É@ÒñþŽŸîƒá%±Ìò`Ù÷†eŒ"wn0ÏÛþÝà¾<’áfù)3§lÐCÆ£æ|‡a{9¦8­¢Žbôâb4®ŒhíUp”ê”àYGªácïÊ Z¶‡KÌhà .N*Þ‰’$‰å‘àá‡[“évó-ö ab×øÖö¶ÿØFÐ. endstream endobj 1312 0 obj << /Length 1242 /Filter /FlateDecode >> stream xÚ­VYoÛF~ׯ`ßH4Üìrïj×j#EÝFÈCl?ÐÒÚ""‘ ðŸïìA™¤h4ŠÑrwŽo¾™ÙóÕâåï”F#5‰V÷‘¢ˆRI&¤2Zm¢ë˜£,KRÆXü×U¢y|ö6¹]].–«Å§‰0ü#aVJ:EME´Þ/®oq´ÃË#ªUôʼnî#Ф`°ÚEï/ÎO1¦Öc Dk5ãU2¤(û¼J…¸ž„þŽJ…™"IJt_÷zÿåóì¨þ‘ŽàÏ<Š¥½\:œ05ç Prâ•I@*‡^q8ú RÿåsbÌù¼µ.£”†2®ÁFœö§É›®6{S&4‹Û&I©¢quoY|ƒ ÏíÁgû_UûÓ9À"‹M¹ j~ÿ¾ÎzC9p·EU†£®\Û¯`¿(-$/†à)£ˆK·ƒö!È@A -±ш( ÙׇÂAHÊ)Á£t öÓœ?"¦½·OAbD§DTÉ^âgbÎLJ~B=k–¼0ŽË#ß.5T3„%¤™0Ða^ðÜäûæ•7GÔÐcˆã£GDÄ€'¨<5¤éç93p/!þ!MÁT–MÉå7ã¹ SAwAXþ©^–¦~(Ì1>Ôà-@:òË1ôñj„ÒØ.a‹Ø/ÿaÞÏú &FÄ-¿†ú¬‹¾gÝË ‰Œôî¡BeB7tÞ-˜·Ë+ÿAŽ9÷Á„wÏC—9µ …þæâÕô¾–! ÙB]úÙ.ÓË¥AwãÇALÍù.úÜԵˆÚÀâL«é¥NÏÎÁ ²½ÍÛn>×p·±<Þ¥÷ !È~s‘d*>³Ì¯–³ƒ"çlœá³®ÝVuï0¾Õй.”ì+‹È9L~Ùcz ý¬.>ú”¿®’™v;ç—¢Wܞ𬠂N ’ y>ÅA.Î¥xbÎ;õhÑöô×µ©K´¶„ž Ê´†œÍÍ/t‚f;Å Nѳ©Ëˆm#!AòsojS®Í³Ù£0ÙG*ß—¾eW#ÿ®¹ÚZ¾5î“Ç—¡¡ü&_ø^B…~¤Š<]txŽè§+>”/?^O[sHÍ×—Za‰1›'H¢LÒ A]ÙÙ6/vßAÓy¾©«²Xûà?xB6f;Êü.L([Qe’Iÿ"€½> stream xÚ­W[oÛ6~÷¯Ð£ŒE,ï—–,ÙִòÖèÃÒÿe›](”TjåÀ…{èS[®wÇž&Ñ}šœ#»ŒØ`"{ñBW&%únÌ œYÌ’hƒ+JSWÊô}} {˜¼B2$¤h¤%óÆç[ßB×Å8DÒ#-PêÊ/0h’<‚ì0–»%¼"î‰ç?Û£˜ÁE’¸óû-l¢¹­«µÝ¸z5£ðŠ"II„¥„š€R¶èŽÌÛóKÿ@ZcðÁ…‡A¶U»áõÙñP §ˆAõ¤”.ó¨E»¢gتAÄÐ]K!jàZcÄa[Ï㈠E«àÑ{G ‚¤Š¡7e³¯5gÐGÝý0%„@²_ŸM©ÎO\ægçg£)†Bð´Â'ûfyWG (@?!ô©Up¤Uì,¢Æ8ùeät鍨ÆÖ¾ãÞUs÷Žúb'vI @è¶/DS`žIBayü¦ñfEÏn¤Ìg)a”rýa±¯—å•s´ÿ4dÅè7ä³7ÒÑê€Uš& Ÿ¦´ªÑ2R%¡_x¨K0}golm7sûh)™lù¶Zžïkt¹t9ùg‡.ÐD3ÅàHª#ÚÉW V/oœ¥ÝöþøUýAôˆ*6~î…mÊjõ )x ©_ÊE}·¾hìßÓ ;/Û¤ø·öKÛA›)Uy³óïn-(vÙ´·<¶wìl–¶ç n½i[ïVöA.ÇèSP'Ê™›D ¿= ™$pÅ‹L`ÐʆC!‡Ë>…2 ÓK-úâtæ”s7–/@¶B¶¾÷a¸ù§»o¢ècd TK×øÑzl¾b¦›¯Rr;’&õò0m%7¹D0‘Î-i(}†D9Š4u~ô$|ÌéNÆž€r (^‚d@ÅdºáÍHÐÄ’/ ›Âˆ‡É §~êòå€_ Ó´:Èä”@£»Imáß÷‡80¯6þ7p`ѹŠ,Û®·A笀wþÕÃáÒp¸Žb'i>è$˜`HƒçëÜq™¯m¹Û×í„§?ã‘…µ?‡°pãŠðã <Ù{ ÃÈã ý‡2üºY쑚E/ë²e«j½]Ù¸7"©Ëj÷@å‰ZÇø˜iÐüçZkÐÁôŠ›º¼ÌʦòEaùÍ~3wO¨Í8Ñ0ùƒ~2ø[ó A_½%3þ¬Šô/³I endstream endobj 1328 0 obj << /Length 1467 /Filter /FlateDecode >> stream xÚ­W[oÛ6~÷¯Ð£ŒU )ÞX²$[»bíš ÚõA³[«,¥’Ü6ëŸßáE¶niW H`Sâ¹|üÎ…Çç7‹“+J#‚‘ÆšD7·‘¢ˆRI&¤2ºYGobŽR¶LcñóKÍã³gË·7O—7‹÷ aø#a •J§¨©ˆV»Å›·8ZÃæÓ#ªUôщî"Ф`°*¢ëÅï‹ó)ÂÒzˆ!ŘÌx• )ʾW©×££_3ΩÒb™Æo:ÿ”r„yzÐÿHGðo·ßÄ’N.é Î@›s(xeʾW¶ú>ƒÔ×|ŽŒ9Ÿo­Ë(!‚¡”k°…gÄï]-µˆ«}ücÚeB‹³rS˜Æ®i¼oòrã—ûz›í‚H±©ê¼Ýîœa ¦ `Þâ¹ÉvÍ©Ý9¹"ªŽ1ıeÓÉ™ ""‰´ÄNS[ (Ìsf 0’žX0•¦CSR÷mý…1örCÊA—@1QH ê…/KSors8ïkp8-@Â]Ž¡\Ä#à†ÒØ.á±O,þÙ¼šõL ˆ»ütJilê|gÊ%¬ÚY÷2E"%{(bˆ±ónÁ<»|á^îK¿ ÐŽ`k€ãú.¯»xrq:ÎWÂRD!ŒBàM?X%\Òt;<ÍØœƒÐÕéØµÂˆZÏâL©tRdz½Qp‚„äáèmÖîçƒÎ($”ìXµ$„ëO.–©ŠÏln./f)EÎÙâ³}»­êΠOˆ@й.ƒ”ìRŒÈ9L~Ùaº²(ê¬|çƒ~›©Û9B"© ¼ÒÌ‘ )h‡ìÅ’žÜ\|‡ÆœÇ[‹5à+S—heyœ IGÐA{æZ£šàž9UÒÇ»$ŸX aòô±—æÖÔ¦\™#FÅHåÿ…ìr_£[{ôû=E?¥øT`'áº+rì, ¾=?.ž?™3US- T}¡˜ƒ\Òœ öÈœó ûcyÒÀ'O1| ­§· F°Ý2{ z© Œ!GZ#‰Óˆ‰tÙoà(«ÿÌ?Ì´<ŽÝ|¸åy¹¤'8Ûò†æ|š»Ä|:zflBÜÙŽØ£á9z‚ÔÄÿlçc: îý] dmÚ,/¾C¢#ˆ@ ^ B"&4´ZÈÙèý’­ëªÌWà•ÉøµÿZ›U¶Le|ïÍûw!|¶·1p5g­YûǪôßíÖ ,ÁU UUá­½gO R‰¥YÄ$ÌOÀ ƒx7Q©P:/'9¨ ¦ÖnD…“ш:œc¶:Z,ÍW¸¤à˜ˆ—ý!5Ô„_ÁØfxL7Y›[vb#ãÀÀ8"%õÆšmµ/ÖþùÛ±hüC»¯KG;Ì5„dVÙ¾é·a±ÎÚÌË糪êÚ¬|ô¬n¶²± 7V[ ôY|—Õmf˜Â&ø):á7Elj‚Ž1cÔ2–úSœuS,•ÂÖêtFLéw‚'ÛT^ºß‘¨ˆh¢£Våušê¶5MëÙ ðEIìÅkg]š2¸)ÂÕò9ü0Â^÷s×UÿV Ï endstream endobj 1335 0 obj << /Length 1497 /Filter /FlateDecode >> stream xÚ­XYoÛF~ׯà#…†›½7n›ÀEÓDȃ<0ÒÚ",QEå@þ|g/Фh»ðrgvŽofgf}¶˜=ýƒ±Œ`d°!Ùâ:Ó 1¦3Å%RLe‹Uv• Dżàœçÿ¼ž‘?¿˜X¼š/fŸf$ÃðC2‹*Ð0™-·³«8[ñU†3:ûâY·CJrXm²·³gg§6®‘1C(ÆtB«âH3þs´*„¹þV0I¸áó‚š_% ’~Ê‚vg@?2ü:òmÇV$¾¢Ç8aÂXœ7ñ­\¥ª¯GR_gäzLçH˜×ùÁ©Ì "9„Þ€,Œ'öûºlnìj^0)ó»²i«åƆ¯íœÑü°i«»Mµ¬ÚÊîÃ~U‡¿k[:ŽÏßÂgYG)›êfímøüt(›[·yÀçõœ„E[•mÐ,rûyÎHnknöÊð—æ;¯Ä“½<áà0´k¿ @È) ¼žç2r@j!£°g0ˆH#€xyp$$€ßc»ó6Ùò6`ÊJF†Ùr»ÄÝÇ9Ø$«¢ÝDö¬‚ŒÑ}«~™÷ ³UQ¥CQjàá{Œ',$CB9'4Ò’æóÚ67òä‡\.„iº³Ì ¦X&5A\[¯I` úŸXç°„˜cØ%qÇ3èÀ Mî–#ª`#Õ-ÇTÙuËÕî¬[Ž©üHå‰ê‚™îš¦KšI)sôÈD¥Œå¦§”ñ@ÕGjÏøtT‚qGöëÑi‚IN&γHç¹['<ÃΟöÝT` ¢JsóükLà¦ÚÆÛ6aE‘¤$e*4 Í\£èì¹8>¨·b*«¢ˆú·wUãˈ{ùâÙ¸Nƒ "T/ÈÈû pâ+zŒ¾ŽÒt$.´¿Øƪ!Ë8ëIœ¨Â‰ëDñdÛ÷áB¥ÞÓ–íaú:qˆ­R ìwsB€ýòÅœêü¹C~qþbb8(BüüЮwMRè"‘æ¾!ðx‰š¼ã~™Œzíl±­mB½©–nzÇj¿«§Ti*ºã듦‡)˜ž @ z§ lEo"Î#aCƒÑÐÖßV‡f]nQ¹D‡Û±UL(¤Оº‰$H\'V ` ©èЬj2ŽpM!ax Là|c¯mc륽7”Lò åÚÁñm.lÛ"7 ŠüL|¼Ün:KÅ…åŒ\N™PD¹?`ÃÚÞöëSL Cu&P½Ø’CJÇʶeµùÙÀüU®š] Ùâݾ ™¾²ËÒãvaNqyUÏ© s ìÝXè•q”Ï]NºÁä(‰¹ÉŽî6öô”ýŠå,s9¦ÓÌq2*CC†‹Œ+(1àÔhTæ0 ¥QY BF£òpœèdÁ XöSxi¤DBëרë ÉtM(õ°ÀèÔMC-ä0'h»éß¶Üë:@p„Aï:ˆŒÀÑ|kË:¬Ò “ª#¹ñl û{7XZ˜c¡ABHÜ×–1z×»fjžê@[)ÔÇ­'+6¢FdÔ—¸˜aTN‰†W doÑ㜔×Ëè›PÌFb,'T5‡wÄ¿\|Ãgz rÚ#`Ïr«ý#ÖÀ.9<Öå$ U˜’’:DD`¬êª{‘PÓ»é1Ca¯ª²š((ôX ¥>8äë†|L" ùúÿ ùz<䟌ì÷Pßá}}â¾÷*Ù²­vuô¸l#ñ9w?†ZæN˜Â~÷»'Qáêæ¡ÞË €´ÿçCÏ«G]bîùAÍPô¶Üï}ƒ£ùbM\•mƒéÑùu³ÛÌ?>b–€N,ƒÈnîmu]Õ7ýÒ3õÎ/V±1”lëúâa²áÆ|cDXÅÃÜ¿E0 &ÀVnÆ`À`†ïDZÿ{ê ÿHM u endstream endobj 1234 0 obj << /Type /ObjStm /N 100 /First 971 /Length 1772 /Filter /FlateDecode >> stream xÚÝšQo7 Çßý)ôØ¡¨N%Q,²®ëŠn6 H»§¢Nr­¬v`»Cöí÷§|—%qZÇq6;E‡wGI©%ÝÉÇlœñ!ˆ¡ˆÿÄ&ø B2DÅø(&hÄb’¯Ù$\ø“ÉEïDg ÊAðFR@@ Þ‹Þ"üd”Oux´²XËá'²V• e-МgIzzR[DÑàXHÁ„xà˜Š¢z'VƒõVDoÐôS®õ¢7¼|ZL(äUDPoB½Ú€ÖÉW;`(¡ûèŠq­ OSPeȤ½ÊÙPqÚ4’jC€Pª>›èª>'=WÉ›Hµ/LŒDhÉÄ$Ù¨#G"„Rõ!•ª_ /Õ6Öí ‹Iêk'­£$“ÄÕ{Ùdjl²/ZTL&R¡@¨þ+bÕh¥¬ý2™½C pb.Aý€e¸¡bUpªÿÐEx‚¡L¹Jxšp r •‚a†YHÊ6 W}2ÅU}ïMÑ€á4^T*¦ÀÑ*‰) N ˆmá vD)kIŒR­ÍC_Rx ‰¸Z‡OFB­Ãg#Të`ŒfR!ë°®­ë­ª q¬½Ôþ©³S‡öÈyÁH¢€‚ŽH»0®]„Ã+.ƒ1Žr-3;ÕT]Q}"U•ª ã·µURÂÔË!« š—æu@úÐ4¯Æ‹_ F–eâ÷ƒgϪƫédað&‰tš€Ú{ Ö]¡u8/¯€·W<ºgo´¾¼‚+aF_Îk-¾/§îðÔ·û¾w®,­„YÍëÙôøM»0ïLóúå+Ó¼mÏæÂâ·Ÿµx0üØšŸ`};YÌÕ†ZÛ 9lçÓϳãv¾ÌMõÞïíÉxøbznÞi#I’ ‹$¶È{´7œ¡è»°Ôÿq2™¢Òw˼§f]k½* šÓÙI;[ÖêÞkÛǰiÊ*9$«y éÅV˜’•Ï7o>-j5¿'§¨¬úÿiþ8üuùóèÓpüçbútÔNNfãS;š¶‹Ñóãv6±Ç£ïÔG5Ëøòåø–`%ù÷_ѸÕØ>’xRdžlטWãŠÌ¸Q\#¯Ä5.¬“T'„^ ¯„üJì¾4Ì­æÉÎÕ˜jzÁ‰,g1ÿyúvj¥GGã£.Çö6#-«I.G±šî}qi©YlÐAp‹¡6Z,Ξ6Íx2?ÏÚ'£öÌNÚE3o‡³ãÑgßONŸ¶?ŽHÓÅñ¦&–huÒØ i©'dzË9d>̆“S;·ÛÙâ&nå¯d=òm d³.‚³„'гÙ&þÎÎÇÙéìc3<š7ðÚ“ö¼qÎy—Ò ¡1­#ôªÆ=çèfå”VéM´=½Ò±šzŒSq [Ó‹DíÒ%z#Û$ë饻қˆ®Çzz9Z¬Fï—^À¼” MÄŒˆÄ‚¡®XÛ&¶y&o±Ùß×í¢ÙÃññh8;™O'ÏO>ÏFÃOvxl?Ÿnê8*¶Ø]ú#Pk_L´¼QÚ;9·'ÓqåXûè7/^9xŸ³ð Ç)®ãøªÆÿ4ÓÞ™ÎVéÌnk:÷,–^]A÷yJ ‚ `‰wƒ²ŸR/ Ü|N½5”ulg¿nô_Õøvf±,7pÂ[s’c‡GN½wÅIÚçÉ‹0s‘øýŸ¼–”µœ”Í9¹BÆUjvHß°;ãíwgܯæ¸ß”1튌¼×d`²å"„ ^»âm÷A×ÞN]¡f‡œZ夸í9éXÜoˆ:CwÀ ï5'$íîpRÂ:N®jÜ“² îÊf,ˆ_a¡ô‹¨’{wÅBÙk2o¦‡Â‚¬eA¾Í9Cnø¢!ykNº®Õïuvʼnì5'ìœô@8‘µ_„ïuw¾;2È­¾UÖoÂ[’¡Ÿ¡+úºvõ2™Ü~“E\ydè9ƒ¯“qMã!“áWßèêI‡­ÉàˆÒ »z£K~¿É(.–MìO thô'6'ãV'ôÔÌ"üý¾ÉÝ—S"äå>xk>|·”ÒsC°«7¹ö™}Éîì=È—µœ”oeæ«» =¶-¡_J…Ð Ô =4aWûÚëOö1%*’ïvàæb*éÜlŽÊ½¸¹þ¥>ŠuX½ßÏ—ú9~SpøÍ"w= ä£ÍˆàÅQ ì=òø‹q%¡„u›´k{~€€è†m¶£þ楤AýFŒúìA;ÛˆÝùa`¥3DŒ–"ßo†H”}¼ëŠËHϰw³iÒE(Çÿn6¥/íÃþ˜Ýd endstream endobj 1344 0 obj << /Length 1535 /Filter /FlateDecode >> stream xÚ­WmoÛ6þî_¡}d¬fùþR Ã’5ÛZtXÖý°®›‰…Úr&ËiƒþùßIf¶T¤y¼{xw|îxz1{ú3cÁÈ`CŠ‹«B3Ę.—H1U\¬Šw¥@TΜóò÷ó¹åÉ«ùû‹—³³‹Ùß3R`øG ÂAŠ*¿Ñ0Y,·³wïq±‚Å—FÌèâ£Ý )Éa´)ÞÌþ˜c \#cÆ(Æç0Vº!üDü”ûU)‘ˆ«nد2¿ªu¿ê†“½æ~ÕÄÕ0‹A8:M7 ÉÙ'—ðp Ú:¥sö`Š"II:Ð'資úêì ¡»ênôƺqŒ „ÆèĶ‹3¨ª2ç7[í­Ý&¾„»Ïû»?‰A 2WOÔ|U=à©úQå`pZíˆóìgàù@ûá°áÉÙŸ à_!À÷uïJ'4}ÃOá àߺ C²J}ˆà+|žÓôXvVãöðXîšbC¡U•"€íŸí¡iêæ:L®ÚÝ6äE ~øéÏð¹ñù°ÛØaš ÄÖõõÚz„0‰Êá…æ¾èÅ&â–ü«6<¨b:ƒ”k©$Iœö9>ïhØö9ñê?êë4 endstream endobj 1351 0 obj << /Length 1250 /Filter /FlateDecode >> stream xÚ­WÛnÜ6}߯УµÞ/ ÔŽÝ6 ´ñ"qü îÒ^Á{q´Ú\ŸïP$7¢–Žƒ"°SÒpÎáÌpæø|6yñ;cÁÈ`CŠÙ]¡bLŠK¤˜*f‹â¦ˆªiÅ9/¯¯.¦·³×“ËÙäÄ~HA˜@Lù=†Éb¾žÜÜâb_1£‹O½éº`HI«Uq=ùgr~ O˜A„ÓŸ#3°’#£ÅÏ•)nRØk>¨ÀÓŠZÞDŸRˆ æ‡=€L¿îóÃÁ¬ŠvÕÀ0Caì®§Àä*S Sp†Ã§!f°zsä¬Ç¼uEEGœ8_ Nü·—˺½·‹iŘ*ë¶kæ+ëŸÖSFËýªkWͼé»óï›ÿ»´µ³øøÅ?Ö›àeÕÜ/݇Î?~Ø×íCÜ nê.ÂÙÎÌnzãà|œwKëXÃùäð|ŽEQíÙ¿ 6ddîM Ü Ô‡ÆÛà`“ÄÉ !!³GÀ2õC” )Ú¹­×»SïŽè¡;ΑÀ®Nz»ÀœÈ+°²ú%çFÊ%¬‚+JSW*9á{Œ³‡¬$CB‘þ0Z2o|¹±í=ä2žC w@… „£_¹@òÄ¥„•n ¯ˆ{âåöm3¸Hwù9D·mÖ!ÝYxE‘¤$»ÖÔ;×W/{ìdØæ!EØüØ´}ÁjV¾º8_:èHˆAƤ H*ñäUvÕÀ°¿v)ñ±;ÕC³CkŒ8lxÌÜ÷huœmî’ÁuWáJ_wu·Ïç—3¨üvJ)Ï®^]L©.ϦªÙåE6İQžfõlß-·m‚$íiÞ·-¤#¯÷˜¨)¿Œ¤þv\lg[_foš¹{]j±ƒÞÒ Û—GíS ^Èȧ{º7«v™<œ¥„QÊõ·Å¾]ÖkTÏÑþaÌŠ …4t—)‚huÄ*J„¦´šl©’P0<$Æ[¾±w¶µ›¹}2•Lòÿ•Ê¥ Ç—º²]‡Î™–§\‰ŠkqÀ¬ †ü~ li+ûù…‘Xc¬Ÿ8<È–žäÍ~ã›ÄÂvu³úÙ!ø³^´Û ÔEßÈÞùš^ØyÝGÆ¿…1è*h3¥*ŒAVÞ[hÓqR²0y?¿ybnhÁÖíÊ~k”9þÚå¬pÕ¤ã¸;’_Ld¸(¸†f3t$¿8Lâ(¿"d$¿ÒIvð¥4’<Œž].^nÎÆhýêa¢‡!»>00:0 ]ìQÐÙöþeëݾµn¾@H|i¹½ó.Càh¹¶õƯâ] ê>¹Gz‡튔´Ñ””÷´‚eÈÞݶÍòCP+…N˜pý7Û›5¢ }3 FeÎ5(a¸ÕÀ2ëo/f`BBÛNHœ|—¶qª]¤;æyÚÐqð÷WbæÏå„tŠ´%õÚÒå×?´å°öó'â UøÝ/vϰY‡°é¶CM’QAÂÿ:Zo”ˆÝÃ-wÕ3¨PæÔtN Ä…xFP¦*0«(ÈNñ#ŠRçåQoS4•Í? 4«y×l7áPu÷­_eXÁg tq"â“ÓiD©Ê¨øqï`í!u½Û!¯àá¿/!ÝÙ¡afÉ× e™ç÷5vÁÿ+Ÿu± endstream endobj 1358 0 obj << /Length 1259 /Filter /FlateDecode >> stream xÚ­VYoÛF~ׯà#‰š›½êTn›ÔR[ÈCl?ÐâÚ¢ÃåáÆÈŸï,—«’ôº±‹À‚µ"gæûæØ™y»˜½ù…±„`d°!Éâ6Ñ 1¦Å%RL%‹2¹L¢:Ë9çéÅÙ<»^¼Ÿ.fÍH‚á$„ Ä”×1L&Ëíìò'%¼|Ÿ`ÄŒNþîD· CJr8m’‹ÙŸ³·Oá 3ˆp:Æ'Ƙ¬äÈhñ}`¥FŠ›1ìSœƳœš^ŸRˆ æÀG&{ýù –¹| ¡05×Q`ê *S#¦` ÷¯†˜½Ô·0'Æ:Ìk™äDpĉ³…‘àÄ¿ûPí³œÑ´l—Íz¿ƒ³féþÖi€m9´­ 2½S¼ÂŒôRà"2 {!¤ž¤ñr?ôBãšDØÐ$ˆE‘”2þA#1!¿'œzŽÁÁåÑÿÏ9Žÿí c¡Å‘Ö4Xz)£.ÑW˜à(9Êáºr}³ GWa½H±+ƒÉ(GÆÆê›¡3HÈq¦Ö}M®Š²ÚïÖË[)£"Pù‡d^NFà¥]ÜŽGƒô2®€F7»“yk‹m}ìí=´Ç9ØZ¶‘Za©Þ± '6¢Õ›¢tlJ™I±D½Ì%CBŸD#-™>ÝÙênm~ˆQõ€·@épñæIWBŒ¥îˆûÅÓ_íÇ(fob¸Ó/÷]ë±Õzkw.ÌM^Q$) ðn`uÀŽÇÅÙÏv ²Wó¢W¾_W¶öõn~tå³Ë¨J›Ú?»³Ð¢‹Æ–þg·ªf³²K Fuªûý·IÆèShM”3·® 5òã…œI‚ ‰ÀÐH(›.ä¦pXÈ"d²§X°Å 4 ®=f‹,î‡Yþ£wÃD&tü„ L{¦}ÇãÒ=8´Ý?lQ·•Ýöq}…ÝjÛ}×ËbÓÅÎÛ}'£Ó¦Ýú'åºnªõMëVâÚ?ò n«â.Ø,úYšô¶Ý-âÝÚßP¢p²îß¾ÍHZuäÁ_Í'ìaJ*¨ÆŽ}SÜÝu9ÔƒöõÏŠÆÃDá4÷‡­w¼W† ’ZÿsSÛê!*-n6¶7Ö±å$uôÊ:wâGþÍ2?ò¯¼ÿðä&wtÌ„Nmï Wž›ÇLóùü÷ 1Èïkúk¿£p¯ü5”ø?šÎv endstream endobj 1365 0 obj << /Length 1091 /Filter /FlateDecode >> stream xÚ­Vmo7 þî_qÏXÕûK€K–lk‘[côC³|¸Ørl$¶Ó³Ý6èŸu’œ»³‚¶À‘t$ŸG$Eòl2zýç%`‰¥Åd^œ›B šëb2+®K ÌŽ+!Dyuy>¾™¼]LFŸF´ øG Ê%pt,WÅt5º¾!Å ?¾-pkŠ/­èªà •ÀÕCq5úgtv O¹*XŸÂ2°J€5òÿU´°}Ø+a”eš+jYy$|ÆÐ/Dtl?ÿùþ V%¹ª#˜¡04×Ràæ•ëS4Fâ§.f”úæÀX‹yã!‹ŠJ‚z[¤ áÛ;Wo÷[¹õ˜³r7®¸áåfîÿ‹r·páà¶ú´¯›û°™7õ]+OË]½[nÖñx¿ž>ï–kŠôT—' ü’ðQ}V“V³ÅXŒ¯•6‘(Ô»§©XQuÄfnZû+ëÓZfÃÈ´Â|1.Qô½›»Æ­§îÅPr5PùÁX.¼?ž¶à‡‰8Ÿá\Éb±«W©‹ñªhäçsgá+÷õ5Á0N_pà“Ü»ÎÌíêåÃxágHýUÏšÍS£-eCZ·íÆû&œºÏm­ÇL—»m8»sX¨ë›…mÛyjªÉ/±°¢êæÁ=—Ê}†Š ^ø„ŠôG(®(X! I°œ0>¡¶ã4BI t0Bõ{Y²%,–aæ6ç/µdòÖ¯á–;´™T÷ „˜H5>¡|îãVýiÄ;Ò`añgár-÷¹*³ÖPÏàm6¼ÔhÀç××:L;ˆš¦Ï'M;þøyÚÁÝ­ÿüÖØç ø`"ý}­knÁ.¬1Ï[>óM,~ñ&\}ÿÓî…Ëõ]Î7Vƒ"*…&ë ʰ$.ówQoCo1CÖÅ^… Í åB),uk—Œò[š7‚Æ·”¨ÿ²4áe endstream endobj 1372 0 obj << /Length 1484 /Filter /FlateDecode >> stream xÚµWYoÜ6~ß_¡G-j1¼šÔi›ÄR{‘‡êŠö Ù«ZmäÏw(R²¨¥§pa+Q3ß7ÃÎ Ÿ.f~c,#lH¶¸Î4CŒéLq‰SÙ¢ÊÞæ1è?2ü»Ï±¢—+F‚ ¦p @>ee*²Àpø4æ Rß㜀uœïeVÁ' #Á‰ÿöªÙÍ Fóê¸lëÝ’‚ê|wí4[F‰ ¬éôÞaF‚xˆŒÂŒBškˆŽÆËý„â”DØÐ¬‰% Uò”ã ¡¾Ã?çË„‡„ &äÿââË„§tà ê÷)  „ÔíEÊm5/SÀKe r¤ð Ö!Ë.ê›ÕR¯õ¯ï°À)|ÁWƒò±:$ Òã\$é¡+×bܶøUû±KŸíœªÜõ*·vc¡F—­­ü«f»²#$=¿pCãÚÞVÉ”ýjåÌlB¦…øÀ$A†‹Œk¨$ÄL/q ˆÉ% nc–ÒHòÐw©ý‚ËÂ0üìÝ00´ ¦/ù`ÑÁÒPò84]l@÷O[ŽuͶ¤ÛG*Ü< ¿2l,T5ŽÁ É›9É»Ð0y[—k/»wƒ9` ƒ¹ÓsÁ8øï=æ¡-ÿ^ØþÔßtƒ…}Ù´õrÝëÔ[ÿ»Î>%Ý¿7puÓ&öðMb¦€™’FCNæ$„Nö.‡ZìRÁ9íú<õ£'cÄû ±°°‡é¥?Ì…ÈKx÷:A™ºl‡Õº îÀmï–|þûx¯ÿ tüÂf· ÚÇ_iÊíECbð‰w0&)¼wÏÝÞspªªêPxkwþ¬Ýiì¬Ø›¢Þ.×ÇCýÑe…ýV”(ƒ¾ KÛ]QR]”ô7¢4öƒrå1ôP7ºç,ßœæ¼ó³±þaSVáéz×|3Ý`:äP,ïåˆþ!G8ƒYUÊ»ñæÕÞþ‘µ»¸÷.º½šS1üz˜Ûr7Å¡ØÑáÚ’²P‚ÄPuÎRI9LIUrP††«ïqHcÂw§I˜¢–²LWQ&ôÉÕ)†¡PV \N`ngÿ=Œêeó¥o-·ÇDå0óù³Gˆòƒ7ƒ„¥,dÅ×p[¾Ší{Í¿^£ endstream endobj 1381 0 obj << /Length 1261 /Filter /FlateDecode >> stream xÚ­WÛnÛF}×Wð‘ÌõÎ^¹F ÄŽìÂA€6¶à×´DWŠ%*%)§F~¾³ʤ´J‘"°Q;‡3gvfg.¦£Ó+©b¤dÉô)É9áß¶‹MÝ ɅHºn#åw-±¨ñÜn¾,J_ö;K«X®VEeY¶±hï¹ëúÅÁÈNNf™kæ;C2à²0Rì}w.茬ÈgüóíûF÷Ý|[/Š5)fdû¼OŒ‹O’è‹´B‡: 5ÜŽ#Ss6¤µôã”I7a}9~¤çÕüÕ×áb;³ =¯Ê×X 4Pp´€¤9… ËŽ— Ãe=`ì¼í¹sA Ë›…–mKœAæ¤4û¡²ààßÉïׇÖçØ}2ÁyF4Àñâ\ÖÆŠ¿çÎ[J(?í’Å\CªÄ¦zPx¯T©>¥Xáê€Pt ¥qè…Zº[ËŠ²Åið“+úéýÄÊõ2Ü’Ë¢ñKxâ”~ú4ÞZD§&€qgYK݉‘yËp·µâ¨m¡BíË[ÁÕNÞJ,Áž¼*Ÿ/¼NLÙÄÒEØNFýêóò’ “ñ’ W¼dã;Éæm'ÑT9# /ÑàòsL–áÕÈ¡§Ý æH’œæßu£pO;À/ÑRâØA æe¤"z‘[²€z•Š˜…šåŒü$P> stream xÚ­W[oÓH~ϯð£#áéÜǃÄj[+Ð^ dyÜxJ,|éÚNÙŠ?¿gniœ¸…Õ®@òdæ›s¾sÓ‹õâì%c ÁHcM’õu’3ÄXž(.‘b*Y—ɇT"ºÌ8çéóÕËå§õëÅ‹õâ¯I0ü# a .ÜÍd²i>ᤄÃ× FLçÉWm†”ä°ª“w‹7‹‹Sí„ Ä°žª'Zãµ’ "èÿ£Vr¤‰œª}Gq®)—ËŒhš~ˆ ¢~J h¼ê‘Nà¿=ý²Ge–àf sú99QÉØ„&ÈÂáèPc@}Oå‘0§ó“U™dD`$T²àˉ?³ÁÏXÎÒ›ÁìÊ®/nª²—Œ¦wvŸ§e5Œ}uµ«®<´ý‘d8l´¥_cö‹yï´bÐ aÀÜ«»0E3<µ'g/‰8dÎâLÞá>b**?De°¤2¢n ŠRÁÇ!§ž€ÔF’n¢þEkúÏ•™g lºä÷ fD ü b,ukØ$î7wçãý¹[Ûsÿ3ØÂ*(™²ú ›¾jLk}?ÎTIJ"A9Pe™¬—à}s»¢Ów­çøv×zˆ'6Ç'Èô|D¨‘›ª7!Ö¯VO–pêÊYJ ù¤,’ˆË€.e§V‹sb•«Î1âpí@âL­DÔ‰âÙ¦(AREÓÇbÜ=  a¥¢÷ß/ !éù¯¯VKš§çÖýë«ùDdH> ùùnÜv}T˜ô-”sWò(W1‰šãä—‘Óy[Þùx_ì6–Ö—ÚÜÍiPa¹O¤í©—4šHBá y8À—ç|$Î)-,WpºÚ-I l•cûóÆô-räOhQ íTëCZs2 NHM]@5C”¨)©j6~k„ зæÚô¦Ý˜cÈàuš\ù± ^n­ñwzknÑŠ“§ÐÒñ“øZëÉÂåŸ,«?^V6ˆ& ¯¢ù#•pÙp.ðGâü»!˜E;Á̲0ó$â2G”ç‡|æ"P'lfË]êòE× ! K3Uý±|ÜŰÒ2:ö%! ‡L@oÝÀÅ7ÏW¶BEÚT­_\UÅà»5´o¨xÀ/ãàOá©c´ŸV4¢Š'Äm÷nÜ£x2UQ“Âá$eÇS‡A+NU¢s4UM_à(ko–õÇð=gP®@°œ:ã™·ÑÖX7F€'Â[ðŒ"¿º´n)ú±ÚÔ&8çk5n熄h6‡ˆQ̦J71ãp_“ô§ï±æ> stream xÚ­XÛnÛF}÷Wð‘ÌÍÞ— híÈ)hc yIó@I‹D)$×ÍÏwö&“e7maZ-ggÎ\væP—³³oKFk’Ì>'9CŒå‰â)¦’Ù2ù˜JÄ&ç<}=}3ù4{{v5;ûzF $!Œ Á…;¢™L›³Ÿp²„‡oŒ˜Î“{'ºIR’ÃjÜž½?»<¶N˜@ ë¾y¢51+ "‚þ?f%GšÈ¾Ù[ª%XN2¢iú1"ˆö)%Dã0tÿöé—ƒTIJŽÜ€2gŸÓ#“Œõ`‚.u-©çL”9›Ÿ¬É$##¡rПœøg6ùËYz³¯ì‚§×þûb»ÞÖq¹2µ©Æ U±~hÊ9µCœ1÷ú.M±i^Ú'/ÞÑ…ÆâL€¼“ûS¤ò®TK*£ÔÒ$|8ɾ«P»H@UõÌ_U¦¾+Í8aë!D§1FøÜb,ukØ$ö+O1F­%}«PFSS—SM`ÕŽPIJ"z°l‘Ì&hóm"dZ´õ¶ò |R@„8`cx‚NG„"ß•µi|ò®§/‡G8u÷QJ ¡OVy”Ë:‚®æú^ Õ9ñš Mçq8ÖÑ8RìQêÈðhW“‚ ©¢ëmÑîO CX©ýBHzñîz:¡yzaÃ?»šŽCBð~Ê/öíj[GC€^ãA9wwå*Qc˜ü2bzWÔÏ÷í¶ªLÕ,&T¥« Iáê‘´¬Æ¬ihÔäp¯VGíçˆ I(!§[ZË:‚#ɪ;àFóteÊêç…©+ä¿A1¦$¤ j¤ ¢Ô¤~ÓˆS݇TúžGᙢ*ä‚üH2.ªåƒOÆåÞyñemÆ Â’œLD Z1MD®f§/[ËåÆîZ_™³XX P¾h¾‡Jq%c¡> Eôî`9Ahˆ¨ï=Õ Q¢zˆÊÑkD±†è~.nÌg?[N^%SþǯÒo+ëøCƒnÌ74ø\IÏ#éšÉÂáQ&Ó_¯,Ë!"D!Ãâd΃\ÖKú@çO‚Ù‹è(ø9EvƒŸGé–9¢<ïâËw:B3Úu9ä]ð&–.M[”ëËŠñû×Sa@BuÈ—ÛÐ*‹vôRr¤0^”‹> stream xÚ­W[OÜF~ß_áG[Ї¹Ï©R! Q¢&°B•(†À 륶RåÏ÷x._†¶‘"VxÖóÍ9ß¹Ì9gW‹ƒSÆ‚Q ’¬îÍc:Q\"ÅT²Z'W©D<Ë9çéÛåiv½z·8Y-þZÃI#HpaL&·›ÅÕ5NÖ°ù.Áˆ:y±ÐMÂ’VÉÅâÓâx®0.ÆêIQȈZIô稕DŽÕ^0N4§$ËIAÓ«À è§” €†#  |úÝ/{Tîaù!0fõs6SÉØˆ&ÈÂ~k¨Ñ£þKåD˜ÕyÝ«Lr"0Jƒ,xrâö–ÕgÓe9Ó,-ëûÝcÙô_xº®Ú®©nv]µ­[{ƒp(æîà±)7ía¿spJĈ3x‹ûSéQzˆÊaIe@=A<¤‚‡EŽm‚$EÒg¤þ¤6Í}eâ DxýœÆá7`c©]ÃKÒåéoæ2ªÕ ký DMMSmLÁª‹PIJþ‚YÍ=“U®6Ï™iÙ5ÛÚ‘8ßÕB,±/Óñ>›ŸªÆ´.|gËÃijNíÅ“RBä‹WÓ9àòÐ&רª©8K!ܧ©j‡c‰‘¬¨™âhù’‚ ©‚é]Ùí^I@†°RÁû—!$=z¶Ì¨Nz÷¯N–ñDcH>ùÑ®{Ø6A`Taæör"­B²ãä–ÓiÏ¢)ë/.蕹7MS!RzŸÊs7sÄe" …äõ;X>ÀÅâ;f5Þõ,QëþzkšÝö~œ1¡Z (Ü ±*æ@3c›©V.ÞC"U4bÂäÜïaçæÎ4¦¾5¯FŒÉÉ‘ÿ²½Ù·èÜ<£÷¦ëR‡‚1™ ¸oB;›*̽”Ï‘åïgó Í4ÂP[¡|#ªÿåB{\>Æ>ç3F„`v {½¹¨7ww¨¦R)EïP3BcoR˜&‚(eåG¼U6TÏ‘(·¯@‡ËÀh‹swÒ<åæëA!¡É2(°sñwÁ1÷xÔL´òê÷ê]ç€r²6]Y=þì´ÿôvéjÔÚ Ь {Af@ÿƒÿ]ë¶K¿íÍ„ðí-ÆŠŒBZèÐûgc •Â&‡¤S‚MÇ@“a!"d2޽,Y@÷ðW°Y®á<þK–S¥S›]Àž¿D[t ÚyÈ5þK÷奂®²ó>ûðñ ¹ š{„XCÊi ¬7 éƒ)Û]c6Þõpšãt{瞟3’£ì{V Æ9ØsöUU;œ=-†…ýž¢[uýë—±õªL7ÒCŒ[@Vñº|t¢[èÑf îqSù©’LÌe½©3×Z6N½ÊRtÓSS•{?ÀÖ¦l[ä~Ñ—­Y»·Û0Waùtã“~^@ü° eÑ&’@ç£û‹±© a@Ñûy•ăN R9Sp=CÛúæÔ ìè| ¹þ˜« Œ endstream endobj 1415 0 obj << /Length 1241 /Filter /FlateDecode >> stream xÚµWÛNÜH}Ÿ¯ð£GŠ›¾_öVDÉ*Y^€‡ÑÐ0NæÂÚØ(?¿ÕîîÛÓ$AÚˆiìê:§OUWÕOFgŒe#ƒ É&÷™fˆ1).‘b*›Üe×¹Db\pÎó·'gãÛÉ»Ñédô÷ˆd~HFA‚‹v‹a2›-G×·8»ƒ—ï2Œ˜ÑÙskºÌR’Ãj‘]Ž>Ž÷Ñ ˆaÓ‡'Æè¬$ˆúßÀJŽ ‘}ØK&‰æÌŒ bh~D|J Ó¸à‘Éà×½ý²µ*‚YѱK8kñ9߃d¬G|á𪋬~9pÖbÞ:Ȭ #¡4ø‚ONü»“òf+»3š7åt1.˜æù¬Z×uQÛYS®WîËïו_Ø'gvÔÞþ¹læþíbZ=Xÿ°Y7ÞË›jºªý¾ª¶ÁÏÊV_[rèA´0÷¬ŽítYº7gDtÈâL€}kwƒ© VºkUÀ’ÊhõÁ– >Z˾`p€ÜìÁŸ:b¥M3.«ôŽìÆá7p&Æòv ‰û—çØ«$jpÒGýˆ¶•Ë n’€¢HR ¸ÛÛ";&“±ù´©ÚÀ‰‹ÍÊ›–XŠOðéùˆpUËÊÖ>Tç'‡Ã¼%œ¶·ZJ¨$ʼxW¢]Ñ1l3·ª¡»–B¼¬Ch‡m‰+­ö€“µQ ‚¤ŠGo¦Íæ…d+ÕÿëÏ«1!$?z~2¦:?r˜œž¤S!!x?èG›f¾®"„ WÀæíÝGZÅt#*ÅÊ/#«3Ç.ÜöËÒ>تIAH…”Þ&ó|_hޏÌ$¡°ƒ¼boVtìRî;kïKT{‚¿ÏlµB3§ãª‚¾ÐAHIo´Ç£fª•x—H™Œ…0yùƒÙ…½wµrf_Œ“ƒ-?²swì¯5º°Oè½m¤ñ!ã’ðG¾‰ÝrX/¯ÏøÌ"0àXä`Ór(D(² íáÎ6Órñº¼†å§·'>‡¡¨Qåzm{<›6þs[õÄ®ê1ß‘R\ …Hmi¡bƒØD¨„™Å˜L`( ” ³ID9DúÝ(úâ ׳N^#Ây<û/c\ç$Õà@P³-BÉ:eŠEÝÕéj'ÏzÓøñáã9ò}™¶8 BaäÒ@a¥–àéƒÖ›Ê.C üîõ½wÙÌ­p·*œ•*X*ür7Y8ûä †¨"ú0<_º0lMùÙ†¹ëdrëv¬ÜªiÓq+A =Œ) .|K \%E£HQµ›´G“ˆ“WOl ?ºõ3[/e ' µàyéÖˆåõféeHºµÓáÉý±AÌébáM@™ºS7|>û™ÕÕ?³²îÌ:<ƒÉO«måúFê$} ¢Ð`ö«¯Xv|ÂÄO ^Àw&«e gê¼þN²º+ƒ $ ]…¯š ΡC0½U„—ß¼tq&þ«í¿ù¦XI endstream endobj 1424 0 obj << /Length 2365 /Filter /FlateDecode >> stream xÚµXkoÜÆý®_Á~ 5Çó&iÄhÊI$h" F+Ç@©]Jb³ËÝ’\ÇFþ|ÏðW.W–“°äÌå}žû˜ùêòìé×JE‚³œç"º¼‰2ŔʢT[–ª4º\EocËì"ÑZÇ;ÿzñîò»³——gÿ9ÇŸˆ„ÌhÓ’+-7goßñh…Íï"ÎTžE¿ö¤›H±Ôj<­£×g?}u,](ÃÏCñ’s>#Ö &Œü߈µšå†b_kaŒäj‘ˆ\Æo ùR Òáˆgy„·ûË*ñdɈnF ³^¾6G"• Ô/î·Æ=Õ§DN˜õ2ß9‘Q" g&ÍÀ ¿ZÐÞ•ÛxN°L;£{’‘h¥,OyOa™1,™5–¨þâ…!L¦:‘mÊ¢Ý7妬JÆÝ"Q™Š«Úýû…A«<„‘fÒÚA­?Íj³e:”žDšs°…—LNDžã“1žË(‘•³^˜ðúÙƒú„~ï¼ZŠš áü ärM„_•Ŧ}F\±7⪠ÓÊ ÆþÌ¥õTÙ˜*Á£´÷ÁL„M‡˜†Z¢0ƒ< Ä¿¬Ëæ¶*ç50.ò{ ð5çŒ?A•Šûg, ÷ªãoÊ7³R=“Pê(êüÓTTfH%³R ~ Ùir¹àecã¢k¶5)q±¯‰DôŠÍéãy’>Æ—]Õ”-óÕù³i -û g-#ÍOÖ.öYZ5eG•î©èŒ3ÏFgÊÇ@u$x¶OXƒŒMÓ»¢ÛŸ b<=dÛ›…"~ñý«ó…ÌâÎý—/Ïç¦P?tòûînÛ ‚€0­3ÝWA–¥ØD:§=:}[Ö«¦ú…Bþív‘@³²»›“‘üé!OîŽüœ &uYärŽô?bO—ŒçBZŠæÕû™ä6L€z&“ÙCÉMtɈp6¹Cv>ò»¤üð .ÅñT‚BŠJ?b<jOu$?t‘rÄQ£ì~†{ÎÿþêØ9*#Õ<»“ÎñtɈpÎ9v½\ì ÁÕÓ ƒÇþç)$²b¬Ñœ³<Õ‘>³Qç(XÚ«C-ÕmUvEµþ]˜ÏN{y7 ?»ÓÏðÁS6DNê~Ô6G±GžlðÑr»^Wmµ­[W8:'~Ó¡¾´œÉÜ„rΛr½Nþ¹ÈL\Ô¤/&™»9 Ðé¼U¿VC ˜·AYèÂÓ·Ýp}ÐÜ0ÍãY2äš‚HÏÍ’¦¬îGÉ“.P®‡È‰ Vå²èÓ„·q­$Ç*½nëõG熣:ââ—m×TËî!‡ ýúlјÕÒT=6¨ê11Í(YàžMѶԱ›¢¾-ipë¶~i»¿½ƒý‹á“Ñr¢>Jm*ÔÏ—3!tÅ£ÎH¼œbjU å—ΣY¼ñÔùˆ'Î}½†Ïß/Œ9Ü*`•. #!jжqý5õðÙÕƒ#“qµH†w³õCgîzNƒ[·Ó¸H%^lÈÚÙnü­›‹>©x³_¯?&7…S¿^Ú~6XÍj÷ð¥ÇÍmY—MÑQ_/dêæ·åæ{B>q¬Ê,T{U&%^ÀtÑ e½Oí½¸-ªºíˆ ª«ûU_ÿñÞvЀ›bÕïø&€wôêõÅý%uìPD±²kªÍ¶YßÓŠTi ¬Z>1¥½[Ǧü€d8ægp¦N6Ó^Uêzv QÅã«/ZzØÍ}¯¥÷n[Sh•‚£ðXÓÖáãª^n7U}KowÅ oš ÷hvì¬èÊU¯±r§œ“‘s²‡sx1ókx2`]yk«ÍŽ_Óc«+o¢+M0°x_;3çs_ß2áë&Oé.…þ@ä.Ùç“T6»u1 Ë}#Å/ G;)Ѽ@µ_wUâ£q`“:6E?À´DëÀûïLÃÅýàÚ”K@ köË®p¸¢Ÿé`,­~D»ªÖ官º‘‘ž-Ï%–ž˜€ñÈZ_v¼É=;™¡îãXÐ)k?½<§•kŒõи¸[ï{db¯Ýo6ù ﵚùﺻ¢¦ëmܧíõÚ [U A $ûÖ/ÒtŠÊ ¨úî2"C—³SEìÌ ¾á-Õ[­/þׇ¾Fîú‚ê=«|Ot§M‚¨ †ö\|šy¤ë«Ê]óh–kEûÍN%Ñÿ6ŒJÿÁNØÖ endstream endobj 1433 0 obj << /Length 1184 /Filter /FlateDecode >> stream xÚ­WmOÜFþ~¿Âm)^ö}×H• 9¨ˆµ…ST‰ðÁ¹[À wGm$ÊŸïx_Œ_–¶‘"˜»ç™—NW‹£sÆ‚Q ’¬nÍc:Q\"ÅT²Ú$×)ˆYÎ9Oß.ϳ›Õ»ÅÙjñ÷‚$~HBA‚ {¥`2Yo×78ÙÀá»#VèäÙªn†”ä =$W‹?§stÂb¸ÃSŒqVDý1°’£‚È1ì§R*†³œ4½ >¥j¸ð¨Hà·;ýÜkå^-èELŒY|.gŒh‚-솈^ë¿ 'Æ,æM™äD`$”[ð—w¶¬>bÂLmv£i[•YÎ4‡ïÿ2m'²ô}Ù4Nz[ïÈÓ+³n«ýÎZÆ`B¹3yjÊmsÜ1dÇâL€¾Õûˆ©ôZz¨•ƒHeÐz„LI¬æØ[(_$ °Fðg;SßU&Î@t%¡_ÀmŒ~N1–Z¾$ÝGžþb>DQ½‘1ê 4uµõ±ŒPIJîéYäŽÉ*ƒ›§LÈ´lkˆ­%qyØ9b‰Åøx›ŽðuþXÕÆ§íby<-:©}’RJ¨‰âÕBzù@Ñ–ÝØ«©9Wêþ¥M¡5F® ,Fê=hÍ€£M ‚¤ ®·e{x¥ÂJ…èÈ!éɯËŒêô¤ ÿêl/4†„à㔟Úû}€ £Þƒ4·ÏiЍ''N狺Ü}vI¿ªÌ©Û„THé¾”ïçaæˆËD 7Èë vjù@/–ß±1‹xÛ±D#øóÚÔ;´îâ8cBµ@ÐÒ±þæ”f<Æ>S­\¾‡DªhÆ(¤É…ß«]šÛ®Í­Í«crråÿ¥ì÷ûÎí¯ º4Oh)É1hLÞ„ 7EÊýõï/Žåoó—Ì4ÂÐT¡£#ªÿå%{½| ËôĜŅsðˆOÁÑ%‚Iíå[0ÃÕQ,á^kÆg¬¢@ ÓD…8ôÜïVYÿY=EŸ@¢ ¾Þøœ^>PŒ6¾±9÷Ícn¾¡˜ÒùŠ]„_ ÇÂãµføÑþÇ èOÜû‰mdcÚ²zøÑå6f‡U)Œ;¨Š¶qß•þ¬Ÿfâeš±ô¹jï£t`’wÝL!-tü³íÂFÇ‹„+h}‚M—CûbX!+d²Ž—Œ`J08ü#lbÎkÜ‚ï?eP·:%±µ"ZÈ>JÑñÓ‡õ³_ãd^æÞ×Y(0஼7es¨ÍÖGÜ-û[g¨½7NXû- ÄÆoiöÃí¾vÂc½?tº9 N{3éç.¯{àom÷µ€ü7» I÷‡]ÄâÆŒõoâëBCoÛ2®üæÓ;ƒæÎ‹°øCÏŽtMÖJ°­!wváK°ò?•Ùø`ynå®Çê" ÖIzWgjÕÊwüpØV»}SÙ |ºÅS-?ùR†ÿWP¡°Ë1t,JÁ9Äiÿ®Â è6ó^öݯ¹$º®ÀÏ`ùx1…Ü*OAIpÄ ~±0ß?Á¿oáýüYÉ%ù endstream endobj 1443 0 obj << /Length 1656 /Filter /FlateDecode >> stream xÚ­XÛnÜ6}÷WèQ D4ï#E›tí"AÐK² $yPvi[‰÷RIkÇÈÏw(’kIK{í"Hq¥áÌ™™Ã™¡_ÎŽŽÏËF’ÍÎ3Íc:S\"ÅT6[dr‰ô¤àœç¿NÏ&Ÿf¯NgGÿ‘ Ã?’Fà¢Ûb˜ÌæË£Ÿp¶€¯3Œ˜ÑÙM'ºÌR’Ãê*{wô×ÑË}ë„ Ä°š§“„YIôǘ•"‡fßqA&rRCóA´O)A ·€yd2øï¾~ÝIA¬èÉ%Œ”uö¹Ú3ÉØ&èÂáSßb:dr¤¬³ùÉ™Ì "ÂPS ©%þÛìfÂh¾žL³ü‹mÝ‚çm]m®n‹Eõfk»rBmU^y¹y½nš¢±ó¶Z¯:åqfÀDs¯ù¥-—͉ûz|FD$ -À¯Nî#¦2Hé¾TK*£Ô&<:É¡ÓÀb$ðÈüéÊÖ•M#ŽúìÆágàcy·†—Äýäùoö}ÒjP2´ú €B¬l]-CÔ’E’’ÀÀβC2›@„íõDȼlkˆoâívåEH,…'èôxD û¦ªmã³öjz2æá´;™RJ$”¹—ïQ®è vìz5VçÜØ´ÎÀ¶žÆí£Ôžád}“Àp©¢ëmÙnï! CX©ý¿?!„ä/Þ¼šN¨Î_¸ÌN§iª1$&ýŶ½\×Ѥ`P„æÝùEZEº•Bå—Õ™CQ—«¯>íï*{aë6eB*¤ôŽÌ—ûæˆËL ;Èý)öbEO.•ᡲÎâ¹C‰ð—¹­Whî⸇„j ¶÷,¤ ÚÃ1ô™jå3ÞR%3F!M>üAì­=w%mnïÍ“£-KÙŸ—ÎíÛ½µ×h*ù &®Ë=‹­nl©ÛŸNŽé¯öÏ2ÓCY…ÒŽ¨~à,¹¢'˜ÊôH]g¾‚Ùqô"h³Þѽ|+Í\õ¥¤öð ƒe R˜fPL‡ªû„`•õ?Õu¢ô D êQáý¥ÏË=ÁdéªógÑn ûí»ð¶?k`á;Å©ð©=ûÉ È Ô'ÌûžedaÛ²ºúÑtŸV~^`]»¢*‡†¬hÿ® ßvýLÜõ3–ßTíeôrWÍÒBÇÖ¿7&Rà7WPúO‰Ç8%BVÈhJŽQ•4Ð:Â!lRÎkØ¢ï?M€·:'©Á"jä.JÉý‡íº¿îÇ©52ÔhpUCƒôsà—Æ€oé î”åK[6ÛÚºA¢ßú—ësÿl/­[À,ç’rã$ÖE—0÷µ7Ù¹­ÝdçÞw“߯»gî’ òEpFKdöŽˆ b§\ 9<¥ðY*4[µfT±;ÂŒÿ"š"Ü]˜†@’a ÉøÇ†,:Üqv˜žPè€ḎÎÍ€áØ V†z‡ò0ø’DTAÎ é€&Îïä ÍPª§ a®L˜ÿ‰‡ÂC’4£è}.»L]y¢•ñ a4¤ÕŒ9ýÔ+¨|u±uÙ:Œ³üj»¬Vë¦ê8~ëß¹àžZú£K†ë]Run>‡Dû´¦ˆ@Q‚²@wõãDd€zwAI&©ï“»šI<€ Rä3wXèþ¹ÔñÆÅwçÒ-áAòpõê^TáC(!4e÷¢ëžoW½-£q™ šH]®õ¨ \ËUsíÙº כּ_ÝN4…Ì>À4âTÃâÓDÔw‡PÅ*üóšQ¬a$PCÕî 'x ñÞëp±…ßÕ*xä]Óù¦±Ûź.7Õ±Hyé¼¶!Z&Ç%L6£È¬p} £MäáúE“Žœ}žì wÍåKJ©k?½ë÷S/ó½'•´'áΰ;(ÏÅF¸9‡ =}8z¤ROL\(ñ˜=Ê'ü|]{œ¯·õ ŠÄcIdž‡J;<³þ¾x5!ùZÐè?W«0"u,u£’ßw½ZøW»Ñª»¾8‚ ªšwKXY·¢íÚ?“1¢pf’œFÆeLG®Å({¤D$yëä€uô>Ö±G° Ýtr`@B<:x…¿´qŠ`†…¬À˜ ¨ÿøÝgIpŸìïqªýïŠÚL endstream endobj 1338 0 obj << /Type /ObjStm /N 100 /First 975 /Length 1986 /Filter /FlateDecode >> stream xÚÝZßo7~×_ÁÇŠRþ¹^Û rw@œÜSàYÚF:§+C’û¿¿o(Q±%ÇêJÊI X³»Cr8œï›!wm$e9ç”óøõN‹à²r–åŽQÞ'HE2ÊF¯R°øu*q”V±•N‚Q9swp›pZZŒ yëÑC!(ЦŒ‘!ýý”‹K²“þtM"e-qÏFVÖÉ¿˜”õ¦èGHE?JßF Š07y™L° ‹!Y包r2ÊQ‚eªTôáë=fHÁ¥eR°E¬Äx.ŠNZÈ”mBg9‰@Ê#ú¸ò¦è3$[lÃl½˜)À›ld„¨|w»””Oe¬ÄÊËœa´ &‹àT 'Ë.2¤,f0$g¤ ,YðA&ÏЃw1Ö&$Wô’ Œf#ESú’L™YVUúÍ"e1þâ;HNEŸÊ=¯bô²9¨˜X–Æ\ŒË*Œl¡šˆ²h%H²†Þ@ó!‘J^,’K!”{ˆ¢D0"qÈ"ņrÏ2)&Yb¸þ&y!9iI^q‰µãPžDß‚21”âlÜÉK}¹•©‡xt*“-÷’Ê–KKVYŒ†”‰[DvB—HeŽÒ/l0°’©ÌÕZY;á c¼8ÏËXˆeGÐe’-âÚ”ðôp'¡ U" .AYY$ïHD //x)!N%ì)XÛ{ñ¢×©Þ¾°¾PýW“Å?áô¨ —½Ÿ~*¯¦íB½x§€}Î+ÍÒ "du…Ñ€¿Õ•,øiu%šTŸÙbGí…à®OH¦eʆM‡o›…z¯úo^¾RýwÍÝB­­zwÓàÁàCÓëÿ6íb.ÜPfÒë_4óéílØÌ—ŒSîý»M¿NïÔ{$ä %²Ù“æ|‰ñ3t"d—ú¿´í¾_ò›˜Uøm%P6ì)Mzý··W‹rýzÒ^÷ú¿Ng£f¶Ö\ŠqCL q© ¨qåoðQÒA€œNþïÿRÜþVõÿ1}7UXªï®&W.üEÜóÔ°Oƒ€ÑÎd¤öKÃFû zN^S—æªÏÃþçâ_Ëß‹›ûýI;¿™ÌšÆÍn›EÞ fÃñßnþúÛ¤}ÝÜÉYkW9ÁV¸EHÌfÒ¡-iÃö™øû`òq1ýqÐŽîõÕíðúcsÿó°™µz8~hM‰wïÆ;[]>£q0"¼à4ÕHG4•öôh ôZòÁhñ±‚$UF‹…Bú-![w¡%u@-±FKÈÚJ”-à¶Át4UL[.‰Ô!i†¥ÑD€‡»€åM³hfúb2f£ù´ýyt;~׃¡¾½ÞBM0»PóXãÏœGo##ă‘Ü ÁW!œ éœóŠ`”“~?dÔ4²FF÷4Òi'2ÒWÌ''ÄI Û8‰î`œÄZfEª‚=Nøœqâ9flûþ$8‰~Nâ7³IvÉŽŒZRE®B>2ò9×VA:›xªÚ*Ñ.d<Öøv2?±I÷ l·p’j•Bê®$U¥#ìJ°Q•+'¶­Îé ç%ËÚÄ/ÁÆ›}aãX'lÙÖ°ñ¬½çã†h Ô6ä´œKF΋QaÃOø²dX.¸êú¿øû„˃vñEÜt8WÑh˜²>W‰t0á˜ç ĬŸqAy†sØË9%Â$*Ÿ3âÙuYÇÑM'z:ûЗNÆõߌïçͧ×Íb¡#ibÊ[,Ã;wpüÜî øOÐöJyM<(é!}<&£I6ÛdÂ|0™p%®d•L8‹CÖÉwE"Ï'_Oç\–ZÃÙúx¾Ç€àðä ?²¶žU@õâ®/5âKn¶±šwb5w®¾6üò6ü–4pü²]-×ã“\™+ s<íYã0K&v.‚ù#}Þb?‰öÁáëÁl®ßNÛ¶içÃq3i÷cÍäµ¼Ä\gòœ´¥“Qy±vkjÀF*‹jðÎ1dÞE 5ŽH Ïm ö% o¶Zå½í¤!¯ 3ÈÛã•àªà«NDî¬Ï^=±·ë‹RúÎÝt°ûPÆo³A{­ç“æC3[+w¯Jí£æîRj§¤ƒÛã-S( »&k–öv%Áìnò©7¸š÷±¦?4wýM6D›Ì!Ÿ)<ÏGeŽc„<²7sÐöá³'w0sÐêðY¾Y öD<áÏš'"0ßýðÿÆ%¢iבó†Æq³eyÑŸ¿ìöç.òUÑÁH5ð¹ «`äÛ¦•@'ÂÄYÿN ÖtNï¨f­O6¾HS{í{ÇM;šM®õxÚ,Æû&Ïšœjò¬É©{ò|2=cÈt¯/6kn,ŸlJŽXs—„zâÇ1VXÂîúdhCcúç>Úx­upÎ}ÌM{ósÛüã¨ÿxç·øÇÆJ2•ˆl%"[‰È™ñO> stream xÚ­WmoÛ6þî_¡2P]øNªè€%s2¤èÞZ¯Ðõƒj3ÒÄö$9]Ñ?¿£Hº’̤+P$€dòáÝs/¼;-g'œg”@IJš-¯2Ãs“i¡@s-×Ù›\A9/„ùO‹‹ùÛåóÙùröÏŒfÿhF9)d¤ä*[ÝÍÞ¼%Ù7Ÿgxi²=ô.ã •À·ÛìÕìÙÙ±vÊ%pRŽÕ3BhB­¢@%û>j•€’ª±ÚWB*ŽÆÍ Z²üMdõ3F¡ñª‡2÷ûá€*¬à&Âzý©ä|De‘°5ÔP_S9Öë|ëTf•¤6( Ÿ‚ú½ËÍêvßÖ÷sÎr;/¸ùÍœæ¶óï«fÛ¶î•ç­]uõvÓË"( K„rf«»ö©Û9¹ rÈGH\"¾ÇýM˜ (3DøÊTDí06Jã£GŽíĉ©4R¾±ÍûÚ¦H—æ ¹ÃÝšª6HLdxD)N–2%)(Mïªnÿ@r ZGïÿùëë9¥4?}q¹˜3“Ÿº,ÏéTã ¥ýtß]o›¨ C0ª7`DUÁè˜nT§Xù×Èê±hªÍöWµ}o›.¥BiÐæÌ×ÇŽ T¦(Ãôá{X1À¥"<Ök¼r,¡õ\Ùf+çÇ#&ÌHÀ2>ЪitÄcl33ÚG|H¤NFŒa˜¼û쥽²Ý¬ìƒãjräÿ…ì÷kgö§^Ú{X(ñ”p×ОĮ6ÕT„ãßž‹ß.ï27@°¬bf¹ËW €©HOÄõzqŸRÂO¢¥hè°£zCâ­KìÛzÈ(ð€:â3vVY‚&,“TƒÀªû Ϊš¿êûDé“@ÑëQàÃ¥ÏãŠ0YúÆâü]´»bw}B(aD‹ÔX!%2H¹' Žô'+ (±>‰ Þ÷ ,#kÛUõí÷N÷E}ÓO¼oWLçØð0+ºÖ¯UaïÐÏä—~Æóuw¤ƒ½ÜU3 FšØú&B†9'ÊLh,}’OB3b1*t2ŽÇŒ(J•Ø:Â%lSÆ@nÑö昷&§©Á=Zªƒ—’ û?t3ôS?jd0Õ½©1°˜_† ¿;<ñ‹­Ú}cÝ„nw~e¾½Â§$ywmýB§8¿ç†{q„õ8ÂõëWÛf‚ì°º·^FÓ16ÌVáL³½óë‚„3Ûð[I?Bi&æpç æÍqMã“–Á\صv¿ÞMµ«×u7geþÉo ©÷C’1ˆ‰" L´%2`Èpˆ0||†>ªC`DO> stream xÚ­WYoÛF~÷¯ òÐR@¸Ù‹K2-ÐÚ±]$Š$Vóâ(-­íMx¨<œ¸ùóÝYJ¢DÅ P$°ö˜ùæžÌž 0J2š±`~¤‚‘‰T$I0_—¡"ŒÎ")eøâô|v5ut6?úçˆþ±€‰„¤ ßdB‹òèòŠK¸|P"²4øìHË@DIXÁÅÑÛ£“}ñL2§l,ŸSÊ&Ī„Hÿ?bFXšÅ^È$fRe³ˆe<¼ ò9Oˆ’býä“,€ÿöúÓš,è¢- »ì™íI•¦ÛR©¿Ú–é©“¹ÃÌɼ²"ƒˆÅФ1°¢$– ¯Î.–³H¤"üÉþÈð¢ëó¦Ã£w}…‹—x×WKݦºÅc}?<Ô•ýÛ!I^åÅCkZâdR*œDi':/ÛçöæÙ9‹·q˘H½£û@¹òTé6UK®ª¸Q%ðã(Çv€Ø&1ÍÆâÏ*ÝÜ= B¶F¯)%ô)¨%DèÖpÈìV†è÷“R=“±Ô/Ôš©1¥7Õ$€„ÅÙÀ楓l‘ÌghìX…y×Ô‚@ï sÀ¦ðxžˆ'öI°2n½_OŸï†#“œ°œRŠÄIv0 ºh‹ÐäX«]v˜> wE§”Hx¶Åq"ª=Á“eOÅŒ¨dP½Ë»þ@ B“d°þûc,<~ýòtÆÓðØš~v:h‚ı»ü¸ïîêfØ6$¡´ -Hš ÁÆ’)L¸0WËô÷I¿°°>úaJT>ªÖt·oåJãð„v°§‹¶§¼ÃÎ Í-V0¹îg,´‰CûûB7qà÷`ñŒA…϶aM•AOµjlž ÂY2e&ýÇiŽÈ¼C<é;}£]-ôA h?£'ßçÄ7wVù‡–¼Ó÷äTÅÏi½?µ¦$Eþù‡ËùŸÇ¯£7`ÈPöŒ3M› !<;JÿRw¹)¾Ã{àÒÃàVSø‘ì‡[ÀX¥C¬sI¤L ñÃ$Go_œÎ"ÃTÖnòEgꪵ§)TX¼…:Cñª=Á³ùÆ£BçK×íéGÝá©iñàÚT•^âÙMS—xJ¿Bó>Å3H<º3mW·®i®tRŒ2IÝáÀ/r_ôû¶Ï‹â[Áúô¸¥¡Z“EaØÝgÓÝ!uŽ-(PxÒ[ ½1ïê)ÈÚÞ·û®î;¤ûd*]æYxýuÔæåªÐ¾áCéá~ ©'cèì’$‰Gïì>¬sk`TÀkvRŒ {=J‡F?áÑ0`€¥âáuÞZÏ —zQ—ÐsáeÝnXå® Ý¡  ãd`lpS#AŽóË&”|?‘Ê…ÊP®É«öÞ‚ÓMë,ɶkúE×7nË×Vgá&$pâÏ3ž…y³|⇠{“û ˆ?{ûðŸ»øX¿‰{‚¾Åص›¥¶>¯Ðåî ðÕ½eèáXõ,aŽÜÕr&S1j˜ÿkJ+šu–Y¸„ñÁå‹Ý¦a}ƒÇ–£[¬SÃn\jØ…ñäk2Š k!½ N %w‡ÝÚd©52A=ã¯]aõÑ Æ¡<¤&dU¨å².!;g6É6¬$ó8$ïP:­šÚet…BŠ0oñÊ´;¯ò¿×Lùÿް².½AúÒßæEŽ6g¦qz˜Í—‘*²˜ÀÈêB¬-dN=¦öƒ˜Å€pït‚ß²n;\µºjÍV\Y&µ'²g}Ñ™h_k•=¹Ò©«ÎÀB×:_*¬  ¸i- ʰ¸v«‹W†AsTr“ ð¨v`±èW6­'¥u¡Sè|ÌìãT÷!Ql:”PS\a(H>Ú8a!ŸìÖ]X*]ëÉ¿TÔsçAB²„Ž!gРÃ' : Ÿ@ÐOöL(À@ ’Å~ÿåDœ¦ÀVŽ1þ-Dœã7Æ!DEñ 4IÆ¢®Ð‡7оá7C$ßé6¶5Y°)®1IiºñÜEÖL~}L«Ä¶ ±c@éÜEúÔˆäßBüèíjÂôðÍœÚO\è¯~úúíXÐàÛi'Ò Ýnu»±¸[`yàÛå6!/]ÛJà*²§Zš{³„úy KULÄ0~é/Ø›ý÷°í¹~áÛMØî<ˆ8üêstmòögÜãÌk°W0`A„º3°ì èˆ×«³9§{Œ0²õ¨Í`0Ä$¸1†oN)½S7ÈÙÎí&CKó;áö»„§˜à%环H+œ¤¾ß<ÿ¡@ endstream endobj 1468 0 obj << /Length 2078 /Filter /FlateDecode >> stream xÚµXëoÛÈÿî¿‚ýtpÚì“K8´Î9i|¸¢¹DHQ¤J‹k‹ *IÙgÜ?ß™¥BJt.A[Ä÷1»óžù­^l.ž½R*œe<Ñæ6JS*¬N˜U6Úч8aB¬ÖZëøÇ«W«›Ÿ.^n.þ}!"ÿD$”e© 3™J¢m}ñá# Øü)âLeiôàIëH1›hUÑ»‹_.^œ³Z0“Š9ɹ\`›X¦¥ùß°µ‚‰4›³}§m–pmWk‘ÉøÃ(ÁÈ_JË­Žg€?Ë"øÃíOG²õH·ž.ˆpzÁð3®šƒ¤é”+[Sžê÷xž\æy~D–ÑZ˜„¥®âÌhA[èþµJUüöÐà@Ç‚æÛ•’ñ.ïî\A 5.ª¡ãÅû•ˆ+”ÛrÀÇ@äòþйÚ5¸8x¾8kPÇ.¯ûç¸óì•0SÙµaZ ÷tÿà2 Té”j C™ŒT{"±ðñ”s[@|3ó9û—ëîJ·,Bàv”Àp% ã߃rJÅ~ ‹ÂϵßÏ8?îû1îÓôÏîý¢TÉ\ª_A°˜ëÊÑv‹ZÉ)FÉyÀ %Ù¬Àþî~e’8º¶!É­@"¼`Kò„;Ie_v®'Ÿ^_=? Y¡%S`Ù$I˜±Ù“‰2Ò­'„>hçZ^çESõ”uÊ™†c“²e¤:c¼X#XbGÕ‡|8< ŠqkGë¿_ !âËŸ¯¯V2/Ñü›—W˨˜1zîòËðk»‘8`jHTI¯XjÇ`vI&Ž2½vMÑ•ŸÈå¯ÛÕ$sÃn‰‡…ä°Ç<ÚÙ9Lj%BÂñ´‹ÝzB¸äâ“ëˆ)IËvGAÿ´u]öhÐ3‰d–O§-•I":“f®»â.KS.ºN Ë2\(ߺ[×¹fëžôž‚æ4;òuî{³CÍ{öÖݳ«Ä<ç:¥ù~l—§œÖáø·ÊÕ_¯Ï³Z¥ŒC†æÀdú…¬të á’ËO®ó|a_®žš‚¢W,ºê=s¹Í˜0v*Ñ’ÏÕ™<‹ÉnÀ¡ê/y’ºžŠ 7äeõþü#ÿòãe"”eic(ì óÐÓZ><‘•Ö@û†FmÇwŽ“2ÍtˆâDªS˜¤90É€µO`Ò¼›†«tJ£ôKš¥ רפA¢85™¼)B“I9?6?FÝŸei;…dƒxÐIÕ´«± Bæ[÷áxÄa··K]ÿsŒjïÅÙ%û%ðò7ƒ‰…{& 2iO4ضUUöeÛô¤Ê²_Í àXik™c|–îb ­B§ÊÓYóßùøx×(ö“Nžè*¥„ž•ÌuýT$7{eÑóè5 ¸‚¨ÇÐ.n;¸‚¦‡¾lîÂ!:R—MYcFjZ¿)ó`á+ïî\Gte³HÜHÊZE¢=ìÊÐ6Geñ°s8Hã"rZêÝ@ƒ²§oQÞ—…‡·¸HÉÙÒ©'ø_KÛÛ*ï{nÛÐÑÞ7­¶)¼bži þgßÞßјrw€™ó®ønÆÏuùvÀà¡lŒËQI*WZe,M2RòÕ*•q vÑ\Ä.ßbUÙѬ?Üôy½¯€Q-97ò&¯{Ôge³­… ³ \‡›†° è¿Ç+jÜE迯<Þ‡Ù#J2²êP³¦§"×õîÌ_A ð' 1_·u¨‡ÞýYæAìSP<g·„Œ•2Â.Í ÄC°#è‡Øí¿—×Æ°TêùÕäQ°àiæ.G¨ÏÓ÷Yˆ3ä+pê=*.½s_Rû•êë4I¿I™è€'W…u$_ƒ¢ëß׳Å/‰­R€ÒéÿÃþšþ?ñlQŽfï°¸#÷£±ýçöÐøäy*Þ€Oè:Œi%%†r6 åCÙÄ  ±ØŽjÛÖû¼+{ÿŠ’âx²Îö´ØlÅ*ÑÓ^QBôø& ·< qH¤E €AÌHäe¸:*ß¶»/½/1˧¬˜•¦P2ÄIÍPðØ'Í©*xÐ!¼•âh@œ è=+5Šƒ­‹͉€Ç5ÔBZqøšöµÀ^@t–Çû®EÿAA@;tX¤ôÃ~‘±fÒIˆ á}'$ ©”ÂË×y™“Ì™ôáK¨dª¯"èxËj/}rTGÅaá:ܾ>TäGÑFÓåÖ÷˜ »<ÐÏz.PoóD‡Fa¹ì+ÀÄ *øæï›××—äþ:/B ÜPöãKtÁæçËw!¸ÀÚ ]ÞUHr᪀Uê––º¥€æLmÝQ†ðÎë–ú «*#x+ÄeŽÇÁæ`Û²ÂúS…@öw9#•è¢5iuÛµÁ8áwŒ ü¼w‰Ù4CŠ`àŒìéñÆì¬¥ùº÷á·šÛöÐ#!ÑJ5ŸJe€Á5ý1HÐÛP9¬>ëœkžò™2€éB«†4|D 0"Íô°e€P3<‰/·+KTcoU&9^#&×< éóp»ûÕ7ô‚fÁn†,>UôÐ&Û¹àBORöO©"9KFxÚ9¸Ã@ûë åô “Õ4y(‡]€N!‚zЕÆTÏæ„¢}ï4þË›kÔô›@á*š—sæÿ:wGÜBK·Àb©Tâ¶J*è]xy°†©šònýÎ2ÀÛøØ´O9ßÀ~£#&„Öo#^ÿ>“€e endstream endobj 1476 0 obj << /Length 2201 /Filter /FlateDecode >> stream xÚ­XmoÛFþî_¡ûr•k³ï$s(îœ8)R\‚kâ¦ÒGKk‹W‰tI*ŽÑ?ÏîìÊ¢LÙ-îà îÎî¼?3ä‹‹“g¯•šÎ ^ˆÉÅÕ$WL©|’iË2•M.–“OSË„œÍµÖÓ—ç¯gŸ/¾?yuqòÛ‰˜pü‰‰PË)”,6'Ÿ>óÉ›ßO8SE>¹ ¬›‰b™Õ Ö“'?œ¼x(^hÁL.†ò%çzD¬Í˜–æÿ#6LäÅPì“ã%fsQÈ駤A’/eƬV»3ÏŠ þùí_wlóÄ7ßcQá𺠂¤jMó}©=óî¿xu>žˆŠ£‡!?Ûö«¦M‚€}‡X–kŠåYJF‘éDdÒé¬^ÞQ¼_l^­_×înL`“Û]"­z9®È‰GÄñG¾ùãX€® BK¯+œÆ.·3¤‘YÐö ×Ö,(ÿ@-Y´‡b_­1 \”º@ŠI‘ •ªFã'y@1 ‘õ½»r­«îh z×àÈ â¿VÞø»ŽùÖm ç £&~ž%¨áZ«¼‡!ßhï |¨È<Þþ糩l®¾Œ¿AïÉ–"ô™ãÅO|ó=ÆÑâ^G énæîë3®ñw?BÜ7p-:ÅÞÅci¹ÈÅ#0”–)´5‘›K×—Õúøq·‚*drÖ­ô378øÃËsÌÂ8b–,¦õLÓÞƒ°æ€ôQvå `±pL{ ߄ָpò*4ãÆ>+Õáä¥1Œ¥É A“×°§»vvxtOY/¹´©¡õß’íVq2ö¯ô  h¥ŒÖ>Dµåzl8H†*L¶´ˆ‰C‚°“Œ§ŽÏ4Æ(Å -ØTuô´Ücãh“È!bùûSF*‹0 áÒÛ¾A~¨ÐÖ‘E7msY^®ïè©u¿mÑz—ÄÔ7qŠ*òÃìÉò0t†«q­^¯qD˜i¿rDà^¿h]Ç•UÕõÍu‹ñË£ˆäSÇ®#ÆpâðPâ.«²KÓ˜D‘aÂ1ðø|ýHeOÇcô@!z§DÑŒ)ÈóFŠC -† ÁÂ}]’ǬH€HºÄ©+l=°@YE;ìÐ9 _#MðÝFYðNðê–ë».=¥¹yt3V1§.ü@Œ,íiéKUÑÓî÷iÇšÀ£€æêєΠ¼5 U}$“yÏð‚78„j“€6þ˜0 44üààó§¤ùDlp(‹®Œ¾(8ùoé®[— O%7®‹áþ½ ^û Wö u"°kIØ޵n]öUÂX™K_bô»Š kW.C4ýƒOÐUu½r]O ¯h¾÷ä\äÃñ8Ë sOù*ǰW2…´Â”©ÿ'hÞ]•L šóÝl)F ýõ-™jÈ¡€=AÕí)ÂfOQáx*ývÕ¦Z—í¾§< LrDcn©& {8èÉ-éßt²é¯ü¯Ý•f(óëÂÝô´Õ¯¨ô3ª­S¢Ûn‰Gx-Ý®šu$±xŸh1šcHÇø¸¯&ÞYűæ`w¥eÑIÔàpá:J}ÁN·[zt6x­€–"†¡¡“Tl0ñš„/y™íðEÚxµ_+{wÝ´UúŒßéh#¼CúKÞ¾ywb¶Î~¦­ðЉàK<ÇÎ\ûA¾Ÿ_†v>X$¾Ë2Ä-E]„77ib™ø”ñ¾¸Þ•lxj ð-§¥…ÎÕ]…²®ú 4†¶„ØîRgáO6›ŸÞ±?n…~XÜÿËðýó|C KôѶºÜöU8Ýù­SÚºEŽEqäøÃ~´†©4”m³ ^V*)«w(ôHŠLc”ÞU?QäaP4‡d]ì™-yÃÓ(©õvé¢bWm³¡õ¨¢¸ªÌ¤ìÅMë®!¶ªÜÓ´lò#þ”QF ¼ï Å.'ï,hçþö„0ßüX28¤Ž ÊTµ ¡dvƒžÒï6%“»òäšV½ÇR%ÃáeUÓ¬á j ÚùZwûeج)=Ã6‹ÈÃë…íÏ-þŠ]¡¢ B49ào·QÇ>!Ða½*š~lksU 7Á(‘t„eå&P¾‰@ ï€PT‘/`¶ç÷jÜz¸hhÁ§ôˆÛ/›·D¸øÏ,òí§™À qöþÝ›wßý…8"jM5ƒùÒgÍЀ‡³¿ ³ü\°,ËyØs¶Epõºé“­­; ˜¡¬ŠÝ·†Ëu„i¡¤$`˜œC³Únüÿ—Ò¨Ë)Šºÿ¦¸‹,š}TÈ‚sû üˆM–e_ÒÚ*ºÇ^Hkzbв\<Ý:¼o„¥åv‘ô½ôÉ¿G½}y:󓽡œDDƒ;‰âüý‹f³qõH¶>ÇTƒ–ùomR«ð-#Dìw:dr:ó{¿þ 2ÌÞ¾ endstream endobj 1485 0 obj << /Length 1579 /Filter /FlateDecode >> stream xÚ­XmoÛ6þî_¡}šŒÅ ßI¶vI†-¶µF1 ÍÕ¦c­¶äIrÒ®~ÇÙ’Ì4ëP´€)òx÷Üñîá1Ïæ“ó+Æ‚Q†3’ÌW‰fˆ1(.‘b*™/“ëT"¦3ÎyúËÅÕôfþbr9Ÿü=! †$!L!MüžŒÉd±\ßàd ‹/ŒX¦“{'ºMR’Ãh“¼™ü1yvjžp‚„&Cûc1+âT|³Š ¢³¡Ù7k¬ŸÎHFÓëAgŸR…$g‡=`e ü·Ëb³NnÖŒ@«s=±Ê1 Õ}«8,õm©ÇlŽ”9›7Öd2#B"-@F‚¿tQ¼Ã„™Ú”SFÓ¶È7ÓÓ<]ÔUÓØ!K³h‹ª _«ªö»ºÚîZ?¹,v몭Jÿ+0 érï6:ãÌs@ɽÙg&ß6OìÊù}¸@œ wrï0•AJ÷¥f0¤²“ÚÁyJ?NrHr$p64Yšú¶0qÁÚìÖá3ð‰±Ôa’ØOžþjÞF­%C«w..¦.¶!ÞQŠ"IIÀ¨³l‘̧_s72ÍÛÚ@¼Þ—^„:`1}ùübJuúÔ†~yO4†„àÃ#ºo×U݂誑ÛÊfH«.ÙˆŠaòÃÓ•EQçåèo skê6føTéC*¯OÃÌ—‰$v‡Ø‹Ízr±ó*sW%j<ÀŸ¦.ÑÂÆñ Õ ÚG£@/t‚cè3ÕÊŸwH=1 ÇäÃÄ^›•¥Â…yðĘmùoGöûÚºý©AöÒ`çùë÷¥iÛ0ÌÄ™/gLázd1³ õësæâ·ç§Î4ÂÀµp ª¿PàAnÖŒ%ÀH³ ë„`vÞ~²rxÅvOVàz2z²}<èê`[W›Ç\ÕPÍÙ(-~´§ÅRòEÒÈ´cƒÁÆ'X˜8ŽlÊä¸Ü5´^âÒ8ã½j‡×ä7Ê+Ê[?ÌýÏ2oèɷ»ñc›šŒá”Ú”ÅÏÊÏïÞGØípG †lkgi‹@6ï0ÆÁ9ÙÛ}höI´/8ºE¥Å#¿òfàÇj_†±¸=~Hɺy|)Ã×6oGô(Ñ1’öŒÔ'œÀLKDÝrÒŽœ—x“¬S8xœÃWó©iÍÖ†3> stream xÚ­W[oÛ6~÷¯Ð£ T ï—C—Ôí¢ÃÖ6(t}P&VkKž$' ²¿C‘t$Yn×nhSäá9ß¹ž]ÌN^2–Œ 6$¹¸N4CŒéDq‰SÉÅUò!•ˆðyÆ9OŸ/^Î?^¼š½¸˜ý5# †$!L!MüÃd²ÜÌ>|ÄɾJ0bF'wé&aHI«uònöfvv(žp‚„&Cùc1!V*Ä©øÄ*‚ˆ6C±ï$…} ªCÓA”O©B’³ýLÿÝñç=Yé²á„1»‚`R9¤º/‡£¾Ì@õ-™#fÌNd’!‘À #Á‰?rîϘféÛ]é<=‡Úý…ÝO¶õ‹f•o»ë©ò2_ß7EÓqÆÀ›îyžÙ|Ó¯Vk( *‘„Âr¼®º¬G8áì1»=nôY§+[”?/m]"ÿ9Å ÇHBú & R@€1à !¾ìQ8ST_ïqÆiyuïq¶ë´ø¼¶÷S€fƒ%9ê°TcšmfÇ“-etS¹6dÖIÌP_t¹ƒHéBÆAýšý) 3¦‡iªë¢1¢¡öÔ0¹>@TL¦Å|`†¾xk¯mmË¥=šJ zý÷§Òï+§ø}ƒÞÚ[´Pä)!0wÐ'qø ÊÂõ”Åoç‡%–i°†H©ÚÅQ¯º¬G8åö»N.œ‚ÙIT4] 7ùtš¸\D„ê#šòy :À3ª9U˜&|/¸þcåõÅíDG]U‰ w$O—õ';ÒOL»Íì—赓ÃA #gáã)óªù“‰K)„m˜±XzeÛ¼Xÿ÷pGà€`=Øvu’ƒÚý Ü{ó|áfㆠ¨0–Àß¶ñ{y;)}_±Üü(abcHœŽßvbd7 Š«£ÓšŽGv,âÈþ £‘}8÷íyEœîÍ7§˜# Eg øO^Eb$ö+˜ä_½²íÔÌùX1¢R مٓÈD!£°$‡1›!#Blmö­™öÈ`4Vˆ’gßÐ…Át1V¥(=îíºŠž+Â/SA97Ø÷'Kÿù·ÿñsC5‡|N«ÆúÍ ÃqÞVu×É8x˜ƒE½à½>CCQÒ½ ÷Ãù¡ÊÎ2n$G*Æý³#5A¹Ø{$kª½[A+ð-÷®‹ÙõÚ]‚">+Wèîü^»*ä_ Èh´‰™‡3(ó«Í›]mÝd×Ý›†é´ºv¿&> stream xÚ­X[oÔF~ϯpß¼;™û%¢j¡ UP«¶d…*fw’²—ÚNñç{ææØÞIÒT¤ÌŽ¿9çÌ9ß¹ØÏ—GÇ/+FR,Ï ÍcºP\"ÅT±\oK‰ˆ˜Í9çå/‹—³÷ËWG/–Gÿ‘Ã?R¦&áŒa²XmŽÞ¾Çž*0bFŸ=tS0¤$‡ÕUqvô×ÑóCõ„$4ë§ËŒZ©§âû¨UmÆjÏ$X:›CË·É‚¤ŸR…$gýÐLÿÝãO=lžpó0cÂTœ7A𭃥z¨ÇGCõΉ0¯ó½SỶH …‘à$<:Ý®®®ÛúfÆhigs¦yùqFJÛ…õªÙµ­[²²µ«®ÞmÃþº~‡ ³Ýºƒ]]]P½uªÀ(9vE˜Â=¼Ê}€p\(dö‰„Ë’BÔOQÐèvày„rH†(×úÜV›ö$à‰â¹@œ‰¤ø¦2¢ôH*,©¼5o¥þ:”‘µíªúêÑ]ßí×}Îõl|tcϘœ ½œ²A†–Ï{ÈGÛµ¡RV]è—ÄHvbû†IÕèèÖä.ˆšÆzñ»­ÚëÆº® ävRˆ,wçî¯*»K6ê4˜&n}ôS€ÒT{·Sì×Û°¹ß¨š~‹š²³MåqmØ­²>qÃp%ü Iˆ™·z8®sêæêqZÓé¸ÎaLã:–LÆõq¨zYÉSÎÙm.ïr†á5@ŒÝûã j;+I–Xé ŽÃ¤9:xò6w‚Ô22¸f)QBü½{!nÛ‹ °³•9á4œfZxX_,0ETÉ1hÿ!‹fèGĹ Þ—údÂ8Þ@Ž'kݧyàŠÆkmÈX¿£&5ª\W]…॑™réXšöÂjµsL½ql³MØêÊ×ï@ o¥›6>Üì|&I¯7a@ñáy³‹›’D»ø _@Ö¯zgóIâ \Ï_ħÇ%¾Cw0““wRƒ÷§8btrê^ ˆ ‚—Ãщ§Ù´„÷g(©å„µzÀל ºî• ¡·ö³ÝÓ¯ © ¡—ŽŒ¿ß­ðî‰)¬[…AXLN)GB!€„µ/Ŧ¬¶ÕÕ×Öÿ‚ð^VqñÁU‚ÒÚöë½ÿ ”µë°ó¹î.ƒ„Í®±a/0Ú­<]FÏšj_¯ëÎÏ$I\Û&s¢  ›XEó_[0 ™Ð§¸§»ÿ³UlRGÇÝ Ö˜[­ñk‹Î}äq/'ôû¨eÐÞ9«=Sæ, Jp‹û"#ƒó)ˆ£ó-´N߀¿%3ÿ;Î-. endstream endobj 1514 0 obj << /Length 1635 /Filter /FlateDecode >> stream xÚµWmoÛ6þî_¡2V1|',ÛÚ¥ZtØÖÅЮT›©µÙ’'Éi‹þùERÑ›dÝР–¨ãÝsïwOV‹³gŒE£§$Z]Gš!Æt¤¸DŠ©hµ‰ÞƹL8çñ—Ï–ïV/OW‹¿$ÂðD„)¤‰»“2­÷‹·ïp´/"ŒXª£-é>bHIO»èjñÛâÉT<á M†ò)ÆrF¬TˆSñ߈UÅ^I)ct™”Æo‚ ŸR…$gÝÒþìç¿:²$Ð%=Âcv-!&R9¤º/ûO}™žê>™#f­ÌwVd”!‘À #Á‰ûô>ùÓ4Ë„i¯«²®í#k³nò²pç¹ÿ}ã¾}ãÞàZížÌÍ’‘Ø,I\Ø8¶Ò0Èã‹;9OL¶¯Ïí—³gDôs8@ßÒý©ôTºO•À#•ê” ~ZÊ¡ ª‘ÀéPüÓÂTr3@!HëÀm~ê1·ÏpHì+2¯g¥z&C©Ÿ(£±©ò½ãи™ (’”6#[ÉÉjé,,dœ5UëñêX8Ú›Ããy:<‡ÿ!¯Œ÷ÚóËóq NËI)‘PéÉðtI° Å¡Vcv®ðø‹#s¸Öã8“j"x¶àIATAõ&kŽ'!¬T°þë%!$~üòùå’êø±5ÿêéå| 1$ºüñ±Ù–UèÒÛTfH«lDÍarÓˬª¿¯Ê¢0E½^Ro—6ëbtFZ e—tyµT¬¡P¨H WÈéZçé’ጳÇì:Ü貎·&/~X›ª@îu ŠAß‘„ôAÍ„A š@€±ºI:„”»RHᛢÊû‚<ÄWBf|^y_€:Ç}VøÓokä5î>ØlΛ¯ÍöЮѱÈ0ÊÆìÞ/8‚*…6æ»ÙpƒnBB~e®Meе9q ÚäÃ#î×ð•¹A—HñsÌ gëG¡q%%þþ¿0èå/ϧ¥ˆi„¡+”Õ“¥ÈÓ%=¹R4b×Ê…ï„`vtU­¦Èi:É•""TÑ\—öT<£Ü„èÃ4â)T®b¬¬ú=¿™©Ü¢Í¾ÀðtåvtIp¶rÙ¹ b‰ùt†¥íéͤ„SFâë9yª ‚ÙÎe %ÜG®kzP7¦ÉòÝWG<<é`?8¶…ƒâý=ܳó¤¶w¨ ó@7¦i ùQβfL`ŸBÁ’F¿Ü±?Lç_Šahƒè±tZÓñüËa$ó/8ˆŒæßáÀÔñ *YSÔ÷Øæ£C;\8I*±3Œ@ȽðF‘ñ>4¡!Š®°ƒ?°fCÆ~|£4R(UØÍbˆÛ!— ¥|Ü}f[æ WCÖëcã^8x»W€þÈìÌ¡) ï¾{ÐÛ0¤ðé@ϵ@TÓ“èm·"½(Å6Œ˜eE-Á®ãø¹ÔòN¥¿²+[ÔýÏ&«•Ùûøµ—E\^Û_7[s—ˆ¶«2|BÃÑQ)†·üÚ²ÃÚâo×8Ïý¯M7ݦ›régóf{g¸AL0kÕ¾È7÷e00R1QÏöå²îÁºKp ‰ E`Àâ0'XB{àÝzîQ€cè+|$}]îvy»X²Æ{í#ÀTIy¸@CUƒÐa)}´ã´Ïœ£8x•Ïw–<Ø?)§À …`'KPq˜µ9F³¯*yWúdÉë)J$o;ö@Ó —S¥Ò) k¬qmÙ³o&-Á&k2w´.­1olšÊùgqSeEí?ÕþæÞîeÈBÏ$³Á¦âÒ’:z¿åáÛݳ=ÈŠMpÖ#))sztµ9nÊ*;䛼Éß&r?­6A KÅÿuLx‚2D »ÂŸ‚·9ˆˆ7'<Ð!g„ 3ãàÖmÞy°YåöøÆ×ƒš;7›‰:yëêö£]X”Öaƒ¦·YOÂÎJRïíìvîMÇ%kçEïDzŹš\Ytïm\Øý½Ê3‡ÚOîzgÔ%—Õ3+œ¸·øþÿØV°yHDyý ‘]/@N;;hÚ•a»9û)à‹¿OÝý/!+ÿ<´b endstream endobj 1521 0 obj << /Length 1624 /Filter /FlateDecode >> stream xÚÝXßoÛF ~Ï_¡Gˆ.÷ûNA-Y’!E1t©——®ª}I”Ú²'Ëiƒþó㉒")²tF†•tG‘?òHʧャ !FILcŒo+ˆ60R#L0žCM˜ERÊ𷳋ѧñÛƒóñÁ?, ðLb¾ Læ?Ñ` ›oJDlƒ¯¥è<Äh w³àÃÁŸ§ÏÍ3Ɉ²¬kŸSjÌjC$Wû1ka6îšý`¨2œòQÄb~¬Ôö97DKѼöIÀŸßþÒˆEµ\Ô€ÐWWBPú™UI©m[¥ÕVÛf%µËfOYió“7DLib¨¢DI†[>ü‘°"¼ZgþF†—páåÿ°šf“Ùz•>Œ`ÉáÒ½+Pp’/V«hå&EºÈpD³[Ü-î*ù/c¼&³ÛEžwó 8PK„qê’ùêØï]0ÕvH*"…ùRîoÊu%eÛRÜr]K-!¾ÚÀ¥”ìIO»æÏ3—ߦnA°Ö €·-%ôÜ",ïa‘ùGþî®­VJºV¿-K®]žÎ]æ).N4g5ŒXöHÆ#`Ö=Œ”“"/à 0– ÂK`Cx*ˆGU§c™æn…Ѻ<;îç)“œ`NkM”‰7žŽZ.j –™Úõª¯®„PŸÏ¾i YÂk-G¤–zfx°jň6µëER¬7$  Ô˜šýëc,.°¬ $gåh4žû>-?'9ØÔгY:b!Ôoú†\Þú¤À+‹5õwš”º&øôÖC-õé„pbïY®\ã!1°TöI"­ï«Ä˜Š_v8ÅãÎLOõç4«€ßäàÄbŽJâÕ7Øv±ÀCi³Óò¨\Ê“e:M‹7áã6v©ÃËÈ›ÁðÁ0Ëšqä~ÈAáÏ%À‡¬QªQq¼K‚ÑQ±)G®ñU „\%L3t·šåSà Ä]âêÜ%«uîü ‹J,np³akpLĵU™w8/bzÚ*=ýešœ¶UN¯šéÒù)í·Àr9F’ØÖ>AšÆ"Ú® úi¥}¡ˆC”Tˆ "¬O®'¹Ã›ÜMÙªÈדÂMQ*Íp GYX˜xçmXäÉ w–I^àVÉD[j€›xw‹EŽ+~^L©ÊIe9“u<¸J Ûf|Î#ûéÑQ¡ mÆå7CùÓbV xЦ Œo;OR@•c½`ï4Õ@ö#XÖqóqTV,ÇþãbCj+¸*Jž>=à%~…[§Â$ÛZ Ln}]W» 5ÌƸÎK'É"G˜,*¤Ä@BJ¨XctH…ó4Kçþ­+°÷Û«3T9ø˜3=s{©ÎÆi«tWµ?$鯕)ÂKWˆ»,Ïð Eø°År¦{Ñ–HWÑñA"œûÃ’|ó=ì‰u!_¬³)Ê`­çÆkö¸xV‡àõ]üÁtÎtÑþìvþgœÁMWwI@]ÎV.±ÒÀbÕû¸Äáb ƒm(:†LÕµµ±xü÷ÚÁ¶6 2Ö„kÖEF·ÅDQF,€ì¼q¼ËŽ‚òiEï-vˆ)ØK?¾””[ üP‹îªVõXzÉ,ñóƒÕ±‘¹“ŽÆŒ©~޲osýbnÍÿˆ[¶nYÅ-ÛÈ­z…²MäÊÝäêŸ@î>¸}ù1ÖÈlRv!‡U ®ì+tþÒw3¤ú)šZBýcЈF[î~Çhü¯¬ù ²[ endstream endobj 1527 0 obj << /Length 1556 /Filter /FlateDecode >> stream xÚÅW[oÛ6~÷¯ú2¨YÞI붦IzA‘®±—¶ŠÍ$jm)•äeAÿüy([räf ìCòçò›æ“'§B$Œ’Œf,™_&V!lb¤&F˜d¾L>¦š0;I)ÓǧÓÏó7““ùäÛ„%þX„!–áLèd±ž|üL“%¾I(™Mnë:Äh Ô*9Ÿ¼ŸÝÏ$#ʲ¡|N©« ‘\ý7b ³¡Ø·'Ï_Ÿ½|s2?÷Ò“™;Kfœ%2yÌ„é‡Mé ™r\oÊ¥«WwEy…k÷çTðÔ•þ³E΢ģ•Ë—‘O¦_\;r¡ ÐdÆ$(-Qö‘Ë×ÍSò䔩¾=R)ð¾O”ëÈeû\3 ¹î¸n¦3p)|Ρ|¢h6Rºúªpã(`i[ à¶¥„>Û„H ›Ì/eúÒý1*5>2”ú(êSëèœQ 'š³N„ ${MæSt¯ÒiÞÖU‰J €ÀƒbcúÄ7Q…/Ÿßµk²×ÇO»8ÝF©äD€ç´ÖD™ÌG)Éø÷Ç_·l³ŽoÖc :´jÿ¹ ÂÙ»³“{r fy_.G}©‘ëžÔÑ¢ #Útv·y»9}‚Pc:׿;:÷öd~2W‚(%‡?ß´×UÝ= þîÛ¯‰•>±¦‹-fÆ´@²Óâ•+—uñ~UMgܦ®½“á}b¶iq}ϳ#\šD3WØaD#߬Ç8†èÞs(µ%×[E[¸º$‹)¬îiijŒÈ¬¯ÐÔ‘éž6CÛe_v¨M1 g†d&B9Ï*L„Ú]ºÚ• L ™®Š¦u˱˦H—®Í‹ÕAÔð¨ìö0ì7c‘¡‰dÿº8ŽE¡¼ ®TÏD)J¸‚YÃ¥÷/Ž}©â¾Ðn­«óE[Teƒ»y‹ß,ÓÔSÌ×A‚{¿O¹IózÊÒ¶X@aNW@:O4Èz[tÁ»g~TH(Pî)´øD…„ûKyÀ a,„‡÷EíÖkT¢¹®6«%î]@¤¯¢_4¡‰yŽ6¿X9ï» „jÆ%ÐRÃëçP’ýu¾ú‘eLfZôàjN|LRì@DZ ­?S±L® .Þcƒx4„[dùõ!˜ Ô+#‡Â›¶‚hj‰›ººë¸;ܨݷ 4‹%®Ú ¿áª\­< !r½»öãòò§ºª¡Ý“¹FBgÿ“kd-:È@ø³éÌ0–RÄ¿s"a:Q0GIÑÀéûò: DB§EÞø&ü—ŒF‚w„BÂÀQ·ÅE"&‘PéÁ­iyÖÝAÈmo†ÎÀñB–F!û3©`ʺÄ×£˜CwA›½ªÓY Yb´Ekñ/‹Oé?[Ü*‚±4ÔÚm‚°Ñšd ÌÇføô—ш!TôZ{UK·£óè+æ;ŽŸÈLN%¡p:PŽ?FÛþ‰ýùbánÚP·`7/#ñ‰ E øo±[-ÅGýIî1Ãÿq÷hìv—M,ú{t(:aì´ÐþƒÞµ»Š”©˜@,¯–eP–!¨˜ŒÆÁF“¯#uëÕ ºÝÅ7šwªº€â¯påëüeñG ìàO QëAÐF!ðÎ]S4÷¡õ] ‹±7Ëü8ÙÅ5,0®ÕÎÖ÷½¾?h ~J“fOŒú¡ áP„Þ[B÷  ŠùµÂÃhÀC RWq±3mˆ<îÕ݈sU… +,ÁýöÑEç„vƒÉºjZ,rMx¡œ†A JW˜ P2„¶ë¿±zÈ|Àz…[»:FÌ`|6þ—ŠÐ0Á(Rï;¾¥%ÞûÞMæï endstream endobj 1532 0 obj << /Length 1665 /Filter /FlateDecode >> stream xÚµWmoÛ6þî_¡õËd`bù*Š6¬Y“vÝÐn­1`}ù ØL¬U–A¨Öë_ž½~ùë9&é1¯QJŽ#üx׬˪;ü=´?& äXÄItÇ-¦§Pà°CñÌ«*û€~VÎ#ž„¶YOép>Ñ}Z¬w³+ …HXÞ(f LcvÁDn¼d§Ó„·8‘ÖÇ{-Ç”:.Ðò²Ê®³"ÍÝ[È´¯x3ÿ¤Ø0ñƒÄv¶ E}1p¾snë ò6’І‹5,Wv ¦6Õ®¥Ó]ä’jÅÇ'É3°Ê‘FÂÝ5ÚÔ9²FdÞ§ôÊæ%;¾OµÆ—ïX5¼ã– ÷”ûcxzÁÕŠîwõ“Ka®Â¦Ü3ªZá"rÅyU&áÂ1t «ßÛmƒDI$Ìf×\†­°Ê/^5¶Ú«»+𜒊¡Þ¡´2z¼izd.U æ'š4 DgÙÚY½«G[ ‡”qÀÑj@ç8ΫpSÖ Žj[ÔY“a€SàYü»ö#FÃ÷¾¹5¡?&«ö4]%èÂsC.zagd–ãø/{p$^äø.ؘ‡·›Z$†–f˜k%V¯EbáéÊÆr <(—Ǿ+€g›v/dœÿâÿ„±£>u/Â-}µ0 endstream endobj 1540 0 obj << /Length 1628 /Filter /FlateDecode >> stream xÚ­X[Ô6~Ÿ_‘¾eTb|·³‚¶ÀB¢U #„Jy3Þй5Él‹øó=Îq²IÆÃ‚TíjãÄçæsùÎñ>^Ìî?"a”ä4gÉâ*±‚a#51Â$‹Uò.Õ„Óy&¥LŸ\>›¿_¼˜=]Ìþž±„ÂK˜0Ä2äÉ…N–ÛÙ»÷4YÁæ‹„‘Û䟖t›b´„Õ&y=û}öøT=“Œ(ËÆú9¥6¢V"¹úÔF˜ÍÇj_%©Ôù´$ÁHtbÇøÌÜŒ÷Ð21aB÷²WîÊ£íҘЖ¯ ÙokìO5yånÈK×4„QzÁ(ôav¯kÆSuYñíRToË›HA+èMŽn¿TÐH— £=×j¦†1" ;é²,gÐüäPy¬¤Õ‰êhI+ó  ,Æ®A¨Œ•kŠró<ñ¨=ïÑCÌé´s«ŠY3í}µÆ§~/Å=hìŠPÛöuÛuëˆD›º‰âü ¢`D Ñ¤#”wá5f-›ÈPž‹- ’q?0Ô~% gá–kŠ+èŸ÷~unUãÇmQ†å1pøVçŸwhp-ÒCQVøµÙ㳘s“Þø?ûr…Ÿë½gð“HŸŠpÍX"mçÃÖÖºÜ]7EU6m¥zˆ ÂáÓ¾v~hÖEè·:qÆ=²÷©óØM·48šƒs˜c¡3Á,‡ñpQ‘PT0:èD£þmF2¦ñÜ·a …#a<1&œüI7¸éÛÁ ÞTZ„¯>®æ,=îZü€cªêB6÷uë~WÕ7·û-¬XºónmŽ[¤,w¸Ë‚†Ý ß9¾‰*mYo<+ L ·©!(’ÒŽIÏRÀ<¬s<äÖs7MyØ”Ë.Æ™P9š¢lz8|(*\.÷›MYGÀ{m®}ïR”pÀ,)¡ÛB¶ú§·+®r"¤jér)§·+ ‘ínW¬lr»çC/«;£w}Grm‰2yCâÉ5®`Äd©{sß>µ[árÕ&?:·Ô]WEƒ4yº9B’l}ÐJXìöµwµAW[Ÿ0ÓPqb $‡™I+´ˆE  c°D(=f¸¸ãܹ/3æ1cD ÐvÌ„äêCÁí9„®É'Ð8c˜GmÖì.ìäÜ_FÊŸ5½+×àJçÿ[ Òííu±­üºÜܳX0% â:pUÅ¡\õ‘ð[•».ÏeµÐД¦¡ù ÌË¢¿­|Šv&!-‚\蹡hc}ðxHShÉííèÁ¾¬ß²ñ1ø—2LRM˜/çoI1Is˜…Ô4‘[ï·P5ŠÇ'‡™Øa¨¡J<‚Ðî{À~mÖLç•q$LT j§a¦8M2K¬@’£®„ÿOÅCüpw7{fcždx]ô%ópyfÈe¦§!­ã€ƒÃ3H1ÂE8Øç¾=·þúÜñko• endstream endobj 1445 0 obj << /Type /ObjStm /N 100 /First 980 /Length 1847 /Filter /FlateDecode >> stream xÚí[Qs·~ç¯Àc2™à°XdÜ´M]7qSí>eü@I“£”Ô´Gú÷ýöx°ÍPER/4ÔØvß~XÜ(†lœ¡ÄP *\„‰hñRL"Â_1)²vI¹@`o„º–dJÎ*àÃAÂxžEÛ J§‰m¾¡ì´ä¨ó³6e—¡*%©ÄÆ»u/t‰»1²ñÁû‘/0-¦ˆ1<„¢3éÐ<¤­Ô]™Ð›‹:¦¾êz#\Ìjxbˆ¼z£n’ïB¢ñ¦¨f0™^nôäɨyu{ݚ毳Ù|5j~˜/.Û…ùÙ!ÓÝëQó¢½X™Ÿ)z«¤­¦‰³8r´z/ßž¯ºqžOgWÍÔ1<2‰úo˜¬9[Ì/^¶ˆ“iΞ>3Í«öfe^oÆ÷lü¦5ƒMílµÔ ¥[#¼œ¿]\´ËõFÕµý«½œŽ˜ß¬× [ýC"Y)÷ÙxAt?kýnñ–˜¿Û.Õ¬n»ì©Bé^;ùúNl¬å§á‘&à„>äØ5ƒ-ˆøØæ„%øÌ_Í Vë«óéy”½q÷¨4‚ý2й„¡² Ì?\O‡Ñå¸E#¼“FøóÑÈÇT±I*Grw‡M¨>zv¨ ÂùxšÈKøÀPB¹‹'Ê y"¿io%#þQ0(àtSŒg—·öüíÅÕ¯íí]D±ÆtÙ‰úò(¨?ç²ó”ŽÆyò=¼S¨B¬Ÿðì† ø’\Ìûš€{!=è ¼OÚÙåbze'óv5øÎÈÖáDçx+SÞ•›ÃËÇœ¶ó1Ç£ó1»>û2U¡fh§ÊGr>²„"ª¶íS Ö|¬'Êýóñî3eÄÛ.3ïJÃMÏx¦|¤ÞNJ û%¥¤í¤¬gÆ\ÏŒRÓTjšŠ?Uvú!ggÂzçÍcÈþYœ-™v³|Þ®VÈ>ëú. ë†T$ï6k²Ž$î"M¡Ÿ$Ë;z‰G“‡TòJ¥’G©äQê_N¶Ç‡A³ˆ§ NØÓDï¤K‹J#! 4D‡ðÈóñbi_Îg³v¶¼˜´ÓÙ¡\Ò—,ÉꓚZvpÉÖÓ£—•Ù*oÔcÀ¾¼ñ{‡€Lh©ùI éb壒ȑ;ÏjŒŸ;n³—%Qù#•Dðr‹Õôy౬V*«õ>v%{ªp²’(šÌ"»\ü—;뻩#Z—µiXõƒÎüV=¤ÏìŸ9~£q/æèž:çÊú4²œ¼VB`·Y…ü±¬¢/%ôÔ!U¨ôB•^ˆNÅ*æ¾<§oÄ}Ý÷„àÅ`¯Ï³ŸþýÓ߇ûll ¡´déG¼Í÷ª`ðÛ n/¢’Ø`­È|ùÀ#h75€²èî™ ²Ð¿{ ïÝöBÝÞé^¿á<è]KqÈë7Cº™POë@ˆþ „f£pÄwA/ªõÞ ™Þ/àÿ®BQî endstream endobj 1550 0 obj << /Length 1859 /Filter /FlateDecode >> stream xÚ­X[oÛF~÷¯`ß( šrîCc·mRÇ…‹h#X Í-Ñ2‹rIÊiÐ?¿ßÜ$RË›m‘ÀÍžËw®ÃW×g__ržÑ‚”EI³ëÛÌp¹ɴPDs]/³÷¹"ŒÎæBˆüû‹ËÙ‡ëÏ^_ŸýqF³ÿhF¹&†úwJ®²Åúìý‡"[âðǬ ¼4Ù'GºÎ8ÑJ`uŸ½=ûõìÕ±x*(‘†Nå³¢0 ±JÁä?#VSBM9ûVfJYÌæ´dùû¨A”Ϙ&JðÝ;OÊ ÿíñÇÙ<ÒÍG„ Ù9¤9’* hjÆR‹p4–¨ž“yÀÌÉü`Efs*1¬ "õGÖýsnxþfÛڅȯð`î/v›vq¿í›Ç¶j¿õ{=xÂE·éûy_/†fÓú3¶+:ÜúŸ›åƒc¹iZËfðÛÕýjÓ5ÃÝÚéV@;#„×êU]­ûs{òõ%•cû„$‚KÐ;ºß ¦•Sͱd*RA<" G9Å 9@dQNÅ¿nënÕÔi $!m§Þ6)^À,Îs·Æ&µ?EþCý.)50™JýÓãTwͺöP%ÐŒ(F£Þl5¹žÙúq&U^ ó ”ð® sŠ¥ô <½>2$ËCÓÕ½÷ÖÕÅùaØRÁrJ)"uùd²DºùˆÐîÔªCvN…˜®‡¢²Àk#މŒ‰TG‚“åQIJ”ަÕ°}"9)´Žè¿›QJó—?]]̘É_Zø¯__¤)ÅÔå/·Ãݦ‹‚à€1 HVaŸ£c°QÒÉ/wÑUÍÊ;ü‡n³}H1W¨ŸšÇ7î’ ‘)Êð }Ú·n>"Lùö€º²º}wÛV÷dµ±è=F È#æ©Â¨Žt˜Z̤$œñ©M,ŒÒ‡¿Ãš~ Ø—Öå]Õ~ô€¿mêUÝ IÈ5ÑÆœ€\¡2iJRð€;ªùž, ÷˜•wkU$½×î»Eݵda1?RƒI$©‘BÜÓ*q€·Ñ.¯ÆZ4ÉÄ`Ȇ òoêÛº«ÛEýdbp%þĨºÿ4‰:&Ñ15ê:%¨6'꘧›“ulÊÎI.L¡ ƒ¡GÂKŠ–,ÆÂS•,P‰žS–DðÅ…æòÈürgƒásOÞÔäB›óBbBS/â˜vì3˜ƒú1öA x¾¬‡ª¹ÿ|÷L¢aU²ˆö¥™P%ª4$®]œü± -Šëœ%åí&K a¦ïõ¬T­‰<ʼ´_¿¿° “÷‹jвÝ܃ƒ‡n3C†äˆÞ¾î †lÉòk7 átÝ´ÍÚb½]û×í4•`¢Þ¢`è*¼–²L“R¾‹‘BÂe=øãÛ笌"CË)ï& ©˜×Ì ¿Óoü³ò‹­S|pôFÛZ·M<>6m½®†f‘²U!a$ÛkžDŒÃ̇ÊÉI)C>Æ"–æ„ùÔ&Jpâ,ߺr‘ï¥xN»9?:]KoÁí¦ó‹•w¯ÿ{Œ Móào‡ )"ÈaºÜ*Á<*?×U¿íj;äAæaÜyòÍ­}†¹ÙnìFo¯’Ýr£·]¸ÑÛÓãAó8ƒÛM: 8ǵpMzHa¥PD¾xÐNa¾ƒãRbЪ'›ûû¦‡ú½·­N%²(J$² ƒàHýéMõ(‡»Ax˜Ã›¤Àå2Þ$}ôà&9µqÏ+hmMíŸ1U0CdYNMý7,ä*§'3^àÒ¨0:NšDò•júR©< ¸àRñ. Qö×.Ršƒ@¥%Âx·Û6^îB„ò…' @.£Yé)§¿W²Ìèû@YÊ)k[žŠ6AOiUDcýZ™ƒþI­ž{²ožQíßõ¼‰®ÌS”YâW¾U`±¬†Ê¯\M¶YLA¦»’„Ÿ73VºÊ…õßò×A,®\º ¼ê/ºf}ßwUëUqP`³^ËÊ•qjK xõª«¼ػߢoúf°uê³ßs‘‚'J ·«"¿½I@½Ÿó­,+S:ðÌߊ¢H´ÜäÌîöEŸH‹1L1T1=µÆöd¡bO¦ùzTŽû<ÍOÖœªÕ2ÐÆXñýŦ­ç7UDBN•`r£-CñwŸCliöòDøªÂádýý> stream xÚ­V[oÛ6~÷¯àÞd fy¿°dN†{YcÒ<¨6jµåLRº ýó;¼H•lºÙŠ!D“‡çûÎW«ÙËÎ%ØKÑj‹ Çœ¤…šk´Ú »BaÆæ !Dñóòf~¿z=»^Íþ˜QDà"Ê564Þ±\¡õ~vwOÐ_#‚¹5èÏ ºGk%`µC·³ßfW§ðTP, â3BLVi,˜ü`5ÅÔØ)ì­! W‚éÔ²â®gÐã3¦±|¸øØ"ø÷ÇŸ±E/· f(« ¤=A˜š1*IGcÌ$õ摲€yï!Ñ‚J…UKAãѲúÝuó7¼Ø—mëW¢háË ·îš§}¸Kà¶o]¹rß^ø“—7TŽñ…Ä‚Krï SIÊŒ¥°dª—4ˆ<|‚äÔÈQ,‰Â_×®y¨\žA@ÀmC0y&q^„5lRÿS¿¸·YÔ¤dŠúWrKSí]=‡U—% VŒö|}dÏd5?»Ïs©Š²ku$ñ橎",ËñI:#™’ù±j\c÷jyqœVT0ÌÁsJ),µ=›Ì½Üb$kjÕ±º@¡/§chp²€k#™Œî¥N€³íKIŠ•îMïÊîéLrL´î½ÿvN)-.}µœ3S\z÷¯®—ùDãXJ1 ùåS÷ñÐô@€±C ˜„/LŽî“꧸ì9ÝxMYŠA¿­Üƒkº´Cm†Tþxêf…BŠ2¸AÏ8Š-Fr¹øN•Ä­g‰ÛHð§µkj¼ö~”­ÛăCH–¹Ï\mÂÓ4è(Óóò ò´sMÙ9ŸÀ›¸¿{ÚWõ¡­:üwÜ;lS`ÊãÎöC *C[MR˜Ƕïhï !ÉR5’„'€ÒŒf';ÿ4úå{ endstream endobj 1566 0 obj << /Length 2145 /Filter /FlateDecode >> stream xÚ­YkoÛFýî_¡ýF¡ÖtÞ3 ºÅ&gá`·À6F°H6@iil1Õ«$¯Ñ?ß3Ê$EK0¶h`‘Ã;sßçÞ;}ssñý;!&Œ’œælrs7±‚a'Fjb„™Ü,&Ÿ3M¸˜Î¤”Ùßß¾›~¹yqusñÛ›PüÇ&LbYÜ“ =™¯/>¡“>¾ŸP"r;y¤ë‰ FK<­&.þ}ñæ˜=“Œ(Ëúü9¥v„­6Drõç°5Œ0›÷Ù~°4WšÓéŒå<ûÜJÐòçÜ-Åaø“|‚þó¯²YK7뎈0<.Zžq•’Ú.Wš>uy&ªs<‡ž_<ËÉŒ)M¬ÂQ”(Éâ'ïþ™°"ûy¿ñ2»Æ±úé»ÛÙW×Ä—yµ­ëHT»ySn7q}WìÂW]Ɖîng,p¦à-!¢Œ<߸b]¿ò_¾ÇTWz©ˆ ôî¿”ëDe»T3´TGŒGÁO+F´iUoŠfÿL Bi­ÿqÊË^ÿóúí”Ûìµ7ÿÍÕÛñ@D)Ùwùë}³ÜV-#8 k¤¢ôi-ˆ5m°13&S|leºZ—«ÇèðŸöUíÆׂp#ÚË#›œäRN4ãØÂž÷m¢›uÇ|;8.0Ýx‹yùþ¶t;²Ÿ¯H1'û_°Ï(brÑe ûÕ‘ }µ¹Þ2Ö¤L؇oÞŠÑàì%ÿÐ8 —ÒìÃ|Ê Œêõ[›´úCMê¹_{úàS¶h|R6Ë]X~¬É~SΖ®\¸Õít†%@Y¸Gc åû±'òÏîÎUn3wφ•@]|yXÕÊo#( PM P‘nO¡@¤›uGQ \àL-Ü%¥²GÌs†r%»ÌÇp Q±ÅÅÐaš£-÷©€-\S”«ÿߢ„2Ý u‹20H0\çý¶O¨+hÖ,¯y¶«¶!àÔz¬Þ’…¡ëËÞ™»1I4”|qQÞ>‰â/£² ’ëɧQ z¿˜œòË/ç¬Ë&Të¾%.£Y–HSfÀhÄ\óY–@‡-Oú Õ™06Òe„RieÞßµ­N2Bc'ì€QÇíÏóÒ@J5àEü`À³×‹Eé{¼bíº,ª)Ëñ=aŠâ‡rµŠa\¬êm[6ÌcCN_ ¿ù?.60Í6BhÄøRnæ«ýÂ-â[$‘Ù}hE±PÄŸû˜8ño¢]¸z^•;/:‰Ý'Ém’(¡€DƒfLè_®¨÷•óMÁù<ϳíÿµ1GýBjƒýc›®‹}êýbêýã¡7ö/wð\x@ß%&‰r*,|6åæ>®§-Q˜}>y¹£´Hc¥û›¢±·u+gG)=x‘P>0›È‰Õy ýÍ)As «îŽ?©Ž¢šÂÎŽê3ŸoW«²†[|ØJß@BÕ¡Câ„c«”†p~’0°Z†êÈ|4˜W%>µó* ̫˥£Z¡½¦õ9M-ˆ•ékúW(HeÆNVŠ2¨}u†Dz´ƒM¹ŽöÄl‚Ùæãe|Û×!žýã¢hŠø4ßV¨}˜‚Ð>m7‹EHn©²bßY hÜ}U4°¶Ú¯ËͶ.›ÐF=ŸÍ·V 1ï<*ÅY”sÌ¢Éß|_Úw7*‚†›%·4Ñâ'¥É"º³Æ=„";ç žåóµ+™E@DP{Ø *…çÔð4÷aå:˜ë:¾ OÁF(ž¦h›àæCçCr²f §¶ÜôEûtFaãFoÓmôhs U¨vPãy–”åÞ·™6çC/‚5M)ç÷·“®A€ˆ×Ù:ôØíòÂ͋ֆx]' sµ/dŠfïS­2I0<xkôà•K>”Í2~iªbSÇê䇫°æü…ÁãI\pÞ—ý*mÈ;Ác Uhè1‹ÚÔƒÞŒ›ÃÈXx¢úñˆ?ØN¸¦'€¿æòâ§[Š‘„9`I%òh]ų]íö‹mUìÊ…Ï7“=ž„JÌá9”ìõuL+ôO¢ƒôlìTÄ$=ô£§ ÿÄ¡™üádQ‹R û±s=6jGoÃy`Ä0?°¦Bð)&²›œ°*À¬ô@§D„&,ÅÄUbˆx§²Ö_vÃz¼Îf­ï¿Ì`ÓwQ†özO=]ïáñézÏ‹™Änsv$Ž\ñ¶1@çV—ß¼J'ûpæÑÁÚÛ}N›Ìñµ·)6/æ©#ÚÔÁã“:x)Óâ:ö}>è5ÊTfüÊEW”Å*ܲxú´ÏÛédkF}|÷ä:yžSYbŒÐ zGûBkÎ ¥lè_z[Ÿrïy–Z†º5`yŠ“aáÿ¼È™Ò_§Ê3gOõ¤ 7*ñ¦í¸r„ØbÛ¶óûõe\ ~݇ÊÑÞ¼ø*5 *Œ4‰6BaÜdOn é ¤)×± ¡$«º‰$¡ey˜Æ1%×8ꃖƒ)E(ô[è*ûc“ 7±]ò"ÅcªÇ¸|Û¬é>*¼Ýbv›ùRü.ÔäH+²i»•é—qíðqUÔMK_¹´x¤PX z^ÿM=%Y+ò®5mwxl "15›=ÑâpÇòœýÿI74¿ÇQPçqlü½íÜÿ{Ž;, endstream endobj 1572 0 obj << /Length 1283 /Filter /FlateDecode >> stream xÚ­VÛŽÛ6}÷Wè­2PÑâEµEsÙ´ š4Ù5id‰kÑÅ‘è¸Ûü|‡ʰÖÚ"‚,â¡8œ93gfȧëÅêçIç4Xß’Îe‰”d< ÖUð!L ËH>{þbùqýjq½^|^Ð †4 <#’♜§AÙ,>|Œƒ 6_1á¹ ŽNµ 8ÉRRÜ.Þ-ž^º§‚’DÒ©ÇùŒÛ4#‚%?ÆmF •ùÔí›?××—nY, MøqË(%9ͦns°jÝe’$YD,&‰ ¸m)ˆ¸äáÍ¡µ‚®Ý¢°ÑÅ€;å’³pWô[UyûáP½¯u©]Ý£jÑõý ç9ßP tùTÍpewV/hr€Hˆà è;½¿c–z-y®ÈÒQk¿Œ€:øqšÓ„@‘‘$Χî¯[ÕoµšG€"x;!€Ó2&ñÏç¡“á#µKþ¦ÞÏzõF¦^ÿ ÕëFµ6Sf@ÆHÊèÙÏÉz )W_–I¦ïZ¼ sÀæðx›ˆ'AË·{Ý«i|ùüj,ÌS7F8d.MSW3P–$àÏn:©E£^t¦è*sÕCsØ]«.ü‚‚L’s¿±ß:÷êµ.¼ÎŸ4¡$ÍÆ¸MaT'q–©{sýÇË×/ß<¹±iÿk¾¼8I1%úÉÁìº~ôi?OÀ†Æ‹'2KŒfs`PÁüÞÕ[Õ#Ï·å’eánÉ$´Þ¿snRé¨?»»È±„6.(ƒôqjQ-:Ó›cvj =:´d(-Æè¯{'ÝCÍÑP/iø‰ìl ‡h³ŒàWõµnIuQ†O'pg*bÔº@;Í  æl WÏrËR ÉÆïÈòª7êNõª-Õ£ürÑ“#ßFð©Ñ÷‡ ÌRlí²Ô…‹qŽ?ôyCß_TŽcöW«ÕñxŒÊêŽÜÁØ&ÛÎn|Y„érXµê¸ú\V+{+YîN¸¸Ëx$¸\ˆòÿï2–ñé]6…ÊIÒÔ™bÒŒKÉÄùj÷ÅV ¤±…UÏs™0Æpyð\¥L¡ëo`ô"¹òñäîçòŸA¿ûz›±“ÊNvÞ={Ž¥c©<¨¾(îÚë¦0¸Kó4Fé7e3õžàê­=TôF—µ»àÓQ›Ý2Æ¡ùiB–ø¬`ÜŽ›׋)¶«eøË~ÃÌ8…H=®¦AÄî;Ô~³³A† ƒ2^ÃèÚBF’ÁóhÚotYvugϤáën»Õ? ¸ÀÇ þqÒøb´ˆ„‡¯u«±Èš‡šp[L®ÌxºW(÷8ÉxÇ*†Ã¸mv^ÀÙˆo©™7ÒXßãËÊ6¢=ÈÂJ¦×›ƒ¥xi£w/é5Úe¤ÓƒîËÑF€QѰí n ; ƒ…Ú+ßJÆyže¸3›äRúö÷×­€*ÉS¨ƒÆÖÃ%â°õ¹„ÿ=§ý€;E[yöÕ8íAœ€v¿7ŸÜ;H×ŦöŸïú®AéäÕÕ܆ .7ƒmõÈ"šDP8ù܆« £®¬(œU3}/vœb¸Ãý`TS˜q‚–¢êT´(ÐeQc9«¾ïúáÔ»øšó°|Ó:†Tï뿨*Uëóðó¡¨zxÑô Û€æ9Éì“„ I 3±š¾¢r£“¯ãèþq|B endstream endobj 1581 0 obj << /Length 1374 /Filter /FlateDecode >> stream xÚ­W[oÛ6~÷¯Ð[e bx¿ôaëÅi›bÝÒÔ(dyPl6jË™$§+úçw(RŽ$ÓÍR `J<<ßwn €ì˜Ì§àX{72Í›ªõ4ðñÚ‹ñ :=2þ¶¨líƒu6{6Î=Â)bà9)%ÊÍøN.ë ¶Ù7´j¬®¥ÐÕÜœÌáXOc$í;©àè'ARu¦7y³;’€ a¥:ïšBҿͦT§/œûç§³x¢1$†üÅ®Ym«ÐwTwÕËV]²ãä—§·¶\VÅò·ÛiÌl³Ša(H~µ¯“ÕŸ A”«D GÈñ¹¬' ñHõlÑjOôùÂV%Z8‡0¢Æ@Lû„b÷:`3´a §‡l ÝQØ“Xç“Çxÿ÷b±Ø®·O¼ûßoonŠcžçxž¨Dhƒ0û±ãA,»—;æ÷{e-béi¢#øüºõýåç͘ êíÃ÷(¯wBc.c¯hÆfÀ¥ˆÖ ¥aI†1¸°ŸmeË…=Z3 zûãkæ|åÒí[.ìš)óŒ˜3ÄÓnØeáøO$Èì³Ã»”ið†H)úÂÑx¹¬' øH]‹ û„`vÒ™ –Î2È[zPhnG¨>£X¥©>CoA=*Lnà äú1ÎÊ«?‹»Hë0©¨½Âã­ÇËe=Áhëªk‘1\Òˆ@o•¦†‹¼§3Ö|‚Ôt´ùpi ù„Œ ãK—¶É‹õÏdº>îÑÛ˜Ó%ïÑCUDdÝëùðjæ/A!ã[åíøWû©$oü.1ûÕ ƒZú ù§sw(¯šb±n§xõµèÚØ¥*³oÊ‹p‰Ch2jš|wÒé/1þÌM {IàµÙxÆõj»[/ý;cZÿPÛ&H4ùõ”¤ëÖÔÒ c²¢‹6Ü”˜Ñd¾¹ï½vñ$XëÇh¶£a ìffä>Àdú$HZl¦T¥»ÍP¸Eïüð.¯å]mƒ%MÀÞØ¼ÞuÛÍÊD§Û+ªòë‡udôÐ"f(D^{‹ˆ³;ð%šŒ]A0ft2䥉BFa?n#®ÝxŽ” •ùk,r=N‚ˆ 2T}×úŒáÔÏyŽ»iÃn Ò¤àD“îÖMq».ÐÝ9Õ"}ê ŽsYƒƒmæÇ¶Q¨úo¶éGÙF †z7CÕË¢nªâzç¿­œ1y¹ìþ·(ë]]ø@&<Æ;çi9ŠÛq¼8ZëB²îÎÐOƒœéÙH0g£Ôa¨Ÿ?`#‡oM&èqCau.Ƈ4 EõÝg± _aß»;ü_%õÊœ endstream endobj 1591 0 obj << /Length 1532 /Filter /FlateDecode >> stream xÚ­XÛŽÛ6}߯Pßd´fx'$@“nR$h 41‚"—Åæîªõ-’œt‘Ÿï¡H¹’M{Ób‘EDSÃ9ÙᙡžÎ.<"c”´`Ùì*³‚a3#51Âd³Eö.ׄëÉTJ™ÿtù|òaöòâÙìâÓË(þ±Œ C, k ¡³ùêâÝš-ðòeF‰(lö¥]e‚-1Zf¯/~¿xz Ï$#ʲ1>§´HÀjC$W÷ka¶þ¶ÂŠBñÉ”<×[Ðãsnˆ–b¿ø¤Èðç_ÿµ›örÓ`„CuÁóüURXj‡¨4¾bF©»0”u˜'N˜ãšLi<Õ¹ä¦Áä «ëiA-Ê“Gà¥Ë!xêŒE©#èäCm ÜFäÀJHÕ…kËjù¿\jO»t›òº&’ýçâ‘2 ¥î}—´Æ'ã^‹‹":3¤04B-º¢Å÷)5BØÿ@,ªâüŒª÷”ÒdÖÊûøŠ1a茀9[u&L%ãùŸ®müH Š„VhF¨h$¼û͹E&WeÌwq…/>þ¹tÛ6ŒE¾-«:̶›ð,'ÜäŸý›j¦¶7¿Àwû\Ä4c™¢œ(&ƒ­Mµ¾Þ-˽(ãÖ“^¬ÁK(ÇÔ¦qu˜hoÊXu2âŒ{®Ý§Î#,76_EÑbàhhÏP+ÐE†x¸¤JF:¢Ü£d@ÐÁþ›‘Œé`fl†ñŠGHÛu~ Bí×tßR¡ÑÉÑ:`ó­ÁòÍUho\lÚrÞÍ뚟mܼ­ºvóåzfûÖ Ñ¹ 3‹ªiëêãÎ {gë"_$w–äÂåØê÷T¿6|GŠJ…NVŸÇCª¬¯¸½ F£óà‹âî®6õY<ëû^>^ú)Í<ÔÈo`Ëx/õ)Å<}£Îgœ©(æœyÏýÇXÏT¢!ÂÍc|Èç›å²jM¨"e²éWEWr ˆË ¾—à6THÙjÁØá÷‰àößKÐ÷±ƒï%‡PÔ%-±"Þ°šÔ¶,arO C6²¤ãaÕþ–¼¦á–&z"VÕp;~~|©Ú›p=æ„…©« ö(è îÐ#UvoKoMh;¢ª®4µ õÚùÚ}]OPÃx›™ÝªZošA—Câ7¨BÜg(Aç×°Æð°³¯}`ÿàóiÊ endstream endobj 1599 0 obj << /Length 1494 /Filter /FlateDecode >> stream xÚ­WÙnÛF}×Wð‘B«ÉìKÐÍ©í"AóÐD $y`¤±ÍT¢T’räç{gcHiEarî̹û=|¶œ=¹e¬ lH±¼+4CŒéBq‰SÅr]¼-%¢j¾àœ—?_ßÎß/_Ìn–³?g¤ÀðG ÂÒ$œ1L«íìí{\¬aóE3ºøË‹n †”ä°Ú¯g¿ÍžÂNÐdŠO16X©§âÿUm¦°¯5gÒ3_CË·Iƒ„O©B’³á à#SÀ¿Ûþc[$¹ÅH0£ÂñuÁóì•cÐTQqÜcF©K˜G—yÌ÷²X!‘pF‚“°õÒVÝ¡µ[ÛÌ-ûù‚iVîîÜ//û^ÔÍjsèêG'cÃ^Ýí6Uo×A`ßî¶ûxzÿ°ëwMZµ»®[tvÕ×ðÊiAêò€ÿÌVÛî©ÛyrKÄØ.gä½Ü;Le”Òc©,©LR{¬Tðã%§žlG›)üMcÛûÚæ5 hƒpZc„¿Ó+ý^÷ÈË_ì›,j¼dŠú7(ê\ÙÖÉñYE’’¤€«Tì4YÎÁÓöq.dYõ­w7(ñêÐêËéï úˆXûºµ]ˆÞóë§Ç J8E <'¥DB™³e‘ä#AŸ¢S«Ž¯ó*¤Â<†'s86º1SIê8Û¥ Hªdz_õ‡3 ÈV*yÿÍœR^ýúüzNuyåÜ¿¼¹Î'CBðiȯýîM@€±C ,¹+q†´JÉFTN§°L:Ý:-Úªù#ýumïmÛç  ±*=¤òé›9Ⲅ r>ÀAl1’ËÅwz™G¼sZ¢.(øÓʶ Z9?žhBµ@‚Ž5Éõ t¢ÇÔfªUˆ÷X‘:1 a îb¯ìmm³²g#ÆäÑ‘²ªý½~ÌT˜€®­ !áW|­Â‚Üb$˜­°éuö`„Jz2ˆ!0ødšØÀb¤Ïð… H™ØdÞaŒ£šrt«Ò‡\°Ã1GÛ'†¸šöj7®¤z{߆Êvï6‡mÝì:Wm ªMÓŠ\ê‹Ü[[NßiÉ ã¾™¢Ë  (Æ `:⺆@2G›|;¨«ÍÐP³1„2TÿÉxS#,Øå‘ †¯Ú‘”û>ÊAÂ$âôkˆ >úæ#¡» ‡]/€ï'‚c7ø T,Œ‚Ïi¬ÿû·ÿ endstream endobj 1605 0 obj << /Length 1677 /Filter /FlateDecode >> stream xÚµWmoÛ6þž_¡õËd fù*Š6,]š¾lºÔ(зªÍÄÚdÙ“äfAÿüŽÓ„Hý&™û”é3û&ª52Öúu.kÊUp[€æ$㬀ñÍÉl‚ŽWYZtͺF)áX O8ñ¨@ÂMÙØ#öâìqÏÅ! $'<—e@#m‰Ià¿[þk›örÓ=AÏÆ±U‡Çyi0¨'Kضw" KûŠƒÔ‘âhÙÉ#™îMïŠn{ ¡Z÷Þ3aŒ¥§¿¿8›ð<=uîŸ==‹M¥ä8ä§Ûn¹nzE€}‡d$‡¤›rArÝ“é&ö˜žÛzÑ”aÈŸ¯'S@f»eL‡òë!O–G~6 €N2Æa »=ÄAnº' ñÁq¨Ñ’åô—¹mj2w=BĘîŠ>¡Û.(Âåc4e4tœibtE¼°—¶±õÜÞ=åw´å¿…ïÕÒY~Ó’ û™œåü1’Rö°oEÇè4áZŒˆj³H¶+Êê[CÜl> òk¾®ª²-×u‹µ¦èpž™ŒâJ ‰©Ÿ†3ÿ?Áûöö¡²AÍsä©Ýß.@¹.{Ò›£š(6ôw®;¤?jõ’ò°«öTMužþ;z³ä²¶6j ôe3¤\Q/¢A¢0þݺö¹×Bq29àŒG+hvyö5:Ÿ­Š6Dk¾íb€•†KÍxDຠI½„æ:)Ñ:°¨qø9.)ÈžìÏQ¨lŸ zGäµgÝ',YøQl6UiøÑ·Þ+ W‰¢[‡l©O«¸?MNXö5ñÊZ4]9¯ì=ìÏ ÉÄ×ù¨.°Á°¸'¸‚Ú2Ü5XðÄj…:Úåz[-"¾hm(mW|ª¬·¼Ny(Ñ¡çJ๻ÅÎV.«­Ý®ke&ýÍ—¸ü€Až^”ÐtÖÏK[-~lñce‹vÛØUÈ~œ\_âo·´8]Oá@ í+†î÷øë), õ…a}9”nI´¬ØU† ޶½‹æ-wQ®f+Spe÷Ô“W™»ÐCvTßRav·8C¨RßîÅe´ŠñÝ @ùÕX7ÖÙÊÎ;—iîkÛúºaq—¡Bטˆz+8¯-¼ƒ5Ë)¼.ëÅÚa¼Fˆ®†ù— €¿Ã57[üŠ+&Þ ¼ÙLÞ‡Cg‰0œ0pˆ×Å0åhú jZê:©ÿúÀ„„»¾J׎ò 2¥Y<o·Z¸¹k_üuânÄ|ÌËtMQ·Ÿ mZû{ÕwsŠ>w³ …HÖXÞ(f LcvÁD[¬‚d¯Ó¤78Q´Ç{-Ç”n2\ å림*ë¢rO"ã7nAáe*ðÝÃÛÙ‚ ÅÀùιiKÈÛ©T4yÔ°ÜØ9˜Ú5[O§»È$ÕŠFɳg•#„Þ5ÚÔ;²EdÁ·é•Ì16>JvvŸjà±jxÎÍ;îmîÏà­Ýïê'—!Â\¥ÝzǨf‹ÈçU™§3ÇÐå„¥aCe7 $‘H0[^ÕÐ ½°*,^v¶Ù©»+ðˆ’Š¡Þ¡\eôxÓ²È\ªÌO4i½eþF¾mG½†CJˆ8àðÐ9Žó*]­ÛG­­Û²+ñ€SàYü]†‰£á{w¹5i8¦löt}%èÃsû\ ÂÎȲÂñŸöàHläøؘ‡ÝMW$†––˜kk¬>A‹ÄÂÓ—å@P.íkÚ½‹9p6ËÃÃÿ k‰G}éßÿ¨î¶ endstream endobj 1610 0 obj << /Length 1591 /Filter /FlateDecode >> stream xÚÅWÝsÓ8Ï_áá圙FèÓ’˜ãî€Òæ dxÜDm ‰]l‡^‡þVZ9±—r7ÌÜ´“¬V+ío?´»y:Ÿ<<"a”XjY2¿LŒ B˜DËŒh¡“ù2yŸf„ÛéLJ™>;=›~œ¿š<ŸO¾LXBá%Lhbž±"K›Éû4YÂæ«„aMrD7‰ :“@­“·“7“§Çê™dD6ÔÏ)£#j3M$W?G­f„;TûÖ(ËŒaǪ9çÄ🢙ó CÍožz¥ÉŒIA¸TÉŒS¢$Ã]„™0"=ß–ž)Çõ¶\ºz}[”W¸v_§‚§®ôŸ-J%n­]¾Œr2ýäÚ‘M€@=@+Q÷S—ošG~çáS}C¤"R(r(Ï¢”éKÍ€äY'u=Aá+HùFµCõÏKW_nAжC§ %ôl" 40™_ÊôO÷nTk¼d¨õoêS›èœQš“Œ³† 4{$ó)ºWeiÞÖU‰ 0€ °1<ñNÄ£bb^µk0d/Ouù¹{’žË2H-m}z›À¿ßþ¼›ur³ž`ÈСU‡×Oc§œ,áXïF·úŠ£Ô‘âÑR”)F2Ý™ÞæíöŽ„jÝyÿÝ”1–>ùëåé”›ô‰wÿüùéx¢ ¢”†üɶ]Uu§ÐwHF ¼ÅÄè.Ù˜Äd‡é…+—uñCþ¢šÎ™kWc:4$¿Þ½“Õ‘Ÿ-ƒº “Œq8Âîq”›õÇB|p*E´dµúÇÂÕ%Yx‡!âÖBLû€F…ŽÐ m”A™!šb4tœibu E”h|“†Ð@ˆh"–-ø]´ÏkX`^«½­ ò=Þït?J} ¦€ì¾¤QÍ 9<·„æTÞ; j;ÀÃlÀM <]ÅÅÞ´aä‘WwÎUYa îw˜ÂX˜Oâ\²©š‹\n(§aN‚Ò(T„¡ëúo¬r>½BÖ¾NAcÌ`P×þ7‘Ç›áÓû†wi…ç¾u¿þNß?\ endstream endobj 1614 0 obj << /Length 1228 /Filter /FlateDecode >> stream xÚ­VKoÜ6¾ï¯ÐQ d¾$Š=µc»HP¤½ð%ÉA^q½lv%W¢ìùór(íÃ2ÚÅv43ä|óæùrööJˆ„Q¢©fÉr‚Q$JæD •,«äsšAç )eúîâjþuùav¹œý5c …K˜P¤`xF‹Ûú>j=Îݹ`©CVY—ÛçÎvÁML(‰·Ÿ›r×ýä%o¯XvˆWfDŠ ôƒÞÊó¨Uj-€äù õ0_@Èà/hûÉ%ÕÇæ/½OÖL#È@¬2Ê2JèðJˆ4ÐÀdá[¹<Ë#¹r]ìåör<þ«¹DA£þõQníÎGš§nÒÅIÎÙà&2"YÎ1WYž–®mj1¦´|м)TñfD•áý7®tý+¹„*5¹3ÆÒ³ßÞ_Ìy‘žy$ËË‹éœ ’eòØû³Þmšv0(‹<'…ô,H¡†¼15… ÉÓµ]y0ß0WÖl«©û3NÙ »ïW M©“œC#A\ _‰Nˆâo£ÚbÐ[(†–=xr]0Ú‚Càýò°ñˆŸ;Ò'#¦êOáðLCË«C84ŠÀ Z/À»ÎsF(HÀØÉ¬1¥Hž«˜†8G®ÍÚ´¦^™W3'`€ýxæÆ²þØ8ƒé'Ú d€+q¬£¬2®´Ûÿ½ÀW¼ŽïaÊ…œHöóm*’b(>ž.X’ NçÉr§>½»ð1a©­ç\¥Î´åÊÙ¦î[:üÇOu¤@VWH0SÂ"ÈûÃ×^Ù:»Úš…OÖm&ÃñIV„z„oõ… ç5Oþ7a;v⣈g·Cݦé±uG» ®Ëý9Ëì‡swó8`â¨3 §såÝvÎ<Ÿ¥o2ÞRÃT’ñ¢÷¾x¸NÝÆ†8Ðýº‹|ƒloQ¥fSú<<Ú¦Ey³F1êãh¡Â7 i®öwȲ5žÙ”m…Ör‹‡@òÐ6†:KÞ“ÛÈ k˜è¢8qK$—"æ¥Ùnm7ŠŽ…¢}¡!©/…7ÈÒÄž…¥ZŒèY°p`¿Ü⇷v®¯¬© ¦d–¥Ë8%n<¼p4†ö‘S•®]:ñ(‡W‘ÐèQÙ†C4ð¯5]¿uH‡$ÀLóh³ýz„8† ‚ËaC}ƒ  ž6¸>6ñ34G‡Xiíºiw¦BÞŸ}-uÈÒµ7ƒ a¡o° ==‚Qã®>02¸~Z¤º ÞOÁ÷.¬ŠÞÛ”<­ÿõTû°ç|;ßo Û¦’PØ®¹oáæ¿EŠ^ƒ`ßCð±jƒP'±}*ä¯ÛfÍZ˜Â”½>T˜Œã#P%ÚÙù§ôa/Î ïa[µöÁa'cs…´Ù-ôrlpß7cT¾¶‡‰'ïʶfåšöÙlœZåŸ!Þ= F{Èßñ ÊñÜ÷aûþ6Wðý endstream endobj 1622 0 obj << /Length 1273 /Filter /FlateDecode >> stream xÚ­W[oÛ6~÷¯Ð#M o"Å>­YÚ¡E‹mÑ hû ØL"Ô–2IN[ôÏï‡t%[ÙV hÑäÇs¾såÉùjqö\ÊŒ3j™åÙê&+%•²ÌŒÒÔH“­6Ù;¢©äË\)E.–9'lùaõrñlµø{Á3ÿxÆ…¡\êpÍÂw½[¼ûÀ² ¾Ì•¶Ì>è.“Ôh«mv¹øsq~Ê€KXO Ææ”QòÇ(ÕŒÌLÕ^*U2£ my—$ý‚ƒ^Íw@?‡ÿþøã–'\>ÎP8‡®W'Z…0a,uFÔé<t~ð*³œÃžf%È×(Žg«¥Õ¤«šþa)q]ï–¹,Ùµ;×ø­a¿ó;’´7øî"ä _ÃG¶o› †Q%­Wœê8wÕ®âOÏžóbLW€.À€{Ï„Ž¨rŒÊa)tBÝCô´O@N͇œóÔ?k\w[»yAÛÜfŒ²ŸÁ()IXÃ&÷?ùͽÕ…Lµ~¾Žq]<9KÀªO.*öDVKð®{XšTCî Þì„ðÀkŽN‰tŠ˜ú÷uçzŒØ‹‹'ÇIÈ• §µ¦…±¦~Âå#`HéQÇâ…T|ǪKH¸6’8“ÿ u¢x¶Ûé‚Sm’éC5ìÉ?I™1Éùo—œsòôÕ‹‹¥(ÉSïþÕ³‹ù<“´(Ô4âO÷Ã]Û%E€I;¢¥òe,iiR®q3Ç —‰ÓsÏêó#ý²v·®æThCMyÈä»S7+ªt¦¹€üñ#,áæâ;4Þx–´G‚¿¬]×е÷ã Q´c&sýA'<¦6‹Ò`¼ÇDêÙˆ º?Â޸׹fí˜ÔGWþ_Èþ¸óféé+7 Ô¿³9/¸üVÙðüñÔU$VäßÃcy”üýysñû‹Ó"—%eÐn¡ùSQþK‘G\>Î%Á‘¸ Î9ãúì’IÃr¡­ô£¹ŒiQæü4ÊÄ‘¶Ù„@Ô ©©Ç¬¥†‰¬à†*hÉßᱪû«~˜iŒåàú$ðñƈ¸|œmŒSqX«î>wŸÏÀK,¾€Óù€¡›¿ žXŒÙ‘þÙþ¨,ô/Õã‹mfㆪÞþðrèÚ%Dlöë¡nãㆠø^ý„¯ZÕ,9Ùàú*dz[W¡’êæOêÆÿZ<ÇAnëÖ~Ž:’ÞIì=UÓ¸- ƒ §Œ‹è®äˆ¼IÙj<_»ªßwÎ?ÖÂÁKa‘'Oº€c VKß8•ºÚâþºkû—½;ÊÉMÛ¡¤+ü}|¦¥°}êFª(©Š2öÍH"Rb¤úd×±Y~à†Í`րØ”†;‡;oå~ ª°–¬pªdS ¢>á¥xgÝn“›ÁËÎ/6xríq_p‡CŽƒ ˆs~ rê‘gP “¿t~ZÚÕÛê:N’¶TÉ2èïªÈ/¨…?‚e0Çó‘%¿Ïzã‚×½[»˜=–pk þ¶ÀŸU³A̺í`4ò4-dOÜÄ$ó(üúÔ³dp·]5¸ îm÷»ºiûzYŠ{’”QËýu¬&‘j ÉV)èVâÅ-µELÃ÷,=\®ÀÐS>WucwA¯¥Õ©¿bº.Ì>Ö?ô1W¾b=ƒ%ô5µ¢*@S endstream endobj 1632 0 obj << /Length 1362 /Filter /FlateDecode >> stream xÚ­W[oÛ6~÷¯Ð£T ï”X§CŠ Ý#–öAµ™X˜#y’œ6èŸßáÍ‘d¹m°"AH‘Ïùxn<9_ÌNÞ0Œrœ“hqe 1–EŠK¤˜Š«è6–ˆÑ$åœÇó$%1N>.ÞÎ.³g$ÂðC"B"LÚc9ŒË‡ÙíG­`óm„˳賅>D )Éa¶‰®gÌÎó!Š1™P*ÂÙÏQ*1X Õ^s©8§.Óø60ú)½’ìÏ€~ ¿fûŸ=, ¸´œ 0çL/´Ò|À„a¿Õ×éQßÓ9fu~4*£”ÀšÄÈÓpâöI.cý˜H]SWIÊ2¿ßÙ ‹/ݰ*?`Ât£«„Ѹ+‹Ãýyò·|‚Æu[ûs˦nÛ´ÕË® 2‹ªØ<µekÉ`ÄYn(sëâ¡=5»'oˆè_Š @ °ƒÅ}ÀTzTÖG¥0¥2 ¶àc©`°È¡‘ òÁH#õ•nîK=Í@´íÀiŒ~7c,¶sX$æ“Ç¿ê›I­^ÈPë—­µœnÊoÜIŠ"II 0ÇN±!²HÀÜà@!÷dÁ!–×/ÒÑ>A¶e£[ïúùé8T §ˆá¤”H¨üh‚\ÚÚ`^j,ÎR):VAÈÀ±žÄ‰, ¨Å“5Q ‚¤ WïŠnw$þÂJãß$„øìêržÐ,>3æ_\̧ãŒ!!øÐãg»n]7A8`P´PÆM²3”©kDMqrÓÀéªhZçï뺪tÕ.ªâuBbm |YMiË dŸV냺„3D€†$ŽãÕÐãÒpÂÙcq{Þè™r¯uYý²ÔM…Üç˜c IBú¤&  ( ÀXŽ8͇”ÊIORxšÌܹÆCßë;S—ú¨7NGa<<^.í'‹ãPœKR½Mõ—0„>Ò1¸1Ïú¦ äQ &«$Ï¡ŠqO`߬tW”›Ÿø|à Ë&k¹Ì¡,C ?À9ÛapFÌ% ÞHøÛµfÆŸËnívWzY˜§Ö}wµC€ZÞ´[¼×ðÆ®#1›½íꪅWœ eФ]Ýn?;°¬7›²¼×Wt“×õüyÆÞ\)$ Ú-ÿía›k ʤÃ)ÁÆm.‡Î7´¹dÔæ›ž½¬`3cëö;†˜A^°¡¡_Û¾Œô|¥„Ö‹#¥˜ƒÀëêßâÛ<Ëü‘.¦ÛUöÄoºhw6­ ´ÎÎâúΫÞ'ÓWš'Êö–4½%l»Þ&Ð[Âaß[·í-Ýô¹Á„¢Z™‰Š­ÝZxù†VÛ¿&¹€59ä¼²ž„> stream xÚ­WÛnÛF}×Wð‘ÂõÞw híÈ)ø!©… €ëZZ[l%J%)'i~¾³7Y”ÖnLz÷pæÌ}r1›œ½e,#U¸"Ùì>Ó 1¦3Å%RLe³Ev“K8*JÎy>-J’ãâvö~r9›ü=!†’ªaÒ}VÁs¾žÜÜâl—ï3ŒX¥³ÏºÎR’ÃÛ*»ž|œ\œ2 ÞÇ(Æ<¡T„³ÿG©ÄH`5V{-ªŠR,ÁèŠæ7‘AÔO è•dÿ èâðÏ^ÿµ‡•WŽÅy×Ë­´1a8\ê ¨ÿÒy$Ìé¼µ*³’À‘È×pâï~ÛµEÉ4ËßÁƒºßšçšÁŸÖÿ4ëÎwò^ù£…™oºÎ¬êÁæN³ ß×m½úÚ7½Ó…­6 Ž’ S¯û×öæì-‡|¹@œ À;ܘʀ҇¨^©Œ¨-è• 9¶’ì¯Æê/[Ó=4&Í@´íÀ×#ü ¬b,wïpHìŸ<ÿÕ|Jj BÆZ¿lKM׬Mk8$ (Š$%‘À{ŖȬ¿šÇBȼ:çhàà#êx¥è‘žŽ¹¿m:Ó‡XO_g!á1pœ” U=›ûW]Ž:ç(Äê;V >æðÙÄDDÔ‰âd»“‚ ©¢éC=ìžÉ?†°RÑùŸ BH~~õnZPŸ[÷Ï.§éŽø9Tɦ‹Š £~„4·uÌV1׈Jqò¯‘ÓUÝõ>Þ×›¶5m?/¨Ê—É«¿6¥­"H}Y-OZÖˆ I(|BžotWÁ>ç”®€7ê÷”u¾4MûËÜt-ò“bŒ",å!©DDÔ ¥±À_Hk>¦Ô$#I…m‡2„&¶Eso:ÓÎͳÑd0FŸ|_8?,­ñ_{dç¯=ÈOâ+3 (vþÊ×:¥öä©#ÀÜOU?æTE?žbu÷{ó˜èÂEF¢ú¥Žàqå0ÙÆâ|fšmi¾œaŽ¡ˆðéd„æ Óá@pr2zÔ‰þdcD!­z<üf¨›ÕwÄúGÜúñÍÔGZ8”,̈üй M|»½«;ìÆLWÏ«c6EJiD ÍÒBűx²PÑJÁ\â™ÀÐ );^¨8ìXq¡‚ࣅj<ƒ£,^AçãÁ}Ê ©}ëùÉA*‰÷¹ LÍ.+èÙ`Í>|vŒàʽÇà9,q» 86î&ö¨}X…Û»¢´N,â³ó¿9ït¾±Âö,è«®±öCjÙ7+¥ bÌ9l$Ô†¥Rدˆk» ¥Bœ~NfΓ78XÁH‰†…,¸aY[Ö>£F–FóÖ¦îwYøE UúÈ˰«(żØ]ß´ðÁ+Dú  &Ì|ØtþÔyNc¾ÂÑ|³Z5}\Ù…Ð>C°á‚íÎfÖ¥ahÙ›ý¶ènýSæwu¼Ý‘Ûv0@Úù Ø>ÚhŸ@Gv± iØn]‹Æo°L¸âÓ±øüQ_¯·.M˜u͇»è{xçò »zÛ,šÁµnïÌXîzw•Ï–AÚ|œµpRwA®u§•Ü­AeÞ uïœ àûÍ®KíÏ‹:³É[‘HL»ÈHò´"¿˜‰ú¥LÄHÙ^óÛ÷%ØDÁ U ˜C[2Éÿ¶9ð7_ðªò¦}‹Mé_CY endstream endobj 1542 0 obj << /Type /ObjStm /N 100 /First 972 /Length 1981 /Filter /FlateDecode >> stream xÚíZßoÛ8~÷_ÁÇ.¡øsH.z{Ù½¢wìЦ÷TôÁ±•XˆW d»Hﯿo(Ë›Ô麲‹Û{$RœáÌ|ß”¬¶B «°Nho£ ˆ—„±†+lâç„G_^P HDû‘<úi/´Jqd5ÐÝãL÷öAhylç4K<)–ðD0|é1H$‡Ñ‚0J%Áå6–Bá!/ŒN©{ÜXÒ“Æ—Œ0”çCV˜<Á„’á™F>·9HÙ"<ä{QXãk€f‡§¬A£˜?M*p–ò "¤`=ßcG)žipÂ)“ïyát§„³–g‚p.4„(YØ k6Âu. ’ãÑ’.E¾=G€Ç$¼ÉsˆAx§Ù&¨ï²ùÚ‘Å„`UnK²gz¥<‡d©ì{„—t`_&„Ö:Ö•H‹° 1%2°1%HÜ %Ì€îEŽ3)-p+°dDИ)[LÀŒ¿`Ù3¤,$§XJ"8NØ ‚‡&Í® sf¯‡ã¾!™<>KžÇ@F•øžÖ"tqˆP´C„¢M<œa{¸Ñã÷¼ˆ”5Á¢•Á `dLH&HQ$­„údˆÇµ"±õ&$çÙnhH $«E¢ÜOQC†*kÅR^Aœ§•Nù.œ¬:K*^±äXâô&ÎÅ ‘{‡,籊&ëÌëúB³îìåkãíèåËQñJ¼Š0ýV¯«å?àJ#“×F?þø¥Ž$eÓãuS/ÅË—hEv¦¾gÖãº+Ž¢FÎvWŒüÌ7}?ö¼JÖmÙjÛ·¦‰~|¸]›õ )Þ´Íä¢\Š÷¢xóêµ(Þ•wK±±ñݧÛ ãërTü ö–õrÁ ‘5Š·å¢Yµ“rÑqP¾÷¯rZnîÄ{î„d—°ŒN˘>@߸Š̶ëÿS]7ô}Ç‚lVfÁµà{z¡›ògæAFÅÅêr™¯©ê›QñsÓN˶3D}`s'˜¨1AT­ã6S’é#x+!>ÅO9,¢ø{ó®å‹ËêÒÇïØa©}\vFZä‘“”¡£’.ÁÁI¸ðÃgæŠßÔþçí?»Ÿ³åòö‡¢¨êÅmÕ–g³òVÖå²X”ãv2ûëí_®ªzúýMùé{¤_L^ 5‘MrLLp¨é-½-†¯2ñ×q5_6?\·ÍêöüªÏåuóq°pØ6<3¢—¨5 @iô +®Úq}#Uy]¶ËóIÙÖr27|ÈŒ/áT¡Re.ƒ³Câ6n者i¯‹ñå¢@1!Ùûežp;™Ä g’¯e‹ÏøáwìÏq›<ÌȉŽ|O¾' Ò)Ój¸%oöƒã†:8îA G…#áß߃c0’´;ŽÚH§,mÁч]p|ØãÔáH´ GrÑÔ|ج… dŸ ޤNŽðÑ`C’é~•^ÞX d½jå9¸šÌåx"W7§SŽîá2+ƒü.8>ìñÁñHké`¶ÁÔáàŒ=Óï@ñ+1A„û§ÁÄ¿›º\Ÿ<0ºÁƒEJZLs<Ìš9J“\Lf«ùÏogŸÕœ­Î.Ëv^ÕrZn%cл’ña#&ãÞ)õ#)–†¥XÜN±Ð¯ÂB¿ ýv-ôÛµõN6Ù™“&3mús·ù%pFi“Þ>üI;Á™žœO~TœÒ68S8œ©_{¤~í‘z¸&z.pÚ“§ÃyøiÕÿ 81?KÆnƒ3îgü£öž÷àxœƒ!R~ œüöð@pòkÊ E~KyðÞóI1µCŒútWßœaüþ÷÷sð³Ç-G(pÔ#yÏ3êó,ü™gGȳ´3ÏÒ7»A}ØÎAmÎA­‡§%¬9^ª€å…O¹¬‘õ2Å0$°íUUΧùàJ®®æ²œ®¶ÂºqêÃú°Ç œX‘Ù>åB† Õ|;Xë5"š²B/Ä^H/5ÉDú·å£IÒóg7;–î”—ÎEã¿éåc*„ÿüñZÄŽÌFáx5èÎ…”¦âBÙ Î %ûBéï”"Ïô¾ ÜþÜʨÎâ¡çV—·ˆêYyW(¥•2[¯;ùÛ­aô7ôº“ì#äa'Ó“‡éÉÃôäazò0ÏFþ¤É£:3 FÅ®.öïy,¶å¨·{ÐÇ/ãv!/šº.ëÅdVVõ·@!ZuF‡RˆåEd<…h”6͉Ø$bOí½¹G¶%6Lv}$Å’®…ž1lx.~ SæŸJÌF*¢}øaÎü°8?ôèëù¡/àÃùáqü9~ɳù€äÛöä endstream endobj 1652 0 obj << /Length 2145 /Filter /FlateDecode >> stream xÚ­X[oÛ8~Ï¯Ð¾ÉØˆåMl1ÛLÚNl§Í ´}Pl&Vã[$9¢~?Ф-Ér²Y$€)êèœï\yϯNž½"b”ä4gÑÕM¤BG™T$Yt5‹>ÆŠ9I¤”ñÅ$a1|¾úõäåÕÉý ‹(þXÄxF˜Píg9~§Ë“Ÿi4ÃË_#JD®£¯-é2$S«Eôþä÷“óCL`ÝÀ)U#BSHñÿª(IiÖû^I¡³”BéœÇ‚ Ÿ3ÈUl÷ ä8þíë»Yè’á„!;gúì@*Ï{HÁŒúW]™žê)™f­ÌÏVd”0ì1•ƒL#™{w¹š.¶uù0<6“Dh—õzQ4ffŸD¼™¯›õÊ­§Õº®“ÚL›r½:uÔ³òeÂTfeY4e±p´åÊJ>Õ×§DÊ:µÒ7ŽFÒ(#yF[EÒT-Qøi©~òœúæ„gØÙ“}¢)½-–Ë æTL‚JZÝñ¡ttç¦XÖgŽ'K»<%À‰¸O”+O¥»T –\íUH˜Ê‚&}ŒH1x#2ÕmiƤ „4º×(×”Pkk!âvÝj‡G¿6F¥z&}©¨õqU.½«Fdœ(΀ ê[ WxÕßN-¬»…ù6&!c„ª]Í­œ¡>ñH!säýQ{º¤C8æà»Vha±Âhäz;a1Ðf-ÚNMµ"-øXƒÆÐ:·Dz QâÅüx)½ø×åá¹'4¢4¤-RO—tÇbÀ®•‹÷Œ2õì Ùx›,LsM¬•ø×‡¡Ýp¼t„Ɔ£:ÀÔ7’.£<’*Ç‘øC+ªÿ”#­‚ – · Ž.é޶ }v.mÍ&1¾HÒ 1ö¯óÒŸ–‰Àôz³®Üâí·f^n­ÜÏÒ­»°üíýË7Ï|óµlæáý¿Ïݪ\ÍÊ©ñŸ1‰Š(©Ž™ö ž·‹Ò…Ò„§™#þÍõ¶2vBugÕõ3ZgÒ´/ݤi#ÔN¥ŽÔ¦nßi‹Ef\XÏtųí ÎlIÛ¸¬üfP‡ñ:)~Sáßgd{"‹0¥c^° CM"–iô¡²%CÂý¥$Úñ ø&QWiÛwÛ+…žÖÏÊH+å”ÅäˆÁóƒÛö¡‡ífnÜÖÅ'*2Ô68oííU4š¶ãj[ÝjY.ÐÏv}Ý€Ñ4ݦ¶ãìârf*2Ì2¶\¦¼†Ž5wدZy¹êxõ¦X¹UƒvªvTÕžt¹ñZ¸ .¾ JÝúu‹Ùêž§v"q»ó²Ø¤•W›íl]›rV6í±üX€H´•𰻬ÀD)XçFƒ±µgÍ®Geƒ†Nî&ˆ ‹`Xi;s:@GÇØ}RŠÝÆQ÷‹³'Ĥ4mǰÞG¹s³­ôƒÄä¶+ñ'Òå>éBa©zn½÷;ŠÊøÝjPãylü›¶TØ¿ÿ|áVm ÆÂ…¬ýzµ*ç%七{,ÚÿøöØùb€kôþ}MüIؚƛþ~[TwÉíb»^= ¨&Êsøy½Ü4á꩞Mcªru랟².Ó ½IÖcxOwÊ r ŠïoÂŽÚ&Kls$pwšqž¥ûªí¯õ†ÍA»é ¡Œ­Òní,é[ݶÂ^àºßbQ¯½©Ìª.{êØóiÖÆ=' N5{•‘…&éíÅ+Ûqê«%åªôç1ê©å–U1+Cüãñ~X·‹í­ÌÒ.–ïph/ •ËÚ}âRÐrÝ©àj&¶Zìo€ÆÛEc¢Û–pÂéÐLù[í±‚©àÓÁý4çûé”Hm¯tIƃŸŽÌ.™ ¨=Y½iÝŠRSm—¡´—‡¶ighô|ÓþÝ¢š:·|çþ©¨ï endstream endobj 1662 0 obj << /Length 1646 /Filter /FlateDecode >> stream xÚ­XÛnÛF}÷W°onö~  v¤ Š¢M„ Íå‘ÖkÝJRnŒü|g¹»2I­œ& lXy8söÌììŒÏ¦'ž1–Œ 6$›^dš!Æt¦¸DŠ©l:ÏÞç11)8çùù¤ 9ž|œ¾ök$ÈH5u5ݾ¹ï¿}‚®ÝÅßíÏÁ¾ Ä E„jo+î¦2Ì¥ÐÃÖiíe]¶6ìºånU­7K h <®Ë!x†“yeŒÓ}Ü“3síepoëâSªœkÄa#Aý§ûG¯²„yR$ÇÄî¿*EÏòú[G8ƒzÄpØ®_<'þgð%fÇ¿¡¢¾ endstream endobj 1669 0 obj << /Length 1390 /Filter /FlateDecode >> stream xÚ­W[Ô6~Ÿ_‘¾%jc|¿ P ]@ Z©0â¡,aÆ»›2“™&J˟ﱇ$ãЮ6^ûøœïÜ®Ww3–Œ 6$[_eš!Æt¦¸DŠ©l½Í^ç1Y”œóü¢(IŽ‹7ëg«GëÕß+’aø!¡ &ý5ßÍ~õú ζpø,ÈýãI÷CJrXí²—«?VÏë9бN@ÂÙ÷*1XÍž”Z,(mhþ:"ˆò)¹’Œw@>‡_wün$+#]9!L@X² ¦7gR©™!fx8šÊ¨¾$sÁÌË|ãDf%=" ðÓpÎ~³UwjíÞ6£y_”L³üpå¾<ïolØh«¾>„eW_ï+5—XøÀrfyÁ9 `{¥Ìï_b"1Ç™BFáÁDHÞ4ÂòKŒÙÀu¦¨%iVN(L f¢ì&ʼnÏc ùËöhBîx½nÓI‚5¿³B1ef 9ÁSŒQD0w.zŽÚjßÝ ¬ˆ˜²âq&"¾KLå@¥§T%,©ŒTGp¡TðI@ƒÊAdæâ5¶½®mB6"€Ûø'Ær¿öÚÁ¿<b_%¥LæR?PLÛÖ1D“E’’àÁȺ€ µï !óªoMÀðâÔ­~g`àˆ¡€ëÖv!ž^Ü]¦2á10œ„xàÝÛ H¤+'„>™çJ-Ù…2”°¥h°1‡kމ*©Î'{†IUï«þtKü1„Õ˜¯ BHþàùÓ‹‚êü3ÿúÑE:ÎbæNýÍ¡‚À³¢Ž4wÅ!­b¬•–ӓú´ó <þÜ6ÿÕ)îåp'°'_Ãÿqá‹dó.ˆxYÛkÛö)!R!¥ÇL¹9w#G\fB„Ùíñ¨ÊOd©è™±òâ®DÔt¿llÛ sÒ ªt#Õ‘ÍÄ\]ª•¥)Š: ÔÕ»©å_Ø+ÛÚfco&ù7ÄÂ=–öÃ,±Æ‚¦±(D[Àñܼµ}Uï¾”¾Ô1…["N¾º¬§Paè&#£’hœ/G.v ‘“Î&Ö¾¯éYû³Q@ÄCSÓ3V”~†´HœôÂ4æ…ÂHrq%¾ë½‡PrB} w+>ì#qXA¯Aáìwk·]ØÜWÝpasn¸¾à¾;{ìÚåǪnÃnߪ *ïþêmØ:ÞÜ×¶Ç$!W0³€µ«›ëÓ®jëÞ%Ü¿®^ ÝqÌaëÐÙ6lô7ÕМ”HúŠº28†Î=¸®t¾HÍ|ÁâÊ8Ì3Á6É’ ¦ÁöŸèî%Bø‘S¦7²³Pšè±¡‡pèêJ Føµ=8Ë3&òÎn`¤lºÐŽ«a· Ÿ«SãOÃ!L£)ȱTÁë‚s5tLF×nºª!5Né8ÕÂÄ,¡áÌxûá@†á˜¹)¹µ6ìílµG‡ý—^­fû9 ªÀÔ8—Ò| 3 ÷ÒÀ%È "7ÑÔ<š:ìûI~€Ud”“}È Òðp˜šö{Uª9ƒùl»]ÝÅ ñÙ(nÂø˜TH 5á¼xYºqÊ  2œ/_–¢>¾,"dñ²\'òŠVq2»”6©Q™ûAx{Èà˜Kyn_ýþ{[uvHCòWCø×«½½×EšÝi_7‡.“˜&þ §lOá ñhüäSGh˜]½MdÑJ<ƒñ‚’³ >í`(=Î…$9:Â+fˆ +4> stream xÚ­XÛnÜ6}÷W¨oÚ6by¿I[»NŠE&Fäò ïÒ¶’µÖ‘´Nƒü|‡"%‹Zîº)‚-Μ¹p8³'gG??e,#lHvv‘i†Ó™â)¦²³Uö6—ˆ©EÁ9ÏOÉñâýÙó£'gGŸŽH†áÉUˆ0Ùo3ð\^½}³||žaÄŒÎ>÷ÐëŒ!%9¬ÖÙË£¿Nvë˜ÅX'” €pö}”JŒV±Ú—JÎ)ØN Íß ý”€^IÆ= ˆÃ÷ùã+\1&(ÌÅõÞÑJMÄ„áðiª3 îÓ9Öë|ïTRN‘‘Dƒ§8ñÐ7‹Bæßa"üŽ3…ŒÂÁ ¤ßa<üÆ,“$묘 Jq 4 0°‡¼NI"1ÉȲٴmÑÚeWmêEÁ4ËÛ«òV4·Ü ž¯* Ïlcë¼íªríU¤  8jTp“0["!ø I!=ê×´ÍØÐl‚z‡N©äH+3(|“eÐ †8JIÄ)s¡(÷ŸOlyÝ>ôRˆˆôÄ™¸Ce@é(`Iåý‘jpCÌ ä–‰Õ?©msYÙ4@Ðvg6#ìÅXÞ¯{ëàOžÿa_%µ!±ÖBÌ›ê:Ä9I@Q$)œb¯Ø9[@JØÛ…yÙ5}2‡ÛÚCèàõ:A¤§#B]¹©Ûú4{vúp~ §ˆã¤„T‚Ðï«+®˜û35çëJ¨lsÕàcÛ&Åe@í(N^%R@’«Áô®ì¶{ò!¬ÔàüW BH~üç³ÓÕù±sÿÙ“Ótž18q<Žøñ¶»Ú4ƒ"@Të‘æ®F28YC®•âä—§ãzõÅÇûd»t´>®í—”E–c]ízYA¡™„‚f hì pÀ`*À3q½ÒÒq§¡óí‚äÀVõl[Ú¦F=ùZÔ¸4Í”Vêf ¨R± ¨aˆ“ª|a"ðM€ >ä[BðÔÙÔ”õG‡—•½´M—Чh} q™ ¨ç˜ˆ@*î`IÿOEõê.EÔzv}®tB#åq™“˜ù’À¶)‹*y\(œ‘Èó/ì…»þ–vïqa’ÿãR6¯«ÛDup])(öQ}¨ºy\1&«[,®×ŒdÖ¾Ùˆ”Còj¨™©úP;ª“õM…8Ü8Þ—ÛÐg¬lWVëïìÑS72ÄÛYC 6€|óÅžà­áÔŽ'ꇔ-6 ä¤9Pã}K¨£F/£ xÂ÷ƒ:’Ei,KOEAw‰÷øP¹+8ÒÚ—¶kýM^vþ 12ÜúÐ_ ” % Á ÿ­xÁJ©¯%!—®Cû5ìûËÚ0 Zç×eVËmç®Ípϵ½é†õMY5~Õmü³\P“ߺ격Vtµ7´U}¹]—MÕ9Ü "‡†Š“¯{ù¦µƒÄ«2lâ8Ý` Î\lÉ#بÀаÏÄs6¬ïˆYèu­Mʇ›EËl‚{tS¹¡Dñ˜ õi0Ò=­¡R̃†ð‚6L0hîPxÙã~w# ¿DäaŽ•ÃÓ?.¶u˜28áùæâÿ(3}*FŠn’εke¶ŠF‰Y‚ß™@ â\Å¢Mϱ»²~Ñg‹u³ü²Û4žòyH†Á„ª^®·muë:‡° z ¿¨ê`ô¦ùìD•MøÐØKççWÐoFÇB5–4¼ÔžÔݸ3+ŽÃ‰¨Š·|H9ºF6–¿d7&kRR„œvk¿ìI¹Ñw‹té?¥F 8¡Òsæ€o ¸žU4BÜAaîe ]¸23 ¬¯uÒ†a°’}pݳÏ·XU…]CG澕)ëÚ®Ç-¬gŒB$’Ö¯‹j¿áŒ«þΉ´/7ëuÕúÃì (»C©È±«2Œ®ä»q}4 þAÊ© 2Â!çf?Hq¨jÃRдÙR±•£¬¶3¶½ÏØ^3™ûØÛH‘~Ã,Ïí«þ¯ó²µ«¨`u»ÂÍC “nF_9$Ag/›²ƒíý·õöºª7­»itþÅã\íqß\Ñö«‹óD⻑’®øÇ"œè `âÔã”H’ƒ¤š&¢|¥×»±Aõ¥pû/_='Í<Û¯CPÿwA·ù endstream endobj 1689 0 obj << /Length 1493 /Filter /FlateDecode >> stream xÚ­W[oÛ6~÷¯Ð£ T,ï [²´]‹[[£ÐæA±™D«o“d·AÿüoŠdÓ)² jŠüxÎw.<<<ŸMž¾`,#i¬I6»ÎJ†+3Å%RLe³Eö1—ˆ•Ó‚sž_L ’ãéåìõäùlòÏ„dþ‘ŒP…“n›†ßùjòñg X|aÄt™}qÐUÆ’FËìýäíäü˜a0 — ¥ œý?J%F«±Ú÷JJ*£5Í?FQ?% W’~èâðg—?÷°"âŠ0AáPœ£ È‘VªGLAKCõ=œÎK«2+Ì©A¸†¿ö»©Ú]cVf=e4ï¦+Y¾¹¶¿Ø¿Û­ýàüP÷?¬.êO˜0Ó„­uµô ¿M3o6më±­™wõfÝ:&ØrÊÜS87Õª}fWž¾ bh ˆ3x‡û„© ¨rˆ*`HeDm!¸RÁC޽)ÞÑcõÏצ¹©Mš hëÀî#ü¬b,wc˜$ö“ç/͇¤Ö d¬õëÖùÒ4uô}’€¢HR ¸€€bKd6›ýTȼêšÍÚsð¡u¼Rt‚HOG„“±­Ó† _<;ÌQÂ)bà8)%JŸ<W €.KÇFŠó'#œÍCÕàcÛÇ#¢Ž'‹¡IMïªnw"ÿÂJEç˜Bò³7¯.¦´ÌϬûgÏ/ÒyÆ|ñ³]w»i¢"À¨Z¡’ÛSÎP©b®•â䇑ÓÙzqçã}¾›[ZŸ—æ.¥A„eŸG·Ç^VP/h& …-ät€®S>ç”V–+8 ]í¦$¶Ê±ýenš5rähQM ìë!­Tm ¨#RcPÍ%jLªµÖØà#@‚—•¥¾¯Ã¹ûÍØ+µýl'Mw›ŒÜ^ŠŽ…†\æ<¥F˜E€÷¸T$ÆÂœÆ›ÈÝšžh• ä'8ø^S2 tÈç0%R„!Ÿ:y†(ˆ)=É;sm/œ¹9yŽô?GÞZ7ܵèÙ£7¦ëÁä–Ш'±[9ÔVÿ!i.þxu\dY .™ q¸/N>àŠ0ùqN/¬‚ÙÓh/˜­EÞÚTì9ÕCV'‚oQGœÆÓ)L3nO/ã°ªù«Þ'î% ÖôOßKW €É{i,ÎiÆ%¦ˆrŒ÷ìÈ7.)‡êS¾ ¨#åÉ»‰K wSHÞ¾ñZ˜®ª—?œô0*£ë`Z’q°¹„Žq¶‚}o½°UL殈í§TçМ@¦t­Ÿ¯º$ƒþaÐñB|C(9™ÛD£ŽÀ‚9\YÒÃFŸCï}9hôÇÝ_/+Úaío¿c<…t·ˆ‘ñ?y‰–®ËR¶ŸC~î,ÕwöY ÒZ……þ“À i…}3‰xYÂÓE‹Z+¸4¼;éí±B4@~þŽ% ,‘ZŒ•Ïwç]·Þ’m³¹ª®–w~vm ~¶UsçÛê©_énŸ[nl쿸»¡íüœíëpCŸPö¹‡|膑}Ö ¶‡KP=`$ •M³{ØU¼c½YÜf£û¡- ¸õ–V> stream xÚ½Û’Û¶õ}¿‚}éPc Á„›´µ»NêŒ3uã­'3ޏw—¶$®IÊîÖ?ßP"(H›M=8³ppîWðÙÅÙ7ß ‘1J,µ,»¸Ê A„(2#51ÂdËìm®‰°³¹”2?ŸÍYNgï.~<{~qöñŒeþcã†0¡ý5 ë³·ïh¶„Ã3 ׋ì³]g‚-aµÊ^ŸýóìÙ!LÀ:f€SZ$ˆ*‘âëÕ”(jb²¯aVqB[ž¿8èst5ÛÝúÀ8üsÇv`ón>L°0EçY0ü€*·§€Œ†£1ÍuÍ 2Oó#™Íì1m¨F2<{Ñ5«²¯–é12iˆè{È_)S*Ö4#‚éêÑl. ‘¿¯z·ù¢mºnÞU‹¾n6Ýc<]Ö€LTmµ™ ž÷u¹Bàz“bƒYF¬5…[„‘43ÄêA4QJ„D+PI²Ê 72ýJMŠN cï“Ü…ˆÜ)†Ò]5-Šói¦e^¶u³íR4 #J³áþÝÝR®ËzÓ¡)…–„ÂÙ`%?«Êu÷Ñ0I£ˆjÏ)תCÍaÉõ^Ís¦Í í˜-Hàe6&ÿ|Sµ×u•æ@ PÛëŠÚ‚êüAˆÜ¯ƒ…̨Þ$©$1Õ£àDU[¯ƒ;%0œh¾Sö9EÂŽ‘‹جú4S:/û¶Ù ?o7Â=_)vJdG… s[·U‡~ðâüÉ4Ö™äD€â´;–a¸ùÐG{,Ôf˜ã¦¤AÇ®0&ÒÌu@8YT´‚P2ƒè}ÙoøŸ ÔìøÍŒ1–?}ùâ|Æ‹ü©SÿÅóó´Ÿ l[üé¶¿iÚ Êú¤.[ ˆß]ðšO¸xzºYÞ¡½ŸmŽ­«ê.E‚–îƒöæPËò.Ï4¤ ¹é¨Ü|˜2ð'Z:^Aiär;c9pk<·]Tí†xæØâB…µc¶R5&@0«€[A831Su¨1p¦@´{ˆ ~(ëŸêw¯\kÒ}p›U“´tF·…_–2S…%T7E›ïáR–ˆ‘yŠ×Çä¦Ú1º3ƒI™ü¼§”´Mù™¡ Œ0æggØú}6øÞùU[n>  ^×ÕuÕö)ÝkpÌ¢8’H)­S'ò‚ÍGpÉ(ˆyŠWŽKÒ!ƒ']¿PDñ1')#ÐC4º´1R'‡l5ÎB?WW®ÝYTGó”ôßc±W7N껎¼¬úž<ƒ´ýJ=hõxh²§ÄæÃóäù?^–4Q€ªLºÈ—ÅqS¸ù0eë :OÎeú›÷ä6ˆ»ªúKâ„l µEZdƒÊ1"–4;Bð+ âÉPžIm¡Ú=HaeûKý)Ñ€ÿ€æ„Ç»„›“]@ŒÎS¦•„1j>ʱÖcò)ݨâÉNütpvß;¹>¿êËzõ¿»<¬ŠAw°­Ë$g~F¼X» h›3_nP5¸±y³YÝáêº\¯K\>Â?~6q‹}ó7Â;EA{%i}Ñtþ§c¶çü7´ÙÛA è ÙÖùõ=Âs]-zÄöÍNž›²]âê6(òMçÚÑAZ?š¸¯îú›:¨EC¥?‡º®Ê_ùO¯Ÿ¿üŽy5en™šWŽœ@cÒHwé_ÏpUo–õÂ7ÄÒæLº~_AOmqãÄ`¼ò‹jS^®ª¥“ˆÌæŠÒüâ¦BÐUãÿ³+«U×ãÞ¥ïܽåuèuø· ‚âo)ãªkð¤D‘&òË ãÊó¡ÞT벯)3*:HaÞ¤0p6ĪÂÖÃl ²£0E^D#ë´ö‰ ¢ .z°Å¶Çêìe…QŒ} z ýk[}Ü ²Ä_}3 :L®Vß{Â&Ø»o®[˜‰WÆÈÓ hí¤Ê„s8ePÞÐwDÞu*~˜d0wòËmJJ qöàù4‘T ÈTÀîË$.¯SînšÞ€ÜŸ.@ZL°x„ۿ௲ß]¿]ÖNÝnórÆm~‡ëÕeü°é6 V‹ÞG Eu§ý U轌±ëzU^âÑ…ßM¦ÁHVVÂä !Eà”`ѬVõ²rO‚aÀßÌÆ:}ÕΛ«ùºì:ܯÜОtöIBõ“ &]ÿȆñÛ—P$­ò`’ÛéÛ„l5¼ÝAµb“·»ØÐ;\ƒ\ΜÝsî”ÁU៾"m|‡bBºÔ¸Âiÿ Á_¯¼¹ƒ.ʶÂE[-`³o·‹ãˆç8•°!v‚BÁÈm¹šæÆÁ*ÐÉHi‘¶¼­—uïlp‡y¨­®ëfsJóÐb%2Bô>P©Åô!‰Ù(Iÿ>&ÌôM+&"Á%éA¸ê]¸~›L[£RS%Ø&ƒÌn‚tÝxr/ ½ÜäÅ\ÿ¹†Òkìµé>ù*Òv¡´¬›u0f‰XV,æë÷®«¡¦|‘tRW€ÆM½ 1ºcNÁ]£)C½ôWЇ38ª€ṵFçƒÅÄùކ®‘0IʘèQšúžøEÿ §.+¦HC§.Ñô ‚¦aÿ°|Ÿ ÷Π&bœlÜTMÅ&Ú¾Ï4Unˆ.¨pÿ¢ VþÉ· ¾Ñr'ýØ5¾þ=ˆ ½ƒž\R§ÈHªÀ|&¾ñmÒ:ÀÏþ!ýÿà üëz‚T0¦OšŸÔ ”#¦ÌÃL 5ŒNE15†êÈ TO*Æa*ÕáV=”]¨â*/W¡Ôø„t*B ãRG¨Ž·™`ZL1i3 Rˆ¸ÍŒ zD mæŸïË· ­Ò6bKÊ(D˜XŠð¶?ÆÄ™…òl"0â>O¡ýtüÅÈ鿹2ì>/á2|c ð eíÂÒð‰ÂçeC¥)­H|£um¼ʦ~bûîÞ0†[±LËÓA ñâÊWÂâvbñblñQ!¿×äG4a¸z·`-Å»§ïÐSvsã¾aúÜEŒNsós׉”#aԎݼcr·mñÛi"¸wr3Lén\ÃØ X~µÝø·û9´”5¬œßºýæêdZÐÊ·¸æÓ^b¾ž—0 •1õzƒr]5ÛWØØºO½’Ù]àÖ›k<¾ =°[û†ï¬`ÎÆ¾ wš¶±^ú/Ça÷ Õ4tfnF¶#60N¾è} ]¼áÎþî¡AÛü§¿áÑ-س^’äùkþvÛl/WCh-a»«×h»êËMÕl;?Ãþ²êm}éÜ'1Öq )dx‹Ø4íº\Õÿ)‡§¼8§œÅ846FsÌYìWq–±¬€(–òËêÖ¿T›¥{ G9œQGïjŸÔÕ8©Ë0„9Á±ü¦o£'ºÕNÁ ø%‰J”{¦Ö}`ó‡gò ¾Ž ï}†Ýÿ0jº endstream endobj 1710 0 obj << /Length 1687 /Filter /FlateDecode >> stream xÚ­X[oÛ6~ϯÐÞä-fÅ‹D)À°%HÚ¥h°®5š]T›‰…ø’Jr:£~oŽ$ÓëR "Š<:ç;÷ÜMŽž=ç<¢ )’‚F“›(ç„ó<’"#’Ëh2‹>ÄÉh,„ˆÏGc'£“—G“£ÏG4JðC#Ê$¡<3ŸxN—G>&Ñ ‡/£„ð"¾ÒeĉÌV‹èíÑ_Ggû(Ǻ€%Iš‚Dð#4KHšÈ¾Ø·2ç'Pº`ñÀËgr3ºûò¿úønG6ötãa ùžTVô‚Y⎺2Õ·d˜™µÈhL±G³¼`AíÙ•*›M­–j5â,nGcžóx}£Ÿ"¾¶¯S}4/ë[eßËf»\êÀQ#ª?¡q½µ'7õziWç‰eñf³²—x0üÕP ˜…Åp¦Êes¢Ož=§iW‘ÁSк¿–9ª¼K5Æ’ežê€2‰‡¡ì›1ó}ñ+UßV*Œ !¤íà롇ìèÆƒìŒÐRc…Ñȧ ÐJƒö÷©ªWÄ€ßƒÅ Šº_ta…Š££ÚÕ7+8aTöAU®8â,…Öô).xQjè•Ë»?”®ˆÍÞTí<è ´/Éû¢@, ¥yA~ØŽlüHòDŸ™‘x듹ÚݹA†Ü€ø„%½`‰†x†Nȉ„ºxª`1š.‹¾KÞ¨U«ÕTÌ#ŽÁàéyôz®Í°mÈõ@^©¶%4¡'Œ¢®Ðc?® ¥ïšó?/÷‹,Ïa’4J©$ýâ ãݸCòü€‘‹sJþÌë u½¶Äjò½`EÕçkª=L}‹‘ ‹„Î6‘?Å`eý¾zô¥” ÖìîK–nÜ! ö¥>;#9ɉ®‘ɇ}Û$hYÖ²£ÚìM"+Л\ðîÆ§™jËjñƒƒþg[±.L Ðek¥W­ÝnM„`Jч'ö¾pm‡ŒûzmÏ6Ó¶ò“Ç— ÕÎ|9SSSa¶ö ]‡¦6–äÝŽ¤ì؆ÏÇ2±¸a9,ˆ¶í§ZÒO³„Q©Ö«E°ÂXáô»r÷f][=_oÛyUÚuf,”ÆWo/^Ù_탲ck†«ó« =·±$;¦~h|$ûÁÆLµ[ç6Š‹ˆ¡QÄvL…™Š6F]ìq)-0-ûW¸ZEšÚ«ží\Ù…Z˜À™º ;®…ÐØÝô|ªo ª5×P UÂç ¬¢æ>¤1JO½ÌŒN$v?± "²Ý x4ÿ£5¹ÌH&æüå?uƼT ð>˜ìœˆ”>¬:”R˜ ²üÛ)ÕÑKÀ3iøÿõBð™A;¤×a1iNRÆúᢃ°r±ØØ8*]P–öVIŠ|ÎiA˜f¯L•-nJ'/e6’1Ï/˦±;ʤL÷”ùÌÁ ™ƒhGÜ›‰,º¡ n•ãµ´É3óDîi7›•¯› ­g‰”²éä´*²Z0ªvƒQ«­ËUc xÝh¸I.×K§ìF_Ç9Õ£·]Ü7j3[×å}5«Ú]f±^=,*g-s½G2ãž C/ì¡.cc ÓÇöc¬t=#¶NæÆØŸ•mé¸5öÙ¨USµ•k8Š+ˆÈ™S†RwœÖL¯Ëz·žUM[WŸ6ΜØñÆÕ‹<žûFÙµgf•ÄJ (¥çI»Ñõ&^«UïƒÓõ²ZÝZèÜÈ»Tæ÷çMYß5¶´™W®&š×NóT®AZ£óøšØçå F²Æqƒû©;¯ËYUúŽËãf¾Þ,fv].šµ¥/Ñ 8"Èuñ¹ %(Ò“–EÖ))¼ ÿU‚»Š«¿h;R—¨G²®Oˆ»^I]fPmXʈL3KøÕBÌ]oúêÇ«wI¿ endstream endobj 1721 0 obj << /Length 1729 /Filter /FlateDecode >> stream xÚµXYsÓH~ϯоÉæ>(¨%Ù°,{‹¢xPìI,âk%9»)þüö²%{*[¤ÐXÓÓýõ9Ý:Ÿ<ú™±Œ`d°!Ùø2Ó 1¦3Å%RLeãiö!—ˆ“QÁ9ÏÏGÉñèÓøÕÉóñÉß'$Ãðd„*D˜ôÇ <'‹“Ÿp6…ÍWFÌèìOºÈR’Ãjž½=ùóäìa° ë„P$œ}¡#ÕPì[¥%“ º †æ:|J@®$Û3 €ÃŸÛ¾Þ’]Ñ#L@Øgç!(~ •šR`†ãV_f¤úšÌ=f^æ''2+¼#Ò/0 'aïW[6›Ú.ìrÄhÞŽ ¦Y¾ºtOžO«˜0[Çͪœ;N SL-2BNÏñ¯Q!ó§pPbŽ3…ŒÂÑ&Hî3Âò³Èu  è!iVô(pŸmÐ=H¥–÷)ÎD æƒÇ“LêUÓδÕjÙsQnÃÔÙ Žò@}fËEó8p%b X ζFøˆ©ŒTºOUÀ’ÊŽj (<(!=Á“f(þùÒÖW•M#@Ò¶à´Æ?åËý^÷“ç/커ÔÈd(õ_ `몋“$E‘¤¤pŽƒ`d<óÚ›‘yÙÖ«eÀðf³ $ÔãJÁ‰,³x]Õ6ºìåùãý|"œ‚ßL&%„‚2G³¸£+z„>£†Jí³ YëȾh°1‡c=މTî¨' ·IÕ©Þ–íæHü1„•êŒÿnDÉO_¿<QŸ:󟟧ãŒ!!øÐã§›v¶ª;Aà€AeEš»ŠÄV]¬•–¦Óåô6øûl3q°®çö6%A„å6Žf‡VVPÛh& …#七#]Ñ#L9xZ:¬`4t±‘Ð*öÙÄÖKäÁÀ¢†Àeú°Ru> stream xÚ­X[oÛ6~÷¯ÐÞd´æx¿-¶vi‡ÀµFP4ɃjÓ‰Vß&ÉÙ†þùФ#ÚtÒCƒŠ’>žó Ï9òËéèÇ׌#ƒ )¦‹B3Ę.—H1ULçÅe)§ã ç¼<OH‰Ç×Ó·£WÓÑ_#R`øG B"LöÛ \g«Ñå5.æðòm3ºø»‡® †”ä°ZïGŒ^3 Ö)бÉ(áìÿQ*1X¥jßkŠ)ç Œ6´¼Œ ¢~J@¯$û= ˆÃŸ{ýy›DÜdÌP8×SPâH+5 S†Ã«¡Î€zLç°^çµS H9DN@ˆ4 <ʼn‡~Odùü á÷p\(d!m øÞãáW³ <¡$$-&ä“ñ„iVþi;·àpŸáŒ¥`p¿åCN2ˆI!³fÓ¶^rkg]½Y·^ü¼˜mìzÌhÙÕÕÒ£êuN/. ÝfLbB€ÏÒ£~ʲ£ˆ*^ `WXà`4+ÉSú”Áâö‚ã¥F;±$p¿á¥­Ví™NDâ8‘å¦2 tWXRyoË„HMJÉB€\1©úWkÛÜÔ6Ï@´á{ÓŒÆ?ë+ûuoÜòòW{‘Õ„¤Zÿ¢(ÛÔ«²,E‘¤$8Ç^±#2ƒíÝXȲêšÍÚsx·[{^?¢Dz:"Ô‰mÝØWoÎÏO,á1pœ”Êœ¬7û3›u(®§+Õ¡jð1‡m‰™bQGг­A ÈWMïªnw"ÿÂJEç_Œ !å‹ßÞœ©._8÷O_çóŒÁéáiÄ_ìºÛMA’Ú4w5!­b®•ãä—‘ÓkÇ¢©ÖŸ}Ðß×öÆ6]N…THé}&ß»™#. çÙ@8`› p¹ø¦Âz ǵžàÏ3Û¬ÑÌùñˆ ÕjâI®9xÐÔfª•÷H…0y÷Ø;»pÅtfOFŒÉƒ-_²ªùPßeN˜@b/$\ÅC'Ìã&`ö„¥âzÍØ`†ˆâúH¹>ù:™;cu¤:{Æ Á"ªƒf_• Uç¶«êåw¹TŸvé6çuùÈ7÷Ž-Ü·¬ù!ËÆ%ã^Š 9è¦a]$ÃAFŒOfˆ &„Ó¢`"ÁÙ¬C˜Æø*Œ$‡˜NÑÅtåçN¨›OZ·bÐEüb$ö+hhÈ¿ûÝÚy뮪6l˜íÂ×|Üui·_³r[ÕÚmüµSUÞ¹ÿ6õÜ?ÚÞnÜ7ìsL„S$÷\Ûz}³[VMݹ’ñ¯+z¡/A8<Ú´¶ñºÛ*t@)²±¢®ÖîSçlWº\¨I‡? 3’X˜m¬ÍŠ$ˆiQ pϲ!`Ð>‘ œ=ÍÞɽîÎWâÆ¼~ “ŸPÃÉîªxõ—ÅnÝ¿uw²Ü,²Œc­e²I¥Š¶Ù¤ãÚM0H)•Lƒ'sŽ 3IE›žcwk㢱a¹´ÕÂìiû¬tãüš7€ih÷‡|t#àp¦OL!|›éOÃ]RBÒ$jÜ–-ûMÐý•L7åë´K£©Ê|U_S@”ùÆ Âe¸;tñAzâ/~ì÷ÒÏÀwloÛ0¯%|Í2Ò­ñGx¾‹iKÉ#Q'ÜÀ׋8sª ðïj©œ DrĸJ•Ï6Ëe݆3 ü«î¡Ì ”ö¼¸‚’`Ô€úóeðzÃi tðó‡r€ŽL~HÜËŠ´­í#¶Rf|Þm}îŸvÍœ§ûÎS&àdøÕHïOøØ¥½pEŸÒòSÕÚ¹¦ºOÈ¥ÎÞ4U1Ëݪ^oÚØ<ü¾…¿BŽ{™‹1)?åÊE<Æ %ÿ’Fǰ?92ývÖûÏòˆÙú‚ëû‰Ý(é‰ànhEn&FÈõˆ/¾{hí¿û¾Äìùræ>š endstream endobj 1737 0 obj << /Length 1073 /Filter /FlateDecode >> stream xÚµVÛnã6}÷W¨o2Pqy¿,P  œ»èK7FP ›9¦³êÚr*Éi‹ýùER•dº7´ˆQâáœÃ™!g®×‹7·Œe#ƒ ÉÖ»L3ĘΗH1•­·ÙC.gË‚sž¯–Éñòqý~q³^ü¼ †?’ªa²_fàùtX<<âl “ï3Œ˜ÑÙ/=ô1¤$‡Ñ>»[ü°¸>W@Œ§(Æ&A*ÂÙC*1XMiï4£f`Ó†æQAä§x%Ö?‡Ÿ›þ<ÀŠˆ+FÀ„„¹¹^‚’g¬ÔL”‚1¦ÆœõWœ3c=ç££Ì ߈4` \ÉŸ[U?ÙnY0Íò²~>íËÆ½ð|[µ]SmN]u¬Û~=v€ˆû…×¶<´oÝÌ›["Ƹ€ô€ïq1•¥Ç¨†TFÔ „D*xôÈéž QaOfJSÛæ¹²i€À6(€Õ#ü5l±¼ÃGâ^yþ½O²#SÖ_A(£¹mªƒ­—0ê’E’’(`…=±²^‚§íëRȼìšcí5|8ÕB{])9Á¤—#B>¿Tm}ôÞ­ÞÎ3‹pŠ8NJ‰„2ó9âŠ°Ï­é¦ææz ñDÍ©ÁÇ–,&’:¢Îˆ“W˜I·Þ•ÝéBþ1„•ŠÎ¿_Bò«ïß­–TçWÎýë›U:Ï‚O#~uê>›H˜Ü1Hsw6Ò*æQ)M~5Ý:MYöA¿«ì³mº…THé!“?»™#.3I(¬ —ìaÅ—ŠïÔXϸs*Që~ûd›=9?ž)¡Z AÇJR—˜é˜î™jåã=R%#F!LÞýöÁîlcë'{1bLΖü½•ÍÕkâ„ D öBÂSüÙ ó¸bLž°©¹ž õZsFnÒ¯#›©3PgÔÉ3uQ˜ý­©ºµ]Yíÿ•Kõe—¾¤¼[%ÿ¸v$di$ÈÀôU2¾PUø@U°õ§±ìüLŒ ÷v¨Aóà×à/nàÎà:[FµÎǵ^¦µ´ÿTÕq |Å\ʺSoª;î"l°|(Û0¹kŽ?ˆ ?òååÞ¿tÇ f³,œ1GñêþY÷Ýä‘éª~“³ *$ôdýAu*ª)ªþ§¨NíDè`çé¸ßWmð©\"4D`DÁ!Ð#˳ÎSH{‘q m1óΓC3;O8DdÖyÎÜmEÏ9Î6µçq7ß@Œ”ÎIÒÃÐHNÖ<(y,ŒôþQ ]ϦlíÖgö14exV>ùìsSv³?ªúØV›úÍãúl„9Œ”ÿ°ÛSð¯QØ_ßÐf:3dâöcTËpzØI–rhb¡^ŒL¡ÐËjŠ\7wE˜†{ç‹—¥×ù%úw¢rîG endstream endobj 1746 0 obj << /Length 1819 /Filter /FlateDecode >> stream xÚ­X[Û6~Ÿ_¡}“‘˜åM¼tûФ“ì¶X,ÐÆ Š\46gÌÆ–½’œ4èŸï!åH6dzÓD”x.Ï~¾¸úꥣÄRËŠÅmaÂZ*¢….«âm©ˆ”³¹”²¼žÍYIgï?\½X\ýïŠþ±‚qM˜P‘ÍÂs¹½zûž+Øü¡ DXS|ФÛB­$¬6Å««¯žŸ#`ÖSœR›QZ‰REIEõTí+#¤­@õœY^¾ ú9½Šy@?‡¿°ýáH6èæ# „Sq‚ÖgZ¹ a4mu&ª‡tž‹:ߕŜÁ7¦,ÈÓH†{ožüêún6F”uswØÔmx‘åÊw}ëo½ß5]@ƒÐ$‘󹫷Ý×aç«—¬ƒ‘¢úH÷Žr•¨Ì˜jK®ª=øDixDÊé¡ RáPvªþEãÚ;ïò* mGÀm(¡OáhB”q Yx•å¿Üë¬Ö$dªõ7*xéZ¿uÍ V}€æDq6¸¦¨8YÌÀÒîã¬ReÝ·»1üth„G\98I$©R@ï}ë’÷¾¿þú4´˜äD€á”R¤ÒöÞ€èæ#Â\ÓCŠ‹†”:U 6–À6’˜‰êêLq¶†©Š¥‡£÷u¸'þ¡ZÆ=cŒ•ÏþóýõŒ›òY0ÿâÅu>Ω*9õø³C¿Þµƒ"pÀ¤È#Cr bôkLç0árÀô2 hëæ:ý•ww®ís*”&Ú#y}nfI¤*ãÀÁîw0’ÍGt9ÿN…E·%éà·K×6dìx†„›ŠT|Œ$WÅè ÇôÌÜhô÷ˆÏzŒƒ›Ðü‰ì'wëZ×,ݽê„åÿsYÝþâ?f2¬" |_)xV—2 éæ#Âl†MÅEÍÔRM$7êL¹eÄ@¼Ždær,Q©Îæ4ÂMÒŒU BuåúÚoþ”IÍý&Ý笳 {tïÈÀ²Ä|éÿÈ‚©6£ Æb5Mp*-`ܰƒ7žäDiBMUÌGd_Äq~IÜ;Ji6ø僛¡ò¨ƒ0½‹m„1V—©yêîñɬ¢¸‚¾FÂJ•ÿu.Ìy«+õ¶îÒjyHŒ±Ásãöý°Þ×¾ÅU¿CQõŒëòcøoçW‰h½ aD8F&œD1VT”“ŠI„Üyœ/| ÈçPSCÞ€pø´ë\‹úuú¡ª²®ã¡ò}÷ °kSn©œƒ!­€, &ÊH ÆÈ‰dD€GtßdýÂà@Çød¬B˜ÑÖÑ„R™¬RJjCŒµÑ/}ÛƒÃä°uuwh]˜#àðÑðµN»5>Öõ* ¬\î6¿Bñrw‹Ï•‡l¡èE1¾Þà÷e»ë’ÌÎ-qŒ‹o·»6k€„Z¸®˜Â~sOŒÏ*…%`ñ Sw²cà~Ëõ”'Ÿ©0ÓLeëý4Üªê  #ï“_p¦%ÖœxKÁÝ”Eê}‹‘¹:D†5-}zBê²K†d„aÐ?–øŽŠ,𦠠Ÿó ¶¼G™‚C2>ez†êòŸ8ZÿúZ×kÏÔ²§—|å.“jÊõ *k‰ÔêTÕesrjb†N˜>? ‰Ã(Çø#mÉ™øWlÉEEŒÊØò’)¹„kIȇǘ’Ã¥ŽÊ¦ºY]TÃ6W<¯hb¤ÅvŸ3ݱ"0ý‡âªušo 7lš…zÞ?„ÞÂU‘©Gº¢'tÑ?ï4£õ¢wtà{œw—`¡“¢MYBËx=3U …ªq,'7©eæbíö»K_ÇÝÓb“³„°—†¸ŠG½Ÿ|¿ÀSƒ0¥ïð ¶[[ºß–n³I­IBsH‚}Ç–?~w=ð®r -¦÷ý¡wIj¿N<ÛÚ7HsSÇëÇ»vw@>‹³ìmë'ƒøµÛÖ›ÍÐSùI‘¡#0O*mËÅÚu Æ=]ÇžE·n8S''a6&}:Éa‰ý›«¬½F­Ûô)ÚûÖ­ü±§Ã‡bžjûÌzí ÄFœÕº è²pÎCÛ~ñ6ì8¤GøøéÎ5®­!N»§Èôií¿Ü³ U7uÜuh0„,ñÇÖ»¾ƒ?‚ðŧ_DV®[¶þfF|O±u_‡’¶ü¹mÃã”Û%ºÜx%£—QÍþП¨ìM7dÓ„±„£w0‘)G9"G&Âqð“ßlpå›e @Üäòlð”Ö‰#†¡k:¾óp¨>Xîsš‹wølCD¡íü]Soº4|BeÔáª^"0­cIþ=ýêE‘ã÷áùÝ endstream endobj 1642 0 obj << /Type /ObjStm /N 100 /First 983 /Length 1852 /Filter /FlateDecode >> stream xÚíšmo7ÇßëSðe‹¢\rø0à í]»= Hr¯‚¼í­s*’bØß¾ÿ¡D7¶œ¨’ÜJñðÃì.wf8œù‘ËÝHlœ‰”MˆÆç & þ'oj °&œO…¨U…ìGÜQh¸^Æ/š3¬¶|Q…¬FNâàéÓA÷³yí5^μ0ݳÑüß²%ù7ƒï¿ÿX‹˜-¾iñl2ž›§Oq®•ÖR_š¬ÞUˆè‘¦Ž–GÚ³¥~(ìžO'Ç/û¹ymºç??3Ý«þjnnl½º¾èqaxÚºŸ`·ÏgZò¤÷ºýlò~zÜÏ©çþÓŸŒ†?N®Ìk=‘J²„òè­”7°7œB Úc kûÆã ”¾^€Mݪ`[ © ¹ Üi¢3w|®jÝË÷Gózüëh|>è~œLOúéÂ5÷F;pŒ®“϶€ ËH¢b €S°œùî‡ð—¦û×äÕÄ`¾:eþZCxŸÙûíøH˜3ŸÀ&’ÅFÅGëSzsÇ]ó‡Ùÿ¾øeñ竳ùüâIׯ³‹Ñ´ÿö¬¿°ã~ÞÍúáôøìß½O¾9ﯿA4øÞÔEa«ÙŸ½³Z T¼ H²LÞ¢xþ”‹¿ Gïæ“'Ãñɵ=z|þ®¿þçq?Ûã³M½)’!IFàÔ›Œ,ªµä7òætx9Û³~vÞÏ϶uG0nJy²:+‘$‹JHlˆ~gÞN‡ãs;õ§ýt¾­3A¬ÓÉ 1u&XÁl’œ·Le“\:¹²'“‘LO;uçs÷?{qv={×Ï,¹ÖEüÈÆéž,òÉÄŒòJ¨*·p˜žnäápz5º¬frþÛþªs àNñC§*<±NZƒ×Û-þ^ë4Á ©Êtϲôæ{ЛwGojÄM¸©75â¦FÜ´7âÊ!k¦„•éã".ŠUŸ1¶!nƒíÛñð=\~Ö´m,[Òvɲ-h{?˰Bw”VX–ײ,ïŸeh©–©~vä\¹‡s¼3çrã\nœËy_0+½|..¥-k¶ÑcY³›ÃcmÍ.’_Ö–‡ì¥<>,OËÖå±ðèvypÞ¬<¸¬”ûeU05¡=“q«N{*v=û§#}æ³ÿßV¾L¹ ‰K‚¢AhêNË1l?ç:ö„ະ“›ªÿ(On·x<<‘{¦[áy"'Òx"'Òx"m&–}ÍÄì,xæËüe#ç!7r–{'ÉG«ûðꎾI”lÞaëÄ»Ð=?»ž½è/íçsÝK±.“s~ëÇ`Á;}éE¹>o8G;°OYŠÎ]®ÒOÖ®¦Dþ²}én[¦±s«L+²3ÓJcZiL+i¥1­4¦•¶‹Rx_p£ƒ†û’(|Û—]ê]w©a([Çyë]êbuy×P«ÛÔ>ì†Ú¨S_Ò jËÚW€¥<Ê…&ûU(ëû䡬/¸+gõýöRˆMHMÈMØ‹ÃA³Xûüe¡ù™.4I?>8¤…&Û2_ú»ôÓïR>M¿;-v¡yk¯úAšäW™æËÎLói¾1Í7¦ùÆ4ß˜æ¹ ²/¸ÅÆ[ÙÉ£‚[p“v‡Û£xC÷·®4 (év\i¶ ͇XiŠõ˜[VHKnio·x<ëLZÝÐdÚyC“©¡˜Š©¡˜ö¶}™¼BŽb ۡ冻 ´lÝ}‘ñ?}ð&‚Éfw(Ü‚å–çÛ_V-ÊRÖîã|³©y¿R¸!mT¸ú÷Ý Ë];Í—B+å÷U¸ù  7Ûæqðÿ¤pñ '¾¬nÈë ÷v‹¿ìãî‡ù‡c^-ÇÅçÙ;•ctËâ‹­.c«ËåWà{(Ç›—÷¿™vÈâ endstream endobj 1755 0 obj << /Length 1290 /Filter /FlateDecode >> stream xÚ­WÛnÛF}×W°o$Pmö¾ËjÃv‘ /‰… €ëZZYLDJ%)_Ÿïì… )­Ú´b„yvæìÌ™áåbö憱„`”ãœ$‹u¢bL'ŠK¤˜J«ä.•ˆ‹lÎ9O¯²9Iqv¿x?»^Ìþš‘Ã?’ªaÒ-ËẬfw÷8YÁË÷ F,×ɳƒV CJr¸Û&·³³ËS„Áý”Å$æT„³ãTb$°šº½ÕBJ®5l:§é]Ï ÷O ø•dXþ8üÙ×_ؼÇÍGÀ…csŽ‚Ò'^i>a Æpx5öPÿæóȘóyo]&sψÌÁ„†ÿîªülºlÎ4KË:c4}Ê$K‹¦,ܯðª*ÚÖÁÖ xã~õ¥)ªö­}óæ†ˆ1.gð÷'¦2 ô5‡[*{Ôò"\rº1P+l,Ÿº¿®MóXš8@ð60€Õ#ü3숱ÔÝÃCbòô7ó)ê5™z}¢Ó”•ñQŠPIJzWØ;¶DÄÔøŸ2BHzñû»«Œêô†q}×CBðiÆ/Ýf×ôŽ “ƒin ”!­z­ãäo{N7–ESÔ_|ÒoKóhš.æB*¤ô äÍi˜9â2‘„ r>Á6ábùs×–%j=Á_—¦©ÑÒÆñ„ Õ :f;É<è„ÇtÏT+Ÿï1‘2š1 iòá°fmS/ÍÙŒ1y´äûRV4”O‘ ˆ@î…„«ø§ ó¸ù­°©9ç™`L¡içüÄyN½ŽlÆj, N\Gk š¢:xö§Hueº¢Üþ¯êó!ÝÇ¢ó ùϽ#BK#AO?Eó ]…® ¶¾‹ÎŸÉ$—á܆üÝE]l_Û²õˆÚ˜UXÔÙ¢xΨJwþÁ¦hVþndù!ƒü÷d±Æ?çc?¶Õ„iÈŸ†–<‡³‰ëdQ×ÅÆ.Úör{hË'k00nñ!¬CT#øMâ¶hMÛõ‘nwÛCg|ž`YìËUé²ôú­Gõ(2] ãSŽŸcj„vÃz½ÆL m 0_£\áÁ€­T$aòu¨ªx‰IvB&4"9›òë§šH|z…ê^¡½.yú\v›3Ñ ‰s-hœ8 S8˽ÓzDë5Ø´n½H«]$u¨ü“²ö×"\_ñ-ÍiÃbceʲ6.á2×ðûÑÿÂHyìú!DœŽ:ä¾4U@W!™ë>FG’ˆ†r&úC˜‚¤Š£@ø˜‹tUt²Yy(Õ°§Ccªã »r? .×HÃílî]ýšf½k*´_†a±-_‚ÀOÔݘG¨ÉP4‡½‡u»¨àuîôw$Ð/ñïQ8É]û(Òh?¯¬!gÑYpLœûÃuÎá{RÂ4Ä`΀ÃÏ¿ü¾ ÂGÁ×¾Ùþ ›‚. endstream endobj 1763 0 obj << /Length 1720 /Filter /FlateDecode >> stream xÚµXKoÛF¾ûW°7 ˆ6û^2§:uÜ&h4‚I´´¶K¤JRvÜüùÎîì2¤DÙ=¤H`—³3ß¼‡~¹8{~)DÂ(ÉiÎ’Åu’ "D–©‰&Y¬’©&RÏæRÊôb6g)}^¼9{µ8ûûŒ%þ±„qC˜ÐþZ¿—Û³Ÿi²‚—oJDž%÷žu›b´j“¼?ûóìå1&€à”M)UÀ"ÅQª)QԌվϔ¡¹V`tÎÓAÔÏèÕ¬¿ú8üw¯o{¶yä›' ŠóL~¤•ç#¤ Œ†WCë)¼ÎÏNe2gpÆt²À5’ị²±Ën6™Hw뺫+GËtW”M8mj xºÚ/»^;YÔI¥…¼´Å¶}áÞ<¿djˆG*"…~Ï÷‰r¸²!×H®#×£ üòœcû iÁ¾|¬þUe››ÒN#PÀÚzp;£„>›„H= ‡Ì=ÊôWûaRk2Öúuçýb›rk«PÝ$Éæ,øåâ5;$‹ø×ÞÍ”N‹®ñ®ïö²pl O‰xTHŘ½¾xq˜fLr"ÀsZk¢L~2¹#ß|ÀèmlÕ¡8!–סjp²„k‰¹ŽOö3­Ñ&šÞÝþD B‰Þÿ0cŒ¥ç¿¿¾˜ñ,=wî_¼º˜N4A”’ãŸï»uÝDE€QÃ!™t…*Hfb²13… ɈéÒ¡hŠêƒþ¾´7¶é¦ThCLÖ§òúØÍúz¢‡ìt€‘m>à›ŠïX˜×xíP’þ¼´ME–ÎGHx¦ˆâC$S ™ŽpŒmæ™Áx”“ã&t`{g¯mc«¥=1¡®ü·Í_åÝD…) öJÃoõX…!ß|À8Yacq^3£”»*1GÊsF2È×Ì© \Gª'k †áYÐŒ] Rue»¢Üü—Ê#x8ÖŒ%Š"¡Ï.¶®Ø6P˜K@ܤK×ÝXÚú&çݺèZÕ5s³Êö'Û]`ëç[Žó­…! ¡XrC¦ÆRt›¤p&ò1¼/³¹2ðsÊ 0£X?Î~š îÏû¡0’uÒKRRðêŒg—Lzõ‡«§°ç’ЃÕê1ð}R@Æ+&Ÿ/÷;á#à…c¿ l¨„“øÊûU°€r>FCÜ¥oëjÞç™Pg3–ºTkñùÞ!µ.VaÌ+¨£eáºçCàÚ”·îÑ>æa r3Fñ‰ ö|mTéøO@Ò ¶ ~¨Œ?© "L¨Rã‹koìšè ¾ò¥jmðDznÜ*j=¦£,`ìÒ^ÔuÝ\CIž¾Ð²¤†/±çëw[ØÍúÚw4î¶Žòý"ïw[¸lê¶E²µþ<<޵E»o©?Þ·euƒ¤$‰ë«¢<1$7tìX¨3·Kè:Ï¢c) ŽÕƒ;° e}Ežò|t‚„í_P5öB}VEW¸„U,]¬íÃw“¢'å+¡yd€Ò ¹*«ÊÛ+yZ:?IeïT8Ý­ë§BºÆlñ¬ƒ…¡Å7m8ÛÖn[†£n¿E9 ãÆk^0P/[¤íCÛÙí3|èÙŠÊ­KY±Á¤£¬®æYLø›»Ì…O>“Ún?ïg}ò(ŸÇ”ñFqé‹Å‡÷Â}§ÀåzS4øÜ.‹®ƒ¯Ÿ À8ÐæMÝEë`𹑿Âp¾ik|jEÚrS\mú õ5Íc94YÌ‹ù¹ª÷W^µ { íM¸=È;½,6ÈÓg¹8Èò%På*Ú!¢C€Øm¨¦nÝØpx[Vv[tåñc¦ËJ‡;h(«(ÊÝ ¡:4…J¸@S¹¥rŸ[HA¶à-²ÞÖu±OED¯+NÈ+øÜ„‹eu7ÃÓ2Êv_~šb„à±åw<$wÝ;ÜÍOîCc©³Ô¢ˆmÙúN3ñÀ>‘å„ÇÙ|ÊÒÜÿɪn¶Å¦l‹ØŠhð‹ìtYv"²ì{diY?¨à[g]¶Èã&Tèà)oNÐ cr7v9€PŸ4ÌH"†3RØ/”|µáùʹÏu®c˜´À*<õÆÂáÇç^T`×é—zßTÞL8m÷WÞãuåË'K³» èqár‹\÷>Þ~•œöß•˜ÝhèDÃTNdß:ŠÍC[†|vÃÌ †T,Ö®ã±&Ó=zº¯]áÔbyNŒ[ÂyC>è|oÿþ ÁñÚ·¸àÿ ªë endstream endobj 1773 0 obj << /Length 1828 /Filter /FlateDecode >> stream xÚµX[Û6~Ÿ_á¾ÉØšåTÑ`›ì$½ »À&ƒt‘˃bsl5¾L%9mÐ?¿EÊ#Êôdt‘ADK‡ç|ç~È'7W_=bÆ()iÉf7·3+ˆvf¤&F˜ÙÍjöºÐDšùBJY\Ϭ ó·7?^=½¹úõŠÍ(þ±ã†0¡ûm%žËÝÕë·t¶ÂÇg”ˆÒÎ~ëIw3AŒ–Xmg/®þ}õäX§8e9¡ $Rü5B5%ŠšTì « ƒ5 tɋׂA>g«Ùiä8þüç÷'²Å@·f LÙõ,=“ÊË)˜Ñøi,3R}Jæ„Y/ó­9[0¼cº/˜F²ðퟮjÛ¹ý\ð¢›/„ÅáÖ?e±ªßP&\?ÖÕÖs‚L˜Z)R*œ=ÇWó….a£ Ä’Î ) 6!¶,á¾R•ü ¥"Çzh>[Œ(ï2ü4Q¼`D+¨þ™%f¿ÁÈÀŽL.m }âª]ûu gjL/‘â¤ÑÊu¤² W,¹¨îUÚ ('ò¥„[J3aÃÓ½kÖµË#P „´ì¶”Ð/á!Š~—Ìÿ”ÅwîeVjd’Jý@áM×ÔƒÓ³ 'š³À5 ‚=›9BÄ}˜+]T]sØ Ïû@Â{\98‘e€£bJÞÕkCØýpýõ49˜äDÀpZÃÓ¦¼˜’ÝbDاGªÔ”]HÉX¦¢ac‰m#Ž™¼¨Îg«°VˆT3¨ÞUÝñBü BŒÿrÎ+ÿôÃõœÛâ±7ÿÍÓë|œ $„L=þøØmÍ HÊ$±Ò—A¬b™¦°0=ÛV̇º ^¿®«6'@!WÅi׿ÌÈFÍ`dƱ…]öo¤[Œsþ°RÕ ø¾]ïªzK–‡ÝY ÖŒ”RŽaäjp¤:‘ªÌµïN"QǬ%¡z08û3ÿ.<¦Ù÷ηîö½éºMÎö8Œ¸lû¡ u”- —MÉ÷t9˧Ìz‰ë1Ù¸Ðo—®Ù“圛sD¼Ô}{¸—”óB$šâ™8¡´Ä0“à|PâІžùÜkªýûàƒµ[»¦ËÙ^b¬½l{+‰Ô3¥aê²È#ºœíSf½Ä[’´àÉæ6cs«ˆâc$9›¢3›[ÓW¹H­SÅi\tž»[?f,ÝÅ2%´üUÍê™¶„­˜!òr[ t‹a¶­¤ìzÉŒRísý¼±”‚P¤Gˤö²IïrVÇ‘‚ýé)«$ö~ìù" F~ßQF¢t:¢ò†Ç¿åXB­JfÌ{vœ?ÄS+Í¡üÔÚ8±(R—èùˆó]c!JSüâº6¬ª.%ÆJ¤qþXt²¤vôĆ1B€ `í¢SÁ%Íá¸Þl?^ô9|bq@ì)ÈNÈtÝ„ætîHíg©òttx´Ìä'¨™Ñc…yŽdùF1"CŒH­ò1"2ĈùbD®#êOÆ÷všØ€ñÔPG fØÿßP—#­@LÜŸR˜Â!õ²F«íÓQm´.~öë¾ØÔ(6ëOóέ▾nà¬è_¶á’ܦ~ý¾Þ»]ÕÕË4`† â8Šh Iµ»Û¢˜„ñÉíQ,–ý݃g^.«8ànÜö.¬úðÅÐåvßm\Ö¢ý°”Ó3N5í­?‰#glrep6FßšîÉ|/%½Ž ²QÍ¡ÿR_ dÐòÍ¡OBI‹Ö-»º/Ë’U|Y…ÇíqúHýËCåV´hÁ‰œOhgÐn¤—}ð$œû €òVïP¡-ªýzå–ýŒÿ1øop<áeðèwþÇñ°oOÐÑGŠ–&«ã_5l\´‚ÏœïRáËÃv[·õ •õOøKÌü¨â’Zd+áO¯9æBË%èJäöô–S¢c ·œ˜*Ùä–3ÕñžUDíUmsª.$Ê£´:½x’ ÇZRìfneá^~~½«Z_<É!fe¯{¼Ÿ-jĺ©ºf{ÜÕûCë§„D ë# ߀ĄÕí»LØr K*­s£k2ÙÙÓÍË^žÀ éÍaÈÚŽIÌ_všÐ1«ÿˆ7j"àýcð×"ª8+ endstream endobj 1781 0 obj << /Length 1398 /Filter /FlateDecode >> stream xÚ­W[Ô6~Ÿ_‘ÇD"n|‰ ªºPúÐÂU\$²3^&"“YrYŠøóýœãÌ&3Y bEçó9ß¹{­W?=‘2à Ë“œë« “LÊ,0J3#M°Þ¯CÍTÅJ©ð"Šy˜Do×ÏV׫+$øÇ. ãRÇr<7ûÕë·I°ÅÇgAÂdžŸè>Ìh…U¼Xýµzt΀K¬çD—”¦€(ùc”ê„¥‰™«}‘e‚K.at.Â×#ƒQ¿àЫùñ ôƒ8þÜçGX<ââ p©¸BÆÏ´Š|ÆÂÿiªÓ£¾¥óDØ ó­SÄ{\ç×(Nßþlì¦lmËL†m×o?»¥ W´õÊ…=sn¢Î/ƒŒk¨$0,7ÉÑ,MSèd:Õ„úÅKš‡I0aT0õmY¿'Ýõ!’"¼qÿÙŠhuvã^wuù±·Þ,!àæÌÙ±Š¤<²Å¾½Oy:Õ¨R¦d:R“íQÙc)ô­1×f´snÊÏçê×¶y_Úe)€Ðvd€ÓYÂ’{°PÊpXc“»Wþn_.jõBæZÿQ符ÜÛÚù©[$`Ó‚.R숬#¸ÝÞD©‹®9ÔÄáy_D ¼–èx‘D'õÕv]6¶¥P>½¸š÷\ &á8­‘+&¿³ÚF\<™?7êTU›¯÷SÕð±Â±‰Ä…’QgЬN‘Äf4½+ºþŽü“,1ftþˈs>üãéE$²ð¡sÿúñÅržI””šGüaßíͨ˜u@–)×9$Ë̘kÜ,q¢åÈé‰cÑõ ú‹Ò¾·M·¤Bf²c&ïÎݬ˜ÒF‘çè w˜`ñ·ß¹°Aã•cÉZ"øëÆ65Û8?ž1YÊR1e²Ôb tÆcn³È Å{J¤\Œ˜@˜ÈýöÜ^ÙÆÖ{gĤ>9ò}!+šÊ›… KGìSgúµ #\<.VØ\Ü ™c’34Qq¦<ç,C¾Nd.Õ˜G©^¬1L-&2¯™ºRuk»¢¬~€KaÇHÛšó å†)´ÙõçžÖ› Óé&&´KCãöƒáb~ú•›!áÏPžz¢b2.yq«ÉG¿¾Iù-’ÈW­OH^7‡(Ám¿éÊ¡giXO^ŸÝ޶me7¾Ëã­¨·„Ú»êþ TQ×¶jYäŠ#ü­ïèÈD>äbl@JSÃÛÐ0n]2:4,劸Vöº;øÑ²/Ú–¦M»;ôÕ–vá,´ôò©ÜÚ†–Ú$‹‘0Óù±Ë>pvg0Œ ùÄñÍ]WeÆø.ùîÝ¢H ôŸ îÁb|8ì;^`6ÆgäÛøù¤VŽ+n½ƒKþ¦ÛJdˆr ^_Æœ¶º¥Å¶l»¦¼ì)Ääîk3È1—ÕW“U"{\Df4Þ$R/d)ÆàÿÌQØÎ„81²l‰âÞmߨ-n>JˆðÓ®Œ¸Ë7ƒ>Ì”²¶=±®-ötýƒÖìÄŸ?p9¥rعôýÜ–›¢r’p9BJä}K¯…:É_+iÔšé\ø·KZäß㯉 SEçz®‡ªàкX\1öÚg˜mÜÕÝííîʇ­®ßßsxT»+S÷­ô6V¶õ«¶o7(¾Ò剺†wðÜMwxYe,Ã=z 8üXyhÝt UŽlœÛÝ'Ü•ÏW‰ÔmÜ(Ò›Sñs„V‚£Ò“²í+#)K‹ë bÝOÖÖ‰ÏñsÀK¹:4´ð¾ZœìüÑmOÚ'0íP£]HØ\r² ‡&ÍeLÉ94C_ÎyÎŒ›_7`žø@ñWyE=êË8ÿ‡¯–† endstream endobj 1787 0 obj << /Length 1018 /Filter /FlateDecode >> stream xÚ­VKsÛ6¾ëWðHΔÞ´‡Ú•Ó$ÓKN.®¬[L$*%)'™üù.¤)ª›IG">ì~ ì~‹ËjñìcÁÈ`C²ê6Ó 1¦3Å%RLeÕ:»Î%â¦(9çù²(IŽ‹›êõâªZü½ †ÉUˆ0é—x®v‹ëœ­aòu†3:ûì¡»Œ!%9Œ¶Ù»Å›Ååc„Áø˜Å„$œ €pöÿ8• ¬ŽÝ¾ÒFHI!fCóë‘Àèžb¸zXî7|ÝôÇ VޏrL085çhúÈ+%S:÷ŠãÔÜgD=åóĘ÷yã\f%a £$8 s¬ü`‡¢dšåM[0šß’åu×Ôþ_œÚÕ}ïÀ!¦8xäÁÂ¥­wýs7ûìs2\ Îð÷¸?1•¥ç¨†TލOp6RÁÃ#ƒƒ„…#5Çî¯ZÛÝ56Í@¼M `µÆÿQ1–û1¼$î/Ï·ï“^£‘c¯_€(ìíš ;•$ (’”Œ–88vDªöÕÞBæõÐíÛÀáí¡ êy¥èD“Ž†ß õp8s aHÂÈà}AÉ/þxµ,¨Î/‡êj™Þl†„àÇa_†Í¾‹£‚Cš»LeH«qÉJq ÑÓKÛ®»æcˆûå¾(™6) @M¹²9-%b¢\eÄKÃÞœ+àW΀¾˜Nhž˜ N[´™ˆþº²]‹VnC1¢Æ€ÔÎ ¥j;€±9Ža‚ÖÇlšäÑQ•®âQÄBkomgÛ•={z õûO¯î¾4÷Ï Á£ešBT±>>Ó!ÿÖv¨›í`E¾‡Ö›ß–!¡ Ä¨Ê¡Fáx†>Vþ°é¬ C¿>Ô^ý—?ѽCÞ»ŸˆàxÒEÐh/vWá´^Ьڹ.Ó®¶‡¾y°a‚Ã(µLçë¢`î<<­¦ÞتÛ÷}ÙÛÕÐE0yÝÇgXy{hg“ûÛðé¦&bâ¥ÛY S^ºg`˜ØÌI…¡ß´<ÅF‘á"㔀ëÛç*”OD30ØÖÝí‡ø¶«Û>DÞõ°swŒý.[#¸y€Ëj\¿³u謟Wy´Óôq²^GXÓŽ~»‚¸}õ?îMW‚7ͺœ¯ñ¥½ƒmŠA=„%͸ÒHÂ5Ãä´8•zJŸŽÙô!Õ¸@XÙ$í_S6ÜfþÕ„>#à—dR$ÈÔBqÊ4Y1!’-ÀúI?'»hûÔGÉÓçLð'iL%Nœ»?\yÚu(ó˜á3i`g¤ƒ4DAQã`2Cplö“lÊÓ ÷ܵJåì[¼‹ˆ°ìÛØAþF¼µÿ endstream endobj 1797 0 obj << /Length 1717 /Filter /FlateDecode >> stream xÚÍX[oÛ6~ϯÐÓ Ë;©lš&n“ XÛÅ6´}Pl6ÖjËž$·kûçwŽH9’­4ÉЇL‘çÎßô|rðô…Òc$UŠG“‘D©‰&šÌ¢·±!£DJ_œŽaTœX\d‹/8U¹jô~rþô…£$¥)C[4J¸"†nÍ0oçu.@ÿÌÛcñÕÆ“ƒ¿¨ÑˆELJBud8#œ§Ñtyðö=f°vQ"R}n$—‘ FK-¢Ëƒ7Ï1§~Lb¹llQáƒá”ѧF­Íñj ‘‚õ¼^ZÍ%£òNyü¶  uÏ… ÖªV¼“4‚®~ÜJ%­Xr+7àÇXãߊ=—°Ñ(Á +]‡Aè‡}SÃ÷è/J˜„¦,Q¢$ókÇó¬¼q3ì ¯³²Î±¦ çg–#ÁãÍ¢Î׋|š×9ô̧qVûup heüþ‰˜¡aÄiî7A”’ýmêùªlÁt ¢‰• (kXÛtÌ å‡mP§«Å+ýÆ_NGÜÄsŒn³ø:äG[boÛz¾_kUŒt·éÝ»ìÅ’ŽÜÐ&÷yM´¤šbŒm ÏÖÍèK…È•ÃEö‘Ì1‘Mr=Jàß•‹¼ 3·­ Ъî@g´R{Ñö+#àzcÖôÃÍ=ðrX“xU4Ûó˜Ý9Ï ¿5/rW;/ËUU¹ä•«Ë¼¸™g›êÙÔ• 5êkHÊåÛ&(À[ª´,‘ìî}kå’ŽàÀÆíšk3!Mäþø»±Iˆ]Þm`“Z©½Èú…6mZªX>|©& ÈXïDýî>à}5uwB ðáxS’ס‰É99ÖöЦ £öIËv}%ÁÀã[*+ÿÈ? ´jÚW@àŠw´—K:‚ƒÝ7×xp–ÛBî9O±w›C¤ö\B´Tœ¤B‡Ûþjš¹:ËؾÇTôÍñ‰?¤Y1óGÔs›2›Öù'ÜUç×(œê*èÔƒ±bpÆ# ÌÊ´üd(s­áú‡º À€ÿ¢,!ý–(Ãv°¢Ü'C[[<…«-Ô­JÞ‚¯-–üŠh õqd}m=’3ðNAí=¹ ~`ýGä¶µõ ÜÄNnžÒv“CPÀC¨:MªHR$r¸ÝÉ<Ç V"öÿÀO ÿÜ-…õW·ªü<pñ² 1lj5ÜjÈÍ^ŽË悃Ù>5Ç%¤oy1]lf@Y|ãgë¹ón¾ºråG×yÑr<¨hjÛtü)%«‚éÌ3ŒÚ7mz™¥1^­Ð˳bðžàðòͪM .›ñÌ/äA 0Tí0°WûÉ–ùc¦ ÏG0Üš€‡†ç+ƒ<ßk`žƒg§í ˃Mê%ò×Ћ°4Án¹:gCf`Ζù šÑøª~ê®N‘%5D1ÝŽYÝ^„Œ ¸}ÃûÜ0;ÝQR?¯l’C\?°l?¦jìÁeTðéÅÆ¾[5eˆêõ¸ªi 4wG‰~¿jæ€Zü?«–À0ñˆ²)ʉ¡öqeS€FìÔ@=¸ øb€WãE‹R¯ ü†%™ð8…ƒ³ßÆ~4CNßûÑ%¿ÞÔùª¨ü""“Ad2qP ¤‘ § šÏmfA†ð–-ášÎ‰#£D§ˆŽy°w‹Ér¬¬¶ómVL綠#­ði-]VÇý°Y ¶à ¢Y®³&WI½ò³¯ÿœœžù9í§>çõÜúd¢I§×》ÀF«úÑ*»^¸~*.¡ ;Ëê,˜m,”!üд)c}èuö1•†Ñà÷¼ÒSülÖá:"æqx1qWa³Ó”dj,.ÜoÁ‚öÒßÚ;ÿ_LÅ* endstream endobj 1806 0 obj << /Length 1269 /Filter /FlateDecode >> stream xÚ­W[oÛ6~÷¯Ð£L¬x§úÔ\œ5A°v Èò ØLLT–]In—õÏïð"[²d†‘D~<ç;WžœÎ&ï.(p†ò,ÇÑì1RQª"É’TF³EtKD’”1Ÿ$)ޝ_Ú—3x™&÷³«Ét6ù6ÁQ?8ÂŒ¡L8 9Ñ|5¹»Ï¢ì]E¢¹Š~8ä*¢H oet3ù}rzL3‰aC6$ÃÙˆVI‘òÿQ+%bÕÞ(Ax®2°<'ñ]Ç ÓO(EJñÝÐò~íö×,ípi8BáPœ£ Ø‘VØî3aYØêë ¨×ts:ï­Ê(Å‚¢,§ +Cœa¿÷¹ÑÛź.6faZ£›$¥ŠÆEkŸ,n—µÖ~IWº~À/þsžP/‹úI/üÂ*¡$Þ–­Ù”fnZûõì…xa4–þ1Krë[äHe@‹{æÙœêbÕ¼·;ï.°ê É3 ‡Û@…„‡C]è@ð4°ïdóþ @Ðdÿ™ñŒñ eÖRJc÷‹Ø}3·±ÚüÇA‚òlðáEüªoG™"Cæ±àL]›•®¬[ÛQ#$A‚àΈ“ë˳éžÍõÇ3§}Li8è•òP(Sw¹pyþþ0e1#ˆ‚‹…ˆËüÅBépiè’vHýPœ/”Pª‡ªÁ× Žõ$ŽTK‡:R<Ú(ÇHÈÎô¶h·ãy ~¤ì\|›`Œ­£Ï¢ ­ÚÔžžg$Eœ³a\O¶ír]wŠ }‡¤˜k4HÉ.+±ãä_;N×å“®}Üoæ ‘ñÒ’Û–© ©}Þ/]ÍÁ‰‘ÀNà—ƒìai7ã¡0¯Ñ±EÍÜrìˆ~ظ·çÆ^O®§¯hi Ù¦I O]—¦B }È–2ލÐIŒuÄvè —×èßF ì1Ûý]tð[ÂsUT>6F·:ô‚zÝ4:ý¤ÛÚTOËbÛ|˜ëºBÁ)cÙ¡$Ê {1n4ƒ˜‹ˆ«eôŸu°t‰Û°Î ä,@¯“ïc@\HÒ#6¡tHkè›N}Vf¼ô20'Ãh}ѺÖÕ\¿X~¦‹·—ßt[£Ï!}Ñò±>jqØÁ§»à^`<¥œqHƒäÿeEý‡ù>Ò³¹KiŽ!}¡ê_îÙ—ö€£={(ÎiÆd åøhÆÁ9F :`OæXר#Õ£]›åÐUYÐüe[ùÛj¡Û”ÿ"®oré¹­‹yk¾Ûð†ÚÕþ£²ÛÆÇ´Òn"‚ÝvíWlß GìU<”z¦”+¬WÐi‡9‡#•AÖ­@íli¬TFâîéûû–6Û˜¸ŠÖ¬+¿ðôKÚ솻0ÚÁîãºvºwÝ‚*$ðb F¸™…7§¨~IÚ>¬â™N‰o aT Nô‡A}»Ôž›o~€<òEˆ0µA ^ÂÊß»ù’än¾¤ÒΗ}ƒ0·ÿ»ðáéW8cÐH ¥Î@ý2Ž!.tl(ÊçÆE´ÖúÛ6 Iv¯õ«¥.šÖ/¹pÀÒÜRÝMʰ°)êÖÌË ÕXÛ©$Uàð©*ŸFvÂåðo‘ã$ÀÄöÛôÚÇlaèÌ[¸Fm~4!’uÎaÉ, †È.áÕ«És$m%BwBX _?=*—^ÌÏ®ÊÿÉSP endstream endobj 1815 0 obj << /Length 1349 /Filter /FlateDecode >> stream xÚ­W[oÛ6~÷¯Ð£Tï¤ ksé Á.MP Èú 9L,Ô–3INÛõÏïP¤R¦ÑeÄtøñœï\yxrµøácÁ¨ÂÉ®n3Íc:S\"ÅTvu“]ç ±¢äœç/‹’äÉßÚÅ),΋WïçW‹¿$ÃðC2Â9Âr”P1™-7‹ë8»½wF¬ÒÙç¹ÉR’Ãj].~[œ’!\!My̆b‚ZCRªÿG­Rˆ3«½Ô KÊ*°¼¢ùõÄ`ÒOCZ‹ýЪ ~íö§=¬œpeLP˜‹)hq ¶C¦ û­P§G}OçLبó£U™•D2„+²0œ¸½ÓUÝÝ™›¢dšå÷u74˵±x\…’+i3»S+!‚#­ª qïg U ‰„¯$…t¨ŸRš4°¤Y€j<*²´:dÒöУ#0T² ó³Gð€`$\HiY0¾·o–É24"Ö¦´N²½«î¢ÕžÚr»^7}³m{‡Ú–æàÖÆnñÚ|pq„âA_`ÍAw"NL½éŸ;UDGaáHà .*O’*=4|Þšî®1{Ù"> stream xÚ­WYÛ6~÷¯Ð£¬XÞÇE“=Ú& дëæ%Ƀcs³BlÉ•äMÛüùEÒ+ÉÜE± ‹‡3‡s|¼X.¾û‘±Œ`d°!Ùò6Ó 1¦3Å%RLeËMö:Wˆ%ç<Z”$Qü™\Âàºx»|¾¸^.þ\ ÃÉçËAƒa2[ï¯ßâlsÏ3Œ˜ÑÙÇAr—1¤$‡Ñ6»Yü¶¸8C¸Bšò)Š IXU I©þ³ vÌÈÔì†i¡1ìÜÐüuDíSÆÖâ¸ì#“Á¿›þp+£\9L@˜« hyb¦ÇHASc›AêK6gÊ›oɬ$’!lèÂHp\Ò·«ú½…ØÀ4߯ھZoã[Û%£ùæ°î«¦vY^ÕÇɾ©KÿðŸÖÍv[u Ùù÷UïìB3FÈ(A ³ÌGÅ€a œÄ D ãˆq=)Ä1RFÌBAŽ-uQ‰<›]À6 Œˆ¦ kùÞo¦ý`Y‘ÛWþåcÕßy·2N‘& üËAQØÒÓÏ.¯Á{š97À“çýõ^ü|‰†¥q5[waW»îÜc#z² Ž6ÛBX*ï¹ù.Ê :Q|]Ûö}eºÅx…A°t¿Ás>¼ŒåÃ>÷ÊóŸÀ)«A‰·*‚Õ¿öCÙ¶ÚÙº€QŸ (’”DÑy`Ûa ÖSFÃÂÉVoöUk;ïëgWçó|#p^ Ü#AR‰G³<Ê•#Á!º¦Ðçê|–‡:37­áÈaÙHc"Õ£Ô‰ád•— 2]³yÕÒgÌ!ù!Ú‚‹_„çè«‚jè àªåõU:š‚ÏÂûÐß5m40vˆDšUéˆë &*Ê#¨—Ëêݶñgq°ub®ÙÙ’Æ0ŒµˆîNŠ+QP,T&ŒBÆÈÇKz+G‚‰Ãž«Œþñ+цóäPWÛÂ}…l7Gœ_°#Iœ}”:Á1Ý6#â^NqT¾Q˜3PZý|‹ÿ¯ï !ó•wùMµv{ùPÕïSŽQNõ;QªÏ„âˆÐÇýåÊ‘`*Éfꣶ{€ødmÛ ¯§1 ô=9Æ’j°AêÉtßTÈS$U2qJN3áw{k[[¯í£ÉÃä:»C‹^Þ¹ýÿÝ¡çèR‘s" ?sL %áQ…¨b3t‡Ú×ÍíWÕö+0~S‚_U ÇÚð‰{ÕúP³þ¥v¿}ç“¿¶vãgûPÞe\Âòú¯?í(ÖÔ¾©„i8SM‘á"ãЙìt¹ËBÓ(OAU~ï~lÛ |Gå;(2Ž{‡ûªó:˜[Qò_š[/ß=P'u¤N—q}+ÕÅÕª¶`Sh¿„ÀTQ8úz1Ð]#Œ÷aTkFR%F j†zCC#Hƃk´­Íô{NvÌÎ> ²‘‘™cß`&¿dTCäÌ–­êw Xåžd8ÿÍü Î4Òf†~¿ÿ‚y'ÍÉtÑ”³ê#gE| (ßr9\i”Ëý]š¼Š85ƒ˜á|Î]9°ÓîJÈì3ÝqTÅ ÒÒL¨ëtŸÁmÄ\©Òy:¡~i@’)Q`QÀxM5| ¾Œê #ò@Ôˆg¹Žß ,> ,w-]RÝÁEÓz‘v× ?åRÉ=×N¤‘¦s£®ììpçè‚òøô nu¸‘‰m2 ´Œñ¾ì•޲nÚñUˆ†Pjx¤„©l$tÛ´¾Ñrp¥˜qO—;)8jèñx’™.ÏsýUyN>“ç®~  =…šºÚvOUõz{ØØM(™Rƒ+û€"áaÕ'¿È¿äSŒó^±ò endstream endobj 1831 0 obj << /Length 1229 /Filter /FlateDecode >> stream xÚ­WYoÛF~ׯà# „›½—k @|(­ Ik5/Žhi–(•¤œ¶ùó½l’¢›… ‰Üývæ›sG'‹Ùë·Œ%#5IwIÁcE¢¸DŠ©d±J®S…D–sÎÓã,'éeFÒsûp óìfq1›/fÎH‚á$„s„¥“ ™L–›Ùõ NV°w‘`Ät‘|vÈMÂ’žÖÉÕì·ÙÉ!Â*(²¡˜ ­Š!)Õÿ£V)ν*4`X®izDý”1Tâé èG:»ýðË#.ï'(ŒÅ9 …:Ð Û}¦ ‡­¾Î€úšÎ‘0§óƪLr"Œ‚,Œ'~o‘i™6e1š>ÚÓ´2EÊt³Ý·Þí7vE¤í.Ë-dÙ5¥_ÙÞyì®ÚÖí+x.dúIž–ðî!e½ ˜fÛ=­VµÿÞíüær»^Wmõ|ªs¤1X£: ¹g Æ‹‚Yê"5Á‡.>Þw÷Û&*‚ô"QÁ]³AEäõ5EÊ?FRï-—òv½õ±?Ù›zr*úŸIež¡U ÷=Š($…J„VHkùrg ¸¼œöXœSúÇ;Rh¦õ›}]m­ ‚ü1aÖ/¸è3™ˆ}DðšÍHy/‡<*ß-)ìi¸·|¾ÇÿóÇLÈ´ô.¿ª–Ö–‡ªþ4åx¡åôE¿% ðD(Ž}Ùï—÷€SE6甚ö™â›¥ijä^s@„ÁI=S÷T@0ÚM…> stream xÚ­XëÓ8ÿ¾E>¦1~Åtœ`aá@pºc+„|È6ÞÝmÓKR⟿Ûi“6]Ä íJuìñÌÏóòŒÏçg÷Ÿ ‘0J,µ,™_'F!L¢¥"Zèd^&ïSMÔ,“R¦gK_ÍXúO`p1û8yv1?û÷Œ%þX¤$TyV¨d±:{ÿ‘&%¬½L(Ö$_<å*D+ £eryö÷Ùù1&51\ŽÑpÊø„T-ˆRú׈՚HÁÆb_0f`ÂÉ-Oß÷zù\0¢´ØíùÄ&ðËŸvdYO— ' ²óŒ9’ ºæÌ¥Ò¸4”©~$ó€™—ùE&S”ƒ¼(É% k¯]Ñn·rë™ài7Ëx®Òúó´Z»eÑvÕâ|–¶Õúf‰nãÀm²@[¬Ë0(ëíÕÒeeõ2Ñ‹®ª×Í¢©Û6µÎÏǯ*lšº«×ß=L @%œG|ai– #ÒE½\Vm…< œ+ºðÛÝ:HïÚ< ã/Uw–¿zñäbŠÿ¹+Ví\¹ÿŒ™¡*A“9EÛ Uiøñ”c¥g‘tÄøbíš›ÊíxçÃ9‚´ÈûÍ©Ì)¡ f!DêÇ0Éü·ôëL˜=AøØQO!rº§HXÐîÒ2W ¼C@LÝ‘èÃø´\ibu>Qõ·!/±ŸWóù¶)>-ŸWËOÕ¤ž-aûä0¡g°ƒI®r8†½CÓ.NêzÌÎ ½ºBpnVEµ$‹zu¤gÀ¨b˜Rt¤:Bp¨iɆìTÍ ±Øÿ‘X¯ËoQÑ[ï,Ÿ–îÛ”º5ƒzíuŽ*áæuGºl@8¥îv^hX!“«-\Á L~ˆöNO‡<(¬š²@¤:u`+ ôÑcPÕäÅÀ©C¤˜7îÚ5n½p'/%çÏÛ°hÞUŸYD‚Ÿ# ¨siN[$ÒeÂ)‹°ó’§†H«ŽJN5p3xNè½§:=ÙmHe¡Úšy³%[é:ˆ¾_¬Ñ}YBÃ}F_ƒt.Öµûd]¯‡Õèg\w¡òE+ÒUcVGäXÃÅ`?*ÂOÛmý­CÄŽ¿7Å&²ôe,Ššq›ÞÍMÏfƒõâbéâWë¶eÝ›ª¬:$ývÂ×ôájOœ²j»¦ºÚú(ÍæŠ§—ØSºlB{BYÛ&ÝÎM\lÝ"Ê„/ßìMôq»âÚ_ÎåÑë¸:fp2Ú'›Ü@ÉÝ»‰™ôÝ$cHV'²ß~à•Âæcñ<Íë-`¼@'7&zîfœ¥o§ @¹êóâÃE¤QãÓ@u”bûª„ÿ¥„€3šA„Œ jŽmþ)ïUœf{s%_©joÓ¯q®„Lˤ÷YŽ]}~ÿ¼|zzOèî‘ì¥ìNÓS÷ £û@96ÇL¦¿O)dp67””ãí3\%ó™ÉC>é*\áÿHpŸšwAŒó£»àÞNò@‘Rð† ëʧW` 9~f $]&¹¾B.¨BÀÕð£Ï3ÿhÓ“5aðz†:ø²'ZhT"ç->û„!f¡0óA’YaÜo—ExèÁeŸNíè è„§NrÆ¢w•ÿlÛÉŒ¦¨SPpµ¢+PË¡î\\¼õO>~äZ(CJ€9÷µ×Œ»@o)–a©ØÄT “_«U¯â¡@àX7,ÕïYÔPnºHö}«ý9˜&Šê˜¯»XV´¡ÎX×q¢«Ç2ÖòE‹&|¹u ´‰Dþ Ë8x…ÓÔU8JØ,¸ÜºXë„ÃÃÂ*\3¥[fÕºt¸ë¢2¦ÏXÇX¸¹ÆÆ[áøæó=>,Ñø^ô½¿Óÿ )E endstream endobj 1748 0 obj << /Type /ObjStm /N 100 /First 978 /Length 2082 /Filter /FlateDecode >> stream xÚíZmo7þ®_Á=¡Èáëi/×+Ò»Ã5âôS‘²¼µv%C+ñýú{†Û’#¯dÇ.`À/³»³œápž‡CrmòVe“'e£Á)g¼òÁ(ïyù›Ë¯‚M‚W1”;¬²‰rÇ(¦ ‚UÖä<€„öˆð®.IƒxæM-¼ìÅ`Šø¢—{Òò²y¨dWšee™YôŒ"¼ŒF¼"ÊaàÑ9[žYHÅŸDŠ|?bP½´£"¹„”1‰ý˜ÑÅ(¶"+GVúŸŒr.ú•óa!(4[žYHÅË ­TÚ€—³)*oLÑKÊ/ƒ˜²òË(B(!Dÿü2ŽI®lBŒ2ÞŒÅ<ðÙHD2^b‚èr0hÌ# ÁpÑ '69ª@%â 5—å)[‚/™T@»°ÀN…Lå Œ‹ƒyÄÈ@°‚¸à °t€ƒŠDp2HŽ$¼ˆôh÷ŒŠQ‚• ^MÉ ¬ø™’Üs*xèìDˆ›GÄIز‰e\-$ÿp/«ByÊ ƒ#VÑx*CŸ­U°l`Á’Â[#• BÈTvŦu¢ø†åàXîA- 6«, AB¢r[„LµpÂc䑲4ðHd…ØDœØ‘ôÞ³ÏE?(ŽNlQTœBÑKŠYR/K&ƒòIßb”<ÉrÅ)1ôÂË]' zjJbeуid–¹oXže±ŒÛÒ[–Äu •uÅ*‰Ä:é»õ”¯_†ï/Ï5üÇt:[ †?ÎæÇÍ\ýn€sóa0|׌êwèj‡ÈÇèµ/3Z†9&¯mÐ;¼8Z”vþÛNOÑšzýZ Õð·wÿ^þùf²Xœ7¶Óî¼7¯&͹ž6‹a׌æãÉßÏ¿ÿ£{Ú\~‹Ž2røoê‡ø¹¯‹®Eä¦Ñ}ì5È$’Õ&Ó½üsÔž-fßý1MOu×6'Í|ñfÜ̧z<éëŒÚg!â!&«3Ò7$ÒÑú>ñÍ?µõl~2uCÃ&i ¼îÐO0˜|€ïÔðm»øpAšƒýð uréJãílº(>¼EÆÅKM+Vå’RiuE…»M}†$DnÕgËD«ÏÐ}Z]ÁØð`>6’üôV ß7ŸêÃÍàŒNšÁðŸð©™.:!÷⻄·›]ÌÇM·œʽ_šãvôãìÓr WÙ#äŒHŒæhú./õËÈu°_æ$q«ÌI+ÁVŠðaã¨ß½»’€lÔ ¾Y…Së`ˆÌiPô®FýçÙû™Â(}sÔ¥Ü;Ù¾&81Wøœ_À¹œ`w°_'ZßΛ_ œ;Ã1ºu8F»7CªàËU¨æ©àÈÏŽÉp /p¼ŽlÓ#mƒãM…ã­Ùñ8w†cÚÇ´?c¨à‹U¨ ±4=@³yÖÉ:×{¾„+ÑÚÏV3–Ô»@ôl„èޜȵÏþìë #:²šÏQƒ+‘9,ëCM¶—+'£íTOšî´YLve‹%u…h;ªÔ’ÓÎÛ'£.‹¢\0_©‹¼ÎÉíE]Q›hóu¥­Ô•úS—¬!ñâêJVŸ6åç¶ÈvÉñÞ$—*É¥Jr©’Ü*O@iöYSZ&ë¬{©96ý3i ¸W@¹¸75¾pªiª9ôƒj^‡jv+`f¿70MÖû Lä!"± ˜Ô{ö´š|Bžm’ì)3€©¢ šsê“ö“fzÓú~½|O²/õØTù¥r­Dæ©'îÊ8 ‰å?KÆ ¬)Øf6z&ÄÄ–ƒ#…Y)Þ³Š&‚‚r\ÿö«Íì˜ß\LÛÙÇV7]ï“‚ ÙÊΕÕhGQÚΑ0öò¥éÚñ)8å®Íùlj |‰¾÷…èͽçë[XsÞÝXÞ°*ºŸž5—ûn:²ì_«ü ’ÆÐ•9Vá¸vl-_4oa"ÿXLt» ¸ÿ?O)â endstream endobj 1850 0 obj << /Length 1429 /Filter /FlateDecode >> stream xÚ­WKÛ6¾ï¯ÐQ*†ïGP´Ýd“6AzHÖ ¤9¨2wW%»’œm?ß!‡r$[›ôì"‡Ã™ož?Y_”Ãa9æRjÌèò·+ÆX~ùêÅÕŠÛ€gWËÙ%ˆRrçËÃp·ëFE€©C4±2vb͘aÌ,aÂåˆéy@Ñ•íŒüuío}7,©ÐОí1ïÎÝ,‰Ô™fn°‡ŒlÅ„o)¾saQãM@IzøKå»–TÁgH¸UDñ)’¥¶…Lg8æ6sk0ÞS õbÄ8„ ÝŸØÞøßù¶òFLè“+ÿ/de÷Gýq¡Â ‰BìUh¦êk†|Å„q±Âæâ¢fF)ä?ãòL¹cÄB¾Nd.ÕXâ:S½Xcðn“æ7‡ÔØ7~(ëí÷vé~éÿúéö_xG µß•ÕPïÚã»#Æw'µéH©Ûj{ØÔí-n75èñòÇ È#»Ç ÊîI|›¡Œ'YÈ2©2é ú¥ÍÖ @[ß…ËÜ!Û0^†fÃÇnÏ£}5ì:ܕà 7<WWåP޲A$4Ò«Ýv âû ÛCLOæ­Á8Jc‰†á)ZSâ€×Ôm݇¦ø«.{¤]} Å›ð’K |¬òMpÚ_«"80±pJ2m]ô} î»Ý°k ü ) ­{Œc؃ã7'/‚q˜ a¬MØÝ€Í BPöÁí žýOHO1ETL‚$Œ$,ª  Ç›)ã|ƒW6¾íë!0} a ‚¦y£¬Bð [C0ÚMh/x'˜è’ýGŒUö@¦;}bLcV(4¨Ù5)%MÈS—íûÞ6»®Ü‡¤Š` ÙMDh_øUÊ  t~[ÆÂ¹«÷HI¡‹wïcøOFÈ!GÚ¦a •' “9CƒðY@ÿN<+h“è°êý¶®FC;hª# VÖw7X#.–®9–.Þ×Xg.5šoárZîZg“h#a ò<Éž˜Ä$¢A“б’æêÖ7àÚ ·àº[¿Ø 'Óur.íï¥ÙFÁ¾Œ§œ-‰UÄÒã °(FªG†—:ïÄRNu¢gàø’ÔãÛÎð ™Ýxü-50EY{rI¡Cê~MŒù†óùÕôƒÈ†8C“c¤ ¿ˆ1ÿyQ.%,àüÂöÓ·ÀG»9øØ]þïØ]`u¹Ýâbƒ-Vußj×uP<>ôÑÔ³…ˇžSk’—2¤2–ä6=SÇá ~ïj±à€ˆæ3>zŒr|æ>ãÁ †¸+ endstream endobj 1859 0 obj << /Length 1940 /Filter /FlateDecode >> stream xÚÕY[oÛ6~ϯУ Ôï,vK—vkÐ=¬5Š]<[]ÔÖvf+íŠýù})W’9ƲaCˆ"Ïç~äG³³/žH™gž{Êfo2'™”.³Ê0+m6[f¯rËÜdª”ÊÏ'^ç³gç/&¯g—ggg¿ŸQÆñG¤©=ž‹ÕÙ«×<[âð2ãLz—}¬AW™dÖ(¬Þg/Î~:{t()Ï|WÁ‰0µšY%õLsÛeûÂ9²Ž«É”¼È_54ü…ÔÌÚã€?Ç8~·›6pÓà€}rµžpU®#)ˆñtÔæ™ Žñì«y¾,³)ÍÈxÐâL+ŠgO׋÷7»òÃDм˜L¥ùÛ¢Š‹Åv³Û…%å»bQ•›uÜŸ¯—q±,§{àÕ<Âî)_¢WeÜÝ]ã ‹j;Op ÓFèYðÆâe|)+¸¨Ù»(41%…»ª(û£b¾Ú= '_¹Z„&Pû¬g h-бÒ@0ÌF3¶¹z5¯n†í®$ãÖ6J9!¢üüÙÓ‹‰pÉ/†=L2­U×Òç7ÕÕfÛ0‚Ú 1Ì©:Í0g/#;$S\62]ÎWµÙ`÷7ëwC´ hª=ÂÕ~µÈ `Ðí–`ÓÜa»ÄjŽoWìÛE±]³EPÜBäZ¤‡²a‚: {[ #è°#B9h$²¼ÖLÔz}^¼)¶ÅzQÜj(‰*ÔA¹›¥æÛŸË¥kquHÔz,°"Ü´8X]r5gâ…ÑswÀÜspÓÍ¡ÐJP¬C U† —8?¿YÇ”²,ªyùþTʸh„Ƕ!Ê4Y¦Ug«öC2u.ÿ黋¸HµÊå×ÛÍd ï[ÞLB•šR^•XÅúæóeuçñ±*×åj"l~³úLi ì4jBÞg‚›ž8é¾"³Ì[k S.ÔfmŠôoŽÜT"[qﻤ7o¢X†Çç÷±ŒúºLB5MEW(RiØf¡d -”Ù½KÀU¤Ô™æ‚iR‘W ëþ®)r2–r;_SÑa±h3ïA‡0T:SÖ1ƒ>¯¦7» m7ÁÌj»«âK4M‚%z®©¸ÍWÅ|w³-Bµ>O8«ù2ÑL–ĪŠllHÕº©–Ø_‚XQ“EgR+›óªƒdrÔSWç‘Q9}WE]}6Mrz…k¥· jB³ÍueÄgH‚”êb??æö(-®Çñ«ÀNä|”—A^ćǘ!â ï!©x¹ÐòñóNkN»œÛÒœ~;!¸-TÉcÏÞA˜`t`wŽÉ‚îÔËŽõZÜØQáËAk æFMsÆ•hŽîhÜPúµP'è3|†ãΦP EÔCr!$°³©|ŸÄ·Œí±eãÂD«ïfÁà¦ÇlH߈ê®FB3!ª#<ö6èIÈÓ´*0Žî!‰dÄqv0¿·t";mç=¤Ñ¶B …:ëÿ‡aˆ‰Ó´<á®’$ŒaOS©Ä\Fù®£$ ޳“ÆÐ'²“è×¥>Á/¥Bi"uaøoÚÐ…yÁbC¯ùÃBb¢Wœš+ŒÂùElbÆZoe0ð÷òé/\û4¢´Å°Ý‹­nw$½©»£þ´ž*6ê{H9±¡kz'Y÷ÕáéBw_êo­ö8ì¥ß°+Õøè¦ ¹îñ¬¿fhÎaH j‰‚i5•PŽ6ák:3ͯ4lBª›µÜ {´Ô B}=hÁÇ£Ž3=¸ÇV¹|­þ]åh=ÒŠøOiN¡ã²'“ã£÷PÆÅô4Í)&”d-}•èÏP!ÞEóéìqo²Çuè£ÍQš¬7œœ0JÑ>‘¸EFLRZ·å %SŸSaü"§‘ 0N…€dˆýxôgütG\ÆOy6ˆÿf'³ä endstream endobj 1867 0 obj << /Length 1879 /Filter /FlateDecode >> stream xÚ­XYoÜ6~÷¯Ð[w‹ER¤òÒØqÒ$HÒ,‚i€Ê+Ú«ZÇF‡S7¾C¹+ɲӠE€,áÌ7÷È盓'/ hDÒ(¥Áæ*PŒ0¦É"™ 6yði%Iº9竳u*V›·gÖŸ7oN^lN¾œÐ ‚4 ð€²Ä>Láw[|ú9\¾ "ÂR|µ¤UÀˆL8¬ÊàÃÉû“óû(OI:…G4Z*‘œý?BeJD$§b?(•r+#:Ó„$‘ Â8"‚S¤Ø¬ÓdÕfÛ5‹W7áeÖé|2ÅWCë¶¼+êk³g+}kHtmþïñ([‡Ô¯Ó(ÂÅ/úãè¶^Ó•c(ñØ D¾*j<<3‡Þ1 9giRÊq„y®³ª{jnŸ¼¤j¬7ç v –±t{šHø±”S …ŽtÂøE­ÛëBx‹ñ „ Íñþ=‰N4c+»†Cj÷ÜÞ3 pc(poL³„ˉ™âú T1o‹Ê}¢ŒISñlm,lìhDo_=·–»Ç(X¸Ù­îÐ-¯/žú =æIL1I"djBb¤öúæ@zºpDh£v ÎÎBíD´‚À€g#Ž‘» vT÷/Ö‰DP’H¯zŸõÃr$pF")½™?®)¥«³·¯/Ö±rFq±sŒÁ§¾=ú]ÓzAà€±A¢ 7Ø%}ÜQ¹„ —××ùzý|ØX7¥¾[’ )‰’CÄìî[YBýˆƒ„Æð„>ì`GŽ—k!fJG—[\FÂò{>\¹=Y`;…áFï8à³KF8G®ÌÜ qåŠËÏß« &žò)ïn¨NQ“Ìe*æKYNOÁEëR¹­²6÷*ßÖýéܤ€'JPœsº7ŒEÑ5mv­3Mb˜1¦ ¿cùˆmÆP©„ Mã ëSDšµ.s‡»ÃÓ«¡>”RØb¼ûDƒƒRg¹‹AÐÚ|šAÒ– rvzü˜öœ+˜{㥽ú1íy‚õiÌz‹•ö¨|y=äa–B›îá;Ÿà…KÖl¿/ í’ýÊV$XT –äôá fø)žºJ?Jè*³ß¶°Ú· Ô|^º‹}Ùô^Vëβ²kÔoÛê€ M*Dû@¥cðƒé­~è,¯á=`ÞšÉÎbÎVBˆáŒqŠW_w…›_í…m{¹­g°«ì¸8¾¯« ¬§Ï8èš«W۶麰Ó6!¤$ìÆ“eõõPf•"5Ó)áÑÏ yÑõm&>®¿^͚鸀كƒ\Ÿt]ÉöÃnýqëÚ%gæ¹ñqV°‰EMCïÆ»ÐTœ!‡FW˜a”|̺Û÷ܹ~>Z9w>ÃæZ4m«ËÌéɱ‘ƒçûcèI!ÝÝ ðÕ6ç¶Óø®j|S*¤ÂÒÆÙ¬GÀÁ¨G˜—øi`FÂ~ª™/ŸBÏPÜVÓ–ë|2 y­˜ ‚¥c­À ìA% ?¡¹ T_ïüa¬ä­…×¾b=w Cïðyqš}ö (J2ñCýŸK ¾ó=þÅ'¦KŒQ‘š³s6ž'­P2;[C¨1"©«vßPqÄÿÍùÿ4+ô^ endstream endobj 1874 0 obj << /Length 1352 /Filter /FlateDecode >> stream xÚ­WYoÛF~ׯà#…X›½-j×N“ }h"œ<°2mÑI‡¤r ¾³MJë¤ “Ü™ýæ›ÃgëÅÓçŒe#ƒ ÉÖ7™fˆ1).‘b*[_gW¹B/WœóütiD¾~}úvùaýjq±^|Z ÃɈ ˆcãN&³M½¸ú€³kØ|•aČξ8Ñ:cHIo»ìíâŸÅÙ±DHD{A1xqlVS„‰ü5fµ@J™¹Ù·Ú®0]®ˆ¡ùUô Ú§œ"Êøxì#“Á¯Ýþ8Š­¢Üj"˜páPsÁ#«‚Ï<e8lMm©ŸÙ/ÍËåŠižW}»+†òÚ~±ü¾këû!¼oÛ¡m¼TÑ»o}Õ;Ý´sp‚{¥geQ÷ÏìÎÓçDOýã lur÷©àá$ç7Yљ⋦ìn«rÔ-¦'àê¬Ýï±ÀL`Œð 8ÌXî?`™ØožÿU^&í5s»_ÁU‹PWÕec±’.(Š$%Ñ…Ó%`æ2Ì9`=zýâOÿ¡Öv³¼tþ¤Üª¼"ð÷¾êÊÞÇâåù³C& Ȥ”H ão”[M—æ—9Tç\ˆthZcÄáØDc‚ÄQêÈp²nIATñêC1ìÓqç a¥"è—KBH~úúåù’ê‚‹ó4ÂÏ#}º¶m A¦€H¤]þ0¤UdQ)Ÿükôéïê£u¦ôÄ{Q4K’o€û°’0#q<·=‚YI€„f’P'G8È­&‚©¨sFëjcÝåm‹fSþ±)»ùÅ£âe–;©â¤ŽÜ™_œj…0p}æN• Å I©B,‚è›ò¦ìJðøÑð1h³#ÿ/~E÷®úœH7+!á)~”náöÁdºÍÕ9Ëœisdܤ¼©„ RG¦“ MQ,¿Ù7¾Ð\—CQí~5¤cßyÈ‹û-¤…m0OÞù…Òï6öïÐû5[Dï;¬ê¢ûæ×n‹º.žÜ•ƒ/­Ç‹Ÿåź‚%O¥c[:M8VˆPÁøáhÂaZ‰£ MF“ƒu…8 6ûdÎ#b¿-WTé\ùË„ö\û%nlòžÂ e˜È¸âÆAyí4/™×eÑﻲÐøÅöÆ?‡­ ¾0umßûõ¾Ü •kúðqÓv^¨ç\ø`o26À×8*Ø÷®µ¾ç×û‰ª96#ÞR!‰Õüý'8*spÁ"E² ÜDÍ\…ºo„ ë l`SIμðˆ1 Nóµ^,Œ£=°ÐtuÜsÔïoZûá¡éz¿6l»2ïŠæ¶ ËU“̪à¢Øôš9u—‚ : #“%)µi<ŽGw 7ˆé•Í?³ÿ:°ü )|‚!B6»Â|ue¿Obj\¤0%^û—+‚…]MünÄŸGü} â&{f¼5˶p„ØyNÐù™‹pF`di$5…ë3¬Ç%üL >EV)NýÞ:eÒ 9Å ÏØðûcðÅû ð 1w¬÷=‘ó¤º$rÓ8†9ª9¾€”ÖØíÿâK'·YCAÍw)dïßcŒƒËrr¦0-#%ÈÏîÄ(hTl~'_?Œ¥²Mò¶‹EÀä»}]5m_ vë›_Û´»””(ò¥¶ž DàiÀÜÙðµ 8v0QCkUmª ñBŸevŽ Ìßê»%Xøfñ=÷ÿNmì endstream endobj 1882 0 obj << /Length 1628 /Filter /FlateDecode >> stream xÚ­WKÛ6¾ï¯ÐQ"F|ˆ"¨7»i¤‡4FP ÍAkq×ÂêáPr6Aþ|‡Ê+ÙÚA L‡3ß<9ºÜ\<ÅyDS¢SM£Ím¤8á\E¹$çy´)£qN(]%Bˆx½ÒY¼y»~¿ú´ysq½¹ø|A£~4¢#"Õþ¦æ2Ú6?¥Q ‡o¢”p­¢ÏÚDœäRÀªŽÞ_¼»¸<A3IhÎæ(XJӵБ”ÊÿG­ÊHžë¹Ú÷J]2§:JhʈRQÂR’ Š›•–±-¶+Îâûä¦èM¹J¸qSµU㨇Æx|S=Rtšââ7ó!œ´%RáW$â÷^!òó¸jñlíˆchÀrÁ5À`œ@˜—¦húîôù+ª¦v A2ˆ\Š|ûUBežsî¡$°Î_·ÆÞUæ(;›ÞÈ€´Ù§Y*²”¤Ï4ç±_‘ú½ð甪GÜ9¸çàYúÈÇ"œ#— sä_ÁXˆ±UcZ©aшœÉèhÄzåbà<}Dôö÷—Á’âpg!©ö•5=ðõÕ‹1­I- øàf)%É !!©‰ŽˆöÇ÷G¶däK&Œ>¯çðOÅy“´ž© ¸6‘˜†£©âÀu¦x±™ÈŒ™¦ÅpXÎÁIšç£›?¬(¥ñúíë«SÁé×WËYÉI–‰ylׇa×ÙQ`êIToÂ8Qù˜™4_„ËÓf×5¾„!î—{gú~I>ô$¡²ñÒîÌÇZšå‘¤ ®Ð§Ãø’ ãRxOÄy¥ƒGJnä¯[c[²uŽv,‹>ÆËÖàåût›DÂçÙy;qÜî Î1—¾¹ºØŸ>…Fo–1ÄmÍÝØi¤ëþ¿ƒOФßO‰pÜ¥ýÐ> œÖï¿@L i=©týñØä¡·úÃÖg7œ6>õcC0áÿÁÉ5u}¤cÒ“Œâ2#||šÎN߈~öÆt­éOó¿»éE¦ðj•Uµrs8¾xj´ª¥³v¬T¹ÃÿjR°[´ãùÔÓ—jDŸ®BˆYÂ')öÿð4/¯ÒÔIÕb±),6ïµð’!0'!‰S‰×¾ÿ/}?' endstream endobj 1889 0 obj << /Length 1493 /Filter /FlateDecode >> stream xÚ­WKsÛ6¾ûWðMM $rií<Úd’CcMÒ™4F‚-Ö|8$e'“?ßI‰i{ÈØc.ow¿}ôåúìçB$œQà OÖ×I!¨E’KMs‘'ëmòä”g«TJI.VF‘õë‹«ÕÇõ«³çë³Ïg[eEHúógË=% ­å¼¶ûq×õÑ`6'´n–-òØW<_â„bäô±èËöKUÙÛK.tNóâе»Ó4K*u¢yüûFX:Á-ÕwnÌ{¼v,é€Ýؾ¥—Ç&œÏ*›2Y:ôtÂcsVäXï)‘j±b” Ó`oíµím»±ß­˜ÐG*ÿ¯deÿgu¿0aŠr¨½ÒðTÿ6aˆK'ÀÅ ››óž9ƒ<(Qœ\4ÜpZ@¿Nl.ÍX@¸^œ1¸GhVÏo÷-ž-[;–UýRJYÉòæaÐÍÓ¾5aÈqºãkÕâ}b†àÕ×Ç “¼ˆ"Ò5©tAyk7¥[øŠ¨Æ¢ó·ÓºÀ–OÕÔþû™û3 ˜iîà ¶Ømvƒ-Žb•-à“ SêkÀH‰k`°o}̸€Õbáó ˆÅLZ)ÂMlƒG¤ ;#ÜýƒÚ~°ÁN×¢ûQs5j[n«öæÈzk¿ŒéØ¥‡èŽÃ>ðCÇ<š9 £ auLlî¼ ›iÈë’ù€œô¾,ž±!ÑJÈ:õС4Ï¿_Â"N|õ%¤wº—“Mì8M¼ËÐu¸rÝõ‡XåQ¬ÜÀ)–c¬U»©÷C…‘8UªB†Çn¤bd¬4é½·¯A=sÔþT&ØÄ ÊÏ*{Q!F‘zßTm7¸æ0Øå:Dª§…»O)?ǽ‡{‡¶ñ> stream xÚ­WÛnÛF}×Wð‘ÂÍÞ/\ÔnœÖ©ýÐH08~ ¤µET¢’räç;Ë]ʤ¸Ž“¢°aJÜ™9gÎî̎ϳ×ïKF’,îÍc:Q\"ÅT²X%7©B„e9ç<=ÍŒH—§óìvñ~v¾˜}ž‘ÃIˆ ˆcÓy&“åvvs‹“,¾O0bF'_:ÓmÂ’>m’ùì¯ÙÙ”EÇ,(&$«)ÂDþ?°Z ¥ÌöB®¥ÊrbhzÓèá)ƒ¨üÉà‘Ià×-ÿ}0Ë{»|`ap®c`Ø–©áCT–†˜Áê%Ì£`æ­ƒLr")2BB,Œ'~íÊ;¶[[eŒ¦m–3ÍÒÝ{ò´][ÿ¢¬ì¦hÚré¿>Ô»vWåîR¦»Ê¿^Ö»¦É»lËþUÑúHÍçºmN”¹ÈŒLí5êha Æ?÷|Îl±mÞ¸•×Æ9ØíEg÷ÀRÁ£³‹ÓQàóÊÖ÷¥=ÄC†€bÂ31¯€0c©ÿ¯‰ûÎÓßíu7„ãþTAZ[—½ÈQ Š"IIOá4s:¹Úì8F—üÖ1ˆg,|ˆy[´ûxºœ!¬TuBÒÓË‹·Õùüm\X†„àãO÷ízW÷@ÀbX„iÞU Òª—¨'ÿñ帴Ý1‚üÿ,êÊ~ͨJí>†}ƒ Ñ;¯KŒƒ•‰¤ iÐç¹ÂîíòaWdGT£ž¬²¿.m]¡¥c>aňAÐX‘ºFFãü%ˆa=fTú²§°&± ›@~fæ¶^a æpx#Ê è²Z?¯<œLJa ?/¼7Ëv1ÝÇÁ°;H­§4¨„;H¨!X V㔩TÈ(1æQFë…hŽ$´áa|°w¶¶ÕÒ>[2 n¶ÿ°[Eý±||3Ù.lá®aÞ߂`— c{p®C&s„•ÓÂ#HCÃÄŒèÞ[M £ÓŒ`1Jƒ˜ûpѬl[”›ôg½\{Pö±ë@¾Ð›§Î\Á]¸*!$« ¸û»Ò÷7EQ­¼]951w­Ý_ˆa” s8EB¿í'âŽï\P_Úú«}åßÞíêØ­z¨…gfŒõ 3 Þ‚¦¿DÅzbJ mÕØ]D7ãà¡‘Ñ@L_@bðCÈ‘Á ÆL¨MöMYÝû…v v¡½lŠúÞ6!‰ºx(WeëÒúê—CêÝó …ujúÎãuð½ô3®Sr s„sÄ7ïB°öQ¿õ]þ_:,F‘ endstream endobj 1907 0 obj << /Length 1395 /Filter /FlateDecode >> stream xÚ­WÛrÛ6}×W𑚠\ ^ìØi’‰ÛÄÖx:MóÀH°ÍZ¢\ŠŒãä绸P&)(®3{F$p¸{p°»XÎ&O_0–Œ4Ö$™]$Š!ÆT"yŽ$“Él‘¼O%"|šqÎÓƒ©éìÍÁÙôÃìõäx6ùgB $!‚"޵ûR³<™¯&ï?àd“¯Œ˜VÉ­ƒ®†dÎái™œMÞMwI‘#"éÅ„DÜ*Š0Éÿ·J )õÐí+M4&ršMÓ÷Î=e`•ßî‘NàßN_oaY‡ËzÀƒ±9Ç@ó¯0M5ï{Åaªï3 ò92æ|~°.“Œäi‘ƒ-Œ'~îÄ›¶6+SMM›iÆK×ö×EHî#Ä 7u1·¨k?û· ð›z}O45uSš,’þufM™sÇ”¹§phŠÕæ™yú‚¨þj8G[ù|\ÂC×èÀðqeêK ÔÙý/Á[°ý˜ Œ~|Ký ûÎÓ_=÷¿ÁÌÐïçN޲Ó5JAR”SÒQ8˜Z™¼Ø@À2zóò¹cs>öŽ…7qÖM_.gKÙù:ŸBÒƒ7¯Ž¦TÏÇGqa‚xÐ6Wëºs,úy—#Å]’ %;q!å"œücÇéÌ4W~éšêKÌ´à¯Æ‰Á„"IN%R ɾôípYèRiÄndÎ9ÝIôøý27u…æV¾"ª§¢¬O$–ѵCc¸h –ó2d´>¦ƒØä1jT‹;¯öaëVq½4w1Ñ%A8'ûEW MrÌ€ ß/zÀe=`Lô‘9ç´°\!DÑÇvJR`+Ûon&p\è>­ØÔ©Ñh†(‘CRe4[(Ö°zþ§æÂÔ¦š›½ Ãà(ûŽ=|{e×~·A§æ:ò»©¸¯W¶|ØC¶«`,Å‚cLb ²`ö;(ýþêÙNH0… ˜&‚QÄ(Ý—õ€±™s~ažÌžv€GPwÐý"Ñ 5"BöÅ¢! vø ÕÒIL¡)Ä}ŒXEýGùiW..„ýÖà^¹.ëcrÌy¹–Ð ’ed€‚òÞ³Q¦Cí¸Ž*Ãalá|L5êξìlvtYD0¬÷áX}Œçǧ¿eo_fÇo­}’&ñ–ˆJ6L†Ó¶òmÌÂ4E¹ü‰üf'eåSôcYl|ú¾{òÙµQð+ýøl -•9G®þCe¦a‹ qÖ#Li„¡ ÍV^T Îuº2Ö8Im …†Ï>BsÙ¸À®é³8×åÙë_m—iÍîÏ:«y-¤DZbx#®lMyçç¨2÷k¢pk¸¾ LC{ÆNW–a»lÊ›e9/Wü2 õ‚)SoÙ‡/–ëê²lÚEYK?wQ—¶?8ôMåºzâ»S¤U§ª¿?1ÉÑÂyªÍ'ëÐÔΔJWëU²];ªUZ‹²Ýøé[«5²²£ÆŽxQÝTñ¹  E¹iêòck‰lœÞ–¶%²³ðAÀÍaº©Ûyc~à¢^¯¼UØ6^õ%L¹ø-Ch¸í2ü±ιŠì³ýã߯*¿±j¸±jòÄnõ=ì§èþ$`$øcûð?1çO<ÑvSV—~°¹2!I¼øeuLlY§Éë€Ñƒ%äÒÅf!êP³=YK¡ëÁüÈ2X^®kpõm55F9Ûvá§{`z ùÑF³JqtapIÞ£M?ôü¬ðèîB5ߊýCôÞ§êö–„´ñ u—Qåö2ª%âyÐó«W“`íuüÚWÿ®&Í, endstream endobj 1915 0 obj << /Length 1413 /Filter /FlateDecode >> stream xÚ­W[sÓF~÷¯Pߤ™zÙûj™é”PB ¥ixPí VcI©$CSþ|Ï^dKò†@‡If,iÏžï;çì¹ìãÕâÁSÆ‚‘Æš$««$gˆ±|giÑûuå_W™–©y `0UðÀ’{„Ǧ¨º‡ž ÉÇl8Gë£Yà85X7å½ ¢Åçµiß—æ [Œw$—½Å31ÂßmÆRÿŸ‰}çéÏÞ„Ü fŠûPŸ˜¶¢¥ (’” Î2ë-[ËèÅ/?91à°Ù ¯â¢/ú}Ü\ÎVjÀzBҳϞd4ÈçOâŽeprøÔÀ³}¿mÚXŒOD9w©‰r58—¨'ÿ8p:ß™ºð¶ÿ‘¹sÔ™úÚòkb8 ÊgN‡ÍÛy. ø‚%’*”ƒîª ƒÜr$è²yFu¦ÎËÝZŠ#²62¤·$Ú˜93†9Ês>f©2ƒÔ ¯©†ê‚é”Wé“bÂ@¾&Ï÷Ÿòˆ_‹þßÛ˜÷%xÿxtO½ýNipfÐ>øÝÞrË‘`Ìû3uô¯ëLÈÔ|Tå­M[£uFÕ)ªrĤÓ‰ö uBfj:Í1œ<5%SFs‡h› z’ ¯Ì•iM½6w¦ƒvú?âV´¿—žD‚ ÇVØÞ.¼3An9ŒEb¦Î!‚s$Î?σ“°”cø˜çƒÔ xtˆŒ"Fipç¾ö}fcz8_àÔ¯ñ©×‰àº`¬CYÃå ~Õ(‡ÖD6f]Ø2qÛù¾Ò7QµÐ¸Ù…ñï-¦e=êì¶eÛÀÇ$lˆðÈÁÅ,IAд1xþÒüØ©ü<ÈÎ|BÀm‰5]Cߘr¥ òp`îÔ\€_¡Ÿç°§¡•~ ^ÆÈN:шCç™l Ü–#]ˆGn'JÕdšr‘" ˆƒó&ªaΉµCÞÁÉ <áæwå‘Í|¾WPÀ…““BÍmŽmÈ<2´gžt 4­mÝ}¶IájÔͲ%…œRö‡Ã— ;¹”ÿ­ü¸jg@FÒ}WÖï?…s˨¡ññÃ`ö]T)T^þÙ!ïÏŽ‘GÌ’xlv?cTh¿ôK­Ó÷ZwLþo˜}#9”DAfá8Ô&aè¥:Ýumv‚‹ª .ç ë‹2—I›ONQkºn8;sÓûËÃéuY›ªèËuç×Ån½ßý |Õ6•—ô7øÔí+ÿàîBã•{<Ó¦ë—O/^Á¼\ÕTöl¤µµ£´„HB˜Ïl€a^)æm(Ì©©­[ú0z0 îvþáfÛ ²´-6å`KËÐ?ÂÖuS­EÛìë t€òìà ä£å¾ÍHZîLèð² ÏÂsц—=¼¸™ÓtGÎÈ™L£\†btt›…îvW½igV¾„ ‚[l-´5²lj_¿‰VÛkƒ óPU?ù}0ø}Ÿ†ê÷«‚âÄ endstream endobj 1924 0 obj << /Length 1480 /Filter /FlateDecode >> stream xÚµW[wÓF~÷¯Pßämö¾+NHHhàÐJ|(§ÀƒbobÙ ²Ì¥üùÎ^¤HöšJœh¥ývæ›™‹Of“£GŒ%£ç$™]%š!Æt¢¸DŠ©d¶H^¥ 9Í8çéñ4éìéñÅôÍìÉäl6y7! †$!‚"Žsw2g2™¯&¯Þàd›OŒX®“ºJR’êJ.&¿ONöI!QtÌ‚bB"j5E˜Èï£V ¤T>Vû8§’p1ÍHNÓWN=e •ßõ(Oà¿Ý~Ûò— €»âƒ\îi…mšó¡V¶†:ê.;œÎ7Ve’IQ.$ÈÂHpâ÷~5ÅfÛ˜•YOMÛiF¥Lë+ûT©©Ì¼mêµÿZ¬þóÊB·ÝçEùfš ¡,*š7õf“m@BÙA¯šzå7—¦°è÷Ÿ28,üÚþ©·#‹.«¸g¹0s‡ù´‰íž˜bµ¹owŽ=tçH`?‡»¸ƒî;. Б೵i®KÓËÀ -È~fc„ïM3ÆXê_à3±ï<ýżˆê b¼^ô~ª`®iÊ.0Q Š"IIGáxª™ÏgGÀ2zzþÐ1ˆ)‡G_Ü”ÙÀyôøôþîU%œ"N’‚ ©ÄÁépÙè.ë˜þ®8Ÿ ¸ë=Õ#Ç#YÒ¡öGë¢d$*$ÂE[´Ûx¤9CX©ÎÍ/¦„ôøéãÓ)ÕÁég§ñ;Å|ìâãm»¬›N`è‰4wéŽ䇊‘òËŽÔ3Ë¥ØV>ô'nzZU1\!¡dwn¹çgÉå*¹By.‡8à²0âq>(º„B ¡ÂTæ¦Y£¹5`¹_Ü=d­µÇel9å9"T޹”¡6§<¸þk<^Wצñ~¿+ ¶YS¶Õß1ïKômÑØ÷>4-èBqÇô ó=,àb¾ ó[´ îöDܸW¸5唤oÑÒ²Íl  4U¹F ³Ë–q˜ÑD§Cí±{†A ¸~D·Œ¦•$kÿ0Ož›+Ûƒææ`j1ù-ñ}xöü·ìÙyvö,³CKF|mÚ•Ÿ…Sß»Eó²|©µÂûS$ÿB­õ¸lŒÖÚ±8§™œ#,¨ØSž¤¡r dƪm@í©ŽV[®4’œ…hm×¾Ë,L[”ÕŽvÈÃwIH¡µ* W¶æØŽÊTÚÖþ £_üä/ý£nüsåRc€Ð¢hýSùÇlªyj^Üóov¬ƒýXc×ökÀ6åËË ÉÎSv1Ÿwc 'Mí ãbæ&ûñCÙ.ýêäè4ê©]ÓYŽ4äœ3ý‡è„q‡‹î o°`?öƒ~W9qUkt·ƒ#@[ÌŽVL¹žWÛMél’ ’†yÒ~ ö³[eN†›ýFÃÛUGNÅF=$…h‹~öÌ»¯£|3ƒ@DyÌ®c(4Ê;1TzÝvzsºËuÌÿðs©÷å_Qv3r;+R•‚4Ö_#–# ÷ÂJ {*4&š‚èÑyÇ’íÝ8k>BDåúÚ»DÙù|ý·¢Y4Ž„¡œïظsÙG6t÷÷ñ6ù w“Cî¾Û'½Aﲃ²ƒ²Ãæ“éËDŸ ,åQÇ …(¡; ¡tSKŽØŒ0íË AJÓ„iø‰ª ÁHpRñ”éK–"šÓHÆÿSFïˆéÀ¾\Ãä¯GÜ¢9ÕÏ«˜A;äþJ(–ðSe|F`P:ýãèÏ£ëbµ*~ô¾œ×«7“Õk[x•+¼©•›×6­G…±Í¿l¶—mSÌ[³ð﮳2]ê¡íÒÍx½9¡s3ÕÒSë[œ¿¶ÏÁÄXX)ÃV7µö¡)/·öŽ"/†oL•¯Ì\† ÷Ùûä¥~î’ƒ.?Ë endstream endobj 1931 0 obj << /Length 1573 /Filter /FlateDecode >> stream xÚ­koÛ6ð»…>J@Í’")J,Mú΀µ1Š]?(cÕÃÓ#iÖ?¿#J,YÁPl°‘wÇ{¿^nVÏ_s0J2š±`s¤œpžJ$DqlŠàK¨SÑZžE™ 7—gWÑ×ÍûÕ«Íê¯ (üXÀdLÍÜËŒ'Á¶Z}ùJƒïJx–wŽ´ 8Q‰€S\­>®^ž*Ád"ã©1elAlÊ’ÿGl*‰RÙTì»Lˆ4N¢5Ëâð˨À(>æÀU<>ñ$ àoÑßÈÖ#ÝúˆpAƒ9;§A¦N¤:ÎıTêQÇ2=Õ¿Éœ1s2¿Z‘Áš%1Éd¼(‘‚!îÃÖ<åa^ö Â˼Šx^Ã-‹±‡¶Áû°íMSû'=¾ñ‚yf-aq*ËÆÂîÜüb3ãD=P¤h\S—÷ߣdöN8G9„Iª-Т7•¿€¹¼¶€Ôàðdk ô¼jn–‚³½:°JeB"ÉH­Üi³Ù»Ç ǹõ0Î9 ›D¢¿†NàÌLjÝçEÛÔR˜®õXZí_/ÂԺ̻Þl½ün›²4ñ¬¨],–’Î[& Á¦)„RDr‰¦N·I‘ÁRÂÑ)ÉçÛ¤€sÜ&¡ °Ù69Û=F^£;mÊwOå»W–˜ºñ4¿œ —tH,ØW9áFEÇŠ ·QÁÝ'>^¬Ûô¶×žÄ/X€è]œ©Ý´R9n Ôæ[ôMëy÷jØüÞž#dèL½óDˆªLm*›óCµ¾6®ÄÚ·fgçÚS¹Ç3’Â:Ê=ªÂæºÓ-f²S<<é€ÓõÐû °D7øíÛ¼î°/Ø´j!«\~i|Y5•»Õ–¢*Û˜Ûü` 5=V8ÁcòÚæ%òÆVPöæPš­%Í\!&o½®Û¦mÑÃ®Ò ¥bµò"ñ9ˆõ*}Yà¹Ôhj‰WãÁ9~*¾\›ºÐlGµÕÝÙ‹½iïìù±]X€ßúýÈöÎ6]za…í¢Æ"”áaŸwzÝò­F@«wÖ㮫Å.@ÞÊxf$³s m<Ž•í>TðÅ4‚6uÔ\Øæp>~`KQ!.;E~·ž‘§›áT÷Š™ã¿yÙùw•λ¡Õ™´gŸ“<ƒZ—ɤZOt®û$>úÝ6Õ.Þ}¾¼àtIˆ`kš¡CÀo Ê¿;ÏÛ²A^ñY–}ö8èèz 6äa·ñn<ÁkðV‡a²Sƒ³;=›¥ù®Õ7ê Ó<ïóéT±8Ì2‰¾ÊÖ&Î`@ûä‡'a1¾ÿ1vÚ1i☠endstream endobj 1937 0 obj << /Length 1528 /Filter /FlateDecode >> stream xÚ½W[sÔ6~ß_áGï ]-‰)†2”l™”ãUÓ]{k{C)¾G>Òf½1IèÐN2c]ŽÎMç|úöÁbv÷± £ÄRË’ÅibÂ$ZæD ,–ÉÛTfæ™”2=š[•.žÌß-žÍ޳?g,¡ðǦ8‘Ô'­È“r={ûŽ&KØ|–P"¬I>¢ëDK­’“Ù/³W`*'Ló±œ26aÖpBYþmÌE´¶c³O­TÒBüÌòômt šç´ÊË#`žØþýö;±,Êe{‚ª<ã‡Va›[¹o•†­}›Aê&›Ê›ï¼É$c9'Vå ‹%î½ùîƒë»y&ŒH«ÚeºÙà¼èñ«¾RÜëA EìI<ÿÀëîžß¹û˜™}W¤$ŠúÜ r ’å>ƒäØé,ˆŽ×®=«ÜN·Ú?¡@¬Ý¿SE…¢”Ð;à°)N`™ù¹LBß¯Ø jÆvÿòÑóÔµÕÚÕsõ“.hNr΢ GsÈÓÐKƒÞ£çOL‡Ñ°B'}Ño§Ã•‚P­£­__¼ž3ÆÒ£çO͹ ¶M§V¥ä8Ä£mÞ´Ñø±ß691r¨qbtL/ÓS^á0zu|á}q«¡ˆ ?»¦®0ýn·EÖ~õÇÒµ5)ýâù”YÐŒN°¯ñâI³:s-zp4X3ÛÕß“Ùášp-FѾr§®uu龘Àó/\+Úߪ‹{‡ÝϤ@Ö‰ò(iÅ1'Êe{‚Cÿ˜> stream xÚ­WmÓ8þÞ_‘©tñú5¶‘Nb÷€;P‘î ‚/Bë¥mÒKÒ……?cÓMÓì!NhWMlgžy<3ž\-gO„H%–Z–,¯#ˆ&Ñ2'Zèd¹NÞ¦š0;Ϥ”éåܪt¹¸|9¿|6{¼œý3c …?–0ʼn¤6ì´"OV»ÙÛ÷4YÃⳄaMò9ˆîAt.ám›¼œý5»:ÁTN˜æ§(8el¬ᄲüç˜5ŠhmOÍ>µJZ+æ³<}ÛèÍsZåÝ0Olÿ~ùÓQ,ëå²à‚±º€ÀÚ3«°Ì­Z¥qih3J}ÏæHY°ùÞ›L2– ’Sº(Q’áÚë7óL‘¾£L®«²Øú±LWMݶYëV]YW(RtøÔ(±œÛšsq<~4M³ JÉSw/ݦnzC€b˜r912ä1º§šé)LøÚcZÜVúþ¼h¾L©VšH¥zùÍ8‡˜–„ñ<ɹ&(¹/s{¹l ²h„n¤î’x|7nOvEµòn\Û¹†+rø4F%„†$CT™ÝKa:e@ §ÁN1•˜ÙÖŒ/Hyö#Ô¿¨Áä~qÛŸ¦ÈÏí“ord‹ ¨Úò~ò£\6œ"¤.Ýzl¯¿ÈêëyUÄ9´?Y@QêÌú©¯\ÂiP~j½œL–K"àÆû wíW­Ü½r·ã‡Îé϶ۖ,\׫ôJS{W?àJå} ƒ’&Y&”ž‘EÍÿEÑü]Þ<8  –Jp"8¿?¢\6œ €‘º`Šƒø×ô̸eÄ@•èœ8ý^êÌôd䨈–_âý·v]QnöÁî÷x`á"†»ÇÝøƒ†›~»×ÂÍ k‡ñ~ÀÁç²ÛàÛºlຎZâͶój8÷úâ N~˜g0[·uLüµ[](裩ªq­+ÄuSú»)aаñÈ2toVªDæ”h®îÀ½å¦ôû¹NñiÒ‡;W´‡Æù;FNÖ×ø d€ì¾0†Î$ö!^Q…‹`šO5ÇòËÑv„ 0j€ò„)˜Œˆf„Ó N|(«@Ìœ|tx ÿѯw_0¸®|9êÂji¥,î;ž ’âgBY 磹¨qtd‡žÕPÔFîPˆ]ø¨ î ja«cUuçÖÕX %JûÏ®ã}ò 7@^¡†o}‚þ MoŸÁ endstream endobj 1851 0 obj << /Type /ObjStm /N 100 /First 978 /Length 2138 /Filter /FlateDecode >> stream xÚíšßoÛFÇßõWìcEWû{wŠ\ë´Aî×Aœ{ ü@ËL¤J¦ I"ÿõ÷Rk[¡/:’v¬}ˆ3"G³Ãå|fvg¥“#¡„NÎ í- ^˜hXÂYÏB>âCô"ÿˆ¾¾‘DLÁ'‘(² Ê«$ØÓ¡¾ UkÙ¢B»À– 4›Â•àØ–çK‘õ¡ “Ò,ᱡŒ0ZóÁ c¦,ÙP3Šä …aµ]˜m¶fð]â8#¼ŒŒ×ƒ‘É8‡ „Ú®dk»V rÍ7ƒ ïÙ_Ž2IPÂÐS ñ¤˜]­”âá ±hÙž…¥­Á4YÄÈWY×bÎ#£¼eC¬é›ÛðRŽÿÚa-_åS‰Ø‡[á8eµ.ІüèÅ‹ÑøÝöªã7ÅÇr4þuYmÊj³fÆP;¿-×ËëÕ¤\7 ××~//fÅ/ËÏâ=+yòÒ Ä“Ó2ÑÙ¶V0Âú¦ÑYUK}ߤ\jRÇNYˆµp6úé§{ŽÕßO¯Ï7õçßfÕ|4þe¹º(WÍøêŒ½œlÄ{c½$Ï>Éåêã¸8_ Ý}‡^ÕOOu0_Ï6ÿDš0’¼>ûŠF1·¯BíÃkGY““’61┺“9‘«¤ò'FÍ6ß‚Áñ›ÕrrZb"ÀÙ«×bü®ü¼ù2ÎÛR@ˆßàæ3‰>“èÃ3Hê¨äJ¢\gUM\ÐÃc„þq¹¬æGHIO*µÈóéyûOFô—<;ŒÃÛ?˜CPÒPL2™Á}…ã‚°MˆxÑ÷ˆ@(ZêEDQ]låùõd¾(·}Á@ADð)`Þ,¯âk<=E‰Õbg¦ËJ£\O¦×‹›“«év=›Ëéõçåj1«äEÙYD‘I÷E.ÎAV©"é²!Bv_ãøŠetmH£iÊHÒNˆ* zp±³Æº»b錑K}ÔÅ›¶¨LWc!š½å*3Ð#7\Î&Ó¢\ÈiQMÊ㫚@ÐÙý G X´‡Ü×xT±÷Õæ¶j>A M¦gRƒñŒyëc2°‘޼†¯·;sBWâ-'V;É-˜œl¦ËËb*ºúX®×½«hSÓsÍ5½G}Œšþ¤•ÓkÕÞf&}Û}GĶ?Œl,SÇ%©Œ)/_SÞX¦¼±Lá¹j¥9òZI0üWgç"g“i#wp™ºï/¹ûªcFލ:¦oƒ#¥6ŽãHy[I™KÊ\’ÞçvØ>Ýõy‚4äâhûÔ;Ãç ;—ˆzG¼k ÜfJ±K°¿¬6ËJþ»XUå¶¼îíˆjFO¡¾(«¡ãó°`²`³àž‹Çε'Dé±¢ÉË‹å¬æ‘K¼Vvüfº]¿-?½’(ý &•î›-T²ÆÜe ÷¦Â l¥µºÕSâ3á¯g‹/4ž2[W¸uþÁ'·ÿï÷!-7zõ=~ÛV•üAwÂë§Ë¢šLËõé´˜Èëy眿òFXÔ¯îÅv]ÌO>Ü\ËÉM_-–Gæ^wÁ’Œ1„ÑûxûóÀÿŒß W endstream endobj 1956 0 obj << /Length 1504 /Filter /FlateDecode >> stream xÚµWÝsÓF÷_¡Gy÷}:¦3%!@ ðñd˜„|!"¶œJr(åŸïÞ‡dÉ>‡–¶ãu{»¿ÝýÝîêt1{øŒ±„`¤±&Éâ*Éb,O—H1•,–ÉûT!Šçç<=™k‘.^\Ì?.ÎgO³ßg$Áð# q¬ÝIÍdR®gï?âd ›ç FLçÉW'ºNR’Ãj•\ÌÞÌNA!QtŠ‚bB"fsŠ0‘ÿÙ\ ¥ôÔìE®)WÚ™N2‚)hQIF1œx‘sÓÍ3–³´½.naESÓÚ<-†òÅ\ËÔ\ú½ªö/OìË>¦2•`‡*îÕŸšbÝ>²»Ÿ‘| ˜s$ äØËi"<œäÔµ,ˆN?­Mó¹2ƒn1>!@¬Ý°ÀL`Œð@ÍXêÿÀkbÿóô9¸³ÔLíþ¢ÔTkSÏaÕE!(Š$%=„“¹ “`½úí‰C3{Ã"äò¶j|jXúâìQϦKœ"A’R"<.! í¶o±¬—ËF‚ŽNSøûê„›&¦sŒ8iÄakl8HŽÞa)’ªw½+ºm<Óœ!¬TæË9!$=yõâlNóô§gqN1$ŸæödÛ]ošÞ$`‰r¸3e(W=¯ˆŠaòË!õõò›Ïúé¶´°nVæ[Ì‚"Ë1ׇQVp±i" …#äx‚ƒ\6Œ%xO3ZX¬4ôi;') UíãÒ45rà`QM Pé1¬Hò{©PÓPÍ%j ª Õ öøà3@þI žYŸš¢.M[úT\VwÖ¸O±D0¨Æúx"4F’Däav<A,ÛÉÅÒ0Uæ,^ÝõèWW…Aå$èP™$ô˜êX̃Ð>€½C»âzb¿8ì¨<ÿ™€Ÿo—UwíCý²èþŒò]*Dè}|‡ž§Y"¤@DÜSЂ\6Œò}ªÎýâp¢›¹©…y/ÑsÏÍ‘™XЃÔš½¨C·†ž4ESE ŒHj5©¼nåP©G:cÝ%H˜Žvnk –ßnÃ0³4]Q­þ}Ha¥ižøûÍ¥†Ëé[ÛaÇŽ09¼yræ0Nå:ÓeWmêÖ¿u<Õb#—½à +üªÜ40€.8»©—UýÙ¿ï6þyþÎ>I êHZ¬oWPÓ]·ÈNÄ2}]tžëÃÑÛÕ¦k-~¦Óù¾/PX”bÞ—›ª6ë¢«ÊØŒ·›¯Á{p''ìGaTFZa?¸!žÛA¤Õ=ᔂ¹:ËDu¹u¡“ikÝ6íÿoÓøçÚŽŽÞe™^5›µ]‰´]U¥›°¼è=þ0µKÿ/þ0 Š’{þd¦¾¶ík9ò*8 Ò*@.–wUk–È¥ îROÁžóÌÚ£^ákS´ÛÆØ z<‹Sœn®ì“¤_Lçþ“lTì‹ T‡e]®¶­mTÊ’ÊžÎÝ6wl¹utîx)K~û¿Ü¬VUëÙnßá°òà> stream xÚ­VmSã6þž_áö Ñéý…é[8 w _27¡|0‰Cb®Žé•ÞŸïJ²‚ˆ¤ÓëÀL¬Õî>vW»:šŽÞ2–Œ 6$›Þfš!Æt¦¸DŠ©l:Ï®r…()Æœó|R‘OÏ'—Åõôlt2ý1"†?’AÇÆ[&³Ùrtu³9lže1£³¯^u™1¤$‡¯Ev9ú4:Ú&A„DDÑ! Š IÀjŠ0‘ÿ¬H)3„½ÔFjX1&†æW‘Aħœ"ÊøÚð‘Éàßm?®ÕÆQoÜSLPØtç)Œ·`%AXÐ>,î¶ú Ö>Ð gôÚAfc¢RxSŒ'aï¸z°m1fšååßÕ²`$nïËEÍíì©iì¢l«§zåÝ`pÄû#[.W‡nçÝ)Ñ}*œ#]ð¼ÞºTðã5‡¤ÇêÀñIm›»Ê®}‹¾…E@ë|ÿŽfc„€6cyX€˜¸5ϵŸ“¸›!î_@•ÑÜ6ÕÒÖ|µI Š"II¤0) Zþ6yŽÑù‡÷žA ¸3À¢«Î/UcW!î7Ë„@91’” ¨ì·ª3ê{оP†ô7Ýy ñ~lBkŒ8˜õ<&*4jm'»’IÞ–ís:Óœ!¬T óç‚’OÎ?TwA?9N×CBðan'PÚOM‚ô"‘æî¢1¤U¬+¢RœÂgätêX4eýRYÙ;Û´) ÷O¯«ö~;Ìq™IBÁ‚¼à 6îé¥ò;tæoK´ ™Ù¦F3Ç-&º'4‘Bª#¥-Ã3S­B¾ûDªdÆ(æ]ø;µ {k[Ïì›crÃäߥ¬l~«þLÜ0ä^Hø»nXÐ÷“7lè.ô‚a*H#·À Aêµç3uÇ:­-èäƒ&¨î/žëØÓÛ²Z|HáKGò –„d‚(Ä¡¡N—®ãC¥ÆäŸÞ0ÆyUÔä­mÊY'^Z¶AMa^ÝÙôÞѼZµMuS¸áÔ3mlл©êÚÎ×(^¶°å¼ªïR“)†“ wžmÐîâ3…øA\»ñOŠ®5ü¼'"\ ˆˆº^µeÓvœÖ$Ö±ƒÂ0½¦ Šk&°ù:Á¼äkÕÞ‡¯ÖöåªS¿q‡wk$¿ Þx®}„Aà#ì‡ù+ã®f¸ÒHBL<ø8 2< WÄLj'RùÒ–«çƧnœÁKø†^-â€tîÚ` Ârêv}ÚÝê̶«°í3ìõkç«­ÆaùرòÑØ•aŦÃC]ìKô5NÔÐèG(*¸;x˜Ë Á!<܃&0\df†Fò`NÌ”„W0Xþ‡ªÕ­æ^Oë§duqŒ ®†ˆ¯-îkë ÙZ¢µ> stream xÚ­VKoÛF¾ëWðHådgÜeN•k'Mà FÇZZK„õp(Êi?ßÙUR¢Ó ¹ûí|ß¼vt1›¼y'D‚ JVb2{LŒ!L¢eZèd¶HîR œg¹”2f¥Jg×Ó›ì~öqr5›|™`ÂèT$+ýÉRÉ|3¹»gÉ‚6?& Di’¯ºIèBÒÓ:¹™ü9¹8ªÔ|¨‚3ÄZÃañsh­Ë!í)(²KžÞu :~.9p!gˆÊ„>nûéË;\ÞŽH85ç% Ã3Ú)Þ§eq«OQÿEzbÌ“Þ;Ê$G­A#éæ ”İÇòµ}nwÛ,F¤û/‡ªyrÏ2­¶‹°¸\êí.,îmÕÌ3ÁÓ•·ÉȪ$rŒ]Øj³ëvÞ¼CÓ×%%(æ"éqÏ”BÓ—G=È#t`øjk›em¶Uÿ„" ±EÛŸ™bB1ì’,D^hÝ»LßÛÛQÞhfÈû7I%omSoìÖùÝŽJÐ Ž„iFQó­å8E׿ÿæŒÇÃXÅR}®»ñÿpùö´fjKPŠ¢EeþZ©v¸¼ôU3”jÎKèšå”Ú0t¬gq¤\;ÔñèU(„Bw®·U{Ï´À´îÂ|›!b:½þp™qƒ~u9^S”’ÃÜNíj×tD”€~@ 0Òu£»ºB=¦)5çIhXvz×ûëâЬª Ts8<*J% ¯l¤:Ô™®a„2Pò]õh.¹V Ê.9úÉ>ÚÆnçöÕ|ŠBü¿„VÍ_õËHÿ)@ª UзúQÿ\ÞŽößÐ\È8(^²3òÁP5÷lŽu`DQv Íà&2:Äq°°mU¯vH/nþݱ¯—Ûjneû⊎îXúßîÃ~Õ†=Í‹ýdo! (‰®FdIM.M2Û Çš$"š7©Ÿ\¼¤£5™>égÞ>¬†¡'»¡Wܹoá™îÙ]î2j¤e^gn—ŒùZ·«ÎlX©ƒvÙT­]„½õ!ÃtãÖô@œuë@ߎ~ž¸© R7w..œfœG+„ú%ŇØç‡˜Fúu¥f!3ò*Aòc‹9,z@ºÅÍñ–±$÷¤¢@ê„èw§Âôê˜è2mƒú¹s~çÂÐK?wÁòIÜš°òoÁð´±Ëz·ÐiîL\†—ª±ÑÀæym7±¦|¸Ýn,.ª ª w,ðË«zßî(=›= BÊi ‰Bц"è=úŽ êP§ß»Nýl™ endstream endobj 1979 0 obj << /Length 1165 /Filter /FlateDecode >> stream xÚ­VKoÜ8 ¾Ï¯ðq Ôª^¶¬ž:yt·Azèf6(ÚíÁ±•Œ7OêG²AÿüR¢œØ3N€b2’H“?RÖ‹·„%šj¬¯ƒT!Ò@É„(¡‚u|[*ÂEI)—«PÇËõùê"ü¾>[œ®?, ðÇs"©v_j‘ùvñí; ž”Nu¢ «*¸X|^‚`qB˜âSœ26ã6儲äÿq›ÆD)=u{‘j-•Öu1 QJDœ’~ÊqVí¢«¬5E‰T,ûº0MõXÖ7v/—æ>|ijû¿C•¬C‘¦~3—^R(R¸_‡:Y²FÙÊy€"&! ‰pŽL¶mßYÉÛ,(%‰!Eõîˆ% ~œæ”ŠÈ«N ŸÖ¦¹)Í“íxüE ŠàÍÛþ‹ÆTÆ”Ð7Xˆ¥[Ã!s{éä"¦Ï ¸±¸·|Ìáòn¦¸þP,ÃM¹õ,ÏBTœ$œ W¡e×rèZDç¿;sŽýÇè8öµqW6¦ÅÔ|a/g×ëE#Źìî™sNÿF ï·YY‘Ü45É-‹Xx ù‹ÙËLº­$Ó¸¹E’è)’Ò÷?YRsö+¤¯êâ?ê]·•y|wš°WxWÐy§šPñ í¨=ëͲ>1æ> stream xÚ­WKoÜ6¾ï¯PoZ bø)å”um7IÝCëER ÍAYÑ^Á+i«GR#¾Cµ‘Öt9Î|óÍ_lW/®…ˆ%9ÍY´½‹2A„È"-ÑBGÛ2úkÂå:‘RÆ›užÆÛ›Ííúãöíêj»úkÅ" ,b)'’æng.T´«W>Ò¨„Å·%"Ï¢/NµŽÑJÂèÝ®~[]<ÁRE˜æKœ2p›qB™ú>n³”h/ÝÞæ”òThë:J…(%‹NI _§òëØ6ëDd"Þ­÷Ewoì\ÆEÿX×fèq¹jPü§æ³U7ýz”ªhœn×¹ŠÍ;”UÞËÆ §,@@ “ƒD0¦¨û—våÅ5ËæáIIRHE½ã:aJÃÇi.‰H¼êÂðUcºûÊœl§ó)(‚7oûOšR‘RJè€Xˆ' fv.ãŸ!¤_ofé÷o€jyêªÚs„ 9QœM6kËžåȰˆn^ÿä„ûÍè8õ™?Vñiysùrª½SåIN¤”")T TÉ#’»å‡“Z2é%3EW|Køçæ„Yí-\g”HØ6³HýÒܱ×zâ8xâUʈÒSèC1ŒáLKA¨ÖÍïÖŒ±xsóærÍ3OúÕe¸¦IS¹Ìíföm79‚Ì Q$s'MLOuÅt'L×EW4˜ú_ºbìû¥çÛöOY†SËŒƒ{>Á^/™)†|fÎ9½³8Ƀƒøª»}Q“bGƇs0è4›ƒ ¤|Òze¸`a\-¡TxÃqX“\zÞÙ!þµiÊ®ò´¿n× ”„ö!ê5p¡ÕóÔç Þ¥YN¨xžy¯–|Ó ¿4†*ÙŸP¾Ú™®!;[ÆOàð<‡“4C ÞëœC9#ž2—Ÿ9”*xZ8ƒâÔË,ünîLgšyöÀ%ÿÇ)º?ªÏû-% Á3Gxöo÷ê%3Åàý¶4ç<3Fá9ÏCÁm1³ºá¼Ö×Á.J%¼.ÈåèÓÒ EuøÎŒ¾Z“p¡ÞÈ‚VàXÈÓ±¨m1Nû‹ï&t ¶ZÈu s8Ÿ­½ýðy˜k,O‚T9\óLmSôcgì³ÊulíÀ§½Ãï°78¨í"¶80ØÙÙÔâÀpÞâÀô®kk;Ê\“‚OpÀÀhß6= Žž¹rÜ™EUsZÚ&Áϳ@“ µÀvíáPõ•7® ‹ §»)2w€—Å D¿vX½ßdlgóˆcŒ^96a'°É±ÿÙ— .37ÚX±í.ηû*®¼‡‰.§˜hv“ÈI¦rŒÉ±!¨K@ ;–*Årïó…—ŸÞÒ¨€î9ÿÖ¿q,Ïri °eá¾4»ÂÖ¦ _Å>Ó@¹AIÑû/†x76»¡j}ÀŽ{XÄÊÁ¬ò`vìÍX¶]q¬Êj˜yûª¹G•%e1x}Qi?£œC¢Ò©Œ:hõŽmÛ”Þžˆ‡¿µ¡ŠJ*<ƒæ¾+WÆ ;ŒuÕ´½§œð1AÌŽŸ|nàÿ¸Ú©c”§9<þ7ÉÓl"ŸÒ`KhwÑL“|²áH e_%“þYùŠ~Ëû×éŠýà 5¢ endstream endobj 1994 0 obj << /Length 1023 /Filter /FlateDecode >> stream xÚ­VKoÛF¾ëWðHåfßKæT9všp|`¤µDT$’rjäÏwvg©’öX°vw^ß¼uµZ¼z+DÄ(Éi΢Õc” "D©‰&Zm¢ûØ®’TJ/“\Å«Ûå]ò°ú°¸Y-¾.XDáELq"iî%s¡£uµ¸ Ñˆ"JDžEߺ[ü±¸ºÁ”&Ìð) N›1›qB™þ9f3EŒÉ§fïrÊr¥Y’²œÇ÷‚Á>—œp!O2`Ÿä|ù¯[:ð¥#Æçê<Fù…YÍU|l–ÒØhàú/£gʼÑg2J™ÉStQ¢$CÚê["xÜ$©ÈD¼·‡¾©ÝYÆÝñÛ¶{®*Û·ÏÈÓÙ¢];™×J‰9è–A¢Ê+[TÝkG}õ–ectRE]<=ègÚÀ—çœú‘Ö‰â›Ú¶ÛÒžt«±„F°t¦Š E)¡¿l!b¼À3swÿf?ÍÚ j¦vÿBQV¶v¾÷³ 'š³Â2hùó¢Ûwo<‚9ÃA «P°‡²µÆýýõëóÊaPa‚¤µ& Šý¥‚øÒ£¯)üsuÂÐ2ç¦3H<ˆ4ÎíÀuaxvPiň6ƒë}Ñç3-¡Æ aþ”0Æâåíûë„g!è7×ó5%ˆRršÛå±ß5í`0ˆ&™t½'Hf†ºbfO©¯·v_`Þßì df”kÍȉÝe€ɸˆ4ã Â^ÎmàKGŒs¹=Sç_×.fð×Ç¢#»¢}J”Š‹6añ†ØÍñbTåŠd™ƒšUëÒ4<7ÄP>…TÎ&ŽCÆ |ÌD`ýhmkëµ}1y"ÿ/{Eûgù4Ól0(å÷£fC¾tÄ8ÛlSu¸n È ã9¤Jw¤s®Ý×…éÙvƒ@x,<Ö8f6¶/ÊýÏéÕÝïØ ]¹­‹=Ž`û䪺þ÷Ò‹i†RŠ/0¨‰ß4°Ø®‚ T«HæÐÑ2‹V•ûQ‘žÖ×aMqåïMn¯9»Ã^+×H8m_®÷~ÞÂõ‹~Æ3L>Œr¸zðmðk娥¿Ý<9Áà>­ˆ.<öAu9`Ä`àͳ}sé‘°­µè[k·eSƒ8W¸I„;Â’.*‹NžŠzƒD÷æ€7]ÙÛ ̸ ½@t”Õao«ÝnµC™¦\_Ê`hWv}³maك뒫øÝévæ†_mð[Á;„é€ôVeוõ³Þ·EÝaU´Eë–þ3Ò=R÷x†4 Ê¡ó$e°ÄÃÄþŽŒSÔñ}è­¡¨ endstream endobj 2001 0 obj << /Length 1367 /Filter /FlateDecode >> stream xÚ­W[ÓF~ϯ𣣒aîÔV]Êr<¢ð/ë6±ÛYŠøóý<3v2»´*ŠgΜóûñÃåìþc!2F‰£ŽeËËÌ "„ÍŒÔÄ“-7ÙÛÜ®ç )e~6w*_¾8{=¿|>;_Î>ÍXFñcSœHêüM't¶ÞÍÞ¾§Ù‡Ï3J„³ÙgOºË1ZbµÍ^Ïþ˜=<Á”&Ìð) NKˆµœP¦ŒX«ˆ1n*öµcœZjzÑÙ‚Qh)Y¶à”(<=ɳj½Ý·åÍ\ð¼˜/„•yÙÖÛUWlú7‘oÊ뫺««ð¶ªVÛ/mÙzŽ<%ÈÀêa±Úµú“û™ƒ“’(˜—ºëù‚iƒ‡§œª±ˆ¤ÆçUÑ|,‹o5¾¡@i‘÷;ª¨P”z€…Èà ¶Yÿ.ó'ÅERnd3•û7 öviÊ]Qõê’ 'š³ÂÙvòqæôˆ^<ý=¼˜eX\x<)‘U€¡¢¯Ë¦hƒýŸ=z0ÄÑ!Š$'&ÓZ…@—çÿ:-ºÅˆÐÒT™cvÂ(Ž&¢-%×Fi< ŽT'‚“Ù«#Ú ªw«nŸö»„3ýbÎËÏ^<{4ç6ºàüQ:ÂQJN=}¶ï®êfŒ ¢‰õY#ˆ5C”1“–¦'e݃¹™+…¼©Ê/Wͺ߾*ë¦LÉsŠX'&WÇ6猥u¦ñt”Ýêîn1"L¸û˜úñ9ËÉÎã6÷o뢩HÐã èÉMÅ@uoj zÐWÓ ¼2éW®)±BFGEÒWÅeÑÕº¸Õ·B]ùwÎ]5oÊ›D.*Â%Jã©îÊÅ@·&sqÊÎKfŒB•e'Â#&ñLec¤:ÌFô Âm”üj»À¦èVåöG›ôЊUE¨Ö›>ôBÿùéMØ*ÂyÕÿwmÈ©U—D‚šÞC1Ð×­ç¤ s# E(®P¥äq–èËC†½ØQžö¹/fˆdQf›ÒÜ&9þË|ÁÍMP&¶â[,óB@ŠiÁ •I‡&Á|ç› ”ÎwŪÝ7Eߥ¢]ج/ó»ê­ÉU¾FãÍ›ºmÃ~[¬»Ò7v¼\ÖM *^0Þ 8 x;Œýº©{ìùf?b5xcj›ÁÞR¢©™ªÑ~ÂUBðj*VF–¨‘ÜMYx#¢Ã†É„876›„ÙŒ%ZŠ@ KocXÜåKo ,NÍ(,´‡›ºŠdežÊ*žÁÔw¨Ì‘L¢'^ÆÙˆ3tÈer”h„Ý:j¾P.,v«*(ª%²u"èÞ]ЄßcÓ× hHë<2ãz‰h’ö?˜oÔ @tŠF³ Æ|G)»³vD#'LÞQ¡°1püsZM¸ÑI´!_ú`ø–x É£âsÙ]% Ó™¡ÆJé^¸ÀþÏ”æuû6âr–⊱æà$| )>Pü|K’ñ¡› ã2˜m‚Žß冪§›Þxð=1ø1bzGô•Ð1wÉSAi¦wÏAïYûjGQ࿉(Æm„µ%Fò!¬S"1Zp ?H'Æ_¿§—ÃgDZbLÅž„ÒƒU(=Xœ–lî[?÷c5˜äúCt=—!^Cû¡Ä:;$¥«ž&†=LÏì;Ê'¡Ä‘2¾½R›˜ØÛîweU·e×wé/¡“½´˜ÖT`µ®·[4£D"äoö¡uaëè£ èë&6I‡ˆcš &‚R_)ãñËïëÐûÿ)¤«Ö endstream endobj 2007 0 obj << /Length 1751 /Filter /FlateDecode >> stream xÚ­ËrÛ6ðî¯à‘š‰< 0Ó—'i<é!‰&Ó™4X‚-Æ¥’”]7?ß (‰NzÈè@`±Ø÷ z>;{úJˆŒQRÒ’e³ëÌ"„É´,ˆ:›-²O¹&\O¦RÊü|Rª|ööüÃäóìòìåììï3–Qø±Œ)N$-ÃÍRÙ|}öé3Ípx™Q"J“ÝÔu&ˆ.$¬VÙ‡³wgÏO…`ª LóC)8el„­á„²âǰ5Šh]²ýP2^p)=ëlÊ(h)Y6å”(ø”?œmw[»z"xÞM¦¢(óÍ5~ÕAÛf ž/vó®ÚÔ¼¯º%®,~î<×m"™ˆf‹Ê_²+ÜÏ#³&z.ˆßU?}BS[‚’¥}îìº}æOž¾bf¨¿”D)âm'SVhøÌCKM#êá—µkn*×ÓVà [¤ýUT(J }B ‘ãÀÌïeþÚ}åÉòýgÌêš*¹`TÍIÁYá|b†rÀKôö÷A‚1Æñ22V14¶UãZ¸”Þ\ð:×ØÐ´Z„ÚÑôlb ò~$¸=ÇÓvwÕv/V¡A0lwë ×ùÕBê5^ Ò×ï;κÏ,ÊÃó…[ º£ïlìXèΊITšÛlw+Û9Lön+ÛÜ8ì4ÝV‹j4=ße~%Dá•Ì÷h¿<¢Mœ ý›:ÎçóÈ0Yøìêo}ã?TõaŒ†"Z~“BAhÑ[â§ï /Lj€µ”ü®Oz6g¶)§üàÇåRe ž~Eë0ÎÑ:_Ó¨ÿSnŸG endstream endobj 2014 0 obj << /Length 1323 /Filter /FlateDecode >> stream xÚ­WmoÛ8 þž_á0kz—<Ü[¶¶· ;à¶ÃÝ>x±ÒzKœží¬;ìÏeʉ“¨ë7´¨]‰">$Eúé|òøBˆ„Q’Óœ%óebÂ&Fjb„Iæer•Âí4“R¦³i®Òù«Ùåôýüåä|>ù{ ?,aŠIóþd.t²XO®ÞÓ¤„Í— %"·É]/ºN1ZÂÛ*¹œ¼ž<=Á”&ÌðCœ21k9¡Lÿ³VcòC³—9ã–3ÍXÎÓ«Á`ŸKN¸»3`Ÿä üúíO;±lËF‚ÇêzŒŠ³šªøØ, [c£Aê!£GÊz£ï½É$cÆÃ7§DI†{¸¢Ý6níê©ài7Í„éféŸ2]ûµíª«².l-šMÛânë]µ©Û^;ý`HTûÔëö‰ßy|Áì¡”DQÏi/w ±Ð½ä¡/Y=P|^»æºr;Ýj|B X ºßQE…¢”ÐGXˆÿeæÿ—éïîmÔnPsh÷ @6\S \E!N4g„Ù(달à½zþ¬G3£a’ö¶j\‹ä¿8{rœ= ²LIZk¢ áïKÚA. öùsÿX]a(›cÓ– ÇF#‰;HŽ^VZ1¢ÍàzWtÛx¤¥ €h ùí”1–Î^½8›rH??‹ç” JÉÃØÎ¶Ýͦ AÆ„hb¥¯?A¬òŠ™&|0]xMQÂÐ_VîÚ5]Ì„†²´»¬½9¥Y©Í8œ`÷Ų‘\,¾‡Êz‹K’´ð·…kj²ð<ž áp©ÂÝ2²»¨PèÇ¡ÏÜŒ÷H§2ÐÄÞ¸¥k\½p÷FLè£#ß²¢ù«ú©0EÄ^ixªoUÊe#Áh…ªÃ¶À(tfšóã9#òu¤3VcAêÄt´Æàî‡) X~³­ñn)]WT«MéŸÐ[°^?;{„×nUOYº€‹?]má­õoÕgŸqAÔÕ›íõ ¾/7 žò(ÒN`¶ \Š}?AøÐIn(v"­¿Ía üë=Àw{/Vn<¨»t€uƒ¯š"8h »ÉmF YæpÑH›Ì× èE½XmÛ‘Z+¼Z«`émêaµÜö}«Ÿm·-+@à<[%ê•õ5nƒx=åyÚ¹ë¦è\‰k«íºª7mÕy“ÿàѾÃà zÁø &CE¡¾Z†m¦ ~䘱Dá½c¥¤'Þø¥0(ø×Ý ‰<‡*s¸| } Z)7)B…½²‚´¾ºûåªX¡(¸‹}@&`Æ”0i@û?™°wZA¤G^/Uwãör³mpi劃ËÀE 9/™MŸÏÉ Ÿpó •H ìÈQó¬,+OU±Zù@i6ç²n“už‘;ÿÇ'¡æéÇ!:”„k|G3l÷4ûõcšaoL³ 4ûõªÆ#GaÀÍ͇Ö5Ÿ§J¥Å‡•kƒ?ûä  œ‘–Xpªwæ%¸u‚X pŠ`0ûÔáÎ]ÕÝDCKð.‡²~ ë¿ ‚ÈÏP;Ʀ4ª >(vÃBtžø»;DÐuÓ%àKd/û€éüAd»yR?Šjá„ígÎÿ–øG¬æ­ïÅ~¹Ç?+Ážõ5Õ»¹º¿‡p—±v¡0;¯?FY{ýŽrÓ£ˆ¥ö›j4¡zøéaWxLp§Ôw'%ác Y㘀Aj 7¿"?Œ äçëÐîÿ˜éš4 endstream endobj 2023 0 obj << /Length 1590 /Filter /FlateDecode >> stream xÚ­WmÔ6þ~¿"‰¿;FBå(GáJEË­P åCØõ±)»Ù#›p½òç;ö8{I6j…8±Ž=™ç™WO/Nî?"a”XjY²¸L A„(#51Â$‹Uò65„Û,—R¦§™UéâÅéEönq~r¶8ùt ÿXÂ'’Úð¦:YnOÞ¾£É ÏJ„-’ë ºM1ZÂj“\œüvòø˜Sš0ÃÇ,8el¶à„2ý}` EŒ±cØ Ëc’f9³<}Û3èñ¹ä„ yxð‰MàÏ<ˆå½\>œ¡0U(0*`5#Tñ!,GCÐ(õ-Љ²úÎC&93†¼9%J2<ûÅ•û®q[Wg‚§m–‹B¤»Kÿ+Óvípã×Xzäc®!( øMW(#ibˆ54ˆh¢”d¢•F©¢¦q´ÀSF&±ëª]#´Û¸eÛìê=R*ëîo=ß.î‹´lñÜàã"³:u¯£áRÎ¥_¤D„Ç®Üî V ÙHIµ·fåL›Þº1ï<ŠŽŸÕ®ùP¹ƒn5|C  EÝRE…¢”Ð{@[ˆ`›ùg™þ„&áF5cÜ¿*øÄ5UÍY †ÍYOá4óÞòm ðŒ^<û10˜Ž/#°ŠeuU5.†áù“ÓüfPœ¤5d”ä]eÕËåÁácúSuB_ØSè‚ ¯ 4ΔV/u<ÛNµ‚45½émÙvó‘–‚Pcz7¿Îcéé‹çO2^D§Ÿ=™Ï)E3IÖÓ®]ïš0tˆ&…ôBÂôyÅÌ'\öœÎ6®.1ìd¡„ö®þèùíæp {@‡î_^ùÚ¾‰†b¶Pýw†9ÊåÁ¹0OÔPç“Oq@öÑÊgKo2¨²rSf‚JRrÈl& z©#^c/ •ò1¯ û §&†ý—8œw+ìvˆŸËöŸ›9ïkðþmÕ{²ÓX‘¨Â*îv~Ëoåæ|?Vÿú˜)zv¶eµ!K×Ôd™qsÌ…›‚m\æî³(4e2¶šCi2Èê!“j¶j˜õe`Çþå.]ãꥻ³r„–ÿ£rÊæ÷êóL£SHV2‹¯5:”Ë‚³n¬çFa„;.?õ"‡às­.JA϶:Å ‘pÍ /»[üʵßÙ£¨ ^üp÷UuÆÒ¥/ì ,º}õÙg››»±-Ô¢8èz3 †‡‘Égß9à–„ÿÛÐ<î àg4,Í-ŒéC°LE'ðÁÌÃ,8&T«ŠÞTÌQòwø@rå–¥§t³G´;d5œàf û»E¶^ÞA$ô ˜þx 6LÓVªDj ÷c ‹0Ð~ðÑÈÈC.1ßêíøÕ«S‘…Ÿ~`Ô6£ñnâû[RL€¹ð4R ³Û\.Ê Á£. %Ô€Íô«ÅŽ rF‰é烄áµÿ|€Âb“χ‰'z]=MoÛþ[¶Áø@i1¶í!ø[~,åàöEVp?–†T{üÝúüÃ1|…;ìõ\ö¡Ç'œ~Ã;P Ôœ|%’ð͆OÜýævHØžX‰iàŠ èØ÷˺vÈ»\2Ë' h,úÄ."aX5FDE0)î½™ÜÒtã®ÚÔÜ2€€z’uÕVÞXÜí]<»C×»[Ùå¦Û·®éõT5n—ø¸ÜÕWe³ëê†o™pì+f]6&4| 4½^W›ƒ)VOlÚˆE[ðëHèô}Ù„•‰ªpwlßAƒ¼49®aj÷S̾͟^¼BÁE¿ŒrtC»€Èonð´ŠúÛµûZ2HÁˆäzlÄl2 -—0 lFo5œ¼o›né­»³õpaµ´ CðªlK\u!üÊ[àÛ^è=˜¼êyâ–åfÙmJôªß8ˆ½/úgøs¹k®ÃÐØÄóòêjS-Jü/¾L™D\C5šñë³—‹—yÄ ÍÙïÝ`7Þìö±G/w 8©½ˆ• "1WDºöƒ .ë]‹‡Ÿºªí3zû.¤ÆÊmòª^9Ÿ(pªöõ×F·[ߪ`š€6ã'ìU_P1ãU}éûå¿1.Õ endstream endobj 2032 0 obj << /Length 1123 /Filter /FlateDecode >> stream xÚ­W[oÛ6~÷¯Ð£L§¼ŠTŸ–4i×¢{Øbd²<(6c ±ìT–“ýó;IO’™ŠEžïã¹ç|>{óžó„(II“ù}¢9p®% P\%óer“*à$Ë…éYVÊtþùì*»š]Îg_f4!øC*Rö7K^$‹fvsK’%~JðR'Ͻh“pP…ÀÕ&¹šý6;?%AeT±1 F(Àj„?VKPªÃ^•Œ2ªy–Ó’¥7AÀg‚ãâxñ¡Lð×?Åò —#¦êz ”ÈØ‚‘lKüÑÔKýèDYzk!“œ*Š"oF@ êÎH¾1Ýn›å\ótÿåPµv-Òj»t›«Í¡ÞîÜæÞTí"ã,]÷: j.œ²sS5û·öäÍ{ª‡¼„I¬%{¹Gô@¡ðO/9~AîEGŠ/·¦]Õæ¨[oHD4¯û/" —„ù )sžºܦö[¤Ìu׫ã~EªøZÓÖÙÚwwQ ŠAÁh p–¡ÕúÔê XFŸy×3ˆûËXúP}¬[³wöÿxñv3c‹£‘Š¢‰aþZ¨¹| ØG͘þT]O!$ËZxm 1®Aê8Z¢ I¡Páé]Õ➈RÁÌ×¥4=ûüñ"cÚýò"S¤cßžºõ® @耡A ÐÂf­B\Qãä–Ó»u[ïÛÿxiª­eÖÅ”À—ópm}bå󃡠 ¯Ð×ìåò`ÌÁu=èx>’üyyh×UÕS:œ1ÐhÀJÄéAê„Ìøéœ ô6“©]bxV*oxú_,QÙg<ÕKgý­Ùlö‹Œ©tmp3â­–êU0"@e"u „¿Þ ¼Xþ\Äe=â20†U «{²ßw…T€q? ó„š’š8Bj(Ù˜Tͦ$È’Žýò»¹7­Ù.Ì«9Ä ñ?r¨jÿ¬Ÿ"%OEEع€éï•<'—£%o¬ÎugJJ(¤b±t´‘=Ð+z^ê:Zô$U °á8[|^š®ª7?Ø¢çW¿º¬Ø×«mµq}Ð<Ùx3.û}ͪ:w¦!>Ì5¸V¥Öþ¥þ¢@ka=ž7ãAB vø´ŸX‰©…{"½ßµþ°Ÿ2ön×"Œ~÷ÎÞ{qk¬ì"´Sá9â¶rŸs{Š-½ÿx®»uPëvj÷>³j«Î,ÝÙæÑ´± k\ fÝY¡—þtòF ”âî»{gqÐZMí_ܦ™  A÷wÞÕ8´aé#®\0 ¸!@°cD8•Å@›«.‚Jí™8âØ8Pî€Ë'[½ÿÝ»»Ã „5žŸ`¨pÑâöm¡åB$µfUï¶!„Zãuó¸1±fö>ð¥¹ò’»­Éï„H×õ¾Û¡“š½ 7;’ Ç1^b—žú7o&Ý­o!QÿÎâí endstream endobj 2041 0 obj << /Length 1264 /Filter /FlateDecode >> stream xÚ­WKsÔF¾ï¯ÐQ[ ó‰SìT%xC’2>ivW°’= >=ê‘#iE’e—5šéîïëçÈ׻ͣ§BŒ’„&,ØíƒX!âÀHMŒ0Á.îBCÛFRÊðj›¨p÷òêv{¿{±y²Û|ܰ€Â ˜âDÒdÐL„²rswOƒ_”ˆ$>¢e ˆÑV§àvóëæú’Sš0Ãç,8el6æ„2ý}`cEŒIæ°· çŠ ³XÂû‘ÁˆÏ%'\ÈÀ'I¿îøÃƒX4ÊEÁ KsFõ¬f„*>…¥þh ê¥þ tal½wAÄŒ!†oN‰’ Ïž‡ã6±ßÛÎ-dXnûSWœOEVtîí Š´û´ù€Ri•ãæáÔU›­M›Ì)H  ¸Iĺ¶iÙ>v'ž²xJ[J¢¨ ô w†iArî`äEg†ŸT¶9öÁ¶šj(4oû-UT(J ý( â l3÷.ßí›U\ofŽûPomS”¶r~w« 'š³‘ÂÕ¢6tÞ@À1zùì§Á°WF`å+ù\4¶Åø?¿y¼,)¥' HZk¢  ¾UÉ£\4ŠjNin 0öÒ:¦D‚ÚÄâJ5RÀ«L+F´]ïÒ®_Ï´„3†ùÍ–1^½|~³å±ú“›õšD)9ÏíUßëf‚L¢I,]S ›±®˜Yã„Ë‘Ó/ŽŠílƒµöºÈÜÆ1mò¶®Ö`ŒÅæAýx1;(æf4Ø·'ŠE¹•4/Œ­è“fFöǼoŽiIÒŒô–´„r‰K¦¼VŠ`”º 5PŠ0e漊ճ9n!™á¨««¸•Õ§Sѱß1ÎðtfÞxc£z•à [wÁu½Ç§ÁÇÎ ^—|;>øË…¾ê` ~äi7@Æa›–çÓÖfO‹›þ¬«;,’ØùäˆÙC“vègžú¾LZø„£/¸‡ì’!qgÿÎ×0|5‘ÄP,Ëq’Aû)¨n© щ/¡·®è°–õDn²X•ÌÖŠ}êµPî™{ A’Š…7EÛ5Å»¾óø”ƒG‹‹ß} ª| Åù!°‹¸Ê˜ÄB!BVûÖCÜhØØÃˆBa¢Y\Tu‡‹Yõø/¦ÏÇÊs2V6èæy1V4:þyôϧºó(û¦.—§©»h’/ÆÉAV÷H_!{C‹/<þa`èáå´ž£ÍÂô*` w- ½œ9bP÷C§¨²SŸÛÜÏ™ÄÀ¤.à Q? ¿¢(ãu¿Ž#úoÄ;,õ endstream endobj 1948 0 obj << /Type /ObjStm /N 100 /First 973 /Length 1945 /Filter /FlateDecode >> stream xÚíZMs¹½óWà¸[[Ñï-g£l¶œ¤*©Ú²½'—#r$Ž% •!¥Xùõy=$$Ë”—áжæ ÙƒÞë0>ee”OIY§(;§B¿÷ø1R•õ,%¨ERêIE`³Áªl½ò™™d&^Z‰>r¢1@ û ehìL /<÷~B–~Ú&k¡MTÇêß$&(7ŠI”çà[#ö„ Øq/EŽƒáèJP-¥Á)ÎLò.CêŠ^ BZF«,ÔINY»±Áö¯” Q”De‹Z”¤~TQŠú>êç$¶%£YÑ›H9kú·¬œs=$«œ‡û}ÎÊE¸ßç¡÷?š»ddÌ0Áeê[Â&ˆEÒN’·˜ë¤8ß;<!X? è· Þ…}4Γ²˜Å"X_ˆðȈ½è?0¦5 n°R‚³}­ IœmLP½L ámt}d“Dr*”ãU¤Þ ”0;y‡"öR‹¬ŠV&Ì Qô”EÊ*¢WykTÄèÑÖ˜ƒrÌp2ð@@ï‰x»$yÑÇÄAz ¼u,e„ÞõRR)š^oV)yñ•rvpRV™Ði€™bÿŽTfôÇÏÖõe^2R(ÇZ°rd4Œ¶Ùöõàn Ã'ƒ,¥ “g6æÙ^ÌÒÆ‰è`J±¶Œïû¶˜Jr/FAS?>‹%A½ßá7 K (€ JbÌ'bÊ“/&Ó_Ô[ ÖÔ¯Ôôe³þ\ɨ}7ùé§ÏÕpAGïk¼\¶kõâÞbP9ok’XAoŸ`tÚʼ~yËì}« vÚþ ê§¿vËÙëz­Þªé¯¿¼TÓ7õ‡µºïùÍÝuÕy=™þVÔíz%ô¤ýdúª^-oºY½ÚPK_öÏzÞT?/?¨·b€®9Ê* ò;ôWuP‚ú6mêÿ¹m—PúvCnbVOn[ŠÀEؘþ‰…½’Éôçe7¯»MÏæØ7ÃÈȱ¶XX!8í„ã’ÑÀ°`E“÷¨÷úætÝëùGÓ^@[ïì×júÛ«¿o~¾[¬××?N§M»ºnºú‹úZ·õzºª«n¶øÓõÏšvþÃE}÷CÊìb¦ïŹ˜˜"fœøº_õ™´ˆ3i“ø2ñªj.×Ë«v~§Oof—õÝɬîZ=[jM6ZãS€ã`w:D¡×¨™²æì¶¹­W'ÍYUëzu°W¬–ækï0žDljëè;ÞßÌ›õB_Tëÿ öŠóš$dQÔNÀ‡9¥)ÏN§hYFU÷¡¹ÕËî|Z®¦à̲‰æcƒzVð{yÃÞÌÁî2E £™ÂÇB©…;‚ù‚x4CŸ›hd-šÿ·îT0=’]y,Ç÷>Ìì_—o– 3ñÝisŠˆpðŠú¦Ä‰³=‚0-<ðRòZ’Ãié¬«Ú ½jêóº[‹À€IQ #ƒ¯ÜQÄ”‡vx×#=À|4ƒ/x E(˜ éÙHãF 6Rt(‘šê„ +´>jdpC08¯n›¹>ïêËËÕlQ7ó“ùM·¨®t5Ó7£#¶¡»á0š}`|\cìit̻ЌñhhF»btE(`aìÙsv1¤’¶pÄC” ÚûAyß´—ËöüDõÀ(µÍåï³çm.? {þ¹|)V§`꒎ÕB3íÆÌ˜öÂ4}%˜†bzbG›ÜѦ¸ÅT6²©ldSÙȦ‘od³1ìm/úDÑŠixÆxÑU7«ÕQ +{òð˜áµ!p\Ôí¼k.ôbY¯£Ä#gÎ;xL{w‘iä»ÈìvÑ™ùxt–Íc*›Ç\ðšéÙrXs›œþ~¼…Ù`ûÑñ–× ô:äxë_È\Û“³j¥Uw[us]ÏoF”»ZQ¹f»„k<PdcžØ:æ|4ìrÙ1æ²cÌiä±Î<4"ºhO¬˜ì­úófy[µm£¯Ä´fÙ5#o2Ex¾¼ÌŽ:/#F€Šÿ?ÝÿÙdÞA Ù}$;n²ÝE ÓѤPð‹P0I“ü|mnÜP´Dîà»Àlµ| sŸ,ʱÿ°@X_Öm¥ïªõªn/–'ózu§çõл÷rj“¶aбÉûÍ­û1Gª_ñÐñOd­Ìû¨¿ø“ω(jOŽèþ(ô›Ò†å]Ú°æÚ@}»Cì 7þàÂ\øƒó³Ñ†5mUÝ€ÃMÙoÜÓsŒ´1ÓWúßwWU»>æ´µ\WÞ(וxãë\W~ É: IÙ¡Kû(äqq_Wbbé ÒÈG“†-¤a iØBöù¾$ãæ ötðÝ Ë½úGTX;èÃëz]wºkf‹ª›¯–íH¿#À@™sÞ¦Û{"åÆ÷ÁìÊõI endstream endobj 2046 0 obj << /Length 1196 /Filter /FlateDecode >> stream xÚ­VmoÛ6þî_¡2P±|Å}ZR$[‹´Ûbo@ÑöƒjÓ±P½x’Ü4ëŸß‘G9’í 0OGï¹ãÃ;^.g/¯…ˆ%†-7Q&ˆY¤eJ´ÐÑr}ˆ5|žH)㋹Qñòæb1ÿ´|3»ZÎþœ±ˆÂELq"©ñ–F¤Ñªš}øD£5L¾‰(&‹îýÒ*D§¤2ZÌ~›]ž‚`*%Ló) N?ã6ㄲôyÜfŠhm¦n_ýòîúÔ-çœhþ<ÑržiþU´’,ÄóDË!ÉÔEK)s^£„iAx”pJ”d8'ç‰ÈDÜ´n”qÕ´5¥ÝõMò®Üwa¾èº¢¾Cußæu÷u.xlÛÎâ[Ûöîç¿/Þ£ÔÙ¼]¹…[„) À‘€["ŽK›WÝnöå5ËÆ!IIPâºÝŘ9ÏbÛÛ3}[¬œb›·ëXxÆ\ëL̷õ:\*Êy”rM2È Ü)b"büì—ê$,KFëü­šB=Úl b@LÚ Ø×ûv›W$_‘ý—cXB¹RlƸh˜¡VÀš¦@(E˜ÒS\ÅÙsäš‘Œ™p0áîßÚmm½²Ož¥€jóßÏò@âÄÕÙÄU½$Ô cI°œàú^„z"|µ8Š~ªÛÚöyQ>s.oñ wÅ]—ÈjûÕ³¼vÿ}‡óysšRЍ2$”I“J„.3¨p¸«ÜE÷EÕÏÙ±xã‹8¡î‚´ÅÄGß&øæñ}Ñ[‰Ã°Ch aèð£¨qÌ»®ú›xUä}Ñíãn]>B—pÎ]—p1BùQ`©!)”&Ø¡‡p….aܵ àHpp*¯ ÄMYÎXçä$Ä >¯nÄaå"ׯ&Í&© Ô}55Ëyåο¶…uÞ‡=»¼Ú•ö©£‚¦ s>¢mîÝqD³é='@S ì]›÷vºr_uÓ½;¬4Ap<†—QŠÒæs`,¼2ˆÑY8Ô?€Á &H•ÁC€#ŒŽcHÝtd“§]ãö(> stream xÚ­kÔ6ðûýŠ|ÌJÄøǨU{ÀQ@¨j¹ªDùÛõÝò¸&Y(íŸïØcï&{9hUt'e<ÏËóò>^Ÿ=|&DÂ(1Ô°d}‚Q$ZæD ¬·ÉÛTj•I)Óó•QéúÕùåêÝúåÙÅúì3–Pøc SœHjüI#òdÓœ½}G“-l¾L(¦H>yÒ&Dç :¹<ûõìñ]%˜Ê Ó|®§Œ/ˆ-8¡,ÿ6b E´6s±/-8p^eÌðômÔ Êç’ʪ‚|bøwÛdY¤Ë&„ *œ²ó*0ªïˆU)äT* ;S™Hô5‘sV^â;'/ɘVDQPšS¢$ i7õ~¨>®Oí*…L߯XjG„Ëvë‘n«÷ˆé¦ï¥Ý0àr°›±êÚ°*ÃAËõÊä©}ã  ‚E%J~lËfxäv>cÅÔ)AOçsOw Òr O9·6 ¤3Æ­ío*{à­¦'‚´Àûwª¨Pnéè+DŠ @3·–éO¨û¹Í\ªsc_5¶uUМäœEÎWÎM. ½N£WÏŸx –‡Ã(X!‹Ë±÷ËæJA¨ÖQÖ›c,=õâéŠAòÅÓeÇ ¢”œx¾w]ÓlË!ì\” Rèè\¦—tB0êô¼«olÆ_nV\§;§Ü¾þ q»aãÖùãíÎÑ|ªqÙÕ*Œíëª%[»h ׄk´ ‘ÿÚ^ÛÞ¶{¯A Ì7¨ì«>>:Mq&aÀH_À÷¾Êé² ¡Oó‘'ì°²0æ¢ÃèüN…¡y>¿TbÕás×C4ÔåêºÿÅ7O.^ÿœýò<»ød1æŠð¿¿¯}J‘˪þß·P!ãí>g,Q´ RñdÝÀÁ_Ÿ<R¤Xù$Ooûb­H·{_òp÷S5î*‘ª©Úªñ¡Ù ¾¶å¶jop×1[¨yñ€4Ïçš„Úç: 1šb!#²p…z\0ô‡¯Y)rJ/æ¼»kTRPÔÏU<´Æ—~‚=æ`Tü6]Mg'”ê†,õ}¦æ[ìXÞ—m+ж⠶¨Ýõɼ1P48=–oðm ¾ñë´(û†  ~ä@;ÂÀ$sCrç×fÚ"]•q^‡ˆ@ìnzìNz£+l¥cñÑ…†çS¤¡tÙ [ûÞ–UÀBÔ]›á'ˆè꺎œË¨N4ˆŸØýJCBy{6 hÇÞfÝuÖ”¨¬H­ë›ŸöŽäè/îÚxÁSïKX€/|08î,çŽ t1îS,ïz\¡vêWeÀçå¶G«DúÄYµµ=¹c'F*hf†¹A+Öž™w›Ù(«OþÂú@6ñ­9Ú`|v‡îšG{  ‰m¢âÆå„÷\•}XD}Óõ@×LŽÜs:i®BB—}Ù€z'Yäéëï)‘Œp9I=WÎØÁ":ØÑ„K Jo&¿*x·Âµ‡=(¹QÛr,7”Ímmܧ4s} „ 8¶Fô›¦"ð-ñ3vcY#X¡jö¦/G¯ àê=”‘n¨F߽焞žÃ<ë½½€¼­6ÝUÙ·¸Båù$1‹4ÃÕͤ#Ùvû+@Õ—EÓ¨œÛ& ´PŒÛVÐ&„›ß±ò¦Àƒ ÀIpÁ*8Üõ¸<…އ½HƒŸë}Û¬°DñPBÜØCT±tpÊ¢Uh;l5]Xª›« 4Y¾4Í›OË»d¡‡9 /o«m¼HZpkndú´:P8÷Õ6›ºD—¸íà]âVÞ%’Ét÷[°¨òþ߆ÍH„Ÿ£OÜ**é"õ›rEDì+±Ö*y¥@|Ò·\asNË): PÞiò·ß]Yh}¢<ó‘Ç Ö¥l¸ÅÃùXüq ö§Cıé+9‰PÆ,‡Š «Gßc±‚’ %Z¼ôZ‡Ôîm„ðu×7˜p¡{À5ÔE8À¬+0¦½±‹ãTœ'Lð¹Rï—š; "¶öÏK,áQ.#Á"xù›Åw‹}ÿè,ëš)&¿8` p'þ}ôU11§—"]t …ѹ2”­PõÑÝ.¿‡cQó/a0ñôº<ÎEèmǼ÷%D¥×}×`åÆÉFÅɪ{‡F"ÂlƒØÐMÔ!g€ jQ_•Çœ1iØr9c‡S™ú>™s‰‘ë]5ÌfÃh!‡~&B¬œÇBo‚Ûoà%6tá%X¶e o¼7ãXwîùÌYüÑŠÃíp“{I…_þõȽ/f¿Í/Ÿ+daÖ8h~´¢ b5 ´ðöý&bµ!‚ɹØË¢`º 2V  báñõ7ºf{ô×ßQÉö¶Ñ9 endstream endobj 2062 0 obj << /Length 2581 /Filter /FlateDecode >> stream xÚ­Ymܶþ~¿bûM‡fi‘E)ˆ‹œ_’:µÛÔ^ ’|Ðíònk¥­¤µcçÏ÷!‡ÔIZÝ¡NNÔp8gž™Ñ>Ù\<úNÊYç|µ¹Ye’I™­t’2-õj³[ýi&“Ëu’$ÑÕe®¢ÍË«7—¿m~¸x¾¹øÏ_Åøã+®KâÜ­ÌeºÚ.~ù-^í0ùÃ*f2ÏVëa%™NŒªÕ›‹_<9W‚«”q-¦Zˆ˜‹…m3Ábž~™m3ŴΧ۾àq–¨$¶[¯Ö<Æ)¾Z‹˜)<ËëâXîÊþRŠèãåZò,º-Ž4ضM×Ù¡Ž:³í˦îhâ`ŠîÔš½}(û=qõ{C$˜:%S»×é±¾ié­¬‰û¶iªªìœt«f E+!ýŠÞRqÚ|jdÆË2áùŽ æ3–+ÜÏqîdnÞT©Á¼°]®fæM'²8¹ =;¯Úä"r–k QŽã1Ž˜ÉHÛGm¬YÌ[F×!SX29íSº¯I,ÏÆb“„)xhN»æ©¦CÏX{Ö‰àçµioK3ÈVã ŒØÍËþ5V±TqÌ⯠¶”½€Ìí{}oÞ.îëÅоÊïû»½e™¶<˜ÚzY¿¨‚,<¨pu £yÿV£—J/zc'Í[§Ï’^ÔäøoŽek:ºŒϾ¾2xJ"˜„ÉRÅYª•õ–¯Xî¦ß lëÀ·1:g™f.Ω0 ÅÉÖYÌ,IŒýÔxcÏu¶ñ"¦ }€¿é‹þ´|ï‰dñ¯¾½äœGW/_<»™¿‚çÏ–=L2¥’©‰¯Ný¾iÃF‚O ’²ÌdYÐëטë%¥h”úWµkË­UhO×ÿs|w©TT,탫×jpäý¹­"_©\³7Q—AShù ñsèk³d{b:Sefú܇ÍX•`{Ì¥qú'<Îbÿ½¿:2þ^Ÿ>ð<7ñ—§á&"e2{èˆo=b\¼„©8·i;Õð^¬!ûßÉ_„oÿ™s¤ñökQ.f®%ê i$¼67¦5õÖÜ›$dšü™à)ÚŸÊ÷ IE"\!ÑKù@R'¾õˆq1©OÅQRGaÏDgg›çœeH‘#™KiÝsm½˜ÖQ> ­û_Ÿj*gP\eõLÊ€}^ySÎQØi»¬{UÖH “M i]—EG£²6UÑõpF÷ê {<‡Âž^QÉ»§¦Ê8Ž2.HØV§]YßÒ뮄–²-ÐtPLˆÆ{S£–ÄÓK,ê>×mBŽ&ÊéßøGvn‹ª¢R6´8ˆwßâPqŽsg^˜7¾Ì`ÐËú±3§]ÓúÖIä¶u©o ó]Ùõmy}òM“%Ù¶Ç>mÓ7õšDu@NLèyf—é’È<݉ÌÑjØ(<,·?p´GpXTï"–óö'ˆ»ö‡óYw9í>‚¬Á £ögêF#ËIx·Îg¦{LGÖtR8rN`iEkhÐõðÛ^Ú—SgÝâžKAM „$É…m'“èCóȺjF® šwUŽh)zÏׇceˆZØ®DÁúÞܶEO®Œªd7½ñŒše57´9r¼ð½u Óv&èG».Úºcö[„Šž:¿»çP)ºžÓ¡F·d!)’q2…‹ÅV§t ÷þH3®×Ƴ7í¡£¥Ncž™Ê™Cß}E<ÔȃPí­iiúÉ$:Ž¢&÷fqx‡%áP‰fG:Tkný™¬ô{oj'ÀE?(}ãŸ{ «òPö~…SDe^ЫˆÐ.‚Þ™—T¾·¥¡&í¹¬‡õÄAÆÊÇôþ×GkzG?ãXS²(ö6Çj×~€³nÂùü„u!@Ç÷‘Ô…w†ÑðhkÕmåZQôÂtŸ–Þ6Øv§­»TŠkP²¶-}[ÔÑÉÍ@;4‹Îñ-×mᄅ¼Ì”HlC™(§>RăŸ „–3˜gÁ(‰ÿ0±Ê†´xzê}lpƒ÷ø ·åœ¦uÞÛÃáœ#%Ž.XEpȱˆéz¼]oÏ¢ï&½Ý¸ÏTxñTÂÂêÔ5ÐVÙ,Nÿ_ã‰AlΤšš`CJ<=¹@sãoH½ŒôÌ¢WöË’#]…Üjw°É. M2³r,\Ëã¶&’©7‘T …1ðø‰©Þtýl²5UY\—Õ-ÑE+žûb×6uÙ=]D¬Óç¨`ªŽ.èì.¦Û"}R=`ãÔ!ÙfAðõÏœG eÑ!ïŸ F³@Á«NÛþT h«=xêQ0[¯óÁŒafÿvÂTG¬‘a‡Ó–söªÇ3ô·íe–'>¥õ„ cLŸg-¬”Ÿf8"¢]ƒå3^¯s ”Fe‰%ß´ÍFþEdnå¡×Ê\(Æ,ÙfÙζ©|[ÒÕ_›LÙϾZq¶Ê"´]¦ýÄw<>Töðí9J±œ¿ÜWdÇ}å:Åñ¢ŸŽöÓ¡wlSï‹Úcn:²—‚)O×Uðú²ë¼Æåà¿ÿ‹Òû+‘}žÒ ~¬Ò©Ò?‡ï¯)R’¡ûVw¡Ê…¸hË‚®ÚGYÑu÷Šý˜¥¾@¾™ ©Í¹·{ª‚Z"œq¸pü`¢¡™%CYúØõ† <²ÐÙ˜rÞkkYhÔ~dU@V@êäÜ?pš*W˜Z%¿÷`š…΀nÝ©ê “À±”p3`"C³È'5–%Â…Œ}ZKlß ¢<šL4Å„…Š8±¸÷š¦(ma0¬ã“uöñ7œ £´Ð”r0ð9t!–vв˜$¸±zYä_®X·—à3aGñÝQáì :÷KO¶¨ €‚an‹Ú¬:ù…TSçw?'©:X°1mS¿#Y4íÖØ‰£ÏŒXX0G„Aï~¾æÏ£×æöÖOóÐr ð™è㬆³tÔ=Ûoq1 zÍ…-.ý׸?h=9­ý#„ýV! endstream endobj 2069 0 obj << /Length 1711 /Filter /FlateDecode >> stream xÚ­WmoÛ6þž_¡0±|“HÖ4I×YÑ6^1 ëÕRl!²”IrÓµ~GeK¶Ü¢E#âËñî¹WŸ.Î="`”jX°¸ ´ Bè@É”(¡‚E¼ IK)ÃóÈ$áâúü&z¿xqvµ8û÷ŒþXÀN$5î¤i°Üœ½{Oƒ6_”£ƒGº Q©„QÜœ½>{z ‚%)aŠOQpÊøŒXÍ eéÏ«¢”™ŠýƒÁ®Ô,Š™áá»Á ŸKJ(ßCùÄð³Ûw;²x ‹G„3Ù9Œê#±‰&ZŽ¥R¿3–‰Dß9eå$¾·ò‚˜©„0HÌ)I$ýóÏå&<Üö묊b¡eØ´yÑ–õÊÎDØÜâwi©ÖY»*r$[gyÛÔãM‰T $HÀ!‘ñÓ"Ûtíî£gL!JIjMêèîÁ©‚£œ*{Ò ã«ºhWe±ãŒO$@Ò<ïhBe>ø º1,27—n_$tO€Kóß‹·³¸¼˜)®O  Øl·)jk­~¢â$ål€xm]:Ñõó ‡`N°?Œ‚dqÓgývÞR Žñ²þzù6bŒ…ç×\F\{ÙW—ó¦$IäTÅsˆ’¦DŽqº¥w6LÑj0?Ss¨p8 º º‹’4ÌÐ)‹ÈÆ`À¼i ôc”$°=#UËÍú(©À•)””+¢ÁV'sÙÓÅ#B—XSЇìœÐn€Nú9ÄO–E[“¥]8‚'”:‘ŒáÍ$ý@unjÁÀêà­ ¸Óžƒ¡œ{ϰïqÍó¦Z-Fæ ¨¡@ Ðe[}žóE •gŸ{G Ûz,MR¥]žt‡'‹Gt3Þ8`†;oi„øä~mÿוw$b¡›lãà&9Z•5É‹c§•ƒœu Ra

cpª9±?õ²öïòã㣠a ]"8p+žŒOçBà€^®ŒM%3G s2â9ãÙêHôl[•PMdâ%¿ÙÖxQæEŸ•ÕÏvÚë‹KÌÃ⣠d¸` Êû×Ê~£¼v¢Í–}‰tž¢Ìw}C™mjâêÄ(÷ê{µdJ‰b€arÿ,²nÛöFv=œUÆ÷4ì×…_Ø· £m¸kè®epTe_d»™mEl’úVö²zUymQeƒR^z³g€MˆÑš@ˆhªP“®@CW§$ ³O¥"y˜õ¸‚@`pm!ãð¹CŒã‹¦ªÊÜÕC˜nj‚+çøéîQвoVVUP‡:œ9óÀwÙ´¨šV,D}ÿ¬ñ 0û ' U«šzUöÛ¼¬­D A˜ÕPòrŽºCõ]kËfsï*aS{Ïv¸aÁIÍÑvaÓ ¾ßnÆ$Àw 2~îrð®¶ ;WÛI „Ý)Et¥à8§È½¯Î·M»)r°kP.³Þ¶*µ6±»."ˆˆ¥»ÜïaÀºÊÔö7|è­` ‰ NiZ¤r^‡Õ¥×®-âæ6Þd]‡ë…k3QC‹ÞÕç²ú@#( &áƒFGO+n€ÌÀ³èð‰#áÕ3)¾ÒˆÔöUïsßìüö­¨5°œ˜)ç¬íËeå®8Ûƒ»ºƒºéq€å¢ªp–ÐB*·Ó¥¿ fô\656ðþ–…Ò¶Ë<“Mã*T^TNªÂbXïN™X1Â!~vëyl—–38\*Ž÷ að2Qx™ø•5:g·¼ýZ¼åuèôkjWmaTƒÞ· xf膫޶Ùj(ó.Öpß)ßlêƒR T íÛ„]{Òõ¾€£-îš— kkíl .­‹ªüWå»ò|{bÝ”»Zï.2K·ª¶ˆL ­E941FÑ¡eäF³Õ`P}AZ&(òü2T–ÿ¾‹{o endstream endobj 2077 0 obj << /Length 1642 /Filter /FlateDecode >> stream xÚ­X[ÓF~ß_áGGaî3^µU—²´‹¨ÔB„€7™ÝL›ØÁv¸ˆ?ß3·Äv¼ˆØã3ç|çÌw.ÃÓÅÅ“çŒe£$[Üfš!Æt¦¸DŠ©l±ÊÞå 19›sÎó«Y!òÅ˫׳‹׋‹$Ãð‡dDPÄqáwLfËíÅ»8[ÁÇF¬ÐÙg/ºÍR’ÃÓ&{}ñ÷ÅÓSDHD¢ ˜Ð ³š"Lä1«Rªš½!¸`ŠéÙœ4—$û”c„é*ØGEÝçÿbó$7ï N@«óÁ‰Y¡‘æ}«8~éÛ BçLUy‹œ½lN”@hŠ‘à$¤­7egV³9Ó,ß5õv×¹gžïÖuWWaýQøù×Äo_Z³ì,|uŠ1¨æ€OM¹m/Ý—'ωîcãì»Xz¹œTðã%‡^Ì£è@ñueš;kºE‡A°u¿Ç3!ú0cyxeâÞyþ»y3i7ªÚýPÍMc·¦šÁS7 AQ$)I®f0Ÿ\€Côòß<‚)Ãqs0,‚Š×;Û˜6„þæÙå˜5„SÄ HRJ$€è÷‘5ÉÍ{‚ž9Cøcu‰¬>]Ʀ5F¶õ4N06Iž,RR$Ur½+»ýôIs†°R)Ìof„üêåͳÕ1è×Ϧ9Å|x¶Wûn]7É@? 2É%CZ%^5…)<&L¿ÛÚù4"/«ÊüY6K·¼¶uc§ìé‚'%ë“"A(Rf~ Lî¯MQnÞœ8î±:oônŒœähëq«€û×¥i*üdŽ@àžÝ R$©xÃ`0¨®i àÙÉs¥#Íx<¨(úÊÜšÆTKsïÙ29Úò}‡[6oí§‰\ˆK„„_ñP.¹yOp2‡êB.R ™B$91^¤!¤=SÙ¥NLOf#4Du´üjûÀÊt¥ÝüèÞTË;µŸ«L¨Ï»5PÏõŸGÐs½ ‹&HTîß® ke7F <Ö©ÝœL& ÍRPuЧ Hš6 bd4m {ÛAQˆ“h³ò]#ÂYþólN•ÎU( W¾ÌäÛ*Ñ!…©¨`"ãT0º·¾¿Ì™ÂùÖ”í¾1®1AŽva±¾u¿$ïÖ&,@_w†òÕ>´m¿¸lê¶ ‚©ûõÛº ö8€ÌáHâÅ˶ Ê—¶LJHþÙvëäæÉÀ-®4’œ?à|Û཭¦††É_®|6ïv“ìê™$Œ@Ù\Ö›mmp,'Ýc¹€5:²Ü~„­2‡H2žA ì¥b¨ãžÃ÷o­S¨á%ó„æ©ò2È9˜ö†ò z';I”Li"ãÃ$5©EB>dïOç|gPŸ©¡#EœA…R’ w\ž·£‘*F»XŒnY­²È1GrŒñ:î€;*ŽÙ‹ƒb Ò1ÉSz $ÍzR¿œCÏá ‹1C¨èݸzpÃ?ø´™(4H¸±"h8G‚5¢p˜ƒMg©óuš7ŠŸ¡ ‘ômè!q9ÒT ñó”»"î¸4`qßzhðä -|ØýkíeÀñ?:À2ä§Pª´ ÆÞcŒ#Óeo´{}¸æ‘{Ráà…‰Ãmmà†§`³ad4wMgàm³ßÚÊE$ñÀM00˜¥;±Hân¾ø2ê÷u)pפ‡ÿ=;x˜¢ ý„ÐXÅaj†ü©›8×Ê# 7¡tµùŽÆ•@Éoi\ý¡)à endstream endobj 2085 0 obj << /Length 1562 /Filter /FlateDecode >> stream xÚ­XYsÛ6~÷¯à#9S"8 Ò“vêØÎ5I›C“—4ŒÙLx¸$'ÍŸï H¢D'=2ö˜8»ö†,Nî="b”´`Ñbå‚‘GZfD -VÑÛX¡“TJŸ%…ŠÏÎ^'ïOO.'ž°ˆÂ‹˜âDÒÂ,D-›“·ïh´‚ͧ%¢È£[GÚD‚èL¨Ž^Ÿ¼–)"³}‚ý¡1Q²˜uJp[®ÅOn|eY™±¬êÿï™P—ƒ¡`9c,’%¾‹ÆfÄn=¦/Ï/@¨‚ÒÒwcצø±Ky\µ ×ñhúÒ•½ ­ ªvYoVU{…„«„ÅÀžÒ{:ì¸" _,’p‹$¬t=.hœ.’ŠÂâŠ$;„-D¹FØ ”¶r4+Œ%óÉ‚„R9gô9r¸î6µßG¨C±lq±´ÔŸì`uå7ëjmF¨JH²ÜŒ8pl/Çrƒ+÷}Ó¦Á®¬™eÙÔš‹[Ë~ÒS8W›ºì½ˆ]ƒá—½—Þ@½±mÙÞ¿‡vr|êºi•>ÓPØÖRLk•iA@’Z54åx=ço¶Õ‚^•äJ‡Nd¦‘f„çE$™‚XÍ;Z Mnèh€t´S”[^TC.ðq7ÜáÞÐEˆ»SÖQ~†›éПqå]KߟÁ@ãgë{nv>µŠ¥wV¦é›ª5þüÚ91 –Ö¯Ëþ*쫆ο*'Œçˆò¶ Š¿Û\¾¾Ý,àMÃtüËœ:`TlÕÁ@‰„†4à ‚,:'gkDpb•±é™çà†´ˆC÷ ‰ðþÉÙD«ç¹ÎmÁ‹é™s¡?l×®òÙÚfSͧe“š‚ûß»§’)¦èø·4È)” MOœ~Wãüà”"öõª ûôÞÜÔÕ2$=¾ÿÙf(¿w¡Ü?¹éÍ`6«®/oªU5Údô×Ñým¶ù«jìú=ÐÂÊepU|U‹ j$+UeãA²¸{?˜²'8ÆÊ…ôýÊ ›Ú¥_I}¼8B(d-°¼î»×]†—›‡ 1n %\Õà¶»¬$Ø¥xسU#0²‘1‹W8ÖøàVàÀøž™£¿¡Ô—÷XŸ‡o]M©k¯§1½n!ÚJybX±•pÎ3äÄs[OïuRhê}RIûDÏñ v9›‡ÁK(øÖĚ͋Œ(X¡á»'“Fü ;Á¤kë/V7XxmƒDnÏhH?ŽÅW_îÇ#_CøDÜ® endstream endobj 2092 0 obj << /Length 1252 /Filter /FlateDecode >> stream xÚ­VKsÛ6¾ëWðHΔžèSíÚiº‡ÚOgÒŠèH¤MRv=ùó]`A…”èNÍÀbŸß.vy±\¼{/DÄ(Éi΢å:2‚a"-3¢…Ž–eô1ÖD˜$•RÆçI®âåÍù]òiùaqµ\<-XDáÇ"¦8‘4÷’¹È¢ÕnññJ¸üQ"r½xÖ]$ˆÎ$ì¶ÑÝâÏÅÅ©Le„i>õ‚SÆgÌN(Ë~ŒY£ˆÖùÔì5£¹T™q¦£”QˆR²(å”(X=˶èö­ÝÙ:<î“TH7k·Ê¸ï?-’Û6<.÷«¾jj$¾Tý9 $<;%¶o‚š:\–e儊-ÒWÁX‹?Ø`¸åÏUïn_½ÓÜ–¤Do/l±ëÎÜÍ»÷̌㗒(È E¾Ç$e™†ÅsN‘JëDñUmÛ/•=èVc Œ`-èþ›**¥„þN ãÈÌeü«½ŸµÔLíþóèaµm5¤`ÖÍIÆÙàÂyb–²wÀytóÛ/Þƒ9ÃA +Tq÷Xµ¶yÐt}y6ç¡4%'@ʲŒ((+(M’G$÷×_léÀ—Ž}uNÝ?Vç]çÄ´¡D‚ØH# WcÃëÄðlKÈ#™Bï‹~?Ÿi)Õz€ù>aŒÅç7×— 7ô«ËùšD)9Ííù¾ß4í`0$#Æ?EAŒêŠé9Ÿp;øô{Õ5¦ýCÓmª9å*'T ›|5t Ê£Œq`o§6ð¥#ƹÔ©óF¿:/Ƀsðç•mk²rž¸Â3M2€ada&Õ׉#Ó¨y–™Mý¨f“Å ´hÎúõÖ®mkë•}3a:ðDäÿe¬hÿªžg˜" R¯2XÕ=0äKGŒ³lª§P–”©ã9#Êu¤sӳO & á&X¾ÝרZJÛÕöGCzkŸöоð”ÕÖ>öM]­°ýÂÐJXìçœì³«tw·ïlyr…uò„ï;²n-‘X5n–WÜ­ĸp•âÐÿßXb n}À“Ô&” Î±à€€Àa »:†ùÂמ…îÞam´ìšáMìwÈU|öÁùR@fä,ûð²i¶¥ûŒÊ¹Kq‹š£¸„€÷ÈB\[ð«.àùÔl_Ãcÿ%ø­qÅÐ`ãª;;8m§vä´“6MÐUl·a3Î,¬Œ.X¯ëx#àk®u­h¯ð(:ãškŒ®Â\‘‡FUu¸zDCÔ*Ó74¼> Z®½b×>ü¾!/e¿ Ãá_j-Ž endstream endobj 2098 0 obj << /Length 1273 /Filter /FlateDecode >> stream xÚ­WYsÛ6~ׯà#9S"8€ÌSíÄn“I¯HÍ´ãø‘ ‹*IÙuóç»À‚2)Ñ=f2ö˜$v±ß·váËÕâŵ£$£ VÛ Dˆ4Љ"Zè`µ nBMDÅI’„Q&ÃÕ»‹et»z»¸Z-þX°€Â ˜ä$¡™Û™ ¬«ÅÍ- 6 |P°Nµ Ñ*·2X.~Y\ž“`R¦ù”§ŒÏÀ¦œP¦¾l*‰ÖÙö cŒs%¢˜e<¼ ø<¡„ò'ª€O²~­øóQ-ôâ‘â …SsŽ08ƒ•)I“1*õ’1&*ýäÔ”C¼µxAÌ´$)“`‰™0”A$D*ÂÒìû¦¶ïI¸/®VE×õ~ôm^w÷‘`¡i;ƒk¦6íÝ#¾/]þŽ:“·ëHðpç€!oL|$D½4yÕ½´Ò×,óO"©·ÓÛCž”†‡Óœz{Õ‰á+K¨0GÛr¼C‚" yÛ©¤BRÈÐ7@[ˆ?`™Ùï$üÎ|˜Åõf¦¸UðØ´Eejë{?KAs¢8(\D7wËèÝ÷¯ƒ9`¿%šXöy˜w7„j=`}ˆ ð‹wo^G<õÈW¯ç+ˆ”ÉÔÁ‹C¿kÚXŒOš‚’³*Hª‡à2=Ç _N?[*¦7-ü}±¶ »¼ÝtPŒ3Hp¤S}ܾ;;G”ó@qMRг§Õ⑞;ISª'ƆzôŒI;!ûíæÐîòŠäkrø|JKHÛ†³1¯™ó=hÑš†@HI˜ÔS^Ål¹fpà3Ÿàß›­iM½6ÏæR@_ýÿ¹<ÖrüꧯcÛßcÊÅFìwNxý7”¼ý­¸y`–@L€®´“&Ï&~ЋGŠ3™?5‡m›Sè7J¤gàDŽËÈæLv­3èÙ-'fìPc‡Ý˜>/ʯœ·ËåØ}ºâ®ÎK<‰æÞÌÚþí;”ç=Ê4¥W Aß᳌{O½I ÑJ¯²MÊ {ZìFn›_üÌixðƒÏÁuøPô~¯@}X^ZÔøÌ»®q't]ä}áæ¨>í}šgðáç™…Âyf¡qžyŸÒ—TF4Tç’ƒ„†ºo#6@%Þ· ŽPX]7eYt„o;FÃÜ‹­s00q³«´XØ¡Êq¤‚^³Å5Ÿ«(•¡¹[\ÙM;@7(Ýä½7ßåÕ¾4¨µË øè]Èó3>ÂpÓZ}´)0wmޛݯÂòPÁ2Øpœ‹ÈZ¥G”"aÂ-NáÛö“¯V¸‘LS¬À¡_sQ¨)ÜV8¢~´õ…e«F{”Óq˜±¹ºyc/^¶$'î{ë… ïú’+:|Ö >Û¡7âçQæµwÓ ›Má+ ¾z¿¿ßùëÆ'¸Á@3Béi¤EFR•!µ}Ù¸Jç2ÜBHÛ¦Â4/ûÜŽ(Ðv"HBÀÑᡲ9ø„éEKh>&í’ïaœ#cC½Ux°º JŽý„­¹³Ål/JÜz×¶fÝ—žBÓVyYü%â|=ñ“Ã-BIôÓÊö’{ÉY…ÌUXÓǺ=_O ¯'=UrøŸ “éÐüž­"õU-9™ò×ÃÜU YçåúPZÂØýX÷[” ,ñãâ nb"ÁM_†±ñ7Û 1ê endstream endobj 2104 0 obj << /Length 1145 /Filter /FlateDecode >> stream xÚ­VßoÛ6~÷_¡G˜XR$E©OK–tm‘[ívº>¨m³ÑW¢šýç{ÔQ‰å¨À LŠ<Þ÷Ýñø‘—ÛÕ³œŒ’Œf,Øî‚”ÎÓ@‰„(®‚m¼t !‹u&ÃíÍÅfýaûzu½]}^±€ÂLÆ`–+3žE½zÿ%L¾(áYܦuÀ‰Jôª`³úcuù”“ a*ž³ˆ)‹`Ó˜P–ü?°©$JesØWŒ1¥¨pÐAÄ(D)XÅ”HhG“—fXG<åá'm]G„õšÇáPYs¬La¬ûºG“þów·h•7%î«Á4-ö:ï ·à0BR@Q Ö¥Îëþ¹›yö‚¥§ì… òOÑX¢ -çqFÞtæøºÑÝÞèßòt…C@ó¾ÿ¡’rI)¡?eÎCü€aæ¾Eø«~·ˆëÝÌqÿª­îL­·]¤ b’Äl¢p±†¬…8pŒn^þ22Xö‹X¢‹Íí°®à„*5a½[C „7¯®Öqꑯ¯–ˉ”bàÅ`m7‹ÓŠKH:V'©š’ËÔ'ìNœ~wT´Õ&ü)ÜÀ!ïʾm– ´Sõ°ü0¤éÅP×RI¬H ‚SD²€dãìíƒUäÍ¢»ñÍ©ž9›êÑ3&ÝŒìÏåÐòšänÏiqéä(;åEýÔ «Éê ­y ¸”„I5çe÷1VŒ¤,óãù½Ón ýݽä /?¾—y÷—ùòüñ¹÷Éê ôâ•"¨gÜçrhPùJmsSý‡Œ²Iéåæ7†Þ웼ÂC¢¿Œ‡¦qÿ¶ÇùÜ✢”âh…—ûH§hJ„Œƒmíäc”éX…Nú9 wíxãpóvó7ö†Þ4{œuØjÄV;ïŒõk˜<Ôm§±÷i KAÉýš'ò¾‡ëœ&·¦mæÁ…éÁm—7=èz· ɲdÈ@¼DŠÑÕmí5ÔΉ ];ár(t‰CHfœ²maƒCE[U¦b=~cž¡uMÞy§£vÕ Nkw Ýc¿Ýa«°Ù:Ýu{ƒ_ŒƒÅ R’Ž1”¹áhØçõ±ÒØ?ä=vüœm-uñ¸íÑû.·# «¡†›¹‡+øÞã2£¡ ;»¾|áÉB2EQ õ®àÙ‘Él*^J}ñ&'– ‘i2•.[¼à=ƒÐ=º"îAÆÃ+ÓÛÎ|ì”jêw;øˆÿôñ6åñqªô,} ¼‘@HÇô­ß£Ö§§ÓûG”¼óÞ›ÖbgV þapw0PÁ˜zöÀ,/K3­£sÆ÷XµÖ£ìº¶>ŸÍÝU’…xõL퀄6i©@DJR.1§‚ ¹2 9Ü ÿXç²ÂOÓ˽®˜¦¨†R—^J2bÍSè0¯_Ñ”q‰k¿N*ü ÊÅÇ endstream endobj 2113 0 obj << /Length 1805 /Filter /FlateDecode >> stream xÚÅX[ÛD~ß_añäˆf˜û¥¢[¶Ð¢"»B•JœÄÝ5Í:©+þ<ßxƉíL¶€Ð®”ñÌñ9ßœûñó›‹/¾"c”8êXvó>³‚a3#51Âd7«ìmnˆd³¹”2¿œ9•ß¼¾¼ž½»ùîâÅÍÅÇ –Qü±Œ)N$uÝ›NèlyñöÍV8ü.£D8›ýÞ‘Þg‚-±Zg×?^ 0 ÷ )áû®Ç 3m‚’N­HGŒ_Ôes[•Þjä` „4ÚÛWQ¡("ÿ p ‘‡l3ÿ,óoqå”ÜÈ&ÈUQîÛ.ÔʦêC4 Áp¢ù!^.gPWTxD¯_~Ý!H Ž/.|½­š2:Ý««§ÓŒÅ$'JÒŠmÔÙDÙÓÍ„;áOÙuœæš9z"ÚR"ñÚ€c"[öT'‚“R ¤KSâ5brŸ¶´„½ùçªI~ùúÕՌۨôWiŸD)9Vñå~w·izA0À(¢áÜ>é b{\H&*,¶¯WÁìÏ÷Këú|H‰0ŒP}p™»S5# ž)‡éôy Gºù€0eá »Nhá±Bkd±Ÿ¡‚̸éÐ>+W¤X’ý‡“:é ¤è¨T¡ŒT'ˆÆ÷ç΢ÆLU1¹àÌɨþ¢ýë²YuÐÿ56¡w…äjíy½#‘Ö”‘„ñGÔÈæº”ÖÇÌB–î ’¶¬Ÿ-˦&“œÀàšwxÀ?¥êHuc¢j_Ÿ&0zMãÈ(ûo<ý5¡ iõúÃLiïRmJë …3x;v0%\=’Ï"Ý|@˜ôö1»1^â¡*uÖõA,Ö¹?Þ }(œÚ]‘C*ÈNÙ$R@œØÄ¤cˆU2yq ód?•ï˦¬—åÙü%´ü7V-š7Õo‰z£RH†þ•(&©7n> LÖ›1»Ð˜s ÔŒŸ´çÌ1b‘½qaÂ~lþ³Ç)ÖO×ú²§ø»öTÿÈž’+´åjt)’ÒåW +|?á-áC Ø"¤½aèà ·:0‰1V¢ Uàý¾nŸ1+Ã\fôñ³À©F‘Ö @õ´ê«3MŒñõúHæË[¢Œs g¼—øk †LqüšÀYrŠ –Ú)5årïB%è¿13`ÒF;»ž?ƒ~˜ÐAoöÝÏ_[â° endstream endobj 2122 0 obj << /Length 1600 /Filter /FlateDecode >> stream xÚ­X[oÛ6~÷¯Ð£ T,¯"Y¬[Ó¦ÝZdØšÁ€®‚ÍÄj}›$§Kûçwx³%›N–ahSÒá9ßùxnÌËÉèéÆ2‚‘Æšd“ëL1ĘÊ$/‘d2›Ì²¹DœŽ Îy~6Ö"Ÿ\œ}š¼½žŒþ‘ Ã?’AÇÚíԬ̦ËÑÇO8›ÁÇwFL«ì«]f É’Ãj‘}½½<AD‰ˆ¤Cš0«(¤üÌ*¤ÔC³o !Z9.ˆ¦ùLj Ú§#L÷PÁ>Òü·Ÿ¿ìÄŠ(WôÕ9„°#³B!ÅûVqøÒ·é…29Tå,~²ö²‚HU  #Á‰ÿöÎtã‚)–·ój+š›Ö¾àyµšù/Ÿ£È²j[øj•ÁYÐTr0̽¦—¦Z¶Ïì×§oˆêcâ l9tr`…”~œä}DŠ_¯LsS›nÑß!@¬Ýb™ÀÀú€ÌXîà5±Ï<ÿÙ\%í5C»BšziVcXuI’¢’’ál L¹¤r,¢‹_^ù9±͕Ó‚TyÂ+üÐUÝ6í;:{¦ÑL0ˆNh^'Ï>È=ÁÔÙ¨ó=#B0{)ÎÉÞÉA4Hˆ}D©hRGx†lií‚A`@CVÕüQßÓAH V¢Â“t¹¢'˜¢ë@§‹â Vê#ãš …¼§3ÁL”:2¹â®xùàß®|®ªÿ"ÃèûWç>¸Íí˜Êš,DC×úwUš¦ïÜ¡u†¾¾0Õ¬^Ý©qƒpˆ8Möó†‡ cÒû©qe§ •—úéZi]Ý‹Á,à}Ý5³¡u_C06×ÍœÈüÇ”(ÿšòˆ—aœôJC¯Ø íæ˜M0µó]YGaTÓŠ‡PˆGL‰¯'KúÕTí¶1Ëûp7¨ã›fLrX“¼µ:ïÌÌY_ûßn¾]ÃÄJLÓÕ¦JÍ뛹]±¼kªU{;vrmغ\GûÛ¥c™¶‡ Uô:µ³íl[ŸŒÕ.a e†z—j´ÚnìÖ«ÂÿØW*ŸZOÖ‹8U·v]Ãj½jýsö×ÿL-& 7Åúº°ã¯oìDzç×à_*%:æŠÎ8ƒ‚sð6Ç&‚ˆÈ~¬ï=Î*Þ{@€Ü{†UEBl$´ÉèÞ“È`Ú¢²ø”¥Í?*©Í?…¯÷:\´»À1q, #fÝüɉóašÂ ¼f3Ì6õ´îìêΪ·Š Ë7p$‹jU5ð(¨­%bme¾Úgâ/&~q³]TMTà„«®v½ô‘=óO×ö ƒJŸÆVGc|DÀÇ•‹‡VÍvÚÅmÛꌗµ~Â;)¥Ì{Wy×êtqŠ• xw°3ŒjDJU)]©*mÂÚÃì8LBà Evjq³¦æ6» ‰]õ‚:†óYÝvL7þý¦jª¥€oïO5 C—…˜ -h›žÛØ’9¾Ï£Bš 7>{ȵæàÃM¥÷Ñ_lÁu®‰8Òa«[(N2'xŠ“tÅé¤1J˜?H?×Ow9ì>ê ûëà^,Ù=A‚ˆ~÷N•ë¾zw!­Z³­›jSÏlÊÀÜ•¬\LÃ$Æ¢¾Ï)dpídû+7%)=0šcu¯÷Ê]—þáaרïg 2º+8ЏÄ|÷†…ï±Âþ'S. endstream endobj 2130 0 obj << /Length 1469 /Filter /FlateDecode >> stream xÚ­WKoÛF¾ëWðHáfŸÜeZ u§›êA4ZZÛL$R%©ÎמnÉ5žrjå,’NŸ×¶½©ìo5¾¡@i‘÷ßTQ¡(¢ã Ð ‘†l3÷.Ó_íÛY¹‘M«¢Ü/{g¿Ô¶Õ.t‚æ$çl€p¶„Ñ|ò{Ñëß~ñæÇË…ßôe˜WW Bµd½]2ÆÒ³×¯^,¹‰’Ï_ÌV¥äTÎÙ¡¿mÚAPŒ³PˆžmÖ(Í„›(ùòP‡ò¶±(‹ÛïmÒ?Piw.¢» WUÙ… „}Ôüöq¯ì••Kdû6VYR˜¨pTDÈei’Õn¦Ï€Û]Ÿá…ï3Øò}Æ=}ŸˆIŸ‰¨ŠUÕFÚû>ƒ]ßgŽ/DÁ®Ï`sè3~/t·h7ßYPL䑊…„<î;h¨+ÖKd4bÄ¢µKÖ½GŠ­C@`Ôvôoõ±ïÛ›¦­úÛ]xýŒeäWnªCéåÎö¶ ¯—3è©R‰Ì1:‰" ÿ´Tè‚9fÂ+<`¯Þè³ØÎŸPÂâ¬7n¡RF¨ÓÝüÈ»Žª¹O¯“£^;–G† $!·}µßVëªwo_—F¥è<̺ܖm\#b£~E~ä‰H¨  ƒ!ä`Z·@AíBl·ßcðõ.FˆÏP ×FÞ ¤ù’á céÖvO¶·ÉHvÜÍ(§¼±'ìîm03‰ ¥C†‚1Õ($n¬$…¦¡QiÜ4‚76ÁŸæ’l,YàC€OY—‡¼ÈY ÛÙ²;´Î"œ#zºð¼F©Švqa€u<€-Q‘‡C=‘ðŽfVÇbDUø¹ _žèbN¸B¡I‰C‰?_fÊ ¢eL_m±cR?nφ÷Îö üßì÷ ê™El±OS‹Ü¬ÃíàV=¢ŠQX$°Ÿ÷¹ó=àñ#ÃÈÇ£¥ zMn¸I2Ãt™þ¾$U8TÓ k?cÉS#]Ì8³µF·bS‡LÐiBñA‚0ÂÅ©©%˪G¬À8îó"‘ ³¬áub”>RnúÌÕôN°Cž>{µÌ´Iër³©\œþÆ|xír¶·RItÁî÷yÑÆRÑÆî-úF Æ;Ü8îHš:„M¹u_ŸéÁv£ãÎ6W] ¨Hvèl碥êb{›·¹„¢˜„‚7†ï‚o¡‘! Cgû6L/ÿ;]×C endstream endobj 2138 0 obj << /Length 993 /Filter /FlateDecode >> stream xÚ­VßoÛ6~÷_¡G ˜®ü)’}šÓ¤]‹ Ø#-ÐõAµ[ˆ%§’œ®è?¿Iy’-gXQøÁ"y¼ï»ïîH^,f/^sQ†-î#Ís)‘â*Z¬¢±!’TÏ#ãÅõü6ù´x7»Z̾ÌhDðG#*bÜNóhYÎ>~"Ñ ßE¸ÑÑWgZFT&ðkÝÎþœ]œ’ 2ªØ˜#”MÀj„f?VKPÊŒaßRʤÉh¥”`”‚F)# ñß™tkÛ]•¤\ó¸ù²Ïë‡î[Äyµò“ëí¾¨v~²±y½L8‹7Î'A¯9ïìÂæeó²[yñšê!=!@¢ÀÄÛ=&)Íþ9Ëq i09¾ªl½.ìÁ·îhˆhÁ÷_D. ò Ræ<öœ¦ÝXÄoìÝ$np3Æý©b´¶.J[uq·“ƒŒÑžÂÁ.N¥âÈC¦Œh F˜©:pÂÿësBøÞêzòí$KÈ€|³Ï‚•móbû³%½¸ýÝwCS¬«|ë/ ûäÎb_w¡[òÖ¯)BH8Éì¸vÄÒe!ÒÈ(lñE9~Ýp/ÝéçÇ÷»:,¸gOãþ݃þÝf?w„¾ùo¼eéá~—žŒ•ÿ[$ ÈÏ®ž:ÀŸZâë'ÞíWÝZŠÀÅ~S çÕqÑ…Šå¢‰ò¡Öv]ìª^±ÚzÉŠòqkËoÃ=7~qWÙô³‡åñ¦hÚݺÆ\PÖ(ÔK ŒWÒwoL¹ñ.¾÷Eù¥Á£ endstream endobj 2146 0 obj << /Length 1720 /Filter /FlateDecode >> stream xÚ­W[ÓF~ß_áGGÂÃ\=cÔV,°Ð>p‰h%ʃמl ‰l‡-ðç{æ–Ø±m…v¥Œçœ9ç›sŸGË‹ûO‹FÎH´\EŠ!ÆT$yŠ$“ѲŒÞÅq±H8çñå"ñòúòÍâýòÅÅÕòâÓ‰0ü‘ˆŠ8ÎìÉŒ¥Q±½x÷G%_D±LEw–u1$S«MôæâÕÅ£)"RD$£ ˜ÐµŠ"LÒŸ£V $e6VûœÅQ‹„d4~ý”c„é*èGYÿ†üñÀ–¾dÀ8áTœ…@ˆ˜¨ )>ÔŠ=e¨Ó1ýHåX”ÕøÞè‹"@SŒ'޶ëô¾lÚ|W•U¿`4þ²H˜bq©w° ±®K]Úlò¸Y9b¿Ö~ÑôùÆÑú6¯»ÏF‚n;OÖµno½À¼w|Ò}.Yë·lnÀ¤G:ßv åþS¢†—ã.`œá ƒS ?–sl†Ä³Ž_8•>ÈÃA›—ý˜ î»x‹ÝlóÍãßö‰^/f¬÷oo˶ÚêÚ˜¨Ÿ… )J) .ÆL&;-ƒèúÙc÷!—†¨ßZ¾îå¾_7mP(†I™Btš`fHÉ`j"ç0¹eÀôº¹©ê²ÍÝý_¶ùÍÚ€ÛÏ)Qûôp›õ$Û0TÅ,‹R*‘ãœMrÏ— mÆqžŠs±yø°Ðm ³ž"‘¢D‘Ì%¾çšàßš*‚ fÇ8*Ÿú@»y»“ÿbø—¹îuëâþêÂÄß$na‘÷µžs@Ș\œd)ŠD)Ø.cü¬ _2`œqÁ©8ç‚Ü ¿{¸Ö;´/6(/ÐþãÄ+Tª!9x® ŒS(„³t ãàQÂÿWäoóÚ…ýõ—.ÿ8gî4ƒ¦.ΛðšFBA K¿cnÏ— çÌ}"Î*ÝlW_÷¨ø:m«)èJ±sVö\í'VæIhc#íÕlu")G,åã°­Wº5=íl…šùwŽÊÛ?«Ï&¶‡[ð¸`1˜ÎÚÞó%Æ9ÛŸˆs#Å ê½H§yF‚ú<9cøÀ5Q=;L ÐÅ…×üz_‡y¡Ï«ÍÏ6énçÿÕã'®üTµIj¨FyÑWMÝ9²-L[tLÐ94Ç{îk[ù칩òÀ_—ŽVVÉíë϶Ò9LPé쬓iÆEÄSŒ$¨[€·´sÑa bÞíÛP·^£ÛÁ ~ÝàÄDÜí·CŠŠ;i×n”2hÜ(|‡Q èAÚ.oûªØèÎm»Ûñ8w?«}mm4ÆÞ/D€÷,7 ˆ¥»Ûx0,_Ìà§!p¶_9ã‚ܶéA‰sû,܆%ÍfSuSy¤…·U«“f•lóγù;[µ3Ó 7º6æOŒÕ¶y¿ž D3Ãã‚]…ræåCUŒD ePóOž ^%á ™HNž c„GYfϧL7öðN Â8VÇCÆ¿‚ERË9;K(ŒŽ.Á,‹Ã´zV+Å¥×£Ãû®ªoA³ÌÂÈÍ8HÃX û÷ºè›Ö­c‡Ü×y{«ÝÞ³¼lm@Àú± ˆR·h‘ˆŒÛ<²ñˆ0V'1I$¡rx¶Ú¤˜¶¹%M’B˜€ÒÖæˆ‰:˜• gVM»Õ¥#ºø$!ópÜê[“se*˜"Ã0o‰±ês–‡©™‘ã“’Ù ƒœ:¼+fŤÐÇÃ/güt° ƒjšÒlŒŽ/. ¢C»>1åƒê¡Þâä”r6\Y«ÚË8£qSDe<¨}8.LAØ@R›† ï2 ¾h:ï²VÚW­‰2ïzâ~ {06Yí·‚A±Ñ­²¦àXùž`«œaTFÁã» ê%äncÓ8àö#”[Ê-ðm›d¶P‹Ð3 »G{Gô'ZÏ4f§Ì]Æc õšÅ]u[WÐy‘[Ç´Ð)¸Ìë°¬F½L{™Ý»[ëÖ7“[&€ÅpÌ·Žµ™¶ï…çª]èÊÈ Àf»‘a¯`†*hã{9'6ƒºxäúm.:‡å#EÒŠOsó.FS/¸˜bÒTåÔz>®4îtѸñ€ÄeÞç³)Ÿ`Uz,>Û¼ô+WrhIBÉqz&îÆf„€Z 3Á]ä}ojå°eS˜~Y ¯=ݨ/×ßœ; ÷†øºÛ? ®× endstream endobj 2047 0 obj << /Type /ObjStm /N 100 /First 970 /Length 2205 /Filter /FlateDecode >> stream xÚíZßsÛÆ~ç_qÎdr¼ß{—qS5uݤ“t4²ûäñD""BŠTAR±ü×÷Û#!K‚b€dÙ3}°µw{»ß~·»€QÎ %ŒrVhDÐ^â¿NX€€Fy-\|'Š 4 IQK"Âß ’Ò# U"YL¤‚š§Æ-‡ùužÇ m‰X B{mX"¡ƒÏRšR–’ÐÉð´ Wd Da´ X @3íX½€{&ðø€eœÎ«boy­€Ë@‘%hyƒš'Ò”°JåñÉæUví+`„ÅÏ»•­Ûé`…õ‘×"…,¶np+’‡€QIåQRÞstÂ)â{Q gL¾+Zg°&rŽMm< kY#Çf¢…”øÉ„ñQ±µ" —<Û=Fáu¶eLÂÏË“ðN±B‚u˜?)Hl•ð£Ï6JVxRìÄä¶Âk%/|Ê[H01ûÓDÆÏŸ 1›ÝŠ¡yçütöxÀ›”`-„È£´Qå9àÒ¨#¯ ÷Gëò¯ADǶÔlA üDr¼>Ü“R£`²Ž·à!°¯ØIkÖI†q¬a¨dw¿â—x_0y @M°Q$ÂòÁâNÌ …Sôð²æ{)[FÂæ +‚MÀ@”EÇbxj¬al€)aÍs'–’ô:~¤f›ÍÅ÷ãqQ¿«.åª>§ë1œd$8‘.M N`ápº=âÑàÔ@á…áòn ï!45B2Ÿ:ó‡vFZÁ%ð¨^w)CÒ°>ÝÛÕr}QÕåw³òB.ËÍx]õdö׋¿üV-§ßÎË«oas‡Cµ+ c’ÌçÙn¼î *sʤ¦Ø…ãæåżXýö~+'ﻪA$9»ñ¤¥åL‚”$Ê8ôY.jlªsy^Ô›jy4)륜Ì:›„¤Î‰ bG£iÀ0”àl'Ö?.¶ ùïòó¢¿.A¤tÞX<óÒN뤡‹.õö}5™=ݳ§-GQν¢ €vPO¥!´e”–™W‹´ÂAÒ ÝI‹ÓcMsÅgQ'BëOaé £ÁìžžBÃe¡á²žêTŒáe”Ê(¿N´p–)ëû$Z뢞r³š®êÕeÑ;êr”Ʀbu@×ÄU†‘ÈÔ»¨3[OfÛÅû£‹ÙÕºšËÙö»Ó²^TK9-ûfŒÈ‡ê>½M’ˆ… r”ŒíŒC0~ÙyQ;èÈw :Š­ #½12Є!¹§ ºÔPûä$8é¸Ñ$'ä¤öþ¡“¤¶3/ àpÌ!ð’+,« Ì£¥Š¦K žU ƒå²âÔ`2«VuÕ—š8 ø››>û8$äßÚ ŒC«ƒnÅ!…Cqx{ăơÎGfz¼â0úvŒF;8F÷È-¬½`ž(4u÷¤\Iÿá84°½ú¿Ÿ¯–ó¾H·1ŸÂÞ zIܚĩÈi1”S€>}'§«*##Y)ÿë§+ÿ éŸùF{ja>ºC˜¿=âÑ0ß×éžš5©á¸n ÓØ¦q@aú™¸ßù;W„>W€ ÷›@(=tîŸWu±”¿¯Ö³/“ô½Ò¾é`ý“«iÓòñȇÁOMr•š'ù§¢rݹ´ùì-ä.xöAêô¡ž÷Á"ȆÕóÜ™°íz>ÑA<ÓWÔÓÖʵ°Îo‘b_Weˆó‹§¯àuE–÷5Ö·¼MîQuküöïãX»3âKÇš¶m¬i=k¾ÁZhj„Øi/hõT”kú¶Ÿ£ëž‚ :©-f²æC×=íÓu/–Ó+yºÌåÕQ9í¢Hc8³ošïÁäT«Gó}]ÖäZë²Ã{Wë\7ß#È‹|¯î{&±WsXh=4ïcfÕ7¸K%™BÈ]V›ÖË:þþàwÝñi}ï[n~_¯)ÞÛB–3킉¿nèÂrØH‹åtÃrºa9ݰœnXN?Õ dm{´ 6pÝàVAÔ}ùE±þï¶ÚÌŽ˜ÝŠåBž­.{¼žÊßaí;åñùÛ’îòÅÕº˜÷|;u·QA U=@§yÂøxvµ>)/_H~×EF©Ð›D@aþFç^Ãe* $¶l‘ˆ9T<Þñ˜ ÐôR´U÷PCL ¦¡ÓPÃ~{O@îÿý‘û!ŽØFAÙ†x:ñôUA¼Ý;áoè†B|°çøö‚k?¼Â¤ìæ‡Ï.9;y “{1Üx_ µ¸>êq M‹Ëj*Ïêr±XOfe5Tù" vµ ñ ¬1ûÊ7Jœ”]ôšÈsùÇÕy±Ü> stream xÚ­W[oÛ6~÷¯Ð£ Ì,金 hz]‹¼¬1Š]‹‰ÕÚ’'ÉéíÏï‡R$[éV`H`Qäá9?ž›ž®^ ‘0J2š±d}“XA„°‰‘ša’u‘¼O ‘z¹’R¦ËL¥ëË‹«å‡õ›Å‹õâïK(ü±„)N$ÍÂÎLèd³_¼ÿ@“ß$”ˆÌ&Ÿƒè>Äh £]rµøcñôSš0ç(8e|Ƭå„2ýÿ˜µŠ“M;fÌZ›±åŠe<}ß#èísI å÷PÁ>Éø÷ËŸ±U/· Î@8U 0¦ÏÌ*K¬[¥qel…þÍäTU°øÁÛKVÌ(¢(€æ”(Épí/ÊT¾<½ó?õ±Y®„éJëýÞàÙ–þµ+ë Wë|åG×ù¡L]Øï*ÿÛµ¸œwø4(²^f:uï p$€–ˆâ©Ë÷íc¿òè%³ãóH ˜=ÿAð0mà$§'_Eщâ•knK7èVã Áí™PT( 7ö à"Řfþ]¦¯û™Ý¨fj÷‹§iÊ}$e‚áDsÖC¸X[! èò÷gøbÖ~ѽ xæ`DUC¡Â«.ïŽó‡—‚PczËï–Œ±ôâòõó%·Ç‹çó4 ¢”œ÷âØmë¦7(Æq¨Á!½ÿ bÍàtf{LÏܦÜ9<ýe|²ºlÜœH/q×ö4¸ à‰†uÍ ±@ÌC1ÝË­F‚!ÀN0ž¨ F7»¾'×Tdã‰<õ%Œë1˜¹PRgP¦‡æ:#™”S(eì”pÉ#íìgx[ïó*ÒþµÍ?Íñ –¥R?à\ã1©€<.À¹Ž½œå|ª.ÝylOn¾ÉæÛyWÄB©£9JY?¡Yb oN¬—³±Á´$ÊÒØÙߺ׸jã û?uOyógy÷øŒz8ÛÊWÝL46’úæ^¶y³G±¼*°'#™=¹NhmŒˆø \×yçT¦àa-ŽòÆãÍe¥Ï•Áµül…bxPzß7Òqxeà¾ó‚>äóÖ¡ÆaX[‚+‡6uÄа>4² VFH…óª~SDrí7|Åñ ùиÖçç³ø$ˆŒX! RmÇdxÌÆNHÕ¨AÁ¶Þ¹ÝW÷€¯sÁ ÓÛ¼hð AM N÷> üAiS LÝ4ù¦¿u aKëp ø¾g/^uvzLýœŽ¡;&×FhèZh']‹¹/¹ðæX ÖEü4=»0ع¼@WÁeâr“W-^}ÓFÉ}½ÞsÜ£xY(ƒ]·q()>_ùSA ¢`—xr4_­4ž zú¸÷Èàþaf×䇲(;ô•¹¤…ÅHÑWs™ºëA`V |œÊjЀyø2øu6Ç0¢ØÐ„ñ9% Ú´ÁÌìw€:˜a±¾…ènb•*H UXÐ&(–pà5lùŽ[˜Œ_Ißû¬ÿ’rÒo endstream endobj 2162 0 obj << /Length 1487 /Filter /FlateDecode >> stream xÚ­WYÛ6~ß_¡GˆQ$%2@îæhlÑ6kÒ<¨½bI®ŽÝùóáŽe+H[YDäpŽo†œÃ7««§¯„ˆxÂLbx´ÚDZ0!t”ËŒå"Veô!ΙÌK)e|½0*^Ý^ß->®Þ^½\]ýuÅ£þñˆ«”ÉÄ8I#²h]_}ø˜D%¾&ŒŽk –gV»èîê·«›K\eŒçéEšðtƬNY³ÿǬV,ÏÍÔì#…LøbÉM‚ùT€VùUÌ3Á:²-ßò„qÁ¹:‡€óüÂ,[eù©ÙÄõ\ß3z¦Ìýˆ&£%Ï KSÀ&LINgw¶èÖ ‘ÆÛÅRhoÚ2îÇ=,ÒØvý¡®íЈᱠnH‚uc‹º†'O_q}ê¡”L%x'Ž0ò,‡ãœÆbéY'Š_¢ÉÊu«S Œ`Íëþ#Q‰PIÂ’'Wˆ˜6@渗ñOöý¬]¯fj÷sgUÛÃ0ÌBÈS–¥<@¸^@”\Ž:ˆèöõs‡`ΰ&ÃÊ_ðP ã¼»R°$σ­÷ Îy|}ûæÅ"ÕÞòËóL)9uðz¶m ŠÓd̘–.s˜ÎCp)Î1Ñ2`ú¡ØÁvðwÕ Û¢+û¶™³Y¯ó£øö"×HeiÎ4è›NlË>—kS¨gʦ€ÙëåØm‹šk6~:G%h€xž˜›©ëÕ4B–A½Àªf¯1Í3hÒß‹/ïìÆv¶YÛo^¥Èä¸Ê¢û½zxvî:—ŠqP¤4dèýÖ¾å ãÌ•œ«ó582®Í…qÃ]DOtÎÄ=p]˜žm¶ Û>–cC…®´CQíþADù¿ éÍÝÏTúê¾)v”#öÁ=Áÿz:/:Ë“$! ”.æê.gIê= $šI•F«Ú½†~Ü¡ÉeÜnè;l;kq©âÞµ4‡Tã±u%Ÿx\!fK‹}×.àÉÅå¸*ÈÞ‰ÊEGÐUᇦIDÂE7TëõÚK».ÐêÁµ¤T š 3&›z% Ô,©É+¯ôËâ ¤íií››PпBï²ï]Ì­nkä±& õ>XØÏÅzØHÑ€<®%BÕ·;°èy}÷|â%wv=tØMçïFæšeR®Sà W£…„Øb™ ¯0âxP€‡¾êi7öÎK#ã‚e1Dè‹z¿óBëv‡ >d» ®ÅE¶CÐ!ìúä·ÅnCävCðx€×ç/EŸy“Á„$ y³n»ÎötýmSöøV^(|S„LÛ¯ )ßÞwL¤íƺjÚ¾r1? ¡(§†’ \É| aó§ÏO˜V™É—ræNI&ÓcnBQnf'|SúØKù\òž@ˆ†b15HçÊC¦›|œ)““Èþrˆ0æÚ8>ÍÕù-a®C4ÔJ~6DOg­£®}ë¿ç[qæÛx¯"†Ÿ<çñj¡U Ó» ¨ Kú ß`ÕW!PùùÓ‘ši¡Hygáñ””Qæ˜ÃÚ?V Á0#c”Æj /Ü¥Rq4_¹o‹^ü½ß½.Êqáú9â*¡¹CÍQ2þeï –‰ñÑÙ%Öa2ákÁÔ²ËcQ:Ogø‰`'/‚0ä\EUÁׄ‹‚™ÝÙP¼Æ²"ϱC™„l€Òþ"H ƒ\YVXo‹‘Ÿø*ämµ{ŸrίôˆdjÛ©"Xs¥_Ó”u|§Á5n zùgZù>T¥¥ND?3°55ôµŸaâèéÐlk;(4ª@3®†Ž^®õ$,É$UVÀ*pvqh'‚:†Ÿ+¤d_T]ïû É^7f¥anúB|\¦$ü%äÛß[ð endstream endobj 2169 0 obj << /Length 1046 /Filter /FlateDecode >> stream xÚ­VÛrÛ6}×W°oä´Dp%À›1‘Éÿ±¢ý­zzy~©GÊÀ¿ÏÆ?Ø¥#ùœ¸Ã>+('L2už3b \G>gB>XAϾ°Ê½q¹±<ÔØÞÖ¶/ªÝ?ˆ(û7!½ùñÛã€þɵëŸPY}‡k¾U÷ßZlKvg˾mÂrQ¯_4í‰ÉÞ98 &k[ná/Üĺ-êÚîˆoÑŒP*CœýÔ ºÚÁ×»C×[‡ÁÕð°øGÅMÝ 3<,0/Z‹ƒ½-ºCk×n–¡Xu¨Q ¬• ê-ªúèö}JR0lº¦îpá(åhÙ7Á³#²K|€ºAŸŠ“9ô7iPœ]æC¦]È:’@ƒ×ñÊÇÒm } ‹e³l+@óú½xXí·ˆïÆ›æ7Bc#øøñ/¹ƒ ÑwZ nòS1ÚL ÓÙÏwé]¢ó¸Ùà7”E;zÅ"S•¸P”}õTõÇâp+NZQ‚<öàò"ŒÏ‹ñyqO§¤® q§-úªéÎð»pþ»|Ÿš)ü„Ÿ"(ÅG&h®!‰Ð6$eðô††õ«›Iuýuh ߊ¯Ÿ& endstream endobj 2178 0 obj << /Length 1910 /Filter /FlateDecode >> stream xÚ­ÙnÛFðÝ_ÁG ×{ò I”´IÓôPHò@Kk›(%ª$•Ôm?¾3;»2IÑé‘"´œ™ûZ?]_\¾P*œ¼Ñú:ÊS*2²LeÑz½3¦‹E¢µŽŸ}»Z¼_¿ºx¾¾øõBDþ‰H¨‚‰\¸;…J£Íîâí{mù*âLyôÑ‘î"ŲTéŽV?\<=/´d…6cù’ >#6ÍY–ÿØL2cäXì*7:“E¶HD!ã·Aƒ _Ê‚qžî€|VDðÑ¿œÈ’@— gT˜²s*Qœ‰ÕË¥Šå5ê©þNè„™úEF‰H5Ó9è-93ZîÙmÙÞØí"‘& —à¸í«Mmhâ¾-÷݇…’±m;K„»fg÷ê;¢r×ö[ú8tö¸mÚòPm«ÉîèZwX$Èg<‰òºmv^vÛôÍ>qªrPVƒMšt$\ÍU¼iêºê*”Öì;‚•=ýœãAÇ%*‚©RN§¯ìOlŽ÷S[îºÇˆ¹|!ò¡+µf†cðI˜fðã(ÇNO<éˆñó½mo*{âm†7 ‚4Ïû7\Îø#ÐU©Ø(Ü·vx!ò{ú@ úãfõòbH/ãõúÍ¡­B gU„J¥*bŸp¢P—×_?s²çDúk#W¬Uk}¬^.O [„÷¥F°43Ö] K„®ÆŠOÙ9BåOEƒ5\pœ©½@u&x¶Ó¦ J/óåµêËþ8ŸZ1žeÁÁ?-„ñ“×/— ™ÇOàªõóå|¶)hmzìâ'Çþ¶iƒ ÀÐ!)Ë5¶Åò ×;.²9¥è”zÂ(èßìQ©cßuTw³jÉŒÉLy1tÿG{m[»ßØSÐÆÿƒb¯¾~þ=©Æå}àX¹/ ®ÅœÐÄsêùÏ„.¿{yž»*g\™ÈH°%ÿDîzºd@8—»v4380H.Ñh.‡†zGÓ$5L§C}æ† )3öTQ°ŒËÄ1#ô¿ñTÙþ\}˜©skEvbøp]2 œ­ó1;ï+øâÐ΄‚A Ÿ«tOu&z¶Òu–³T+ŸëG?¡¶¶/«údüßx”ï½îN…ˆ4ôó Jl½ƒ{o`XvÕþ¦¶É¶&ª-7}õa!³†´–ƕěՒ*BË4¶„uÅÜwköõÝ"—1TzE³ºmްÔ[ÂVûM}ÜZúØ6Ç«›ÀDh{"º\†ñ€Vˆ33`½Ìӂ̘ê¤à—Æ7ö`ãŒD9ã¼mø=ÇçêØÓáÍwk:Ì:lÄs5á™;žðæ0?“`ϧ–IhÉ©!ËÊÝ¡¶›ØI¿ßßõ·U™ÒG‹‚•ˆWàÕ%a×}(‹¡gvnf¬oˆþÊa¬¿|l÷¸·á¹Asˆ¶l=¾ôKÎD€z4Œ•Êɬ©IðËS²Èë Y²¤¦;R³¢#¼W®ˆÒËDˆ¾_$ʺk¿)ëÚz’UsÝÿðlù˜‚µœÆ ããW9V„øŠTyʄϬÓf«`°ʰÒâî¡ÈŠöP„ÆpØÙ²;¶ášóa9=-¢ò‹(-¡È¡÷pÌ—"îm›4×É®ì<Þú}ð¬,‚ê™`2÷ž¦MV¿ÉÓ& ·ÉºÓÚÅ{ð^ëQû¦Ý•uõ»³.— ®Á§úRŒúÞÔÚ¡08[ÙsD ¨#ú­mAQrœ„Îs Éß´tîÛêæÆ¶DélÇCgkºAŸ"ÅlÛT°[@÷21d¶, ï6{èKX8 °¸‚GÌãrë‘q[Kªj…®=-˜†UÊš<{z¡ßá]”Г;>‰ÐMè·¹‡ÅiTÃ4FÙû†„§++2N¯x¶áëš¿_>01NšK oi™Žy‡J˜ì>aÂC Õ†mÃèSEÒ'>2Ü·+ \U.÷Ò\düîÏÜ=Sñ4@çbêcXEL˜m¶O8zÓÚŒï|†ã†êxÃl±ž” ï-ͽ·DMºˆ5ÁÉ[Hй‡?Á~!™Æ”3¹¯^@œîœËÙ@RM%öá^‰ö XÞØSN QÀ£%Œ[)e{ÛZÏfgáéào;Búfƒø+Œ×aÕ»õgêúy(që¹ÏÐ2A „£‡ô‰(kX’T‘õÿ¼(Ÿ\£•ëbÌÛÅEÞÇe[ºÀ€ÉöV' xñ…±?4^dØ’šv뚎Þ¦ Âaµ¼\./ß,ékÓPSõ½•€.fÃ;ôGnÔ.q®Kè—A0¾ª{ ®°íÝy”;»ä|„Òê [²0†ÈÜÄG ó{®ma»¥ W¹ý° õ>˜Ìuü±êoÂù‚À®¯x‡¹ζ0NAˆsP9£=˜Inòê#Jwë†K8®Ãšºm0!8iÊ ã ¢G…Òqw×õv“`CÛ¶ðŒ&߈"ƒÜý½ ^Ê¿0þð{ŒÖÄáðÒø õÔ ! endstream endobj 2186 0 obj << /Length 1927 /Filter /FlateDecode >> stream xÚ­XYÛ6~ß_¡G¨¸¼$QA"‰“6mš6‚i´6w-Ô–\IN²m|g8¤#ÉÚôD˜g¾ÎÅ}²¾º~®T$8+x!¢õmdSÊD¹ÎX®òh½ÞÄ9Kù"ÑZÇO¿]-Þ®¿¾z¶¾úõJDþ‰H¨‚ #Ü™BeÑæpõæ-¶°ùuÄ™*LôÞ±"ÅòLÃj­®~¸zr©^hÉ ŽõK.øŒṴ́ÜÿÚ\²4•cµ+“¥ªND!ã7AÐ/eÁ8ÏÏg@?+"øÛ¿œÙ’À— g LÅ9Bò µ:gF¦CµÜo •z®¿R:放E•Q"2Í´Ü’³T Ú{º+Û;»]$2ÍâãBÄ%x'nûj³·HLã¾-ëîÝBÉØ¶%ÆCs°5’úӸܱzKÇΞ¶M[«mÕ#Û=뎋ål@&qÞ¶ÍÁën›¾©•X 6iÂH[pÔ¨xÓì÷UW¡¶¦îˆVöô›sÎq¥ã/Áû™ØœÀ'¶LAmþÀ¾ß! ûŽýhß±—¶ï™àé#.%çò³Ð2¦ê/cˆðï©[~÷â2j•a•Q*Á ó‰¨õ|É€q.j'â¨p&W×Á\°6ËÈØ‹QdLËbˆj®Cx® Lc‡˹ŒR Rèâ°²ý©z7“è) ùYàÉN|É€q6ÑÇâ¼ËÀ7JÅ…òB0i39—êžëBõlªëܰL+ì'ßw¶¶/«ýßù¿ð(\qÀäLˆHCAÏ!ÇÖ8÷ Z`WÕw{›l+¢ÚrÓWï2¡õj™ºZýjµ¤>¡e[ÚuÙÜwDkêýýÂHè~I©¾Ú5'èˆû-íVõfÚZúØ6§›=¶K¬¥&öL¨t¹ ý­fÀÐh²‚̘bR œpQƒ3zpËçmÃoK›5J rnNØî%_}·&Êà 2Wg™|€ e‚‡´Êâçè­¦¥aÆL­“P—³Ô[÷¡<÷û¶àMüåñ÷÷ý®*3úèw–«%ý sމ¡lv®m"SC¿7°SÄþ@jkœÇpÝ A´,[¿_HO¨=S¡<3eŒÈЕM ‚_ž‘=ãdI£Í ,ÆEGûP¿ˆ“t:Šþ8K”û®¡ýM¹ß[ϲjnûž.Ñu-§€7ÄÎàáúœT&cÂÇÖybUÐ[eUñ çKEó%R1,¶ìNm8æ<„Çiè<˜@ò& —(¡÷tŒ˜"îm›4·É¡ìü¾õ#_H ù9‡€Q¹`ÒxGÓ€ª¹ÂáŽÑjÎÇ…ŸðHqàqQ7í¡ÜW¿!|üÆÀÑ\ÆàÜÀðɲÁÕ¤lašZH;¡ŒCܤØU²iÚ€z/å0ÇCî¸EßVPLîî\Ø8ZØììžNÑ'\¹È6Ì®Xa›<.7{ìK0!¿—ÈQï¦#µ%ˆÃ$N GW‚Ǧ*àׂiÍ~ y~Ü 'àq“л=‚ï%µóÛÜCáÜ›¡ø‹TÅûƒ„÷'+rNÓ?¼½ðµµÞ÷ˆ/hgäRƒXfcÙ¡¥“€A ½¦6ÌÞÀ†’>ñQá¾]á¦rW”æ–(ãÇŽ(DGO@6©‹aðHC'ó•A»êò  ¨¬šóèðsà¹5iñõDôÀkw› nCо~eá-†áüÚ³»X‡ÅàŽ?>—Lc*§9¥2n“+‚è†íƒjö^šóª€÷Ih¬%'åu[Þ¹ VþæPFk=éà÷Š;ê;ÛŽ6| …¡O¤`OJŸž5”}wÆ¥½õ"(¶ÔÇy‚šô‰ëÖð–ÄÅȪ‡®Ûü£ëÖFÛ(‹vý=uWZ‹ûçæ<´ömé®N«ø=yÆÒ×Ðrø„Õ´[ªBZúF®B×ÇFz½\^¿Z†Ã4ùyˆˆîÒðl8C¯q”ÒVP?[×ÕÁŸQм*‡ÀÛQLâD˜r}£¹ y‹“‡[»ÙÄÅiáã¶NPd[˜k WæÀ[Ÿåñûªß… ç?œ¸,(PÈ|ðñf¡’¸·•ǃÞDïÍsXú+¡Ì2V¤ÞˆÁ (‚ÌÏ®|)õqtqØû®·è¢Ù¶…ç3Í¢Èáu„û‚÷…òïŠßýì¢SÒñ{x_ü Œ—Y endstream endobj 2196 0 obj << /Length 1670 /Filter /FlateDecode >> stream xÚ­W]“Û4}ß_á7œ }[êCË.ÐN6Óa¦íƒ›x7.›xqœ-Lÿ§Œ%ÂjCJcÿŸ°%'JñiØçVIkù¬`–ç¯CxÎ)Qü0á‰Íðß}þ}oV vÅÈ0àØGÀ8; ²…G¥ñË8f0ú§SW>â[/+˜Ò„R€v¨$ ß®þ\Üí¶ÍÃL𼞢ÔùýªíÛMš8Ôµèð|¹[ôÍ0ØÞ„víæîö¦UÓmC·9Ìö»ƒÃE{w×lájë±Q “Xƒ  ªÞbiv²ŸŠ0iãÝ}B@Ôë6Yq H+µ"¥UGÒ“€{_ŒpËCÌm„6aÝnàÉ|2›—hŒÌç3«óúUØ!‰±rºÖguµÞ> N™;•’(j·÷¬.Ã’ÃÑtâøjSw·M½÷­Æ3 Ùòª¨P”úP ‘‡fî·Ì+8‰Ý„¸jPÔ½×JÝ5ëzã´Ñ'!àtjÎ. ùÐËË¿ó±S!ã´ÉR¯ï›®v¢3"~ùäøx¹ü#@VŒèR=Õƒ]12ô²˜?vç!X^Z+ÌIhC‰Ä´‘ÇÄѬN'Ó¸8Ûe<¿×}ÕïÒ{,¡e9üjÆËŸ¾|~9ã&:Uó«Ë´šòæ‘LŸîúUÛ 8›¢‰‘>C3àzCY™º¨ËÊyh–aï—Ÿ]mf¼Ìûºëf,oªT4#‡Ù«“< Õê’gÊ–ÄZ}>}G»bd˜Øècw>èrY»¨» Y8è§”EZc©\­NL—Ê5äÀØ@³9¾9&ëŸBú‹vSõ«j8ÿ™¸ê’D3âzçÈfUj¬´”„ñódvÅÈ0uªŽÜù ï߯<¼o×UsG£³‘©G!R¬£ G¤[ëÙÈ@:¾áøý©_×Ýbàüy1A¸ÂdÌy‘ú¤†%\=’Å‚Y1²KÑ=u6‚H€îQ…k{¸ãHq­N`+ÊF›àh’Y‰ îˉà­oê®Þ,곉I Fü»Uu¿5‰‹%b+ŠÊ’ÉG.’`WŒ “ÉÔ](ñéWèÓóƈAZùL]%Ñê$tò*‘¥!ZŠHæn®ÐeÝã¸ý J?…ÑÛj½®‚ü÷]”G?‡¡µ“Úîó0~á‹/=ñ{¼%þ"-ñ¸\ƒ‡…P¸é\(hkwSaž†ÇºÚîºÚ• îF ƒ¾dEÛ¯êЩ‡ò6q¨wýB{¨õÈ7Ó¾ ù\»y»½u,ƒÑmFeðñJ↠ȵxäø•ŒŠäBXêÊâišE\bWíM±®¶Ñ¼và_¡_†f>3ÜU£þLJ¦_…^ l¥ÜTwN6ߢ´¨S…é 6ÉPaàÐN@ß¿¡\ÇY:s§›†IœPÍñj³¨á½">Où. Å_ŒÌþÜKjïO$èlbGé¿óxŸTëa/$ª0!6•±¤xÓDr»U.Xo»¾^žÛLênPæCe›[Ì•8_Uï¶OïEÛ¡pž6˽E߆Ö_°ƒ„ ¼¾¾í*ÎÝíÖͦÝ6½ûôWóZÄP{Ä—Älð¯/ U¾èZ¯j$‡m=œ=ŒûÝ@۾áDÒÚ ¢¶Ñ‹‰Æ)»#ž\ Õc`Ù„ŒÓnS»pW+'(%Ù½ŠHãžbD›¨·yŠÐñú‘tqµ±‰ëe³í»æÝnX¬ÌoÚ.àÝ£õÃ!Óx޲¢T™(ñl5:¸QK3nº¦ ÊŠY¸X¾íj(­ ÇbÑ]M‡¡:8®«…ËC«qFOSÊ 1ÍOÛOaÑLÞùdõMR¼€ÍÔN€q‡ly¦áˆsÞ§‚#û‰Ãš³¤bw`Ò‹F^ ¾úgô<ål©½Eò18ÆÊÂ=ŠgPI¸{Bà5‹b0 ãVKèù8"Üb§‡ endstream endobj 2205 0 obj << /Length 2008 /Filter /FlateDecode >> stream xÚ­X[Û¶~ß_áG¨XÞ$‘Ap’ìö$i›¤]#8@š­­µ…Ê’$']´?¾3R+ÉÚÓ(vñ2œg>ÎøÅæêëo•Z Î,·bµ¹_Å”2«L§,SÙj³[}Œ2–Èu¬µŽ^þp»þ´ysu³¹úß•Xqø+¡,F¸3V¥«íñêã'¾ÚÁæ›gÊšÕGz\)–¥FÕêöêÇ«—â…–Ìêd*_r!Ħ†eÆþ3b3É’DNÅÞc´v +£Aƒ _JË8φ3 ŸÙüãö/Yèâá‚ svN!å…X1#“±Xî·ÆB=ÕŸ 1sB?¡ÈU,RÍ´½%g‰´÷C‘wç¶8õZɨ_ÇÊØ¨¹§o(p`¢··×´²EªCÞî‹-œò¶/·UA³#nŸ«¾Aœ§9tn\ìI'Œoê¢Ý—ÅÀ;ŸH€¤yÞ?ó„ë<„.P*rcXn®Ý¾æ‘€&…r*á4A bñpÖ’æ^Ò<ñšÿ ÆB°m"yÑ@…TŠ`¹Üëòý«—Nö’Hlâ¬ÛSÙÝÝëëgó¬FÜSàà4,Í’'Á$ÐÅ#B¶SÅçìœ Îæ¢ÁÓ°>½(êBðâó‘*À“ÌcÆmŸ÷çå(ÑŠñlHšk!Dôüû××ki¢çkLƒ›ëåxT€×zêâççþдA\ÀØ!)3qQ1ôú™‹lI)¥~jŽyYÓÅÿÔœ÷5êö°$ÃLÎ.ülá…g2¯µéÓWìéâáÒÏØ9¡­S–µƒžÿÞmͶ8¾PHqà $Æ -\| ºPgj¼‚qÆåTrñî¤Ì µ¿ ïåâ¾h‹z[!ªTBÍ|OPKæ­M¶x·x¡õ‚C¾k›šÆGä0j|\Iávve×·åfK_6µâ­F)Eçå¾÷5N(†5ÅÏ´.ZŒN×fáÁ&ão/ÃKè)}hiÛTUÙÍ2lÔÜ‘­çÐqsóγ*|“@Ôà¬øxcú0hë’ìé¶.KXmŸÊ, ˜·uD£¶NˆY¿?ë|^‚I3më¦xi|‡8tu`…ëêæ0„6@~ªß>AQš>>©ëïà³Á|/>|E3çpsB?BGºâ¼kÚüTî0J2%°ÞæõÞùÆ÷PôÑèwx"~ÿºušºÔ†3´,™vPc¢ÍÁsßå}ìÌ ß_°5ÕP™;3¾805ç. ãtág­ïMqÃå0Že]ñ FñÑÁú]‰ÉÐy¶Üï‹–&˜?ÃidèÚ,\)°Ks’]—†hI;äÛBTÏäBOðÓ<Þ >©`-K·mŽÇ²Ãv,Ú3ųŒB©/9·´2à‹Ç(é®Pa‹njÑa­=ûƒÄ@âVžïp/L¸_ 6å{¿ØÃev”„mç%›€2çãS&AE’†ç=+SЕ>÷çz‹èA3ô0~þ2Uˆ>ö}¤ |zâh8h\Ãf`4BD‹·ƒ‹AÜ*v‡W+Þ*‹8ãÃŽë©UÒBãž9‚Vùèø§`S°IVãʶ©1›Úc7cò¹lªü‘.ù®¹Ëã·eQ¹ñ»ÊYí6:x@|  úejxÌ‚Þ*<ÿ–rÿVù7µð‘ÑÜuCÛAIî‹0TEUƒ«_(h)À'½JØóq‰?ÉIüµÉ*ýæŸ?Ñ;ð[ÀÎ?&>,ô endstream endobj 2214 0 obj << /Length 1728 /Filter /FlateDecode >> stream xÚ­X[Ô6~ß_‘ÇŒDŒo‰¤ªv[@Tå²¢•(aâÝM™I¦I†ñç{Ž3›d2P$´+űÏåó¹g]žÝÿU©Hp–ó\D—W‘UL)1£LtYFocÃRµJ´Öñãß_¯Þ]>;»¸<û÷LDþD$T΄ž'WY´Þž½}Ç£ŸEœ©ÜF·žt)f2 «MôúìåÙ£cõBK–ëtª_r!Ôf–›ÿµF²4•Sµ¯m®…Ìä*¹ŒßýRæŒssàý,à?È’..@˜‹ó„TGjµaV¦cµ<•ªo) óJß¡Ê(™fÚnÉYª½h›U¢d\î×}ÕÔ°¶*^·M×%ó[î鸹¢³í ¨÷a[ÅWm³Eñ$›ÞÞ0-RïÕ¼4°9³Þ‹žâ¦(ÛAéÖªùtWõ’ŠÜ0ž‰·[R! “¹hÖÍfSuþNÞ"*,†DhàÐDôÈÛî v,Lk–òü Â(3ñ¢Ú$N_Ô®½®ÜAv:æH´Ùó”«”sÆï”Šé¶¾ëø7÷fQo3Õûiç]ìÚjëj´k¿R&“{beðªËó'½î%•T¦!ÓvUëB„<=0y, Ì“eKM~2ÓºdDèƒ~ |.ÎCr}®Úr¦m$q!Ûª#Å‹µ5Ã02ÃÕû¢ß/ûX+Æ üf%„ˆ>z¾’6~¸S]^œ/G“‚b¦§^}¸ïošvP$cVcÑPÌš!¢„YÂDËÓŸˆ¢Ù\µÅ–œÑ–Û¢®—”äàwHÈ!}ÊÏÁ)` €‹ÓÕ4Ð%#ÂÏÅy¥·h9‚Ë!ýe×UlûGˆ”¤\è1¢×TGx¦·WPÝ’S<Õ¢÷$Ôb•ëàŽ@úÊ]¹ÖÕkwÒƒ*›±ü?>{rñ‚|'W÷xΗä'éûCäü§Çù¬,ƒzEL0i¿’Ï..åóLuNδÓûx?®°(áU)\q|YÊt6ƳÔR‰èÌ,ÌÁÏ\F©À~f¿ÇREûWõq¡ö¥0\™ƒÀÓµè’áb훊£dt»Ä}º ô8y<éX–Ê1„%óÑ‘þŨs(Q:¨µ?ôñ¾¨6?:ŸÖë;«>b’;j‡/ŸSÌ== í_®`zpoîÑÛmÕßÐqÝ,õw‘MJZèì¦H–Nm&(lë̘5?Ÿlðºwdë}ß1?uáD6¶P; Î5øÐ¤x¹Åºƒ9ô…­+º}ë°aK÷´‰3>û·ˆ±òl:‘û~çÉ%3©š2%ÃT†Zw8*˜Ã¨ˆ›“Q‘¶ª;ú¾©zê»Ì¿ƒ»–Bc0Oˆ-(&#@»ãÏèCZæž*7vþÕ ÁŸÃWdŠ˜}5L x…[’×°›ÈkÃd–uÇ…8BKQJ…aã×Þn-Ê¢/:×ctJ ¶iaf‚Q {Z]Võ5Qõ =mJO0/P|İpmDÕEݼ/Úº Â|g,::lÈ.]Io! P2…X)·3“‹”å°éïB“ ä±ûDè «žŠðìéf<†y‘§t ¢Ç¦AÆÛ¤¿ÛÞ4›’¶‘nã’-îWê0]Çu ïmu}íZ†_­&¾ ÜyÜûKB(µAwç6pÛy²…«AMäÐCR€?%ð°Ø0ìÌôæ¿{àYÐc‹{ÿ¡¢303 ¬V˜‘AH[ÔÝØ7ÈÒ Y¼ßÒÎuëŠÞµƒÞ¢¦UFœíý"x V!0@êº?q/e3&rº†ŒæÁpa¸§gÆ©_K@ úÑ÷ßç'uIœ»Îí˦-vUYõÁH¸¿q]G¤÷$à—,5Ù^ñÌ ¸75î€iOÜÅ`G)O~IyL±áMoÁ8°šÇïø”ÑùëzÓt® §ÿ¸žŽËª[C(W58££3G  gGdë†^‹ªÆ`þJáÅÅþ·ê.Ä3 ;rÊDe7`ºÂð§¯ldäzf¬:©A[ágß×m³¯KŸ.b(8JÇÐ9áŽ_»ˆŠi¨¹SÙ'nr$…e"!:´@-ÄŽ~m€MßBhyè#m709Œ!,Xr¨Ž™PÝ(1áqµ¯G¼ChÍL“ž6¡·Â fƒ¾]aøOr…´6ä.úÁ£YŠXHyBÇß&$þÔbr–¥áÓðK˜Ëµ%Q_†föÉÚœT endstream endobj 2222 0 obj << /Length 1447 /Filter /FlateDecode >> stream xÚ­W[ÓF~ϯð£#‘aîTÚÂî¶€ *¢JÀƒIfw ‰lg)åÏ÷ÌÅŽíÌr‘ªDòxæÌùÎý?\ÎîþÆXF02Øly™i†Ó™â)¦²å:{+$ø|Á9ÏÏž½œ¿]>™],gg$Ãð#aMüÃd¶ÚÎ^¿ÅÙŸd1£³Ožt›1¤$‡Õ&{9{>{x O8E†‹1>Å„$`¥FJ›ÿVQ$þÔF`ƒÙ|A Í_wtø”„±êï>2üÝñ‡žlÑÑ-„ ¦ì¼„òX®¦b‹ãÑ4R} tẪ¾uÙ‚Hޏ¹)ÿ“pv^¾·í|Á4Ë‹Ë휑üÐ^›°µ¶«]]ÛMÑ–»ª {e娰\ D±a=Ûý>M¼‚¨aÍj·Ù”Í‘q~ÉÛxÏ ïA`P 1 ªñÈÿ4|¨'P1Ž×Óð‘Bôá#2b>#mz^T"bdÀlR*Du§Ð}Ѓâ\u–s#sû*Øž°9¸€ÃŨÂC[l›{'ÑCžÀ±éM f‘*OtIGŒ/*[_•¶ç-†7’^â7X`&0FøÍX^`›¸wžÿ8ÁlƸÿìr[—[[ÍaÕ&E€Ô””t"¸ ä¡,Oyìd¼ EÌè}YÛ>ÏïMSËæ‘R"¡Ì­ÝÑ-„>*Æ‚OÙyºš2…Öq¸6à˜ÈêŽê8YÃ¥ HªNõ¶his†°R_Í !ùƒ§ÏçTçæ.4/ÎÓÑÄ êùØ« ìê04ˆDš»âÄV]D•’),;™–NŠÝv<ÿ×ÖÖ)ö²ò2Þ¹>1±Rà0 ƒÉíÞt‹aÊ»v´!Ñäûueë ­œ O¡Š@¥CAR®V›CSÞ8WÛàÊçgçÁƒEžÊg/4ÿ¶Úm}Ãùì6cÙ·:b»:p²ÀYȼØ@„öØh®j[´¶—`©ÂŠâQÊ …VŒÖáÒ@U-· ÿ3[4‡ÚºþCUÞºÖÀp¾»tO’¯ã°K?ì T·9¼m"ÁtÞ½² Ïý>0[¹1F¸V6n]ª§.Ú¤?¢ÈC¿V,ãPkAæÄ,à Cèè”`ÓY†CU<Î2„LFáÉ4Ññêì4˜e&¡00.§`ÆÆ½TTá1ˆ˜›²º ËöÚzW_=ñL ´÷ÌBßç>Žíªõ1Âi2Î<¿qvñâ°ÃAXu<ÛCó‘d×®I+\ªªØ|×5áFx²ü]ÑØuØÚU}x–.ú{ &CøÄ0œF!|3ii‚nöÆ…VŒÁ€ÒÛý&Šíc¬p‚ã]µ–ƒýv7”„ºÈóª]Õëp¶9lËj×”­/ÆQƒËp ãîþ³ƒ&ùÆi¯ÈÈjE«\|ˆ²}*ÛëÔJ&*R d ÚÉ"þ+í8S¥sœd Ÿxý„’b`†é¿Ä$ŠÈqŽŒó1…o>`ð íÑ Çu±zþ’d„!‡üHöó-Ú Òáhì‡g|ìp¿‡dà`àuªÀ¬ÇT_iß§$*ýS’b#Æú«\$²·ËOßV…¤˜€íÿ¦‡z‚Bb0%48&"P?üÙ—8pìó¥+xÿ†óÈA endstream endobj 2231 0 obj << /Length 1214 /Filter /FlateDecode >> stream xÚ­WmoÛ6þî_¡Ò±¤Hñ%À†å­K‹h#åƒb3µ[ò$9íÐ?¿£Ž2$›ÙZ`HIÇ»{Ž÷žóùìÕkÎ#F‰¡†EóÇHsÂ¹Ž”DqÍ—Ñ]¬Hž'©"¾x“ÜÏßή泿f,¢ðÃ"Æ ašõ2†Ëh±™ÝÝÓh ‡o#J¸ÑÑ—žuq¢¤€·ut3û8;?†g"#FäSüŒ2€•š(mþX•Á³)ì6¹J’2“Åwƒ~–B©ÚË>1üºã§=[:ð¥#Æ€ ‡êzX–Á Et–a©?ƒz®ÿ=PÖƒÞ;È(eR¡Á\0<»zNxÛÊýí’”k·«b o,¶m/HAT‚@‰s[lÚSwòê5Ócp!HN»z>ÐÁ¤‚GÏ953õ¬ÅW•m>—v¯;KäÀh^÷4§<§”а”ó?€ÌÜ·ˆ³·A\¯fŠûÕ]œÐ” R2cƒ ®rzhgË»ë‹;éÅ2÷™¸-ð.¸›Ço.OS ÷H)I®Ì‹™8ð¥#Æ>)¦†ªëMjáZS"@l¤1×p°÷Èœ©†«wE· ÇXpB•|›0Æâ³wo.“LÇg ¸j~uÎ&Å.¦Q=Ûu«º€ c‡H¢…+*N´2Š©Mø:Øtm«eS>aà¯ë$Ël· a(Èp%ÁÕ‘Ÿ #P¬‘dÐ){9Äž/1†B| AÑZ²ÚúëÂ6Y8‡Y”1jCÈtdÍôîœ2H8=µ¦ †.cŠåCá9?ÙGÛØja_Œ‡î?ù¾ð}X¹›ÿÝ’w¶ëȹ4æTèTª“a B¥^þÇ3¥h~/Ÿ…ÃdUÐÍ \úß ùÒc°°§êpÄ0šÁà‘:”rÊd¤3TÚžë:XÚ9„O@CŸí*liKÛåú;¢÷#Ýn±ì>^\b/+ÍÎ6Å¢+ëªÅã¢Ã§¢”îgAÚ'P4]¹X÷Ý¿”P¾ýáâ§®ØýÂèfã5YÚ®xX[ÒÏBFhæ=å= ¤æ7Ù¸¡ó#Sq×k™{«ÚgG³Mk‘6_5»¶Ã÷¢ZâËû²ª÷ÊãUáÌD!<|Àúµ~nlÑîë%KOÝ6uWW)>´¨×ë²õ¾½oB9¼ ,Ž÷Ùoi&#"3=—æpI°· Kä&;XÒ¦û  †²R£Ü‡¿×Ôsü¬\XX¥cÒ]ÆÈ}ën°lðý6—cykAdížKN˜ð)ù ûË}?ù6Å?yª? endstream endobj 2239 0 obj << /Length 1380 /Filter /FlateDecode >> stream xÚ­WßsÔ6~¿¿ÂoõÍ`E¿lI™á!$i …–&7 ðàÜ)w.>û°} |W^éðÝ™B;dbiµÚïÛÕjµy4›œü,DÄ(1Ô°hviA„Б’QBE³Eô:V$ͦ‰”2>v3};{2¹œMÞOXDá‡ELÂ4ë÷‘Eóõäõ[-`ñID‰0:ºïUב *“0*£›É“GÇðLrbdºÏ)c#°™&J›ÿVq’¦|öF›LK£¦ 3<~|Î ¡Tíö>1üºåw;µ$è%Å ‡æz ŒgG°RÍÓ!,õKCP¯õ=Ðc=è[%,“DjàÍ)I%õg6o·]Ûj*xÜMAu\ß¹¯‰ÅŸÖ‹òj¹-ó'‹¢í`ÈââvÛuÕZ›7sgo…vîj¿ñý6oÞáp^¯70âqÝ­lÛö,)ð”àŽDzEå¤àe¶ŸT$ EÍÆëdáFy]–Eë©jçßc†{ ywBèñ7#ij1.M™!p…Ó4KÓ]š¦D™ô M÷ÙÙbÀ–#f;æŽ!\³àÍCp‚™X¡/³©ÉbûÂ2°2‚ïGñ‘Í×í)šezhVJ’R³‹$œi¦âÑx&^uÏðee›eaw¶ÓáŽÍÛ~CS*RJ }´…ˆqbææ2þ]8Âõf7õ¸1wlS„Ì¥U ã»°¹b×C;.ç—׿!ðÓÇç=‹1po`Ïé›MÑØ>D|uqzxŸ]Ѥ²”‘L¥ß,#A/(ö)²ï¡¹žB(d‡Ðš ÛGJIÐ:}8ࢥ|µ¸éòn;~ÚRªTõ‹)c,>{zu1å:>›B¨f—ãy% RËýŸm»UÝ 8€a@2¢¥«ˆ‚èÀë ejŒ©3‚Çÿ¸¨þZçU5J‡CÝP›Ç}×öÎ6¶šÛoðýBÏW.:ŸZrm?§¶ë£Ù)¼ŽšÊá‘<„K¼!ûøýê8[…&p/£”ƒú²Õë%űl=0‡%ŒQqÜoƒ³=zMF$7CVco¢×:â´0cˆ¢¤0T:½çRi’Iá3~[a}[Ø./ÊÈûï„:!éi<á–áÉ[ïw!!®åà)v!\îº~íBz9t!ƒDE…ßMSwu•àEsׯÔå”Å_Ƀe¯å¨¸³MRß%ë\0È‘y‘ü:CÁ¼Ü¶pJ;ͼ\Ö à­{?€óÁq fÐ¥ñõCè…álRiüـП Œò¦¹„²mH®aS k]Ø÷ašB"5E~[úm篼I WCVaoJ°~ùò¹ëE¾¼bÉ+þ%t!Q¸Áÿw ºC!ùû•íIÁ;öÊwNØw;Ç/ÒHš|S,Š®èû˜c’:L€~ìB|ïþÔ((m¾ÀHùžiU,W¶íPð|z7áϗŬý„.µ9rí?‘™¯jŸQ›…–ïs(kzyn6 endstream endobj 2248 0 obj << /Length 1726 /Filter /FlateDecode >> stream xÚ­WmoÛ6þž_¡2P1|'U`Ú¦¯è°µ ºm?¨6“hµeW’Óvýó;ò(G²é¶†0u<Þ=¼wž]žœ>"c””´dÙåUfÂfFjb„É.Ù›Üef…”2øëÅìÝåó“G—'OXFáeL”„YΔBgóÕÉ›w4[ÀæóŒQÚìS`]e‚-aµÌ.N^žœªg’“Rª©~NK¨Õ–[þ?j 'Jñ©Ú [Á ¬äù›Á Ÿó’Pjvg@?)3ø÷ÛvlÅÀWŒöÅŒ›µÒËÕX-[c¥‘ë{J÷„¥ï¼Ê¬`Zi7§DI†{g§U3<ïëâlVkòª¹Þ.«ÖØ|¾n[·¬úzÝt¸ý¾êÜ—ë;7_7‹ªý‚gn½<×öî3n·~»ëÛíÜ‹AZÝ ïf°Q@'áAÍ×Ëe݉Ý3W­ºû~çô1³ãÛKIõþ |ð³6ù9§v*"ëDð£Æµ×µÛÉVã A[”ý–**¥„Þƒ‹‘ã™ÿ–ù÷:©7ŠA½*êý PƒÍê•Co$!@LkÎ>uƒjåÅÓ‡AwJe<6¹êŦn]ð¨ÈŸßßIŸµÌ£#Ú¨£©0ð#Æ•Sàûâ„!÷U[J$IL¤ÃÀu 8Yü´€l01â/úªß¦},¡Æ ~=cŒå^<;Ÿq›?˜©.§£I@µ‘S?Øö7ëvPD+}V b\o)3)P¸@½Ø~˜)W†Ù3+swÓ.ë”­‰¦z8zshjA¸±™* )K}ÜË‘¯1¦¼¼'.(ýäm.·¿Ì]Û¹§`á]5R‘ª‚‘ëÉôÞ\+”™"©“žƒ>G,+£+ó•»r­kæî¨ótŸÿà¼çOýŽ9ËèA&tJIOŽqý˜’óßžæ³°êU¦8`·ßÈçÈWŒSžÞ‡­ýîÔ_’ _”|›÷U)^qênE¤ãIz;0€™Zª,‰¡<uD1ùo,UµÖ·‰ÚÁ&¯}ÈWŒ“µo*SÑm ÷ù¢ #+åá(b‰âc)ó Óþd ”Æ-E ðmƒ¥áúª^þ@˜Û¬°*ù`> kÆ2 ÎP¸‚ƒÏšùrÛÕ·¡ø¸7ùˇç~¥¬G‚¹ µì5RçëUhÇ_<ñrlú›y¾í‘ÏÇÙºEbW¯j˜\†&¬Ã䱂–º pxus¹>Œl=ŒÀV—ˆ~ÓcÒþŒ«4~>A¬Ô|ÜB;] ØÛÃFÇ_ÉØÈ¢¼Ë°·:_Ô`Qák7L_WËÔT³Ã¦ Áb*ë,æŒSƉQvð×)Ù„ˆ,F¬gG<<܈A$QøšÀ˜·ë®+`ÄÏ_®îü¯ÉW®ê¶­÷€§V]üÅÍ+ˆD–ÏaRËïN®¯ð·ì´†ùˆ—¹kjÏ}GaN]Æý·”²oYNÂäk™žB~õ{J£ —{殚ũTj à“ÓoéPìjÒ•20²Äc9!^™ÊU_áÊÏÈ`îÙLæŸêþ7‚ÕüDÈõÀ²ÄmÛ(Nú‡Ej¸Ê…‰¿ó·0à/všûõÀˆ¿à pIï®ÛʃID(Ÿ^CXMXÌ¢åvU7ë®îgÜäþ©`dð´ÿ„ábó>–"xº‘ÒÐi@21Á3QB«‘å`SJ£MõèŒ&Êî&–L’;´¬’tŒ–Ì e,¦ª£ØÏç¿G¢ñ€¬e`|¿Z·«à ]{â¿i]²Ëwï˜ó¸án½Ô‰l‡Õo('{ñ! #†ˆµ›WK×…" þ ãUÕVmý7V>™¿÷ä/¸†HaX†aÝVM‡u¹í"mµ^ ÁÃÛRƒ¯ÂéÈ6*¤2Ò°/»1›Cé»ëÉ—áê=†˜'ßõ…P]Ä’òSÃ+Cíõ÷å<rŒ—cîäÝJüÅ*ÍYŒðÃO0x›ÓÝ_Ê ~]€±ê•çƒg1æPï<·ê¢à6ên *xÁ"3C›m„Ö]ûj7î<Û:·P»á 2Äv²È”Ä/bp¿òvTМ1Ρû0>pò”,(SJ ÉW<ŠÄÀ ±ã¡-ƒ'Ó¡}ŠRÞ½–¡îÍí”àl¹KVq åNÜOÉ÷ùøò»2;2!r¹{î*¡ol]Ë/þ!H‚ï ·„›•D«8¾âh¢¯Ãp÷Œœ‚î endstream endobj 2148 0 obj << /Type /ObjStm /N 100 /First 977 /Length 2165 /Filter /FlateDecode >> stream xÚÍZÛrÛF}çWÌ£]© gzî)oV›Íz³[Ù*•ä}Jù"a“‘D¨@*‘òõ{zÐâ €Žè‹Ô3=ÝçôeÒV %H[-´ñ, àX0ª$<.8gñ[ #„QWƒÉ7'£á+Jh¥h óñÜHh <X†g4\ÏR <Æ»¨ùZ:kà¢ÐÑf) ’íYE5ñù2fÅX„+æñÃd…<¾°Ûo1Î%^ËãÖ`X ‹õÀÂIçïXâ:a”sØA a¶ó#Œ¡¸]ÐØÄZÂD†µñز ¸äa³ÞÁC‚ʤ#F%ž\G%¬&Ö ›´„-@"a­âõa<ë<φKAc6ØàÙ¢…x6ÀÆl-øÁ)ÇÅ$+o•p&[Ú8 VHð×< Là»ÿ]LØ=lÃðê —²–¤0@Þ_Špr¶µl%R was aÐi‰„ì]çEPì]ç ¸<Þ@b} ·˜p-3Ao]²-ù‹ÀzaœØjdI‹œ™xì2j^¸ˆ¢¤ R`·“‘°I^DËö‚ùEt>K¸5PžŠz€%)ͳ%ÖcÄ—"Ïè$žלHƳ¾äE²1KA$ö¤(R€Ñ¼'‘’ÁžÞ”ï™3@ñ¦ à«ðkÀÌØCÞ"¨• YtÉc=ÄÀöü}„û½ç›bä`ŒVI³@©Öʲݘ³š­ $Ó†ÌäÍ›ÉôÝã])¦[­ªÍdú]UÏËZüÄ4Wï'Ó‹r¶?á.iسä¤bø„$ÙrÞ8™bÀ¸Ëû«MžçÇå곉7oÄôRLÿ{ñ¯íW·ÅòfS}sWW‹û³YY¯älñZ|ûíÿž©‡N^2í½Ò’±AÑK Àž&©µï¥GñëÙ¢¼“÷³YÌäýu_U°´†»]Ò0ά“12[¢„ÜG•›Çuq}öá·{9û­¯XUƒ3Î4ˆ² ³ŒÌY“dÏsÌb³¹ûf:-ê‡å/²ª?N‹«õ@‰îöOúHÀŠÐàBLß.7?ˆI&§ßÿÁë%(¼ñ¶Zm²or@j;Ü6Cû H Îjæ[ó øBf{&œž×Õ첄!Äôüû·bú®|؈÷û–“éß±n¹Ú¬9=dýØ„ë꾞•ëmjÉ×þSΗÅwÕÃÖÐ.9à‹cÌš`Íó¢Æ$OÍøì5ÖÏiÕÊi­t+PÞÖ³{ú]Z%ܘY*J -8#ƒg?ïûÏê]%àˆWWË+p¢7¬ávä²Ó}Ì0ÀôÙMqW-ër(ׂí¸Þl×A0màvóF¢4C0 Z«;Ãì¶?âˆL)O]Jy5šR.´Š­F3É€2àê'&‘tHö©zBÅŽD¨i™d\ÈÈÀ¤órSÖòb9[õ|]­Îæ÷õ¢¸–·Z@GÀ«‡Ð1H§Çu†ô¨0;€öú ÷G5cP.uvw¡pÂÇ‘`OŸ{èö :`÷¶Á¸w­à_*mÄÞÁÚJnoÚ¬DÎõu±º–ëeù±¬7C3ǃ¸¥Ñ”º.ÄãAˆÇÞ7¹Ø¡?'‚‡Øuð£A¨Ár0­ÐÂ<¸Ñè¦$¹yÚ¡Û"Ä¢;ïÔQ(¯óéF’|ºþ\r3оP{úùˆZ®Öw(оæÞcUn¦ë²¨g‹¿ÞýåÃr5ÿêº|ü P ”úfm¢Th¡0q\¸9f$z|d7ßGÃùƒœWË zDt´§aúïþq®èyõZí—,}øÈ Q?á£J2ù4‚ 3*OÝ*„C|ÜñÅRÎ`>Fßåc´£ùÛÞ$¶½IlÍKñ‘ÔIóÑ;ÏÀÉÇ䥥tBje¦ç‹ÇõEùËåf†:Îñà ñÒIC©[ ƃ‡Ñ6/Ógx™ŽÀ˶Á‰í)Bj™šZ¦¦–©éLU(Оԅ&Is¸.$}ÊDMR2±w›¦ò‰GvâBµ {…Ž?Ä>Åë|>ø°#žÝu>hEþçÚE6_/~þyQÝÜõ–µ ”kËJD”°„ã3(­éUÎ_–õ¬XÉËr5¶–?zŒÂ@Òt8ÓÁ•ÜÈZžÏï?U Ï>ü|Ò¼vÛ#Œ’êŒòó‚±±-µ±­±F~4ÔºèÅŠ:éâ#FÌ„~NÒÆ4ÄíÙiÿ˜VWV²®î?®‡’ø‹÷&š{ýZ…t:5Ð6¾tz~júÇñåÿFüIñepÔж54|äß„†Ø møÐmøÐúÅ¢†5¼•6¿ªÐD`‘\Ý‘£F²š<õ®„WÂ3µø- 2i~}CK©OÔøµºùP·²¬ç·Åjuv·^Žøí<íÂâ® úaÃ4a#©¡aC[éó[ 1×kä¤3àЯË”& U ÓÔ »äÿ»¡cÄóBÇ bäÍþtCõ{lDÝÇFüRFÚ¢Û¢Ó‹E {ÚOõjüòÓˆAh_Ðû‰›ê¶’÷·e=¶Q@(¦O‰ÜF¬Ó(€(:‡ü:Ñ6’ÉÆ!ŽÄM£?ÃÍ4š›Ô<ÜâW¥¡%)Åã¦;qnì¨w"Øð‰› i3 ¡æ¢\Íëåµ\Tåfq‚ô$øÜÇ=:DÏý'ðEÓÁï“΄Ѥ3ÍÃ7~°Zÿb¤ó'Ýx'Î;œð©¿—(^£²™hB~Ýv[ºòÛé(Å+A±ýG:[¶Åƒ|Œ/.sÕvŸ˜“õ£¹jÛ#1K­Ð²×¶ìµ/öèœÂi“6 iÝAïí ä endstream endobj 2258 0 obj << /Length 2320 /Filter /FlateDecode >> stream xÚ­koÛFò»…¾„ë}‘Kô’(i“æÒ‡Œ @𴏶‰H¤¤ìºí¿™]‰¤h§=b„ËÙ἟zyqvþF©…à,ç¹X\\-2Å”ÊF§Ì(³¸(Ÿ"Ã’lk­£Wÿ^/?_¼;{}qöŸ3±àðO,„ʙȄû&Wéb³;ûô™/J¸|·àLåÙâޡTÃi»XŸýtöò”½Ð’å:ó—\ˆ¶iÆL–ÿØÉ’DŽÙ®³Üd2ãËXä2ú$ü¥Ìçæð ðgùþðúË-xñqF„)9'‚Ù [mX&“![L=ÖטNˆ9¦Ÿ‘å"©f:¹%g‰t÷}wÓ´ý³eœr½/vK%£Ëe ÿ—…ƒª¨¨Ëeœ¤rwëøØ PrrQƒ*šD»j ¢2ݶMßÔ1=¤£M³ÝV]ÕÔ¡=ÁsÎ=ãÁpéè[»ÑGð~Äæø½´Å®{Ž7çoD6´ªÖ,áÄ©‡ÃÛ?ö¨#¯kÛ^Wö@;~‘"pó´å × gl¯”ŠÜ€Â½kw¯~D Ä ÷oíÇY¹<’+ñrýæ=ÐVÁm³"B.¥R±d8V(Ëûï^9Þs,ýg#S¬o«Öz—½]=ŸæV æKÁR“<š‚/ ºl >%çDE`Ê:ãLÃgŠ3i°NÏÝTAŸië¾è÷ó1 ãÆ\ !¢ïß®–2‹^,ÁT¯WóѦ Ê鱉_ì{HéÀ04HÊ2ÕD±,Èõ+fN(:¡¾·wUM~_÷¶î gèƒËu–„onNm %1‹$7,ÏÓÇÝëñââœ{'äÓ/h4–u$ç¿ T4mQ6Ì–û©DJ &d:”hÆëëDž±öJR¯ÉSÍ:NB‹M±‡8OæÏöʶ¶ÞØG}§ éý¾{÷ÝëÉu<9–lÂǺÁS=Ç4ö”†rþ5¦«Þž¦·Ê”¯E"A—ì‰ôöxñqÎÿrÔa9ÐvÏQiž õ*Žzoš0å™k½„t"ÌØRyÎ — `Ç¡ÿŽ¥Šö—ên¦&0„™ÁÇK!áÅÄÙR8&G¶ð¦e&O˜ç‚ePX4犡Ç:a=[ µÉXª•õ}MM ´}QmÿBÄÅ¢ lïep*ÄBCË3øíà»0>tU}½µqYÕ›¾º[JÁè¢eâRâÃzE¡e 5ÄÝÖXOúŽ`M½}Xfæ‡Ø`%¼iö0RlKº­êÍv_Zz)›ýå.-ΦYä‘éj:(j!NÔ€J‘¥9©1• “tàPƒŽ3|ðÊ)çuÃwK—5R t.÷8BI}øá‚ ,Ð\hòlH,¤U½Ak5-[,ϲ©v:Wšxí~+v·[‹“‘k7šG?>ô7U‘ÒKcé°^ÑfÂe º@ÕìÜ`H =aŽ•yä?è÷mmK:7¨‹ÖßçÒj”+/È2–(#—M‚'OIãdEe—„5$,ÆEG÷$W„I<D§­bÛ5t¿)¶[ëQÖÍUÿÓ«Õsr×jè!‹dÔªT–2áƒë‚ÄÕn0Ç/Ý`îX4WtsØ”Jܶh—Ùm =HÛªè7„Üm_m¶ÎM@ìÞÅKë™îlÑí[ÒIG$zÛí=®_6ÜÐóñMÖ«C5FÁdæÍOËf .#Á†sóý±æjèÊbLÆÏù–I–NC;Œ98LCɨ0}3W•† „ÑcÚÇþ{0[ 5ïJ úŠüpD 3Øt#Ða#Zãª÷WÞ¶›«xWtþÞúÅ„Þpuòa"'fM°ó ’™$5iX¬àK£Å1‡P/÷ˆND¸­:zÖM»+¶ÕïÖSr Oê€ðT¹FŒQ¹FÀ¸üœœ ‰Lèí4Ù#‹`¼¶µNRoŒ+(ZîзÕõµm'^êìÖÅÐ cº©`xƒö #¿¬›½í ˜èžM²úÂyƒ.¹9HÐ@ΕM93>â B’ÐÕ`•Úo]ýÖ9¨€}޳¨…ÕnèØ_[ºt©  ?þü§$/xøýÉ¢`é0ùX ¯äŠy"Wª*)¢åD× r~I9¨àgP,é—`wÀ(¡šuÔì» ØçB›u•͸Ê\ø ;¶AŒ…g,¢”ž/õÆðk ÕßX›#pÑô&ÁÊ àK7 ÑùÖÝNàjCP®ö®~º²ˆ‰Jî2Á]¸%4umd}D¸ gû}ELôáž¾C@8¾€jµ£%¤´0‚…†;`¸pOÓ­† '¶ 5Å‚O*ôC7ŠIÛ¶MÛùÙ>78†~H„Ͻ?ü‘øµâ°èÿIŸP~ endstream endobj 2264 0 obj << /Length 1360 /Filter /FlateDecode >> stream xÚ­WKsÓH¾ûWè(W¡É¼)–] ,‚ÄÅ…å ¬I,°%#É@Š?¿=/ÅV”eTYu÷÷õs:OV‹³¿ËF’­®2Íc:S\"ÅT¶ª²¹BÂ, ÎyþôÍåòãêÕâÙjñuA2 ÿHF˜AD¯c˜ÌֻŇ8«àã« #ftöÝ‹î2†”äð´Í.oOîÂN‘áâŸbBf`¥FJ›ß«(‚žÂ^¬%%zYCó‰AÂ§Ô ŒÕ¨øÈdðß}þ2ŠI®8œ¡05ç)jîÀr…4ǰ8~:R¿ó dVÉ×À›b$8 ßÞØ²?tvg›%£ù°,˜fy{å~y>ll8¨›õöÐ×ßœŒ ß>Û% ò<_wmß½]uÛ$  ôä =H Á\òàû}šäQC“̺Ýnëìö«¢Ž9ÖÒ¡ªœçÑöÝã‚ .@Šqĸž˜b,0”“;ñd´E%"FÌ~΃¨NÎü>“«àÊjidn߇ì0¥‡$qPŒ.<±å®?6‰>AçH`3† Zª|6˜E=1ü¬±ÝumGÛâXC€ ÿƒfc„iÆòðÇĽóüypàn4sŠû¨ºêêTp³ J O7£<´ãòúÅS=Õ¤ˆ=¿¯;Û‡š|yq>m>7ž„GJ‰„2÷ö|’+Ž}UœŸšóÒÔ™BkŒ8¨Yœéû$uxvÊK¨J©’ëC9æsÌÂJ¥¿_Bòǯ_^,©Î/!T«góÕÄ`¬NÊôñaØ´]‚D"ÍÝøbH«TQDÍq ‰Ó»²ß96‡>”Ùå¶6¡ ^”Mo›‡]¿Áê¯ýÆIÝô¨< êË£YÒŠb‘Dœ{ïì•íl³¶÷òfpܨü?âžÏ0ìÏÏÎÖUÿݽÙOhm»­—T図ήۮ:#L©ñ¯G‡8Y+;”õöwÓ~™&¼ãBþöéEx9„_µr¥ýîßÖíÎÏ‘w‡Ã~x‘„]³¶]°d¿À²y¹…¶wñ¹×-Û¥aS6á‰à“ñãÙèØ:lÜ@-Â_í€þÊßT0PÆ›Šš<}¶ž ×T8»½«œN¾ïÂ]X%Kát¿ï'œ¯CAÒ¼Œæ£o¶+Ú«bW&,¢äeüÍ gê>§”F’³èÔR‹npÆÇÕ™÷žÂLÂpî6×ál€;9}cÓ¥ÓM]Ž0u‚íOà58¨Ê¡ Â}¹Ûoã)”)ÌN§¬ó¶©úH „šð^G¯¯;Ècåý"°øðäX˜L\ÂÎw¶wl{ØÕMÛ׃ïÝãÈàœñðÌ~s-c»Þ†Ã}½n?•]Ó;8MiÇ:¸s—>ˆ€ÞÅlDk)Åe5®BqâT8:,À]›ì”£gzâ×H3<«›TÈ6<€ÍëøHtAÆáåyj£²©ÂC$'Ÿúv{¢ô€¾9øKŒÅÝÌGË}]¹ ªD–omßO;‰ùXéü•â·²³ Û»V_†àݤƒEœÏ|¹Ï¬"”Ŀ۳“†øåýv¢JçxÎÌ/#Gc³WÜ\l\ ăY+°dÞ®q-¢ðÇ2 ‡a·!¥âxýsÖF„ðìHìÑ=þ "žûûâ(ÃÜgxfVK×ý> stream xÚ­WYÓH~ϯð£#›>ÝmÄ Ãr¤…Éò<˜¤gÆÛÁv8ÄŸßê®nOœxi…ч««¾º+ç«Å½¿„H%-X²ºJŒ B˜DËœh¡“Õ&y›j’Óe&¥L½¼\¾_=_<^->/XBáK˜(3Ì¿)Dž¬ëÅÛ÷4ÙÀÇç %¢0ÉWOZ'‚è\Ân›\.^-ÎOÅ3ÉI!ÕT>§ŒÍˆÍ Ѧø5b5'Jñ©ØË‚#•Yf¬àéÛˆ Êç¼ ”êñ È'Eîó§‘,‹tÙá „cvôD¬ÔÄpu(–†O‡BÕÏ„1óBß;‘IÆrI¤Üœ%~{iË~ßÙÚ6KÁÓa™ )ÒöÊ­<íÊ¡j§WÃÅÈ>ÚHîž~qÿÙoxüÈÓu×ö=Þöv ü¼¯¼Üí]»ÝV=|ÄåàPƒ~Å¡~’q"$Äh)QƒÝi$)š¼D Ôæ8’r¥ÆHRDê(’òC‰#/k‘£Ì>`›Ø>“œC%XZÂe€÷¨cDªÝ"ÓÕ²ÈSûÆ;„N ÏmY÷÷‘13¥%QÔ…aÐ<©QíSH:aü¸±ÝueGÞj¢‚´ÀûUT(J =¼B¤x€kæÎ2}‚ØOä6(W¹ßœk]PT1¼f!@ªæœE®"yÑË‹§¼ì9‘áÙDÕË]ÕÙ-þìâþqª¹b$À<¹b$×êÎ tÙ¡)ðcvB¬1Ç¢ %žpœÉòHu"x¶¦ç’\‡D¾Êa?ïc)Õ:øÍ’1–>|ñìbÉMúp ¦Z=¾˜&Eô(ž¶‹‚À‡ɉ‘®X b"®w”é9P¸ VF[·èúj($3üsÈ]ÈÎðææÄÆZƒ?L¢ MŠ"¿Û½.; œsï;/tdøþ\Û®!kgà \3(ýêÈ\IT'0¦JstÃÅF5ë/f ¨ð*8)_Û+ÛÙfmït™€Vú?\ö÷Óý{OÜ$¡ÒvçèEM9 —É®åÇ2eEä³ pM¸Süûóyc‡²Úþj-ž5ëí¾¯¾8],Â}õèQ–CPÄG'T>Z·µ¯¨ßÝe(“»ái$vʶr²Ÿ÷ÀYåi¹…†ÛJzÝÙrðý 7e,C'…6á!` LRB%R’K‘¬j—@­LZßvq®}‡Kß²aÅ– ›ØÎç¾UGv€«ØáYxÆo¯ÖІÒnÉÒ¶w»oC‹§2®¸\í›8 ß!¨G ±®Éæ;èû^CD(rÀ0”[Ü"wוM˜»>ÐÕmŒ½¯Ïðêé*lüÐáÞ!S&i®Ã;J8nÄG“#Ì“¸`!€aëÚNj7> Lº!ACcŽ4”†ð¥×pSÎ@’¥7¥ã0ún>,3w° ݶ<ú˜“4 Ïw];´M†Kx@u6k¯²ºÄQŒ¥#Øïq´c~DôS¨¾Và îÂàÇâO¯Ö‘VB@„² •©Ï„)¿åý,|j6Q¹¬3/Ò6^úÈóT¸VÁÈ×ÌÑ Û}]5m_ ¾ M•ù½Ýç¥ÓçvèFÙÙ‘­cWeŸL·ƒ\ƒ_-’Á Ï5jäm13žq ]o,(¯gkó?_è8rmR:Ç *Y‘ÌfÛ9ts1ŽKêl– 'ìv¤ £"‡!–šâÜÂ͉0@¤úc–%ŒÉä€ì÷;ôSllÌŠb-{‚Y"½‹çÛyad|õqNþD×w”³9> ¦nóŸlrBGt~®ŸãSò§Žm@|<`hÇBA_‹cñ4S ó#Nÿr颻 endstream endobj 2278 0 obj << /Length 1890 /Filter /FlateDecode >> stream xÚµXےܶ}߯à#§*ãF‚tÅN$k[eW%Ù‰,ëR;Œ8äˆ˲ýñ9@CrvV¾Ä)©4$Ðè>Ý8}¡žîn>ù›R‘à,繈vo¢L1¥²Èè”e¢]½Œ KÅf«µŽ¿øænój÷üævwóîFDD$TÎD&Ü™\¥ÑþxóòJl>8Sy½w¢ÇH1“j<5ÑÝÍ?ož>4/´d¹NÖö%âŠÙ4c&Ëÿ³F²$‘k³w¹œk¸.r¿ ‚})sƹ9Ÿ}–Gøk·ßžÅ¶An»¼áRƒ ”x`V–Édi–û­¥Q/õKF/”9£¯¬Éh+RÍr™Bg‰´·ÛäiÜe=Ö][4›­ÊtÜTXhï틊ÿSôðï[Ú=VÅ0õÕ±j7JÆ~³­ÀI—p8Ó*‡eæš V-㌌«c1ü©|y*ý Oü¡Ó5¶€X9‘/É’&É™, 3yrA–ʳ*Ád.Éâà­¢›3™A‘ø >ˆ<æ×ܦD$AòÓkªÓÙY"÷1lKа¡ww7Õ {@þ®ƒù´*Žƒ×/²¥~­YÂó`àʧ†Âx‰dëEWŠoÛª¿¯«³îdy" 8â;žppÆÿÔJÅî‹Â½k·¯> Ћ• ÷¿“‹py3„+ñ¸~8wú:ðï*D¤*E€h«œ3e±|ýåÎö5“þØ*w§º¯º‘¯ž}z™¾¶À)„/MKMòhÕrÛ… ãâø¥:⇯[—¦3äŽ-4^©Aêá«}"U(Ƈ»±§ëЊqä¨ð‹ è?ùú«g™ÅO6–¼·Ï®³M¡0ëuˆŸLã¡ëƒ!\À*9Y¦mT, ¸¾ãÂ\EÔ7Ý¡8«’®þÛâí&I⢯‹™ ÇÏ« 9aU9=Êi˜4ÊÃ!;ÿªÞT}Õî«GPhV¿ÃçŒ~Yß(—n[À¬Ìq‡û´úƒú‡¤y>çm´s¢ lýZŸ¦–_VcQ7€gŒË@[,§BD€‡2 ]ßM”gZª¸n÷Íëjý½u¯ ;US c½·¯¨Ø3è)ößÑ¶Ž·Ô¶¬GõÅ~¬I$\¡µÇWÚà쥸.Á@tg¡\øm=ÎèÌUäË©ï G7…ýÔtã@wÒÃK¨€£ôÞý½—kµ…2020,C{RI¤SŒ=è”ÎÆ FûYôbZìÞXwx<*Z˜Ú²ê›®¥Ûwç`=Ú#h¥néwØãˆâê$¡â´}·ÙâÀïÁÝÄÞ×èÜN  …CÑ—g MuVzé ­3–Á#ç‰C©tþ2û¢ÙÚžàûêƒ =×ý¢8¹7]Oém÷¼ b?ví–~hiß5M=@‹?^Œôz½Ù Ù_PÖ‹µ^µã3fŠ<_^fZ­.Æ_únƒÆ]½p=.‹§æ'eâ² Z´@ªýHÉį]ÖÒ‹¾Uï¶ÓYÞS§ÃÓHþò£¥]X:ù;+§ýHáîó›{«ì`™W>v?`¸4žÍEV6.N&\½2Y|\%²„.»¾8Õå™RVðgTŽŸéñÏt@Òc_´%wouÙµc¸<¯Í5!ﮀ(/ ú*…¹§aƒ–"ÐÕ2*Qù…ú„‘•e¨Â+ÕŸ];¤2LÀ¸ç;3ÉÃS‹Ó±ëí_ ¥N$f;Úöu7 $´ïްT”öpïi{,ÊŠd^÷G«ì½/ÿÂÖy2x>ïw>Ù\·íøœ1¡çD·ÖÚ2ø—eþÍTèHE3X¥š;09ÀTÎ>Öf±€Øº2⃋•ýt^i?Æc©Óè+Óñ8'›ðxé•ýL1k­tãÚáL-æ‹£=ûÍ÷ÐJ'–ì¿ söÛ0«Ä°$WkÝÛVîR½ùN!½>Z0ð‘'Ñ=ÿÖЙ ùè师–à«UÌ•Ù(9ýÂFé諹œÛµo’:¡ÍéeQ9÷'¾¸#¾ ëìwS £ÿ’~i9·ˆyn‘ž4ËÒBÕªëS³ЮWAå¾/SrÖY7ü¢ö_{ÐIö6Ï}³á¡UøQÆÊÙñ¢èiq@‹p‹Ðú±Ë17ñ ÿÃÍ/\Tÿ^i= endstream endobj 2288 0 obj << /Length 1232 /Filter /FlateDecode >> stream xÚ­W[oÛ6~÷¯Ð£L ï¤ ['k³v[#æAµÙDk"§²Ó´èŸßáÍ–d:CŠ!,‰Ïùxî<šMNËF®H6û˜i†Ó™â)¦²Ù"»Ì’´(9çùñ›óâjv69™M>OH†ád„UˆhâöTLfó»Éåΰx–aÄ*=:è]Æ’žn³óÉÛÉÑ®zÂ)ª¸꧘„Z©‘ÒÕÿ£VQ$ª=¯(DÊ¢$Í/#ƒ¨ŸÒ a¬6{@?ª2ø·ËŸ6°2âÊ0Aa,ÎQ Œî¨å i*újqXê+ ¨ÿR:æ”^Y•YI$G\oŠ‘àį•Ì—ÝcÁh^w‹¢dšç¦5É;°S~ýÍ~bù{LÄÒ‚ý{Ózè›#ÿ^· ÿ°hþ1kÿh¾Œ€0»m½ ¸°”½€ÍFåf–¹p”1æp6î¹™únõ®œÝ?6çH`ë(‡»âRÁC Tè@ðIkºëÆld‹þ@Ðd¿Çsþ è2–»gøHÜ;wëLà-À¿X„ÿÍŸm‡WP3äõŽÆ3]s̘¤Á.)‰mN;U–Ëë—ÇNwJeØæUŠ#÷Mg‚¯^M_ŒƒÕ¦3óI)‘PÕÞ‰¸²tá:$>ç(Ä,«ÖqØÖ“˜È“ˆÚQœ¬ŠR$U<úº^?¤c€3„•о(!ùáëWÓ‚êü°°Q{2MGƒ2ć^=|Xß,»¨Ð7ˆDšÛtgH«qD¥8ùÇÈéyŸO—E ¤–·M{R ÔwÝìYaD„Ì$²É~ÿ\Ù¦ü;甮껺µ–[ßÔhÑãûëÜt-šÛ¥b´’PMEŸXªJÔ­¡he«$ÒjB•¬4"4º€<LJÁ¿»Ó=¬W+[A—mÊ’aè~¨C¡¡‰°'Üàaå—ôÂ@˜ÓXß~p†7Ý}Úð]¶Oû@iÕ#•t)==¯O©If% I¦†þxg>šÎ´s³7‹ÌÏÏ¢³—'yB†_Ñ ×)eØùq2ýóÕnae ! qè{=pe˜rùHœ> a"9°§$Äv;ˆÙöÎ8p¶ˆË>Ÿ”³=h‡ÌÐTU…¦¯ rýKÕÝßÍ—D‚ÇFû›Ç•=`² ÅùŒ4÷¥ùzQÝ›nÇÕí°¨‘ } )óxÐŽþd/Ⲃ^ÂõÝCÆ)³®›Û s½ß¬÷÷IÓs$ 7ر8ØA¼=žú//Þ¦«çëfÙ®nía~°Ûnôƒ,Ì ;Y^ ÿöÇ2E“2(§ÛAΟæx¨Ø70è_v|CJWý’‰†6×C•s(pÈ×xªmD²aîžÚ>n'a8œŸ„»±“á·8NÙ˜*7Ãû©W Èv% 7%á7ŠmÀÙCi¡{'^‡l“’„ÀìHèø:ÄᆯC ŽŒ®C#»FY”¸«•ïÃ)»Aóã›øZ„Ò9NF”-à˜š˜­ìP‚Iù÷™µ9 Ä1®Ü¯<¾  x¥`îJa›Vk½q'ä/ƒ`;;8…ßC!ú¾Gÿ xöSq endstream endobj 2297 0 obj << /Length 1183 /Filter /FlateDecode >> stream xÚ­WÙnÛF}×Wð‘DËÉìK€ñ¢Ôv“À±·¨ëF¢kÕÚBRqƒü|ïp†—Q ˜ïÜsæ®GǓы׌E#ƒ ‰&÷‘fˆ1).‘b*šÌ¢ÛX!É’”sŸ¼½Nî&£ñdôqD" ?$"Ì ¢I}Æ0M—£Û;ÍàåE„3:zªM—CJrxZD×£÷£ã!<á.ºø€•)m~ ¬¢HÚ…='X+Æi’CãÛ†AƒO)Øš=UÀG&‚_ûúqg–6viË0@¡ï®¦@Àr$amXì_µA½Õ×@{ÎjÐ; ¥DRDð¦ NÜ»·yVn‹|™¯Fã*I™fñúÞþåñýºx²gÅ̽ÈVþ¡õæ§©?[d w쟼*½}e¡¤é4A""…4åŽÆfXL$%ÄqĸbW¢t·dqç rBŒt˜¥çÖ  AF)pU[üân¡Üµ&‰‘q~ã‚ɈD sˆ*‡³þÇy¶,_:·D·ÝrŽ6ß T TîÒ}©7í8¯òâïy¾ó-Ú'š÷ý˜ Œþh3»àcbÿçñ¯î \曆û/P…ܿż© è6IICÁ•ÚrysvRc‡ ý1)ÜáëͼÈ}ùœŸ¾ìw‹' Â#¥DB™ƒMÚØ¥-ú0ºÄûî\“ú1чÖq8ÖòhÔÆjËR$Usõ*«¶ás†ð¾.oBH|ôæü4¡:>J T“ñi¸šÌÁ^™m«‡uÑAÚ‘Hs;o´hSQD…8¹Ç†ÓÑâC’›¼¨\ò[YrÛª,׫’¦€°;þ0ˆ¶1À<’ö&‡óìÌÒ–](Í]g5b¶'Œ[\_Mób…¦öƒ)aÔš·YJ ±êÀŽ…i—ÕÜJ”ÏyN®²rYߤt½~½XW.g٪̃‰ ô–3A)‡½¡#C³ÿY‹Î,ÝÛ2ÑsV#åV¯6–ùçe[4{DCA“ì‡ïúúq' &L‡Â.ìÐŽæ»B¼vqþ®¡âm°©‚»³Ns]å÷y‘¯¦ùÁvd t¾ƒÏÅÙøÒ1"KWv[íÕ,c&C°©÷õü1³?}ýûiJHŠ1ýºïgÝéd|õ.½¾iX-Ÿ¡Uç­ÐÁUúaéWÝÕvåVü,¯²ùâŠÿ9Ýl\ߟœºÂŸ×ó½Ê‹lZÍ׫ҽÎü¦RÎh’€ÈËoí^õù<_MÛrþÉ:ËÝ! ‰ŸlÏ;• þ¼þe^f^IéF/[6N/·ìy¼tjÜûùPD÷ì5ßIêÞLc°M¹±’Z胒šSQ_&4â}AÍ!{AMHïûUOÏî<Á³FÄ—Auê]9A­Üm&V²ìBMÀ ¦vêj Ú—:Û/¾…vÿÒÜç?[No endstream endobj 2303 0 obj << /Length 1814 /Filter /FlateDecode >> stream xÚµXÛnÛ8}ÏWèQ*F¼H¢ŠÝšK“f›nÚÙº}Pl:Q«‹+ÉI“þü9¤-9jÓY´ˆxÎ™á ‡‡Þ›îì¾æÜ£!IÔzÓ…'9á\z‰ˆIÂo:÷>ú ‰Å$Bøû§ç“OÓ“ÃéÎ×ê…ðz”§„JjÖ¤<öfåÎÇO¡7‡É/$<•Þ­-=N’X@«ðÎwÞïì=„§‚‘TDC|R6K’Èôy`F¢ˆ aßP²4”“€¦Ìÿè,pøŒlº1ðIêÁ=ýe-8¹ '8b¶:cå⬈HLy6´S}P+õè–2úICza ØÍB Šs§*kW*U5áÌï&¡_/àËS?¯fŪÍo&œú ‡²jŽ2ê››cf†æùgաز©¡ÁüùjÖåu…óMmlfV®Èˆ†5¡NI“-óyÞiµwÆî,à @ƒs4T57“XøYÑÂ2)P¡äþL¹ù ^eÖÚy•j®î°› ôt’ƾº c@{*+Û—zf÷5•ýM‚D¡N #·â>FrŽÀŠj;rµÖõWD hV÷¿aò( IøBï÷±ÃT÷…¤.Fq­Ä,î·¥‰‰jrîQàèÄŒ:t…0ÐÚ–·Çû{ Ò.¸zÞeÝjÜQÁI˜$åbB)õ_½}s0aÒ5ѱ9<ßR'[ q^­ºëºq@`E¿ÄD }‚8‘‰ÛVšŒÙ„MgÓQs¯®êæÝßkê*ÓØU@Ÿ‚pQdó¼ÌD8Ê´ï7M^Ô–ø7Ï vœU•jêdU]=®þI®ä³®¶Žü™—ϽQ=í§«æŠÀóZ¯NÇ!þjT{ýåW@èÓ*‡|ºCŒ3(nê(ö3(™:þÏëÙÔ]a¹83÷óJïôŸìKÏŠÿÑÝól¨ïáÖ±f \N|ˆóA-T£ª™úáÉæ@ž¾)PÓ‚×€oAHÅ3»½øá]pvžšç¡”ÏÒ¬ù'¿y¹M#(Üüq êãØ‹“ z‚†HlAn©CöÂBAÂ8€§”Hêéá0NêôpgÒ”$!óxNò§ìÌùê²Ì»NÍ1纳¾»¶ôÚ‡g'8¹ÿxÚ$\UHæªËòâRñIéòÆq,8ÖÆ÷ûh#²$î'S]Ÿàª7½Y]"•AË –ݱÖ÷4ÖJ`=_W9€B™3ßm¨ÃU£2 Iv«®±DpŸFfÄ;•6€©<ã0¦,Áüéu®ïùî›á§ÜK–b ƒ†X·»VØp”p='6¤Ónˆ·"kÎ í”ãœÐ4œm8§¶fhÕ‚Iý™æœ]-'àÚYJ ñ¬³ønbÙ0NÐY4;úzÙÖŪ3= 6´]U çò GÈ€á²P\!XÌ+J B!ã•ëA”NÅûn4•6ö²U´µÈÆþ¥ÙØ'ø{«­QÊ ›×’I…1DR9Ãqk°gÂnunút¥Šèõ;¤+F]ab“)›4éöF†”И£]›@ڤߒ’Ûôâ:“ÛGl†Í‰~ÊJm«3¥ÍùGo Z£PÏ÷¤YhW›R锘[Á*†ii§Çó‚ʘ°(Ew,GŽu‰PŽ©Ä˜ ª©»º ðƒC&ë°‹¼‰‰>ðcÅÅBsàþB§L*¥1b/>¤y˜šW‡–/¶ÒÞÖî! Ežn=¤‡9¹ÖåüÕ5«}$9MˆdÉp“~×.ÍË 6`ªÏV´Ä_¸Óéˆ-ƒŸœW‡@Ø7M½*Tˆ*"¤~‘XZë§czS"µ—©?ñQDÉV"ð­?BÏbó\þID]2%”ð(BŸÇ̃³Í×O²»1•¼÷חʨØ0¸N­Äo¸Ga˜³thšøYD(ˆÔé¯xù(Œ$)ÛZ¤SDÀµ­¹)— »ÀKleø)óoÝÊgao½h]ãj˜g]†"mV. Õêš墮 ¸•·×ùL¯»Æî Ž*ôàʯrx,¡®Ü&¨· :¸ m8#MoЗҖ2UÕþ„â~á€KìGZµÌÌMXõdáÒ]©¡Õà˜1Lö ƒ±µa êªþ¸Bý«mX‰°²ûÂU¹P ïz*(‰„-5V3ìJŽ&¨+íÕÇŠU™Wu»AÐ10wzìs¾kvó»èô£Ýå%¶àÅ¥+2„j¾½T Á1ÕÚÛ ÖêÚ®‹ç \kv}Ùê„"¸ç/ óÈ…Á¬±Å{+:P9bÁÐ¥YÝ4€èã§~!æTŽC¿ÅŠhš@…Ž”9> stream xÚ½YYsÜÆ~ç¯Ø¼a«Œæ(r´,—å²EF•DѸ;áìAXÉ´þ|ºç0 –¤ª””0=}M÷×ÝÃgç'¾ã|A R%]œ_. 'œ›…Šh®çëÅ»L%—¹"{þúlùþü‡“Óó“ßN袀è‚ò’PCÝž’«Åj{òî}±XÃâ‹‚ðÒ,>9Òí‚­c@[ª‚|R.à_\þOO–Gº|D8£Â”SryK¬DQ>[„¥±Ð@uŸÐ 3'ô=Š\äT1Â4èÍ "õk¯mÕ»µ»%gYQ®Ù_úßîÊâÏ»µm67õîƒ_°‘:ÙS­ºúcÝ-9Ínü—z—paÙ‹Æn6ù?—¥Ìª°vÝì—90YÙ¶ |"?§tj °NxmWAdcóýe¾­p74±Í‡|Nyü¦ýÏ9гoç¸=³Õ¶}Œ+¾£fìF!ˆ,ðàÝ5ŒÒðã(S‡ç4a|ŠêÔ¶ç-Ç;$‚´Àûß…,¸, R|úržùøLñ]d/½î·ä6^® r¿vÞ´MtVHÅhT1À‰F]~üþ¹“='2lKL=ëªî0o¨à¤Ð:Jy»¤”fO|õbÉLöt‰GsúbÞ¥rW¤ržº«}ãdWÄÌNŒŽn¥zN'ÿu:;ìê·ýYµk«w9úaI3ˆ-šàˆÈ…[ÿÛÊ6;²Z2]uÓf<¨Òì½´Ý­ìQ 8Z²åa&Àáå¿<‘SšPòÎÆ/wÏóÓ7?å?ŸŸþœ#bç…‘÷ ø"í«æõÇÇSD¤bT•T1~ ˆ#]>"t˜89a瘂PAé-á%%¢oÄsŽ#Õ-ѳÅ 7H~sØydZÛ®ª7_; "È‚YŒm@kH9ø×úÿTwWsÈ’Hà¸ý ¡/ûDÇ£‡šJJ]xẫb\Ê2ªXð9s4ÔkȈåŸf…/hd ÿ›µ™Ãá©HIæ˜ið\Ïk;Ǥ$R—c ž-„ 6VéϾÕ ÜSÊW:¯BD úË,:>Vø£|+Q! tX\BÍ’Äà[„K$—Ùv¨îxöøQù ‹®.ãøºã{/~O¬îðå&lj{ú[!'gBn´CÁqÀ÷Ã~W¯üÄ—Øü¢i”,ZÒ‡£[˜·¬…‚cÉ2‡>j; ô 46vð 0_@ã=võý ü®PìUÕ|°kÿáºjºzµ±­uIáZ{Xï›êº^£Õ¬žËÒ 'ì œ©TÑ_çÎJ"§£h¢slñûá×ù𼯬OfÃgð"j%J‘jǼÕ.x¢k À}DKmÓÚcÆLN‚J<ãYl÷1®ÛÙl¥éæë8‘DìhˆÖ¡Nýu¢Ec²Ù« K ÅRŠ;•†fGHšîx|¯6LäHÖ‘ÒUÁ”“¼´KF³·s 1-Ù#Ý·«ûT`@‚#á_·>ïÚî°†©1þñ½éÚíñ?áÿªfÝ~ãWcLŽÒŒC„aÇûÁeR|"˜Ž¤ƒd²@=ìD›&:äQ‘êt^× 9ŒÈçQ ªfGô𕬽i;»E!BgçÓxö÷Sÿ;.|!"6®Ã× ¦³Í¶K½äÊÿDÌêØ]ÙǤ©UÜ(BKo”wŸ@ x?¹ˆ”—‘š¤T0I$‚'Ä 8®öÛëCg£œðµ 0‰ÏîÀà\K8×êCøè2¾^‚âšçàÌGñ0TTÍÍŒæšf”·Ò7Ègq&á,Ë`Jq@ãß  ݺ°txï¸É^{ÃÆêz‹ôg)ˆ¢ ¾ƒÕa@”ÙÚ{úú‘á;8pœ¨Ñ0 ­˜¡Þ0ûûu“jš>jšX\u,®ªw¶éÝS©H¥³vUmª&$)œÂÕ\B*‡Â·ÄUºs|f™Ó%Bëþ̆ÚÈ©NÎ _‡ €·àwjà{˜”¬ƒ–áè¼_Öú#*ñˆ\ºÆØ†¥¦‚L÷äNw=HÍpvc^}2©TPŽ¡»ãJÒ\¡!W ümZ”*×µëöMHêO~y¤@hk]VR/È!Å ‹¼këÈ«Š=Íåa¡MÐaN ‹ QÓÔ€à«ÎopW!󨚘 ­¢R`/ƳF2„ŽºñOÇÚܾÆî:©CÎÇ3žU‚”l¸Jº³í1iÛ“^Ú˜¿#ªO,wQú£Ê0Ï<96ªð¾a•~>–†ii QÌÜÝÒ`“§GÀ…qp1×TÐ"éÿ·‹ù—Ï©ñVj u F¯Ý*ôVu”Ò.Mf—û&´Nð5mÄ¥û¡þÊÌ—¥sF´†“;ã¹-|n«åvìhg« _ %±p8ª$LW»uè3Ý»K#ø5ô3-¨†ùöÑ]ðÄDAL©þ«{tòwâ©NPzR_t?ûf[mê?œËA´ƒ£æKÅÌßtõõ¦^ }Šòýñú‹²t;c]Žl9; Ýjü'@¥)eàÜúšmtãz º96êáy……¦7–ñ¤ô³Ð;ømlØú|Wúñ=R‡ÞN¤ÝEøMë*Ð^º6Á?[߆÷°åî( Þëq õ“Ö‘@3†YÞ‡…-xÔ<™²GÑTÀª:¹Lš‡©"¥‰“$†ŒûÃã&úÉßP’À  @èo4ur½toØp ø ~Á!Ænù_Ôˆûn ŸÜcøÀ2\>  ËäžÿJø2ÇÛ¼örkŸý)PUøsþ/Öÿ w÷HÀ endstream endobj 2317 0 obj << /Length 1720 /Filter /FlateDecode >> stream xÚ­XmoÔ8þÞ_‘^éÖç÷8è^(´wt…î|HwÝ6MzI¶-âÏߨãìnÒ,=¤ˆµñÌ3cÏÌcž-Ž~þCÊ„3š±Œ'‹ËÄJ*¥MReh*Ód±J>”3›+¥Èó×ç³O‹—G§‹£ŽxÂàO¸Ì(·<ìɤI–룟X²‚/Fef“» ºN$M‚Q™œ½=zöÐ%µiVžNaÂaéÜ5˼BçÏ!`ºµ†Ê·=­ëq‰ðÕL™Äp¨¥Œ,LQl¾'JÄÜPY°Ø¶®zºtME—>n©(S5*J=0tVH -A ±FIC…1ÊüGÂ|\ºû¼Z¹#ýjÒ—MóÕû“™‰”Ô~x;y´P 3ã/d •Ó&Úf”ÉÃ!ŠÍwrñ)òvƒhŸ®ó¢¤ß9 … ebÉÄ9ôBcC§%´-0ŠÉDFÉ;w ­ ZºƒÉ"¡Cÿx²äÍ_Åí“ mƒ"h[TE8˜Qn¾'8•#uØšó´‡éÆ3N-TŠ=A菱&ËðüxJÖ)#›‹uÑun…÷»«±r¿v|í¯÷WhBÓ½s·a¤ÉtáþþÉÁÙ¼ÛÄÆ·rÜÀÿp¦¥&'cø`Ùpž(“Q•z±†}gÅÕ5`Ôœ´PÚ‹¶+–-΋ð+HåÜÊûê×¼¯þ·¾h]sëu¸àpRù»^A7]G¡²öŸï‚dÛášoB÷ö??¿(*ˆ™e90Mq±ñô)È”/ÐSˆað%JG‘CpmÄNIEä¿åÍêíóœŒaû5¨ Žú­$2X~ó÷âìÅ1Žï<+fÞ5Ô~ÓåÝë¢ú•khà}7Ï”AD>† ÄÞš aŸN×ä@¤n}­qxŸN*ÿoyÍ^âsBq¨á@ȃ¦=éòzlàR¦x ~9¤/A*G/É£Ù’G?‰¡³;ò؃´=yôÃ@Aá–<úżEÝyTÕÓÅÎ0XË:Ó“É!Uë#™(–z¸cG-çÓ”)9Üww],}(üaJ =À»óûbw®ÅÕ>C.ÃIÕ†M“uÝÇ{³F‰2ÆQÇØ›~³&í2‡ÊÑ`í0dËaá^4CZprU:Éæ"%­¡<ÞŸÕîþ]ÊŽî5$”fœ,øºÊ»G›ó##×á¤`)ÇyWwÁAå3éªÉc:YRnÖEU·E ®ga« ).„}sŽ3ÏÑáZ9Ì8;r)õåÚDŸ6MQ]yv«ý#•áè® £2pˆ;œÔ.Ì“¼rõ¦2;Œ0ZMB5¶ät›Yf½0±vÀ®ÖE”#‹y‡‚å,¼œ8\í¿t^ÏWYã¤DÔZL’L>r\C=‡W~püóÔ¥f-ùî !ø$u¥–m™ë¤H™-µúe*Q`”™m¦@ƒZ2@§¾—’œûf®‡;ž€ƒ²ì_\Å¢BëÅ:¯Û¼\öÓØÓdŸª0ŠõXöUE’Æ-¡GvÍ®òÊGÊgõ€"©ž *Ÿ:ügE¼7±Çò—ê=p ߣßÐ27ñ-û­'pÿ–~ endstream endobj 2325 0 obj << /Length 1457 /Filter /FlateDecode >> stream xÚ­W[oÛ6~÷¯Ð£ Ì,金îÒ´ÙÖ¢}ØbÚ¤†h3_H)ÓWï/æWË·³óåìßK(ü±„‰Œ0Ë™Lè¤ØÎ>\Ñd/ß&”ˆÌ&÷At›b´„Õ&¹˜ý1;;…g’“Lª1>§ŒOÀjKŒÍ¾¬áD)>†}ÃX&ÀóËxú¡gÐãs²Ù*à“,ÿúv/¶èåÁ Çê&Ì ¬TD31„¥ñÕ4J=z¤,€^yÈdÁ4'ÜoN‰’ ß½wy»kÜÖUsÁÓn¾V¤õµÿ•i·v¸QVn“·]Yàã]Swuµð?`Ë´®p»hê¶Åe늮Ä}™æ'T³!UðèH ±\"™»Ó ÜƒLŒDH{Z©}P¨`îqPè!â^ü²L#f¹ÌèUiP$~4x§åGÌŽÐ%Q4ë•Þá´Á£/¢èHñyåš›Òíu«_´¨û#UT(J ý˜ ‘âl3ÿ,ÓßÜå$nT3Æý T!4\SöA2INsÖSðu%@{.ï~°§ ã1„Txø¢Ë»ÝôE¥ Ô˜årÎK_¾{ózÎmúrîtþzÚ¤ê_íå®[×M,†D+}Þ bMoVf¦8á²çtáš"¯ðò`° Ý ÂËî½µ>.¾vIh™&y¨ E±Å@.Äü¹±2 ùÖU¿®©HáívB€C®1>b0U‘¢Ô ñe¹PÐä˜A9é#¦ ¨ŽFêOwíWîA? hßî§¼ù«üôüÄöP?(Rô>hü(·NYÿHöÚ0{ž1b!H:'ìÞK@Oö}¥|­Ñ–»X©W®ËËÍÿ°(û“¾t ˆ~÷iÎM )1Öµ‡rPAëX• R49t‰Oþ½Ã”W+”+ǪNÄ}=!¡ 3ÃD´ÅYCQK$4ÿåH-Cãj¤’klV‹CŸò-þnïj¾/B±ë¾èÖM½»YÇOäÞ_±îVj¥§+¼öPaÚÖuXE¤¿óÖEÝHBƒ–ëºY„«q­ì¯†î”Ô1hƒájÛ$ù‘ÛŒ%Z Tº‘ˆ°Þé c߯¡Ê¯Mº©[×âö¶Úa³[çÕc.ð³Ÿåj ö‘ Šä~šLàU®5¡ÐòFÇÕ¤ûFÉÅ1 eO!<7GHŒF(?f†Ž‘¬µ²DZß!ø)žazpFCxíg7ýA%‘æè aüƒ—]ôÁ¦®nÊn·*«|ƒ¯¶µ† ÷»Ý6Äík—Áì3Nû):†=Ng _20Ø"ÖŒ&€@)€Uá1nCÉkpÓkÌ)LÓðå3Rý`–±ï‘fT?šeÃ{3 #¸6cvü±¨†O5"Á3£ÏŸÄÉúuxJöÙ 6-c¹esxF·æeUV7¸—ïKsð }¨¯×}ûb©ï]X}ÆW÷e·ÆULbïÓu¯ ˜„¨8DÕ¼Ò+T4LœßCe†ö(ð㦷-nœ   …9|qœæÉúï bLž~žô%ŒÉd 6]L ²³},pJ‘î{wù¬Àf Y¦`„Ä@ÛŽSÉWƒÏS¼Î×~.ú\ŽÜ© endstream endobj 2331 0 obj << /Length 1397 /Filter /FlateDecode >> stream xÚ­WmoÛ6þî_¡2P1|_‚XÒ$[‹è/ûÐöƒf1±:[ò$¹YP`¿}GR’-™M×5Yä‘w÷ÜÝs§óÅì䊱ˆ`¤±&Ñâ6R 1¦"É’LF‹ÖJH@)׈u¸|·Ò”!BÄX)ÆÌj"4’RE Å(åÄï^·»üažÐTÇÕ­¶ó„Ä+ã_~+sS¯Šòο_~š3›ÒþoýRfŸÇW6˜U}o·²:÷›o³m‘­]{ðbEéwÞÔU[•‰ø¥Õz]4EU6Îb 6spŽ{S­¦XÜZÛ˜âñëŸ_„äÎM¶iNíÎÉQ‡øpŽR¬AÞÉmÁO!áá$ÇH&èèâËÒÔw…îNO¤ Úº»ßãó#ü Le,v¿a‘¸wîö S{ÿ2H0'ÁR¼—ð/VÂ_ñ“¹ ZÞâ-O;ËÿgmÜêbÓÅ.èÔ¨ ¤wÂRÑ` €ít‡TvÇF`]o‹Ú4>b//NûÄ XˆÀ"%HÈÔ¦=ÒÒnûÏA,éå’A—ùcç×9þ9V*] Ü…»­‘J/u¤2Hã ]Ê¡š²vÎΖ²‡öfN‰Ï^¿¼˜SŸÍ¤ÅåE8ð&ƒ{¶kWUÝ+è¡HAu'”!ÕÛõ2ÊÿìºÎ6YiíiW™üE…©âjmë? K¤ŸVS¸)VH€))¹Öâ‹1îå’Á@Œ§×9¥ÍÍ(?0÷ÇÜ4W”ÏIl¦¶A!EÙ¡mT襎,ÃÀ §cËŠ`4-E3£—|knMmÊ¥ùb@™àÿ' PÀÉ‹ÁÙu/!$éºÁTGÒ<4ë¿éX9ðÛíéÉÉ2oîí›ù-M]¢åœÊxuR›eUç'„3ÎSFº½dcßîJϹi³býÔØ¼,Í:kÚbé3Ý|²ÆŸJÍžöJhQyW²:[¶Å'çŸ'à¬Ì½ÜÑ~OÒÌö¬€ÕjšèùH¥ªoFG“0¨q Côt2à0,ô“A m2Œ;ßp—´5ÄºÚ ¡_Úcôƒw6»¶E;Çzç¥ßYÌ¡!›ä2 \´s¢cI]IB„Ù¬- R™¦næ`št=]ÛÉzìƒÿèZ•ª)Z“û5;=Œl³Ë«º3ýîp•w&˜2=¼jæà‘iï1ÆÁÜÙ{ÄœKãc"4m Š”BJONœ~M‹¥VÊ¿A ‡9W‚«£Ïm )p‹BBrÊa! K—z?»|(dø`™`—>jôRu¿ +Låäõñ½­jŸ ûÊ•¶rÝ@,<$ ÿÚáð¥„öWÜíʦ­Š3ÿXÚÄYeõK3XØf5PÃÚø·ÆŽžLûƒä”úhû¦¶œ’Э)Rx˜(ƒ·À7†âö<„æ!TØÏƒ‰uÔ»¸‡¦¶­k£fÙú•¶òÞûšƒ…¡Há·+H÷\®wÍA*5pê3IÖôÈ;¦˜Ð…!G¤Þ²Û] ŒZ•žgSÀÓ7•!Tl*Ö‡ŠÇ-@ã ¨›nsSmº<‘`·ñ‚6‘B-!”ð e9Z>ÂÑa!R(ÿNŠî®ê1x„¢ çG÷ìÌvævf–ÙÀΉŽøfó¡oŸ»ïÁüŸ{gÿyªÑ endstream endobj 2336 0 obj << /Length 1275 /Filter /FlateDecode >> stream xÚ­VÛnÛF}×Wð‘ÂÕÞ/ŠÖvÝÖ©]8– °ýÀP´MT¢TŠŠøç;Ë]Ò$µ†ĈrÅÙ9s?s¼˜Ì~c,"lH´¸‹4CŒéHq‰SÑb]Ç I3M8çñÉÅ|z»ø09]LþÃ?fѤ¹c˜Œ²õäúGKøø!ˆ=6¢ëˆ!%9¼­¢ùäãäøžpŠ C|Š ÀJ”6o«(‚a/§FÆG!‡Bôm€Á5„<ùõ”Rƒ ¡oƒÊ’jeB L±·¸€b‚§ 14¾nÁ;h%a¤hd"ø³ŸÿéÄ’V.é †ÐGêœËLÀhú°Øêƒz©×@GÊÐ[ *@N« #Á‰û6¯«´¼Ï§ c$Þ¦U]d«æDãmµ/÷Y]@ÌâMéÄ ÿܗ˼Z}-Ê{wοLáZ^ÚÿëSÒÊ‚²zS>¹‡û)Û¬VŮؔ;wNkk'xdúapaí¬Ý 8¬ Ô 1æÅ¸^¤]½£z‘}¨Nf£qçmDÙ ªAQ#𓑉<4¶ƒóO.à`’bžnr'~œ§ëÝ{§”è¾RΑÀ¦U»…€KåÃ'^t ø´Ì«û"ït‹þ ‚¤3ù ÌÆ¿³‘g±;ÀÏÄžyü»óà׫q¸Âãþ¦Ú´WÅÚ§>hÌ;IIk‚ë ´µåü“;é¯ \×i½;ÊÂJµ(—W§çgg]M5‹ÿÇ’ÁæC€£}ý°©Z€ïn‰4·MÄVm<‰ ã^[cæy•¥¥óz‘ èP¢ºKÓÃxRXÎà2’ “ç“KzrM±Œ*뙈Àº_²¼*Q6¥úÐ *%"Bõí ,/u`ÆÐe*Ì{1´£fŠhŽ$Ì4z/z•ßåU^fù‹Ùb@ƒ+ß–.¨ÐäÒ–ÍÑ<zLI,u0ñûKâÁÆ·®·ïg³l¹{´§ü3jC¯â‡Y•g›j9#\2&h0,V ÌaTö¶ÐÀøe^§Åêbó=fŸ•ù*ÝS¸b†±¶BE[gvÏm]nÊdY€JV¥À _÷Ü€IË¥“+†ªÄŸgRË£òÑVE x¤…z‘#8°9˜HÀî#)“x& BFKÅhL{]ØBp=`‰aÐ4"œ÷h‚*mi‚*4¹É?¡†'àFÓôÖR¿ si`]‡Öpõ"Owû*_÷#,âÍ{ÖSâÂ*cƒLÃØŽfÁÛtÍ,(´©"þéoÈÈ6'nKü€õB¿Iy)Ó“J`ãÒ–±IK óPhú.Û æ Þ9Ûo0fîÍVŒ Vk7£´)IÞìÑÒݺÁT†œ*EŠB¥C¡{ãÏÓõçeúšmŒk(/6´­Ý’|"܆Ã!> õL·Õ\Ô6y_>´ÉZUÐÁr—ÖpS=ìæ- y©`âypíB{ÙˆkKßç›åçº]Ù6{Ûe©Û Yl×EïïªÍÚýLÜ£Þ¸»3l³`ùÕ1ÞM”,Ü?LtT^”A5,ís» z¬AX‡4X:Ù cE(IñÚTaºÙ/¹„º_~hª´ºÚZøá©5/Á˜ïÌ@«Ï O>]’»D=µ~ýx3Œþ endstream endobj 2344 0 obj << /Length 1246 /Filter /FlateDecode >> stream xÚ­WÙnÛF}×Wð‘Êñì‹£µc·MšI,øÅõ-Ñ1a‰RI*n ßÞ;›LRTӋùsÏ™»ëb>;ù™±„`d°!Éü!Ñ 1¦Å%RL%óer›*¤p–sÎÓW﮳»ù›ÙÕ|öÇŒ$þHB˜ADwÆ0™,Ö³Û;œ,aóM‚3:yv¢ë„!%9<­’ëÙ‡ÙÅ!<á.†ø^]N *‚4æßU $¤¢<ª5ÒR|PC‘¤fŠ)ÏrØIo#x„¦D!LÙ^ ‘Iàc·Ÿöby”Ë{‚ècuþÊÌÀ24'}X¶ú Aêk #eôÎB&9 ¼)FdÜÞû¶Ü-7M±­–U—1šþ•åLót™‘´C¥m×T÷»®ÚÔ­ÝaéæÁ/¬ôcÑ|*—þȶhºj±*ƒ\ÑYX hµB”BP! ÿ…ía0M&.Œ#Æõ8 ¤û(H1ŠÙGÜë¢#=f¸ ŒU9‰3x.R‡ *¿žgF¦å7*à qÅÁºô„]”ź=õD÷!8˜ˆ±Kå 0&“Ñ⫺l>Uå^·ÐA@ ºÇsþX3–ºgxIÜš»}&ð‹€_X ¿þÅ_ñ€W€òú®áP6Õº¬m`t“•MH)ÚZç ,—·¿¾rØSᘇþðõ¶jb¨½¾<g•-s Ì'¥DB™£Éåòž  ¢!ñ±:GáïCPåjRO×D*G©ÈÉ>!ARÅKwE·›ö>g+M{“BÒó·¯/3ªÓó̆íÕåtœ1$Ä(€ÏwÝ㦉@`ú¾)¤/D”!­b¬5ÅÉ?FNï- ä=þ[ѵE;¥ž„å>DL,!KM$6†Éq¿¹¼'8åב:Ÿ–E]|ª6]Õ¢§LÈÔqýiQ65ZdT’¢Ð´˜4}RS% A³8îe z³Dhð;î‚ –¿ÈMy`¨Ì!«û Ìå¤CO{¾›zï=á#€´ê‘šrAS{fH¹>¥j2w(aHB›øãcùP6e½(æ³ÙÿÍùå2w9t~ÃÀ–œÛaf"ÿG˜> stream xÚÕZßo7~×_ÁÇE)’CrÈ"×K¥½¢qî)ÈÃÚÚ‹;ZC+÷œ—ûÛïJ+G–/²vUË c´ËÃá7g†ëœ'e”sÞ+KI„ \&cTc ÊsyU°B`É‹`ç(‚SÙ”5œG0žs,Ï‚Œì0RR6àQŒ !Zy!eÌè"z²!‘Œ²©¨‚&6‡¤"CCë,zf!`üMlÂO'/É•1 ‚—&3¸PÞbRÇÐ/2:¤Œ1çe{4È¡ŒÁŠLу½"G3pPDÁ  “0Að²&Ž’¬ ¡'[y–Œ¢”Do¼ðÆÉ)o¹´#åiÙÎðÑa†ÓFc¡ž£BÌŸHì ûìeŒl°ÅFXGp®HNJb{lZ${™½ °öˆaThI­RÑ‹ I4'£˜åhYŲùd°\N‰2Ñé xbyÛy.=±%Av™L{zyUL@Ãô1s†LŽw If'€„­˜,°CΉä{_$Ì`vHˆ­¬¥(z@©”˰S&ÑÃy•LœQÉ–·@I*v–Á“Çþa •d ¤¤èdv˜.ÅHX –RÑÈLÙ‹\œt • Êž,Û…wYarƒ‚¶HOÂÛPzbÃ²àœ±Šœ àÉIvH¤²:/^b¨ Ÿ06Ëêñ›+F.` ’ ]­‰b7`¾E›X¼¬ å &—G/_ŽÆo?]×jüýlÖ,Fãšù¤ž«wîmÞÆoêó…zÏÒî {è‚ÿHZ”ˆ&jË íNoÎeœß§³KŒ¦^¾TãS5þ×›,ÿ½øXM¯Í·ÿ©/æWÓ«›Wçõ|¦Ï/¾Rß}7Âßc5¡¤ li  š-C^¼Räb±¸þv<žÜêI3ÕÍüÃØ Ëòø·_>1ôÂk¿²÷UÍmáØ>gÍ©ø¬…À÷tÌ{©VÍo§ͪ³v|Q_Sߎ­5NCþsµ~Rï@± =Þ¨ñëéâWÀÝéìû/´ðQ3ñºÅëf¶(ª¼æUK ˆY×õƒ÷àÁRv‚­dº_€’¥u/` ?Ë/ ?>™7ç§5Œ£Æ'?½Vã·õíB½ß4êIõ¡„õlÑ ½—™Ä¬ms3?¯Û%å—gÿ¬'Óê‡æviü‚G஢S†‰Oª9A{GËöeÇZÌ_ÎQ«œ;+:ÁwB(Âû·}cÿþ À‹Úu-­Œ£…u¹Á4XíÖûþKó¶QØ gÓ3ëÒÞp 8ØgäÜLF{9©BÖNðx¼Mgíõt^¤éY½·u5?¿øûõßþ=M¾¾¬?} M8ªöU1emá¤m€fµu±m\ÖLgºDÚföê¼¹jæÕ¤ÑõäæÙHXˆ‰¾'8zÀYf3P &ës)ÔáVlQGØIái¨£7YD¿MÑ &‹hVŒíÑ!÷e„赉®=Ü0–²APdÓ¢"íBÔf‹G!ŠäXáQò ¤:ÚØ>€¶¼ÚØm£-vhãNHÇ‚™ç|vÏ÷>+™µäëø•-lúD‹æc£o>Ö󇨂o6»<`³Åã<`ó›þð´ð@pÆq°pñÑ"0²ÏøÖãí6ÚvžàÌ]¾M - G[êN÷Ôå©Ë R—¤‘éxˆtÏ:p6ظw–̈•‘ÍE‰™™”ËqIÅÈ LrûPq[}¬f‹‹ axs5}è[RàŒÝšW„ñD£°ÊZX;»—FÕÕY=_èËÙÍ¢-yʰ‡õ:b÷ºÅ}ˆÅÚU…çÞ‹­ ÆjvùhiœÝ渴“ãÒ3ÏR2oóXƒy,w<–;ËåŽÇ²N_°§TB×ô –ªëú¢çL_Øb&¿7Ãf9ë×ìEpQ¤}Øë0\áœ_VfWäói¹bèA^óöÂð«ë‹O­®nôä²/9ÀYˆUõÂãð£lT/œqÚ°Ù.|渋6[ü‰7ï5ƒ¤úd.×󦽼™¿’ߺgÞÒù`àR¾ó9Ÿ4ûa>—1² [>gwE÷Zô¨~€·oRä;•ØÞlq”:òa®ü‰ì¸ÏÃqÏÜ¿tòÈê®g]¾kú3ª»ÿÝ—ùMÒÑÛ»›u8…Ô°z\hlUÑ&uûIOê-<Ò®{{-ßôÇUÜÆùÁ¸¢.t!L£ bü×4š‘àø¼›FÓÀˆ%ÆRå챜Öóój¦O&Ó%ÂN¬„£p×çlµ'è÷Ûß#Èçvƒ—:ÄuɼïÎt?ü $Iì±Æ ŽVùúp'¡ÐqêŸQàÛ—Sm X½»ó”4[{xÈu5«>L›Å´Õ—Õ¢­Ú¿ÄÕDñK¿ëû{-žEMíÊ'eÖ endstream endobj 2355 0 obj << /Length 1503 /Filter /FlateDecode >> stream xÚ­WmoÛ6þî_!ô“ŒM¬(¾*À°$Mº¦è€¶6Š]?Èc ‰_"Éé‚þùyR¢:C»!,Þ=¼;çóÉË׌4&iœÒ`~hFÓâ’(¦‚y| QtqÎÃwo^O¿ÎßN.ç“» bø£°€åvQÊd°ÜL¾|ƒ&ß1a©¾9è&`DI_·Álòar>¶O,¼O ‰iì1«$¡©þ̪”¤’öÍ^i©˜Óˆ¦Iø¥%КOfŸ–€y’ðo§oaQ‹‹:@ƒ¡:Ç€òxdÖÎó´k6n¦ºFÔ¿(sF¿Z“AD%#œZ]1œâÜŸ&«¥Ù˜í”%a=˜fáîÚþò°*V›ì¯XÄû=NÔ;ü],²r˜Ï(Éš¥87¼+ëê7…‚ù4•¡ù„ƒb‹‹êµAÁõ®üf geŽ‚Ò¬ «b·u¤c ÍawÙž›lSØ™—¯©înœs"b*‡ºT*øqȾ‹¢ÚS|¹5åª0ºEw… Xkt[0Ç$þ(3âÄÔŽyøìÖg·QÓ·û·õlš²hCॠ"ÚR€S»@Û– ŒœqŸÍfÚ¸z¶/JS¡»¯.N†ùHyBøGJ(*=z Z\ÔºŒì3ªs´ÒB¨ÑQ :&–u4zŽB‹ö>)(‘ªÝzÕ9#±R­‡?M)¥áÙ»«‹i¢Ã³©MäË :1" ¾õÂzv¨×»²5è:DÍí)dD«6¥¨òqÂÏ–ÓÙ6À¨Ÿ––ÖÍ­yðYP”Äò1YÖc/CýgI iKèñ7¸¨ôx ÎÍ,WpY¦4¶Ê±=59É–äp3*‚)x%a]N¾"Ø FŒúûORM$0*š"s)o¼OÄý3S.³-`f¶>Ç A”Öǧ‘Ë@è”Äì¸Û=Á|Nï©ræ*ÇTf{º4å–¸qH$TH¿'í>?7 !‡›%rh 3JèŸñò{ËÚÔ¦ÄZ:»™ i³©òù[ "SõL¢Cé‘i GÅ3•¬ÁE 7Ñûêú|‰¥*,UHxw žºÌ‡öŒ¢I¡>ulû"Ò F!±g1e}ŠmP´&öã…g¶6·ù®Mýz·5GªŽ-ǃ¡ ” ¸L)IôsÁ@\ÔzƒÑW‡GÀr;ݯmLªbY‘ê¡$&?ŒË T{¸;6¼åQ#*ÃrÃ]UêQ)¼wEB)áZôÆGsmJ³]š£÷“ü'–•Ÿ‹{Ïõ.œã8lNpýÌõޏ¨ô^ï}uØåÆqJÅèÈxJ‰†Ë²£ÓwÁ7¨‘iïÏe |㙇-66¹©³âö?{¾tËÄÚg;Ö1¬ÛØFÚ7hô]cœ$2\Dë,/íY±Ò_ðç3ÎÙÙþ̧Z@cLpTC ŸLxξõ¥¨H†/Þ@ƒüáÕÅÉj•,lóýçmµq€"óÊœ ø8¹»\‹¶€7Âì>Ü8@d« ϸkÓ¡úîÝAª×E¦m£yO¥°&AuÖ¢F(Œ)ܹkñ቙Y%÷¶ö™2[5Âe¹«ª¨2˺p…DîmÁY¸/­/u˜–%‹È±³*œžµÐžã¸Ì¶Îa‚Ú'™çÕÓ†”ÁkÖ'ݼ~’$€‡¨Š±CòcŸ>D©æ¬þî-$Oî`©M÷ꬪ›b»ðwùÙÚl±¹ÙM»&I˜R$j‰Ib{DsïîøBÔ>¢àaXf.7*ÌÄkh”¯ìK  ½|ÑÞJ¯w8zLÝOP´†£ÙÐdqª´Š£àš¶WüŽj¨”¸è{[ÇþSwòr endstream endobj 2363 0 obj << /Length 1443 /Filter /FlateDecode >> stream xÚ­WmoÛ6þî_¡Zs<¾3ذµK»¶è¬1‚m?¨6“³åL’Óýó;Š”,ÉJ²aEX"÷<÷»ÓóÕâ»—œ'@‰¥’ÕUb8áÜ$Z(¢¹NV›ä}ª‰fÙR‘¾}õóËìãêÍâÅjñ׊€DªöŒå*Yïï?Òdƒ{oJ¸5ÉçVr—p¢•À§mr±ø}ñü„%œ‰1>£ÀfPµ$ ô·ÕuÀö5H¡m¶ËÒ÷ƒŸqN@óþ â›à¿ßþ³[vrËà …©º–8•@¬…!,[CÐ(õèDY úÑC&KP†(‰¼%R@ØûÕåõ¡r;Wfœ¥M¶äʤû«ð{µ¯>ûå¼Ú„…Òš*߆—Ûb_†'\+ë;/éªÚ…µÝ¾ÓyØ…•úQdâ½~O °C#0ÒDjÌYb0sZš·§é",#h¡æ‚pa¦Ù¢¤ì³Emå$[Ô°SÅ«b™Ük‰ñð­ÀÁ«,[‚@±HW£}†§«ÌªÔ]ú‘ÞVûf_.ÃOØ_ï·Û¢F7ÖA$oÂ:ÞÊV9&=ð±æç.ßÕg˜‘‚Hj;vèk¼KÁoS+–Qt¤øEéªëÂõºåð„DAD‹º?PI¹¤”Чȗó4¼à2øw‘þ‚6ÏáF5WFÜ¿cZTE—0³4#ŠõÎoëV‹íÉà[ >‡Ïl½hòæ0o©à„jÝÁ\fX2Ògo_Ÿg̤Ï2Óçó>åDJ1ÆyvhnöU„,†J#ÚjBŒîü zŽSxì8]¸j—Áø ôØŒn‰oúpÝL+ O„J0<÷Ö¹(¶ȵwgBn¬,ÜÚ•?­]U’µ÷ÛÍi¥؈Á\É‹R'ÆÆ2.‰bÌ ˜HLª¢Ó£è;wå*W®Ý½qâØkFGþ] òêâîìÄùØ[#.þJ{¿÷£Ür 8çþ‰ºÐe•D` =·@ fé@çŒã;©èÙÉ[ a&"¿;ÄÒ¶qM^l¿µK_—n›×M±éïî2¦S¼˜dM}¬¿?¹8r~ÞU$î+ë,E„‘¾ÑHso£aF3tªÓN#°—; Àd.é^h"ÀŒZÍØpC´<¶šÖªë*ÃVá.IÛ"€PyÌ!±™a%†¸ÚáÉÕoÇÚ¤E™AŠnƒt‹‡º® ›Ø“²%¾në&4u­Ó*oâv;àʱûû3¨&v.|»Éë ó ™Ô¹¨dÆ‹Múäõ%¶‰ˆ¿~of:^X†Ÿ/lŒüò8 ~Ù «i{Fø9a»ÒIçÂ4´ŠYÃ)Ÿ˜•ß›¢éÒ)æåæ!Š\ZQÇJâ¬ÆØ€Vã&¢u~|Œ ÇÏ(c'ÖçUtá¶ØM{½÷á×> stream xÚ­WÝoÛ6÷_¡G¨~S,0 _Þº¢]³ÆÈK—Mfb·¶•IJÒ¢ÿüîHÊ–de]‡!LRÇ»ß}_,gg? ‘0J,µ,Y^'¹ B䉑ša’å*ù˜XÎ3)eº|¿\Ì3–¾›_-ßÌËÙ_3–Pøc S9á†û›Vè¤ÜÍ>^Ñdß$”›'žt—b´„Õ6¹˜ý>{q ‚iN(ð à”ñ ±¹!¹±ÿXˈ–b(–R[ž~ì„w¢9Ó€ÒÈA4± üãçϲ¬£Ëz„ÒÇì¼t&ù‰X!I®T_,ŸúB#Õ÷„Ž˜y¡W(2ɘbD1ÀÍ)Q’…oï\ÑÜÕnçösÁÓvž £Óê:üÞÖU[í³ðƒG&uÛ¢i7eøÞ”EÛºz³¿ ûb¿ ‹¶j‹m¸PÖUÓDrW¶›Àh[Døm¿dœ î'9—áíi(ª X21 ­ù8H4  EŒU£ Ñ}‰^~­2›ˆm`ÛLrNr*Á’#¼Ÿ@\¤ ¡æV§î’x‹Ó!å Wìš§3ËZK¢(ÆYT8cÚ½O1ÒãÅÞÕ7wà­ú!H‹¼ÿ Š E)¡O°iØÀ1ýLq—“r#› WE¹_*D D@?“ 'š³ÖœwA8¢yûú¥—>%4^({ÑíÝ´ªRjL'çrÎKŸ¿ýõÕœçéó98i¹x5mTA”ùõù]»®êN Ô3’KŸ”P«:Ã23…),;L®.‹}PþL6Á[AÄæ­ÇÕ‚M¤N4䉥ìÑɲý¸!³Dèž•®Þ“­wƒkÈeú8¦ŠV¤:1T™kC¬QC›X´4¶!mÍ~ÄØçˆÜA} ‘}ñy®|‰j¦Ì®ÑÖ´‡•k‹Íö_ä‡ð.ÍꉻǸ€¢‚:4á¬Úo¿bá ýˆÊc$ıPJ À0‚Q@2ëGÉ€ãÚ…ƒÃ€›Õ€ ô¶¿²Á¦ç¾ég‡~G›ø‡ –fÒ·°ˆÓE$B>®.üÍ&œKº*±Ð¦‡j4 j”ѵ˪ëlW4Ñå¡`¿¨o¾Núâï[ç¦ÌÀxba6‡QJz2kN £Æqal4­‡€#¯¨LoA߯L3 7ÖÏ$ ørƒ ´u_Ñ–xèý‰ è¿$ÒuG«¢-žò‡õ&6ÿ¥¬psïkU}dô†”’¦Õß§©!H`­‰ÝN±ÄÊŽàÓ÷ì΃>:’[û›¨# =T}{,-”IxiøK”ð@Öùœ2:Ùè061xå@(Ðø  ÁŸ<“)}Ï „h(Öè )ÒŸÝ5—±Ý:ßÚ.¢WáË]ÆqX~¨v~Ø€å9Þ®Ú°b™ ÃM؆ºQœ·U…´Uü]ǃꮽ©ìÿÄ(Ka¨Å-ÃÜ}Äš`0 ®óÚ¼Áñ"PÎñÈPG Mo»õödÀÇ :‡BxãÁ©ûÒÖÅ­çRm‹ø¦¢U…ª<ćßçQÝBáòïd®ÇŠód*"1¬!Fz´ßq¥Ä¹Eóá%|+hˆ½N]èñ±¢årh3‘ãk$ÜZc/Ũµ]ÖBá…™û~®LÚi/B©†»G¢ã[ 6E~|òn·¶;=Üé^n⤈ãÑý¢­]9š5œVÐCÈ ex/w<ëb.~ yó]¨4ߺêú7u±ãö endstream endobj 2377 0 obj << /Length 1230 /Filter /FlateDecode >> stream xÚ­V[oÛ6~÷¯à£L ¯¢´Àrq–IÖ‹ hû YL¬Õ–ÎÞÏNAИa:(¡lÂl¢p¢ôÏ1«)Žš}C)•L kE”$˜‰"F°Ô‰\„:ªú1ä,Èê<Œx"‚üæ(7! ë¯Ìîñ kÜ¿r"©½gn[Ít @"œÊS“­·Çöäè‚&}B`I4È·rÐ+øk%‡Ï‰:ÑâyiêûÂìuËþ ‚`­Óý™HÂ%!˜üx9ÜlSû-‚ßö»š¡Ý*øÇÔÅÚ”ÖSÍ$Åp̨‡`óíÚ·h®.ÏZëSF»‹Î¨t×?6Y³›~ªà˜(åí܆åàäêÍyÈ’à$„¥óói§r,¥>îd×,«Úƒ\Æ $JÄ8ä©w,US˜ÜÒcº4e^_Ýë/«0d¦YNÙPhû‹K_%û¼fB¡˜A­€o F°FX·Ç_÷b‘—‹z‚m™Œ`ŽÔ9£-^îþº0u‰Ö¡ˆ˜ÖXè> ÒôàtBh†oç„BE&C4ÅdèUX«.]í~0w¦6åÂü0zHãåÑ›ïêj³´ÿw‹¯LÓ`Ç :qµcÓÙ2š¯&¨.J›Âuš¸ÿЬþ£x8>È!1ð&’2ÆTóçC'õ§òa¤®µL‘XP"§’1ê霈½—:0=t dˆ" IÎ0gì%ž9›¸‰Þ]Fów‘ ø8~Þ÷/1У®Ö™¦-ÈZ¦ø('w¥ë¹i²bõ“3s³q¨ÞŸ»T,J›¦©³ESTåÖ·½ þ5!ßÙÞ”¹[(w†ÐËÌ-v} ë¤ b°˜Ö2 J×Ö)KcéxïØ¥±ÁR†ë  |+,³­“X›l»«MÃQKVßû“MVÛ†[,VÄfkvyUg›"/š¶Ý~nÊ­Ýа1Ñb} IiÕA~ÓÝ€éÈ„t€Ì ÅJu±XXíË)í Ì õD_çŸ £Së;ÓÍe‚ÑvÌi±@à€$iQ¦­C`Ô¨V+pB±µëVm@­t*|YÆ0åÅ *JwoÝLŒ[ \!Á5&ÊÆãxj?n)ÐѸ5r³×åßd±}Æ4¾«åЯmXÛ|¤ŠØ|”±ï¿u~¹«jçùT´¡¥AG.>~“ðh?—ø“f`N¶Ì6¸ñj24KºïêM)…!†×| ÕHh‹É“ZbLâýÈõê¹kŽ“þø©sÂ0eúeŽ…!S9º$\}Þ›[dgtYþXÀˆäó½þ Ø£q[UiÜbHº¥Ç–ÃèˆÀˆ73Áé·ì×ÔY¹}°ŠÚ\³ÔÓqÇëʳÙníx2ûÓòZPÙM¸§¼¤ îÿÚÜ-ö”ìl,‹ŽŽ§¨ÌJˆ{㨗jH`†"ý˜u­ä›»McíÄ¿ù’þï÷+b endstream endobj 2384 0 obj << /Length 1140 /Filter /FlateDecode >> stream xÚ­VÛnÛF}×Wð‘ÂÍÞ—k @ìØ)SÉ~qý@KtÅš¢^œùùÎÞ’¢Ò¦(l@˳{ÎÌìÎÎÅröú½!H A£åc”2ÄX).‘b*Z®£»8Eó„s/®ó„)gUV¾4ó„Äy3¿_~|ýž±ˆ`¤±&f%T …ë‰ÛàÆ,9'fÉìj9û2#ʼnÈ) ¥Qª£Õvvw£5?F`ÒiôÕB·CJr•Ñböyva<’ÆáÔî…™S@´Æ¬B#Êÿ‡U„ëë‚bÎ5൦ñ]è)Åa °#Á¿±>PI€%ßqü£Íœ×œq20¥=Nì-}FúÆáV–ñÞðE É$ƒ(Á‰³Ý@â–²x;g4îJsÚb_«¢-òæ•3¶uV5Ï‘×Mnæx¼ÝmóÊLµ™eÕú4:¯òúg_M[][ìªYqp6 '¸Su‘gÛæÌb"úþq8€·¸ß1••öQ © ¨=8%üL\ ¸H`=¤¿2bÁûI€ÀvP 0#H˜@1›!LûÉ­•`Œ°7ÛñÁάŠïv;­ç=;v÷ùK~;é“—è|Þ§¿ 6%EÈÛ¤{Š"IIpϯ*垢ôËa\ì‹J‘Íù‡Ë³ñ©‡r€„^rŒREO^µ€Kz@{ò‡ÂÇÛY ᮩSŒ8,ëí8qãêˆxè»/Ί«–©w½ÍÚîÄ f+|;'ªï¯.ç4ÏçªåÕåôIeH> ñy×nvu ‚ ŠJ¹- ž„ãJÔ”(7 ¢Î«õ‹KûE·2ºžÊüeŠBA‘‘‡Ã²9³‚÷ŠF~‰>]L.é§2<ÚÎ’fF+D =tsƒZeÕ¾]åu…¬ø#YTxFt_ÖT½õ¨#QÃPÍ%j(ªðl|p)ø™ ¼ÛÔP$wûMîòpk\ÌŠ²Ì*ãR;• ÍHO&ƒ†8¼§ÞDFð²y\ÒN$c¼%]¡ý Ïs!ûrß®»z“mQ¶BÝÓXã)”+Þ6‘Ž€:’5 ƒ iÏH_V1yŸ¨T`>¼ ¿åyW«üäb’ÿ‡„~êV%ºÞ˜h¼4è‚ vF%yZ cq QÅFÚºÊ? y Áý êÖ~wéÛ¶¨ÜóóPd›ÊŸòÜe³qÖ¬u¶æKÝ.Üð³HÞ3^.±_e»˜Ñnƾb¾ €¾/õùöE•CÑÓè-è»6äYÝ«ÒÜ .¡g™®õ+< ˆ‘ì:¶ýŠÑŸ¹ §SèC¿ãA¿â×¶~éÆão\m}¹@¡#“Òù›WØA òÑTޏ°Ï&|íÝodäƒÍRÙvÀÌcýµh7~*w+öå®’I6Zù¸«Ý`µÛî3¨A»Ê<ù.?‡Jï"“"’¥ÐjZǾùGù4 ·üo ÔìÎ endstream endobj 2392 0 obj << /Length 1315 /Filter /FlateDecode >> stream xÚ­VÛnÛ8}÷WèQ"V¼“ 4i²‹] Ý¸yIó ØJ­-yuiÖèÏïP”dQ¦Óí¢°ÓäpΙ gær1{õ¥Ž‘Ž5¢ˆRH&¤2X¬‚»P!2cáçy„à >¿_¼Ÿ]/fÏpØƈJ{MS,·³»û8XÁáûŽ´ ž[Ñm@‘ V›àföivyÌS†0#.¬ñÀr´¿V€Ó.ì’œÇÌÖ$¼ë ôðS€ÅÀG:€¯9~Ä¢^. zLÕYÃ;‚¥Äa Úâîh ÚIýt¢¬½7A„™F ]1â Û³Ïÿˆ*nç”„ÍÆ¤Dí6Ù2«ÍÎÞž&ùÊ.vUÚ¬Š2Ùe+#€{UVÕeöÐÔY‘Wvë±( 0PE­Ç Ìj ìv>‰ˆ¦½ŒA÷ibˆ`=(òé‘àAÍ—˜Ÿž#¬ä‹zâœ÷Èú“r“ÙØ8ä˜=»L“munU`>VÁ8b”sWŒ¹À’ˆ— ÙSrõaˆ´$Ï|ÊBúu¹æEðZ´$®)×yZ~ÍR¿5`»>ñKÌÁÄÏ ò”†f [Øücáïé­³Sábþ4!íÒ2Û¦¹IÀÚ / ÷ð6‰Øð¸ùxÓbû »k’wEa—•i—²ï®Î§Ïj¢±„£¤>Yz¹h$Ø>ÐIÔ&êlE¶eiŠ,9Š!SG =…¡—:Âõ6Á1²·¼NêæD²RË!unçC§øðîjNTx1O-®¯¼†‹œ37¨M½.ÊüïÔi¤X[ß’}2aéMøvÙsºÈW{ôËfih=mÒ½Ab‹!UÖG^VP#( ¼'ãÓñí䢑 /¾u}ýÚ§¡‡fŽC`+[¶o–i™£–ü-¢14<=¦åë Ô)×PJ¡RJ—TÖu8ã`ƒþ™¼]—Põ‹Ý:µ¸56&Ùf“䯦Ú }‰«“Ñ0M“p¥!«_lÁF,:Èyb1QÖ".ÑýŸos.Æ\߬šrlQ²DÍÓ”e J±òÄ¢šrrí§¤u0&—çXѳ~N;&ýYÒ ·&ïf´Ïþb†d¹Í²‡,©lcùôöÊn¥ß ûÔF²;L¼é‡1Œ˜ÆÅå¨Ý»s(¡Š$Ä(†bIètePmû9”ƒ¯&s¨Û‚{]Ì<3¦,få3WÁÃè}míâtè ÈîXÃâ9«×öðaÑ‹zí›0ш[Óž„Dk…;lM ÁPBÈdHrõ/ÿÛ€#_Ô£&ƒcĦ*;vA5']œºžÆ„q1„skjR±Ý%P–ìÊUX<Úß­IŽf3̶೽=±³-,F³-”iGf:ÞÂÖ0ÞN<Þ‘c1Eæ=‡Ý ÿLbX¡½sëDD$£8žÜ9 ö³è›)NP|Yl6Yup•}‹¾ÐÁm u¤½Õf»”&ÛÏìê!©R)Â"·[uÛl`ag>XŒ®YѲiqa+ë.™2ˆ+^%ubÅ–E•‡•Ûj¢y“ØmÿµùâUö5ÏÌ…¥é2ìLšØ¯] míYqjËuWºl.×&Ÿ’4ížsÝ÷Ð6éž@áÜ9ä¿–àF ýFBª°®Š}·ÂXv3÷÷¾ªý —S¨¸ endstream endobj 2401 0 obj << /Length 1793 /Filter /FlateDecode >> stream xÚ­XÛ’ÓF}߯Уœ ÉÜ/T¥Š]v“@¥(‚^€­5»VeGȆŸOÏE^É– P©¥ðx¦gútŸžžn_\Ÿýô c ÁÈ`C’ëÛD3ĘN—H1•\ÉÛT#¶È8çéëEFÒs±xýüìêúì¯3’`ø# a1¶&“Õæìí{œ°ø<%£“O^t“0¤$‡Q•,Ïþ8»8F@G„Ó)b´œQ+ ‚…ÿG­n¦j—DhÆ•» Mßý”bD1ßïýÈ$ðÏ-Ø‹eƒ\6œpx\°œ‹#µÌ LéX-ŽKc¥Qê¿”敾w*“Œ¤ÜLpÖ^¶¶/¶M¾+‹²[0šÞCpPœeÛ5åMߕۺ…)bÒ²vç€F9ñ´’ˆ (ýy»(3A¥€ 6H¼ÃTΔD´úâ9DFçübyù(€ƒ‘ ç——0Oœýè ²µû¿‹Fä]<ØL׬¨¦|` œ3¤1KÄ4ãú0@¥ûHq k÷gQ‰ˆ‘Ag;k´»Œd°úç`Å8ð”×E`—)Œ4èȇ­ÑãĘfé¯öÃÓõ ›oÚÇA+|q&Ž9¦ÇœÁÊÎ2"Õ §&rTÌ’‡ª5F¶NœÉSƒÔ‘âÙ‡I2HS*¦¢e—wý‰hd«}nx³ ^®ßŸ].¨NÏàªë«Ëù¨cH>uñyß­·Í ˜¼HsŸn‘p½ÃDÍ ÃÔy]܇¸èWׇÊÞÏ©Pa¹›õ±›![2š£1ò4ÃQ. Î1|pœWš;¬à5tÓ/H h•Gûde›yðG°¨!ð›1¬¹W*Jšº€†(QSPe|¥`M€ ‚oaà·mug›ÀÁÒµv¦ôÕ?s4HôCz™¡ ˜« |¡_bÁ‹e#¹Y&‡-j£»Ð';?ºoÝ[V7ÐÚÒg7‹ >mS•5*ì!ZéšÉ Üv©#´SÏÀå÷/ñnd‡Â×â{.ÈÓu5Åv·¶¢7.ó²ªòÚÙÜÍ‘d =ˆÓ$Q§`6${*NgÃA. ÎÐtxœWºBúþ>.„Ã}RôÍ:ß |…úÇ|hxWøØ,AêÖ°ê¯ðV9›î¨Tpÿøäò¼²·¶±õÊžÌxLòï!ôªoPè$^ƨõ_Eú†Ÿ2_g2¼Ú±ð?®UlŠâU_‡w°°8þ+à úb¢(ë»Êf¦+¦ül±ío`¶(á,Öä«®üè,´ÑŒ]Õ·aG½­á–fîº0˜ÈÃu âem«¼íÊUÜnÃbˆ#pÚŒYY{Š}Ú°Ýœí®FÿæjnæaÎj[Uea›Gsp‚¨ëû† |ª¢&JÀû¬á}‡› Ž*jõìCEMÈAËwà…ýYnŽN*ê©’ʨžv”øzÚºH¨œCå8ÏæHbùu‘=Ù`1LK½VÃ¥¾ÞÀ¾kŸDCSÞ…7 ¾”›]e] Á¥4baþv|ÏÔot\tÉ6înÃZ7œÝæ›8ʑڤ!©Ew(£¸ñõìq¤%´Ì£§Œ|¹EwzÊ×)§p ¿S§@®0þÑ!®c†Bê •×yuß–mÌD/¶ÆÛ¾K"—«Þ;Fycã½µ¶° =2:ªÐ.Åj Ç»’¨´íz_ã ¡¿qw~w^5ëÆmXÙØ¼í›À›lÀÖímøtüã]7 ÷·KŸAbh¼a5öÞn6žZ„oŸÊnF.PéòÆì­ E6ð)X°r©]u>‚8sݰÿ áï&|äCüóÐ9ùÁ*Zdã^o|n¶ƒ­ý&ÌX×ÖAÉSÇ t„ßÞñ|`?0¸©ÛdÕ숚h d µ”7¦õÉÛ9Àý`1ν&ÓñW‚Ø âñ]‰ìÀ\°¤óªÝ†©€¦‚‡afåhÚá웲î#HxG€@»JŽGÂì©§d°ÏÐ!Ÿ΃S°Î›ÂÄlÁq¼ÿüèÇÆÌàg<º ðÅEpé£È­„\–ÙØ:Ì6y}çP-ãƒØŒó`1°ysg‹ÉuìÁÉhÎ&”¹]¹«ÊÕõ® ¡ÀT¹"SúÚÜçÔϱrP4ÜÜÏCVúÂlÙº endstream endobj 2408 0 obj << /Length 826 /Filter /FlateDecode >> stream xÚ­UMOÛ@½çWøhKxð~Ûœ $´TUIàB9¸ÎB,œ:N[ÊŸï¬×ìÄQ{@‰äµ÷ͼ7»s6_0æ‘’(!ÞôÁ‹0{ŠKPLyÓ™wçÇÀƒsîß!ñOEp?ý<M?Ä‹ðG<Â"`Êš%LzÙbpwy3ÜüìáV{¿jèÂc $ÇUáM׃³}„q œv%$V=´"$–ïC+“.í„HI)1î„úwNã§4ñ­ òCâáßl?ma¡Ã…-`„]w6r.÷hY¥mÚ¨Ùj“6¨‘î8«Iï ¥!@ƨ… NìÞ 6@Èbæg£þ<-õÌ|àþÂ|ØU¾*ò,¯ÌÛK³£Óõ¦Ô ½4«µuVö)0ÄöQßÖÄRsTÈ-ã™Në³s|AD[<À™@|ûQÙ â6*Ä%•µÂbJ…ÙMv9ˆ(éÒ–º|Ìu¿@dÛ*U ¢# ˆ1¿^ãGb^·ñí±6Nº¬¿Q(&K—¹K[¯EARâØâ ³Qr>µÄ“«I­¢¼q`ÉEÓ÷«¼ÔM•.‡'» ˆÇ¦ O•ì{‡ [Àº»!캳}ßœ¼]ê8Žf-=½ïP{Ľ—¤r¡Wiµ9ÐmXL¥\ªoBð6ür9 h쟘ªéhØßU „àÝúžnªùs鈰»b^aˆ•ë,¢ú4Ù¥Óôé¹xÔ¥í€IPåϸMñ§FÆ¿õî|?Õxº°*„¢9\d [¸¾wYÆZ-¬3£Ñ ý°ªW/k3kò€øO07lÂïAˆO]ùfzW-û€ÉŽÜžÆp¨=µÝÌ0®€`ê;róÞÚRœ±‰¿.Vë]êe¦Ö—IÞ5ù¿_5ɱ^U@?¡\™czä&ä¾@x uši¼YÚ³=ÓUšï-òú|h[0]Îìý3ËÑ’•iVå?MÚîkû²4õ­‡k†sCáíÒì ä|;~Ðb•–UžÚš-l?m‡‘I›Åµ†‘á…Ú;IŽAeÎ*…Ó¢öÿj-ˆbÖé«ëº¿¨t endstream endobj 2416 0 obj << /Length 2067 /Filter /FlateDecode >> stream xÚ­XYܸ~Ÿ_¡G5°Íˆ")ŠÄW/ŽãžÝ‡xý wsº ëè•Ô;;»>EV±GÒh’ 0lŒ(V‘u}u¨_ÝÞüé¯B$£Ø¸»å8%Ò¾T=\•#Ï# “ÂÄkÞïÞ tûëNØÖÿ=vI«j¤KÌ ú€;%ÍÊ\Nô™C.Ï4ƒÍA¤”KÈJ]!§˜6j¹…õñ.Îr“£ÌaÍ>€¹¾zéÏhDžeß¡s•,È®–Âb² I³?1Š%¤U†ÍœúÊVÍð%r5•(xTE‘?gyA\å”k ˼x ß–z=BP?˜ÊÌ\üÛÖöGg×5PÀÈËG TƳŒ›…HÃ6yx—žkq¥‡õ•.]ªÇóaíéxü´ª5)Z+Òú·s@¢í]CØZ5@ç¬Èy4ÀgÀU“×o?¾GÁ»» Åšpº`æ²ÝÙõ–`üîÍ‹ei€Âɸ¹PœAåz¶"E¾í„1 tnÂò:¬HT—¢ËŒI86¹q¥*E®'‚WÛP! (i*<»±/Ï ‚­utõOΡOýðîÍ&/Ó—pÕíÛ7ë¨L©ER¼¼Œ§®‚ ³.ÁJŠ++£^?g\¯)…˨Ôß»úh{„Àn¿ÉuzòÚ]êß×ä%+ÁzêkHO“(£™1ÅóQF¶í„o-ÈóËPbЖ {¯cTô/ç°z|)už~e'oÈeûe³…§íkײƒ]j+ ˜ˆb¦î 2"×mçžR3^깺n5¸9´ôÒÛ¢…œíím»·ÏÆWòÿ‰ï¿Øò{-ô nø6çâ»8¸Yú®f—›´ëÇ Ük|¯ÛÊL¦ÿhë‡è\òådü AãˈACÓYr†Òð8ž,‰€‡vÄá¡i,Ä~H\|qa¨ô§îRhD—>´þå2XÚ¾ëzä/-„–§Gƒ #xL ê1RB­…Q'hõ¦ âò"õòÏÑ£úÞÿé¶0íÂU£W§5BJå<ØË¡ë«³;¸1<‹ó,šP&ëÑk·Ÿ°èåÈìßá{Dœµa#ÎÚÄçM\¤F´Hø¢x¶Á^¤˜ÈÛy›ÔÎCH/¤š_ñ?Nçµ4M\SB—ÎçwﻺvYZÂhž{ÖxJu‡DÜÞ'M¿€Pœ~yô6,púå ¦:(˜€ÃÛ‡§Q"ÿ™%$¸ÿ&ÒQÃY„SëŒíϽ#â—Žœíâ º©Â×}}FK¸lºÜƒ­i€½?9j¶áõT 3€Û6žóqSÞQ(ÙV‚p'G½7ñ™\˜—Á—N.мÒ—t²~°õÂp°õ6A;•öö— ždéRy„þº 'ª#+T¸»ŒäOÇü!7+#®áî3$ÒÚaÇ |#¿8lþžƒÝ®Q,¯i3¥a9 6˜yïX`…EaÝ¢ˆH8R­'µ§_u>÷ßÿÍ5Œ:’Ûƒ%7 ½8—Ûà8µ,þÊöpeF-b'´d"öoJ’B`’;Öw?àŽ0ÄíÔIϾr©Ã¹vßÛj°”0Ûª¯–ýŽÚZüzȾˆH`ZÕûaš"E®np8ðĬÇî÷™+e„ûj)â¼Vú†ôèU¿”ñ‹àtœ^>’Œ¶‡zš×~þ&}Y×Hï.=.¦sª0^¡#jE»qxÆøÄ+ Õô ¤f?øÉëüõ~Ó_«+ð5å-<+|> stream xÚ­XYoÜ6~÷¯Ð£ˆñ” @ìØn“æjìä¡id‰öªÑj·:ìºùórH[ÒÊI6 ÙoN÷èüàñ)çIg48¿ RN8OƒD(’ð$8/ƒaJÔ*B„ïW åêÓù‹ƒ“óƒ¿hà ( OðXÆUPl>~Šƒ6_°•¥Á%Ýœ$JÀ¨Î~;8ÚG@¹ T°)š¥Ù‚X™‘,UÿX$"›Š=£S<á wÆÂ—ÏXLX,î΀|’ðo¶?ß‘Ež..@˜³CÍEº'–g$fl,6v[c¡Žê[Bg̬ÐOFdQ)‰J7“‚âÞ{€ˆ§<,Vœ…ë¼½Ò¥YáÆ, u_íꪨz3»u;:ï†VotcûβA€ùé|Ó=1;O©C’.ÞÒý3å¨Ò1UC¦<Õ\¦øXÊ©ÊËDÆÙTüI£Û«J/#@ÒîȘÆ1‰vœ‡v ‹ÔÎ…Ýò~ߎÍ>NÖQ9!STƒ"`2ÝVÞx‹F£ ºD$ÏNÞ½F\goÏ,Š%Ꭰ—.úwU«;töóã'ó0„$%̨”"2ÉŒ~Om NU˜³syù7ÆDÀ±Ç… ðT{‚Kž’”¨Ä«Þçýð@4r'‰7õ‡¥P_>?^±4<\©ÎOŽ—£Ž)ÅÔ¿‡C¿Þ¶^8`R‘H*l"“4ñ‘G“%L8ô˜~ÙÖWºÅ8+V, ×ÜPÿ³$F¥$½íõ¾©!ûÀ+”Á ú°“‘,Ñ-ùxÊ %Z´¤+ FôéÎŽn;sãT+~&k£È]¬"øê¶®Rê9Zµ‚« Ü…ÀðT{h§–á"!L?[aid°'Ré¼C¿Ç=ÏÖmÕõÛÝZ£‹^LÏçLåU Z×yc´îÃ1"©|Ðq¦°ô2…Ͼ›YtO·à¸3+± 5ùþ®WR¼löOË¡]ç’dø¼ç D@–±ª%ÿ8¢9¦™{e‚i É;v’4ýç6å-ºáh°ù¹Ö·KæO(‰ýJÚ$p‚žJhS¾’7HgÊÎ Í Vˆr1@¬ØD7hŸºmˆK§yPdÚ¢l k©upT{ ¦&`'Œ&SPÕbícqžÈ&Åì¾Ô­n ý`ùãJüˆw‰ôÖÕbºW>ÃÕ³í­ÙËÛ¾*j{ÇÁا•®Ëéw·8—‰ Ìû‹Õô¤÷÷é|ä}ñ>~ó|ÿ¦å)„¸ \Šôá`rtшp)˜fìð¦ ô1Éã£Ó˜ÊXIN÷ ÆàˆùbÛézŽañÒ*ƒL÷14Øl”º‡zòÂâ놅Qê-ËŠÒ․1œÛÀ¹WUSmì…³1^•áE•[¯«P_›uè¸XfÚU»–/—á»·¼AXÍ*' Z »ý7 ã úmK–¦lþdðŠñOH*:{²L;^ÏÊëdlÑ}à zß„ñ©!~BY£\"¨0ÃezV‚£(5M~QkœvUsåÇî˜ ËípGPVàÞæE_¡Mm‰¦s¿pƒ–!œ{ã§Îø"¬—£eYõÕÖÍú-î6°@MfÓ°„iæ½™_›Úè®Û] ‡€3ÔNCm°pH{ ùÈŒH‡èÕèUcJŠéÉSP­ëÛêb0x:\Ú^⫯Áx7*5fjA$a9žÂj_Ð%B«Fû¶CæÛº®:+Ô¾£À»3ð> stream xÚ­WKoÜ6¾ûWè.jÑ|ŠbNµcÇIТ©³È¡IŠÄõ Ñj]I×ÈŸïCmö!»mP`IäÌ|óžÙ‹ùÉÙK%œS«µHæ‹$—TÊ<1*£Fšd^%ˆ¥³T)E^]ÍRNnÎg©4šmÑ<ô®Ÿ}š¿9{)eµÌr/…%©ÐÔ°­%pO}r5?ùó„Kx§,K <„°I¹:ùð‰%ܽI•6Oîå*‘Ôd ÞšäÝÉï'^ù}X.Í… ²˜Dln­šÕŒf™ùPµ¢Jò=ÔwÂr›[ ³‚|á°çy6²:µ üüí—-U:’¥ßé&ð„¡ÕÊa Q;˜,Þì"F¢@Ü?y¼$å82•£Zq¼ƒ°§2—ĵ®»}ðïŠ|d\¯gR{¼+Ú _J¸,º[W!å]Ñ uÙ8¼îïà)ˆ+‡®À“ºEºË×ï‚Ìkº*¿pŪŽYÊó]3”¢šy§:Ë3CR ‘j ‹yEen ¬¶Hü‘1Eê]‘†²¼·Cy:…œ…ä›æÙ“À?M•[ UË$àòœæY È•wví¶¦ïé )kA%6Z£Yc§àI)‰€â‡35©Èµ{? eì9ûꯞ®^¹ÖGr˜Ä7‚f‚ø!?×ëñêêæ<`OAF6„Ô±ÔîêºPH…×—ÏÓž+ð!D9SP%F6jÔ˜v{Êþ\mºe±¢EI7_Õ’ÚGÎîê5‘#Õ‘Zû.ZS®Í¾^õd …á4ç6F)oÜÂu®-Ý£±”0ë~ –зK¾ÈäsiL*-;‡ï!P¹wuûw@—¿½>.q™Cûƒ`qMuþD‰Gºt‡pªÄÄá@e”3fÎ.^ÂÜÊ™äÇóUX™Ä®S6Ré0YíШá17›»\冢n~(„ùãž|ÆÙ#c/zìÝM…ÞòmÌ`ñR*Q™þ‘ÌWÀs6©ä–ÁR í2LLPzÄñÄç®}èü§÷hXI¿çÑhÌWž 4ª)"_W€ C²èŠUðô¸ÃYŒØ‹ ¥ κx‹dUô=JèúÁ­üz'²ïâpO·k¹åýÓCòÒŸÔíÖ„¤µTè˜e¨Ìñcc`³{ œÝÁÚ| ÊCò…ð)eÉ«ºƺ,šæa{ý)òEIλº¨Ú( ªf½‰DUÏxÒ–¬›H¼Ze*× @È›º‚ˆvÙƒâ?æñž]œ¬ÛæßzpO¿(ÊÑ<âû²«ï¼×"ñŸÃ²îñÍçâ)R/ýÆÓ•·¿øzc•Àm=àUMï›ߟ þoÑð ýp`|è½ ozç>§C%X•Y îE«~}î闘ơ0»C—AêAÚ¥0Ð.™ý;ÎëoHÍM†žý6Ä¿¥˜Ô˜ endstream endobj 2443 0 obj << /Length 2041 /Filter /FlateDecode >> stream xÚ­X[o7~÷¯˜}a#†×!™bMÖNë EÓØH $y˜J´5iF™‹“ ¾‡7yfD[iw‘À¢ÈÃs>~çB½¸>{ú’±Œ`¤±&ÙõM¦bLe’H2™]¯³w¹Ft±äœç?ŇëWg×gŸÎH†áÉ%nƒfE¶Ú½û€³5¬½Ê0bZeŸä.cHFÛìêì—³Ƕ åHQ>5N1Æ «£¢ÿ³‚#ÎÈÔì'T†K¢iþ."ˆö)ìWª8ìûHgðß.<ˆ-£Ür$˜€0Wç ÀÌR$æc³8,©SFgÊœÑÖd¶$0Ç ÀM1œø5¸þ%S,7µio¿Ú1Ïßc"š£ùg¿VÕþóüòÊiÂV˜ä^Å SîºgvåéK¢Æh8G[ÿ9¹=ø½¹ ’à¤%,ALI¸V-´þ§—šžn) ¤4œ€(¤ æ%/,òʈñ LÁ{,°‚Óã'p Ær*‘€9ëÆóïÍÛ´Q¯cræ‹/pði«©­¯ú¤}IQAI´ïœ v-Ž.ÞÎa1a/Nq%H¥Ž`M]À„@DÈ)®*yT¤ˆDߘÓšze¼Kõc²åÛ.óbhÑëõÉ×½Bÿ!ô™ÐbY`ù$µ¹±eÐð×™sþóåq˜3…0Ø¢ê‘0rË‘`*Ìgê|‘ˆ`,ŸvðWØcaªä ¹F°<’*[AêÆÔGÚV-š "‡Tû|T¶¿Uw‰dügG…'C/· &“áTL³_š/OµÆ]Þ‘#181Wc )©#ɬÈ5d-¼B]^›¾¬¶‹êêaϦê´@X%ªôT!°8Û§îQ#BE4¶6fïkcU›mÙõx\ºìVe™¨ªoýòçªß$±C>'ŠÞ÷§,–½WýÀ¡ü?Ii.šü¯Ìi+mIÉE¶ ™µ ÓKœBø‡k n .…jtæiKÍ¡åS´È¸”H 6o©9tÙ±¥†“YK=oæ‚®BCe‰¬KU­ö_þˆ ãÉ Á¸Vdä6™Â wÛ~2e7´ÆöVk{Ûö°"onügß–uw· ú¯Îø9ø y½ ~ÐÂÀµ³°âÛYPóÙ¿iZ?¨Íš¶þËjhÛ`ÍOXJ.ýpÂÉbÆI0í¡D¨îv¦³ã1ë ê·o(²2_+³¶ï0éšlΕ«¾2oºªo›z ‚}S{‰U³ÝV]ÕÔÿnécwØNù©ëñƒyW:ÄVüuk¢–迳Ày~®û4”-y9HÃm9ä»ÆÝ‰Ìûa›E¸Œ«+–1!k¨)”Muý’ˆ%/MÓ=HŠt03”7mÐ1÷΀·ñ”Z*ÚÑ÷Ž)oSÏ‘ØÓ áEA·@š§1xñ H€@ß-–‚’¼w÷h^ü·i?ºÆ°öÀ©­#”Ev·*[$.ßšÇË¥-àSc_N äJ#ÆYÂeÜæ^N%«LØ ¡i³“ ï¡}8ˆ@ª›î#±›¢‰›!(í8Ç|!±EK8q›ðÚ€gxÈGâx@3ª§P,wà圇‰•õÚ„¿Q;³)×°.EÀ·]Ù=TQÄÕÄ̯§¨®b’O7yª[›Eá?=Z‘SÆüä\äG×mÌ *fP˜ ? ˜*´ÙÁÑ.£JŸQi^uþsç³ö:ÌÚö„ÒÛ‰‘‹àÛ*ä‘6¬úäN½ëÜè¦-waÑû{dªë‡u-•a² û†zÕWM0z‹-müŒO÷PZß’–n0ï~Ói~ò’ègiåâÛ"YH6Ýó¨8-Q3#§hgcÁSy²É_ˆ&P¯tHͰ†aÓ–ûj]õöj¿.ÍyÐÌ3OãüwWß\êÝØüæªQÕ ­WçXbž40œªý舳0wøÙ ÆŽoã­†AOg6& =V$åŽ0Å¿d”å­¹õd¢”m‡±>ŒÝzå­˜Ö§í­Ÿ]5ÐOt¡š×kß,À.°îQÂÄ~ãK¼ÆßÆúZ ß#gÀ|vxZqªSÙ"¦Ü~í¦ÂRBOD…zF¥žšùŸbäpj…Ц'¨×Â)ì/38¿ž´$9¤N9Ýåš&ÔŒIÅû¬ ¾Š³Cgn†mpœïin¾ì·Mlé}Ž3™Y…ÎÞ{Öå…bvi´p¡ë™w @‘¿>Ùù‘1*‚Q˜é‡:ð*Lè Í6ˆ»ÈÏ}Ù”.Ívˆ\:hµ%À”ýî¾å©8¦¡;ÅìŠ}¡Çé€EZC£;W; |]Þ÷Öáe:¿¼B^·MÃTú ¯‹?¼4‘Ò‹ÿ_8ÏŠÀ° endstream endobj 2451 0 obj << /Length 1187 /Filter /FlateDecode >> stream xÚ­WÛnÛ8}÷WðQ*†WQ*Plã&ݤ軉ї4ŠÅØBmÙ+Éiƒþü/J$™iÑE’ÌáœÃ3ÙÉ|1;y/SD)Î¥dhq2Ž9Ï)V\¡E‰n"Jpœ!¢«‹8¡ÑeL£wq•ŒŠºØ<¶æGÝÆ·‹'ï9G`ž“œo%LbEžQçézç2:½2›fç‹Ù¿3 ÆQD…À*SH1ŠËÑr;»¹%¨„ň`žgè«5Ý"ŽU*àmƒ®gÿÌææ0cx*2,%µ¾w!iU p-ªÊ0•Ùõ:•„4H•³è¦'ÐÃ3.pJy¿ÐqŽàϬ~y²Jz³äÙ.€?qæ”—ôSr,8`¿2DôF?A»²ˆ·%TLr Ì–‚ºµËR×1gQW}&Tè’)ãѺ(›]mÞEÔîáÉ"½ìšÂ­Vµ{î÷΢èÜ·Õ¼ü©?YHÈ9*€špXs]lÛ×.9i6d ‰&‰ÑØÚ[š*xÒ8ñ¦#ÇçµnV•~ò-‡;$š÷ý™HB ñ ¨rÙwø‘šOÑ3?BõNªô¨ß¼2Mµõ" (†SF{pÝ@!¸nÞйº¸|羬 À ɭ–[ˆ’w;âz_5pým.Ï^OóŒ †9ˆ— ‚3Å^LîÞ.Ú\lêÎRèo×:#XÀ¶Ç@Ž÷VGÀã³ûʘBAËÓ̽+ºC8ÇD©>ŸbJitúñò,fYtj¢±8? 燚%ÆŸºõ®é CARœ [€<펪)÷Ú“šë²¨W…‹ú_»uQr]ÌTôBÊ Vò)©×G…(, vÊLašÿ Šy»d`ôÔ½‹ èx¿m–÷ø®ÞàÕÎð~˜òáDâT°!Ÿ@ô{«#6ã³sÃ&“©\‰3D..¿€ ]—MõÅàbçÎÖ­CÚC’*}Q{šCß É²”½¬}o— C—lâÎ:¶xýDôíR75^õ³!ÏáV …Ú‹3:b3ÕžÂ•ÏÆlªàåaTá\/Õ¾×®—úÅûá¡ÿzôþ^›ƒ?¶v8’ÑGÝu~Nš§\õ¥>¥!ÐÄ»ú·Ö^ÒÃr“èo'$…¾ÂyX …™â)¾‹–º+ªÍoÄuîZ󤣄p¢oÀŒ!Iâº)™é¾X)Oè LX Ã Ø,˜?r´ØÂ¦²j»¦º;tÕ®†~%v÷æ)¢¥)zë¢Y™aÄ,ìŸmŠºtF¦oš©ìà"é¾Ix×yCaG»wïî6›ª8ê‚r{Ê‚K;‚ P%—ÊQÞª` G v0f*9UOŸFU‰)ŒªÓ¨÷åe2Ú¶?ÑVÀ\Bà¿…‘¶ỏ ¹9;„ü•-=mß>”[ §´›¶ºhÿ Kî\ã±ïÝZ»—ñä¢Íôcj›~l·²©æRŽGÏca¥61ª“¶ªW”fâäM±ìªçQ¶•uvW­Û¥Ì·‡€nO’+Š ‡Í•¯Cßý=W™Ûù½ØXÝ* endstream endobj 2356 0 obj << /Type /ObjStm /N 100 /First 975 /Length 2223 /Filter /FlateDecode >> stream xÚÕZ]o[¹}ׯàã‹Pü’³H·Ù4p[ ‚8} ü K·‘j¯dHr`÷×÷ %*–åD¾÷Ú›òèŠCòœ3Cò:OAå|ˆÊæb$åM1² Ñ‹Á*šƒŒJİ*ç$†SÖx½À ­:{“5ÖJ‘Ïa¼6 ¬CjåÍj½˜7o®¦·«Ùx¥W·KÝL®[#›Š;nˆúZßSÈ6ƵAöhy3û¢ËÏÃÑùjb(ˆ·wzÎn’jx2[ÿUb´f²gß)±!÷®Ä 䬸p"JÍÛ’P%k]ªßHmd 6"ÔÔo¢~S ß/ãÓµ|w¢†››õ}I:Ñèe4Úv2ÃŒRMª¢Mo‰ô¾ÈÁN"Éj†r•HÛð;ùñPF»ÈϪÕ·h¦ˆ¿’]V4ùhC4;CPþ”ÐÝ14ï—xš%p¾Ö“|Á¦ÔéVjYÿ”¸OöÜsoÜÇš>Äš>ÄÜ÷6ê’ÕVÜ«Çqïzâ>F /uÁýé&Ðöt5èÖ@×>è tØÉƒþ~‰ýî`O‡`OÔìÉo1žÂw0þ†œ¹ à"mදZ6æëœS›õ6óÉrv¡§‹f=í+¶Èc[µÛè‘ëå¾b‹ÍÐ!ââQÄÅgKžU9¢*»þ¨ª©Cª©C®û­lûo³ŒvØì'Ñ´rd  âIrY›øm%õ]7YȌٯ›¬uh‡§ã›,Œ)/uÜdQÆ>PΠy9$‘µ‚8tÞdu# ³^ËÑE£á®[³•lÇj2­¼ëKýoüÿ‚¯—£ùúÍäz9ý~¸õ+$Ëþ ÷KÜ£á% ²à)EÅ•™{œ½ÃÒ}þÞålg–²;d)›Þ,Í5ÑÉ5ÑÉ•·™ûg<~ÿ0Ļdž„¾‡! Ñú™CˆŒï}²¡iß³ž4ݦe;š¶OËÚÑ”í1šî—x\~¶Ÿ‘=+ƒy`ÃÁý7¶¬cªFe&Wfr~²°¹#ä6n#$u%d`MHÀv“X;²OKHKÙ‡»NY&¹Œ©Œ4ÈSþ3Òbce”8)Nx$²›}“Ìc+g¦‹ËÏØ(­ÆÓëËÿlŽâT_¿:o–—³¹ž4]µ"$M.Õ BäÓ³i…Ü}_+î•è û;»çVŽ| rÕF9‚áûÊ!—_EäîkkÐÓ‰ø’o1lÄ|ÇØ™5pWfvÜ­˜¹x:JÔ~sù¼0·ñæ6ô†¹ÝÞÑÉõìÖð? æéE‡Ã±WuÐ6î`Þ>¶‡¹¥c0ß/ñÒ•Þ=@÷ÈùÛy¹`kTv¸Ê÷ãØ‘_t`}òÿAà1éV¥yÖ­&-&÷¬[¹6Ùu½á®ÇRío¸Ÿ"»öYO*°Ñò–ß:g¬NŽÛlr£'‹Y9,“†oOŒ%éð^Y^ :"lŽ^Züö‡ÇÁÁ»Þâåªx¹*^¾Š—È9ëTN‡¿Ì/ú8˜-gn+TÎ8d»Ó`­ö¾ÓiðU¹o[ÎÆÓÑr²ZÌ{©Á–HKÊ}ÌŽ€NB‰ fã-Ð;¾Wâcá{%Z ï3ôÎ÷=&ïß?“Ãá;!òv^_&ûXy›ªQ¹í+·ƒy2J×ì£rúHöA/úE:ì^ØzÓÔ»ìcKêÙdzº¾6†ÍMÛׯ¾Mê>Éüs9u½¶È…XÞ-–Kê ¹!»_cY_57Cf#o9 ÷áØ‹7÷Jt¹ Þ“‰ç}©,}@@¸·€ª*Q•¤¾¤Â#îÿÑoîñ endstream endobj 2459 0 obj << /Length 1156 /Filter /FlateDecode >> stream xÚ­VmoÛ6þî_¡2P1¤ø^`Ø’&mRÅ–݇,›‰…Ú²'Éi‡þùßYfÖÀy¼{î¹ãÝÍ&'o)ÍFk’Í2E¥*“L Ie6[d·9—Ó‚1–ß̦šç§×Ó»ÙûÉÅlò÷„dþHFCRIwQS‘ÍדÛ;œ-àð}†Õ*ûâD×ER0X­²›É“³c „)Ä99Qb,f%Ýüÿ1+"|äûP+¢¦Ñe~Dû%eHº¿ö‘ÎàßÞ‹Q®& ŒÕyúyyd–SÄ(šÅáhh4H}ÏèH™3zgMf‘a ¸KŒ8#“¾­šG3-¨¢ù¶jûz¾r_,ß¶X”ùb7ïëMãEêð»Ýz¡ª÷ßR¿xg>9s 2Àż3S­»×öää-QCÈl[’¨%B“Öf¯›opkA÷_˜c‚„W•ÒÜ­a“ØO‘Y J­~Ý:nL[¯M3…UŸ K$JÀ“†àÉ9óÎõåÕÿåžHêˆtØR‚Z‰åÛº5ÂÕùëqšV" ä !—úÅìŽrÅ@Ð%Ú¡ccuB|_cÓ #×¥Ž '‹šà ]ï«~—ÎF–2àÓ”’Ÿ~¸:Ÿ–*?µÑ˜]œ§sBÝb‡Q?ÝõËM A†„¤˜«HɘoD¦0ùeÄtišE[öA¿„'ÈL¿Lـɥˆ—GÏ=é„W©„u„ÄíYªNN"ð¸öoô© Ej0ñÁS]W]ÈëíjÓ‡ ïüY7ž¦x_Õ‹ª÷/„Að\+ï¾ »ëúqCû÷>‚þãK»i‘Ëà ¤LVP˜Ù1 >| #šÔ^Ù·ø$þ‹ï; endstream endobj 2467 0 obj << /Length 978 /Filter /FlateDecode >> stream xÚ­VKoÛF¾ëWðHæxßEk×Ní ‡Ærq|P¥uÅD¢\‘JSäÏw–»THj&@aÚåÎÎ÷Ícgær>;ÍyF Xbi6Ê ÎM¦…Íu6_e9ó¢Bä÷óÂÊüâ®xœ¿™]ÏgÍhFðfTÐFw-WÙr;{x$Ù ßdxßšìïNt›qÐJàj“ÝÏÞÍ.O9Pa@J:&ÁQ X-P·ü`µ*'¶ß+£ ·¬(©eùCÏ Çg\€¢üxñÁføï?ÅÊ^®&(LÕ÷K~+9N‡°$ A£ÔN”u 2+©&@,òf¤ áì¶^nMõ¹à,wEÉÈ?4wmX/÷»¦)·l«]í?ñ¼ªÃÑósØ/Úð‹A ¿¹÷ AHÌD@ºt‹móÊŸœ¿¦fHÓMïæNÕR¥ñ§“›WFÑ‘âëÚíÿ¬ÜQ·Þ(ˆhQ÷" %è†3¤ÊyÞ­ñ#õÛ#óÔ¨dŒúÅÛNÛW[W{÷µIšb´'€]…®ƒ÷tînn »Î¡È"8? Ž[ŠRT(ɨü¹Ú»&DãöêÕ4Ѩ`ÀÑyJ)Ú¾˜ß½\9ìRmlØT]G¡aShC@àµÆDŽ÷R'Àɲ¦$¥{ÓÛE{Hg€à@´îð¾ ”æoo¯ fò ùõU:×8V.1ŽúÅ¡]ïö=`èFtõŒîóê§°ì9ݸzµ¯>… ß슙¹vÂÀ)µê/®Oül)0¡3E^¡/‡8Ê•ÁTˆ'êh` ë#Ñ_–n_ÃÒ;ô„³c:$”*nAè„ÍØvN(&œ³©’¡cTƒÕ1QòÎ=¹½«—îÅèqì)£+ß¾ß×Þòð}U"Îgö­kÛ¸´ú,>n‰Ï›¦”QëçÏÚ=—îË9QÄNÒÑÀ4Ÿ8ä+úʵ‹jónùR¡šÅö0©j¡¥8Û‘Ï,//ó]/ÂE׋Âò[CÂÍ¢ ‹°}:ÔƒÃÝSªã0Â{Ðr‚å,óiCBãa|É­£Ý?¿`´ï³±*"÷å|¹Ûlª Eî脟‚~Ö`pjùFjü¡±âªfÏCǤ9tPÔj ß:¶°2æÑ×Øß J¿öÎüõ< endstream endobj 2476 0 obj << /Length 1996 /Filter /FlateDecode >> stream xÚ­Y[sÛD~ϯPyAžÁÛ½¯¶C¡Ò6 H”iû ìM­V–ƒ$ž³9ZY–)ÓéL½ÒžÛ~çºÊ“Ë“ûÏKFk’\^%CŒe‰â)¦’Ëeò:…m>›sÎÓ——3-Òdz·—ßžœ^žüqB ÿHB8G*SŽQ3™,Ö'¯ßâd ›ß&1%7Žt0¤$‡U™¼<ùéäɾ „gHA1Ö#jÙâÓ¨U"bpöŸOG”j‰2üi”±¥/N¿;=·z“9! Q–Ì)q²³iÎ2–®MÞlk³6ՌѴµ/yZT~óúÚÿæ³9ñ{ÌbèÏÍ/N<lá^𓯛vçþ3’õÍï ¬ÞÑh"ü8Êø@ó@ >­Lý®0;Ù¢Ï!€´Ùo°À@Á_€©Œ¥n /‰}äå{ZƒXë_ššºè05@Q$)é €„ ÆzkÎÅ‹³§þÉ Vx ™ÒÙ6fRëMAøuQ›Æ;áì›]lÝeE À“R"¡´,¤¤Ýö‡Ù¼£›÷]pÅŠs&œo*³§2!úzqØêk T{ZGKˆIÕ»ÍÛí¸û9CX©ý/N¿;ûþìðˆ~0åǾ~¼mW›ºÓ°÷a³!w攡LuQFÔ˜1~Ùó”¦òŽ~š8nDº(» ßÕ´E\@(pÃõdóݘCca^£5-œ}ng4KóÒ ³Ü-¡™Dè©qrGµgI|jšeCTG¦¡fÁÃ,N>ñjY<æ/630'5íj w¨üBÉøk‚(W‰È4[âÈæwtc¸ÇÂîÎT´ÚYùhajð„uÁž9Tkë¹;-cÐ{š¡)ñ±&n™RŒ¦ …Ö¡Uì… sejS-ÌÁLaЯ>>SòúUñçH9.– s!šM•3O7³XœÓ {Ð)fcA™èÉ«ijOu xFaš€”C²:d‚ÀãÈÜN!Ó·k¬ãDæNæ$2Õ£Èp E™2¿Î!ÐhÏÏΟßóÿ}^‡ÜÏßi?³í˜‡vÌÓëڔź¨òúö³@X-ýb±©læµù¢›xì®o þáfÕUómSTï¼Ä¢½7ž=0w©A »Ø†ájiÚ¼(?qùáln÷‡ WX  ½wB唸 ôrÝ…R"yyÛj®2¯ýC»ñ¿T)•~ðOÏ S.?ô¥É—xxoÚX&šÍ…Àé˳— ;F¸½› ´[ÕÀºmîij)·m9`6&fÔ›}×ùÚ´Æš¨pzñ#e—$uG€WÛÆ,­b)Ó­Ùy݋҄]§~ddí·=*V«7k¿º±sü Â0Èô¦VØvSkÄž/œÍ=›ž3’²ôòpÌ0(›„xë xÁ!pXjÀ0¹(à¢|ë_ÍÔüW/Ä1¥‚W𱈀˓–$曬c ¸ìŠ˜ãXÒSl¿§˜2›aÎ6|nWy»;¬ÿtn;ùõ5Œ!€î_Åz—œÀšºÐ³ÊoZSÝ‚h÷e(²äÐ,®Çfñ"оzdÿunÿ¼`[æF ˜®¥þ8Ô¹PhàZMä\J¸I Ü22‘s4•ÄlÑösoœƒ+»ÄÊ“^åe(‰p—üc[´Æ/wO6æÆI›¤aJ¦ö«Ì:* Ÿoÿ ßâ³ðþŸî“¿æëˆ endstream endobj 2480 0 obj << /Length 673 /Filter /FlateDecode >> stream xÚTËRÛ0Ýû+Ô=ÔBoÉ] 0Jñ´ ÊÂÄJãbâÔVšéðóÕÃNãânºÈäŽîñ¹ç>óèðŒ €1Ì8' _E!¥ H& ¤ä%¸­;Icñ‡f•P¤Tòø¤hë&˜Åª¨uºKòËÃ3JF0Cv”¤„C‰þ°ážîÄÁ£Ó<úa CL $˜I0$$óçèþÒ:/‚4S`ë¡Ï€B)˜µjpÝFÇ.—q`L9Ì$÷\ˆ†è³‹ç7ù͵‹ RN °Y¦AÎp@ø$IHRÑ]’ŠÅ?Á⢮ÊÂTäÝÍc§Ûàx¬“ǶÞ±hÚ`”ÕzÙ˜¿n‰ËÍ| ±Ÿšà¼:÷qÃ̦Á‚¢c]?Ú˜eÓN'‚T¶)¡PÉ!,§4sÐtæT´ÅêÉVÒø®Òßtk¦B ¥RÃwËaôvƒ§djw 7w00óÞ§*íaéÎOÞ_Çd>â©„]ø~®Ûœ»:¾RB‡v÷" Þ³§£½Ò1Ι(é×y$¤šì±ãÊßïÁu†²Õ ÝêÕ< 6‹ëª3ºœšÓO›~ÈKmŠªþg§©`ÿÑi·¾Çëõä*Ø»!é~3Ég‡Ÿñò]›û{Û“ú}ýþú·¢®Áâme–áéôËÁíÉ,ØÝ²q Ý&Dƺ Æ‚‹>ªì¬²SWT7²?$\¸CâkM]íëÂÛ#LÍR÷† ´u;f„Î$DÄÞ6fO:*„~ @¬Hà|†ï7ÄrK endstream endobj 2485 0 obj << /Length 704 /Filter /FlateDecode >> stream xÚUËnÛ0¼û+Ø›T¾½´vã ÚMŒ^’d›i„8rjI-Œü|)Rr$[Ið29œÎ.—“Ùèè„1D0lšÝ"Í€1— ˜B³%ºŠ'œóèËÇøfv6šÎF?Fa÷#ˆ0 ”P¿Å0‰£«Œ–nñ a`F£_ú€(ÉÝ× ]޾Ž&‡Ñ `”è‡ÿ4=Ÿ^œúÈ(¤[H(ÁI°¹Ýd‹8ašÕÝÈ£Òe–“iž®¶EVxŒÂ]HvOlúP¼«WŽN(éªá6ïq׳8!R…/ï«Oš =úË2-«–Ÿˆ?¬TËÿ-&„DãϧÇ1ÕÑ8v²gÓãá8 „àý8㪼[o†B$hgVBhEÚã5$*|¶¢NÓÜ9ÈX4ÙT ;Ä-0p-Zü][»ê ˆH ’°º:À 0~ù~KZ\ÒúÙS·GçƒfóZ܇…Ýä°¨Í;PA™NMWn–:ZÔ†þ‰)Ç@¹ÚÓÊ“ðº.Ecõ¿8=Î—ÛÆêÊâ~e·C†+X’— ×Ê]Š$s·¿bxƒK:À!Ã÷è|дÖêêæUL"§Vyµ¯fÀ× LWÖPÔ¨½ æZŽê‹Ê¯ ÅÆ%Âôkÿ|ÚÂÆÞÚͶ=c•¥]5‰‹*[–¶L³Õ‹×Œ¹þö×lœ×¦mß„"¢ ¨b½znq¬ÓÍÜ?­oÃlé)³Eº ög=c=u0KwÀM6¯Êlaª¨|þîꢫ{~ g¢áÏ’¡3 ÐX· ·CD¤Ü5¼í0‡âOñؤÁ½>îÝÀ ×Úe”Òõ~(ìÚVõçhטÉ!* »þá…ðƒtCh „9M®]£ŽE€>ljf!]Oí•ù –Ⱥ‰ endstream endobj 2489 0 obj << /Length 716 /Filter /FlateDecode >> stream xÚ­UËnÛ0¼û+Ø›„B[’Ë—zjžh‚&@£—4Å–#ŽÝÊrzÈÏgEJŽh+mQ¾æììp£ÃñèÝ)"rž 6ž1‡€è˜U,Z6ž²ëDÀ4SJ%GéÍø|t2ý Æé'˜@ RH’£a“‡Ñõ gSº0kìjôyt¸Ÿ] †Üê8ýdzKŸ–eZ‚¡3ÉA+n/VËeR—i†“£¢Z¬š£JS£’b1Ÿõœ@þzu».«pq»H3‘”ëp1[UMdú‚¤°`”!Í>Ù]‹‰D[;Äõ ‚rªC|ã¨Z¢ØÜò–EhIÈ\ç÷vˆ‰Ž‚’e=Ü Ÿâ;|‚E8·ä;์oBI~TM!e2ÝL|} ¤¡H Ì„"Ëâaý>KÑ'W 4Ï_žÎi„±á4 &k"ú«º¨7¿Ð?·¶ãÿš !’ƒOgÇ©tÉAJŸçAÐZÅy6õݪ~ˆ0àhä2‰à¬èž#ì¨pìD62ªbyOÅDL®æå÷²ª‡r Ö¹hÖšUÛ.šS@£h4¤ÀfÏ gûÛû-*kaYç7mGcLæ3Ε°?LÊj “¦{J¤Ó@ÃÚËÀÛ›žŽ´§#~³tÖN$d>Ø2I} õ¨ËU˜Óªœ•U¹œ„UVÉb¾®Ë©WÞ6X‡ˆ/›Ö¦e]̯vMœ©×h÷z£ï†fÁ9èsˆóÑ£èoÓÐnb¾ïÂôöݧúìûGLe“ Û‡”¿£{±ø £Ží‚UXòpª|´2[ÓDy·FµukÚ‹ÇT›È­qëÖZ7níÛ‹=§Þ)’sô­Ql†ÙiFÌÒ4ã¿ÚÑ ÿ¶Ðø…ñ>ME}Ú±Ž>™<iÛù ´û¡üOÝb?=ÙQ endstream endobj 2493 0 obj << /Length 983 /Filter /FlateDecode >> stream xÚ­VMÛ6½ûW¨7 Y±?ÛC»›l,šÍ½lö ØòZ½ÞÊr‹bÿ|‡"e[6³EÀB¾y|3óè«éäû·ˆp渃lºÈ,2D›©™A“MçÙ]ÀdQJ)ó¯‹ûéÍäz:ùs§d€‚ ý‡:›­'w÷<›ÓæMÆ:›ý݇®3dFKZ­²ÛÉo“«ó쀊9£ÆéßÝ\Oo}Þ¬T‚iú\ Δ„°ýaóX È»º(ÑbþºjW¿”ù_…–yµjæU×PP¿½ù¼­Û°ñyU”×Û°±Ø´>1ÒÇŒ¦¥&Ò}²eŒ±6LX"îR(Ȥ•CÄ'Ž2I:ë ( E:åBÜ«-’•Gq<ÉOð Åqž¢owb„x$ydü£î¢FO­WVäóݬW´¯‰ÐEH%H‚”᪮ÖÛB6ÇÙ¤dŠ»ƒ© Ú„U‚]Œào»ªÛ ø FøÈ¸1þïä—¿¼S›_t‰éõ›tdJÉqžË]·Ü´é‹€f–z°Ȭá:`R¤Âr õÖÓh«Ç/$&b~ÛÔuÛ¥rhÃŒµ£æó÷=+õ¦VÔ£€~ò˜Ë˜ëw¿ì£ÊVÅõ³wÂq Ög\x–lþ<«ÛG6óBž1V1êÞ£ <îñˆAg<ÆwÖô4"Ò$K&¨NAÿõë&ôi[/ê¶~œ…Ù–ùªÙvõ¼oW ¬Â‰»è 󺫚ÕW+zœé¨Ðöë…^¦zA“[¨·ç£F"¾K¦¡aEwn(  @3NúœÊÊ0NÖ”ö!^‚;øÉø‚Qù ?Áà'¬/0:v‡ÌI•)C©¼¦sÓ¥7uA^]Cv®TNE"㎟£™«ÞÌûbûØ6îvÃéwÍÃC¿©òuµÝ^$4S÷ѧ§„Š,ÝR31cbOü”œü£+¢ðcÆØ›E ]–Vð,/[úiû¡Û­ºæiÕ̚ΫñOaEã¨ðÒ¥¤öO³'þÄüci3RœTüÅl†:@Zþ˜Ì pÿ0Òuá¬/§ÆÓêŒ\„ÐCûHr¥4‡CTZÇü"&ý˜âeiàÍa¼'j"%±ÇJÞQÒ3Ꭾˆ|?󆌽WùwMµÚHh«®ïkZò¤5!Ð?"}j/<>CjH¦ÌÿAM|4ŒhøMÐdD«çAÕ&¨\?xUçQÕgQr$þTz½œÒI†Ã#ÿ´*xâ…•? endstream endobj 2498 0 obj << /Length 737 /Filter /FlateDecode >> stream xÚ­UMsÓ0½çWˆ›=/’V_æD?¡Ðv€x¸”ÜÄ¡¡iŽSýó¬-»µ8trÑdŸÞ>íÇóA6z}‚ȇ”§‚e3æ³Ê€E˲)»Œ„'J©èü0¾Ê>ŒŽ³Ñ¯‘`œ~‚ ” …l®¤hØäntyÅÙ”‚LûÝ@ï‚5ŠN 6}ìf¨!µ:Lÿþc6þtvše§ïÆu~–h †Â‰ä •ð°óÕ2FUEœ Ãè0/«ú¨¢ûب(_̧y5'P^]¯‹Ò®q"¢bí³UYç e¦¯L Fß$»i1z Òa‡¸bAPNuˆoU Rt7µ¼eZ2Õ©Çí 1ÑQP²¤‡{âS|‹O°Çù|<•ã•/Éž/ã¢jkô³¬++£éfÒT´é‰4DEL‰PD©<ÃA‘ß­ßølRô³)š§OµàH]0ÖŸÔ%í…€~\åÕ¦ã:àGàÖvü_c!D´vzKíÇôˆìøh8‚Ö*̳¿©nVåðC„G3˜HgE÷a‡Dùc'ꤖQæË[*&b4žß‹²Êa,Xç‚á«—ðqšM£iFÖ)ƒ´‰Þ>¢’–ôpÍni ÉšŒ³Z%¬½À·“¢\¤.äŽé4Ðôö2ð6ÒÓÑ‚vt„o–Î6V™¶LRŸ|ý=êbåç´,fEY,'~·U´˜¯«bÚŒ+o¬ý/›Ö¦E•ÏÏvM˜©×h÷|£o†fÁ[è-·óÑ£è¯Óвbºk(Âô À§úìJHe“5 û‰”£{ò“ð5£Þñô~‚ÞOÀ{‡%»§V;Tû9Xãç„îüœîßÇÚ~Ž~®uíçM¿±çå[UsŽ>KêŸÝ1[Ý Yêî¼Håð+/UyÿGãäTåÐÉëè+ËS¶ÝA8ã9ºÕÿœèe endstream endobj 2502 0 obj << /Length 712 /Filter /FlateDecode >> stream xÚTMoÛ0 ½çWh7˜Q’-k§%K dE·»4=¸Ž²zuœ.¶1ýó£%»rˆ>ò=‘š'“é¥ÕLI6$Tˆ˜(Q%IÖäÖ ‘H)½oŸü»äóä"™ü™aø‚Sܦh‘l;¹½cdÁÏ„Q¡cò×B·DPI<äfò}2?gR­Â!ýrqq•,/—‹–œ!§ÆÎh(ÁaPX báÕ¦ªóòWûCzi™‡*¯\h³Û»Cîà­}ðLé ðê|Å@šµ >¥û:Ï ã~­óªÞç÷MïÊʲ3€D½ÒñÎMº­>´‘é%‡ã«HIC¦oq+ÆÒFÊ,~xõ K”¿©ÓºéëC8¨/(Sª¯ÿÓoöu¹ðyìÍ|Ôž¸~ó†rÈ3kê‡Ý~ü"ÑÛpAcýu@‰rÇ^Ô¬\°Bxó&ku=æ0F¡€²ú´‡Þc/‹º“(T4Ñ:ŒjBµ ?¾À‚­ÉNDž”³¤i«»FïtªUVíÇÌìKjÅŸÉâÐÝúXëBG¢zÔ™¨a ¸¸Ej(* g'¡»‰8äÕÎvo6foÊÌTn 40Zûع¡ËøÑ”ÇMæÅ›³¸±ÇLÿ;ú¶e‡w–§Ë»vtÏKØN\cÅ-b¯‹]Ý--(o·i¿ã“Õ„®Ñåö oƒZÛÛb`ÅB–Å´ªÓûÂL›Òðop 8e‡\.‚êÉ&›Ìî6ÆjÅŸ(# Z8åUÓ9MŽÏMåÌ^?˜±^b¢Šã¾A¿»ÆÇ\iñúbp-CcvVe0‰ˆFÑËÀ=!N%—=æËód2ê!ïǪ ˆVLÀuøk7l’{Û¶mM…½¦¶ÙqHEˆK#µ¤¢lž]®­Kxîñž¨—ê endstream endobj 2506 0 obj << /Length 800 /Filter /FlateDecode >> stream xÚU[OÛ0~ï¯ðcò3_bi 0 i¬/Œ‡Ðº#£MXš‚&þüìØ¦˜*UŽÏíûÎÍÓÑ»cÎ RÈh†dº šçš(‘‚âŠLçä"B'Bˆèô0¾œžŒŽ¦£?#$Ôþ gÀµ&OÉl5º¸¤dn…'„Ï4¹oUW„ƒJ…=-Édt6:x¹„LÉ~ø“£éÄ…%‰dÚÛ„Q½ô´*c΢ÆÄ ×<:ÌëeåŽ"º‹SåËbž7…UjÅÕÕÚÔ^pµŒŒÌÚ Uí¿Mã·µóâùfÖÚ;”$(,Zác˜|µÞs’wÇ ·‰’fV¿ÕûI)·ÁRåO­~Ÿx zî'MÞl:ÿ({þ9P¥:ÿç1"Fû_¿Œc¦£ýØ¢Ÿ‡ãpRôãìošëª&‚)h›ê„qÐ ;:¨†@ùcêØÁ¨óòÆf‘óhR˜_¦n†b¤ ”ÖÝu×b ¦ˆ”¤RAŠÜõd²Vz󨕵dK¯í°Œ}gmÄ…C kðÓÌÔ%Ì\"Ÿ!aZ‚dÛHhláJÏpô93­ÚAë)KÆl|þ½Ö·Ê7hm¦6åÌ·°ˆ–ź1ó^ŸJoñcÚnš¼X¾Xižö#ý_¡¿ojãk|v8v†ˆ‡!²©ì†¨½4w.»¦tÿÍÚ[äÁ :y}U4u^ÿõŸ³jiÙÔÐÒC ,¤Ûî+*%‘ÊÞeöÊ- Óy½w#^Ä5ׇîñx\aEßËmH’Ýlv'ÑÖ@‚ÐnHA©¢ƒ~)0©È–Ú‡Á4>Ñ@©!CÕGÀ¨gñÙ8ç!Q>Ù¦¤\7µÍ«­¹½Ñ}aYz×Èrd û¡nɦzëK$8Ë€e;$B+×L¢´%Üû JAí®g}Wã7â ”€l'þ{×2¢¯³O˜´¢žáÞ[Ñì[%ÅŽ‘ (CMÚþ—n fÝlâSçº e ˜qo^ù™¨¼—UÞ~†˜6ƒÜM|«ãUÂ{&S÷ž™uLY˜ö™Þmíïµö¦ÝvûŒwÝF endstream endobj 2510 0 obj << /Length 1222 /Filter /FlateDecode >> stream xÚ…V[sÔ6~ß_á7ì¬èjINÛ„$S2´SÈ ðàì bðÚÁ—Ò”?ß#9»Þ˜2;³–>}çî³õêäRˆ„Qb©eÉúCbÂ$ZD ¬·ÉÛ”1b²\J™þñ,{¿¾Z]¬W_V,¡ðc œpÆÃ+Šd³[½}O“-l^%”k’¯ºKÑ…„U\¯^®Îß΄"V«ùõ/.Nϯ.Ö¯/üÝI®8)`+ç”(ÉòºÙº®¾¯šY.ŒHÝß™`©ËXÚøÅ€ÒªÁgíÊm„Êô“ögxêÿ?ôO£ðŸÁî-b‡¥/~~Kr&¼Dg®Üõ?ù“KÎí’’(jpï(YÎ «€Ÿû!fꯇr'ýLÍô Bµžô¿Écéé‹çç7éiŒ×çË÷¢”œßs:·m·l+ˆ§ç\£ÙdÓK¤p9‘:m¶÷à=!Ò³qãy}®ÝýÒšZ°éØí”péf4¤O ¥IÁ„O7bbÃöçX>áò`ȸ#’GêÂ¥¥ç ^#7#¤°Õío×5$D‹[©niѸu@jB="5w·JJÏIU‹äÔB$lŒ"ÿŒiÚ¹®sÍÆõ˜¾uÕʇ™«ðÄ«1–ÆÖ eU7öÊ÷ð¦ï…VfŠˆ Æeá¾Â$ë/i( \€ïîüS§/Ÿ£j”Ûtp]¹ª¶éQZ½¾0¡¤EIÛ!‚I|_gF¥î Aé_>Ve7@« ”\Zg¾-À¢Gø×j¸˜™­‘½¤`4Õsö›wTøë,KùõR0¢ôÑyänÒÝIô·íXoQv“åðïBر …Ò¨¤} ʩʛÚß Uz ]ÌŸïÊzÉ,K‰Tjª­») ]—„"ÒhÔVí "˜ üù£ _«ß.-hp0À6ãÐBˆy—ó ™Þuí ˜»C羌U:.¼…Ž O8'ëñíC! òøz éÝ~ì Ìñ}âTSª Ì tà« Û8\Ûô²rõöI/;Wöcçv0 1 °ý€Ïp=74§¡9õEÞû6óCÇo…¡ãR„†¹ã1b˜÷~îpËæN¸²=ºêç±ƯJ`&B`,Úxê}MY:öcYûÊ¡&º„û1H#/õfzÁl뼓U• î—ÿV;O†EYÇ#­|ÅšÛž ]Ùôè®w'å~ÓËî'í›vw’¾í+_òO¿<¥hF¹Ï:®6eïŽòcæY!Z¦åfãî†)Ë|xHs¶Ô¸†¦§ÄœÄ§¥ƒI,öƒž³%­Šj&Т–âpþüƒ&¾'¼Ðsr<4J•–Ñ?{Eï<;¿Ä§Ô W¦`Ap+$áK˦¬ïû*V;Š|(ÊØã®+˜;óIð~ód8¢±ÎðÛKÐå;þ}þƒƒfnÛ‡ÖÝÌ[ÃØ»%rn¡[M.ü¼ÐÃ)üàdDkýŒí÷‡u%°ï&;BAã]µ…òŽ©\M-Àï@mE‡åÒ!…ÿ¾³¤˜Zì7TÅŒEü·éãâ?ÉŽ endstream endobj 2514 0 obj << /Length 739 /Filter /FlateDecode >> stream xÚTÉnÛ0½û+Ø›D ‡‹(öT»I€mÑ4F/iŠMÇBd)Õ’ÄÈÏ—›RËvè@г½™73³ùäô‚1+¢ÍW(c˜± IžbÉ$š/ÑM€UœpΣOïãóËÉù|òsˆ˜0Š)Pg¢XŠ›ÉÍ‚–Fx‰f*CONuƒ–)7·]O®&³ÃèÀVRŒÃ9»¸¶aQ"à(¡ ^:­òrÛmœ°ŒG]mOµ]¿Üú«1÷²6ß<”Eu矋ʟy3ˆ‚®ÉÏM_¹ˆs)QÜ ä>ÞLç›ö­•ž^PØÏ9D™ôœÞwBXœ@*ýÍé“M‚ÁÈýu—wýàÄÈ?ÃÄ  þ¿ÅM?~8‹iMcƒz~~v<ÃBðqœiß­ëæx"âÌ”7¡ g†t@寨iåªÎX4ë×}©·ÇBHÀ$…Ál=tÕkOeÒðOQ*$Nٞ aåÄ÷¯jÉ —ì(º¶Ú¹çÎÍ-VS5|ÛÇ´Ò¡}·ÐM…øXTégµ ‹Ñ¨AëÔ¸T137r ª8J %Ê0¡#^ósèôF¯t£«…Pm§—¾{åÂ[|íCË/u—å¹g)Eú_êmɶoÂܘ©÷å EXÆ•ñ¸±]Ö]ç&‘šù¨WöLý Ú‡ßƒjÿŠjUŸ˜kQÛ^œ oýÙ­u€—à ¤e‹L\‹I³pˆ_}8¥Âì(%”O‰Ëz'5ª2,Õ^n¦­<¬[‹9ª»õßÀ13›Ü?rñü¸L˜ŒÆ&±0){ÝîÖÔ׿ ¦©¡Tüî®ÑwùÐ,°Ç—H1(¶““ê¥i.ã¤/ÚµO–Æx´ÉŸO7Eu^‹¶Þh¯°¨›F—yWÔUëeO…)Ž»éG;~ÚµP矚úÁUP7]¡[ìA*‰ 5™+ŽÙ°›^¼(â#½ sû M ž¸ endstream endobj 2518 0 obj << /Length 642 /Filter /FlateDecode >> stream xÚTMOÜ0¼çW¸7GUŒígÇNOåS•¥-Q/”CØõBJv³M²pàÏ× J •ª•VŽÞxfì÷©DÒÌâ=î¥`¤*¬<~z3I¿aBÝÝ~àgr„*5ðÿŒcøðëùIÌ5>Œ­ûüôd^ˆ”bªs¸ïêfþ ,%Z¸~ÑŠ ÇajÎTX¦Îœ¦Ø>Ú[À×¥¹7M7§‘*¢´ö= 3ø:Z‘¢T*’2pH2D2_}|E%=,áü¾ñ8%óŠkç’´Áàç¥i¶dé.ò®%‘|ì„ö•‘ôÎÇôÌ\+ÿ'FÊÙ–qÛ§pÿµ¨Ã€6fm³]†ù¸*[7Èã9•aÇ}?Ó+ÓeõÏNC:Uú¿Fç®Ñæ)–).ºÆ?Ûï  ŸÇ Wîß}ìvwE3«ÎÀF œfeír€Ü›M´>òߦkIH&%¡é›¹u9bÛêsć±Áü(Gà5G¤t9âï† ±‹Ö%K¹Q“(Q”@%Vy%,S„ref„«¾S/aËXà|Fð/ê±d" endstream endobj 2523 0 obj << /Length 635 /Filter /FlateDecode >> stream xÚTÉnÛ0½ë+Ø…@ ‡‹HõÔ¬h‚&ik¡—4Ù¦c5²åÊtZ ?_R”\+Q€1ö¼™÷fáœæÑñ%ç(Éh(_ Í ç)‘ÅÊçè€8Bà›³ø!¿Ž.òègˆº àš-Ú˜Œ§h¶Šî(š;ç5¢„gýj¡+ĉJ…³*4‰¾D§oéA0ÂÄ+þÏïò»Ûë‹|âÉQ"5qè„Q"ÈM½Ž9ÃÖÄ ×ŸMU{Sàç8¸¨ÊyaKjÝõtkšà˜VqØlƒcQ7ÁØ,kÛ£B¢Æv¨Mãs3<ßÍÚœ^E W†zNM±Ú¾÷žãK‡ A$;Å}§”;© V‹v$éé'¶°»>?ÈA~N¨R}þo1à“OWç1Óø$vêó‹óqN¤Cž“]ÖÍx!-ü8Ñ úr@‰ f/êÒËhŠõ“ë"çxRšGÓØ1ŽT¥u·ìwo¿yZ‘¢T*’÷‹G2D²Öû´G%,9Àµ«÷Jã0Y˸ð*É6ü03ÍšÌ|#ß(aZÉ•ÐÎs £½Ñ1¬™iÕ>ÁrtdÌÍ)ô? në° Y˜Æ¬ga­®Ê­5óÁžÊñu×-ùÜØ¢¬þ9iž™þoй´yŽeŠ Û´ïÉÍ;pr¯â„)ÿíl6Ó¢eîNïs¾¥uoDÈòX¬VEà: ÉýÛ%áx€”„¦¯öö¼tqß3?]‚º+áÅO«¶•Ü·¶*|/[„­ÃŸvi‚±?ÎY¬cÀÐü¶M§è¯È¡L¹{F3ÂT7‘—ƒŒ…З~Õþ÷ÓX± endstream endobj 2527 0 obj << /Length 637 /Filter /FlateDecode >> stream xÚTËnÛ0¼ë+Ø…@’KŠTOͳuš8i-ô’æ ØtâÆ¯ÊrzÈÏ—¥@JT 0`ÐÞáÌ»œã<:œp4 ¬÷d˜’é*º½cd抄f†ü©¡+‚ SéVK2‰¾EÇïå¹ äý›/×ùõøk>¹¹åùhüyâMDp»Á@I W›uŒ‚V6NÐ =)ÊåÆ/%}ŽSI‹åbVT ªË›û-Cá~'œÚ](Ì7eXl7U‹>D¿lÕ ¶¥çt¶ŸÖœÞ# —î82ø9¶Åj÷ÑWÏïžTJP,sø÷“1tRV5¾3I³¡G?©ŠjßòsÕãG`Z·ü?bÎ9=ºÆÂУعÏÏN‡u”’}£}õ¸)‡ÂS0Ò·ÁhÞ‡ë!SaÙš:÷6Êbýän‘NöÁ–ÕFªAÓî{lgðu™’TiH9ú„Œ@VWŸ^QIK:¸zßxì“ÕŠsïvÁà§©-×0õùΉ0 ”è:aM¥ã£½óÑ?³0º~Š=#‹Á– ×§pÿ5Þ„-íÜ–v= c-ér±«ì¬7§*ìø¾o†|f«b±üg§1í+ý_£sßhû«”UY¿'×ï ‰’ŽâDhÿíl·÷E9¨ÎÑE¶œeÝ‘ª…<«U´¹»ƒ+,}3·>>\[ëøpð6>A0߉|¥||ÔwŒmt`':ÑAø«‰l¢Ã)u£ƒg˜Ð.×XB7y x†ê¥¹¿™S]ß endstream endobj 2531 0 obj << /Length 796 /Filter /FlateDecode >> stream xÚ•TMoÔ0½ï¯ðÑ‘ˆñø#Ž9Ñò!@@®¸ÐÒ]·‘MJ’UüyÆžvÛEå2ñ<ϼ¿™ÓåâñK­H᥶¼f¥Z—Ì™B8íØr;p:Ë1üݳìrùfñb¹ø¶&ñº¦4éŽ×[m_.%[£ó “Bû’ýHÐ-Ó­†/>.N¦£„2÷òxu¶<{3³Ü–¡¹’ ÿ»®Í´âcÈr]jþ¬ê›.š†Ï ë¦^Wc äГãªÉràa ÇuדqÚÐW …¸Í€oº1;4Û!Ñ,ƒ¬ 18 Õvx=_*Ø/Èa¥G|Â]H‰„‘•ð‡ ȧ áÏÇjÜÍñÁÄ×B:7Çÿœ?yûúy¦J~’a1ËÏçÑÂZs˜çd7nºþx!PˆÒÄÆkQ:˜ËwŒ™3©ó1|tâóhÃßâãàßÝúX–|ºJiþ'ËI»¾‹ 4?Ý­b‚¯M¸;–ÂÌ×6³ž«¹t¨<Å b5:ªYx&|rý Ëg\¾L‚¾Gò^¸”´Š\ñmÄÕ%…l]bûtúV$òh)8I~Ÿ–œ\{¤fÔR‡-P^ îT}T&Jz|øîï;”>\‡>´+š ÛzÃúØ€|ÚMÓ·cU7•˜ÆõðOC«œ_ fãËzÍ6É!‰ “*ô—ŽF:“û6Ë£ãž)ͯvÉéù¸Á²W‘áù¶Ú8-ëâIå#„·¸0ºv˜" ¶Ky¾ª«ØJßòBZ9„m£›ª§æÁýÊl!Àkª¬ ·1¸ ¤jO›Ûj%´R„=›hÆ]‡JkB\cÍ!±Ec ÃX·7ôóg÷áÏ®­‡®™Xk›êÂ0i“Æß¾‹ t<ôc†ØE]à:±Þ¦¹›rlº!Э©nîÇ~Á¥ÞXfÁ %Õð£74ØiP°I7ÄGÏ­ ŸØÊiÅàS_“½¯¶‹í:æ16Ž­±VX_Ê~Rð†.ýœÇï·û endstream endobj 2535 0 obj << /Length 742 /Filter /FlateDecode >> stream xÚUÉnÛ0½û+x”€ŠER{ªHÐm"ä’æ Ht-Ä’S™j`äç;äPŽ·…"9ofÞ¬ž“³+Î ‹©Š#Åœäœrž“L¤4ã)jò0F™#!Dðí<|*n&—Åä÷„‘~Œ0žS‘ §£xJªvòø“„7$¦\åäÍA[Âi– 8-ÉýäÇdv잉„&âÀÿ÷»ëÛâòáò¶°ÎI$s è(‰©ÌCú¦ y˜0â9Vƒ;ˆ Ä{=´¯^2G.+‹_à«þc/úÄÌ EkSvuÙ×[ï`ÛÒˆIÄÈ`¦ËvýÙJή¶“TÆ ð÷3Žy±4ÓÃïç ò {æïMi†Ñ>“{ö9³l´ÿ2Æ‚é×ë‹0Ƀi¤‹Ë‹Ó~8•Rìû™f±êOÂRš ›xNóŒá°ì)<ޤ¦]½r̆ÊòzYêÍ)£qÊFµÅØlÛVË3h‹„¤2£)ã¶Õ¨"T9ñ˸hèºí€ä9ç´´\!kôyYl3ÇöK¥ûŽ:òG´Å ÍÕ.­Ø‹vH¨#Rû)H§ ËöI5' ˜Ä *¡|Eyëû¶×sÝë®Òkìçe³6ºÞë\‰wCç§D›²Yþ³öFw×Óÿ•þ¼ì°òÏa¹ÓxÖÚNÁ[cø@lð&ҢݓA¹±¥ØÀÃGSŒ„ª\øüúÍ%m ) ØŽka´úµÀ¥[ p÷kÁJæø5 ‡#ÿ)l‚;"b±§ÞcݪØU6ºo›®\ŽzÛ ‚`ƒ|ÂKÓá×ó©VΟwÝXï*0ËÍ6Öü V™R¦8ƺ°ZC‹é–@®¬Ëç¥g4_õ@¸Å˘r iüEíbWÁkÙ›¦á]Ùº¾È–b]7`Â4«n7jùõ°0dtÈE÷M5>Á>ò1º>¨õK¸¡þ*RIRFó$ÁÞ±ðLIlŠ÷qðþ•Ó›u endstream endobj 2452 0 obj << /Type /ObjStm /N 100 /First 952 /Length 1679 /Filter /FlateDecode >> stream xÚÝZßoÛF ~÷_qŠî'Wd]ÛÙlCÐvOElGMŒdr ;Eóßï£l'uíD‘•¬Fæu<’â÷‘wgÙ…•Q.RÖ²I9¶"° Î)6QE ø *fÆ')òN²"Š"«ÄTvy!*k0 v3¬¬b'A`q!‰ ZÑK䔥DòʦÜHAÙ e¶ˆËä<`ÓÖ{ƒ_L€” 9y $Ž}s &cn$LM^rs‡É+oÁ. F Þ™ˆ;@Þ-ô³òžý¤|`‰#*O¹°Ð"„Ì– d%V>9™Èd'áÍç(£ìT0Ù ØJv=Òa’t°Wñˆ„Á`%L*DQ’øÎ 7ÓXÅÌä†3¬fÉ ÞU4>i6ÉD«¢kle‘‚$‰ÁˆÏ p£„á€.!{켊ia‹ $9ÌÌFÒ˜¹ñöÁÛèGENô£1ú¸æÄ¢Hdd‹Èˆ£Á³ŒH‚FÄtJ,XÁ eC’©L†-ÐÌ"Ñ.¯äHDòÂN02EP“=®àædL. ••¨±äàˆa?(+C¶2KÔ0ÍÆJÔ ís#D€”°`°p„{öY|#³¤¢pHÜA‚înebu2ðb!Æ0“¥¼„éœ]cŸU6Ñ£lœ¨FV¾H>ñ–ÉL›}“Y¸Ëà÷àà`P¼¿¾,Uñªª¦óAñîj4o¾ÿ9©ÎÅëi}RÖêƒAq›ãAñ¶ÏÕNS“<«McNÉ—cmZ¯ÔÁ*Þ©â·éû©*Þ¨F“‘öGõâů ¯ÛÝ ¨µL=ë­²l´°k´•㯢U·~ÿyûÇâ퇳ùüòyQLªÙå¤.:+/uU΋Y9¬Çg¿\þüqR<;/¯ŸxçŒé¢3I$8rÐÒ}¼‰šj&GíS|Pˆÿ'óéóQy2¬N‡/ëñG=ª.ôéôS×|e«Ñ8P€F#årF¾P|V£”ºÄrVV'õä\ŸMËùÙËqYWz|öe4opë!Šû·ª8œÌG98£=¾G#N>ݧÑðéFápZÍ›ÑóPF EºÇBF÷³Ö­FP”¸°AkxeUa­_Ì‚ñ⨞Žß•H™*ŽÞªâ}ùy®Ž×S}4<-ůˆ¡¬æ3Yfšù’ìÙôª—³ÅÒÓ\û«<™ _O?/ ô4Í`5g$þhXÈ,)f¡ßà8ƒÿf±“°šÅn)P#o…¾[.R~[¡øL”î.Q·k‰øõû¦DSÐ6ÆG.Q&ƒoǪ k´ÅR½¬ ®±{‚ªàÖªà{ªâ–ôߌè”6‰N±7ѱ¿YðkÑRߌè~¿‰žŒÏnωNÔFôuý#z¢M¢§ÐŸèyÉïdV‚] «Hþê?‚Dš±h< ÿžVeWþ·ý˜´ÅÙb'þ]” ÜpR•³—×ËR—'W»n††77Õ€SœÆ9òQ«áAØÅ&üqœ•DÇXù#¶²8uÁnXž|ÒÓú´Žf…ÉH7Ž~×€,6°Rt«€\Мz„-±GYlô‹ÛúźƓõ èɯÖ÷ël¶tîÝ=RêÞšÓ*-£òpäãJà˜dPxÜ…êëau®g“ò´¬çw6þ”[Ìmûþu®ûþuloQß˸‰%ûÞXòªï³ë*%´u Q‘LÊá,GM¢¨Sîtœ›Œê«q¹këâø@'¬œ*­öòû ]èǰ:¹Ö£«ñùEy}'»8´±k]ãAmâ.Â|Ý@e[Á[ŠÜÿ È´scXQhÙº3èa[>Üýèã¥W§›.ð-ûå·`dŒ;‚üe÷$ȳ߄<Ûnç°y6ûyvm¯k|GóÈ©?äqï!O­§ïòhÜäò´¢7äyÈ—‹ò óÕ¢Üô‡,Êòäæ~Ì¿ÒxÄEyw´h Z¡/Zò(j¿ T›µ÷z­Ù÷‡.í¡åVìò“a÷-Ó†M$­ë¤µ{äMïDr]ãÉÜ;Þ‚]·N´y»}ßáÈsþ6èÒ£A·3> stream xÚ­T[oÓ0~ï¯ðc"ÏŽo Bˆ®ÝllÒØCHÝ54K¶ÄLûóØ9îh¶"ñ€"E>>ŸÏùÎõ0›3†(Á)I)ÊV(a˜±).±b eKtPŠ©#Îyði^e'“£lr7¡ˆØ"ÊÌ>¼I™DÅÍäòŠ ¥Už ‚Yš Ÿô1¬$·§ -&ç“×î)qÌŸù?ŸÍ÷xU–QÿÇ«â8Qc§ŸÃTÓ ÷ÏÎNŽŠRŠ‹Q,8à{]ë¶,ˆ%,¸Í[ÓÔQ¥ïCºr·6kMíD£4ËÛªÍ}(yWå27¥ ê¼Î«‡®ì±jZ¸~óõ-^â‡6hQnƒá@èPç7Ýk§98ŽénœœcAR‹pßaaD¥‚Ó€ç%òFæ&7ýÖ>#û ¥¶ö¿„”Ò`úñÃ<Œ“`ZêÙÑ|¿†…àc?ÓÞ¬›v TâÄæ?Š™­݆CÕ>RpÜ’:v4Ú¼ÞØ$2,J}­[³Ï‡TX%ÉöÝzÛOý—pÌ%’BaI™k?œ"œÚÍ*ò°h74à3ŽccƒÇ•c‰; ø®Ðm —ÈLâD`ï2!^³ÃÃ^ðÇ'jÿ‘roÉb['È? NèÎV¯t«ëBûþ­ÊÎèå¨O¼¸è}Ã/µÉËꯕfrìéß =­]² Ì0;Œ³cå?³C1‰}Žüêv±Ôúº±VÎêêÁm>é'»s‚Aô¯¢ê—e} zÓÜ‚î®ÏÛMgy«AaòM«@×p_ÖN2GÙBƒ¢éÚÆ¿ðÊÂ:6m_øën7^´4lŠ[çY,Bbš2ˆ¥Ów½+ vÏD­§¾ƒŒ˜uéO;ëÇ&¬Èk¸þÚ 4}gK hËA¼~Z†Ì-7!GËÍùi;M"l7‹=i0s)˜{»…)ïK5´=â«•*[/eFÊ1ÛNþ#<¡©[Û ù ¶u£“ endstream endobj 2544 0 obj << /Length 987 /Filter /FlateDecode >> stream xÚUÛnÜ6}߯Ð[%$bÄ‹D±/í:—¦AZ¤õ6@‘(-Ñk5ZÉ•¸6Œü|†ro^Á+^†œsfÎ /V‹o8OhAT¡h²ºNjN8¯)*"¹LVmò)¥”Ð*Ë…éo/³Ï«w‹×«Åÿ šð£ å5µðg¯’f³øô¹HZØ|—„«:¹÷¦›„Y õÉåâÅÅc÷T0ÂĉÿË¿.ÿvn“¼T„×2ÉYAJAq÷c¦ªT÷]«­Ér^‹tm3u›p<ìGæ.ã,5ƒû·YNÓù9ntCÓoÛnXãô.«Dª§Î™ŒÛ ìðÚÞÜÚqˆGÜ-ÑRÃŒº;ÝÖFϳG[!+ÀN Ö £7ón÷ÅF‰ AÊBAh¼Ý?EÁÁ}%qä핇G×_Zm·ñ~ZÝÏIhŠ3Jiº|ÿ뫌Õé2ثׯÎûá¤,űŸåÖÞŒÓy"´"5¤&gœÔ’F:Tž…Ãj9´BÎÓ‹mãp}éÍÃ9’’¢¢ñØMTäNµí°¤*%©(wz$*!ÊoÙ™åÑ.?0ô’<yrwªVˆ¹r´Ò£ý¹1Ó@<øG°˜¢P êV¶@E«G ŽCÀ'ŒÊcPÝÙ²BA&TÈZþ>¢V'sm&34&J¼›­iQ½!å%žøs”ß«»þÉÜs¨ïCOß—úP¤Ü)ϸÚÜÈθ®mø.ÖA'®Îט‡à£>òÁ¥ÇœÜÈ,‘DÉ›”йj`J¤ €z­tT÷fÍÖŽÀ¢)-pþ‹ùˆƒ>€{•åÈÍiïºÙ´$´ h’¨€šA-“Ò‰\³¯ Ý?Ì …àéxß}›»6-ÚEP¹6£'>øÚƒƒ÷o_>Gó+Яž]¼!ñxÿ€ß¥»ÇözF÷fºïÖÏžáæ]VÊÐu»x@G˜ŽÀg‘¾)eYª8RjFŸHkð3“,¯ –~èGk=Hªž|C‡žmµC }þö¦ {C{6屨 . Ðבϧ ¾C{6L‚ºOéŒW³™ &ð¸€ö^À3¢¿'ø6q£§u$h'οDJ½ž˜9íæ±×»z> stream xÚ­VYoÛF~ׯØG*-×{q"ù@âFMbíC’FZW„)Ò%©¸Bþ|g¹Kƒ”§ òs|3óqf—éìä‚sD 6ÄP”Þ Í1ç)!±â ¥ô>¢S5…Ñêtþ1½œ§³fø£ˆr…Žá­w³÷ ÚÀå%"˜î;ÑâXI«]ÏÞÍ–ÝSÁ0GþÓt¹¸r~Qœh ‚1#8Ôߤ˜keeVš¼q;ÝTµ?nÛOYX6í~“ÏcÙ9šÎ A1à]x[K›íšßÜÍÉ£C`Bà„ïä>ÂÁT~ÕɉƒÂÈüu›µûÞ>MFö9&JõöÿœSJ£ÅëWgs¦£ÅÀ§çgÓ~8N1ö³Ø·Ûªž„J¬…K!ÇZÑ>¨ï(¿ìA½´å¦Îo!—œG/«y Ðl»r¢ x%{Åm쪮 UVH& KÊc°AØt×·bq/;ÒÁ<2çz´xûôÅÚÖ%^»Œ>BÄŒÁ ‘p3€„¡ÇÎ Åœè1šÜÓ—Á$2dÿ{’¿(7Ÿùå¾ á¶°‡ÉÔSL$ýz굂‹!Éá[O¤>ÈÅÁ©Ô™ëœf+PÚÇhU‡öéüCÒŒš,€—zjœf8fTA… P¸K †àÿYæ v?Ö•ºaV•Ûß7S¥ˆƒþøZå>OYá‹þ{æ²xïβ®';S˜)>âÖ•ï|µ½±µ-×6tÇ"oZ»™ê€WûÒ«ll›åÅW{‡>þ¿â‚•‘=ùà\RŠPä‰DéŸù\^8ÆtM6oí6Ïä¯~רÖ-’hu}þú¹ô‡@2ŽÐìßà\€öôÒs&ÇŽÿ )lñ kj`N™Äø¸~ùVPœ@G•|lÛ¡{gÂ&ñ0vŒGñÀÀ!ß„”À|„)>2¿±ëŽÀ‡Æç­­úìîò¸°wmUéº«ë™ 4‚èç<ë¸BëH`ò'ÌÛo·Ösuu¶:5ªk¨LG]h"Â?ù+p†÷›¶ÎÊ0¢l}Ÿÿ}r™ïv]Üþ´±…uo€uë÷¯Þ^¹Û7§Ï©‚J†> ­[ŽÛtºíž áÿCt~{·¯ûÀ«Ò™jCw8Íê¢ Náåüßôç}‚, Þ@Ü$}°íä³»ä4“SÆb‚)T*ˆNTÃÁ}Wûá¹Ù¯Û¼*Cr$é¦ ¼ë°Ö•_|pÔhÜ—¾ÁÿÈd endstream endobj 2555 0 obj << /Length 788 /Filter /FlateDecode >> stream xÚ­UMoÛ0 ½çWh7û`U_¶¤–¬-ºb+°5Ë¥ëÁIÔŨcoþXQôÏ–ì,N”b†l>‘ä#=›OÎ.9G”`M4Eó¤8æ\!),¹Dó5º (ÅT…‘"øô>¼Ÿ_O.擟Šü(¢\a¡„½£y‚VÛÉÝ=Ak0^#‚¹VèÉB·ˆc™8åèvòy2;OÃLÄ_\±Ù¬‹‹¢XaFŒàXPgJWa!pL4à-î!"%Ò,~œ`Ô_¹¿mÒ¦üÓxäŸc"åàÿëÍ"¤”ÓÎC¦‚i¬ççþHDZGš¶Í¦¬ü©Ð+Ñ—c%é•>Zî8К™®€œ·Û´j|¾ã>À7ƒ†v ’KÂPKœPÞ)k„µ5?î`Ñ€‹ö€VDäÜ٠˺ãöneª¯ºÚ±`Bb&Õ> Ò›ö8 ¨#ㄙИèdÌ!s"¦`ãZô•þ—BO‹õ³«ô¬µI<ææÙWo¨Ièé‚+ ãâ0‘â•‚÷¸hè+ø;4í¸‚<ñ²…©¶Ò²}µšBaô>-_zÔ©ƒhŽ•cR™wRÑÐ=–þMé–BeLeŠ•©ÝâÈ3»V<[âKÛiÒ,?9e<'§Ln>ì0ÆXpå“ c˜Ëò)k6>LÀ„«uå¥Ç°VñyãeÅaÍïb-½[ 3Ð>³Eí3d‰Ï|TÅøƒôúS˜Óo–›fcºC·ËAMfÕ”•3ÀЇe]ökimVi§¿ç ”X|w—šÒM7«ê\ˆ`Û¹l‡·V½¸œ…ÉkÜÏ14_19šãE'ù´ÊʶvWÝ7Å~Î]Z¥«ÆTY9J»„àRUÚ@tµ·‘ X&˜_c»Pòÿ×Põ× U¯ø‹bøÎ cAb}qÙS­]^†ñ*ý% endstream endobj 2559 0 obj << /Length 666 /Filter /FlateDecode >> stream xÚTËnœ@¼ósEtf¦ç™Sü”lÅ–’]%Û¼;ãÝXG–>ÖXЏ uMwU?êx}J¼ˆåÙé|)Å´ÎѾ~Ø•óB˜#šÍ@0šõr˜ž#~{Rç 2Û>úf"Æ‹Üýte=WCiÐf˜ûCÃB%5(†Í€%`Ûèã€J;X:µwpÀq𬭏iXB~^¹r «¦‘o˜p#Aò1ÚEF<:ÐSÍÜèÖ&DòÙ‘q?§Ðÿ€ºÞ…=-ÝÆ•n» —&â"¯j·nוv–áÅ·}w¥kWgyñî¤QM+mÞ´ëW›Ïo…ò‡Uý¶á—«Öèíb›/U^A¸3¿ŸÆN×­1"?ÖˆüƒÞˆ|–çDª‰á`DR6FÔ¶{‘ qÝ›ÐTGÊê:PÄÀ0{`BÓ4þ<ñûÃÁ6ö ì<È‹žxò·ë­šZປìk€sJCs^û•ýG‡Ì endstream endobj 2563 0 obj << /Length 663 /Filter /FlateDecode >> stream xÚTMo›@½ûWì1ÝÙÙÏžšO©QS©5jNÄÆ c·§ªòç»°€À!RÅifß¼™yóÎÒÙ»+"†wÈÒ5³D–©ÁaéŠ-"DxÍ8³ìO“úÄŒ–þoÃæ³/³³×åQ ò¨þ÷ëËt^×e‰²àÁAI Ñ›Ý6&Uyœ¥è<+7»úWFϱ–Q¶)VYUø¤&¼»ßçeÜoâ£|ë]Y—ð„ô@ZjÏ9PisƤ ´îSS0ä'¤º ψn¹0“p ÐôpwÞIhég^µ|•u—"Z–MwÍx„tà ±¥‡“á,ÏžöïC%ÃJR‚⮫tË9yfÚ„¿ fIû`?¯²êÐá£ápc:üo1"F§Ÿ>^ÄÂF§±o"½¼˜®C ”×9=T»rºÔ`e­ k°kÍ©ðÛ‘ºªi”ÙöÑ“(šù¼¬¦jhÆÚîÝCwýX ^'Zy½ ÕGŽk¢}VÒ¦%ƒ¼æ Ž8ŽÁšŠëš%ìÁ˼ܲä+&Â*PbÈ„·‘6éqÏšÆFDŠÉ• ¿§0ÿõytZæë¼Ì·Ëpg2Úû*_5råí‚UxñõÐÞè*¯²bóæ¦I+ mß^tÞI[L«Bû{©ž5´×FÞ,¶Ùæï¾ØC¸3¯OëÆr«mÈo£±!ÿ ³!ò+=²!êmH©Ú†šÑÐÀ‚Žú°Ö›¨<² #úÝ‘aü-ÒÿC€³8t D½Që@¾å‘¡tÆ5w L»Ù—ð@p /dÿ-ò…z endstream endobj 2567 0 obj << /Length 762 /Filter /FlateDecode >> stream xÚUËNÜ0ÝÏWx™ÅõÛN7-ÏŠPÛ‰ÊX„¤„L; T?ßë8’Lªl,ûÜ{Ï}d³w'œ#JpJRв2sn k®Q¶DW¥˜Ñ8BDç‡ñMöyvœÍ~Ï("ðQD¹ÁˆÖ&å -gW7-áñ3"˜§ýi¡ˆc­œJ4Ÿ}›솧‚a&Fñ/¿dó¯g§Yvzñiîâ£D  #X êQçë*æ,jlœH¡¢Ã|S®ÝQGϱQ^˼)ÔÞ­ok»ñ·¥­½Íj½qî”ê“bLA¼Û@#Ò8Õ¤…À(”P¬¤ò¨§Qz˜H¸y…Õ¿Ê¢iŠêÎÓªù–MQM‘¡D`IU s9†c¥t€\M¹áÐ2P2š²èš0=éNbª·àÏtÏ“üi›Ú·„HŽ (‚KÑy~v=±¾3H†ˆ›?Öï}XFûa$JÒöš4•ö§ šIg0p?oòæ)ø§ràŸc¢·UúSJ£ý³Ó£˜™h?6<ÊŽ¦ãp,eHTzóý§æ~½™N„*l„›VŽÙP=ÅɧÇb“WqÂ9æ…½³›f*„ÒXìîÃ’nWz#R°]ÜÆâá´}}Ø¢’–ôp펎8µWŽ%®=Á »©ðÂÕq‡ 3KÖgBº—´Ãc˜33ºÕª‘b²c ÆÁ—¿‹ îŠkWvc«…Û9à¨,êÆ.§æôûSåM–¶É‹òÍNs%Þê´y»Ó6Œ6› …ݎꞇvõàVååߺ¨±ßD˜O“óuâípâè :qt^žc©úâèî:q”2ˆ£»ÜŠã(c@âÅH뉣ÄÊ8mÔZ´qgôµ«æ+¬§Ž@ÐF—@ÐÆ!£àçÁFÒ8ŠB±¡f$C/ œþocN íI£#ºç9†þp§‚P|ë[ÐÉ%eÀFE¤óЦg„y/a}þ»¡Ì1 endstream endobj 2571 0 obj << /Length 684 /Filter /FlateDecode >> stream xÚuTMs›@ ½ó+¶7˜•ýÞÍ©Î×L3IÓ&žúæ@쥡ÁI§“?ß]<àñ¯ž¤'=IGËàÓ¥' Ñ2CŠ¥ I&@R‰–tb „D1c,¼<Žî–çÁé2ø`”ØF˜*`Šu>š ´Þ·w ÚXã9J€j…þvÐ-¢ ³_º ¾GoÓcF€°½ü«oW.-й‹‹Iœao¼¬Êˆ’°5QL Óº¨Ü' _"Á´È7i›[Pg®îS{Ã}Å847dUíRX>ḃ` ‚ KÙ3é1SΔ¥ÜCžl<VEZçOÜ1'”Ó Å˜YGæ±G&Ý6‡>&Á㘌Oôóg’PKVHÿ5Ã!î&áoÚ´}âc>‰O!‘rˆÿ#‡‹‹/'Qá"²ýXžžÌç¡Àù^‹çö¡ªç ÁÂ6ÇIFAI<”ƒå)ÿ9:s4ê´|´ ¥4¼ÉÍ/S·s9„©v< º›OÅÀJ(¸•S7ž èÎú¸CÅ=,áºÝã8 ÖeÌKh<ÁÏkS—°v|Ä(œŒ™$½eÄ£½á1­™(Ù-ê„H>+±:ùþ{Ô×Ê|m2S›ríW€…EÞ´fÓkÒ Ì½Çõs¿>Ó¦yñ®ÒTL3„Vï ½šÆÆKõa6 Í„öƒÌ–°]ÚÍûG?R¿MÛ€¯´½ýäC¢m![ëpåÏîltý²î)›¼Í_œÔîú¸+TySûÐ?Øk`­ãkÐ=WÙnåÿß{xS•‡îÞòp‘x¸.äÇf×½)»^pcžÒ:mMñ¯«ïUÆ`M}eîîuΫ®)ö.–›þ!ö½ÁZ‚íª]}Í€;üêAÄ&çö:ÌúÉòyê endstream endobj 2576 0 obj << /Length 765 /Filter /FlateDecode >> stream xÚ­•ËnÛ0E÷þ .%š’¾ÔUó4ÚÍ"ÍB±åƈc·²“¢ÈÏwDJ¶¨ÈÝ$ðF‡¼w.‡Ç‡ãÑÇSD&8ä<lŒG¿G‚qú &ÐrÊïÉѰÉãèæ–³)-ž3˜;öÇ—>2k}-ØÕèëèðµ¼P¤êé__Ÿ]z]–iT˜IZ‰°z±Z¦(“M™fè09*ªÅªþTÉsjTR,æÓb3§"¿¼º[—UX¸[¤™HÊuX˜­ªZ‚ ™®!),eÈs°ÒÔP·[<#c¨·\ç¡êCS' <—,ë”Ý "e©[¹r@ÎÇ|H-:†>…ÃHî—vȘ¾kðvŸ'Õ‹@ñ~–Ebœ¿W dÜ ˆZ°RîÑ|Kz—…ŸŒ_U=O2™>MüùAD‘ƒCÍ2¡h³ Ëâqý)œ+E÷\¥@ó|×§÷$Œ _>²fCtüÕ¦Ø<µç À­mÏÿž !’ƒ/gÇ©tÉAJMŒOއu´V±ÎÁÓæ~U 7" 8U¿@gEÛŽ°C¦Âgkê´¶QË 1¹š—?Ëj3¤aèfk÷Ý·ÄÙòÆ) 5š^¦À73Èýêö*kʲNNÏc|˜WœÕ.a ~ž”Õ&u¯œH§Aˮެt|4E¯|Ä=Kg=x##óÁ+“tO!ÿPu¹ sZ•³²*—“@4•,æëM9õãÊ› ÖaÇ·§††ÓrSÌ{oM¬Ô¹h·ÿ¢¯i´1o9Ç--H‹me±,×ó54p§™¯o¬;[5Ý)zOwT[ºÓ=§ÚDtÇ-ݵ®éîsÀÙ{¦£ÿ¦>Ö„ébM€C¬›"h˜ ÒEÑ#{$§é ª¹˜ 9ß³ØýS8ìý?–šˆ©½Ü0dßÂ쑨M32¬ù>Qø¹ð\§ÙЏn 뎸Kð¥ImÞËKØ@/LáK ‚° „ endstream endobj 2580 0 obj << /Length 925 /Filter /FlateDecode >> stream xÚ­V[oÛ6~÷¯à#…Dï¤úÔ¤Më€-ÆüåA±éZ«ly’¼ èŸßáEµåÈØC 6Ãsù¾ïðð0·óÙ/„@Œ’‚ Í×È "„EFjb„AózÄŒ.³\J‰?½Ëžæ÷³»ùìŸC> 1a‰´2ÄB£åvöøDÑ Œ÷ˆQXô\·H£%¬jô0û}vûžIXgø‹ÅýÝüÁ£\Yž9§DIÍŸš]&8î]– +𻲭¿”øßLK\ÖÕªì+p ææ¹sm4<×Yΰë¢aÝ´éSFœ¢¥Ò‘Kò¹¤04’Dk â UD¯«ä5.-¡Gù‰Ûã €bªÎMÀiBE1…6JKfÅî/ÊÍ1CèQàÓ%Nò¬’ž—À ¥?« @\O€b8¿€ù#µPÇZ„θŠÝô·ëS«ì[ß`¯ËÐX¡3+ˆ åLB63ܺrÛ½‰@œII-Ž ©€fÔ&®&ˆå)`”þ¡/ûß©Q~A¨1Cþ?3ƾùõãûŒ[|“ˆùÝûiA”’cœ›C¿iÚi!L+ý•Ä6ÈafŠT\¤>xm¹ûÅ?Tî³kû) Gmí·fÐ÷ d%Ö ®*~‘‘"X¿|÷Ê“[~âFÐÇq²€¸ö,I ¾]ºvG–¾¯˜p«ˆâ§Lh²œðHN¯xŒ5skÂ(©&ŒÃ9ÅúG¯ß𨧭[»Öí–qÄI\W]ïV¡]i:`#þ8¤ñ¸r}YÕOZè1ÒÉAÛ˽€ÖÅ08Æåæ†p#Ï«Ø éª Ò»²þÚU ¬¡â4]Õ§¬ñþ–íç1Jô/wé–À(ÔãQxŽ/ðKÕob³ú¶MZÀC LS c[§Ûû-pª¢ÿ·a|ükbK« endstream endobj 2584 0 obj << /Length 795 /Filter /FlateDecode >> stream xÚ­•MOÛ@†ïù{´…<ÝÝÙ/÷T>+( ¶±Êr‰))!i‡ªâÏwìµÁkœ^@¹XÚÙyßùØ'{ÙèÝ"Rž –Ý0‡€è˜U,Z–ÍØe$H'J©èl?¾ÊNF‡Ùè÷H0N?Á:PNÕwR4lz?º¼âlF‡'Œ¦Žý©Cï‚5оl<ú2Ú{)/”©zúŸ²ñçÓã,;>ÿ8® °D; ‰ä •ðag«eŒ2*ó8A‡Ñþ¤X¬ªO=ÄFE“Å|6)çT¯®×yá®q"¢|ínVE%AÎL×™Œ2dÞ{jb¨lH-÷æŒ1TdªSµÓD…-žJ–tÂ.‡‘šª[¹|@ÎÇtH-HCŸÂa ÷K;dÌ.ðj›'ÕkâýXˆqþV] ãf@Ô‚•r‹ækz¡Ÿ{QoƎߦŸy٬ʯ¢Z0Í6Óz±êÍD‘‚CÍ¡(›òöòÉýú½’¢+¤hž>WÈ‘–ÑXÿ5`,i.éÇå¤Ü´ù…ò#pkÛüßb!D´{z|KíÆTDvx0¬ƒ µ uv7åíª.Dpªz’Ί¶a‡LùÏÖÔQe£˜,神ˆÑxžÿÈ‹rHÃШkïݶ,z"‘S@l4=Uˆ eÖ§wOQI–tâjõ<†ÉjÅ›Ê%¬½ÁÓ¼X´jä 'Òiвë„7'MÐ aÍÒÙÉ‘ùàÈ$ÍÉ÷ßG¯üžùM^äË©GœŠóu™ÏêuåÍ€µ¿ñuÓàq–—“ùbë¤Ñ„JA»íƒ¾ ÕÆ´GØniAZl#wü*4O ÒËÉâïz¾†ÿôªv—­â?Í¢æ?ÝhùOibmþãÿµ®ø_7;ìïUáýõÁ'L|œ¢qX%a…:@½PÞ,Šû9MzPÍ…ŒMù6Ü…¾è¿Äaýÿ±Ôt€¨Ûë€Æðë›ðŒþ@Ô€¦¥Ö|›VÔ{±ãWª]džü´lù-ß™ Ï´ËÍ‹zô$7>Çc‹ŠßÍ/˜ endstream endobj 2588 0 obj << /Length 697 /Filter /FlateDecode >> stream xÚTQOÛ0~ï¯ðc"-ÆŽíØÙÓ`€44&m­¦IŒ‡Ð¸MÔ6aI Büyξx4ÐIS¥êrw¾ï»ów>[ÌN.… œÑœåœ,VÄ*„!ZfT M%¹‰8§i'RÊèús|»¸š],ffœ0øqÂ…¡ÒH&Yîf7·Œ”¼"ŒŠÜGŸº#‚êL‚µ%óÙ÷ÙÙ{x.SšÊ7ø¿æ”$ÊPÈJRF•ä>‰0"*šbûÔ×½û’ѪíÐ}ßµ`¤ÑÒö=z†v(¶˜µìÚàíír¨ÛÆÃ0’p „$"œÙb×t‘“Ë”r•’*–C¾Ïû͘ˆži´|þ´·d<0)?Šaês5©/(Ó:ÔÿsΣӯ_ÎãÔD§1°^\œÇT)9Å9ÝUÛo„gÔH7XAæ¡®‘B3º.:» Í—qª£*æŒÚ¦²]w .wš¡Dä”2MY–‘LišqáäDsBsÞüMKB^rè5%ü¶œÝ9Þ´_ºQV‡|? û¤ìl_Ú†–ö-5‘Ávdù!56†ˆ…¬wĦc™¢Üè)±úè…¦†Ã åã aæ·¥ÛÙ•íl GUoë~°åDÉ OüØ7x¤´CQoÿ©+zˆôR˜ï롸ÛZTn p‹édñ„~aÖn©§È)Kǹ™^E”_Ð;§Ú×µV|,ªXtUô¨³v³q·hí}ݬ1¯]aÚPYt„¥3,=„{ˆ‚Ã/>>8§Ž<ÝýÎý#Š1±(Ö¶±]áFì?íƒG÷dž‘gÑ”¯|—¡E|\•Ê(϶µêÇã!„<¨i°&Äë¡Âè=6ß×CýàPmt‰Fc×… ÉèÑÛõºÂ‚ãäsØ‹TÃk‘K*ÂÚ?c X<úVà3ìz§ endstream endobj 2592 0 obj << /Length 872 /Filter /FlateDecode >> stream xÚ­UKoÛF¾ëWìq‰„Ó}?ŠjçQ$H ´r¨ë#­l"”è’”ƒ >Ã]R%e&—¤…ö›™o¿y]®W¿¼‘’pžyNÖ;â$HéˆU¬´d½%7”s6Ë•RôÃËìvýnõz½úgÅ Ã'\:PNE/ ÙìW7·Œlñòa ½#_"tO$X£ðT‘ëի˧ṠÔYü¿Þ^Ű$×— Zñtù¡>dRÐ.d¹t’¾,šªîŠ>fFÑ¢*·EW"(^ןÚФ‹OU–sÚt±«›>ò1S>‚[0Ê åÄdÀÌ8{àΈ›%/õÑ#"  ¼e`€I0¯}=[rƒGî$É'¸Á™b?sö7cl‰¸æÅÌÝmã¡é%t{ÜDé¢öÂ00Ãs…T2¸ žý59|ê\)Ðì$ R(·±é´@& f¢;Žþ¹žù—À¬ýÌ8çôâýÛW™pô"ÃG¬_¿ZŽ#Ak5sqìîëfù!Ü€S}ÑIp–Ïáv‰T:ޤÞô4šâðÅ”’^—á.4ÝR cÁ:7ÚÝ=vê0§‹Ðh,F.ûOÀÇÛÏ'T>Àò .¶Øǹ³q׳„6ümšlz!Ÿ0NƒS&l¸™ð@OxÌß,œ£fF¤\L™À<%ýêªNuÚ„]hÂa“šXѪl»°åʆëdñçqÛÐeõÃLK34I´ûq¢‡.äfÒ…˜[è蹋 µÔÐBüÄÕ¿ý<Ï,žbCYO´GŒ#ë=‡¢úÚ–-à0׌^…°í•“–î‹6ž Ý»ôW™ø[…‡nÁ½X4?- ÎMbû{ø˜Æ(XöÚÍçI¿ÄPŸ¸ÄðIãC»ÇL›Ù“§%¦u¿ÄbíËÉ;cín`u¶Àæ”áÎØÜ ÎZùŸ‹w7ÿ[±?mÛ$D\^(æ|y9°(v®°ä¨ú·d ˜K²§Ýwc‘t endstream endobj 2596 0 obj << /Length 1134 /Filter /FlateDecode >> stream xÚ­V[oÛ6~÷¯ÐÞ$´âxxçV`Kz¬Ö}HšÕfµ²Ér†"~‡9’£$0ˆóãw¾s%ç³ßqž%–ZÈæ—™á„s“i¡ˆæ:›/³ó€0S”Bˆüýëâb~2{;Ÿý5ƒŒâdÀ F„3–«l±š_Ðl‰›'%Üšìï]eœh%pÕd§³?gÇ̓`„‰ûg'oç§ÞnVJCX2J¤€¸û~³.8Ë;W”ÜðüuÕ6¿ùm¡D^5õ²êj…íÍ—­kãÆ—¦(!wÛ¸q¹i½ ¤†‚h¢„BÍQJÂŒD[Æöˆó)Ž’=Â%FŒXM@Ê-¬´ôbŠ—`xVp‰LЧÈ>SJ§„B-Ñ]Ä`¼ˆü꺛ÖÇ”åËÝ"Ä2$ƒ)J”F= RD†cW­¶?Ek †Ö„ ’îㄚ8Æ_鸚PW¦#úÓ®êv=?È?'TëžÿSùÑ¿¿)˜É tbþöÍ´N¤c;G»îzÓN;Šá«£¡wô”¨¸ìE½ó2Újý ƒÉy~Z»+×vS6”&Ú˜þÜußuûž3‚`U*‰Õ Ü·±±a÷ÛU&X9À…¦;Ð8& /½J²]¸vM>”0#‰dC%4í t$ÐcŸ™ÑaøŒ„Ô“)c˜§ÿˆú°‰uÚºK׺õ"vµÈ›zÛ¹e(Wš,㉻4–®«êæÑLs5¶4H´y<Ñ©-A ÚRj&Z|L£$¦:œ±'¨î|œY\aƒßi‰³XZŒ‚2Ù|4`!š¾ÑqU­«æû¶Þœ÷Ræœ[¦UµM«Å®‹‹0TñÛ¸›®_ßTuWÝ&Qúº¹õÿ6õ2®7ûÛz}µkª¶î<ä{Y{éwlîÈ ©ÛW=º¦2i(¡˜—àB{iU>áÛëÊÅß6—ñ«ÔT¨Í~V¼*J¦ÑIJƒH3ÀéGQýuäÜdþpƒÓú÷jr‘°¿ TTø›û‹”X“œ5 oS™I© ‚àëÑm!uŽåŠ——÷‘êp¡ù{¬-ƒ,•¿×Bõã^Õ&Йÿľœß7³,*½™,@aüd&Z'oy¤þzw6µ9`ùAy©üP!”Â'¸ÿ-‰.˜ÍwMWß4õb_$2 _úð”KÜò udø3eðŒ^n-a¾]Æç$}ʘ hL$íÌ_sùÏ“ÕÀˆØW!z ‡E 8Nœu‡*à_z/$Çs‚>>ãºPX¤ŠO»~O­$Ñl Bؤ̽ÞÇÉP¼Sí ü0’â0fj*CYé‹ÏC|´ÚˆZÖ8µ¹¿|õtuÕÄQñ{&4O»°­ºÐ:¸¤“×eC•?<á‡> stream xÚ­UKoÛF¾ëWì‘„Ëé¾Eµó‚ó0’ŠÈ¡®Œ´²ÙH¢KR.‚üùwI™”™äRÚog¾ýæu‘/~}%auŒäba‰‘Œ0$_“ë„1à.ͤ”ÉûçéMþfñ2_ü³`„â‡&,H+Ã'4Yí×7”¬ñð ¡ œ%ÿèŽ0Z¢µ%ËÅÇÅÅÓðLràò$þŸoóå‡w—y~yõzÙÅ'™²€2NAIQï«}*xÒú4V$Ï‹z[u¦LR-“b[®‹¶DP8®>7¾ŽŸ·iÆßăMUw!˜ãÌ€–¹GJ=fBÞ³n@\Ïy(”¾G rà T8„9å"èlÎ šÌ ’p½3Iäì/Jéq Ôñ‰»›(ÆYðoßöêÜצ> stream xÚ­VMÛ6½ûWð(¡Ëá·Šº›"A³@»F»ÙƒbÓ»Jdk+É)‚üùŽHÉ+ÚÚæ&ÌÇá›7Ãy>_.~})Fs–YnˆTKŒÔÔC–krPÁÒLJ™¼y–Þ,_/^,ÿ,€0üa©´ÒŸÉ…&«íâú†‘5n¾&ŒŠÜ’=tK5Zâª"—‹¿ç§×ƒä”Ë£û¯®^]ø{I¦,E`ÆUÂî›z— žt.Í„ɳ¢©ê~)“O©–IQ•ë¢+ä·ë÷­kÂÆû*Í qmØØÔMÒSB ÕR#ç@eÀD¤s 6×sQ ¤F„¨Í óM™È–«<€~™ ƒK°‚dÜL²ÿ öŽ16GÜR–ó(ÜÍWÙÿ Þ1®gD0Ôpþ#"<Ä‹t8‰÷=:ø¦¸oúVâÉz¿ò-ä{PàI¥° Abœ»bÛþ‚s˜—’*–?¤Î¶6a5C&Dá/»¢ÛñAEñeÆŒñߦœýùêyÊmr–bËÏçŒï9Ûwwu3ŸhjeÿøµÆtÀÌ‘ Ë‘ÔËžFSì>¢˜B$—¥»uM7w‡ÆšY;ž»‡ÍaÔXIñ1j…D?ihNhîw?PÙË&8?kŽ8ÆÁü›ž%mÁßW®ÙÑU/ä nU|Ê„ ;è„Gœ3·ÆÏ܈H9[2Žu úÔEú´q׸Ý* 3™TeÛ¹µoW6X…ï‡A¸v]QVVZèø¦I¡íã…¾J3ÃÇq¤6eLƒQ¶ rd¦-YnýcÇæàÉ×õIHŠ]Q}nË–öÖ#’ çÖmÀl‹vÀ¬ö]øÉÏwü®Ü}ÖÜe3œèê!fÊ úV´.×aëþ®>œhËÝí¾*š²ë!Ÿû¶}PŽÞR¯ç¡17 @”e”¡X>‡"4ø¶ôñdßó·.üVo·Ös2ÚÃ~šfÜØd; òÉ<ã¨aŽ“¨­Ñ¹Ù¢ a[š¸§³%ªà0”t`ø‡{ ÛrmâßÛ-jãí3íÏ}J•ŽìVìV©Þn}wЉÕ±¶ÿ,È#£‰)#!nŒ&Ž‚ÓP9-艈 §åœÓÕW³F‹†Ųóþ³6ˆ“s>{J¾š¾ùæôl1R@Seä7)ÀqÙH„“pߣ‚ïï²ØS‘ËN¡ov‰3BŒÍ÷%à¡û¾Œcù?Äì endstream endobj 2609 0 obj << /Length 1095 /Filter /FlateDecode >> stream xÚ­VKoÛF¾ëWðH"áf_ÜG‘CíÄ)b4 9ÈñW>T’ªaäÏwöA™´é- ¸â~;óÍÌ7³<_¯Þ|`,"i¬I´ÞEŠ!ÆT$¹@’Éh]D×1!ˆ‘$åœÇŸÞ%7ëËÕÅzõÇŠD~$"L!®¸;£™ˆ¶õêúGl^F1­¢{­#†¤à°ª¢«Õo«óçî §ˆò'þ7›Ë‹õ•u¥™B€L)F'~ûSÛ$ŒÆƒIR¦Xü.ïªÖ.yüg"xœWe‘%€Üv{Û›ÎoÜVIJbÓû]ÛYÀHLQ"‘àH{.3c­QzD\/Ya¡lD˜€€”!-±„™˜Î´½Z2K¢X”NpÁÇgìÆx‰¸BXÓ™¹›dÿdà¦b! IJÿKíÍòðÌ޿ɃÅ+/¤ßÍTr謶h\·NSN” LeÈ’p0ɽ…s“×ýOÞ%Soœ£ ëÇ\`:үإáÀÌüÕÇÑ>ÉföÂRŽö¿&„øì×ïªâ³‚X_¼_öà >÷svöm·HqÛ )IÆpˆ\"å—#©–F—7ß!™ŒÅW¥¹3ݰäC@•ÏíÇñs>Š#èN‘A—fgÒÒn÷û •X:Á¹éó„ãܘó¸³,Qï þ¼5]ƒ¶6‘ϘP•¡ŒN™à°3á@ÏxÌc¦Jº)<#R.–ŒB|þ=êsëuÚ™éL³õÓÇUÙ¦prÅ¡À™?ñå&ca†¼¬^¬4sO“B«— ½IRIÇ™ñ$Ûc~ºC0pQd˜ ­k×ý :6#qÞäÕC_öÈ^F,þlLÑ{L÷³=þ•øð¬Ìaðkò² '†6ØL¨„‹*Ú–…ß:ìÛÓ‰¾lîŽUÞ•ƒ…]4Lkø>I­°üÛº­McÃŽ5(…4;çòLÜz£. ÷6cš‰Q»Øl^ûÅ¡ƒ8 u¢a½Îh¸/ED¡yáîuyÏmT¬Ž5cœ±9mÂÓÇ(uè¢ñÌ<" Ùt»N¹·¡¹¨ffÚÃ!(Ý÷ìm-rŸww3O‰+›ýŸ7Å¬ÍÆ¨@«< Š't@±÷å°÷ g§GèS-!7Ò^§‰Ly‘ÿð(¡ÿcœë¥n«‹ endstream endobj 2613 0 obj << /Length 962 /Filter /FlateDecode >> stream xÚ­VÉrÛ8½ë+p$ËC ;S9ÄÎVÎâJF¬ìøÀHÍD=$•©T~~š)“ejJ¡„‡î‡×~:Ëf¾‚£)Kd+bÂ#55ÂlI®"*xœH)£·OãëìÕìy6û{„áK¥•þL*4YlfW׌,qóaT¤–üã¡"¨ÑWk2Ÿ½Ÿ§É)—ù//_gówoγìüâå¼%@e)žH8£JB€½-·±àQãâDX=Í«uÙ.eô5Ö2Ê×Å2o ùíòSíª°ñi'¹:l¬ÊªMÌôCµÔH>pê0#ö)›öˆ«©(•R=Âu”ަ†y€¦L¤KU@'Sap Vd€ë‚Iö£`cSÄ-e)…»þ)ûÿCŒë  5œÿîãt8Š÷;:ø¦8 ôÙ5]—ÜUmoñh¹[øžòM)0”RØ– 1¤ Î\¾©…l†Ù¤¤Š¥÷Z0}¨MXM°Kº£ðó&ov}|P£ø‚2cúøbˆNßœ?‹¹Nc¼DöüÙt×ã<§»æ¶¬¦/šZÙ¾FA­þ:`¦H…eOêEK£Ê·_PL!¢yán\ÕLåÐXDkûs·ýÚ!+)¾N­ð•‚hgM Mýî—=*é`Éç§ÐÇq0ŸqÕ²¤u ødáª-]´B1áVQŇLX·3àÑŽxŒïÌ­ñÓxD¤˜,Ç:ýê¢ }Z¹•«Üv¦›ŒÖEݸ¥oWÖX…íºÉ¸tM^¬¬´ÐãLƒBÛ‡ }'†÷3ã@mʘÜ{ £ C¥ÈL[’müëÇæàýãåÛ|ý­.jÚš’ˆ.œ[Ö³Éë³Ø5á'?ðñ{íîš°†è./ªîDSv1cnÐ(°¢e± [w·åþD]lovë¼*šò­mÛ?ÊÑêõÜ·"ÞMee(–¿C|Søx²íù~+Wá[ë)íþ?Žnl´éPé`ÀqÔ0ÅQT÷¦éÜdQÐÊ-NÑ{ÜãÉ’U°ŸÒ:0|é>„Ah¿\›ñ‹oýµñþ‹7ìýÏ}•ù¯Øû¯R­ÿúîï=`m-þÎ3¦Œ„¸=pžqœ†âÀzADT8-§¬÷ ¸št^t˜Q,;m8cÖqrÊx©ÃO¯o~ùú÷>9R@Seä/)À°Ý‘Gá~Gß'¡•ú—ßÙ.6ÙÈv §Ðv¿Ä¡!únüp!Æ÷~Nÿ ¡YŠ endstream endobj 2617 0 obj << /Length 839 /Filter /FlateDecode >> stream xÚUMoÛ8½çWèH+–Ÿ¢Ø½l¤À.Ú¢H}X`Û+Ó±Y2$ªiÐ?ß!‡ŠíĽìÅ"‡3ïÍ Ç7ë«7ïtUpN­Ö¢Xo‹ZR)먊iŠõ¦øpAW¥RŠÜþX•œ¸ý¡ó«RMÜŠ“ÞuOÑ<ùiõuýÏ›wRœQË,€¬(…¦†±x‹Aÿ^øôþ6Æ%£ÊðfT+ŽÞ×pM-ÉÆï‡¸R$ h™vÃJ òˆ;7`!ˆo„~ÃOÇ6´ý}vó»ö{Œõ![£€©Mä‹Ì+à¯Ãwûé-JüTšRT3 “߯$Hª ®.¤¢Ìg🃠ó‚Ïõ¾¤ ØdüÛc®^KªµÊÀ:çn»a¼ÌœW´†—BÒÚ,ô¹¹D— ‰ë~Å–R’›¹Y‰š² h?Å3bç&Ì£_.Û ×véº%¾ÃË&E5ð÷!N˜EÌ¢稖0Qê Å€–0Ü0NþtÍ37eHÛØ‚;¦$àh´È:wŠƒ2U 3‡ WýsÚ;S8ƒ»b“sÒçS›G7¬»Lþ€Û!ªÃhñ¸ƒ*[(ïoäqMu-PÞÁ¡m:?Å -Éß)Óñ•™ ×ý€ßÃ.esj×aÊ÷ÞõǨ]B~ã“ÍñëqI÷¸™'¿ÁÕ‚íðó,@cCZâ7î~¸?^ü>¦ôWt.d¼í0&‘üE32F+ÂIáñßDÆgér{c+EÝ ÀªDœÉ5­uÆ?1Fp…!?—Éó ,%Ü endstream endobj 2536 0 obj << /Type /ObjStm /N 100 /First 942 /Length 1364 /Filter /FlateDecode >> stream xÚåš]oG†ïý+æ²½èz>ÏG!Jj¥VB \E\{‹£€]9Žÿ¾ïIðÂÊ^RV€Äæ¬çÌ™3çyg¿5fçÆäRv±¤äH쯺«Á.r†¹ þ—³Zƒ¸, FN®P5úêD£8I®ì„Š5D'j}Ð1xÏf‘ ¿Ãb¢`„ä1$†Ñhc“·6¥–WÉ.P  ¬àc+º Âè‰8½£F_s)Øxµ‘ f´ú“‹)˜?"fü®˜mÌjYsŸ°Kµ–c£ ÕcF ³©›B¨ds"rɳu§ìRô nâRÊ6%†ÁVFÔ!埽K¥–…NdµÍøI¬¸¨z’Z]2«–—ÑSkþœ€ÀòGÝr´üQñkþ“SÍŸÕYõTFÍà†F.ÖxËèE› ÉjÓ)\ñVOÀ)1Züà R$ÂR‹‡²£#h-bñÅ!9óGsõGñ¨[ÁpEÄ,QG>D§Å; ¤˜*±Ú!aŠ1 ¾G©ªE¡Å‚  ÿ`@aìmlˆ‚Ø(vIƒ©âØ[ ÔA1Ç`UD@Ž™'ðGc¶™“ŽMN a0©%VÒ'kCOc Q(,r˜x¡ô½%…G@C›Yœ©HÆr‚å˜äq„0C-êiX[€eÒ4@RF¡=ª­ö?"O•‰AÓXNqrr2™>vçX}¶jOÝôÉÅöÇÔæÅäÁƒÏydj8ñG'ëÕÖœ KµÙyF,-/þý¤Úè4}ºYÏÏÚ­;wÓ§Ÿ¸é³öíÖ}Œ÷ìÝ¿-f¯ÚÉôwÄnWÛ+[¿5ÖdzÚ^­¯7óöjwܨ¿ýÝ..fÖoݹ9{ƒÅ†Ò…FôÆ›mþAwþ¿­Vk=ß“,­OF¯“é£õfÑnvQý {ެƒä²¦’›*F)MUUiX ¼Î®_nk”¿.V—ˆU‹sæ¦ÏOÿÜm~z3»x½]ÿúÏf¶ºl®.ÚWífûpÞnVÍ|ù³•èNñµŽOÞǃcËAxpˆøŽJ‡ãa ÞðÑÐØAà@³Õâ]óòz~ùº}÷Y>8öð¹ë1ˆlœÇBä~8o…÷üfW:–V–á쨦UOËC4coAÔ&ÅpÙ®›‹Ëf¹n·Ë.ˆ‡H*…Ƈr#)”Acþú’ê]òYïMRÁ.§Búª+û+i°ÀJx/°‡†ý­£Df ,Ç(ìåÕ›Y÷ñ{„Ò*½'û’ïIZÇËG;äÃÃåCc?õé…%ÃJ¶¾™ÿt”öÑQŒŽüØÑQìCw×c„è¸]Ž..i£¸yü€®xŒîõ¢£èp3ƒ=ù{:°êaX9îc•±¯Hö}XïzŒoE2í£ã<§Ñ£+½èÊ@t)cOÓ õyWÎÒqkÆ2ùèŸzpï-ë7G~<ÖŽ§%c•0v¬Òû°DÒwº’¥9 G^F=7žn˜'JM¢£®àÆ·ôùrÝ®–ífóp{ýËbÓ^-ÚU³h÷és/}þö25î“R?œ”Ž}qjèÃs×ct‹mêBºTµã:K¼ÎRÞ€Žþ:K{¯³´ü ßq¤:\c¿G² _À'ß­öXÛkܰ·Äc@î@ƒnA¾«5òÚ!.½¤W22 9ì?œ¶)†Bc8mß•ô@ñGXå;P† ÿÑBÔÆ>7ºy è/òµ_Ú—B} øÒ3Ã3šA endstream endobj 2624 0 obj << /Length 1277 /Filter /FlateDecode >> stream xÚ­V[oœF~ß_Á#¨e2÷òT»v"§”ÚÛ<ÔñY/ò.—FVþ|Ï0Ã0ÛVV%Ë Ìwnß¹Íùvóæ!(‚Û] bLŠK¤˜ ¶yp†¢˜s~,Ú(&a¯ã0­Òˆ„‡'û­5mt·ýðæcÁ(Á ±êpS~ÖDœª3+t1¾ÿýÆJn.·›?7$p@"$¢ŠŠDidåæö9~0b‰¾ Ð2`HIO‡àfó󾆠4÷HŒ0“ƒ.̼#IÂV¬j´Jþ«:A’³™Õ*ÃTCì oGFóHÇ`Ë€u”ðgOލx„Åϸû e.jÁ_Ø”%DNlb2µèAÿbq®j°xgí1Ñ .SŒ'îìªÊ}[üe‹ÀD1Ó<|„zjleÔðN¼Ϻ¢®ÜY½³¿,Ì,~Ÿ6÷&w‹A¢ÙöG‡}ˆ$Óºj"­r¯¿©»ã×¢r¿_0V_°ÀܰœÅC‚X&\׊\#ÂùˆMÄéÍM–Z_ŸZäX`’ )ÐDaîðç&-Û·N-ÑSµœ#“Q¯ñà% °†JLDâ0?¬©ÑðÄÀø3Ì«¢t® VðZ°±B±9EZú4_V¦¹/Ì11•¶,ô„,³‰b,„'Oãá{óyÕ¢W0£íæ±hŒOäÕÅÛeYNò€n¤”<ÙK#.ž‡Òž‡°T7¸06óҴƈƒØDãJK¨†¥åƱäõ¡wiׯSͤQTŽ!áÙ¯WÕ0qªíåÅ*Å (ŸS|Öwûº Q2Ÿ©Hs;øEÆÌµæ”{úd}1i\ί‹Ì~€~Î[háS~&{ñý‹†)¸Hø±ãîäÐt°x‚[ÉóBÙÜa4÷õ§¼oöi‰Ò õK¯˜PH¡s+E0¢^x5g€ X%ý™[Åj©’P0|ž˜k³3©2s2—Lò×äòôio±¶ºÚõµír»cÇæf°q l=}ÂkXöÌ{à}î«qŠviqx•çú´ç¯ž¦ @ü¿LS½>L_Ð Ûr¦.U‡§Ö^´,kÃòƒ6éöf$v¶¬æÎ%p½Ë]5·¨#ÉbWZ˜¥u•B‰¸U œú"õˆkŠÁ¶¹&mûÆ”¦Š¨ ;È=•Ã~æTÀZõkŽŒ;‚µA’Ÿ÷ù3^†cO û|@Ä.r.,r!ü"·GÃ"÷»ã×½5Ô¥{ùG‚ÆÎƒâDB.¢Zåk„À°ñ´œ ZÊ@DógÚ›;Üp8¶ŠÀá/©Ë­ ÛG FLÖ5©û’6Æ=ävî”E5\uà}¸²0”ƒÀ7û¯ö@  €Ògö*d›=¢‰MŒ=pÞ¸‡ôT÷îð1mº";x{Eî%­.ž¥þöÅó¾2ð2LAQ·&g8õ”NÂvïEƒfQÜs£Æ†Õö‡n€<`¿¦™­¡‡û¦î‡ fµ+9 äû¾tжÿ äeÉ­F–„Û}á-NúÉÚo]‹˜†+uô­Ùõ×»Ú¯©®‚+ÖÚ –ToªóÕ2¢ˆ‹cß•¶ÛœG ŸÜkYµg$vä {}ƒÁNýˆûî°”çÜ÷qûü Tn47 endstream endobj 2632 0 obj << /Length 1282 /Filter /FlateDecode >> stream xÚ­WIoÛF¾ëWðH¡åtö%§Úµ$h×Vr¨í+#ÂåjiaäÏ÷ÍBICd%(l€#Î[¾·?^Ž?ýÊXA02ØbôTh†Ó…â)¦ŠÑ¤¸/ CtXqÎË‹aEÊÛ!£åûOwÃÇÑÇÁõhð÷€þHA„DTQÏm˜,ÆóÁý#.&pù±Àˆ]üëIçCJr8ÍŠ»ÁƒËC Db„AFŠÄ–Q«ÒÊü?jµA’³Tí•ÒAÀzCËûA§Ÿ-6;§~d øw×Ï[²ª£«ö3úâ‚åB¨•"÷Õâxµ¯4R½¥´'Ì+}t*‹Šh‚„Ü#ÁI¸»Y.†$Âd3^7‹vX !ÊÅSx®§Ö±‚™8+ĸ`^Ħ$q\(döTDn RF˜@‡£¬0ä©1EµGö€6BÃu;É¡€ÄRDw ž" O£Àn$ó8 Röˆ<wš6§_DàMÔo³ú1K<ðCNކ,¡‰lÖ›=Yg­!.yuÛ6ÓfVïÜ´»ûç—U3[´!Q¨ˆC‚T Ë`„,í`Gž§W—¶ž¯Þ0‘=0œ#ðeÏG.=·v „uÆE© '–s¥©(u–‹*É œ}iÉñuk—_»µC$±vU¥w /0GêG(ÆJ8¹Tñ¿¸¿ ñNÛ;ïèöކslïíç,Ò¨8¸[Ä6öÒ,í ø4+?\½ë÷Â)bàt)%Xi޶±Ž®Ú#ô%5½/ÎCèi_µÆˆÛžÄL+ë¨gG˜„:“ª3}]¯7ùqáßö¤ÏCBHyñÛ‡«!Õ0ïÀU£ë«¬‹QžfôÅf=],;E”¤ iW”Á´ê‚¨¦pì0Ý8(vm—!ä·Íؽ˜ÖËÉjÑæ4ÅyÙ§ƒS@^HBƒW¬Ú£Ë„¹',ŒR¬?O6Ëi=Gõmžû¨˜PHƒ?÷Ôer £:@•z€ ã°‰$°šl©’/<Æ%’ÞÚ'»´íØ %“=–óbù'º™:¼®[©Dù‹Ð»"wûMWÛÌm;y5lZ,I¦ÛMj{b×u3û.äú8òïn ˆø9MXç{ð;%½1UÏ^WÍ*x­µu,?¤‚k±ò½7o%õ®ŒfÞå”ÂÚ’tñ 見¶†, Ó LcžÆÄ ô®‹Ñø~·õj³´sÛ©*×~6&÷ôXÝ¡idz͔+·j7ÿøJ 7/nãÎíÆÕçÏ×5ˆÑÏnýêBÇHèd÷é…ag+cÀLY_øÞ2æn—±# AF÷<ö”M9æ7 X»Ôyø8K’Á×íjßÜÅrÕÅàT®’P‰¼“Õ¡Ï«}Fuè7ªã0•ö4eºÐqEýBÇ‹ù/º…Îÿèv·JÉU½®Ãëzi#WýìrÙFòŽ- Û9éO †Á&› ½{+¨„@M¦> stream xÚÍVKoÛF¾ëW07 ­¶û~äT¿8i€Ô–s¨ã-­-"å’b #¾³Ê\Š® ‡Â¸âÎÎ÷q¾™Ù9žO~ù±Œ`d°!Ùü.Ó 1¦3Å%RLeóevx7qÎó£éŒäSFówW—Ó›ùûÉÙ|òׄdþHF„DTQÚ0™-6“ëœ-aó}†3:ûÛ›n2†”ä°Zg—“?&LJDˆÄƒ”‰1lV ¤•ùo`µA’³ö’*m( CóëŽA‡OÁ›§ >2ü»í¯{³Yg7ëŽPº _.ä¬äÈÙ‡Åq«­^8ó 72›MPÀ›b$8 {çÕbÝ6å7— ²Ãü¡ÞNgðsÙ.vå¶ /·wÎ ÀÉ$ÌŒ#*%PôÎ>Ž3…ŒÂÁ„ &$(f„ V_0fÑYÂ] ÈØYb(0òó:SHaÓÁŒF+Þ×H*чǯÆV ì™ :/ªå ÉÁ¬#ñf̹F”‰'šàX3ç8Dvc›mÕ„u£½[E-Ú‡¦\ƒ^@¨IÀâ $ˆ OïÏV¶¾Á4Ëk{‚!oS³c[lš·Ñ}vœ#ñEMd/„aÝàOcn4¬XÂèŠÒÔTxš £‚Ì ®B—µHKŒÏÜ·–vÿ"‘Ðe¾î‡™#Ú1ÆrXE%ã~O ÷`µßcqí÷¢PîØ;ûy”iá±Õ<”µm‚*ç§o‡5O8E ‚.¥„¯4϶šÎnÖ3ôUŸ~úЧÐ5»!´Æ2«=Òn:«àÑkF â«,|ú®Øµãqò«N¢ÏSBH~ôûùé”j¸“ Tó³ÓÑÃA!‰ÔîVÛº¢$½uæ®k2¸Qº„ jŒSXvœ>9*vgë ùE¹p/VE½lB‘⯚;¦À<“„ òü•Ìf=»™ÎRÂ(åúë²­WÅ Ô~²bB! ñìÁä@guÀ*pÕ´Ð*Ge¤JB¾ð¨K4½°w¶¶ÕÂ>+%“ƒ#¯ÓòOôiå"òØ 7öˆüD’§"‡„wµÍrÿ e…X’Im {iwE¹þ!ÚúyÚ?Üñ×t`=Þ€b©(IÜU±~lÊ&„ÌÝU®Fü]åcˆÃÓõI¿sòñ2¼ÙßQ°®‹êÞ† s-ön Î¹Îæ@ûh‹¦­íÆVNÄ;Ý⟔`çWaÏÏ/ðs?¿„E8±Ømëð;^ÃcòtU£ ÂÔ¤,?Œ„ÎbF=yÒ ÷BÀ A«Ôûá4NS 5xp¸ˆ¹$¡5öÈá˜qm[‹ãQß~:z† Ìžr ð›—pµ»úépŸ\„ d‘Ò~ö÷öeõo´ŒôUrâÿR½#ÐEŒ1)Ï¢ªÊU¹.bŽÓX‘ðŒÅÁò«8=úa8 ë[ßÖGõ}Û„åÉv½.n¡ŠT¾­=‚k¡LåW½k×ÁèΗŽóÐVeuäHSœb&nʃmå&ôˆP—,?_…aÇe”wë«y»Ûm7e» ï–vQt½ÝãW› &L`‹ú{0¦Ðv½ËïÝEøˆŸs endstream endobj 2645 0 obj << /Length 1148 /Filter /FlateDecode >> stream xÚ­W[oÛ6~÷¯Ð£ŒU ï—æ,é RÇèKšMfb¡–”ÉrÛ ~‡¢¤ŠŠÒ4æÉÃó}üÎ…ôéfqò–±ˆ`d°!Ñæ.Ò 1¦#Å%RLE›mt†ø2áœÇ§«ÓÕzy»¹\œoÿ,H„áDD(Ä¥iw&£¬XÜÜâh ‹—FÌèèKkZD )Éa´®ï§O I…©€ŘÍÀj…°’ÿ¬ÁHóõBÆ”Y&ÄÐø¦ÇïÑ)ÓH“a€#Á¿[ý4X%Y2²›Ÿ8ó² õ„–TAq·4†ì¬^œ8kAod”Å5à #Á‰_ú˦‡cm [.›eÂ4‹«;÷Éã¼ÌöÇCþÙ-Y¿”¹ñ.­‹ªÌ…7{¨+Ðx{Ìš¼*[0 pXqsjÓâð«[9yKô˜0çH`'pkg;ˆ?2 ·a ±6Âx›_æÜh±(™u®( ])3öõcìíBÉP ;JæÏK[ßçv8‡ïpZ „{¿ƒ‡7  c±F&ˆûÂã?í‡YÄÎA Ûu“6Çy<Îà,ªÇû°$„Ä«wgKªãÕ"µ9?›ÅBðgulvUÝQÖ.ÔP›óH+Ò¨9R~Ø“ºr\lckðuž¹ HžíÁgÉJ €¶ïž ¦@=’œ"(ϧ7KFvm¡„T'ÎBÂ(äúûöXïÒ¥:~š²bPqÁÍ”ooõ„U¨IECZùl©’ÐÕy˜µ½³µ-3ûl,™ì·¼*”;'Çã­ígä® ŸIå³3èä´Kõ¾©O‘“ÎßH£}Hì×L1(¢žÑQÅ‚s­¥ïX[Û¤ùþ'ôx]n»ž’ô=¯=|Û7™k’>w ·BUÜ6J˜OÿÙì¬/ h?ʵ >×Òˆ¦3Ò#^Ï‘RˆM‡x€ÚBÖ¦™E¾#ch—ˆÝS€ƒ¸ѦïàÝr”î,sœú[ZBõpú¹„Ä ño1Çs\Ç4ˆ&Èè 7?DÔÉ àw¤ ËûÅ7ÆËt Ü”½‚Å )¦|XŸ:fÄ(•PÀ_zBÙÌ5Ç”C(ÉKŒ)åˆSâ§åö‡œ¹eÌOs¯ãL_ä,9” ñž’ŒáÑQÞûaê?¶iÓiñ°·~œU5¤úCë *·Ã¦¦ê6—}èIþkxvÀÛ¬¥û¼·÷uÚØ­ÛIâý±ÈËê7KjâG?çË›BCÌA²øîï™ô䦞°4ÔJ¯vÿÞt”@F¾{=„‘ÃAÂ3dÕ~o³þ—¼ÙùQ×kh÷Ìoç %‚mUûo¾+ –$¾~·r‚üá¿]_%­Â­˜d¢¤t7–ò,¬ãPWeÒ…ô«ûæxÀôÞv ª +gªb Ús}ŸL»vjÛ.ÚÔ6©î’"=ü¼uï±G?.mÚ=3@4¡OåžZ¾?* ZŽÝ5,¼Ðߺ+‹h¿ó[µÿ øÂ k endstream endobj 2652 0 obj << /Length 1669 /Filter /FlateDecode >> stream xÚ­XMsÛ6½ûWðHO*ßsª¤´ÉLj{rIr %ÊâD]’jêÉŸï”I™ŽRO&™!,vß~àaáó«“ç¿)•Î2ž‰äj™xÅ”ò‰Ó–9å’«Eò1ЙәÖ:=?;?»8ý|õÇÉë«“¿ODÂñO$Â8¦mÖíÊ”M曓Ÿy²Àâ g*óÉ×Nt“(æ¬Æh\žüurþ€°‚ILHÎÍ„Yïwöç˜Í8ózlõÒ /„ï"“éÇ@o^jÇdfö{`že þ‡å/{±Y/7N 8TG¡7þYk™jh–Ç¥¡Ñ(uÌè²Îèç`2™ /™sÀ-93ZÐÚûº:)™.v󶬶{•æÛEètQÌóS¬ÞÑ|µ¤ï'ÎuÐ ë1˧˜Ãcå-’“™ŒÔó(æbN (%IÌ£ÄÈŒ+ G9ERyK–»‚eу2њϋ|Ó¼ ÂujÍ ÉìäŠ(bÀ ã~þÙ”Ò0‹ª¤«rÙPBƧaÉXØo_= *.<±Ò1ÏÍãôHb³ÜDš”³1Ö_»z•oX>g»/‡¨î*xÌMÔ@/õÕ8ÊdÌ:9†UN¦Q:‹zÑ1/‘M/ŠeQÛyñh*•ÕOIå*„ã®aÅ?ìmѶ,Üß&Í çpÒÃzÀqŒ8WS fQõøÁX·³âßç0¦¹Ð„…Iö8*»x¯,Š6/×O‰Ô“™ÍÈà˜ÜOù8Rùž–”ëî/Ã=Ó÷Ü&Ü`Û|}×”àQ‰Ä…›Vj›¶«S³Ýš]H¤žô¹?„Ò2.íX÷å@è¿ès¼‰j%€»WÛU‹›BZ“~-[ Zª—Õ;’ºÆÇ§èd–VMK“ßèƒ{‡á^‰Îþ=?Pžh1ÝRqĜܮm ƒ®¿ ("sN–Íä4û½‹ýÙÌè97vshb’ÑeÊ$¸ ˜ñ‚äÎöE£¤¡öKšAû5‚v!S÷®½GŸGŠzç³qf™´avpüïá¡oföFønC÷(Ý {¼2~Ïçë!Ñp§91-Qƒ‰Á²®64jWÅ÷„«™9©Ææ'1ãZµ÷Ý‘´SZgo’=ƒs]Æ9;° wáy oáØn· m–´áð¬ÈñàÑäKã…d´ÿÉùB ¢ê©ëçú®ÜÞ<¨?êÂ>‹Æ¦“/ÉG$Y‹,ð±œ`È}Ý¡£ñˆ½vŠY<ßb¥sþùšùþ9"ŽónŽ·a™¢½r¸ÁGntåFô™˜öÀ)JôÓ<øÄ•˜pIãÙÿò!˘DêG> øl@~4èKCKÆ›"ovu=Ü5!µÝPàJ,Ó²õÝ{¤xy=‘ ¯m£¤¥xpí}3~ß‹cç(S À±õÀiì"osÍ«õº˜·½C×oÐ8rÄTÕâáâÂc1褿j ã¡ã€®ªF¿d2›^uGóÛªÞäë²ÉûG/[-&R˜Êš¹îÈ®(ŸÅ]›H€å²Xp¤4¬µ+z¶ ð$]ó"mŠŽ/‚{ÑqèŠÂÁ}÷pÏŽtÔåMÙÕAøu›ßv·r×㨷ªýT[/ÝAÇÖ>°uÔ–ÓgQ¢ºTè\‰Òzõóºj"c7ÅžámZçÀÓë_å‡i[popöÞÉÀφ¼)%ìoN½?Í^—Û®×ÍÒ7Q._,Êû]äžëÛ>kÁcô5÷ÑÙØKèÒÛuÕ6ÑNeòuÕÐê&_–­Þ½ÀX‘8vÛ²¥fü°Ú0õuž8®s?çyœ§.« ›ªÃ€ÇÛ®)–»5Í.«šïªèɼÌëuE+-looèï$"SI¦Ò·ž§³úA3´ù[ÿ®ú‘Þ¥Q endstream endobj 2660 0 obj << /Length 1419 /Filter /FlateDecode >> stream xÚ­WIoÛF¾ëW°7 -'³/ T®Ý"A¤–‹ã-+"å’TRþo8¤Ì¡F–»À8"ßò½ýÍÅbòæÆ‚‘Á†$‹ûD3ĘN—H1•,VÉMJ’ÓŒsž^Ì.f×ÓÛÅûÉÕbòç„$þHB„B\š–Ë0™,·“›[œ¬àãû#ftò­%Ý& )Éá´Iæ“ß'Lj$ˆÂ«ÅXEÔj…°’ÿZƒ‘æ¡Ö¹ÔF0Χ14½éôê)WˆqàõÈ$ðï>9e=]6 Œ ‹ó®æH­”ˆ6T‹»OC¥Õ9¥#a­Ò[§2Ɉ¦H)ÀM1œøoïÊåf__§Œ¦všQ-ÒÏ3DzÁÈ(ÜŠ–¬ÁóFÏû}G¥TBÆQO±ì(ÂÐDŒÄód«Ý4«ý²)v¥‡Q”³2+ˆp^im 'Â<†2£64Éd(ŽCQÌ ekð & åÍʲX›üÙ ¼éXM€D Å)(Õ”{·ãÊ`à|&I¢GŒëqeH!•â éÂÊL?È¢*FzuÌ*ƒ¨î=ý#ˆ˜”à˜7)(ÕÒ·1Y q-z Á½G~µŸÜ§y¹:½ÏAõ Ìcê&m{ê¤Ícú M8ë)@ñ5À*¨á@Ú9üÒ.s—ÿ5j©pøùÂæÛº3Šè¡ΑÀf”ŒD2H hÉ„b4œX,) E©W%c&Џ‚GZv%vUÚêÂìCÖ=ð ?@ÄK¡RœûÚ_|ô Àµ®m¸`ÆÐt—ΊÊÖÀ§Yúîòí¸%NÇJèfŒ>Õ‰{ºl@Øf|hÞX\ ¡ŸcÕ#l‰‘nÜS)Ž_)’Ðx½éMÞìãaà B¬ú0|šBÒÙoï.§T§³)¸jquu10 ÁCÏöÍzWõŠ( g2ÌF7TÒª:Q1LþØcúè ØÆV>®‹¥{±Î«U½+cš »iu`_Í>Ly" rzâz²l@ óHX…XZí«u¾Eùí¿ŒQ1X4øs .’=ÕªÐL> aÑ0R%!_x—ŽôÚÞÛÊ–K{2”LŽX^˵óô¼kû¹uP¤—JøZveN} îªzX BY'öŸgÓÚ>dö¯7Xbƒ~ìDaK=²/}çXÙ&/6¯ðË(}Ô¿îâ°»ÂÂùŠ.®ãM<ôœtß’˜B67Pæ0ü[àËË|óXÐC)®]1¸L›õ”´kœG#tds_€°`*CÙó3€`‡-„‡L>Uèì»2‡Œ…)A¥H¿  Z{T?ï>xª;7èSØû¨Iwuã_>ùÌð BkŒÀ/ÙÁa§åR…ì;¸3þ´~)|õ(:8â<Ì(ê:L­S˜aß@XÈf·¹„qOÙ X” ÿ(OøÁæõ¾²[[N©J›Ú·ñݽ{ ÈÛvM¾ñÇ·šC «¹{YA<óˆIÚ‰h}å>mw½ðýÖ¿YuSw{Ç^ûW^!V¸tК·vÕÛAGfÀ¡Ü}Á™q—WŽÃááØ n,s3‚Ï`…äBÃ¥ˆz½£Mxy‘°LËàò2ê`ÏÈÇmg õ·–x^ …ÜY^΋s-Gü—ÅqÔ3aM ;Øwç\`´»eæ¬óUÕFÚEî<þéË.7*›íî³m^wdÖm§þì’Ã=‰»¥úc[w­—fîP> stream xÚ­W[Ó8~ï¯Èc*ˆñ5vxÚ¹±;hØi…Vby­™F´Él’2ñç9öqJ’¦ Ë®Q÷ø\>Ÿ{Ï—³¯„ˆ%ÍX´üA„0‘–)ÑBGËuô>f‚èy"¥ŒÏÏÎÏnç–¯gWËÙ?3QøÇ"¦4‘iæ¥2‘F«Ýìý­áòuD‰ÈLôàYw¨J%œ¶ÑböçìüKá@ à”ê ³FªÓÿÇlF‰‘C« ÍÓ”6OXÆã÷€Î<—šðLdÀ<É"øsןlIÇ—ô'ŒÕ¡ëSzd6M c¢o–†«¾ÑÀõ”Ñ‘2oôƒ3%Ìp¢5àæ”(ÉðîÍ›}mw¶œ ·Í<FÄÕ'÷)ã…Ýɽo«²XáÕrž¥q¾ÇûK»ÊÜc+PKX7µµÈx±Éë;»Fúùº®ÊÆ£¢€K|‰pÎm¾k^º›¯˜é¿LJ¢¨‹…ç³’…dšzE¨ÄÈT†<ϦÔ8{lAçCU:ëëú›RŠ|C'© J3ç\bRÌW¥­ï {x‡êK(x-@¢^EAÃspŒ±!Ì}‘ñïöݤŠ`à¶Å}QÛƒëË—ãc’ÎK #ªâTfw|IÑ'Ùð cuBW[cÓ† b=ÙÝqžlf)$¹Ò!2‹6o÷Ó®–¨;W¿›3Æâ³›ëË97ñÙÜ%èÕ夋AP)9tñÙ¾ÝTugˆ³aƒ^ãŠT£»À2=… ¦·Šmm!¿…"Ôʺ©Ê)KF…ƒøæ¨—PÈ£”kb¨:ÝÁ-éñM„y¤l˜ ±þ¶Þ×›|GòÙ£0N ø³gn":®#TC•‘Tó!¬b2Œ\§/2Ä%4¼[ûÉÖ¶\Ù“¡©ü•Pnœ;rk¿Û¶„Qú’2Hmö晲–„?g/¯ÿ*¾LTº"0F#¥`d╎|Iq²Ò‡ê¼eª©›lµž1ÁžÎ©Z\G¦‡®É2¢)”€^½ù_xfqsæBq‘Ü&°EœÈ µDùv_bÿ\Û6/¶?‘O…‹üà §ŒEÐÙˆ2p»¹åÜp?H%§ñ} 3“ëx½_µEU>wëWy‰×ý%ÌRɲˆðå¿  ‰!Ÿ¤|Ü·x¨êâ®(ó-ªXçmŽô'žš’]°€ƒi†ÀyöÂvgÔ™½',¥œrˆ3~h7]Š´¸òGOV”•Žž¼x¾¢0þM:ò£Üí8lœ©ka¹`nWeý(ìE»ÁipQ½AÒGaL âÆâ/¾Ö†ï+ƒ§¸WN>¶b%ÆKÔp?ÑÚ_OjÌË5ڀш”'A÷eB?±± Cýl ÑqÚ|÷,¡ ½– -ËÐàÜÞv ¾ó^c¸Üº5Õo±pX»-Ö7ïpQ…ÏM=g®êüNtåÔVY lÂ*ëù÷MQÞá1Çk,:GhòÝýÖâyUÕõ{Œg¹vBá1TŽ#œ8>aQWÿþJ@·ö®Î[ÄCãí~W”US´þ=HÃ÷ÒXHþ£Äç2ƒ_]#› ʨ <®SÆ {ë…Ú2,kæìD%^î†6MG0VÕvkW‡Wv5B±¶ÝÉú#4pà­êà­vÄéǃŽ/ðçÉÌØçL‘ ~jzÃo¯Þ&×¾ü®t[‡BžÜcQ‚«áÞ5`4¿ófL\‡\€>Œ¬Âh& Ê0O2èÞKèT>×\Ò%î §]Þ4(hÝo‹G”*m^#|© ¡,É ëpØ­E {Œ]üçá·Æ×n”T÷´Ê endstream endobj 2676 0 obj << /Length 1234 /Filter /FlateDecode >> stream xÚ½VYsÛ6~ׯà#5)ÜóT«V;Iœ™ÖRòâø• ‹*ã?ßAÒ$MÙO§cÏ>ì~{`wWÛÅëßóF!‰·=xš!Æ´§¸DŠ)o»÷n|Â^œsµ¾ºZ/o·ïëíâŸñ0ü‚§Í­Io—.nn±·‡ÃwF,ÔÞ·šz )Éa•x›Å_‹ÕcD$°3 “µš ÆÃÿF­ˆ6V»á"ÔT’e@Bêßt :ý”$¤êï€~zðo¿ô° Ãà …©8ç{I©•`›Cµ¸=*mQÏ)k”ÞZ•^@”B˜oŠ‘àÄ}0QY&5Ù’Q¿ZL3??Ø/÷ãl—ÔeüÕwt*rXP_ïª8ÏÆøÌÔU%-ŽK·(òÔm~ÆX}ÆsK ÈË!y>·&»pµ˜qB#Ây‡IÄÉÝ›]dYþ(‘3– …w¹Ã¯L”–oœX¢‡b9‡, ;¹¦…@Ú¢Pá!Öw¡æÕœ +Ê`­(JÇ¢T8”^ÁsÆ’!¡ úD#-™¯3SÜŦ·C o°(=øƒ„_ÀGŒùáÖaŒû˜O³[#·mNqaJçè·—o¦ L8E œ'áýrÍϾ› €M M˜Šk(t/wªZcÄáÚ@âÌÛéPÏÖJ)%8½Ì¦ŠªzÞÕœAUçêOKBˆqõörIµ±Wm×—³.†‹Bð±‹/êê˜"JF‘Hs[ n«.°DÍqrËŽÓŸ–Š©LáB~ïìÆ1*ö%¼ÜMP4µê¯U*L¹'©B‹óõÑÁ‚n&ÌacÂhÌõ×}]£E;T™²²/]ƒ?êfr C=b5ö!’ŠŽiųa¤JB¾ð6.m9½6S˜lgΆ’Iþ’P­; º]›¯È6oá_JîÞµ}å¶£v›ùXuvJ hÅŽHÿ…£9æûkL0Üœq ¢ŠMÚ‡ÖOC?/+·yï>ÐWÜÂö”ÖŸ²ƒÃÂa4Q2ÏØÁ­ñç툲½[@uu,Z:ây:!TØÎÓ‘O5îWÏp†™a!g8Û!€ Õ!ÛæÝ à`6çÛÙŒ 7kÁ·:Ú‰ŒI?5Qæ¶R «“*>%ñÂh+†;iœ3¸ؼ[§n§<516;ýª€$p'²Wù0ÞÁn¼ƒe3ÞYƒÂdj´U9ƒœvH¡f\£ šûÝh€oøx*ã$Ïš±i l÷Éê~ÂlšÝMn®L’ôZ*³«ò¢ÕÑÚWDU+ª&·ß¯ß¯žJ•Î*“Tº§2åÿ®A°T”ŒÄ•`|tg\S(Àê¶u|,Í¡NÜö¡ñ,ª:³~™3ž÷õv5«™Br÷CgjcäDöav?Ó¼‰ÀÞ$í”®ÄÖ!Îm¿¸wXJ©›Zî»~ÿ/Š‘g: endstream endobj 2685 0 obj << /Length 1851 /Filter /FlateDecode >> stream xÚ­XYsÛ6~÷¯à#5 ÜGžjÇn'i2mcO§3ih –ØHdJJI3ùó]`A™”h+i;ñ„8»ßØ]èâæìéBdŒGËnî2+ˆ63R#Lv³ÈÞæL7+¤”ùÅÕ«WW³w7/Ï®nÎþ:c…,cŠ#y<å„Îæ›³·ïh¶€Í—%ÂÙìS$Ýd‚-a´Î®Ï~=»8À”"Šê1N©žkÒý?b­"Œ‰±Øk͵ÚÌ æxþ¶GÐËç’¥Íþ È'.ƒ¿°ý~OVôtÅ€pÂ!;´½æGb5èfÕP,M[C¡‰ê”ÐfQè» 2+˜1„JÀÍ)Q’áÞóUÙnf…°"_•‹¶©»0‘ù]ۤ延\n|=<ß–Ûª©q¹+æõ'øYøyè>'&=ívåqð¥æª¨ ˆ»bÂÍè‹ÞJ4ãx&LÊž81TMHEŒr £R‰Û¾ÜtÏ ³C.RBLºžO$¤Ä)¡¢ÌÏHóÝ #ÂïÉ+ÎǬŒò#Ð)Ý -ˆ2àkf‰Õ‰¯jß.+¿×C O(Ð Ý›ƒ‡'`j!rKh°OœÉƒ=m'?úß&Ñ$æ#“^¨Zß¡/_\>; e&9`X 7YZùà êéŠa æ±z‡ì"„þж”H86à8q‹zª#Á“YSk I^»†àßM»A p±éÝðÛŒ1–Ÿ¿zq9ã6?Ÿ©n®.'M •’cŸï¶«¦íq62ˆ&V†d ˆ5½Ó™™Â„ÃÓ˲Fg_Uï*Qñ1Œ›´uí—KßÖ“r©†ô»¿w«£€¨Ö™æ†XªΜ‰®Nøý]úgYŸÐ“œtˆùû«°ð¹«Þ™|WÜÎ øúv]ÕdáK°¤²lx"Zzª#¸cëH¸¯Â¹1ÜjÒáB@6нS ~ãï|ëë¹ÐéŠÝ·;ý—dòÆ$—F<£ /ª/™’T¤ó#t_'«l¯>Nä¨ÂZ)M˜ä¤+„“ù`̃Ñ(üßO!¿iªíqdRB…"˜*®‰êHþØ>ÎCy¦¤%Hñß`žËŸ_GX„–Ø=hœDW §ŒsÀÛ ]OûP€H¸„¾€`$Ë8”"š2V¢:Â3™CµDªçÍ®î…mY­¿"ÞƒÐ>lå]È¡/‚Zð…ÜN×ñ±'`d÷>6ÐB¾±2f’›M¸+u¹†Te”KÓ/—z¤ y9ŒÚ¤÷¡­ åzÌûú .À-ÐAa/À@qoêR4 PgóOÕP­Õóæ5R…Ü éþwyÓmqñ ~ qÚŠ¤Œ¢é!áòIè“Gü =dPþa=ÊИ†XD‘à¨ÓpYǧáèÇúºïN`†–“P¥'0‡–3¡åðþQ™„^Þ°Dw¾aYÞÜ…/Íç¡Øõ<ËÿÚ•í{Üé»vØ¿ïÚY^nqj\Ã<ÁÑmÙùnïÉñ³˜…“iÒ•›k?Æ9în”Á< !w[jP™y³^ûù6Jsâ P~ \z*Àâ…_¯Ó²P7-RD`uOùÓÕO8*çs¿öm ´dU[æ?Ì,Ï'LÄUrâ¶ÁÙÐ’a³‹z ¼×ë!‚o9êÑmw‹*hÁÊï@î$ +›²ªqÜ]äÞã[ Ç˶ÙÅx…³ ô]p•y]nüúócÁ ‰2Zu„êr"X€WÃ`=•¹„Gˆ‘cÎOÅOn.Î7c9uq$…—4\„¯Ç"©!†»ÿ€Å ˆ xS‡‡ž&®o$ëNæ'C¸;€YÉ…÷å̽ – ‡Á»:%€)`t„i~ “æÐ>¹4†ZÙ!²O!Páæá¬|ð0E,FïFåþïy/57:EòcNb𼲡€ ™]NÞ#'=`?I¸Ø?RN–f ¥ÊŒ…=Vq¡—á‡Úÿo€OÝÎáF:6–iN žß¬b;aÔ°¹0!ï¹kœ`ÙN¾Úu½£BŒ´MÝm[LYñ(cB Ó}=±}M‘áôAhÀe¥ðVŒðªø¶äùëOzœ>/ÛuƒÃ¥¯1awA(Ôçn`z‡AÓVË ´ÂÙëŒÊ6ÔÍó¦mû²Ó˜¬X€A1¨1×W0©—¸´ÙÇ»;(_†‡*‹žèÕ‚gtüÙ+ô׸¾i¢¡ñ‡˜£©a,6°ÒÜv¾oXÜð˜=¬ßÿ&“Oƒ§{¹î³ªž¯w‹¤á¢V·»à¡)¡‡[aQ>PÉ0­FvuµEuÓnÊuÕõ•2È]Uh2œ&ÃEÛ„T¼Û­q5™]Œ.ïÚ‚¸zI•ƒî›ÃsB@{$uúä r.ðð—þ­òÄÍ>Ç endstream endobj 2693 0 obj << /Length 1323 /Filter /FlateDecode >> stream xÚµW[oÛ6~÷¯Ð#Æ,ï¤ò´Ü:´è°­1Ši›Ž…ØR*ÉmƒþùéHŽ$3Ilh SâÇs¾s§N瓷奈8£1‹y4_ENR)]d•¡VÚh¾Œ®—”³éL)EÎ>^ü9½ž˜\Ì'_'ŽœLÁUó‹ó ‹á Öjèâ“]µÎ‹N‘à‡êT]Î’:Û–Û'\vœþª©øÊòOé¢~Å»,¡"š :»?¾>è:LóÈKÓO÷:„Íz¸@˜G†„éëoË]±N¶4YÐÝݘ•Ô üÙSÈuÀjè©cj¬ÒJƒaÖ@¾¨6.mküäW¾ðÙÂ?JiÔkB¹®ÝñPÒOþ=·ì˜sˆü¨žŠ4¤iÖž°û5]IñOú-På0´Ö†r˜OW9âf=`°Ê‡â0ãüýÌÿxËðÿ ý`1˜=Á¡¡×¢ô‹]Kh6М1x»vN-}•¤›×„Ð=íÖW˜Àг~a¨¸ðL9ˆµ| .É’ÍC™–8&Ú!-»!-†ôØJA…•£!=Tj©L%ŽraªäYÕÒÌlN™h£èÜæt½šj¶u‹|dé8ÉWõ/#Ð&,éî#œ|Ý%Åîtwؼƒp’T¸ ì4¾Qx„«›¤ôKÜÞÃñg9­O¶e²½ßø!Î$¾XÝtÆ0ÕYƒ¹¦LÝ[,Z³È7¿¨u"&75Í\£ÛaÑÜ´ÁQŒø÷Sh8Äig­o㜼«'MÀR8žfuϨr|ê;ªÞ,ñ·¬vË´ajVy1¢Ðuá-@Æ1j­‚ƒ…ð7VáuŽ*Kn‹|—-q]/_Ö^Ö‚dÉÖo‚©ÔU:T¥3z(û> stream xÚ­VÛnÛ8}÷Whß$´bx'•§Mw7F ´±Q`7̓b3±PEÎJrÚ´?ß¡Hª’£¢)°H9—sf8œÉéjvôš±ˆ`”áŒD«›H3ĘŽ—H1­6ÑeL"$I9çñ"II|r6O®V‹Ù|5ûoF" ?$"‚ ÆgÆd´¾›]^áhÊE„Ëtô¹3½‹R’ƒTFËÙûÙéSD@¤,²LOÀjpâÿÕ)’a—Lª5†Ä3_Ÿr‚ˆb½à£,‚_«þÔ›¥Á.NP8 ç2—ü ¬ÈP.ƒhØ«† ÞêW Á:Ð+ ¥DI$ð¦ Nœnþ0›Êþm“”i7Ûü$›ÆÜìj+°˜Ò—N`Âiòjã8wŸ™8¬¸C95ù]sl5G¯‰æ lKÜÙgB¡_P¦pg!Öpá™ÈœÍGŒñT$ $7°ôшGSÙ0Ü g4.c* ªM4Ò’ùRU¦¾-LŸ‡zÈøàÀQ`B¶åb,¶"‘î+wZ…DЂØkY§¥´÷µ¢Õ:W_ß'|=ü¨èó/öárëâÎ_ð$uE‘¤$P_Ø‘Ðy7_]œtðS¨Þs„º¼/j×8,>?;>ìvÂ)bpáRJ¨pöÓGìÒa×ïcî‡á: á™BÃ|áà6ˆ8ñЂÕàÉá*aTJ%|êmÞî§Ûƒ3è;jü!!fï›ó³„êø$R­æg“%G!ø¸Ä'ûv»«\À° inçCZ…f$jŠ“§¿wå­©ÝÍ/× UñÖ’Û—_ÝÙ¶Ó£fmOƒêÏû­µ|lŠOÈ¥×I '¦.‹ mÌdNT!jçgÇÑÏ¡ scjS­ÍOÓb0ñG.ÏËkkîSóåÞ¿ÆŒOÅN½Ãï×l¾¯Ñ».ïÇ-Ð+rÌ%I¹Ò/Æ{^îûʽ—ió¢|F~‡ä¿SÑ`ȾÿxFóM½«Šu˜ „Wyé¾4ÐõöÁ“ØO¬ëëÜ÷ÑzWÙâ´uq½o‹]ÕøVÊmÓ> stream xÚÍWISãF¾ûWè(WÆÞ—9Ƙ" ‡ á ±›± o‘d˜)þ|^/²%Y,•šC zyýÞ÷ö§ãÉàç_KF’LîÍc:Q\"ÅT2™%·)aˆÐáˆsž^އ#’žï&Ÿ'“Á?’`ø! á %üCÃd2]nïp2ƒËÏ FÌèäÉ“.†”ä°Z$׃?LJ7´Aœ¯†Œ¦ü~(œb…1?D8%aMÛÂûëbhd:9¿¼8ÿt>9?¹3šÞÖXj$Œ$ŒÚ½$È$ðë®vd£šnÔ ìÓeÜ!ÅXŽ'¢)Ç«¦ÐHõ–Ð3/ôΉLFT(„ঠN¢k²Y±^ GL³té|´]T¹‹“ͤ ·È§y•Û2ä‘tîŸåSÇ0ÈVhð¤Ø^€$6¹Å¨AYqü «¿1Æ‘[;.)¢Š·Ù=:}íÊý­Êh#b‚™ ‡§<ÛlY~ \‰nrå l:ªÙÀ' {Tm³Ñ°b}ªRÚf¥Ì{tIù ¶#iÉñÉÊ_Áµ¢ùB€¶ ×|aÀÕŒ¥°‚âwÜß…D¼tËÝ-ó·PLdܺeç­Ö»·nénÃîÔÞô꡵ròmÀwE¾ŒþëUKQ$)©ÕºŸîQÞ !г"_oK¡Ot|D‹Àäz“u2œ?v“™pŠD„”\`^¬!5ݨAèÓ¹­@—‡ ´€Ôf¢5¤>Ë)ÆúÅô¦ ZkÅÒÕ6ö·™­²|ñ£µ8«»¦ýÇùÖõØ•[Ue8‡ÛÓ# Ez_¢ÿs«@ó÷´ÝßiÔS´Ý¤§ëÅ"/óõ*tTÈh ÁXS¸œç:™,›ã•0~PåÇÍb?sÀyïÛ3G[­]*p(Hl yÕXú c‰ ~O_ÖoXko ª$¼:Ž©yÕÀ…Ê>èø~ÐdäD!B#£EË$ÄϦ”¥Ô<3?NRš³Õ,˜‰0ü Á6§®ÎÚv“¹ ¯|åÝúèü¥ 7Ya£µÝå>¶ËpZg"…+!â(éý zèŽ?¡*i&¢?¿Õï‡W_ø}‰ôÓº(lŒ ö2î“›BKªd·(¿—•]Õ4ì·Ðo hW—O+wüä»KM¡ ç3ØÎÂþ~]tØN³ÅtÛ ËŽ ‚Ÿ‘ ƒ/8,>v=7sÂB?ó6B…Ü¢0#0¥ ŽqñÞR*ÃÛç:6ÿ7 Ú{ endstream endobj 2713 0 obj << /Length 1567 /Filter /FlateDecode >> stream xÚÅX[oÛ6~÷¯Ð£„Uï XÒdmŠlͯ/IT›©…Ú–'Éɺüù^dK²ÜE!EB‘‡çò+{:üücÁHcM¢é}”1ÄX).‘b*šÎ£Û˜0DX’rÎ㫳$%ñëäÃôíä|:ù{B" ?$"\ ¡„»¨™Œf«ÉíÍáðm„ÓYôèHWCJrX-£›ÉŸ“ÓC× „î+ñæäì:a4~÷Ç¡pŠbDÿᔄ3Úþû_—‰–ñôâêòâÕÅôâüæP Fà‚â?D F1 ¼§Äõ‰×áÝ ø@Óø¶Õa§b(ã»K Òü³§ŸwTi K;tc*ô™ù@â@¦¦HЬ+‡£®È@õ-™fNè+X` ¥N"yS”u’²ŒÅwXàGT¡Æ(²w€»ìrWÑÌ¢áîÞaFX‰´ÂžŒÖà -´§ûiŒU†ì"íý²çÇq‡áˆPÚex‡1<Ù'íñ“ˆ7®¼·y¼ÈçU¹ö{+› ÛeSl–Ŭh S{š"œ{Úb6¦¿M.wX˜ $ÂüY8ôu6#+¦Ÿ¡ˆBõø=X3ÍÚþnê Ò]¨(p5héOM¾ª_z®$ërå <´•ÈŽ‚2~ÄÖ>› VlÌVpo•z–­©dP0!ˆH†2É<ñùÚTŸÀ“­¢{C€µ Ò.~a/ÀٌŰ²Ñ⾸;# ‰ph—»SŸ)P­eø´ËÁÝ,ÛݵˇðõÚ¼µ%¨ÖsÈù?¸¾«ŠUðߨY rž’Ö¬«³×{-ß'ÇyU”ÛÚé0&:\÷¢…gr³)*êÂÅÙËaÍ"œ"('‘”\ Ê–.íºªÕ7`ÈΩ 2ŒˆÎ0âp­Ãq¤\¶T‚G{µIÕšÞäÍv<~8ƒØT-ÐïBH|ryq–Ð,>±HOÏÏF!†‹Bð¾wO¶Í¢¬ZAà€. Š(hO¡ƒ¨6Z‰ÓÉ/[Þ”ËO¦òþ¿™%TÅ «Üvùï˜ ‰³Ï‡Å!Ô@Œ$ ¹yÔÉž,íÐù¸ÏÌKtÚ¢zfulýuãV_jÛ†Š„ÄŸÑ²M?&)ü5Õ²X£¹9裆LöÔë£ê@Û>2Œ+DúžºÅ¨o©d®ãygµ}Õܛʬgæ¨Ì/½+ÏsðUÙiRÄ—¦i,OC½‘R…BDöu€bœ-TAÓ`½h»Þ†87M^,´oÚÎê„6ëïµ]5µß‡><ÒE`Âéíw7#Dü9Í(ïEæ)ÚŸgfårYÔE¹ö=h³„¡êp UgÑtÕÄ8ÞbhLñ]v lÝÕ㲡z€H$±o©Ù7Þ„ì`$ë¡I¥è2<†KÇjf+† »ÆF»“ý€{+W  f4 +IFGŠI å]ö% õ=8}5ržƒQAòB!9 14$Æ o}“¶ßfí?ï«råá¸6…y<pÊów|-ÞT‹øÊ2Ê«¦˜-MØ©J˜;¬ÐÊãm7m±Â1á[RŽ »pSþ)ì3!lUb:>ypŠV»£Ö¿v½²gƒÜî·â»7¾îâÖB¨Å &å¯yøÿ( ¬?öæëu±(–6å×¾T”@¿7£uSxþ ûÒj£k3ò¤‡²L ,sE `ŠákšÃ;¤}M DÈà5ÝGdÇ«Å×ʬÇtËqóÁ q E„í¨ˆÁ!Æô¡wi6óõÜ/ÃO…þÆè@¸.«U…Ö²¦ôûÍÂøÙ&A˜Â…ÃÄ„—•2vÁèÚl’Ù—p*5§–'Ìûgë¨Û¤ö'yåHhœÛÇÄAà×~×g©%|H„S¹ß0vÒwänÒ‡US¹¯Êª2>T±Í\ËÏZèìÅ ÒñFÕ_êÆ¬àöÌ£b‹)L%6ΪÄÖ‘ÂKóuzÃÊxò-æð9÷§÷e˜-º@‘/gÛ}$‡‡öž‚íÀÈÈ+­!˨²ÿ—Á€CH=ù+”*Ïý© ëÿkuë endstream endobj 2719 0 obj << /Length 1030 /Filter /FlateDecode >> stream xÚ­VÛrÛ6}×W°oä8Dâî§Ê¶Ò:iS7âd¦uýÀJ°É†¢T‘j¢æç» @ IÑSw¦c bog‹³¼Jg¯ßPŒ4Ö$HE¥*L Ie®ƒûPDX3ÆÂ4Ò<œ/—?EéÛÙ"ý9#†?®f¼5ÕT«Íìþk¾ 0¢ZŸ[ÕM@‘ Ve°œý<»:GAA ë ­ñDX%‘àÉÿVĈ†]&„)ÌT„÷‚.~Â$Ròdá‘àg¥ŸNZ±W‹{zFÎ\ÚBœÅ ¥úA±õCz­‹9rÖ}°!ƒ˜Øvàà #Έ-þŠhšÊþo¢˜*Öy¶ƒ Mí6ŠÊ>ih.Lìv²ª*ò¢ÌšbëeYãž„Ag9¥ïÌÇ6.†È 2ñÊd›úÒJ^¿!ª1ı­u«gœJÍ€´Ä­GXÁÁk®Îoã)O V4ˆ{šÞ›m‡¾7©ûî.œÒ°¢± ˆKbˇ” ¾l•Ù?æ”ï[pÈðà#ÇáWPJCXÁißX+#ä$´Ë“”:©D¼“Ârd›¤½Ô.­Ô½ùÚŸåâ¡ dñÅ74Á¾ØøF˜LK&H$¤K+à´[î8a½[¤æ-†©ÐÞ|z¹+ö®Ëhx{s9¾„%ˆBGhjGõÜuìôâžb{7† ŒÝµ:>‡V10ëyœ¸”ÖYàIœ !¹O½ÉšÃtÿ0 )»BŒ!áü‡Û›(QáÜ–=]ÜL– 9gÃÏM¾ÝwàÄŒ³ÜB-Oùn%r “[v˜¾ß–OfïN~¹ŠæÜ¡üÛíå­Õ+»Û‰¾ÝåVóXŸÛ‹bØ1û²¨ÐÚLæ”H”Hê1zÒú`ÍÞT+ólZFÃÀäeyýŠîZdÇ]3y ÓÆ„zÕͪq Ø[ÿ÷Þ,–¿ÄǘЗg}ð\»6MV”/Èý ‘zÑ3éèV øqèM1ǵêÌ­ÆÌ=ÂCÞTOõ›Ér2øŠI:ð˜Æ5ž]Ø™Dšœn2ŒðÅ4Ü>7ž”/¬‰²&µ%-ßDB…ïŠÊl`°­œtuhj·ª¾ÑáM†™ß½~wû¾åéŽ{•—ð¼;6y‘9õʘµÛm¶îé[ßûî`w˜!SAHÀ¤B‚Q‡¹.‹§¶;›òè²µ>ThÊ­ÝýìÆB“'¼þqéÆÎª£å ä¾Íuú °žªÖ½sä>FÖÎWšïuãGÎr—ÃÌXM{el/˜ïʬÊö u—ùzÜ> stream xÚåšßo¹ÇßõWðñŠC(þç^s× mœô)ðƒ,m#Õ9ÉäÀ¹¿¾ß¡´vd)ÙXRÎJú`yvÉ%‡Ãù ‡Ü Ù“q&äü÷bBÌzÙHIoȳ‘L&çŒÿɰsøŸ ÇZ!Î !z#žz¸ÃÆ;-+Æ{®’SÀs¸•DÔ¢ }E)«…´U4í êB"ã¥T •=ùž0êF‡î²ª‹ (cU\{JxœbTÉã§¶ŽŒ‚!HTeõ'§h¢sÚy}òAbCÑ{©˜˜jiX­ 'Ù«€'™Ôlkqѱ`ØQHÇBd’ e“‚¯›™1Ü¢ z eÕƒ $Ñž`™T\U>˜$ur4ä¸JÉPÐáfL Å:ªbˆ"lÊ !gŒÓ“ªè8¨–.•¬Z $U_Œ!c>Œg0I0]9Vû¡;Ø\{*ÈÕ{EÝ@gYëqµ‘>*Ií\¼aïµ×¯˜SQ!yíe‰´!mWÔwêXpÉ,õÉbX¼CELq¬O  õQ(R"«MI®¶á!Õ©–b q½G¦°×1K6¥¨i0Ú"¸/PY\´/0ƒac‚ÅëXX½*ÂY!á¡”ª„þ²×6Ô<˜uG½h™^©uµ;©6e/v>bìàö.ÔV`ïR­å•…Iô^&˜ME%J}Ë;mxz':ì3Xr¤ÏGH RP)IïéÓ^ÿÅlº4OŸšþ 8ÆæÌd<‹Y]ÉAûÀl­®´íRåŸîõ_ÎgÃWÍÒ¼1ý—Ï_˜þëæfiÎ{(Ò¶_¸jP0xÛôúE?Ít¹Pª“>ßëŸ5‹Ùõ|Ø,Vñ ÞûW3š ~ݘ7Ú!<Ûx}IÞ9Gƒ9Ñú´ªÿËt:C£oVQHÕªQh-ø*ÜÓ§>Ò뿺¾XÖëN¦—½þ¯³ù¨™¯ºuçªÜà )[›rð¶zr²“r(ÖeÔú¥šî•éÿmözfúÏÍ“ OéOj]½îîÆ§`#f=S´|q6a°Îïikîúý÷Ù?V??Œ—Ë«ŸúýÉtq5™7OÆÍ•6Ëþ¢̇ã¿\ýù?“éèÇËæÃÑ…ò@ƒ š‘ˆz‘Øøtö$_¤àoƒÉ»å짗Ͳ™Û³Ép<˜³é³Ñõ|<øÍ†öúòc¥ž£S]bV~7YþÝp VÈŸ¦æ‹#®FÉÛ Ýî• nK”2n¯´Ì·Íå*Ê(›íM ÛØDw06ëÁÔew-ÈѰYMÇ7ðo,ûŸ‡ö$¬…·àp²híØàd¬~?p”¯kKŽúa _œè»ÈÙ¬qœ;0> CrzÕ:¹&_^â €";@áƒA‰iÍG¤VÈJ>iP¸Hðñ[¥t‚R¾OPmƒ’âÁ $¿æ#…ƒùˆÅÖ-Àø„®Sxðž¾ÅêÞãÖ÷Èa¸þëù^J]¾·Yã‹|ïpB ¶ a]ooÿ¢ ž±¤6cImÆ’Ž±° ØèÝâlÕjžVö ÄŒD;õÛ@\Ä:’ãb4J1¥=ad”ëGüõ` ÎŒ…öÈX6‚mYЧJv;@)ƒBm¢B¹øÑ@‘SÎXåÎXH:A‘£‚òÙl¦N©²TÎC*ËR9¬IʱÚmA¦Çb+»S^„Xã[ñ§¿}‘áÈúRÏË­ÂâÅWµ(G‹tä!†Ìo&ïílþ¶?¸Xô;ûM3U”3wÁ¾YãJ÷“ó6˜œ“ÛM·„r<œGo Ö½ãÑÙX¨›GÊ<&Â'ûo$)dêrÿÍ{ìΆ²c^âá0´#n߉”öHi9)áÑð'½gÒ¼'?ø!Dë_´|$Ÿ-ÁÖ{ðñßÁÔ6“ËÆ¾ŸMí¢yû¶™OŸ]?,&—v|ý䢙¿›Lí¨Ù{éŠ6éûÜଋ„¥+ÙÈ´ÿÒS>inúŽ\vùÁÛáXVZ±õ=6¦Øc—BÉYré!Znìh6©jiBî]ì¿„ÕΚ÷Ïážè%8¶âKé<)éÑãË‘rb‰ÛÑFüÁѦ´ç1¥ ;¥ ;âŽd²æÀ™}w‰ßa9ñœø+–äþ¶È•ÐEîfo+3/±„fUÚ#!ÉÇ S=îçÅêW*d¦S> ŠÙ‡Rvx[ç[")nÃîyÔ†·Û¿ØmoÃô³¤ýK¿„ªþ¥B­…ƒ·a1 Ï”»<3"7Hþ òÌ“þš€ a0^¥ÄÛøöÌ1ˆ@Å}ŽÇÍt4×”rÖ,ÇφH2íp|ßíõ·Ï»ý½{Ù̓ÇÍÃÅÇ Àì·“%ýÜî!€°OÛ€”–‹uޤŸø Ò[d©·|H°úúàÿ’B•‡öH¹‰~໳wØyÙÅp|ýî÷®ýW%Áw%$÷j|G¬ÈVø`V<µˆäc­Þ8Y¯ß w!rÚßÙøT\*ÛŽX:ñS¹Êÿ;t¼¸ endstream endobj 2725 0 obj << /Length 3281 /Filter /FlateDecode >> stream xÚ¥YÛŽä¶}߯hìËj€E¢(Q ñ%É0b“ðåÝÍ™–G-uDiföǧndK½Óv€;Û¼“U¬ªsŠúìîÍþZV›\§…®Ôæî~SiQÔ£«Ôfs·ßü|sS䉧›Û”ÉøÉãÿ?Ý}EK¨,­*UâÙæV™Ô”šgÿ}ÀéÏ<ù»ö kNÖz¾)T2Œž×ÉËMž¥MÖä¸Nžf Ë6y8UU7iU@ç‘Ö=ÝÀF‰»Ÿ»îÖ«³d{ X6MÒXyæŽ,ó»§U'ŽÛƹç šx¢åÖ{'s§öè<m¿çÂà ƒ§ƒ¬v°ý—†{™ºvÃñÈ3aB×ö¥}M<£S£ ‹×öx¦É÷v‡ë#»Cá©uÏ-mgjÙZGççnŠí¶¿[ë^|ë¹ao'Ë#ÌrÝ9ŸÞÜ–u|mQ)/[Ð&ëÆ˜¥¾Lh™M⇣ã%Û½³žAj” ®¯¾ªlÒZ,•íñD¤NUÁÑíÄ%دý¸òŒçænÏÕ®}Ä^'sþõNÚžéA€éó¶£_nê2Iµ®“÷2wxº½>÷|×uX/“Þ¹ýzÃG4¨š j6ì1M]¼ÏüòBµN›¼Ñ·d®ÃŒ" «£óBÞx7:âVÄøw*c¶bòÃè¸A.Š+;Û³\~bwŶîukü´P4(Až´`Ó‡Ø>¸ T:è˜wØð¶Dëà2Û™b‘…kÏ//2ÐFÉ‚O²À¢€;ÛMí€g,t¸|hf1ûwRõx>çŽ\;$ínîìHN-¢§öØ‚EƒXi4¼`yyV`4ÚTØ(á1îøì42Jiu–Uò3ËsK+‡‹ÆÄUfü˜ú4‚JKCÓ@ÿVưJx Ú9(ò…eñoÅ9fÕ瘵Žn!Kµ•ñz(p'Ñ,aQ&~Ocë×~=«—-«L~žýÄ¥)*6txH‡ÅÅÅPü‚±#˜*+fZQÆsKNmGûâÔàš§áa´Ç0cú>žP—ò¨´Ñ妬ÁGtÅ=·h“:ƒàìîÝèz }XÅØ>«ó†õŒm$ †uÉMì*\ÆcéØ>(˜ÊZ-Ä¿Âq•QÖ¹‡#—ÜGÁ–±Å3ÈŠKÇyÅèKF¯:}wSÉÀ>ßý€Þ|y÷&ÌÉ•Jµjâ¤ÝñMÚlàv?Æa·aÜíbàgÛXy±!o^™O¶-êÔ4ÅrÛLº–›Ê¨ßÛôb1Úô'¼ô*x Æx61,÷©Pˆ¦rd¸‚&ÿâ'öù*¸R4×*œÂzVJ6ÜÒ¡iöµq9Æ((‘“—ä­×\ª,Ó¼ÜðÊÉZ¬¸DY€ ƒœ(H”š Zæ­]{ï¸Ýrö¸ÙºÑ6¯$ A÷ÑÙž¥‡!äså2¾ès|A°ª LËöötêZS„É.ð¶ÔYª Á[¯2qAKyÂÑ“›9î´þ½oàΰµ[ QPÔá Ï¥èÖS;ÌH%Zþ6ï"ˆî[¿›Ãh¸Ë#—`+¯D‰òa£cø£#IhBž¶H£`ås~6ªQŒhák¨$+…ø¤æÀUSà‚[H/í%ï2Y tœö.¢“´ôK×Cõó!¨÷ˆžF4N6ø(ŽFãÂþÑm.‚ŒÒMWµZœÃs‘‰/v®N™ZøVÜmap„NÚnäŠs߉eYy“.HÞ‹%g1}칺¾-'þ€=®—è‡nxˆ‘XEåÑ‚bYÒý-ëÍÓàôkPAF m$:a%ö”šÍÁ9Hôͼºx¦_“U±e„5þ3Ûñ‘^z˜©Ð/[! ¸N0jzÎÁ°v:zmšèÇë¥ ',Ê<˜­%ÔùÄfWÅ . @¤µ qÛØÅLxõ )77²CÁ-¶ø¤"m7ŒÂÃiãˆÔĈ$dÜ2!ì)G–‹_©:†Oy/0übL ­}zMnÈux\úÐ_Øÿý Vé¢ó1hB™uíÅmμIc&äFi'yá×Ï1 a«;žâËN #ÇBÔæÐî_›ù`É[ÅI]MÏÏ÷LJð¦v!3¤b¥–ðïç­ÜTÉŽ¿ÊØò,¾V1C Q•^>Æ= ëdÏ\an˜ÈÏ–Lnger¹á ˆ¶³ò¡"Îß.ü AûÄ1%†í 7}åM ŸÍk°u#˜Á! £—â!>ŽÏû6¼{²ßÖÉ_$!T~Ûz7ò ÛÎÅ„ž~E‰ûͽ<Ïc¯??2pf\¯Ì䤅ÉÓ*×룞x†R“6&£ %±èÛ˜‹|‹ûó•/eQ EmÒ:¯Ök‡tj:¬M;ÀØõàï?ѬFî¤.† sóòŒÓ´Çø„‘äu¯Ì+ËöÄ-4>Ëü˜Õ‰?y©B"»FÌCdø-¥ª¬LëF­Wÿ?”º8·Ryª›r½ôŸÐÊ‹$ãÊ–æg+0 §Ø‡ìx9Ù9ì£ Ÿä„ù«†Rei]\Èôß9mQá·õ„¾Õͦ…˜õ¨üVá¥ÖÉßÜRÉ¿.ïOç 7üdé\>o0c ×ÅÅŽQ|·b—;Ãpþ-CÔjHWB]3Äæòî¨/m€~•f½ö[Q‹ö?QsQB°ZsÎtß-ÊÎ>|"=ºðZ{?…/­ a+o»Lòv´û6Æ×2ðº2ùöË/ärwH*ì¡›ñs¥ùVH©é ¦VÉûkCe©©„¾XÊ!³Bî5ÓDa`™–ò¬Cˆì{u‡ß‘ šH¡õHiqž`N6:zÛ.âyM²Ú„¬ J L@u8£ºãQ‘ýdz‘Q8Ê)Îg.H7KTZájª|W`øÆm¥~|ù%|Íù/R ¤o endstream endobj 2729 0 obj << /Length 3904 /Filter /FlateDecode >> stream xÚ•ZYoäÆ~÷¯÷%,Ñ$»yíKàøÜ±…7›‡‡ša–CNx¬Vp~|¾:šÃiœÔ;ª¯¾ªž?Ý}ñõqzGa•ñÕÝÃrÅU„¿øª0¡1ÅUn³07ùÕÝþêïAý!ŠM]Mãõ­‰’`ê5ÝÕ’ù{ý»?£» §q˜éé(ï© f.Ö3#%%:ÝmÐä M’ä*Ë<âih‹òê6ó<—VÔ.m!Îmg{x%Kuº7M®ºNŠ`Wo¨$~¾«þþú6̓bãRÐtg-~ª?ûõOß¿ýþowRRºNÊ îhdí5ÔU?l$ÿØL;ŸÏë…s7qX#k~ûÝhmãàÍw’VX#ÆßÔòÙ?Hš˜-$Ý9Z€¬…J’`yŸ¨ûù[I7nr’ã#Å-Û¶•üPo›¾Oç9ìܨSWiöqW: vû7õ„“ÊX0pËg³°L ÙhÕÏ--/Ï‚®Ÿ$³Ç81îkdÌ8q… ¾©è@›nÛ>]I@[/Š ányЌқσzx’¯t|Þ, ï>r ùrôvU5nZJµÓÇžãt'wßÖÒòg¬ê[¿·8;Û\”`ÃV6ç:×>¼.ÜÏ”{Ò¢¯¤;¹‘,‰J?k‹±Ù7­Ú'mæO¤EæNBŠ!ŸX¥Ÿ@¤”$à ·_äÅ‹\JO™§vCEƒìä›/]HÁi¼—e6+ò0Nd³Ð´ïǾ{…벃w»†Ï,²¸æý¾ï$ k… bUSSÕ´ë8öGzwà½j©6²¡éƦr-ŸGd‚Ç3i?UNš ®š±ñóñVîk)(ïüFò$Lp—¼Õ“ʉRÊC#ƒ©«¹uw­á(ëA³4“ÉŽÍ·uWC¨z­ÿ·o6ÕdEæ‘aQ™–­¡ä‘ï®mo7¶«7t¬i¼».L 7t´B+ðX±0lxÝ–ï’>Mõžkc™0Ë’«Ì&¡+¿y$pô–aóàaè÷’ÓBÅE#©ø¨hèn µqòý!J£GÔ{‘BQW«fâxÚzÔ±½."¿ëEÝôsd!YhDc¹KŒýþ(ç™äa)ŠŠá‚¸£aç'šÎ ÖìÁ‡–‘ ‡“޳"à¤ô ¶3Ú²¨ ðAZ%c׎½äêÏîíh ,‰¤Ûî!6•´ ŠŠ±&xì¶ŠÏFa»½ tq¦e)[èÊÊ€Õ½o6R4a–I ‚¾D&K%Íæi÷J¾T ÑFi»•MÌMWû1ÑåÐw;-üÈ’ú$]ܰ÷«½G‚ËH¥M ÐÆ‚Ÿ^_ØcZæaV¦ºG=í$‘±v½¤¼¤kEçHž€Çª—# 65_:²*# ¤Œ!I[<ø¡\« ǪîÜÐô#Ãtª&‚Zt’B¤O$*¾D{nƒ^Øo‘„9ÑÚïÜQÆ ÈíÇùþ¶­Ý±àÓ5 –ãϲ`}EË8ãiÝõ¤Š‚UÆÔÌgÔFý2ZF£õ³V8’PÉ2¨ÅDøÆX)—ÓÒ6Í%YM³<,Šì(«I#¡L£#j 5RÁVm•9Ü(‚a”~¡(§VQ:-çB5bÆ«¦¥òž )Ul¦²]QháɱRÁÏ·wm3î 6±º3ÜT‘\¥i‚ݪíó–Î,z 94+Ý2^·°›NqštË\wï/’ûÿõ:ÆÙ¾{ó£vdCÏ·è÷ëÝOo¨ã7R·“Q#øU¿÷Œ‡ãjÜ +ì/³Ôa”+1Û»N¬€'ZÑ¢‡y¤¨‡ 7“5SñžúÜ7Û¹™ø L¦•»ž*µp’B!m‘2Ðz£S©ÕÉ<™¡±ÛV  n¤v;¸ÃNêG`S5ÁÀ—¶—˜ 7K ÈÜeá[,‰n £ª%âe8ø¿ôDý‘ب8vÿgspÒYíœt•ê5>á³þ|h›ª™ØÖSˆ4JÝ4|ýÔÑɾÀTÒ¨µÖ›Æáör­j'V¾u9CeRõmAg«hÞè Wõ°sd34kùLJ6«Ç†EÂ(¨È‚&ñ ð1«Ô“‚Ѻži•ìΖH3Åý~¤Ó=œÎ&+ž$Uàƒ°qpP•sÞÑ:½/bÈQ›íW_IëãÍ,û?¡h'ÖlÔÏÕP®Ý÷£öå˜uøØ6XÓË(hó"´™¢û‚Ãbž`ÅÉŠH* ½ãb²×µXS–Lf€¶¥)„&õB£}½hÕf^Rßö[QK2ËÝïÌÂä“]ɧçê¼Ñf&LS•D¢{â›§ñ‰“¿ê–…îüI7¢¿/xô',5#{6™"@ÓÑ€-»ïpsû%58Œ´†LÔŽâRî‰wúê4Õ8'=Hj¸[Ì eõ¾a«Ç.…ؼ´ð}Z…yv7/H-Â,Uj `¡©„Çv ‘äTé*DB[ù©ã=ÅV-½ÒF¤0ŠLÖ°ñP´™Ž/¶>AËj{‡)fvZ©ïqÛt›¹ªuŠ–ˆß¦m s[®¿š‰ˆ8.âáBkÉnhyl|€Ígq˜à¬8#*ÕÖ-®¼n7|$ËÝs|£q:<ïm+7VnÃ%jDÃñ­\¯ÉŽæêÂÅEXX…Ÿz$´oFŽ%%EÆy˜$:’¶Ý½¨s |¥Þõr܃®†*øHúáãÈ®1÷¦“·aº‘0Tó eOÜx^õtþh¨„YT)¡7v 7¯¤À»éÞ`Ø< ³<;ÝÔûóÛ"…7qÖÊÏ1ÖÏ=Ð4³ðKµ¥;7)¯žÆC}^™š³Î—Åÿø³ì†9YÈöŵ¤¸r–UQÿ·‰²DŽkÕmT³Yâ&&h•øTÏ£mĬ°ï bX² Eã®~<ób´×ÞyK‹{Pò’U Qe×w¬Sé-ÑÂo.i,à7ŒLæob´êS'W=_1‡~ò~¬„%Š`»ð®§š[¸(Al{Q·äbœ[±Í©UDC‹¹ƒ'4PuqC{–’eÄ2„«,W(ñ†—ãR/"Cq_“,î¢DAžY{³"âF§YBKÀÕZkÄù3ö”Öý¼õ`bÈ=ÙÕZ…µjìåhœFGÇ`Ý'æð\©|,Ƥe˜øÐ(Ût:':$b)qkt‡ÈŒÍ4{¨·º#›hT‰cS¿­u•–$ ±‘èðkº”r‰‰¨ Йž[õœñ=³^0ª…pŸ4ú»¸qrŠÆBå}<._74€x#…†ÈÚzÎ&QÎ'¼%Ç2Ô£BPúZëkAnô]È’S&Kš½ºô /¹YÃѪãBÃÖ`¨G’A¶}pdXæÍJð(Ç!°@&ó:V9>¦ní¹ªÙ‚­^ ¯V#E»zšQÂÎ臓F÷ K7-umeW_Ò Å<¼_¯æ8V8º © ‹RMX3ýA½M/žF{Ó¾°]v;›VT˜µ‡º¹ëž²WÇON´Ž<6[rÒ$¦¿ŽxÜÞhx»Û,c ~´A£ÙFÔO^1_ا)ÃÒ3ÀÕ39™>çôZËÍ\ÞônÔ‹Ð0sp™2¼)êŠY]ÓŽ¾Ôiý†%´›´–áGA_òäI-øAˆŠÔ?“RœP?Ès’‘0þ…-&i©ë;}S”úX'ã›|ø—Lõu¦`¬Úys|©ÔVð¤ö ²èÝ^ohÞûØb}dk×OòZ’”Gð[?tª¯7l/¸|>ö‘hjÉ×ÃvÔB£jãà–ÀšÂ!,÷µxoþÙÖž3.Ã\l]ßñÛÆ”ÇYØ ÑÎ ©f·ábž†ñ»ðÜg°—i˜ø¸sÕ·ä¢sd7‡°¶Œx1îéàmÙ¤1V ÄÒ“šck÷Q±OJõÉ›„¦í ì¦çUñ/öK°YGõZÿ¸‚²Ã|O´N|èx{\ÀmËýoM>ûðcãƒþUŸn×1ÿÚjƒïz%ý•PSB¦Ï\¾ìš…ûwjò?xœÈÒÏJVÍüÛ®Ð.ÜïLPÅð].à™.€go˳ï( *]Þ‡nIXm^ž¾î¾;—ˆ²€+ŠõeX}nŽ˜œ_áGùuÄŽsŸ­ð1kdÚùóÌ?“( «,Q¯¢`A­Igí±C~!Ó´?ýuô © ‡(9'? (ôw <\ŽV©Ñ˜*…ˆŸŽKUl*Ïõ Â4St:!ØnÎL¿ÐGð£›f7Ízn«d—§þ½äŒ=" òìCnßø->Tá +öº~á3Ñ_l øFЬ/Ec“‚ͦþõoÔ›$ðøvn3iKŠŒƒ¬ý å“›%ÌIäÕvòþÑHã”–êf²†]-o›ãèïH&elfFžæ2o‡Rú ÅX³ÓAÅt§ÜlWZtt¨.àT]ñ1oFžÒÿŽŸ»æevtÍËÔ7r‹Ã•r›Zªz•óùF÷±4ö4å–ÊT¨Ò3n(ƒ®XM¼úÉB™úwÍÅ7!¸Â=eD•‚S'ÇD"¿Q/¾¿ûâ?)Bê endstream endobj 2733 0 obj << /Length 3332 /Filter /FlateDecode >> stream xÚ…YÛŽãÆ}Ÿ¯–F4»y Ö†7NÉî<Åö‡ì‘:C‘2›œYÁ?Ÿº5Ej56õ½»º«N*~÷p÷íG•nT–Q©6O(›þÔ¦ˆÃ8.6y’…yœoŽ›Ÿƒjûc5ÚºjÛóvkœ¶;]ý0V­á¦Gj2ãþ¿â?c:îÙ›Î ÕØŽëV~»žÕ°UAc®Ž‡J&ŽÃÙv{)ËàÆÔöt¸Œ•Ý_¶iTƒ¥óüúð”©ÔWBÅ*,★rã0Õã4 44æqÚïáì»Ö¼Ð]´^=¢«Å×lÝ¥ŽýMÏõª=öNÖA,k8¼ž &TCÃÃ~‰TÒ4¤-0äÑŽ²ôS?ð€3žªŸî¹æúyÑÁ¼—ãzÀWÂF:Œtš/õäÌ7üà›]…\ÎC]¡è?*Ú©ÆmŸï¹*OžêæáJ] æijiÑo?¦ÙF©°LSM†{¨P9ï¡R|°$ þ ·¼ËbzDÛwŽç¾md:,“t“©$L£’Ey`M.ƒ®:Jé'ø~;PmYù÷°®¸wø¹Ê6RŠ–õϤÒuè§ýÆÊ\z}ø½ÚA:ÙÀÅlå•ZR¥×]c¦s0¶j½©]ÁGZ–aÉ#¹ÖÖÆ}ûbÍ+l­3Vãx8E{¾eÔË¥t”„I¢×KùûK~‚ž•è,§e\M@xPr;rëÓÐç‘"Š^í/{'€ŠER®÷TòFý'GO²8ÌÕVÓ+gxóº­œ»_£1CX—`üâzØë¿÷’8pš¨]Ï\Ågî¥H‹%TÂÐ<ø»45 ÙÆáëñðjF2¨‰a»,·72|A³îšœGÌeOy'¿ràsדžo‘Nè\#_†èvr± 2‰<^-bîˆCboWtœbìÑ6Õˆ‡ÆÆGÚ[4O‡E¾-\…ÕÛéò`ô3Ål±âú£áñ·âz¤¾¶P •‹"@nwáqƒ¿ÕƘ—ŽÕÞÖôpePFáFætÓGQf¹`g¦’‹×u¦}Ú™/§¶êðÞÎÛ" È@Òë‡7¢I€‡ÄÿäQo„¤LC§¢Ç,O×±*>g˜pO"¤^7È wpÖ™Ý Q»eyi &ƒ—ITà£ÿõy„ǼekýXö¸éÂã‚$¯–í&cWµáµª(³Lo’" ã\ÍfË%ò¨HãÂeéy9W:Š ´…|´ùÇÁYÞ¯b{kŸ·â Jæ91WÒ:šx¨äedÆ/QÙ :ƒó8°‰j@kPyÀ³ë‘l6‚ßÛ&–di˜dânGpŽÌ5øRq¤vâ [)¡q~@5Ï­™vj`Í(Ø ˆâ,RA{Á¨õÎÉ$¿h'Þç‹¿hC£žøWG_]Ï-•L£0Í$ø@zL|‡vB­ Ùb¢­ËÙÌ«P#ò…†+ÞÌ@òq¬ˆÙØRõLáÁ´Ú³3²,C¯S‰ÆàXÛ‰(²–¬M+X÷þ-Iâ4ÌRq¶ƒ×©Zëha| °.&3~a‰µ€©j‰û Dòƒ@ó`jˆx$”ieâlgàå;n°À™!ä›Ù¾²k6žmò°Ì£µßL x«­ÓoÑ÷‹»ÌÁyêµè¨ü‹h«yƒ': óT\Å;Èà Șê`™c4¿#E±£´·Óœ×éÅTé¹(LôtÉ!ÕTÁž›ù=+Û…h6¨iYð=@×á,¬s1h; ì°×¡ÁeÓjþe¹©ôQÃÇjÖ>xv½…½¢mU¬¸Ø7›/ £ñ§›çßxbF¡~¤Á9kp¼Ž¹C~Û8^½ífŽ=Nã9¬S×á]®c;$¦$Ö[0DË[ʲ‹B`Ű*À´.yÕ¢« ­Cƒ¹+QŸun2WúAœ±7{n%V&‘ºqvßI´î°ìVQ:çPw ²’.¿¸¼Ó$µ¾-÷V4fêL´øô•Š5ñoI÷?ͽ?e÷¡ž§‘€â’X¨«É™9Å#}íqÙNöáêÓ´Nb±gnz=ØY Ši¬Ý[òÄðR™WÔKª óೌÄÌhãÌöxaãÞ±EÉ]ÛÇÁ„©õ9!gãÖ‹’»ò©Nr Ý[Y ’÷¦Ú’Ó€¾'Saòj™UÑå…}- (u’Š„H¡w£P ³‚õ£m-ÅÎrVèü$—>"˜çS³ÌÇ¿P8_±ýäxð9ÉXÑ A*ÌÝ?þ÷a[¬àCµÒºvY—b(ýøÃ§7¤Áˆ<ŽÀ™¦Â8ºj‘I“}&äú9ïc¸:TÒβ g®¹ÖÄw[EÜ£™F±ŒŽ”V0¬ÄFè:î!”Þ¯,ñ¤€ÖÇHƒá¡¸µ%y¨¡i%Î3ÏÐzá®ÀÍEß©0Ï%õô×7B:=»(ˆä€n¬–®Û ¼ç  E)Òl­&º€­Ÿ÷m÷=„¢‡#“rT~·ù.ÅÆp©ë‘Ý`e€Éö¥¤as VI¯`SÄC³äù‹Èƒàw\¤‹0Ÿ_ꈅ9új‚ÏÞ:v~×,ÆSjƒ_N„Ÿ}à4nÝwõ`FIêš/•bÊ¥7+Ú—˜C¢±ë»\‚8ª•Ü1 Źß$ø§á¤ t¹å¯3]…¥¨ãeÑ2bÚ‹—z4Ä+E,qÞ‚¦%ë?%^f¸Ääœß„7óÎ$-Y¯©iÀè¸ ·ÕXr÷lì ¤”Ô°ç›HËå[UGnbäãùs2ÊÁ¯{kÄ'á^åÁu±Ð 3R|š%Á>›èáœø˜—úÂ09!«Î%ŸrαbL==\?BœÎ@œ0Zàocˆ¸IkÅ;;#Kf"ã­œ•ð[Öò³éðÙìp‹[i…Q¬–j„·…‹¢%Ÿ÷]…ðIT°7Þq€Jp@Í©å•;€vö±y¼¬,V/ˆ! ¼,‹¾•–%‡ª’ÁÉ(ι͚µR¡Òâ¾ìñh @Œ.Z—#S+)njóœc @YPÂÆB\ô’}6Ž«)êÒkqhªÊõ1þ8ä_ÈCH«Êd=û«´;‚ÔeÄ->*i Ôy‰¬d•ìUW8®Ê,ÔZy'Jaº›ÙC|ÁD®­—hÅ9@#à''š½uèØ'­€7ðõó8Ÿ¡Ç2[¬x÷ççÌi^STnà/g:™IÜ¼ÇæôÓ÷o}ÀS… c%ñÖWŸÒrŒû¡Á×%0UÀ¥*éúø™¯ndÅܽ‘$y˨ú èç\ðÖ´ Ú\ÿ2_ØJãúž¯#§UdÍÉU•ea¢„dû$@.:K ü‘ΪX‡*×ëUàþ$¾U9æ×3o^Ülýròycð„Úe/_Gsï>ä:$’sD¾¸ÞÚÌ_þ ® ÅÝw¿Ý]!£J3»òM}¼ûù×hÓ@Þo ùJ# ¡ “8‡r»ù|÷Ÿ»ïè£xD«Ìó ï£Ll¥ô}¹‘.I ѦË ÃŸç*˰óV €E~ÉÍÍ ÉæRÈÅÊ0ÞÇ߯ˆköÐÕ’ê]ý’:ö qá«ËÂÆ9äwßlwyŸÁêû¶½R†Xx×ÊU}®[Œ@±²ªÓÁ­òÆ·Ô«Pٛʑ]I#Ë3‰ ¡¼=#Þ.FÂi"èðY(Z™TOÃ:;q’».TŸfÈî«ïà9Iò`àm)ÃÌ™9žü¾½?0OgžÛÙ …©œLùOOŽnÄoró2MÉ7»t'…ú3:VÌY÷:ýdW¸\ endstream endobj 2737 0 obj << /Length 3517 /Filter /FlateDecode >> stream xÚZK“ÛÆ¾ëWÐ'aË"Œ¼uqII\v.Nlåäø€g—°@€À]³¬Ÿ¯Ôî*¥*qž=Ó=Ý_?°ï?¼úî“nL–Qi6î6hÅ&Â?³)â0Ž‹Mžda盇ÍoÁ´w7Û8±Á¡?¸îÆÁt:ÈÈõ\=õÃ(§Ñí¤Õtò[Wm}j«©éîe`&7í‡Ó °ÓáÍ6É’àç®ÖÿLÒ5ãÞíÞÐ@¼Þ:NÒ>ýÍ6Í‚?p¦ïn~ÿðO0¢ìذLÒM›°ˆcaç±i[ìŒã jÇžZIp{³µyà¤SMSUc{æ ']&çcÀ ã"Œ$)&z¬‰â0Ëì&7cžÈ¹¿‘$ îªÙIõ湿ù(óûêÆ–*Yé!ˆØ "Ù$è”]š.áHNÓÈâ+‚{ÚùH4ô–þ¸Ç½ëd§Ê1Ù»ºï”tÕáªö<6£ìÐ?ù›5“7Œ¢âJÀœ¯ä‹óÇæÐ´ÕО© A ggqb :ý\32Ço^µ2*ªQMN×ó5‰ÀžïÅ€®È1]ÊqqŠ0{-§GÛ&IüRazð «Î3h×öYXf™08¸£¨KEçç^£ssÑu\‚„^Øà—æÎsÓëQÖ4ÝÝPÓpª§Óà„€Š ³;7 iã>z@ÕɈût9pZµÊ†žKrâ³éù.V€‡J®ÉmA3™‘}EwЉÜàªÝY:ªV¬+è'mˆôÑðËÐ*nüwe…3õL­'õÖ3·I_? =Njƒ_‚5®2»â$ÍC“ÂÉðÁžƒé糡c¨›­žb¯Sh¹dq¯±k²odxÚ7z¡gaí\«ÔÚVÌOçG ¦¶N·ãTÉá ôû¹÷IlhSEŒº?O¿§X ¶¢g˜òel†×˜ö=á(ƒ—²%[ž ÃÕ Ë™™ g:çvΘ£I€ˆÎ±¦†[M´c ÚÁ­Wù°y'¥ðÑß j>ŠBHE~qpßËÉhöÝG¯`43 ù*"öóíèA¨4qÓ¸ H£y! «>0„ž¥³ÆSéú©¹Q«!P¥ý•üàÅo[wu$Z%§!òSüúÔ™ñƒŽˆ‰âµºæZÇÇ·×¼*¦%ä6#©È 0ÜÜ­€;]À$:#A¤6Þ£{=Éê{†NüFzÙTݽ“¥ìùt[%³?ýB Z*–Ñ’Wô$NC“_1#,<XÂ'ÒúÓåfkàYwXõ½’ý"ó”Ó(̳5åú4qp³ÍÉG¦Fnzy¤gDåaš«î‰#ØõÅâ™ ôÀQ‰§ìHŽüÔWCë–õCÚ‡ê£X,ÚŽT¥wÌè (®'bK£·jhF¿´?Šßª‰q Cûfyîó —© 3fiºˆÚv®–œ‡wNbE­œÈ΄Àì £ð•‚W‰W?@„‚–Rbû\ˆ‹H@$u—±÷±²ipì ¿ðŠqæshE€D¨ïßÒy ¤ÁÑMf³ûLLðÞÕ•x5Ì=#eê!Ѹ\Ô$17<iê2~`c”mχ~8âÍ ÇD¦>ŽÏ—vâ2)4æø ²•¸8òQ¶a‰sšÏAfØà·zѨT•¬É_,ì9¬ö·³¥E蘭·ûóéf/œŒ¼wutÓIÑç¥CãÔÀ¾òõÆâ,MŽE3÷ÝK—H Öäêï¼Ú|å"È_ÂÈ\q_·ÕÈžw8󻞞1ä8MÉíÉõIñ$\“ºNëk2/ÊÐ@9Üô’TµÛ½ü€‹›X@Tl’Õþ»SÇ[C2¬ÀÕh%iª>jR«Cé)9ú¯—5ÈÏN5z_’šËU/ã4!¬›}àéà  £<[ŸÖ(ái)-Ó¼áEqa,¹"Åvó• ÄPpLz¾¾ƒÖ(?âèÕ(ô \MtH}9‡Ϩ"8“keƒ 1´ÙRBò”ƒNˆJ˜ÞŸtZoŽiùžá æ§¹H#Å</Ý,g ˆJßÉ >õ æ È8LÕ%èj–cžª®ÌZo$į¹ªÚÅÆ„6Ë}î?R²ö’‚˜"„?^oûª5͇š¼„9eëírßÄ 9¹TÌúNr¬tÚ¯_¤v ÒÑ• ÿùšØŽS€—r"[faìm}ɶGV'Ò–ä:¤îQÎFHHfò´wÕqñ䢚2°ÌªÏ·ÚîcR>ñ+n£, ÃêÞ_że¹#GsM`é>ž6[¨FéåÄAÌ6Î2l• )ËÅçdÞnÑè¹z*ªÞöHw/G»céú¨ _oßÖxB›ˆ+2_ {„Î嚘g3vïâ|þÂe›I•Jaõ¸V«;÷…p¢0Êpã 2õ¡.”0‰4»¥Æà@ NaÇÙ@düR-úå\‹\ŒãV+—d@¤>ñ §æ9WK. újMFª¶ïn¨D*áS%joúÂ7L\¼•¢˜Í)ë6œtS{_=8Y=4÷û‰ô‹:·¼õ„éƒH/-Šâe6UzXÛ|TBã‰vÃÂt¸äNW;ËÌ–,e:¿¹6c‘M"pµØÂ—¡$¾Ê*5¤ˆÚ)ñâ–Ïê0%À8?ÃN¹Só"_âɨPt–Æ£ºp4Ïýé-ì"÷ß%ý>ØvÓrñg¦oãäb~ÆÒ5Z:?ǘm¡¹M ú SS¬(¥DYFì8ŠÒ3÷‡¬QÎJMRŠRo‡ÎåUŸNT¤ÖN¦4ü(Jý’ˆ¡[šæ5r`j˜GÄ5jy*U6"ú3ÈÊKm¶œ“•µ&*—¹ c_Ýõ]-Š1é ô«?ˆV VÏ•¤$jÑ—Z–LºÁëôäSx´¼ñ¾jùC»¥øqÔ%Õ°Xÿ Q”îˆÁöÔä66Ié[W-*Ûß<˜4 “<öù%Gp¦ý)ý?º×ô¹"‹½)d‚àô«V–ÅÞ:1Öº*ÎR“Þ˜&ÝŸd0ò½]±’o(,Lƒ÷cÒbþ†’©8ià¨Òö÷à¿*à ±¾?XN¾4GΡ/ç¤êö$`š$`Æ/&=ç3`2|Ñ—øJî6eæ90<ÎÂÌ*^k‘¨ˆ6e‰:’ùÊ2,m†=6,ŒBÁ;ý€-ÜL+Üóg,lè N¤ž2ìtÛgù9î¡éOãüa‹>2Cšg™~¢Nz¾0HíJép+̓;ÐA·R2t´ñåº ›¸1ø±³ó×¥"4³Vœ^;ÜgÅ”F¿Ïj÷øTÅXúŠe®\òÕò°4äúø‰ÖNxu…´b¿ŽåáÆðÉØ .€ ðoಌKÙð—Tull¥ÿ—W¿ÿ: p– endstream endobj 2734 0 obj << /Type /XObject /Subtype /Image /Width 143 /Height 200 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 31653 /Filter/FlateDecode /DecodeParms<> >> stream xÚíýgœçuæ?sÎazzr ƒÈ‚I IY–¼ZYeÙ^Ë.»Ö[åõz½µÖ®kË.oÙe{]vYkK+É+‰V %& Ò €Á`rèžé™Î9Ç÷ÃÏx ¦‚E `ø¿ÛX(pÐÓýœû>á:׹ޤÓéïâKüu‰äÝü½ÿßxIßëðÿ^ïàõÿ¬õAzIÞOøC~Ëÿs‰?úëÝ»[NçûÚì]œè×·–h ©T*•Jï½IÿïV½Ó—ü>¾—h˜v»%$‰D"áV …v»­R©T*• Ífû‰ÿ–~¯Èûúu?­Å ›I¥ÒN§S­VÃáðææf6›ít:ÅbQ£Ñôôô`9›Í M&¦z¯Åàu?³Œv»-‚T*m4‚ lnn^¼xñêÕ«­V«P(èõz£Ñ¨Õjív{¹\V*•FÃáplß¾½··W¡P¼×âðºoÖïG<Ïd2³³³«««sss•JE¥Réõze2™ßïo6›F£Óé¤R)—Ë•Ëå¶lÙ2<<ÜÝÝ-Þ°ÿwÕ¾ïëþxB"SµZ=wîÜ7´Zm"‘‡Ãõz]©Tv:µZ-‘HÌf³ ÍfS¯×g³Ylæv»/_¾\.—[­VOOÉÞÍG­V«)Š÷äüˆ¯ûs·ø¶_ýêWgggkµ“J¥A(‹v»½¿¿¿Õjy½^£Ñ¨P(ð™©Têüùóãããõz½ÕjõööÚíö}ûö½ûaŒßø¶Äç}øú1ï–ø@;N«Õ’Éd7nÜ( »vízùå—[­–ÇãF£étºÝnK¥R­VëñxÚív§ÓÑh4\¸¾¾¾X,æõzçççëõºL&³Ûí}}}üþû.<¾‹\~ÿs®ûû’}ö³Ÿ}Gÿ€k!~Ãv»-—˯^½úꫯvuu…Ãáõõu©TZ*•d2ÙÆÆF§ÓQ(õz]§ÓI$J®|>¯T*õz}"‘ÐëõÅbQ.—ollÄb±P(äñxÌf³äîëÝyív›»õ~™ïøäòeDw'“ɉą t:N§ …BR©T£ÑÈd²t:N§=ÕjµX,n·»ÓéÈår‹Å²sçN—ËU«Õ¶mÛÖÓÓ£R©äry0T©T ç΋F£ïòSû@T{ïìî“M´ÛíV«…O“ÉdóóóÙlÖétJ¥ÒP(¤R©°D"‘°Z­‡£Z­:Â’N§“J¥ù|~aa!N»\®v»B¡R©ôûýJ¥2—ËÍÏÏFƒÁ Ü-àô£”H$ïOøŽ?¾B¥RµÛm™L¶´´tþüyæêêªR©ôù| …Âh4êtºv»m4M&“×ë5™L‹¥P(hµÚ›7oޝ®®Þºu«V«…B!ÌÓjµ”Je©TJ§ÓJ¥R©T‚†¼ÿþ»ðzgžP„‘€*$Éääd>Ÿ/—ËV«5—Ë•ËåjµšÏçkµšR©t:‡C*•ªT*“ɤP(âñ¸D"©T*N§sçλwïîëëK$[¶lÉd2ét:‰\¾|Y©T^ºt)‹q8~"üÿo¯'nñ¥Ri«Õ*•JJ¥R„v»J¥¼^¯ d ÝÝÝ2™¬V«Y­V‰D¢ÕjËå²Åb …B"x±oß>¿ß¯P(öïßèС;wž8qB"‘œ,&Ê.—K¥Ró†Åb1333kkkƒ!NŽŽ®¬¬üæoþ¦Õjý•_ù•L&ó¥/}ÉívƒÁ}ûöY,•J¥V«­Vk©TZ]]­×ëÅbQ„l6Ûjµ’É$9j"‘(‹|«ÕªÓéè±Y­V©TZ«ÕšÍæøøøÖ­[¿o\|_ì'ª0êõºT*U(‰„¬A&“ ½^_.—q†n·{dd$ŸÏ?óÌ3«««©TÊétÎÎξùæ›r¹|×®]½½½ƒA­V»Ýn¹\žÍf———ƒÁ`2™´Z­/¼ðÂÊÊÊÄÄÄ#»mÛ6î.å`µZ]__‡ÃÁ`p``@¯×¿¯Ú¤?ªû¶.þáÖ­[ëëëÉd2ŸÏ¯¬¬H$’H$F»»»u:V«•H$@Àáp¼üòË¡P¨P(Èd²gžyœp``Àd2¥Ói’…ÅÅÅoûÛ•J%‹•Ëå?ÿó?¯V«R©Ôb±H$—ËU(A0™LÃÃËe~~þ¡‡zøá‡ Åøøx©Tª×ëg}}@dssS&“mݺµ\.‹E€’t: …Ÿw¹\‡Ãñîôn~ÈëÇ¿[€v»ÝÓÓóüóÏg³Ù©©)hJ¥Òl6Ëår“Éäv»‡‡‡‰ð …B&“™L¦ÞÞÞN§óÚk¯%“I‹ÅbµZý~ÿÍ›7- ÷Òív÷ôôx½ÞÉÉÉ™™™f³Y, E«Õ²Ûíf³¹Ùl µÛm JAäry½^F£J¥2•JÆH$BB(B.—S*•´­¡ÑÁIJÙlƒaxxØï÷ëtºH$’Íf].W2™´Ûí€ ¤9˜ü=ì[þøÕ1Ÿ˜¯­P(žxâ‰/|á Ç`0ØíöX,¦×ëc±ØÜÜœì^¹rDŠB5•J5›ÍcÇŽ•J¥f³i·Ûé~år¹ A4M4t¹\@ÆNgcc#‘HhµZNqäÈ‘ÉÉÉ••·Á`Èf³•J…JY„v»Ýh4Àêêª\.O¥R¤ˆ£££=öH´Ïç!ŽŽ:U«Õ2 ÑhôÎ;n·{ppð½ï[·tccC&“e³ÙZ­†7ÛÜÜÄù¼üòËF­V'“ÉB¡¶Ûl6}>_0ܺuk«Õºxñ¢F£áÿ ‚P,×××ý~ÿÎ;)й=•JE¥R5›ÍL&c2™âñ¸^¯ÇÆår¹ÝnSÏñþ‚ P&s/ƒ«Õj2™t:6›­§§#uÂôô4î]«ÕFFCË­ÑhD£Ñ[·nY,³Ùü÷á“Ü›L&‰D?==‡©®R©T>Ÿ‡Ã—/_ŽF£2™Œ@.—:tèÓŸþôêêêææ¦Íf+‹µZÈÁ¤Ói‰D¢ÑhÊå2J‘‘˜Ïç«Õj¥R!£3›ÍµZîšR©„¼gÏH>‰D¢Z­nnnÒ¼¶Ûí~¿ßjµ †J¥’ÉdŠÅb.—S«Õr¹¼\.céZ­f0H¦ŠÅâââ¢x˜Þ«öØOj->7õÍÇ?þñb±Fãñx(*—Ëù|~×®]V«U¯×ŒŒ8½^¯R©<ÏÁƒ½^¯ßïÿÌg>S,c±X4Íçóœîf³‰Ã¬V«po¨·œ/¨jµšÑhܲe‹Õj]YY¡`ª×ë»víR(F¬™Ø–Íf ÅŽ;ôz½Ûí¶Z­ív;ŸÏÃÅ/ œ¤N§Ãi‹F£Åb‘L5‰„ÃaAàŽÛ¿k¯ŸÔŠýÀN§óë¿þëÏ>ûìÉ“'?÷¹ÏqZ …Óéìíí=wîœN§#•Ïçó7nÜhµZçÏŸ¯×ë¥Ricc#›Ír¢Ûí¶Åb¡ÏÒl6766FGG›Í¦Ùl®×ë±X¬ÝnÛíöR©¤R©Êå²Çã¡în·Ûñx¼Ñh,//uuuMOO7›Mj‰J¥BgÇápX­ÖJ¥â÷û-K8.‹½½½ô¾[­–Ùl‡Ã¹\Îívg³ÙT*Eã»Õj={Öét¿Ë칟ÔZb.+»@ƒƒƒƒƒƒ³³³/¿ü2Œ¥ÙÙÙŸû¹Ÿ£8ݽ{·N§[\\Ìf³ÑhteeåöíÛ>žÉd677µZí¹s纺ºzè¡jµšËåxá.Ô)ü¬ØétVVVS”J% ¸rétšŒŸzy}}}fffttÎëê\?¸×ùËľ-ÞàÞü°Ó錌Œˆ«T*•J¥<Ïž={ôz=¾ÅívÉý~ J¥2™ŒÇG•#z­V …är¹^¯ßÜÜ$VÅãñf³FÝn·Åb1™LXëÊ•+™LfûöíF#™LF£Q…BÁ•dQ(‡ƒÏ,“ÉÈïkµZ£Ñ(—ËÀ¡r¹\§ÓÙív,MÕˆw•J¥.\¸råŠÈy7Mõã[«sÏëÞ¿—ËåNç#ùÈŽ;òù22B´~7­ußrBñ…ÙèMüöoÿv¥Ryýõ×K¥ÒW¿úUNwúôéçž{Îb±( »ÝþGôGz½ž‹ž¼¿Ñh †ŸþéŸÞØØ˜™™éêêâASx1Zi±X, ³ÙlõzÝçó%“IFÉ€‚½Ùl†Ãa—ËÅ$Y§ÓaTü×jµj4š\.—H$Òét.—c¦V«Aô BóU&0(?|³Ù¤ä„Œ&—Ë)Eæ—ÈÑ¿¡^¯¯Õj±X,›Íîܹóøñã­V륗^²ÙlV«õÂ… †ž …-‰™×ë}ã7fggÉÊ:i½˜=·ÛmæVêõºB¡Èf³Õjµ^¯ó7„IÂ^µZ¸‘ÉdñxœA½^OD&“ ÄW"S«ÕÊçó>Ÿ‚ßÇK¥’F£SâwÇ%¾3ka*AèAprIî}ñÑ in·ã…Ãáóoþ\.ÿßø <ÔŒñññùùùH$"—ËÕjµ^¯'ä@Hâ\ÓØ›L $°©&&&Ün7‘Ì»V«áͰD$áRÿ3©‹Åèw:r¹üꫯÎÌ̈ýnX7TøyÚ]˜Ê`0,..Þ¹sgûöíx…w-z½³¸%ÒªÉýd2ÙÛH8z1€U«Õƒ^¹råæÍ›Á`puu5 Y,–ƒ ¹\þÜsÏ1o‚ƒÏä]£Ñ¨T*ÎÀé鹀ěL&˜÷©T Ò›ùƒÖÿF£ÑÐh4ƒò®ÕjU«UÚžwîÜ©V«t8ʸëR©´P(˜L&þP­Võz=tq¥R944¤Õj…w±‡òÎîÖ÷2,ï¥.“&ЉÀ1ªÕêh4Z*•ž{î¹C‡ÍÌÌ$“I…B‘N§Fc0¼~ýú?ýÓ?Æ]»vÅãq›Í¶²²’Ëå C½^Gƒ‹S($âF£ÙlÆãqA¼^/hˆÍfƒÇÁ1êêêº}û¶L&óù|dêÔs¾&ÓI¡ÄÎf³¦X,nnnR*ˆ]µZN§¼¡V«Éd²P(´¸¸844ÄðÙ»“nüøS ?èÿ6 ‘D"I&“ôGd³Ù´Z-lÜ-[¶ÄãñÍÍMb†^¯?vìØÖ­[½^/Ýç\.G+„V¯Åbñx<‚ Øl¶®®.§Ó©ÓéHâi¸¸\®X,Öjµ²Ù,˜/E:5‘µÕjét:šÅÀT‰D‚™pµZ õÃn·óÃÃÃÃ$år¹\.3_+•J­V+I©TÊd²\.·°°@.y^÷¾L«Õ{›Íæ·¿ýíÅÅEµZÝÝÝ}íÚµ]»vðÈd²îînÜ]µZ5ÉdR­Vëtº;w*ŠK—.™Íf.VWWW>Ÿ·ÛíGŽ©×ë‘HäôéÓðf³¹²²R©TÌf3€ºD"Q«Õ•J….s¡PH$årYô¤f³™$B«ÕV*‡Z­®V«ÕjU¥RŒŒP_; V«ÕhKjµÚN§X¸›(~À¬%¦òbÎFÛžj÷á‡þÖ·¾5==MhQ©T@p!ò…B‘Ïç‰{öìñù|N§óÚµkf³yÏž=étÚçóÆíÛ·‡Ãáååe©Tj³ÙR©”Á`@ߦ^¯Cj»™î¹dC:N„b±ˆèÈårh¿ð\.ͳZ­Ö××—N§‹Å"´FS©T8ËËËÓÓÓ»wï&ù YK¸'†‘k4 æSM&S¹\†úY*•’ɤ ÍfsxxØçóq'¢Ñ¨Ùl>wî\&“Éd2£££GŽaxáìì¬p—…A§˜™¦³…Bˆ™hW©TÄlH*•RxXtuu…B!“É422¢V«/\¸À0§Ýn—Ëåf³™)w{*•bˆÎçÄÄÄþýû…»²UÂ&cß··æè‰È¡\.?þüåË—µZm0¬T*„q07ŸÏ×ÛÛ ¯ollL­V3äp8(¶r¹\>ŸóÍ7c±X©TÊf³ÝÝÝÙl¶¿¿ÿøñãL†étºõõõh4Ê@f½^¯×ë˜Adç¬Ã`õ2ÂÄC—Ëå6›M­VÃ-0›Í^¯×jµÚív²vî.oužÜ’Y*•–––"‘eÀ»ÐC¹ŸA4•B¡X\\ü?ÿçÿh4šd2yîÜ9ZÃR©4 v:ºÉäx‰D¢Óé‰Ä;w2™ CAT*ÕÁƒ=j2™@c¥Rioo/ <ž,ùw«Õ¥ÅHFC«ÕŠ=úÑÙln”^RÙ@ ÐÕÕ¥R©ÿ”„ÄD©T‚8sY©Ã A”Ïù. ò÷ÍZaâ Ô¥K—n‹K$ð¡¡¡L&³¾¾žÏçõz=Sív»¯¯æ/` W$“Étuu8p NG£Ñ\.‰Dd2ÙG?úQèplÓé4T*¥¸–J¥ÌèõzJ"»Ý®V«¥R©Ñhd:ˆñu•J €ÛíF4 $ÐjµB©W*•"œFs‹ßN‹nr«ÕzÐyüýÏ A¤ªÕ*£v´zÁy)xõzý‹/¾ÈèU.—«T*¡PèñÇ·ÛíhãiµÚ rkÚ"`ítc±XOOL&‹F£>Ÿ®•Á`( A·Ûíb±ÈÏç'&& ¹çr¹x<ñèæÍ›W¯^=wîÜÂÂɺÍf´ÛíwîÜú‚ªV¯×y¦N1þ’é P](ý3½^¯T*!Œ¨T*·Ûâ&OϽóPG‰D‚ùó[[[£™÷àìÄë~Þ-ŠG¾X<Ù€¡Phii‰0>00P­V¯^½šÉd˜†ËårF£ñµ×^[[[»~ýºF£™ŸŸ‡BÛ×׉D`Ž}ä#1›Í·oß¶ÛíŸþô§ûûû¿øÅ/Öëuê\²J|u„ÜN§ãóùÔj5I|µZmµZO.—+•JrN£Ñˆ Íårx<\"ÜP¥Rɸt£Ñðx|¸V«Åãñjµ:<8S ÷7ƒÇ½ðÈÆÇÇ777Çææ&Ô­V;??Jd4ÀîÝ»»ººFFFL&S¡P`lKÒ<†D˜÷:qâiz(Û…=844Dý„=€*àbPƒÉ ˜XÌeæ¿]*•DÓív#ƒ³²²Bóeppq£X,æóù@°âñ¸×륛\*•ŠÅâµk×r¹Tó€µAKAvìØ±’Ö"¾™™æ…766®\¹ríÚ5ðÜX,–Ëå@Ê9ïÃÃÃJ¥’¿Ñh$+ãAÈår²ƒÁ°mÛ6ø”Éüv‚ 7 ;“ý”äÐum6)F4ÝÜܤ³X,>Ÿ/¬¯¯ÃÀðô‘×××é§X­ÖP(”H$ÞÙ†õzýÁåñ÷?ãÄ õööz½^>: é¹¹9òCzƒ$‹¥§§è¯V«¹\®¹¹9Z!Ù5\.‡Ò[¯×¡rJ¥R»ÝþÔSOŽŽZ,p&ê4ŠÅ"DR2CŸÏ×ÓÓCdbM&“U*•µµ5´Þòù<¥ÅÔµZïât:³Ùìúú:ßÅáp¤ÓéW_}5‘H<иu?ë-ñÈ|B{"ØpÞa³À/S*•o¼ñÆÒÒÒÚÚÚÎ;777q¤2™L¯×ÃÌår$ô¡Phcc• š6ü_£ÑÈÐFKà( Aš¢äåÍf³¿¿Ü9 ‚€Nl.—ã‚–Ëe>Ÿ¯ÑhPMC!E<Àf³1£®T*ƒÁ ÿjvvviiéªRÝÏ»%Ž‘ã²†‡‡Ác„»³:@¹\njjêÔ©S¡P(›Í~ãßH§ÓäЭVËb±äóy(çγX,/^¼~ýz(êïd2™˜ _]]µÛíÙlfTQÒÊ#½^ÏW*•´@Q«Ìd2F£‘òÙårÕëu£Ñèv»£Ñ(šûöíc‚7¨T*———K¥®•#¸eË·ÛG6›Íd2o;»ï_kñ"ð´Ûí‡~¸§§'—Ë wAONz£ÑˆD"KKK###ÙlöÊ•+—/_–Éd¥R)PcNMMáÊÈ;ÈÈ#‘ÈÂÂB(Êçósss±XÌh4^½zõÆ6› >Z>Ÿ/‹…B"x Jä‡:ޱ”|>_*•ÈW™à#{œ™™‘J¥;vì!C§ZS¯×].×èè(ã0n·ö*’DÓa$ñõ@ôq†6›í§ú§÷wW©T* Ì@,¹´‹…An«ÕÊ´¨B¡èêêJ§Ó_ÿú×wïÞ=55ÅXÈ/p-UœÎ………D"±}ûv”‰ ‚½* ‹ÅBøîËår<Ùd2ÉÃõù|$î\DÜ]oooww÷w¾óœj£Ñèëë£É y„¤§§Ú=‘Òëõf2üÊâÕÜÿ»ÅG‡¸ñüóÏÓeÃË\M¹\^__7 ƒƒƒâÔw§Ówøð‡?¼wïÞ›7o®¬¬¤ÓiŠëååå™™™D"ÁÀ–J¥ÚØØ¨T*à°P—`)Ñ;fJ³ÑhÄb1ŒGk"éÊÊŠZ­¦ø-•J‘H„Q~àA8÷|‹ÑÑQ§ÓÉe ¯¡¡!2UzÓdC¤‹NQïA¡ñ‰_üÅ_ìîîÞÜÜ\\\ääÆb±ÅÅÅ©©)ÌÁj» ÀÁ¢B3³F¢ªüµZ­ ý~£Ñ¸yóf4‘¢E‚o¤w¹\cccDP§`0X«ÕVVV2™ 3¸kkküqá×:y°?™Å§?ýé§žz*Ãs µZ‹Å(ž …‚8_¬Õj8‡Ïž=KT{î¹ç^|ñEx€©T*™Lž9s†ÛFõ †êŠ+g pYtY„4‰Db³ÙFFF(ž¢Ñ(JÚ”eļjµjµZ!°.--ݼy3“É ·W¼DƒÁ€ XWW—ؤÂ÷ïx?Z ¨Z­þßø-[¶ÌÏÏËd2ÈÉ`ä@y©TŠ¡D¯×ëõz›Í¦ÕjEP’âêêj£ÑضmƒŽ$ŠŒñ0÷Hue0ÈÀAí‚—ê•!"j^ptZŽ …‚á ÞA„z½¾¹¹™ÏçÑa}}ñ Z­’7ÂTä‹`2ø{_äV«þôOÿtÿþýTÁ4!qV  år9‰À€Èd2hh4šP(¬V+Ä7ôZ“É$h7¦"×ÏçóNÇápPTc°+çD*8ŸÄ¤¿¿;ÁdBLŒÏÀ;wJ¥3μ3EÄFCÇU&“}/mùƒd-‘ßét‚ÁàüÁ<ýôÓ°ÃÈÄè$¡,"²ò Ø a¶¼¼ …†††èöºÝn1ëËmˆ‚däŒ[AN"àƒ3Æ*ÿ6‘H x%›CƒÂ¨ÅbÁ£’§Äãñ\. …jµšZ­æúB5DèE(Ž&àäÛ^÷qìõÁZ‹ ØO£Ñp»Ý¿÷{¿÷»¿û»6›ì‹ö+c¿ñxüöíÛ:ŽÙd³Ù ¤û•¯|evv–)àõõu‡ÃAŒ! Ø0÷ O1À¤p½^/ @ìz½> ,`DB¡ׂòœâ;s)¹Öõz½»»[”)¸Ê¢Ü냦>ð»…÷û¥Riÿþý¿ù›¿Y­VAtè„uuu¡m±¸¸˼Z­ŽK¥Ò¡¡¡—_~™(h3x¿d2™Ëåb>…ßEµ¤×ëʼn[ªZ€W—Ë…R+X3ŸgŽØd2uww³^ãK_ú’Ó餥R*•€Òkµ]ê$°®r¹,:FT¼Ôj5°T*Õj5J Qûè™ßÒh4ðº$±n·›í‰ Èä#8 \Y("‘ˆðƒ·Ï¾O­uïÄ?Іp— ù>ýéOãšW…J¶¸¸Øl6 òL6ƒÁp8ìñxªÕêw¿û]»ÝN]ʼnf@7ËiÀ­ñˆùíHÈF‡Ã1<<Œ$à!—´…ŒQlñh4·ÛMuˆ:?Éù GÀ7H=¾¹¹ù@IjÄZØ µ­VËPTçžUºív{xxø‘Ga£Cpb¡å Ãjµj·Ûs¹œßï/•JápX§ÓÁ»!èÕÿÐ/&ít:Ì7öôôð"Á”œEÚl±X,Nƒ%2G+î‡hµZ‡ƒô’SÔRd%©TŠ&57>?ÐÐõ „&ÛõÀ÷ƒ‘¹‰ìIqÈœ”zË–-LÞc-†éQÓ élêÄãq¢ £A×®]c‡F½U©T¶mÛæóù ,j4«ÕÊDzWWרØ7Øï÷W*•·Þzë7ÞàrƒoY­Ö±±1ÌX,·—Ñ.ä<¨…q}N§S.—Ì4M½^…B[¶ly@ó콊¨5ÉYÁ©# ~úé§_}õU~†12ŽT*ņÂL&Ãø)R(ÕjÕb±¸\®õõõ‡z¨V«-//3™ é%¤šÅÅE¸:^¯·»»Ûåry½Þþþ~‚ „B¡7ß|saaA„'žx¢»»;3EY©TØOÊê48†t: 8ÁK4Àÿù|>‰ú?ˆ†äý·–øaœá ÅÜš`FVðçÈȣ㸸˜&ŸÏwuuMNNÒga²¸»»Õ$n~ögöïþîïàÓëõúÁÁA2r§ÓY©Tt:Ýèèèã?`!®¯¯ƒg2»Ýn4].&¾b " …¨T*xN‡Ž ÇÍDò8.ìT÷ÈæÝ÷gû 2xán9 _'Æ-ˆ•`ÇŽ£ HFÎõb– •¯R©„“-ÖÕÕÕ_|Ñf³•J¥îînÖ! jµZüñ_þå_þ·ÿößöõõ|Йd(¡R©ÌÏÏÇãñååå“'OÒ¥$ ÍÌÌpMAèîî6™LÔytXá ÂÚÚz¢ú :ÍŽRø`ãõØìç…øìwäÈ‘Ï}îs´µ(œ)e`Ÿ1á!3ØEb¹³k×®øÃ.\0·’†8pàSŸú4^0-ÊXAÂáðôôôôôtµZíïï_^^¦x€4Ï)A¿R©T&“Iš±XL£ÑìÞ½»^¯ÓkÆä÷˜Ÿ‘Ö{e(>HÖúÞ± 4K¯æûŒ ÍÏÏ#Ä1Ôæóù<Ï;wD(cn•J…a,üêúú:I#‹N<ÏàààÞ½{S©S@©\.ߺu+•J]¼x6õÖ­[AÐQ«¾}û6?™Éd€3šÍæêê*ÒzPE^z饫W¯nÙ²…å+++¢à/õ”h”(0kÝ»áO3Äï‹{Â% ÕU£Ñðù|$Á؃ý^`•Jê9È,Ò“ívûOÿôO|ÓétÈP÷ôô ¤æp8l6’‘·oßž™™a=MÈ«Õúæ›ojµÚC‡mllpb*• ÅS>Ÿgjý~áÆÇÇÏž=ûû¿ÿûñ¡Ñh¾üå/ÏÎÎf2©TÊ6x,--]¸páÅ_¤ðA²–ä_.üÍ#'¥ò:B¡P(,ËÚÚZ&“A(œüBY±X4F£‘¡‰D¨$Š ~¿Ÿ&>;vì0™LÉdòÂ… o-‰|>ßôôt6›ýÌg>cµZ?ÿùϳø—VÈÈÀÀÀsÏ=×l6ÿò/ÿR*•þþïÿþÖ­[oß¾ýÕ¯~•Þ)•ÉÐÐZ­^YYbuáÂ…øÃ¤ŽâsøX LA,c¹ ´n!ÒÐáÕjµ6›‰+±¼¥Zk×ëõL`0¯×ËÒ:æ…N§ÙlÖjµ+++Ífó…^صk:ü§Nòz½£££ÑhôôéÓ³³³ X"ɱ¸¸ø¡}Èh4þÃ?üÃÌÌŒ×ëE/’i>>Éw¾ó·ÛýüóÏ?÷Üs6›í÷ÿ÷oÞ¼I5:::22‚êóää$ †3µÈ˜iÉÓÚGWpˆN.Öxýõ×D'…ºÌ`r­Vc,•Û‰Dè'ÑGf\Žù‘‡z蓟ü¤Ýn‹*•Jûöí³Z­333/¿üòââ"ÝjhÑh4Ïþó“““ü®b± AÛí¶ÙlÞ»w/ª*¯½öÚÙ³goÞ¼iµZ9Âèê¹sçîܹÃàª'Õj5_¹rå±Ç»ï¡ëà"¹ZÜcÆ(€H—À=ÒŒJ¥7nÜøÙŸýY©T ›LÌø=(…¢ÑhP e·†Åbq:ì§ãj?~üÙgŸÕét˜Šp»7ß|ýj¦ZM&Óàà äµùùùV«•Édø]jµÚçó™L¦ññqǃŒáéÓ§'&&ÌfóÐÐÐáÇѠ*•JSSS´ÿIU½iŸüä'Oœ8A•yGdzZ¨ ØFÚ}€0™A ÷Ù¶mÛ™3gìv;êM¸P8¹ÕjY~µZ­V«á]—Ëe ú÷ÔSO3LK³ÑhܺukccãÖ­[ápØh4†Ãa¢&p×ÔÔS2™ŒžH$!ÙÓëõù|þë_ÿz8æÐ|ö³Ÿíëë“ËåñxüÊ•+Œ/p,C&ûg÷‘ /r=á¹[¢Î“˜eˆ£pâÿ˜ËtúôéŸù™ŸA÷8ÈÇëõвL*•J«ÕŠ u‹Å244äóùŽ;è'þºåå剉‰éééd2‰²h¬F£±ÛíæÆbŸ>}¡P±Z­‰DB*•öõõ¹ÝnzWr¹|nnnaaa}}Ö â’€È!ÌÁxÒÞ½{õWjÂ}Ì  'üÞ? w;ÈÂ=ºP8L©Tú;¿ó;û·˸M ‹Å¢×ëN'£WÚó¯×Ëroo¯Èû, §Nºví2 ÈËY1t =‘d2™Íf±b0t»Ý,“B¿š%¯ñxœÂÙ.ëA}F·L ÈПN§ûOÿé?±wàýn­òj6›XÜ;ìÅWŠÇãÇO¥Rlñûý‡ƒÖ ÎM.—G£Ñ­[·z<0{:aV«•Ç_ýõÛ·o3mÇ%Ùa/×úúúââ"4p¤·­Óé0}Åcœ ð±©ôY?U„b±ˆK„+‡Z|ï_þå_þЇ>t­õÀ;&o{´p&" ÅIF£###‘HÄ`0¸Ýn·Ûír¹@{¡B8Î;v¸\.êV+»N6773™ k‹á’’C ¿ß¯Õjá(OH^÷½Œb"|8>}úô믿¾k×.£Ñ¸ÿ~*\$Ò‰ã$Ífó¡‡zôÑGçççC¡Èåp:žœœŒF£ø=Ta¹|äÐŒ®&s¹ü'‡, S„Û`šéÓ‹¤6ìŠhY‘”ãÉݹ|Ž šj O¬­­¹\®÷{½õÏo-—ß› ‚€“ÙÜÜüó?ÿó×_}ttthh»ÝÎô£×ëõ¢Ÿ}öY—ËuåÊ• ´ú™ž›˜˜¸qãM@?Ú("+•Jä[IÉìc±L0 š¿\/ÒBœÆ }Ì¢Y°>ä„ðKœÃŠÜf>µZ-³Ì[îÝ»÷>æqÐZß{«XËóå/™nÈöíÛa¤˜L¦|>¿¹¹‰4㈠`ß¹sgrr20IÿÝï~wbbbss²°zN###h[p®©É¨ÇÓé4I?Ó(´9OÜx¾¯V«¥R)Q+Íb±P<àß GBŸ"ø1Ä9!jp.—›ÅÆk½ÍTR©tuuõµ×^»sçŽ Û¶m#È3õ€ì\ooïOïa›F£6,y<íRN˜Ô($,‘m6{ƒ©Ì8 îÝý÷þ²G»sw§"yѾð…ÕÕÕb±ÇYßh4VVVh°„ý#ùȾ}û.]ºDqCòÆ48èT ‚°¸¸ÈÒŒ‡zè±Çs¹\©T Î%Hg¨“³ …"•J% æ·óùüüü<ÔëL&#‘H, ¢Á`Àx°<¸7ð ØyN²‡“d…¸Xcál)É¡Rö‰UÔ×v»ÝçóìÞ—ªë'²–¨Á‡«×믿þú?üÃ?`¼ååeP"Š|(·ÙlÖjµF"0õ•••ååå®®.$ž)ÐÃÑ£G_xá…Â+K˜²ÛíSÓ›gLŸ _Œ½Â]bH.—C¾"†Ï ÎýãŠàHÁàÅKC ۂĨPœ¢›C…yjµ2—ï=òDÙ­‡2þܹsßøÆ7®^½j·ÛGGGoݺEˆ†ðÅô¡­[·¾Ö“ršRù|þïþîïÎ;¥‰Í¿­VËãñ¬¯¯ódœBR•ÃK$ ûR*•hV[­Ö©©)A†††8 …B ¨×ëLS¡ 1´\.¯®®.--1'â@<¯d2 J"ÊÒÃLªT*lB©â[ 97È2 FïM׃…ž|M,’IÄl€p•JÇÉúr¹\&“Sƒ\.GóŒDŽÌˆ‡Ç“p(Q#³;ñpkyC’~ Þ–!N'-cñçß»%ö¿ ÅÅ‹_}õÕN§ÓÓÓ‹Åär9¹=Ž'N¬®®þßÿûùzV«•Ô€úƒrR.—;Nœ˜R©¼té»^Øâ¨Ñh@N³Ù¬Á`Èd2‘HÄn·OLL0×MCÝï÷‹Å……âò¶Édj6›‡£Óé0èÈ8%Œ>¡8„I3E¦Tá.Š#Q¿ó¯U"4·|Ù/Dþe±X„» O÷ñný+mMLÅæT$§¦¦Òé4ôzýŽ;†÷ƒ³@¾„‚¨6¥a “Éܾ}›^ Ï­ ÈC¨ˆ»677ÙÜH¼ ƒ:ŽýikkkY9×ét\.‹ØÐ××7<<Ìd.ÐR,¡P(6„ÀZHÞHe"j>ÑÁ=‚@¼$?i™L–J¥ ü°ÁŠ˜z¿.–ðÃ÷ã®]»öå/¹\.‡Ãaú~ènÐÏU*•_ýêWWWW!½B$‚aB̃»i2™X..‘HÀ£p.—ËV«•‘ãðð°×ë%—q8@´áp˜}vA»»» ›¢Ñ( a6›eËО={âñ8+DélÑ`dŠ'~;&pâ`Ñ"à‰ó(î%E!€D׎ ä̧Óéááa ©·,…9ôÿ£ß¼e;u2™üüç?OH¥R0 ëõz0 ƒjµ:›Í^¼xñÆ.\@̓Iôî*Á·Ûmx¸øH$¢×ë@÷í€T ÆÅÉû‰…Baii‰[H¦ V«ƒÁ Ýn§Â˜w…ô,‘HPS3‹çp8¸OTÇ=µ¾¾Î"O©ü Ń! J€&ÔË ÷ñc8j†*D1<Ôr¹+DæG¿ xuJ:àM§Óét:;·Ûí šår9 Bùá×ëû{B¾É¿øÅ¹¹9qoL ä{XÉGªq¹\,†aÑΊúF ÔÄ<*©1F €0î%;P±²¸;ÂÅdß_¯×G£Q.PµZ ƒf³Yrwo;'IÌ/¸Ç ¢¢ 5¾€ŒÁdÉÔj¦Ö&¡`™k½^jµÚï÷{<>Ìfs0¤B 5Ã]Dvaaaaaauuuzzzii‰w[ZZ¢„Ào‰3Ëßk³ïo-\êÄÄÄüü<(²Íf£’§[Šy@ž…ëŒnX”®‚#Œ“%£ GÇ~ ú¥RÉáp ?Øjµ¬V+°:bNZ­V.—ëtº½{÷ŠÃRd8î:=FFÄ»ºº8°X,Tîƒ;‡‹¦£f2™ÀÆácÕ9u WÁh4B»à/éòĘäD¦FLO¨ˆ… qÈõQ8†ÃaQYñÒ¥Kׯ_G®ž_ú¶Iœ%n wWI±x½^¦ 3™ Í'›Í¦ÕjYUEŽ´šÉdØÅÚ3 ’¨Žùzøkú dº¨s¸ …‚ËåŠÅbµZécb Y(SˆKKK¹\Îçóår9îG¹\öz½ÔÎñxÜd2K\.PEooïêêª\.÷ù|7oÞt¹\‹‹‹O<ñÄîÝ»———I%Ľ @T 3C[+•J©TŠw»7³ÅOz<ˆ‹WŽ)dZÒ¹\ŽQh¶VÑ|@UÜòæÍ›©TÊh4>÷Üs###?ª'än?~~~žVzooo"‘@OB»TIiGµ@À ‘W¥}~øðáýû÷>|¸ÓéÌÎÎ"‘JŠ•Édd2ìŒJÄ&Ú[,êV¶M²æqÇŽårÞ.Â2…›7oz½^øÏdz‰$•JY,ZŽxúé§éB¸ÀÐn·³kÏ`0°´•E°°HXó’‹,=nÊjþ¥á“„¥««K„õõu¼7©#…õ9ð“É$íº{oس(;m_"0óÏ ™œ,`=šâb œÙŠDä†v©×ëe27»«WVVHºDãjµŠ‘Ä^½+ Á™¬¯¯n–ÇãG’F£ÈC¢ßÜÜDÿ§§§Ýnonn"úŠ^y±Xìïïïêê¢ËŒd9Šx$hÔdétšM¿`»ÕjõèÑ£‡òûý{÷îííí­ÕjO?ý´Åbù…_ø…O}êSGŽY]]­ÕjÛ·oŸœœ4HªP„H$’õõõH$’H$J¥’ÕjeÌ’âO+°ïï ±'ygµZŽÀ_ó®ªYTòâÝ^ºFœH‰+‚þl£ÑX]]EL\ܾð*î”@M3‹…Ê´Óéd[Åèèè;w677ñ]¡Pˆù0£ÑØÛÛ;99¹¶¶&)È‹Ûí¾qãæ$K¥Ò®®®éééõõõV«µ¶¶æ÷ûEMìT*…2âÕ &“éÃþ°ßïç;âÏ/_¾‡%I<g#N¹\C‘Óéôù|çÏŸ'ÃìïîîN&“‹‹‹GES¨î‰Öúþw çFGçÂ… ¸¨Eø´{»äÅb¡Ž(nXQÇü6™ áp˜ú"h›ˆ÷P¸0oBbFfÁð9 £ìë¤þ¥ÝœN§Q*çãp|>=\ÒQŠt® 2° ļ?Ÿ°Z­ú|>ÑI2I²)Ì y¯ÉdR(o¾ùf.—{â‰'Ä.(JNËËËÓÓÓÔ…KKKÃþÙŸýÙ¿øÅ7npõá¶šL¦§žzê7Þ¸qãÿœFTªx<¾¸¸È™ƒáëv»‡‡‡áë1Sk6›QDüW0xá.ôéóùПU(ƒƒƒô&Àêõ:©#H9¦"k€gI‚ .d Ø<ˆýû÷“ˆ[aˆ+###ƒƒƒ×¯_O$.— }ÞZ­FVÆŸq°¬\‘e½^EØ^«Õúýþd2ÉuD0Aì.EÌE„ØY•FüÔ©SßùÎw–——¾ýío_¾|ôö;ßùN¹\Îår{öì9yòäW¾òJ@Fü‚Á` `<7ŸÏ¿öÚk‡£··x:¤ÓiöÀÀÀîÝ»öb¡ÇÈÈHWW×ÊÊŠÇãI$¡PhttôG²ÉˆÀ™3gèÌÂ¥ÛŒ 9¼ÔI<Ò ‡Ã!‘H(y7’{AΟ?êÔ)“É422‚æ…ÈjnµZP©m6Û™3gHܵZ-’‘ø^qïµÁ``wu.Qòv¡P€.ïr¹è!ˆ-]°.®‚"—бÈXà^,2dAŽ\.|ôÑGÇÇÇ·lÙÂþ·^xá…^ðx<‘H$ÏÍÍ Z­ÖGy„3 Š þ°"ü">VVVÄÍ:V«õõ×_ß»w¯F£ù×­Å«^¯oݺ5_¼xQ §±K™¤…BPmšËZ­vppÐh4&“I\%%:=u­V‡ÿñÿñúõë åÚV«Õ{öìyþùç{{{3™ÌÌÌŒÅbO§Ó¢% ÿN§“•v±XŒ‡f.,Oø¹€ñv»ê -ø,˧ÅEQ0¢'ØW¥R_Nwøðá—_~܈$¢Z­:@h±ý“V'†×ëudáð`’»›àJâm¾ò•¯Äb±§žzJ¸‡`DFCU¾uëÖÇ{lëÖ­N§“õ¹äétš C†½A…Bd€ÄWÆ ´Z-©&¼6öÙ‰Ý/~#ý{¯×K`4ˆ Í4ŸÏÃø4›Í 2#öåp8‚Á ãIxtu®^½º°°ðôÓO÷öö^½zÕívËùýþx<^«Õž{î¹S§N3^¾|ùÉ'Ÿ´ÛíçÎëëë»uëV>Ÿw8ïÌZ°”úúúIܱ öÇ-°lÒÑ‚ëÏ[Ø‹Ä<Ú(4NŸ>‰Dž~úé{÷ ‰€çîp8víÚ… 1’uücÛ8F2F¢Ìd2TüR>9i”bÜw‘°ºuhhˆª‹œn( šV«µ±±ÑÕÕ°R«ÕØŠª³x;vìðù|.^¼HßÚL&3>>~ëÖ­\.§Ñhà¤LLL”Ëå#GŽD"¹\þ£Æ­{XÿÓO?íp8®_¿.fÆt.è‰Gp„±ß g&´¾¾.êá^Óæ×ëõo½õ–Éd:tèå{›r¢{Dëî‘G;þ<ôw’ª®b±ˆa¸U }tî '2$Â[Ѳ¥‹¬i~)Èõøø8š¾W y5éE&ïÇ>ö±íÛ·›L¦þþþÁÁA³ÙÜÝÝ=44„@髯¾Z(®^½¨"h………¹¹9qͦb±‰D:ôÏœûwd-°ypñíÛ·{<žóçÏÓԇ꛼Ýn‹0øKºLˆ¹ OÚЩS§žxâ ¯×û62žä_n²i·Û}}}{öìùîw¿Ëb;QHrW{^áù–@aÓ·cr„>/­Q>3’” ¶Á` ¸¾¾Ž?À©‹E&º®]»699 …ÐiFCM©T>ôÐCõzýÏÿüÏÊVWWY‡Ÿ´X,¨À“L$€¢…B! öôô¸Ýîwf­{oµZi4—/_¦ß ž³(BÑÇxh§Ó*WR£ÑÀ‘Bi‚æ½X¤Óé'NßÓð–Ü}‰y#ØÏéÓ§¡xâå8b×ÜjµÒIáoÈH¡¿ÑC´Aì-šPø‹ü{’‹óçϳ¥5‰X­V’RS›ÍÖÛÛ+†[B5ô•+WÆÆÆ4;}û–––æææ:ñð,‹‘`ì=9-ú9sssv»ý{Bñ‘ñ•¶nÝŠÄ&M^ü 1VJ㤈¢4•J…6¢‘Èáâ¶)•Ê7nlÛ¶mhhH,«¿ï‹5::JYØ(®ŽµFH+ SPÙ0“ Š7!w‡4ÎIÍ\R,‘Zñûý4$YEÎÚ7Úßõz]ÜîûÆoÌÎή®®Âmq:·nÝ‚‚¡Óé CQÏqÊÙ“ :ºÿ~ÆN'w‘Á€ÓZ¢ƒR*•½½½o¾ù&ÍFŽ-©Ïº FxB`†â$¨pÏ¢]쀘Fæg~æ_%'“eètºüÇd¸A\MC¸Û’ ÝG)’Oëp8PŠâyQŠr–X±Ñh˜Íf&ïärùÚÚK(˸r¹|}}}ii‰Œ<‰èt:Äù:}&“aþ.‹­¬¬¬¯¯k4dz{÷nĺÅv+U ËmÛ¶­®®Òýùñï–ˆ"º\®žžžsçÎ9Wd†”bpù!²Q“Âîâ°"±lŒŸFƇ?üaú¼¢¶ú÷ý0Íf³¯¯oiiiffÆl6Cb î샎 !­P( Ü ܈Ó&¶FA€]#‘Hz{{éŒ%Se^¹r…KICÎ(9'„Ô|>?33Ãá…B0eVa ¹Á`ˆD"è€áe)—˽½½,)R©T?¦µî}U*•þþþ`0xæÌÂpW^\§Óñ :‡h *aŸ7a‡àÿ _.—Ÿ}öYnÛú¸>Xc_øÂ@ÖIXðÆ÷ôÓáÍ! Y,ŽQ~7ä8üÜWµZ½oß>Ijpüù}"‘ðz½(+¢… çõWAâñ8ÓìÄ¡R©ä÷ûù²la„c‚¶½*æeÌ ç÷ÁZ<¯¾¾¾t:Íö8_m¾?.…ì¥Óéîðçà„»Ž‘†áôôôÀÀǽ—ém€°'—Ë¿þõ¯'“I¨Œ<‹\+ÞyŽ9)´ÐçöÝ•ãâ#ë#÷Æ™™¥R‰<™B¡PP«Õ(ÿ;NAúûû÷îÝ unll ­ p€B¡°eËÆ,ø0$Ä’rl@,üÍOj-¾ ‰ÖÁƒCÇt"ÀÖxš¬s¦À$¿ Þ„çL—ëÞ)¢‚T*=uêÔã?ŽVæÿÞ,‘÷Ñéto¼ñF(!™L²IRl}‘ÈÐkÿ9›¶¯T*\™ñøv¨T*Ý¿ÿµk׉Dooo©T‚¸ðÐCÑñQ©T‡Ãçó‘î;ξ¾>A¬VëÆÆj|:ìjllŒkÄØ5£c …ÂjµŽ[­V:,ÿ¼Pï¾Ü-_«Õ:xð`±Xœšš¢,0 ó¢Uøƒ¸?•¼_¯×C²\åóù«W¯¾øâ‹o[€ò}?ÆíÛ·/_¾ ‘GgµZé¨åóyÀYºìTǬe%å!2ɇ€Íººº09•Ò:?ü0MpýÙÙYh6‰„6kkkô<ÙÝbBhïíí âSy½^ŸÏGÑB~1Òn·»Ý …Pê¾?ÖâIÙìß¿ßãñ\¹r¶—&!AXLðÐbg–D¤QÒ’Úàû(ŠåååN§süøqdúAŸ!^¹r…r•™WÊ8:Îd:€L¢<.) À§ž&5 =ž„E¡PÄãqÔþÁŸÜn·è÷*•J$ÙØØ`e3„¸@ /Ød2 }÷»ßít:Ìœï;N:ž™™(AöÐl6ƒœ‘ZÏÏÏwuuý+½ãwú%ú‡‡‡ûúúnß¾ 3 ˜µ}w©:žS€;<³o°}!b’5Ò•JåÅ‹wìØ144$®t}Û‹C°¼¼<33*(2m…»ã§”_à™&“ Z±xe1 Н°KĽgbÒït:‘êîî~ì±Ç8Àêq÷øüüW­Vé6ÀÑét÷ÓZÂ]—Øh4z{{}ôÑ[·n­¬¬w>å*!s ÌÁc:Qw“LZ “““ýèGI±¾7Ñà±&‰©©)¦;w%ÞÅ ¡Q¸;ÛB„°X,4\„»d¯Åeœ*’ tlàʳbÏjµ’D ôôô 0$ÀR„=ùä“ׯ_ßÜÜA$åÓùS(·nÝÂÙ’'3'ÈÌõÆÐÐÐÌÌL»Ý¾ÏÖî‰aF£ñ‰'ž€9´²²¢×ë%1ùgZˆLÆ)7XsI÷ <‚ à÷WWWóùü3Ï<Ó¾»=ù{­•Íf'&&Úív&“!•"]äfp èSZwNRAfÉJè^⸔"JBY–ÉdÂáp6›e™doo/KÛ ÅüüŸO¡Pœ|¸V«}ík_[XXÀI¬®®Âï,‹H݃ے”U«U’U\´R©\[[³ÙlÐZÂ=™›7´Ûm¿ßÿä“O2†,²hAࡃòá(×" :—/_–Éd<ò·SüEÐ+Ξ= Š#½»¬„ž:õzjhsò¯¨š9ÅÜ3”Ýâñ¸Åb¥:Ѐ4C+‹±MàÈ‘#Ì]Ùíö……›ÍöÈ#ܸqclllïÞ½‚ pˆc^°3X†‰D$ »Q²ÙìÈȈF£™˜˜èëëc†S*•>Xk}¯ñÄ9É-[¶}lnnò¸Å`&vâî‚HÓ¾»þI¥R½úê«===»ví“îY>Ÿã7¸R<‘’E¥ ò&fŒ”b`öƒ¡Ùl2×¼¶¶f0øáT*E–H[Ž -8Xr¹<‘HD"‘¾¾>ÜW|gmm g‡Ã±wïÞd2¹´´$B$AézhhÈjµÂ–AÅ G’H$úúúÐ(7›Í蝹„»é¢HÈyüñÇÆÕ«Wq›Èˆ? L ¥×ë$zùå—ÇÆÆFFF¸‹Ä­jµzñâEôKˆ"‡䂉ceLˆx,%3ƒ§N§3 "ƒ#’–ñoľˆ||„gffÖÖÖ>Lƒƒ=ÈÁ``©§§ ¼—^z‰>œæYO?== ó5ŸÏ»Ýn~/à™Óé|·­%ÜÓªç–8p  ®­­Ñ9©í|ša³D8þm±X—ËÅЦÕjÀL$_úÒ—Êår¥RaA6›…F¶¾¾>??ïr¹Ìfs4íííE퇖‚Õj-‹²Ï~ö³ÿª`ÍzIᄄê=:77·¼¼L«‰;$^«ÕJK­ÏbùÅóúæ7¿©R©:D(ZXX¸sçwˆZ.&%Å/Ò)sæ Î 4š{½P$"RäóyQôÔ©S—/_*•JW®\{lˆP‘€ ¢U,‚ˆ se©Ì‰¿]Ô8ç/¦ÍÇ„Ñ^¹\ŽÂÍC¿ßfƒâÅbñïÿþïÙÏ’ÏçívûØØØðð0sïìœt8‡ƒ™h4JEàÛn·e¿õ[¿…ã~M%ŒÈ422ÒßßñâEb; :"ÐcGGGQ³A• î;“[³³³_ÿú×Ýn7ÙââGä?E0Ù\•JÅà i¡N§³Ùl´ÿQò5ù13 d“ɤ×ë‘冴 ‘Éd˜&j·Û·oß…¿”JåÑ£Gõz½Åb¹xñ¢ åryaan¡ kkk ‚ @‚þçù³ÿößþ›Èú{ϯ—ȶïíí=zôè­[·Dé4sÄCCC«««»Ì³RQAü“Ëån·[Ìx‡>ž2=b†òÌf3€,°o___¿Ãá@¹‹).þLˆB©%›ÍnÙ²…'ñcc0Fé\óxŠsdd„EôXÕçñxÈWc±˜×ë¥ÅÌP{¤ï7Sñað*6›íOþäO¶oßÎÌ.hccC¡P;v ùä“OR{šL&Q#‹Ì%NÏÍͱ¸„¡[QÃQ"‘ ‚ÿY*•®¬¬¼õÖ[ñx|ÿþý´Ûí$ ´Þ1CWWåªÕjíîîÖjµ6› §'Ü•ia%uH&“éééÁ!C«Öh4>Ÿ¯««kmmmdd$›Í:NN sÀ‚ ètºP(d4=7›Ôû¶.ôþ¾8€ìÏþìÏvíÚ…[c. -ò£GÆãñ¥¥¥}ûö‰ýCaæy„B!ºïTÇX‹;¡R©Òétoo/Hoo¯Ýn‡n‘“'¢= M«ÕRÂsqéÌ»ººÄI–P(˜N§=êñxÒé´ßïjƒÁàÉ“'ÿæoþæâÅ‹ÝÝÝ^¯Õ=äøúïö.ñwj3\âýÑ}ò“Ÿ¤¸±±‘ÉdvïÞm·Û{ì1rnÔìh`ò(›ø™l6˼ºêDî"]µZ­¿¿ÿ©§žZ\\œ›››]__§ö×tqèÖÛíö••&A(€q ðh§õõõAH$hîÞ½; ÎÏϦR)vT x'B¿Ïç[XX`ÊVÔ`²Ûí===ï–ñ£¼$w×· XròäI¹™™™k×®ÍÏÏ—Ëåµµµ‹/ŠÔDúXÌâãXêõ:(ºl$‡ ˜Ò±dhs}}.Ú©S§¨ö˜m4 ³îîîT*µmÛ6´z O ‚ ªñ Dºwjll¬··wxxØï÷߸qÃápŒŒŒÄb1dÁΜ9óä“OšL&âb:Îd2P¯l6›^¯‡.þ>õ„÷ŒºõÑG5P'ý~"‘XXX¸t鳑 °t[Ä&“ÉjµB –J¥\#8Õ”À„tžéúúúÉ“''&&B¡Ð©S§`Ã34NO*ä¼:@"ªŒ ˜Šu$©úûûY±à„þŠÓé\[[k·Ûsss[·n¥ñžZOOÏÈÈH0¬Õj¬€‹Åbñxüýn-^Ð~ê§~ Áu¹\¾mÛ6¯× fzèС'NˆK¿A³4 :>È$‚HÑ(ׇ½#‚^¯ïéé!’¡rMżÜd21‚V=+Z‘P'ÛFˆ¶œ\.§‘èñxŽ=j6›çææü~ÿöíÛá»ONNRV*•;vD"*(Šn®;ee*•r»ÝÝÝÝétÚétž8qâƒa-ÜËÖ­[é.‚Ònݺu||ü‘GÙ¾}»Èb§]D_ D_l˜A¦áBƒ R~>Ÿçž9Ž-[¶€•àr5ÍÐÐÐc=†Éá'þøãir–J%ŸÏ‰D.\¸ P(’É$ý0†¨gffY£ áv»=O(z_gâ‹cÞÓÓƒZ ØÈÈò‹ÙlvnnŽ–<ÂdÏâÚwæØEEÉ]ñulŒ£Õ¹±±!ÜÝZ%•JÙAHâÀbÕ+IàÙ³gS©”Ãá`!›Èmu8Íf3 uìØ1¤Òé› ÔjµH$288ˆ¸ìëÕÕU`øÅbqpp…/;vì0 'Ožü`X‹'H•ƒ:$ðŒÃáÈf³.— ™V›Í$ »½sw–ä®ÓÄ"ë–¼T*eÍ ¸t:Çãá}`ËZ,«Õ °T*-..B"#ÂÑt&l6›V«unnîù矷Ûí¨x ñº±±A.Š6ЩS§ðz½{öìùË¿üË|>ïóùü~ÿææf¿Ùl¸ªV«;vìø`xBá.¹Óét‚Ž#{éÒ%ä@r¹®ð“ &ù=+œ—¶J¥òûýÝÝÝ;wî|衇öíÛ÷K¿ôK¼:î‘GÅÂz½NÇ2™L¢=ˆí¥wµ©é‰³Y¥R ôööBbÔéth¡–zñâÅX,&ÂÌÌ 5\³ÙD Vâ£`](¸Öëõl6ûÁ°¾K&“õööð&Äb1äH——— þ]]]N§“L÷t:ˆ°ÛíFFœ·´ÙlhÛ“XR?]|>_8F«¯(®KlLï0nŒ©P‹F£ßúÖ·ÐEñ¡‰;wêõz:#Ü`­V{àÀ‰DBÏJ±XÜØØØ¿¿\.%¼>Ö_L«ét:¶úÍ'“I¸ð,777Az6ôz½@,_G@Q€Î™Ýn‡~´cÇèolåC«xff† ¸>ÛK›Íæüü<ù¬7nsOO£º>Ÿoxx¸P(¬¬¬0ã ƒS«Õ.,,°{õóD"133C³ûÑGõz½N§3+•ʳgÏþÉŸüI$Abuuõƒg-v¾;Nj&讄 •Juûöm²>r¡¡!—ËÆì(5“áto‰p¬ ÓétLŸÏëõ~ík_·¥ ôµ´´DdzÙ,úô&“éñÇg)^oo/[+˜q…úÀd"î /Š^óðð0(5Eèüü|(BéšAX‹Å‚è ƒ{hÃò¿à9±ÒfqqÑd2E"H–Ä-V|±wïÑGÅÌÌ7‚CUCöéÞ©øf³‰8šÇãAL«ÕNLLÀ@5™LçÎ;zô(€Ñhß³gÚëëëxÈH$²wï^…BÁ$ÜŽ;~ë·~ës·x@¤ „q”¹.,©T*½½½Àzle@X›ÆŠ(CÉä!ü_•JF777»ºº€Eˆ|kkkHoÅãñ£GRhÇb±D"ÁAb¥R‰¶bx@ ›ÍÎÏÏ;Îp8,—ËC¡Ëå:zô(ð#d©®®.T¹vìØAËêˆZ­ÇÙòLõ­Õj{{{¯]»ö;¿ó;ﯻÕù—[Å:÷ì/âq?r¢ù´¹¹‰ìC¹\Ƈ²ŒˆN?¹8Ý¥R)0XW*•Pô—D"‘ï~÷»ì:[]]­×ë‡V©T333ô¨X@¶ ÁB+«Õ uP¡P€¡—¸²²räÈ‘¹¹¹|ìc›™™Y^^Fìòµ×^;räˆßï(:Ûíöh4Ún·÷íÛÇ;ÎøÿáâÅ‹Z­ö­·Þz¿Ü-ZàšÂ=¤(Ê&¤i³–J%ðAb±­ V|%‰={öØl6ž—Íf+‹»víJ&“…BáàÁƒ€»wïV*•“““/^ôz½_þò—'&&€tÛív¡PÈf³[·neÛ]Ál6›H$ÀjÁ;5CCC¸>xàÕjÕb±8N‡Ãáõz“Éd0úè£óóóÕj•Ô|÷îÝ_ùÊWœNçÖ­[¯\¹211ñÑ~ôÌ™3CCCè`Æãñ³gÏvuumnn"9Œ /¼€.@}€cŒÌ=tuuµZ-†½¯\¹âóù¶mÛ–ÉdæççÇÆÆði0>B¡P4ýë¿þë'N(•ÊW^yE©TÞ¾}{aaA&“± óçþç¿þõ¯¯¬¬´ÛíT*uýúõÝ»wwwwËd²_ýÕ_ýã?þãûl-Øzx±­þ6¾"2©T*—ËE"XA0Ra, ‚À¹ã¡Ð‚âhÓûh6›Ùl–ŒÂúõë×s¹œËåzñŧ¦¦ÈY%sècûØúúúK/½ôä“OîÝ»÷ôéÓúЇÖ××?ûÙÏB™²Ùll9Y[[co{©Tºqã†×ëÅåÒ>&#`›‚L&s¹\n·v¦\.Ïd2pëX/8I{Ì`0\¿~Ýl6ïÛ·o~~þÀ‹‹‹‹‹‹¿ôK¿´´´tæÌ½^?99ùío»Õj  ‚pîܹþþ~V>9Žûì EóÜ+’ŒF_±X\^^&¢2b-Ã#‚ ˆ­záîFg:ìI#¯×‰D€>ÕjõÆÆ¤ ™LöéO:‰,,, ÷222âñxE¡]I‰šËå,Ëç>÷¹‘‘‘ãÇC’F£ÔËæùçŸg‰€8iÜ ‰RÊ‘‘™Lñøãoll\¹r­BþÉ–-[D^r^±X,•JÁAF-—Ëmnn‹Åçž{ŽY¦«W¯†ÃaÄ>®_¿nµZî%2Äãq䋉r Õj•mBÌöˆ%| ß\T–e,Hö˜¼…C] äR©¤T*gff`®3ŒÅ6 Ú+Fcff&‘HØíöÁÁAÎ/`„Ïç»té’N§CPÃl6[­VöC5p8,ÜêâÃÀ·ð+“ɺºº|>~ “p8<;;ÛßßÏz©TúèG? í‚°ôòË/³ƒ=‰d³ÙK—.}êSŸâLܸq‰V«íêêŠD"¬ecŸÉdšŸŸ¿yóf±X|ÇÖSƒ·2lûï|G„|>š˜þ,eó¿h¿0÷Tt˜»/á®ö5Ç¥­V‹Æðææ¦Ùl¾qã‹„9sæL£Ñèéé![ÓétìÍf³P£ççç<È¢¬ÉÉÉ•••O~ò“ grŠ+• ëK Ü ‚2Ûßßσöûý‚³Fñ Y2™Üµk×o¼±sçÎíÛ·#j]¯×ïܹÓÓÓ‰DnÞ¼¹mÛ¶ÍÍÍgžy¦X,Æb1@)•Je·Ûgff\.W»ÝÆö‡czzzllì™gžùÃ?üí[·ÞŸ»”)‘HºººXO5CßÚf³a' دHó‚p/ÀJ;CœÙB”†<2fO¶mÛöæ›o’#Èåò;wž?ž®y©T2›Íäñô|ý~?¼š½{÷ÎÏÏ÷ööÒ¿8}ú´ ‡V(333jµº\. >–CÔÉçó=ô“ÉdJI`.—¦·Ùlÿîßý»k×®½üòË»víJ$×®]cÁ_2™H&“‡r8hãèõú®®®ÉÉÉ_|quuuaaØšœUo¹\Ž_?©µÄ«†=HU‰4NÇívïܹ¢\pRŒüݘf#ÂÁsF…·‚àP,r¹#¨Óõ÷÷÷ôôFX›0&/]º¤Ñh¶lÙÂu7 ½ÑhdU#¡åСC …‚*Õj•Ê ûã?9gee…¡ååeŸÏ÷ðÃ+ ’¯×;33óðÃ' vk1 ³mÛ¶-[¶œ;w.™L–J¥ÁÁA€A¯×»¶¶vàÀF‡‘Yèéé) &“é+_ùŠÏç ¯¿þ:ÜÈááav­›L¦_|ñ _ø‚ü{Ÿ>™‚ðvïþ ž(:%\2¸ö‚  ¦ÛXGív»©ÿ`ëCÍDŸ Ž¢¶ÚúúúîÝ»oܸ!ÂîÝ»A Üq»Ý,¸ºvíZ½^÷ù|ÓÓÓ4jµÊN§ ßíÛ·™‡˜šš ‡ÃÇŽ{ê©§¦§§lfŠÙl†&%•J·mÛ¦V«§¦¦|>äÎd2©×ë§§§e䨅Ãá/}éKR©ìÊãñ(Š¿ù›¿Q©T/¼ð£"v»]©T LMM­¬¬üÕ_ý•B¡Ø¶maÂd2áFFFkšÍæÇ?þqôy^y圷ëeˆÙ‹h§‘/ 2‰9¡ø7â?ë_‘£B ‚?tv³ÙŒ ¤ œçìì¬T*]\\DYòúõësss™Læù矯V«8À[·níܹóÒ¥Kèñ‹ðcóóó¬SÕjµO>ù¤ £££‰D"3ùC*~Èê¥p8|íڵݻwOOOïÝ»—µB.—ëôéÓ{öìaáÛž={¦§§õz}<Ïçó.—‹Ô£P(ìÞ½Ûét®¯¯Òׇ—íÚµñññ@ `2™¢ÑhOOÏÜÜÜ—¾ô¥ÉÉÉþþ~V;]¸pçö‰O|‚‰ÛJ¥²°°011aµZÿ…µ0œ¬{£È¿j'®‹˜ PZŠÊŒüzqvJB†}&tW®&, 0&T,gggÍfóòòòã?>77wóæM˜L&»sçús‹‹‹‰D %FÃzâh4 âÞßßÏÖñL&ç‹(6IﮈJ$CCC»wïŽD"ù|ž5 Õjµ§§'“ÉT*•ÑÑÑ—_~¹¿¿uuK9rd×®]@€Ý­V«¯¯=[N§szz sÿþý"… Ðvrr2 ¾øâ‹›››‹‹‹ôYd2Y0dx™Z­¶X,Ê~çw~‡ Dõî,`bf]”‚ißóâ‰èѳ Y³¦qÀýÄOÔñá/ùÀØì=Ñëõ0ôéÖÓ#¯ÕjÈy’³ NNNz<žååe&±wîÜéóù^{í5Q7»§§Q:ĵvìØ‘H$–——ÇÆÆòùüÊÊ ‘ðÕº»»!±ÙCsçΫպÿ~ØmÌ‹Å'Nœ;wnxxøðáÃäÙ@ Óe–H$ÉdR©T’ ºÝîÕÕUN·oß¾ÍÍMØùÁ`0H§Ó2™ltt4‹ÕëuÖ}í ‚@AÂl±Xdÿþßÿ{ØX —Ó7ÉçóétZ­VCTl6›ñx< rWü~¿Ùlž˜˜ SSSn·Ûjµ8p`zzšò€#Ïþ˜X,véÒ¥z½¾±±±°°ÀÁe×e2™µÓ4 ùÈG€ ¯¿þúøøøöíÛÁkΞ=;00àv»•Je2™½}ûvNL8æ r5q_„"æŽY|>å`­V;}út6›Ý·oØñððð™3gØTAN499‰8ÊìììÚÚÚðð0ã³³³Ü?«²Ï|æ3ÜDó¸Ä¥g¢T'øîmé>Ÿ)ºAQÖ‡&J¿Ó´‹M,< «»»»¿¿ŸQ_~ 4½^‚ ÜM4×ü~¿\._^^&?föT­VãµFGGQ§! B‡X‰,OFKáH ‚ðÈ#F"‘Û·oonn²p€ŸÛ£P(Ðõ´Z­>•J¥Çãíéé±X,*•* ³Ã-—Ë-..~ä#‘ËåüÇÌå~öÙg¥Ré•+Wæææ¬VëŽ;hIÇãqÇsìØ±r¹üÿM”v‚ endstream endobj 2741 0 obj << /Length 3218 /Filter /FlateDecode >> stream xÚYYãÆ~Ÿ_¡l€„‚g¸lvóÚ<­/lA{?Ø~ ¨–Ä]2‘çǧ®¦H­4X±ïªêª¯¾êùòùáí‡H­TàgA¦VÏ»|¥é*€j•j_ët•˜ÈT¶z®W?yy¿~ÒqìÕ¶Þ¬£Ð³t´»õ/Ïß¾ý,¶S²•ŠŒŸdñr¯ïºö£-†²mÞUi;Þá¾@aû*ÐË]Š*ï{+Rt(S>`/j‡¼á¯²q=–? ¿xIõšôF?J¢{Ò7Ûê¾ôWÖÔ«ˆ÷ ³íÿoûrh»ó#)‘Òd¹±?Ê ¨¤IÑÔ4&“R¯g%ÚfÏíaý¤¼óZyÇ’»2ïdù,ÙaN¶ÜÃzèÛÊIg«ÛùÌÞve;ö<ô”Þq3TNÂq'õ¨=©k®ôU‘V©[勃¤-þfÞ‘øH‘Qy¼*wv(kË->¦·7“~VÚôUYÀ¾oüõ“ICïý:Œ½§W ÌWིàt°r‚øCæc׉KÈiG‘Ф8ð´=5-ë«ü ¼R7ü4ˆY߬äZ’È+þ=•Õú *nžvâ&9,üŽM]ö}¾;“cÏÌ]órri?ÈôòènlÖaâ‘ínøå|yù:TËå¶c™:–å¿N¤¡¬œ.íù =ó7‹³·è¼©bÿ„‘‚¶;tû'P94n'Úã”ì¸4bœF iÈ¢HGàue—S¡ŸF‰·m¹—/>ÐÚJ¬Mýà þkа„&ðOñÉ€µŽ¬4˜¼î¹„.Ë­|ÑàŸº,xþÇ÷5¡ð—$¤ýiyÇ?àCÝUÞìÇ|/“6lН©m!^é·áNˆøß„|€°K50ƒÌ°šÛs“ƒ´èÆ¡7œðÂbÎâ‚,ô^Ò)àá›0²­e%ƒ—iä!`î®Ç€K”÷ \sÃûqÜäÇαr ܈ì[ç v?H³z[íø;—¾|ÒéúêŒòU* ,è½µO-ø¡Æ¥ -¦Äb¡Çqî5dt†¨ÐG “ú!ØBZˆfr«ÏˆÎóÝBàM¸e³ 8ùGx² ОwÇtR~9¾;‡¶y¼sQû&I$.I8€@+;Æè"P ”çš<ÃrF"†fùZ{Å'NŸÐóstGy×Í:•éúá©/p6'ôyZ?M£Í50좸¯)AÂ×fTÒ6"r.£þ=܉R„I³Ú_`CŽ{„ä[Ùl¾…2‡âåä¼·éÕe]œú¶— Édj2HÁŒÃÅ.tlÛ:gr(Á }3@ .·Ð?rÇ÷H-ÊË)0$¢ð ­¬! ƒð‚NàAöSÚ+ljÍ=âűÇ’¢ˆÊ¥NÀU@ɯíPм Æf”'T–}áj¡åþ}Þ ˆ"qâ}œ¢"\þ‘§d›™:ÞÉ=pJ9–™åF’"å'±¹}OìíXm9Õž2~ÁHÎ?ÅX cç6|‚±!TD )F²òƒCI$¦òõ¤^ÓÊ̳•ò˜q¬ò ŧîôrõ÷ˆE¤cô^Rê}Ï|(çŒËãþ0c>NÝÝJyOúvÿð‡G¿KÖ´%“úXÙßJJU8ƒ¨¹œH×_ÿâ •¡öðÅ!™E¿àÑBåg‘h(©`dOîÏ1À=Vƒ-VŸ—0¯ÑþÜ íw´‰Cø½>÷e??ƒ†í½TatèGZ0E+¡IŒ(|’d{hO˜}%ÇŸ¤Ü8ºÊ‚ó®¢Z›+ †ÎìjªAä™òN%¥Leû^Jàüéá Í*¸®šÍùçXI²Êt^é¨Jq]NãGv£ºìÙ4_=?üúp½0ˆ}Ü®¨~ú%Xma FÁ>ÑÌzµ¯e|W«þõð%½fÆ+… ±zç6Óqâ§èU[BÅ„cÆ{7†Y çל·´^ËÕSù!²wY§xáë Ü©”ü“jNðÚk,z_j.¾p‡êNŽú™‰V:„ø6âÏœ5°;ëÂ4–Ôík¯rKð¨ùP˜ÕÙ¢<®Ÿ°ä~q*rY¼¹Œ@íª¢½NøŸÝʪ–G±Œ²‹X+l_<ºG©$èDÙúûò…ö¼é :ÀÐŽŸ…ó N>Úo€ô$¦¢<ÿº”R"®Â ãErðW|Ñ ›Ë¦¯Æ1)e2Y¨»ˆÂЮ㤞Þzê £Ì³<ì{„ÉwïÞ¿~­N^mR? õr ˆE b%Ñ(òv[Êý‚\dåÊ.€†n,€bÜ+.Á5!¸¤B˜é¬¦ÖÀlBz Æss©Ë¦ä¹5÷8(z†´–»j ô”|fËI?·lû«Q(„]âî}ͬêà$4K‘A¤&£'¯ØÔhÀÏ4Y®|íD£ÁÝÒ«ÉMþƒåW@ö%Ã`à@ñêIØÆp¸Ë…¤ð/÷$œóc £’hB¶FU'FõŠ*ƒ“kv%HY²”ÿÏÁ¡‰üT¥ËM94±æÁË>Hw©àòªr¡O¡W0¦AÆG§?Ïî˦™‚žÜæ2)œBðñVð‡×S …¶)d_Á­Ž[Eà°žüV»úÐåJN-rÎðÇ6Û¹pú¢Á»:ÛËÑ€°|"dnÆžò Ø‘ÝA²Æ³ÛéR¹ºæâšLãí•›o¶\ÍG7y/zä¨)îŽÊºÿÔ%¦«ÆþêŠí ¾ø»õÏèF¨R?PjB4šŒä/Èæp,Ì{É[Œ€þŠð(P,z8ÓʽÐeSÑŽ“)½´Ý'n iŽ“PáW¡"ð“ þL^Î*¯üÄ„ÚÏ–Ëš¼†«Î O1Üï%úÞ4…4£‚düWÅ ‘° ÀÆy·å§:0ƒd n•ì²ø»åBô !£eü”–¸\äæ`6¢´@dú|uÚØ¦Ò»@t·Zäéó Gp¥D!´=ÔܿիæWÀy”QËÕ~Qüñ?„Âå2¬¡èÏ–7!|MmZî)ÚN1ØæšÇ9JðÆâˆã{ûO§vhåq— ™@³jÂS¨=&¶Ð^Å`g­Dûa&EÖ¿¡|x-ÛÏ"b'‹õî^c”У½ù#·†Ê,÷ù€©à¨_ÿðo€ EêåjŽj㢚Ũþ;te©: XdY\¨•;‘ÜýA&!°1hå.¤—‚[p¯¢¨ºqÆ({IGÄ}´aj©'ÿ \½wO°)ƒ,Ÿpx~3w¼’þx˜ºïníù¤Rã'Q sfÆSÿ<¡v¥ñœ·Óa‡Ã››—%p °X>Å'ÜéwÖ)ÔšõýÝÕ9ÿj}‹› endstream endobj 2748 0 obj << /Length 2471 /Filter /FlateDecode >> stream xÚ•XKsÜ8¾ûWtå°¥®J3âC/Ï)Ù«fkkj6qj“9ÈÛ­X-uDÉŽ'•ÿ¾ µD¹íÎì¦@HàÀw×o®"±â!ËÂŒ¯®·«T2)ÓU¢b–Èdu]®þš|¯Í!/ôz‰(øPÝë‡ß×^ÿ{Å9SQ´ÚˆŒ¥a†kŠ:7™>ݽmòúÑTD¹ÄŸÃpSWŽ}”®6\f E"ûå´¥òççû|£þ¸·ß|òÕ§ï?¼ýíí«‰ë;þü8µ÷}[•8]5UïK§uŒ±Ÿ[-þÒVFÑ6†Nòý½núàXÛñÏÊ–ò·lPáç„lNã_fs㵦4g§Þ\ñhî3œ…ô W¨’űXEIÌ”{Xt½ÏQ" œ½ÝPômž7ëH‚þ§Aùˆ4ë–y0C^×D¬õ¶G²Þú5,z\§"x 4%ƒÜ W¾Þð ^Û?ä½·œº±ÿ{Ôâ–ä0ºhX‘²mHݪAJú;³ýPád3…Ls ÎbÏINœŒÒñÄg<öVïu¿£3¹´FNƒ*°º¡*üy",”¾Àn‰@Û_‡ >$~”gTJ°Xy’¼”B[÷CGÚÙ#´Ä¾Åï}~·+4Rs$p«s6T½Á©›Ü¼xÒ*ŽžBGÜxÙ/Ç;X‹á´—¶€E¡ à:Ö—x`àîyp §;·RqsÕÜâø]Ðvbð¹ÃOwWv!ÍqU`ö‰«›))㔩$ñµ„ë íu…ÁmezÝ1T™+åË€ÖõvÔ£_*úÁZ\½.=", üÓ“œ%œ~ÛAVx°×Ûvw̺)‡@GH\ʰ£8)ä±saGÑß‹F—ÄÓ"KŽŸE»ßçM¹©«f\ÛáÌÛßE˜¤v‹”þ¨Ãxþ˜1à´²¥7ð‘ÍÚs„)Aéž~ þ¢ò00hŒòåe<;´Ö¿Æ!:GjÃ~n0h?‡<.ª¼&iNWmümóÚpnÿ=:Zâî©Áéápp(¡Ifáì±ï¯/¾^,ñ) ™äjUì/þø3\•0gOEB¸?8ÎýJ‰”EYãzõñâ¿K ÀÑR+áëqŠ@1ܯsËèˆo~ÝËÕ¿Z8ÉÜÐÍLê;[<£,>BeÄ"ÈV*ɘ’”\ÞçÞZhÝ׆© °‘‚N‘Ù’ÅÍõHî´ÅAçuðE7)CGJ©áV;š÷h­w'ãâ¼|O²ÜUѵ˜×HÔîn+ûI%fØŸ%׋$Úó°ôwz¨Ð‚Ì‚¢kÙ6Bœ=˜‡dç&j2ÇnÙP÷…ÇD¹fÈÂlI–ìƒ9î+Úp–ÀÝ̳z«ŒÅ"BÅëêÎÁÇKÎ!£(™ù !¿ƒteÔ'ÏåÌÙþB¹ÄHñÒÖBI–ªøÉÖ¿i]šÚþ¨ÝÙþ¼2Màc!Ò½¡ÐÞRA¿Ï׿MkÏëáL>cO*–NÂPìΕ\@¬Ý¡Ó[Ý¡ã^.RçÃfiÈ ”³äÙvힸwà /Þ®ˆRÆÓ…®ÌÚ®Ðȇ¬[Ì@ªZ“üé˜E&Ov!Æg—ÿÜ9ª0fa-ÒôgtSRB=•øë(êQ•’2ZvÌ=™ÅˆŒpƒgq›jjžŒÅ¢µAz9@f¸ÙW}8#ÇÄÅRSÔƒ!g’´XÛÊ0 yh'j‡ÌóéA…)‡þ;éá\Ctðe/ Sèd:õ/„ˆ!II͹jÚÛ Ôf9OÀÎæþt¶´*„ì–ùÒ¼~öŒ:Â0– {Ž•ô»v¨I©¼R;)‡™vƒà{4c¡fŽÉÏsdΉÊW&P39óÐÁ‘ ¾ âÙ b¨ßå=Ž\­êFØ iü€üX¼%* ~?)¡È›ËÀ.ëÅn‹ÖþZƒhj*‘ݶ®4µôQêáŽä|&#¨y)¦ ã— Ò§¯×Ø›¾¼¼Äšþ%Ç‹ åS–o > i^ãA㬧f(§æ&ïn‡ý±uýÏØÕá}Dãi»#ºJ¾¼Ku¸ˆ'(J*©é¨±ú-½bzªÈÇÞÅRAup§±}Á:=ï‘ï„V ^±­ó~,½=\ŠÑMá\\>¸²:ÆÛ¼:×ßòý¡Öcm¾HwÀËRA­Æ™ å!doÍ•}ù؃’çe ‰º\o5šžÌL—‚ò¶ âPÎ’'³ÇIÇGZ°#`¦ò[$t¸2”¾6¯®>¾:c…ÌK–V ¢ÂYšÞW%)›…F’G&Âa±ä9¿ãPöY‹Œ.O79-6îÄq׼뫢ÖfLTfÚJÝk*>-¿ÑCÙvù¡*+,£qaÊ»êò[=×òÍ•à' ¸„K¾ÆŸÃ0>‡× *Ë*KoaD«Ò“[‰¶Z¬¸<» !•.V…®Nñ½Ìæc³v%Ù·£ç(&De('H*:M7  8 Ì"Çà†zx<÷pINe‹ŠvlyÌå)¯ Wè=Ÿz?Ïßg/Ÿ³HÅ÷K×l )$ †‘ùË©gÏ'0¿5´ÊÍ´lsJ‰ç  f\ôÞdÑ ° J÷¹¹³£1 ó³UE“IOîßx1´E‰„Jv¾|QápzvácŽá„VÈÓÞ¹‡,KU¦G¹0€îÛÛú1œð’dîŽäñŸnùÅy¦XEOjf‰Å}¹J`+F „Á¬OœešâãW¯£²ìdÜÐ{rädÌž ¶1ez½'Á9 ˜é&Àë¼ZW]Ÿ8žd,‹¨ ®q¬«ù¬E¶·O¬PU³lÅ27{7=‚ÛfÆwªªö…9çå(žl ž‘Añ;“ÒÔ|Oâ:·éB˜Û•¡oBE;ã„LÉ"ðÄPL¥“~Â^— >Ùªµ¯j@uÀ0‹ê©ÄX›3®>¸Œ ÉæÝMˆµ¤Z›Ü R¾•C@æø³Õ8hoŽi þ{ q»ŒdEïðá­*hæ0tÈÚ|Üá€Ã1<ì†ÄÙï:­7DsÞäÝ•·iÞƒ¬¹K{E‘=ö¨9T Åø4H˜ÿi;Ùá/$xnzóz±‹©íî+[«à•ß\¾ægd¼GË(pm$»ua˜ù ~¶ÑÝbùß:UöbH¤€^p—1Ÿ •ï˜v„T˜w¾Žý“¸ – endstream endobj 2744 0 obj << /Type /XObject /Subtype /Image /Width 116 /Height 116 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 15604 /Filter/FlateDecode /DecodeParms<> >> stream xÚí½w¸]Uµú›eõÝOÍÉÉI#…^.½#$,ô*‚€Ø®â5tAŠ(赡^;-Ò‚€ t‚t=ÒN?»ï½ê,ïbTôÁ$ï^Ç7¾ñͳö^k¯õ;s9æ˜cŒIõ¿é}#ŠÓûFÿ÷}¤ƒû>Ò¿Á}éßà¾ôopßGú7¸ï#m à6 )å[~411‘6þÑ6ÚàÀ¢@.—cŒ5›Mív»V«ýá¸çž{†††:;;ÓoB6p|78p•Râ8‚ ›ÍŽŒŒ xâ‰|ð¼yóf̘q饗Öëõ•+WRJcôýþ3ÚàÀu'Š"Ó4…z{{O:餛nº)ŽãÎÎÎ(Š.¿üò_üâS§NP©T>èûýg´Á …•1æûþ 7Üpÿý÷H’¤Ýn3ÆÆÆÆN;í´ÑÑÑZ­V*•>è›ýg´!‚ë8Ã0\×=á„r¹œeYžçA`F&“pòÉ'зùÿN"¸­V €açž{.ç¼Ñh¤Ý6ÁZ­V©TºýöÛ׬YóoµðÎHAgs@¬^õÚ÷¿÷ÝFµÞ‘ëÔ §:IT*µ0Œ?ò‘ýK¥ >è[þ‡ôA‚ëû~ÚIבˆ/ ¼ô’sZÕº†0”P^fíýv`aԼ⻗K¯ga~€ÏµŽ>0pã8v]7U )(B©$ýÒ²ó›kàp§·(¨â@`Û& GGk?üᕾï·Ûíîînß÷¥”A(¥lÛþ >@p)]ûÓRJ­5cŒsÎ(i´Ë7N?íÌf ”[†Dœ@Ê…4ÓSü Î ×^¼ð‚K,ËJÿUŒ1˲Ö]ù§ì>8ç’$I’„‚µo´2 }ÿƒºóö?åó=¦•iÄm‰„p¢`hi€˜¤ˆ•Vž›w¬Üe—}û…^H’´WÃ0Œt‰åƒö€‚Rš¾ÂBß÷£(°MvöÂ3-+_«GA,£$Ö0E¡˜i{^> ­àûIi€.\¸Ðó¼ÑÑQJ© Ù\­µ”2¿&I¢µÎf³¶eÿøÊ+—<ò´’`ZŒð qL ÈØoŠ$|ó½§,Ÿ+üþ÷¿¿çž{zzz”RÍf“Rú}@#„¬ëbÍfÓ0 #££ßøúÅD!Q¡X±LP€ó¤ ˆÈO´81MîÔu§vZ’$”Òô:}jaOË4M•Jåçÿó‹ñ‘&€B![«q×ÔBˆ–È–Œ$]Ž p ¢h‰@ww÷óÏ?ÿ­o} €ëº•J%ã}àôA‚›bº®áûþ¹çœÏ`ØÜ®ÕF¸#DP'Ðɳ«}&M`jxÊ) +•Šëº .l·Û²Ù캟ø`·ÜÔHÀ›>ÜsÏ=W*-5%š %@é0é(R–às'ì?©ØÞoOš3‘„°(*4l¨t0ô<ïôÓOÇ›~Ÿ¿ù‰ÿsà¦Ö˜R*›ÍÞwß}W_}5@5¸ JÁ¶ÁÑV{íÈ÷ßcÚË>{ü¾Y H@E·é›.]BÈO~ò“Ç{Ìqœ¿Çw]ÌÿpSJMÔ¯ýë„ ©àXpM Ä©'~,œxÑ×Ìé·çí Ì¢ PJÈd2éLúì³ÏþGþWkj˲®¹æš{ï½—Rª¡(J@5D$8xl»q±>´´7+««—žzÒ‡û{¡™$à!$µ½<ÏûÃþpÕUWqΕRoóþ_—’¾°q_|ñÅžçù¾O‘H8v–($!rÎ:ã“CÏôd ª6ÚýÝöqÇÌT©.å&(¥é|¤ÝnsÎ/»ì²t}s}pÉ›ô\†a(¥®¼òÊ矾P(`Œ)$”RP ¸;¤ØßÃãæÊ‚…¤Qí-¹+_{fÿì4m`‘¤†št©¨P(,]ºô?øÁ߀»þ¿ó¸oåoÕ€†’‰ßnžwÞ9âœK™h(ËæaÒ$@W>sÒa=vwo_¾RË2±ˆbéS4¿xÊ^6´U’†aí°‚‰ò€‹.ºD+¦5yó  Aôÿ*p•†ÒPív („m%c@C% £dáýg­Vïé*(©¥œsÖö›S¹,>uâæRŒ:½‰vÍè̯jÖÚ†AÝL­6±ï®sìWƒ( x‰H48À@ ´ZþñŸü4g£ Ð1´‚‚J€¡Ö}ß{n…\×I­#Û¦ŒADPË—½ò‹_ü¢·+;>^K¿Ee(u86ÛÛ·ÁÕË9çŠðFœØÅÎVBíl> ü¡U¯|îØÝ'aRA(JjAIX¶sçøó£OתU :öÛÈ¿vÕâý—MIj9±7{ ¦ššÆ߸¨¨‘±¦4àer“z;{» Ý8ö‡ZÜÊyùF=0¹§„eðŒ’LIj™n«ÞØj‹-øèäbærÈçl(P* fXõfõ̳JE¿Ý¸iÙ"–Äú_.lÛU Q( âXÀ0ùîºë×W]ÛÕUÔÓ¦O/Jý“úû&O›ÒY>èc;l¿Í–/,}®TìLM`[f.ð•ixÍzÏ:::^}ååÃû覛ö¸nØÝ]è›TÌØ”m$‰t2î}÷ÝsÇ]wº^FIn0“ÿB­ûþhDSžÎ£˜I@Ðh6žy¶eÛA(æn¼q¾ÐY,u9n6ÛqXv-q؇džW˜œ´šÍ¼W”1aÔM"J‰cpÇoµ ù|y|¸£ÃY°`«R1a:îëš\Èõ²ý†•‰ ü–á˜GsL M(JƒâÝ>ÎnHBÀ8”Ôa3Fâ8¾ýŽß¿²ìÕžîIS¦Y¦W«Õ:::ªµ²çðÑá¡#ÝΤÍ8œ(æm ¡„dÌŠBiËÎbibl$j×gLï_µâ¹]wÝhÓK"®‰XäŽîŽYÓ7¶mD¦j•òE—|„RfDQÀù¿Ôô|ߌRšªZ)%cP/½òâ¯~ó›)S§+B»'õNŒ !ƒHBÓŒgNÃûo;:´´»Ä“¨šó¬0òciŒ“ÖZ$QÆ3[­‰¬G”(ÛfyŸ½æöv;I»eQ›++ëe …BO_w„ÙbñÒ˾ùè£ORNcéµfÙÿp5 ƒ@! Ãä†aH-žéŇzHJÝQê|ù…—¦öOÉefs¼X´W¿þáùÛxf½”KˆªÝƒr.c&q›B"M®Ç'†fÎèS¢½rå Ó¦äÆGŸÛa»©s¦w›$$*i×kqr™B>›+eÃ$N‚è¢K.ñ2í õ®éƒwýéÖZ)%¥Ô ”„íI–+ãccc_|q__DÈgs£CŽ© PÔçÎvwÙqV쯱yC« ÇŠ´l@ùœ%¶C„j+äóÆÄĪ\%Ëo f­ 1þê1‡Ï/fµŽk¶­ &µŠÛíöÌ™3'Ož à÷·Þúð’Ç´ë¬]rO½”i;õoÐàþÍä’B)%2ÑÔ€±ññB¡ðío»Ý lÛ-æŠÍz‹X\G~Ù1"}lÁö†*'uŽC›ÒÑЈˆ ‰)‰‰ Úm›¶-Ú´huÞ^[ÄÁšR•‰•ŽÍJ…|³Ùd ÅžfY_[øÕz³Fqê„㜯sÕ[Öûe ½—঴ÿ®Ãšq…À÷sùÌ3Ï<}à 7†Å £0´ÓÊbʳ¿6¾ùƹÝwžÍUÍP-¦ÛmF"NBÂbJc$$$‰)R|#†HGõ‚-U<¸÷î³çÌv£h¥Á}†ˆh„~È›Ü;©oRï#÷?pû­¿s¬¿¸z9çé­®kl¸à¦”*‡¿taP4šÕJu,“ñ¾}ÅåŒÙl¾ÙµFÁË3¥8"ÇUŒÃÚ™ë1Cµ˜Š¹Ž™N8I(”$ H "A$$LK¦ÓRAÖPˆG‹ÿÀ¶ö[ãÝF6¢ tLÇä†Ò"“q3ùìE]24<œ.¯­ƒ8uú¼O÷w@ÓZ‹8 ‚v6›¹óÎ;ïºë®B¡$#‡B„ʳƒ*•´&ƒ¶Ç¶[õ–Ç^f*fRsÍ E´"JD¬uÁE¡¨¦L#gX"hf\¿YqÛíz6ßœŠx\Kßäܱ2„v³¡e´éƳ^~ñ•o^rYúÈ©r „¬‹&ÙÐÁM]ýëzR*I’ñʸ阔“ï~÷Šb¡Ôjú¾f¼œçe£ ”Q”ø­0ÀQ‡Í ýÕœ4¸\® !Jk¹ž ¥E5 )Ñ”*RÊüz¥#Ïâx«=t×8‰m&7’XÊXrƒR¦¥}}}?ýéÏžxâ ëVàS…ð>åV¼Çà®ÿ§"ŽC¥7ÈM7ßð /tvvAÀ©i›žeX­f³Z‹,˜çΜÑU]–w%%škÎ`PmЊ¤¶ÇºÛ¥é ¦&DSª9•”&‚‘¶ç†ÍÖ›l:i‡í§œÈ8!š$qìZ¶ÉZ¥:wö-qùå— qÎ×ů¿°¾_à®ßs…Œ SµZµ+¾ýŽŽîjµiš¶im¿.“P&­z3Çÿáfu9Q5ƒ)M`(b'ÔJˆ1#"4F•I…GdFkO+䈸¨uÓ1›vÖ1-ÚRÁšC?²—¶J^^+"´HTÛ꣣å¹s¶¼öÚëW®\ Žãuànè:7ŽcÆcl]/ó}? Z%çûßýf³‹ÈI"šËåí ÇÓåêªÕ#¯»6¾ø¥ÙB¼˜ÍTl–ˆv[ ™h¯A2Ô«»m˜Útµ4YœåQ'º…(ùÔ®[²jûvŸ·f¢/õ·jª`Rê¯ì¶×°ç€?:$Zçxa†´–í°µ4™òº;z<òH¼™6”ÎýÞ§ÀÈ÷ì¢é[V«Õ(¥q§Íƒ«ï½÷~¥à8žã8ÅR­6Ñö+–‰®ìºûFžëW&Þð Ë62B‚˜ ¸ –Ò¶ÔžÔ¡²Zg•v”¶LSiGÀðÖ ÷Níhµ#ÇÍsæQI¢öøgO:¸¿i—GG;KQøA£ØQ/W»{{V­ZuÉ%—d2ß÷“$±,+‚ ÜÔO»€išÍfÓq%Éå—ÿdõêr¡˜‘º%dq]™5«eЧ¾³T•lΔRÇ!c¬7"¦ÐŠIi jÅžtÒ¨[ªRD­Ð "³¡XD¥eS¬`ZÁ™jpWÒ¤Þn¼±*iÄì|eÅò¶ýk¯¿ÔÛ‘ñ«~Þ,Yff¢>Ê麖ã8guVÇq¿¯±e︌1­u.—KuY’$¥Ré¾û—\síï:»¦¦ã¤…­\.÷Æò78¨RØiGòáý·«–—GaÛ1³&ͶÛDP7WÐDICR[r.<GÂJŒ(1Icª©嬰#¬[Ckj†er77{Ó½­Ì&ý3·Óûð;LŽ >Èci/cæÇj#™.·ÙnL›6MJyᅦѫRÊ÷)¶ì½Ô5i6©Báºn¹\þÕ/¯*§â5Û BcÛ1ªãc¾ßêÊå9pÆ—?±|ùC}“¬zeŒ žq{âØL˜•p&!™Ö–Ö–"†&DkI”`"æIÌ#E%²µÇa==Ýs‚D6"½l•úÔ®ÞyÞ÷¿õƒ[¸×øònf âz˜„ºØ•o‹F;lÛ¶=yòä .¸`éÒ¥I’0ÆÖÐÙ@ÁM;‚ëºããã¶mß{ï½K–ü¹Xê©f2©Ó`õZÍ­5ÆþhïäIÐbT&ͬ£ÚmÖ¢|®ƒ0 ª a¡„sF „ÆšŠš&€EBHD!ö%âB³Å³…©=þú²•®bÉÓxõµ·ØlÊQöúk¯YR‰L>W÷[Ü4LÓLÕ׹瞻.@xCw+„RºråÊ믿^*5^®ʘaI¡e(UZ¤1ð‰cv_¹rÉäI™V­aó‚Á ­f`™œÁ‰€æŠ8Š›ÒŒ@™5°%>Ó‚iPHBmL(Ö´ÜR«•¢IïXMLš™ëŸÅF+xxÉÒzuü Ÿ;,°¤árÞh¶ Û£”RJ“$éëë»ãŽ;/^,¥|Ÿ|7ï¥Ë1çT*•|>ÿÌ3Ï<øàƒÙl–rÝÓÛ=28j0KÇÊšRËÏž´ýF3ÍR!\½|Jß”‰áv>_¬VËц"¦‚Ó|L³1·a ’"æZp3-4Q‚ʈQÓ™äff9öœFÓÛj»]cM‘#^vvLfzâØÃ&UG[–ŽÃfñòI"ËåòÔ©SÇÇÇ9çgœqF5½Aƒ›vBˆv»}ÁôööJƒFB¶s™"SF³RãÀ¤}Ôc£´–³œvUe½þDX Ò2P²ÚHÊaVÏí÷¾xÙ•kæ©5ÅoR.ˆG䤒Ç-AHaÒÌÁŠþÅ¢;üóßÝïªfÍÛh£Å®\Wß,p¼ð<†‡’À_ó¹OÏÏ;`ª®’XFšQ#{ûûû…­VëÌ3ÏÄ›>èôYÖi‰u>ßÜ$IlÛ®T*¥RéŠ+®Bh­…ˆ5‚(ªS+“)8åäÛ8-¨2¨t¡l SR "^zvé䎾þÞ©‹nüý·¾·æþGqøÑwŒŽæ7šº‘™Fubtè Û6™‘¿ÿ‘•ÿyæƒzô•E‹_¾ê×÷\wõ]”&Å’»båÐÆ›ìZ«£Þ¤a\ñýåž»çË/–§÷uJ¿•Ëz¦iŽŒŒ(¥Ç½á†V¯^ZèÕj€aRÊ(Š\×Ý ÀM߬L&³lٲ뮻.Um”)Ã2iR%MŠj­±éFøè~›I±Â@“jE¥åAY D¥¨œ;sc¦y’$>ÞÒce…S>wÍÖ ™9ÅB§iÁËæÊ5rιϮC@ósÿczï¤Í¾ï•›®»zŸ=¶¥ ­–Ã}÷?3uƤñòK{ï¹Ù›¡6²,cªzuܶm×u×%P¬Zµê‚ .(‹F£X,¦Ýö=QÄï¥[©TLÓ¼òÊ+µÖ”R­5gÄ2`rM‘¨¤Á€ÓOûH«ù²gµ¹N˜4ˆ²ˆ²¡šhIÓ ¯¤<:üð¹‰@ƃ†Yná´3¯X#k-#Ò™j[Ûî¤(B<³¬¾ôµ7ÂPÍ9mé“Oì°ÍP±PbRÿÀƒ~ʰ fÄo¼þØÂ3±t@E™S뺶m·Z­\.Ç9ÿéOúÔSO¥2c,ŽãÔOÒh46pX–uÏ=÷,^¼¸T*)¥ÒÙ„±mÛÔ££c{íFvÚi 2ñMÔêììLc¤{zz}ôÑýèGÓ§O_犬×ëï÷Ò[´hÑ’%KzzzR?ˆaJHN¸R$œ5kN±Z]fñÈ`ŒJJ(¢4 ‹$!’à±e^—X=ör<´úÎï;éãGÏ59 6àkìwàâzO„<ïÜ¶Ú Pðë G¶ÇA ¼õ·‹+ノ 2>uzû§…Õ¦P9xø[·Z¾mÛ™L†Rª”J‡ŠññqÇq¾úÕ¯¦Ï’†¼»®»Î~øW«×Ea ÖNÃ@\tÑ%¤Š•q(¡ƒ r=K©V”?yÜkV>ßÛá–GÛY/P*˜–T)hJ•I5íé-DQ½”Am¼^pEÐ|õÞsñÅûdþà’—ú{&é ”“cØŒ(•ËFÆVÛ®TÑð¼=æn½Y¶Y{#hUÇ›(ו¢Ù|Ni‘LÄ—¿t*çÒª 3M únV.ß!¸ !eÒò'4ÚµA ¥oë¿_[¾‚œ)ƒË(h1°œ— E3R£ŽÚÓ³ü¸VnO4gL­M´¨éF‰GLÅÒ±iH;Ç<;‘F€¸J:íN‡D«ÍôÈ>{L½â›ËX0…a‘ÉsçNl)þûªç;îG_:á{×^ùë[îZrßÒ¡»Ÿm’žáÕ­>§Ø‘`§Y†­ñbO¶Ò.dHP]~üQÛ«`0çj™(ML0«„,f©0úþw¿¿rùÓÅQª”ô]Åç¼ãž›ËÂoCÈ8㺵юBÀððÄÅ_ª5±,622d›fWW‡ˆèX&ã½]Ø{ÏM‡V>Û]ôzò…ÖDSCª8ˆë~T³Y'ŸÍ@FÕ‰ñ¨æ½RÁëôëa»Z·¨Áಗþ´Íf¥óޤ´ê&óºzŠ`€FWKî]ñ³_ÝvÊW¿~Ým÷UÛ´£ÔãW«ÛnbæMB‚(ʵA” k ¸{î2ÉfImb´Tì„58IT¢  YrÆWþP#•Q×a~ü. ýÿ¢(e:ë,LŠ¥Ô|=ˆÚRIC ®$M)d˜õ4‰Õ§ŽÙ+i¯ìÊká41˜‚ˆ=“f]BT«ÑXÓj¯± rÑq:ü6ñ}ßsYGwì0ïéYS‹Co<±ýÖ]ç,¸ÝæîîÛÎjŒ-Ï9*hGAÍ4$£:q+ŽZ”&…¼—Ïgâ$X±jŸ8~äJí8žËZZyl°QYÝSÒQsY¼xÎ׎>ý ‡m½ÉŒ,c*¢2zzûm×ITÅZ}túLcÎÜ©¡R1çT)A §”k­ƒF¹·ÃÝe§M+q"ÄÚô70›F ”áܳ/¥°ZͦÃßÕˆÿÏ%à†A’È(RõFh›Ùÿ:s!³øèè ÃoIƒ{ù|žÐ8 üÜ?ôÚ‹³zjc«óy $ôƒ6·µDÌmfÙFËr¥Q¯…šx¹âŒ¦Ÿwòs¸Ó³b°²jMÝ󬩓û [F~kùæ›dšµg9)ÿðŠK&•úœD€R²fÍH;𥌙!‚¨µÍ6s2¢°1­5!š™¦Md6Ç;xŽBb›t’)¡†¦/™I…4ž}úÕË¿ù½Žl–Aw¡ußé?FqS"ôË´ò¹âíwþñá1,¢ìŒ+„¬×[¥ÎZ½:6±rþ¼­gL²­Wë…B‘¶d†2™Ÿ@ÀÔÜ%Fš%nL2¬~ÓžÎÌi™`qg{¶*tΈDil"®†FÍju•Fc›mæžwþÂÁñÁœÙ8„:ëëëËLfDÝ=d‹-¦Š¤*Dƒ%!š°8Ñ&·˜†Ã’‚ìý¡¹QK3¦Z• b©4(`|ãüKÂV“¨wÏðŽÁbÄ0,h´šú´/AM¶#fSÃ`QBÊ$n7Æ;KüÀí]¯4z{¦OLø¡t+> INš]-‹Œ®jÛ«Ù‘ìsr[ræ½U¾ùßwžüÕE_\ø›üâ—ß°`ne8[2{v®4'[š c`朱jó•×V<öÔ ª7(q„ä„›„¨±ÑU#Ã+·ÙjÆœ¹}J62‰ )¥fk“*ê0Y}fÏ]¶ØÝE@*h Ä†Ö \hú‹Î¿X…ïʉþNÁÕ€Œ‚–m~ý««—¿²Œ€Bƪí×I´|mROf·]6ËfµÑÊÕC›l¹ãÝ<Ó’%iͬåàmš°Ù¥É»»v|ñUùÍ+n>ý«?úŸß<øüò Û]ð©q÷µ…_àüKn{ø‰v¤fgöòA‘ëÚä™Ë[n»ïåßûå²ð²Y‰Ä0M(å˜F.gòfÆÃ6[Í”q•‘¶É•$ !”#N´Ò,c¹ÍúD!ÚæÈɟٵ݀c‰€€ae¹±ÉHO¡ë²o]V¯´ð.6$xÇg*YŽ“52ìŸþn&/£Är84LJ8„”uŽ‘•ƒÜUÄã’´™gk;ÿÇG£³.]J²ÛY{Gl»§_rÏ<ÿwZpå¿rÏk&]Ô §w´%›±íœ™ïœýÜKÖw~øè%ß¹ëW‹ž0£NÞxë#¯¾ñé??‡€b¤Õ¤¶ô£¦ã8ŽÃüæ8#Í©S¬íþcVŽs ÑÒ2L­Xœhn¸J’J¥¶Ñ´ÉÍúëåѧö›?g·@X”PhıC$[åÚHÆÌvÈQЈ¢(I’tÚV«ÕÞGp)³&Êã†I¿óßWŒ—ÇüVŒEMÁ¢PP$9:2Ô:äÀݨ×b\‘V¼ÑtŠpЏë¾Õ?úùc'~æÊ/œvû­·UZ4ZX98ZnT¨M ÇsGÆýÑ ïØ‚;³Ÿy©qÇŸ^9ÿÒkóÛÇn¼íÅÛïY>V‡âБð( êÓz2Zõæ!ìÝ®BÔ™Ž˜–oGT)pMh¡P^ÙQ0¦ôÙÏ<ñûóÏ::Ãá°ˆH -@)´bÿÅ—–]{Õu–e¥EŸ …u>³÷\°l¦ðÚò×ù«ŸA'€r4 Ƙ†m òÕÀdÌÛkSDƒ ål>qó$&‰/ñÆ~~Í#wß;øÒk,ãõ¬È`rBEX=2ñÌs¯úÍá¡U£ž!'õt…4¬ŽÉÓ·”¼·ßñÒù_{ÿƒ+´¦ÙŽbŸJ :‹–Œ«ZÕú°×®[FíQÏT Ó‚)Mˆ•„J‚D Q5eXÏ;Qg.8ý”mU¢-4M:"0 Cåfíü /P¯×m{m’±išo3pï‚KÃ0±¬Ì³¾6:ºNÎó-B8šYZàË_ÜݤãLWlÚQMÄíLÆ¥Üб0¦LÛxÓ·­µ[‰ôXJP‰™Óð‰#{¿uñ‡®ùÉ×¾wÉ13ûéë/?"âÁV{襗Ÿ¯·’f`6}³ZeÐ9h§>VPì Ž‰ÞNÇ6Âz9üò—NXþÒã“J.W¡¡Ó š à:-ŒC”— %+hµƒf8Ð[zí…GŽ=rמÂÚê944@Lª¡Ä«Ë^¾òÊ+mÛNáSå–áxïÁµíÂý÷?ôÛë "@B4ÀµbI¢< ­&¶ß{í>»9ñbÁŽ ÑæqâWêc !°í¸2±¬Ù\Ö™iÍhz7Þ7ó­ wøñò…Oï±û6¹êë÷ÎÈ×þûÿÞe‡–²«W¼¾<ŽZ#Ãã«V kiºnàЄqͲš2)Ó‘£~£üÉcvœ2)ÃÑ[ãLÅTK¦@5¥Šjp¦Á•ÜcÕt­Bg¶wbõÐÌþ\}â©ÓN™e3p$…F…‘&IÆsO=õÔ0 Óbœóß÷\@cáÂs,‡‚ÚðUÆLN)ÀNÿÂþ•± VËÙ1aÑÉ»ðT(HŒzq4ÆÁfÄŸøøV]¸ï¯ÿç¸KÏ?rß='ÌÕIí9Y{~Š×è5GÆ^»uJÇê®ýÒm·¿Û®h0@ é·›€â 5Š®eÈš´<>2c sä¡û ­|eúä®$hr"™AÚs94Ñ„*E…bÍPÔ ž1TNÒaI£úüÙ|³¹`‘`<XJiEµ¦*‘±âŒ3Î(‹a¦ ߦ+ò{Å®úÍ<òçlÖÀ¸£`”ûÍ·7Ù¸?†]3’QÍ"„ø¦£‹I=Þé?fÏûýáýfž|òngŸ³à㟶õVm*^¹¸1ò€½^à•kšþJÃevoµ+»lÙK¿Î¹¯}ãüOÝ~Ë… ‰CDWÖ¦hÅA½Ëéø¹›ç£¿ÏýìIǼ¾ìùþ¾Ž±‘Õ½Ý%EL+’Ž:ššjPM„`MI|-íV Ý…¾òÐ`OIˆèõ£ŽÜbú8#Y0   a÷õõýä'?yöÙg}ßO‡²·Yî÷Ü‹.8˱ÉÄx€ŒÇ‰o ´‰Ê:8þ˜}GW/ÖWТÝlTmÛVšÊüvc¿y»|?6o‹­çäX´²1¶T…k³saŠèDÅQúvÆÓ†1T­4Ñ30³ÚN.üÖw?|ÐY¾€„е_oŽ0¨S:§ W½±4ë´.<û³³§ç,Ö®O¬î,yÃÆi Êá‚0I©"Q„ÄÒËX‰Tܶ(7Â8êéé ãÆÄÄ«|tû™3À dRƒ–©ÃA0,2<4dpzê)Ÿ/• Ij©Ë^ëÔþ‹ÕðfU‡· nº<Aº EÑÅß8wÕŠ—U (p³’)ðÙú§tù^[´&˜`jÓò ¡2:På =èÈŠÑë½ ê±:ï¨%×Ü–„|bifH‡÷Ïê›:;¨ Á_?äðMÏþÚa,^Ö{ºà6]3 ‚š—Ï„„Ü ;ävÌ M %Â@l@ľ2»ÔÓ—êqÀ,ÃuéŠ×ï;ká…,2™t0,#‰´e€hõÈCÜqÛͦÉ…JTZ>é YCi$í°¾>¾ÿ\)¥çyi4‚a«W¯N’äÇ?þ‘ @Æ6¡¸ƒrÛ‚ea‹M±Ùì\ÞÂúHÜ®ç=×ó¼†_%V“YÎjeW\O*ä:½\ÔŠÊ•0[˜â¦µ“BBzí#Îl¯g·&6[xá=ìOwÞ/映Ls`öÀœ&EÑp1ŸœxÜçžyâqŸØÃÄI‡ 2f¢ÊHÑ6H&MŠ%šE %m-S†¤¦¤†Ž¢48Ê”ÄTÂE«hÕ¾ð©>ÝFo‡’H´ç¸n’À±L'îóÐhVªÌä:ŠGH"$©e¦\Û~[à¦1â†a¤µ¦L™rñůZ3žv}Bs€P×6Tà°gl4­2‘O¡)! Ñ5ƒ¬°Èk.3Q£:$„˜v¦Üh›…"/æF%F%äº|Õ[©÷ÿôÇÏåô[žx8Ùn‹Y;l½iÑîëÉçN™´ãæÓÂñeŽ>ã3ÿô²¯í·ë¦º±:é ÕNjœV8©qR3YÓd NR®qÔÒãœÔLÝv…ðbx‰ôáÅÚ‹•ÓLD½Pðfý˜ýöšÝ‰x\ x"I‚¸-'J¬Z3ö .Ì–ŠZ b€0 X¡B ÞëAúÏÔBj*§!=###]tg\F³M`´¡±ñLì¹ë¦6Úµ1Ç62®í ldli ß’å ¯¹¼móD«$ £%O.o{ű:oFùξmZqçÝZ~ÎyW-}Ö¯Žg\sºíÖX£;kÏ™’§þЬZyù¹Ÿ¸õ7î¹uiìµ{YkÙ”|@ý!K¶ sJJšZJ˜ZJJR¥Ç % %¸–Li¤9lL+¦)Sœ)NµnׯLÖúê—w1!OL  F(×ËäK…sο`õêU‘ˆ@  Æ£T ¥Ô_ÍÜþ¸ë ýÚ¶}Ê)§`Ü‘(2Y£ÈËÒ¬l×s>süf9ÓG<¸aqE´Ö""€™¼^™¢f! :JùÄþOþh÷¤'MÞkp(wõµO~å+¿X|ë“ad7'÷sMy«)j¯w«Îþ¼\|ôæýµÑ—o0ZOL/–Kt¥½Úíú¶ÐVb[‰cÅŽ•8o¶=+öÞ<’6l+q¸°$á1¥×GÄhD­ˆ° aDCW÷ÚËͶF+3 @-; pÀBY©44È—¿òÛq¤ŽbÙŽ…ŸfÇQB fBß.¸ëj$ÞrË-7Þx£eYa‚["Šv¢ °ÛXð¡¹ÍêK U×&*NÚmß²<Ï¥~Ž (0}øÒÉæ– €ùеoÿîo}ÿî­G¶¶»Œ|!ÛmµõðàØÒrkåVÛt_òÍã¿qá§6ßÄiVžâdeÖ-ƒ"¦´¦Ñhû`RQ€jE¡ d:ÓÑ ŠÐµ’´- U 1cEF3qÄ  X&‘|bÍÄ“§Ÿ±~Ô H‚Ð8åŽX¶Xúíõ7Ü{ÿŸ(¥¦ÉMƒ)ètP#Œ‚½]µÀu]ß÷/¼ðBÓ4ã8I`µBº‚°Œ¯6uåqø!ý2yrˆ¨šÉ g¶–RB ‰6[rR ]¡YlZNÝ uA>¿2À#¯Æßüéý=¯Fý’ë߸m°Ø ¢ìP•­ÜçÈ¿ûë/ñ™=x~|´ýÂ`yi@*,'.[g&W5¦“l–÷t´Ùv£¦5í iEM;ªaÝ švÔ´“¦4íôÓ¨iGm;ŠŒ(6ÂØŒ3Œvb‚E‚G1m V7²Ãå?ÏÙÂ>à`FÛ@D#ŒÔ+Õ:€s¿~þxm\AiJ UšŠäí™b­V˲,BÈM7Ýôä“OÆqì84@ 8& ‚·ÇAÙqdõ‹ù¢aÚ™¬ádZaD´ó~à$2GÌ"±2Úd •ŠªzQŒ??ú4+kg›Õ2D½U4H}þüiß½âãÇ·k¼ì×^v¦­ÛÝE·à™~£91V†f^¶@ ¯ÄÕv[3©i¤y¬i¢X¬ KE…&BÑX¡˜Ô4Q4ÑDMˆÕH%@‰fTSÇ0‰€Cuo‡1ºê©“OÚ?Ç‘apM¥e$#PíZ ôÁûzâ‰ÇÖ ¯ÂZ‹ ©9F5]¿´ÖÚ Ôé.NëŽÆqœÉdÚív«Õ:묳þ’é)bö L¢ä‚k|ú“û¯~í5“)aºœ4¢VB#nÅ”ÐÂf¶) ÙŠy¤Œ(q„,p…ä:”_{pøÕ»Z+–vëU_ùÄv?¿äíÜWˆ_COö ÚC¢œïçC™ ¨Ó2 2_@ÉŒ\Ú6Yb:4ãPÛHKD–Hl!m!%©][¨õX¬m$Ô‰'ÊÙ‘íD¶ç¬8kE9+ÊedÁ`¶PRF‡†ç7¾~êF›H  DŠ@ ·`°#þxOow+h$2æÜP±„!•ImÛÖZ†á8Ž”2ᙦY¯×=Ï;ÿüóÓý- Èã˜2ƒ7l¶ .©Làó'͘2)øÍ|¾(4O@cBB*#ª"&ªt·¤Œ2¶ípÛ†vŒOïAžÁlD»n¯8gÞ/;é M§Í³jÐSC1ኪ'švâ›"1Éa‚0I¨ÒD ¢tH´ T2&•œ N…É“J‹%öZ™k?ÕÒÕÂS2#TFJWJOhW*§Q“ùl¯kåã¾ ÚÝyc—¦o6IF`‰É¡’ÈËt¢ f~ô•3¾šq2ëòÞuò·N^šj€4?SaÛvÚÎçó+V¬øá˜öè4rÍ4˜–mŽ$öuwüØvRÖêšZ’¸1sCnÆ‹ s"¨)¡^,xU±Ä#-˜m8Y›žðqºóöøÜ øùþãòoî·ËNHüGëOÙzÔEÕÕM‹4-Òf$d4¦4&T€ ÅcÅCp_ eVµYÓ¼XZg¡³Zg¡óZç¡‹Zþ"uñM™WȆ,ðLÀ³Ï<p70ÌÀ°í÷u5 V¡Dl6Ñ^åuÖýÄ¡(æ cm2A ýFš&~,"ùãÿté‹/ئ­µ"œ !ÿºã‚¦–€Ô_™¦¥óݳÎ:Ë÷ý´e*â(góÎ 8ÁÙ ÷è,Ñ8 {ºç®\Aýh#?ܸoÔŠ6jdzƒ`ãÐßÒ7o`ú¨èO¦ûÓ[b‹˜lé‹é;í~ô¥ß=倣>ît”ÖÔ*Ãõ Mò±1¹­šÉÔf2µ)šÉÔ†œR“U9µ¢§”õ䊞\U“«ª¿¦úrr]Nª«)U9­*f—åì¿–sËrî›rö›rvUnT—ÓjrZM̨‰u9­®¦4dCNÖÜÑæ¤Z0M²G*¶‘éI¸þÈÁûì;Ÿ-I$- ¤«ðšCQhþÕ¯-Ô i¹_ÃâoÑsÓë8ŽSp«Õ2 ã‘GY´h‘eYërt8çZÉ8 ƒ6ž‰þcöëË– ­i%áô3¿6xàÁO}ì Ç?zÀã=àÏ|lÉ>tàA÷}ä vþð’}Ž}q—Cï_pìãóŽº}oµ×ÏwÜÿªY;~Û}¯>ø3wñŇ÷ùäC;zßß¿Ó!ìrèS»òÌn‡<¹óaKv>üŽøãNGÞµã‘wí|Ä];ñÇx`×Öì~èS{òü^¿²Ç!ÏïvøC»q÷®‡ÿ=ßõwòîÝ»{Þ!w/8èîýqÁAœðÝó¾kßCîXpÈ];ïsó‘Ç=sÔqÏìµÏÃG»jp´óùåÍWß:ñ„Ã9AGÐJtç;¨ezP,ãåï¼ý¾›/æÌŒÃøë ºn[BÏóÒùXÚ‘¿öµ¯¥ŽáuNbÎ9ÀÎ=ëcZ‹º»'ïeJCeh@’@RH’Ž™Y Z±€Ôˆ×iíaÀó5P­£\ƒŸ "H ’Aòµ, $&„0¡8ÀFÀ5L ®¡¤ñvY§Wxó:` éŸ¦…lZBZcÖì™=½¶a–§ö{‡ä6kè,€ÕzÙ¡N 0«:^…FÛ™Fõþ›—¦–ÀºüÛ¶9ç7ÝtÓ<Â&Ȧ•)( €}?äÌœe <ã ˜+FªÏn²9r“ëGvr3P˜Â4úš==ínlÑ©yLÍc 'ætªÍû°ÕT” 2ظ› `Óé˜=“Ðß…é]˜Ö‰©]˜Úƒ©=˜Öƒi=˜ÞݘÑY˜]ÄÜ<6Îaã,ææ1«3;1³k=îüÜ…iÝèïÆäõxR&÷`r7:2ð äLÌèÆž;`õë¿CòˆÅŸ-?÷ÙOUÈBI˜Èfó³˜ Å:º;Ÿzòù]yeúÒÓ¿N$¦ëh4iÆÓý×QJËårª2™LšfæØ0€/Ÿvxe앞.‡’Ȱ”$åï_yôo¯ÿôõ×úÆë¼ñ·ÜpýGn¸þ ëo<î†>}õÏŽ¼ýúÏÝyÓ±÷ßyââ¶¹íúuåáÝõ™{n=iñ¢O]ÿë¯ÿåI7þæÄ[®ùäâ뎿eÑI·,:é–E'þîºão½îØ[¯;æÖëŽNùw×sëuÇýîº/úô-‹>ëµ§ÞzÝço½îø[sëuÇÞ²èØ[¯;ö–뎻uÑq·,:îÖ뎿eÑñkÛkwËuÇݲèÄÅ‹>½xÑ)‹²xÑg/:ñæEÇÞ¼èØë¯ùøï<ý®Û¾tÍUÇœwö®Y»Ý×mÚLª¤ÕÕûô§·l5‘ñµI¹>èš<Žc€74Î9ûà÷;úwóþG|Ûüƒ~ÿV|Ç¿žçüyŸƒnÿ{Þ÷ ›<ôú]vùÎö;œwÑ…×+ËrÐö£71mÛV"B­õ7.¸ =ø—Ч֝ÒPäoeê@ú×KEÓÚdoG*ɬ0ɶ;P¶„c™ ŒÃØ×Th˜QµZò4^~é'žx"Åײ¬µ¹XJ©çž{@½^7 #5!þ~{¢ ‘`¡&1ˆS°À Mmb·d*Ù[2‘ôƒaõÖL{ W°B®×%a˜V&L"I”J@„eò´Rw_ïdžçÔj4$'Š"šŽfaŽQJ;::þIÙ ¢aÀ$‚à <ò:¦DPéôÈßKJA9ð7Òa`¸¤  vƒD-Ëæ@lÙ”¡í7µFWWÇŠ«²™|»Íž=;ÝP$Žãµv®ëº‡z¨R* CÛ¶Ó aüïˆ1ƒÛ€k"c!#¶®ý¥cÁyûÒ€mÂþ{ùN¯óžü®ALÊ411xBM•è·T"Bt”r©ž ˜R+ŒÔ‡>4Μ9iGÌf³ÔuÝÁÁÁV«5yòäŸýìg¥R) ÃtÞ· )b„BDo[!ü·Ï‚·äwt‘ÂÁ;’º%dKË––-%}%"•h! Æ'ZÃ4i%R©~䀻ï¾ã¯V"RX3™LÇ'œpÂSO=õÜsÏÝ|óÍ·½Ýzûâ›ï¸á¦;ÝtÇuoWÞyíMw]sÓ×¼Myó]×Þü‡kÿ^.þÃu‹ï¾î=ï„o½û··Ü}Ó-w.þÝ‹w×âÛî¼á÷w^Ç‹î¼cѵ×üâþ{oÿ÷]ý›kn¿ýöe¯.ûå¯õ·Óßu{F§›ÂwvvΚ5kŸ}öÙÿо öÛwßóìûöäüùû.Øwþ~ó÷ÝïmÊyóÌŸ·àïå>óö·Ï¾ï|g<Á>óöŸ7oÁ¼ùûí3ÿy ö›·`Á¼ý÷¿ÿ!¶ûn{Λ?ÿÐÃÛgŸÍœ5Õui½á¯/MU¯ïû½½½Zk!„eYëÿ;¢\Â|‡l½{V°ß+o›,¢¡×F£j Å $ƒæ~Ë£PQŒOŒÇJfóîú@)M éZ!dtt”¼%˜ Ö;`fÁxOØ÷l€ów|ŠÉa2X…u+7S0MKII9éè,r®W¾ñ·±b•J%I’t¡-µm{zzä[‘’)ÉäÛgÍ$˜x/X¾ÌeZeóí2×`äÍ€F( E±¶ ›(e”2&m…¨rß_½æqwww§!„iš)Ðì­ˆ2ývåÚƒ7'rïF®ûn¤ôÛ–j½\õ-˜ Œ‹(‰  ¶a§Úã¯À]·Dæy^ê(3 ãÖC&¡ ï„Ù›¡³w()þ½ÈÖc pËá†EÀ( 6…AÞ~8Ó[ã úvå:¦Œ|§üWë-¿@Ó I 8ùk> stream xÚ•ZMsÛF½çWð´ UI0æð¶’ØNœŠ«\Ym.ë=@$$"! .ZV’¿¯§$¦Hª\.b¾gzº_¿îÑw·ß¼z'ÌLdi‘bv{?ÃW>ËðOÌr•*•Ïœ¶©Snv»žý'Ù4W2O¯n”TÉÝ•HÚºú” óÄ5Ýn½.Ûº«¸Ø/ÃǺézþª×Û«LÑ´}¹¡¹Bý}Uö»¶ê¸Ô܇ùšu×ôK,Š:‘ ‹4wW7Æ&¿Uó¾ûUX® óf½]U}uõßÛŸèl…N‰4WŠWó†ªö¾œÓx•'‹ª›·õ¶¯› mM¹dŽmû¦;ŽÐï»jv›—êÐ…ÏAÕ¦j˾ ío¼¿<¡š+©\Ýqçmùàå€úf:Ñ/õgßµÇÑéÄäd¦…Ìùd]ÝW×4âjéW£ ’yâº;šføn±9—Ö«²¥‚Iú†+½´èãûŸ|ûñÔj™¥&ŸìþÇjû3 `Óÿñ+ËðÈ%’Y¥V«ÙШԬn5€Æ«÷㲞“CqͺŒe×UmǪÿX³ìÕ€k%ŽU—m°¾»]?tï—Í.˜P€9`Í{›[Ö6^ÏËaòòáøpÜ´RUàRA•Ÿã׫Âîõ'×Ie€,Ðüâꎅr¯ÙEÉB³…Ku™“”€U‰¬Éòí§Ìdø/ÎmA ‘j1ÙÂõ© (‘§ÙdÛ/¯§Q²ÅKÖÓP"1±}ºxA †X¿`Aà 0g²à—.¨3•ºé‚;i`¤.Ÿ,¸¾]¼¤Á’ÐÏx‚ fàíeü+‚wgi–å@Ï,À9“©µÁYÓ²»M·k·à@³Õ“ßtsÌçU×5Þ4Q¼÷Ú/7Šš¬þ½ã&rÐOW¹J®¹bMªêáÊ«+>ØvuÉvZÃüßèƒÄA˜¨³s¬ÍÐbr—:Sð‰>û ©Sò E¨<•VÄsŒä9ølÐ*æ.*)Ül˾ œ2`‹:©ãÉDÕ¹©L§.0ëYšñ,íš­¿N+/«=»Ñ‰Š÷ç AêyzÎRßC%Ó“ˆÿÀû;3N¦¹1¼º¾9ÜøsЙË:ÿÝU÷;lB;¸è¶aجھ®ºg$°G̼HZ.R ù^„˜‚¼¯ŽÇloÏ(ð¢`Y8òh4©åÉ+†×£1oûKW,²TëÉísÞšu&ؽë,#O¹à*òíT—6ß­@йè•À··å¦ûLöߺÇ“£tªt YÁT]0U«ƒEZ³Ÿ,gJÚî¹ ÷¬^&PE%ùvó°ó,„3×mëònå ¹5|¿‚‡˜*,ó¹.¹º?}ËÐöÔÀ$¢íW}y¡Ð5~aâá'Ý„Î5®ÉÅ#¶ËúÂi‹³¨‹ÔJÀú €u4b¹ø2rz²(C8ñÆ ™l»j·hÚr[/ˆlºÄ_cÀ–òzM—¾_8RÂEpdÂ¥E˜†ïeêV@4ÊÈØ4ä7¤+ÚˆäCÓVÏph! ¯ú²]Õóº§hKº<Ù”kÒé?Ôv^R#¡µàœàRU¹êþª¾€ âˆ0¾0Ë)†0޶ í;ÉGž_9ÏtZë@ÿ¼ÖGÐøûø–D|áÚAžˆj•¹PUªÁã£1[ºá—,,à>„ñ,tñkÞÕˆpH é›ÌxI‹€¥Ý…¯½fr„ é÷TòÐᇞ†E~mz¬—Þ¤䋉8G”!œïÃãWnítê öëÞ ¯¯°¢8D‚6• ºì«h ,èâ¾»ÕÐ!Œ¨¾ LܰñËîzÜËób¶ÕCu×–Õ†þC ÝãcØ¢ÌÝœÖ]†QÝŽækŠ4—¯ÎÛ†/Èš*±# 7u÷,²eyš 7ä1®F•uà4oÚe¹ 5!•LÛ–p–%åÜVÕ$⢎×›»}êÄo5v~b·ÐýÈ£T‰œ4"³¥7@¦r3?Ï´E¤£fZÙTJ=áFÐÍcm‰O‰x̧Lžõ$Τð"ñ¸?O®”cx®¦+){n¥B@.·"!f }VÀQ"…’k{BâS2VøŒšóYtí9ÇJ~‰+î:ßX ±ØŽÇÑ…_y÷HC—mUÝ0{òÝBP„®sV–#îàZ ¶I@ <÷Þù¬%•vœ¤Ï’@®BWÂÿËfíÙÛª)Ãàƒ=SiãÁÌe–°C߆½œ$TœîaQ­úò— êÂ;ª$Å–2dyÌÞ2ä%¡«¸Þ‚Êl oxp&K¼S ±kÈü ÷‡ON¹Y&#ì±£4N,»qþÈXò‚™i*7¡Câì\ì.ãí—ƒ3d! @ö¬<ˆq4Γí/òâ\¯<ŸëýX"Êš¯ªsÜ€Ó¼JÃÊ­dð²!÷*­;8^þy„×€64´œ»§Îä/Ø›;Ê~øþd …=8-ã=üPm.<¢pz ÷OÏå~(c »pI Q@ªh¬Î?¡  4f×í<×9ŽJ!î4n˜¥/ë +ªÙ;ò’âD6BÛ¬÷Ìᤈ碥¶á°ÝÅѪeÑñ$£h•w2p™ò¤ðm–Jaã©<#üW_öÕ¹8%Åd#Û¶¡èÓ˶DÀb³ä—’iŸNÕ#Q¹!°wgµT[àœŒtÆ"‹‰8dn€gú™§H;¸zFÿÚd]îß#ìØu€W/à}É8|š­ð,+ ©ƒ[ú:ýÊ60zª©üËmàÚg`¬µñ1Ö!ßqŽ˜^Ѧ²œŸ)3ùÏãa‰tP±0äõö´9 z.E4úÜ»ß8L°Dºãá>,Φß$bc/¼]<¼_\ËI«áı•’òço‡Ù~GV;ˆ…mL¸ä#jßüÀßÛ+ÊÙ±ÚúŠ÷o¸÷<¨ çlMP&4|ÄÐg.ÄÀ&” ^mÏ[d²ƒƒÆz†é­Pr’Ð ÑÛ&o£Ût~°i?‡Ûê@WUL7©èƒÀ‹‡–èN«5®ÉÙø0ß¿yýºî~,m³¹ð¾ ªu®ã‰®/ˆ?¥†Ë¸­_Ù“üï—eûp2›Çr!ð¬úy¸A²L>#6Ä™ úƒ½”&¼#ÔÇ#MY€ÞÉa  uÕ¿ºmšU÷j@¿÷o>È,ºt¹<ºK:¼9§™†py†Þi¿¢”ê<¥ü ä™ûÑã'´&­cqcéŒÎñc–ƒêÆô<ÁUAu¶ÿKúþÍ;0š&¼Lqi ¿Å~pÉ?Ì ìÀ †‰ùo úcšUµ=‹è윣 O"ÏRÐÈý)¿]=œC:z`/&##7E–& §7w˜ ˆ'zWv= ûõkˆªûîéc¡YaÅTÄs±b{Ò_¸ƒ+ çé ¢ºžéy‚ËðÁÕø8‘ @Ä›šl~Ë#]Ò߀d~€±ˆ•RG½HÿyŽ™[™Z§â©½Lí±øeÿ æ ‹…Ý!ëÎWBÝz?޹ªƒÊp«'Ù@º2š‡LCèÔM:~Ì 2ôµqyˆ|á‘õ­O4±ÿ›|€Ly"éÙêK28´‡¿ó³ù—¸gNŒ1¶8úœŒéΰ¡uªé>dz\]Œ]qæ0Éd+×§_û4œÀdïžq”»m1/YÓIùYô,AÛ[›X«Éž˜²´Ûj ´«ô¯&Å™P$*žñLC è¡zº#JiøûgvLq$hC6„ÿGæEÂÌ©ò?¿w\GÈK¿áÏ‘ Öwz…™7¬À ¦æC–™J§ †´.ÍOFÛÁ´äeº½õ¬p[/.¹#ú{-ã O?×C©ã±-ϸT=t¡¿žè nîÅíS aíïš¾oN.NyWe£|µÿ[>…æ“#˜(¸éO¦1Rf9> üÍÛÛoþ÷8ˆÎ endstream endobj 2755 0 obj << /Length 2756 /Filter /FlateDecode >> stream xÚ¥YëoÛFÿž¿Âè‡Xkr$•ÃC¤rRß—k‹b-®¬½P¤Ê‡m¥¸ÿ½3;»©Ð’q‡ æ>gggg~óÐ?n_ݼâ*‰Ù*^%W·›«\0!ò«L¦,ÙÕmqõs”¤Œ3¹XJ©¢‹$Ò‹eu[³Ó]ër±¹ˆúΖ¶³¦]üzûãÍûD©B+ϯbø—\圭¤ºÊxÊV)Ìîà„Û­¡mŠ·%~K+–äÉtÏgû`º›ºÛº?ÿ‚ó[¶Ý^:žË˜©l5¥µ5º0 \D&Qa~‰YÁE\Wã'Ž*tcM·àyt ¹zC“ ˆ±4`†¤1Zºé«ugëªeÈàUÂb~"„³Xeƒw¨’幜îØô_¿ÞýÞë²u'_/–Š«èîH¡ØŠŸÐÓUqŽ©2¦øêäâÕg]Ý>¾ÐRd’%°u™H ¡ÈÊúѳ·µ÷Ûç8D} ª êRNWK€/¢¥PIô¸­Ý#Ë<Ú÷Í~±mñ#+x šÙÖ8±ŠÌ¦/˵¦Ü,̓-L…Ö9z±»·Û 7éKÝÐâïµÜéýžæ'Šã´1¨" *ÉeNÌ:ÊI§ä3:%ð¶N>pΛê¾4ñmÍ?Ù³Š©gÕ&eišž’þøÉÞÖh'±`ñêHx‘éÖŒO!oÉ%ÀK²‚OÐy2ú`ïÚ®¾oôn‡R<ÿäAŠ ›<] `…R4Ý_à]90³µc‚n¨oŸ4¡Æ›Þâ¶7Øã ¤î¹M³ÑkÓ­¸RÑºÞ ªSÐ.„%üê»¶kôº£ÞºÔmkÎb‚” ËÀ$&¬ÿð!°š¼½psÃÌ{²ÿ, Yñ”Aù?5õÆ–fþ¸‘õÛo>{Z"sxàì丷ºÓŸj[u?¸Ÿ?63ˆ7!àôj™f ,Ú–qîÂP㮋³eç{¸äà—à'àA»ºAçéFÛCÛ™'úxOÇ:õÁVÝ7ßø/Jð•2øµ1¥Ó/™ V¡ïC&w!î´†– ¦4j«M£Að&kçÿ±å.³k@’Îv}çnº"Ajh¢F~ÀcMSÖº-–€+nä™+©¸ì€Ôû¦Æµˆ~`Öi~´$êÞ¶ƒ|èïÂ<ÞŒ<%tµÿîuÓa+#_#ÝùPDˆ ôOyzSéòÐÚö’¿Ì3–¯ät¯3KD¨ €½<èŽZ`ò/áJæ+8f5¥l+;«Ï @Š¥ƒg“^M·­—N ð= ¸Qß\O‡«†9žž|C»­ûÒo¾#Hò¯@óÃCùͶÛR+<­ƒ ªôKJûÅÁæëÙË'L*…ðÍD@í‡ÚäŸñöè#œ‹p#zá.9½ûoÛßêÊЪ¿ù裮¿Œ€)ñëä:Aru„âohtõ74,C (ð³¶¹ÈÇwE/Ÿàÿ!Ž¿óшŠ}#f¡Šw“žHřʇô„>§°L¬ˆ440+LA3-…Kfg®i…ö[lGý&öÃ}ë)‘½å4HåÉ;ö¦#â`šàªh¯TÏÕ¦©wÔú`öèή’&éJ%ÀW𠛏»-ì‚ß…/Ø+:­‘ÉÂóh¸Æ~Ó¯‰3˜Á˜’¸Àea‘ó2w¶ÒÞº¹ƒÒº|^Àx–Lù|zW‡ËÉ8Æpo²iÈæ’Íñ°w‰“ÊÓ<' ^äd¸Íòð,'êå29ÌsÂS~ÂÉóá¤5¹:y.†ñ– ˆ†ÊÚwõr.h)ÉÈs¸TO W÷M7ÆcQê™sðB¦¸çQ* c ½²ÞøC<[M8Òù¨Â7:Š@äˆØóñ©XÏHeÈ—ŸÂû(Î%ä>äÇŽÇpINà EßγíA2oi!fö¤Ñ­-=„÷ú^ãq5}]ª ÁtO !‡«­¹‰ÆlÀw;/9ðñÌ…²œA–ãîst4JzOAÕÜäÄ9BoS74ï27Óú…GEËEƒá|fQÑž.@÷{×Ó=q¦òÇXpA*†qNÂÄ ëuÁE*X¢Ò€úA7!_Ycâ‚ W,¨Å=jÙj™µñ”1ÈòßÉ9—Mž.¯–Dea›¹¤MË_ŽŠ7í$yãj¥¢=pñœØ0> >GÄïÈpœTÜC8'ϨfBJç$e›â95Ãt<Åæ ²_S™ô:•‘sÍä$ëƒeÃô8–Éœ{sŠM¢¤¢ª¦þ¨X =8QÇ8{íšÃkx ¬Áv4NO7 õðd3E4H_˜>F8…”â„ܪ¥Ϭíæàëº"€Â¹ëkÚà`«ß-†xÚ4ã,MÂ(–Š[_¥«ŠR;[ÝìôÓ\," %ÀÒäÔNÕüŽ|×R?Ù!?ÛÙκÓĤÆ:e.£ch-Oò ‘ä ì”DóÞ–¥¿úêûNsÅcÜ]¸<Í…ÓÕqËÙ˜t,K§g~<„ŒýõkJhÍ*>c$r59KÐJÆôBþŠÊ¯xôÞù›§r=§' )}­l¬'/è`”Šˆ> ¢$Úàœ½ßŽÆu;ÉÞ©ã°¼¼œLŸæÒNF_Œ\àO£ïLÕ}Omó’4ûgpYÿ1T†ñIêºïBËh¿Nòb_sgŒ=“.ƒ2,ÿéu‰œío!ä‹=ÈP¸¶ÏPùçzû¿ÒÃ$þHq£ïÜï¦såêý¿Òõ$ULfƒyUd “ž¦cää28lvº´­ÏÂÓ ðJ£Q¶~KalKÅ3ÜBO )ŽóÒ8Dv‰-´Kü^ªXÉØÁã„Ù±].ý¯0*c1ävIlðRöëY£Ô‰±® §b¦BYzrÀeVY½_äàጚԉXhÌÁ*6‚x¨7Øy„W§Vˆ ÜÎ=Fk˜"[Øh ,i9ã1>I„‚—ôŠe*K‘›Š³i´t®ÜAæ’œ;JØ_‘Äè´Âë&N¼äç?x:.¦Ô/üö&òœå@àŽP®cnH\AûÄÜJ*P¿D‡x fy̲P‡WÏ“4ú8çR…ò¦«bCHY .qƒk¡(ÅPÇ1q²€ªç0po*Óèõ Ç×Mݶ˖Ћ޹¢ˆuìxN?+¤ ˹‹þ èæ"%7ëàõÕ»ÛWlùŒ endstream endobj 2758 0 obj << /Length 3331 /Filter /FlateDecode >> stream xÚZmÛÆþž_q „X<.w—/þæ´NëÂNŒäÐÚhŠ€÷îˆP¢@R¶ùó}fgV$u'É(GË}™yæeï‡Ûïn~TöJ%q™”êêöîJÅIz•à?uUèXëâ*7YœëüêvsõŸh|p×+­u´½Nóh­¢ 5>]¯ð ©¨§ñ4êîxžûLãÎOyè‹ïiî|ßÀóÆŽwÕ0ð´õ>ŒÉîÍöž¿›íºÝ×®_²“–FÛ®ßTm3TcÓÉØ]µ»þåõʘ"ºëúëÿÞþó LůZÅ…Ö׆0:z¼N˨ÛóÇ—¦m¹õPQ?,ˆuêñ\˜4ûjMÝH÷ƒŒï °j 1 ®^ ‡Æ‹¤‘^L˜;ì7<øHݾ\{ÇCŸ›Š‡*þÞ¸ Í!9a›žÇ>_Û,ªú¦úÔºÔe¢OûÑsŽKVÇ·¬²¸L‹ù-c¯j[µƒ¾Ö-_.c×wt{Ÿ›Ú ´åÍ6]¨‘ìž*+«—Û¿’]_¾\÷Ý0üêÖtS¿%6Á?ÅÛ=ÑÊÁÚš8MírËj[Ÿ#Cç6ÎNRIÿ|÷oÿ8œ£b•–iŒW+eÐi®nkì³qãCç%_é2t7½vðÐP¨AïÂåky!¬–‚¬ÜÖ<öD1tP önرiøƒÆÚÅæÖ>^&Š™ èóŒ‰l±1)S‰2 ½¢=¦û.H­Æª®ÆêÄ4(Kc¯2 Û)2îíu ÀÆY#`Q‘ÛQeAPcÒ/š8@É×2²îcF¶-ÀÛ]wÂ&Û¤ÚÄyn—Û0-/˜0R&X¤cA9fd_Ï"Œ7-—ÛÆßB¶„}Ùr¥r€›ê’ttiâ¤ÐË]¼Ù@2e4ŒPΖ<õr Ð"ɾY<^–J` Œ³’—ž‘V˜+=ÞÅÁƉÃ4ØøaÚsй²yl û@cEÚe.…áÓߊo#:áÙ²%Z£qÅHŸ³åA·ÇÇÂF«`?˜çG2¯WïÞò×G£·Èâ›Í®u¼ƒá4s²fÄjn{°o¶ìdŠühñºuÕÖŒ®,ä¦ËtòØþ¢7]/êïÜ~SmW½¢!n¹ùÒ7££Ï c£ïÞÆÜzåÏJv3-é wVCX肪Ob´pw`Â&_š9rø˜j?Œ'pÕ"´1…àêºCPÚÔ>ÌSAwM>îHÎÃ7³?Ÿ1Q”¸Ägš×MóÏáC†èÈ–KêzyÞ‘¬)òcÆ¶ÃØï)|– 2„ŧpÛe¶”)‹ØbÚÖ;z Õ´üpž0» u×¶M °Ë~ÁÓÜ×·ÍF<¯àD-®ê™­ž’v"‹ñ Ùñàlo‚Ê/•`¸‡?ï‡Áo–—seN ‡ë‘;ܼr³ªkÈ`pQ lÔm—+ &·uRN›‰eømÉBGùB̽î›÷xÖñˬ'Sà.GUõçfíNÙ¥É ï«<+‚–bZØÓþ`k/#„,Ô€ dññ÷÷÷nÊèÞÁþ+\öªu,ß–P¸+KÄòËè‡æâD¹üÍâãÀ+Óä¾ûÆÉˆí¼­>!ª¾ "*‡˜íråÍYCMá‰Ï,V|ü¦³2Õ?:«nzÒH¶#ŠŸL3GvóÆ—™!å3"_õáü©¢·ŽÜ¿´Ððº’yðÌÔ(ÙœýEâCÒO?Ãi‰‡2†°nAó\·ô3^=¯n¸ª8Oô’™KJ-¸˜Ré°P‡”ð†šN¥Ò$Öp‰‹e—t[ÎóBõÕÉM@2=”“_ßò˜80zâᎶ»—‰ëÊÇQè#øä¤Ìýo»û—ÌN}¹îÅÙƒ = 6t|ÒÇ‹@`àEõréâ æÕŠôš%úÒHb—¿N‚qÈikîd‰zA~=áSkc‡×R©ÿmšm³iHuaü3Úƒ“"¡\DòL4$~ ÓÔÒ^Î Fßý•r†Ý.ÞX*‘b.¨|ë9üðþrH…Í´Y®>{qq³"yzÞÇo86C_®öi˜gV¼Ós—`àd¦Ú}ˆÂrÈ2üP“§'GG%§sà˜Ñ»p¶Üø›£˜ù F0·X½H¦Î?l“Oà¨=‹¾Æ—³x`t_Gn-ü™ç±ç_„æk°¢-Ñ)øí«í½;%·¾*”ÔEÙ÷Tlh|de•~q÷û¶¢¬¦ªU´¤9nª¯Úyr…©”\qËÉ|·k¹«âŸ…Hæ“©2ÓJcöc|Ít8õ¤â6²ÌÌ“Æ<$i€oWѳ¢Àb´!àA?0MJδ´â¤–7Èèq¸#„S2ÂàH«ÚøwOþ:æ]½?J6¨FW·²çU©Ôrö Çi±*)øœ²¡!~"‹PTRE2Ù•ÕÜüŒcŒœBlyñ{‚䙚\ÆÿSpåpFH‰m—ºä”øO^œêœ§ÿIS¿{}ûÝÿË9 Ì endstream endobj 2761 0 obj << /Length 3168 /Filter /FlateDecode >> stream xÚ¥ZYoÛH~ϯ0 DmöÅ#oY Ázd‚Ä{a³Pe¦H-IÅ0æÏO]M‘²dÏ`Àê»ëüªª™¿Ü½¹ùh핎Uçúêns•Yemv•ºD¥6½º[_ý'Ò‰ò× ç\ôåz¡£úp_,ëòza3MQ?õeýß»¿Ý|Ô~z˜Vqœ]ÅðO¯òfwpð×êǵɢrø©‡ÃLõCѬ‹n=<šæŠîZG%·›v%«áPÔõ÷–‡ªxEÕàÉCËÃV6î ˜ J½™Q*TGJgéœÌºZ¥åð‹Îå3ûlsWtOï@€6CB„Ö¢+ñ¼+8êTDMRÙÞëåam´~jŠ]µ~­‰Š'ºp›GCµ+y èå·‘…$ÉJ”äõ”ƒ &ϔ˓9{Ðw…çøŒ˜¹öp^÷tN“£l+Ÿ0£@^GÿÜVµú„t·á¯m~˜à¦ L“ á÷‘Vv|ñ©%y¢tbù"ÜêÇ­ÚF;ÜzX¡Alqè_Â<^r·­d%ZRî`OGSºà ^+'<²7–±¢.cuACü°ã^‹½G™š¢°#ñÊ8ŸÅT/ª°»®K9xÕ` ÉFG =š4Ðaž;ÒAñ*- “ˆ³§ª´—\"S.öÅ0ú8+ÄŒ 1›E@Ù–æÆ¤bf$BGxÈå«Vv€#±"`œ÷=öqQ£ñÝoeQS4¢tK˜O3G$@BªºfOø3Z%Î0bœA0ÖÀØ•âÖo¹Ï”Ép¯¬Ü Ú.«fd½l¼ì6°´Xá&YuèCH…Nàá^ÎBàLѤáï#QÃRD:ê²;Q t\UÇV%‰¹JâxÓ¼»Î at¦£{ò’L=P°HúkGó%®Ð;33Å9˜œôdÓ¡Y—%ÜgI@cD2¼‘,˜ÛKñä‚âÌÉ3Òài†DG>×*uÌNªG_v`Á,6 &iôÀCd(ÎRà…Œ4Zv%+£ÈÂpŽX忏þ±z¨øˆv>•E_ƒÒ\³zxu–=8þ»—!ð"·3n¶Ã°wsC@¬ˆ{Ì”ì\hG8N·å~Óv÷¥‚?7CW¬nÌ› ¹RŸÑÒwåÓDe6ÓƒÄÇ}¨¤<;fƒ/n0ì{;?ˆˆ^ìæiÏEbln”ÑÙü ´™—D2ð©?w/AºØË#J´Ê­8z¿êªý†ìâœÁ]ÙïÙóPÑ«A€½§Ål¹sè…±…¿»âáš÷b/œyôZ[îöu1ȆyÞK¶)}×Ö1´€8íøÓ…NÂw)ðš1_ër(ªºçœà{¬ ›G!¥@­šU}Xs †¡eµ¬Ñ¬Ûû®Øo«UÈTÀävâ-cŽAgÝ6ý¾"˜Åu›Ëvzˆ8Ì@é‚%9cƒÍÇć#ò<öÞk#îQ0è8ÐXcj8˜1TC€ý¾k÷]Er&xEºŽpkÍ‘Âï9ë[ϼ>‹¯&QÆ+3¥±6óÑ—Ò€¬bØ^²z¶ŒÊŠ]›H¶1•ƒsâ2”|&Ÿf6’¦(–ѰdðF #=A¼ ÖK5˜µ*‡´nFØŸ¿ÞþãÃÝ/ï?¿ÿôïo·ß~ùòþ1è¼!¼šÄPû£êÚ†`ðø ¶Ç¸-ÕJçb¾`=X³U(¨å¼C­r¼‰£ð[ðÏ¤Š…Þª­ÛfÑ—û¢µËàß?ßþ‹[¨* 5¹ÅÅWi²Àü¬y5´—"YÌÞ¿è°|{!49v’s=ÆGŸOJº\r">Ý£»‡¼ÍO`;Ð1Ĥ5 ´˽Ýð0zç M9ãÐ'r‚ž^®‘Á$?€ÓÌiÀ"·ãö}>ÉŒ@«§ìA̲™$ýE߸öÕc’¢=4Ú†Ó‰Æ;érŽ­_³H@æl>¿wÉÇ(—dÊ@˜í $4'ÄΪœ§Ä:€Œ@Y(~ùvb1çˈá2Iºäž-: Í#ÅzÝç}ä»HhlÃ% úqÑq~#W¾ô¢Å*¡ÎHXâB‰çáïk Ú¨87˜˜¸P˶ ùt”ÔÛð²æò³G¬ v~Á‘´V>“çaÜ.À+0oL`ÍåfX í¢« À´Ž‡ÛŽmüÜ3·@+.h…”,ž†ê™bùXˆAyØ×ÕJB è®ØÉ“ÁsV,dKI*¯1\$äÙ ¹hš„%’9’(F"ƒcûâ^öçÐo I$¹È8Éǧl#@ ÎÎN»žm9‘ØdTÞ¤2Í3Rh”Í„F^+z;®¹`öÏ«4•!LЍ´6ci Ö_×ü@"ýÉkT"a+á'y(èªuÉ£SÃK0¥kCí`4—ÓBü‡Å ’êE–s*Jf4’õü’Lkñp=¾àœÉHlÉg" 2 ~¿ß ƒ©»PxÚÙsbHš@hÉ–]ˆ‡üw <êR9g½VYxéüVŠz‹“EmÐaÇ òã.ùNL#kÏCD.žRY/©¬“¤„MÒW òé_•<¹.†‚'$&:›¨<¼Kî 7å\ÈCrZö¡bJOÓ/é—åüK²’¯>N’y–Ç*ŽñrÚð@CRfÒŒP/ ¹æ{ädŠuØ{–Và ã¶êªÇW§Á—·m_ò(”èAø=ˆ¨ã9°ªˆM4[©Ê$âüÁ°MŽИ(»ào&ð;îŠ|10ZòˆðDO›ÿwÓ[Os›ó /¯Et!ƒÎ5ᘰŠ«Kœ`ò«ýä3WÍ6µ_R0à‚[6Z¡”Çq‚†½‰K¡ÆH˜!2Òñ§nšxAsI‰ý^S~>b¦ø|ÖÊâK5¶øµ;óüÖTóTiäòX‹›-¥%TÍm¾cfhf¤ÃÌZ¼»n%çèd"|cÙ†ég›°ïøæFSòiG¼ÍŒÖÀpµäcSPyñ’yq\V®ÞfYU~¬êèyª:þ|p¨e˜ßÿ˰¸¡OIº'µàÉsd˜_.f¨Êøëùpð˜[¶êcP8î§’üxê¶êg(…Üâ“„±AÆÃè½­íBõŠÀŽæ°Ÿùš“zs¥Ü<³´Ï2K´B!ˆ3s‘:‡„X†BÁo?üù2& 3ÂC£¡&”W~rIÈš …h‡­t’œ‚ÀÈ1…lè.9ý"vñc Ëõìr…o¯í´G»n›D¸üˆ€.wÄÏ©îÑÒužS:Í;åu›¡iÉ/·‚K ¿]žk«^B{°™~úaБÎqÑ*±IÐÎÙð6g;óØ Î[Š…l!Óçmå˧Ÿïþ[™"„ØŠN\g¦Æb}0냱@ëÄX¬Ÿ‹ ¨hýï3¸5Ïç—«}ݯPíâ<ü„ê}Wö’Œî ä„Ruy¤µ“³àÐ>‡Û²™ì$ÈK ˆVTF ¹/ƒV°ßg:(Ëê?j:ÙÌtfê”S[¿~ä¤/Ÿ•¦üËêɃV«T,¥Ô†!ÛÕÇâñý—[9ô‚ü¯¾Xy™žEÿ9àÝ»ûrx/†ò©Z~Aò0¨‡Ï!/Ø€ä¤ÚÄ*M$L—à ñA§F7+zÌ7ž3Ú…±ò ÙÛÍpTtœ³QãÙ16ÆX‹a›$3{ÀñZ>£?ö<ÐÆí?ªâ¸ùÅo `©›3'ÛTÍzqN6 x•®,|¦r›³‰üʆ1‘-ñWÜúæÃÝ›ßC éß endstream endobj 2765 0 obj << /Length 2588 /Filter /FlateDecode >> stream xÚ¥YëÛ6ÿ¾…ó©òu­ˆ½r@€4½ {¸CÓd‹Ã¡-PZ¢WìêáJò:Fþù›á²ìõnzwH“Ã93œÇo˜ïn¯^¾‹ù‚Eaålq»Yd"Œ€’Ê$LEº¸-?oZU3üìߙZÿÅÑ~[Õà˜-½ýûËw,žoÈ/"øÃ\DaçÇ-ØRE¸\¥‘6»¶M×v΃ÛJz¹’,9.ÑTõŽ®ê¡s£%Ï‚‡e,ejµ®ƒiñ7ÆJ£p ‰Ê ‘-RÁÂL’äÃa¬º–t85…ÈÂäȽyÐã%UyÊ=[’Lå®Ö ”2ø¤A*!¤•"ø¾C±?îtK„’>*v P`0*T›¾Út=15]ï¾/õê‚ÁHèdÁX˜Ç .W,0KÁá2ˆ¤÷K?µY÷ª?\ÒF™ôFåa.âE’¤`\FFý÷2‹ƒn‡âæ ]û ž ² rÆó@ÓâØÑÊnp„Æ/³À}õ` œó`ÛwÈô`J]¥èšFµåª6­&fà¹ëUÓèá(soÉ,ºÆí£¶ÛÚ,YPàijEÎrt]ç/IÌCÉç:‡`·*CZò ÕR Á„{«ÿ‰Bzrk-’Øt¯<(M¯‹‘ÆEGžÐw5º ±W~»'¢5VJkh–Ì = ¨‘ˆ®‰‹äÁ@“q¼×þ\ ¬ aÎÆœ“ÚÞf"ØZ_í†ÁØxCíµÀ*¯ÈU8;ÉI(¹Xñ$LRFþøKÄÒ§ÜÊÉÀ€œ0¶HfGn± Õöî#g[¤thÈ!{t5Œšèo?üDôâPÔÖ&@g¡ÁÍËhÐë¡Ûõ…g°hÉm©{ŠØã½Þþ<æ-Í49+ÝÕp*޲F½ SœÇa.? #íͳŽÚ‚¸[>å¤ï+S ­¢©Ü/8wiÔ¨ëb¼‡’–Öª@‘î‰nZ¼s‘@rÑ5±¼»y‡,?8–Òt -`~ÿ¤mæE ®þv{å=C‚ä"O& Šæ*Ìð—ï'¶•ç[Í¿Ãbóä}Ÿïlm#Bv.AåP N$ˆÜÒì|ÏõçÏ?ßמï«Û<'L—˜Qº"bl‰JÉq°µq¨û ØÒOEiïb—wƒ˜q^± rMU`UkýIûJ÷ŽÛæ?ËÖµÇ4Ò Ü´`½¥.ºÝ¶†ëFïšG÷¤@’„ ÂÜ*ÐíFt†=þ£Í]5œ•, !Ý0†—â|Å\áù=y(“ô<Ðy2Õž¸À¦h#Š 6\éÁ”Ö·q†êØAe†Ñ–ᔓµ¾Æ V½Ñ=„!lpwÊGe •nh¤ÜV…«ôþÈõr§ÁïpáT™/*Ée'yXc÷•Ú⎈wlBXƒe©P¾Ô0Ÿ2Ì‚=²sÃ/A³ÝÕÊæ>63NÁ-ZIÑ„29ä6§ Yc*Áï@Ll›î¬6Lš@¼$€ê¨&z7Ñ6©‚ãPµÇ•~×þ ·áϻͅ0”?²£ÛðÉmtû{çK²½Ñ¾qr9Ðlų̀|¢£¹:Yw>|ÝUï+ç÷íT}É'LOÃ7nh`Ü'åV6}çgž®‰´&/X&YeÎUÝlkeZ’Ìiœ}ÍHö&çPí^üÿf&^‡h¡t°$¥ŸÄϨz"*%/<ˆe^B@x®—ƒI"Ï¡›H\57pQyá@ä#œ7TÜ;&pvOÃyÌ[À aZ×´vÀohÊGZN»•î×ú ˆƒðÀèxÔ¥g*ë*m’œªòžW¯|óGàQs˜ñ JÂ6®¿xîPƒ"_Éôà{<…S2øT8\9K›×h|¸jsð5tnü%?œ*+–GžˆÊ[*Øï@Cë.‰+—HÐt…dúÁžÃ1}² œ8[b-ÔñôáY›IŠøL':¯~ŸiŽÙY‹! m‹|‹Ñè±" AÆcW¸ 4ºÔV˜!}ë&„ï*c|¡ hÕmÊhT¨Ç KYŒ˜Rh"íÍ0Ð )­I–Èà¼ò©Û @$€Ycy=é* QËx!â8dÜåµ½«“Bš|.ôÖÇ‹8/$òXК)nUïj."Å?®Îúay„€?ÿ-JXÂ0à—{ËØ€ÿgaœcÆ«Ÿ®~<߀çÐ_K»ÃW!O2òèãÈ.0–Ðgîˆ/o±ø¾ƒ{®Ü¦«Ù® é¼Ôñ¤OÃVJæ³z‚pš©¬dÅa¢K^:•¼)™¤:ÕßfM7«Ý—ªt^4bÇLý¥óO‰Õß[žÒÕ¾®÷ð9:fPð!tH¡°Ú@ãSƒ¬¾@Ãþ×Q¨Î0Ž9ÀæU&¨ جb DDvVÍÖÔêîκ?,Se¢Ó¯2tøÚαZ‚•µ±nèt½žÒ¿<Óz¦0–®E5î(fO½—0ÁÜíä³½¬ó þÚk ‹eL>ù ¤«\h É}\Áˆâ<„ CÃ^×а[ô+ÅŒw×zo€þÞ”ôž† PÔ”}˜€qמm »A•)ibCñÒcO¡+-‚Ê~H$€p•:qôÎÌ—º¹OÂÔö+ª‡’þâÉðçIò(ùoâÿ‰VQžŽ$q6H‘;((#W†óé‘2¡GJp(²kä_¤òàí·ßüýšHÖ¯‘BSÿJ”ã3ÅØ›Â™ÜnÒ¸oè-Ó¾ïÈà_ØC¹ƒÀ½jbÑŸ-|ËpÎÕ‹ªçILÒaI<¾Ìõ>,›–™¿bÓYpŠìl±EÜ qRņþnK=FoA Rfx§XlÐB¶„‡w¨w/…¾@[¾­«Õ UO(Ð!Ð µUkSCëá)…£0©ocP0#ØbNÀñ„OW“Ÿ{û”„ $c7`€ý{©zÇKÍšEÉ¢‘Ú¹h'‡à^êÞ¹=ÎýÔÔ¨u÷þÜÁ”úxöshõØ©¾O>i?¶Ëy˜ùlIù™³X)Jž}cÏZýåkQ¦aÂåé§Þ@XQ†¢7ÛqðM<À,ô‹g„áÓxrºcm«G •ë7Ä–­ˆ¿}EBJv¶Ÿ>=ûÇï®6ÿcÀ?kX÷wþӃ߅ÜÉÒ‚ËõÅæ¢¾Š4¾µ{M*m§ÿÜ@†9dýÚ±@nïúqfg¹+]oÑì–óI|›§Ì®â  qN[|¡”ÎEN©û‹OØÿÉÜ–î endstream endobj 2769 0 obj << /Length 985 /Filter /FlateDecode >> stream xÚ•–[oÛ6Çßó)4ïEnbZWKvÖ™Û.0tX ì¡+ Z:Ž H¤!Rv¼¢ß}¼É± :ÁÄ¢ÄsùŸ)ýº¸ S/ Ð4˜†Þbí…(/¡|£É$ò²d‚²8óµ÷Õ¿§åpljOÙ0Êý½¹0ƒùõµÄþýŸŸ‘y´èæVÑô.ŒÅ~e>VA63WxÞV˜PcEø¤>[›köáêÄžq½­@fM’܀Ʀ%Ü8âá·Åïž,uÙóÅqîeqˆò86õq¢‚(¼+FjŽB_…†¾™œú+Ì¡4ÓŒš«¢ sŒ?¥Q©M¥2ÄÝË'$±ú¹ßTÆ¿¿&§’ã$DqŸi–H «y¿!…‚²±·jl·ÜÚ«·„ž®Ø¶ª†B3 Ïø„4r«—š@yÛ.˜q&úÒútìc°n%8ZÂ(®ˆP ˜¹PÞ(š¢<ÉJ™ìgB‹ª-eš4JýÁ_db|/c8ᘖ4h³˜•õFa"#%Nߨþ1ÿôã¨@ÿÃçó—¥ÃMËœ·–ë’•Å5ð-.l.ÊÛž‡-ŒPa jÙèÿi ÿCóä»Y‚%iÚO3‹yXØØÂ0wƒÄUšf7›Á3nšsêìR>n¡ 냹ћý%9Øäª3Ôueg[µ?Jt6„˲Ӣê|–QäËÇ,M“$ÊŠÈ­Ë…`Í/\4’úÅÈ$«F… oìš°™ dé$s…M²Lœ³¸á«›cå-®¬0à:¿4lÀå±]Ö «-KsÑ-gçH?¹È¦šÍˆ¬pýîÅÖŒÞÛ>„ý±g³µ1Ö »³fۺܜXÆå½^k›ÍNöƒí:‰0ýr± Ðy[í°=é6R –žÅ”u·KœÒJÖ®:¼­—l½ÜyÚÞ  Àé.ÍÎ[¥‘Šœû1é{uënælsmÓé ^Ù *¿  ÚäN€®Ò®ß1ŽîìLÇêkðíÕŽW²»mÏn»=]šÁˆ®•žßª¢„ ºIê¸u/¬›½]ncrwwDzà-†oiP]x{agN"f8ˆyÃ8ý®Ò' ºÜuG§Ç¶þ²þû…}Œ¿NÞ§ì·'nv#®Z;«Ší_;@×D½KMÓ¼q¨í"àX¬ƒ‹gY¢mhÔ¨{jøáúP § ¢Ì¥9šÆö­õÝ| DI`¾ô~ºú¸¸ú„¬Í† endstream endobj 2773 0 obj << /Length 1342 /Filter /FlateDecode >> stream xÚ­WmoÛ6þÞ_áeÀ&¯1-‘zsÚH‹´ñ5AbìË:¬ŒDÛ\dÉ“h§^±ÿ¾#R"‡Y³…È#ïõ¹ç¿ž=¿ ¢Aà“‰? ³ù >øð/)#qLI“„%ƒÙjð³÷¦Z­eÁ•¬Êáˆ%Ì«æøUKÙÂ2 =iEë‚g"ǵ´×9~>øAX\g¼(àÚ/³Æo#Ú ÆFÂhDBô#Yíj¹Šdª>šK)‰'¬¯mB<9 ¼rHOU6>§ø$²â×O2e„±t°€¤Œõbt2’Ð4g9\” ¸aÌkäj]ˆFé]Áä(^U(b^]]oÚã[©–(Ý4 8RKንšMÂÖ« n”Uå\.\1&”°˜µ·›¬–kuä²;b4&aF”š0TX<>E4º•Ùªž7{Ñà½Q¶^Ï ¾hÚ}‘÷·òºù芜Bžt/œ©Å! zð\AÚ帬6Eî²ÈBÝUî·M ȭ†>ºùJë @%ÝcPœ@8©í‰)@D'±·Ò‰WmpÃk¡‘—W²\ ¬©VX…ÛH3GK¯¥Âýj8 б°6òí0J i€tº½ýțù¹,>qÝXxqÓtFuŸÙñ¦Þ»é™ cÍ3-¸1âÛÆ¤vT¶Û㘙¤˜4/Œ†Z&ñŽ/¦¸@f¥ÞB”¢æJ ôí0¥½ª‘pI{\ÕxûòÚAö·b«ÃHÕ5p¸æA:+\å²™*vý€/º\6?ÝK&ôI”„˜Ì¥D—f Îx±k¦·ß…¨q·Ó5’zs+‹W¥¢w&øò¢iWy{´¸üçZVë'3ÓVÔV¡´ …,ot%Ú˜¦‘a…ÞhÌM‚{ÉÁ íð³õ”pb•jpíxf–ëdA\Œ÷ÿ Õ?,ÄFÑ`„`8DSÿ~ômû{fù*ù?—”¤ñ¤_[l‚ÂNìkàQê ¬-tB.ìök¡½×F:¯Š¢Ò–n EµèX#­™ù¼×’Ú‚ñ‘ ÷HîF`L‚b_Ë2+6¹À޵ÙñYÅsQ“åòÀU7§Ê»–¬´"§Ö¥†t|l9tŠìy¢ÇS±þñöx²¥"ÿ@gzþ«CNH Ì7jvj’¯DcÏšhTþ¢§1±ui{xÅeùÁ|ø äó£-=ãS¾µæ9~ŠªºÁÕí’[ÃÝ ´mhž³Ør¯ú/G .GGˆåÑ‘,¥’¼ˆ6Æ.-`CcÝna\VõËFÕP’W](6ˆïñ³çe!ÔqTºù[_0—Ï––¥póžsôúMçõðο³¾a¿Û²jc ½|ÙiöZÃõ,ØàþtuG ›N×â…CRت˜çõœÍZdr.³= íÒ‘6/e•ê ˆð…ŸÁHÒÅ;¸0¯c|ÒèàaÍ£žŽ®ß9#sƒ›\JÃú…Ú/ýÁå¦,;Z<À=^Aó¼ÎuÒÆiJb÷=tvÛ>­óãã‹Ö›}’:ú¡uê‚þJ(gÉ,¿Úîí ì:âìäÂȽžï&Éš×Jf…\hœœ¼™]ž¿ÿ}X£.kçWÓ§XË«ùåc²û½Vý)0q·Â½ê7BM±BWº6‚.ËÃQ/víÎ8Sâïïm¼¾·+xaµxéRÖé<øQ˜FðŒ¢”L˜èŸñ5¥a€o±3ÏNfÏþ“Ûÿk endstream endobj 2777 0 obj << /Length 464 /Filter /FlateDecode >> stream xÚ…TÑnÓ0}ïWXyj5âØqBëv –®C«­š,â‚ÅêT޳‰Mü;qì”DKGêc_ß{Î=¾Ê»l¬â`)¢d;@#8¥L †3B@–ƒ/ã ˜øq·\[P{nÑ)¶çš«rò-ûðqT׊mâ.¹bºPþÛ’ëÔÜýŠbäm¶Yj@\ÿaï•-å‘yæ`a÷ApnAú9[_--Ö•ä=¦¨/B؆C ghv¢ƒê`×qß=ýÓ"f—ë$u{Éî~—¢"n ÌçKweÍd~Ç•ÍS&¶2¦‰@–çm^cËEr®¯n1¥¯o·$"ÑÖ‘zº©¤üžK=(ò{!K×¥$³Íò“Åoì‚Qý[ XóÃæý|~ÉebHZ¾áæv…ëß4uä=*´èžw5¹ÐÙ™0½ÛÍSC„1Œâ¨/­3c{ö‹7ú q­®g]7ÇÙo¼äÏ.ûC4^z‚•¨K‰Gþl¦êi°à¨òô4ì\£ç?Ê”Ðü‚iÖŒMQÕ½ˆœy'³:déö¥¸®”<¾Ô?Sâ¾ðÆ”`…ãîÓ)Dáø$ !Æ®äÓÄ'„ŒÃ(4 ²:J²Ñ_‹M+Õ endstream endobj 2781 0 obj << /Length 2756 /Filter /FlateDecode >> stream xÚYKsÛF¾ëW°| XN0oÀU9ÈZÛq6Nim9{ˆs€É‰5pÐZmþüvOÏ€€Iv.ļ§§ß|=|quöÃ+m\1©ŒX\]/2ɤÌVf¥]\m¿'—KÉ“¢í—+iuòæ·åW?ûy"eÆóV)Ë2¹X‰Œ¥§yç‡Lቫ7åÚuÃ4ÎY®µß.Ì’)ã<ìvΖ+¥Tr…»ÞÊuQÑLÎóñTc™v‘Ò¬b[VnÕëýznkXÆe¼nöû¢Þ‰_ð”åiÎýA¸°ÌXGÁoN3>¦ÜÒh)Ç£©×}_3g2QžIÄx†UÌæzNì•:ùɵ7åö¹Ñ<¥†Õ%}+wàìP´Å¾ «O*?þòòòyΙ˜;Œ Y¡ânõœ@+™gL¢À òTÑÐUM»ð4Mƒúõx”2X6]À~:e:[¥AÝfqµ‡é7eU-WBÛä¸ä H ^€u“ô;G¯–™Nš¶o‹šzèèÔi˜f¨lߺڵEß´Ôõ1Õi¿[â‚3§áA(i-SVL¥ZmŸ8ŠE“Og5‡¾l‚ŒÝMÙ¯—"Kv 'úf"§kƒÃF©1 #9KÑqE¯Ô•”2q_–ÂB€à’}GmtÀÙÓeœi;8Ϫž;× KaÌ]¥TIYÓFà9œJ{ʳç À\·‚6ÀË;*­‹Î‡z¶P'Ý‘Å%Èzªú1¯z‡ h*e”©jŠÛ¶Í>Êì5`ôü[ê¯5aYw=pbp¯¤Ú”íÜp9ä&»£ý©NpÉÿÐíŠÖýpþúÍ/î Š„¦Js9Äpk›[ätÈ!Ðó!èdš'e¾]ý](¢¥Ú.T®›#âà&Œªéë­Š…õ±m?¢†É^ž¥È§‹§–Ye:Íá&ç°œ47qš,³w¦áÝQ5(χöv…þÉU>"\Xϼ‡à÷Ø¡` ù"ޤQþÒõí}j€•0rëý¼ö\ -ˆãô€¾§úεa!º¾ëUIð=•+¦ïø³MïÆ'i?^7ùto{™ÜìJ8]îukvžÛ¦&šÕ ô}S‡î]ÔgîÛÖǾ7‘a$ÄHEòÂyèÆæâS–ó:ÅicÒ6Õ€aesf„ T%Ò"ˆ …)b…TÇfoTø‚Q¯•¯½a`X·Fch¶šD…ÞÑuÕE ‹^`© ì\­¯4T¬ÎàæçH³»1À:!Eöi‹CéÎ⺞Ā Þ„ø‹Õ/KÈ_Ê;ªã}×{ªÔÎm†ÈyaD[öŽŠÅ%ÃŽ}™t#½Âî¥GسR9@©U¿›ó]A©BÌ~æ  =Ü;óÜYác@¨³þêü¯%°#8¹W‡‚ óJR*…äõðö‚Ú §ƒ“f¡ººy"m 7Êí_ Ò?]<çêÊù7`ÃÀ¥Œáó´XGRÜÐde;wˆ{¬Þ=„§[²a¨åÏÒcÞ‹€sâ½ Sj ©Á Ô7¦¶yàQØK'į~Šo"ù‡Ëj"œê ñ•åŒ[>6g£$`Ï‹%3Èy€ýOž!è‘f€s3àn! DÃ÷‘óžCök¦Ü{ÀzÄ.™åt>mnNÁVš{÷0ÌP g¸o+3,Ø?ai9ˆ6æäj3G½çÌfÑkO¨Æ+pˆòŠÈÁõD´Ædr¨ zØ@ÈûoÀ®Íq îˆ|A)"Fl|…ŽOMÀ1šv„ÖÝI€€Õ›¢Ý<Æ€ÕÐRŸ“ˆüžP|@‹­^6,€P‡ `õŒÊpx0ZE•ÖuǪ§²Nè Ü8礦®o>¨ü‰2òd\¦wq‘æ<ûã¡Ló˜³ÅÓ^ýáØŸ^®NOG¨û/2x“Œ*ÚîÚ}Y›{®Å·Waña<]KòÁ9ÎýkÅçºÁÏMå6[·G´åèºs¡3}Ê}W’~z’cÔU5‡ýÄvEG#‚Â¼Š Ú”ìAN€C`Þmxƒ¢&ºRÛö‰}*8!øOsl×.Þ ÷R1i”ÖÞ½ÌN¢©„ʘÊ 8÷c€[áBoéáÁ×Q}pRµ†-62è#³Aáåêz{Q{ B8£+Ú˜Åc'váâK¿Øg°›”M)¤cBJ¦³Ö½E5Rñâ8ßM·…–«eHr‰O~ÊB×ÇÚ§kXÆb`nþqYÌtôeÛl¡u66³!,†™,àߺ!Oj‹up³·ï–àÚ¯«‹«•HS³J¥6©™'(t¬x¼Õ¿Áx. ùŒü¼Þç{qôÊú\Eð¿ýKŽn£3oñ j¸0Tô©NAþáô}¿.]½ħaco/,÷SS5ÛÛá:6wOe-\稿Bmë².æB†u‰$´P¡èý®‰uYTt3ƒ%ñA'ù·#»dÉëxÌx¾ Ú.$Rï×Mß—]Èä>Ô9Ún´ëåÎÇwW®CùÇé²ÀóÞurH$1gæF0aòSBy¾¸Ð ÎAÝs×»¡Å;'0 ŠÛnW¢È"^õPxSÛï}¨ñ†Â%J 9W¹®B nÁ}ƒ«ÀÀ“ø]¹•lÒ#¹»ŽžAÅgŒdB ŒvˆxñòݯÔàÝÁk½Ä+oMýa1{Zl>:€òJùuÁéêÝ«™ãb&êOMµ¥$È‚TÄ áçXýÚ ßæÁ2 `ÙMœÄÆ0ÉlB ¡ühÈk¸ëŠšÆK¾A ú«)zðß_á¸×¨T6±ˆÈRo ÃY&Íø“”+”$}þÿäø?ÄÙZ' endstream endobj 2786 0 obj << /Length 429 /Filter /FlateDecode >> stream xÚuRÁnÛ0 ½ç+¼› ,Š%Y²Ü[W´‡ Û¡0°Ã¶ƒê*±QÛ $eA°ŸeªÅR`0`?RO|¤?u›Ý“«h[µ¬èö£/*xdUŠM­h#𢛋ä{©9±å¶®1Sp IrÀ(æLÌòò 3ÿîþñ¦¾Þ'?+Y•¿ºÏ»ɯZÉ}ÞP^ëë>†7»ÝܯB´·~¡ý€2ÿuTKJêZ ®g¹Qkæ¹$fyNZÈè\¬ºŒj!°Ö†c¹åšØ~4Ót)·‚5äv)!Ý‚áã{)y›ÆÆÈ©d.œ“½óHyvãr@¸+£·[o'kBNDâÍíßÑÇßëCF%‚`ýhâdj“‰Ö¿ù{o)Úr±D(‚>¡ÏÕÛ&ÖVàÄ"˜@yá)ó4¦'¿CÄÃsÈç—KÏÞ-‡}Ý¢N€?fƒŸ9úôð„ˆÉÒJ —휫þ­–ÄÛpšâ‡ÕúëïÅuE…’…‚½r޶ÿ$º ¼®¨!†ŠÍ}·ù h£Ë’ endstream endobj 2790 0 obj << /Length 1557 /Filter /FlateDecode >> stream xÚݘ]sÚ8†ïû+¸Ä3EÑÑ·ö’lÓ m˜”ÙÙn/âZŒ¶Ùþù•°äØB¤²ÎÞ´´¶ì£Çï9ç=ê _œüÎE ¢LÖð®¥(¢Tµ$HRÙÞ¶Þ· …v𝒕¼ýGòax¹YF0‚p» ·:D"ªU±¢7¹™Næót1¶kÊ%HsNü¥Å’ëì.˳Ù([7oi¤ö^û‹šû Rš÷¿‡I‡3Ù~ƒL\”µÏæ77Kû“¶ÓÙmñãÒ]ë¡âßél™Í^&Æhût~¿X¯ÜƒqBTûaén4×îí¬g¨Ç„ùáQf ›P€²HÌ (îïyY<—Añº¿1Çc0Ãæ –Ÿ@\ˆVÒÊ¡O‚]^»ÿ§Óiö(ê}æ®ôæë|2ýl£Ÿ'D¶¿¼  \»Gº¯òùzᘸ¸¸Ë­g‹Îb|b.(\‹]”ÂEIƒ(OÓÑh’æ“àͯ<ìD±¶ûý.¦÷îíÁGèg«U?ÆHQáÑö„¡ºÍŸp£ä?—5þ"¶O ÄïÓ(N |¶ßv7[ܺön¾Ù¬ýDÙ?Àfÿ«Õâ·““¯_¿¢»t¹ú”­Ð]ÇÎ]Cÿ¢Oóå*7ïp[zç@¾1‰5Kë:¾Âç„ {ié"¹¼8ÄÐoxOó˜ð1.𘈒˜‚äž<•HÁŽ_M³Éò&élYþÑ•¨#)bXù`2[øj§SS APL%!T.kÛ<@¦\©æˆs|ùß}šÃë5ƒ*¤ÚU·Dðù'µÏçxlöOÆ6G¨áNÒäUÄ'p¤Ë<òÔ¢ðŽÖSLëáõ¡ƒÌì¥ã<¢ Î7kVÅù:ó¿Œa a(sæ”G©kÓoI@]P£îAP„•¢°4EÑôð:aÀÜöëÔtáòegçýÁÅëHLÌTÐÇ­ŸÎ§Ó´Hµyž®&ó™‹d`›Û÷&ÏÖà€%RLNü¯-ÞÛœgò1^I›r†JW­Eµ+ b¨ ¼÷xí¢êÎ6…{dÿg_ÎÛi¬Ÿe|ÌÁÏ| `¶ñèXnšù„éºu•5‘¡æ¼géöÏ®CzñÈšxXéZβQz¿ˆ)ÇØ"MŽ€VãÄvš n¶ KKA¢â‰Z PuõÔ<µÓZ…ò¡ê­—Ÿ×ÓÉ(ŠÈ<ýqß?%¹„nš\Tð'²K"&·ŠÛƒ7ĽÔüw¥ƒWüx%ðeî:[DE$I^º ¢Ïu ©ÚX`3wKB<‚èªßïö®®»Ö< __½ ÈÙº˜AnxDPÄl”¥ª.w £å NA4•×u+«ŽÄt.%!)VY™};ÑkL½ss}0@+öP_×–Ɔ®²<*?‚(†g•_³f™]5,,òo¥snÀa0ö¼"J…¤Ü*üòYDùc¦DpD”x†žÐÏ,ÖÕ*±l#@9¢B”¨¦D¡Þ4IM¦è)]÷Ë31 !ªÏ’²úµôy”¦|W¾CxrŒî¬ÖfM\š…‰ì‡gpŸ&U¹vºØc[É!V6®ˆŒÖº¯â ¥Dð/GÈ’‘í“û<Ætã‚'XUÍÔJ‰°Ï|ü¿XÉÆ¬T¬ÓÝâò@¤°› .»gç{àÜe“»l¶,†«Y6¹÷LâYê˜!Z Ý§”lZÊ‚ÞPu.DbXÆ{ƒi̘ó§zñ“ÅÕf(ïöýlØ`t?ór­æ³BPúS‹_ó£†ëS­M`ÚC˜Ïl?TþÔ¼»9YÏòe ‘É1ÉàçöÚXvÁ Zë Æ“:Â÷cä¼»Óì[:»Ýá7R°Ï‰,<Ç@O¹j<Ð ²»*ã<·œqNÞ—–Þ÷H|vTø¨,¬QDyå 7¯krç¤O¹é T‡“¿¢Àžõ¬1„Ä…®A’%¤Íj0ek°Ë;Òª³Õ±B6ä6ùîå\µûn¾8¾ø’í¦ endstream endobj 2721 0 obj << /Type /ObjStm /N 100 /First 982 /Length 1558 /Filter /FlateDecode >> stream xÚÅXMo7 ½ï¯Ð±=D+J")F€| m ’ >ØÉ&Ýñ¶´ÿ¾²“ÌxÇšxÇE/6gæIŸ(j£’ºà¢Æì(F3ð'W+»$ö?»¢£PŠËI`äè²¶1ÉqÈf'dƒSp˜p…7ê”ÉÞDW2Û¨ì*3’«%›a¯©ˆ`q›@lí«:J±š…wI’}ňTmþŒ™$´¯ø£ÔFXö'˜-m>|-$°l¾šìüÆÀåÚ%U‹ÉÖ“o1J‚{—©á$#ZXX³š…Y¸¶…c„D<*üFáj–Ñ¢¶>8Хŋa±^ÍHåhq˜Ul}˜9…h+.Q2œK1›_ °ÔüJt)‘ù%)åæW`©ù5\.mòÇ¥¬`ed2Z 8áæ­ÂªæÍ¾jµåÚÌ5ZŠ÷l”ÀRXÅ|À[&j>ð5Š… F†KÕ¾*Ô‘ÅF(”ÃM(J.KSŠ ¬–Å,ZÔ,v¹DKÁ|¥X”6s­mÍ"‹‚80 DЇjœÂÛ#ÆBŒ$ñŠv¶¬â;F˜f©ã¬¶¤‚9´À±¶YðN´šÌ¢dü!n¢¡`2 +(ÄfÁo1éQÀˆbŒR AØÐÄÕø#ÐɵØ(àƒR‚Å6*–`ñÔ$!ÏB8®ƒU6RÔl>„/!ÀF$Sg$ŒH,«££ÕúùîìÒ¹õsøC0Á½„mò£¨×OmÊô囨ÒÓç'8)Ÿq&$Çž=Z­_œïÞ¾Ú\º7nýâÙs·~½ùûÒ¯ðÉ<¿þç¯ >œ|جÖO±ŠÍÙå… ¶ñ«õËÍÅîÓùÛÍÅUiï~Ù¼Ûž<ÙýíÞ˜pç!)ò¥ÃßÉ9&û¼áŸí0雫ze˺á½VëWŸN/ÛóÏÛ³?Wë'»ów›ó+'áØ–òA àø-ÝÁ‡ŒPSñZMê!0à7"_¹õ»×;·~æ¾;Ýž’è÷ÆÆµßgîM«¢WŒm/t¨@*8î X½Té!B±ƒÈ*rü‚øšwlôªÙìià~2]'2­ezvéû5ìo Õö§, 4¥ý@q–- 4Å9’ª¯)u©Ÿ«Î5ÔËWr`ƒ6¬ß\YZQäë§b%|1õ:A=/§^f©"r!Ÿ”¨pHáíDÓq;™øFvð¦ò…Ûß~=ýÊœ­é§­#Ê}â×Ogi"õn Èi/9Ì%`„H¢¾$î!rôÌeª>HUk?rœ¨–Ã]1¬ƒ5œË>…Y¢px"f^~"’oñUßÚ˜|µ»¨ÏA&ÄóÍû¼Ý=ü}{q¹ûp~òñãöìÃÞ™u6ÃCZ#Ÿ§J×h· 6Hëð8»¹¿&s£Øe#ßÓFḟe‹7 Ó#š}whä}ŠÜADb4H2SíF›ÄzùLSõíÖšxðv≓Ór¢g{º1"‹ÇéÔAàæCì"rñ”§zºÑ‰;ýíÔŽ¶À=4=BŸj] eL‡™Ä°½öÐì†Ír­Æcs/›ÅÞØqm:ñ pÝ óIvÔ›]#'w³é}qŸŒ$4áîÑmQv™¬;×=L¹¤½ÛY ‹›‡³(6sÔp²+'Ý‹¸Qt“Ûê8É®¦ÆA^pdnR5¤˜šßj½O7QÖGÔ@…]˜ ¬ƒ¤‡ÐâÂYh6 Ǧڗí~«ÊÙ¦šŠoáÁW£ñ«ÿ4ކñ endstream endobj 2799 0 obj << /Length 1359 /Filter /FlateDecode >> stream xÚåšYoÛFÇßý)ôHÕxgfÏGù*’ªq‘ }qýàÀ*\À±ŠT ÚæËw–—HjI1‰QXÊ‹“{ÌoŽýsä³åÉéšI€`ÉN–¿M¼¦‰Ó»Éò~r“ÝXu;í²ó‹«éŒYgçëÇÇ»wÓ¹lýánóûúé»âÂâ;gó»ÇÍúiõ4½]¾>½2ØX­vf¢ŠÙWa|v÷ÅÍ­íÖ·ÊZsöÓÔ|öÏŸP,ùvõ±ÉÜiXe«¡.¤fW@Z7¦[W†”òÅÜ¿*£ä[w¬.{$ÐÚø|ÑÉŒJsfè!PE ¿%bˆÂÈô Jª0LŒ^±3t4Cr# .Í@ÀPeVvðá{Þ«ñžGTvÀó¨€-ñ çuIìBívV{¯úl½Ù¤˜:ègc¶Xm6IhbC¨†žäÔô˜Mjñ‡Õ³Õß§òG¥ÈVØŒ•C›‹í—Û5¾»×S¹íc2ââZÿ;<7^Ø •SR¤KxŽAs7æìm~UÉ.¢±j‚©P@Ž&–eïc.äpM\SÂ5%\]ÁõI¸ÍåÈhp¶³\Á;ôðn w<ûöðܦíS$}þ©ÏXN*®ku{Ò ÷l…”ØÝJ\‘½Â–ÇLí1S{LÇ3B«6S(+õ–B9éuÇô–ÃØ GÓFhAo¤=ôþà'v´œ‹â„[ø\Ÿ“ ¾:§r“ÚôÂ…žñ£CÛ‡•O°³Ê‹h =§&ôòUû0zѱÕ,rF'Bèw0Fvý$•“óJ(ÖB)¿Àméð8)âXŠÊÆ¿Ÿ¢W$@©$Å "Q[ۗǶƒNRrˆ›< ‰jj¥p§þ9þƃpGÊt ºÈÝ Ÿ>¦à cƒœâæE>;|Gô°c´ƒMtÚb³Ç™³<úØ ’³<Ñ‚ösö˜ž9<=yªkrCÕææ@“ÎÙ—ù¸±cŽŽ:Ž@›Ðìì!vÅW8,sº”9¥5^5”E?d Ž5¨@‘¥!kvêõb1?»~;Ÿz-§3Ì^]¿)ö_ê+C§˜}‰­dä³~ŽNóbw¸ÙÈF’É€(‡º"9¥ÇKXݪHeë/çÈšÀêXäT4eΊ¤]¶eJI–ëìJÖίÎ/;Ñ¡ŠÍú¡nÚ¿_çwÜ'{ÐRÝW´ /ÿúPÖõV™çìu ©õ ª)ÎmJ_Èç˜:D}è-ñ’vXqÝQò –»ðôK…WcKC`÷¼¸-ÈÀ n[pR<„T˜y‰À*X1o÷(±Žœ<6y ‘s \C…©¼Ü&·íØ{ß験F©)\ôˆk²Ô©›eͤ-ðМöon‚ˆScÚ›öAk¸ø.H0¶†ç~! dÙݾX®ÚåRÁhlOtîpÏúRwÖmç ‹O»kxpŽ%®<)BùxŒ?¿0×,¼YíÝ@*tí—Y8’p“…­1©³«l±*-¯ƒ•Ã'p%tDÌ›D]éHƒí/©ùõÕã*© ¬ßšg9Æd퇨=š'Y¡`Z\¨q¦G•¤uÎt’€ÓÁú¡Ð 5«©g!#/óŸûSé…ïë»Oþ¨ì€5?·²e`¤ú±Ã±¬cK¨„ú<7e1ÒÝk‡I“ϰGÀĨD­’ìïh…PiôeµA°$¹…E³ÛíJÚ°H=)Å¢agñ”âP,ü©lAiW,û)Ž<¹\žü™&yÓ endstream endobj 2803 0 obj << /Length 1112 /Filter /FlateDecode >> stream xÚíYMsÚH½ûWp©0™îžÏ£É:›u¹ìË-ÉA޵ Uظ@d+•?¿=ŒBH{I%líÅÒhºßëî7=ãáøìÕÐ=/¼AÓÿÕsNö¬2Â’íïzï“÷?öZÙd,ú"•œ¯®”¼žM§ém€.™ÍÓ|2{xÙ(EÉ©%J|…—q,H@¡É¡è_ödo^Hp¥ *lœ÷%ã«ó? 7WWçÛQ|üÇÍuñ¸?€d6íC²ë@xÿ{éiz̽z£¡5ÐŽXÏr¬]’NE¼Å"-‡ø®Ó|9Ï¢‰×³ûû>;°|(¾&ªòi™òkl˜^ ‹®2}ð^Šs¾½(<ì;µF¤6ˆì"U ¢6Dœœ^á±9aˆÿ”‘ÑBz¬#2§”ýÍ0F]´$t¦=%˜ï¾„²þ¶^vbn²¯MU®•@·.óßœn2!*ªU:‹¢”°UìX-värpª^ì\€Þv»;Õ­!g7ÐxÙ"èþ”c}•…»Î¿ÅçÙCº<þTÉ‹=4˜n‚R²š¯îG± +ýÙMj#@=Ÿ Ë·ïD›L ¨„µy>¿±].ÑÞ·7ã¼§Q¸«Ú¼Ô£÷ݪmOŒØæY{6ˆuýÒÎV䄈UˆÈò*ønˆþ¸[«#©Ä³Gö@+X ²ÚüÄbç=סÅÚ¶wh[žž›YÕª»ÖN‰ÔæäQBrÅí?¦Ÿ³Eñ8].J ±Ûš˜.ó/³yüj:Yä’ÁÕæ¢$Ÿåé´bããÔçå<[”±Šoóô6¬Æ«†½x³XÞÞOò<»+ç‹×Ðä[nò'Ÿ C£ìë$û;Þ—6_lbé‰vb‰{cYî^/?ME¹ÇiÜÓX¡Ìzÿ4tFµíiô“ö4¼UÒ®¶<¢4,DˆÝ%C'HóšáÑ*™:*0X”Ò<ñ¨ p­Éì‘'õ?× \«'sí„d‘ìæZŸ ×Í+‚ãÖO›Î¾Ì-·ôR)èFkO¹Ž~Ì‘=ìÈ«²w2àö–Û÷€–CÆîv¼•b'…—ÿþÀœªE’*Л9 Xñ&ð¾[H‚Þ@;nB|œí{t•‹s|Ÿž]ŒÏþ¹®Zz endstream endobj 2792 0 obj << /Type /ObjStm /N 100 /First 970 /Length 1180 /Filter /FlateDecode >> stream xÚ­—ÏŽG Æïóõ5þ_.iÅ!A(—HˆpC!.l‰¼}>ÏagÁ+.=ÖôÏ.—íúº›E|Ð`Qjøµ±ðë1˜Fè`u Xdk Œ´!CVæ¨Û²¶ ]r€ÃVÅÙ2œ+ÎÞà q”bøÚ0XGpEa«Œ="«®±¸`x,+Øe¬ÔŒ=’ Žé/™§ŽÍoÛÙˆÆÎUþ&m\sà†3%nXí%8°jÀ^^Ö.¨ô ¶ØU™ò¸Ý[-‘çÄËcŸ³ìØ"’€‡óy!x¸HÀnü öJßµ.Ôë„ê(¬¬‚ÃJlƒ«¶@à–‚Žâs†ŒK¢àÅm¥‡àî\å}…u…p 6BQè®p¹Eõk"˪NdžunõÂ(Hõš—µ°ÆÂŽD KÁ©fYH «B,Œ’˜ÕØ*\Ä©<QÜÊ£¶ê«<®c$D‰jJ¢o+kûð]\›Æfd<Ò´Æk$E’ÏÅAViå±Pج…Ê.»B%¶…™´, -¡â("L¥–µaU±7’Ä€¢Gå¦RÚ•ªÐFªU¡«V…6vŽ¦Û¨‘x£$jZñ0j«ZÙP'¯ÃΫt¤e­jJ¢ú ¡[¨Ÿ‚jTéK L”Èj™®®ÇÇã…Ti<Ç'oo~CÉb⸼<?}¼_VyþÏ_'Üxõæt8þŠOïn>Ô ýÇg§×¿}úp{´Ïÿý~úóí«_®?Ž„?|ûŒ}ÏÜ/±Þ«÷R<Ÿù¯7 øoÃ8;s;¿lCgtu„¬ûr— ôwDjî±x’·„æÜéöRt„çš8Ò{Òj § ‰îå)Ú¶÷„ðvDÒk‰à µé“iÔ¢Ó²%Ȧ·™jú “Ž€ÄàYÐ%1Ô¥1Ù„‹Ž€®Oj3•%“ÛLÅuJ›):?ñ|éö©Ñ¥—f-½ti fPK@0£Íôû‚ùµH~-Œwó'ˆäþ†H®É|P$óA‘ÌE2É|P$óA‘¼C8X[B1ÀÜŒÞQµÖ6S¼¥Mk3uÇ·™:?Ø;‚1À»%¼:Âóâ-˜m ³Im¦ø”˜ÔfŠ7áÉm¦Š‡—Ü{ðÜ!"§jKØžÆ-¡4mw„ìœvïÁs‡X{:µDÐôl œãˆ–€àãÓ¦!ðn>cµÄ7E2ÉüI"ù…1Iï cÿ¨0Ö7O/ŒÄ7„ñ‚€0.Þ Û4 x÷Þ/.^“©‹a8~ø¦ë?Šì?êjŽ—ImÍ­žgçó.¡xž¥u«àuf[su í§šÿ Jèë endstream endobj 2808 0 obj << /Length 1576 /Filter /FlateDecode >> stream xÚå™[S7Çßó)öq©ÝõÒ4!À·My0àg›1&L¾|VÚ‹vµ¶1mšP`Yëv~úŸ‹äÃñ³/Af–XÅT6þ33œpn2-Ñ\gãëì}þÀ^ †Rè|4Bþvù»Ás‘–óùär0d&_®ðõd=[.~òŸýFÜ_ž¿¹™\ °ÁÍd½úâ&‹ÁÅøõ‹—ƒ±Ä€Í¨ŸsºÆÎÛΉo­’1‚ÿ‡¦8<ýêèÌ7å¼Ñ”+¢¤)ÛR– €©ùUSÞŒ?¨¤ŒÅ¿>J¡ŠA±¶lÈ%Ôˆl_Û’£ß?µ³›Óù\Ä[d˜ü|ú9<O×k’Àj€­°•)®š€Qm®Œ!½Mh%áÌÚ€–ãæ0ÉZS¡…>´§ÇLJ§çÃóñ/§'~؈x›çï‚#ÇÙw¿¾8*IâLKB¥|qx€P+¢x = ÑF*cžÌóôü8.òãÅRüàøC¤Äƒ~%\vä˾Cùî3‰2íõÚF(!’¦§–öúZšüÉ`ã;c³´r#\Û,ÅEñ9%Ö¸¸B3È€ZÂ4Ë7„ ž?aÓÑÛwÁekW—ùØÁîÎúÜý¡œ›káŠа¢µl&u7=×ÆÝ‹Í`E ÆsG\Øí ¸Òâ´˜U[æ·z{~\H.öºš¨!8h¦04PË|ó¾ÍÅ·e¸f‚ht…¶KÈ5öí†4ÄV“*kS³`"ãíô'Ì&GÁ¤ŠØJ–Vf»aYýª µkU( ›Ñ2|›¬*j´ú©”¹;Gnàj35VlIxæ©P“;ç;µEk‚™mùÎVùãkœï$ÆS-l”ïT3߉ª´•}¹N…ÒV&JÛþtW-…K…qÇK)¸+ÚŸîêîÚw.vBÕÉÎ/²Œ *ßšøGŒ§Ñ @õ–•­ c¬³7%pL|L|Ð~ EŸ"øÒf‰üx¹øà?™Ü¯oPîÅó|v·öOC¯—‰3þ¯bfë™ï"òÛÕ÷OçWÓ»;|¹1—rÚ¯a5‘q™$Ò²áý%’—Ø_6 Z‰÷V»£j¸íhd”B6[eÂ9Q*šcêä¹?’‰ËèR´§v x:D¶U£5ÏVy\—Ú,$¢„&<÷£ŒÝ>L?Ý–è1ì2uÑsá¬\—¯ž§Îgµ}Æ.ѦÓcpÇ©„#¦]‘M« }±:ù>Ó[®Ñðïäœúœ¿óÑ6–Ž€Á‘Au4•˜¸»'zΟþ­‰ÚùÖ¤åÖÝ[·&ÕØNT4²«Mñß"Vûë5æN†h.Z§¶8¤?ßL:OÁ`µ#EסW=!ƒ-ž§¨Ü²Ãº2¸{ûò#Y‹qRi0[¶×kݸÁÌùrÉ÷¤@6Ù6t4t9~5:Üêy€z0™}L!”MüqçxWuùC<`îžz®D$Qªy'"v½A ¦¾ð‘˜áA‚³8Ó¢Þ­/b“‘X@÷å~xOK¼×«Ùd1KVhþ§=Rºô_iÔ`EÊ:Ö±`Ýøt|4p™¦[¡)øIUý\Zã‹Ì+çy7ÓÏÉÒG`r³FGç'~Òóémq´Y®ÖþÅɲ Øfxöjxt6t†Œ——ˆ®òÒÑŽ;#ßúf”²úΧñ½ÇýâöþrŽöÎ µÞàS!Ök|¨ÐiEêNa$x ùël/–G%Èù廩üãd•¢¨Qüìäþjcõ©¹ëxx.Ö¦v<¬ûúO¶O5¾ãki”vES”¨@Éí ÞT n?LV×IF•¦¡§ÝîkØ®ˆÀð&"Ã"DxÔ¤¬=„|£Ò+_W¬ÓU)l¿?©ßw’ÀjZWG> stream xÚí™Yo7Çßó)ô¸"†Ã›’ìœJeØ äxpâMlT– iÓ|ù—äž\[>ÐE_¢d¹œáþ8óŸ!3Y-?¦ð>¾8¿Þ¦0*E8÷ÇXÅWág–ïv)~ÒkãÔ‰â:e^¢ú¨?PÐà§jüVÎõþËÒA¤Šå”ÍM:£P>B‡â¶c–»5ïpƒ“ÅPK"dÙ§Ød›‚Фn'…p¨CHE¨ËŽkÿZØ Ùí¦q@P¸¨F*í¶ý£ÿ‹T_À½2¨nà¾T·q”ì.SÔò\dYÏ ÝŸAÂ*b4of¢–R‘Ê rCíÉ ‡¥ hC´|Ü^¾pÛ×;†mŸ‰V€ÒT¾hF¶ÛzÓjëM-7Pƒ4aÖ”•…R4Ò©, ê1æf³ãp$¿£½i–RB$%ÑögO<¸ã2·n½}Á-a¦Ô #%Ræý U‡Ž»‚ Uìbz+"¹m S Z<ŒR7ʾbý´ëXq "[]°åûí.ß$Ãõp°ð‡Ð#Í[–Õä¹¾Rr4oÊó§ÿ¨6D Çø™£8O^0á@ÅðmŒÎÍn¿]'â¬*\Mïï&ºI ЉP‘)p@Фÿ´¶„ÆÓàëñÑQx24"‹—KáëÞ®]Ô|¿ÂYþÁs'ùfu¾ºÈÿ kš‡I“«Ü™ÖYÑ@,ÃèY05Éw—¿9kyðÞ,÷»Ëð2š->©L¯Zž8×ñ‚ïk~õ5_m¿8ƒ—«üê"ß´nE3ä{nÝ¥cMJ¦É_,x­}ªÙå›Ä- v÷XæÀ¢'Öèxè< 7X…O½lðìÈ}‚WèbÜ?}qêÏß´vU7$»vëz½]&u…)ìÙ#ÔÃZFxa¨¿0ìÁXô\àSè0GQÏììl~Kiû5Fðæ|ƒÊýñG¯WßRä¨" ôù>ÿסûŽ Ðffš÷ù´~Ÿo%Ýí¸t”‹’Æúz™ÿH|<ž»ñˆsÿ¨ ‹Š½¾"{/ œø›è ïmåTK-8Ox&Ó`]mÆ.„1ïñ§·Å$õÆ~º™OŽOþÈ{=_ endstream endobj 2814 0 obj << /Length 223 /Filter /FlateDecode >> stream xÚmбJÄ@à )¦ÙGÈ<›@¯;8O0ÅVb¥–'Zo-r2Epîß9DLH>vwæŸØ_]o¤•OŒÒ÷òÚñ‘c+ùÆ2¼¼ónàð(±åp‡]ÃA>?¾Þ8ìîo¤ã°—§NÚgöBž—êŠw¥ª#Q &"f"c5¾/¸…’<¨g´Ž9î‡ê¶e„³I©Çgx£1¶FÒ¥*”|VaúCý‹òJ¥Ï} ‚r{uÉÔјÃÎÀ/XÊç„Ä”«'òkNãÛø Ê´* endstream endobj 2815 0 obj << /Length 209 /Filter /FlateDecode >> stream xÚ•=Â0 …]1TòÒ#Ô' ­T˜*•"Ñ &ÄŒ ˜Û£õ(=BÇQŒ“ò33ä“lçÙïÍô4›SB™<½ ­éœâ u*uâJ78]±¨PíI§¨ÖÒEUmèq^PÛ%I·¤ƒHŽX•Ps0aî"æ g6Ìl!² CÏèÍ.°3sùl ¡H{Çzd÷#lÿ¤¨Øm¸‘_Ê­‰Ð!·Ž17¡s5DÖ;4Þ­ñΟ¢÷‰:Ÿ®õIÁ¥6¿¸ªp‡/Õ@ƒb endstream endobj 2816 0 obj << /Length 220 /Filter /FlateDecode >> stream xÚ•=jÃ@…G¨0Lã#dNà•К$Õ‚-CTì*EH•¤La×ÒÑö({•*„&o“ÞÅ~0oßÛúÍã“T²ÅóÏâ½|Õ|fß ®¬´Áçï:voâv/è²ë^å÷rýf·;î¥f×Ê{-Õw­õ#•º€kÕ(¨&"U©' UgZ‹­¨‚)(=(šC˜±0„ Ë1ØI4E0ý3ÙÑÝŒf#d…>™&8ñ4ÃbúðPc¡ÃZg8Ye‡ef‘=SöO½e¹¥CŒH6Fj2=>t|â?Ö¾²÷ endstream endobj 2817 0 obj << /Length 290 /Filter /FlateDecode >> stream xÚ½JÄ@Ç'¤X˜&oàÎ h/Ñëç ¦´²+µ´P´Þ> stream xÚ35Ñ3·P0P°b 3#…C®B.c˜ˆ ’HÎåròäÒW0¶àÒ÷Šré{ú*”•¦ré;8+ré»(D*Äryº(00ÿa``àÿ#äÿ7  °:R€ý ¶úÿ@Sðö ‚q   3þÿ:èÿŸÿ¸°,X—«'W :^‡ð endstream endobj 2819 0 obj << /Length 131 /Filter /FlateDecode >> stream xÚ35Ñ3·P0P0bK3C…C®B.# ßÄI$çr9yré‡+˜qé{E¹ô=}JŠJS¹ôœ€|…hCƒX.Oûÿÿêÿÿ?ÀÀð/ Qc&b#œ†Ãÿÿ 0†ˆø QQÏåêÉÈ÷ªÆ endstream endobj 2820 0 obj << /Length 182 /Filter /FlateDecode >> stream xÚÅ= Â@…×J˜Kd/ ›@¢vÁ-­,ÄJ--­7Þ,bá5r„-Ô<'‹"Ø:óÍÏ›Iân CÙ‰8$=ÇrÑŽ8 Ù¹ô“Õ–2MjÎRcn“ÒyØ7¤²éPF¤r¹`å’t.M‹¶p¨‚»À ÖÔà @oå'ŒGÕÆ.e´P1xµ Þà{Åœ€ø7 N°i \àšG®Í»¿á•¯=išÑ¡†Ò™ endstream endobj 2821 0 obj << /Length 178 /Filter /FlateDecode >> stream xÚÅÏ1 Â@бÆ#dNà&°‹vÁ-­,ÄJ--"Z'àÅ,,½BŽ2EÈ8ÉÆNlÝ)|f`¿Ñ“éŒÂ~Œ!­éa†F÷‰öΘXT[2ÕRRTvE×Ëí„*YÏ)B•Ò.¢p6¥˜‹ ÈÙq Àüd.„³䕞êCÞQCì‘ÔåÐBÐÑxjwTžòîÈçGÒEªÜ¥„y07¿6‡;\XÜàYßÃ# endstream endobj 2822 0 obj << /Length 169 /Filter /FlateDecode >> stream xڭα Â@ à8 y‰æ ¼VOì\+xƒ “ƒ8©£ƒ¢óõÑÎ7é#t¬P.æAEp2ò'CÆz0É)¥‘ôxHZÓ>Ãê¥a ‹Ý ƒjM:G5—•YÐå|= *–SÊP•´É(Ý¢)ÉrÖ1·}nÄ„;Ѳ9xçϲQH˜o^ô½` Xˆ.ZEᥳû²ý£áà —.ZÿÔ=ïqfp…?}‘\ endstream endobj 2823 0 obj << /Length 162 /Filter /FlateDecode >> stream xÚ35Ñ3·P0CSS…C®B.S°ˆ „JÎåròäÒW05áÒ÷Šré{ú*”•¦ré;8+ré»(D*Äryº(Øÿo`þÿƒ¡þÿöÿþÿ?ÀO€‚ª´ÿ€H1ü?ÀÀ?Ø)yU¢>@\  Èó@ðFÙ£Pòÿÿ¿Rìÿÿ÷U2þÿÀþÿ—«'W ·²¨ endstream endobj 2824 0 obj << /Length 114 /Filter /FlateDecode >> stream xÚ35Ñ3·P0P0S02U0±T06UH1ä*ä21 (Be’s¹œ<¹ôÃLŒ¸ô=€Â\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. òÿÿÿÿÇP$ÿ7@Hñÿ&‰¬¢‹ËÕ“+ {°E( endstream endobj 2845 0 obj << /Length 185 /Filter /FlateDecode >> stream xÚ}ϱ‚0Ð’[üîZ„‘1‘ÁD'㤎˧õSøØH žW‹›ëK¯mîÚT¡Â˜g’ašá1‚ $6W6µ‹ÃŠ ä“ä’wAV+¼]ï'ÅzŽÈwª=T% ¡àA ãQûGŸz§nëlx|ÛYÃŽœæ ÕÓjcŸû+Í :wé±-+B+ÑGŸí' ØQ¯Ð\ qjh2ìéû&,*ØÀ {´k endstream endobj 2846 0 obj << /Length 159 /Filter /FlateDecode >> stream xÚ35P0P0b S3…C®B.S( ’HÎåròäÒW01åÒ÷Šré{ú*”•¦ré;8+ré»(D*Äryº(Øÿ‚õ òÁ$D¬òó?{Iù ’HÚ7€ÈúØHCH!q™³b#”dÿ"ùJ‚}ý?þã !²`•¸\=¹¹÷>È endstream endobj 2847 0 obj << /Length 147 /Filter /FlateDecode >> stream xÚ35P0P0bsS3…C®B.ßÄ1’s¹œ<¹ôÃLŒ¹ô=€¢\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. õÿàˆøÿ? Vù€ùƒ=‰¤üÉÀ'ëÁäÿl$Ð’H\æÀla Œ¬ÿÿHþÿÿLþÃAþ«ärõä äôÔ¨“ endstream endobj 2848 0 obj << /Length 111 /Filter /FlateDecode >> stream xÚ35P0P0bsS3…C®B.ßÄ1’s¹œ<¹ôÃLŒ¹ô=€¢\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. õÿÑÿÿ"ˆJö? ´Bÿÿÿ'‰¤ "5|¸\=¹¹~”Èž endstream endobj 2849 0 obj << /Length 108 /Filter /FlateDecode >> stream xÚ35P0P°b#S3…C®B.cc( ’HÎåròäÒW06æÒ÷Šré{ú*”•¦ré;8+ré»(D*Äryº(ÔÿÿÿŸˆÿ7à$ÀJø0 ‚Xÿr¹zrrÜ_}ù endstream endobj 2850 0 obj << /Length 163 /Filter /FlateDecode >> stream xÚ35P0P0SÐ5T01U05SH1ä*ä2¶P ›šCd’s¹œ<¹ôÃŒ-¸ô=€Â\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. Ìÿÿ``ÿÿÿˆøƒ…øQÂÀøŸaH2 ÂDÔƒˆÿ `‚F|ÿÇðÿÿÿ õ ÿÙƒügòŸüÿÿ@Þ=Ô2Éþ—«'W ³Èpœ endstream endobj 2851 0 obj << /Length 122 /Filter /FlateDecode >> stream xÚ35P0P0bsS3…C®B.ßÄ1’s¹œ<¹ôÃLŒ¹ô=€¢\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. õÿÿ000üÿÿ QÉ bARþˆ´@*Yÿü'‚«<ÀåêÉÈ%ΈРendstream endobj 2852 0 obj << /Length 178 /Filter /FlateDecode >> stream xÚ35P0P0b S3…C®B.S( ’HÎåròäÒW01åÒ÷Šré{ú*”•¦ré;8+ré»(D*Äryº(Ôÿ``øÿáÿ?æÿ? ävt²ÿÿzùDÂÑy4òýûý¨äóõö¨äãÿ°’ÿþA#üÿNÖ@'í “ò@$ˆd` Œ¬ÿÃÀˆ>8HˆJ.WO®@.UÁ endstream endobj 2853 0 obj << /Length 183 /Filter /FlateDecode >> stream xÚeб Â@ à+…,>Bó×ÒVÇB­à ‚N⤎ŠÎ§oVߤ¾AÅÁ Õx‡!7ä#’†bl*b:ÀM{Hlm´Íz¹¹À$91SjŠÇÃi 2Ÿ0Yà2Âpª@ÝŠ€J"‘QÕyv,šJ³éSéµÂ§Šû¬¹†{o¹õÇQ;f—¿Á•Û¿qÍmfïÅõÞ\AŽæ9š¬æ?3Ç Ólú€±‚9|õPÁt endstream endobj 2854 0 obj << /Length 169 /Filter /FlateDecode >> stream xÚ35P0P0UÐ5T01U05WH1ä*ä2¶T [@d’s¹œ<¹ôÃŒ-¹ô=€Â\úž¾ %E¥©\úNÎ †\ú. ц ±\ž. öÿ00ÿÿÿ¿HÀ„=ø êÿ0Ôÿ©ÿÀ ÿ§þÿŸú ìâ?ø!˜pˆ@¸âp°@žAó Âçà€ 8p¸\=¹¹5:¸ endstream endobj 2855 0 obj << /Length 187 /Filter /FlateDecode >> stream xڭн Â@ ð!/aÞàZû±Ô Þ èä Nêè èÜ>šÒGpìPs X‡ûÁ%!î²#œñIsÌr<Æp4ÁPåkhÎPx°[L°K®‚õ+¼]ï'°ÅzŽ1Øw1F{ð%:¢Î˜ŠˆjÃP#¶b'öÒ%ãÄqo¦T³qDÖ¨•Ú ºüœ¯†mºYSB¢¦¿íÅNlÅF¬ƒü¢°ç:ÞþçɆ¤ojW'aáa/"¿¤ endstream endobj 2856 0 obj << /Length 207 /Filter /FlateDecode >> stream xڕб Â0ЈCà–~‚÷’m µ‚ÄIÓOë§\»Ù!p&¥5„7Ü]îŽÄ!†8Áq„qˆq‚Ç.0MÐ…ã™ÏΠ¶8M@-mT±ÂÛõ~•­çÊqa¸‡"GMT AD kXò–lÅÖBs‘4VèÖ9êç/×Wößr7îì§ðDÉÓ%o"y«Îò«º#¼ºîLÿõÑ:Ÿ¦¯¦*}»Íˆ¼­5øØX%;¤Z»Ÿª„=©€Ex=¶À` endstream endobj 2857 0 obj << /Length 138 /Filter /FlateDecode >> stream xÚ35P0P0b S3…C®B.S( ’HÎåròäÒW01åÒ÷Šré{ú*”•¦ré;8+ré»(D*Äryº(Øÿ‚õ òÇbÈûü$õ öØ?0I†!IòÿÿßÀÀ ÿÿÿ Àÿÿ°‘Y°J.WO®@.™7 endstream endobj 2858 0 obj << /Length 190 /Filter /FlateDecode >> stream xÚ}Î1 Â0à”…·ô}´Ò¨[¡V°ƒ “ƒ8©£ƒ¢sz´¥GȘ!ö™èVƒðø†ÿÿ‡'rÌqŠ“ËŠž ¸A)ÐÇbþmNW¨[à{,𵋷|ÜŸàõv‰ðæGh”Ô¥¤‰TFæ¿ßebYD,XL,~îSùÙ¥–1§©2§T™YõUTKg¦¥iÈ™êB&/b#ÉÓ4"”‘ +µ×?«vð[Ø € endstream endobj 2859 0 obj << /Length 200 /Filter /FlateDecode >> stream xÚMÏ;‚@Ð!$Óp„,$P“ &R˜hea¬ÔÒB£õr4/ÂèÜ‚0#~Š}›Ìog³˜bJådrÅtLð‚iF}'g,*´[J3´K‰¢­Vt»ÞOh‹õœ´%íŠ÷X•Ž`ÆÜ„Ì=@Ä<f®ÕFm?v”F-¸BIy鞌~ö:Nt£†ªQsÕMzé’·G[µž4_ÈU'õ²ƒØ‡ÓîToþ”_<ÙË¿ì´a\nð­]•« endstream endobj 2860 0 obj << /Length 192 /Filter /FlateDecode >> stream xÚ…Î1Â0 P#†J^r„úIÕBÇH¥Ht@‚‰1#æöh9JޱCUãÄÊ7رý† -å†.Þ1/)V‹Oã|êA} ¼D½‘*êfKÏÇ늺ڭ(C]Ó1#s¦&s–Ù3û™æ‘$¢")wiHGPÞö8 õ?œÀݾŸ“ cª—BdsÚÛäƒ|ëãqc¸¨‹Ñd˜G¸SððY†ë÷øÑìqW endstream endobj 2861 0 obj << /Length 197 /Filter /FlateDecode >> stream xÚŽ±‚0†0ÜÂ#poP805ALd0ÑÉÁ8©£ƒFgx4…G`ìдþEÀ&ý’»öþûV¹äR…[I•˵à—µ,ÝïÃåÎMÇê(eÍj‹.«n'¯çûƪٯ¥`ÕÊ©üÌ]+D~$J½!ÒÞ¡òž"`ˆ1¦˜3?–´Ñ†2£gJm?Qbûñçàü‹ÏQ‹R€@râ´E^æŸb¡ ËMИƒÐüFêáGYÐM‚8!‚7øŒàž endstream endobj 2862 0 obj << /Length 259 /Filter /FlateDecode >> stream xÚ}±JÄ@†GR¦¹GØyÙì™VóSZYˆÕii¡h}´ _cÁÂÒ”)Bƙ݀)İ|Å¿™ïŸm*ªè„Ž·Žê3ª=8|ƺ!ÍO·ËÕá wÚ[ª´—’£í®èõåííîúœÚ=Ý9ªî±ÛÈ×z(øˆþâ=3 à±X±Lܾ… fþŒf„>B;¬NóW'Ϫ'‚:¨?Ó'‚,µpJ£ð]b0~9+ejNLNPíî¿PŸÈ^ªK½胺ژªÙüÁ|+‹ÉŸ2 2;KEHNo’Yg(Sc‘Úóºú ‰$À‹oð> stream xÚ35P0P0bcSs…C®B.cS( ’HÎåròäÒW06åÒ÷Šré{ú*”•¦ré;8+ré»(D*Äryº(0°```ÿ#ìÿ¡ °:"ü ûÿ@ê±` yÁÀ<0„ýÿÿÿÔ‰ÿ±` °.WO®@.ËMj endstream endobj 2864 0 obj << /Length 116 /Filter /FlateDecode >> stream xÚ35P0P0bS3…C®B.cs( ’HÎåròäÒW06çÒ÷Šré{ú*”•¦ré;8+ré»(D*Äryº(ÔÿÿÃÀðÿÿ?> stream xÚ35P0PÐ5¦† & )†\…\¦ ¾ˆ –IÎåròäÒ*áÒ÷ sé{ú*”•¦ré;8+E]¢*c¹<]ìÔ1Ø30ÔþßøÿÃÿïÿÿÀðÿÿÿ÷ÿ?€¨ÿÿÀ¨ze¢þ0°ÿgÿß ¤þ±ÿgR˜ÿ1©Ì0©Ì?޲9ðCýþÿíÿüÿ?ÿÿùÿ°RP%P \®ž\\A«’ endstream endobj 2866 0 obj << /Length 153 /Filter /FlateDecode >> stream xÚ35P0P0bK…C®B.s¨ D"9—ËÉ“K?\ÁÄœKß(Ê¥ïé«PRTšÊ¥ïà¬`È¥ï¢ TËåé¢Pÿñ?ÃÿÿüÿIûÿ€äÿÿ?Àä$òC=˜düÿ‡ý?üÀ "0‚È`²ƒ¤ªÿÿ‡ÿÿ ËäÿÿÃOBTr¹zrrv¨ endstream endobj 2867 0 obj << /Length 183 /Filter /FlateDecode >> stream xÚ±‚@ †KHºðô î00]‚˜xƒ‰NÆI4:ãñ(<ã êq7°:ôÚüí×J’¤ÊUYQ)é‘ã ‹šÖn÷âBEâàº(ô‘>ïïEsÚQŽ¢¥kNò†º%ˆ2žz¶Ì ÄÌ<$cê0ydñ¬,ôFÍ™~‚ÔŒðñò7\b Ùm•Ûl•eü!r3ðB^ÍK]/¾¾€{gü è|Å endstream endobj 2868 0 obj << /Length 165 /Filter /FlateDecode >> stream xڭα Â0ànÂ->‚÷IiÄ1P+˜AÐÉAœÔÑÁ¢sûhy”€ £Céï% âfà>î?wcÍš )3a£yŸÓ‰LÌ:ÆØìŽT:Rk6©¹LI¹ŸëËT¹œrNªâMÎzK®â~Ðe@°ˆ-p> stream xڕϱ Â@ à”YîÌÜ]½ÎB­à ‚N⤎ŠÎ}5¥Ð±Ãј£ŽvèòRZ²THù%•]>Ч̦6 .w¬š#y‹f+)š°£×ó}CSí×äÐÔtrdÏjÕ€î„Å\VÌÜ7Bä)Ò´Ÿ¿ùƒñ¹ÐçÈŽJtŽ«äÌ-dÌfÙÚÄñuÜ<à{ endstream endobj 2870 0 obj << /Length 131 /Filter /FlateDecode >> stream xÚ35P0P0bK…C®B.s¨ D"9—ËÉ“K?\ÁÄœKß(Ê¥ïé«PRTšÊ¥ïà¬`È¥ï¢ TËåé¢Pÿˆþÿ'ŒêÁˆq 3˜d‘ ö þ€I7d=˜´“òÿIöÿ ÿÿp¹zrr9׃ä endstream endobj 2871 0 obj << /Length 184 /Filter /FlateDecode >> stream xÚeÍ1 Â0à‡Â[z„¾¤•ܵ‚ÄIÓ£å(9BÆ mŸ Åtxßðÿ?¼ªÀ—þÄ E× * ©˜ŠËêøE|ëSàí_Ï÷ x½_c ¼ÁS‰ÅÚ%霌"#ÉRÐý;µÓ2Ù¢gÌë¾K½Š¥6ÚeQÙeÆ«óh®sí52šÙy­Š¦V1¯£èÂÁa6ú Í2r¿*;Þ¦…|WµqK endstream endobj 2872 0 obj << /Length 249 /Filter /FlateDecode >> stream xÚ}±JÄ@†ç¸"0M!ó’„õš œ'˜BÐÊâ°RKAEëÍ£í£äRn±dügãU‡nñÁÌÀ~óO[I%­œ]Éy+¼ÔüÁÍF¬}Y/“ç7Þõ\>J³áòm.û;ùúü~årw-¨÷r¨¥zâ~/D[ÂsýkõDT:£R2ÀçÀXS„nܤEt^óèÍfM ]Ÿ`ÐUT¸QéÝ5Åøt |?D1)ie^rðÚx´z²ÂEò¸%(ݯcÀÛÀyf`Ý EH9R¢„0E5ù Nv’ៃ-H7Åuù¦çþâéÎÛ endstream endobj 2873 0 obj << /Length 105 /Filter /FlateDecode >> stream xÚ35P0P0U02V01U06RH1ä*ä2¶T [B$’s¹œ<¹ôÃŒ-¹ô=€„§¯BIQi*—¾S€³‚!—¾‹B´¡‚A,—§‹‚ýÿÿÿÔ‰?@üÿ6, VÇåêÉÈrZ;d endstream endobj 2874 0 obj << /Length 104 /Filter /FlateDecode >> stream xÚ35P0P0UÐ54T0RF )†\…\Æ– qK¨Lr.—“'—~¸‚±%—¾‡ðôU()*MåÒw pV0äÒwQˆ6T0ˆåòtQ°ÿÿÿÿz ñˆÿÿÃF€eÁê¸\=¹¹›‹;² endstream endobj 2885 0 obj << /Length1 1492 /Length2 6321 /Length3 0 /Length 7320 /Filter /FlateDecode >> stream xÚ·T”k6LƒC‰„”0ÒÍ ’‚tJ  0Ä Ì -HH£tÒ"’ÒÝ!- Ò H—ßèñœ÷=ïÿ¯õ}kÖzæ¹÷¾öÞ÷uï}Ýk=ìwuôùåmÖPÍI5ôMÀ $, ØÙ `hgè?»‰‚!àRÿQDB!hŒM ‚Æ 5pàCwg X“‹K@@!Hòo )T‚xÀlšÀ‡8`WD¸z#aöhL¡¿_\6Ü@°¤¤8ßïp ¼  ³Àš´ÔSÑâ ÔGØÀ hï¥à’v@£]¥=== .(Ò^–›è C;õ ((Òj üE¨qþÍMÀ4p€¡þòè#ìО$ˆ18Ãl p&Æn E1åúj@mW(ü/°Æ_>àŸÓ‚Àÿ¤ûý+ þ;bcƒpq…À½ap{ Ì ÔVÑ@{¡ù€¸í/ Ä…ÀÄC< 0gˆ5ð{ï Š¼.‚¡ø‡ Ê sE£P0ç_$¥Áœ³2ÜVáâ…£Q€_ûS‚!¡6˜ƒ÷ü»¿Np„'Ü÷Ÿ¥ nk÷‹ˆ­»« !ææUSú˜ÿ±ÙCÑ@Q¤˜˜¨8ê„zÙ8þ*aàí ýíÿ2cXøùº"\v"P?˜óðEA< @4Òêçûߎ¯`0ÐfƒZCíapÀ²cÌP»¿Ö˜@¼€f Ì‚ _¿Þ,0Cf‹€;{ÿþ»Ë‚LTõ•TxÿæüWAáôåòKŠ€0s+,”úý;Ñ?Gð7ýßVìÏöþ+£Ü”ü‹æøþfâñg8¸þH‡øï ZÌLC\ÿ‘€9Hdƒy€ÿŸ…ð;äÿoþeù¿Kà·¤âîìüÀõñÿ@\`ÎÞ ˜¡vGc¢‰ÀÈþ¿ÐGпd­€p¶ý_Ÿ‚‘‰<Ü3êü`°è_JæµÕ¡mþš¦¿»)á ƒCu(دËý#?'̃Âôì· ŠQ׿ +Ãm¶¿d($*„ ‘of0+Q /£W[¨×ï! ÀhLCÑh‡@~u  BàöÖHˆsSÚ¡þøDÿÛ÷WGÿv c|H$Âóßf0X(ˆ„Øþné/ã¿vkãŽDbDý{®0Tþ^ÿ¾A P/¨ `f asï™c峯Ówò žükC2ãìkR¹ù}gMîçd„IÜo_-!å“zÛnί*sÝŸe¾òÝ®¯& û ÛpñäÒ2Not­ði„¦køõ¶|UçŒü÷¿>¹r{bè„[Ýò=ÛÍ]‚L'—òÔ³ãWUgñÜ@èÔšî×·bêÄ—ÅcüÏ £Í &Øs¬3&iYÐüwˆxníy‘OßÊþÉü0Žà·ó\8ß×ô³Ð‹³IŸ…R!T+)íÜ#š–ZžÆÉb]­­€ ùÝ1ƒãé’”’ïrÛóT› ¶¸ÇA:~n^àÉ) ¸OB#ÃÔê\ÆJq±Å™5½ ?5[Y¿›ï3«=$'uñç(¿ ÷,÷]ZJÄž»,Šù¨4†=~-÷²è'¯" +~f–Õ‰ŽROþERzɱ9ï{µðÝõåïä"(¾„U«<ƒrÐá¹:nm…XÚ˜áÒCœ¨ÅmøÖ^F—·,N>o«º·PööÔ»"WìØ,Ž%Pmi9¯t€_7 îØŠ‹Ç„5—úb4¦±VVʬ2ñÅ”€:ˆŠq#…y¬tü#›fz¼à+pt¤±çÛähO* EJJâ.¼ÛBü¯$²l:è¦ÙÖ·M£Û®_05îôïRn¿Äî Ž%©g‡‘¯Ë¶jëÃYumpâšuº–ßz¸5ÄZߘóñÕ$~§W‰{p³ ÙÃUw—CF=½÷K5År›ð ·Â¹„Øó‰Áq&ˆ¾žWNñ9*Ãèeð³ j¡ÐYÚSýàQ\f¹gYJå;tÞÆA»]RZ²È>N¯K¥µH¡œé½âh© Z1g“CAº[ äa[²ß8‚¥8Í&ñýïø•#ž’å(ãñ¦B½¡ið‹~¤!Þ:yòì·ìÛçs–€éÒôwú!üÏ@å—E¡×Ú"³CžkÎg m®Ø‹î©Û˜ŒZ[lO•0ˆ…ou–ß4±gÕi‚Y°vDÉSÃ¥ªÀŸ—ÞÊ¿}·Ö¸ÍtÀUlœ×87”0 DäÛǦ,öcTn¨ràÖšzì)Ú@‘±F#áy}·ëP{0uAÉ=Âë½{·oeØ7f^×·ð”ì\†-2´¢ñnÏ•ª›{áL3‹” ²PÈÑ;|xmî2Ù?¾R¬22B]€þIÌûªx¨Ÿ¶e WWS ÛKþÓ0/~ÚϤÐáM“Ò⪶_ š®.dUƒ8’R¦\䇭vŸ™¾ D±ˆRh?R­›m -c ­>´(’ݬ;%LÍ«HwS©CJâ ê8æù²·¬ä‚ˆpð5v™^ßnââè5Ðtµl2Ñ­Ü’°Ð„Ãoª¡ô{ŸQãÏ—RÎ%|8•š!”½îh,ÙYJ=é3z„åÄM¾¯Ŷ¹Åšö÷.^|©ÅZmøºöâéÇOìw#ŽreØç¬Ó,ìƒâ_6¬‘¼Ã{y5zª–Oll/Þ_YÈß}…|ÅF‰pÙóz–¬}Ö…˜ŸES3k“®È(o1e^—<‘Ç}P@n; È¡Býõ•Ö…!sµg“ê ™…•žŽDýCQU' á3y[.áëE‰¾xËñ§÷ƒ;Œ.?ì˜H=Œ èlp¤ùlgmÓ)õeÓ™lUãV Qý¼v%Íóžþvº%p =ewès;±×„Û¿a¹º3°~g]‘/ÍÐûGz|(V1î©aLÎTΓÖ>~ºgóIëLu÷U/—›éC,£vC/I-­Ž,¸êM„:w*ô ¢¤˜MÉ| ñI”-Ék°öÒäO÷ÕÓ–J«>H•S‹|Sæq ík¸Å¹:wwô*d)sÃXñY¹cç=É6ä‹Oäã¥@¾XD¢wD`&ÝgOÓ­Íè 1õ­Ï33»Øã`]r3©Bª˜“Çç袾ÚJ+E³£«9ã(&mq/Ùâ¥ÏÓ' 鎒)|â$ŒˆŸíÞR£G€ÒUíùˆà·CõŽÔBêÁ­Š #k™Íl#¡‰:Ž#»¼÷¤;û‚üPZ‹‰‚Jçk8#Þµ=/ž åÌ?ã“îe—ù9´ý•û«Èõý8Ü^U ”™?¶üëÙþirÃ+¦tX¬Q7E¥ ͺT}Ùœ… ^µKÔ…Õ’ŸþÕ÷Ù˜™ X»ó·ë€)æL}î‚~UKnÝMJ;gCÎå·Ãù‹°™Ì8Ùôf.CÇ`˜>-]ðNYd<äów§i}aiñ\…"åñ’ÙÕ—YNÏEtló{_K=æ°rKdXìë/]¹Ï³ýc]zl¬øšÝƽpsEWó×Ëv‡N-¨ÄñH~gᥲ<;V8…rµ¼C‘£¹ÉÕR¸ÌL6+ª±©ªÌcö¥¾îmºé1®Ý ±ZrZÚ€˜²Êçf ~‚€ S¨ Ž ‘ç 5(]×`B2Y¦’6èE)ØÝÑ–¬´¡ê)w©ÈçuöoÅ÷Ö é¿›±"ùÌgù†ì,=<,€–ã ¦hu£qö$M®h0š]]¬vü°ý¼Lž•’þ΃ŒBΙ!E%>¾Ùäàô÷7Eã•ÙC+z$?·o>#¬é`¶(%©+¯‚3TÙ­¥uv%6¨2¸hÈ®lâ3ÐòàU^e¯jF„ß/+ðrr'º­ÞÐr8~IÑu×<íùº’¬‰bA䦳"§ç2×´©ŒÛÈfbK¤aaá8Ñ'öTQ}—€ý>?é¶0jÍÂ|4V’í³Ä…zd ¥R?YÛbŒ¶øÎüÇù×á\‚¬Æ ·¿‰ˆ5Zª4h°Íê/¸ ”>sëÖŽ(¬í÷»VšM…191=ãf˜§ ˆŽ–XÈ×,!³øÞªQ[~ʧW °ö\`>ε¾-ç0¡¨n3µ>ÿµ=q·°Ú$¾r†œ½×õ¤ö.4c³^AŒ0Lwk¹2Ùúýó[>à=¿R!óÞ·QäÇ5=a)bímů?Ç>ò­Á6£Un!ÿ07 $Y ·fm>&[ í¨U“ïÏž£þÔYžª¥ +%k²ö\ÍÌdÍ*r™`3`¯3ËÄñK]3î Pª{‹LºD+¤XI9zéSË©î5üöjV@Ÿë;¾(ÉJäåA‡D^r°Üqè}Àè)>c£²?Ü'„]úLÀ’³00ƒ¼<ØUNQšòÝ~¡ÊfjwÂf7©ŠÇÐÈ! €Xµ?ï0ô̺ξ@D=, ¥IÎuüÉèkĪeóýgþáó7^f¢> \r7"Où‡rÁŸ`+B¬fs) Ä-ǸIÆlÄÉ(àƒk¶•Y=\áX݆Úì=é:SXìò·Ì†uØÔçÐQºü ¶×î­’ŸU¶'ã¢/ »øéF ù ʬüj[(ú_Ý?á3u{èÑ~&?»xgûÆ=ÖR ‘ýx\’!§iÈ^øÍœg¹]ެÖþj8õÝm‹§Õýü¦YÚ¾B@ÇQ’Çj|hJ¦g£¬nG' [^x÷bn÷çt‡`]J+^F²9”±¹=fœî=ñwseL)ði2PïÓøéP“láŒð4µ÷{´Á&ÜM.?ØÎ Núf›ÖJÿ_åyë·Ñç3†y¢I¢L»!6…;Ú!ÃôRhn¹’ŽáQÐÝ]B”&.U'È ¦`B¿ •;¸TvG»zõVÄEÐŒ:vòüµäÈÅ3Pî3žƒ”áÓ"ý*ƒ4ñKæžôÓ¥l–àqIÇ—§ûK!õÕn3î¾'j`¾çûVSÛБjI+”î€{~ˆŒOWãLöç.ÐàãľÖ\]ÅãÆYq¹t`¯5¼&ø2É1$„cg8øqÞÿ¡" 5¾) Ç‘6—%à¬%Њ;WÙé¥ÛÔîHöÕX¥ïôhƒ0õä>YŸŸþ´[¡¡øU¦Åhh Ô0 /ÀyÔˆEEwˆ4L/môð±dÎ{ û/j²Ô\=ó{Ÿe—«ù攪¼Blðciüuµ.(pUŽ|7~’/> “?Må6w*^)ñ/êTÓvÑëS­ß’}­r¸÷€Qé‹rnóÄœW.u–R¸ýŒ¾;¶©w³Ù|¶Î\¹ï"ã§aqpWVž÷zÙ#@ŸD¿¶Á£]±Å žfs™ÍópöÉÎ~­yCò±YÜ+cD¶0«FF勃…ù~çW7‹’F°BîÚTL2­6öªÕ⧨Sg´èúîd6]ï÷ð‚H3ÅQ?óTüĨÁx7NØ÷Oëv²b½_ËZX[\XK¬äR¥r".Ž ˆ,›ÎO¸ÛìÓä绿‚ õf¿À"BÀB‡‰Œ¦È¢“'ñ†Â6€ £Ì³¤ ð­eKÄ%Ó;OüŸ€ýø–Œ¸@káy—Å¡¡ä 7ûî7’4ß«8R÷¤WöæGÁ?ã¬çé3gŸÇ¯™EÝa§àЦ¿=®­}Sý*éµd¼)²àyõiQVæ±Ç'hSËÚ—f˜ïHÖÇâÁGƒNé(r4Ñuêƒ*Þ³1­ÚãI9£²dçÏsî,¦tEzØF™“]iLVlЉÑ Žé_l ‘¶>!±Ø~ªÙIdrÎðr:<§‹_w¦Ðks[3U¹x_-Zã0/“Â/w3ŽùÍó~º.丸ե:—~<,(VVB%.˜ÑŠpê¼RzœÍà€—‰,Ù¨‡çuýüÕö[àž¦ ;íIãÔ`ÔyªÀóhûµôiï'ÝZLâË?cÈÆâ‚jØÇ Öw‡iÞæSÎä%§Íè"ésÕ"n´Ã^)¹ã°])D'ëÆ0 ¶œ®~u©e,9=¸­èÄÄ,íÿðlª›ÿp²BÿD­žÅG']‚È£<[†Ý"}AÌD{N¼¾ó“^Q}®«¤¥¤â=C{ÞmF‚¢có÷HµµVÌÇ£„ò}QX ¾ª®8vÇìq‹ÓSªºð§Ó’1 óÀõx?…-è â<$¤ã–zÎ̾ß73B‡Ä-¹7nýHuÃÙSào¾ƒ×Ðùî~´C˜‹*¦8ø7gȮÖÊ~ŒI\1È…¦ìŒÝÀÙÄ=g=jOP)·ßî26|XüúB$ýø…š«úÉèì¹¶´K+­[ŸÄlfݽ&Ž·9ï@ÝdS¯v†ÎYj9ðdÊæÙNô(ùd³§´x ˜bt¨ù%"ŸÊ¸2•Û£ƒ—ˆÙ:©—Ï$Ôƒï p¾GGD¿@žJˆIØŽM¨Ÿ~ë@çÅð¼ 966½^°2lßÍŒjAíÈm'ëNZ²:1ø­tG­P)O4Fú­×œ¨HÝ«¬2êÏK"@úåf&d D” /íÚ!O‚;ˆèã².ã ó¢ÀÒä,¼ÞÌî »Ükm\È¥¸Ý$ {L1˜‰¼ñˆ\ÏH‘AñäÅ-ñE…þ®w_›pô[{˜œÖϨ¶N[,oÖ0ò>}·Í,`itáUÏ%½à…Ž•È L >‹ËPîÕ Š½êg:ËîÓÚz‡†‹îën§Î4æÍƒ&9 VoµlëT[ŽvÊlØÉM3š•8ôÒg_ͼ\âj9¡%•–f&¦,zìµûÁìÄ=óÕ ³íÌ·Õ7öÆ©®Ó'Þ~ÒðCSlž÷FÆÝaûHÜÈZVÏß-e<õ— #˜ÊœÈ9Rà:h8¯*k×öìfÏ|·Àk"«ÐÀÓü¡7R«ç Üïªl²IM¹Ó ý=6•ub°¬ë*ëÇFÎ74Q‘®n€ÞZ'Þ²üÖhÆQÿu¡Æf >~ëU°BõÐþµ¸… ÞHЦ™À†7µþwp9ÞžŽY«'M2siò¤]Ô'ð>»ÛÿÏFL¯ endstream endobj 2887 0 obj << /Length1 1468 /Length2 1531 /Length3 0 /Length 2468 /Filter /FlateDecode >> stream xÚT Tç*X¸´®?U(k2I ²„øE$ŠX‡É$HfB& Œ bE–ZlªUÁJËæŽŠŠ‚H¥¶‚AYDiÅ­¾I­¾wÎ{'ç$ùïýî½ÿwïwk«P¾“€ˆBy®pbÒ!wàìË_á ˆM‡ ÍÚz ¦ #všu8*'1wÿÂOŽÂ ÊÆ…0˜ÀÁB¥0Ù€éêΜëA€Aœ !w\X… @0,$p”¤Yû2µ‰T‘¿À±Lg®£>øHQ9†À8†bTJUD` à†*Ô¤°õ+2w#..ŽKI:!yÙ9‚8L!a(‰ÊU¨è(ƒXŠS£Ó¬Á1F9ø„PËQ@$‚â$¢Ä¨PÕ? ,’¡ø8hà†›˜tæ»tÃѺD®†„Ê`\á" Ä$(XÄ ¢+âŽÆ: ,! *VÁ˜Ž¢ú«Ã€ç³ÀÃa~$"Çd ’NbG†. Õf\àGH¥(® iºûq19ŠP}W3†‡ƒqxâÈIˆá¡Ž†@)c,űX%ÀÆP&Ú{›UˆãêêâÐX€Æ#b†®Àµ Õ;™:3ÅA“(#d@HÑ@5˜¥~h‰$¬BB®D5‰ÿt|x¢1™@€! …Š0œö>;eF…Cgjþr,¬‚(ù1¤û¼ûI)L@àõ{¸~ÄŒ ÿå!Á †)¿súúñ щÅN6%Xg ¸±æÃ<ï:0Â^o …±áÛAï3àBp†HPÝ!¢V†íðÚØ+„”žQ`û^þ „P_Ìÿ{ ô!ÿMûº,ÿSþ߈§”Hô~Û!Àøa)&Q#(=+ÔnÔ†àC—¡C íKHû0µ!>¸ˆR¹Ó™±‡»‹‘<,„b D<$¥‘YP%$ކ$¦{v¨0úÈGmC=-$51½ ¥ëÃÂþ8BtÈrq°\«i%35ÝD&µª4^¯pÀ ã„‚ E ršn®lÀ€IŠ2FÆPcëœz;R W’ï ®R†Ê©Ç‚Ò„RËßyœÝ(£¨³|p;D)—Sû«W8rÖ?("´_› Ä#%úxJå`‰Ï´8§Žk,gó ýiŸ.Óú®z¸8ÙÏóÅ3vAz‹OmÓƒô÷&ö°ŠßžŒYn ŬþcmNº»å¯'*„Q÷×6Lœ÷²‡ R²ÖÔ¬\ÃÆ"˾ò°º¸ïF»ÉޱO;nåu-ð´)?úüˆ¸oÌ—??¢›^ËL3ÅÍmf˜Rå“WuÔ·Ô§±©:`Ùï}­7k¯ëEÎù+,—ö w9`m9Óº»ÍeyÝ^»;ϸN \Ó­µgü§¼úÖ6y 2%É6Ьç{–‡…e–W$F,½ügÃխܨR+¸9ðØsBå5ï)r핚ä^r•¬=ñç5 ß6ž¿-¶¸™ò–ïËå¾é›šÔYð»r‚­ ÜöÌß|w¯×·Ö¡=û­-ÅóÿúêÍèÅ(ûRÄ÷¸«YAÛªÜùÆåº‰ÙƒÙ&'fœ)ylu7{Rätõ)ž‚5w+~OŽû®&£Yµ]fOÝãS‹Mýîo74☿éèêI%Xz¶Ç:ÇÌ©Tówök÷­Ô´Ò“NÛ§Ý5ؼ¾¤Ãf =<É/áx÷¢œÆŸB~út.‘®)69dpNðɸcÊÿ6˺Ÿ²ñôLóÂËãËÎW[l1íî8èb¢2ʪØ䚬sÀ4à¾CECaaA¶¬hG§¥á)ž´lV§—QnmÃäl,óœMÿ\óί3M”fƶwÆN ÿt¿!kç/?ÁèÔÐ.%tíø´ w4ªË¿uàôv§&—¾–ù†NËϪOȺþ¶À›{ 2‡=ê©ý¯ uUÂÝ_Õ·ª- Õ¶T·uŒ²¨\îý‰Ó£Ý—wy;ÙžýeÞ¢‚C–¥/^§}Y²S>ÅâDèSúòoùoÅ™+ÒazMW×ËGo²šî:‹g>^•Õ;ÆM3ÍüÊ«yƼ¾©Ð¾ôוÁOÖþ˜±'äÄüஓi'ó£¦|n²!£‹—s©Ì #,f»Oô-lšO¼´,1=ÀØø]ïéF$4nq…å³âéÚ*›“À´läu»öϩŅû¾ÙÝ•`}ûŶѨà»v‹œ¹»ws1š½“é3;¼¢+þT«ÈÜèzòtSÏÖW9Å—®Në1ic6s"kx~ñ-›áÔ£mµ©"H°ñ™YVŸMøMa·…Én편QÄ­iY›¹âÔ’½y9~ðëþõÕõ^Íc†Ã•³oFÃçR9…kËÞ|1%{ô¼¨+äxHÍ‚™ +«”*–ÙÕMPÒÐýÉÊú>Zæri³¦¿.O& ˆ‚Ï@ÕÑÙ㿇«ÂÅJìa´¤ÄÞˆ‹q!“VjfôÄfnI ®½)jkeºlûê[ŸçDø(ûúsùY)\+{O"Òæóæ¥g7&»½Ü»¦©)/óº’½Ù¼àû¥ÑO–‡DÏ–=.õç/ê.Ýñg°Ðnå¤{~FßÔò÷iƒÕÛb­n¼jh%ó²¢á¿.rËWfÏs÷#3ýÑkZK¶NnmßÔf¡Ú°}Ÿîm‘QµâÜ„¤Á§õâØoâà &?Êä.enNÛiíöœ—F+Ç]ñj?²úz¾]Ä“ÐΞŽù¢ ÌTR}w~på”IíÅÇX!Þù°ló¶Ø“Ææ-eýͯãv–áöu_j\NÎL°7|^ž+ÊW»ŒÝ{VM‹¸-—ªN˜Ã֞ʷrçj¤öÈúRGS˪Æç3æeD£(ÿ`æô[È’‡³ "É«âÃ[å; Û.ÜTßMð *üWh8V~åâÁ;‹/1|^öò¥n3w[‰[d™Œ¼Z´—÷$X³¯´e?¿êG§¢õaN› òõ1iÙdzÏÿÞ¦Ùîq«þÌŠmF¼Ïd?ÏÙQ;p¯£®>zçÅür·ï?¼¾nõs¸Ÿq$²åÕ½ù©Êê p®s‡Í¡ßêçcÇ"*Há‰-1£+¿ŽfagX¢Äöë$ã—ç-Hr?ͽ°ÎòÆ µö¸›AgÜzÉö@U)îuŽO¼úÍ};Z¹4|ì½¢Æd+Ÿ˜:Åǯá9ÿ¢ZÞÎ endstream endobj 2889 0 obj << /Length1 2852 /Length2 23545 /Length3 0 /Length 25122 /Filter /FlateDecode >> stream xÚŒöPXÓ ãîî îîîîNpwK Á-¸‚»‡àwwKpËìî»É~ÿ_uoQ5ÌÓݧûi;gh(ÔµX$¬@@Y³ +» @JERŸƒÀÎÎÅÊÎΉDC£mçáüŸ‰FèænrüÃBÊ hî–I›{€ U@ÎEOG€ƒWƒOÀÉÎ.ð?C› @ÚÜËÎ  Â P9Ý‘h¤@.¾nv6¶à8ÿû  ·dpð1ÿu át³³4w¨˜{ØÀ-ÍZ K; ‡ï\Ð Ûzx¸²±y{{³š;¹³‚ÜlD˜Þv¶M ;ÐÍ hø•2@ÕÜ øOj¬H4m[;÷¿Z kos7 ,p´³:»ƒx:[Ýàè-e€š Ðùocå¿ ˜ÿÀÁÊñ¯»Nÿrdçü×asKK“‹¹³¯³ ÀÚÎP“Ufõðñ`˜;[ý24wtÏ›{™Û9š[€ þ¢n•Иƒ3ü'?wK7;wVw;Ç_9²ýr.³Œ³•ÈÉ èìáŽô‹Ÿ´Ð\w_¶šëà òvöÿ²¶s¶²þ•†•§ ›Ž³«'PAú°é·Ìèàaggçãå]@K[¶_´}]€)9~‰Á9ú»€\Öà4€vÖ@ð?$ws/ ÀÃÍèÿ§â¿‰ƒ`egé°ÚØ9#ýö­ÿÆàþ»Ùù ÙÁãÇ`ÿõ÷ï7cð„Yœ}›ÿÕb6m%U%¦RþW)) òø³ððX8yؼÜ>ð—Àÿúù·ÿËþ/©º¹Ý?ìþð¨àl ü¸zÿKÄëŸÉ ÿgmÿ  Ï3@ÿ{üØyØ-ÁÿŸ—à¯#ÿÿfÿ——ÿ×ñÿ¿Œd=ÿÒÓÿmðÿ£7w²sôýÇ<ÏžàÝP7Äùÿšêÿ^hI£ÕÿÕ)x˜ƒ7DÂÙÆñß2Ú¹ËÚù­Ôí<,mÿ¢ÿuìÜÑΨr·ûuáX8ØÙÿ¼s–àKÅÜ«¿T@ðJý7¤Œ³%Èê×îq‚ûnîæfî‹n=ñü9ÀKjôùk¶l¬Î ð8¹@€5È éWGyyl¿D#^›äoÄ`“úølÒÿ"0:z˜ÿV ØdþE|ì6Ùßl-÷qØä#.›ÂoÄ `SüÀä”~#09åø˜²¹“…Õo|`º*¿˜®êof§ö/â³SÿÀÀÖî7“ÕøÀd5#pT­ßLVû7“Õù \ÀW¸¯ÿ€ùëþF` ½ßLBÿ_ö«ÿ!0÷Wÿ"0wƒßìåw¸À^Ì\ÀÛùëêý×,µøÀéY¸™[:Á/¡µÇo9׿ò¿Wö_8¼å¿ˆìÌôgZÜÜ¿$NN¿iüšc6«? 8$ð·p€ÿ‰ÀÁ Ž žlswÛßãô댫'ø>øWv dGs'+ðeþ‡wp‡¬Cð9ë?à/åïRòpý‚^¿ÉpüüŽÁóËäéö‡w°Íœìo’Üà–ÛúºØÿ¤–ÙýÁÙÚÿÁýrø‚«éø—Úé_È &ãdnéöG­9À×=ÛoÈöæ ¾&þЃÓýæöúìÒå·ìÌü³Àù?ƒÀÍñô¿cÀ N@K¤Å9¥P¨}mhû]µ±7Ëî¸È Í®^‹ÿ¢[‡ç|2CÕÇ7ën7ÉÃ=+Û2ô×âKäÏþÇ-õðá­‰mO¦ñšS»mH “x…Çuý¤ˆ$,Úâ{Ï®º¯ [ »ir]=ùÑÔó±ï¼ûä|êú?-¾›ÛÕØ«âUB~ú4Í£môºäMžEÖ,%œ )#Ö…ú·ë›¬œ‰ŸäŠñLH'1\Eþœ±÷³~«Úœî݄Ԅ¤Ð×X£S´þ’)Šøóþ¥ÅÑë"óÙ|ï㆖Bûf•t )ƒÔ ÜBËXD2C”»°©»s¼-3Ýu-'T´täuþa4¥rÖ‰•TÃ¥¦Y$vÁ÷ÏT¤Z úVL_ȺOÎtºâ9böÇÈnD°·:³‚xŸîáØÊͧä”a“­!Ö¨–TÕð¦Ç´òe4‡Ýcê ý ûæ±ß²ØCÛ‡{8­ ö!ûðã«?Z¨×$žŸ>u}°6l¨Æ¹Æ};‰aÚ)±=éÁù•ØÈwʬÀ‰/‰vZžÅ?¤˜¶Î>‹ãäN¢¥7©ñ`¥BA2Õ/†6óœÕyúIlYã ë„û¨%ƒl<Éšîl:9F"öñõÿY¶ èP°I‡È³P:ÑÀÐ)Ý„mȼafe/xŽ;¡ÁñŠ{(ao×CY8ˆ–\/#¬Â[Ù\ÀKá‹«í¦FHÆx.^·½WåCع±{«&åódÕ`ÕÓàY7iSòý3¬R°ºüE¼›l¦ð­Œb~íc†ñÆ«jÐqYˆîLµ+‚²"“é‚ýLý’ÇË+/¥Å|ò ‘'Bºò…†k¬°n‚‚Ä\Ñѽ€y;¼é푬t“€•n[ѽ¸—Cä°G3« I€_y—A¾]¦P¶j Šš9ÿ!åÂF™¼Ä_眘(eyvA¾ÇIʰ·ãÔn„#r²¬,ª¤ÞÎG˜ÅK?T!'cà 1Ü·13âh~Aý­¯¿;ê”Á7‡*ä_‰z—CmZ"Ò웕N•åt®U£¸[Ée‹SéðšÝ÷P§'_k[ |“4ß(ŒÂx¶d;jObSËÑödot Ï~ˆÈwJf®9a‚IŸñ¤ŒoIõ•ÂÉ{³ªÍù«Û&u@ÔÏ)m¬Seø¤DãIÿrý³ŸÜý¬rÉÞØ;Ëêwœ’G6+õÞ?,ºe«³‘‘_«V”XÛ ÅZ‰Q}p¤dâ=)'í±Ú‹ó¿¿Æd¼_;;M%œBÆfÖÒØAã,nˬ ¥+uþLhdVk¬úVðmkµ¥‡×‘ЙÝBà“qûÅ%ó1ÛRi‘Ñ+j^"C¦×:2‘TÍÑ*yj'ô¨µ¬ÒO›ÊU[ŸŒ®7Åïü¸èJŠi'“y‹C/8SWà"»h`™è“¯2BÌj ¤×_Øj‡ ’豆bãÒ0\ªÐ<ÌnL%{ ¶fkŒä_½Â6½)ûšPÿ‚‹ðˆmIÓDC±„¤è5˜6(à:ç½7¹á¿Ëû«rÜ}<S%4ñŽVƒ¥×åÍ>Ý{ÚÈtÚZ¾zÌ̃õG#7Òàžd•’fʺ7ŒUè]¤'KGÂÕÑãÉÒ±ÑuÌmÊ?¬í™’âOF:;º¾BÞç gQú°÷ÜÚRA—¯{Š/n,RνE¶Rˆ—aDdØwíïõ{±~ñðiAÀ-C¸X„¼Li¯AÕÞ¹JÒG?œeEº1àŽ¶=/¢÷ÚAôÀ.«½gñÛ§:úآųGŒ¸øÝTM€9ý\·Å=˯;ùiWÂ5¸ UŽl%@ØÒ±là|¢‘ÌOKJ¾É ºF9¦”&+eÔ£¿›ÜjÅxR?wÈÑæôH‡C‚ñ+†9·ÅkX~ºóVÑõ >ùœÜ63ȾXøö`º¾FL7¤Ö­Æéغ¹á¹*¨¢|hƒ L©ýT¤(VT™(©¶M®ØÀ9𯖔¾’-ìø Šû×RO†>£c>•Î=R®T TÚv­¬Wvwzól—v»ŒoŔ̖†³óú0Ÿ‰ÚwÅ×¢W$ŠvD‹ÎÉW…T|9~¼?/[vråH` ¿ÝÍ}Ä-3ÄH€‚¬8íGíEÙ÷°çCFàêWYõÝò+ÝcÞ3¸hß{ÐÄQ—´ý±3y\t~²ì¡+;k$aëPJk¬„ÝÀøÈC•s~Î×5@ú^UHëD€ʯíç{îù[§×èg~R鬣u ãÁÅløŸÂçc:ô6»× ÷kô…fjœ©Q-Ï…Ë~\°ìÛÈ_¯Y´u«ýÛ«ïLåÏ?D™„v±%·¶PScIŸ¸£U/Ã;Ýx-¢¢]"Àœ.ÄI– :vß©õÓ2‚œXªkE=;Âúj1ŸÑc–ÇOå !WL’ylïx;áB+ ~)zÏ\€¡fÆf(Ïk…ìÐOYnM×(>¶•¶¾Ûº_µ†*ùÂï´m‡Ìµ¯qVAÇïoCcé+Qô¬ÜuîDÎfÒ1Tf`3â­ïŒ^}ÒD+—ó Aoâ¶¢ÇXWÛ&iö§Äs¼7Š; Uòë"¥ßAž_Hœ‹ˆLܹ]twL‚ow|®é·$ßEŒFª)î_r{%³-øC&[¦ôQçÒUʪ;ê£?c-”laÙ!¹Än¤E1 º—¡äí¬rüÈ@î™Ë€ ¶b®2™á-ÚµÎbVïv/ ¸¨th×äoåk¸"µCŽ€‹h¬LºBë>f©N瓈·UÛbd™UJʆw®1+Ó|sÒ!ùØ~€]/ ig¤®&wùlr)0®{~èRwæ~‰~K³Ö"ä~‰Š©Í&Ô€³où‘ðZ gÓNn“ºZ[A¥ !Õ!Âén·}_TÖ¶Bÿ- Ày}Ð2ŸS×Uó6¿„°Y¿‘Þ¡F`8‘0nj$«çñUx(ŒM¨%¥rO“ä³ÓjOeN&CåMN¦L¬‘ÛÊ—™©PRÑ$6„ïöÜûEÉÑÈ £Nñ%›×‡ÑŠbNW׍Ð+~n“¹©‘-ô®)éœFó'>”íÂæîIÿÏÃ%™Xåõ¦f,nKŽ‹qŒçm®o2 ²wH["óÀU)Kí´%3•’.óCÅá¤ÜûF±úHM/äоéÒ)M\4RØ%Šp#ÏyÁW´!FÉêÞÜ[–# *$ÀÓg~'ÂüšrBÊ£¯‰bƶüÐQê/`VÉ¿‹µÕ·$‹%M«üf4Àtö…u¸"7ÁËühCk7UˆO‡fÔAz[ERÒìÌá0Q¦g½!Ä(B^u`ŒR6ýèT£:<`ÅwâÜ3hWӶܡˋ[~¦0÷KI¯u<‹ÿ²4)¸‡ ;òsöÕ“ÉB<Ë©ê"}`i òl"ëx=»r\óÂéPbHï·%b$åDA£  ¹+gg çªc¢>BkhÃH%A-Ùrå&Ê™ÈbGi$Yø&Qð²µ28ÏŸß1^öË$ ‚\É„º"fÛ&Øö0c[y KQ”1æÎ0@Í_ˆ›´Q¾¯ ”åɾOªiǸ\à¿hŒ¤þcµEKÅN>ºKòð4¬ŸÑ}”Ѥ !èÿjD¾öÁÛ[æç»ŠªÅÞÖr½ùäwØüˆ¨§uÂ(4>Ž´¯‰Kæ®>cœIÚn‰lÈÖç¯Srµ3ïÏÔˆ»éKÑe÷û#_ñ=-Æ,-˜"׸h‰Ñ4Û|º÷€0D¸Å³¾'æS¹ÿ8͇ï><éÜ@ôf£qê“7'÷Æ|X·›Å™t!CÕ=¼ wI×Áóª-›‹êÛôdÒE¡Ïí‰{¨©‚Ñ.G(G8÷=Þ*¸˜lþˆE!ì¬e©ÛöÛ±âÂQ…{¨on^ü|ç¿1ü|¦¬,_\+åaOl¿í^ÕqM§Ÿ!,rBXB¥2„dmïû%n cÖÜž_/‡ÊÞ“#æ‚z.úßb”eïÈ)£ûŽh/ñ}–Y>ßzév}¯$UŸïôŠð‡È>p›ÕŠæe]ôg±Ð:vW\SõÎ¥É8T®(󫬤²+I…94Ir½ø­8öÌ´gx:´ãZŸØÑÒ‰£ËÓ´>Ùtm7÷„Dš¹ÔžÝÆÂß@}£Ö“QAsÖ™"®;špûÊ+¤) –;g•¤‰‡§-¿ÜÑï çë ~ `Í: Ÿ”?lAå’Ç‹„+SŒ»îVç»KH¦úJ§ÉÔl©³YNª­½ IŸÍ@Þø$£dbµLSßMùýE+ŠU©ÿSmŸk¸÷¬Ü3áBæC6õ†îû)ռ΅G§i^WN#…wÁ©Ñ­+c]'…”âæ\ }H¹Èª|Š|uä0ß69øÊvç”êýe„ÖïGÆ0Í@4îdØÃšb´4xø¾_ð#>é륪è.VJ•Ý“}Ͳé:(³¦e2Z˜;ÿ±!lÄÖw²\¯ŸûYŒ74qÖ»)gú²’û4çt‘HzSÓv¢êHA?³˜•r®ùøMz¶=Û˜%òvGý‡5݉×wäDùEÝàqC.§"!¨ˆ·hnP1À“±¡z“é³·+ªoÓFÓ+âíùôЍ2ë¦àfà“æGê†[%uåèƒ7ìvð wJô$„Å›¶3Eªyoΰm 0£©QµGäÊŽ±ò^³«º+ó\/BŒÆ+“ÿðŒd‰…ä³1õz€BRÞÉT5ä)0Ô+Qpé_Ž{w`!C(kÜîbùß~Ió&±ßX± ”HäH¤}¡ƒàRAÆX­Ý^–¹\Õ¸ãb›ð+q¤=ú2Ú°%÷•.ñUiP„íp 퇒,ûžõ¼”Š ‡–?ûèëPA)€Âø¢c»oV0g7‘K-·‡™´ÈºÞ¶ÁÑR\ÌKÖa(O†ÜiS«–·Œ?:ü8íѪW>÷=Y3}±¿ûš¦9ß(|¾ ø>Ú2‹àÆÖTþ?ÓþËŠ/éöšR3<*•R:¾!-Ê|ÁÞ•e?J.!ìw!áL«r ˜ÞÚõ­‰EºC&~q__ ­cÏÌó¤ }¿—l§ÃE.Ÿù«÷vJ1ŸÝ=£&¬¢êEܤjôÅ~8¶¿MÕ Ö³ò]]æQDÿP7uà°rÌ~”8!Î7¨8üLE𢯖®e«¿ZR¶(Ç >Œš·Ú:_Ôü,´,—)&f®Ø««¾ùâkr°üùg“MSÐF†Y­gôÁædD@ì¤ÿŽ„¢eª†æ]!Š«³ýúòGßôïM7 é13íOŠRq0+?äÃý4ÍW®gHÕŸjŸ æ“0æÞø |”o{‰NTq6Œ‹aŸ+} Ah]Å1…•iæ;ÜÙôO”ÄüÄÁ};…ŸdÖEùÉͤÆbs}q‘qû)˜ðåÄíödñ2 RP° CVõƒ¤Ú?´áy‹ s¹*iy´ªSj^jnåöŒ*E Ȥv…3U©¹® æ¬Jé˜ÌŸQDC¤|‘“øè²¬‘iëA#ý›e‚a{v/Óae˜»ž¤µ¨N_Vª!9éPâBIÉÇܳ@ú¼oøÄêØ\Ý¢ÖïwÌ>]9y?úB/TÔnt'*³#¸‚6çOéW‹ç„Ü;«ºR’’¯Ë”÷}Æ8ÜMË*é8G¶ v: XgVäÄnW·ˆ_‰²¢ë=ùQѹ6\Ržø1¥]™:iïVÑ ¹TP®6Ýáú<æØ°'>}iÖFÚ?KxlD—ÂM2––®ñd_…‚/@™-Ôx2ñ y)RÏcT’ÒqMpÈ…Hz»M5#¶ïÐRŒÊ ‚xyú(G¢IV=¨§€JN©ùŠï¢Dï¥mebæhn úøýyú6;“øxݬöªªö Ø~táòÙkó6Årß ~Â!O—†üÔV1žójŸԆ îϪVÂYT±U“‡:å*ßèù'QÉÒ-dº4Žå±vá0DùŒf£L*虜˜Vþ)×MAýCn'|ó#9¨g0y )yx)tR Çny@¡´?[SG«Ôóh›É9†"1‘¦òjí{”é`\&í&¦¾°ë y`Üó³Ç°ºdýATzׇA³Y¾¢È¢~– ¨÷֪ŬîÌJ3…—‚®žü{ –ú”áÑÕù÷3ÑVBøÛ¨‹k™M—j—®2D çSì”ÞÚÄ=¸h],C0ŸP¬]R‚…Ý1Fëßž¶çì´&še´tES $^ êmÄ2fj2WR·ågö²’¦¬$HÏyáKÃ|ßßí@±2ç„Aèx|‚xúu‚I÷rwSõÛsÝÔ›ÆéÕŒõ•=e jcN<ØÏò˜^ù¨ƒ cÅ’Þ[bnÖ«Õr×ôb;}bïÌ\„ÁY GfYH¡ø`÷›‰y¶/@œ}·ð¯r8Œrâ$”m‚çÓJ“å­Ã±$c·¤TaPAËápb8Õu,]Ù~#«Å8’³I÷>,;¿"Üù(:³õ8%“›š2 ^ª›øù¹uk{gXÑ`o¦›.á«t>òbZÐ%…¡‘D·ªÕ‡Á8Ë‘è&‡g½¾³eæJB‹§ V ©¡QN‰¹'­œ³$,éÜvdö¢Ì8~nÈlØØSÍf÷A3hW@¤ÿ¾óVËöþp1åÔ§ï·q½˲».ª…Yˆ]Ú2Añ_k2Ðl|üÐ#s›S•tt¿õ;˜Zë»=šyÑ~~»å."JD8};§ejd(·ÛÜ|NÐ^ÞIeDÅ.±WȓǂéfS~€6ÁfìŒ=ÁÎ5æ³ìž’¨ê¦vô‚±Í2K-ÝÙãB»Û›2‰Iëû`­‚‰Õʆʸƒ¾Tv ©Ë­´Œ0Ìp?^ݸ+ƒµ­¥PÛrÄÂ@Åÿs—•·²^1jØ„…q­FÖšP¤»aÔg¶dênW‡Ë^æWØ@øF¼·· åMfY¯3¬¢o€ˆ@<+}Lo åOôÔ:*ÏXýþ ,õkûþþ…Y¬ÄÕ â•.Ç@6ƒ©]Bñ sèTë4ñWÜ•$kß³¶;šíîVu¸=.Éšãü ¾agüt,†R[_½¶ò,ôÐýPboù£›ZžÐðÜ-ú Røgs ‹RzëÞç²e€ $ÃU …ºI÷Ê2KTÓ±}¢ÙU{&Ó/!‚”ƒ¯\ÝÙ¥çäÄtÝÈ+€l ©†ŸNèÆŠö¨ô¼Fsâ³%$‘xÖyuß@>aÌgâI¼—ŽJbÚ$Ó¦$ ãÎ33ÆÈŒL\íÆÔB z‹‘ •@¬¬dùÝ`ƒH-*×ðg$ôšá:ž$ÀLúÊ%.¼9k’lŽì±º|’…–§'N’5*ƒoÈÏŸ; “mØ5äùLTvU_í*Ì$`±ô Ó‘ñÅxæ‹ÿ)/‚ÊAÖ½¬qRXoƒy.ôl©i9ž#ÒxÐʯ·ÿ]íª"3ËŽh¡m™Ÿ¬ä©Ìu»šg^æ%z9?)(€–IÏ 2óuVû3Gyzœ>EkØÜý–}Ð=L5áLãç´[µI>)B ‡ þOE.}аæsß2ë±K±Z⼇BYìÇU aEˆgrúH?Þ¥š?ö@j—ö$b[8󺟊þun:ª‚t˜‰è ”]ι¡bR5äeÚž~ò3–ÚüX¢D¹ŽœT…3EnAìÉýW‹wãh ®³N| ®>©Œã»*˜ÊüGJ’™ë$/'t_ÊvTÌVjüqˆžga2˜k+è°ì ˆ„âð4]QÜžežÕ"¨F2Ûk†NOAŸgó&iŽ®7˾¹4ÕVbˆ+Ú¸±fç‰}$Ë¢¦oˆ•àÍðœrh²ÀèoLk&ÒNAKn*œTª=Yì‰ð¢¹ÕŽ0báýyŽ¿ZÐH&•ëÞ;§Óz‰·ñoýbV ¨ívf8RÆu˜7‹¶c°rŇ֪?ÀTZüœFଋòpØ´ªúzw}pO›-ÖöjøZà 'oe’y·Þ¥êy2ƒHþ£å• E$]4BGõ%iïîå>²Õ²›¶þI°E©¯ìÅtªÑèÀ0e•4ŠîQ#`‘U?ì]lÏ· X÷ñ¤\ÚÖœÂRâU½ ñÒœŒ8Žq뾎lqƒŸÛ‚…ðIœX ￵ĔÍüÚÌ êMȧœÞ ër™ÄÙ%í ÷ÛPL%u*Çu‹®¬­j×»ºµ¼£•Dz\öJ¼×9’uéþF =Ïâp8RoeÔ‚öv+Ìf$ϸ?~vkQOOk¸ÞœÚ ª~½õ&³ôî•yƒÙ‚”0lš_ 0Ö¡±Y8ŒJ˜Ð´·Ýc!(ŽÜ\NЀGýÍÌH¦;a~#u޵ÝF:ß°qUT^9BÙIs, 9øÅo•ïàкŠëÃöãØ¦[w¤;¬<™¼p‹ÄŽƒšÊ„"\F#ëÜ´¾K)¥û c’]êpû“vêã+¤€3»úH™¨0Ðþbð†ut¼‹;q®¾Øå¯BÑ›[*/]®*œ¿ÎÇoj(G5ú;¡²<¡Û.§'}A$œå€RÙ–³ÍxËx SÓ~ÞðºÒ žˆ=÷.пJkWE¨6T„x†ô>ÜÝù˜èvƒ®¹D>祅YƒQôgv¢–¢ó…‡ðZîÚ}=âÇjŠj‡h¢ô¼Ç©Rþ˞ȑdÄ,R.ŽqË)Èy1¯Þ'¨~¦ÊktH99Š 7¢IÈÔ~UVB_³’óùåÊŠO1Ò'~7|ûÑo#’O­¬,†àìÛ;£y×Þh@Š;2Õ}ø¤j¶v_¾÷ú„½õóaÚh51M? 5Z<Ù‡ø· _–è.PÝÄ!³åj©áú³Sc¯ŽüBuïœE}%‡“|ÃMyåµ'F¹¬+ºr/8 –V²P®‡6¥ \>Ép÷—¬Ëqt8âÓ’ˆõ$ú©èÏ‹ƒÎãjá+ª·—ûçtõ¹\ÞØäp/0½7¾êð¢×­l…“½óKÅS—µ"²ÅÓ[jÓT²íÒeÎÄÉW÷ŽcÞQv·åéëžî ût*xvnƒ³ïÉŸ@jç»èr(²Œý–vÖR¯t8”rÒÞ™s+Ú*›e¾Å,ÚàëÍÂ6sž¯Ï9lsn9!~Íl,Æå¿(Zˆ+͘—Î=Bý3íRù¸ïñºE«`× E­&HçsÞ `ÚÌDqC¶™ÉÎý%dÖEŸ*1•M­fêòèÞÑ‚ËâµV¬ààv—°¯rÐë­k6ñ„YFN3mˆOï^çê þε™­‡X”Fm^a[yK¤òY¨Q¦zþÞOfd¸/—E(?§ÙÃüô*Û…‡z7kËg3Ò; £ŠJÞÞç=–¸¯ŒÂâJ‘’àmÍ%ÃnÅ›Vªy{«ÚÀ·· Í4¨±¥tÅ ±«¡Ê©ŸtªÁ7L;P I/ú2Êk$Õ—Áµ.ØwKêÔ¾˜SlüÜ8ù»YÓ9r„Ìf-ÒèÑÑF”ØÅ% ð¹-ôYš$‹½Zü¥¿Ô–Ú‘ŽuJ?§Ã¦GG¾%¶œ’öÍSŸ4¤Q7»}81:Bg‚w±B—ã§Ë)ÀŒ[n¤@ãÒ¤­)q¬‚;ü*gFE1cOa—N:Ö£ªÖO›Þ¬PûÒw'$\þ‹±5MeþÆå1õ¦j¢£CþN•ÔÐdÏ€¯ÓzÃNdõ´Ÿ/HÝ:ƒ“Tà¹gl…‡øƒtèJ8MhJ>æî€»^¬ÊD”.5`ßГ¿Ï´÷ ö*¦òjÌ–gwª›&ÓZAZÑbèì[«“ç—«t„7— :Œ_•ÅX"²R½Âóšx ÃCû³ñÝŒ•7ò´Wsy[5ëìE~ì£7[”)BVUe1Þ³§9.ŸÊ_Z6&g _@ˆ§š‹Š×P]>û“}¿m•r—b¢ñÚsüöÌ0ÿ‘¤7TÀŽ"çàͶFR©ñ`¯M¶ðÜ. ~¯W9Þz4yüS=ˆ¦[!ާ¸+Ý”ÓÐi<÷HË™¨öÝ3Ù:DŸò+ž¹YâbÁ¢Ç”…ßûG5•6¥ ¿ß>ÖàSô×ûf}«6+r]s«§ÿúñÂüªÂi0¾,þå»úH6ª™^+Á;=£×¸a&B®Z!Ï!¾È‡gÆaŠ×Ájé“)¡Ez“3É0‹‹qϲ§Ê¥r1× E¶Æh{yÆgé§>YXwñ¤LZrY/¨g¯ ½Î:)µy¯Ä6Äó9´ÙW?-©gå3ä Ý8D…Ç!P§Þ ¨Z†98ø’d°¤J"´ëxQh†9v<8¥¶‘º/r/à½èࢷ ë[OªÍ»˜ü”¦2‘Ö¦§¯:˜&æû²ÍJ+¦Qç]ÉQkÅE‚dñГ£{¹ç¯t°5ÕÛ‡Îâ^ G+§¦rRÃAñ©Ê¤$m µÜØݬBÕ … «øÃi½ˆ@}Ñ5EùÒ€ÑÖ¬ Ô–N©UuJ/”G Pd·Ä@xTl½®¿ý®Ìâ ú…ËÕYÉì•Ok7Ö ACïî^’økÁŽÿ™û3ÄÊ4ÑÁìÊB6 ú…O qÙ¹?¼Hù{\)KëÔV>cK³õ??Ÿi§uDÚÚH’ˆ¼ùRÅ1á9‹5ý‘oä[ß#ålOþÍáöÕÉTc„xáGõÜž2=Ʀ¨¼p>Ôgý#’óý׸¢—æ³ÂÞÑè¼¥ÚMÜБp§`ËiîVU¢!¦ï\‘oúøÉ:uˆÛ7´ØŒ/‘)Ø%o%8,Èw¼rn‡”Õ÷¤Î}Þjlxúv5¦o½ý¿«>!Õíñ1æãÄ,wú<Í#ºÍÒ¦~s*V†ñwîäàõî>ΆPTgQS¯^6½0“ ‚ÿ”Z%§€FªÚÙ;HƒÕ•Ÿœ8äY—zÅ}kGÃWHêñêZ@-sp/ÇžLm(é°F •×…2fß}Ðx¢¯•MSŽCï_?\OÝ´}|©=Ü;;  PçoFeßžƒLÅfÍ×D tQ¸‰@ìFðõ#’B°{—\¹íJ'B!ÝBw´EM–—m#œ”Ü>CFo9~K_…¢jÆZ1g@͵+Á(g§tõ‰Yâtê´™MÎC¢>þLÑæ~r6tJV÷­oóº›ÙAyÖçcõ2ªâ!¿€ “?9œ•ˆ¾Ðvõ^fy¸RŒVë÷ÁÙ¢Ý-¸ÐK•ö…¸ê¦ø‚j|5¾ Íð@š[‘›¸¬Æ®ÑK_hµ8¦ïµsëö‹gø„ÆdñÕ(&y"¬²çãëkEEÂDY<…ç壠@Ž…È–,»ñ€sãç­9ÇQqÛ¶Dym²­ÈŒ)kÎ>ÐT©8q'Ѹ<2ÃnQè Š¤ ÃãÊïá¹lØj’н.ÌùwL ™rÕ-c¥WË`$m¦äšÒ`Ì^]̳nmÆ›¼åûº{uÝl¡< lQÃcN3L[‚B @­Wa«€L£òn–i¼Í´¹«üZ*=·•5.zˆ2l‰™ÎXPÒÿñTdXËæg:ÉŠ„L“êÝ.ÎBùûÝNi”ªûéuËïMo­qIª“†ÑEq0­Ó‡5C’;ÖÊ Œò»nH£µ&pwûÒzÅø6ª=%i*#a:â7Œš3º¾>Š#êïKlÁHÌÁ*¾C¼uuÔ¨È?ÎUÝZ8b«´¶ª°éXÓòL4bÀŽ ï}'vèÕû%Ñ0W(úŒ c¤FÐØxŒ1$ÍèSfvƒ¢íó©ôÞÀî vY÷¼ÇAÂgÀq\1«ÙtD6ƒ·º,^ç»Ë ›ÖïþǪ™·j õáðX? 'è–Rc^™\! &šv™ lœ´uµ‰R†a Óo„{Ùµ% †îÌt§+ƒA("ò•«÷CéVI.L_9ÞÃ39:-@&j|·¿CÅÄ•™Xæ ~Â9âÌÕ&ßÿnz«ê®NœŸW£û Eæ6ðõCˆ¸ôÌs(r)[‘ÎÂ&O›å‰g„Noh¨U§wü1öNw®bT´{ ƒ—•[ê1Ûƒb˜:ÑÜBF5M·¬¥ Ý¼\TK¬ ½AJùmõ®+!p:פ}¤Ýš?;Žðäf3Åi·†¹IÑÀiì"Q™QCº`ÜODG3¯ˆ ñ†QF¹ü ¸âž‡k·ãÖçý›ËWP)ë1³ÊÍ–8œòäãÌ•¦~áä¶Z'Q(êuR¬ã‡þgTÐú*ÑQ*]„–²_Ì¿%&ØÅ¡5ÉKäû*‹õÞ„“V(a;ç?. É^Ô"!eH|+ùZÇ-(‘ý4aÞ§C¼k䔹·Bm4£¥ÅXlã’Huï̬N˜"Xëðd±AÖÂe’]êÒWH7îEïšÒF27$ÕÛEØú,óƒ;%ð>+A$%Ýe»ŠûãVô„^Üw­kUÒ¢¬%žT›c¸@é2Œw%äVïò07’_=ÕhµiňBiÎ3©qÅ’š¡Þ›±Ó¿Id†'­š+Š;D ›µ©±ò‰í¡ûÏ´½‚˜j[ŠÞz 9gܦ•²ÜÝÆÊ£ 1.ÍDêDŽ×S/i—y •^$eSRƒîåÞX±"xw·Êð®sYÅaØ¥,CðYC¯ «„ÝÏ ÆçÝÜQû[?h±œgüa}¸ÜÅɈN@òɾeØŽ:JÙ^M«âæ@d *ò ÎÍ<üTAòì :Â[ls£,g]Ð*G¤Çš.°«êÐÌi:®À÷›Â 2ä;?ݶý?ˆW¥'÷ ìGpö´÷ç¶RA8d ûësò`f«•ìÈÙ|±«šûø:Ãˈž4BjQ|:G‰æ]'Äß,‡â×±¥5Â}&À¢$1V h÷®ÁRàÇ|6½„zå‚•¼`K5èÎ˹Q‡ÅÉhò•¥†oñyF.èh¿Šõ¼G>n{~‘<Éè-? á#\C©½k*8˜»/ôÎbº}ˆI¥´"áñt¬ ®Õ‘õ£!¾r}µæ´Dø5ç¿´ÓÏfúçÌfÅcŸøtŠjLG¡×4µ×ïÔÑ´f¿cñʬäâ$ØåWÅ£åÆëB[J±MÍã÷1ªTOxTW§3=bd6‘>Z¹Lu ÚïJIsŽ{œ ä4­µ‹L6•úû0p½ë½‰Fn,i‚˜-.ñYY¡èß>$:s8øÍ‡ k&Îß/¯z4°M«Nuˆ˜ÄÄÙ<•ò™©aÑÐßêc¬Ä¬sà¬4÷!¹Ô¯\Íï¢òÏój¯¼ç߆8’‰I|+ð>‡Áîð+ADO©þGkOX2wƒ=%ë ©Câ­¥ï§4u¹Ë.Ü.Ú<±xut+ûSGíu­MЖèÏÎPr@¢ãOö ŸDŸ˜sùב´§Œ¾š‡!UûpSžZÿ„†}Ö…P(™1Â1í2#)ÜØç²R<¿ð<ÆÄ#:6mÅþíVRVâ„$âçF}„¬/òd8ýJã·‹«®çÅ@ÂЖÙª­N:ý˜ÑÇ aÙà¨7ëÃ’1«;­¹·fCþÔ­{d¼õ›¥M7PqÜjb¨!DÞ7Â웈Ô]y²Ï…Á5°ãoÝ>®= ãÕÞEë´#ÌS¯É!Ù;Ʋ*϶±Ñ±úyq¹ S)_I´æ[ušì.½ÔaNå)Š?±Luw¿*;ÝÒêy„ZðÔqÛ„X_ÖÊ." “бAö ÜUZ±êÃ@žìÈ­mé…I V @ÔØe=Ád]"€6G»îŒ¹ø ëeýM{aÉCV3cÊSÐÆÝ&Òâ@¹ù C WKèm•£špßuæqŸ#™Î·Ekeú/ì£wÄ»lýüZHß55zf¾Š¦®ìðÇô8%‚}ûa’iò† {õã¹·ÊIz}C +1têö½$W8oíñl8ϳ‰IÝs@FÀBzóßP…Ô¿ÆYƒ7{S·ÃµæÜmNÚ´þ k¾#+_ë¡  9ò«ß¹ðª“ÔÕAö‡,égZtël¯Ê(b®DXàõˆè Ø†Í>Œ&?Ì%·Ù ž;Bï⻀ù'Ù ÉͳrR ðèÊØA±%ï°ºÓ¾ŠP;Kx×ç×öâ ˜Êç§µP:F_—›ó%±«†¾“#ñÌ[ñß®ï'[§¯Ôù@Ì“õ'ovÜ ÌD |ƒ§¢™nj‘ËøqšpŸÂü¬ZhAÙ|¡JÆ ðXV9ÚF5Ĩ pêk|+"y¤%J²À Cjo€’N槉0ó†¤'´§ÄU‹œRÜÆÏG_«I¥èâ„lú:MÑU® g2¢k´Ú3“—~4»%V…MD#Ö‹8TVÔƒ~ q˜}žaâ··?Ò‘$ŠÈ¡_ãµ5Œ+wiЪ#(Y€ÎÊuÉHk^NÞCosÙ‘@®"”iä3A‰Ìò‚™¤gÀ`ê8g²Êzõ^.Ô£>­ ú]×¶ŠÅ«ý±¥™NÈ=åw\Ɖò ØÖ„jæÕð]"ÏX„¬Þ‚ñ÷ì‘ùý*o³™«¥ÐY_âwU<Û1p9³·ÎÙqo‰rÏÞò=ÝãIfR^Þ !9¤²3\€ÖGðx¡ž^ËYÅö]dJ ½#«N“Î[+âÞß)q§´‰j`´ é>~ iVÀœúÎh_¼×ROMØ\˜DÅGÆÙ¡UÁ†Ñ,Öúfîwð²ÿŒ©Š·iúÔŒ[ÛqkŽŽ“kràè ÄŠÆÀI¿êtÄZ3Ô2¼HIü”±­ü(‹6ÊÿÚ‡ GjèBF5¨0Ç/É´~oéH‡ ýøËƒKÕ6Ñ)Dþ„ñb©‰TYÁAŸuLÚ$w“õbË/í¾À4ÿ£¸™p—ꛓÞÓ/£c.kÑ/ÜÏì½_¯™,?±¢ÃcEÎ#é;ؽ¯ÃmYJÝèvìøy¸/b:F|-+èkhþ©Oèh¯,UiX4 ÂÒ}Šéµb4sĶàÜð@‚iñák;žûõ.]’æ×íQë<6æTeìBǹ¢ VxÎ3ìN›VK|ÔHD‹Ê¾t}Ý!Ü[ 8QÿB¸íË÷s¿`Ú®Qzú&¬ŠÜ5gÜ„ÿ‚àÐÏþƒŠaIQä™bG#[pDl ì:ßÅΫróµX(R·N¸L©Džþ[@TrÜ÷àu»/Ÿ&W 5?i`Q”ï{Å<Ï Ò` õìªÕw]ÙêTÞÎáò„NÙ ñ°ÃûøqFKœñshÄgDy+—Ö ”ÿ­âpG0Û1`2x_w%ý–´1¾Á—I` ¦tÒ¼\Åý‰‚‚z¡‹(åÇÀd:ÈÇX;LG‰ž¦W{+ˆÉÆÍ„S,d•ÉQ%é»å*¾9úùsz@Sø#‹Àà ;cFÙ²6`Iˆ>äËI¸VHòd{þ rô>Ûv'ƒ«—óR¾cV8<åF¢Ð8K µ+ºù^‰3ô-,3 C2¾Ð0h®é½5ä²ýÿÿ+ Ôß̉VZ‰›éöÂu‡U¹Áˆî! g÷U‚²»ˆ™rH‹?Iį§å¾Òžé¯Gakçey¦Sß`Ú?µ–~…iÄhUÀ”KkƒuÛ}Ó`'ÿRü+@ç¹/"7ÀB¿Ùuùñ)Ùs7<8C¬–W<á`~ÈkÅ 4+n‡©gmó1ïR=Ä,C]ðÞ1Ôܨ°Óµàƒ2¼‚„æ!gw‚ú¡;e•ì¥×#­uþ°±9®y˜BìÖáibè%¯VÚ6Qü?!±ºhzë,FØØ×4©@N=í¼½De²PwTDZ¿¾øè®­‹Î-ètzª*çÆsÿƒ{j;<²ÂžR:¬àOíY/, fqZå¤Íúkþj£Âþ…ø›s,ì‡J§* l ÙÕº“•Cy_K(*ˆs)Æ °r¦¶³ûÂeí0Ë­ P&Q®÷`cAþèPÙ—å‘áÁâ8'Ôì’0h›Pç‚Uª?¾’wvŒCÈIså߆UÖþ©ˆÞÝG]믹!¥ å”ÝsCg6ê«C1pSV¡&Fƒl F8¿«q¢óBþŽšá’8ª`©äÖ!Cü"«6p%Ū.ÂOb ᇼ°¬Õ ¬rþŸŸ·ßi—ƒÞ4ªÕeûÁ¿k’Ãd;Õ1uõ›û!ûÚD¼0¬-µ\Z²‡•yF¢§Ä¹Œ¢lÝ»FÐLMAþûe¯9%ˆ|<}v<Ðñ%Ž7J7Ó;¡w¤ 0RYÍÄ1K.¹Bñ&Ò%FÌ_ùQŸh‘Òû¦ ÍÚŒe$¼ü@Z²\ßR/ÕŽ‹q¹d6Û×m× }vnW–,Ue$7íó‰üĮ̀ª½ŒËkúÃÐlǾô0¦e¡·Æéв~ ·ênš÷?ã¶Ül`©ÇVö3Ý3‚b=>È~ÿÍH‹ÎË褶@‰w¢4ÃVú¯˜cé¹…ôÒ.K¨”wŽÇ”ÇäYc$ 4§ŒÂþAÂHSÝ·8®Z3(G„úe;¢,½Þ¦wDÆÏî@­F©ý·u_eâ@Ê~ˆ’»öÌÔ“³v3·LåEóó{寋àéÄ|®«C무·ýø\ýǵï°ùD0°‘Zý#ƒr5è@6³M?ékœ”OŽU|þJçE×AÔDðZäÔF³P m_löãÔ¯z;ûýR¿_-W¤ }}ƒ¸G 6Bø8þšŸ£RcÔ«@Ý÷z‚ˆÕ‡š|œÐϤßzï‚P÷.¨,ÞüâðgToùN#'ŒRB/~й7õÌ÷3—DnOÏÙ©‘æG}ÒlÛÆ R¨Uu÷q˜BTÅ×OPÞÑÁ߬ëÓ¸ ˜?¹èœTG»ø¿0—ÁÊô—¨€Hð+9ôƒu§×›?E ž³SZ²àl—)=@ì<ŽÚUleëÍìÑ'ö`/q3šj|Qtì»õàø˜gX–,÷m«\Äq ~ú‹e7ó•dÇÜ—Ö4RH3`¢Z:¢s³°N^ËðÚb†÷è¦Ëï–~ù²ÐS–ɬÓslQ®ø[£/õà™ÀNßÛ|1ˆcÑùW• ¾f{­¥ AM™¦ V¸¾ÝÑ!P¥ÓW{°#lõÓRŒI§6[×GSä*ˆŽÙºJCÒ*ÑY@‰œÓt[Õ_’“ q¦šR i"ÅáÆsœÖF‹­Óû=2S© [¥ä°ë¬ ”ÄÈt î•8,S ';ÆÊŠ gj¬-ÇlÀÚ»I%Ö"ùÀt{"°¿ù¯ñ{;1;…GÓ¨èi¾ªg'ºî"æŒù~bèRÔÿ%`ÐÍ`‹Âø ª,!¨X¶ Ê€ŸƒûYú-Ÿÿ@)-Tî§û«ªm5Ö Æê+WÁލ,Ò’¡Ѷ,^\CÒ±›³Ñ¾ý4âYó<8kíH]Þlƒ2— €±¾«‡öø—"°t؈èã:(n¬ÖH?×iGíä`¦-N¶BüÙÀ_jàþ Ç=Á€ÙtúÎGHo¨’ §Tú™VU©Ø[ßcmÏã/b•wb ¶ü=óáµOÒý³3@$ô§P’ ‰…E§Obó\õ‘K4"WOçémYg7"Ïžj਑NRÛ¸9ÿpqË:fh¿Ý’ííç³@gÊH“mz^‘ˆÉ jL—¹€ôIeó}¹s¾’ÿáÒ鯳Ÿ‡¡>‡ŽøíÏÐ<„kôvF®3!¶W÷Ô© Š\H•çÑ9H ÄfU£Çw$ÞìS¤?–e`èeUÕ¤ðW¨×sç0su êÓM›Åþ.ø/ŽvÜöÏ€‹Ê_e7Æ Sê^XìOLãÊÞ}›äúƒŽ ö„;ÃH¹ @58UÁMÓ¯‘íuÖ̦\¨ÁÓÖ:F“/æ^³Æ[.tï€{ô² ¥d'9I|žCØÁ>²:4ÙèÌû/àõpÈíð[“¥Ä¬xt;¢›]ËÁ}èæo|Ñh &˜2£—TðÄÃ×U$K)ÓÜטé.ÊÁN; oÐñ¿)×2¦«GĆH»ÍÔMVÚè E’?öi©@Iaþø?{ºm¨E5#“ÏZõ¨ÙwÑ“œ±ûG7÷ÞÜeè8ê=9aÙÐõˆVñ+ne[±Š.©â¡ô—;döâzÁÉtäÓÆílMmJ†?©ŠfLjÝ+GŽ´ÞîÏÑá‹]Em•‚bÂó×DQíh-¡=e°EÀ)s:¾Œ"–ׯ 2zÜWM:÷BÌ}že&{H˜Ð+º | n°Eý·ã_a=" Wfˆ”ìq[ë†:­%XÏ€ò‡?»³f[¸Ü–‚MzÞ)©Yú 'ë#T`Q¶¾ªä:ó¹J>߈òÖÔF:97Wf4tÜÏNÔ™ÛkzëªÃoR­Ý„­¹!š¶t÷|§&}YÜŽe;àÀÃiðÝËPm¹úÒØ0_ íŠäqðÒ #ä§±ù†=Ã+Ü£€×«{œ‰;ÿø({-½Þ÷Öxn[nøºGoPÎÙáÓ/òêKI“š[3~‹‚²-4 gZoÃqX{ÚŒTúœá÷†×-ëMdÙÜãm°ò‹â¿èM³õši3¥ÀþD*¾;–¦By ¬†LgF…©ž¥,mô>2í©¬²ÿhsh‰±«l¯ ÚžbôâÉZ1.™k°NèIÕdN°º YL¹#jü݃àõÎ+ý— #KO‚Í ÂçÈyv°‡`õÀX/@ñ‚§PÐZÿî {R5Í–¼–¶ÍUü©“¡J³r?š­‰-ðüq"p°@ëBNÿ‘¢¿i²ãÝl;݈,SÖ€±½t#Ö§å£`Ã%ÖÉ75¡_4Û4ÍŸÏå”ãí¹FKœÇ¼Ft7ÏÅ%~„XniÊÔ0Ýb#®©|p;ß2suŸ÷s]®ÝÛô*Èá}7RD±ÈŒ—öD[Y~òCAw?}k~Îj·ÕVíê''å=õK2Y·Gñ<^àóŒ~hÛç9ÀˆÙ@–¨M’k à†q³Úƒ–ì¼0ŸÜæñ4—{g ¶ëÃ2Øïcý¦ú*MÛ.ãÀôîჄ ¿àSøÜüÒÍz_uDØ iE™ý4°Po%ÁB£ {‡¢£L¥j ZÛëìÔ<Ó ÆK8â(EÌ+>°ÄòDÞ>”ßAÏÍÖ%¼++=nÔìfÎ4£E‹<©”ÝÔˆæ;)£ÎBL<Â_ÅôÄć‘q‡a×6©=q㚇LHöS¶AªPg¦Ÿýb¨Žûèa¤TßE É'â|†g¾EÿØž®£Ö»ÊHºÝ?KûÊÊeN+©1v¿Ÿ2zŸ:B8PR2q7H‚±¥>j e¾tK¡züÔ‘Éèö8…ñæîÊ¥Ô° ÉðSØ!‚ãuC;uAJÕj«@0TŒ ˜åh ­,ÔÈ%×…ë~ˆyH ô Y±"QÈäËV oÿÑïo „--ÌÕÝSãÅ£b(v±¿P ý|¦ð¼¥+º#DA7|Ë Gò´%+ZåEW&5t×°:ý^RÚµVAYÈbؘ¾ùj/„\ËGºàxÔq©½q7Wq#.jç>Û2êâH6åÒ‡u}¶h™Bt=î¬Úê~ïàå .F9–Q’)FóýüàRv¬Q^ùè¦Åòe† Æ(-µ–ü»s®¡/Q‘‹ÁѰ÷L æš ­Æ]ËëE(N@—>_ýðŠ\ÓžûÌÉpCÑ\cü„OrèÁ8¢*¥R;içpô-dWBtnÁMîÍ«ˆÕ­°}=K“ê5WÊOœ³8¥_&ž®é6ø€aXÈ}b\,/¤wƒxçVƒžo&qþ–ÇÏ~¸»5‡jl‚ÑO 42H]6±Œzb±`[7Á5^”²éJRBâ-¶·‰g–Ë•w >1é¾–«Ì¥Y1-ÏùmV¡ð·- :ÏÞ{¶R ö6t À;$Ÿ®Ô£©5cþD;µÉ$_ï—”¦‡Mš½×îp¹oê<°x1[«‰#äj«<ª£ÁrÏépKÅI J¬‰ë¨ªÎE¾´£‰Ë"$ø3!e·¡'â3ùX"É::žfçR13ã@Hƒ (ÔþK• TÒ¦U›Æ”ïVM3@ÕgaÆdªú×0[¾)vdŽ/ÕqoºcûR•^Âå®’ËøŽc§`(ɾ{ÍLÓ%$ÆTd“1K¹!ÊÁ´Rc#Ë÷ï讹ê{/º¢"7‚öÀW¤±|aõ5}Jô•œ[È¬Ú xxÍ€*ƒ“‘9bu:˜àžjm×Egù¹„t“¤<`ûËÿÖ¢á+Á¾Žá:IlÀ©6Få“­îv±©ÂÐû„wMc«4ËRa7œÑ9ËΊr-r²àª¢Èò[ Ÿßf˜.±Ñ‘ÕG97ÿ¯ÉéŸBÁ݈cÅû‚¬È|ÑžËèUA61úûBͦ)‘½7"Ù÷Ù"‡ÜýŸ`/–>ñêÛUáþù7ÌŠx¡{¥¶;YxÖxúÌšÈüÛ.²ºë œÎ²×ëÒ5°ù‘dáò‰ë- ”îáí`3ù_LÏðgXµa‘SÙ{ÐëSgé'ñZVó®6†w¯¦M³ÂœœlÄê±9ȪC‡ŒÛƒdJdà Š}þt›Ì œEª¸hGÊ“¶°U7±ræ<'‹ÀR®)ßÒ_E§dN•oè.½öÇÔ«v±xÚ~õ-êÄAøW•*áŒå77=·¹¤ŠW¹#³£0§~׫`y"ˬé*½.Uˆ}ªŸŸª…ºÐdò]@­ÿ/.& þ~¶“O&……`껇üê‹ÙÖq}‚½ý¾‰*d›«àŠa I&#¥•'û¾õ%p'B©Ágï Ç\Ð=ƒßúêÏ÷ã]øÐz‚ nn_`XiÆ’TvŸyP‚ææ,ó$£%†r=<ë±ÐŠW´¼\^5»ØmY èr‰ƒœ†AW©-Â׿7›4$;È|ľò6µ%K›L:šÆÙsPDÝÎr+ÅøÌ–Fhfꤌ®Ù·ôä·Ê¦lªê¤r½Nh]˜†·¯áΘõþ’Û¶,4òž6öúÛ(‹n׫›3Zø1Â\Ú3´ Ö2æŽÒo¹ÀøÅEÕ¾^¥×o.Ý­ùCk ráóiŽíiX[¿g=vp{óÆ~ Œ>}7y—rõ"Š«á‘¿„÷A¦9SmH J9€¯â ºàd ¨ä´Üd· ÞóëQ'XuÑ»w¼&ÃÒØTpjVw˜ïÖÏ9_9¡ß>XQúJgÌ'õ6pÚê¼d#³G2ë‰ìEµiž|ûô1õxrù4E„Ën(ˆÍ{ú ­¾v`§Õ3`3`?ãŠ@.ûõú”—’”#%N¤ù¬Éví#êåtF›JRßiД–J8Å là¡T×÷Ûut—·]]Æ]†ÁWe‘ŸŠá]Zôk;Ž`¡€ˆŽ{Æ18·ÒG´ÄVm ü¦|ÌÕAÔ2u`h†}“ó{t.öÿÈGaÊ-i…_ÿeú6íU\@iï«È@/dFjÛ Æ%j|ì¢-A_šB»•´(¹ŠƒÚº“•81Ùðfb_Ê rOQôÑ †¿±B<µ¼ÉîàZKü;gŒŒ§'•Q¯k®tµ-›í•²@2²7ù³®m¾úê59‡_)Z½7ÈXˆâÆ“¹u…À ç8Îorû‡²ó³Ž+÷Ÿ²Œº“âR6ÌSÚ#•ŒŠåõWÌQ­*°?ü$u’ೈšÞZâSEàA{­¨Ú}¡ô[ÙÉRLñ«câDwã”Ëí$æÚÑ¡BíÔšBY)ñ*…À½Ù(:º¥hW§Gƒñ-Ѭu†ÊqvE+C'7ü†eeϲj]‹Õ„e¨Á»ñãLŽ·½Ü“eÿûê•vfèvÖýÂùâÉσLšÇ]ºö6ˆ‘Ùaºî}¡Sh1é-+á å£GrU™J’cRµ~}®€½ï`ê7Š«Xça¯yÍ}ØèaóÅ‘ì¨Úû¼µ@3Ý‹l;_¢wŒ°ÐR6솂¹)£¡”„lÅ“åoRçJ;Øñ¯Û]{„O†±¡¿vmà}ä‹ád™U[ËȈK<ÍæB˜X­wS›ÖyBm5ÛÝÖš¿v/Åî[Ï$"{°t3Më”ÚÈÒÜYƒ-D|™£#þpÀPMÐiø±måA eTÔïÞÍÉ¢>}¥¿Ú¤@'ý(µr‰#H†ÞºaKT Y)~·„ ÜáÍR MðÁ¤;ýeFèjµ"‘ëph³ò&AÕú¿É®}äq‘¨ª¹XÕ½DH›×âÍgÉÃüv†–0ŸÁfV~€¨&Çïoá vŽVé éѾs¶–0Zv¥»6^Â-Òñé*Åîeÿ~PŒ©œÏumóWúið®G$OÜV¦!ïy»Í‘'¨röÁÇW{úN†u=þ€Z^3š !žù\jŽ ˜¸¶+ÆÅÌÁ‡§U±ýZ%ÜbN$b…H,~iPü_þ|ê(,ZâFpÉ´E6÷‹èé/ŸrC€²­+†b2¢<¢F ¢e}b(€Ë¾ôÆfÎq죭¦4“:ö`š¦ž¦Æ1äê»!f˜)fÝÏÅeæÐ( ZB·Ê,Ö‘·iÈãCªGòÔéÝnEÀ4¹pÍ -’L-tMãÜq ‰òö£¯ÃÊ€`«h¦ŠJ©š ºxbdZv™­àò* mÒàÜŽ\çÓ.8€dê/ú*.€moz6T‘§0®á[áOOCZÞ;ÎCØs˜ššñíàhï³à1i߬*‡Oä„ïž/¦m5~çIN̺µNFoSùQ›È[)¿Å71nðeÎHZŽÌÞ€Ü]«P¯@Àvi$nËá9Ú>ð•ŠL䉖»Õáù^}«1ür«nš'»­1È’,D¦³*òOs Ð,–zwô1ÌnÂí\§}z²˜¶·ÿÝ®.EðÓIdöùHgŽmç,q*çB¨&ôiQ|bnO è“T´"ùÈU¤¬D ß#R‘Ô÷÷Þ¾¦7Á÷+Ú›Y©7±ÕB…½Æp™çmY‰8!ƒŠ5í)Cq…@÷Øŵ̤ɲa áp€«ÇÃU`4¬Lütl‚SÅÀ†Í"Ö'0DŠu9ŵÃKw†nÍÙ8S/gmdnž‚ÿG‰¨ææ•B(†{‚¸ ba×'üýî`O6ÇÀèŸâ8ú«­*”p¨*½¯ÜºÄçøZøýLÀ_WøÉ¨§j´¿E“Cp ˆ¤Sè—©‰’Kšˆ4¹ðP*ô'9‹žÎžç“Úðj‚5M`*µ¿£Ê™€.çÔ*¬ƒOb&Œ’°Äž¬=S* (¯rMêS Ü2p¨qÑŽèìXºUH¤0ㄱ-ºÆÊÁIèÄ”41º­;?µÞ ðÑY>ˆ‹¤ÍÑᔯGºâVM/0xÒY‰í“ÙÎ ŽÃs©%3so±¤<Ì4ó~Ê’”_†{‰G&x»Cñ„}$*‘]cßù˜@&ù-f/TÔì ÒÉéãkTVçN‹AѲñÁ¼ù¼šqvµ:~)Í8‘ãlʶ€3(£Õ.íņz5^i&ÙÂ¥›yלÅêÐ,D½L^—y|ÚÛéb9$Œ2=8f–JNò­¿‰ û¦J¶‹Ì$ßljíÄvrôÑŸ#ÖíX"ÇÝÉ@V W"ûLe°ê$JëŸb'oøXâFÅ:'OQ¥¸þ$‘,|ñüœ*/2üéÞ´²TŠ;"°²âàªìS$Pµ*O€œ¡šÓà˜]r§²sÆöûV“'6†Mw®™4—.…¨'wŸp€êÍw^ç õdÕ“Ön…áÙiû¾,>ErÊÝnßꓼ¦xÓ§N®7?A endstream endobj 2891 0 obj << /Length1 2147 /Length2 15142 /Length3 0 /Length 16420 /Filter /FlateDecode >> stream xÚ÷tÜk÷ m7Û¶ÆI㉉Í&ÑØVƒÆfcÛIcÛlÞœó çùßZï»f­™¹¶¯}ï}ÿf(H”TDLìL%ííœX™yb ¢Z,¬ff6FffVx 5KgÓÿÈá)4LAN–öv¼ÿ°™ßeâ@çwC{;€¬‹ €… ÀÂÉËÂÅËÌ `efæù¡=ˆ tµ4(0dííLà)Äì<@–æÎïyþó@mL`ááá¢ÿÛ bk ²4ڀΦ¶ï6U{cKSgÿ AÍoáììÀËÄäææÆ´ub´™ ÒÐÜ,-*¦N¦ WSÀ_”Š@[ÓSc„§¨YX:ýK¡joæì™Þ6–ƦvNï..v&¦ À{v€ªŒ<à“ƒ©Ý¿Œåÿe@øws,Œ,ÿ ÷oï¿YÚýí 46¶·uÚyXÚ™Ì,mLŸ$åÝé@;“¿ 6Nöïþ@W ¥ ÐèÝàïÒIeðá¿ù9ƒ,œ,mþâÈôW˜÷6KØ™ˆÙÛÚšÚ9;ÁÿUŸ¸%ÈÔø½ïLÿ>\k;{7;¯ÿ 3K;³¿h˜¸80©ÛY:º˜ÊˆÿÛæ]ÿGfnê à`ffæâä˜:LÝ-˜þJ æá`ú·’å/ñ;/{€Ù; SK3Ó÷x/' «)ÀäbêãõOÅÿ"x€‰¥±3ÀÈÔÜÒþOôw±©Ù¿ðûùƒ,Ý:ÌïãÇ`þëõßozïfbogãñÇüï#f’TÑ–Ô–¡û7åÿ*EEíÝ^ lV €‹ƒàó¿qþÛÿ°ÿ[ª´üwuÌ"ÊØ™ÙxþEâ½{ÿ!âúïÉ þ÷ÚÐþ7ƒ¢ýû<›¨ÿŒ¿.3³ñûËÿç%øÛåÿßìÿåÿuüÿoE’.66ë©ÿeðÿ£ÚZÚxüÛâ}ž]œßwCÁþ}Cìþ¯©¦é¿ZÔÞÆäÿêdœï"bgnóß6Z:IZº›š(Y:[ükˆþs ïÁm,íL•ì,ÿºp ,ÌÌÿG÷¾sÆÖï—ŠÓûYý­2}_©ÿM)agloò×î±rp€ Оù}ÀX98^,ïKjbêþ÷l˜íìß]ïä|fö ø¿N”“À$ò—è_ˆÀ$úq˜Äþ “Ä €Iêb0IÿAl&™?è=¦üôSῈ›À¤ô½ÇTþƒÞcªüAï1Uÿ v“ÚôÎAýzϧñ_Äóžøq˜Œþ wFÆÿEuŸÉäð½ÓÿÂ÷æ2ýëàÿ¼höÇà½@3K×xü¥¶wýÃáÝÄüð„Å?à; ËÀ÷„Vÿ€ï<¬ÿ߉Øü¾3±ýYÞ™Øý)äÝÕî}˜þ¡§fÿ_Èþîlÿ?ê÷Êþ¨ß qx_Tûô†å½ôcy/ÝéO¾¿©«é?*x7wz¿åþ8¼ÇüÓÉ÷[ÉÙdúÞ½pv³ÿ‡Ã;—Àwú®ÿ€ï Üþ@Öwï$c}ïñ‡Î»«§)è_±ÿg•Œ]@ ÷ÇÌß—ÝûžýÿýL35u75†_š·7æ ¶ª n{ø!BàÆ°;.0C±«™BÃàµjwyB†I¤©ÊüºIêA]Ý– ¾^&~õ:n®ƒ mù¦Üúìýb§2µÛ ¿8‰Ý?Qp,RÛGGÈ &¼çýêè­` Ù Þ)K‘ã謔‡ñàÖ+å^ÛW¶22¿«¼WÅ)‡ðR6Í¥©P:Eé%z$‹³àUR#QdF¤?ß(ØŽtd¯&é\â/™ØÁ=4+CÙž ‰1VÞ¢:´QÍîÀEÏ©å*ž~e1ȇwRîØÅöŒ¨˜Í õ[;Ÿ*±†¦þŒ·ù|K-Ýqz´À¹ˆ—×ßÇã;MUÿæ'·Èj”ë¬ÓítG:í€àz¸ô™˜²ƒÍÒ¹Qû|*¨6 F8Df± Éæƒ6<ÍÒì¯D³'(š‚³­þ%Ûé‰üöS1ëØ8HhYŸïQbcÁQm×%xѤLÇt*:ÍŠW¶ÛîÈÜs8«jÞ„ã¾LQ#t¡Ñrð@ûப ° ), ¿)Ôü¦ø^‰ˆw¼nªtú+¡I•¨I¼÷”LÙäÙi}·¯ (•ß'LÉÄÅÏY2¿³i~Ëï c¼î”eÄæ\¨œ%âOQÃS:!­ áRã•+`e%!n‘¥ 6j[ußYä ÕÓ¥¨ÿv«z»Ü†©#Ýù9¹¥»©©È(VH­1­{®¸·G˜ÓÞÓƆ 5+"tec€êÔ]ª¢Ôx_†Ðía¦êQ²9ßi´6öÓÇ…È!ºÿNik0ö‡¢ hžF^ÀÅ¢4z.pzP||)·¥[i6B¿Ø·±‰ª«k~‡¡dÜSvlå#[ù¾ïݶt¡Nç®2/ÄÜL+1òüæc–±{Kv¾+nr>uZ :¿68çb‡ÜÊlZ-ø ç šT{.38M—èsù·pÞ…*Ì!ãô.Mw¦½;\`|#™$%Z½æ©Tpi_ù”f¬ÆêÑ{š~ÁÕ€ÑI†Ã‡¶­gè ýµÝµÁ^„I¾” !®ÍP•Ô]™:«¹,—äP_…x–×Ôë«ær_x1ÿ鸖+®œä1€Ð˜NÉÅ^´y¸:ÝÙC/ÐB7R¦!‰c¼ÇÖÇöco€ÛºÁâÄêÚ¦k_Ä6ö0m·>°ñN±ki¶“÷"·X'•|,Û„wÒÒk>ÕêUìYuÇp”T)sÍ›»S[0ø´QÑ1æ»ñÛ8}AÁ®d# ƒÄŒÇ@Pé¨ÊV² ô®Bjq/#±!f–ý[·§)„:,,î)Ô#ž5"¿ ½´o¥þ÷ApuÁ*_4ôu_š<8IRÙ ˜Át³¡Ðɬm±¶i–{ã™,` êÄÒ“›>Aíïg£ëBÑcÜ[JÚà¶±Ðd¶¦âJ7Si%_9[âyŠ\,$º ´¨û=bCR`¨yð‹÷qL8æùóÖµØË Z90Hb.µÄÒ¡H|”½‹þÞшª»8«§•‹‰Û’ô±®2ýeɆ¶iv”€÷3a=ƒ ¡Ã×]b“|ËsÝÀ¢vÖ€˜oí€Ííãmy8z«I*KÁ/SÀÀœ„s¾}Õ'*Yyœî†‡Mà Б¨e3,UYß°…ÄFÂG îáH·¹÷ýiZ¶.ÑOä nÏõÞŠ 49·œ¤M¤„JÃþÃlžî“ƒ–ÁWg_G’NŒŠ69¿EŽØº[J;ñå3»’F‚›…Q§Ÿô#›¥„Op`½J¡í‰ç}¢ Ö9ÑÌ ¤ŽD»Æ—^O&ÍÇCd¸Ö€  Ô^ý7[‹oe¦fWTmMþû:ŽéŰŒ™óbÌ.„êy÷D'í”e»+ô"Spn ¤tìµäë…‚ÓÍ)d•¦Âr´šmaUÎ †dÛŒˆÆóCó¯µMb.J-B“bk"bzÝOKóÖ¶cœ ‹2›¥äý—>Z^gÏØGÝÌç”dâw-Ëò]ÈÒéÚÂÊâ=sâ÷XãaDÏÛðB+" ŧ»uÚ/œn^"(Æüë•®>é£(J`b…¿`§iýD’OÌäúén*XH*¢Š¿©Ú=ômû’Eù Ñ†èeÕëZ^`=ÊŽYf ;ޤØÊäjfí9_=hUÁ‘}îÂ,¥48Ý€à8›ä¶5!®ü¨žÚÊúòsûÌŠG*Žiw$+´\C.òŸÚÆŒüÆ|Ï^ Ödá^Åe„ø9. ¡Ô=ŠëN}\ä “ýË:H¹²ä:f Ïî÷[¯vBÖ¸=>"¼®®b ¼s\ i>ö0Ї²å.í%Ê‘'âaæÀ¥¶èÙüjÒ’¦×œ~fŠã´n̨¼…}+ìQCjð5®†ùÎzDðâ!®«P‡¦Ê#½x¡Õ6— 2»‘*ÖÑåàM$Û^rÅÒùòy¢Žk[nGµPŸ°Î×®9µB_뙞›2Ÿ ˆÔoBþ;y-Aß™I=`Ñc¢Ó¯³·öºœ½IY΋fI` 싦x›‰`«=¾éѲvºÃR"¾e0ƒ)аR¼ü›QŒwù™)g§\²<±’ÖÈ/O#ä¢líãé{Ÿ·€S ùE9³O¬(k•[jÅÙ:õØ*†:Ó·v_vä• ¢Ê÷fH5klÁªéÓÄuž©@†šÇÎg—jø.:L›:“ÛöúÃ&ÏRcy§ÐoØj²Ð:¼På®ãø/_ö"…4Ã"°h[~(BYžŸÉ›]›IÎ2 !äƒ&Ø£ŽÇHrV‘¶Dœõn=uÛqÒ¡Ê×T˜RAìÇÇØ O%IØs`é ’n~ƒç¦TÑzW~uÚ]JcÁ£Š@UBƒJ±Àà!”qùoT }ðÆXhe«÷lR>…jàxûTi˹1v]dƒú‚1Ó9óT9 éMü×ýW%:Ü>©ÅV‰;ɦŒ(´Ô=uyÁÀ=´«­w4Þ°VjàÅU*:ýšŽ~¾Bñë  Z¶ˆ¼Z!'\ ß¼ÌÞ Å¿¶?”K^&•Μ¨BžEÉ4}gE-Q㢒­¦n8o%HŸºª0fQ’Y‹Ý¼g´ÉQž·’¤°Ê.Qªƒg9kõ4bª¬Öô_W ³•k nî0£']ebóÍï­â{¾KâÊcâê®±gØW¡ðßÛ°K"”m ¶Ûãa>ì±èÂT‘äù‘­6èKG™rAþëK¬ïÈE'þýÛmŒÂ›U×>LI6â"Á E¬$ŽFðÛòW©­Aׯ@h!CUÞc^YS•þц!”¿-žôï`‘9#küŸïuì“*nÖ!¢a1g6:6烸ȟ:ÉHMa'Ð笉ˆ.ÍÖÍ‚s“b"³G*ÑKë•Ü$êyŠo'È[ƒ—ùó^KÞ¾’ZiAµj9A¾*€ð$ªêN2çä_HHNhÍpéÒIÀÕEÂâ&†!é…ØÐ»¶Ý¹’.9É:߀$×á_·É1ž_†‡\ q"Œòš˜¾ý’ê¬]%H+Ýë–êmnÏ‘ß:hÆ„b™Šðïy¢ùÓí1DÕQŽ—¸*s8J·qE¶Ud©µ…<@R\ ŒmJ"w4ó½âãrÇëD¤“H€6K[HTUÛš´ÎyeÚŽ$²EÕUx:ßò°ÁmÚƒìÕ$í ¢gä<•Âiø—oº.¤écØÃŒuôù2<ïîµ¥@h cuÕëKÎî¶Tö|¬p o®MùSŸpû`©CªeZ#ܬõF­-wµã¸pTœß°ù,šAèìVáúZÊG•ü#Ðñ~Óq¡ÁÚ…êÜ-õµ*Ù#Lò(%xÝágëGÌæo½>2´ëu8¢b‚BiŸ †À¡ÚØ“Ñ_x·«$ös4ô‚Y¦5.èƒHCåì%™MŒbø-'xo£ÙëfìRú£åÖñÔ^û?ÇxWáaSë¯ë1˜Ê6.á'ŽÌ aUg¿ŒZ Ý;Ñ¡çù…?õÔ;¥gõ«ÖàdÑK<,Á«/§FA¿›)ê®$Ùð^ÌQ ³ ×#(ó|WJٲŭ- £t³A.&‚¿.ùî-›E :ΰàí% ¦R­oÓg#ˆí óž\°æhXÓWRãwÈÉN‘8§¼~ŸÃ¾|ßߪlЕt½U?Ñ$Bèô·9ƒ§p‡Ò1¯›E=ýbÅé[ˆ.†0‹µJ¯om#VsîÒ²JAø›˜f’®AsN2ã¦jªG…ßæì¾ïµ¶cûié2±¥LÞ—ò¢l±µtZ÷ ²>½ç²ý$šbËlppgvíô$ °Y=Ûݰ°¸åOÏßü+oÛhÌÁ,7Ã_Q0@Ȫ÷çè˜ýPÓâšebÄÿbŠ«þá+ý½×9·BûÄ!œçïöhí¦Õo[ëmºÒM4’`|¬‘¿ûUë¶Á}kшüϦÞlï!eß‚~ÜLp L©3y™+‹]ú|7î‚\¸ó]ÜÕ’TA²·¾fOÅÞ¶Fš)åÛ7žúw*ÌÐéSѧ Ÿq0­hzY,Ž 1…M¥ZíתúLÿ>• õD˜r ŸkØ ßœ·Â+Y¯õõL—÷rÑS™¶ §‰àõTT••_ó ´ÒÏêMˆ'ªí'üH3­6é;)§ )‚õ¤Ä -«„íK-è˳Eù³pݵ{Kÿ6ªƒ¦=T‹cŸ@ÀRq:¨ˆºXSJŵ5ï Ͳjî*´ïÏÎYË }‡}Lòûº^ñæµÛ*oë;QI;æR‡ÑÚÛnAs¸s®ä•ÇÕ^íîí%å¹×µ›²v¸l|žc<]ó¦0Âù¶­ý/+; 3D[„)¢*õuŸ‘«¸{Ò¿à”ä¿eÊ¡†óèõˆ’”õá( ùËb…ŸïS-ˆ0ÞYwyñ+ ö$ í’3åmS«Ô„lÚµ‘|  Ú¾JËåÁÄä'^UDq1PËP\þ\‹-©ûþÖL¬2 ÖaTÅnFü£¢‰èwÞ|Ÿ·â*;mº$½Ëè±î2ö yà1¨èƒlŽ óµ…b‡ábŠEü8£GæÄ[ö¾RÇ;¨Ña(õzhÝÝóº1¨% n›Ì6.êÛ”U‰òí/±”ur$ŒÌ·4å…±¨f·s³×\‰ÐÑ6Svi n»ZüÞCH¹Mën¸¬d­Ã¼Þ#“mœë¹ ìÒ? g­A—¾2Á`Ñ…¶7³—i®aUFô=:iîe›ƒ¨Ÿ¿7¦l€åq»¨žˆÙFx E¸Äb|µè öR:TȤvD4zõÂÅ×M:êHàæ™ý·h\~A­xÞíàüLùApüôyê´¨F1üGvÅõž9,ØÕ ¾º¥ÅØWÎØÅOû×O³šã¬Õú˸±àÈžRU§/KÅœéñﯯfíªo¤K‚ÏŒæ†wø¢œRûð¯ƒÇ¢‰_M´Îbë1o£›µ$|Àª3N¿|Ù3ÕDo58ȶ±Q.Åà|…¶´/ ˆ—ä¯Åg›M}цü½¶¥H½® ­ï6Ž»ñÓ+R¢"’7ÏZ€vHp™F(ZRÝ(ã]˜Ÿí;·œ^e&Wjií^ˆ9óì¶­o ̰=-ÕúÚžZëä3ú5nƒZ¥«’–Ö_´‹wËË?èýîÖÃÉã'iÀ² üôN7Ó‘Æ*³Y a[ ÖùêÙÜÇ€.>úüZÜšD`2ª{ÝÉi•rZ5»ØuÐŒ/Ñà &5§ƒ:lVWì!ìÏ¥¥“ƒˆsh‚®IÅÙ*+Rò,u+ËtŽ@î+FMR·å“ƒ´íÿAA®A¤Q›÷.¯£).ÎÞs´RR9w7B5û[£’…* öøÞ²kókšz¾e-8÷wÜåó:N=ýû„ ™ÑŸmåß‚\P¾Ð¦©ðwÿºÚj =çe„<öO}€¥¬xYªWƒK“'Pä©•ò Ž·s™žBZ©ëàßà;!‡gÞ@Ê­;lÄѧmÛ9tc”÷Õ§óv6є⬬ñ`1úŽ £Å%'UXCÖ{Æ5µÏ6ÇÂFEc'µCI’½^B'€NÜ$Æâcô—›YµÔ.šäËw3r¿n;Æ"y îÑd²Mìîì'H–Øhcq>ÇÆÃqÕƒg‹P˜» Óç¼_œ¸·Èêë ©Sõ“ÙWk* |bõd°€Å€)›­b¬ýðUϨÒÄ×¾ÉvS½ÕâKÐrøi'£¾Ùµmò˜-Û‘šî+BÉMdpê Íqºæs˜RRGÊpy#›€4}¬&ÿ±ø/?;؈¡ó{}˜öV´p`†Üm¶™HEÃ*} ¨T]÷¯úô5DlË€»•çzUÍ zŠ_1çÏb‘4yÌêÙÊçP¾–ׂNùæëgs©SeŠ…9„JøÞ?Zø±±lÎ\Pªx#“Bòu¿íyO_»÷:bÃhW‹(O{âıb)n–Þ´5 ôV# s‰Éµr(’"ÌBt™Òpã+hkU¢ý¾º˜µ`ËàZ„û>=ñQË")`i ‘[PbDTÀ´=žJ¹hýܪ¾ìö¢¸8q1À Au¨™û C„ _߆őïkÈvÌ"èðëx\aõlb¯6>p”J¹¨·Ñ +«3øûǚοð@'%™$·å6œ>Ozÿ·Hð`·)Sº\†b›ÆvÑ\“ŒtWŒsÁÑR˜XV‡Í:¤8Ø×¸V³›+’[ªñcö%¡cÀÌé×pžÜ'R–ƹÕìtC™|±Rþ‘Ow²îÎJ3Yd÷¨ñ(6#¾CzŒ™ œîø‹ÙgEEì^²•_¦¶²ÝЈa¤!{jÜ¥„é ¾:{àÀoÜ´o§­÷Æ<¸\Û?¼â\²H7$… ‘V8᫱ߴ<~Îf ¬|3M¤È,žx,ÐaiÏøyü1æÈ=ªzàH ” ´Z«!jŠ¡s [7R&žê¿ÛÔDA½‘<ÏØf.ž77¬{L&|A)yºŠ\²ɇ°[ ÇTFoös·ð¡þ†¬pË«#^©=uÊîD´¼•<]ùÕÁ•êÚx´‹r˜²§ Ïé0<·”®²;íØˆxóÛ`îk˜ôa?ƒÛÑ^í‹¥iÃpQWT£•››#ât¾õäBMÝŠ×c!M[sn#äÞˆaY–wfS*%\.˜ŠO4O %lj&ñj"x’‚B7)­Shpk¥Î"¸¬`by;GæË 6N›Ú؇Y¹_tfèª}悱Ó_yJŸƒû˜¿Ô¹ñµ¢a«ÒÎ{žod…ú*i4¦ñÛ`vF1`©-ãßsã¹jL0vF¿Vó¬må$#û¤‚ “ˆ=ñ²õ,zÆ>%^›Þså‰ZbÉ/Öi<(~ê9ù’½UšÔ„„e»NÕË*,jyhJaÔÀ˜R#ñøœÀøM±Š‰6RP6Õ#‡S`Ôt#o–†®W9|2YækQþg“Ö`Ú.œªô´LÆ&͵Ê/\`¼~íè$P=:D,ˆ5ë€g´láYä¸ô’"87è8ÅD\(ö²gÿsOX°^0J_«/m“€EÁy“Ý࡜v{N¬V ÉÇ)Ì;æ=x´±åÉÄL¾:ˆK SÜ—åïAzÚgÌ“ŒÔ€x ¥±7¬+x†ÎÂìÓúªZvÔô²Àœòë#²3•ùŸÒŠ!øî†I\ÛFT>&¼š¯LóÙUÖHº½ý0 ô‡—÷_5ž«M—‡.9q…Ä¿äUÊPœµ$ûØÈS Â")b ®GlÖúýu0ÍKpQD¾×uTv7Lû|ã?ZöiF›ªX­ÝÅfcJÇÑR÷‹‹’^Æ3v®uubmõ%§Át33Ï~vkrjŒq¾§ÒΣiẔ30 X>¢yVæÂöc]̧¿@×ì}Mè')\sÅ2¶Þ¡«¶†¢ð{?J©;ØDrË,—d;Õ´<‚9OjQ ÎÜBb:¼]úA MîáP1é]Åô¹Èsõ˼Á–cêÈÓ/=ÒŽ]°#ÀgìûFº¿t'c ƪÌgÜ];°WAØÕÜ×›lƒl@²š–ê- ÷ÙÛÑ,LF 2%³é’z©QÔB^¿Ñœ…kÝ39cÕX¥ö8Ú…çŪòÝ^øi…rsÁ´L±8”}$N¥`3t½a˜sžÆrv¨›¥['ë”E kø óW*YX=ÿÖ›7¤˜»6§{K±ÚøìÊçÉŽšŒk.î–òî§ 9Pøïï4‡Å#Hý.²ü»— 9fûágÀ½á³½rq&¨>5)Gê]|F!ÂQ·ÄáWVÌc[½y‰òÀˆsÄl'=;Ã9 bÚ3Œþ~‹,ÂÆ1z —§ ¶’EﮬõŸðªÏ‘qá.#'=±ÏÌ/¸ƒ0O»ÍZ5~וÊŽÝq–‡¨ãZŠb#ée΋bL±Lµ©¿˜B©Rr‘аùì°ì®ÿ‰ƒâòÈà¥A«qÀ³áSmXÄ/Ž`³]£Þ ˆŽ¥¥3KL;O³¡)X’ø+8þ‰>$@g¶ïzþsºë˜µ´‰á’]åøúý×òßgveÊ<&#ú„åi£É ÛXC¸“½«•'CÞ6¶‹Ð#Ò D­èf ÊCfxàIôÁÑs˜Ád½?^ðe¯Ûc(üfiJ{²Pí6üÞæbaªÏ‚&ãÝCPz¯ºdw„Ÿó$tÓ(àÜ V ¡Ÿn[æ(Âïö'­Ò¾¾ªœþˆ$ßî"MÐûÐÂ>r¼Èè]-ožÂó´³gD0á®q¼fR±fDd_Žˆ)ãÿ!ŽLú 0J žÜ6„AБ†µÍ°èuòÞÚ·x©ø³ÜÜå¡=íd%%âã%-ÂÆO 7ÉdŠ£Þ‚sŽ¢=³ërÙ3Uu‚h a¿Tf¼¦é ì­š‡'B½]r›®·WrIݼj&5HŠJ«SÞ>lÝ’ú2‡/"½æ8ܸ+¿>v`lûìMb]È.h¨¯–K9.ðî ~½¸įÿµ Ýˆšažï?!‡;‚Û´—Í9ßc¹ÏOÂõaT‡®:ÄêIË©;´¡\Æ« ÆÕå´ã#Ù}°^M2 ÅïTÅ Ñ::Gñ' ““ìě͡0çýÌA ­âص޾K.ÂÏ­"ß厄ÙL–|ý¥8‡ûà ïng¶Jñ³Q0Jy—Ù>e*Y6oWlìù6v7Bii¥‹¢‘_”×ñ6.úC®ÐÌÁ±— *››…=É) @GÐæÒAÐO‰“ÍÎvš ës­Â³ïjqŠl<äï³ÈT*¶É²KkÓŸñ‘¦O~WŠXø¨˜°êÇÓ˜ô@ë•«OUß2$ò#bO +ƒÇ¦ú³'â6uÀ·L© «€ N]7X?j‡„ßw<Í@ø’o/S‘g“ýfˆ3 ÂMAKã«[oOO˜½¿I|/½Üî€àû«]¡áÔü÷±hñ©¿ò›¸¾*}f`vˆ1lí8dìQòûIÎ"Äq…C¯u Ç\`U²–½UNý-ièw#Œ»›N›Ïìi98dN3êÌý®ÇfE¶()ßyëãn"®FH–¶þ6¼ ±T¡ŠðO¦i×Ä3aþ:ÞÝÇ Ün9Sš¤éS/¤ ¹°ðÔJÞ:©ZòÀµà>ÞÍPž>³ÄÉç£ý˜›e-àÇå*ÐÊñÇ'Éâ_Ëòz@KlôyeŒA£lGôÈäUxºð}¾tÕ)~_õ'%ÔåÍ"àÎ÷4â«V°¥Êa0ą́¢,e3ÎÙ_+©*¥ˆ»m '¹%l™—)z¾5Õ\ÿ¶d~„)~(ZÄÆ Z`ÚÁ:Må_òL}ݹaöÞ¢a\¡ˆÝµæah ò˜^Õm©ÛÂLÚô&a[ˆ£Rt¶ÎêgŠ Ó[à‹ŠàaPÛ,l¨¶Ÿ@LËŽymÐ ÞÕiƒmšS‹™”V®“vT)ßÏéõtáb#vàIöS¼Iyìã_Ö¤‹ŒQ,p?"7;HúàÖS`ò·EœûQá¥{¢ $?³ðíÊñÑð%£Ë<%kÌr©$Â!¤`Í$Ëš¨OBÚê< € À9q F{Ù"àßLKäÙöQˆÛ@]yûM:ßÅ´¿æI?}Œ>BK!Iô+¾9]õ «´.Þàhš¨¡xÞ–ñEV=7nµu ºlf,Qæzï– ª°ç2|ÚíIoªéñžRoF½@½XþÄç—耈†˜Åì“ÒìÓVi°!÷6C7¼2I>Ïñ´ŸPc}¥x$³~k¸@;eÆ’³ñ.ÛR@5¾|á=¤çRò;}Eí±½u½%?Žh:di+½¸yžVÅEör ¿áÓHŠ«Ó1o« pVٳțž -m*!Ý¢˜.W^ãÏǯ­‹¥Ê‡:Ó0&h¡k[¸$`ޝ»ç#™”uJšÚµpXUûÇpØ ³«Õs³¿ €Úq²¥t½¹‰{wbéÜ Æc>l?±È"ÆgŒÎãIcŠôÃGĦí>É÷¾“\ЦSY;¬ÝtƒIBíø2e0炸…¯Ü ~ÐFÖeÐ÷ß’*4¤kÑ'ã1FÃX:}÷!Ï•DeežÙ‰˜ÙÓz.-TPäÒ²PçÀ reF‚€Á$¯ ”¬ÑRBO|ØGEN£T¨8ñEÆ–9éÅ7¨£•¬‘ x Â|MóF²¾ø»²Xð´‘#Ö·íŽSÇIcÍ WÙ5¥®n¼âØ?d)aÉ& )•ÑècÕ²OÐÔËwEDbyG+œaºk„ä²a»xB|†Ÿ|j&\Ó/hæ6¢:ѤÛÄÍ}Úâ&аýV¥¸iÐ)bkêB,D~[$:ÝB%ìí±ÉÑ}¶žx)¾åQ2›:Àrª¿ –z34¹¶1Žñ0eý’~¤êKÊë^ æ %1öįý[oZÃÔBåƒV 6ZÙ>ôÂX'ÄVAw4ÄÞ¤Š õ>‹hð;ƒk{]~˜k~îÝ*署C% ¢‰… ÞaA Nr5ÆÀ zå¾Ói– ]ºM!ürïñþ4Ÿ­BÒö«'ùá;=&2è‹ò›Vóû`!]V_Aûïçù'2]á3uwI½C¾\’¬V!âø™a·ËjòÄõ[šäZ©UN¿hYõí»o {zx³ØìÅ¥—.TʒϮݚ"î&f<5»Ë韑±éê(Š?[78Ή<ØlpçÙa/êíÀ&·ÐuÃ<1Y·‹r3)¯mC3º~bE6adL\gzÒâ#5ö„ ·-ðSÕ”e,YMøDmç‰Nò7ä‹sã ö…jÕ¾ ž/ð-×q+ïŒ} (¡ûàþƒ"ƒ‚sfaõ9øñƒÔe%6ƒ•øásè'1aãøÉzßlT,OûW’]’òk-\¿ôêÀ–´ÏºMsh÷ H¢pñxL6L13ûÓ¢_w¶^qÕX°¸[iå;ºw¦†q‡fLAde¹KÞSRÜ›ýž K¦‹HJÍányz2Ax1³Ô+>gÕ [Éê‰i¤¿?Ê»º¨IÊ\Fò¸dÅ7Ç$–^>[Ë€ïåjQå°$û¥TÊ|‚‰âã{¦«ª´è(+9ß·…­ÔTSšñÚZÃteæ5IûL$²Àò«š!â ȸ®êVðJ£0u¤?°MàxÙd £ÓóDPɃàý½üõÅ5Ð_ÞÛ^X²4bØå#þ!£:oÚÏöº·]ä±I}’WA¬N™ñn¼¾aDŽQÌs›;òQX=îâß°:ºùK!{º Úvµ;LJÁf:;ht¶t‡³Q¢¿¤êðñ…¾ñ·Uó+‰¹ò~[…?Xª‹NuÂîô¡Õ쑱`N‡zÿûљ㱸Ì]5ãõ »±«‚P„ûUe ;¡{b'œ!}ª2@‹0ªm™Ï#Î;M7Uz²D¢7….j¼-óü[ë¬&«è¡†I .\'ï3‰£µ@¤Ûñktx*/عø¦x[½&7V¸‰¯í,º<\þÔN×lÕ³g­ô˜ Y-ùž‚É^bæ·úåºèò4§_Abp×…JÑB%;¿Ã^/)ÛB:è3ØR¢|t¼ ÂÏú"q)(|úÜ÷Ð=fQµ>¾Ö# {O)êïeÔy¿ÖúùX‰¡‚WÌ0j¡7£¢B:ú>SvK&^ÔZp,wˆs>U)q-•?:©3ïñZñ”ùîá/J*«J‰ˆK+ªÊB§»½¦E 6{휅]>?á·GQ%.gêê˜*ÂL N‘¾™7]bÏÕD Ÿøv-TN$Àš#¬ÏÎÆÞÓ™Ù»üž>‰Hóù ëÁ´õJ4¨\ QniÕ?N bÈRƒÐáS·-„¿{“ïMßÏó)Þ[žeøÖ¦vTTÔµC¾V•Ÿ³}Q‘•¼„N¾Ïž…‹Ý\dAœ~±yɆNP‹ú˜*†#Îq]i¸É~©íOÑGç÷ÑM}£ -FܲߓدlH~«’1ë-ŸÍ)ïÌ× ?F:b"³òøÂ}M2”e©*À´àÆëêSŠ*ÕC?ÈN[¥™ >ˆÊ…$Š€Û&j2†¾xd‡çk…$}šDQ_Bolç?«þd“ÁbÞ!z¡¹´þ~•+¤å¾ºg”HæíšÛý|ëŠÔfÜptWY@Rï9+Mð¡/Οj\Zném »‰MS—d®@{üÑß<¥¹Jwy K“è8Ä7´µKE§’üðHì)Ó­va(k–ö©I˜Eûé±VU¶?Q:Œ“OlÊØîˆAĤßèÞg$~(â#¿•V6ǣȧyùiO øµñ¶x‡”`L‚Œg¤~zªmG}ký@_Ú=tVˆ¿ƒ‰ž†ÕäjcqqáGׄðs¼˜µ“؈!Çß°[ín¾¼ùÈ© Ú (òŸdógNŒó]ª*â»ÇŽ)yˆŠÄOñüIRHó!ç‡&ùSm«gáÕZìÈvCW=™˜&O&„ÖcÿGÔ„¦õÈ_]10«ì7¼–:{\ͼ¬«Ó}¯§c”T3\™fÑ:¯8mìÐ%â¤G2KWê=ÓP>)†¯æŽüPŸ‹;Ý™À&Ì`ù,å8e°bº ùÏîÄOñÝ‚eE!¯o»Þ¾é¯J]áÊeWÐÐ☱1Üa†4Œ¡7ÞÚSnŽŸÔ£•ÖšKî­¤y¶Þx1ñ-ˆÞÓ´^®„„sŽÖDPæ,/„1ô+q °õ¦çèßïóàáu?K$꾁 s°è2—EšÕc_„GÜ+©^†Édì p‡ÝDq­Ô_-X 2ûÃ.§047ÍLJ™Ü‹X†ÐË}i×0u+;2Œ€Ë©!¢&›*¤ÙkJó"äx³ ÀØ\ŠÑ/ÆïRRÃbª‡é¡0£ÕÏâ²Â¶ qÍ¿Š9Åò¸Ûª]xäN–SÎX§ß‡é+=f¡%Õ’´>(ŸG±nsí>cEvk–á¬=-Çý”™s@°vÔ=j°_Wº_P(]‚¹õÅ“Ê?m]=ûúà3˜¬%Ûsß>×kŽÎ–ØšékÚ1«Þ£¯nd_‹qØ-Ë,ÿ\Ÿ¼N€’˜ïËnDÖ10¼³§/ÑÌ2'2)kØ‹©µÚÓ´ 27147TˆÞÏóá– ÂüŒƒ±Bø!D¾ÁaÐ#|è+pÓaBìºXvºšè!0²nxfr‚•‰PÝ$%5§E~¡S£(IÁ£ŽÇzܵw_*{K­“¸x€I¬qž$?‘¼’£KÚ<’DÖ³øçÆ4tÔ¦£Ah˜püÖ¥*xGCýÕ°Ü|òçxvYK<=µàMÅõVkÿ±r©r½#À«ÃPLû„f8q”äRôøë%%PF­[0>UÝ’XÎjÁ_€y2ëM)?Zšy5ûBþ×:›´‰W©¿›§Å¨ßƪB¨Ž„q[yI_êmpt;Gy6!Qd–z&_‚/´;j–51¸Vê÷è°ƒ©£¼Ê„#».e(Nb­tQ¹•kgsÏ—¯Öd6 ÷Fýß3ü}ìÁéÅt'ãØ·‹N„iîUÍäË5%{›ËŒ‰àNJâgét¿ð-ò„ÍD.úz/,÷8PrÜÆ¢Æw½É7Aî*X˜§’ÃdÓ6[aÏ^grªðûÙš6·Ç]ƒ±ÛÑhë¤(Ô1’ë‘GÎPe3ÂâEk$ÝcùrŸõd×®¯¤Zι(‰JÆš<ÝHO9’ N‰Vµú>/¢®aõäºR3—@é>K~ð´JÉ…QB1ü´Yü7H7¢Ý‡'¸© NxZ÷[]Û£úúù£¶ŠÖF. õ•åŽÆ±Æ´ Ïüd{H V£Òï‚d7ÅÏŽ”ŠI«KpŸ…ZÄFT׎®›€#>[é‚Tø½g&-b›mæý]Ôgóæx3Ç_µ³ë‚ÕÃÏK©®Ý*º›ßœò°±Ú‰+¹q›1Îh/6ibŠ(x¯†¼LÀ~õ‘Z¨³˜ý¾úÈ4Ÿß² Ëßéí%†QCñ ´…3Y‘hºÅ5 }Õt]ÙçðæËSïéH~³®ÎåW6¦2Õ¹»DE2ýÓøÅŒgiõ8…6ð®$ý‚ïŽé]ÁE[ê«`ÝÛ\ž¨MJßÚ¥!àøëßjš² Š%8gõÛR Òõ¿~Ÿ¡Êsú ·¶=üÛ@Ö`OBŒÐô;xËP=™d‚T# æñmªmŒþ\½¼³Š:?ƒ ï— ó¦.Ç8£í¤“GT ãSYÚÇš¡ÔüßøJëW…­2_bõ¥|ÉåWÈÔ}8ŸA<ˆó;ÏU?x˜áˆqw÷~ 1)Pî œêWíSL=còD_6—imÕ¬#úï#úÕEZ> œo¨Y—A†RÙaw±WyñÄ‘–OfãñxJš^³Áލ´M{ø…Ì0®”ÀXb µVÄŽ`ë—ÊWß.3ty[~LóSUSbôæS ‚$e :*b/µžÄ*\K÷ƒžG+64¿®Qe*”þyýõÇĈ¨‘¯éLÒ®ŠnQÓ8Éc]Èç13>S˜…¾èl9ׂ=!ª5EGÚ°‚9Æ+qË‚ùà ™öêþ2=sLPjÙ/²¨æ^ÒéÁÚ(U/̸Ÿ ‰ÚO]š8\‹>îÏm6|j0(ޤRõÉ€q‚…ÔV:¯ms÷ÓÖÉ·FóaVS|MCökÞ®+Œj8÷OžºÑŸRë‰ê·è=j–=¾ZÁ¼ùg4Ød0‡ëÞn VŒ ´–6®;V–â€ß HdÈrW£´©òCU³ÒÚ•öú5ýTÐçîöÂævS>qÆ7AŸj=©‹~¼·›1ئð½)÷8¶;N.õ ­V%fÛo‡²iùíø¦KZ¦¢‘xYëZg×;!àœê°vÎPˆ*·ÖØÃ"21Üt·huó{Tº>§Ù’ä ;ŽÁù˜•)öúá;#É̺1­älຮÔcØz˼F©¢ÛÝRC‘IHu-c'‘ìRRȪ¿ìÞŒóB§}‹žlÂ÷/•a¬ŸÄ®½¬˜"Îx= É"y£[†Wá‘Iñѯ~(áüöz 0¨Œ ’†Ð…–^i`=­43"‚“¼Ü·&½(Æ«óÁÈ]\> ü±(ÊÑh£äX(õ%»âfº}ÎäîæsPüZ;”¥ˆˆoïêNœ“óg çÅ7jð=¯K¢x“öL¢mý°‡n9)Ÿ†¿ôz5¢F©ÔÃùÎ-ŒŽö)|Êüæ#tlE'f)‰Nå=Ñg+t벓µ’ak§|< [’“dÐruˆŠbbGû 2±ÛVy'xÍToà ƒ:.ë±£ ä½èx©ú3Ÿº"t$~kúš@îÝ&î a¶ å «p"Š«cŸD«½@_xM¼b=~ü~›çû­#"9ÚH¢ûàÿ× & endstream endobj 2805 0 obj << /Type /ObjStm /N 100 /First 981 /Length 5146 /Filter /FlateDecode >> stream xÚå[Y7’~ï_‘»X8™¼IÀÀ—Öž±=^Ë· ‡R«$Õº¹»äc~ý~_³’ÕGº½¶1‹YØÅf2ƒAÆÉˆ`ÊMµÓଠƒøë þz;ØÉ¡ò`}B'¦Áf‚&?¸‰°ÙθLèdÇN|œNЩCˆ‘0蔊NÉCt˜i+:1ÎMiˆ|ÔCr˜î¸8–qλ!U¬åÂ4dŒ¢S‡ˉsJà‡âœýP±V©XÂku\¢–¡&îû­ûñv"]•½ŠiñÀb§šOœ÷ –¤;"z +ûÈ1 r+ZnÍyk]J$c~Âê+[Oð ,ÃŒÀÕøˆ°ŸÈ¬ÈÈbÁãÈ@‹¹)b/Û¶ ¼rÁsvØK=r3ÄæBÌ Ê2-`![ȵD:Jû“\%ßhk,ìám­À—"^Løy3£.qC™—r¦ I…b'Hª7ù—I*øz‚œ%ϱšØ#K¼ÐF–¹p“Ú!K¾%\ÜЃÆLÔ‚âÊà£@<>$È£•O•cŠÏSdÏ¡uEÏÁ‹‚íAøRÀµh© J£,©&ëen‚9Á5²tªXÊÜA°èU鹡XJ°(ÙŽTh*Ÿ…ʇš©C%'(¹QÀ?;ù"ƒÍT  Xi6€BѦJ±Ô(Ë ªT¥ž•"š” P(¡R¨7q’n¡ ‘»7th¢, ¬ÂÆXÒÉÛoŸ˜÷‡'P5Ûþ|0vû(ü˜‚}zò—¿Ü]Ž!»5ˆG?ù5çGëà „­ÓXS\ƒÈv¬!¯AD7VW× Ü4æ´Pûèòb?¼ý6ÞÂÛØÒ #øŸZÚ$¾ðóSÌgW—§·ûáÉ`>{ÿÑ`¾Øþ¼ؾøåõ/6/·'æ=`Þ^ì¯éþï‰ù|{}ùæêt+cIÇ>Ù>ßmÞ½üyx2a Ö8:H:7Ð\W@s…þˆ°Ü{k¼)Æ#ˆÆìó„ËcJe b*cZyŸrý‚óè­[ƒðe„—[ƒ˜Ò8¹°m3âDÊ#Lg "”±Ø5Z¢«cu"Ô<Æ5RB‚áØ5©H î R³ym_رÆ0Ÿ#رÆ0ر¦=pM`Çü…ö¬ÀÑi•xã*;äæÝ;p(n•FÆÉ¯±Ãæ oµ¦?6BêµÖ×±¸5ýù§x+ën{+;ýnoeí¯y«cˆ»¼Õ1½ÕTÖ à­Â@*uôÑ­Aäit7µé"Úqªq ÂãÜJk¤$ëÆâ×v«ó¿bc,k¤ÀlnÒÇv‚c]ƒ™6Ö  öɦ5‡3bU²aÊ#¢Î_ʸ*zˆùÇ„OcÊkÄ"ƒ¯ ªõç‰yüæÙ^9èO̧›s¾C8¨«~²Ù_íhtãd'‹4¾®ÿT¡ÞÃÞ²Ã[Ȩú#î|ÚÛ1÷~sSÃþßžÊŽí®®÷ï½Ú\AŒ'æãM{°6Ÿ˜¯wÏ÷¯®5\_ðÁÅéåóÝÅKÛeˆÐ\àZ#øæžÄ0梛þÓÿ›×úµ¿s¯o1̽§¸fš¡.»/¶ðväë“Í™aHf¼¸Ü?ß¾@øo6HPjYF*F˜[N‡!;Y³AÃÔ³ôôL(ºÁÈÁÈÔ´,”È-³Jk—×6p00Áè3ëã¾!¬ ÜHReOÌ*l“·ìéðÈ\ÆæÃ#Ùrx”¶%—›æG+éž=<2gqîð(éž_:÷/ô{ú/GÑ}Tâ‡~݈Ì0€ð§È4Zœu¤Íä!z?:ËqDÖ ÂÉèÑ"@Âñ‰p 9Bèd9ŽmâI|˜"f9láù"Bó!!îCJ¢€}â¸w˜…¤ú€'I¤™Â'7Æ»ÿ8ìζ6b ÿ´=NøPì@Çû~J2`Ê€ ã™)ÔP@3Æs!™»‡Ç%ý>‘æˆ`ã5!Vr#«YN‚'‚I=^OÖ—iâHPà2Ú"}V,&YÀ/Ëý°Â¬È®kù<(I3C "o.BÅ LJÔ˜)R>"wŸHõƒ5AâäQl‡êE 7Œc-ÈÜR›}ªäš/—¨x6Âç(?yXšR9kyÎ9§í >&äÄýk ®:![þÐÃ1…­­U._ü$¬–Vj«+V†úˆz³0â©Nô;Q¦Vt½P³+‹1àe‘AqMpˆ¨ 7á3TO©ÂÒ2U ¨bDñ.˜\ÅPDý³%3h e‰B‡‡çPÔ~O{jïh;¾Eki·Û&‚Ä^¥eá)Þ´ùèéxÅúΞÔÈq&Z?âyßúÔ”ø»ZÅÓÚLMÔµb.âMØêHÉ–Dý*… #ƒÑWÊÍ£& ËYâ®â‡ dÍìå(Nm¶« ­_aP ªˆrD'Ê.PÝrbKú -2m€6^ ”µG|éic–ê(*Üú‰’ñ°79~ƒçÚ×÷·ûi­sÇŒøÔ –æîÑ~Íe´›°<+7µ½Ô'º=PûÐQ¼ýÛÞ6A Œn@õ¦iϲ]ž‰u’Ó vQ蘣hyš&‘¼ò”2±âܤ¥ÑÏó´+3l¡7H–ЩD¾u“œœ“8q®OWnŪ¡–N":qî•ggͱÍÎ 'h¡7¼ 4jǶûÐ_?W}ŸøÅC/9ª<í ï9XÅ`.rî'át)äl-<-ÔÃÐÞ`ê #5A% ’J\¼8*Ö X[–N6‹ù$9ý0"þÑ*A«p!ÁBÀ‘Ì´÷_á‚¥Œ0fþóŒ‚\¦ù£Í•yÔ&Ó0é &òš<# @D×ââqDQ( ]ý($‡æ90*î¸x  ªáÄz˜¡ý‡´í\ï㘇O~êöçþ7ýÚwkwMJ¡’OÒ®LrzŽêPóÒ¶†/ÚjñKët€Ð åijTÛŽÈ,¤–x*G˜ BqÇa¢É9RÎfIb(Ñ7CGÀ$®!MRÕРcžˆ rŒ¡Õìô¡PŽq+TW©‚9É[+ûeÄ|ŸÄ±ãl"éÓt³qbÚF:¦ßðëçæ†¥=õ:3¨ŠlHD¢Álæ]dFcÌ…|(ÂãàÇD (‹ÊUn•Ä¢L^‚¡ > K蟣ÀIˆJ‹ â6KãlIq@±¹p¼¦}»p%ˆ{§-& Va‹^0Âø£”ö/¹ÙæÜäèE‚¸ZÂ%Øe‘ ®ˆ…óðv"Í,þ3p;O´yŸ4œY d¶âð% ¢·hO\¡¤ ‚»ŒéF?×*ÊN_©—Ú*ÌÑÛ@>ôØ~O«xúV× …^L[ÉYbÕ–.¡°by§!3˜Øà|V¯he¶“™Ru3§˜µUž`^îpÒ"_¥°ú¡$È{6Üî1 ˆC”3Zzñ†îmc/Ç$š×çrØÖ©ïùÁ]E˜Eux£h¿ÁêÊ‚‰I–@#éA¹´7Î/öÿG¥¸}r{töLVôÛŠ•'‘‡$“õ6¿){Ô¤5ÉQ\¼Ø´@z±Ì„]Ž IÉ‹õ;Ñ]I•³`h}IŸš¿V­ëJ‹ß èAÑ3ãvÿˆUjz™q\ß÷.´£z†iÌÖñDEnì)$¥+¼ÂÉb'Ûòìþ­$}53–ªI™ILBR½„Œ@j,Q3ÓR›sÕì3D.¹Íe15˜ÚË,&)LâêÄVÛcrôsPfñkôísŸdj¿Qæ4vu# Ó÷suœÉcº*†’G˜% R@òA|&"Á*ÌY?r÷f½•C`>æ>íH¥¹{t^ïÆ }¬·õ;A ")Q£¶¥×s2£Ä*Ò*„ª ¨¶Ý&uµ\‹ÄŸâ€œzhFªLC€…Ò8¹yFi5îÆ™-wr™7Ÿ Š¥¹2¿M5rªþ$)pA’PGsÓ"5.%!S’NT£'õ޶cY Ìnµ3÷û€à8,ÒùKàCÇÅ œ#Òo9˜¾íñÄN6òN {ÐÕ\šk)ÖÞäî ^}‚Sÿ%F%Ahj5žeÏ ƒfmAÜx>„ÊR‰h¸´(—¦B-°Ù ^ »nKÁ8Òõ:º‚V0Dšdº¾W½ ?dÔÉ~œà*3Ýa]f.ÐÚz¡ŒuDÿô¡÷u1ß¾®³‡Ë:{ÏUOz°ì}UçÓÑU]é®êòí«º|ÇU]î®êî¸Q{ðÕ[׉Ëßãn7Ð7w`º·¹‰ê渰óÉl<Ϋ|¸»}…—0’¨¨ËHÅ~ȺòrÏ–Føóø1®\Þ`ùeü ~˜[à–¹ó ³še$`Ђ¥CaÅb¹JÄÎ*rÑöu#`³î×ÛÇåâ~#Ÿ;æùâOî"³oO‰Oa¾}Lòæ|ù(ʆùîQ>2óÕ£|@æ›Ç,‘õ|ñ(_OÆùÞ‘ß´–8¯žycçÕåÓÏ8ß„Êç©qÞ ¿]å·µíIV˜÷Rd…y/U(:º]µ¿]MÓÑíj²G·«ÉÝ®&t»šÂÑíjŠG·«épQks>ºlM‡‹ZË §zt÷š—‹Z.”Ÿó<‘ºü|!~VoªœoÝÝÆ­¾&mý݈âÒ¶Õ¥TqWíP«‚í6AΧ~¹Þ™Äeƒž¥¾8c¤tRÚZ„îéP¨¾ª·Ô%)üöªg_ñô‡‹¤( m‡tÏR£mt!]©­’™¥&['¦gäs“5ÊÌ*w‚¬âfIbfQH½š5ÛúE«`ÂøB-H˲ ·Êk=ÜJéÎS׿IUŒ³4ç:¬ôùMb'Míe¬7[Ý]Ï<ó­ZU R=UÙôo›fI_ÛÃ}b./•ï˜~o«xZ+垬Z~Õ–Ï,Di9QŸÖü%Qa+HÕÞ Óyw+E!‹Ýæ}b9J®žÈ8(R&æõRl}æ<–¡®|@GQ«RЮ¶g5`ž=E¼‹­‚TâW§ ÞyÉPEmÜB¿ŒV©TëuŽ”"eÞV߇(7²2#,PòN9¤}iE^Ýý€äº6Š´-Sé}ˆ*¹ಸ½ñ(¢g 4"Ô$'°\(E?Õz-‹ ^ßÖ8Dóm…Óš ü1—è†Rê¢3˜®ßÌIØË$uXÊSÈ‹è{ ”ƒ¦""†IÂvI^kÇ’F —%ÉÑqÁ ý¤³g]°i[fa%H“Íäê–Ke¶Ïõnõµ‚Ú犊«t L’ßøÿ’\õØù\õ:~jò^2€%/ÒeºüªÏþäüª/#ôùUc|U ù§ŒŠ#nY¨EÖ.ïÕ´°ÛÑI[©ö “¹ »žÂð†?*;µâwxl)ÕЛ½Ž‚¬I£ëwÒ“Ñ#™ºGE<†nõ 9›¼ª*îmÓ$—õ£E'úºÇÿO§þ~ÎÕWR£ñ—*ÔIòf/oïûDÚv‰“xù“ÚFjmƒ(ZÇ™¿=q¢*ºB´zhÁ¨ŠgÖ¾¬/0üR¤¶V1öo}TõUlk;}HÛpvmû槃i_ÊȇWyWš#K_ý¨?Èzû.Ž¿¨yD xBKQ;LZ1‘ùm'GŽH¨­ ÒÖ*Und>b¾ö\éiÒÊLävxjü>Œõs8ª’S 5Íéø"øœ=H¬iŸg'ýrLüf~ô2mŸ\Ý C õM,<ð§3Z«‚ú'=ŵ¦Lßê'@ú¡¡-dз2îýtÀ£G@l·•ù0·µ6íaÓ˜^úü§„‡m“Ð5·Ðœªõ‰{–ÓFka1uºÜΔ©ªôœÄ?QÈhòT Oözþ¢H•jJâ\ÍGUÔ _lFù€b:’ÆÍ’ÛûÛëÓ«Ýëýå•ÖÏ´àöõ·>~ÿѼ÷É»¿µÞœm^^¡/±½åÒðVå¿v…jñ¶èé‰yçú”ÿJGã‰yoóúÃíîå«=ŽÖtb¸ß½e+Ð|´ßœíNß¹xy¶Åï·ç_A&'æ›6 §”ÖÒX¨û7³¹xùìjsúýv¶}±ï¯m6WW—?i÷jó|wº9ûwÝ죖p¥ÄþŸÍüùðͧŸüUÉ/÷P_A=ÿÕopL˜ÃA}¹ŸúëýöjwýýùfÿÊœï.Þ\›×Û«×Û úælse^_íη7Hο…ä/>úòoŸþ$sŸÀ#îD¥‹qÓBr"U&y𠶤ýŠß1ïš÷Ìû@s¶ß˜Ì#óŸæCó‘ù«ù›ùØ|¼9ö|c>1Ÿš¿›ÏÌg¯væ¿Ìçæ±ùÂ|i¾|}½;»¼0_™¯Í7æ›ùÖ|g6fs–]o.ž›g¦W¥#=:5§—œ{zy~¾1ÏÍÖÈî 8½¹~e¶?¼Ùœ™íϧg›óç—?]˜æþßáÿ·æÅ™yqùæÊ¼4¯Ì«_^¿Ú^˜ùoó½93çæ|szÄøow±5—æíkóšÿ®K¶!=Ýö¹»|n^ŸAÌ?˜Þl¯÷»Ë Yï‡7—ûíógg2e~ÐYò´Œ7c0׿zû#vr½ûÙ\Ÿ‘ˆ½Ù¿ºÚnÍþ§KóÆüh~2?›_Ì?Ì?¶W—7T¨þzôùw¾ûHUÈÝ£Bž*Äʦ¯Œ MõWT胦8C[>ë´ä+¨Ä3È{‘ñ‹&ÅY„‹ìn MåsÌÛ{¸z‹§Ë?àû³´þ endstream endobj 2893 0 obj << /Length1 1448 /Length2 6560 /Length3 0 /Length 7540 /Filter /FlateDecode >> stream xÚwTÔ_×.") ?ºaè. ¥»s`b†J:%¥TP)I i%EZZJBJDöCýÇ÷¾÷®uïšµfÎÞûÙûìgÇYk8Y ŒU G¨ŽÉªº·-¤HL%ää4¡< © 9Í H.û¿ªH(u¥S£®pº8 …öDÄIY)Ydþ"²€Øt…-êCÈ©ŠðòGÂ\\QW×ü}xœx)ß' sÃ]0Êêyu£Ø0F8Á (ÿÿÁ#ïŠByÉ ûùù =}„HE^À†rŒ >P¤/ü" è=¡˜ r&®0Ÿ?zc„3ÊŒ„W ˜îså†C HàêrÀXSÐ÷‚Âÿ€uþ€¿jˆ‰üî/ï_`ðßÎ`''„§îƒ»Î0( ¯¡#„ 0ò öðA\ùƒ}Á0°ãàwæ`@CÅ_ü‹žæ…òòyü¢(ü+ÌU•ÕáU„§'Žò!ü•Ÿ uº*»¿ðŸÎºÃ~ðÀ¿gâü‹í%l ‡y£¡šjA®T„ÿê\ (@IIJPoŠqrþÞÄß úÛ(òK}Å 8Ð á8_‘€Ü¡W?„>`_(€B¢¡ÁÿÛ🡈9¡G¨ Nøoô+5Ôù|Õ|$ Xƒ®fOýúüs²½/îáÿ/üw…Mttu´Møÿ0þÇvû6 JÈ‚¢ @DTLº:ÿg˜ ð7ùßZ0ì¯ä@ÿFÔ„;#™?®Š÷7߿Ƃ篕áþó=ÄÕ,CžGß$rºúùÿ^€ß.ÿ·¹ÿåÿ5úÿÚÃã·™ç·ýÿ0ƒ=aþ®FºZ ]ÄÕrÀÿjý³Ê·ÿ¶i¢ÀWË¡wñø§ˆ0  1€¡œ\ÿLÐß=¸ îƒC >°_O (ý—íjݜܯžŸ«Ný6A¯¶é?¯T‡;! ¿ÖNTB#‘`«Æ_I@ ÈÕ~B ˜ßƒ  Á¨+àŠ\0àŒ@þê§Œ ìôKõ[‰®ÿˆâb€°—ÚçÅUÂ(?Ä¿i@8Šü£ø¼œÐHäÕºþž›«¤ÿ–¿ P(êD83‰p’‹t«‰l9~©Âà'¸6¤ðsÍü!¯`à ²}JŠŸÁ[•¾ˆŠo˜›ã‡G(r‡²h¥òI+ ´ZM:™˜/7õé ã ³¢eÂ9¤å ¼½‘©E3XR÷êÙøDñ]ÿÝæÕýµÞ‘jH"ƒg^Éé2ƒ hg,ðC`Ú9Üü™eüe .K7 ³å#[¢P'¹{éa|ÂÅi9Ë!ŽWºK=Áœoô;¿q³® 9¾¸IÏ1ç9iÃ&®Á¾¥KD?‰în³Í÷]› !½.{- +ùÕ@Â`s£3È`òfœp´`QaºÝå7kvº^Šî‰Ï(åˆ.Õp vv¢kÇŒ¢ÙÐÝ “–¥K£NßÌü(¿ Ié½#‰ojñ'”‘¦»¬l¹ÁJý¢iÏ£­}ŽGü<QÒM¢îº‹“j Åøø-"›Ýˆp9Æ`P_½îY6{ U0ʤÖá'TòʆsW< >þ¸=k„ÕÒ÷3V-ú Ró¦bPæÕ¸$ëD"¢~3𿣮á¥ÀGìTö«•¬SmJÍy3ŽæœrúxõGRjoWÄy/ÔOÓùsk¯%†—TàìÏ?O„´¶×N¦'¤2¾.4p,#ï[Xèï…“Òº]4í¸ÙfŸ¼Þû9‡¨Ü¿/ìVf£‘…eq+à¸f˜#s)Íœ {˜wÉê ‚ÐK©(º—\ŸNÒÏ^¿¼ýÑVJ™ê–ѵ46,…錵FYÒÈÁŽ!JBRË›ZÚD™+ºª)— I]!š·¥ÚF^QrÝÞ8¸âU:†ôÓ)¿} ÝýåÕ”©~Ýu+,XöÙù5“äªK£|wµ*º] ü>qö¢G×FwXãÅÒe®¿ç5Ê'ü¶(÷u‘/—v'ƒwßG²´ÚÒ•›’‡¸êËêê'¬cùsœ-{.yXc­ÐüÄlíØÔ‰(¾\ì ü~Ÿ|/eâû¡ÜE¾Ùà%¤oâº=·=d¨]Ü:–ᵪÿA Jþ6«tÎÒ䀒_‚~$­Ÿ× dãI®ï0éC¡‚F\FðrñÈöåøç±ö„·îä^¾”ì ¼/¦´C)=í‡5½ÆŠ¯íKt)ËW|k =*óz"Î!ï¶zð)^w”¿ÛN+*W WA(}2®S´Ì»—cpP¡Û¾!•¢ð‘»Çs\sf>Žž‰cŒ&¿xM'*<Ñen[hx™;«4†ÒéQCðÏ 0Þf¿-ReE@°fd«®dìFU6}ƒ¸¯{@ˆP A§Î6š¢ š>&‰¤ œJŒIÈÍ~Aÿ¦‹nᕯ´wÍÝŸsL{´l7Vé bÅ>{âµkf™<Ù£œ¶êÛ'/Î3ûI¡:ÞÕÇ̱wˆé¸Xˆ°ªò\óñóõ‚-c >s¿ÛŠÇµ³úô–ýM§ê=ù?æÃ®É'm²U„¥ty¬}:D¢"¢¸#*&ê»D#¯Óç²ûžsÀ—?öDSïÞWòZ"£±A>ÖÌɉ"YôF61l®´ôM¯·QVWíñ²3µ@³ïïÒoj[ Ê€£´`9‡ ¤;ï±ÁgÑ­n؃­­¤G¯0Ü$(¸êq@—º$&EôvoZÒœjHÀ~üî2ÇO&lI¿Ç'ê Þòý½ÿ‘Â/¥¯É98Â3;ÍN»Å÷yZ×S[Àó¶LîÑè#,À©´—Þñጄ²!o U ×vlküæ3Ϙ†TèvÙ‹$)’ú)’N¯a\Ÿ³æ]ìó½¿ÛðqVud¸ˆCÂëk.AÄvµm7Az»UŒm®M®"›>¡~Ó¥ŸB"CÑmŠ$AËŠ,}õ †¶êøÕ'Å!Õ°€Ñxµ‚â¡Ütf¢x/“V’·¦VúO$ìºu§ u³ÏÓœoßkè¹¥Tb‡†Èå{v?0‡eçŽ5È<|¬¶‰U>º2³nÃýÔ¿¹»j¢¹f ãÝT7Ý…ÞÇé–ÜA)r%ÔVò¢.ÕãkµhkÕ>{†áF,°ZEó4eEo») WÎo=hžˆJóf$€(=Zñ½­ÝhÜ–î´ñ^b-žU¾|2ŒCÛÚá‘îœö^àƒS¹NÃx—‘ÉÚËm “*zBïRáàÕ' gyZ2ù\âb¶ÜZù}~ƒÃ2ÜÆË0ᓈŽ*Îão*EQ}Ö7³ ð²;_φå½.ê§é\Ô¸DßQõü^.š_ŠmJJsQmÅ~pdNáÉ^uñ~‚dá“ïăBÂ$J_wPl±QÕ|Wʇĵ¤½5㉆ŠÊõÜ˾‘ý¼ŽÔ£Iµ)»Úð ûSY‡êÁCNÍ;ÅÐU\Eqä¡È½!tØ4ÙýÝè~ w{¥á›MãT©ÑÚÅ™² ÷;¬çÙ+ŽÙA·ó^b39®“€IéÖj°©_:ÿ$ÿPÆNv{Ðì‚G+—q[:ÏxV?úiÄˉðòX.˜0ë§ÑwÈ@\À’Š®8{è¤TN.&­þ3É !®:B‘6âÄ“à‹õÒJs’Wxj¨jkYRÜ^Sµ”º{”2–íµI k„|ô^û’m&â+ aEGØÞã× ÒÅG ‰Ý’o­g($Nb§,OˆL›ó¯ä³ ¤láÆX[Arûijé¾Ò÷•ÍÍ|×áñ 7Tf?ôIÅ÷3‰#ÂêªÌ\$£ cäÕS7Mê>ube˜ãu²ß›ìC¨Å ,/¿^Ïô#üÎÜHµà‘þVÅuQüsôõwyÓ^Ò,ÛŽ~°›w2î&gߊzZ¿÷>‰ _!$"9Óâú0ý\#éMlÊ`c¢ztä£× RtHéyËÈB5Œ†]9ZY1‰ç󟌾^ìKG:Ï °˜yÜábØ´Ú­¨È zÎÊõ jþú—Ü0ã [ 1í…Z»äôë™^üö‡J$Gt”“à-!K2U–$$"@Šˆ¾j?*Äg9KÎý·½I^“Øž‰a7yØŒ¿ŽU±™0+Û¥Q_äã1Y÷S…JTBÓ'G3ŽzÏyõsÇnÒÜð¯só§ÃÛ˜Ù§’ z\PYªŸýÂÈæõ1xÂê¼¥"âXÝÿ¡S뜡ÖR!š8¡ýUc"íŒß‡zg¹žAçLž¥V.ï1Ƹm35!jPÂMJ]YÐ0•êÄ·/aœªY€’Qb*0ßébÒš¼ê}Ã3œ€}®Ù‘¡1YÄÑ]´2œ™Nß©À¼ø)æŽÔ)Ǥýue¹ú».E1YµÁE™êÒ_‹…?φm‹Æ³N~füŒîH¡Ÿ:UX›'Ø´ï2ÖIé×Üÿ˜T`Á50׌¤x’w:wl.úBÊ–¿ç•(­Ä£ïçv2ô³# eÓãF’ÈRQtù­6“ºzÅŸ ò 9¨…<QþPËüI„èÂË‚÷rn¡€'AÀT`HGß>ûAø#㇠ጡ;Øôc<»#,wÖGNFÅl=‚êäÉÑŽuÛqê ¡š¬¹S‘"T7bÌ’ÞGêÚ-èd.Ê}»e¹Ö³’>-u]âh§E…¹ÐÊæ™Ëþ+½9:ü–*6"+Iȇz¢;r˜ç¥ ¯Žþº÷Pîs¢wãŒðF¬ðX,5é³%/Òóq=ÿÛ—ò©óÆÃ§´q͵?Ñò'‰÷ubU"}5°¹ôÙ‹ žõ|=U"h̳z°í=ç975{1?ÓeZèÏ"-Òªmz'µ§¾úˆ1§ŠjÈÞÈõá©wH OSØiD,ëž_,¸Ýû*3÷¦Ù{:Duß?϶Lû6’çÓMˆãî³~ãGÒBEâñ’ª™š.$ð±$o¯[7‰ƒ·%-˜ä~Œå`~ªˆs˜zïñã'y_¶ µ%Jûp4Ú,–a™É^Èü[§?³ö#Ë;—^ǰ¹Ey_;ÅYœÌhm+Ô'/ƒ(4§×'ŽÍBe  CÌ¬ë µrsâV'IÙ¦4‘ šP{†?Ûhfåïp9±’MÆö¿+I;´“柚 Ò²Z[éí>Iö«(,rÆbTÞz¡‰ =.9¿vÍ[Æà&ѳÒmâoɨªÆp¡’jvìye*Jk÷—æÕÊ‘úÀ`(;EZ£Kq‘ô΋îÏÛÊG«Õ±ÕiÖ¸¹ÏÜõEÞ|+Ì,HwÐÄKO[ýðÙ æ¬è¦'…™B±OùÊD¬ O—ÏäÁ½øub÷î^ ‘ä/.–WûVK¨^áFEAºvôRx™¿~O_ÊÎçÔOæ-y©EŽæpÑ®…UËéAéSÖO´'èÛîSÝ},P²9”’|H°žåQZ¾£ñÝ1N·bñü¬ÇµÁÝÆ)’õ#óšã˲Èi·ã™ˆäýÄv,=Ý4A\¢ÜGÛ w×›H?ì@}í·ÞÊSגּЅ¦Ÿ_kl#°>yº›rwoïM²ÀЊ 5\sEÐÙðN͵ÜÉoĆ‹ôÏ 8Û $Þ¦{,¯rC¹«AÕ­É5ü S6Ïd¬Wllw¶ÃÍ)ù,kŽ[°zFï(Ä»y>ñéÈjÛŒÕçÍî¦d³Þ=þü-w±#C=0‹Ÿ=²ËäÒã‹ÃRÀ˜ "ƒèFcc“Ô›Ì#6V(Vƒ²„ųf¢ü¤¬³=Ï‚öl¨q%Oó •tlåãƒñõMZ>qh´Mš§]½ŽŸ(Š^*«,©5ÐéW/Rm¶ßf6íµja¥ÓSfP|)!½Sïam«Z.UË33•âoÅ|N¦Òc9+ºßuÁ¤4U2¹5…S}ÃÌ£†Ëø¾eо§¿³œCR—eT ,„oq[© ôÓâ¨c3NË—mI9J2‰$Å÷kŒýתðñcp‡Þ½K(È4Z\­u /5ë2{cyê£*ÊV/æÉ¥FÔA“Ì+ˆL)ÔÍ£š&Ä zÛH37>oš™ :ÝŽRCÚL V* ÂÀ†L§~hêi,:QA:2õK'—Ò{¬LpÆßÞ¿i¡°ú-f#øY­3óìîeÔ˜ØÞ-Ž•ž°& ð©\­6°€‰“q)ú`}Í«‘â¿‘ÞÝèÄ€OÉ,3‚ÅìÒm¨¬yCo±?ãpÔÀó0¿_gBML©ñ¥¿Çª’áçSȃà)ÇMø,Ea™§©h{™/§cÄ‘‚Šªé˜TùÔaþ烜œÁõÕžR3¯v ,Ó]z7”l¹gOi¯ƒÄ 3o*X²d&.ÿ`®õ?Ï:–ç£/TÉ…g¥}ÅîzælÒôC²(égíu ‚¥çùس»Ï/mu|³>êOòv¾Í“ʚΠ!¾µfmAeÕiiõ:v>¯gp+(_¥ïü½{ÁÏâÂé÷¨[êcã<ª[T®7êº2÷÷"=²…È®RÂéS<æö³J÷í^1űÙÓi:·AsH֥܄i‚ÅJ•µQ$½XXÊ5ÁêM^@Yex yä½M;ƒMœÃCb:1¤q—i•Š £¨äéEí¡f óÏg®/xHzê@ıTŸýă¼W6¼øùï‘MY(%cÑZ}¼Cþj)¬H»ˆ7ç(Ï?KT{°´—À*~ßTõH¬ Ù?+K›ˆ ŽtèÒ”¿ÖݨPîÝXr„8\gU¤ñÉßJ¦ÑI©ð lé¿8CT»‘Eu‡v½xOŽ0Ó¯oÃbÅä¾8pmþ‚ϹñÌ !<Á”âJD”æFS…º™êù»˜[»×iQ³R¿ß×#LðŽgh UqÓ•©é±sZ^Àó‘z&@‘õœµx"#Fv¶JÑίЖø‰…Ÿt—‰•z,g×¶Ôd¢¸J9¬Ä®…¢Y¡ßo‹æ®¦þ>]°ë,œwy…†òMôÊÛ›ÔÎó¸É ‹Õ›OôcIç›ä"ÁÊ„w ™|%0/’'›ÚËl0—rïáêÌ©ð™Ý£lá? )pì2®›YcÈãÞ3=¼?Ô@§PåT !|¼Ç¨™Î­—”bU¦6åR©%‹ßhP|¨ãˆCùé&c²÷±æÊ_Õ“e&êÕT2Ö#±é§OmfØÍ2ê=~“3ì×ED/g*O 3M𖾆äÞgcHæ¨×z Ý "±û>¥bg6åAÌÇ/ž‰]+ülÔ!PÄ+1Ó¥ÒöÆö³ï$Raù_uÍÜ–Ós±¼ˆï»÷bBÕn%äð&ýÒ™°}ëÿæõ¥Ë]Å@©½arÖì´Çzw“Îð÷™/j ëÊY:C/+>ÔJû¹o[Ë >äUlw›3&—šÑ?`®ê*¢øZ×ñ;'ê-aŽ Í}c1ôg¹¿¡™xšœ9¾`ެÝh¿ÎUU¹}âù žXrÇìÇ7&÷ö¡Ìsƒz·§8ŠvæªiÈ62êµTSxL¡ãš0¯ož›rxX6G%.Zïp¸YÑÐNgžžúÃÂ|in÷ø„®4Ï7,žëЗÉcL8äפZFzÊëVrnœømª$K‡v|§^‹·êØNz­Éå„/8Ñ]Æm¥Zš Óþx$äÛ/¯yÇ›KCS¥MÒlÅóÞf û´G|—t!²øo‚,wðUtvˆˆ†Ï~7Güä™Fh@;¢É÷6ƒó –¦ˆ¦Uñ³€˼‘â͹h«FýÔ[§óTaåZ/kF,"{·¤¥êòj øDx-M¬s‡w÷šòšZy±ÚÌÙ½Uý[´ÎË&ÎNéŠl%½´ŸÑн‹ çßZ-mIf pîòº +ú\[5Ym\œu×Ì*œG:1­56oRúQ„¤O›$zx%ô+еþC/}µ÷O!b¼ÞkÂ#\0é)îæ”—º"t*†ÊÊcÅë0ÞåUðdá‘…$Ÿù½çÜóÅ‹>–Œì¯Ôv¤LWf84\„´}wó¤zÿ5¹Ò¸w䂦f(é±î™¦§Ýáܹ)t«¢ü:cÓ6/DW³­¬Ë êù³³/ÁȈO#dËC㬷¡Ê§êSÜñ´§0Ǩ<ƒïA;®vb †9ã81ì›ošëØsÚ'6÷áj·ËìK~DéÚÚ éj„H„9¬ ù瘭ŽH‘«±AÆæ¤ëR(X«ç@ÎüYdo¥ ½oµ9Éœ^ßXUX I,UÒÅIî“]ýÔ!ɈѸ#©}^qödW`Gb²ØM,b;dB…ÎøbŽ0ž!)áºS‹Wö~²ëéÌÂÃgëçï1¯¦ÍGŸ¥‚ËsÊIë|_~¯žgî¦÷ã!ŽKþY‚ùƒ’*¸‘G©­˜Äd.:Gq¾]®fs§´NÈšíþ‘§‡ÎR“è”Û¡°;A«(”H­_ÖÈÏ”Deè¥ZÇ(õ±„Üý#ÝõÜÇÓš‡ë·è¥É…ÅŸøÉ<‰ðð"Ñ] +ý•ù‡C~Ò˜¢>ïξ–OòSmºbonw¦÷IŸ<׌}Ú ó™&Ë`ÿV´©wGø¥ªwR.f$ç a¼wŒûùm¶Îv² )ߟ˜yñ6ñ:ˆ¢Ó˜³@Š<ó·ø”fz0SQÌIÙ Œ>º®vqErËÊü·žÁNuJÒýbÒ{k–3`ÁšçŒ‘Ûë~kî'@ÁO§zBú! (âd\¯fßP“zXoeOL¨vá·KòÉŽËR6™Û—‹—ÄbómãÐe·'ïz‹&?½Î‡°’޹V]¯”`e‹a±_V-ÜDº™W"nPP· Ë…÷¼¿ÁÿUë¸DX›²\»;·ÚÚPC&z* ðŽÂÄyì ©Y~“±Èô›iiHµyÚ:@ßÎgÏ“M¯|y­7—_„4æ‡mt x±Gä"׋ÎPˆç=5Nº1zx¼"Çmc_û;‘`K]Úì­Ò“’ÎÍúÚ8%£oÞ¢qèW¸_2sV“ÒvÜEMÚ3Rõ=cl|szT[ãe´|â“ÐÒc„"šñÃ9t”»ŠA0†w—òŸD¢äYïõÏöIšx@åh˜øÉyKªXÇ&÷™nÞyooûzžÁ]ª£!'+4ø;Ç9?¸ÏæZ!÷^Ix%îÖ,¨ò¢Eü ÛyC”ª;GF°©ÅÆ#2FXVÛð±·íѾHŸ9ä¯ù§ü4ø¬O…½Álé"žŽTG¶k|ù…`§çÆk“ë‹áÓ‰³ËƒÐ¤ŽÉx¼ÔÜ·ÔídG x'ßÒøœÈ\_ÛK çÞ#%ãŒTKl 254‚ó¢}9bqE]x0Qv‰GS5̾ÄÇ÷ Üo ýˆëa=“®[Ø_Ë_Lt%s¿ÕÄ¥øøê0e1¬¨Fb³ãÎþ>¾0¶…¼§3 $VZ)¥[}ËL€ßs_®ãÂl÷%™¼û#k›ˆG©üki\/$,E¡?‚…G’7ÄÂÑÛá,D>¶9Ì=нçØëÿŠÀì endstream endobj 2896 0 obj << /Length1 1829 /Length2 11492 /Length3 0 /Length 12628 /Filter /FlateDecode >> stream xÚ¶P\Û¨;Á!dÐàîîÜ50Àà îœàî.Á-¸www‚„àîyäÜc÷þÕ{5UÌþº{µ­î=P’*©2ˆ˜Ø$mÁN ,ŒÌ¼1y1U1f33#33+%¥š…“5èo¥ÈÁÑÂÌû/1ÐéU&tzµ”·d­,lN^.^ff+33Ï_†¶¼q ‹… @ž k 9"QŠÙÚ¹;X˜™;½úë@mL`ááá¢ÿã8@Ää`a äNæ ›×ˆÆ@k€ª­±ÈÉý¿\Pó›;9Ùñ21¹ºº2mmÌiè®Næ#ÈÁdø]4@hú«6F$J€š¹…ã4ª¶¦N®@àU`ma ;¾žq›€¯áª2rE;ø?Ærÿ1 üÙ #Ëßîþ<ýÛ‘øÃ@cc[; ØÝl0µ°%åÜœè@°ÉoC µ£íëy  ÐÂhôjðGî@€¤ˆ2øZâŸ:;XØ992:ZXÿ.’é·›×>K€MÄlml@`'G¤ßù‰[8€Œ_ïÎô×ýZm]Áž£©ØÄôw!&ÎvLê` {gŒøŸF¯"¤df '37;3+d¹›3ý¡ænúCÉò[üZ…·§­Àôµ·…)èõ ÉÓè898ƒ¼=ÿ­øoBba˜X;Œ@f`¤¼¿ŠA¦ÿá×p°pè2¿N €ù÷çï'ý×!3±[»ÿcþÇ-3©ÊªÉ¨JÒýUóßZQQ[7€' ;€•ƒÀÂÌÅàz}ðþo?wà¯êÿ*-þÌî_eÀ¦¶€ß~WñÚ¾¿*qùs8¨ÿ\À‡P°}i€úŸÐcæ`6~ýÃòÿ¼ùÿ›ÿß^þï+ð¿)I:[[ÿa@ý§ÅÿÇhcaíþ§ÉëP;;½.ˆ¼í뚀ÿ×TôŸµ–™X8Ûü¯VÆ øº("`3ë¿{iá(iá2Q²p26ÿÏ$ýu¯î­-À %[G‹ß/ 3óÿè^WÏØêõåâøzaÿQ_÷Ðé»ýÍ ×Mûï$Àƶ&¿W’•ƒtpº#½ÎÃ+q¼ŽÇëÜþx#ØÖéõàµ\o€©­Òï[æä0‰üý‡¸Lâÿ€Iâoâb0IÿCl&™èÕˇˆÀ$÷½zQü›¸™LJ€ ø½F7ú‡^ÏÿM¯:c[ë×¶ý%ùÝ=&“! € ô/|M×ô_øš¯Ù¿Àdþ/|Íßâ_øÌú|Ý ¦Å}]u&Ûák »á«g‡á«gÇákkœþ…¯õ;ÿ _KvýY_¹ÿÿuåÆÎ¯3ñÇ¢¾ÎÃ_üÇ+r#-ÍÛóZÖ¶ÝU‹¼seØç‡=M¹Óbe/øˆàÔ'1m°§š™±ü¡Tr©—Eò£e‡‚¨ý]ÖúÂ¥ç÷Z’:wöÉ3£˜ù_7³ñž·„dóhM¹šI¢Ä¼E}JDáèˆB&f}ª”h^ïkzã]©°‹%¹dƒÚÚ;«‹3äp y4޶UœšÕv9®Þ¾ÏÞ¶‰؉РMVH#ûÀß~çZ…¾90<¸ŠÑKÔî'ëâ¿{Fì„!Á7H(Î_¥±š÷æ)»Èåg¦§‘–ðO“¾Rz¬]/5€VcCcð‘W¯Wˆ&H"õ¸à ´‘2\ œf„öÀ)ƒ1RnŠ[§¥L”€–=Þ7’ÔñÝßwO£oºÎ^*7qå.Þuå•’ÙDÉÅ ôàÕb§†Æm\‚ 7ˆœæá+@óI3›‹ÔØúýÈ{SiÁ|GsÛÃ}($ÚØg'ìfø²QxyùǦ Áèòœ0Y[PL°b)Ù¾Õ(ézƒ«ÏûKNÂ=aho wo¬$¦>Ó˜Ÿ'[Ãc•£-Phø!•ßSUÍätìŽ|!RˆP>YbUs‘Õ½Õ‰þhŒ]u¤€u*[>Ëá^7ÔsyÁO¦cè©8Çts>fãïÎWd"’’bŽ!aýlƒé]îA QEEišŸ@É(î…mþÃúÖºº.’7~BR AiL®uY³ƒã%Kš¬ôx×€Y,MI ©4ýÔANª~`&ÁФdŠGr™Ä'¡/»ç¹ô£hB‰lžwüÃæ+g¤¸Ï©ŒWÂtÆlïdSúOºnîll¬_H§Œ¡'º†ž[<õt¶Ÿ`¡LÐß©ËZÃýqÍK¢ÙV7}w«Øi_êPOgZ¨MÙ«n¹Ó²<ðWíÜå~f&\9;W'y¢›Gkë ~7õ¹O|»£y½«l¦J&e)uÚ_F}¶Š~vâ¥hn÷,gÆ9êm¼¶jû9e+;,Î ·Wj²` %ç ÖŽ½²Ü­%⾿—â>÷yI—:ojína´Ücin¨`ßVe2ÖvŠH_eÉÎ0É»5¢gF´¼fï,š=]NœÚ[ ^sb¡\ÔÊ×T¨a…wU^QyqS”4’w17Ö5IusÊ«8E!FàËèÀnC .ãFFž/HY””>x “©ÕéÛ9iÐíöX}ÿç›Üq@W꘽·¦94±&S%ƒ£©Õ¬Ò|PÔ–E˧‚âô‡-›ù¡iÈn´ùð}ãíÔ“ÁËl¶Rë$“aý ×ÑÖñm¥KòÄ/ö&»:¡1±y.·Ê{¯ù^Ð}…AÄ~ó‘œmæô¨ˆ~@*!¾[’Ÿf®«<þOÝJÕÜçC‹`‰ Ñdgv4lRÞý½hØÞÄ”µ“@ƒdÄõöàŸ ·ØÛ²™(J•È ¬çf%ìûøkŽKþ{OQA‡ðïOo§ò|äÙ«fc]$¸§”ú÷ÕäÔŠd +Ý ¥uë:Zä--ÇŒäÂný6„BH’ÐÕ)Cúð)ó cÃùv˜%{6™Ïq÷kilKñ%3¨áRú7%‘ ;ÇÄ1Çuº×.¨ÈÑï¯UŒX¸o£ª{¢DIEǯ0EÁèxÑÓ\ô^ÈzIñb¿ÞFö#.dbÐ RC£<2UÃ.ÎNßÅqúÎÈY’†çÞNv#·¦äk]!‰Åo»@ø±¼KkÇÃn»CžJH{NRßñ ɯä[3¼]d5«˜ Lÿ%6i §xkqSÑžG:xXˆ;|&Åéàm¤1ÞDõ ¾×ç@¦_9‰ [ ¿4|còΠ'‘jú‹ÖÖñ1W*1\§JY‡7“ì${®ÝFÈ |’¤±K„¬ÈV7æÉõ’nŒº\@ÿ\QBäþ¼Ä~%£É,†‘]ÞS@r¦£(è»JLÔr§¶õ¹Ay8Uqœ©Õ1Ú®UaehUPzZíØÄäP«¡×Lü,“ïf©—­ùKù\JXÌ Úǔߥn>ø,zg!W–ÓebÐÀFU<áÈY׫<ÌÇc…ù£ms‚ô¦ ž-ÛfdYßà™aá`¨ñ.mKE­Ì÷Üî(¤„–Óe…YkéÜÑfbt¦[§ìBš-õ%$vä ÒÓ‘REº Ã"ž§ÁSLd4‹FjKØrZú‰ëX<’:H'a‚±,xжÊ7ŽÄæÅ.ÈsÉ"Ÿçgš^ L½0.}Þ¿ZñH¶ýrL»vDõqÔ¥hD”ªæf’yjœñ· ‰Æ²)Ê£U¿½3ÏŸ¬Ä¢:¢#¡D•f¼zPÐ?°“šo¹¬n´ñ&>%ï¾ì¿Zôüì”K‹Rÿæ—Çbn@ª.´×Õ6_Ç2$éx1{ŸA|;ƒm UÃãq½m‡ð`ùsˆ;æâ7âõ»O{ÉÔérŸç¨y ¬È¤ñ”ò]K94]´PðkIe8 8ðÊ\™.¦­qÍ,ñÀºŒ@uÞ7Ý0ì_o$ÄŽB~uÆòi¼õ(¸7)m±Kšo5ù Û!`ŠZðå½¶sѺæÔ ½!§<F¾ïûÒjKHùN,ýç*!3,ÍË$”¢ìéÖû/Я™È£of÷3)(lÓ˜à {9©«ƒµ€2ÎîNÉý^Ê0~‘Bú¤ÒTVŠv£ÖÔ ³ fNl¾ÙºüSÍÁ€^ìw&2o°k«§"(‡7ÕΟ_~^a‘…S˜à‡?Õ–°ÚG9?ºö÷ÞUµÕ:þëR ƒ§YaÄpâ\‡Ñ¢ÜP´@­)s7­pa¼t¦;ÙY"{ÌÇõ1j‘åZ¿?y—5ç£ÿŸÉÁoö.8S_ŸÉ !Õp²îqÕÓpD–ŽÌû:ñ¶žv>™¨hO:ŠùEÃhk3‹bÍõ¾-©~r>@oéZ¬®!ÉOݼLÿêíV·.^}¡EÖÀ¾ ³ð:zŽM-wy@LjéÓy$›<öî-‰\e™1gJï·Joð\ …*Q¢„D¬úÙ͇Qƒe[ì©`²é·Û0ÝHs0˜0¿ˆI'£Ó'µD®á’J“ƒ¯32×BýpyìI¸Çü­‚ãѯ$n"DÇéßÈ[+£ä–¯©–&·8Š})«hƒå…¢±‘F>Wo· ¥0È&cx+•j¹S#úx ;=b"[¡‰–BÙ6Â܈`Äú…,ØDüÞŸ‡á9fk<üy™ka<«`+áS¨A6³À{ásÐǽñuð‚IVàú‡Ïa;á—_åRø^Þ1„t(ªT[¢;æäÙ®›Ïúl«y6t–YXÅéðù¾íïw–ÅþY^4ML5Æ5 ôV4BÀž_ô<ñ¢"xD¯|uP}äj0<5:Àf½U¢J£-8…•K\ZV/Ô:mEÂ4|ð™#l©Î9Aw…)ÿF2¼ì $Ú¢–lö ûºÃ]÷Ó ”âŽçð™$å:J…Á¡Øó§ERWðí"Ú§`²/t\_mݤX•mã×xIêTM¯eM«´]ÚüwR¿©?“êuŸ6×ÊЇ±.¨.^.¨Gt÷x©íŽ#t|ʶ:PíÒþiiä‡%%Ñ1üØk‡6ƒ‡gT÷ch„[åŒgÚAÕ¤S&^¸;ŒþŠìþ·ÈbL‘¤·X ~eCÚ~Ó%‘e3?Ê÷Õ“~OÁ¹ãÌX¶Yìöæyè‰ÜñgÛÝù­îïÜ"Zúâ__¾³A*›)yøq/Ò¶óDÑV.§ÛõᆩÕ8'§Š®“#eÊé“GæÜÄÌBdT4é(.ñ,VHi ì¢Ƀ~ú8ÄLjRš¥”7‹Õå¬޶ñ!RuÇ8c÷¹œ‚Ðcu¬¯­Æù¢_Y0ÇŠG\ÙOò³6û Ã<‡fd«úÜ­<»-]#˜,--3ƬÅdA:¹lˆ€Ön H”!ÇrwŽ®( ¢ £éé3hÓÌöÀšŠoÕx¢÷@72 IQW`SÑÉ‹QufO‡T&otôüv»¹‚ŸX}C¿)Õm2ó計âšjØQÂñâ B©sÞë!±e³ï½gßæ_c.k…Åó¦‰Yû¬¦ÆÎeÒÔ ÄÀed>v_A™^â)ÇÊcðMÌ?Õ£Ÿ –¾`\ŽV ¢73ªåíQ€ ¡¿*ˆÁUv$….:uÊÎh‰Êì +Õ™AÁ¹¤}Œ˜N'Gpþ p´÷7™¨Ñ.eÜ9¤MAÔŠ±²“û¥þ³€ÂxÉdÞ8Yº-¼zâB…Y °Ï϶ ®ò6ò‹˜ jg¿Ê Tß;DZnõS6L«–©¿˜gzÅüøH=½i"›ÇÄ ½B$|o1Þr¯0«Ë)ÅÄ×É ½³0Ç:¢!ÍþÓl1l͸[ÚyI…”Rú7­Ý÷ñº‚-€(ƯÀÅ+ã‘&œéÆÎ¿m kªÀ¡2ì,ôxNoÐèà™•\yãè¶îCѱL>vÊpp•;ègèS]_\sE)œru#Îæ€±f¤÷ƒMš ‘#«]æÍ¬¿èþË®¾£\ið8©l €¶ü´þýTà«€ïY\ÿâ®Ë¡]ßÓî –îÂUIÇ?ò•?§îÒ7 <\ 6>á†UMï|»l Ç4`Í—Kïçzà`˜ ê§]K²+·jß¹“ˆŠjÁe +’¶²½ÿCQ­leýòD©p7¤(EzáW¯A~ý$*h¶âŽÅói²–mÉϺ ´¶¦Aì…ÆRݵÕHUK¤Dw|Óm“Í_Ú$¼ßf3­nqÆ÷K]ó“ý÷µªzš»ä&>GŠöž–å“,Å89Àu–'AšÛ¨º”5^¯ïÏf8¹]qÞ3«uuL Äz$S Xì†Óä"Æ¢ Hñªè«zIÞ}EšwƒûJ|È)\ì~ÝŸK`âY_ˆZIö³±œö M£˜wìÙuÛV–¦ÖKE¬}ÐÈÒ«.B¯’|ÿŒ{ø^MËØOÛ%q°Ê¯ÙUÔ÷«ˆZòc‹Þ£ƒ›˜Ö+¯8¥*°‹[tQkdÖ×¶hÖÚqÐó$”0 ©S…Ä’ð¾ð*.oI¯ FvƪT»2YÐ-ïžÉ3Hž‚3-Ê¥(w—&ÈÉe§ÝÅJÎǧz(°Ý„‹0 U¯ÙÄdTèÛFÕÂí]æ …|Á¸†ñ^ê„•ÒxñGL$u1õȼT{rN‹$ÏZý´±œžXSVá%Õ>CÌ+°Uz½°°ÕkMunî•Üvͱû‡îM?Î!_º>’AÎŒ¨Á¦­¥P} —SFžÂ ¼• uÅðÎÄ£cæÒÎÉÚÇíû RrSߘcãA®nÒ«uŒ$2dÒ%÷=R£×‘6×IœÌ’ÒUtÓŽò5½ûÑø6#^ÌgµVÍDÛú 1®gš-üý@Ý©™™–Ř®µË|ÉË:ßËu©‡#ÿ­6C‰éás«DìBä`~=”VºmôËù=„–P§mgEp›Ìà5Ü¥`Þ”OÇm™Gü=Íí¬}q„R\h—b£–Ü5¢T8ÅUfÚ$ùÆ?ã±x»<$ A¸'¡ûãê”òM­¥BTÎ^‚—®^‘>ùE£r¿Ù»xYýØ+ý£·Ó7R™çœ…õŠ;ŒÙ×û±;á”S•§Ó9œc 2v#à§÷¼ëXF6$Å]ípÝßfBCJ\Ñ&}y‰ “úâMÈ/}¬¡?I:…ò·öåánÞöͦÜz÷M¹º6TX$ÒšÞõç%Óœ—èÑt¥J¥¾<1Ÿ @‘DOùèÅÔv³LðY1Ïó™R›Ðæ$"¦;d–»¬µ E“z".MPUY ë¾€;Ú›ÒŠ£™Õ…)Då,Ï4GR³‹V“æ¿&nç¶`t±`Ã/…¹5ØTÁ–6ESWYå‡QÅÎ9JûÚ1ÕÇ–ŽGawáC±Ú,H¦Äo:ù°Û±id¹X¨qLoõ(x©¼´F=l;ñ°™™µE¢.‡¥ Dxª­èfµ±¿H¦Û 6¶ìì"èX3dæù Ìlsï%ãÕŠù=AÜb |»šç( û°«.¾:Xt÷îh6?9RÜ¥’VS©±´;±¾Û%«õË}æ>ˆçƒÐ'âz±Y,2-øËmäcl+oª¦pú-Ùd uÌÜ©KóâK5™O#ùD.+óJ×o–…<×âSGÛ~ï™… ç{Äß/ŠíŸï6Ï®Q¨]ò^j¶ˆÏĨøe“â&‰ÆOèG›‚Uƒs5ƒ´hm”“´˾f—H‹Ó)Ý5’}š'CÁëÈÌà\ úèó6=íIŽäZü‰“Ý;¯+âeÏÚš9‰x•;ìŒËÀâñÝíI=Ù¡Æké# &b¥†‹+2û6X´rJ–Æ´åË̬°ÖΧ÷Tˆd›þëw/ø{BT™ª1W¯?»ßÌ×>îú«–mãàÓ"¤¿Éb½Í>À ` ™Y.¢ñvõ C_‰#<£ÒWÖ´IXœèEÊ#gòOÉPà<É ’ÖƒÖ˜™èn.j÷T{à ëSÈŽÔ.¯©©å{ÀS!©å×#iK-%+Ùlt\ÉUw*ò’('È¢;ŸÐL4@T¸²vïª|Y–ÕoÅ :w@z]—!Ê_n˜ìB¡)`ºme§ÝÚðn\Ó°hÁ½8$W7&?{nFç–žW•Šb¨DZìT÷39Dèû–÷ZÅã<ùí%fFLת¨óÏfÎüÑüïG¸ø\!M~l¤9ãÖð±Ø§¼Ç‚U,úßï‹Pê 9á÷[XÙÚå´¿<(à˜u W(à'^²(k™FŸ ¦ÒÝå…À¼ ìºv¼…‡D}ß.³„­žÏK“ëßùádÀ•aSC².ñí¹/Áõ%–ë™~É9Áv¬•ÑÔݤHˆ5.0NN­¤N{½:Úÿ9‡‡5¬YÂß¾“¤oABÍ ;´W“Âã™Á}•èÁÓçšù òìê0åÛ¶o=Ýž=ò!%)ó÷oFV¤É —¹™ItŒ¹î{#¹âÐÖ—Ý¥à$;{”eÌ…÷î„«µAÚOñúJãþâØ;¦/õ–ù¡~î™¶ Ó^Ôo¯Ù8ö mœ`¨&ĬÃm5kÈ‚fèHÊ#àx7¡³ åS£Cx#(K²ŸZ û¢H'"óÐ/´ 9>|ECäïÃTRgâÅòûÈùèÆk<û(óeŸY)¥ð+ÐMù}ôÍFâêçM0ñ$Ý{"Û®àÈ—âgVÛryÃPÄ ¢7©í ™²_a÷ÂøYBÛº[ýºXȰ\úhW>â­8¢·Rf{¼|Å?uðÕ"ÿø U`Iláå+Ãù<ÿöM6…BÌIYžrÿKÌŠ'Im <ë×rÕ8í…‘Vªnoµæ²”–ѹY Óüê\m‰õÇaß¡Äù š%¾)ι“Zß”a$Õ¤3옆ƒç‚æáyÞ¦ŸæJ=˜‡Š+A¾C˜å‚ƒÏÅC±äC{2WNHóÞœÀÛÿò‚ˆÙ‡?yì5Àköˆ m±í+ÐÌ„Éò3PM,½|4æò® šøÑo~…q¹#›éþ¼YŽ=Õ7Lrz?uúŠwðÍÓ£´_!%f‰F.;È·$Í3^| ;‰—çØcÂ$dr±Ò›ÕÀâ.»Vª]!õ ·l„ÀuWJ—:˜‰;FôóžÇ°ä8_îÕ>Þ·Zt™Æ¶EÖY5RÕ%öš,ÛÂ3WÒÚTò>gV“åÏ?lQÌȸªt{ ´Þ~V°B=X¸Râ¦ÆfEÏ«ôÁAîòpÞo‹ÇLvFÔaêúeã=Ê2¦‘¤£w Ǽ0(¥¹‰¼P:Ž[À·ôǺaSïJóÊaÉSx;üF¬”éœЋ:éÖ|"}“1G¸Õ]XåK% ÷wwÑa›ä/ó• ±([:Âû6NT…q /§ ‚‘Ô÷4(ïÝÍdï ‘$Úª÷ÍõÙçòôÀý›u>ppxùmi1+ =ªÚ{†ÕT†B£LÓO-W®ƒß: «*ô¶î`œÖ[ƒÔÇPÐpú¦çÜŠ8ºMÂiÍÑF*Šó¶àV) Ú˜rc»œBx2!—1i”Ÿw2Þ´¤£¦dš¦gYE†&ÐÛÀªD¡;øi DV´Úuø6XFÄgìÂ|| c1§ÏêMÜt×nq£K¨y÷S![+.6HàÓGä–¶©}ÿbûó_‚ïü©=UŒQ»öb# Fã~}f-SñÁ3¥z]Xnȳ3y{7FŽûvßmŽ®c”p¦ùÎy£éSoµ9ÔáFñô hI‹L¬¥<1@+ÕJvŽß&™¹¯7ØÓ¥ÔHÙUÖ¤Åg¨ò{ãþê.‡xck;º·á'â÷R i ]²Û1£-±Õ`"Ï 6¦E âQÑxq]gÅsʤÕ+ªÁ»ÏFŠDɆâöNPá£4MÏ•W¢af$µV#‚1ÌŒyT]+œËkÞcõîÄù¬¦Ù}GåP—e+A«3x¢Y’ƒ4©ø,Ãã`‘Dæ~Ô‚Fûìc.ÔjI1ìœÝ4׬AH|%6îVÀ/BÚÜüîÝ€LL¤…²$Ç[\{á{äÞ»=aâ[.h†Ù¬›Hö„ýœ¶‡‡b½éHóã€Ã;]V,æÏ;¶«uÆææñH»ý´ç#âÞçcÌ[Wó2 rweWg\ÒJ/ûîrŠIµA¢è\`Õ¼ibÛY–ÁcR¼õ|ÉhåXâwInþÅý™QkCA`¤Æ ‚–ÌÝ3f‡%7&Øÿ#µƒoæI^¡l2¯-_N³­ÒÍÆ¶…D]s{ä®èŠLÊÊBð Íì³sám„1Ò8QV±:¶Qˆœ: ѤR ?®tK/~6NùêføÞ•y¶á˜J´/Æ%í]§®ÏÄó£ŽìUæÔª<S§°¤OhõŠñHú=ë÷dmÞ¦|.«X•*>˜éŒ_BKvã~}lˆ·ožäJì?À‚¢¯+š·0|6éX!®éN 0S2Àõt@ÈúÔl!N¤@Ai,ò€æe]c"J21R´Ê!JQÆpjväÓBF™Š®GPÒAmÔ-ÜûP«‹ÍQ–,ÑÝ$mo4˜‡ib]¼ç1ÆDiòj8]^ò­ø€½wR÷‘{×G&2º>aC‰¼nQR®On½r¡_ŸšRE'™¤Ó«ü¥ÑûJºÊ…*Ã5¹æ-œl#\"Èâ/I¸›)[󔣼0ˆ¨2u© 8SÙ_ð¬å¶"œ­Xµ= lQÎYݻݳQˆHJuÁÛíùmŽáHG_¬TKå}ÇÚV‡~#´6 •}§‚ý*¥SÏ‹ GÜÒ~tkÀ—hÖ1UáÛúcƒÒ¹Ëj—9ãžØ“5=SJÙØtéŽqÒF=–VÕ³š+Ø8«bn ] •V⤆LDeï¾þä?‡py#}ÛŠNÙ®FSùj›êð$µ$uß%¹•6ý¡PŽvTó} ’ô=FfŠÌ©Ð]±ð…6£ïj:›Yšðs˃>~9žÆÎ¯œxŒu]/œa+Rî矻 2ð3Ä:·3gðG„À›»6ö&¢RˆJ¿ÎÞ‰å/8Èå½ë3HçF*ao Ûá°}{!–i>R÷^@¦¡›_h>¾ô¡eÙ¥ñvHÃjžýðkVjÖ;²ªž:ÿs2iêq,CQ0FG²ÂϨ{¾ƒ`[K¨9´#™rÁ ø.à 5ÿ–ìË¡9AðÙÀ6Ç ·cDYðåâtÀªªSvŒ¬iüþêl¢vn¿°aõ‹´ôõÞ›“N¸k^'`Ò:¸ä¡À²!j®Y½Á®Pµ[')6޼RQ\_Z›";}Žùèîû…x׎ƒ{XYäôåñÚù*ºëûÄÜ®‘¹ mú8nµ´x7]ã‡TÆÝ%ÆÏo?*=wŠ|²'¯^&Ž(T¶âÙ¾4«…ÆúB+1¨cI·'jDûž%Æ)Ç–½1¯+ĺÓ(¨DDßtþ»móOý†")o+OåC*ì8_¥'pŒ`RO„KÌLü‡Bí¯ûÌ!é_NEc‘XÅǧ½º¥†€6¹\ReüsgS »Ÿ‘¢wö â:ȃËÈ cG!øÃì(@䟷g5Tõd¾ÜïªCíëïÌ-Ýè”üÐîw¼ Œ­¿En𺖖N¸é8FÈ)}ë²×ä圦®&uÀIxŽÓŸeÑŽgà\ŒfÎ -I®fˆã*OÝ1j+¹gD8ÆÊ_µ¢Ì±[i¢c„š^Æ&OwÉø©Ó“l‰&„Çt¯$ädû9ï$Áo3:›JêB>æÛA kãwpºM6\QºSYŠš[°F´ÛÜÅŽ5„õ"¿Ì[ùL8xpQ : :b±Ê¢ç)Ñ€ø.¹/“å§xÑ)Lï—Ü‚ú>§V] àÅ]Ý×fêDà–0>q  [T9‰SP¹ZM’g }$+¤r€ûKé5C˲H68ˆþ;ú'AʘG]¢ƒÄcµ =Ù¾Ú‰ÊBÕÔÝL\6_ŒÜEi¼Ã‚ïº^³’  âŠ7œåq^‚nz;ˆ1cÑüÉs'ÏNX=Á´o· >€÷Ǭþ•‹ªÆ[›Xô-9’Š|ì¢[¥+»eÊí‰ Oõ`2qöè㎎N:mý\C£‚áÈı^w¢©÷‚?­&Þ˜œ3¿v]¸Ô621Òàºá°Ë´l´þqçÅŸü›òê¼ä–ÕmÏÏ\)@_Ûótp¢LJÃòÏq8øP„„ †óHýDðë96ÏÖ–({çÆáLƒB_+ló1ö1W&_ž*CoB×±qïc«bŸ)Êùi m^ô J§ð—·BŸàϱü¡[Ý@i‰¢]Ÿ :…šBgµÉv³B>‰,¾mnc]s½A·{wºš4ºŽ±;#E›šT[_ìCÈîu$B€¨~^æ!¿ nËÞåUûÚVe…\üænYxxº*¾2ði ÞDDtÅ‹å;Ž6]]¦õü¥qï»n‰ï<’`x•OÀ/ÐÏ ­•íµ?–Ÿ‚÷Äõo´R’VâFq!ö<®W˜JæÖö;‡Ï£ëð£%exîÜËÏ92Ùâd£3ÑþÝbd=º(퀩MQˆ—_á”~Ó1p(}H,ÍeâQMVpÞ5'æ$„kފ϶aÍQ„Ö’"LOZê' r§«2$V?4©šM¾äà(D}iÖ&¾Òqˆ-P¾0œäÍ®¸¥Úd!;ÅiNs«Ä¦nåÓ¤kLSÚ -Û+“q²ßŒƒU—?sò'ÿ:̳hwÓ¢³É‰õ³ó‘I…·  ðÐ3ÐM¡TÁÓàÀÇS\#ø5P¡“•|Gù“%}PTðùºäJaT—ü2c?â‡'+(h5RÙß ÖâÝ(©.ЦÙðxè²ËìYÈR,CèÎ !:!<-ùÌv‚ÉÛÛ™“#èÂâ”ýò%1Jïç½_$"¢Œ© ۆȘ¨]EÍGnn‘ïÀK`¢íÚ YN?kˆ2—O^íO1̸a•þ\x¨ñ®[Õª_#ö4*Q~¾(˜ÂÉÊýdÂê—YÎæ¹ãûR1}ÖªH¿â±ÿ¶-[p(;>š…u@&ûûû¨6Ø2¶ž†”à(z¹]h:q-çGø¿µ@O¨qõe+¡aq‡$ÑmÍ Zd!ëïÅMûö–ô¶šŒD¹b¤$¶x²ùí3™°Õái9|¡‰ðKJÚ 9Š’çd5!u\s»f Ãî(H4Øv˯ÅÈCNøÕ„‚½u¦ü0u·4ÏNLµh2ÉKâ|$yp £ÅºByí \°6wvzˆEXÂeqNц¬ Y£Æ/áT9ƒ¿Í&0ûë¬4»IlîÜ|gõýMþÑœCÜ$Ó($ 2•¾ ªã›:ëÊu:r£+ÈñA}Èåaî¡l.m©yÃý‹ÃP—U~ÍmÿC¢·,?¥¨ô^ÅA²W'®±‡r ›;Îm]ãL–´Á㋨nñ­º9ìÝÆq1†œže¸mŽ``°nÚå<, 5µi¼-ìã&Í×Ñ/$é¡ Aú‚ލÖ7†FàŒ«Ž5cç mCó]úP.Âïþ”Úãq£×`™9¶y· ™çÉ`^·¼Àò›ãÁ×f±ƒR™¯3k:xi(ÑÏ­iÞÑðhu‹ˆcÞ£âØÐb/Ý}sM<(µ_0dÓ¬ÈÈ}XõJÄ;iK3òwŸƒ 1QÕù±ÜîIÊT?Ü™³G4ä$FyÉ3ÀðgDfWÝÒpi74ÙF"ì2Í÷d¦P‡$Q±¥³)¨ Kµ3‘„¦bGðE½i#x<%é6pRð%-lT6í!½~¥ÜW`isC…}=´µg‹õšfÈNåš—4t”»—Ë› IqNQ¹×óÚ«,E+« ¶¿hTeâa´B×]¾§»gŠ€7\BX!ÈG4_Ò¥±95ùè JªßK<'«Ã¦’IµÐ ¸r ~y'ÒUÞÉašä¦úE»è€ã[ÅÕýýýü!ŦÂ?‘N>†ÊJ¥Ÿ?’0Y8>ÚÁ ;p\0~Çȧâùaß«Œ˜’ö@³æÂÎWdzìƒãôèt¦vsyxÖÀž$ð…ÿc@²|w2Œ½+$º9*WÌáä¯d$Ò4«b ™âÕaË÷fÖï+ Ä`L(4|éV|íÝÔÜ­ºÎ£Š…Ò®ÐΈýM„…æMÆ,—<ñ´øü³ø÷àÿψ“F endstream endobj 2898 0 obj << /Length1 1406 /Length2 5931 /Length3 0 /Length 6889 /Filter /FlateDecode >> stream xÚuT“ë²6U:Ò‹ éÐ{/"½×!%j轋HQé‚ô®té‚‚€€ T)Ò)‚´ÝîsÎ>ÿ¿Ö½+k%ß;óÌÌûÌÌó…‹ÝÀXPÙiÓ@"Ђ !  @UWÝ¢B@ )— íûÛNÊeCyÁ‘™ÿ@¨¢`4Ö¦AcºHàž·$ IÈ€$e€@€(ý7‰’¨A|à]!À=$æEÊ¥ŠôðGÁœÑØ:?x ¼´´¤Àïp€²; ‡B]Ú掭…¸Œ‘P8 íÿ¸Ä ø}u@CÙÁ2üÃÏ Š‚{ ½„¼àn¿8 ÿJƒm³:ÂAéîC ½HÝO Ž‚A±}÷þ3\WÒùûäG88þ¢áàí!lŠ€{zôÔþ`°&ÒÛœ`h€8PZDRBóÀü Î¿ ˜ø{À~;A¿ÌXA¤ÀKw„aH1^ò†aþÓñÏ)p€CÑ{˜AúïìX3Ìñ¯3vþ(¸Àˆ]?øëó¯'0vÃ7ÿÃXXGÅ\EÍœÿå9UT~Œ ˆ@PDZ‰‰‹$%EAÿLô¯üMÿ·Õÿs½ÿH©…pD¤ÿbmßßL|þ¬ÏÝðþYA‰]h€çßûoB±_ ÿ³ ~‡üÿ–ÿW–ÿuÿÿûFÞnn¿ý<þ?Äîæÿ]ho4VºH¬Dÿ 5‡ý¥h]˜ÜÛý¿½ZhV$Ê'·5î¥÷ƒ9ÀÑPç¿öèï9`Ó»Á0¤ü×; ÿˇ•Ôû^ñÂNë· †UÕ?Kª# H‡_ò—@P(ˆ?)vøØ“8ÂêÔæ÷{½ÂB$ÀÒ 8"Q¤¿f*{y»»ÿ~í¡a~è_nÒ”€z£PXþ^lý¿Ï¿åƒùÁ ¤3SH¨l¤K]dÛIòM_ÁÕù\«æy13¨vDé¼ÕÙá ¨cåôÁnªÙeuž#¥Ol˜­æ¢˜–G†­gç¶ÆV[I§Gúßm)×÷±Ü4QZ ¼ð 4 sÅoÆí¼Ç•ïé-EiPH{âÛ«éWßWöù]ôÔªáZµ„6ÙyÙ¸`’i¢MXÉW}Î$Ç5´ 1Ížßõ‰£ã4yï¯Øî=ä' ÚN-ÆX-Š$ŸNÌU˜ˆx½f¾ÍlÅÄ‚DónìFe=ããGLiñü³ ödG+MEëc“0´«w6·8ƒ>¹ô}ØZ¨JeP%}[ L¦xg†$ÞÓ” {öÝ7oëæQ…ª®ƒ6Ñ-üè;6–&NŸ ÷A@Û5uqÉÍà…rþpQë¾â¨§’‰¢}9 2w¼õ À*+$÷`ÔdE#—>gÝ<4_bñ$ïáhQjè ºZñªâ=w {Pþ„O²ØÂÛÇ÷i/EbÉLô‰Ó©„ Óó]:~µJsåâ¾Å…‰zÖ–•Iƒ?Ùg\`TµRÑ".ÑUru&QzÕbèÎj°ãÏ{b‘[RÓ§Ÿ4 ÝÓ“//9²‚+¾¦nú>õ©ø20sIjܺìÝÒÂÁ!w¿gázƒÄ• ™nr£OD¯–›;ÏÔoýÖéá¶|Ÿgç›,ý¸oø’œù…¾Å,I)ƒG¨åS@äµÏ ¾—”áC3_pkÑí¤ýì¤)ôVÛÇ;oç­õŒZ9}ŒÈ ¹ÍEt„ÈX}ÀÉuÎÄ«cP]%ÂûʾÄv› œ‰0˜øùƒöVD»‹õýݺ‰z³(ÝT{©âaýé`ô‘•ÊêSž“uøR±c¶`[X£µ‰foWè‰<-鷤ţ±Ž5î!6eJkS‡oµ~ÜzQã;³ð6Š¼áæŒp­ŸË°”hÑÑçÝ%…ˆ…kí×¥èeû~úîól‘÷ÜÄä™K«–NP^“ç­š/¥Ÿíý>*ü8fñ¦ jO©º³!3²%ïždÝ~2†”yù²!f³HýQB%üsÉŽõåûï/Ž)b¬3…¯¯ª ˾Ù7ÚH’M£äè—àé{Q¯}SQ•}XAÖÉ™·c’\ÒüDaø‚mîµ\¸ãÚ^t-›Ü'ÜØ¤¬›üѼA“ýocèDu`Íðt‡ž/p.kQ:×5­÷¬jôÎcë XrgÈ#Ù+_ßbŠ¡l±Žþ>IbÀª³î-°~Œâþ\‚Íû¸!=N­Ý*n\éYßÁ³ž(ƒ*|—„-v›íðÊmž‘·z„̸ŽÅ…ß«•Û†Z+> 9º Ê ù ©÷™·O}Ä[t¿\]‹çþlª®õõÀxû«-ÇR뎭Λoæ60ù³d(*Õ)‘ªNËèÕ¾¢Ââ¾ ÖJ¼SÇÕ ÆSŸ·ˆJ“]'§™ûŽ-‘útEædQT¢ÚsN_ëáÞ{ëÓ` 7Oõš£R>¦ŸÐT½[&Þ¨¹dÈc|ýâÆðÒ÷k¥XfP?ý’h#†rOW{.%ÔöøÌv¦W2gÒ©Œo;? ´*UÁ¬P8L­¶_¹wœQµ¢p4ú@7¢]!™¸Dðøãƒâ±iÆ.*Ù75ëÛ•üÖb)*|8·Ò;‰=Å‚e%óë±ÿÊøQæŠxÆ?Zï|M/›ß·ÖYÝ9-?Þ»ÏI<7à5{×\ "ZYLÎ’&UEè`²òJ$ç?«%H™óŽ&YgÔ©Ãò†óµrUØRªPŒ´Hòð’EŸEùÑkKhç¹3áÿ žw`«ÿ¬ƒ@rƒî‹®6{§x ×&“£Ü:¸õ®ï¼Õ–‚SCIïðÝkÅ † 6½iöUY)2¥O OdBßWÜÙ|À£¾Ü+ÝstUe!¢³˫ʘõcNœã–÷‹î2¹ûý<˜Ô‹²$ž†þ¢Â7æ4)éY½~Q{¨ÙfUlÛ$᯸>ë¾è&PN•˜ŠÖÄD½ájI'1©ÕÙÉ®)hmµÕ¯=ë_ujbÏ.P5†¯O÷1q|åSM—¾ÆÁ™š»Ó©Sn–wCvéá·Þ<¼ÿšY&]“Îrùð"²å»f=nÀNÆÜ Çd½ÒÛDbÁQJiòiˆ¾ñ§ŒCç«ZvX³nnøÇê¡j²çÌ4é6Ô+¡)ÌþÂ8³›fžSHó+è—`ñ öõ'& -Íõz$Äê©eÉ“dfOR¶FÜWH–Þæ§Ç$Ý\aTi˜H¬”N™d¨5.'³Ò r¤ÕšÏŽºÙ·‘åÑ81Kå I1›%*Ò›èÚÈšÚv­êd†ôm“¹€‘3QN,…½¨k»ïÇùŠO:Û\Hž:¥‘‡ÉæÁùyüiw­ÔpÈqöš3Z€{;k­äÞÏrz|*uäuÚUŠ ÇÓÔ×8J' ]Y{ÝLb\x/íhß²îx¼xãKw@¡,Ñ‘9‡bß&)ØÎ¶–á…€‰HÊ€×fcäÐ÷q6oØ­i.é|jƃ,‡Hc‰ f‹$Å èDþå\AËÒ{ïïû+N‡Ö)Ù[<ÎÓº磰:f÷ò a‡•Ç,ñ,w%o(v»g›…gˆ®¹‘ê7¸ÙóhXJ kRÿ\¨Ý«ꣀSãÔKåjëRéì•0ï‹”Ùp…Œc)‘¯užõHd Ï}íLëé£Õ¿[S^*Š!8ᤒqÙ]%m$+~-Ñxý–åÊëÑûF>,¨† EÂF½“)³q­±™Pãs¿û9Ê#“W Ák'¹Ú9l„ÞèT㫇vV‹šFv¬&éN¢Ûw»Ä–r>rÁ´(ìÊfÃ\sø_–Ï3/ÍSQ».5KÎ"[ïê\ó¤‰K¡¾ç4zMlÑܽoŸ¦…6öñGÙ4‘ÖÇþ´>µ…´rŒÛøS¤©è]FLtøc9z§µ½-î v7,¨udíñÒÜ×±åÝ4²YêU¨òqˆ“'x1ÂÜjz=}Ÿ ¶³5}þ½G*Z‰OŽO±qeýèAŠÐ¶ØÀ9™Qoj´| DûÎ3´çÛÊ’Öi·®F7¹Áhà‹p%Ífé¡­ÅàôÈJkÇÊ›[yÁÃFËÿö†%‘‚g4Àü»…f›„÷ØVT©û å”0ŠìUÚ˜+âð´£ýŸÙ&Í'…ƒ;ßlc¢º]î'®q[#ŠþôúVÏdôW.'M“ÓÊBJR:Dd5P¥2*‚’ a[Š,ÁÅQµÅM¨óLnûÏH6()%Á×Ä(ýDªöÏ?¡E4G³Až×;Ä ó23lš~fð´øO²3<¸x~ÿËÌ>NIH\tÆÅ'&àÐ9~üÖä†ôÆË´ªøµÌ›’S´VGª–Ç×pW“êC›ßéw-–ɰ¿L½0¥‹R½Í÷ÉÙZ3¬› W,i]?ú°ƒ“¿ÈÿQ†Ǩ‚‘‘ µ ç …W§e.}aÊ ZœCy¥€õüµóŠªªB“Íü¢°X§·ÐðÑÚÎv™"f¤ô@Lº f7²rïªÍ™ËGúˆÍ@4gʪBWÜPlØ—~'â§Æ•GßDñç )ó„խ̦ã-æ÷ya½4,R7oUS¯ ÷Êå2¹¦¢2FÎÅWÔʜݞ â@ñmTš§…äf†ÎW™ÚwfÛ€ÕK}¼ˆ{u\‘uEÉúUE—ð¤¸x¿ôa©¸ÐÒ)½CDÏO)_"¡œ{ö¡Ù5\ÚÄ÷áâQ=Ò]ª?À,÷¾®à1Šx ]úâ{ª¦=~“–0LÚ[ycB“ ¶·*Ì`%ãüNG² Ä¡×e‹¶ÿ®^ ܯìÊÂ'2U¬¶,Ù[}hߊù¡Qä>”y$D3`çÇüš6ü‘ˆ§• Ëríó ´¹.S{v™l¿Tuÿsålr¯í;žç6HÏÒ–d3BC¼JÔ5,ç6âèàˆ‰›®G>Q“¯‡ÔÜÌŒ¼=_kÑÀPj‹)ôpù_ab1N>)ÆdïNÒM]ä? Y}:Ô1&d`Wgã9ˆ®MÍâŒøœùº a nOFÃCvXNçXúØ«,33²¦8Þ^Dh,¸ ?išY¨|jçºÄ•ðXËÛrް¹4úãÍäÀƒ&'"·³E ©GÕxFÌ­{„éК¤æ€4žFŠí€ü<í‚ꩤõ.ê2Q+ö…Ãd’„óJÙªpßBàü ´³~E9£&m6|{xV‡Öª‘]®!—CMß' |Bð‚tv "`WŸ‚×Ký8ZºÈf»©»Œv-ëÆ^~s‚¼OȈàwî 5 *'{y7æ7gú·ÖH|‡dÈiï<·¸O:LùåÎË»§Â·XËÙ/ã/û½5Þo—-wã\¯ ±fîã%ÓJz¯ò@OùŽ}2FÅëµÐáì¼yLO7ænμ¿H0UÛänIåû®Y¡©S”ަ+Üã÷Âz»‹°ÀmAªûª]Û=ê >A#ý‡‰»/%ÍhF6IÖ$ƒÌÑå«—%I’î‡Ç3¦jñóOžýÊw³â¤ àe»à—2®·÷rbZýSÚøÑ16á =b‚‹D6W5Pzrí®ŽªÏW­õd×èÝ!¿Žíx$˜é6¥"OuÊ=[‡û«¯g7Î*~û×ùC(uîì qÃÖBF¦FL™¿ºð§ÒXð\5’&úL›¦|´˜ÀÔü$¦!!/­ ùáö– Çz%¸«Øev¥¡\2xÒ"eÇvõ^ fˆÃ•ûæÕiÁŠÝôhë@Ÿ™¢±áöþ^[ -NéZZô©œSôæ½É/•fL¨“cã`矖Р^¢?v%×%žÍ‹>À\-k§8©g¶OÅÌKеé\ê~Ë\dñ)ð…©i6Š‡Þ¥²¿Óïõê!“ï¾ý“Ì‚Ôî·+²77W¼x*“8 Tf:ÎH}4Wü½­=$=LÞc8Ç”óB2çû‡±Ÿ#"(®îÀ–W½X½ªÕ‹úWE!ïÒùž\lfù¤ñ»‚‰ÅqÔÎ$Ö’+üÖD1Ÿ¹^ŽV«”6ÂÍ®^ç_¹ô(­n.I3xÁªçgýô˜ìÛè ÄaµÁÇO Ns¢QŸâ,e©ùN‰‡€G¯rtvöÑš»öâç9¾B9í8Z¯•G%^ŽjÈ̼ÞÅß»ñ¦U1û¡¹¥¿š.RðÁÞEfçÑêdâ ‰Ôœ•¼L›“§°ßØôš-j/ʰT*Oj ÂÆc¤ÏUv%neN”ȱÇ'ï4-/ȧÉ.F0CsFô•Wæ,*Ï4õ_ï?2#(i‘§ÆqõQMP(b@ˆÉ3p–:_ŸÎ§‹}7ºf+_=¾úŽ„ÙzóB•³ô¤*§dªeɹ’âKyPŸIwYL¬3Ä)sqÕWSP-Éðè¾Î©¹é‘Gì'+ùÃå—­ßîqÄÊõâ÷Î`ú«…£@d/u/¾>¢àd_×Y@›œÛ4jà ÀãzP8㨵÷Av÷ý‡:ZG'É­š‹˜}£’Òel±©Ó>Ô+V#ùNï÷3ø 1æ;ÄÂÎ7/+½÷o¬£æÞÄÑI¶0ìsk9p»ÊŠK›mœ]ôcÕpZViqL9CI¥ßqG~„&o‹¯<¤ÿFú$ÌôÖÞ<·É+ºÏº2'‚ÂýK¾°Ó]}$!œ¯]M5Ž»¡š®55ñ¼—Ñþ´µ-ÀŸ;üOô›7ÔAu>ŠÚÿMP} endstream endobj 2900 0 obj << /Length1 1609 /Length2 3603 /Length3 0 /Length 4610 /Filter /FlateDecode >> stream xÚt 8ÔmÔ¾=YC!¿’ì³Ø·”5d+K’bÌü0ŒfÁd‰ˆI²4dO(;YS‘%eI„HRáÍZÈšoh}ßÿÿº¾ïšëš™ûœûœóœóÜç‘8`i%¯ƒÆ;ƒ†xI…kzfÆÖÖ8‡+Bápˆ„„5†„; ¶ ˆÁã4þ¢è@$‰fÓG’hL3<0!c„"€PÑ@¨jÀီþ‹ˆ'húH 0ƒ&xH„Hèá½(Œ«‰Vè×_@ % ÔÕUåvÂO€A!q€’äzÒ*¢XÀ €$Ê¿RHi¹‘H^0˜¯¯/éI„â ®ÚÒr€/†äœ‰ ÁDÛMæHOðWoPˆ`í†!þðXá]H¾HÐ X Äi1d$´ò€•±)`áâ~M䀟ÓPÄït?£·ap;ÁH ïé…ÄQ08WÀƒ CS(É$ qèm"KÄÓâ‘>H éL#ìœ êœ´6HD0^$"”ˆÁn7 ÛNC›³­‡÷ôq$"dû|úˆ¢ žûu¿8¼/Îÿ7tÁàÐ.Û É^0Æ› ëÿ$ÑL?6W(ÃápUUuô@?”l»„5Å Üq"¶Í´.ý½ð^€ ­0ãÒ~ þD¤d0ÐÿoǿРp]18ÈŸì43èòÓ$@Àøgá4"øöç÷¿s4‘¡ñ8,å}ç–a§ŒmttdõüÛ««‹÷üiUåu@E]üwšßøÕüŽÕ‰ùy¸¿òã\ð€úhÃûÕ‡ÏOiHý\iàßÌñ4Eƒ€ÔŸp€+ÃQ´/Äÿy vBþêßÎò¿/ÀdHÆbwR?ÿé‰ÁR~Rh’&“hëa†§- î¿ÔÓà¥6Ñ²ç½Æ$$mMtp®4©Ë#” p¥v Ñã¢-1$”ÛŽr~Ý­ƒ-ñDÌöÓC ‚Ãÿã£-ʃö¼iw¶ãi»õï²8½½„ Ê*’@@R pšÎ”•i‚ m+ôÛ‘8ƒâð$Z@k1pÁ Û7«¢ Àt¶M;HU€ýFjpfù©«0ä¤ÀP¿ÑöÉaè¿ €AZÌ_P€¹ÿÕö¤é†û ÒRáÿ‚´zý•á/HËLÚÿŠL Ð^’9Ó&ø ï<[ è¢ ƒýx”f˜{YXýJ‰Ž°¯üÇNÅ&›å-²˜$K?exb.ä‘/¬”¹¤v3Mß²ÃM»è,£#}xœ°AŒª¯‡ºnt/ße^£È}ÓÐr-s ŽyV©îxÓ¾ëÑBIéSz”£¹…Ëg$´õ^ðZ…ã÷\]±Ÿ˜ô¶`Þ_˜}ŸÍb²_Z]`íÒ¬…6è¤Ë«ö‡úp÷KIì&U=«’&öìUÓßøî7ð:õõ7ër*_|~B*›w>“¯ªñðE£Âš[ÉcéÉåFeHN|•Ëmÿ6hÊ$.ÎöÈÞ\×+”Ïf±‚Y³OGßqò­aÔæíë#6e»ûâE‚:¸¾žuPÌŸ4à ]z´~„•pÄñ¾­Ÿ&-Fm ]ËG7YF pÜ÷â!³o£Çxö³ÉÙlAëŽf䉨 ³ðÖ¨_l¥Öíæ9Р¦”¡zšãÑùp¹Îòø‚ˆYÖºˆ¢3Œ†v™w¨h‰Ÿv§«WóãoY>sÎ/ï2]±"8t´ä_ÙVÙ.ó5[òࡪ–]êÛ+…ó÷F4?øõ5foä18’‹_›E ].„ðߔ彺O3÷Sð¬}tVÇVòfܧÞì­’êL¥[Õ/þ9+Àzr:îV­íc½ü4›c©•Œ“ g±û¡»ÆWG`a Ô%qp E+ÛŠË´@Öþ'Þ,‹DÃÀ* ëÞhY¦úT ™•Û ÕñÆ9S2òÏO )” ™ó¦j¸¢5½`¶šHûïT&ó3¹‡5B²o}OÒï%_”5k_d¼üî£apSê;Lœ6(¾OMhÿ(“þØÈò3Æ/8¼“!ÓÁO%¦,—\ÊW·Çýñ›hüƒòK«šêLœðsc*Î1çÜ´·hÈÎa÷8WkØ_é²yûØþR} QÇ=|Õ§OðÙ×i—5vÂÅ–¢Äý0ÿ÷|érhi¹vqö/¡U¼ >t7¡ÞÞ+ÏŽ=ŠÆ&„Ÿ; —1eýC‘¦Xî¼å:us®UØ‹û¶0¸ÑïSÇX±«`%„þõÔóÈŽûð6SÕ¨ˆ® K×owÖWP§[çÆ»$ê8Ì'8 Îåµ×¯».Tá9™ÛMé²&˵õ™„o-éÑUM¸æùQIwUu=ÁÑÓ•I]KÖKþƒ2>ñºèçæ½­â×R`MiKŽ!ræÝl.°xh2Â…l“ƒÿÌßÙ2M50¸÷*‰Ã‚©âa½Oœ¹á¢'KÀ1Õ¶‚ωÞI‰sÆälp¿Ý³¨ #OÙšÔSö5o8ú9øýßk£Tš4/IOkŸù6ñ]Ïéæ9O %ÝûF™ã£ÌËy†¸ˆ^®²XäÞ®ê¤I¥n ™™gé0iòĹYÃ0ççSÝUÅ¢5Ö¯D>ù¾¶,šC3œóöÉâ}º ùX²õLçùˆG臼·|„Z/bgÒ!¡îB»ÏôœrÏm?´E¸×ßS{è"Ï!« ù­Ï⾌3µ’{¸´*}áZºÙVª7W¹Ÿª¸ŒŸ•ã×ý¤9i^à´¥+{`D†þ|a8aoœà‰Ìðñô¢ Ïb¯Ã}7z¿0Ž0ÊN{,†N¹Ò½9"½.û2 c÷hKYŒOjr9øuhµÓÚ‘y%¤$™ÿ»q–‹Q¼eMe¦Ü{Ö+KŸ5QRK’©­Ö_{j?d²ï¯ÊzÞÙg˜É?6zS[h²Mydîl8KÕj txk˜Tiyñ¯å½>¼{ül®”_¤Òk‰üÃÜt¡æx([8ßøîY‰f §{+Ûµ- s·¿¾ßŽy0¼Ãùëu¨¶fæ BØ;§=®k%†k/ÕKü´yÆ(±›.«cµ8¤{s% Û¶±‹a—½À²l·Û…­¥þŠ'Y™;ÌÃÅwÁ’%Yªåƒo9ËÞ¨\dHñ¯xlA|×”,éãñ Õ…_§Â„—0Z}1»öÅÊØ7|K³:kï y,‹dâõt#Cƒ«ïà N'mi>®‘§¢žï­:\Û¤JÒ´ýû¶O’éÛ—ïÂÇíì#ß­§+S?;zòA(O—ω½ ™ ú6ï™Q,»ŽæWµµÙ͜Ք:ë!r‡* #«E—ï>y5ÈUë§è“RTþZ,¤A»¤-xÎù ß»GUû)îew»–J’E·s'×=æ¾Y ªœLæÂt¨ú•ȹe…ò³'kœ ÷ÊÈÔ’º'ÿ¢8Wâ¦ÚÙ'%0Ó³äî?óH…¡ŠÈóµ6øãÓs XvNÁp}IɱBÄëµêñgßÂоêÂbê×ÈJ8ª¼›ÊæÉ ™”MZ²ægá7Æšþè)¯ý<QW…¢šP•t=庩¬N]½—xmϤÐÖÈT=„UmšCÇ2A&Þf—÷Áœ¹°+Ë«ÜÞvÞþjÎ¥Ž¶¶sŠ:œÆ»1ËÈÂqÛ–°JP¯ 1@é'Yro¸¾üpJ—šì(þ9£}}:Ï@R"Œ¹¬õí«méãÓ-å:Âçµ®=¾6³/*´VýÞfw4Ïs6ÇM®­\‘J£×üø*Ù|SV ‡Ì ¨C„9aè‘ÞÕ°”/yÿ»‡ôW£nO5—U}6¼üâEJ4ì‡OñaýQ꺆+Æ!ùµuËø‚[3 .5˜SC”éÖûöQ‹v¡O;ÐÇ6UHg¿ÇŸmà-m0¬…OPŠJÿ69ë¤DúRÜ:‚ÏÐsòò^Ã×óIéú[@³¾I^¸ýºçÀ,þŽ÷Æwśۻ]× ájCB®ÚqQï¹[ªb‰Û;|Z:+½5õ4¾=EÜWÌ®$!’‘]zÆJ×Ú›ŽÁl%ª»´ìRÙAƒq¹M"›,q¨éÉ‹N¶ÊwØÙ"¶ö¯D¥öHòfdQbE‰6ßý>ÜÕЭGZý¾årÀËãòÒ7‹kÑm_s廇"ýh6Y·ÇA+l«aA&õf¹¢”˜ºì¾Ï†¿à[LHCgU´ø¹Á;Ô úZÏ´Cl€_ô¥Œç0ŠÓ«°-ß7Nç—zõÛÐö+®Á€ˆòÀð.L/˜uô&ö²âP#ËupþmìJÍ›œâ¨‡WÔ‰ÚjO¢ rÔŸLæ§TèŽ ¦^£†Y?®Z¿Íž*cù5‚÷¯²(|´ˆ~æR¯›šæUoéA,MÙ¯}7¿o”C¢úá"Ú3n ¶àÍ[ÑUµÏÌÂß iÍùÐ[—–4‰Ú„ý# }Ì^ÕZ·ÊoÔ$0±פn½Ÿ¯»ÀðMfãaÁѪ«"y£}/3 ®:;f~h ZpÆ ¾ÁëÌFà_f=ÔØ\3t9º +4ÚÜûùµ˜¶Œ`óáå³jk\¿®g èTvù¶mhoÀÐSþ‚Òé¸àp³¼TŠn`MÓÔLjŒòOHDæá›XÃøŠn¨}’ªFó¶Ä—]¸Ûzϧ”GE‹ #CëÖ”9w—I>š¯ë,ŠœËUšÞâdÒi“¯£6‹Mk°‰W“T䇼øÓ?Yäû+ððÆž{Ð ¹?”2Ïðú ;wZH|îZ©g(ïdømí8…ÌÝ»n§Þ50fè_5)êK×$õA—ž–®>¸Q'i|Mâ<[iÊy ©ëhCRoã2òv4ÁñÍ|Ù ŸÁ†›¾¼YgO":DñЋ÷-Õ¾?×óØR_÷©é(CIæXNîík_ŸÌ¾øV^¢a¨¼­®j“êòÊÿÒ‘U±êa3ù¥Ë±v®›Œk²­YœKO•ïÚ<0.Ö˰> qMYϹĕ¢ý 0“8Þ~˜­_—›’ƒûÒÍ#S2ºŽû8ƒÊ9®0\–î“tQø:êCÂeè4„{pî;}Fíždm[îKKeÑÇ–.8ê%>\=Ê{ÏÊË”ª>9ÒÞ̉ÒNÏwòë•°óEGU jÐ/ûbôQCSm~JÎͳ†º=Õ£…¢ý½›×ÓÇ´Žˆ ’ËÇÌaôNç_[íÁOçÖ馲„p*޹9ö ¿4Yz—µ&ÝÂS juò;î‹•~’QoBÊÃ#æ!6rós=¯}3&ÁÑ˷瘉Kæè?ŸìiCwÚ¸­øüU„&î¹mh —|£CÌ?gq÷Lþ½þ™¶:1úÔg›qõ…9œã5i/;Jn\OrªÔ„›T$ß3”2®ò_TÃÖäî­µg?`=â«rÆö‚ÿÔ°›éü«þYþˆØ‚ÜÃŒi§Õ+Idæõë‚ÜqÇj\AFîrÈž•Ý+P®f•>V=EÏPOòó<#TaðáMðë¼ÖÙi«¶k]&ÂÕ'¢´-ãÅ#uû„Út K®³ç7ßr§‹PÛOÒ­ŒN¯Ÿuäæ2|±þ¬‘ì}1KÖ~çí²ájR/Ò¥F8¦Sï ‘†Fý/¹¸´§~ðL›uÆÌáUÙœèÈ^} ½æ8-Ç4C,=‘‘.\OS³V¨ËUçÊu5É3¦ÄÝÁŸôÙ4Ý;úÝíôcÐ<¼l__‚#´‡8Ÿ˜½¼q„¥#ìÎꨖ:¬ŒÞoè˜ýFA÷=ÿ±ŠJËHP‘ã“b\üA{êû~–•ãØÖû÷MÞ>xw(Rà¢YPxhÿôÜ…y–û¡Ž)ð¦ÿ,•ö¢ endstream endobj 2902 0 obj << /Length1 2379 /Length2 19296 /Length3 0 /Length 20683 /Filter /FlateDecode >> stream xÚŒöP\ÝÖŠâ<8Mpwwww‚CãÁ]ƒ»»»;Á=w îܹïHrþ÷ªî­®êÞcMSÖnR"eZAc[C ˜­-#@XVV’‘ÀÀÀLÇÀÀ„@JªbîdüÏ9©ÐÁÑÜÖ†ë/ a èLÄÀ ¤(kkúb`d0²q1²s10˜8ÿ£hëÀ1p67ÈÒ¤lm€Ž¤Â¶vnæ¦fN 8ÿyPQ99Ùiþ1ZÌ l²Nf@kPD#+€²­‘9ÐÉí\Pð˜99ÙqÑÓ»¸¸ÐX;ÒÙ:˜òQÒ\ÌÌJ@G ƒ3Ðð›2@ÎÀøojt¤3sÇ ”mMœ\ €Ð•¹ÐÆdòÅÆèE(KÊäí€6ÿR–ù— àßÅ0Ò1þ×Ý¿­;2·ùÇØÀÈÈÖÚÎÀÆÍÜÆ`bnÈ‹ÉÐ9¹:Ñ lŒ+X9Ú‚ì œ Ì­ A ÿ¤nT€þ›Ÿ£‘ƒ¹“#£¹ÕoŽô¿Ý€Ê,jc,lkm ´qrDøŸˆ¹ÐTw7ú7×ÒÆÖÅÆã?ÈÄÜÆØä7 ã/vôª6æö_€’"ÿÖ!ü93:X8Ø™9X@{ÐÕÈŒþw7;à?BÆßÇ ^v¶v  —¹ ôƒàáhà 89|zyü-ø_„ÀÈ067rMÍmþxMþ…Aýw0w|f#€á÷ç¿O:  3¶µ±rû£þO‹éEUU¤¨ÿMù¿B!![W€-3€–‰•ÀÈÀÂ`=xý¯ŸÿVà?ìÿ9U00ÿwvy”´1±üñ›¨|ÿaâüïÑ ø÷ÞPþ7„œ-h Š?ó¯ÍÀÊ`úbüÿ¼ÿ˜üÿþß^þ_çÿÿf$öÅÊê9Å¿þäÖæVnÿÖ ô'ÐrÈÚ‚VÄæÿªªÿµÑ²@có/ÖÿW*édZASРÓ2²Ð1°üëÜÜQÌÜh¬`îddö¯aúO7@1¬Ìm€ ¶Žæ¿/Ãÿ‘vÏÈt¹8‚zö/‘#hþiïo ­Úÿæ!jcdkü{'™XÙn ‘!V€#hy®ÿÌ<€žÎÆÖ dqö˜Ø: ün4€^è÷Ñ¿€^äâà;#€^übÐKüAÌzÉ?ˆ@/õ±è¥ÿ P<™?ˆ@/û¢Ëýq€â)þA xJ(žòЧò"¨ýA ê(‚Æ'€^ëiüVšÞÀÊÎìÏ 'ÈÖðÕÆè¿ˆ¤mdfþ_Ìú[ ºÍþòê5½ñ_düA±NkƒèšüA|MÿÀßÈàoïl uÓßï)Ð0ÿ1•Åì/êƒù_T&‹¿ (Ë¿ ˆ¬Õ÷ Ü­~OåÙƒŒ­þu‘ÿe"mý_ÈJÉúË_õù°ù#Q°ù[ *‡íŸr‚¤¶Ö@Ó¿Ûrg÷§¾ ôì@wŠíŸŠ2ƒüÛýÕ&]»?ù·½ã_üÑþ/*ÖŸÚ1ø9˜Ùþ%yûCŸ T,GsÓ¿ÊßÑÊÀñ¯z3‚|ü©(c'ƒ¿ƒ|ü Arç? ÄÆõ1(9׿rgEsû ‚¸¹ÿÿçj0úâàº;þ¹ÓA÷Æð?ïn Ðh„°4okÄhQØ~_#ˆëB»;Î}žr¯ÁD;^  ç4 :­·§œ™±,]&¶ÔÏ(¦kÑ%'dŸµ¶på±SOØàÆrKK(v`Jh3ÿv >ïq‡÷iþC X®z’W±Ã˜~8r7<¿±é€2éOòº¾Åx2ô1v© v¹Îîš’ L“1X$\Ôi€±»Ý›" ¥˜a+7å‘Aûx¡Ú½ÒN™Ìë žæõp­XÜÕ¯l”®6ºðõ"ÕõTîžI±‰êætÍœ£”QC©éBÁÊQëŽÌÑÑ–94º†qiî?Zá ±è Ál¡A£®> Ž?2žSO-£Ì€8Qo¬c±³ÍyÊ(…ìtå1Y¨üL¨£"zÛc‘¦4æMOý„¸³ƒyHKAþiű㮱gWwž)A¤v·êgÜDÔäËmÌ’—¯Røa‰•‹fûÑØH:šjuž›Ú}V#¢ÕÉð±@qfÝe€ÏÀ~Ðm—1Rò±u\™,ˆ89wËûõȤµ‰çÂBú9j†Ä²ÅêvTïÚšD9•s›¶? g÷£¥ÌœÕ‡• FI?4t›œÐ¨¹,±eC•ŽÑv˜à­ÓœJP™éc²¯ÝÝ#™œÛ#Ewgë|ü~hË; *9‹Ã¶gJ.i3›\!éÀÖsúKøÐ¶|¼,L·§Ó–÷^9!N{ËymŸØ}/í7L½ºQ÷¦(k‚9 ”•f4Ý>¢òd860Y$Êë¶o´!“v¿‹VÍl Úðà›¤Ï©¨.¶¶]ße'­ðʵ[ùh¼ïa†É†«ë"Rt!T¼6~ßyd`n¬9¥»!ÐÕÈg÷Μ™¯ÎOh UøôD0t}órêS¥´ÑážÂ5ßó÷gÛ)Þ*<´–ï?Ý |—ˆíÐ`HRUÇñ Š|ë|3Y™´˜¹°2›q‡y4ŧ<ïߌÔ$±k Ù(ôd?݇:ûúü,“;fÒ127ؼe¹zã=ÇsHýæì¶Rm¦KÕ#!½Të©}½¨ê‚Öˆ#{œÏLCÕØæÌêEWVÈYô±&û›A{Ê{ æašW $[)“—tÙžZ æø·Ø•Qúb¶nï¡ —–Bq__­Îø\âÖ4Žx¶$4#k¡\Q;м|wÄhIÒ?¥¢Q4º[Š(*:q×½?´(héÏ´Dܑþe©œayH½^¯_}³¤J×7Q,«­ƒ§(ÚçþáW£ˆ¤J(lgx0&À}ß' Æ <$ûLŽ÷ôóPÄ?ŽévšÒÞ¦w]‹2m"§¾6 ±]’]òåáç]l¤%}\Y5ëÍ»ïÓ%s‹ð~µ´ë2šjZe†',YŸG¾ŒZ`ò‰ÎZÖùÖi tËÄt6ÝçŪ&×ܦodC¬U$ð†m¦_ÝÒûªƒƒoÏŽA‚P«a¶AÌ„ãž:„€jÔ=\÷V¿ŸrUd‰8 âsªŒÁtôœÜCS’àGbî $E¾ª‹ôÒV &l®ö9øðnu.^µþôõT¤+†‰–ñÕÏšµn¶®“MUgÉ®ùuÊ)Ún”6ùÛ²Ôü¥š° `¨ ‡q- ‚r>cº¯Žš¤Ôú¢&/˜HRýül‚Í !‹ŠÉ×u6¾Î1ë¿8ç¼ÚÙ8¨¾“US/K¿¥ÛGÓ¤u:HM9¬©¬crÏœûX‚À£ÌæÄØhÕÿSÿ›aÚ^Xv˜ä1æ¾e¦VêÕ¬Yô½²R¡ªëɘð¦@¸¿í+ò«ŒÈX—`JX“ÏË€\þ¤@&ü4ÃdÐuI„"ÉÔ&§ny>cÅ|5²lbª4©o©=2`ë‘Îa ®’àJôs)-dÅKóÉÍûƒ€?÷ޤÝh‡*èGÓ$…Beˆ2ôa1û\-B˜7€ùµ2_qܬéqÆ/l :Žú~q׉žimñµ˜,ÙëŇBu/´(–íßZ³“, 7¯Ÿ¾ITY‡ÿXÓ+$ß[èÖj›éF…£!QÂ[ÏŠ|†¬ŒìŽ´óþqQuŠ£±/øÂa-è¾t³ŸeÜ)Çýi'Õ f*®¤Ón½ý6£[X¼è½o¼ÜdvMTÿº'7@öŒ ¹[pýnvH_§Ó‚‹â#˜V}´ïÛ«j)Õ#®öâU“ÐÞfür,ÏÈÑ®B‰¤E¥o÷à¡KŸSµyÉšyUTÙlVóó, CµpàÇ…ãf[¦EW‚v¯“„ðìùÈA*=‚Èæ.àÛ¼‡9°û]*dOn5nçÑÄ‹g/G²QMˆÕ=CTþWŠbÌea¸ê³1¼¼%­–W;Ù/dƒâ $¢eqb‘Ö`”ë× ˜¡+œÖ•vÍÓ­HH]-‰^„S¹|9÷õÆi¿yYzËL ìŸVô"ýçí×-7[<¢´¬No5‡ç0œ‰½pÔýxï*þF ÷áKþ.8M+üÌ¢z[ ]eµ}‰†Äà<Gi¥æÑÑ$¡!¿`QÛÚ×ȒѶ–zÏ.dtoÊ·Gô(Äð<œF¸Êþª,øEíX2?}p6Ê¡C{¥©×ÿûÛÖ“ÐVß9n³ÍÁø£ÿÉÄlUu†Éœð8Lmé|«:ô­]ðì•%L^Àø°`!2Å’ŽìöÊxdôÛÕ]¿Ê©9ùÄZ«Ÿ“n¼x×%ºî¬¢~Øî$¯þ?ŒN×~X*‡ÙEw^@˜;8"u|Õ‡–‹µ oo5›%;àÇä£mTáê'fn p†¥Øj ÈĨ$ë(9!ž|pïª&Ç¡ê¹Så¦ÂÙ Š·ý¦b¸õ³‹u§º¹ë¹ƒ)¡“¯üDÚÕž¹¯p㻞S1~eúa̤ç”úéW†üQÞ=ÑX궺s&Ý ‡úB®l | ¾ àÁ²ÂèÏúYîê»Å¡…Ü@/kõŒCÚ_²›‚ãîŽúކ^1YK/}Ž-èzñŽíôÉYÛb_»?Èljö–'[…¯™i‹ë‚ßp¤5“P¬]ëª2£UÛ§5ÌÞœo_ C*sî o¹±xE‹äOÉ~\ý!ˆ?Ó¼ÇJWâÈÕ©3„Ë-ÁTÔQÇoÕÕPg„Žºó ¦PxwM„Ë_9¢ubŒZ¤Ç¡Š5ä NŒ_}±|¢ßõX‡9œJ°MÏA Œ„Ü>)ä'E µoÿ~<Ø,û‹k&ñÑæ¥—ÄHÙ÷—•¨,.«!1lkY ˆ(©É{G~†˜ƒûOîeÃÛ•#~¶îQ ¯©ðE^lƒßOþ‡ƒãwXîH=øvo  @"¾:”Þé±ïê€M¸”]Ü4ª5åá;.ׇ!^N’Ø_CÇX$éTÍl±7Ãfnˆà Ü?ÞûN«Е{߉¿2ˆ¦lŽÃƒ¬ 0î4Fºš×„©•Ù¿‹m©.O¨Dž·Û7-wqÓYŸ×ÎXud²·>{åÏ¢[,”nz¼åö¸¹QieñGîÎî.–Ë;ŸEÞ€é´<Þè7Þpí‘4å (þZ¨§ãP‰ëöBj;“ô:Mgú‰]EŒT•úz4ð¾&a.ÎèË‹[«ª’Ÿåd èIãH(nù˜_Wp g»†ÂlŽZÇÅ¡ûÚÔ‘µ‡sGTŸœUöè¯4#d0‘ÔÚQœ8D=n'ËÙ5ÚôÌ#|Òââ&h±’‡óTìw÷?OëpÀ!å³)ª‚¿›Ô’R¬>Ù‹¬H|b"ƒN¡µ C”>÷® 5ܾf&âý"z¥x˜ Gq,ÂÃ]oQÓ?Òü¸¾$¹ûÀ䈎Ÿ×´þ$Ø`,?&§<f4È4ûܶà€Jüs›}N8JWX(g3ü ÷§CÌ”~Ò%z†•}%“ÎÏ®T9 n¦ôAC=þ ñ´cÒÝ/DÝÈ”Ë÷è(ú ÞÊo„¼Ò?ßøEö¤qÓÓÉꩯBó´I˜àI>/DлÎÛ1w‚oiªæVØ@7RAèç8Jï+ãU9‡lc¨ìßá= ‰ÞZY Ø(R_r+ÅFØdÅ…2¹MWc.5y|;>\”VS .çÀÙŒÈJ´åêtÉÌšÂ5BEŒÏî«è㕼9 -–Ò¿øž A©äz¾wÙï Ï:E·lVB ×&"}”½Ä0 aÔèÝÓŠ)Uøn;¸åܯË spØÌMúgë7æ[ödгwŸçeyó:ü, Úµ ½C×Kaõ¹`¿áQûP~ÃÓŽU©•û5Cš·ã~¼ˆ‚°‹´vÓÏË=~Qâ_J6Ów‰ŸŽ6-‰f_Ç (ç9„Ò Öœ¦Br ){»é–ÆÉB/‹ïYÓÜEœÍ«Ï†3 ë„„6Îa9B`žwÃcø˜‘Ý Ž°õ•š€›)J|ÅÇÇ™]ÙÁŽ,¸Ž$ÔòfgL`®±(%Ü@Ö÷koÒGtâ‘: çSʵaõA*â;'™Ž©Z†ä‘¯ž3Gò”ëö“»Èb‰NðIòÙù¼®u…mÐáËH‹Ez{¼oñÈ/ÔÉÕÓòœ»Á‚^£X¹Úˆ›nºhx]õ"zÊU¡¿Ew¯ç²ÉÃ…X-osðñîïŠ@‹‹Åûuí&’°Ôk­^¤Ggnð–äéB‰"©¿ñ¡²ÏÜÀÀÓ`бƒ–N*SÅîó° Ùž›@Ç)æÖŒ?= LDw’-ým´Ó¢+bâÕ õ(&{ӹĄ޽"Ï5£³£¼ok€ xýŠåk²±†ãc’DTm€±¥ºû®½›Ò4ÏÁ¦+"ï5m†óW¨gñ t¯ÍÖ3w£ÔÙëê ZJsˆ_Öjóë2iIÛê¦á¥à¯ã¼ôµºÈÅT¼Du~µ3ç®+“â‘ɶ¸Eæk $À>l·ERà º`Hç#Üuð*c3àóEÙvð­ÔBx`X^ïeGôptT¾¦z“§8Wã?ñ+º!XlMfl&øô ¦xÒÖÉ C^7¨@¡dŸ¹{£ @d¼áÊ<â³ÏVŠSkuÿÈЍ]ë:âm£"õSa/çðö ‰!N™Þì²Jìå Äh"¬èh1“zj.êÉÁË£°ˆ|3Ü¥ÂäõtŠÀ¥1šŽg@`°j>¯isäQks«bœN¸Ë%¤"ŒÃ¸L¦-é[©@ñq·e .\-¯7®€Dõ‰!ëC÷_„,.¸÷‘i¥ãghøI;·½¬¬/ü̟ݨ’V€YÌcXˆhgçT×¼6]㤢.¯Œ7}ÁB'ïJâçºò+ê^£;§â‡)‡´8ºÞC=‘ß¼íµ{‘zÀÅès®!õvêK¨déúö®çy(—ýRGû•ŠN36‡å£K™x2.uͰþöÔXÀ¶iYA£Œ1_Dh„4l:’Àóœö™²Gn>&¹)ÔaÑ:œ*ÿåά’!éÔÓ²mD³oÊ_Òvÿ7e ¼|Byé† ëý§›ž–©%@lz¬5©òNqÄ–x‚¡›ž,<Ù3»)•CÒþË]pZ¥ ¾BªñGøé’“a&Ö¯fíçmž’t¬_zôòïæý)õ•&+*5R<Ãޱijb%Öë¬ú£Ë®WÛ~Ňc§ÒçS“-AÚèó}5ÝŽ:²ë6Y^‡°|ëddü`\QÐ{*ÝŒúYÁ­Å¾A¨»‰¤O€ûëÛ!‘úñÂxÌ£(FÓ dë9Û=Í“¤JIHäë¸[úRÈY<¸D’yëÞ›š‘Y––ÙÊz®XßO®Ö^dù‚Câá08"®°p° RJXt¬ítY×ø—á¡Oz2Éüx½Æ¨T\!ó çL:ì®'m,vˆU íTxtPάøYŽ? yn¢êudƒΩO¨›ø€t´Ë¶e3Ñ¯ÂØUØ ’r}­Fϧ´½±•¨1Hœûl“D S—Mƒ×á^ÝüŽr ÐVa(8“_ïv¶†Ò‹ç‰žÁ)KM¨ÿH-ÑC„ÒÚšrzØÚ&ún{Ú‚yRð);@ãElºöþ’2ŠDWóýf­§y4@©tPŠõEÞôhLØÆ€Ãª‚iøÊV° «3ëOaweD®¬- ð¬£Y˜±ŸÆ°‘Bò¹¯"•ÈUqçÀåëz™ÿ¨nß8☜ŒŸA÷£çÀöÃnì#b¯®°ûóm v„,L‚À„?5!ŪÎäµKŠsà÷å ’7³D7¡•ÏKùq%ä©O/d`½–ÞŠö•|Ò*%*>§ÏÇ3ïpóÛ÷Ö Šµ¢t±<¨öRÜ6Ìýq+Z=ŒÇ%ƒ°É9ÖÞ9Cp8ŽŒÎ)°­M²ûÌY ,…¢:ò¬êöÞ Nv¸.( S®vĤò0aj3Š>n˜rÔZ:ptU/0[çõÞÚœÖPYÄhÙùžb±ÌÙ–¢M ­9L×j7­ÛÔ PçFÝ0êr³—îg]ìžh"æ[Xðbš… ¨®ÊÖÃë㽞1¦¦FÂ9XáÕSUì0±Èãf¨Ä‘)c¸­Ë¯ÑølQ9ï]2 ‚fÅ yÖºÚDöã†ó¿ô}»­6Øð¥€™yÔ\ë÷ßû]B“›_O‚UQ,È>û8» ûèW«ÑÃAÖ&viƸ=oÜ3—Ñí? ži6Âèuð\#"ï÷놓ų~g¾Æ»…·]>{æá„ vÉßzlwwg\¬ow¦˜£vš÷Ä Ûül5bùëĹÕ2\óôËØY³LéÊ'ã…%‹YœQzoJ9h{õ‚8o\æ˜ ¾R†ýîÝQߥݠ¤TcX'\ÃVÝCÖr–öi‹ÈBú"rH2â¾e¿c³³zÊõ½ Ò_¡‰™Ž(JÈàKøË=«<øNŠ[Ÿ²³˜šªÓõúð8¹d¬ãûØçwíÆ™­RfµD‘-²ë½Í-VÈm?õÙ»`Þ$²Ž·‹Ô˳£ è­¥X•Ð~ÊzÇ¡IÚJ.ôvIH:Ó课%Æ@À©›œíf“XªA…ùþ[q Ý;`´—´#äpó•mç.»^½’ß„A<8µªz39ÜŠ={¦+:n[ Τ &UÞ¿~LÓ¿qbÌñðé‚ÃÎ=º˜.g ΤÚßåcõËÒSm2Pí¨ÓP1 ì¤fèu“šúI&„Ï»Š4´oÄDçõ pÎÁ.+˜»PSY#¢r“<0Tµ~eg/­xy<í‹{k q§ö!?;£ÜEautŒR»m¤0þ99æ³f²†£ÊfK/ô1Ô[lœl†h³wñÂÝ=[Ô mb5 å`r£ÜJþ9?®KnËÃX®ÌƒµFõݸ9ìƒïSµB²N^£Gä}ƒ•*ሉ¡®fÙOìÆÆæŽÉAÙŠhº9/œÒŸ¡X4wØo¥¸:AxLòˆ³ZÈI{h=NC¦ŽÉî(µ#»Ði?nð'a¯5TùÑL;b7¼$‡gýÌ’_ëºPÖ¹6sãH®luÛÇ6"ç‰d‡5‡\uãÁŸ—!õõÍx¿Æ»àD„Ée¼p";Ûðï4ˆuÎܶ€Gï±Å!3dÜ¡æ¯ P½¡¤@N Î9“Y †¼1ÈeMÉWŽªHnÝëŠËþ¡=càŽ<‰¸1ó¾¹Cd„§Ì~ˆ€Š&pãÅ]–Ž”YÞu³JMGj¿•8©ôÈ9Áƒ§9PAïÁ5öný½±c¬&Ñ+Å›$ÀTY,ƒºÏäÓÄ–nËšÄ÷Þí}wQY§ ÈZôû`¹ÈãÐémº€$›B‚X‚èá8°~I–EfÔ8ê<Ù­u›¡m!û]6Zð’^ƒf S»øïÕžM¤ÚÐ?…=b~ Ôk°žouúÐ 4$(++aüZѵà@[¦ì,+Ï}Ú«Ã4Dùcç’´g¿,9Ù~ɪË#$É[Erû30J¢¡€)8réЫGžY/Ϻs ÝÓüǽnã|’Ìì‡dîâŸB4Å“ÀâBsr]•áÒ$9ÈêCZ†Àt™{¥öfÎÆùŸ_ŸO…‘´’žÉY%¨&iJlžM÷ròf’Eç÷%w0Ó[H‹\àÁØákk¢ÝÔ„Çù4M¬‘öË˨œ„ y”:ôwõÖ¾éíÒ@òë2ì¶C˜¸.cöÚÄ@çb{½rìO§ ž ™:ewÜèáÞËÀ¿ èà#QÀ¦™¢eñþ¸¹Ï¸·Üëö-­K2• ) Õ6GÄU£0›”sÉíÖûZpj!D‚ˆ· öv†¢Ýú;cäã$ú™…»_ÁX³³Bx (5Xà^b›Ã½9hYº¨Oi¤YÜlO*ë‚JšïT§ä_$®É;Œáõ#ÌËAEÕÊ¡„ÙyFÃv.“ÿƒÉ×ñ†îŠëD‚]+Çâ S.ºöÏéí–w¥²òÞ}þ™}Ÿ¾fïØ==(SÈä+ç{'T·_Eôç:–VRPâƒCîŽQ:(Öaaæ‘TúæŽd›xù´¥÷½ˆï×TÐP.˜G¡½õáuö”áM¤6;w>™ðw‹aÒsùÇ ÄôP-ù/ÏÒnYŒeøåzx{åòŠ!’¨cjü¨ÿ¸«â¦ Ε¨’Ÿ˜ÂÁµ•‘ËYdnÃìœZUÿ³çûS×]K܈¥rèú|V…òjâÔ°R '%b´ðèÇaÁnÖ£áǰ†æQ}v—×QßÅ(£11»Ì®–(´Ú ¡¹;L•jౕŠ^–¿fÈ6Ë´µæZð”ˆË‰ã=ìBÐʆÃeÒË8®¬â»®øO­ÁÖmQ#®ÂD„îøLç»lòÚqÆŽdJŠˆð¼EN o/Ú[«ã‚u£…:ËvkŒMcÂe4'ñ2{CJ™®žNWº0ñÓå³¥é4ÖX¸™Þ”bÝ?ä˧àh~ÍÀQÐ;|Ž%ŸSRR–z%íUãüCè©~³ZtîHVdž€ö+¸¢‚ì/Ø ,F]mð Ý[€Ã,9|xÛÇà¦_±.!¨"Æ;%Rë{ÕðÃo# .­j”“˜ãDÌçÜU9ð\)m91-Õ/-—ŵ©'ø§˜›âÎýßò:‡¼PØI-hëQw÷%Ë Ñü.³Œ`742™(àqu'>è±ú„WÌ«úu|6ÜÅÏÛO ÛÙ{ÃC@ÝpO>6*Qá>ßoQûlüt¨¥‘/F´ßØ fÕRåº,\MÝvyÖšÄþ-_GÇ-笛Xüày+iäò.a+ÃTÐÑF§Om}5@žä4ƒ÷¨ê–ÒEa;Úû&ذ­ëuôú« tKgâ¥z¹*ÎÈÇP0µ™÷,H3í¢mØõ`!ŽÝ®GMRØ ™”ÈõQã:ý¯[¢ªÊƒ„–˜˜óÈLw“Øt-½^™œOœ'ö^õ"£™¢ ~ôbȇÓ‰þÇŽ#Õ6H×ò)—u}Ÿ3ݵ:µlP¡ÁR«¹×:3ßëÔs +u΢McißUÙ¶3,/9‘úP ecÎÝ6, Ìq•}ÐøiÍÕ:_pë‰fhxaבIT‹¼š®ŽŠæ{>Áë¹üä'óaŧeœž4s+ìi9 ‰2dé6©_ê‹»-c>ÀF°äŽbïmÁˇD¸Ñ”ìõù;W 2œu­nÜ ´ôv`5*ŠŽ‘, n~- ™|_•.«%«ºs¬ß_¶~5DDCNÀið² 3Mäý ^Ætœ$Á9.{¼·¾B¼”¨\n*ì«ïSuK2šz-ž\- +ïWåкU­@ö¢³˜ŠCSžçôÇIE£/=£sÞûd]©ztê¿*DE„Ò²TIápJ¡»³-ƒˆCé:G–?ìîØ˜l'4{ÙÇë9tß|·±8) ­kq•Û¾wZMINQ7°PxŽMg¼ñpM±ˆ ŽÄ]±N—kc9°^ã“úoúh™¾GhÅ uw##ñnÑ>Ò= Ým1u1\—¶‡LôßføS2^ Oc0”ųÉ4±”ƒ48”×øjÛeÆB„uQÎÆÖ-CGµ±©Uæ1Þ;åG„NVQ›{ßo†FÜ$NÇ[Ÿ›E™p“¢{Íd÷êîYXâMËHòÛ"'ÔCfdDg±V¶ƒÓ9Πŵ3õÒëhA¿"2«ö&‚úF‘ðØ´mw>kŽ"ý¢µÞ”ÉuÅ»çH†XjïׂsT‰xÓ<(½Jl—@ºÈÜqê–­06"xÖ/ohÎq(#~éÔîÍà h:JC+ÇÎkq›¹tÔ84&lCÔdµ¦¦™¶‡n×9zLÂË8dÂ9½–€§ ð³+:öÚ¯ùäTP±Õ…lEòiPM‰Éê¾:2¼aèWœý»Ô M1-((ú¦檒E8’_R;³î‡Ç×;¼©kR,âv—À$âìˆëäÏE:Éoï o¼E¬˜€ÉI†|^ž:Ö¤p&I/÷Ü¨Õ ä·´WرڮY‹£É™7ÍZƒ€(ÞMJè[e Nºäi„XF«c?8ýøÈŽ;ý%‡%«w.ÐD¨~»ÒöFHëã³È·©º™qÄâ:-JÖm/uå¬_ÈÔýŒ +»%t’q½õ´&e‘>œö.¬®ŸÉ¾ ÊD5’PAºÄSžW²´¬¢¿¢Øóÿ‚È’€ò”Á3ãÈCW!uz±÷¾ÿâÇoj±¿^@Jµ‹ðÚðíÃÿÏÃEŒÐÏþ}בùg;œ뜼¯pºÆß¤sÙ}ÁnlÍ_0=÷•Nƒ€û$xÉâ¸i²’Ñ£ŸÂè´XƒÄ¦BÏFá>eñ–…A®1+~Qc{• "—¸8%»®‰ñTGá‚¢M{õÙV43«ÙòsÅE ê'ƒƒ&¡jì9x 'EtÖXÊ)ÌŠ™;šõxCÎy*P¼Ìþ¡hÑ[jŸÞ«â$ݽ@݈ý ™‘÷ðúz‹æëÓbðË4Ö5Ýu. »Ù¤°ššVFþÑbÙy+Ù@n? ð#bÁtõÝuÞ9:uéÑå ÃhT::ãh ÜÇ4¶™)?W]¤ê†©ºO8Ž»—•e9àªû¶„ਸXzbèdBt4¬º<ûìuBÇ©š8Èœ3Ѭ⬴(!qÝžS¿ ^/Ê0sl†-™šì‘œ"écÆg–ÐQl#φì+¤îÿù¥®ððfŸmý,¢ËíXÔЩGÙ’Ûý;$†Qíñ ¹šï÷Éòç.åÎ^í¦É\“20Jä'(ô›Š×ˆc@WÜÓüôvD§Ñ+t¦BEÔ3iþòS»ÖÇgþv·igØÅÅ®,‰ÈÎ_Á‘'ÅÒƒÚôÞ*`ÍÜ!6!öÃ]²NWå+/ÓfÖ0ÁénŠ¢nè¸5>ì—ØfËfù6¢Àê!j»®˜½c%'•zGÒ›CݘþHÉkÎënnã‘äºÑÔ¤Î)…+T¹¬®w˜Î° †¦øã¼‰÷>8˜D¸]Q«±Œ+@ᦚo>Pž1ã²B-ÐLµÓÛþ‡ Ý’w9Ì´¡}£LŸ¼°®ê{¯;p ›~®Ü¦ì2j¯|PóøÆ ­sW‰‘2&eHÔî™úƒMµðÙhßiš×2µ­c0ôTv+‹¹!÷i!Îu` ¥ÇSg šk¡*wØ áiÛvj$Ÿ2D1>fû¸Çèïh©"J‡[œXÅ‚(C#“EñAË„Ùk#è:ã nÚ‹’äÜ‹Z¬NÉG‘I×v¼A3¦!:ÏBwlõÞò'8×ç$˜Å–ã:KN7¿¡Ê¨Éæ†Ó¾¤ç¬$–TR¹„¦ÃÒW¨èâ‚üâþÁæÉ%w{Ü¥«D\•ßû2ÏrŽÅÇzþÕ_ðÚ÷¸Ã¬‡¤ |†Ÿ/ 4Ù(0»Ê`‘<ó0Ø{Ì ëª9³ü[Ìøœ³¾©Vs¹½ J­$=xž¨:vJ*ÐL~BùPTBuò¤º„hq˜1ŒXXy.P¯!ð%@BCÂQïÓŠ®>9rêÆ¸ÖUUððN£$Õ¾=>¡ yD§½›3´“I¬ÈÊc˜ç\ùli4æ>¥Ò¬³Tåü,6<ÔB¤,çÕ“ÌͦV$Ýu"÷KZÛ;úéü6Ìøý‚ùöÇÎXޤ¹4€Ð ü:ÕÞÄ\¾P^)±ù‘𠂬¢SFi¾Í” ñÇVÌ=ôôÖ›ÜQ~m™ùÇEôã¨tQ¶´wÛ¦Õãû|Ñ4šèÔ T½@Ù]ãüÒÍ‘ÂCi85—µxX¼ðÖÉžÄÚËc*9©Z?ý¤,aÀiù½ç5ÀF[F(TjÃV—Y]*[+2årã¼·/0¢³Lpë˜l÷À—!‡‘’7}‡v]©0-ÒHý%]?NVwM…ßÏãÑ8K¬÷µgUÔÈãŠ_Ρ ×½¢âå@¹Å±Kz£¹}0ø\›ì@Š iü´·MºÎeÏãÈ<ëó¨hèû=KÎ"¸µµíb úp𚤸v)ô[±K€ÒÔ¿ÃïG®â‰Hý Yr7”?ÌØiv,­2R 9†fE®´cî¶£¿ÕéAv¦Ä‹¯· Ôšø=äpÇ‘IÅÞC/7H|ˆ»''·å“³½;¬ÉWF?ÌåBˆ4†Ì{FÕÎÊ2PÌá1Mâ~ÕßC•Ó(jŠë­o0È.úiK_¢v×U¬c†fò˜nðo›rìž«ÏàÙåˆ^ºX#¿YÀS:-t2 ‰‹¨%¿Í-*ÎÛÑIåEb8Æv±€E3|ÿ©‡§UDäÓôM¶ÌòÄŽwgîJø‘t£rδ—¹|lß¹;w¿¦«(ìÉ£Ñ̈ŒõP~Þ;rN±‰åˆ¥ò°¶LŽ×Û}&Û?ê’O6§–Ú,ýþT¨/Ž25}Ø_–KâîÐ?ÃVÐòõ‹ûËçôKfUÍdºlÉ,®“¨æP©—=Æ]­”dà éég&¾ôcÉÇ—é¥>¹5¤O"1ÏÇèXwU1Òñ’>ý½«tÛ¯figcu±Û)ÔêoogØìÂáuþèlJC_´†ù‚i-¼Ë`¬´â¶ìLºó¤ÆO®F{$e·o0}À¾‡x¿Ã ƒ®Y¢| qM‹§Â•>ª °›¼.½L¦Ôm_øz# Où®ŒiÕ8<¤:¤9\Ìë A‰3{hÀv,½SVIø‹¬Çè{M1t=ÕÝ÷@£L…™u » ¾ÍOØçàòuò‡…ÝÄý”rù>»šXŠìz!* %ü+A½W}ÈÎaVq›ðŸ?Û'VJ¼õÓ0*¢2ÈofíhÄ\å˘*Táʾo­ÎC*HB±Œ–‹¦]÷E‡µ°ÍW·R+…žõzZ GbIæ°k ݳ —ï/UG©§)ÝöæùηË}ð3Ÿú¹Ýèà°k/Nére‡Ñ_0“ÕŸrœmô¥Ïp „Ü’ÌæWŠý$¹å¦Ÿ’v ™5· "*|F×»@[5Ôôkë«Í,/l»½wü8™Ö3WXÔcééË0‘åw‘@\líÙLÿôî”Lß¼“~âW’˜aÊîζúË"ý‚ ŸN*>õŒšˆÔ+Ðã¾~ÀŒÏ¦ã̪6í CkEvá×7+á:w$•ˆZëÁ¦Ï¿Àj ¿E£Ï&Ž›¼0Þ_š1ÑÿŒ FË&ûí´ÒÓ$¶ÈÄ­+vcí¸¿ƒm.«¼mê6ÿv?ri^¨ÿ²Æ9YPpOÓ£÷ɳ‹ƒªÄ\òKÅ"Ím`W=ͤeíüCdƇëfpÈÚê>$g¶@™•_9¡žs>_Nò:ÄF<Æ¡†?}€ji=ˆX£} gzÉø°j.Ú7˜´ùƒs1¼%rÔØÑ)éc¢­ ¥8äy@0o½Ío…ŠÐ¡Õ07ÏËx¨8Ý@žã£S‘àëÞ©o£ÇwÁÚTþr%óꢫϋ³ïò¾kˆ‘$¢ TþÑŠ!+¾Ò•myǦµ ½b±€ÊÞ§-G9F!H4äÑ3œÓa°=a'ó à[}Sç{&R+Mãô- áÇ&N™olèe Žoú¶Š@T¡ø,äçÝ´‚ë9¶ îE4Pè•OÂ]¸ë$ ÅÀ&NÝþêé^‡ÈYÒ7›\ððàxu»cšõåŒý§ ÿXý²BèÕݹH›O1“<¹:¬?‰ {¾!/ˆsÌSšÇô9ÚË×M2Í’÷M¶ÔޤCö³Àôè àý0¹ZçÖch,ÔPHeûÊvd°*¸ÒìÝ-v&ÐldHl~Ž$õÒ|C8ê ‡[¯Rƒï,tóq­©ÜÇ.çkn±)ò&[EŠõ¦™£íò=ܼd9ÚDwRú¢Ba‚¬i[¤»Q966ÏeVžËo{{òÞusš¤2± M>ªúâSJãëÐtô³ÓÅ‹žÇŸÞùåˆ:}ßCw8”Ÿœª¹{QCù^´Ã€T“Ññ(¿»^"Û¸D¥§{ëÈÑ£qü¯Å!ß+.îÙYš»1Îa©Pó”{›æ<Ýiàjl)ÃQŽk…šáö‰Šbí¦0ˆµ›Âܱ©„ó¬¼`ꓵtž„·§† kÕò %3Ê$K8ïL"U ÝXr¬óÕýâwÜÄÝMá[UÎí‡Ò_Þ_ùÔÅßrPm~c±DïºWGŒ<‹¢fG<£¯kH¡˜gâÉ&W)öMZe5¬90 À›ß›ùe~¨;Mdó=zCér·í»ï“ß)Läâ©2›º ‡A˜áÕý" a0œXà@)3±Ï´Û¢ ùÆg£´z¥”Q!âiB”¾®¥s‡qÚª÷0Þ]˜ÂÉtX:Æ:î¼ÞóÕ»@П7»–,lgÏÍ¢ðý{›‰Ê¶¦µ‰»~ß™ØÉ7g~{ u4 ,–)¸»¶Q5¾w1N¡c7Ëõ4¿§²6iü:í,*¿’“¹DϵøÍ© ~çûí2[¹žð:¬ ÉgÞg¤5(‹#[ÁíÒÞÖKެGÇC³ÌÞ®ñÎn{°Œû”ïL?}óÞU¹ÉÜØ­-©z'åZŽöŒŸ¹P5`K#&¤Ys1®úC:Í7WÂHOë(hÎÅk0Ï >çùï'Ås/~+³‚‘¢¬íNµ›T=™6ýjpfºõSͯ®` û"«qËò³RñåbCÅœ±B‘AyRCÍgÂT¢´Ã›Áú ¼Kô¶O U¥U]>2ãe“µyEÑM@|ÕYóÌc¾Cã÷3¢Y£>¡3Ó1 š…L¦ÖívÂzÐÍO¯œÒ¡Ãâ6‚MSÚÝ_`—¾¡Cñ0ÌsW­ígdtçÂ]ahnÍs%I ‰ØœÐFM=ÙÕüÒánò¿™¨>ZÔ8ÝG`nî¹ù±-‹ÚZF-Þð€Ý—0bŠJå ½2]e…M§Ð7äÓ·~HNz÷s×’’ ‰üë-Ä}-°yÝãRtK{ÏðË_HºFü,S—÷œXßt—î¢{ô'û§}TüS, Çs¨4"ë¬d½ê}·`š!*R雥FÝ}uU³oß#‘öæÏ[¯*òb03:õyïÆ…ëm {¯…JkxêèÁ[ëÚQÒîÕñ¡…ªÑ·9ªmœ’frV bob½K^ž´g¿Y)Kÿe—e5.5êwIñ­ØMàδÜd4W3Æ•6Ók\QÛØ˜«ND;wïˆRÄ |œ¯üékZ»St‰bì£ Ãúl>t&ÆÙWgu1™§»U‚žäÌÑr‡~|£™‹ð×mÕÖF_³×Áîç—´´Ì+¢{ꤴqvë˜C²64>ݹZúñ˜rcæV/Êõëð!Úž9=ʆLäþ/í"çdk¢C×4Å%\n#@®_"ÃHÓ…ÑÉ0–eÃú\IŽÍbå'óÙ‘ïQŽ­e<°Ns¤1cŽ9•Gxìg¾†‡iÛùúf%i’Æf“/YÞ…8Î#6[iÈèB}-Þ–4Relöf~ÎP¢%"[´¯òˆÉà ãçj°²ºA$97pò.÷!n+*Ç*–¸°ᣲ¬v¦ïÇ!ëÏ‘¾ò™‰cuš2°¨3#ÿ"QÒ—ûyŽ)*YtPƒ]»æÁóÝÖq]^ù*<¨#n[7ðùC¤cª~e€tÍõÊ-gO ‰E.Çõ.A_Ì\;e•›yKæŒ5óG½‡VÂR¹&Ç;|­à¶­ò˜ާl9wƒ3§ÌvàH^§4¿Iwøò]@æö3ÚK³­ 54j·Fx"ÆG‘F#Z•³¶ òþà‡ˆ÷ü³÷øY!´G]2œƒ#98WÔ*À4šüC¢É"¢õ~«lJ”ÚË÷•K?¡J”ßU¶|4€ÖE G´÷ªX¤%h,>šÊ}Mϧ@Êfä? 'w-R quJ"ŒI9èO‰ÿˆYÊxÞK³ù«è\©q¯kƒ.èµh7,OO}ëÞ¨Ôë6ŽÓ—:òœ?B-ÚîúEN-w.·¨$uñ–8Ô0ßèóAþÈñ Íðu9-kŸÞà²ìn®ö—h»•›è»õÍ™£¥ð ôPù,ºumËÑaI[éÈ'ÏDZÓÄQ0)ÄØD³z G`@Œi9/“¼èU(š×S¸YË¤Š¬^Ééà†t£*bÞßägï(Q’YϵX.°ÐÒøø”hviNF\ltÙÇ ÊÍÑx+çé«`ªF€@Û"õÅ-Ä®ÅJÆ©¦E?zÓñy7áE½A‡¾É²xÖS% òÁ¶t™q£.‚Š Ö7g÷_…¼XÛ.§sÍú9­Ù³$U±)„½Þ·3¯¥U1':|Õ*G›ëüQÙ÷ŽM±Ø«|åÚmV+ðó›îÿ*ƒ®ßA~ t%Qkˢ̕¡‘³/ÙÕ)¾s'0_z:²µ+†çÃB.sÌ|Þß@Iã_“7´Äc¯Iõ»èç´–©­­ÏâŽYÅCÜø“(|ªYL÷×Åiö<Ç+¼ò^¹ÌF»i4V`^§üÎä‹ÁnŽîÌ]ìBÓ0#ß´†Yø‹8xv¡]º'ãÃ$ºûÔEã‡ðÔêqè\|ÐöñŽuÃfkÖ^!ÀÝõžï¤,Üì+kÏR¢ú×°/“èk=‚cç—ä®â[އœ£‹ˆJéÆŒüÖ¼Y\9íqq»~ddjì° …ìÒþ?GÓ3œ°÷r »/ÊšUÓU¹¿Ý<³&ù¶«X,•£ì݉վ¦_Äs‰òÚjŽÊèDœ¦œzKÂߎ.6`‡_›ôÜkìbÁuk2|Ik'”UDH£%™OMãÂïÐ’ Q`m‚^8ÿHct £9Zƒ1B¯ÛÑ{”‡¿¿Pa×mªÞ23Lõ꣦Éߪþ¨–IXÝ46É(yî|ÅÔIL5¹ŽCÞ‘·pyà¥ͼZÞ}º.öd3ØUÉbD <*ávÄIxͰÜ™ý†¨<‡¾àøB{CõøzW7+LmS‘% ÖøîÇ=ƒ»‘SýçL«\ùuб±VBÞRÊV88y'Ko¶¬›Àèç½m?7w›èbÖY2ýÃüÖå <ç“nö]!ù q£ð­ã¡7û C'þÀìqC0i0'éå>‚º4Vy=!·”å±C’¼ã ÕñŸ ÈÙ%A/´1{M+]m{ÇjŠveîd6Úª‡ŒšÆ_aíèDôõŵîº5Rû¸B鱚g& S“×Û²ìû7Oë×µ˲^Øíp©Qìø® ¨WiJvÅ‘IcÎʆoæÜ2üb»j—›ÞÔÙÊ@Oú»E'Õ³X«[tseC™ƒõÁ„©J±‡m”]îÎpG-t¤Ý"9¬1K êWuq3h[&[Ç©sî“(Z›ÿ ÅT4Ü=A_å®b¼–8ÙJ˜ó?aL/OذËÛÓ ~Ÿí½­²|+²Cx\kÖ—(Sh ­—I¿Pmé6ñp]Õ§kCLÁ‡gÇ‹tE¶Í†ë¹‰‰Ã7sVAé’¼¸þjÉP‡ !A¯åÄÏmIýkaAñŠc%ël{e¼>sSÛ¾˜`â«ÃãNq‰Ç5w\NW»…]£C2I…lî|#äãðÀ]$s vÃÿ8ÐÛÛ,Ét@‘„!y5½ZãWû··¸ 'R9*쑱‘Ñ›«8$:!eÇH’·° Û•a¥æ¶_F"æg'Ò—d›Õa. ^ؽ“•7y,‘¨Â¹·áHBØÊÔ+cÐ÷ÎP¼E–¤”¦Œ mŸÔ£98ÑÙŸqvT¨/ÏCâ×w4iâÂnQñ ”Ogš/í<^¾!¸€à¤X¡ë+]ÁQ0Þùú¬jøÉˆ‡àÄÄœ}8 +.„Š“R´” f®÷jÁçã¼h©É+‡˜ßÄxéRØ·Üœ¸‡KçcsÛ0MwÕ¢|ðœìc†Ö LÚ• =KiüäÎ€Ç qň’Íê[9<“€Ÿ 4ókÁ¨ëü\_þµŠâ¶5Ëãj€/áG²6)¹”ruè:³&D;DÞµŒsî«1èè ø‘–e=ȃµ£^x0Žó†žŽMà™¸±¹È…Ø«PR…N«ñ¬^Ë.ɽcå9ìÍmfª•×ü“"*ä¤l¶[®Ë *è`ÒÏØhß‹{øÙ LbðG¤&)ÿéý"|\4r¸[Ø “ï<ÿ/úEs“"iíò¯È󶈦#ët[/$_¡ §Ø ™jÕµ‡~:ìië(àWÙìeWmv3oŒð¸¼)5Ï1%˜„vµ\BÔׯN¾·àþ95ŽÐ͘ŠÖ‘X))¬WÉ#È(!q¼7q·@Áa™û ;½ß]>›}fà÷,òy§¹ šNFZ ˜m›…ŽÜóîR¨¦³*Oi' RN¯@Ñ5{”f¼)b¸±¹ß%:ZƒÞ"ôNô9UH9×¢+Mr­Ÿ—s^-ÞÀ4¾"\¨³‡hÌø éøÛâÕMÖ”WÑpuI´=9T¿“gIÉ7Aè<•÷¥÷oÝÎããGêÝ/ìöá´Vöÿ ¾ŸGm¢ÊW¾ÎcN¦¿¥­­·¯–z¬o öj[ˆ¨öÀ±4)íØûl7žØóééi2m[m²X’)µô8Ê&2õ xâÿõ˜a¡Õ/Ÿ!”k¯oïÀ\m‚¦þíµj¥R °¬ëè¡L£tC€+{6µö(ñÞCÍíSì¡ä¯hþ\Úã0I ›:Òý¶Ó’¹æt:~Õ t9 pÈ¢ùHkà 22_ 0ɣޯLq†'ùÈe‚Þ lûþƒlg¥o—„©Ê?ŽBˆÉ£Ós`Ÿx²TN…Ä]j€©ÒM( Ž8Ë`Õøkb®P ë|"¿¹Cm˜ç~ÅI;¬Û¾µ¹PUóìiµ‰¨uå5þèÍvä[j­äWÒ åE«cʮԄLÆÁÈá'žI#4>“b¶ ýxZDÅ¿80ÙZé@ÃËÉ&]¹íÊÑɽŠóa–ì%¯We‘”É×J±Na ÃÕýÞY8 ÖGs´­•]~ÒtëŠlc-šJôc°Ò:þˆ¿TÛNb¦ ¦ÌÜîSq“5½m}4Mur@R›tœ–wºŸØTd•Ž÷²`¼ÞrCõu4ÖjX®âþlŸsnw‰vù°¦ïÛ¹ÎyÌÃ$¯qÓ/ŠÖÅp(#‘¤9€{c¾Ó6¤î«à¡ WtÛøqeS`X¿á+*Ú//e‘5&¿ú=íµ.ë•" _û •râNͳ ÇóAw?x1þH¥È TûÓÌ|Ç «"} ²× ÔI"ýa^¶»8òÒáL,ÂC0¨Rÿ°šߢ`À±³|gòà€¾ Ê qôߨ/Ë`Þb/iüOc©©ñÌ\L>çÌ@Wڲ턃+IÊvíƒ"ô6S•½ˆìS¸,§á>]¾}xÕ«ÔQ¸!9‚ç+œqj!*°‚–mfÓKO#±”ã& !ÔûÓÂy4~P)Ü{òÒ qém§ûyÊ­î‹ç³\.YAS& ä‰\æ‚Â󠓦ÐÃf ൲$ÒËC'ZcQÜÈç1 ÌGïVi_ËM•é’éµ—zÍYIå@j±¾¢ìXGw¡¥Q“‹d¼ýì[²’ð[‹f;àäþ}–×±$*Ðl¤B¶=Ür^»76|Û@ëЯQFÇUöä†wjs kflÒnjHúÃi¸ôçŒìïäêJžRSæ[rÄÖ<îBÕ­6õ³ÿ¢7`0N ¾1*ÕÓ/fÌÆëL ð›4Ý»2>Ú½°i2(23*d1Bü§ðvÔÙ›½z ôËÓ‚ò‘L†·D ýÕ#;çù#1‘ftD}BÝOÁÜð¸5(åUh¶V¼¿ƒáeâ 2Ï•D;+' .ÖŠ±G÷)¢©¹²?”ˆrÿhbúg--m(_¨­?Z”Ñü“[5gÐ¥}¢ýæ©Î¼e¶úÏiˆ6UïXƒx„h ¹mꚪü‰°FÖ#JÝ!ÓTôØ¢Víå?Æ%-2¤÷LB‹%,Pbè㾺§}L J‘'ØÔè™M÷üêÆUÖö`£U®˜ÃƒµñH@³5Ù!²†:ñU\:Œ´D_»ÙŠTîuš‚„‡†~a‡>ª}”Ž×®%Ê™¦‘0¼¬v§tÏ:Èá(qkUšœKnTñJCè³ÏsÎ9&œ5ÐÒMë+ ƒFU_p¶2EüßÄU¾à¨…ìý øaI‡Çó¬/W‚1AWä endstream endobj 2904 0 obj << /Length1 1620 /Length2 8762 /Length3 0 /Length 9826 /Filter /FlateDecode >> stream xÚ´T”í6 (RÒÒáÐ 34Hw#Ý1ÀÃÐ-Ý%Ý ÒÒHHww§´„‚€4ȇ¾ï9ï9çÿ×ú¾ÅZÃsí¸î{ï}훆â­‹¨™ DÊæÌbòÄey@ +ÈŽJC£nå …ümF¥Ñ„8:YÙÁøÿ#@Üv~²I€Ÿâí`9(Äqóƒxø@;È÷¯@;G~€ØÕÊ  È ³ƒAœPiÄíì=­,,ŸŽù×'€Þ”âããaþ“µ…8Z™‚aE°³%ÄöéDS0 fgjqöø/ zKgg{~66777V°­«£…3ÀÍÊÙ  q‚8ºBÌ¿ (m!UÆŠJP·´rúË®fgîìv„ž P+SÌé)Ãfq<P“U(ÛC`+üÀ ø»7+èßtgÿ&²‚ýI›šÚÙÚƒaV0 €¹P–R`uvwf€af¿ÁP'»§|°+Ø 6y øss0@JT~*ðïòœL­ìX¬ ¿KdûMóÔeI˜™¸­-æì„úû~VŽÓ§¶{°ý5Y˜Ìëo`n33ÿ]„™‹=›ÌÊÁ"+ñwÈ“ õ›ÄÀäåáàå@wSK¶ßôêö?NÐoóSÞ^övöó§" ÞV槨^N`WÀÙÑâíõŸŽÿF¨ ÀÌÊÔ`±°‚¡þÃþd†˜ÿ…Ÿ†ïhåÐ>iþþû÷—Á“¼Ìì`PÂÿÌ—MMNMW\鯊ÿí³sx±°sXع€ð<}xÿ7Í¿ð¯âÿXß‚­þ¾ðFY˜¹à‰åOOÝûW!®ë‚þïaü÷JvOb†èÿѾ> húôúÞ€?)ÿÂÿÍòÓþÿ^HÊ ýã¦ÿãÿÿ¸Á¶VP¿ž´ìâü´ŠvOÛûßP-È_»¬1³r±ý_¯¬3øi?DaOgq²9ÿ²[9IY¹CÌÞZ9›Zþ¥¤Íâé ¨ òÖÎÉê÷“ó”þïiíLmžž§§‰ýå;=í óŸáþƧ-ûï{HÂLíÌ~¯#;7ìèö@}ÄâxžöÖ âþGð6V˜óS à©fo€¹#êï1ssØÄ~›þ N›Ü¿Ñ“`ØÔþAO>õ/€Mû߈Àfúoz5äøDc¶µÿGÀ—åÀ§KXÿ|â†þÃýä„þõ^üÛÆÎ`³uù'Ä`súø”òWðõÊÔÅÑñ©™$þÔÈá?ïâ1E]š·3}d]Ôz]-JâÆ²;.€x’z­ÍÎ2þÁÙ¹OrÚh3^-+sY¾Lj©$ehÝ¡$æp½¾pîµS÷ºÞƒó’åµÔ¾Åk“ØùÇKøÙ¯+RÊyÌ&¸<­d1rþbÇ>¸·d‘X(Âf}j4˜ïèj{Üh_•HñÈ·*µwV—d*à“òi~ÛRun6TßåúIH—³e¸¥ž¢”N)/Ð~ƒïV…µ10<¸ŠÝKÖé/ç°ûƒ:Ä[òÍ ©'R•æj>Æ}N±ëQ:Ž—‰4®8¾šb…*!ê x~bó ¡þ=’¶uf¸eê!f[~ú×BK;¿”®î@Þ”œYÊP‹/35)U¿öæ…Ðái‚«%Äá(Zçd }&Õ;Ë%g¾>#¢j‘Ö©•¦º,¬Z¹yܼ^F7S ÚU³4(EÀ=»ïÃYj{0¿†%àŠWPåŽ[!åÌØܴäE & ‰‹¬Í¶¨kNW´K´ZÔæ˜UH÷ÛRdMËHR¼íПe8äáóÛDü´’ tó¢ôÅ¡¼Ë%^UJq>}/g‘.*È_ñ½v”É6#sð2Ùy½£ã—7JåÙHD޹~MÍè ›cùØÓ²èÈ‚£*RZÎÚw £;ö§EÔæ=o!ƒÃ&üy¿‚P]{Éñ9/5¥‰­£Ã¸F;–ƒç§&”rØoù öòƱlŽ@ ò–LD¾IÓ4[5ˆWÂ’—¯ìèî"?×Þs;7]á$C*Ë×`n'µµÕVDçþ2oÿf®Þ 'ñ p~atf©i¼ ú.w¹ó0¶TVÄ(ÐkŸãå*|õRŸ´Eº#Åàúà SH€Bä<†¦QDõë„wŒ ¹rùÒ–¿/Í`˜‰?rRíómÍ5ˆù¤”%îKDÊš ÿºxa„ÆÍü^ðÍj¤ó¤Ò…¬b¦u¬Ñ½«¦Ü.Í ¶e^ñ Š< 9ƒK[`½¿ì#4˜®@Ô‹2r‰ýyý$þÕ¢8¾ùî-Fý‰H6‚-Ý5ÁöùªùD}d%dç‚‹‚áÌŠ7™XŽ?ó‡5Ö:Ùm!†ShÒÞÞáW šwü~fO}J›+£yDÏPÆ¢¬úæ¦éV ”Kû•¥l´\-ÙºIÒpl~Ôùå€jXÅÙ¡³ÑEÈÈD=lšÃÿ}Ž“j”C•ÉÒÞžƒ«¦òa‹“]>¨´!°þÒv÷pMË“•$ßb—Â:Zô9qÞ»™ ×÷|)ìç—#kýRzÝK˜ýÝ)Pë`ÔƒËÝb¸„Ì=Òëé´"§gBÐâj’’döÚ2‹¯S©ˆöê{"ÈŠl^z-&Çò %­ì‡62’[Ãg\?‰b²!ꕳ7›½QÌÌÁ‡ b:*\©/¼;UxÚT-#ï8ÉÀ½Í‘wäUa‚¼ ¥ ¤\“€zÝÙè<™½|8qƳ)b3;Üð;™W×Û~áùU››á‡èOXò.½4Ëx%¾-\"FbàTÆÄY/øÖ˜Œ@–¦5éürP—I8—F§ðàn:HèPQ•à%üæ$ˆÁÌ!û Ì,°ðZ59iº[¬XÇwÉ(¯69·±yöô&_³tH ï–Ñ@»Tø]ø ™N^·),0ÎZD…—.²Þâ¼¥ÝòÉ¿I`cñæóQ’Í–×å‹.BNž­ƒC°c¯,ŽíÚ¬œ38'DéUä SÝüY©PóJ2‰wÐ’C…X›.1ë+‹ŠÛàêŒboãªÛ™Õ–Ôé{Ôé1ê2},8t=FRÚžü¶;W£WwT1zYDü>¨‚ú%’—;3å&Hˆ˜HGKe›nDkõï=Îóh&Ó(¼ÌË|üé݈5¼ûƒ¸ï‘qÅ^§–ó¿õ­WÓæÛ(V‹%áÜà>ºË¼7"¤anœï‰4åz>ä~&wûljLvRýáOâZlýÛ8zÅž«6jôað7MrS C ë“}H 7{S¿pÓ9zÕ íãËÉ6í36½Ö‡×® ÏFùÓö(sªÃ–_¤Ÿ«LNR±oF½%ò*9Uú„«ùºX™$£â>ûœ4W~+_±H7¤°ï¤+¦°”îÙ‰5"üãùdcgžú‘qqŸQmß}\§Ò]碥¤ ¹\®òÆî²ø¨÷õ«†ÿf]Ë–Ì3ïïj3ó߿ϒx0æ÷+ºÔ†&Iß1ûõA¥7µo†vj/ÏêsX½»Ø¼ˆ >ÄÎC +P¦Š±)ñ©U\%§g4ÛH7úurDF¾w#|õ&e¢á»™yÐÀžõYT4EéÙêm j>T½\Àž5+'Õ!|G˜pX.pÿS;_Kùƒ€( õóÚXº¡µ¨.,e}ü’›v1Yñç;¾ÕïÜ¢x7ë42f:sÏ?¨ŠÔˆ°Šåx—‹;bq=²œD”e—©°ÛE£ãƒ «8òÐàG/Ì®m}ÙÒÿµ<ñãª-/êUö~+Å[Šö h4è%Õå|H§}ø!;®å«bPè$F—ïe[oÖ$¹-è¼|°\Ĉ6š‹Î1!džäÇrm|àBʵ;èQjOvÃ3Œ´ÉlåÇý"~' ¦F%ã–çÊ=€:2€Tû¹ EöG‹:i–F;…¬Q1d_wÆýš5©âîB$ì#ÐZ@@Ïn7 –ïÁËܱ)¿ýø“*4øê¼óÍæèÉÞ†qÝâÃù-®Óû†bsÖðòn$Ø7KÓ#%ù°sI®h]Î*j¤{oºÎ¢ÆŠ^ÅñÖ"Ÿ³‹ÙKÓ¬T•ý’ú=ÖÍX~VJ¢A-u…6ºí?k6ihàp¤ìåŠß –=k„–c†®úoÑ-÷™Åa3}Ñ« .~( äs×7"¬üÙ“kïÕ–ò$ƒ“ aÿK•I{üÝ¿ ¯zaã up…yf„]ž¤‰¯»ß/šòþhÿJƒ*®¦~ºT#’8B9‹¼cçY¤eÿHé©Î÷κFa¤á«=¾Á­êrÍaž´Âz k$來n£‡PÑFoÏÕ3ô˜e³“7oÜŸV>Í>eàì Àg>U`zâMÇVˆ£;ëb;_ÓšºùcÉ·¢e/Ñ~8N¢+Ïh†Ó$p¡oˆÀš†ÿó3æP3á8;–…TDYØÐk^JØ<å#ò—ÉëëF‰Éù¤ëE•9kŒÖÐÇ~BkÖ÷É·™—"™IqÞ*?~ 0ÙæH½æ›“˜Ë)ýQ¹ƒ‚ EÌïÀ§(]ÞÕQ«{)=+Ü ˆÚÛJ¦¹Q³r×˺g`?5yí7Ê?"1´8T*ØzH÷¨‚ÿý[ˆ)ò<£º‘/ûçÃêeH5Í;_k™ ”q% s×”V1úëÈùÆhÖmLf¨@´>F‘<ç~ßìÙ+xMýxDŸrí‚ÇS^Š®KŽèÞW‘|â.4Ý>J~=ƒ ô*û”ž·æ›—[…ÍØN¾²íDÓYª¶Â¤S6ì²¥áÝ|§9qT3¼ ªæ÷™âuÅÉíöÖÀ7 L>(6/±<ª+`H§ðº²—wP¹´Q¿N p.eÿä»6SáÈÐçÓrÎŽI¯šWW¸ÂöýAÃÿ}:ƒp±`rVûß6‹AŒ­Ñ͈؄ÇÛ“6¤œŠÓÀœøÕ1}5T ôå‹1ÔN ZÜjøÜ™75qÊ}©ªÜgí ?SÅìBÞħ“ßÓà°‚á9ÙZºXô<ÏìÌRê¶ÔvØw¿Ø€ÛÞ¾·cð{‡ù. Jµ‘>Yô‘Håê8åšµB1•m·5šnHøˆrÒ{LZõ¡LîCu€Ý·ÃçCñ¶!äv‘í‘ö'HþrZ"Í•£p4})kkÙ6pv¯\ÔCvVg¢ýH/‚¬V_–K² ÖG4í^TrZÃvÃT:œ{Û•¥î…¨¸±ßjˆÂSj/f4Þ…­²‰ÞtÑ?‹‰JÁ€QSELcœÈt­¯íH"o×·˜wÍ;2Ïï˜Á‘oFŸ®RÖ8´]3¥:Ý £Á>”à´ùD ÞHÄc§*DU¡xÆ‹/*2#ï¶âßGy”ˆKŽü:•û’¿8é^>]•.çt•AQ|¶O?I–4›*´µládp5ÎKfü&çÅl¾&œ`ÓZŒ¥MmpVBŒ:’Üõ¥¶"cï¨á’ç‘)$-§v*X’¡L5éeE ÷ó>·†Ó¼à­Ó×$³ÉØmttÜ”NCí¶d²Æ‚@S‹I÷Û@óqìô ïX¿÷Th 𨰥ۇ)G5œ?sÕÉ•!zœ5‰ó½› “Ö»:¡žJ×WàÎO~5~»|7†j^ˆÀÖÉ­|yé‘7¨¾=Ê—ú.úÎ@yqÀ8Ѻâ`©„Åš®…HgV¤”¾½ÔCU ýÒ*«Z– 44Ø,hõD>cêRଥ„ä㨤ià8 F‘—]¼’NO#$o}D_MÐ¥Ë;V»(¾w˜ÁNziíº{ÝÈð¿‡ó¸úcc2²• ònŽÔª¯ƒjì‚ȹ—ˆh×â"d´X§ŽÀ`¨†8ÅB só~`F ÓUj’Ä›‡ÿYu…¦ƒ­ŠùäÙ={ùƒ£õÚ©ÌÞoò¶úåñ{𘪌0+ Ï>¸(‡ª‹I «› åv "ôö¬À‘på\vƃðèFä9\)Œ¥¼º°²wK³f©»aÖ«q|>ºPç‡!Aò±eP¡d髨œ}l"F1÷pñùÉ4ªÒQzŸi*Áþ.â‰8ô‹„ž~mýâÁy •ñ®ƒoeFö´ª\Ýájró†€ôñÙFÇŸIÚ{. Dùï×Ñ3ã·³ò²qúA™ÅŠyŽ1¥ƒj”ç$0%»ã6íã#úu£ÊÁƒÅg:DQ"×–°Ô$~ÆÓâ½úáô¤ÀOo% %üÔÎõ«"oKk‹¹;9…ÕAUâu„·çÁ犖** 9ÓîŠ)i®‹Q-¹ —·•ÓEå›reŒÍê[ùT«”çÓ–+$Á §VZF\¸ÃiIÄ„`ù1õ’2âsêªP¸ÐfVÄÃc€Ê4g`DÛ¯~=‚±ægZ[T½ø¸1ÎýÖ´žÐ`Ù m"ç ÿ¾/M ‰¾ÄþÕŒ·'ÇmtBÆŽÝlÚädéXŸ4é¿?s²+{,Ô­Z|Ú‰<¡«ïÞºÍýÀœêÀý†Ïݸû5õö¸­{ƒ6‰'ü† ¯2“¨6ýòªd‚;£NÒÕI õânwßZQçfôL~Qî÷ìócß²P"×ã a¦¾^ÑÌ¥e5ÕhJj4Z?ÛX´Âi@MغIf+y‘ŸIí¥D#¿“L¡zÁ«îHs¼8}Í~ýa‹Š ààIeé QvºÖÙµ§ÞN¢ÇóÌéQˆivŸ¼Wbñwõ–ë‹wt3ê{€³ÈI¾>k×¥vîúÚà!ÿÁÄœ°ô†1´uo*Ï”7f‚ûŽÚb˜ùýo]rL­M¾öï,ûSG§¾”d6Hgõê/?`Ùk1O:gj Zäàtú^„Úð­XÚªT,_Ÿrvô•D¨õº+duNb+Dʆª$*>¤#[õWà~œ+‰KÑ&RÏ á ç¨´+_‰$d¡t~8ûŒ[ˆ¾Œ­SC'˜’gјöeDÕèø«â~RFÝ_m‘æ¿d;]êVù =:WC³ãŠ|ôùC²íËÖ†ÙïD¬qj3Ï‘º"¨2¢û”àO£EÝç§“á2Ú߉SòQÔ£©PÁ6Ú¿N¢fO×h#ÚBDÓµU`‚û¢¦Žk⤋1§¡ÉÚü°ôê,¸6 ÉNà9£­Œ,ß+nš6$Ô^þÊá/‚ëGWÖÕ9TGá—О«‡7Ÿ:b¸@ˆ [¦f¤ŠEIç½í|Ûµ Z‹§þº]†JdX?Ö|ŒµÁáu~pËîQc·y۶˦um+v‹‚”Z”q®e»-¶ÞÌòBÁøóD´HzgñuO¸Ðñªœ§ÅLÕ?Ÿ 2éV´æc@"¢‡ÐÆXéú.<Ñë§[¼žœLúµ!ØšŒ}qÛ—üþ$¨Ù'c„Hc@þ(ÜŽ¨W9¹òåEû¤ÁȺ€¾j?ÑC=YàìJ€Ñå^¶ãçó©â”-q!»ÈMÎvR0n¦ ÷«Ð.¬ÛÞ;Þ5Ƈ»XxA4ô|óc‘—oV ^g­øù¬IÊ%„9‘ܸ®ÀË5‚jò°ùÖÂ†Ú ±öN4ÇI­b%4d uÖ’ãFÕo —ÚµX­>^y|.Rn»½7OÃß?‘Ú¸uÂóôf’õ ÑñpJ½'€2Ìe.¤Ý¦7Röîúf¢ÍsžW…‹·’á­¤7Êgö¥ÐÏ{JB“A«{M˾‰e5.c+´¢_&|»â‡õ>’ºäH.âºù^,})üJoûª¥˜—à—Ji©N®IIÍRecTÐ T½îÃyÏYÑ!‹-õèÁ$ÎPgCÂ/S®©ëŠG®¾9Ýp Þ=ì9Ъ¨FOß½OþIJLJ0eË”ÒÐýpò&ywX Á„“‘ƒ£ÔegK¤Gl‚ùâsÞ—¹ˆ-¾m¤8„ù::¼òI¼e|4)WòÛÒ­—KžÚÅ<7³„;~BË¢î»œÏÆy·»¨Ú)·ræcD€Ÿ/>0˜l =|ß+¯e» 7£ÆÜ¹a% b‹8 • Ô€*bÈÈêÏ%›íôZ:B’yJe—²¥sr]ó2 Éæb‡—hñѯ>»Á˘½ßþö£Œ^À+¦Y¦¢Qå[iLÀ:QøHç`ëCœ™Ý¹›ß YãϨãós§òøœ8†UH>Ý6íʯiâ¸PÕ±1à®E×Zì¶ÖýO_/ QBŠàÕ^t6Íã¬Ýq‹‚œ~*öV$‹æ»•\/ïŒSìöèA,5©ì!ZÕ¹úQU„ºñb¸w/³ð†˜_>ir ˆ¥¨­ªó’²ú›ŠîP@O ¨4šì±ÇcV»¾¥£½ÿø‡ž^¯®óÚÇÌðnâ³2h·WÓ@O|°úÖüzh#žç80¶–QNÜ0j›#7¤Â^ESL0¶¦ý¥ãqìõš1 Íu™TÍQ® Ë‚Íøû©îä/r÷Ò—øê¸dÝiñbr²cUh|•Rº×ùn|aÏ:Æ0Ks¿ÁCѹ¼Ê}ÖŒŠùD‰}LŽ¢(÷ä´~¡åSKk}Ùw_[’¦›¼(«¼`ëa]n«iUõ ´ï¦ðιµc¨/ Úƒóf°+Iý@{J;Mþ³^ÂUáï'åWj]Üf˸ýxQg²J£t`æ¶’É9)ñ[ ãWñõ˜ÇÔÚ˜‡¹ÞÁ¤Ä¢×j=œ[ZôZ3è4žv½©B ˆ·Úh {¥¯ã-Öx*¿ÿªAϦ@åWÌ€)Hê™[*¸¿ÓòbK ò4öïN ”% LN°˹µ8r‹8ÙmèùôF:6½©˜n_/"n¡•WEFìp›Oµ´ “LµYröoRâôÞ”"ž/6ñ›¬†ý2(ji‡e-é¹KàKu[i’zxb +&°þ<:˜Ÿe±1-e‹Pó¼ÍOÕpä'»ƒ…M/•” Ï|«Ê})HŽ/†ÙÇD=¨eЖ«¾Uk:iZ«¢ù³û€·„έíl<1IÄðžçœ-T›¹ð2ÕšbgèK‰+cêïŒÍNËÜ«-ÈF‡ëù”R×dîÖÂN¦¦¡¬-°}B‰ÙäûäÎlÙK’Ö’™°–{•[(å4|(Ákä Û“Mí©Uå ³>žW$1 RüæXô(Ȩñø½XE¶vþi×á s¿C•ˆà&ˆilÅ0|yþF—0$®è6¥]Ú‘*éGI·§(/¾ýiª1aÇ‚p¹ÜW%¶+–¦šûJ¨õüŠç”ÐÔ–tÆ·}ù»Y8/Øب>¨âamÚ”|Lï`D6ÔÌɯÞÀ$=JjnJÿ‰B%»„™ÅÖ ,B·ó5ëí1p‚ §î€4¿¸Œ‹’,†=ó9Pš>¢&a ŒŒyˆ¼æ>Tªs¯rÅä^MÒúªã [ÐÓ~æÐÇÌm"›¼’òR–)§%Þ”|;÷íK¯FÜ/{xd•M–3c‚øò}õÓ¢Ý^(+~\æ÷êš ó»d1F–Oô32r²šÒÚ9µ]ôäzN‚Þúá˜mLâ©J%Ï»tpÆK²ÆÜc^'LóžM<¦d Ï• «P­„§ÃÇ\Õ¤Ú})Ä>öp3{â÷uíÓíU?gíQþZç»fùY0ï¸øÿÒx´ endstream endobj 2906 0 obj << /Length1 1928 /Length2 13901 /Length3 0 /Length 15094 /Filter /FlateDecode >> stream xÚ·PœÛ5\‚»3¸»$8w—fðÁÝ‚Cp÷4@à.Áƒwwwüœs%çþïU½WS5ó­îÕkïµw÷W54*ê,bæö¦ i{ˆ +» @BQQNœƒÀÎÎÅÊÎΉLC£aåb úo™F ääleüE tyI]^™ŠöÀW[€ƒWƒOÀÉÎ.𢽓 @èfePd|°‡€œ‘i$ì<¬,,]^úÏ#€ÞŒÀ! ÀÇüw9@Ìäde„.– »×Í€¶u{3+‹çÿHÐ Yº¸8²±¹»»³íœYí,D˜îV.–53ÈÉ døË4@ hú7Vd€†¥•ó¿2êö`w ð°µ2Aœ_k\!æ 'Àëòu9€²ò/²Â¿Ì€Ÿ€ƒ•ã¿rÿ®þKÈ òw1ÐÌÌÞÎñ´‚XÀV¶ €²´«‹‡ 31ÿ‹´u¶­º­l¦¯„¿÷H‹©€¯ÿmÐÙÌÉÊÁÅ™ÕÙÊö/“lɼž³Ä\ÂÞÎqqFþk’VN ³×ƒ÷dûÏýÚ@ìÝ!Þÿ…`+ˆ9ø/#æ®lš+GWœä¿I¯!ä?1 €‡ŸK€r€<Ì,ÙþZBÃÓôw’ã¯ð« _o{øÕÈ× zýAövº.N® _ï&þ!spÌ­Ì\¦ +òõ×0ü/üÚNV}ö×ä°ÿõùï“ák“™ÛCl=ÿÐÿ¾e6I9)E 9¦ÿxþoV\ÜÞàÍÂÁ`áäapprðø^|ÿWè¿GðûGU€VÿÞÞ?å `{ÿ¿\¼ßœ¸ý»9èÿ=: €ÿ]AÉþµ§Aú?#`ÀÎÃnöúÅñÿ{þ.ùëÿ¿Tþ¿GàÿÞ’´«­íßú3þ •­ç¿)¯Míêò: Šö¯cù¿©Ú µ¸½­ùÿ“s¾Ž‰ÄâµÕY8¸YÙ¹ÿ·r–¶ò™«X¹˜Yþ«™þ:¿Î”Ëß×ô½NÍÿ JAÌìÍÿ/N^ÐÉ è‰üzµ¯ˆàÍñ:‡æ ¿›ÀÆ ±wy-¼nݶwBþëÆxù_ûå¯Ð߈Àöáâ°ÉÿA¯L¥ÿ"~.›úÄ`Óþƒ^™:ÿEì6½?è• üƒ^™¦€Í쿈ãõuÊfþÈ`ý¯: à?Òœ6ðøº=  Ý? ¯Þ,ÿ_lþ_×¶û/ä|³sý“}"6ÈŸì«8äO–ëÚÛ,þ±Çk½Ã!Ï«K‡×V¶ÿã†ëUÐÁÒêäëQ;ü\Õ;[ýCðu ÇÀW/NŠy_‘¥ý?Ò¯jÎÿ…¼¯çl tþ‡ù×ÁgsùSÿº?à?í¾žÍÈùº˜Ç?öÂùªçù7üŸN4surzmտ߯múü÷[ò™!ÏÏØ›½ ¶®n½û.Fìβ=ÊÉÚwñé Q{KŠÐmW5PBèþ’+?rN¬sj'ò~ ë³ø¥ÁFÝÆhÕ'=Ro¾¶lºÉì3Ž%üpè¬àʹ#ßÑ¡gÂ1·À;mTp¿z?É€Ïìx¾=µ/#DÛXq[nyŠ@WÄŠ=‰@ÀÏÏ…Ü&–ÕV!^%69Õ.Gí|ñ~ô8‘Tzÿ>½wˆ“g£o¡”Êj=øàÕAþ*ë@$m¯‹—HÞd0I³Õ%EðGxÕ@oê<¬’\.¿—1÷Øï‰w1—.‰K°K%…/ÉîoÝ‹è t¯BÒZ0t:ðåÒïÏ•¿ª¿ðæ‹øí_*§{7ç·ã34|ü_0ÈÁ>¢îeS€ÞÞÔ>Сž@èÚ)ó ã×PÉtªÝ·ß¢Ÿ]5B² Í}»Qg”ŠWø :Tû€°?†ìIŒ„Gx›e…Õ’uàZ§½ R‰ö å[‡$¹ŒÝ"Ç#t€œ:Ažä¶&¹Ç\ /ÏrÞ­ÿGþÁ¥°©»Þ÷Ej•EIÒE8¨¬´o> )óîºØÚØ5Á`$óI 6“ ©}žhByÐ|/mç¥ZhP×à´Jþ&/¨5f/],~¯àyÇüCïÊ;§Uì¬})ñl†— J·Ø`tÔ¯«¸ÔÆ~-æ§3™˜¯þ­@iîÄ2þûE¾9…7 DÄE¾C4v >Dz Áœ¹ÌßÝûÝùmxP‡f…Èuy“Öd ÑŠËQ‡ö¿u –D]€ˆìÆ ÇÓDEÎ? ã+´ ŠÚ)À­r~¢…ýªåÁÿ³äôЄ~,ûj@^rÇÎ(C7‡†5@ùkîŒ ¬â¼TýÁ‚j=A/úñïsc³%œ»•(gŸtP`ƒŽhÆRûÄO!¡…ŠrÚ>Wå1v.\-.z¿tvüó4=4šü4°Æ¢BË­àp?B{BÇ^¶ßáŽÒǤ˜)ë8o¸U^&#þ߯˜Ð'ÑfÅÊÅÊ“¯a£Z ’/¬äo J0ÂvØw‡µœ¡§®?š:’ÙöÏ'HG5.+òë®I‰?]…um{6¿Ç? \8;Ãp„Xtóv%À!M÷X¼wÞäUH¶Ï\&0áÚóü=>,;082A脬y{á/¸Zê‰ÄØ¡ÀšIÌÔ9Ñø1®ÿndݦ¢™-º"É\0)`ð¡BCß û® ——nTbZOáDáܧ¬cSKÙu^ÉDÜ Û¸Ÿàà¾eFYìãö~Ò¶øÉnúNÝøõðÆIîâTÃF·PÖ÷F’BæÎ¦Å¡ ²ó±åÝ ÂíŠ8'~'®Âß87@RFöíemqGŠeR‘^ 7fѺ¦5Š™é_¸íç»î)Dq_?Щ´x¦6ÈN ýà±Ã.N¥ô ÄX:WÙ}5ÜdÉ.ù:u5íPû²|TVËÁô¹€>Î|MuÕfïj”*¤7cŸ —í >†êÝ 3 Ò™ÿé#ÓqÙ€õYæ®%jnc°b«‘lþqÒºˆj=¢vê}q‘ìŠqßSÕ.¬¡Ò§ÀØ0öÚG2e§Í #6˜|x¾öwrÒtÍ¡‡½½I—µS)Uí S¨—Fb‹¤I­¥»º)ÕlxØ’TI¸E3_%bXÕÂELµ¨í¶ á¸>'ªQoÏSOè9™ ùÁ|õÓ‰Ž. \[Ë`ˆLš›þavQ V+ú㢼d‰£û¾´£3_$$ÙζàqŽAjeQq¬KY.»‹7ŠÌ>q6c·kÌ>}:ùÆHw¦.æ’ÒBHâwZ³¿Å‡3Ú³|ΰ”8#+ùÚOÕ~Ïù?¿[‡> ¸ë"ÀK"_/ziøÖ]ÇÔçÖŸ4Ü]ÌÄ$Úo¾‘Wíx/ä6_Fv· øÆCæb6vÑeW+\©V›ëì=ßÍÂíÁôÔß‚sùË•¡ùÐ1ì`ç#Ñ7˜ßä6á0`ŸŠ¨ñ@Å$<Ž\¯§ËRñË=Û¢_ ý>‚t½!ÇŽ^©ÅTËï "×ëÓ ÎM³£:Íæ ®DE“]`*Kõ²urAf»¬HÏÙFÄ_Àñ"ðÉÇárÕØè(2dHcIÞŸOäc䀕{¹Ïô)ÔœŠ{Iß–û?XÂÑMdö‘Чgûñb ‡Í“Àe“ÆŠÿ~–lu_œd÷é5[“$ÚZçk V–´µÕ"܆¾]Àíå‘k!mU¸6R6êñÂ88²P½cõÞÙ-oÚ9Ó¥±éWËÁhmÑnDJä³ï»ð0œtÁ]ÚC±Ÿ¯èýÇP3¿Ëâb§î@ç ÓyÒ Úù$ºØä©?Aè¾`-XúDJ5GÝ;æŒüÒ>Fy9+¬K°¿;n¯ëpîT?IRàg €]ý­CÅYrO¥ÖtAÇ'@=,RXZ·áøîWV|–Ëó†ÉŒ¯­§­:6@Ž=–G5x㔇ÊÑ2Å[~óÏ®;gF‰Ž‘bbÖ_…)*óÞQ}5}o¥“›YÀ¨¦6Oµêþ¬£u%Ÿû‹»K—ÿ¼q?1àë¨u£ˆ{Õ;-zFò0Ì îù†@Í5%¼.Êó np*²åo¹ìvïZχˆ¾¿(Ö²>¥ÂÕÛŽ#}ì/o«èÞ‰=NÇ·½-¾ì–.ªªXúm:OË–1@™‘ýìÙ{S¿ÈŒF¦ö»q~bîØÿ-‘Øyc¼.UJÔÇÐ*á^5îɘÄËÝñ~J´ÔŒ&ù]í÷&S4£¡Ž¶« xô³ai‚Eð»Š_úXº!Tß[F³ž~r“mËžC”ÙBÊn(»û?æ¾ )›Ž¢4š·•!ÔÃö=ú•ÅBcéšzŸ‚62dE095Ø‹œFÖ‡˜-oÔuë÷,> ÅxÍ¡hQñ‰Ì$éRš‘+Åw?5­Ê¾Ý¸³ ¢|Bí‹©ÞÑX=Ûéê²à2ÊeÔ ¡óh¦°â-¬\tþò¥·laSoã!gìÊ»ÈÔDW¼éhð¶…uÄs»š™ä 1@{®wrGâ//æÃlRjŽø"´œ%DÎ|ÐSéê~óqE%zŒ˜¬5 @SÅÉñÓÏ¡®|$<ßQ‘|0z]í¦ã˜ÿ%¬ÎÂVA.P÷Ó v"tuŽ=ùv0ëæã‚Z µ_@ñTŽp²4ÛàG%!a6×ëèšsÐÂÆÝ"ulù·´ëËðÅ`z*µÚÊ5GΗož‚ Ö?žDEÕv ¡¨ˆÓG€]ñüT\múhä/Òð8ôP®S&ú-†!JòÒÌBÛSa xm[BêbtuP'I’±<¦”lòCM2áyÛ ;æ¤{ñ¢P{0µËê½¹±jw'× )Ê&ŠT€ð2—^XFî*Ëðt)º^˜øŠ]|Ù}YÆ4Žf÷T ÇágK¡‹ÑN>ï³Qq¡~ùR›´uá©OGp§èýp»x”¾¬£'I¬ˆeN9ˆÔÖTŠvöŵWë|¸ —ÄW¶VÝÎɆiÔ8!ßD±ÂdB‡1[Þœ¦ˆ¯Š ¸RÔô Ñû®3£‘ƒmÜö{à¸\Ÿ¹uãÎfvk¼Æ-þj£¼Æ“C¸24DòöÁ=BãÏjAòSu#RSè´Ù R;+¤œÏ`’ÿ$ X´÷ڶÆýTQB&m{9ÁÅ r~g¡hùþ¸ib‰Ã4ã)E¬“׃`Q[àø‹œ¹›ýQ¡µMÍ÷X4™Þ =U±|?lÖ­{®&ÍéÌsl~`xÞÔBÀ d$U° —2¾Ò¢Ôò"Ý"‰wtZn Å8‡Vïy³©o3rhÑ=hæÁÐB¨g|Ž)Œâ×S÷=ßÕŽö—ƒ"î„ÿ0ª§ÎAÿïÑ}úO´ðêÆ[±qiÇÓŽ¢àÒÙǪó Z¡²€DwLÚ±¾ovõœÖË`F$%4‡ÊrÒrÞ¸çhwóöÓ.…qÎà)yÀbñ$òhˆ8sHÐ`ùWÀu‘çí-/Æ< 牘c”¥\±[ÝiÁü¬ü»êFZª´\'ÞH+Ü‘P1ùocø¾–U#æ—èLÛ#¨<Ò‡!³‰”ƒÈ,Þg{¤²7ªÂŠû™{Û$CÉ‹ÃÊ{Ì6sä‡âíÃDY¥hYAÿ“ê›öJJ¨€öÛçí¤ i9@´ÛÜø,ýY^–êÖ‰»:õÑTàççÕZxrÃ|£ì{ Hq'*Ðx¯&'Y æ‚lIÇ!QŠ9'L¦0‘-Y0 ïë›Oºe”ƒò–•KެŸÌp™Xæ?EÙÑí"Dˆv4,¦‰iëœãcyˆS)"fbå½lTÀví6Êz[Oµý€v¯ç] ʪ°âw%Ç:jFS«R/p±ññ¿0H¾Gô—±ª…a²mЀjT^rƒwäçP¶.q:¸åæÓÊîmužÛ‘7ŒÐR }œÅòU§•J.æh Ý@ó.ía#•OÚ“HëÓ°6fg ‹~»(‘E¼dn»tó&(fÒD!YµRŽÆ¹ŸT*pk‰Ì ‡x°e^è¾þ"¤qÜÊŠ(qcŦP¨ ‘¥` ²ÈƒÐÞnjVA“–ìI¿çh•YÛ°‹ñÙö*eÔi¹dó²EÆ37f€íslUf#'LhŽÆÑão=öo˜¢ÕçˆR5ÜÏ~¡…» Ô7;eܦÄw Iª ɪ“an5ÐK˜‰Š°oH(c€>ho/–F"wy§^àWÂõ»E¨ýuý¬ Ûè+û w½çV·KM«!ªqÙ>×±MhmDï®yzpÕ‘ õÁ¯ëð1¿)zëÁ4¿7› Ôã,(‚'‹‡‘/„êG‹*nduž·Ø\î0Ö£ wÖÉB¡:\¨,¤OjÌÞí«÷c.ô¢/¾);Ï ±Ù.Iô’LX ²¹èî¹ë¤mÁ¨ÏKû|»¡pø¦ÇùÃÜ úpÕuKž„ž>Pâùù9>n\ê‰FÒŒ×3JÄ#‚÷%ô°óP LcçÈ•:³/x[ ûÛ…Âý.´7ö­ƒkBt ©N8Ô¶&þõ/Þ'[¢Ú•8º•±VÇB˜³3:Fç""ô]zîÓÅenäÍ#OY茽ì´*¿!5ápË8‡ÅGõW”éÕKÃ;–J1ú䨋“Œ¢òޱþÌä7ÌÙ«£Ù§ñuk­AcÈÊ.¼/´kmÁo‹ { ²!rĸœ¬#Îͬã*±é¾œj[Igáê$9j£¯m°¨àº Hœ1®ÿ ÜTÈ,ò"lýÊcÄá/Rô<üæ;IÝf XŠv^øýƒö_B‰kèm ¶ù>©´¦_Sìg–pznòG³ëØnÖõZõ‘Àä {ÑÎß[£ÖÂÓŸXá>¢ \É)lõ€&p~‘þäÉ_èÅ”h! 2‘ÝC=ý ²3:S.c>­3ÕÛ-;ûÄÙùõ-n"Õ÷W*úäTÎâKx æÚTŒ_^­xè idN÷´šŒ¾æ•ù9I³cª¨ÎøHãÍÒOpÅêœÈÜnÍ îüÅÍühRëŒèƒ‹‚÷•!T…G-ão4øÞ ¤ÆI«ÊT9+J|XÝH¨F#â\°åfW&B Ýì£×yv6 3ÒeÞ¥ìG+œâÚr—]šEû=î­„ûÚû_#ÖrV—T¤Äµè«SA~^à:Õq/3°õŒõŸI+L§®—X\¥`;åkÙi'R£ï\Âòéò÷\ŸLºª–_ìCC<«Ö Ú¦¨¼lИ„fÔT°Ö$ñf´"¦†«[J W+Á((nKôħ¿ðL #Ì‘‘Ñ©¯è8…¾šw]\›ÈÆÅ(ÿô m0™ÁèoŒ*{Ñy¶»Lv€w³1âîÔ‚‚ãæðhQ Ф»nqÀc©~K{Í’};î­È@É«‰¦ƒ3[ų%YƒÃN9Û·ðOÊL_”¹„-„î¼úp^9Ü [KŒM,»¨‹å%rRSÛn&€ä'÷½HÁâòD‚<„]­HŸ™r©­˜åˆ@ÐtÅgêB+8éƒñ„ëÊnD?Õ Ý%O 王RúYòë„U=ÚÞ(öj«oƒ&¦ß»9Íl'n^ÇõÝ~ªÛÙ¬‹X·³M C9kD|{ó*ÎðWeàÀm8üÄ1˜Ÿð’rH±á륧_YæW '0êdùÎß´O̟ر25¸æ›h”Ìa„òñXíyy‡-Žõ€úññÂ2ü) ¦¤Ù<BÓ›žé¤ÚnY‘¾¸?éâ<ÑRÊ-V<—U/[æÒnåe+¼ª¥îæ¼p¢ewlE!íO×Q㣠Uê«ÿ%ñÔoà¶ÙV¨aÚýi·±æ.>Å"©=¯›•Öì 4»nZ­’< %õÔM ¼lyYì­_eu—gTÖ¬œœ~q»Œ©’Æ–Ù‚\&AækÃÌL2Ul£¶¡6á&î‹c—±=i«¡‡éEGIû?ï÷£&.f1 Í9²ö¦ª‘·òUwx¨ÚÑÚ ½Ýúy§Ö’é†@—fºEX@öœ°…/Œ·Þú4×Hº>a6韑Ý^ñþé×Í`pÞFW°[×<âÒÓìÄ›ˆß‘½#P‹âäYZ=M¤#ùÌ ¹‡ÛùIRó­£YkÏLÁëD,fœ`>ÅiŽî´6È3p&ÕÎL3MáÀaóWnXâÐ< ÉÂuVõýâ¯à_Q?§ø„´/!? k7‘´ ìaPÑÀ¬ç&Mɾ 0j‹l=B¾¾iÆ´Ô§ý7·³ûg:«M›‡Þøã2m*š§±óÞ‹ §-3ß(õœ= ® iÝ3yQ„•j?;fœ‘€•™ 5&v8B>"™ÇŽWÈòiíSøì±x.ÙKç…»ùÃàÆmŘ›à}œ÷´mNh¯:nÌ·þ õÎv…$½HE-àÑ9œöµyùQ§";Ei©ÌµgÇI/:…5Ì%t·¼q–•ؘc¦8 ú_\'wŸ‹ÅŠR A“ýFrÐÞ\½ÑÌc"÷HùDî€çëo…0e;±jês ”¿&´'ñ¿ê{ò{´P}'•¢J†Å¡âA˜sCèó.Á]Iþ¡ÒÌõ”A§ÂëyÌœÆkAº»€æØ–R"y‰0œÉÂ^1Yµê¨Õm¤‹µÉõkÄ„JÅ¡ƒßÒö—&’Èý„W>vÌ¥¨,””=’™|M$ÿÕyQë— ¢½Bß·YîÔ;Q%h«´.5í2Q:h†ˆXm>»ü8™õ]wçFÍÌŸ‘× [/…>|VeÊ3‡3º!Šë}ƒ«À0ã¾Ñ‹•tª9³¢(s^ñ+/rC™­^&߉ô¯ΑYHÞ)ãVo[–}¶P9Q89Ý÷}£VÂBñ&[. ¦÷ð ZçX?¬%7éùr¬Â” t •¥ÀW/ÝGn!Õ!›˜1by¦€Œ7DZ•wˆ ýéBcÓ<’¶Íà© r¸Yy†ƒ(÷K£gúÚù‚à÷µ_äG•5a>Gg“ðe.“ŽéVƒ Ò˜Öt“:%‘z™.àG}ÚpKdãŽVÊßç5ÑÑÀTS±÷«˜ð«•½0k6írÃ2ÌÀ—È|J4$_Ž?~ÁÔÃeæ·ËB9EÈ®˜È’—Õvr× &Úç¢ %ŽVK˜t%PމŽtáí¹s̨rE)-Då [²Ô*LSF9h@}¶äOz—m€QAöB• üù9á…€;–ŽQƒºJ¬7ãÁKwOZ‰f¬ ± Ùþ8Žæ§¡æˆÖW ËÈÎ'ª¡¦,²rŸH¾/}š·[ÌŒ{Ã0~Ålº)*ÂpÓw$ë2/>Jo÷r«–,±/6¡¥Ë‚ôŨ)Iô«wdd­±¯í§­IiªôC±·=ý(µ]>i9Eéoo„9nÏ4 ]4ò',ÌôRïù¢vÝÙèèRä[ý¢~îÎ|ʈ\+6ßDÚ{k™~ࢿƒŠB"äß*ñ¾#GahìI"ô§¢8j| —ŽÀƒ˜‚’Ûü›“àwã¾H*|#¼%^¥jY°òw–'þd8!ĵ¶Á³þŠÕ“Ê>ú»ÐKžŒ0.D™©çL³(þYšZù% 3ª’[Éè¦ òËRzgj÷ø„ºÞ}-ödè§5n,ÑÌÉiüÑ,†ÈTª*¡UÓ+É—_úDÏ„ˆ:惥°A¼1wgB ¼#™åâìS7"¨âW ħï?¿àÄ{ë'~ÁtŽH•§CcDSž³V…ζížç³ š%^À™™¯ÕÃË·V{xi××ä#5•Yxx¾„špj4‹¦Ö¦(¹(E¢LƇ†)å®ðÅ[Ÿ)jJ/–ήã /Ò‹J5¤Ù$.BðŽX¯5®r]¿;_äÖ5i‘ø9ûÒ I‡éÅxn¤Ê]~÷ô6Qç„e1*Éé—?ÆÃ’ìÙc¨›‡+Ã~èÂYRÑÌãÕ–ßÌÔô6öªâ×áâ¾ò`yp e؇z×M믪×_u¤n5;¶ôî™!‡å³ú׃Æ8 [*¯ã ÆDKBá®´kÄé÷7žµ÷ï “µtoÛß§iÕ…——ð­ß0ˆ}È®|é°Í¶IwÉ+¶“s ìâƒ@‹eãÔ®ðTköû·à´[µ£Ä¿LòéàÄõ¹ÛæPãUàw(äDÌ‘Ͻ9/ŠNó}Q Н`rŒkõ¿¬ô%ÛìÜ&ø Þ:&ãëë]/>°x—ÊfGÒ—RãuõìÞPyç'Þ ½3y fWÖ)õFÚÜè ‹õÌ<ܯ»,}9o)4>jÖäRçGxš9;Ûkbº‘‰Dí\q tùý»ç™}…&<3W)¥õ¸j].ê íà0z<›Kaüɇ*™6”Uh²o–Î˧ž«-¹/¶fÖÚ6˜ŠW6¶¿ñÀ](ñä/´ç"3™ÎÔHD‰‰S°Wõ´Ó©¡”‡Ü2Ñ´ïÐõÊs”Ø0ùx}§Î÷q‡œ…¾ ò>Ò[~ÈÞXåùQžû],¾³£x ÑuN¶‚(‚üXiq1Y ^%o3Ñû“ã1©ÅGЉŒRIªgÐ%2åîƒ5)¸Z)û†Š±}[‹Æê¦tù¾À„ID×á×ÁIg{d¶7Y°jæ$1iìT¦çY=ð“(§Év|(Å òòÕžÉnÂ…t2°]Ò Íü­èìmgÇ«-¨X¦Áž÷7êG›öžI<ÈDºáç@‡¾qÖfò©ŽÄЖŠ@ðl½6|a\t ¬VÃL—wí×2CÈŠ;U†^ì7¡aB,ØÝCF¬ex9„sø06+•ÜËÖû¼X>:svnL‚Ú.@hàŒÞÍczPgָεæYàñí¶R¤ÙY{;&?=ãFUŽ…úðb…J¨vǨö˜€µ~Î7‹ÓÊù雄.kïËØ)§j ‡ë¹$šKÌUgá%ºÄºýدóÓ@ -ÖN•tç„fš:· q*?Ÿ¶PX$fÿ<Úø>ÑØŸ†tÙL×òQ•"¿çJѯ\Ç•FE#dæ19æöE ˆ…ÍPïmY9Sƾ__PfÖ{ýX<¢IÉ‹þŠè¯í)ãþØRœ» 'ŽÌ.jO@”îç[CÁ&„ðAn+†nÝËšÂôд¯€%·÷ºR•pî¬î`Pd4<^Ù3FB¼7ޏexî[%Fpð}o(ÈË0Fêܤh:êGnßi¼'—ƒ‚þg¹9ßèöÒbÙ¢w´™¹&ýÍQ7»ÐB›\ã„|¹Ž??U"ñ¿CW°i(°=ØÁÕÃ,ž’\*;€ÂØ"XvÒeÌÊu„‹›\µ/œF$¹ (ãL±‚áŇÆ=æY!›„µ€Q>x1‚lÑNRY¨h?Êg.ŠžÊIuçëB{öb=h=ŽðCAST @ÑØÕôÞ|­ÏNŸÉÙ_hÁWXÌŽW®Ô9¢†9½Hf·“õ>ïûœýÁ­Í©á«â…WóÕLê²Ô‰hkŸ7 º»æ`쬫9ºê‰óŠéì.²X#*U|,Ìé-K ¥›ó%`7½9Ò ÆìûêGuég·ûʼnýGìço•ÍýK)å(ȼKgþP ²Õ°èÎñâ–Exs5ñ°…#yf0•‘ÄM˜P4? à罿iÐYÁÈ´.ÁwŸŸƒÐYXóKÂdí“—`—·èƒFŽsoÀE/4†Tç¡î£q*_&  IUJ¼òyñ’¡&–†6fFð“ý=”>]§…GšSŸ“5‡ j Ý$+ïŽ ­-c;øl»|ç©¡j ’7hFkQN50ÆS‡ì?¢¡r^Iú|S˜Û%MÉ37âì.äˆaSìàÃÑdÞ%7pØ ²åòã¯ßÉ$K××j°b‚÷þIp¦Ÿ¥’Í”†Ûjµôn—ëÞCwö6lúó®Ê½¸÷Z4/V¤ Jƒ€ßRlÚ‡„YAÒû}ý貺“¶\¾ÎhßGJ9´b¦ÖUöeœ³ç*‡¤™8åKÅbu—¥=zºÙ\¹ êP¹ŸKµ"·, 1·ùyÒ Xú>ÅÍC[‰á‘ÊTªÜbÒo_ØyÜ»bnÑu "¥íDÎ/µÊüº q?k±­‹;×"WOÞÞëÑOšÞßÃý„­Dç¾k¤M›rÐjYvj9è2™iIMNV-É…Ò)gÖÔì;ã YÊÊ Vi¶z*¨1›%Pö#%”¡~»2HápxKJÔX¸ô5DýÒ9(Š•™)å;³Ö#ÂÐX;ŒÞ"ê½ûį]Ùn-à…Ú?¾Ãœ4¤´à0XtϹ2¨%e¹úJU 7Âì¨PíØƒ8ªÌi>"}cƒEß®æ¯ÍSËßÖ)96‡¹º%‰B¤AæÊ”óÝ?n ·‡ohk!•ןûŽ&×ãx<õa¥ØÛ'/ëg>Ž¢^ÛÄR~Y$ß›=EåŸ.A‹7ÿp‡΄ñ‰~:÷\×D© 2ÊÖºüÑ]È ó²irŽþ•õ«…Ìóù\L‚OmI¶¦«4ü{+ fT ‰ÎŽ@”B¼’wº ÕrûˆìúoJ†q”V|²ïQ  Cј-7ì ÈòĈÄÀeB%¥Ã¸#·_²o*¿ùÖvªûˆ–9ÓÊ‘QÔü[5ÍiI w*YbÒuIì;ÕB_Ÿýp¹á\?°/RÌÇâ§xfªÎK$£\³·š¨hɆh“â·L¸mŽ——$È#jD±‘OØZ»Ëu;hä„lÇUq©˜2SÊL³õ籦p˜ ¦®_ÁÖA_$Ý„<ÓÁ4bîSvÞ©Ô[äWÛ=3¶è)Z[~iy㟉Ðá(ô©ÚûŸ:§Nv"xN>–ª¤ ¥AaÌaxã0÷dŒÃ€óÐls˜‰oåÄ÷I¢Æfð“JÐö2~ÜlÚøtV2Š6óõ%çM«sT²|¤xº:õÊ€^ª›Ž¥np¡¢á9R!Á`YfÊÁZ¸ MHêG\«g;-…eÀtÀᙤËqAü|LPñp”¡b‚íBœjLÓ&,0 ø}†™sÌécкý=îR_„šúuÞ7¶NB©s&c'Û÷J·º¾±…ïÑ ±½õ*“ºrýýœ0hÍEØ¢õxâi#ôb]ð j\çöèùƒI¨³×Ë5¡~'/\ y9ùÐðcÛo¡~¥.°¥‘LÄGæy!±B›W^Ø×eñC€G¥?sžèª·R,V”˜^´‘]A\F{A%’:èGÉœŸS€BZî©ã ›ÅŠÏÂf\½pdR®¯‘æåósϬ¼ ÷¥Vô]Ñ~HïÈÌtx¢˜ð‰–Š´}NÈRÇB_ônªZ¾ÁÑ•§8rÆÌE0;m¹^›Ÿ¥Ó"™uŸÙ¸¬H•Ý=‘ïçõ1=n7˜›ëƒŸ$­ê>kVZ¼=Í©¨CéõGñ±®²€»µ‰Ûïz ö.T—ï\Ý‹©y^V ¾md½¥‰íM˜mŸ¼qXZM‚Ó5?i,DW¯¹‰QàĺM­”M(Ät±@ëYÕg_Ðb*q•»"³–d<Ï9™Þ¬HJ'ˆG›üÀ¢LUûŒÀ½ÂOó§þÛ칃dæ÷pIÜÅÁñ-–¶#¼Ô[ng ?•Î §†à0÷CõîZz¯]èï–s)íF«Uøò@Á†¦‰ßÜéÁ‰®NŠÀ¨¡ÂârþekÆûXò³“Ý ­EŒöw¶!És;-‰Ôõ¿5Û[´]1bžÖ«òHù!_5pü2P¬Ã%çßð9’Û}‘Wxѱ3Ô¨\Ûütn¥l¶³´}´ëÖì­à>Ñ¥Z+³¾>QÛ;lv>žÚp‚ÅÝ.„ëL- ,8Àíô!y±U Á.Á±ËRÜÂ1µ‚1Ñ—W†"AóB-––‹¦Íq´òñW“0¾ˆh¼ßÑèþ®"6ø¦êM4; “ š™¡÷sçS•ÀÑÇ÷X†•s\jÒ}Ë1æÃ­£-?­¾aPÖ?æÜD£(†J¥L›Â·Z‡¶¤˜‘ˆóG(`’¡É1$rú[d%»U-ÐyÖ+¦|:”¬Þ¬ž`ÉßÙm|;]¤tiÍp®“¯# ^'r½ï¦š-ùÝ<»¹³{ù+:ü´µÝ¤¶Xì)I(dÚá’³`Oÿ‚¯]3þH̵íc“ŒUl‘î7’(…àß/Z|‡Vi}?7 KeKQUƒ—õ56Ñȼ 7ý‹"z‘¥S64&pŽ(XfÒŽï¥e?Ýêoܺ¥²b`E–ì½Û¹¹\:?'Ì’æt¿k…VÆ7f2ƒÝøìVeúì¯øù›’“îÙ/9Þ8|3v’1‘k§ÅmLCŸ°2¢PÇ `Ú«hjÀ¼öDm¹°R ‡pJQÛlwmke•n`ÚB€Ž-dü\à¥þÙÀá°é¿‹#5¡Ý¤U=¬3áàŽCš?å­I0þ¼+o¸‹>¥!"™sÄœ¥ðaŽZrý—[‚¹Oäóòx€£‘]Ë-šJ"¿¦Hèç¾w*ëÕ–Ö†*¿QÅ-‹„ßÅuhH#pN s ”¤Å×yŒ)÷£( ˆÏ÷Ò:æ¼ûÞì] Y)Oë`kW3ÞˆŒ#þd”á“é1¶¤Ÿƒ…` …2®À’1Eøxe­©¾»Pož€+9«Ú2‘WKí) ÀMá{¸ÜeŠ\&’ÈIÎÑ€BãLUÜbHÇÏÄ¢ ob­—u;#ÄÞrEÿÂÍ*—ÊÜÜKð‰Î­‡Ñ~7²­YÒ8†Û"À$M3À<+Cmh&‚'Uá“d‹—íîߟ»•\ƒõ“Û›*@òËú1©é[’+>:[>­^»™D}±‡æ„^¹â͆ÑÙL-7Š™ý¼ÊŸÝÉ‚ñÔ3)¦|TE@•¤€Ú¬gC$ñ.hç'„N÷B ý®Á›>«Rúhà<í5y¾õ³¸1"<ÔÕU¡ûgö V¯Æu»%EâÎ[&cEÑéœNè-°– :m“1^êÔ:?ûà,‘«gИ/[ œÝ=ÞóX ²®@j3º½=ÊDXT a@‹©ð©²(ÇE¢ üžZÉùêfþ˜ùh=m Ñìhוî[w;ýTE/‡1…ÊÐE®YãœèÓPý¬¡4ø_O%?š‡–ÐÌÑãÀlã’®ì$6Â.ë¬C¡|tyÙ· ö”`õ~üÔ‰n®x™Œ!œBÔ‡Œ_y°Ì2‹§u7¶©‘UT#pÜâ¥P¦U%œ’ÁR< %¼Ê_²x_óî1Y¿gÑ'®õkNœÉÙõxAºÓnçÇ^nA½‡·hÜË;ÖtoãÏ>bÉ á~X`ûòyÚõǵ.¯âiý_.\¸tzôä;y•jÑ·¢™_°Ñ¾9‘vû™*9Pœ8¶v¹ên×PS4©‘»E,¿˜8i€ÅÙ.F»Ýœ_픽ã³~8—\Ì +è©?쯯ÀEàÆ-àýán-×£}6¡tm [òŽákDŠOD™‰YœÆfáâçK°•@È®§Üw #š‚·ˆ¦_bh|’Ý…5ê3j䇆SHÈ4Ö:ùÅgÊm&Qi|Õ2jp$rÌMÊX–iàyÎoGô‘²‘ÿðŸóO/÷0‡”ÇNù,hÒ&!üȾJeEñÉfú…dÏÑ {6G‰ïÌÉ—2G „%0c&Q…ãܳèö7€ú÷JÓç÷8«„“\e+Lgƒ:¿ƒˆ„<.RƵúªâê…aÝUª.¿tj9ùç^Èv gtÊ*«Ô$k²›>$ IHÅJ¹@ŸéØbÒ˜I)/ä6öåêî—NóM©FÁœ”€£#ŽgyäWéým×Gþô¤;YENPÊ€…kRhîëËëðœ„Ç' z«÷ø¿ü#bP¾?ÙœÛÃó›ƒÓ[î…ÄßÁÃÍr„eˆŒô‹5¢Œ‘cDÒEo-s_S壛Ë5b;§$;ãÞóѺ¿W+…/ê‘ɲ[8N¸0ÜzûT³œ¢†ˆä¦!V˜0Ù_è {ç!ä†%¬%%~ 5ü±á"KâàU³`ÑÕ\)/•5”G?0¦”Ç1Xtt:ƒ™…œ¿òöÎÜu€ây9§­~¿g ¾Dò o%ìlÅ/‰¯G40nñĴ.ü,y7–šoð½Ú›+#™÷*f†A7“¦²ø·Ùl4nž,™™Pê/ýF‘”ë’¦3g¦­kg[ªy@ÜS4VD팷X™:y,ù³Ó cÚ·ÊÎtbšj]%ŒÕ!ŽñRÕZŸÁÇgù…•‰k†n„3¤/éZ¡’uΆ øÍçK£ƒÒx¢œ–!òzÏÛ]÷ç‡Kõë¡ü*™lïýNMÜØìÅ{WªwqD·Æ Ø}Ô å¤1+ dKá쫨nÔóKC‹#àXNK·ôüfšÏò›0#j âL¹¬¿ YZ‘¹ÛÐ ÿNKÛæñ¹´ÔH=ìöÜT¼ÝáW#‘…jí¹N¿’FüÈqšt“ˆQQ¹(rR§tÅ&<4†cC·C‰‡Š=ÓvâÌéÜÆHµ¬‹âh‰‘šü g‚õ1ï’ð¸ˆ>l»œ´ûdÍœ¹¬±É{äö“ K¬ï.¦KÝQ Ÿ±f'w—Hûº©„awLl)ËŠk-ä¿ý¤*xÄîa®+½ÓmNº¸â ê}OýÑôuNA 6ñ„è²r™YmçóAEëU¢mrN¾ øS݃¼e’o[;û$iS»)²Ö±\ÒHâQáGÕkkR`¯ #JôâÔkŠAÛ{_Auå™'7µ[ ÅE¯ö>Ÿ²'*팽ٗvÖIz?ÿÔG½ØM(§ëAàJƒßšœ9•Áu‹ÒÔͯmK“ÏYµr-nƪ‘ÎxCödðß/6r,ÉÎP¢ÛJ€ñ_Í&àæñ%m@“¾xÂ×jBÂñëÌ¢ Í·`ýnHG@'Î ó¸Ý˰oØ,³×³Š*1â\ïüfžjøsIÖê…T?s?ă‹.Ðͧ\J$ÆÖêK‚^ã2¥åAoMωGªlª|ó1g2 ˜fY¹it%ƒ-ê /ÀÂíFø‡ˆÔ§Éì&<äDzGTíÛæf~ø·ÍjÚ+nrõœFÈI ÏÚo£îäýM2Òá¬laGOÛ}ží‘멲ÓjáÀÎ&­nåûöµ.ïÍ`EåãÌÏÊ¿¥üÁ£6Co’Ã6S·©Ãç).I¦‘©ô{¿Ì)»€m¶¼ ;²;Ô– 7¢·/î7±}f=“‹šhÎx‡©æ˜E—estƒvã#ÞøgWµÿŒZrÙžÿ¡½Y†»ÃãIênVÍ=˜Î\Hö„ÅR¦Øcé>•eÓØÛ±ŸCýùw?ÍÀ(¡Y² ¾EXÎÀ6¾Y·HLÕ*JVÜÁ7¹nIIóSÎOxw’ÔÅÊÕ„Š>Þ©?ʬkaéÖA‚WÃ'Ne‘'Þlª\Ï+ú¿ +¾WÈ2KJ.õ8ÝÁ0ÐY‰j?-w‰(™6îd"ycKD:ˆ|¡?H4Á>¤ ÏÖò1¼' žq)fj°€>Y¾_¤ýyÚG0vu•»^ÓkòvÁ²Ãú>}–—æfRv Û€‚Kíº˜q"˜°MÂ{ª“"£/ðB³=íQ@€žÍK÷}ÍvÅǹîð*F‰€éç[òÂìîÿ+ÚM6 endstream endobj 2908 0 obj << /Length1 1414 /Length2 5906 /Length3 0 /Length 6867 /Filter /FlateDecode >> stream xÚtT“kÓ- „*i‘¢„šÐA@j褗„’ ”*Hï½)U)Ò¤#ˆÒ”*‚‚(Ò¤#õÏwþóݻֽ+k½ygfÏ̳ŸÙóòÜÐ7Tt@Û# hV"–*ëèh(IÁ`Q!0XÀÃcŒÄº!þöxî"¼0H4Jæ!”½0,ΧÃâ€:hPÓÛ B$d ’2`0P –þˆö’ªÀ|@! &…Àx”Ñþ^H'g,®Ï߯@^8‘––øTtGx!á0P†uF¸ã:Âan@#4‰Àúÿ«¯¬3ë!#,ìëë+sÇ¡½œäA@_$ÖhˆÀ ¼|À_”º0wÄjB ±3óWÀíˆõ…y!€8‡Ž@ap)Þ(„×h¤¡ Ôó@ þkÿþ¹ DòŸr²B¢~'Ãàp´» åD9‘n T[ë‡ÂP¿€07 —ó!Ý`ö8Àï£Ã€PE Çð? Ü éÅan¿8 ÿ*ƒ»fU”ƒ2ÚÝÂb¿Î§‚ôBÀq÷î/üg¸®(´/*ðoˉrpüEÃÁÛCØ…ôôFh¨üÁà\€|N,P,%)* "<?¸³ð¯ÆþˆßAÈ/7ŽCp Ú舣F:"p€@ ÌÄzy#‚ÿwàß: áX = ‰üSçF8þeãæï…ôZ‚qòƒÁ¿~ÿy³Æ)Ìróÿþ{ÄÂæzªzÊü(ÿ'¨¤„ö BÄ‚"â` DD ”Ľÿ»Înàoö¿½ú0äŸÓÿ©¨rD!à¿Xà®ïo&>¤Áûgo@À·ÐEãòþ£+°8Ž{@þ¿·àwÊÿMü¿ªü?õÿß'‚z»¹ýŽóþø?â0w¤›ÿNÐÞXÜrè q+‚úo¨)â¯VB»9üwL íˆ"Ê 'sAˆ˜XTü¯Eú!ô‘X¸ó_Zú{¸nHBAþúîàÒÀàÿŠáVîŠû¶`p#û+Ãàöû{º¿lnÓþ}Uíðk%EÄ%€0//˜?§œ% „àv×á÷[ò@a!‹Kâ(Ñ^€_s–– ùÿ* ÷öòÂõý-\Ï¿íßk@ø!à€™÷høí—úˆŽãZE_Á¥·"b}»1û$¦ßT™}V ”eî‰Ç~Pìž\Žý¹@³!RqÙìjÆvµù”+Ã0ÓØAäh¿(4J#w²ÑöYÖêê²°E981l·øî+L€C!áŸùPç É ‹#==†ÖÑ·sð}:97€öRDbð-WUq‡ÖÝäÙ©ùýBZ1ƒˆ×›iDÉ2)f¨Ãƒ:CÏŸMKøUöÓvå¸$ ÜþÈ›êhÓ*Ù3ø³òén•wJ\sô•¨ÂbtÔ|¨ù µ}†¥rµŒékÇeô£‚8úY$óÎ×®Ct÷<»)EÆXy§½P»Í¼xÞqO»‡-Ýg¶Ÿ+ºÎ¨×c½hl¤ÐÕ¶Ú(”A¦$ö%ò‡ÝÜ©û÷: ÙŒ!´¿Á0$ÔvM´åQ| ëN#Õ“<î^nÙ¾ü0Få—“¶y†Ï›Ô#®  L”)¯1¨þøœ’˜úbéTâ¶YÅ’³#¸!…5 $þiŽ•¡¾Dâu¡¤2ê¢òáÕX´:åžüe帘`UTóû@VAçÔ#¸Ô.±Ð.¢í@0ö1÷AL­ƒ¼û×$úÐPö•ÛíOÞFÓ³_Éð¦Ë˜€†ì!쥣DÏ~Ìù¹Bý,ÝÎиۙé¼¢dî•jj¶_„.cì¢þ 眊¯CV´½ÆL@Uý8Ó;sÎÉžG¢îx`Pð÷<©Ìï7ò,úò Y*òDe…µli»ovèÎÓ4ä»ô?ü0 Äow±À0û.õÐN›˜zζ¿–ÌîÕöŒ“5exÔøu£9’€UêÄcûnî…LÂvÉ›“­‰4¿ž³VõÇMÐúíÙ|ÂQÕÁeTÁgÃ+n¾âöiyŸðlñ¦| ,÷#䉆FþÜQ¨Mj$Õ(­¢‘ŸƒÌº“J6öE*ˆöú”ü°aL¯~¹…yÈew³,2yÄZAÂ'I£‰Ìá\Èó½(F}ќ犉rÃà ü÷aì;—¾ÏÓg³ß3Ió`•©vêªy™‘â/ÃÛÀFk1N³ ÔPçÃóñ¹íÅ–î"8@ÈDö (iûÇ-/B½Ì€[¬!îQý2cméhU ¯%%²Õ õÓÕjV$Ýo”fáɹs±W9±-êO’˜Áû8OªH¤§ãÄ¿]Á{× Ýç²i-ê ô'ZCÅînˆ»kQ×=Ý80ýxá½üÃ&UåN?¼32 À/*>¢[ü‘|ÇžxËù2eÞ﹚mý³ Jw•bÇwÍG;ž7IžÜ¬³.LÓƒ"Hšê·OZËØWã]?G¿S2Io7Šºñê= øõÓgý¯ˆg8%Í—:X¬ëI\忾߮a~Á³ÖBöãÓKÆ#ìÏùÖxÅ­áƒÖ&µ ¸¼äd½Ü}—g ïÎy§S$·²1”zœYd¥Ûu&òTÊ4&Ù)±1J< évòqÿ‚Çý rWU=u…ú‹åºfVñQáÒl@0ˆÚ@æ¢Ýôňë<]ŽÛÌœXsóÕ†IV­yCƉZ.z¤ã‘cÃF“ô'ZœA¿¦°tò‰½W=IyÐPºŒ@”zWN;f˜¯h¯™†XÌ¿©,m+à±Ár×AOÖð H‚8À{ ws-¶T«¶½Hª¹T×eX̨êÝî{¹öÒÉaêˬîÒN*6çbŸäRÃQC&¯ËÕ»Œüºb¡ »F±LI°qÂ2•>°M £#­ÍÙn°0\‹ÈÑMŒ7^eAbò¦}MXnŽ·i¼ízþ<*&®UÅ}Z’ð# p6*æ™lÖèJ7ÊÖ2]vºúB1äHÇ<—~+³ï¶¶Ã’ź©Ù©þÚ¯¬k–̵yÉgý·sU‰Ÿk"ÙdXégw¦Kt­×<ùk[CÆZ¨…ïn7Œ‹00<¢ ÑD_\pÙ6c™Æx˜-©™\ïmJ *ÁL†…É *ñ³± {&Ù Ò°&îã$…žLU}×ÙÓ&Zop|öyùÕæ’“$œ¨ë¶ÎûÓà%_Öú25WVªìBúÖ†wþXy™Ñèhö*¹`…æ5[‰+Àhv¬ŒÓÕ´ÖŒû—Ãå+b™#»çŒlÆd<¢þî¦ìÎ0âsÙɰÛut ;êŽ.w¥‹¦2U¶òøz¥ŠüGÞ&4¼,4Zvy•›ïDª§~ àü†¹Ef é\dhüˆ,_áÁšYW[Á-Í}#ï­{ŒfAÑxÖ ž¦qŒÉ ã=èógã”⬋2¯4ÈUL[²ÆÕv©3Å·½§È¡06KZl½ñ èlÇVNà‚eî:cöâùUYA](i=Û|xøc¼ô$Ë å.¾°€É–è'Š1ÐÀ6îÖ½`ƒÅ»Žo•Fy'¿ør¼¨¨¼C–öõF[3ùœÀUÓÏ‚ò¯t’¼Ú÷ç)›«qáq{“<±Í> è[{äH=È£²ÿÎîQÑSkñ©Hƒå(Õ„.³Êƒ~– žÀä±ýî‹ {Aeݹ~1Öð˦”}­éÇW+îH±ö&qiM¼&o­¬ËóY½ç}|f7[åHwÆÇ ·IwM7 Zó³ Õô1®n©oIOŒ–2»–ø¶;—Š3hÖç¶K5ꨱ6‚‡î)¾çirâg+=ñdYÛ•%ê]BlEu‚¶ÜUâ «þŒYÅ^¦µ™â‡§Â7™8ûéZ.ª[…BîY©´~Œ:9»8¸þ Ef0ÉöaÊw½€2¦”œQ¦L6«Æy«ÚÏí¤ÙÁ¾3«&¢¯NIÁaÈL;¸;¡óÑã!Š2Šå~ú¹ÍͯYµl6#šwEe >)>9óÙ/CªÝböét÷¨—¥ïË}ÔÞj±a_tM:e}‡>–Ÿ×''ês?{›_…áé\_Ö¿Uéôý¨ ¤Šûxæ K*n2ö|ÜN‘Q‰T¾Âs¿œá‰öFh§zŒn±q²àfzË[•H}ý@9/§¯x_ÂCšÙ€$º(ბLI¥~†î;¼q%Mü'6Þe‚†³D'5ûñº×ò³|sÇ$‡ŸéC<&Ú_i¤^„žÄû0Œ±?ö¦sBJ䔂K5 ¦ôŸ¯çB{_:¿ô'ë±ÒrWøJHÀÌsàprû2ˆ¡ÝXŠ4ºf‘[ù*4Žå³—KÿD;5Ã#DÅ pz;wnGÅG "`­À{ùÞ»sÛÿ‚‡fÐ:ŠP<ŸtÉõAApø²“Æð‹Tii/“²Ñv_ë]ïýÍ Sû§‚q+î~|³‰·Í,«Ùá_ýö–vË&/Ͱ̷@Š/Z½iöÔŠÛš Wg?e™&–_ÚkNµ‹^—Jë6KL8e~12¹9íy6ÿtƒ@>|GÈÿ›æÈ´IMû˜””®k¬é¢ãO^4N~èÇ*/ÝÉzia¯ßrÁY;—Ïðjˆäf ±Ó-±K39GÈž> »¼{…‰V‘{¿\¸íƒˆ‹$Ý1aíYé×þÍù§èBûñÛíàÏ.=•Ÿdǹí®ŒÎ ZáûÍ}çôzÝk3ÜÑaã¦o¤I«v ÏÊ­-aɪms¨#„‚ƈñ8nó…ûn¬ÀØ­ÔRý3Îõªª¡±ú™ú×e|„ «›Î†ëÅ›=q¨›ÎÖÚHz¦ÑûÉĤmš\MŸæóÛ¤Þ8¡;ÎDʼnrèçCÑi×…"ã¨iàÐy^'ÿ“˜§ëÞNC»}FT"ݘhJLͦR+ËŽíþ Ñ…ûºè‚!;ýâOb›’˱#Ãb¯¿<ª¢;Ãn´”Ds¤…Ñ~Ð§ÎØ¸—ŽY¤X>¯¯L\¢,œË?êjb5ŽOÐMcMå;"Ľ§)>BÇ. JÚÑ\ùÑ’ŒÞo’b›·½ÞXB{œ4g•kt|»ª†Ð§DZÈŠ·uêò1ŒùÊÝÉÅ)C}?1%á·GÕƒQYfåÉö ‚rðƒ®*ïäf[²ãþ½\P ŒÄãÛ”Ÿ ‚2¸’œ÷ã,ÌYç¿øLHEËÌÛ[áÉs<æYß‚Û|ú<÷ Þ\´žs‘8Nõ õì{‰X%-'3ž¶c2“Èo$=Á榌¹,ebM¶&ö~i*©?Ö2×èrI Ù3CóV {7›+¶’jS£ÃÕUc3 ¥ç?УЋ‰kª6Jw’~2PbÌãÒ ùŠÍüéÔr†¹| Ù6 Id˜J©wÇ2³¯Œ?ÍHWÒsJ"ZÍÝ1Ò“25*[¦p•Ø ùþ)ªõ7êvÒ<Ûf²…‚?´UáBÇ›)k†•—gVLVáÏÃT6Î W稺Ê/0‚±J“GζJò2ÇÛ„'œ£Å<¶ «Øž””ÙÈO‡‚Q.|õ]5^ÙŠ kH$íTU=­çg“Z^B;üïóPa6ÀÐ,µGrT(Ö-.’®IQ*wù:#-ù,rf~y9§ûHú8Ib¨I1u³k§ ÚþÀ¡½bâ†Ê)ïüzÓ •%©„M‹ï&m¸#1)ædvu‰@`Eüx7à1-ñ³ä-Ûê†tʾ:Ä“¤•e„s™ÓbUâ-óÐÚ|'†È¢ѸõÍåpÿ›¼s›"ä &njÖ: ÊrùÉnr‘úI}1ì™5îK™N6"t”“ÃÖ5НU¾-‘zPךɘ Q0rw”»hdÈY\nö=V£†»®®ó¶3l<¸’¸Ãðp>)ð)|e˜Ùh W$R`j$;‰}U8_NÙ³ŸøŽÐ±D[ÝÏEš!Üß¾¿Õ5RÓ5„QY‘lÇ¿$}=vyñS•¢Øµˆæ›”ú ÅøëVe´±´{g±PÆ7&–bÙÀ–Ïò·;íõoUí ѽMÈŽÆ´•ŸÏ½\žYü¿pÔÆ’ë"¥V L÷ÝÃ’kÉG•?ª¦yë=Ñ—R¢pÎxÒZýj'ØO„›+ZŸMºdPw f~NæÀ9w—£ºŽÚçí½¥ŠúK{ùbí¦ºÐ°‚gÄÏÌ}— µ–÷:ýçèE³HŧXž‡lzO§É?²=ÛßCn6-ú¼‡¸š„w®òn€ ¾?áU{¶„Î(2èX=0À¢t><𻏓+`D–Õ§Çœú làðÎûˆÊãû¾¹à²že7=jî¹V–z$ø:[)§¾'‘?ó±¼}…å÷ÄùE‡Z³‰¨Ô0¼Ö¨ØlR0…c†˜å™Øý¨,§`Ÿtû¥/Å­Ë÷úçùzË"ꈇœ‰Ê~ MxÎ-$7OÚ÷V³VÇ{õÖª¿ÃÆì{¿|äॠF ¸ÊÙ«Â)*¤ºdã³ ßNW«®‘€”J{EÛ{ÅJDˆó¾À[C«974?¤<<‘ÿ„yqBüµèšÅ%¹`²X+ÊçèØ€©£˜½âÀ$#¥Y$Щ)fÉßIúvOnR8™ëNy§õ»ïΟª$µ{ T 8㨛‚Ç()¾NÌ;ù aÄC:çLáMû…DF€‘üzqd&@]\Û73:œÍÛÏ> stream xÚŒöP\Y× Á Ü¡qwwww Þ¸6îž$$¸× ÁàîîNp‚ûíÌÌ;É|ÿ_uoQÕœg­µŸåûJRuFQsGS ”£ƒ+#+ @\Q•ÀÂÂÎĆHI©aíjüGŒH©¹X;:ðýa š¸‚e&®`;EG€œ›€•ÀÊÅÇÊÍÇÂ`caáýŸ¡#ˆ aânmPdÈ9:])ż@Ö–V®`7ÿ{ИÑXyy¹þ:µ‚¬ÍLŠ&®V@{°G3;€º£™5ÐÕë?4V®®N|ÌÌL&ö.LŽ K!Z€‡µ«@ è¹Í¿(™ØÿÎŒ ‘ aeíò·\ÝÑÂÕÀvÖf@ð 7s vP—U(;þ6VøÛ€ðOm¬L¬ÿÒýsú‘µÃ_‡MÌÌíL¼¬,Öv@€²”“«§+ÀÄÁü—¡‰‹#ø¼‰»‰µ‰)Øà¯ÈMR¢ªp‚ÿ¤çb²vruar±¶û•"ó/p•%ÌÅíí®.ˆ¿â“°ÍÀe÷bþ»³¶Ž>ÿ ks‹_I˜»91k:X;»e%þ1‹Ë,®Nn^vÐô4³bþE¯áåüKÉúK ÎÀÏÇÉÑ `NègmÿCôq1q\An@?Ÿ?ÿEˆ¬¬sk3W€)ÐÒÚñ7;X ´øƒ›²öè³€gÀòëïß§·àñ2wt°óúmþW™eUuÅÄôèÿÎø_˜˜£'À‡‘ƒÀÈÆÉ`ý5dÜà¿ÿÒü[€ÿ%ÿ—TÅÄúŸàþ`”u°pðþ¸xÿËÃýŸ± ùgehÿõ äže €æ÷è°p²˜Xÿ?/À_GþÿÍý/–ÿ·Ñÿ¿I¹ÙÙý¥¦ùKÿÿ£6±·¶óúÇ<Ên®àµPt/‡Ãÿ5Õþ½ÊŠ@sk7ûÿ«•u5¯‡¨ƒ¥Ý¿e´v‘²öš«X»šYý=Cÿë˜ÞÎÚ¨âèbýë²0‚ötà…3³_(.à^ý¥‚÷é¿.%ÌÍ-'À2ñB·Œ8>¬à 5zþ5Úf&GWð8=?€…#ñWG¹8Ì¢¿D#.³ØoÄ `ÿxÌÿ"V0Ú¹šüVó˜%ÿEÜ,f©ßl-ý±˜e~#vð8ÿFf¹ßœüoNá_>¦`bojþ;np¸Š¿8\¥ßòïàÁÑ)Û-ŸeG¨ìbgâbõ¯ˆl¤ò T#p j¿8õß…kKûßÜ<àœ4~#pNš¿ã'ðunÿ¿`­ßl¡ý“Òùyu¬ëÀ)êþ‹xÁÑëýF`–?’³˜Ø;—ø×õü/8'ðä[»ØþNìÃÄõ7ø¤éo®‰)ÈÄÌ~ŸZüaÅþ¯üïíÿWÑì_Ä &3sü3uŽ_û?j÷k%˜Íÿ€`—Àß àRÿã• L´7ÿ³‘¬làxÀ‹ó§Œë³øºù·(¿Œ<ÍìLì±üOd~{ü¸R¿!˜ÊâÈñ ZÿáŒCNö_Ðýw¬¿¿ÃàüeîèúÃØÀòæÿxš¬¼œ¬€†–ýáŸ\$›? xlÿ€à&ØýÁú]6p0ö&f ?ZÄúkw~CN0›ø¢úC.‡ãïøÀ|ŽÿQƒ)~«ÁdNேÿÌë?ÒÿN;ØxhÁ_˜rý%³vücŽÁõr²ssùÃ'Xâü»«¿Ðå¯;÷_!ÛoášÍû—ÂÑhnj÷Ÿ Ù9~+þÏ”sý£ù¯=ï?Òÿ³þš—?ºÍ nÞïÐ9Á‡\€öÖÿ]Î_6@÷?zÎ &qEü[p©þ{›±²‚£úíü"fvµÿè Û/k;ó?Ö ÜWÇ?8À´n@ðì¸ÿÁÁzüÁ>íù{ôú‚ëêý;^0“7ô·«ÿ¼ßÌÜ@àApýë ¼ÃÿÃ}ež@3Ä…YG3þP›êЖÛJQÆQÁ)ÊídZFŸP«Û= \mEzðèZ4aàû›å-Iš+‘E’'ŸÃƸ÷MqªÍ¾FŸÕ&všçDZ{ÇòE¿õ!2jˆìú>9ûjÙ¾j„l—£ÌrvãAQÉÁ¸õè–öüÖS²4ünvGu·‚Ké±d’1Z3Ê ¨pš2Û4c— Ö•‘žýÌuúêz ýËØ ‰ÜgzD¿£hö|½u¶w3Þ+_5Ø\:ð(ðôp‰^]¡OPùˆí'ÊáÌùå/÷Î{6 ä“|AfHZf|ôϖVa­éPßUå>¼Ðƺ•¥&èÅØŽ«*®Ç4‘)cU4Eb¸V±Û‰öÛ,ÄVZ®µ:-l’y'¿½¦‘u­:}jœW{oÞ%5ÝÔnuúi ÷Zz°ÒIZéG,/ñ¥%Á”¸Ž@uhe1ß0,º'ð<˜„ øŸ‹Ýã³næ±°èñÀtAžpfùžô+«=Sj[ŸF›³ó@òÂ¥ôbÚžtv–‡gÅ.iœþŽ&;M²óCöj µ*5°v:¤„ùl½ ›I¢Ø‹D!v“sþ¼"ŸCVºkg®|  ØËæŽ7—éD«L³ùg®*éöQ$ãÈ~mP¿XHX7ïµùþæui©˜!ÖG­»³2p±Ü¡ÙÚÔ¿t¸(§H‹FBÜlÍt!˜’kˆ¹“Ú×Ç jkÞotËQéOE¹;Å/º,_‡cÜ}¸Öpãg n»P /Ωdìx‚7¯â34&uå™–åqh;p¤å}LÂÅõĤ3[‰‰¼–hP"ä©ßu±)³Li%•sɪPPØ=ü¸ÿÚÀ‡³®ß{8 ˆ¼íÇǓž£b£´Œ7­ð~#7Œ—Âàæè¯ø•­×{Õ-6%ëý4]j3]rÏwäÒ‰ÞöÑ¢5áî\ùxl3ZÜ¡±› ƒ3Ë/®eTÂÅ[Ǻ/`5=Zãv[(²Ì• ÄÒòF•¯gÇDòµÙÈû:*"aÌN%i£­=~nEöÚVÜá ,ͪ2l½1qÍ$Qf=Ìf΀:'‰¯c÷"&OÙ2CUTœ—îÑ{ZÑeÿõ¥É{,J*ݮ䮔컜P9z^K,F[ŒÐoO‹öô²zÿ’5CöiÐjá©:vv~k³Ttß«’V• ¦ýVè‰@Ï[è\#ýQ­p4œ¾‹KÕ¬ d •—+÷¬;Dà C¬Óó"~(À*î¾!Î ûüSh”1½>ü Põfö“‘ˆ;¾ÌšŠ‰û„7žæ–Qå—Ì^½RVbº’í¾hôŠEú>S§Àwü>+%ÃAeªìØûZZüóÙ-#áS(ÈèåÊLÊ™ëÖ -<<¥³Ä!G]ïÂ,¿®‹I­ßËKÝjd›>$nÓ úhGcgYÞ™±h:Y½BÚ°_2“83d°ñtg¡ʊS9ì(åÝtÖÊo(ÎĺÚ縘Ls@ñþÜ W–»—Ç7K¨é÷ö#ÚY )"?§$Ä]I¢-RQš›—BVÁú™*NtÞ’`ÃÁŽË ò½BŒ”ríOy„C•‘<墢¸ƒîïâV'ír¨öjouwæj¨F!´ÇwB¨:rX‚äÏxX©ÌÖÖ “n¦™øßÅyúº½Eeòg¾°C"z1ýÔÏòlÜ\qeu++Éxí$:Ƥϑ«>ÏfêOop-Î;QâãZJ W¯ õ¥ûo—òÓs;äyxâ¡ënJ#®pJ–,ïÇa¡~1ZnL”®½Ù8ûHC,úÚ®câ„Õx™ÇéÂþdkìþBˆÿŒ!À{ f‚ѱ¹b-ËóU?K²K0Úl?º6«”çØÉô~ÒÀòÙþst­§–×Uí"ÚDÙ[roܤB'÷ŸÈDï>§\Ï÷1Äx?P`94芗‰³Þw»–˜‹ßñ@ŒÛ*½ŸŽ”¯„ÌšâÏí8˜Ž³ ’º§EšRºˆ(€ä_ßÈ7þúýá2¶ìÍã]K„@oAvÂVF(FÉ+—Ž^ZédqIã0­9Vë­Ý”Xªq£RùŽ*­Ý›h!%ŸZÉ&ØÙ[nTxçxô¢]xßCRo•#µïø”âóú]¦®úâëID`-B^§i¯„Q±qx Ûy#íRL³iŸbT{¬„õ)óš¾äî)|ÁÑB»Â\`ìU¥Z…>o šð@Š®dÙZû(?í±_÷ªãX×è×R5Oø:?òf^÷½Êý%⨤¦dÎÑÅsÔÙ”|HÇ ªLuu­¤žªÈ(ªìº+eîöKbz‡~-w7UÛc–Õ¨CÆë*¼ºÔÓK&ßë4ºÎ©u@Ók)ÌF ¯ä²±‘àiE«÷²†ÆSËj•ˆ|ä¥j×–Î mÓLW¿;øc+Tä¾…_2ÉÓ̆lìñy Gwßo¯"÷’ £j1ïòÁ÷_Þ]² »O·ÀÃB\´\ͽïÒ4É%åÁ›É³GL\zké±@ ‡˽#… +â¥þÖÿ<ì TJÙ£Øì¯q$‰î¤,wûõRñÁ¯WÖîOŠ%×LôÃ-nU<9e²°|à´kø—¤‰g1ßèb±‹]r.\<îÞnÈM•êÃÞ²&ަ›q*Ýò–8 ±qË5‹=]Ôº0¿:‰¨³¤¹,öÄRe@qÒ/ß䉓véiâ#Q£à}Ë…I~oïUNk]‹á>ðÃæûµvQ¤B·š˜!‘š˜‰]û¡ç7£¬9Ý ¾jNÅ èµÝ“%ÌÓ8ŒÍe¨µEÌ6yaë= Ù¤~«Æñ'‡TÚ„ý%Û³ª:°2k…{¨Ã®²ye-ý3L º„ç"óX¥ Ä7F—GËAßá‘Û”·\E•`#“„aŒV± –,1cký3±{cø£‰+Ç‹äÅÞ¯žq»ë:—I*>7 ÅïÛµ«:}~‡_š0EÛñ®.ã®6ÿ's4?œ:õkÃÆ+¾mWh¹*‘LÏÒo!’4,Òƒü£MXKªÎP‹ûâm5¨Ï2ßðg |r&p˜ßv rµSgÓépŽà'!:žëvžÌÞŽ÷fW§ï ÌUaíò'@©³ ±—Ê%*.†&ØÑœOÕRÀ7Tw˜í”8å¹!µŸ€¾´]Kó«&2‰eëzSnÑš~í=Ý{]—E°˜š€ Ò¡DÝ„£ˆ;ÒiHYøiÝ¢©/xò”ûfù’ GÄi‚b òo ÕaYoäSMhV(Ãúªï¬Jtw‚ýÕAÏ^&œE]éâ™q~b^èh·ÐÅ8ºØ‘a"œ±+k4øˆ·éŸ…2ºBê$dlÞç¼ÙrÁa{.'"î2}ZŸ­¨È³M*_´ëæ§J¬ Ø[L­ü üDk1±-åf\ßW/œ³%k!¢.C•(ðÓ{ tw€àÁÊ &4ØÒª*aï¹0)%õòjÙâ;Ÿ¢ÇÌ4#Íõ<ƒI 6S|žý°ÁláǾ–˜v8TзE&]œˆV¶Gm¡è27M¢£­ùä÷x][ß Û]mˆ8=Gi3ÒG*Óv©,ó?0ò‘Äè®.’ÿ}õèπϛr îÙ(ÕAo—É)àJP—¨Å­„ƒ8SBÕqŸˆš‡*;ÏEâÊp3RM¾Ö2b¦ˆ˜E¼ûaç¨ Y£Hó3Q_H¾d<7î ëc³dÌîkåNTnÜD-k—õ°^EºSó˜}5¥ò}ðÈ'>V²"ùTpÔÉdß)hÞêPÙö•qFýIÚ–Óíýë27¯e ÐÏÄ•‹7D ?3ç.zÎN/Ò§•·3÷·G(š em®Y´»Ö|2?³Ú”ú—hÊ€ÊA?ˆ¤´ÚžÇa±…¾ºí¯w3Jó…oœw{‡d†¥ÉèPÆh»Ïw@#{o⮉E{Q*il6Ô± â–ë® ·ØcÊÅÞb3N±‡ÞYoÍɈ, ² y²mPc:L»zr§ì³gB§Qßú.Ñ<¼`çõH‚ˇóZ÷jVü[YýZú i7N#é4¸ÛÚÖ‚TWæ¨i¤çõèáÍ3ÄuŽU¬eáFB~N°ô»%–¼VD÷E=oENïŒç '¥å¯ù9Kaó<ú›¡·eAΧ¢Eì¢ÁkºhÖn_¿¯lwýl8=šD×½ùA$quͽhN §–ÿj'êŠöú±ä&íf“IIÞ@“Õæ¯þt¡Û ¼ú.¯|,^(Z·†|±‰Ŷ‡å@\rˆþ&”g$s_H®´,MâK‹ÍN…ÂÙ³Z?_+âŠÏÞ›šcß?y4ëFÓ·>}Õã=ÝëËëIgmÿYk°ì èƒ4v»Â÷…þzD‚5»¾_“Úk¸ÈEpœé5ñ`lr–^С_1ñÆx²mX23÷»~'Ì‘ 1Áëlï]ëŸ &¡8è~6ƒ•{"¹;~=ž¨»§Úu0p);ï]>&³8Сø TØ ë{_D& ¢G 5ìñ“81*LPõç>¼:•7×Q~7NÌ9Yip)nrjî54xü@‹5û¤:¸Q¤djF¿ÔÒ¶šéH†½P¨‰Ðâ=qay`9b²ýñ“[TÖDŠ@†Î½×JCÉ×q¨{º¨~Ëëa¶·ß?qɤŽä¤ÍýL5ìwV:V§'k_ø¿¾Éç:¢íÍ»H‘qø” ÕTT&ÊMöÃGâš3›ë“bOßåËNAàƒ-¯¬Îe¬Enqúī͗±§zŒ…É£ÂÄ7ýL¤ã]dtrKêÜ(‹ºÄð„û0§6KÈDT“ ¢ûr¯éKwÃÛ›áÑѯ•²w(¸Ü«Õñ5tÑ>/á–+$½pŒžì §AŒQ_ÝtÝHá˜kI+Ì2Ðïa»`}•~Î[7dn(v®é‚¸†´ŠêAýzw§GüÕ;T¢ØUä5û =5í˾⼈ ­€¶•ñ¶bK¸ÐË\ÎÀ‹ÿpýXKBnÆ7©©IÕo¢PÑÓ«Ñ/Ú¿dû•œ¯âÇA6Õ"=E>úY#«EêæÞ`ÿéÆp:îþ+$þ„ß5€„Aw0²ŒÛ4׋jÏÓx2u†*{¿)¿'yÃGö õa¾S´ã%ÊW¹ÏpÌBƒÙÊ/'éD ­Õ ïxžo+a[„h7O¿tÖ¾ ´Ë¸{ÅéØöF/{\Šÿ ƒU5†uq„A•’j§ìO™é‘Ëq’a ¾c‘y©Sœ=¥$8uΖ*¯´ÍVëÚ³°A­RõV1KLóß4 h Õa&‰Ã<üžÂõ”$±ÆÅ!/+nt‘¢Õ`€µÞß§¯ÏØ[& ëæ]ŸŸu78cp¤üÒ<;£C^ifúFRëÄÖö½•AÕœ}Ã%‹d@’º·|-ôÈ7 eô5 4SÀK'Ëâ‡=Uk@æ3Ê®¹èÝ{>à¶-•nñjx!/ìJe­hVòS8jð£f~ú½mù™%FÄ–ó4ߺ¹ y~cÅ2V¸œsR~z‹‹#2c£H,¢ü+iî˜-²2_Õñ÷P»%÷;½ŸÞ.¾aÁ~¹Ý 35êù|%3ö-…ßEÙOcfÏԑغñ>Ïê3¯Ÿ{”K7Xþ†M\FøÛìh7ðñÕvȵ͆u¢7MtôUÞ1QþŒ7,çþAžÄágMØX‚Öê§OéˆÉiª¡5úË«š:|„ÐÁ‹KÂfô×”ëUÇJÍËbꜼïnC:¿AF—d’uÍv§³Ü×øÑ²²mhZ¬Ý»DSMGˆò€ýz»O‹·fˆ©D *ëÒõÎÈG…Jâ5—'0fòCd´@ry ÙýD~ŠH—çÀ§ ’gÄ›[ÑÎWßQ‰)-‘¦éÆî^¾Çù6>9,yÊ6?.£Â݉SA|¬»­=ÀX-5€.©øyîmj¿Ø‡Í/èoÏÙ(Tw7ýw_Ynoý>ª Èí#_ìó1/pò˜%‚°¾·> q„çÅhú8xùq©¿½T1Ú:ÆúP«hQÕpRÍWRÓ/Œ¸QvÌ{ÒVæ*a2ïÝ(Ã!Ý›KÚ5Ä/ÇÙ“G*_¯ç§t]ž kf†ÙU§oÐîDÖoÀÈ ¾¶•#7bA$ñ—¾C’äÿXBÜŸ­”4)Õ‚Õq¹mîx{gÕ#1ï)^/î갹ƒ8¸Í0Œb¥-N…ŒP×óÂú‹ïóóðGëZÈrÆHòòð âŠðÍ’Y±h£“t¹æ¸ ñ}¢Ä( B›Óœ³“Ú™á‰kÔ©Å.ØD‚H-›†÷¨úd(½otí­µlI•'å½{âº@^艂 ½æçKŠíZ*4šàú ‘¨Ï-K(rõW^m"ò9œ íYTËÞÓùá¦/È7×wÑÅ#Û+bbNg.ÑB‡†¼ä¯? 'hŒe´'Öb¸%ÏΡaN˜l°u¨kòCÕCúõy„&N¾ANýü–.æÀ›£ØìæºOƒâœmIª ¶ôÐC`Þx³h›åk©Q×Âk–,LÙñ‹Óy½f;‹ÆäŠζÓuƒýc×-AäÁªe‚˜ÜgÌÍjv­´¬Y]¨È-wÉ]^³Üžkà/ÛÓ=¯Ø7k¯k„ü2»ë­Q­Ýe{T³Ëg÷µÀVö6××TøÓÇû­OœPÃ×ßñ!Eî/†ð¸Í‡Ò¥& o.?¡u)ó!ãç°•‚oç›Ä‰ôAèš©ü1'>Õ\xú Jp¯j”»F/׸g‡Pþ#&`˜ßeC¡3å[:Œó8Õ)Ü·àFù±õÌëÆ&éçZ«!KxÛ• NÜÏÀ a†3ûý÷=!¹xöfŠsñÏÌ1ÏÀê@ÒÓS ?fŠŽ¦kر‹³ -ü‹Þ{:›¾þ®äÒŠ^2×…NV¯ÊuuÏ Fj¯ŸÓd‘¯©ÙFu ™'¿¤{ù?š_X¾2ÙEåá4°›B{ó±.’{<ê_›~`Ï—@[HµÚL\BL¥ú:„y³½{œ°|¾üÆQ{l„0Crß Ž!¡/}2œgßÌ9†^Ǭ =.Žx û­¾cU®¸„^°íÂ=ÕÆOÄ¿ß[Ejÿxé·/Ô¾âRÍ“RY´¼GQ÷R÷óÚœj]õ^ÃSâurìlL×î;>9Õ¬L(*Ó5|éã¾]ïàFhýò¢ÔK… CCÎàèƒÈ_ó¬«ç‡õ vIȵsO‚¼>æT.åøù‚™ÕÃ"ûC1ÊœDŽq‰´[ú xÉ ç„Ã’üO'ù+0Gª–(·R‚< õ˜Q'†Î HgíŸÄ¢pý60½ÅúÅé”q‹^Ô' {`kª€°ø⤠~H?V°œ±`:¤N¶âˆé&¨!ë|- LæbÆç±E祕Ì#ãŽ&çUb›öfK Å»~|7Wñ(Z_Î,Qd$R²^yôYÜÕúULÐhê_|~ìÇ™Yê´•˜Âó«Ìîë2†zQlûTLöЂ׹îÿ¶¶-G]¼í.DþÛqÌ †ÆÜûgÄÎ7š?Û)VR;FÔÛâ$ÙX̨F|²‰]ý‘qžäõ¹/†±ÑVqzMX\E_HÏVãs‰¸|éÐNÒ à:ÅYEÎC]€Chð½\8þÍwýhÏ qÌVó¥ºÓ\’´K>ÉMÄ•&¥:VÂŒ0°w]½!eªí` £·†Î"Ïj,zÖopNN4j‚Î,¦å¡¡’ήo­aç®ò.8#!:Ýì–z׌œ}Ø¢Wøñ¿Ñ^á¸Ë¤ó¼Yƒ!‹ÍÑ©´ÕºkUQ^ïûãžPoûÐß Vw¼ÜPxíÑ}½ûÚ-ÿvÏóöñ–€MŸ·áÛ5#W ³%rœì¤Œõ0i17Yb– –p¬= )NÈpgͲZz<îTAX½}7èiŸ±.Î~T×"óôAO7F€k‘¼3`Ãÿ§™v+5\|4·´‚¶é´ÊÕè™9ëE&k-/¼ü´o™0ˆk%¯o¿è„ïmËkBŠlžF솙\‡Ý_>.ø^¸9b@#ç%kKœÎ³ÊJ%9I#ìÎÒRÊðíö™Óã‹ÑYʄ۰Ëþ`êH‚œ~ìá]Yl33í–©4òYr¼—EY:é5ÝA*|©?Tê3*¹¥xE¤Ó—ÊTÍÖLA5ÁdCCcì€]ýü]i$ŽúVw°#ÇÈZ´ïô+«‰ioµ7”™Ýš’C+Õ~;`&í2'…ܧkD !Ú,¸ÌúH8ŠwNÚŠiñÉ|6.=GW :óDðòXè]¥"ü{EÅr·¬D¼EZçÖ¡?wSØ ÃePót C¯vÕ ƒo1{2”““utì²õÇVú4°Em¬BtÎZa$GÆ]z%¨\ýœ¬xûEÎ ÃuEËÈâ$ˆmôÈι— ñYG-æT”rSF½"rçǵI7ƒñ»ç ÊÞr¡À"ýì'¨>3wu*âºI•ÀÆÖÊI/†b­¨%’ël”:ާ\õÏš– ÷¾ð¹§R©§£G%¸MhK]•ƒ›òÜLÅ•U6²â ‡?}ðäög&=t‡Ý3¬]FK©K‰ólÖ󋶣ʇ†eª·ef09?ñnÝæ±Þb•GܤsHösrÏ­$•«‚ÅFhßÃ왌ÞdxÔá&4 Ä„–ãDoÃ|Í}®ø6Ÿ·ÂJ9°Èüh‹Qõ£³áû ¶ó±}‘D úcúWtŸ¶™•†åè[,&󯦖¯?žYq<ë  >iÃ…ú›M ”ˆ2bÌäë1Û-Ü “Ž¡ MBà“ıõdéàÙÃëA*3‰T'„Ú{@ÇúžÀ6=À„q´§qÞ Z‘>×â¶ì—`©Ô“tÛK«dl\àFl$(t¶Pl« Š™Åi;Üï4 [ïñ!¬Ð»•ŽÚØV²¸N}16,Ødwy —q <tÓ­‰”·ÝŽÆàÖ¥´wTNÆnXœ'¡ï"˜ÅBć7_Š.s½»÷ ùžÆD€¡Hz¿;û¡hO{¦=ZgÔ£q›^žß)ó3ÔÀ£‚•¯Ú¨%@4EÁ™íSP5^3»÷Vö†Å¦Ç5óñ5Á<˜ JO›ÕZX_óPm®‰×áK ×E!ÞÒÎÇR±o‡™ä ÍH –»Š„™Ï!¨o™‡•£×è’(¤`„1Îü¾rú”É‘qãèLë D˜¸ôÙ IÎ"ÿ÷Fà§I©ÀðH÷ûZIüqçãÂ×lT‰Í ”8óeÓ7­Ñüþì—ƒùœ6æjHzÈ'¡w Â¸ÓŪ“Îã^ÈTœ»‘®b|½x7í…ŸVw!Ñtœð° ß¹×ð!Ü}Ì?+÷~yˆß]¤K·z%Š2VÛË ÖPÙè#\áíUˆØ*·FUŒmÛØTÓàùbùf'ZFP¨÷4Ê^eÁÕ¶Ù›¥á<3d ÙŸwgdÊ{³ÐÈZ%v¸I:JªùîÍdìlÇòŠÚî••Ô’í4HQd[$\Ð~sÊ>Y#à(ÿÇÈjÂ2ò3ðA3€Ó˜z¥½+_a{¿¯b‘§hN>¡u?\±ò à È1¤K¶1x6žlR©&/¯Aóƒhg·6þáZjb‡lƲà03Uâë—D„0Écê¥á(~},›î8õƒW„{ðûŠþ¦ºjLì)a9Å¢€™%$.-µïTfñò®ˆQK"¾»M«Ùïj•?6>NûáÔ®D뉲y¬¡Bî[ì®Mѯ®÷ͶƒÌÞixØÎa@ß²†ÙŽ;(Ô@>7å~-ê'Úh­¼Rÿ†°/$vqøM…ɾà &@µlÍo ­µÌXä)-P9[¡Þ˜„ìAKçª%£…Ô dNr€ä–üº?Uôèô](tÎeƓ݆¤„]rŽ5Õ…±ŽÁÁ²¢‡l’Ó‡Ê{ÎwnŸìØðæÞÊd…ÞÕKßÙ}¼ÁY)ðËsáQözŸBZÙÊ9Ù!æŒ(pNþ68ó„T‰±N|ù¨KÄM7Ö,úÆ8N ï/Ïþ®A>9Ú† ‰7KDÅ¡eÆ?^–eY²5ÕÚøkñ§}‚ý€jPã·êxNÐû‘ø7'‡—ôYmk=æó“]$ãïY×s³¸xVµ0<%ÑØ‰¤°ÄdM7`oéš~ÓR⃆K‚¡®o­‰V:tŽK^”zü4Ökª"‚¬ÇÞ^¯@G1àÀ%dôr¯ãImêæ;¦ÅÞÇšsýÔÄù U_ò¹³‹–HüYÐõ@ŽCI$FM ô)ûNÒ7ÓR<{(¡âCŽSÚÙˆ‡¢Z3Ù'*tÜ’ò‘¯‹ (V«e°_?CD4Ë*/Ñ)+»ÃÛçÁjV¬gñc¿à!€ú‰m¥ïÜ Ðð“„p6súæ·yНðß3ߪû#vßÖ½¥éV¦B·Zë%•,U¤B¿ŠëƒÐaÆØ·D™Ø×beæ“·‰ëQ©G²} á›´!“Ö¬9åæžËÛs;?v« _JÌ0µ>Â'ù1‘Y1™SCø=Žîœ”a~„ç³ò¥z’’O¤ºc$ÚÅû娹&ï•n5Þ;ºoÕc¸‹„|ô_«6DÆ¿Õtí±Íf­b–êᬋ5½'‰¶òaz Ôª§¨55v$Õ¦aYدSOá@²¯Ê:î4ó³øøã%Ú©)%>gu=0·ŠcrÉ»Ó8,å–’ÇT¼LF¨þ*“×£¤6D&2óXH¿‹±6Êø “p¹X=AºÏX¥í=²­šQ*¤7GvV”–üåaÃ3%v~±t 7€MU–V›²Ö剟ߡ¾ú¤[÷{©Çý[:‡,ôÛ íKåçiç×.‰óSñ´=įñâì[Wwf)‚ûŸK¯ùŽR ‰ÌfU:PŠº¨Ýúcɲ',Dz zÌ€'•<´ÐÉ$5æFñÚýQF¹š ©‹’#êÞ7ó%áÖo€S]ªZ±FwÁz˜©Œéù ™Ê!2oç¦Pv…«ÐVWUfnŠoxØa6ŠÒ!Óm»£æfz¬9T®÷/D”ï|Çt³¹Òøª—s/֧⡞à:Ò»@Á˜æ8›åX ö5,^]‰÷¶6ñÚ¬Uû¹§"[ÈÏòN‡#ŒWƒ­±ì]JüL™Ÿ»ŽUùGîænÈ,WAT äÂ6±LE‘î—4$ÛH—¦r$|}ÄØä^5óR—Ƴ‘-aŽÍš‡öáGßÉÕ²é•=Ù€ž8°’‰ýI탊q"ž9—ô,-%J!&!‡ßT´Ýfeuö›Ý %Žoð‘•/$”CTß®^Ð󈑙3ï ¶÷ïÌ 3p:@ÛþžAóÂâⱜ(‡ßÄHà¬N’jª·Óù±˜%ÒN{¯ŠBI#%¹Ñ`ÞZ¿…^œ±MÖ9º{qÎ’§¢ˆ5€JÀ§È ¸F“Ñ\ÑP‰!<¸¬oÂQ-&EÓÉìvµya-„äâ¤õ¼e;=Ðȇù²u²¡a$Dc³è¢¡(K5Ô¥X'Þ­°m¡€É"©3NQŸÙÍÔÙcÿnq2Ÿw°R“¶Ûþue­çN'¼i€³‡©0ßC¼•zÒ™ùuy ÎS)^·Êöâ §-ÚÐH®Ïèv^õ4ÊÈmÔõ¢ÎK{ œûËVêðrzß´$äb*MüÐ"Û ½É›ÄµÈ1Ñ 5V†Ÿ®_<  ã{WÍÜÜYnAž[q™O T¡’„ÙHŠd w¹Hc®Ý¤BŒ0‘ЦwÒòÈ-ðCŸ$ÉÇàŠ•|xÅ»Q-Óo´lÕ}‚¤‡.?_lØï$…åô½Æœ”2p@t™LÚ}Ëœ(ì‹4wc·×^7¾s=ômiÁû=«|Ahf)P^@' å —Ôƒ‹ãa7nhlSbšà笶©3“nßQ<‹³=ȲyBÕ·á·3#´MO ÄøN+Óµ*Ö6—š dÒŸÕã¼’ÇHí6hWñGt«H::%'¤#³dª÷3øÁ®[Ÿµ­º`¹õJ‘7ÓôÉÅíókè.ñ ãä¥2{ ÿuÍtHt¡$Õ{Lˆ\~’Ü,¢ÏCßž!AK÷ʪš LÜK;½Üžd—± ±@7¢ÅÈ‚¨wí·ªÐ·Bp²Vê9d`¸pÖŒåÄ‚½9A¸¡ðݸGbš5}IÚ/ZǺMOz$õ/µ%ý¯­Fw—_Ã5&üÔ±wªQ‚ù8†’,¼íEhÛUgÁµê‰j‡‡4âݾfv-ŠM"ƒ ¹v§ ™¥wê–SäПÏ@!§‡H*r½P’–¡×ÉKk‹Õo z)4s5B’l‹avú|8'·FMQ8W3–:tŠa_So( ±;¯ß‚µ-S0<·ÅQ|F‰›ÌtŸË)°á XÈ4¥Ö]Uý`C$í.CäK›¦„4ÙT™žäõKȳ3æÉ>(+cIV·¿Mý)SiœãD{âõŒ÷¬FL3ažñÞ‰ Ìh*ÚA™Ý"f*c&ú¹#æóª?>ÅdFgpkËDZN‰§õIÿ¡:º˜Î˜vÒ12_­:•Ó!b-sˆ"5@KDvÐVPË3^ª€›XE6­¿£à\ˆ*ÿì#Ë`õéÚ°~¨Í˜h'q›Ý¢0à¼w&¼¡òpð1Ü5Šžþ˜¿ët.* ­0ÅD·‡gáå|#¤rpt@8F!w=ncFJÙgëï)üHbk-ëˤŸ·»&YTv=2ìÉÖ¤¾®x±Z\ÖAT¯¼Í6KÄ}‚£W7& 1$Ë:}Ûñ5ž´Û´'árwIÄ»…:ûlqX€ŠÚ â´,!êIêÖy#ƒ¯ÞTä¸þý2©U4Qìnã‰kâûZÄò2¦L‰ñ‡±ˆ]¡ †/C.tƒå}u¢ãTŸ?;ìôªÜó¶) ƒqÏtƒ1:kX¯ïÝH)õñ9ÓÕÎ&£‘ =Ø–_ÿ,lw0A°á>öyÒþ¢¸ßA—£ìïŽn%#¬ýŒé7Lcó®ÂA4DN„™£ÁŒíĉâiyBLcú;H.!pÐ> £¸Ÿõ2‘JõQÇ5m.\z鈀ðj4¶ fŠbÚÔ'IÿAuË¢³}iåë¥Àe-G$%ÜgPÉ)}Áüæ lºóÿ1N¤V8g¨A%ÊÃVŒÁá{Ü>s*Øú˜K:fz´ú@²zW¨Õ¤'¤¤¼ûà­IYq’µ(àºZánD‡¥BH‚ÆWL˜×LÄÙØçéKŸåç{÷=ÐÁ*Ò9érLƒä9oõÝ6‚ËNŠºɤ—'!*@»¿ú¬"åû)ä:]ñ 7F²<§YBÝa%{:Q“Õ͇±Æ³sÝæyI£]vØC¯J_&•Eˆ¹Ù5›ÛÙ„D»L˜¨Âq;u¹Uí‚+!6}Ñe_?45_« VMo»â‘~7~_6Å|!¤QòTËD˜zªå9 Òo4Õ•öÀÈß«žld6Hm¸Ûtæ ­œô>Ú2•áùó ³0—k+¦W¤9k34T4gúT¾¨8lZÇe`Ê—$SÄÜZ±t 1V6Nìn/ÌoQ*Ã' fHU d…_è„°ÚYP¦eÖH<·¸R ’÷Â!óë,©Ä3°aZpOÂ)^Ëõ<å씾i ;›.¥¼¤“:JäÏyÈÓBœÐ‘¢|ÞÛ‚‡k?[[ÞÜEäÉ3 Éåše (§!xÝŽÎ~²v4ìQeßU(ïC!Ù- ñ$4©ps÷øÝ¹Í5" ¾Âö`Ä”³cu1µzÂ^BŽÈa*›ß»hÌ'=qíÊék·\·â§âGG}¢ò<šÐÌÓ7ŒÎ(¥…­/áxu‹k°OÍnÓ¼{R.‚ô ÷F‰+{Ô¸Î8‡¥^¯Çë&~m^Oí0YAÛ,]«|ùÌ(ö$*}/Û „ËÉ5Ý6úÄ7­K[;ÃÀÂ3‹|È}RiP{b~/~ ¬õŽ„–lAÝ.ƒ[m½cå}E Ûù=j·ån„@é<×|g¿­±˜Ú¢Ù¯yÙÒ6±Œ½Ä–”\Œ¤ßΨOF6 ûã ‘'¶0YFÚ#?È Õ[ ÿKlZ$íÈi©BûWë–µÇZ Ãí ƒp Zl´ÞQçkÕ}~ÜT;*êì…ZañÜÝ­©ïJgݰòÚ¦ì q¬9Fkeèy¹Õªµ/‚ý2Þá˜×ØUÛ‡£+ú ¾š£ï6g,s=wzN2øÊ»–ÝV7šâ&Þ•xà€^û³®ªo“ÆE¶§sgµÓÎHéçí}õsãÓg¦âµ˜Rôf ôõʈs¥[ÄÊÙE¬½‚oIFÉ-MâÕª—WJ&ã>eC« ÕC&‹[Ì!Ð'ÔÓÕ„í| ‹5¨ã®;çæ¥¤¸ð¾Bq€-t” 0@¯$5¬ûD3^$¦ÐŒe<âÅ•\™ÛDû ~¨{á›ûy(S‡!IÐàêú*MbýdXêq·Žf«ˆ›»“]?1^6ssµf"}Ù ÷F óa)ás…DY^FSÔÃ6A¬ë©"pRF wH<ªÎ朳›c-ÐØêk¥Q"ßUºÜEM»ÜéòÚV–Î/"›÷§ ãØ½‘ŽIì±8­':Ùž%bª—Ruszª¯#_û#¤Èb3Þ±u·bäÁûñÐØßÍ`ÜË’ÏÉQ}dá¿0ï5O›±ŸV”ÿl‰×øÄ«ò)DăùÃi–ÖV.bsõáiÞ7hrÈHÖÁß¾WE¯5« Já,bº¯ûòßNx麌7 êËï»§˜cAij‡žÄa$3 à̂Ά(“e~J ¿q:ã}õΫ~Ô”F´¬^hÏ-\áZàaõ3†c¾IpUÇzÖíOahxÓ0ŠŸ4C˜h@ûŒX´§z½Ay} –Ó¡§°X—!Ϻ)öz¹-ßûÕ%UôäãˆËBäÙôš(¯®û(}+ÓI‚¾N`¾ï³×͇yÙ3؆ (¡æ±” X³qÚí®"¥þŸ‚;Y=GÄäת9&ÜPšxÁ›Ô䨚g.»‹«ÏmRÚû¡ý®©œ† æ:hs“$mVìãÖñ¨‹Ô‚–jBÓ1ìÔ,!øt97:1&°Wx›M˜dIàË`Ðí¹¸â䪷HëëÜF+ì,#ú]pS®¦õB؉ҟ¨˜Cø˜^•}(tnUTS]/;?ÇȪ9cZß\RÄX§„’qV£z,^¸W9ëjp¯s1z-@kª2~öø@MFk•ø3™L†c×Hú0gà}U?çÇ…¹s…uƒ~yÝ\%â)*í@?„ FâKú(”`+dÅêê;ÄÅ0¼˜ÎŒ«‘eæì§oTbuXšýÎìK 0ëÁúüb³{üÕ.R«Ñ"’ì*¤Ô\1H/údѹè7Ý[é›T'×EVðß_Ü®³ž<™lJ/×BW1Œ^;®ÊÖìÜà!¤<-® ßµ¯,­xSû6æð¯RHšrèÌm ?è|„U÷µÂ3¨",¬¡>°I`°© AÞfHLÅ€üý‚ïj:{t ¸âLÒ¬Æì2qëË\}åÊ qøPű{ÞÀ³S1òì<åç“…|K6²Í1.øÄ9ï¥1ÿE[}­ºýóKá±ìêja€ z~œršÐÃNÑýÍ‚'-ž<é¬(ÍÁBÇI)Ϋ:ìÈ`q-šhI€¼ÌöÈ<_Lð!Q9õ®'Šo}&â·“)ù|ôJèÑg‰°d–Ƕí0ÿc¥‹ÈTà@ÓèF×`Ä\'åX8~tèÐ+%ÆðAvRduz­¿Ì"p€Û‡&ç‹ù}n©Èä«>æì][ÙÝ rì<ñà1ƒã~w@äÂ}DÚ"¡t¿!kT÷Mwõ$ƒƒº÷T€#ß§ ’\Z\“u*Ðèü´Þß~Î7zŽâyB3Ó©§Å7¢%«Ò•‘£ôßO××”ur–gÖ öù ‘üá$P,Uä1cPÈ(vÂÓò;÷D’“)ð¾±ÉŒ8õ=,ÑÉr“~‹µ T?¦Ë¸Q?_ôÀ­ÉÁçpVÿENŸŽ=Øç œbjY³G®Z „¬'è±OÖak\í#`mF<ï¾,ò •Q¹Ù'&$šÈ¬9á;§yÊÊ[ æ‰Ëº`E·Î½€CÕR|¿ŒÏEbÓcëWY€®ý öÚDÑc_£63Ðȇ-Ê8­ü­‘¸æ$Z‰t ßÊÍ€Ùo¦?zh8G¡>-ú°î¢uƒA€©¨c# ðI«yU· ÉwÀß: Ú×vL^8pë ˜Ô!_( |ùäê®4s§‘+“GÊž4M÷)¨‡Ïyýu\DAÕéßþýr”^ꌑcˆ¼ý–Íóh“Š­frhÒ«ó7©I}m¾ðþ:ƒmД~—E5ãB¡ÆK^ "º-ÀýË¡Åp«o5S¥#ˆæØMB †¼ÈXœžoŠ­ÊýÚ½Þè¼2‘ä@€«51jsµÏq @\ïö¥gA’•˃RÙ4I³Ñ`ë›!áw&(\NiÇww)×Ð@”cÂôõÏë¶Éñç8¸L†³ö.{|’¾$‹œ}~á~\M-i‰¸&zÚwî´xÈtÓyä2Ÿq‚%áüäŒÅ»á¸fÌRßF˲‘…!,œ½×Ð +Oð[¹œA1ßõ!s$ dóXi|ñå¿öåýìR*¨ó¨hn»ÐÛ¡ìË< ¸½IݨÅç*«ÌO(>ñ郣 å$wÅK¥?½…ªƒ|ÆR4WEI ž÷å<싟 Ë®ŠHu;¬Ry±wNðW*rQO{€6”piÊš@×:ÐãrÃ$‘Z'ÄXUYíaJ®~"\€ëé÷¢Äò—cñ‚ÚPIy/d«* ¡¼Yd¸ÑBùK¹~tFúÒËÆÐÊkF(‘€p¬^ëñ­–¯bÛày_‚QqGŸW¡õX×e¤vužP\e$v=u‘QÁåAL3o+´œ }0Ù;\#gŽCèô?±m¯u/Ü܆§A•¿g DÐ|öõcÄߌäØÁTÚ™è^¯Ùæ3Âgqâ0‘Ô!—èÉz€jÛj|Ëp1bíÂãå‹-cNÙåwù¯+‰†g¦bƒâ4pxQÿ…§×¹¶Ò´S{Á°ì´ÃɺR9Ž“õŒŒ5A¸û&ß»Cú 2Ã%©FÌ®×À`õÀZChˆ¯ã¦H¡øÂUýˆEhàÅL¡{Gºu‘TÓ2áÆ’X„íG7R° Žîÿ¯ *²oê£_!<¼-<øOWøA•×64ëKg3¨¶ð£"$îÖ6ç¡e[ø´=½vú—HLb\Gâ1WDQQD°#®,üGœT+ÚwNÎnL÷ïr27üÈrÙóy9Û¡À¢ÕëÖa®ý×SKëw‡ÓäB¤Â4˜á¨ÿE2==¾g"æ*%uÁO¢…kqa¡‘ÅR¶Þ.%ýÛw\D†eá” ýªŽ*z6¢ltþjjeýÔ8#î&Y‘¯+ :á02¨À‡ 8‡UñG럗xò0vǃ˜*P¾çdüýª´§­çeH!$Êø\_%œ¾›©d¥Û6`{Dzõœ¨ ("Ò?ÿ‹©È~ »Žè§Õi^SH±ìO%ÍIéO9Ôâw0Gß(‚X17´–5¥Çì×ðõà :oóŒ-²ÙÖ¤HMl¾mÙÀ´O|âþ9™Äv·íƉ•„æcèæ¨pK 9kuÐ÷dúò8UDB-S:ÎÏ´£³ú¨Àßx×ÓÜÛŽ'GܾHæy‡³4ä,0A{`bëPGå^XÓA‚ öì1]ª‰:¬¹}P éšL+%|€)Œš“a0°êL°eáø5=;£ Ó8Ф,M‹´±¥¾ÏŒ\s`÷V8.ª­®:÷N"£+þŸÈ^Ò”c·ÞÀaªY'>’|f„/ó`C:¯Š¾DÞic‘D¿R%AMLå€a²Ïlf=ƒ ]–9j5SÝ~|™?ªJQ Ve5½fmX¯’žŒØE”Ã3"‘ÏÍㆫ•ŒÒSŽT6l“‘äÂùr$!ÄŽ„ PBÆB€¿B`mméƒN5¥_"d”](שñÊ5šÆ‹Ãë°˜IÔ8¢›åú­ðç~þýéL÷zø« T¹"é3»€» ¯©ç¤ŸNÎóI/œ¦i“w¤¿«'¯öX 78e¬ ÆoÀIcw]WàæùDAнÞûöã>ÅYÄÌ quA-}] "PIÅ9ê&z“ì<ú[«q€‚µŽät7‚–S1–\ØK,lîã(Ó⇠Yj QÀ=(ÛHޏ—T:Ëÿ‚vE]6é˜L!Mç^>ŒÅC×¢ˆlñ±E§gAÚUÿNˆ]|Þ÷À‡xÅ µ«sIDhS æ‚ò{aLĽ‘{}«†•k$Ò^è²úŸóÖ,_g®{ðºn/…HØÞXúåÚ.¦µËCj@§¦S ¢Ý ~Æñ0{ˆ¬¿[çólÒ}ÕÝ6¤õÐGθ/¨[ eBÂÊoM7©¹ï(ZÙÉö†›s~:x+Ê) ô`2ΟEWxvý‹îHINö3OË+ý°%>ZÜR“Í ðh{(³—ø»/áœÄNpïŸî­ö̱õh<[ò }–ÕžEoB0ä°‘ö~½Ï6ã û9rÚ§<Acƪ—Ú’ð.¯,±×xÙò䨾|dÝ…&ݵ-Ö.TÇìº^³•ÈõdöåWy—«÷‘Ó²^~Ž5d'Ú{q{¡ý :ï´`‡å÷Ï·¡ÚYOI]8ç‡l)âÛB4¹g”2Áö‘Ÿ¦!1ã^qú­•ägë`ï1ÙˆLURuÐ}1x€H9 ¹Á±«l§;@#ùfs%0[Y»Å³â áB)Ëz×GjÅÒ¢Ü#qɵq(þ2;®Ìò=BóaÏ¢L|ÎïÄžÐ.Vy# Ó’ÔWàá€Õ¥ð†:bU>ÊDB—Ô|ïN¤kla==T‰ rˆVGñVàŠÃ¹Ð-b(f‚N¬*(Í£ý+©Z šDrÁ›Tê£2ÇBz£Œ)ˆ]ŒÄøm9·ßéç Å«pcõÚMŽG*"Ðýv÷;E (ÿKžs0ñ¥”ãi(ÖPKÀ¶C¢™Æï4±•|‘ÇS>óHfR4Úêˆäë‡2\­BöžBk¢Ò“PBÕú/ÒÅʦËh,^D=}I»,Qvl\iƒU–Åá‚L(aõ!Ûk§Kq÷ƒ¾@•Êf 65ÏùŠBÖ/"GÈR }¦C‡ýÿö¯ƒ× ¢k2àýmemƒ±·qv¦]Ë~rŠ„`_|ò§—1o÷iÄIÛ$ÒiBìØë¨tÜ,1¶ii’w÷ ø\”ä°ë¹Wa‚½rÿBŒ®¯Yfýv{ïà‹¤£šÛßD¬ƒ{ø-×7÷þNïù‹/˜RDù"˜›ïfîöÜw½¸Û²YV©#åÞ·½m¸IùmNV¹«W\è%ýT‰&“ó>Xq7†sM¾Þ²êDcÈ|‚G¨Õb_+¶.?ÜÉ›. è¥-~óÀ fÊ$ïè¯V¢8¬mdÇcõêG°5lÁ—lW·:󧻫H5Âm®šºYÉûfÿ\½6 èÉí¥ÏLöƒ ™ªaëÜ~#¡Gé6'Þ§oËÜ… é-ìÖ¬@F_[F7ÕjŒÅº1²Ü%#1¸`ñ÷[ Ÿ9¼7yð1XÓKíÇŸpG¢Q}‚9} ¤vÉJ PGc@øxìkMKxe'+„<_.“Ÿtt(J4”It}}q •AàÍ×ʰGØ.lŸž3á±7), AÞyœ¿>T!ÀG $DÔ_f:Ä¡uH@>Ûý"Ê.ÌTšñQr?kP »•K£TkbwÃíP»çQ²³LzÿÝ"ÖЇ¤ÀÅŒRݙ߲ÍVÛ[ «Ç¸2UÊ#hH) Œ €[,.±r ¢åíá€q9£P¼Û~A·B,‘áסâ];.âîtl¨Ñ„¨4ãRÔùM]Œ¦¹ày­„L¿OBc©d_K×o>]Ãæ¦²­+¨¯Ê\ºh6ƒ¥}ô‡òí¸›35:z™öÀ×fŽ‹!–…R-X\ü”TFűX3W¦/v ·j%ÝJaz(ëüf÷ÇûM>~+²_]ÉêÙ%}иúè­žfWXÞ· 'Œw»[å·J'ÿA€O”Neæø¯ZýÐx%ܵqŸÍå½¢ í²‹>MÂt…ËâÓ*RòwÒ{³UŽÇ­“˜™b_&ÚýÍF€=n^™Œ"ús°èAÛÈÍ­ŸôêôâÔ2>:x/w× [7†gð³'Ä¥4Y°…gb8½ÖI!Q Ñ„µ|” ÎÐË[+$Õ°ue†™fñؤâÜ¢{«[ £“HÃs9?<Ýát׎%ÛòÖFfìØ/c.¸b±A6äÚJ;B¬ Å©^oþ[tPr\µ|Ê5x”tÓÆÕ!Õ€ßßGx!©Y5,{>=Bm¦eše…ò}YëzZ›¥]«Éåüs;׊3ªLåcqúBû®†ÂZ ʋƹä]1¾ß #¥ E{Ÿ’UžÓÎO§È /†Ôm£±Ìwpÿý9MmØß³³’¢½{ó¾hÍ;b…þÎ ü}g“cT¨$Ñô@¡¹Ú+ÿM!R‚!󃬳+†§Ù®}›:ýCð«À ª¾ÆÖO‚ó+m`ã“g#]ãËhà;Våœê'ùȉÖé>SÞÜî@g™—ø££ªêå­^ÍApý¬è*ì⣙ ËW|UÉp`„9hÃŽ|ªÔf- fþ=ž6•{U!D%í+éö¢ÚoWß¿¦$@Ëä6²—ñ|ÎD»<‹Âz¡ª²ó¨¹ŸÍ9µ²`ÅÞ«ûÆ/Ê "§èḛ́EU'IQoñb ¦U´aGBâ^ôû°ðL©U(êGîËõ’3FLå~Ã_¼Ô>”Òv¸`á •ji½é%}oìácT‘0amÈ7 ¶ùCTuõݪŠ@Bx"9ñ¤8ö舜?`ð‚û™ì;KXápY¦jfåª*ReÎØQ-2g±$1…¡©ß1J·6£Žè¬Ž»°šÃÚ6•cŠâ M:ŠÜSfºÝÕ·‡Õý‹äƒY܈BJ|Fz"÷Ö^„|@ÊÙÊ4}ÛÓvmQC?¨LŸ‡þ»‚ü Ø=œÊ ´wh¬Ó¢p‡9z©¹3z‚|U É4c¥G” FýW§ë±s ’Óô7',¼*ï¨w«&eënô4²I$MŠ<›÷x¸¼cìØ|±Û$óü%Äš×æßʈy8®»¢úíÞûOÇÒúö݆ OÃÚ>5(ÆßÕk¼Yˆ6+4Òç(÷¿D/›OÉÞœyXYÝJ €Eùß©¾ôŠ1Âøùm6ÆÝ¶üÆð×G—%¯¾öB U†ÈõÉýcô[@1ZžEþŸ§ MËÁmVŸôZÈZEÇ“d8ÒØÏõ¹i[ <ú±åÉ4 (~e¤ún@CÎË„l²šÇ|·YK Ã’žæýmúèIŽ»¶#—ͯÒT (B±14ñï+γøJ>êÛ„¾ï"ø†Xøùø´ˆîÌ©qɵ3Ír»@N«ïÜà5¤·. áÿSX/-çþ±@óD”±žT6³7vý¬>:¼7PP„&êÃÎÈì:p”‡‡Þp [½ãÜ'X ?xU_Öƒ“C9Í/½ç y¸)(~ÆBv™`„%ôò•ï¼t¬_uÆ›)\ŒI”°÷ú%ÁâŒN4ÿU¢ôu–¡d¼¹Ýו0]0 GZ©õ÷Ó†Ù׋¿Škég $^ãLÉŸ~Óx¸éÞŒ|ç>;||Ñî¯Ì¦ϾÊöá¹ ]šÃ|…JLè+cf„ Þ˜éÕŸû,øÂþR\YeE?šY,àä°¬‰NE#õ{Rè “©ÆÔùB¹ÐËl§†ø³eaˆšß¦p›+x+_tѤˆÙZ-ƒ³—ööV“åÙ¶o„¿ù¹b_To”l§ýXâïj$*¬•¢µÃ5§šSä1xî6ºÉgÞzã ècqJ¤Žk˜Tqc‹Oµ”É4$áÂWý£³ (ºZX‘K-óŠ0-¯† µJêZ“•´¸÷&i¤$,܈*Љ‘¦8TŒ„Æ©BVM0š\öàÍZä¡0»Ýz  }n}i¿ëÔ±@‹c ìzñšzö»õTéFîmœÄö}–Õ†¡«F<ܨp{€È+(Ú‡Ãéƒ[ê[ê©Ò9e@¯¡×€à$ð@‚ Q*»‚ c¦«JË5bºÓ4ƒF ^aءٲ?Èý£nUSEÃ/öÖ¼~4õSغë몟¦Kí¢ öb"9°,Á§‰\ƒWk Zâ±– A‘ä7QnX„\V«²&ï*¢f¶$JhÖDùü< pŸ‰$®Êz©ý4Y§&XÀm;ŒcXV“~,y´Ìñls_ûK[p+_Šjäïu­HCt+^ã"7޹TÓd¼½×ý‰f´lžÀ)„CúŸœãÃ<·žk‰ýH>QÍÅV•wݤ=¾‡!',‰’=ݘã—ÿ‹0šC[ÍÊ0¤ñÎØ($ÚQÐM¸~žŸ¼Tá ¬\¡Y´E!Hå¦M[”uyø "àiqF©¾Ëçh»êÊLÑC^ ß$¼U•î’{71s¹]0ø³LµŠ¥]T ˆø¶: ÁSõÃo˜aPG(¶°/%ôµWúƒ¼XÄ_%¿‹U˜rjÆ‘‹OÎM­ûŸmûd™ND*#&?Büñ“Á…í[FQj¶k6¥=@ÏšíW/K€^äNmº5iÄeÉüˆÈ O½ð«c[ÕŽ6câ)}ÌElCÇÛíC ³Ko«/m=Ͳ¨ü´¢WóQ×HXbÄÝk¨£b0fÊÄA„ì_ÁÌÂI0BÖô ÿЃ‘¾ærã0u] À;¦ñ ò.ƆEïRJkÿu—W½ðWOJ2.zE䯩íŽûò»Õî Ô:eÌÇÏ–UšxžnóâL»q=Œ3eÀD#ëÿZ$ÚÅ ùçÂüsÌ[°UX~Ô˜0 Ã:óÀð+4‚WÏ|°< ${…ˆªKÐa.^ñ0!Æ@‚t÷Hý¤hQ‹__[ÿÿÏŸŸ28ºùåçžô J=GÓ×lÒŠ…,âOMG÷Lîtx/„óNŸ$!«ìÆŽ©j¤z±‹\ Í”L˜WfðTZã#-¸—må[q†…Pc“„FrPjúˆ–¬ÌxEÛöšÞäŽô Én½@ŒîlÃyº½Ÿñöça¿qãˆ‰Ë ±ÐÇ0yïd6qê…‡[tŸöH$ñÉ,ŽAÓ{ù#—$¯ÔÆLaˆk¨°õiz~[ÎÄɱSþ§áÅ ­—çVIu¦we*ûÒ‰Š%^1 "úT"é %Tü¥Á÷^”åé|œu6V¸°ÖD9ØŒœƒ¤‡5Ö”0Ù%óO±߯èë„ gAåmy:AG)ê¹›ö$8Ö8þÇMôƒ òøíKé€iÕÛ#[±ìX(wCÁ°$ôí×$Š£úS¸÷0MÞªhÖ1*®ÎS·3`ü³¥:àVGG]I[¾d¨÷¥cpûÖÌÎ ‘dE¶|þž|ñÉl›šZQ‰¾;‚CÛ‹üq'©+&î²fß¶e’ƒ„*õ ¾Ð»ãº³$ 'JØ@BÜI܈d }£0&švWúf 903¼ªŠÍ@ñÈ­¸_¾DñméÚ× ØÅÏwISßãÜý®ƒ‰å!ÀP¼ ˜ATƒ\{Ê‘ã/¡vïJÖ]ÆÉPNC``‰¦èsßоWšf/êi |…cœçÎãç(5ì‹Rõo?7ã8Ϫ_©Æ£+„&g‘`yW J¢W«d`ÇvçªÊÓ‡Y@dé M©8µl9¹÷õŽ@çµyR?¬( ï-~BÒä(G—6ð®´n—Xu2IF|ôy4@Š{’,?æ9­¹Ó5V¿ÏAÔbÄ““Õ >¡Ü^®æ…;dŽìS½ÇŽˆ>NH®Â=]†ýpµp¼¶”ŽÊÌHã[ ÷†Ä’ùÈTK QÈUõKÆG÷÷WhÒåŵÁ ]i ×q ½.Ø#hÞB5žoï°ˆ‚ÜÑLÈåûþÙôaÏ8c`ÌÙa$ŸJ8wï¢å¿1ß CïË3¢+‘Êù°;,¾œ3[®¥šˆ°çŠ¡˜›4LÅ«ôK©k'Ÿ+‘þecx±PúJ(<Ã)=ÿ„Üé´“ƒá­Gv>~­U>×îiÉn- Ù9zƒóö>ÛMmŸ †‚gÐC¨w•ÿêÆÆàÀ£3jxEjjP›"@M©É=·½ÝúM b¯OQ=&רÛ>, Ž’àí­s°ˆ±ͽY²*çA0‚ÀÌÒž-ˆºTߌÔ] è[ÝMƺó“‚rÃøåôµøbw45šµ#a‡÷"IPa]¢1‰Íb‘t±ad;T'–q˜äÝçýî,IgM‚vAB˜zY_ÑÐÙ²%s»¯ Ó0-Û²ñòG,.¼ïµ Kvƒ2 ù—n¡Tÿ«›öR—³ôÊê}Ý™dÐ_Ü£Öž:€è˜÷“Ð-hãŽõ]¿ÒKËÅÉ‘1´6ãÎm&«sÝ«êjaQKÖZËb°£yÐÁgÙ|€LJo!&z&™‘¸² šêWtJ,š||ÙxV¡‘<[-x,¡9ÈÇåLÏÓ:Ø “Ÿ^`“,Ø"§}d>hÅÂiÌ"jSV^ÙsŸfŠA ê6ùdnÄð|%)ŒZif¼**?/ûù ðs!áÁˆ‘¬½jø~.ܸÎRkÑN½oÏ£%uAœœ–R½ÐSÿá hU¯¶ ½ï’+†–Q€þð .l';­“¦¾¡‹šGE¬rQMxŸ·W÷ýëomå鼘•ìIQjPÙ—6)aÜë@®…»]å@ó hpD dB²·H#<æ‚Ü4ñd pC¨å (¹/W—üul'6;ŒF ÖFÆ+9ÏeQE½U¿l (ª¯HE˜Ïú—AÄdZ¤r.ìÿöG‹¾³m!`ªÊZûcrT/­0‡_Eºy|Œ¸\<ÅÁÀ9µPv*Eµ†²¡¦€ˆè¢µwr~"²¼ÝJ†^[ä§öㆰû¼'ŒÙUØîþ&6A°m¥"  ¬½2µ@{¼Óò™p?œö;ó¼E;A$ÝÉw`EùâµI d[ôš£ž²¹&ár6-»=žwºóàÝšµ¾S¿ë$7âù@˜_þVÜïf ªiüœ"ŒnU†‚þÓ ô³~é¨Û ë?ˆœ©Â5ØÔxçáhs:(÷‰öÿJwì†Øp>FßÑDëíÿ¬š5ÃkŽóÅ׌ý¨¦òB7„‹Ap¿w9y¯·5'ü ´H9w2C+Y’ÿN¢¸Ó0âsdü)|Ü|ާrË ¯$‡èþ8ÊÆ8`]'‹`îsß ¿àåOÀç1þ1yÛ âš®Dãéðå÷I“æºþˆT7J==¿ùhòÑêø® ,CÞ€zþ½ëDl|Ô΋n7;ß×î{xÊSÃÞéÊ 3¼S Õ§ºŸÉíßbRd΂„¬…’ª"ãƒÂ_´·†ÒÆ}~9ÎÍ׌®©«||V” ì`–bާ†8³3\ËçO$*T([§« ]Ûd3¢Ë„?HVD¤#—½‰fqë 2x†ÔLÌ<•×ú ‹=›­±Ÿ•ïÅáé#3ÿÓ…ƒ/ý!§ãSþ`ÎúÅÿëò0ëû±8Ó °d«:ìê)›qS¼NØØº WócQ ³ 5dD9¯ß!JŸµP·­Á땉 xd—&Áèíw1гƒî®6 `aJ %ö¯3èãTø2Ös&·$¨ÉyüP÷Å|Þû•…‡“º–Hqèsd¤ü²"ÒçóÙf¹S×°,fëJæ·YGDqH­ä7)þHHW/5H ¥~›t…캷s:ˆÆ3”ïUœ@“ †N­ze¸Æê-Òƒ‡O¹—«b#îp„AŸa¦“FôO6x4—7ò¦€œ'¹xÂVÚž˜z·š}Ø3ùç1õ¶! (ú¢Ä•élæUÍ»…Îûb“ÌDëÝÆÉŽŽë \GeÒ{»lŸÐÙ²$ù{Ö *À`Ò®üEÞ:RN°‡®w–óhôÖu€Øòÿ›@5rrļ¥RŒª”Ð úÖù·éÕz4ô.=à.¶OØ9Åè"½û[jE*˜SÌ9àá‘‹- ¦ê­~ÍÎ./ågŠ7·Ê ÖïÒÒnV‚¿öït‘åÌúéÓDx¨Žus,»_vK×úÎþׄ™&¸Pzê1ãYÃó¹R>³”·T<­w°f!ˆZëÍYÏÏŽ×óÍ–´ëw×$üŸ…Ðé[ŸcòwÇ<Ô}²ƒßÑæG¢‚nƒeZ÷n#}#B!1J×R¶4Òt,>‹²glé=ÖQhoÕÖ¬cønaÍ—˜–2<¥Ø¯Ìt…u€ˆøú?ùðóX‘7¯Éì,zp|×~œ×ï´Í_Äôcê.¶ÿÈ” ÙÝ›åyŽEÈ Þwco@=V±-2j ÜJ!ôRFb!8nx@%<~ÎëÀÈ(ðŸ*_LsVêÚÜkfk3””ºYˆ„Y3îD”2»ã ði–g¢:}‚ݶÁr›WÐÙÇÄ"¤&’¢¢éøÿë¾… uIù!íç‰È65ÂŒô÷îy8g[9¦fä_•_]ÊcÇÆ§¤'6¯wÊÑUÝãÜR]ý_¾fÑ øáOø}‡Wêç¿Y˜ÊÓ=yjÕµº—%¦Mû£^‚JaîXo#˜ùB&Ú‚Ù÷á Ô™ÊXäGöº`ÌæWïNõ¬—X¨`n9½Ò™ïÑŒ§¾ÎCWÓq³_Ú¶óÛ½Zr )ÃìòÂ*™dýf,­È…ˆŸÞhë¦(‘-µ04­ðÈ…üÆÏ‘æþyMý­tX›¯Ûv+ú½.€KJ´pa-ßÚh[,nååéŒVA·ßZ“ƒ¸ j ³ÊºàxR-¤‡ø6<ß„¶!öE¢t9gXó ¥·ôÎÙ×¾£Ý›¶boÊçC˜ÓÀFAIý6ð¨]ZV¢ðÆåk\ö$ öÖV­U¢Ñ V›5ð¦Çs–KBøáþŸ ¥¥Nƨ‚Ñ®:„ÈX7dü )YI¡›Ðy’†U¶u“ï³y Ÿáûèé÷ƒ§4©Œáµ4‚¼Àó}T^~‘w¢Œœü+8¡jZLw]/gœ36Ü7ey6ÔR.`%[èD•Ýø =yÆ Šˆ6‘ùÈaÇò˜p¦“UL K…«-bOX³"àxÇ6v‹ÃÂÑÏR®±Ö ±Ù©t!a=`+šöÔ(Kjˆ62iì¥]MÂÿ6]i™ Šñ+ŒyóÁÊ‚ܧkUF‡ÂÉâšþïÑ™×4'(Å7~Wc'ñsw§¸®Â=w„1:P¸äÙŒ;Ÿa¼•èm3ïúN®—4ÛJÚ"ƒ)9ÆÔÓ~RÇ¥{+z­‡‘q²> \ÉIŠôÞïXÅ$âÖRìÊÑ–Wµ+/îéjŽcœ)ȸÿ€CöÙ¼aMØáùù‚öo=屟@bû[ݱÀ(¨°PAT(ïû€\TT|´ ».‚ \^Ø=¤qoÎ7kAmÍCÏY{ÌQ~Æ#ãОëñ÷¹c6ýiMD›e›¡ÆÂºÐ3¢€z ÷!)’dCÚÌ„Æw‡îüBʪ¯Fc[Ü'?¼~þó;;{sЩjp—ƒæ)´Rv~·`Xu+¬ª'HK0ÿ•0jGloû ªš§`ÓézÒÎ&Œsx!섚ûnª§°Õ¶€]/϶/Ë'MðïHg«gY«½ôø­5‰’Ì9ø»þÚqç%ˆ¶ã ¶1× ¾ÛŠÈ÷Q£ hž½­ŸðÜ5»¯5z2ÍRÝHþ­ ~®‚±ä÷‘ípgx(˜3"ïÞ©1jàüÜ:'b~«TåùßÉ> stream xÚwTîÛ6"! Âè†îîn”Æ0 Æ€îii é)Iƒ”– ƒFB@‰wú«ÿïÿ}ç¼ïÙ9Ûs÷}=÷u?猓ÕÈTPÙáÕ@ÀQ‚ !  @UßDŠ "dœœf0”ô-§éCÀeþÃ®Š„‚QX…uÓGÀ:Þn($!’”"@ ô_ޤ @ ìsè tp¨§*ƒ„9» °Uþ:x ¼´´¤Àïp€²; ƒ€á}0Êꎭ»L…ùW 9ÊCFXØ××Wìî%„@:+ð |a(€ Ô Šô:~Á€Ý¡¿ ‘qÌ\`^¨MN(_0 À*Ü`(Ü à w„"ØÚSm=€¡þ‡³Þ€?¯ýîÏè_‰`ðßÁ`áî†c`pg€Ì 0ÔÐB¡Q0Üñ—#ØÍ û€an`¬ÃïÆÁ ec‹ïOt^$Ìå%äsû…PøWì%«ÃUîîP8Ê‹ìWj0$‚½uŒðﱺ¾pÿ?ÎN0¸£Ó/ŽÞÂæp˜§7T[íO¬Šì3’RÒ¨'І¸ÿJn†ñ€þ6‚~©±ýú{ <NXÐ@˜ûCæïöPHoh ÿþ-‘@Gp€:ÃàdÿdǪ¡NÈØÉ#ah€5K<øëó÷ÉË-GÜ óûïá ß32563åÿ øo“Š  ðEÄHZ ‰=þ;ËßøÿÂþ[k†ýÙðŸŒÚp'@úØ»û †ÏŸœàùs]xÿ®`€Àò àù‡ö6@q ûú?“ÿwÈÿó¿²ü/´ÿï~4¼ÝÜ~[y~™ÿ+Øæ†ùÓŽe±7 »úì^ÀÿÛÕúÇëCaÞîÿmÕF±›¡ wvûûa^04Ôц‚¸üA ¿f€MïƒC^°_Ï @þ— »kWìSâ…Ôo»Jÿ.©‡ 휈¸ŒD‚1dØÁc%q€?»œŽPôo^„…à6€…pB É~ÍSL Œ}¬~)ËØù£\Ðÿб_Äoù_¥!ÞH$vSÛ×_òï݇BÑPÙü "ñ 1¢ã¤^ù–¯àê¨üçªe¯ ÿ<²ÓûŒ’8·.7lù]9}ðåõŸÕyŽ•Þ³\øo·5G·?2~ñ3àÜ.ÅdbõÙÜ8}ßXɶò³7wHo š)­\xX„ºâ·ávëpzzKQÓœø¾ÖD?{S¹ð6jfÕx­NB—ü¼rR0Ñ<Á&´üg‘CÞ4Jð ß}4Õ»ãïS7 Æ®XtRøÉwEKý­VD’N§ý«ÍD¼z9­îàßx;Á寲‘¡ssÖÿié2òmæ4}çÈG÷4Ûᦐ róÛ}.Î1Fa|Zíø„åv­T÷rÖT"±¼ý:Ëhío’m^†©°+C7ÉF‚ê©2Ö5ÚÛ»ô÷·—×&šF·Ô(EËQ²šÄ r«²n2¯HOJ MÓ¯4å3T|%ÝQ8¶<ÿq%ó¨þFÁIËÄmÁËhŸD'¾Œ3ƒŽž×=ÔL«z¹§V½°Da8š²•lCÀsek!®-Ê3¹>Š–´ÚÚJÍVr¨½ÍÐUPÓnÑæ“é0M=F3÷X/ÿè"-'*Ù€IêÌùñŽˆ1Q Ìæ«’ëkgªÂW……Mo™~¾Lq»6ñèu¢êþ¢ˆ}OH’ž·èÈ"ÕÊ zµQB>ªiÕþ qæÎ‰ìU¯wzáæŒ® îZU×4<Ìœ†¬86Žök&²?¬µŠ¼E»½¯5ŒöžEw¥:knàÉìpÀƒ÷9tÕ×ö0çëKábW‡ï*<0Ü_˜E³Â¯À…Χ˜úËî KÅ}q’{¯å9ÈjTJñiÜà ˜¥U3åLÅÈ_F9ÃYC­2¢Ç³òë+ aOc¢¾¯ÕÓ ©3û=´ä‰aÓ7x›Ò,ñ>ˆoV]v¦ûj\µ±¸|ô#^¾ØÍíÒ†q"kð¢¾þ^H*t¬^¼¶£Öävîéš¹]â{œÏ*Í+Ø2^9}šÇ³œ\X4~¨i±¶R /¹4\ oK¸i•lŸ@]¼û(Šo /H’|ƒ-ŸªäáûÈÚÜß;ÀÖ"¼ò¸ sÿ{yp¡!;´v·QaMù½2c[&ûç)}ú¬ãDè{?ÞõÝ”Ù_{f"…ªÉ™cÈ}ÄoëœR¿EcõŽv0ò’âáå[ùhÃØ<”7·E*¾v÷Iù>¸ßGÝ—øzX+¬Ã>4„šȸÇrõ!8Þ•3¤™'Y}mR·ƒA2F¤Ë)¯F5Ô¤sy+†…ßœ‹åʰÝ^ŸUç8r¥òÁÃ}‹†¸ÕüF•KkáTcA/#‡o©MŽ#±i¡º|yÏÝØ+x˰E çÔ‚âdÝLæµXxÂ+µ1Þ…¯“‰R·ÂåŸóîpz\%«qz"]'ß"îòp¥tõ7Câè’åî¿k7 —ÕÐÆ/)j1QÍ^×=Äs:~Ðq¼›ùÁo”øEKÑÄ8ó@îöιËç/þ¾GŒæ‚¹u,ËT6¯/xn÷Ê«Y;ò*/q BŽ3xٟΧÆêÏg*ËŸŠp09}L¢ç>Þ[ßn¨÷;'B­: V´ÐQ1›ëéŒéS¹F’LŒTzÐwΜüèÈqzZ»¯îïÔ¤ú[c›õƒÏ\â}-½íz?OK¼´¦oN•o&K²è·½}¯ªUD‘³ƒ¬¦ýÍoœ°®IZ[pT~wa„°¿(Ö×.âªhº1”!Þ) šëvD¯)d\›Îj2Ì;£¦«ïa¾Ëjý9l~® ÉþtЇÀé[@àG“³dR1¶xz¢ ^j"oº¯>×–Õ9Ì«²»lâŸ[Ên'ä3Mêk®I¼à˜)-_‹O®1rU|3‚y¹Š‹l§‘#ü¾¸´?œê)¯ªÉØ¿™Ñªä8ßÛ@Øt8¨ 2– S XŽuÙûÕ4<À4%g,”[Ù\/êGîU\+ úÒïÕÍöÜa릭 &;;› 9 ¼î¢—c:Í»Uí'¡¿&ÿ)“æ’»ÍÐp#ã²{ÿ¤þ"üé×§ŽëåfW^¤~²´ÿÞxúîé ¨Qž{?9W`fÑ¥âÕ·p×¾‡óÛªN깡âg¶qãñ˜ ¸KÀí·Ž$7‰‰Æ…yºƒ¸.×{ŒêKU¤Ÿ«^¡C¤ÉN—¶Hr2|ü! ]@ŒK=fH¢»3õU!ëÏmZ-Z…ɤȣ„ÛMixlüj}­‡H=9[be~‰5—:Ï¥×Wº“wé‚E~RÚ¥\)í|Ý1ˆÍQîŽ!Ëy^yÔTr` YÆÖºÅŸ4Òy·Õ&y6‡!xSÒ{EY^ÐYÆÈ<߯&ÑR’‹¬£õˆ¯Ô6TÚµ •bƒ#–“Þ}­»Î#Äì*Ï8Gé˜S¤N£JÒaŸ ÒÚÒvŽÎK(4ÓÒR$Ò$/¯ƒ2åLØf¹à5‚"¹fPÞ–þµ'Ê–}¡¢r?î ä§7Ÿª9\øÖÆ…ˆD¯,v?Ìr6XÕæËßaª¾Ôˆì/r=S=ÿº'U¦¤`Èì©QdM°EsXáwÈíQÈeÚ‰ÃgÞÄÁül.ƒù NRØÞdB[~:ßñ«OšËœ ó‚e^Å••öã;šNñæò7pëìƒe®oæ[Íwa5ûŸR ^ÔA¼G»‘û>7´3m-´Ÿ.×FÙ˜îî²i'Õ­ùPx‘¥zÞóÈ%3²½¸Â@¾Å Á…@6U€t‡‰º³…ÛQb?–€ªàŸÊ¶½¥”û6^äe®S~Ùz~UtOLpgj[¯iuýÚ³‘º×ûx0ò½Å] ‹Î>4þ-uB»k5¹|öãz†¯ÌwÉúÓt»k4‡ïxWºë=žãœx4ä镪ÈFZ;ßòñÍò®ÿ¸ê6^‰Üå‰KJ=¼býŒ ÷d}ö 2²ÈÍ{ƒ›:r«&8Æ wjBö¢Žnõ”I´e°¬f'<Ô|H«ÙbÿÚÉÕó8P ÕJhÅ•ÇòRþ ‰hiÄ;írçÛæùâ$áК¾‹ åÎ:Ü/…7ÎË¿ñ®ÓËÀIú û.V2nÝ›u“a×ä4r$ßóKÖuÛm÷Z=Ë}ˆ°q½[B Åí(|UKÀãIß“„o©J3Lµ×Ãð1yà *¡ÞL´šíHóÍ—ü¤÷¬€sèÑì;[ÑÖVA3aiå_"»²=OZ$¤“CU~h<`ÐL’ïÞìµ º7ó!õç6ê6ÅKü˜ïúÁ>zKö§¢ÕÀõm¤>G ˜ôŠB›ÞÝçñø·3í.¶§d4á2<…œªÛíK{ú°¥½›ã<ë¢#²lj±¨ôÉ:ùDsý¸µŠÝ€H†~"¥Ü;KQoR€NÍÒœöíeÂ;t+£¼w`:»{sºÄ)´2Åô}Bc«Ÿüœ´¤·cùüoŽÅM· &Z¤Ö|÷0™íÀUX ì@xqËH²b3ÓëáÃìZnöþí¬™ ?çIœÝs–Ƭ± ïœNš4¨ÎšK+8yF=ñ"Цœ4ÍœõŸ//2‹w ¸P}2 ê†C÷ttöt¯JR­’Un^©h ²âa:&=¦ßÆMVã~.ŒˆY™©süJAí'¼Ur¶,Z²ò€.¥„¯‡çŽ®Ñã7Üu%5Ê_ÌNš[n W¢Ùšß9d‰‰ÙÞ¥œn_Kíúq'KºVÚL®ó]ÁÐcÝ-ü'‘ÒôÖÚþYFg áLáâ”&Þ.žÝJúïSÀ•>yÔ…²ûþ›¢h‚ÀvœB]PËÂ]êÊb¨)zG 7LŠùIÕ-ÄNöÆGÿ…=›-¹$DݾpK£ýBÚZ¿Çx ¹²3ü&1¨H‹‘»ŸåGÈm&½ËÚUÒ‰ß|=4çQõéÃ÷UÔš%}€º ÂQ+(a@£¾žM…·ŸÅ©¥Z ©pª¦„#ŠDZÂxk'øWšZ²© ('†Ñ‘oÅ’[~TP&Khk9×#Ôg¸£‹çàk·^Û¸Õ¼ÕKuàmŸ;SVêºnYä\.©‘zRJ°ó/l2H#ˆ «w_ŽÀžÑßàqƈ»™ÆD·þôïê'&·êe1Ž¥Hhæ=w<öˆ·tÔKv(-ðøñ“c³àGÄãlR.A²Ýëí©ÖM|~©y³L^Ú\d±|íc8ý³6Õú‹2æÃäi-òO½$$÷é{ ÓíA~ óÎÁá'Íý£í4Œäm.²ó¤ãÚ¸EAÄ¡£%a2̵“óÎõªSV Bøþ2äξâÒÂ䂻ѸÛ0{zßY=m’™¸+ÓIðêÍSÓ›Jåúk’ìR\3;‚eå§…˜PøÙkéÇKG§&Å[ê5#Ì–¦ß FXÝ ûQ•ù•ß§ÁÔšÉpË]”.ÅÈÝ1vS€ºŠ?Í4dœ¡÷¢üÀl§(Êõs|ÝDŽƒœnäËbéG‘+0 ×ä÷Vú‚Ð9ùRÕw…ß÷ê?ŒRHÓK6³W6~ êÓ?>Îý`ÖУؤâG÷mÖdb¤­°Ø˜¶Ñ¯ªbÖöW|¥ÙöþÑ”‘’QD6%i¤¦`ÿÀDZ¿;dÕ¯fõ0d•W”*9gW¿ã;q©VM>1úÖË+ nâÔR!ž)¯ú3Ù•á€e;"C³‚é|â»Û“ÒöÌš„×Î9Œ,çK ÷öÂ&äÔ9ß•21&y8ª•.ºù V̼¶ýØFÕø|¦”Я'Z7Ÿ­MgáJæKÜ st¤ßN\è>1+6|^yÏ¢‹½èôS{kN›þyñ¾mÙ _ñìéÏÔ1¨Sqv¤ûûOÜê³PJÇhNqyúâ$¿Ÿ\X^þ`âCþO ñìëaúœ2ÃP_òM9‰" 8¤ĺªÜæwËbÜäÖÝkíì[süf®=ˆ›ÒµY 2T˃–6§1>ÉB×ñ0!Êâtik}/¿á8Ù*>à½êC?®Ä,°</Žw˜’ɋωÙÕHì æ\÷žV·ß­ýŠ3¥²öýA³X7•ÃÕDy?çp$,/Œ6Þ ìØbl£a!¿dLy@…•Ÿ ï¥Ò ÷ØDV”×Ëð¨ö(;ÙvâìêÚ8Ïc»Š‹Ö<™¯Bó2¼»aôÌÖ¤LŠ—¨7BûeD=ïŒæÝû_öÇx×­°K*³™W½âmŽ0³™µBokQ ‘…»¯‡Á§>¡j¢®æéGÖ=“³üLÛU3¯˜†ñI É¿Šq.GsÒhqŸ¿iP%¢¾ÑtÙŸBp-Ἰw:@ ØG¾m/p3*—E5¦27c/qÒˆ¯uíè!þ#äR1'­?B ’Zk74=PifuT&&‘Ø®±µät~Ë]*h®p$¸RÐém»oð x—²×Ú`Z)½Ïêù÷;k²ì..t%×ÙEdëT›‹Ã~6ˆPøªÞxX—”Â6ÅÒgÝ„Q«Ò`q~kcÁ' @S/gé~‘ÍOOà û„¤KKhój³‘r°¦¼ž~zú\ªë‘ÊcTŒ1Ùêm¢77}bOI%ÇrJËêÏ—§Y6Þ íà _ãQ {æ­\ÿÒ“€qÜmà âmA~’þ`Fþ¡zÑÁt£È‰ªçðaSpu=¿#Òx·}’¾˜VX¶7¥0ù}Êi êï?¡JÁW\ˆ7Ý{‰ ŸÚx· ÛqÅ?îrQ„±Ê!õíÕ¸©NÌ?^§ a$¤›5 b/ëONz&F™¦à#À¯¿tÚZïñðˆµû\—´S܇…\ޤ§ï%„uTD'·:—vYbÊ„D­ÁxRÝâ>Ë»zÖ‚ëª÷…z@T_rç–¸edyg–lÅXö¶%nz£!ëzóÊ àðùû¬Gz”8±©l…Þôù,?‘ æɗީދFXw„@R¸hŸž™ÎS‡_ѱä§a>ð”ªÓñõüTè®æ^Ž^¡`v¡ްÉ\´Ø8öAŠšÝI2›ò_¾ê¥3ìZ¸ØË³kNL’Û˜RÛá'-¿Â]r¡[bŠme¦ £‘û¸ ÚÚ÷Õb’©Ÿåè Qã m¹(“¯ªÙ­šbÖETç¹rä Ü(ïæ“5y`·Ô ç"¢eªøÁ>ùóÙ5¾X"e`±ÒJqðæ û!;äà¸ðÆÁØc–À*!xu-5ÁãGP¼{Α_Êó]žFuèg”Ӽ骯ã©O@¦NW^èµ hô#šsC„ê˽s 1*†Ã‘8ÆÀæüÚð±v-™pC´\v£ºQ%Ëì2ךŸËÚª–µ˜E:¡äïCáF&µ~«ƒOdmWV°ë£[ ?–½qÉùYh-ÇlÖm D¼O4ãe %TÞêœû²äÓ\ @‘[|µa¶-x’ž‡ÛUªø"Oÿö 8æú1ó‰÷ê[CïÈZéXÆ÷…_67Ï«¾]nHMléq'>Xø¾P¼{ÙGðX¡ÄÃô"øºû£^o…N'û1J6;•<<Õ× +“| #¬*þd é øç¡äÏQ¥'Šü‘âñÓÌcÛ·æjkŠÈT"%Ú‡¾EÜ{uàüú~xš• )ðA%õæýO2øoth{š²J¯€‡’ÊcqËåÈ”éò@u±ÂA?åš%Jˇȷ_8íg´æ=¬ÚxÈú ‚_ õø¯³sW?óÖ§ÞH2kXùö*ý u˜ó¡¶ÿ+G=eƒÔ¾`Ò@üÛÐ(a E åV[?ÁÞЪÏÅGÉÖ¢rcbú*f%tà–¤A§u 0rùÜ0„FÌf¡o£.JÑ×úösŽF5ùçx8y û ©ÃÜoˆkáèƒÌdvØõBW;å¥ÇÍÓÏÂ닽Øe;Þû|IÁÅ)¹×sóiNjc¹m‚²þ§˜ÎÞ1“ö@'„jQêî´×n¶ÒZéÂô¶)ëËkŸLS-.›N.»Žrªó·5mEð*Á‘eÔQÄø‡ª@ïn&cµ -_e!Ae=†ñè§—7>´Ú¬“«‰$v² ϸæò,!ÙÁ…j÷Gμº‰ñ$Dç"3.êÎÜŒ¯ æB¥[Ç÷²îl<©ñYIrÈMzN–†'-rÎ;'`Îg˜}ÑU6p¹«wÀ’vÝu)#²>óuy^—ƒ0»?®òØ•T¿©fzKœ^ê’Ý—š´Cx‚¥ÿL›I[Â!KÁ6ž™‘×Û®E9ܺ‡^ ‰ø^'1cNÙ-‡Ž—ªúåO"Å®;% vÂuH¼i]ß9 »“EÝyq±)nРۡ»701 µ¿)–ÜP<ï ¯ œçX:}¯XNh|•ç2*¼´¦3ÔÞ²p¡ïiZV‡;ÇLpuV“T³‚‰ú®õsõ2ÅŸÚtþØÝ9è †P^™žvú°}ê_šR~›9;CßÒÝ|ªÕlö¬—½{—¸VécŠäO‹!¡Êëßò72>¶ jyê– .»¾¾!$µI™xi< øŽ´Ö屳ƸV‘Ó}ßhcŽü¶Ë ó»ü¨µ\ŒVèdæ‘>þxWÉÛ§×$ÌŠ(P”,~&ÙP}$ïý`“†ŒCfXmqœ‡DÏ2€}HIªÏgQÁ¢?oÐÏ.y6Û¼ˆêVºîÖ ê(©>$”§Qϯ`‘Ýë/w·“§ ¶Â!!"þ)†” endstream endobj 2914 0 obj << /Length1 1747 /Length2 10332 /Length3 0 /Length 11444 /Filter /FlateDecode >> stream xÚ´PœÙ-Œ»[p‡àîÁÝ5·éF÷܃» kînÁ=‚[xLfîÌÜûÿUïUW}}Ö^[ÏÞû0ÒjérHÛ@¬€ 0”ƒ‡“[ «®# àææãäææÅ`dÔA€J1 €nî Xô_¼¬Ðú$“³„>©©CÀ'€GP”GH”›ÀËÍ-òEˆ›(@ÎÒdPç¨@À@w FYˆ‹ÈÎúå?G‹5+€GDDˆý·9@Úè²¶Ô-¡ö@秈֖N]ˆ5õù/,âöP¨‹(———§¥³;'ÄÍî+;À µèÝnž@Àå4,¿ ãÄ`èÙƒÜÿëBl¡^–n@À“À d »?x€m€n€§Ø]e5€¦ ü§²ÚŸ 쀿®ÀÃÉó·»¿¬ÿpÿ6¶´¶†8»X‚}@`;€-È ÐTPã„zCÙ–`›?-Ü!Oö–ž– 'K«'…߉[¤µ–OõýU»µÈêÎérú£B®?Ü<]²<ØFâì CÝ1þÈOä´~ºu®ßmuC¼À~žmA`Û?J°ñpáÒƒ\=€Êri<‰0þ‘Ù¡nnn!Ðô¶¶çúùž ð7ù[ü”€Ÿ Ä`ûT0d |úÃðs·ô nÀ¿ÿ0xx6 k(À hcüãýI ´ý?uÞ ä 0æ~<÷¿¿O¦O³e;ùü£þ»¹\Ò*ªŠjšl¿ þ›’‘xü8ø¼Ün!n€ÐÓ!࿽ü]ÿjÿ-Õ²ý•÷?•Á¶€ÈŸ%<ÝÝÊðük&XþZVÀGЀ<Í1ÀòÏØ›p p[?}xþŸ‡ÿ·ÉÿßÌÿáåÿ2öÿ›‚‡“Óo–åúÿÃZ:ƒœ|þ⟦Øú´ê§½ÿ¯êKàŸK¬´y8ÿ/« µ|Ú i°Óß—rWym´@Pkû?è?=xrïµ î ?ž7÷ÿpO»fíøô”¸?uê7|Z¥ÿ)¶†Øü±s¼‚K77KŒ§Æ?!€ÏÓrÚ½Ï5€‹ >™žÊ ØBÜ0þ览€ËòÑŸHÀeõpYÿxž&’ ø7àpÙ‚<ÿâù\öÿ‚.п  €Ëá_ð)®ã¿àS(ç 7€ ü/øò7äÒ}z_ÿEó¸\þ¡Ÿsqòpÿÿ”˜Û¿àSbÿ°O¤ûÓöýC?% ý‡~ µwþ«ð§Ü ^<•âñ/ø”ž×?÷IýïüOì tûÓú¿iíáæöô¸ý^´§.ÿÿ~I@o 5Æâ<ÄZìCý›öë:i /ŽÝq‰ÆÝ—¬~‹n0[ÔTÖÚœ×ën—Ò©CÝx+Ûò,RK4~ß[Q#Z“µÛîüïÍ“t¦vÛ0¾L’ôO”|—nè£B§äГúêÿàêoâˆØß©ÂXàê!Œ£UDxíÕ«èÝÐW±<>¿«ýµVPó¾bš#N?Ö$¤l–±Ð*wŽ”ÊA…öœàÄwöâr† â‘F%‰ #à0ŽïŸÑoüÍœïj•¯ûg22#R*Ä ‚Ñ)&?™½4•g ~åïÖÝFÓçH`c›Î)rÏ(•&<½ý\‚ ¬ÕHŠ®x¼Ú÷º;V§ È{‰£Ð›öÕ5ìXt᣷’³¬H‡­’bíRê„£ÅG2ëUІ r Ü6" [«fQ·½[×pYÙØñûel‚Ý€ñ14§«çŒðƒ¾™dÒÉðД-otsÞÈ©ÐÕe}°÷‘>Ü^̹5vaáðÎzȱ‘ÁC´E§‚h1,$ÿM¿¯m®p/_ü°}«iŽÓìÓ‡ŒåpÊDÈ…ˆû‹웑ž¶Ž¤Ö]ŒZa‡_2å™å}ÙtFHÛÌ}e|–&X˜â§Ž}š˜\{ÚEÞ$o‹ [èÈ™ÿâTšbNrÙÞÜQÎw¢ G‘¥úùP¢3 O9þC9× ;‡ŸW‹ÈËÄk!„€Ü…ƒeþÑwß¹ÍâÊæw¿ÆfÞ“ëû<è¹Ü~†.Ü5ÇGšß§òò—³œv/ñ„eV3@? ZˆeXk0Ù>sqcHôH)7ÁqqŠ,ˆ|æñ(q±1>9rrìB¦uÒ9ÜñüÃkîFоgNÍ@Žb`üã%YÉè!ïJµöÎÍÄ뢰ýmã±y}–¶f+¢Dñ\ÒQêlî`¸l¸-,ƒ‘caùSgƒÎ‹ö­hmD„q\¨ÔùÈ@¯xK„¬[ã=鯱oñ×d¹©° ÂK`@í()šüœ¤|pXÇ… –þY×Ò•Õ%7]Ød«ž&¼©ŠIp‘ôhöõTÊt¯úXò…z|j¤’&ß[­µ#&j:ÐcˆÚ4´Í|jjé6<‘È$çP…ÔÌ'ê,Š˜.È5|ž2…qÑÊ+v¥ðh‚w}ÊK/x³±X¿Ü·¾¯yÖù®±/Ð7Æ;V°³4È99ŒÕðRÁ :åRV^Ó[%üÃAÁ¹ô=+™á ±rn2"F¸)t€*fi?ÍoÛµ;&̺øù®XùPrÉjw}ÎÉ ê—ÿÕ8¾TIï~¥ÃwiÛ-‘÷Vç… èÂzwË6õ¤ü´ûí­;Àú ·h#ÏY#v Aét8’$7†ÂêÑË>Å”ÏÇe§FÂÀýãþÅÈ:c7µˆW4½OgÙùÝJ+õ^Q»¼Í£®žˆKô^ÍïD ñ¯ß’—*p©«éý§|œ¯8øÇ8ØGNs0mÃ.½_ÞâÄÁ*aã\Ü› iã]9Þ¨ã2>ö%,­Óñ ô³Ÿµº{}TÖ-NGÊî͹&0x¤3;rÚåË‘ö4@ÉÌdA*Ò3;V½ä(r”Œ=ú‘5ó–sSÌÆunÓMÆþÕ^‚‡>:æóúÊ=„MÑ[çäwbâTŒî¯?Ðr`¼Û6Ìcsaâ¿tÈ$Þ!kºÔ4kçùðNÏÅ3N.Ì,=‘¨·•&6kûÜ›!ãã›­ÓùŽ÷Û$²Â¯B]µ[d<º‚/(N܈oÕ)"|üëܦØéÅc†™a²¥k#+4„]è¼dAÈý­æîrUf·Ì’Ûëè@W’ë=Ô®Û‹2d¬ºvÂgh°›™äEmy[Fïî=g:4xxL+7×W®dð¦ã•JTv‹½p¤%.BÉEÕ¢4µ¥‰màÛÂçæ^¥ž†üÐvdñ'žì6¿ Ò-æ¹¶L6¸dd†,yÒéóÆÓV–9RÙ hK&œV°~NµcR)d8¦)#žaßXvÐ5%fæ9Tp}>xð|yÈ0ëy|¨Â)â§®­F aºŸ«%z-3¢ÔÀ† Ò5؉ªÙïNµWî¼þ±/ }žº¬÷*÷™HÖ£a¿=PË©Ë\H*߈R¿÷}×;iëÖç“„p糧Lø©Ä4füQhø ï‘.ªv>«Õv-JÐpbvä¸Á«nÞQ‘¼s}½£›‰øœYçV"'X´cªo¢iÀAzL¼ˆ÷¥$qºO%öÜ(¿-îÍZWA4ž"$x…!¿ Ç.Íp˜8˘½98Â}jMOÙnwON(šr°ÈŠ(MA­ÂDÔ'r.F vg’ÊPÞ!ÞWÝ-w¸tõNgc«_‹o¶æòIPÍ¡*¹•Ä®™]¨*çy…)Žƒ2>õôluïy”Õ,¿[ «ÅRv£2³NC/vû1_ZÑÔ™²jÇá/8Ø‚QF\ìCðv¡Õ™bã&‰+±—¢ì~‘õõˆ*¸ò¡¼Æ/käZýäú„VÚ¨Dº.)˜U‚×ò®&wïèyÎ'xÒE§ÀlÈŠEì }ì©Ä»„ANî¿øÚW_+(?ê)m$(Q†Y¼…»ÌòÌéHýþ~W‚q†Óò«¼jxBTµºÌ ˜¦ëáèãI'ðaYÎc¾l…‚™Ÿ|èj}î¶?6Ó|yëàç™O­:¤Ö|ŽL3í‹*XüÎãØgÆ_>'Úû›Rå ì¬bˆ¨4 ƵP^ÌÍÏ`pWãÌmçÛýÜ!ë2Ç ôovúí·kKB#–½oQ´KVVJ‹5E•Ǿ©Ã9K‚õä>~Ú nçe‰@1ÙÖ+yEƒê.ÞÙPм‘Ö£Ñ"¹¡ž?ˆu„½Ï\7lÞÄ‘¥Ç„ä,kâé²Iu]!ÐT›i>O¦ŒÿÈé!­1ò¬;¿f *u¿÷Î#«è«Å«õY’Á¶aéÇÍà3pq¯ëfÕç„ÅÑ%BìUÎõÛòeÍ‚"/RgîË…”ÂÉ¥ÓçHaÀ©ój¿íÉš‚8Iƒ™bv­K½ä5§ñ|L[»<1å_°õ®TÉ"ºÌe™™ù9ŸÉz,µCõò«ì}üÖ¥ó]þûäI8‘8È»·ßꈚƼ‰­TyïÚ£ïÌvÍ^^!éKÕxk‰éåUFm¹àux˰²×pgÁR ¸³YÊLÄ6þ­©lOš•YøP«F9K®.`Éÿ"ëë"ñ²è7¡ØUÁ­Y€*×).d¼O$o×ø$ú³;Q‘ç K(Üër{tƒ r„ØÞÞáÜž…xN  ïD¬:n®¼?¥ì$Í> ðHý %ÈiÜÏ3µN+ýN;ïX'ÀD„geX’Ñ캒á{†Hèäü0žpsg$8W*.TÔ »Ë&ªš4{•üaóf5PÁIî‚Mq¼õ+ã%â[¸±…ò”‡Ëk;}Ë¡<>[ ÏÖvQ*‰"GC¼`²NÈG_+ª>äºò(tiÛð môµÅ¤Š˜¤þ8ênÏþFƒ°´ËÒIÙd›E)O…4ÙðÀØüËVÅ7jtÛŒ3»‘9µ¡ áä¶ ‘w,!ÜòM;É@hÑñ+œùp£æÂó#ÊЙ)»0›t}‘®mÿÂóƒ ˜ž9É*9ƒyvI˜Oæ/á¸â‚â¦÷ÀB]}Si­ÂÕ¹¼AœýyR\í³/—¸‹ô ¯N! ¢ë–L‰²«¤!ƒµ}ï<ŽH/Tau#ÝñÈKSD®Ë[/Kyh\^;€Þ‰68àõYb%ææC^ |ì}˜Ã—ˆðœH’2æç@û]Ü8Nj{¢r±8{õwþ/UÖµ ¸—}Þ·,4' Ï¤Ñ^˜ÍÄ7£Í[©_°/©õŽ/Ð%Êá[Í™¿JêQbOŒ)ßÚ&îŒÍ¦ÝJ»Ï;Â]ñ;ª´HqÕèjVL€_©˜Ð9’ïûúñ6 SÄ¥|ü…œ³û9Rå^õxñ­?KG¸ÃK–p¾0È?Ä„à`ÞS¬Â_ã¬}_}oe|Ò¢òU¸,•ôDè9-\ðøxnÁuéŸâÍqi‚¤… /¿§‚54VŒÉß3\‡´õúsOžÉeŽ®.š|1ŽäÄqó!²wJ#"ŽIÊoZ7+VäX85C’Þ”j“´ ‚åa€±Î£á;à;`ÇtTÏ/~•#ú±h°ä÷ÜU fZg±à£´UL;¤½Nçy.;”U¾®L›ˆFd½s‹p@°NéÚq –4Vш»Úlοò:¾ÄËjl\!æée“ªØ µ(³9ö¶ ΨfcO²Ý»·º³±ÜÁËW§ò°…«'Ö1î2C*F9ýúuÞb?Ÿf”«&coèÐ?Ø!XÔê(u@IQmXM´%GB7vüágúrä~¡u›BÐ’i"æɾ-ô—'‰–ð¢·lˆ¾!Ël2AQê$øW^¶ç¨W/î6EÄ R­WI/e)«Ä0'øqH;Õ3Ø‹ýp¦¯Ön¦ ±±á&÷àc« ™—µ©¸0šÁ™Š™õçé”é5ûŠÛ´Y€­I]×:гÒ~pæ÷ü<1¿‰UÓlH`[¬ô³àzÿl¯òHRl¦3G¿·ÔÂÌòp‚û´q'/\{z¬e‚ì¢UZ[1èkP[vÛPìuåß#`#7?¶æ$öØÁ©(%Eî£Ä9bZ@ÔbËÊsžh>É-‘÷CnÓ'µÉâº>M¬ô‡ŒAZýFŸµ}ã?éL+} ÙŬÃJ¸Ï½küõ.{ÉfèÇ—cµ‡)k%Í*¥Û²?K›O,~ @§€ ·„& ´MuWí¿ÎÛѵC‰É4ª"#w{­J”5k 'WY¿8¹¥…È~à ùqÍ¿Áœ¤LMFç¬h‰Ï÷t9UŸÇÐéî]šñÆ©zExÎÞH‹)¯M/J4½é!G*–,ô.£‡.ZN«¥M0H&…Žp@±Ôwr8Qª3Š]N¶þØG[™›2 ¹p¬¦È9H{ÕÆ Õ°= ;&Ãï>„ÂË=RF­óòÑýP /YSÍ©V{”.³ïüžrÅ ³hÕš}¨Îž=_œÞ¶Í›ñõºšAªÏÝ~§Z}|ú™®{s|Û$ê¹C#¬psþna¯ÇÍu7_¥.7¤3±þunWÈÎðÙ.ê•ÒazMˆÅ ¾®ê³%1­ñå¼S0§Œ§ªH(¿_àX-³|Ê3§ËÒõÕ,A»îh°..SÀѨ‚Z¶€O€á^n›¤Ø„Ò@í:•–æsy~Fó™1¤mŸ(BN@ >ôd8`-äBllÜD7ÃIU^ªj˜ñJ_‰6Ý,êÎÚÙ£ÜÙû¨ª˜øÖlâðé¯->G´‘bÜ$eœïi>¥°ÜˆÔ¯lÝÛ Ó–¥p‹%$¤qÃ÷Æœ½ w…lÙÄ›æj¾øŒ"áËÁZùXÙdCu]j÷ÒÉŒ¦6W~º­ ¯4mèÄLñˆ3ýæíQËæéñÝD»mAý÷ÀÒ¾û cÅ™ð§„nUõѨÜ{Mª»Ø,àùý*r^ðLHÒ÷I{ˆŽ€ÏÉÕLÏ‚Þf£_RÌÇlŸ}2v¤¨E]ò¦‰ûNöÑ\Ûô-|Æ0x7Ð ’1I5j@ÅBc ~]K Ž×až$,]@¾wu¾b«Pí_ÎIˆVè郆ùör}òÕq º1õeÏsêáëfjÄ4‹Çª$Š{ô¹ëej®2Á(Œhôd+ö4< lýî!Ë{‹¨\S€sˆ˜NnšùÖ]⚎ÅeW»½ì²€NGûó~™®+wÔh)û·}Û¡HcÅצÞL4c©øAŽù­ò÷åÌX÷¾ñ Îé·™¦ÕQ'+Îz=~¯í3y‚z¢“2Xú©k áÚEL»B5þ&ß¾iÛ’æÕþ.pQüSë7‡³•Ë)ŠQ†ÝTü/#\ ¯z¶k¬æwöÞ›‹Ý…È×Rò·“2[ôÄmæÃvS[ÄÀÉ_ez…âx»¶L{/cÏ`FÕ£â°EŽšýsr«ØSÉg, N¢tA?Ã)î?2.É¢•Èìs¬lCÊŒ[!unfpÔ¹óßÑ>ZÌP9¡RUˆ¿ÿÕ¯á³Tc{,+›´v²R"0üh»¨ú…ª~6 ,ÜûãQ†²jzC]¤G«ƒ­ÌÉðDR58~—tßzy³ºÝxyhƒ`{?’  Krƒeªö® Uá¨Q¾³œÒˆ-R"¤m)ð§ø‚½§ìû à™vaÂîµö3abp,‰]þ|~A^o­ŒDöcõsRχWbÎì<§=š‡ %‘,lbhq&&ÞªÎUfñãÆç š÷˜S#Ñ–ZçËæ•ËЊÕññw£*¤U>s¾ª; sjGKò>´ãy- dY˜•Hâ¯\lº—nío3Þ»Msmïj;åznÿú™˜,Á²¿ÿhèWU»8=‡‚às“÷¹s›)y_Ü ×*þ´•eö »Çq8]äó›\ùéÜò`OÂN.= _Å8͙ԃL×8ÿz–“,¶μ"è ‚an’ ÊM±ï”Å9·ýxRÚ¬Lö+vþþ`2 öü¬]$%í,TƒQ³j;Ëô[äÑç~mœ}ØÏjØ;ª°cœ¨}XŽš2pÊFDKK—ûÅhüÌ,F´é]ÖÕtô[5EÃ,#äÝRòýÝ«/õ«n†›òwöõqµ|¼171jÇ»ðòq?›ƒØMj¦«X„L}뉎 ˜¦ eÏ_7FÀväï ¼’,_uÕŽŽ¶îå,/?±8’/èÙ~\½Èí“O;o"þ\×.þ¾Hâ#"3Ž~vJÂÅn ÛÅ4§ìGîÚÙ(Èþ‡ÀdÒá›äÁ~$ãÉqk[ü¥0Hp&CýÛÏ:Ù ä|)Ç*åuê#6ÐÝox’òªJ´ÛÔ¼Á*vÉrj¸‰¹ß®©x'¨)ë%¨·rkäUšª5x•¾¨Þ­¤öÙ<#ýÏîY®Ôd)<ëà÷Ì+¾ œ/nd·ß Õ“xç¡óó›•œ˜dF­ÛÜ”h+~Ÿ·äo¿ZgŸãvņ¢½*¨‰û#›½-)&xqbT¦8'lÛU°gxÄÄ&îåø^ÙCÂèãÀÒA+s„F5 ÃPÞYãkò£Ãð¨÷á|C©*¢/§„kÔ„x˜ßÿÈcu{ݳgÓЈ¿Æ|ï†X¯¯˜UÛVO•K ¨Ÿ¼dŠL3)L‹½é®„É—œÕ¸àŠéfŸ—šó­Nµø¤É8pµá]Oâ´5•…žÆZý¡Úâ`T/Y…VMh7¦%•é!%Ÿ*c ¹r¾+Ϧú<‡H]œòÊ7$ ðGÀQrÀ}tœÎ}ƒ9¦ÝON[£MÝæÝ¸ã~¦#³ŸŽ¸ë¤×A¥EäKk̤éò€¹³gn,_¥)É@1uð:™,¯¬’¨£ïÝMz:5é®§¸'ùBd8@ÅÔoàîÓðjþ±õÔË.MîªiîûÓ7T ‚ŒÔTÈ`˲TüÑEâaTv óœB|~)­·_r«Ô 7ùóÐ…œóµw‚’Å] pqp1´´¿Ä!¢×ÈC¸Ú5>@ÌØr}û€ÎÖ£>‡èW#íKlkì×}îõëñÖë͹ïiBKúRä×_˜¡Sû\ >,Ú|Þ„ø…o!ôJïî'–3ä·/^ŽM½·©èBŸïŒ9(a¿¶9- 5V zíú2÷À‘q2!¯Éû3»ÕDÒ!ù ñϲ7¹âH›˜o ¢’ËÒ\‰}îs«‡üÕ“›I)¸‘ÇôÇX1ÓANI¨Å «žîC|34.=w”[Ö…qSҢ󵚭‰zb›·àåâ0 zz¶`¶©Ù¨ìèdGÕŸ27 ¨JÏMÞfÒeÕAËâ·ñ”ØÅe7Þs±ÌîÝyé‘}vycê³nfÀzŽ2{öX%“JÓ‹Ä" °¢:D,^Ê«žOœ°/ § 2¿ØziûS³/ªÆ¨@D’‰¨ßìûª fíݪm½¾4‡œâÚ$åýú~gv[bt!,Š/=ÕÌ[!@Yö Ù§ê€O(£^k ‹ÒÕúÓ7¯‡ »Qm¯>¬ØÖ®ÓŸèZéiÇùu£«=2  qŒÚ9ÎCC1qÒuæu¼{xÆ7—Awö™øuÉŠ÷X¤\ñ3ÀÞ¸žó¹àe>;½{Ú°ÒêG‹Ùk,IPÆêeI^ß9G£¶¹ Ž-h ×ÊÕ°ažmvÝsm½•‡¸>&’̃¶øâ]Ú¨d«øCe,ofè6v‘[ºÂÄÊizÙä³L%e͊埥Ã!ÑPœÙ[ŽÅ©ÅÁh¬%eÿfûl¦ñåðªÐ6‚Q6“#Æy•fû±‚ècÞ3›=\o÷— /ûé8 ï3€™b#”sô‡ ¢ÜqþüR"Ë}·H[òwJºöá%¡Ìø¸PšnÞv•·N@sfvЋçÕCâ'ËÄG¥]5Ò©Å`b°Šî©ï3!¸ÏGÌzιø"øØ¼¬ªÄ`‰ÝsUϦï\e³¹Uݚéw:´íp0/žõ>A´²&‹Fn†ŽX¿Dc–™WèÐÅ$+Þ«ô³æJñ£¤_Ãõ Ùó÷R•˜‘4ÕËðñp—®mw«Ý™í`U‰b4Ø!…ÕÿÚ,5&¢4Ä„ñé“_ͱnpåÅÜ~è^¨ý ™ÐP’Ó,˨Bzµ©è_HâŸú&㳞¶ïµ}¶mq¼ä³°.iŸìúKqÐÇ ;y2‰|ÊÜN¦Zîzn¹~†#ºÃÁÆPd;+2Ùø„IƒŽx/Xäüë^ÉL.Tèìk¯ , ª9ÈÜ:’SŠêeaÌ +û´Y £Ž>ûªÎF¾ÎÈÏæðH2¯™4R%Mõ_öU#W½Æø-~g+,ñv: ˆ«€· ¿Ä’^ 9#«ë7¤H5šî (#|¡ˆÕ^@F]eva"œ‹? Å)ž§?ÔÎ<±®¹DNPtƒBÃãÙһ˅€ì¢L°©Ú¡û•XŸCÀ%Ö;~ô×€0d„o•yF+€BËœ)`GݦÔ‚Øo3‚²?Ñ’_±H#°/調DQ9 +eÎÖ%þ(Æ›ê›ÅJ¬^Éõ,àªp"Ò¿ššBwdƒú]!{µF´ï¾hWV p" ‡QÏTw=nâZs'üôkV741mDöG]WÄk‰2[œ@øo~RÎGp÷× ¼}¶è ˆa8A*C{™eÍ*¯-%Ô0ù¯+©ö%ùùjÉEØÐí-›púϘ¢#yÎrD윸:<6NƒZîñX¾·FMÐÀê÷©ï7¯%UÆ>Âð×ÖoЙV~lã;®á³îºåÖ ¼Öò;SZ^ÜÎg b•È#wv}šªS¨·øˆÌCÛæ.KMùS¢ªÉcµe‰‹³„>GòN§Ð1–çN`¥$ð„+T¶ßR§&‚ß´æJÖØ‚ ?¦1c Äï8mŒï¹$]ï‘ëÑJò}ùyiˆ®=P»ëæ'ˆÚ©­µ¾@E«ƒØ«Wµ…ò‘ر„¶>Ð|ˆm¬±¾Òá,Ñ¿S“E6‚Â2V«ÌœÏkzvòÄ·2ŒÇûæÓ®¦Ræ’÷Ÿ‰xVÚÈ Æ~Väk¸=b“Ý;H«O‰ø~ÏQ‡h|q>¯~N£ol@û,Œ/^î@Ê×›Cܹ{B%vÂ^bó5ŸÎžb‘}ÃÌ—[ß Ÿ[>žoûÎï|æhÁ®$þ¥uTÊϲNÛAÄöµr/#l–[ñÝ}в;teÂÖôŠB*˜ æö>íÛÅiÑ2øiÔyA#›Šw÷úÓ±ö ¢¸™Æ¡±˜Ì,Ì`\•Ss—˜_>uv?Ä ¤©®: :%ÐÐQÊNøÜïÛ– *y FLñœ8ðqG¬ˆ-ĸÜÇjYýÀ…åá7`KnèƒkbḻSw«˜?–nF'¦+†ìž¼Ç»W÷>a§,ëµÂ“y%c°=æ([èå_>Ú"9Œ5Oe3æžÖ…šUª kójä{ÀA´÷’›à¯^rükÎÝ픂°ìÌ®a3u5NUyYÈô%q-»¹ ÞnSá¿V>å\HÄM\uOyžìíµ½CZR¦Û$²Á«t×â0ݸe–šœ›ˆxz(89jß9™YSÔ}Þµ(9œŒÀš•°ÉÝg•IBôßh~€ÖÐòÍVuµs!=†VÀ {Û'’:0“>·[m°ÑŸPÄ@¿rjüIO ÞšŒs {Ãmé:†R™æq暎¾]=Þ£¨W pOy¤VïØ¡ÙÁŠ´`dÌ9 m]à¦á浫}ðÂk´~¤Q•ªÍš~ô3Ìþ²t,LdÁ”¥ÖM›aí7ûÅËy£zÛãóƒ4¾ñ X“i¼Häå=jÑw10õ,kkª¿£Xpéº*幎„œšHe™Î‚Ǥ>ôO‘ÁË&|¹xX ZóhìJ©GÞM⬮û¨§QË݈%¤¬ì>§U¼Æ™¿)QPD.ò@U\FùlDZf£RC2Ñ€Zm#ªPß(¿ ¯þ0¤k¸ g¿[ùH±q-_c\P¨íJ )6ÑÂtòS‘ ‰!+in¥rÉ!Å oV †Ë@ÅrE­0&ÓÉc<%ShÚЩ]îH„‚Ý9Ø'Õ§ßßQÑV¡Uþeàž:['ųds¶1 Uã lͽ*™b¢§Ç`ô±.ôg ŽÙΘ½ýiGÉ´ ùôÅñj‰YìNÎAüºhhc£ŸRÛg¿ÁÍ‘*ç×_N±K7×àõ­‹úÃmõ¾½©k¢£×ª]‡‰Zîs=âw=0sŒÓs§22ºÞR<;y d2Ui~æóÊò>Î=Xäæm§ÛäT-8ò¾,]Aõ[þ¬£¦i™ô^iÍ$Ê©ŽsÌz$ˆOʦX2³•`­ÖÜw>§4Ž»tÂx {Gùb‚axPékáuä—Á-ªL«M·Oªú˜ïtO±…(¹fjGÆ9˜d6ë4ÌÐaŽ·pÝv;×&ì §cfÅØ4hC´³ÖÚÀÅ´×­„›XKâ‹u•ÌC †y–Žˆ‘Pš|…#“7šaÚQ[ŒUUÅeÑ ®\„\0ýû~9ëÃ×ùÛQšBÄ0¯’^e¹fæ¯M[90Åòú?¬¤Þ0æùdc‰LjØ4(9Žv°ÿ$ÿW‰ endstream endobj 2916 0 obj << /Length1 1918 /Length2 13228 /Length3 0 /Length 14423 /Filter /FlateDecode >> stream xÚõTØÒ ãܵàÒ¸»»»[»»‡àÁC‚»»K€àîšà‚ûcfî™ûýÿZï­^«ûìª:UµKNS‘«¨3‰Z8š¤ܘX™YøâŠj¼vf6$** °›è/)•ÈÅìèÀ÷/½¸ ÈÔíM&aêöf¦èès·°²X¹øX¹ùXXl,,¼ÿ5ttáH˜z€-ŠÌ9G+•¸£“· ØÊÚí-ÊZs:+//7ãŸ×¢ö °¹©@ÑÔÍdÿÑÜÔ îh¹yÿ Zk77'> ÐÓÓ“ÙÔÞ•ÙÑÅJˆŽà v³¨\A. ÀtJ¦ö ?‰1#Q4¬Á®‰Õ-ÝÇ[M¬½¬ß^Â,ÞdàÁ·Dlþß8Úý ¾‘üWlÖ7Jÿrõö"ÿ öfûöoñ/õ[¦Nÿ¨ß9½-‰ã¿jÂú–­Ë¿à[j®ÿ‚o7þUÖ·f¸ÿ ¾eêñ/øÝó_Å|ËÔë_ð-Sï?áÿÌœ¹»‹ËÛ;üç›ð6ÿÅ>ú ÈiyÁÑœ?̦.¬ã®F”È“iwBp–jWû“ï²K§û*|*]uvȦËhêHúÚIÚk‘²gßãÖøˆ¶dÕöG¿'ãDµéÝv¤¥)Üo“Ç¢õƒ$ˆÄL"{~ÏÎ~ZÁ¶Ð­ÝrTŸÝyPU¾`ÝyH{Õ–­Ž}XØUÝ«æ’G~*›aŠÓŒ5.ž£Ê7˙ǧ€sc"A Çüå…6w}3‹™7ùJ&—È€äÇ^è«·Å?ï³^¡ÁæÚCðž@ŸúslšÚWì MoÑ·¤píÛ’W«@!YÞ;Æô5&t涬j°ZŒCs­ÇØrëÏÏ©€0¢oX?“kK›±](”qªÛc°ÜjÙmA$]–bë7Z½–6éÄ+¼3õ¯€ynòäÚw¹Qžãë:|=(ìùyržç㧉Ÿdåqm¶- ´Ÿðže O˜m=ÄGÇ´×9k㊭Vµõ®Óµo”ŸÖ Éå)¼†û‡–¢¦]ÜOäæ c…¥ÆW¸Žïår𜣠„  .ÄŒ¾N[¢Ò°u%š%þL"V¯„óÁͶÚnî™vîŒt©TRØ\ô'­á»mùëc®Pâ¤ë;í%î£#ß^|Á9Ô…?]ƾ!i}t˜ sX[„Fò(‚ÈÄÙ|¼ðÑÞÓ7œø>®}°¥Ëi®‘x8AaŸ‰N‰ÖLëÄ"†“ð½ÿu˜ üØŸ:Tñ•Ú=EíõÊ£}}"ø% rÏÛífTÞ‚âû®%¹^Îd¸0óQÓÐPáÙØµ†}ã±g»=™«ìÏ£’šúazR!u¥&ªWÞt&ÓxkwV )ÙôBM¦or¯D1^×V§äuÎ*ß%øö.VÔß&g¦¾ Ûã>|ÿÒ°{ñIYDñ±ì«°AÖ(-‘vÌNi|&‚UÌ<¡¼’ÜS²É@yÁŒÿ‚6WË—Ïø¢q*Dè\J‡±YÑÜ&íkÉîóJH_ÕÏtD~Óƒg_¼dW³é•i=ÈÍHn¬üïíB†Ç^©Þ âó(óžø/®µ?ÞáÐ|«­+RS7ú\ˆ;«2Ú˜a!u}XOÛS‡ßpƒJ‰ÚÚS¶Ž]±ÚV¶$F;-KL /Ò‡‘·÷cü'™Óö'>ß]oQˆ÷-ö|w0!Q4ßý‹f‹±lŒ Ž^Ú„~¸>ïƒÒ†­·}`É××)‰™ y›Üý“ A‰²Þ°“N³M®ïIâ-öI†•TS³¼Äy¨3&ç½ïŒMÂ2ìùW8Ü?ššãÃx¹T’w¯#(ˆ¡ˆ÷t|t§@ÀÀ——8ŠWAwL›î0¿÷°Õ°ëŽ&ÈÞ6$\ÏX\jnÝøñ2D·Ôf–òu6ÜFPˆ˜µ60EÖž÷ÜäQ:_3G]7[uÔ„±;\‡¸Ø}€Â"]$x®Íæ;a¾Øû 8T²ø–o˜†Ó}§™ÄY]^&xVÀ73ÏTJ´>çCJÆ…–˜ƒcµ†I­ú£FOV¿Q@;ÕD¸é}ÿÇ,{òŸ*ƒǧ‚¡—q¨é/kC{?¯wzWp[kÇJ‚9p”Üõôš„sÐÔœTOw|µ¾« &únÿ{l~e¢]k'Ø­B|„B7['7mG`+S|^6â§^qp·ÒÚ*Yÿz-èšG_]ÀePøå2´:—îÒòq3#­ãs¯ýÈžš§œ⤚ÓMÍÅ.mÀ‡s€-r~dœ&Ú‘ ¹¦n‡oc|;)?ÝÌiKr™á›£RÔÜBç2§¶ê bTI«´Ød8¾eö7»¨«Á©¯‡±Ïõ…mHCN”X’ŸÃã›ÚÒ©Àà—ÔN b„>F*j_®% Y w!M;”™"‡,ÿóÜü¡e_àÝl`ó×¼sÑdŒŒBr³> QÄñˆÖö€ŒíÚÁ´6n¨Ñž[sÞï[£Õ.=gB¶räÁº&otå”STFÌL¯á–Áý8ðÉÌ=ÞÝëÒ é³új×xG°ÊcÜ +]bc3é%.¥Q1ðU›¢ƒÕƒ8‡:=Y OÄ_Œ'E»¸øKÛˆÛgX^K+«'¸Û𮋈ëò$ö$ Èþ^ú×CäÌzâVë¢y÷«dc×ÐW¼“¤´ÓÖ¼“Œ¤1ŽòÓSAÂÝ: #ì¹À\ÒÉ󡨔&8{°ê,þ¨P®ÂkIvéÓ)RÔÈe Œí!t:›Ð9}\p0 a4ÕAt¾R0 ê71ÔÜ'!Œw¿µ]°ºYá;G •|–ùj„úŸ / ûÇÓÒ®[ø4ãGoà鎭 ¯»­,@Ú°¢¨æV1±ûg¤~%[Ó@ÂVwg2ć¡ÿ…iâËØH«Õ4Õ¾ÿ™l³ˆqÅ£¡»?ŒŒœanAϰèŠö”BÇ!ÜGUšR¬;t©$(áÝÊn¢€çÍN¸Ø:ú´Ò~½_m¾ÄÇ2¢Þ™?£¦íC£Õeâ]ëukùÅÄ0p‹N‡øs”Á7!=n¶¢lÕxw´b­Î°ßSÓ-ýà\¢PÖtÊô±¯Ï—«{KÿØ\5E|ÕB€×hѰçyí#üÞϼÿÌÙÑ+LùmA§sA‹»jtÞLì² ÐFaò¢#–I´f£RX$l"ÓyâºæN«söÐô‚²œÇ{K‹P€C†N“¤_ö!‰§É¶a4a`\íñÚÿjÂŽA&k,°PŸH?@¾eãöûÌmœñ‰(¯.8‰å~š‰Y1ÖaÙ#Q!sr8mrL]Ñß ûv·Hé^±ìzvÌ´¢óqQ~ *øf³èRUdºéUøÓC…Å@&x£Ã7 ÿŒå:/ Žƒfof½Gº¥Ç ¢ŸãÌ[^¡cíXÞ™I8É¡2[ç3§Ç:µ¬söcâ œ%¨nijf¨_)N¸œjtάW¦rŠQiÏõ8œÕ³/:ܵ®6d•…Ycdch›Œ£Òyõ;!2Ívßååk6xt/k6ýo‘º|ÙDÜsoãn.ùϬߌEpd|M¼‚÷Ѽ.kŒ­ê¬ e›Ý¢ÎȲjãc"9í¨ò@Ä·~,§=Ä0À@v °ç LèÏSXgÿïi…J×{÷Å/[õ/¹Ä²¢ éÛw‚4ñ:âP°Ó¨<%±Çޱ†ÂóOe± ]Ïô Z{z!ý;iÞƒ†š³^sf3nIØåp(ÿÊ®Jlõß´’óãrS¨jfá^ˆ&fô¿"kR뛥1ŽIÒÅèêò°#Q¹qÈ“ÔCæŠ&^6MQ„áyï«¢Š­}÷¥âlyÅ0X«n+½iUñ¥ß³d,Ö²WRA1*ËñølŸQÄžOžµÎõ+×9ZÑ´{ìˆoZ¦´Ãqø«‚Ѩí:ðY’¾ßÒô¼k¦ Ôz˜ÐjWr< ZŠ »²û¶ŽŠ`“+Èïuû2Py•õ½m—n™\úÒ­®}ÉRÎ œáú;›ïØ…5Ž˜f‘­;8¬Ë*j% y¿˜2f}¨ùâõÃ¥¥ ÚˆIÑ–!zbÂìG½S€Ýj¢''3jw-¯)ºF'B‚È]Ay?)ægò.tc ^Äù:n|Ówܯ”‚|’Qç<䕵¯BCέ2¡î®U‹4ìü}C§“FsÕö”Üh> !¡Q”¡¢|G"TF{m3ÁMqÄð29—|w5“™¥L+¿ÞrUç6/6dmjnƾ<†ôlPçl2̤¦lî„=¦¯øuÁ=¾úKbÞš‘‘2›2­e»bdñDGpõ7¾H¬yr,YUør2‡°³ÐÏò“]î,qµI”:¾N¤´—.ÒZµ²0ß­ÙÇC‹«ÑXSC—ñóï"æ»gî†U£\Í<ڑ܈"§û;Þ yŸ 3íøíGWHt“­Éˆ•¿´‘6}?×wC`­¦íîa„Õð¤î•‰Ð%{¸g7N47ã£5“,—׿,vH¢¢My=WÚ¶÷w}X™3Îø[,Q fzL¼x·é@Ð;A?/xµSí±™ºÉöœt2t°u]´èvD2¾‚ß‹AèØÔñKp· ŽpN|¢oöMN¿pójF3ÃY豃J¦ÖZ(ªÆ^øÔ]â ‘ÓexégÝXç¤þÑóBb@)‚jZlõúé=&çÄ{køÐIþ2û M¯R:¿ŒÁ]µ"'KDz]©ÑT,¬WTB¦P$2úý®AAÆ”÷°>Ç»¨¶af¶¿ˆ=„#å4$}X6uŒ­Ô)64Ö»%»æ’Ç-×IŸ>é¦#«ãž™ðf£§¯Ô¸BÁǼsz½3ü^²$,1JìÉ¡‰ù ¦ºç²ˆúQ¥š]žÒ}‹i´ÛÛ¹õKÕø×PÚ0à'#ØœO kçGT/<¦VO”бê5Ó«_WBp.+^±ÊVJÈL³~ÓG¢b«a3Xô0z¦~ÚÑ*¶ÿÜÐq):ý2Gwzç'ûÓ;»0°9“HéËÇWQª¸LBD“@<»‘!Z*QŒ ‰ü¯¹2=:1ð.¥÷­9Œõ±í¶û‘kà‹Õ’6ì:¡¤>™ ž'4&ÿ]Þƒ†”îfðDh/‹;#2žB$¼FúÆhüIü-I?¹—ô$íÝG59jލ™â݉ Ú[öõÇÃTÉe@Üi+­™ŒïéQ¦,ÄÄU›óˆbB.E¤®Ó-Ñf=fx,¡OaÑ‹÷˜•Ù&Ì×ËHEázñ|nFgÝJžøTF'íÖ¬D]ŠSxi­g¬\²[ ¥J™{$Ç?PAP6ÉŽî̵$¯¬jYú} ñiT½D öáÓÓ!šJ‹ÅÔ€õºÜâÎx OnxED×QŽ(¢@°» —7mÙ¿*ê=鮦œ¼<$æyå ®–àk¶P¦†ì‘Pe5vа¬ÿ& ñzK|%QÑ륜)”ew·:ÀŠßä.ξ4öÑï‡K‚"*qô…A\,,§™„þ†v z{¶Í¡Ü®ûm‚ÚZÉÖTú`D¿âãY6¨¦TÍÔéfcéR;—¹ÛíeÏ(iO=œªý¡?½5b;VÃ!V['¸‰ÕekÒ! ŠŒ.[5÷<0 c©¡»§~¢ëؘâ{Ô~Yø´U‹)ËÎ?Éoµ}åÊX;µ·…ŸÓ›Ñ»zj¡êв×aIrn¬Îê™TS~!ä»Dô‹L¢[žz‰Ø‹F<üãi$c¢9q)ªŒ¥®‚ètÀ³sèþËé*³ef<›Ãµ¹#cL•Õ:gµË凖¿Ã0ûjÎ øÑÝG¹+§™Ø ñ†fGw_äSÌ‚VÜD0>µÆ;ÛÞ/ä¿lõ@cßÀÑ,÷A—<á¦öΨKv™­ä1hl[ ¿^‰‹u³03±BÚ]áýÓk$ãp$ª¥'ÕééD”x¢8éÄ¿­2fá{^ß5ÎdrvÎqQ(ú¸Å箊ÊÑ*$gùÆÒË:¤Uç‰í«’Ëvbãáªj%e×üʈÞÕ«{Â4f[™ÿ¨‰þ¡`žA,6½UÊìBj¾:5‘ç*ÆA'¯1]–$ FT`{Hß’æÈ|˜fð ~¶}C¸» “ +ë~â¯ãZ)Œ…L:ÆšKÒÓ}9•ÀW [eQ½ï Yr¥ô^Ϊ öÁAÁõ§¯˜³îwC‚ÔFË]±—ãøèÓ°ëßà.üÑKÎ:'õX¸ò^ñúºÏÎ|H!м¼^ s8CµY_ñZèˆ6aoå6õæ=†- J“'9ú†ú’*e—ñE>dV¦ºiSt )³x¶OƒÊR €$* NØCtº´¦!Z¯òH¤…µízIÓùcq"‘‘ë]Ê|9u?]jâ÷ø‹x]ËP^Âó¦EÂè%’t?£Î @Èš ‰_€ôÏâ[E¦Š ©BHІƒˆ(å¹cÈr掆Õl³mÙD³„v©‰CêÖÔ|¦-1¢Óèî¬lDדi¼"ÌÄT,ªÍÄ3Î’£õç{ÌïÚ/!Ë‘'ÖÒ TÕÕë †û ÇxýuHôWÕØ·DÙ”B-Ž)v< ¤¸%¯“ôÏ™Ñò'fõ””B$ˆH~ôí“YããÄ~õ#Ãü%¿/Ä9ÃÌI+¿ý€3+Äÿ!”£Ý{^¤g6'~JlþL_—¬¥#层„Éä #65*%ñb<‘¼°˜É¯ôZMKÑ… Ñâ=†MÜm¹gˆ0¯­2î”–ŠÙ„ùæ÷;·žd$ü‹áÀÈ܃›†Ö]kšƒÏô*H-g+ˆÒáÞþ'ö†r ÔËò|Ï>Oewz¥¡;T[/ó蜌W­¯s½¼2}Î<5l#“ì_&~ÿ^ œÏºúʬž Ç0Œ'BÖh00mØ“c¦½™OþEi£ÐiÇ´ÿŒ%É2¡Ã.aÝ¡}IR"¥Á þ@Ü…ï¢æ’cwîDFðëOˆÄì±íF"h\_ÒD{qÍ¥fþfU·¢9úUÑz›e˜6ß2üt¡U9Ȇ÷Äpô@“KgxŽ?w$‚…âN>Ä^j‰À”âô¢ªqEÜåÃË®3 Ú€c ;±wã˜ãùýñ6Õ ‚sXÉÙÄX8”œ7 ¼ëޱ%v~>ØB£¸hÁÄi. Úõý–J|œìßþ }Ƹ–€<ö½Êåàˆ<¦$œÝóÔàg9Õ”ôâGhWƒÛúÈAqk· ZÈh:¤9Ušf伩R³U”$¥å°.T+“¾ W¤Ñ¾Fü]ë‘ãàáœÌ¯ÖyÃÝ‹~Râ`賈W›ìrüPÜÅ3C]l I’·nÙ§ .#W6çxzá`èè†máÞ‡¦‰P¾^Ù]„û8ý&Ë‘ 완§?¾´måy¹F¼gåÈŒïÞ_ÍÎÄs6¶ê:¹Ê0ì7”J,ƒ\”ä”È{×{pòêR (|y¶H“™½raáZm'G‡3Ò‘%9Ž©RVž¢àŽ$Ð…Z®Ë‚h²ðjûF?›gÃ.™Å|üD€ýÉà¶®¤¼¸«º@U뎀•ê‹N®áýÂÃÒ¸Ì`_põ¶ÔÊÕèå(ê[<'âk¶KΪ‘ÇGýX¾kÁâþ—ĉþÐ)Kþdü2«„W¿ç¿w0mnØ9RÓ¤¬äŽÉ…⬾» Ä¿_ûcÓUY½GëBº¶R}9kÊ€ K‡^ð#mÐ jA‘'à–úÈÖŠœ/æÏ}¯ý•ú°pÄÇZçââÓ8â^@ êvá'º„úÚãlnø! î~ÐÕϋΖ_û£eáüŠð­aH§Á^\ÒæíùeÁ÷‹œèTˆùNÇž— KÄ…NßÑÍèêàödK[ƒÔ¬¹~Œ³ñðö݇©j}°çù¾K-&Ñ57üûêýÆ:bÂgen8ÇwŸ®$ß/~/~qì“7 ¡©é†N˜ƒ*”uXyŽÕÅ_%öþ˜2íÖ³eóÛyqQêdV'º\IlƒèýÝ‹«­Q‹µ×Ü^ψÕ_¿Ì ™^^ÝYÏêžH~wK°ßqÕõȧªï¶£©Tß.’èéħÝj†"]‚ -ÖÈ”ú§ö>-‘ïx›Ç ÎàÉ:ðµ² S¶ÑÎÀ 95ˆÄ©yœ‹üª}N¶©··HåòŸš,ƒ\i¦ OE-N5Ÿ}¢!ñ îyˆb­ÚGSÓæqã ˆ–…M ‘i7l~ä‡!2@–cÚg»ÏÇæ†=a£ŽÁ8ç'ßC SƒÒ[ÙçŸÀÇ †Ð XÌןúx8mšân…ubvDIY>)‹˜Í7ÿqZ2ÿøp¦ÚÅã¼ÂWÓè[Ä\[¾»A•Õ®)lÒ]ý«3{ÙWù·²@±µá–϶!Uýìt©å„tâv±\Ùr=kâJº“òœû¢/óá’Ä 1A’½ Æc¹4‰)¡¨ATðçn3éÏÃôÀ¡öÎåÒk¦V9K’,7ê˜xæ{¥)£WÈ]!Ò“}—°*—zÝÀÆ±í°Ž>…Ã+nžs,Œ­”VÕ¢ŒýõLýíáaô)—$/[æ{ŒÂkâ 2z­îyë™/nã®y6™ˆ*!Iå,†èƒ˜¼¥êݯʄéšvHãñÅÆHµ ‹RÝj6:zéBV„•$NRB¯À%ê¡à ¸~UBCB6Ù¬š¡δ CvÖ„ ²$Û Ï‡Öè>å̱2W€74¡‚êÐÆo1ÔÄú¤À ËzÝ;è4Bý¨]ûêÖ™Ýþ“ 2POÇó¢ÞÚu!“Á¬Ûú<ôÛ' &Uq¥ß©ÑÌü΃‡fµN\ˆ½q’ü"ªîh+jcºe—‡y!¼)ûE6Ï 1PƒY/4ká–v&õ X>gõý†-$”K{¯†»(IƒbÆ+{C‚ÖôÒµkêÂÀxÍç6ÞÅ{\<6ê%–•F¸ºÿnfߥ~9Âé´çÈú‡5DQZCš“˯¹ÊqÍ*K–âÖJЬçdÆGv”½šuª»á›A Ù£ÚYÕ†+j×âîµu~cR&ßßÑWF²‡£Œ°Ü»Ãd×Ñð sFó±[»Ù@}ìÄöÕØÂæW¨ó©¶§•“uö‹<ê÷bE½ èû熞7Â>Qfjj]^ÉËð˜½;}dJÞ‡‘°§&WÛþ@ö°ÄÝ#ºêû20£.gTö`¯l5ÿ}oÏù¨§"7£ÛÓ/Þ¸cUE!ô{ó›FEOª×ãAdj¨¤IQZ 3‚­OŒ?Å1G%;r3lâ•F³m¶]-›SÆíÎ%NïÕÊO8Ä£ý°![u!øÝVNóÛø¦S$8¥½ã8FÀÑAÕ^QZ?$„‹Íëy¤>ªO)¶e-|ï*yT˜dUR¤Dñˆ–„lŠçy·Ç¦ÂG‡—ì;°¢ŠƒôÝWÛYu,²Ÿ}°ë<˜øâýÇzü£ +Ì”^÷j•CBq’êð®¹6ׄH\-SøV´©¡ ¬¥­€LŸ…r/KP_HàŸBŠZÓïð]uï”ní÷î:‰½køúF€fõàã8V\f b‚tB, 4A36ê'dÆÀöº°¾é4£¬Âìì1ú–¢Þ®àg¿A­árr)öcýCÌ}ÝÑS £iéY~}žlék­¢‡ÚiMI’¤?”¥Ú µÀ'}crS„LRJ訰ޢ»˜Bÿì+ü5Èp’HñøŽué;r-&{rPª/v‹Ö-²&7•ÇÉX£q±ÃêŠûÂ;F}KS¾qßlÂŽŸ­²kØóº[«Áú•d¼$¹tx­2Ô xPèÅY8ßzIa†·.¯ù#K*¨Co¾,IæH”3Ïgd›¹µJÓ¢”rKþ4R£WXK‰ Íï ô'Ê‘¹=ÓQG…Δj9¬?=÷¹G=½ é4NáQ~2Z@º©ópÎ(Æòù¨8Åi#›s!ÙE8âÁõ5Ü-¨fŠ´QÎ;nO¿ÝžÅo cŠ£•Ÿx³®ªÊóŸUxvi0é %Ç2ñRn¬c{“¶Ì¸Ã¼}àÂF¨æ³aÄÉÕËáOR2÷Ì~â| ÈPÂåMwz¯1Ew~~Ç)¹ô-€eÇPñ§d/aƒŒ~“âKâ@³}ïÙhÞe0‡ • ÂzG-úú3{Ú?´,×@Ïx)ìöºþø3î²ôؤÉxèOYhJ=cªfð%¨uŒFÐ`xæò0’YDé4caSܘ@ö¥%Üu] „³óñfþ)KkZ¶ í?¿¨ˆÑÒiرœ¸v­Û|\¹í÷âîÈ„µÜÇ^bzHÔ GÔÝÑ K²¾}jýD‰ÑÍY[þC%ÁìÌÚêÛc!*'®ƒ&xéè iÄbß²tàˆ3ØX,Á@ÛØÜtñ3wqLç¶ 1NF_‡ôZBÔ£xÌÅæ÷'‡&¤qãÕùÔƒ'ûs6 ;·[O™@sEìd¬¥.Q¥jåʽW×=2fívèjˆ‰Þ?+ë}a[ZŨČ3 ‘,sUæ3‚ʶ‘ ƒ¥F4¬…g'R 4¢ŠÙålû"ÇkïØCÕ§Û â3KÆzX 9?ÖÎÿ¼‰•töí!çG‰‰ră°,W[c¦º¸  òf<ú¦­®ˆƒµ1ð™¡/¸ Õ³=|Šz‚wئYzŠâpÂÂï•tT}5b–£‹Ç§ìÒ6£»ìT¹B©Í*1ƒ™üVÿW¹V~š;Öbý-f¼Ünçì5Ú°,W?¢lTA*úëûJ1¶rƒVsGˆˆ;r‚èÖÒšö)ÃUù%î p3¯]À=ÆÇcÚ¯{~ò¬ˆÇêQ´Kº½Ñ¥© ¸G¼äåbE˜:‹•V¥v˜Ké@±º¦£˜A>{ø*8båªPý†ÂO®ÒœtjcŠi—~švÄ”â–Ï…aÔŒÛLî5$äš/ö÷™,.³GN, žÉ1?IÅãxìªV-ØXùb:™šhmäž5ó*`³KõúªÐ3Œuš Yõ½²D´‚m㤦;v-š˜¨GbÚèꦗÙHÊÒÕx»¿pRÏ¥«–¡Ì^½ıcum¤'úë â¿‹!¾?¯ÇðàÀ¡õ›rê½4‡É8°Âq^øø}·%S\ò±m¯²šd?çBÇÜ‹šÿÛ™mªÜ/¿|êû$qþÌyø¯I%ÝÏŸrêÎ YüƒPzM­S—± FǯL’éFßë‘ᔾÊhÝóÌ— (tõҵᖣ)qš”Å)ŒÏ è{Ôþ¼LqÞ ˆm…»«ùù&Ú¤¹îëOÒ+ýWfhDošøU=K^Yø‘ÄŠÓûS!D yœj( ò™Zݵ9œZ6µ ×¶øÏaùª w¾àŽBqXãCh­o*§†@ºg‰Ÿ(j½4œÚí»ž+¼èÝñ1Ôyàô ®C×ù [—‰–ü¨CÑo’û/p¥gÛ©õ'}”fÏ2¶Õ{&n¾šâGj½Æzç#ÎCR'ó,ú½F3„†cáèÕH[æÞ„q<.Ÿd²ÃË· Ô„0—ƒu©óÊÀ“‚Ø‘,7HïÓ¼Wºxª´øX¥ :`bp/“— ‚¿ð§@·{̓hJrr$«×¡ŠÅùVàí‚{ÙK”wÍ^¬N¿"Îc{RwR©·|;NT²¬õ³¡ÄÎûYà³^ ö4Í5¬ÆG˧upàËš?äþ{ñË©{'E§l[ŽžT‚ˆÀ &à§Ãaªæ‚†ßoÖãÎ3 <½˜”¡X é#ß|ïÖèÀ@j=Tù`úáMû>aßýïSIîe\W-¶K¾²\ާĨðj&i&1›7!2S¹gd?cïmÇnóçéü»Vüø ‰É#u:T|Ãyñ4ð'£ÉǪ? ¶ÿnJÁ‹å½¦4Úàhü„=îÆÒ—ÒnäPð§s‹ÐsÎórt;ÃL‘ÄST¿÷öúSm)M~ R·rCu¸Áµ³EäïÿÒÛË—Rþ‹<ü\†Ýý¹æò¥ËÜžþ9iŒkŠÿâ7L³ËÔrátvˆy·uQàŧ–˜.º÷”¤–ÇQ>¢‰…9ªr¹zìÖÇ=ø†¿æïW¬fQ;\ß1(€Œli?šK¤5 ˆ¨4ËIšZëú>ôžt^5K9¨ît± `¹0¦£Ë'üêÜóK΄÷÷«ïQÇ}žšDböp·AÕyÀ”\ ‘Twût ެR/˜>os[mˆâZ·ŒD¾³ñAtKú–ˆDãy£2ÁOóΰ}«ê‘Ÿ¨"‰(-®¬”×åòUÀâC' éT{÷f >‚°Tk<þIS:i¸›ñÛ¿Q®Ä…[¼\.ùZ »­Ô阀$ÂÏd´züÃxGÉŒLtÁëÃßj=)š ZÖXð´Ê`Á)Éx^ýl«½>nþÅJ›·$hÇö‰¦s&=„].>èb8hŠ_ÔÅÃsg®F¡¡Š` „±8Vlô$’èÞœ:š¶ªíAß ë3’T/f¾×Ü•ØDÞ;(!Ξ—"\¨»÷ÊÝ‹P^óÀ¢LI£yªŸ¥ õ^½“}0n3ïʸé†À ¢ïüHDÕ>¡!».þ’Òç©­i{ìL9¿ÒìZÕ§cA½DÖ½çøûœáh™tZ/õÅE^ÅôŒ\®´É/Pàÿàðøø÷SüÚ'¯"z‘üR¿Ãm#"—Nxà~*ÏM÷fá¡ìãwå^yža V|Ùç~8óQù–]Y<}§NޱñÁ· Id J*úU«uíÒÚcÃò-j8íã¨_¨áhïE~GN =°'bcËD§=}~¨¢RÚb³()Y´_ÿx°Ẽâ  ܼ;ÁªµM¦¢:ÌÛÞX €‰ª=DbÇr¸UmþU+š‡Û.f”Oåu@™[Ñf½ôŸ “v!+_ÞÊN¦öfKà¦q3TMÚl*“¥ÉŒ’ú1n3÷çqà#õÇaíBÂ8Ýtƒ QzýW@æ“@³Ú²úÇãkßRJ3 çìZ¸=±O<™!òNÇFv·Ì­¯¬V²ëxŒNTðÒQÖÖI’ÒœȱUª];”‹)Ò¨(ó½}º!Ç^ò(“ÛÀ Q?%Gˆà„ 20F8:¬/y³˜«.,‘ÆX[µgZHrñóßĵ;IÛºœmX €øRÊÊãäåó5H5ªh' …/ê ðmïjb*Âûrñ 5¯´MøÞ;ûMsR$,Ûs[Já:3±àW³HçÀÁJnŽ™#Zn|”¹áý ãrlìü9¨á“§m/ê hÎå—³Á)mNáBBõ„>A1,e%>ëê®»Ý}%µdfÑÈŠkù.s‰"¾ç´¤Þ÷Ô“ŽèìrRÄ™Ÿi)9œp*ïåêçu8`î„Íä {ª¶E;é·¨&€D2ÎæÅ#-ÈÒªa^¾ž•,UPľGtýZWs·ä^Å|žHõGûñ¿( émïœai&Ü7JurüÜÅ:Ð÷ï'^ú³Øñ-¿^oîx/ŠñC殃¶:½xo¦Êvƒzø“~ kå–me´'@<«ì 3\ì Ê0*Ýÿ¡¼ëä.Ééo<’ùÂýò!Xö¬“±Ã®ÙöúàˆÛ-Šˆø&bŸ®þÉëRü×ÖWΕ9fÁšÅ¡,€ËUHÍ&ï‡y*±2†›nJ[§Ÿõ 9=fgYÈrƒ”åQ 0 ™ïÖ>Ù>~¾TÛ³øØqe–…‡n@ú`i˜Ø±JÂe0Sël€…Íy©M °E I¢·¯FÖÕ˜ƒã³õ!5×"}`Y(%þ=õ*._Xriµµ1I$u àN?4…€ÝHÚÛúê¿ä™Í`kHÍÎs1?ôn¶]÷íô² VʦBíq:?2ð8^YÄÄâ^z#z =4œšß†þbv°¾‡†ö<Ð,Žâ†µµ}æÓ¦¤c9¾SPóÔ ¥ÛïW´¢ÃNAîd]#L8¿!KÓ'—J W-Û!ï]:†yŽ ±hñ-…í†e!¿þN{mNi'Ê·ßæí~þ^CH¸1Èï D;Û(ægžZM¨lî +ZyÆ”“w«#Ñr§®¤ÏíM¥ÎÍr†×Á©%ŠqÇ^öáñp©uë¾d‚'8ÛeÊ*ÚØÏ߀ñÄIN³£?†ÂݢȃÄ{`çŒïš’VùÖA3fE»À²ò¼£U æ˜[t¼||v«Á<hàQ«˜èõUw˜OHÞ«ùcwEßÜÀ]ЧCZ\¾§Ñ×ßdzn±§üEÌ€ƒœÅô+ñÈ.ñÄY«kˆú’È ç4”ªùʣϤo†k+„c!FÎ1ˆåM1ŸçXƒF |óÝ(XLQâB¯FLOœcR#‡Mª† ¶%~ õ „Azï]±µô„}iÀAãÑzl ül°šdðð´¹N¸J;©ƒY”—þFo˜2v{§ýÜÔ DÛ XHù˜i©Œ!06ªuÂdðÆ3VT’˜œçÛ>tÚõMO5ùvç¼jžŸHÉ\‚‚çH)Lb=È7pÙ¾®"Z‚cª/ÕL“ov]‘â~…¢@¶[ÑHx¸¥s¿"°MËR¸£êÊ{ ó\LzDDUåÐé†iŽÃ›ÒW] Šh þˆé5ðv.ÁÉæÇËwŸÀÝò: Áñèý¢ôÞ‰95GQ,o<“þƸ´ò`‘Þâ’˶M6_`þ¼½]IëCX#Ó Çè²ynfúÃI¢À’ÂxX‚~¢J·áÄOFˆo|„JôÝ9x&²Ü ŸÚC³Âfï†pÇã8«+[/Ák9àD±¹ãý!o(¡ýXâNì‹6®ÝííÐ¥õIiÄ€¤ý}Â-\Xܦ]Åbïm!`1vŠôÇoæqG¡?"+DÁÒ£b¡d å~ulî¸"£º©JqO@¨JmŸB^kv|}}iØðï¬T¼g‡‹“¿e,õ–hú8®XÁJÛ&Ë.¹Ðvíh<ýñ@Æ›÷„Øû0ßúi¹æ’JRZþ÷?ÑX#ÇÝ!b•;:ð)W(5‚~4  †é´éVÁÌ¡'à(@ viK²mÈÓ¡#w3*A‡´¤J„/}âe"DÌåáÅK’÷þÂ$jr{k˜Ð"b¥®Á»ý”ââó±ØÈŠßaÞ‘·9l2ÛБ’ôx™ÎÑZߨî '†u-(+n;§YÆKÖ‚©=µPO¼2âo_ËóXy-âgÕ½d*'+Z»ÂèÃÈÈ3UŒ¬†ýK~BK&1¯rî {Éã7ðñ­#»;ôîì7—w= gÄ7Ï8á6÷W¬¤?‰"óÎ᪇XK¦ÛT«…tu[8÷r ›]ÝÈÒH‡ð\®*Æ> Ñé³€h@ÆI×à~{T wÛwO,SI6±£ÖÕïH giƒÖ³¤Ïõ؆mÈC;+Ð4}óîßÑæªóì!$ÙªŽÆh(0^¸y†“ý~Šx•þn̽(¦WĹuÆ=Lý ßd »DóçÚfÀˆÐdÐùÔPá=é±ñÔ.Ígd?Am«Wªùgçbù÷¯a¿°Í‡_R©ešÏp†ןYgšwÁ‘{ôËËu˜ŸMÓÊQéЬ²`B!Z5ïpòzÞ—X®v)5@la©©ùÈÉ>$ÿ™Áò« endstream endobj 2918 0 obj << /Length1 1520 /Length2 7074 /Length3 0 /Length 8085 /Filter /FlateDecode >> stream xÚ·TTß6ŒH Ò1tà ÝHJ·t 00CÌC—4"Ò)!(ÝÝ ‚t—„t—€ø¢¿þßZï»îZsïÞûÙ{ŸçœgŸµ†‰NS‡KÚa Q@À‘\ n (@VMG|Ü@ /6“. éùËͤqq…!à¢ÿBȺ@ÀÈ;ŸyTCÀÊn$( ¼@ È_@„‹(@쳨q”pˆ+6“,ÂÉËf EÞõùëÀjʼnˆqþNH;B\`V`8@ Œ„Bï:Z:+éõŸ¬âP$ÒI”‡ÇÃÃìèÊp±•dãxÀP€6Äââ±ü¢ P;Bþ¤ÆÍÐ…Â\ÿè l`àÎ᳂À]ïRÜàÖÀ]w€Ž’*@à ÿ¬ú€ðçæ@Ü ¿Ëý™ý« þ;le…ptý`p[€ ÌÐPPåFz"9`¸õ/ ØÁq—vÃÀ–w€ßK¤µà;†òsµr9!]¹]a¿8òü*s·ÍòpkY„£#ŽtÅþµ>9˜ Äênß½xþ<\{8Âîó—eƒ[Ûü¢aíæÄó svƒ(Éý‰¹saÿã³… @ PÈ€8 žVPž_ t½œ ¿ƒ _î;~>N'€Í ˆÌr÷Âöq»CH7ˆŸÏ¿ÿµ°A €5Ì °„ØÂàØÿT¿sClþ°ïÎßæ 0ÞÉþzþþ2½S˜5îàõü÷óh(*éèkrüIùï Œ ÂàÃ%pñ """!€ßËü½‘ÿíÕÃþ\Ü¿ *Ám‘?8ÜmÞ_<ÜÿëŸSÃøouÄœ!ÖÔoZÝý€þŸgàwÊÿŸôUù¿ªÿW¤àæàð;Îúàÿ;¼þDÜÉÙ y7jˆ»ÿ/TòÇ<«A¬anŽÿUB‚ïFDnëð÷FÂ\`žkMÒ ú‡Šþ:‡»ò08Dá ûuã¸@@àÿÄî†ÎÊþîVq½;­ß!ÈÝLý·¥<Ü aýkøx`°6ðNa¼ÐÝ”ZC<‹Àà G ïRwôü6ì_g*"àÿrý¶ø<Ö°Ëß.Ðy ÿ2y<6›ü¨—ôîöøqçƒýcÞI”ç_Q?€ç_ÕAw`×ßæhY¹¹¸ÜÍüoéÝqþËþ}Á@ ž+ì™I„•Xˆ]eHóe¹4¥×úgŒ¥•ÖÈXÞ$óT¶T3õ騳Œ…u Ù@’ætQØÈ¤/%ûþå§IGzàb¢bE¾gUæ+§ÿûI‡-„ÆAa;,”¹úè N‹ßÂ͘%^ò&T¨“ï[éFÞV×oF";G@Á9]"%ò¥tfëj”!ã ò“¡ A ¡‹q²›®Ò³á¨Q°˜ ™æhòï^«Æ1)ŸúÒ{{’øŽßªt• –„‘{+Óe¼þHþ8.]¹Î…YFà\¶(žï`¼ %{àÆèîC?K­®S­Œ$÷û‘÷1¬ îSìèÕ&ìÓªÖGcQ‹"Ø<$,¹oñMh…½31•‰Åø»¦iXZuò - }_D_ôò.¢+¡æmæ¿Å…¡±¯ Зâ‘\ãûŒaàôË_Æ-ç,&ù® 2{øÙ­µÕ~Zÿ†E!›—(ûÙ±=—†± $(é¬4xæ#¬þ75æMýò‘Á²B€­ÚØ´{7Z÷\qj¥Q'ú»Ñ0ÿ… &UïyXŸ`2u囇T¤rT›mÂûÛE9ž"ãò9§Èû>;Øn¾˜N¢Ô ÆE«ÚKïgñféWŠýÏ£y#-=IÊkúwrŸ˜¯>Iö~`J²4cºx‚dæ|8byo¾Y»tž>°Ün蹸2¦çhkgÛ*,¯d:_0G7ù>Ÿã×`ùœûþÞt2ÅJÍHxY Û>å­ã×´5ÛíœÈºÀ·¶°Ó,¸½ûë#m+®f[;ìÒ·KžüV„[zÏÇ#Ðýœö¥ؘ,8û b |¬úo;6 -MVóªtý"ª{xhËÁæ”…XV{V'hÒ!µ‰¬êÇ>;™ŸÝlŸ¡^˜.AÍÎ9 \ ò0¼rñ†Š¤­I»a…PédŽïNƒzÓìU-:¡’¾rV»†$Û;Q_¬rq´z|™Ýt«zÜcmLç·¨W;ú¿ë&Ò,†RPƒÒü¾.ÂN¹°zÓ~ï={¾u (¿Ž½Cëh¦_ÿƒ‚ö«”ð “—?ƒ(Ý?Í)0oéÍ SÛ¥à÷z{H5çný:æO™¤‰óhºñ!·L©bIN¼ZÒú*!ÎBç‚ÄÕvY6ä³Rré˜ìå‚Þ¯:!µ§Ž©û!’Xbñ¥aÉë”yªvJ;ç¦6%,Ì EµÞS¦0ïHžªë„PÆ¢¾¨5É|j¨—Ìyš›- f¤~îœÇV:ù‘ës?=?\ØÖÀØ)A¹NýÄ׵ߪÒŒúðüâÍZsÖ¹e ¹~¦šžÎÒ‘û ÜìŠ,€Š÷ìPvWœ+r±xOQCª£ô ¹ì1RÃIîvq=cf)îä´-oJÀ\Þîzrÿ;͉­ÍÍŽŠ€ªZÇ®£Æ¬ó·ü­QÇRE “Ë9àªÉuÇkC@"³—ÕÔˆÉg?éU•áþ½Ù¨˜¯$T¬)Lã„”€Øïe}Ô­šyoÖþ·`˜B×ô y£r^@_‡èV1a¸!1úâÁÍøòÏâ0›‹3NÂ8¦šûMí·"}§oFä *:uñù‘5N)‚yÎ……54ÞˆJÔ°ï˜<‹ÀKÑ« ŒâqðÆjÌÛö6&Ø%b‹Ç[¼ÙìuÑ’/$~Å¥{'9»%-¯}óa ý£Uèâ‡%{åþm+R‚Qÿƒ7:Wß¾!"y_%`þŽ8›Î9á½½(¯æÍƒvÛü«VJl HcÙh¦Çž}󔬡Ô+³š E÷ évô×L6r{+ª¸w³ YbÙ*Î4ñɧ"¶û?J±$¥ºÇƒ†f¶gB¼ž).¸R«p^qÖº-óܦÜʵ٧®ŸÐ@ÚY¾ÏSÔNÀlZâÅÍ…æ'Ò°TZ²Ë~¹ªä”üZ8ù°é\»ˆ¤f(Yr¦u[Ù(ù‡j™eûÔ)ÎyþÆ +¨Ò|Ä—Ëð½+â˳ŒWhô/Z Ã{:?/¶EyÀãG;“Â,'â-ë’äÀz[•ȳÊAeR_^’pÔí ôݘ­$möW!õsÈûªGÝ^NW£t`#¾ãŒ½¾ü“r8O'Æ/ºTJŒð¤ëŒâ(æ,cÂÀÙÞrìM¤W7$€¤BÓHÂÌæ¹ ã£ü·ñ;/b¤qÂÇñCg9ÚG¦†ZÝU)4§EÇ·'‹Ù"£p†âFÊ÷9¨F#‚l9ÔDÝÇå¢ÄK¸g¿oºÝh«_s òoB5’â©{•}:æO#Ó7ì §!„• ín¿r}zAô3!ôu\þc—þ½ÏŽ.’ùg”z:ƒÏO„}„¨> ùÝ×ÛåÌ~`vqé˜ã2L»›Ã(³Ofì+ણùDo§7à­’±#»öþòfpÊ’µ ͽ¯{R/Ѿ½Œˆu¥4’3|[=&]¾5ÀØSù)o:j·}±N ÁÞµzÉö-Þ\}ócß²‹|l› ¾zú6FJÉÛ¯ñ~|ƒ¥ù}ãïºt;âJ=‚g,¬çÏÈÝ*}PŠ]Êô“ÆÌ@Òì¬_xØ–õqà=#–Óª’'ëZ^Ýß9ÊL•ä »…‡õZ†{a]1  ûƒœ½+ÙªøÁSoϪ³B'¯…ë[¡¬Ð—¶ýÐolæù± Õǹ! G®»ï±s ªô8ÙÆJ©ŠÆdÖeÈ@ư™½âÏÝ bš4­X“måãÃ#‡›|JÌ’lëðÐݱéëC lHÖˤgH‡ä`»'ý[ä-M»Øæoáè ƒ‡i1U»•L&Q ~jý‚Ôc |†ÉeîÔ/Ä®»Ó.:H_Åè7Ô„+e)qæLJ²îZ^ð’² v§T›óÛ£¨RVÀ~+rvá*0›OúcÞÒÝÙJxz&C]+_1fZØüº*’nšÆ¹UOvóòùÍæ¾&léœvŽq>K\‡#q ²í ¬Ñ…$ù1sÕxXÊ‹M¾w|Áµ¹m[rC>Ÿã¬½‘¿Í¨ ˆ=ríõK‘'8èl*²òÑxŸvqUIF MÌí0ãR?E.¬P=Œ üDáúØð”ìaoÑg_å€B¼šˆ:¨lË=âÝS¤\F°®Ôy: qShãFû:&Zµv*~ž×øÞ½Oô³†˜æ6™{†ËÁO̳n Ì&]ŒK¶ú)¥æ(kÎÙübÃz{³idãå#‚?S*UPzúÅHÃñ>'cÛ¥ˆ¬r}X?¹_’È{|1ÖçÁ§õèý$nÑeAFŒÜ‘Îa.Å໬®TK[+²¼n•Ñv‚aeÿçëä·m/‚+¿En¯ØzÀ$ˆƒ–1̆=‘§nzBW^ü³W‹¬MÚ(Úœ'‰À@#/ôרOÜ߉çP<¾m*­¸çÏÙiäù¨ !ö7jDÄýóøÖ÷¾Ƨ­×53_vª2ú“tŒ^ªd¶c²È^n¯ÈN•61~CÇ›¼áùšiaFOôЈFЄ9Pá–q…§ûñD’E´DÊ"©³ÊD(u×äHÛ&쇣÷‡S‹§«b¸n\Þeã8=ü^Í7½FÉ¢¤Ö¸)9Âôýœ(ˆO'ÈŸJh}sEWO’æ"%®=jâKð-ÖÊÊË£Z3乪øä'ztg§Cß‚Ñ*bš÷U-/1Œ¿ÔŠJK)u L”G?&¨Y&û"¿©iÐÿ¨g›î̼%ßùr Ë°øªcZ)«÷æcBŸüF4V0ŸÌ’è :D‚+OÕ“(@{Äk܇†¡`&fóÙ$ÖAÛº‚¬e£&uïÃ…Á› ò€Ôh)˜O$ ü Uª½ g¿îžöÂÖv¢?ybp\¶%Ø¡m·ñ>ݲ°ý»¥/Œ}Üh¤µ£ôO£§"ñf¸é$ãŽe2TeLšÄ…fŒ¦OœÉ€úUÙxFâ¥~ÄfsX¸7н{žP$ "€ü²$'U®˜L”$vý¦Õ¦`&øJ¡Š‹b%"ÐWczÈby‰aÙ˜ÃÔcbÝ÷‹dûÁFØKEËâZ„omºRêjÁæ·0"1q\©«œªi]ü-ßZ[çWê¹ÃcÝu N;š"ÛÐ(çžWX&,ªTùØ¡tŒy(0ó\1’@V?’î5EÂ8.wíØõ«ÇwyO©àä›hzmðgrq!|hH¤z®(bÕþp¼ÝƒwóyílKâóØ¢®Í:`ÁxÍÚé>H‰¸ôÇ~Rø}Ô®wØ’;7¢4ÍÌ4huÉmYp•é½çáDÔ„Þ¾ÞÆYD9–=p9O4Ùxx¨é·‰­¾Ÿ}ßÐÀžÙ3ž•päÄŽçØíïÉ-OÔ•}aª6tá¡%;†¥l¹ވɖ0œ¨õ0h8=}ñ2©IdT*>—¿ÕGJ‡‰Ÿ íŠ~µ"ÿ‘îö»µ§MD÷íPàÓ·Íñ²í1äªÓaª°äªê(®³w‹b=ÅÜNtÙ뼩q§’'$8.ÍýJÞ_P{‘†™SñŠhܦÙÏ)hWòê»”šÜU+Äv'‹’­BMϦuÛ˜ìßLÕŸ9˜û°’é—ÃrôJ­ÔS®'÷ËKÊÈM˜Jõñ.ªÚV%™Çá®8„±ö “ë½Ü“¤RÍyé(µoPHþ uóC²?.,=hWZBΧ ^#&ûÈ0=¨/Y+]úާ1ÖÜËê2âS7•"‚c½ÍKý¦¥0¦•ÆGÖÃ4xÎÎ'Šß€º,çx…<ûTŸ™‚-)&ûqÅÄUæ¹ØÇû¿;Ó¾MëÎòN±xHXp³#N2m7³gQ¤y2sQÆs•\eg#¥Ï‰¡“¸íÄyä¡äHÈå„Zí*Ð+Nñ.ž!º ê΢µL¡W¦B~ª©¶)¡%@hÅU6âáÞF÷]j-ô¡Åò3}[±ƒ¶ÃÇלsÆ‹ÜM’;IÅé¶Jœo¢êxØõy§ ·´bvF(Kë²kLžâçJ¢ÓÄî·Xj‰ 5Ñ€öû’'Ú—6Ï!Ên­Ö¸»†Ý;Gh_¡öÇÅò¨ì¥œ?sO;#°Ð€ZQ$Dü³ZKϸrnŸv$lÆá œó3¡ÒP ØÅ4æMäš©F?q¼žEË Aý‹îÏšÒÒ†#°¨³½ÐúûMŒiw A€™²§1ÐÚUF¿À1` fÕ­pyð-rZÒL-ÄéÁ÷ÄÉÕOßàïŸÕÈ $r²ádmà‡•Ȇw¶DyP~çz¸Yl•Áç8Ök喞ݟwÛVî%¿îm=“!ÑñL¢°§¾¢°ò×.b6ó[š\šm å $ —_(áô%v?Í͑ԉ¿òåŸ(B¼°"¼¼~âq鿥肣œ„vÕ½üXcJ”w5Ó8ÝÅß/`Ôùé*Iï˜%% ±¬º¼óT¤[ž=µ–ͱš5ò•“®æ5Þ\Ùl1œö3…ý„¬Í‹œ›ék\³’`ç2Zž´—ÜTõ‚¯(‚W(‡h[^ýÆ£ÛÍ(¦Iäô1 rí£rÅñž/Ö1YÁr$v¡KljÀþ”¤ ƒÙUéH¦Ÿ§›UêL…o›èkJ„¢î±œ<ØàÒb›¸ž[^š. çÞ4Jʹ‚â6•ÃÕNP€AѬW#r=\› /¤À6šÝ*óo˜ù?i&YT•ÅT° IRy3è§M”­‡ÚdðLÖ¾¬=ƒ_–`ϲx)ÖEÔù¬ÊÙV=¬Þ7„í2cÊpr£•„dÔ³‡ÆÂÌ‹ãæÂTµGWЄ—«ˆú2ä±¥sx"Sƒ¶Ë°w.ñókLz_®‡ÔÇ‚_È=Ûx„vxúœ³™ìôµ½îÝOZ¾rW²A|yÔ‹´®Wç÷ùÝê!Ã*J‹1… ™7ªzœG^gSš_øÍѸ³IÏwž¼/£F‰!§µÛwíbèod*Iã~õ†Èm(©ŽùËjÀ@å:f’ÆmýÑV÷P0îq\ùûÃÂâÔÍúÖ€òLä)_å‡ôùÎ*aâÅ¢u…@õ¥ñ‡Kׯô22ŽJâ§õ‡Fh+ÕWŸ«:Ÿ)øOŸåRöÆÈÚÛ¼Êc1çD øbQ—sƒ4ýt±PLàÐ}ÖÇ[À¨Â·ªÔŠ,ÄŸKoî%Ô¸Zû_„¾[p‹z×uP—øpýª¦ì âe_醆~{ĴΊʮ`g»‡hZe›u}!Ϋ‘;Ÿ˜Ž ëiø´s+#cJ§–uºóu^z+Eåtöþ¢±¼0Ž-^™Ykš‰L×<’ÿs?6½â2©áCã‘ÚˆI"Á³f/ßYlËúír1T9€l_bdÚó•ψ>f¾b¦ºÌ}ûlOUø`a‡íZ^ ;B[Sf7 }cìôî¶iªuüŒ­ƒ§w—ttåŒåî EMѶüiÆ@¦Ï j]ÛïÆO6è?g^bь󎚫ì)3Wëù1S7‰1µ]|„¹MÚ›oêbÃ))ËãK·õ”.­ˆÓ {Q.ø¡¬sŒäÔ—²¯¬i!I‡Éí?`Ú¡KüE—dÌçóƒèÃnÏÌÞ¿"`yÎF3¢C$¥±e2§]ëMâEÚ Z3)Ü(G¢if.ÇÓLóP@¯pË]Ûö,;ÞÅI‡ÌþÔ,õÚà`XG<˜îøÚD·Zÿ­¸ƒî$æ½µˆÁÞé¡è3¾jLâß/e’ùھ®ö^á|3 i×55±t‘]¿\YñäcÚ‘ #Þ00=ž)&BÁ”8gÀª&¬âˆüð’nmªâpfœµD~RÐÅÚqjjö†—¤ëÿ0ƒÒË{HXȱ¼²¯¥)î<$ÍÐhôlòÚ™ÚÇRן³2dxê§»åZnw`l ‹üïÚnÃÃ^>51þ¸Ü¤aíÓnŽ3jìtùuÁ¢ß‚¬5` 0@ #C¸K’«À?)Ù¦3=Н`Ÿ¸)øóŠSØícäpæ¶»áÛ(3é0uMöÉ‘laópAÔÈ3§Ä´´O6ÃíÇ·7.˜Ãò?±š¶wêÑjkª¾iÚaxÉ=ä~ z0ËKdxxÿ­Ìâ½¾“cá5ÇJôƒt-©­ÕæÙ’ÎF¼Nƒ„Ðþ7Pªø'5‰Î-ñúÌ73 5ɤ¦86»jûÖ¡7dêY%'K;ÎÞµ„¹ÎRnOb؈^¤¢ëØ>¼Y¡²Íx'‘þÍY µ.:ñ¤Õã«’®ÝöÒð¢ö1ÇÿEõ%÷"#ŒG7wD±%BFÿéδʹžÐTê¹öë1 ,Í.» ý,CÿSƒ8ÙqɯâÑ•ð¡J ÌÉC <Û¸Fšv_‡)!IZRŽèŒ2…ÜY‘OM†dÇÊóälæÖXltÄ£Ó€ä~]´ÕL–Œ›••]-Óò'zQh"$[‚öûçÏ+8#ý¸ÞåÏÉZÉÚ‰QðÌ›fáÎõùÐ}íÄeâ¯e7ܵƼÞQzª±Á÷àé†üe&”œJ«sOåŠô{oöJ}‰JVŒ8& (Øåå*Üî°1[®Mv‘CM"||Ð 93äe?— [ÐÖ•–¡ªï •W ï˜gˉ•þ0í½YZŽƒÖKVnä¬ êaˆô³‘¦¶:OØz¬âöýZµeRÎ#3ÒdZ½-ù×bVÏíz=Øú;›7ô¾¡#¢©|£#¸Ñä©´™ñê9ì´JÎwT@¹ãpB  wcÎ M“Y:ÞD=w>–2´åcîø€.©Î¨Â,t5¿Êåq=aÒôÁÌ;+ÖÞÅ+ÂI¶h±Áfˆw•â÷ó§SÄ[u bœR?7ùô¹ÔùfwŠjìð ÔKKŽn-q Ü$ðÅ×áYKûþ!Aºóƒƒ³å*ŒœK†$Ò«ŸVɲÂ蟋6ˆ¾†ûßò^jm N÷)]×ø«¹m®trİÑt!ÆönµÒ›hÞ® vö‘m9º²Æ@­°g¡\Èè¨Ñkußtü¶&¹Dâò+±O¿Ì}ŠÐ3{426(2z¢Ø#ªÂh»Æ¨5ˆ×dÛraÇ-Æ2­æ£ö!+*м:³ov[Y¿O.Rhßxÿ:É!ºbà€Ú<î§*Nû£²¢bF;yWˆÀrn»@Çí®•QíD€þÄò`Ûõ(Ö†V<Ÿ>ÌÀ=¤ÎúÄÎBCLsó!"÷Ó„|¯Ê€]­&¥ÞÙ³k†86añQ…ò.í2†žzùÆe4D¿’Ág 9s²ÞI7B~ùaœÒ¢«e±ŸU’y5Yèl®Î´°qhìþp£Òç̽/™øEÚIk†Ÿú ŸÚG+¸3ÂésÚ˜6»,˜Ûö¼\…üQiA;ؘN_½”òC‡0t…£«?ã¦úÛÅ\ô'#ÃCžKÈLˆôSäß,”k¤¼&‹±i±P¿ÏõÀÈ·ÂJZ¨>ÄöÉ–Î1Þµ¿µ”¸_gINý\ ©³ÓÂÝlìç^ ·µ¬I.y-´¦ñ"«¦gštžç*y=Ü)=s#ÉÕ.+ÏOUDÞƒÝ,ë…\sÇÍJÓŸgóSâ2]õ¯åì¾pèéU÷§¿ÁiÎ'$gzºä'…WT%Þ°­íè®iFáÄ%Jã¥òR u̓(E¥ÿÌ0†z“ÃÀ?ìôL„÷³æÍÿÅk¬è4Éõ{‡øÁèÿ¥‹ endstream endobj 2920 0 obj << /Length1 1953 /Length2 11038 /Length3 0 /Length 12233 /Filter /FlateDecode >> stream xÚ–uXÔÝï E:¥G¤kºDº»»††º¥ABº»”–¤‘î”iDZZî¼ï9çÕsîýã>ó<Ì|öþ®µ×Z{­ßúçjšìâ–0 ˆ ÌÑ•ÄÁ)TÖÔ”Ðq89¹989¹0ééµ ®öß;˜ô:¸ æ(ô‡F1wE¬I™»"¤Ê0G€‚›=Ä ñ ø…89\œœ‚ÿÂàB)sw¨%@™ s„¸`ÒKœ¼àPkWÄIÿù `3@‚‚ül›Ä p(ØÜ lîjq@œ6·hÂÀPˆ«×¹`±quu=<<8Ì\8`pkQf6€ÔÕ qÀÝ!–€¿Ò¨˜;@þIŽ“ euù×–&ÌÊÕà ì¡`ˆ£ ÂÈÍÑ ÎhÊ+T Žÿ+ýKÀøwy Ð?îþmý—#¨ã߯æ`0ÌÁÉÜÑ êh °‚ÚCª2J®ž®lsGË¿„æö.0„½¹»9ÔÞÜ!ø;xs€Œ¸:À‘ã¿3táN®..Pû¿²þåQhiGKI˜ƒÄÑÕó¯ø¤ pQy/à?WlçópôùÍVPGK«¿R±tsj;BÝ òRÿV!–0¯YC\¼œœœœ|ˆ3â ¶þuˆ–—äïMÐ_ˈ<ü|œ`N+D*?¨ñ…éãbî¸ÂÝ ~>nü7a‚@K(Ø`±†:bþöŽX†Xý‹]‡z 9Mpþõùç—1¢Ï,aŽö^¿å_4PQF\ER›õŸ¤ÿÙ–€y|ØùAv.^NˆSPÀ/À ðûoOÿÔà?ùÿ½ªfýw|x”w´‚ÿ•¢~ÿIÅýßýÁôïñaü÷ *0D_CL¿ÇÀˆ“—Œøúÿ†¿Mþ_3ð——ÿ1øß˜dÜìíÿV0ýGò)Ì ö^ÿÖ :ÛÍ1%Ê0Ĭ8þ¯Tò¯á–€Ù[þïž¼«9bVÄ­íÿ)%ÔEê ±Tƒº‚mþÕJÿ¹ „s{¨#D æýëá`qrþÏbúÀvˆŒ â¾þÞ‚ †ë¿”vÃ,ÿšB.^>€9nî…‰¸~ñ|@ˆqµ„xþÝá ‡#Ìa@$ç°‚Á1ÿºU>^Pü¯¥(ñ›@鈟”ùM\ Üoâ~‹Òoâ•ÿ!„Æoâ5ÿ!A„Òü7 €¿  øú«R@ËßÈ…°´„BàÄ“ç·BþADy€ÿººßD0V "ë?‘”͈¨ôDi÷"¢µÿá:üFĤÿ@D`°¡E¼E~3"P'ÄtÀþH„ˆþ"bù#QÂâwZˆAºÚÀ!?ˆ`Ýþ@D°î "?Љ°÷úEòþÿ«ñÀnp8âñü÷ãÑ•ÿá¿ßˆ'Œùu±­ i½ú NáÁ¾5*‚v”v¥ÇÅ>ZdòصWzÒt=A3;kA±LækHÆÄ¶]EÂù*geîÌg³Ž¦Þ‹ç';Ì®5EÜìÃOäéDŸKJÚYÜ&¤|Ý j¡wð^$5ª(¼Ž'¯,­{5éq}k»ç=ˆÞËð+„¶ª´u|xŸ¥DB)¨ó}Cõ٢_k‹÷ücî†ÃÛàoÑF‘©*´Š"mט Õxk}ƒýKø=TQ îA[Çta®øÒÂý”R<Õ:K8w¹ïÜ2|,d Å,{Ë¿z}Ê.ðTåÍÔ¨ëÔ:}ÏîÓ-Ó5«TK)K·áÆ¢éºQóžì\‹´/æ>¼Wzåò¨^XfD´§ö&ó°V4ÿ²T ìG‚Æî÷Ro×¶‰*ÑH¹ ê¹E7Œª. K}/õ±ÖÜõYQú$Ÿ‹QšËÊliJ§ñJÑm7Ù<Á݇6åB²èNtCÁ~b¸ºêÜWWJ¦­âü­ D…¦±Q†Öbãø›R”ÛJ°©z )=ÖP±šíµÓ±àÌãlî\ÌÈÑ¥r£­Þ¯Þ‰8¥e4òŒY5ié ƒ­eUq>-/جíÂJJ#òÌà„FÓbÅ ¦F^_a¼nÎ99ª8JŸJ¯ ’£÷O—™íÒ_‡ÝÊ'0Óóçþx³I£Ðô˜¥âãD;ËJ¾ÿ­9e¿¥âärÐì#£‰|——ãUé{CÌ1Û|PÝ‘/9¬CøkLÎÈ?VSTO%Ùu¨zúz&ÖR"ÃdÅì7¿<~³ÆÚŸ&Ôög¾tZà4M꿯rîÎFÿU¶W¥Rìnˆ™¯«š’CÄ £H~øi—.P°Ø¿‰öQM‹m˜+‡{ÇoÈZ ]³¤CØ?:QW²™ðª¸JYZã ÕmmT“mÙÁº€ô$>O ŒnêfSîßíj°ž@Õ<4š!![<%©á7ÇÙ쵿ù8y™@F H‡Ù*šÂ¦?:®`,¤ ~¤~ô³ë£°7͸¾Ç0%¹es¼9†Ó=¼t{fRÆã@è“^±v×-mÞwr"ÞÙŠíƨƚ¾€ìy/TlŒñèðŒ~£UÞ¿Ô¬0îñÆ3šžZßU§µ5V'îgñ¸UÆò¸¨)[ NÃ'˪^ƒð(aoM‘S4hùWEäß·Åb\Wf¾®AËíxú/ì¯"¥Ûô —$ôNLˆf–,F-’VßÉ(W_5Å>,ø‰lÐúý»PX%9Ë,F7%áNmLU"w¹v”$Ž©—iÕ$à1.hw¢LûmÐj±TK”]‘\ëøöDÛ‹Äsòà†„³À+Ú¤¾¢{XÁf²ø)áÇKó‚NŨyFâ °à1Š¥Ï82qW•0²âü³5p]rgØ0é^£³Àï|>]yE\o-¨×­ ˆƒ¶ÎxBú'­nZ÷õ‹Œw7Êt,(+ÏöE•¨Ù—/ “Π­±ömµA&šî–Ð{’NíDó¦Z¤NçË0¢×‰Er˜à ¡g_Õšhòã36:²õa>ð8jª m͈b`ŒUz:L†·Ä:ÒÜDÜQ–•x… …@îtÈß‘:¿H9æÆºvzÆ”š­ì9gO«¡‹;|a„Çõò@š[NÙo8¬˜Ð:ʼní×áßÏ™WWõì¶ 2&Yº±ƒ=Á<ƒEe‰¯<.÷¶«~lqzE•tPŒî³Âc{Ø—pµ'^¤' W £\KI‰J÷]edï#9`ëÕ…Ï¢IÔRÎd26N‰¤»§!7Ý:¬+3—xÎø„š·| aóHµ]d„õÂ˵-‹Õj$2ø+ö‰aeþ*= ã󮊦ä´ô_kÙO˜Rp¾Å!“&PÅ?6Ÿé­õ(im39·…✉£¬: jÒ€ëTÌ¡)o F¾œDÆbÎÍò~ ȼ;0¸ 9ÔÌüª‹šRÐés4Vs8‰Ç‡fh¯~ÖÓ3£’•ZHmä³Íp/îÎççgãyIî´éä6‹îb¿¯”«©¥ èýVEc« åa“wªwCåsöÙÓ+9¿­ÂrËÌšvõí­Rñ}‘ýY¡Q²w®ˆnöÅ»ª.´SÔ‰Êð°’ó‰›Å1vÌ' UY©ŽÊq“å¢ZPøÒWjÞÍ#'òÏç·m׺ƒ´–µÚ®¼3Gâ…k~T'ª±F?»pöê}Û¥ëíQûêI­ê˜ND©’ïР§`ó—ý]xa{Æ  °£8)=ó.þǬý<Á:Ø?~uêTx}ð»)þ U3ür¹!ÑA·\Úõ´».’ ®ØX–‘ó= íg则ñŸ_TU¹Ê¿Ê;gL¼<´þa‘€ ÊlÀâõ­8›8-xŽ´-JêY0ÿQ¸G¿÷ùÜCŸ¿6öºfB]ZJ Î<5ŽEþœ†>”¥XÉýðÕÀdX"Û=ÿû^¸¤ºæÛŽLNœozg‘ŠËåhó6–2­ï…ûú»†O†6Žß81€&“JË|ÒrzBã¹&Æ3ãT$82«/S?«©rƒ"“±G×YßdTÓ•Xy‰ïð•&T²dgj%&V*/ÁEìi“:T…»®¥?¼]eeé¯!?ÅéZݸD!DþH;ó Ñ’§Í8]G¡ñ¹Ã÷¢õÒ½¬}ùö{º˜òѯCÏPtïè¢é.An<vtdÝtˆgjGßøEµΰÚ1î‰ã·\âÖvãœÞNË¿÷ÆI¸µ²:4Õ eN&Ò¡úÂGì+ÛFb9hõØpŠeZC,- ÈM™SþøI£ßcœ®ööûw'ï“ýXÒ^W˜d¨3—TÜ*Oñð®€Ë£ÒGÑ6öPJN2vU.=“-Œ|óx;Ç’÷nC~ГûÛg: ê°7'ÎmÊÅP hò¿|BÊü"'—¤å¸Xz)©Ä'PœÜ–[ƒ©îCó1[ž5Óó ³U;ýu/\N¹&Ž–C:—Žá ú k•èTŸ»¤ú@Þír¨—ŸÐíóq•÷&ƒðÎ 63-Pþ§Ì48Nkná³±5¹>Vï(µxò¤¸(o·H{58º5Iîeç‡ð“¥æPŽoÏ›U1#È£¹ê1Àé{fë5Œoe¸©ž$Ækºgò|M› ì³0M¯Ã8) i¨ÁÜSR¸ÙûÆ»ŽJk³0dÙäl=´Ê—òFU‰Š7¥¶óÜ ©ÎÄq“, ¾Z•í´, ~:(mg$ÂfÊþ3ºRØš×èÛ;ßþ‘›Íû&®‹ù-¾Â%zÉŸô,¤Ü½Œz¢•mZ¶p:C™b‘ŠJWÂ/öd#‹=Í‹>e–zÄó¯ß*ÕkÍ c¸1øð­iš¨¥Ÿö{/Ù…;«ŽÃ³E™±)4YSG?Öïw„Úæ/sj,å ê´“Û0N®2kPûÑ…ûOæOK TºOœß»*Jq©“Ø™ …'ü­Ôݼ»ºîVfàª,'®äÁ,ö”Ù£ÖœÀè×ξ¨Syâ5-½;nXZHK»‹§€ajn{²órvŽª—¼½L÷éËAR?s¹ò ¦ŸÏQÅ6de%ߪÇú¸ó¸7é'ñÆR|%©,îÒ­«!ó[økåÏ×Ö0IÓW_°6/¯±ô†n E~ÄtL6>V¤5ìdý¾{EäÌe>'@Û¡ç_·dQ[è_#,ä&×øÞhW0ÕqË”Åôw*²%þ¶ôîæÎÕºXQ‘qdõ%Èq8ÄBöËP…“Â;دæg4S{¥Yy·>YZZ†6KÒþ/¦ó(ù–Iî}ÉËЧoËñgbâ}úÏLQ•÷V ;´‘EMѺ.¢w  ×É©Ì"›]S4†h*ä.†¬~½À²Ì ®ŠÅSŸºù‡_vU[øŸúT`ëJ(Ñ#)ÙRÏzó©&JŠ2G±6ï#/tòz÷ÝϯU¯2E[uj^%C¢<Õ;}Œ}¢¼‚f£ÕzaÏfœKÒ{Öè0©·u’ò5×/ ²p_µ×‹, ÑsºO šÓ7òßÉ{öRm¶ ÎgÐú…Ôœû\Ø|PK›8{ÂoÁ¨ÒIùÓçv¤cø~xv½q~\bWoÊÖ6Œ¥Á&¨^ö‹ÕP•¸ |¤›C¸É)£ [ºÀ¥ —ÅÏ¿’¥ánùßõaét¨uÅ]ä E1 -ÞËCAÉ‚31à>xºÊÖ<H`…£6éù Nß×nJI³ÙsìÃÜ‚N}íGhoõfNÞÎè÷{Ü7µí‹ ÇczæêŸ¼z¾5HHªw Ñj†2 i¾,¾4ÓG“: =ÆbÛîÀ¹ù ÇsÉgƒÃ êb‹¶‚|E¶»÷U†¡G\ɘ} ž”öùŽÂÜëkˆbÃïn§vÈ·® z; ¿»‘–S ¿<¯~õ7H[dÎû•:æ»î°—ŒÚµUyŬµAß°óUè¬1»K@í£o ™Gb;:â>6IÙùû›N»Ö6ã;){÷1Uf ×[«9Ùl·6fVŸýš8ݦZ¼ÇÂßL'ù“Çâ¿i‹Íib´ ZøØð·9«²ŽbÛÅ¿­«¹×û³hîj" ^ʨ+‰»÷-Ǿ_žºÔ(^ª73qh%д« ™‰ÐŸÇ° žå4Pk¬?iݰá´û¡Êšîw?3ž ­ŽÄÅ®'öó™8gxž@ßS)੸ð7l ´Ž ßøôä,%®'€>èI|©³4@E763\Þw˜ü“Ð::¹}¹Æò{“³8ubže«t/l½ ŸˆIω³ArïuÜíãè¥P©ƒ é‚W½M¢ÈïˆSÆ©<–(f&ŽmÑ"-¼/¸TÏ °XK¿ùõMàþôjÌíª~8]êéoP¬¥À$AáQj*Š# ºwY h¨ 5Â7Üv¼àè•3ÊBëÏÄ„ûõîŸÓvN]\èŽ!‹ž¥à/Z‚^}£/ûÔ4®h'ó.ÚÄ0] Ù¶¬hüŒù—ꉜQß>æaAiÕççGr°0n=áý[öþ– ­h±ö+àòÌî@õ.z n.:‘Ûpp¼à¾ae™óÝæy^S,ÿó8¶Fû*ÁË!šŸ¼¡0ç0ö‰ ^6žWôò¼öR,Múéxv%ཻ°v匱o7”p9B!'g_ƒìK3ZfnÿÝ9†ðÆäW#é©K×<•kBîd}ßÀ«/Å(¤¯SV^Æðe©žäý(ünP<—dt|)pÊŸQ¥înT]…:îÙºÛΈ¹HžõBb`…ÿnÁžÀð  /1O7åH#ü5©¡4å é{oEL<ª_øa’ÎÔØoøFÝ)ÒðÓê$ißKµ¹6X¦Ï(x”íh(ÚLqÎcâÜb4më“óâ5»Ã2äˆßØ®¡R§ûôèŒ3/œ˜ôY$(%þ´}¶ ©p²'åìòԯߠX‘Õ©â®EzAêo:nü¢Üáx\Ƙ¦ÐTÂMa-¦¯«OœçaSò‹ÑÓšáÄ.8•÷ç\Ìü³ÜÖ²Ž cu”V_$‹ŠóaÖO)ÎáBä~7Š/£c^ÄÌß_~™Zƒ„¯àëü"叿ë w›]¥S êS–¸R7ȞƇðkV]{ÑÙRÇ`nœšÌœä¢3â‘ Ÿç:ÜoÕNçL-aŠijóŒ´éñœãƒÃö>îËeziÜj¹ìEàå®Èœ62ûJ/Å«†ýñ&•ê(H_ë@•'PQȳœŽ=ÔÈàóÍ9Væg'“6ãàQÓ%;vÏ/jér=ßÁ~égìů µ÷Lm\X庫¾»Á® ˆ »P’DõÄ;ÄbÍ,z ŽF‘µ×Œ¤#Qâ$0PÜÃñŽÞ½í.—3ØÍRŠŸ–?¶rîîÇõ2d‰ôëíÑœÙ;nÙmþDúEðåVøVê…G G1,-ôi¦T:'_3»ä Í¤@\‘ûqiß&öÁÒCÀèÜ“§ù½¤ \_·8C¼›€CoÈž^û­ÖvÒ mÎc¯R8-éªQt>ʈ×WzP¥ jve"Þ7¤/|Û¿”}.ñÜ@õñÝ$©ó£ùæ¤Gh}D§2›JuK}ËÃImt¯xÝbӪ°F¹’ÌË~Âã€ú‹´š+L†oˆÈ©¼Óµ[ÃEƒOM…·¿Þþ`[èê{?5ãÀCŠžJ þBXW¾^(*ßúlÌ‘à2ó×½£Ð¬twö‹/[Kñºð%WVð/£µ¸‹;7߃Bg¡(~vªÙó ýèÆ-I¶)GÃ鸅Š7µ³ \.Ë™Y2‡Œ°ŠÏ ‡¡CŸé[´ÙŽjù;‹Ž(˜rïkPNµ?¬nn™»<¸Ë?Ý}úè…ŒÏ&θå°îÁ«>¦ë%‹Ê‘NÕ„vJvê~v4¬¤O4Æpª Ýz´~Â/–ß­.$ÖÉ©5 °<ÁÑߺi/NFs̯‹·¤”–âaˆÅ½ÿÕ#kË­°³%9e¶`E žÓ÷ô¨«»¿ñQ(0 ÿÈÙ]õÚF&‡îBâdÞ—|ûŽ;üóSUš|QõÒP®kÒŸ¶ëò²í˜ß~8ÔS>SíÔPsžØyKßÄ\QŸÂ-Õë݉ÎëÙ“=ICH#™ß½³9ò£@Õ£…{Y¿‚oÍ,È(Ü:K0ôSÆà—œ­/óA2BÇ}rSèØ…x w¢cñ¥Œˆ©L/ï*•{7¤ˆÉcÒ0¤¯¢12ô¡=i®Û$ÿ,{z.±TåŽR­ ÿ™±ÂëÎö÷Œ›'&B)7J2^²¸\n¬n“Ù F0WéÞ;[ú ÒFù$ŸÌ̼»6ïøGŸ0‰S»ûpn N€æ JXW9´é­µzPâîìæ¶§£¡Ç—Ť™Æ)í¸»ò ³7¢>ì¨^®ïg?‡c(êq¡ˆ¾Î|-ÕÜ@ÉÒ°ÌšåÌ ì+RÕ_±;ÛØW–iQ6{¯ŠÛ˜ØÅ¨g$¿Ø­ ½ö?î…áì)ŒÐ*ufÖDÇàËá[Ç-¤§{n?‰H)²ÎÅqŸ$g=4ÀreR:¥Eàa#•Âp–ÑÔAíf§ÄÇè²OšÓ¬G·®ËV¾x\ßÞéÔ²ïáv?¹¼¸Á’±Š£A}l¦³Z–ˆÍ˜Ý°± ÕP-W¶k{j57]…$ÓÃó@_öÐêrXç‡zZ=ÓUfýr³n€B{OÚ‘3Á§q;Ù´î¤]L~)NÜ €ëèâËÔ_Ö_òMs¯øzø¬‚QÓ W„Åí–G{·$å3¤{ BÓ¹8|2þÆ_êá‰×ç/é„€U¬œåþéÓg¬ öÓaÏæ¤òR;çÓcZŸží¹V:˜'¡Ó>{úŒuvz“‡ñô‡Û£¦R§:ôx1‹è}yz¨wÅͯ ®»gzÞU½fIhÎÆ&õö?umê¬Ù2êòu'Ìz¡* =uWågK|k&5PSþVd…§Q`æøé¢feñÞCqÂp£z¦²6þl|Нôix(¯`y0U»öÆi©Õ;H-jí¢-kåNÁô€ýø“¸¸šbgߦ{91—¸bÌÒ,‡cI 6$† bª€°cŽ«gÆ‘Ÿ†|»4ßšóXSÄ®yÐ3Ô¡˜ú±Ï±™a<&‡¥eWÃI¨3Žo„ïRûbfÿØ ¡f™*_›ú«ÇÖ£_'yQó§µg Ú{Žöó®ú«{¹q¤Œsúï¸z_vn²Éä>²=}FŬGµg¥ æÛªEï]šÎN5ÄúèX0¢ðÜÚýTK˜ƒ²PÊ+ „ÿÁw¹ ¢_þªûnÛÄÖü¾G©aø‹µXÉÓÞ÷麽÷[søåPG©œý‡§b#íDXü•AMÒ†¢·/uíÍä4õ[O^Ñé¡w`4‹}}ßÑýa¶•öã$¦,^Ï´¥{`í:%îŠZWt¹µ µYe¯â犸ž Ø|¬×í3Px¿9AÌsŒúÅ‹1c}T) 1 ì‹Ñøú@(åöØÛ0ºUì"Q¡eZ22[0 láõ h¢8ãìyÿƒï‹À¸ÔFj7QÿÈ0¡³×Ê;›Š¢+{§øÖ-¤•ù0š8>ý¢'F©ì¶È©›ñµF#:à„>ce’ý ]»6K-4l›æ†¼ 1+‘ÖÜk tÉXÉ×¶ïëÓ‘Œw²Vùõ²¹ò‰BƤd»vYŠÄ¹ŒÉrŸÒƒæ6¼¨•g'˜É¶‡×¯s{=­4_}ß~å̆ÍÄ,™LnMÐ휓"±ñ1òsm¹Î&cB&Ëw‰æsnªGßvL g^ ]b?Ö"¶êe³S-¬œì_¹6NÒÂè¢hÑVûÔîŠbP;dëÁJ“vñh^'‚»õŠ4_ˆÙ32QöjÚ \þƒ'/ä‡=šð[0ÊZÔ ‹¥í4 8 {γ%íu¦)­ÖÁpÙ÷œ'G*y_ñbwØîZùÉw¶‡gqÊ ?’FñÓ6)>ÈÕ†¸‹ËüÃ6?ƒDŠö"&~âwñŒÔ Òš™òá}&,ÍRñœ./"œ õ¼ä0pðB6®BßûúkópÆ€ÁÚ¸€Jõ[À%è#ÉcAµMšdçò€ÊŸ4Íž‡,yã…PƒÚù* {Œf“5*p1a£²³Å)ŽíΤXCïíÅØ l†c|ÁÜQ%þe¡¶ÉPÅÃë#’”ºæ~ô lf:{ }v¤ždà"pŽN! Ñ¨ØMó3®^¹X@‡§Ô¿l^sJ/^§äßÿÍT3®ƒžlTö‹­.uù”]D?M[ÇûÇâHy¥ÞXŸ¿póYtФIÄf(×9÷KÖ†´F‚~~„¹"ÊgÕwû5 ¹™8›©Ú©L hCÍæãòuÞ“ëáI½¯`ªò©ØÇòk+í! ü¨.îž¶ëd«á"$G&€›ÑC^@Uä½$©~) 2q2­… ‚ÊÍ/£âýäd^K[mBÎA7ˆ–Ÿ•úO9S¦Õ²H¶Ü¿^ú*ù#šå±ÅN÷ET¿‘—ªÅ¢?Eëw¾= aU*¤b¨£³€eœóº“ü˜Ÿj„ÜUU¡Wͽí×=¨H¿V_±1œ(Æ&XÃCðí(ANï™ÝLß3,¾ÚB³¦¨2ˆCF¸C®Iž¶uo¦>W;;WðRîk¼ãµÅhý:ñ:,.×’tZù¦îµå~jÝÃ.™ <¡ç¦æÖXm|ôXcùÖOõu5Y†šk*/ÇüûØE V(ƒzk «O[ÍÐé—xïãwíˆ|‰H{˜†‡ÏcBLÙtÓ‰Ä"¶?Wm8ÊÿÒ€ÚΦηÖɈ$ÍHzÃ=ù=µ4\@vædºšˆZñìÛØ¤ŠÚ}H®4®ŒŸFOœÖ(ÞÓ(þíÝlÂ&¼œ^ éi–±‡ï_žùI{)¿L²ºSz‹Ü›gKŸE|ƒóÒ¯°~ÏiÓÀ¯+)e¬¢†Z{º±rªZ|¡±o¯¸Á“f³gÇ#ãpE~åõ äé0[7fÿ~‡ôøº©âfv3µÁýù­ï'«_ßdý1t|j[ß'ø»~û’Ýl·¶w¡­2T–kì«ùöÀÿêúnÏ)U²Ùs¿_c¡LéÏV0¢´Ý„£í™kÐì·Gy´ÅõkÄ. 'ÂÞýXˆLßœ2ÄŽmy®¼Ø‘g(ts2Ýþó¥9S“C>_D™NGg ÆÕ«z•¿5ÊqwN³úôjæãù¬YÞÒ3_JßSüÔá ×û˜ÀEjö‰¬±p6Ìs‘4‚†ÌìüGxó¦âÓp½Ï¢‘VÕ¯Úv<’/6Ŭß<‡Z|†ãŒw:ÿºG+2ÓŠð”Tµ$îåy»·’!»fÅÎ~Þ¸úHv ŸØl¨ïú¹®€¿ŽÎi(Èý‘– „Såy@Wµ!çHÌ =è;Û//báÌãž¿Øë®·Há:ñ,rú±P[¿™-/V"$X.Ñ"9âêÔùõW†Ä äœùvkîmCƒÐìsA——° ü,íK“óSá%Ê6™QÆE’rŠÁÐÇìr˜cEŸ£‰âŸT¹~2¹8y£ÂºùÜçè+ü;‚°±ÿéô鯇 -¾j?”Kµ†N·Ùæ´¸®WóeœÂÓÖþ©ŠæH¨Üwíë><H›Ž‚Áß_³®¶;¬¨Y®ënôÕ Ã @ çZôì¦O"C×8G u»@\N½„Ð7D¸þ¤sξ9Ñ4¸Ê¨ô´T§¨••#ÈõV„`T¡‡¬É7`¿‘ÙùnqÁ‰=¼úù—èôq˺÷æE‰¤ì† .@ÿ͈*£&óô™¨Ç±ú”æGŸ*ÌË‚¾¶µ#_ÿWjq¡LòI7r{Σh„YúøóY?P¬TJyÄ• èϘ®tn¼9Ľè“LRÇB•t1¸ÎÌöLkŠ›FOˆàÌ­Çó+J*6”kîÞD=XQ8bkz·šàžþ $¿äA0וr%?·^Ž·1/ç•5Ž‘üÔØÔ… ܪ÷ î½š›ú»‚{öRb;wÃS"™ˆb»B,f¦ö'M3âþ©îÀ' €ª»F,ïPBÆK— f{Wî“G¹L±•¾Ø _Í®æ³Åi:³‹‘-øÈAS—ŸwŸx5Êù }%bàz½£¿±ûŠxQYÕ¯‰4X•óØŠ&@ÄZ´ëÚe¤d\ƒÉCS³eV¦…R>Ãô+™¶XÜÀ’NŒ<ç¹ÉÑ ÃÎ&:-Ï–š.d§Ù“E? áÈC…­¢”ŒlöÙÍz‡Iêã7¢ËÍoEN ñÜg±–NY]‘>õ¿ó¼3Œ]W.µ~'¢ÕÈò¶†ë²²—¬ú8ù3µuŒÀô ›+ânñ6 äN5 |;‹Ëü1Ù²{£3,çêÑYIF4ãÔ  ,¿‘Ý×D÷ãµþÉlh6Ìï“¥ksÏI"KXnC-Þ &)‘gós~ª³-gi ù¾^ï‹þövhüÖÕöfV:¢fìK9™ªGµ.±TäÔ×Äçó‡¯X©ß@î!#aø Ÿeê× å‚úÔCYüuü,;ÕG=ϲYÙR84Äñ.sÆz’elæ§Ëù¡û ò.Ê.â}ö’Àm“÷š§ñŸ|‚–tÚùÞœä:|% %Ÿ†§ÄýËŒH¼­‰$ÈD³Úï¹\ôB8ª*zi t+ARÃ5ñÿÖX¶ 1[iÁ0rÒÛSí¶Üuë‚ÔU™¶im:ðëèøû7!»e¡U¤vtøAPí~¢ˆC‘òÓa§¸ƒåÓ‚-I’ÓyÖ ™:µp'üMSBÖ®“Ñ~OwîîªmWG7¬'é’SóѦ7#yù‘¾kI5v‚Øï™>4&£*%Spù³çæ x-2Ãb JÞÌøAK:Ù—æµa8o[êÆòõ)ýUê¾·H¹4O¨v«=4´p6Ö çº˜Ê«tØ}þÈxfk`°[Âr«Qú´³l•ý* ÷Íðµc{C6kBµ”&Å“¡1ª I:ÍîOa½Fr¬ƒX–wÆ1à^{ ÁàüÄ{C=gæ^õ‹ÑЛ=WîF ?Æ·j’½d@Ð;¹]u¦D•Ô5yy)á—ý>p7~>ý3œK™KüÄâóƒ¤<<Æ›"‚Ì’©––'q¨Îî¼—é—ñŸŸ£zLÓ¹†'4¤õtµŠÏRJ¶Àùl„’`í=!C<ãψ1ýºW}Ò°\!fºì¡‰Ä3²j¡é›‹!&^k¸!U@lƒ÷«àB” c‹_y>¿zøÊ'I:Oóˆ—\(¢Všhš“ª¾wN¶Zçf±ñÈyS‡qcÇ« =º£©‰¶[Þ_ÁÔ?a“îGÁjDã±ôVz2¯Y˜äfwR¢8ø|c·RY0Á •0£ÃØæu~̈}Ã÷ÓÑ#‚é[–ÏæK©zžü »Ãx±£ÓœöL…I²Ö\ë[ÂpUƒ 4#`á•ðQ·Æ^JKZ€¹Kµ|ÝÏàý†ã î–{Ï?I2½›¾JÚAÀ¯;²Œ!úÖö'AÏÜ(Ž®‡…©`W‚H?÷Ñ] …?=Y`нߕY°åhŒHB?Ô0¸Nüz`õ endstream endobj 2922 0 obj << /Length1 1802 /Length2 8594 /Length3 0 /Length 9746 /Filter /FlateDecode >> stream xÚ¸Tî6Œ ”¤t¤{ ÝÝ]ÒŒ1rlÄèîéAéFR@é”’Pi‘x§¿þß9ï{vζçºû¾¯ûY0ÑkëqÉØÀ­!Šp‚ ÈÍ+ ÓÐ3òxyù¹yyù°™˜ôPÈ_86“!ÄÍÝý—†œ„@bò RQ¨z@@~PP($ÊË àãåùKî& y:Ø4¸ªpÄ›Iîâãæ`g@Æùë-€ÌŠˆqþ6È8CÜÀ @„°‡8##‚AP€ìAøüÇ«¸=á"ÊÃãååÅ rv熻ÙI²q¼ö]ˆ;ÄÍbøU2@ä ù³4nl&€¾½ƒû=¸- ä ¨sGšxÀl ndt€žŠ:@ËûCYýNÀŸÍ¹»ûÓú—#Øoc wvÁ|`v[( ¥¨ÎðFp@0›_Š ¨;iò9@AÖH…ß©ƒŠ2:²Â?ës»9¸ ܹÝ ¿jäùåÙf˜ÜÙC¸cÿÊOÞÁ Fö݇çÏá:Áà^0¿¿N¶0Û_eØx¸ðÀ\= *òê !ì0; À+"((@\o°=ϯú>.ßÂß0²†?¸ ÀY$ÀÁ‚|ÁösyB7H€ß¿ÿ=a0` ±s€aÿã Clÿ8#çïæà 0åEÒàýõøû9’a6pÔçõß#æÑTPÔ34æø³ä¿…²²po€Ÿ€KDBB€€ÿúù»UÿÕ9ü™Ý¿<ªÀlá‘?Š@vï¯B<ÿdëŸkÃøoM8’Ïë?ô7ãà#Ÿ€ÿÏKðÛäÿû¿¼ü_éÿ¿)z@¡¿å¬(üä g¨ÏŸH>{ »¡GnìU ,´ÄÆÁÃù¥*rGd`vHžsŸpó>ùwpWtð†Øh; Àöpé¯a c@`m¸»Ã¯{iÅËû?2äêw‹;rd¿Eäfý7® ·ùµ‚|‚›ÈÉäIàDîª Äû7Å<Ü08i@Ö°…»aÿ¬€GëôûDfÍ‚ÙY»ÀNäi‹ø—Làß²?Æû—ï—ÌÅÅ î qõ@Îò/œŸ‰»¹Á½þ«þ uGvÚÁÝ 9}ûb YÍcôï¹ÿ æü»ý àCÈD ÿ“"ÿŸðÑÙY#‰ùBö“iüëzù§ €Çî×åqûoH]g˜‡û?šHÀŠppANáï d\¸ ò¢üåÁæo 2y¨‡û]H'n ›ßÔÿÛ/²ýîHFþYëF öpsCºþ½“Hüuþ}õB Þ0öâ,îø&¼ã²V†Ê‹ëóôµõ®˜DãhóüK?{uŒl¥)WY+›jòÑ í…òÈÉ9*öÃË1o³·¹!«éÊù…MÙ#®‚á'oí ´6pJ»q¡Œ˜MÂoI:4øV¦÷MYRŒæ®#„zù·_)ºérß6Ù8JÎ èÓ©ÏeòºöPŸÓ3®#FŒÍâ¹™fz諌ߠ>sˆ¿íˆ£øá³iŸ5²²ò.wp ƒÿ¸P­¯F°:’ˆ‚ØW•>o4yˆ‚$)WµÙ…YVà\®<-‘¢Ø9’yÍJhõçtá`{Ò¿G£¦\ÈC­À÷Mõp9‰¼ÞÕcjË­ý<¸ä-É1öœµŒ²L56(ç#™ßjø¡ù}÷Iièõ]KwÓðÒ² cuÔMqaü_&È/­žg'ùÌÓ$ ÂCŸ^É jCi]Fm>^‹§ˆ(™ˆ´UÐ4é×=FsrŸ½p¨|J—;Ýiy×1Òug<¤!™ I|Ú™½×¿›Ô¬"p>ChÈ® ˆ¨S›‡w[²%ä%LéæçÝ×nïR3‘Y˜`H0äÇ/Ð'œ×WßFÉÔÄ2 ž&À#r:,§yý±JðýK‰Ð‰4á`ÞÀ¥‰£{ò:û u›uz<°H´v;âáôPËï2±·*ÕdQEà*E f_f8¬¶Ò­úb^á¹E0ãP®V¡5<O¯ò0îÍô›ŸÛägº„·–ˆi#±¬î÷ß3‡<¤YW Øß—M?4x™ëç¿yv¦âÿ¬XEKë:ö¾_E…Q4…HV6’)ë­Þ«§ÿh¸:q‹+×6Bf¯ÏXòlËÛO–ê­O¥KÍ­“]–ä Ü,­ì2c¨üÑ”–M6©{ðÀSW.m¡ø~®Ž¼=6Þ´´%gÞéh.~§Ó#ÒçÖ¶Ðm•Km ÔŠú,¯Ål¢•ae_'Vð˜÷ÏDÚØá}½m•z[?µ±òî”8‡Œk: xö=ß&Œ›´þ\ mQgÒ*ÞËR‹Ly$¾ªÍ¯újt)È3i–s±ÁÞ TCê´~Oj=Å…}.\ÈožLbIè°©„Ÿ"]¤™,`qÄŸ£ÿ¹^ض-@é£SÖªÅÞ€[Å+4ýeŠ /+\ §è*Y×÷ÑɉíW¿¨ ByûåSñ­B¿¬¬ Ù´Ñݹ€«žÁÅ[¹ŸÕZË¡×Ó¯¥ÍÁ´Â)u0J!W–0Š/÷Ô¢¯Ÿ8iIÜVJÏ’Ë–¡œ+Úp…g«d_œPg²Øñ„0]ÑL?Ò£ï_\5-ìL›ÁÛC-æ›™ã>Ÿ› CÓ¶šÝ[™ÃÃßò$nlX°eÓëîáž ®W.NÔ¯“†tê1ˆ%ì¤]{X èÅ`Ëg ÊJ.z–²ô71«³êÆ;"&/ʉÌyÐ?pøEOKçO§s<£ÎvÀ»wS¹À†—6¦?ÍúUàj–‡¢|³grÿQñõ(€Ò:¿®YDºõ¹ÊðãÖØPX7¨<ÛütGj–õàØQMÉ´'LºÓŠöìµ,E×ýú¾^$Q`¦}@¯ãrõ6‘ê¢ÕMð¢ã­Xq½IúN÷à–ç­ˆŽa2D¿¡b9ͯ›8/Gè• áÛH­Ô=%¹OÄfÑá¤iÔhÜs ¸ ¾#PŸþÕ©~©cM÷€õãì¸ß/ªÌõ;sx;JÜþW¨¿s|úÝ~ù Ïm$Õá>/ˆüS>zÒ=úƘX”OÛŸªÐŽŸy³ˆ–¬1¸7ÏS}NCº‡Xˆ@»V†dG.jË5|õÔ<ÜfP À)ÙÇ=ÄÈÏ3oÈ%öÄ¥røoײnµÎ~_‹U*«‚ …ªÙRû®ºå[HüTbðc©x2ùTPÂÚMÞ—Vù—g¹¾iÑwJ½Ï$Ü¿5Fþíà.üë¼ .M±”&zW-'2CëQU˜ÑõïÖ)Zd¶R[ßv" ]ucÊ7¦(ú!Þîc…4Ú1ì /!ò„Û’./§Qä´—Ê@6!̲†ç}ßByinC*û ¥º=Šñ=Ùðï.–´¹sôÑÏ~Ò×hè<ô%cµô½ÜEÒIÒ·…ž¶ì{"¾Ú?ëGË­ñô#Û’2#”ÂiØ2DâÝÆgUžÀk ÔΉ¼ Ú¸±8Ñ?\rXkçÞ|ÇéSÉÊ«Ó1Aã¹hÒæ‚ÁO;Ž;YÄ'Œ;×Ð!\û@žK¼¸|¡8vÇ6Qß‹àñé~ær’Œ·hŠX¾vôÑì¯àm(Ócg¸4†|(þP ?NPóÒ±[yî’Ë´  型~1Ö»W‡£nxúîîúÒ— Ã5g"Þçf(±Jl/·|­Óì@D¹åÒs>O;‚ឌ*àÃý4,zêÃk¶ï_¨ õ PJÎm€jù…N••ïcW‚* 1©`¼¾dJ¯iÖé\cšö@åF:_™|çÉUß´.<-¢,ìåG¨øðöw½â¾?ý8fÀ4åqM˜üc…™Ðd—Eöʲ³ºÕLÏonZÓ6c0!ØÃ"Â)4[‘0öªý§¢g]Û’CÙ¢ìVÕilQ?<'éIf%;ŠqÐø‘´óFa±M|”I¶ë«Ucß yªÖ‹ºdØÄâ»hrò^†æ#ìð|üaý¬~G*a_Vâ’úØžêÞ·ã¯òe7¦%G¢îâ/–[øz鿯D]ùç ¤?Fÿ!`¾g;i»ëªpq=å/q—ü>Ó+ å¯Ý‡¾ãž-ò½”6>`ës ;6 ‡‹L0g-ç[ ÇJ>B¹áP¡œ³Yœäoé5 ÔAÜ_y˨¨†[Gy Óº¹ëm±¨Ü Ô^{JŠn<íà—­9g—ãCÕ(xƒtmÝFzÈåÑ®ÌTé†É×nYZÃÓ@Æ#…Â6ÒDG ìgæR€Ê~^j,ñø/Ší¦»ëŸ¼ÍÚÙÊÙ—)«|´ÞéúfühŸn­guòI#F,mTQâÄ!ðµ¶-ù VÕ çœÞ@¾àéfÇê—nE¥¦I+o=­>át4Öý|NvÚä}¡Äx—O^¼;ÎPÐ:öð}jsÙòx—⇬Tpm]vR¨yõ[[z²{tì£Üè<Û^èý1ºÂm¬Ò‹‹Ï²}qÁ-Ò}šÌ*Îy+¯$ŸÒ¿sNƒ|‘ƒ’âÝ1LÊ)ï\¾žq"›Mz îs™«é JÅØ-.ëà.ü†ŠÐl(î†ò½!hq’Q1b#Ó¸ÄjÒ+ürgœ¾k¤ }ŽŽž•0Ë\ÆnO3”Är –FÁß ¿fnö_(ʸ袤<¨}t·»XÁ‘ Æ«n/ôaqÞwÏ2ø"âBoÙ…ZªÓññl‹¥D3G©áÛúƒLI<Ô²=Žæ `'üO%U |¥å‚%4/#îuZÃpižû¹’Y³J2, ³ï<ëþàTæÃ ߈½DYŸÄ(oöâ&È{m´^šãtR%’ìÙ¼ôSH&)î{æ²H±žEÈÍHb¸¾mO‰È=÷ubtrb4²WCrÿlÛRpUCÐ.wß(]úxôä'ÿ‹ó :¨NÍË/Y1÷­×ËHx\Nî5ž¼¤ÖOqíRœ¾oy;+C˜Ü Û#Ò™Á¸+tV‹÷cöŸíÎCq>Þ4uz?NÚ°—ûê; ;éëÓ`ý{°c„8ÕlœÓ1¦T9Ÿ3[Þè¸íikÍAÚúFá¥ÏcÖÍ+¦~T¥ô:´¹<¼ÌîkÞ­§¶Û²•U³nϾ)¬}3EL~´ÓR£~®óŠñŠñ1å§Ðù\©]i~09e:Þî,õ, »F€2ueÖ×â<19›W뙆Ý\:)jÄŽ7ùŠ„”ÝÑàwDÚËņœYz› Ûýj¶sôÛ\KºlÂB¶ºYÖÖ«œâƇmØõḮƒžÌM5#rkŸù5QšÔMÜë½ôµ=ü’HÝ;ÚÆk/µóžqp½¨./0x–Q§xfp©ÍЮ6ÉQÙ1eÜ"’â­dM;Çt°¡¢ÊVo³sÂyûˆÕX…+1jõúìPÌj–dû‹Ì¦²hÃë—ëÆÊ4ÖÀ”Ævå!¿¯°!] ãÉl “­ÄÚ«LŠí¡½Cƒ²Qèç‹çJj Úöõš ¦-÷UF,w£ƒå0ôI}W§l±¶±Ä§ÓSã®CîY=A~*+çTY:nÖW­t±ÐñC1>™•nhò9Ù‚NàªBü/‚vŽ=×w»OƒÔ–Œür5¦Wù¥æž—k›ÿ5¢#&ô¤KŒ È|ðtCìA¸,]2VLéS¢níu1©|zý¢h÷ÃfwÒ}´só­×aÉ“OcoÞ$ 4ôÄ»k $}$j"Ù7C¬åк-p;T2nuP–¦Ë’´ë“{f§ ùÃÔê!¨{aÚ)ÌB>깇’¯˜šÝ“'“ÏiÅš=ؾ֋]-륥÷zvŽ]ŸÉÖKu«†µó$+2p×òJn££žr,«éL‡óR0ŒLWNJì…|wÿºzæ W5_Ÿ¯ ïu-¨µÂð,/±7$@xTh¸1Z^ÏQEXÜ\UÝsM#[oàšýz®|ÐgûóH †~~œœÀµ’›Ý†z?À{Æ„¨Œ8fÿÚ„ÆîXÌÀ´¥Š­Ἄ]Ü‚t ÏÏk¬ŽdˆÒ°Í5î÷ñBØ÷ƒó1óÔ÷FäZ I”ÑÎxÜq¯â«°tM»È&2ášâŽ¿`Þ²„n÷w«‰ðzÄèð"Ì4‚^€çXE uRç‘›D&YOhÕ¢í¢î—ìõ–oãIÇåêW¥fY@ç LƒjþV:jŸ ßm{ÈGæ¦Äàœ0ßô ‹pßÌ•¶o[SzÊ‚9‚º9¤p†J¢™¡"§O[µ%'`v§X*ŠÛ¢R½ˆÔ…Dt=­1ð ž#Ÿœ³iñ§J-!É'£+§âÂòNÔѧ5,aoiJHsñIzÅ JßÌk. «Ãm—Üçñø ¢$q²SQ~OŸD°ä¯ó€µ£16¯© âíÞå[j¡Cn­f°é2{Ö¬B¸DHtxú‹?kÔC‚ó¤Þ ïNÕ6Þ£%Ø·ßB3-±>êÆºùÚ¾[i¹Ë'>yù!}ã>Á>‚º·¢Öt<·.šBµà¶\KºˆI#I%tõ+.¢¤qÁ=,rÖŒ²•Çzs²ïXÃP‘d„WànŒÃIå3Ÿ‘ˆ¤mz@y3€`ⲿé”ÕTy×VàXYÒçÏPÚðåô0q;hØ”dZ=Ö>5ÞøI=Û\@ȉdí6å1S†r² g•÷˜ÿ©{»÷A±rž¸¢áæVÔƒö¥[M'È#Pœ9W'íõ¸ŒL%à¡©’³4×^ŒH”m-{i~~Q‚VˆÆ0^j ¬io…{õYNÄ(ðÆÒ«­òÇLŒ2X|žüaçz+Â[g«0È*æÂ q;b žçÎqRr?˜•Ý ÙŒÅÒúñ}ÏêÑf©Kr¦_ËZ™Š ™\ºÚWí gbŒÊ彯×:?i'åÔO O’ZH½3½°>u•ÐD(¶¬æ<`Æ dßRH‘üéß$fuÇó'Ó%ÝÇ}Óðºù·Pj,ƒR†¥ãóµJôpŸØ#„§÷¬¨‡N©‡‰%ñ}†”ŠWÖÛoµ"Í 5ÞŸX½Ž7Ÿ¾‘#è–W£Õ xe›Ãj'íen[b˜5Úkº¸Tüñ•Ö_†ß³ khC+Çsª†º‰ïž'¶ïÕgý–Õ«QÞÅbëÇç9÷Ls|}Æ“gïC€UKN³6º2ûV¬Ò~‰|Œ$»¢·$¯’j¶}¤¿ ܵ¬_aþþK¡OYlì—~$î#k-T¥göNh;z ]5ó- “˦àþR§ÇÖ®JïÔ/ ™A,‡#þ$ô’Kü?yž“õu¼²˜}JÎ6›Åå׬•ÐZ«5wÅG [ÖÛ€ïýng“.ZgóÔKÖn"i£ãFï¦=/‡a¾šc}tî+ÖZ—©â3k¦0ÿàíènŒ‹[™“N³4ºt/„¹ç%Z&´o$¡wñ¥Ÿ‰&ä€m‡ÇEwèru±§‚œ¯Ñ;S’,pÉÑ¿Xë^jrÌB‰I\×Zz–ùiÛ:Zç åéQ­ôQ¾ãÀ9 ‘‚ÒÓ…`5x#‰›HÍ×L“¸ 6|ûzó‚TaƒsbÈ7E(¡A'b#æ Q~*¢4Xä›l‘FÏ¿KaÀïÖ1j{¦us6™ô„]Ë÷g7¸åÄœZiÌ|½¶¼°0N”°¿+±'ô(Õ˜<«áüòÝÑ.§ŒlDeM16'Wêú}lÖ:®9È»A“çVn¶A¶|£¡$À롱ÁÌУ`þ‘[…ù5„÷³[×§JÕRZåà¤!§¨šÕfÝROXsw¬Ë‡ÛÇézXDÕ¦¬¼\ÀãúDé ôËK–w8çÊ™Tµ—±­ÏWb#“NniüÒH?Ü*w;› ੟Ww…F*»Ö’òuò†š»­$—sM´ŠJi_†Ç¦Ø´Ù(ÎvƒÁØŒ •™ýˆìiUu<1eY(Í^ Õ fz/Ø»õ†§F• C&ÔŽì ‡~ïqLEÏaé%JGäÈs7Ø&³Å\ïr‚SÍã{'ç—¶ œo+ dÂQ…DREe”Êh‘¼wQZºyªçüå4yÕìõºñAÔÛ¸ÁôS$8Ü\ŸÜÌD¥ù7™6Ðô&Ê´¦VY¥TÒlBIêŒk‡äò6³ŠË9´Øèh{ÊÅU_Ù¼P~L^q· ½Yd @þº½Àçm™4–´ß,Ä4ÚJ àÕþô$åáÁÈꃪ»(XT„9Óî[lDbøÖ½Å=ìãl†š¸`IÑ·M5ZèsËÊ”d3#bW ]í,GÐÝÂLGKbËì#_]sp9݉›¼•”Rר œ¦ü&?ðó¦‚néISáì½×8<6º3!–¹ùb·ª¥ ™k²ñùsYfpÙºÖQÊK §×ÏÕxí!V•ÓgcRvß‘mÎnÒ~mþè~ƒ¡~³/½z¸‚ßÓŠ+T­ð“ÚJ1L$d•}«œ éåß:ø¨4çioÛW[°¿’rö ¬Ð?9· iZd(òÞ4»¶È^—7¶â Úp{]öCnéû&Ú/„“mãð—ÑZª¼ÙKwô6ØùÛ žÃ&•S’ó©eÇ ,w׿2¦Çt÷;RzeÔD Éð~ÚFq|,Ñ6Y©©Yî§ZÇœW»šâüØŒÿ–LklåBµG«}*Ɖ\òk Öý¬}‚¸¢Ü¬Þ-¥Rj€t]«°q¿ÊĤgËT¦ÍÚ^¡@ÀxÖg*”:íAÌÒG>ی텇ÝQ£ ·ðŠwïÁ€§‰¤¸_úÆ«©)÷ ±­ë¿üHO=.•*ET<š}^ïmbú%%!1Ç£…yØ%õ‚{’õÝš5”ŠRC +{iàj#_®Öþi>ò$®âçI­õ‹eµ¿¹g›U›öâ¦'ÌÉ 7'|CôÀ©]ÑÚ-¢˜O˜RùxõôxÆ [ö¢ÈÈ¢X_ß}|÷ƒ¬±† j]fâüãù\³Ì^3”ýð7ÄÑMš3^ÝËŽ¸…2ŠcÐ^») »¥çRêô,æ&Ž§Ý®µ4 ïU°kÕÒröì!Â$¹ªÕ‘ŸNŒx¸¹0,úý3ÞÜÉßÚ]õEúUÆ“€Ê¯=ÌÁ~¾ |¥eÀ3Ç,K‹‘Te 3ƒ×¥ðžíY©²o=Þbö×ÎVùô:Z”ø1½Ž±Bź%æ«-3¥”3n¡/z9¿:¼­ÁÏ,óʈ€Î{oéƒý?…>ùÐ3“R{³¢ú|î±ÛN?ué’ÕK¨4U{¸õxBI +î"þ;'œNÞj™ýBÄÜíä>Hø<äÇ™Bk-û4=ˆ—…78èüÒo,C–Wº…éKEOÁÁ½–Ò@sR3‚™7¦¬½PÍÈì?ªb~î#—?V³òStŸÖ˜·ÉVê…À¾¬û.ánìÊòkç‹ïJÄ& FÇo¥?ëlƒÁc£3èTìÙ¬¥øÂ-$|ãm¶<ì/ˆV]R3ЈwŠ?¾JIµ‹šÉ­ÊÕl|úÐ2R<0Æf¢1˜EýX*L°ë¶4“oÞ~`¥c:?ÜVü ÂašÒ½ÁY ¾+³“?:õ%å§+¿ÃfÏ·±Ì¤|#ž´þÎÊ·N2“ ÇñŸy0ic ˜#†]ãͲFñr]7mТf•ÏÃHøx8ç~E;ÊÉ‚÷ÎôÉ5öØôR9ÑÂ’›÷ÚÈ&K9ŽÈ“GøM Ê_9{²ðÔö—»nÆN‹-w¸Ò Ø„1Ó¼ZÆçöHH†ig~k—wBcF}ø ôâvØX€yYU½ùhƒÌzojL w>èî·¹WÒBHOLXÒÍ7t…cb/›;’/)ßW÷^žy¼ÃMÕL+=~Tãü,-ÙðPþD~EqÈP“&g:ïïq¥ù‚I—ÅkÓùT¾6¼£™ý­Z]½8”ñg½©ëããs®*õ£Å 8³¹•Âaˆ†{{Gø+Q¦“ko/eØ0.§à¿ÆÏ3p7+ìgÉ|ÚÒT44Ù¿,„=€†½áž#Ïze’£ ÛçV3k Kz7©£-B·_“ÎJz²]’ÓÅXYÒÊ\Í2%(g£èØòð_hçþ T^?Sˆø`­^p΢å>ìæ—FØ<“·ݺ#p,æNGmå¹¼P £k.È9¢ËšP?ÃÆ FO÷ý¨M".Aa¢Ï‰?ôˆh}Û´KŸiÀ(QWf¥- ïaÄ#ÆP Î8¦jåæwQËwmIu9Àh»+·ž…¼Š3÷£‘£Y¬Å¾$7¡ù{y}ÐnhWD*„•£ß Ûêj>Í7s°ôpº¸˜ûSOëu;vø³ÛÖÚ² òw4V‰\=JÌóµ‹@³ޮµù|JW½äò‡!¢¨Í¸™Õ ø)¯-×%XÍtGh&ü_i}£ÎM¢ß©LiXl=Ä9“ò¡,Ê.ŽÍý©Ü÷Õ;ÖÉñöçc¿½pÓÁ°Q;ÕñÔp«âl¤°ÇÙ¥@ç$ô5ñž£#Ñ’™ãã;²ïLú<ºÑ2uŸ‰æ+=4å¸1$ö¹~9SôìüV>ò”øØôéU¼-³×œcíëAaò¶o'jÃP®—ù´Éè‘©WÜr±¬8+ÏMw5³Ÿ'ª›æô …shù–_¾bé@ØeñßÜ]Ýb´ÄT¢£¥6>à¨ñÅâ¡»•!¦ÅAú"t&+Ã'W¶|bØǾ@-¿G×;øFÒ»¬`¹$›ÞÕ±zNlléQ£&Ù)2´‘óz;„’*‰Ë\’¦7â¤lbd¬û¹1Œ“ëçn×¼0#¡b|­Ý cV6±D´w¬1‘•} ×þ­ZsÇe1ý{Þ»rjbÑèúɳ€z»¦z|]Öùœé̈jP¶FiŠžÎ<ÅÑae6À¨{,?ÖC€»Ü€G€&¤>/y¸Á.óuƒ !Œ>¿æŠbVâ†ÜÓžB…Jç¬EÍÙOLv"0Å ×¼­.•ñlE{GZݰ‘¯  w–‚JIÏ¡ÜÉNºC1åY~ÕF3L)¯°-0,d™VxÌÜD²ý‘Ü÷ñK óÙ©B Y˜ ƽ]ËUr6PQfþ‹û?Ô»1¼W–¥ŽÓãìI´?c‡l™VÁý)e8ðl¿PN~Ȉ@Z&Çà÷‰{ž=Ò¯žø¼Hnb–Wä#^ãÈ{ÔÍw/ƈß÷1üõÇÛ”´pl˜íÜv.¦Ô§î4µXkH¼Æ÷ìž/½<8ÂúX®”cµØóËù‰UÃtÎñ„×äèhJxX Ìxj®FÀsŸ(ø{³–½¦ÿ -; endstream endobj 2924 0 obj << /Length1 1505 /Length2 6692 /Length3 0 /Length 7712 /Filter /FlateDecode >> stream xÚuT”[Û6-Ž  CwwH#-Ý¡ÃÌCÌÀÌÐÝ)% ÒˆJº D@B‘îò=ç¼ç;ïÿ¯õÿëYkžg_wì}Ý÷uïacÒ3äS„ l¡p4Ÿ¿ 4PYÇÐ\(((Â/(( `c3‚¡¡Á6(CÀ¥ÿ—ƒ2 Bc0㧃€5ÝB"@!qi! iAA °  Ôߎ¤4Päƒuøš8`SF¸z#aöhÌ69Á\@!)) Þßá@E(Á: ´Ô³#ä 4D€aP´÷¿RpÊ: Ñ®Òžžžü ?i/ÇÅ ô„¡€Pé…>¹@ÿdÆ`9ÀPâ†;´' bg Ga"Üá(ˆÙh¨¡ Ôu…ÂÿtÖþÓøWm€BüBÿI÷Wô¯D0øï`ŒpqÁ½ap{ Ì Ô}¤ÍöBóApÈ/G3 ‰y€`Î [ŒÃ€õ Á¿è¡ÀH˜+Å‚9ÿ¢(ð+ ¦Êªpˆ2ÂÅ G£¿Î§CBÁ˜²{ üÙY'8ÂîûׇØý"qw0†ÃÜÜ¡*¹` À?˜= ”•BÝ€P/°ƒÀ¯ôFÞ®ÐßF¡_0†¿¯+Âh‡!õ‡ÙA1/€/ 䢑îPßÿmø÷ $„ÀÀh -Ôü“Cíþ\cš„y-1Ú þzþóe‘wöþÇýw Õ t Uxþdü›’ èË'"ä“ IŠ%$¤€þÿNóŸüMþ7ª‚ýu8Á2jÀí@©?9`Š÷7¿dÁù×Èpÿ½ÃcFËP ç?Ò·c~„þ¿àwÈÿM÷¿²ü¿¤ÿßzäîìüÛÌùÛþ˜A.0gï¿0RvGcÆBø»šBÿe(æîòßV 43Šp{ŒÄù„DùEÿÄa¨G0/(D†;ü)¤¿[ÙÇê!P°_7&JPð¿l˜©;an¦a¿MPÌPý{_U8ù5}Âbâ@ òbD&ŒQ¯fL!P¯ßú ðÃhLÃÑh‡@~µU(Ba8ÃPN˜.8ü2þÆ.0¸;ê?€(P¹&l1õÄ Èß°8&+‰1`”âî BþcÁœÝQÿÎ"*‰A‘0Lµ!ÿbvG"1sþ[p˜l¯_*P¨ ˜ŸA€eÂß„µœÕ(Ò{ò}!øü¥-:Ѽ'J Í>ûÂ×AûV–Ú¤›ÒSH彡t½¹×3~ôÜ;g£^V9ÁKiêùh,ÕžU¥=¾‚óÃ{(Ag?&‘½J¶›¤ÿ€ä©%ž%ÇsÓ™«p‰N‘ªõâë6Ô†…Ôw  ðÕ )S=ú™b^ÛwœXs&Ö/èAs+Òxr¤e†»‘†ñØ5N,,þT©%ŽöÜ{Õ2>spq±?§·']ä P««Z¼2‚‚–ÒG“)o(¹–*)G³…Å®$v¢ü:5‘™ö¥Kû.¨§kÞRªéýD›sëÙnÒÑ£ÆGLx ô–ms“š|Û½ž7‹º·‚É…Z~D€“/w5·8¾*ÚÄãýDuŠã[—EíLî'Éõ)“ÐÉ|nòjîp4hU´‡D)ð±–I—T~ŠÏŽ¾ï£ØuêáU{L@RC+o`5Ѝ.$c§oþšM¯˜ow¬¦%¸ë-slÁÿøÈ«¡œ,Í$R[ÖÕÍåþ1Ø3n³ ªçͼÝu1 ò}k=O×_ ÎbdÕ)D¿÷ÚYÅqˆN(ô¤¤¢#¹w³•ýÅבÞ«‡qM‹ŽÙ/ã÷!N³C;CwÒö |™b¶¨ç*L»I§føØ‚ëßEc3²œÊ(ÿÍg¼kîNØó¤Oõ÷]7ì'àYâ¦Ù3ž¥—q$#O<@7 æ±Ë…y·ŒßáwÕzÚw*’—´Er*äžüCýÅ¡òPíç'Œu§[ôu_KvøxðFá%Sá,Ùh²øùóUªÕïä¯-Ý÷à/ à&ãš8R¢9Äþ×8™¸®ÉìÉjœÛ.1ë9óø–!.L6Sâ侃ëcÌ!™ï|üàÚT5·¡Îpu-”Ú$Ʀ>±¬¦mm'Ë UñÉîðd·þ0f´®“™ðrPš€ C÷’‹{D¬ešêeGx×óðS~.Þîê*wÂÊW"˜k¥¶*Ðm ²æ–ânß{–rix÷4Ëè%´y–¼â¼Up-u˜îÚ¾¸^Çú+›ï{Š¶Ò ó|Úe ‘Ül ÓœwC}ŸT^¼žåeãÀÔ;ú::nnœî‡ÛO`->€¾Aë’Xqõ%~€„ÉÐôtOšRª×)aÈäžŽŠ°øÄý˵b:ïDæ;é¼ðQ¦È82f•U  … ËÁaV'Vs¦©2€ÆÊÅþ`ÜiØß¢,PQíp5–¦ÉñÓyðÚöÚrDºÁI0cuÕÞ;—=ö„7oz­¿G¾‚›††Üë­½co¹+Î|ýs6iëDe¶êäRðÕéÜD­ù~>9kïÜÀBUÞ µœç¼ÁUp_E$è<ʯ’Ý«z¨Òi®³8æªâ#â,ï<;Kí[ÎòXýį4Pô¥Ä.=’FïµÂºY ¸’—';C9oî˜ïá{*¬tµ‰8Xv§ô6µÞf‰h? ;!J´g6¸Ú˜ø—4Óm~˜0 o|ú%† ˆõâuEé=G)«NO·ÙüüE²üñ“µ7¨grøýuPænœÿ<9Ã*3—A«Ðû¼UÑ/ÑùUá/«Ò¥;Íܯ'×ÊkÖß¿óixÄ|¡™™ú%Ç„‰ß7W˜ái;oæø ï~uX}ZÔç*žœ‡»°sñý˜Wja êZ×J žj¡½t‘O‘)©ëG” ã–—;e‡ÚŽ87w¼ql© Uiz.½œ»ošÓe -¹ÖhÉœu&cÖÈ­¨B™Úï2‰!ï(Öêà"<&©ë>Þ)wñ¨}’¾_J³$Ôû¶¤šù†ÒvöN-Š÷Í)X"%Â{NŽbî41d¶Ü¦Ÿ¦›ÏÉ;tCRàuëÔá¡×—8{ìJ“hŽ­[|ß%WÊ®û=°ß¤ý®e6΀(u ÿ1ST8 öÉž÷%ï2% ²”~bP”ªYx$Ø‹ã *ç*u›háš0eUv®;‡v‡›¿}EªCvåüö›7w´ðí©·šÁŸ –ïâÊãKœÉU§_´¥¦ž(Ñš»É½¤õêÆ{ —ºY˜®ûI2§ºŒ€Y.kåâ(¨¢ÌÐŽïnÅ=vólƒ«AˆéUUÝ1}Þö¸Â‰À9SN@¯[K©Y_›»ZnÓ³Iôçü]Ø>oŒ aV/µÏ’CY èGã §/þø&Ú> MToX9Cg÷/oÇ&·?¥ÜPà%œÈT=ý™SY¡ N`ºL'­øœ$®Gö}þd„J‡¥ª@’.3`Ì´YßþžâÌÞÚ]YÒ5VµcÄ9.§šqÁ/¾öÝáV<õ’Èb…6‚Å’£‰rµÃöYÂÃMlC¹2×¹ÕÕâ2ÑäÓ-OX¸-erW6öÔGįì+¯^]3ø¯MüˆôNv^¾ˆ}™œ(»ÛØŠ¥±\´ð0S1:ùÚRªzѹÍ·Ê\amÿtÈ_á…ž ~BP™Qè-¢ÔÊRIûÄkiàqüøZÃÌ>•E‰ÂóÉœÚy-Ž»LßfžµŸë¤GZm4I"¶ÂžÑ tÜ´Ø©;Ì®¶E%ÖæéÄ“'àQÝ|ò)–»z;¦ÞžœU|b !xÞŒkZׇ·PY€RæŸÌT¨1¾h©Õq¢þÀóÂþðsä‰cݺ½>–2Vƒ+Üb!Òês©O g¬QlBÖ¸m…f¢rB–ØÀ¦Ðó‡w=;¬$ÖR;oHôMbÞ²W=ÎN±qÀáýq¥-Šc'g‚Ó°_šÈY{îµÝ²a®\eï*Tñ)Œ™s.›¹f ‡€Y»9 ½Ÿƒ‚+@jÞæŠÝ¢^›æIhEÉá²™/÷Ó=å\fœ…›9I¹î«¾y¨ [hðã‘ÜÈ×2µ‰÷(ÛSD­¬ÓÍŒ§ ”w5õ—dÔÓx „ë9)ì¨H|пÿ(ž§žN Ñ'.Pò`ÕŽzíæ¯f“n¿ ï¿|i¼Ü<þ¬jôCvwÈãò¡R>|îYâÏ À‰Xד%üc)óËiŽ»|ØâÀ!—Õ‰õÐæ+ÛìwU­ð/Q_i¼ŒŸ<Ʀÿ<ÛÓSvDm¤ä:µ F ¼ $ÄhUÈ&޵t%/ªØ~èXÙö.m¶|ìiãÍj<ƒnÞar÷(G¥ù–Q NÓb«æÍÍz;^ó¨­aÙ“9¨¤²5Ô)>ÂJ~.ÌüGðAeζó0¹ÌâÙ3Bƒ5YÏÉ–|?f>,ƒk£c€›Ÿé.7Í·hÝJÏoiªV§¿š9Í®{F®¢ò©®Gþ]FIý VÆæUÜnšcË’¹µÏê“æãtV>z?#øa¡Éœ©—!¹Ó‰Ó –, ÊZ³ží•Ï"?/Ej ž)’Í€îVÛx§KÛ!¼y<e&HÖ_݉è@F…X^4gŠRRÜBû¸ö0Wz`&3³ýØ1ϣljH:Ühua¨çîOêi}«~¿âըơ"ÕÃ…ú0l?âˆeͨÂUU¾Î’}nøˆ«Œœí»ÀáúW•»/åýÇ,ðoןÈõ¤¹< igÏ{{µ©IÇØµgˆŽ¯–ÿcI¸K‘¤KÑ›a)éKÐŽïTmEà‘çØ®¹zAÍrx}rÈRZA¢‹X³v‚ÒɘÅ4~ L‘BÕ¢ ›ÄŠƒÌ'øT›[Ý>ÀÇâºÛ;¼]•®YF $ßPe"¬»ä™û)jžñqŒƒOÔÊF{Ñ.-n‹øÔ‘%)¥ÙÙÓ7õµÞ…)¢Á'§ 7Ê~¬ÐË[DÌÜyrMDJ>†ü ƒüÔ@j5¥MéݸM*µd_m‘äÏÀeWíM«i °¸ 2 â¶ Þnªý¡PŸö’ ~ØÀ|Uœ<4ì'%)jòG×vù³èâD7Æp÷óËÆã'Â7WCOaÍ 2ÀåKA…Nû3NAîîñ(ºW[í…//b®O¬P¦¢6¡ÆƒÒ³wø(3Á1]5iß¿ä)Òhá%?Æ7„Žên)sC,¹2¶B+¸–ýë=l|³îáŠz:ÛórŸ‚&¼6Hä Póðï9ľlº&ª§«‰›®Ç¼j¸xÔ\ÛÝ=R|¼r*›C·62W“·×Æ÷)ä}·ãûú ULJ°‘ï w¾"ªp‰"IJ4{ޏ°Ó´Î$b¤4øz¸¯ºY ^ÇÝ€êÆhÐN,ûG¤l‡b.J:ÊÑùÔ‹© q0GºÉ– ßÏÊé¾Ôs>µ¬Mç†-©®z_MÈ*]bÑ;˾1ÃõR‹•¨ït p§2HÑËGòÝWô¢Xm©³yÒöû„g‰rÑd;kn²¶]– ‹†‡’w*ÃùÄË%h!Kµ—ìZ œnË]6±Í‡Ñˆö™aƒ<šÒüÄ Ö§ ±ÜÕ²å¨þúd2eû_ºy'ôYEÒbrì.ÁWtÇÑó–¬âï>žZìÆ*µJ™Ã¦g…îhÞE±ÏL½o¼n[“‰ôžŒ³¾OûÞœ1‚ã¶Äq?ù{WÝ[ú§Ì+wùÇÑ}֛ϕ*‡ÓeE_Ó*­žÔ´ýñÄôCL¡¨ ë÷¥{¯™kdW*µ(0M‰i2hÁ!ójnC§E¡4·¬§꺟«sKÒÚ­û”£{f ùÒ?1L¿6u´üpÏ)Ø)€ª‚)E€k:ù [(Ê•ž(.îú(:woÀ„ û€¬p>ÛöDW„`íxVP[%‰p¥äh_œÄ‡…åÈ=¾ÀÄÙ?é_Ô¢Þrérèã_O>UT£ž›j2rt´uŽîy08ÁËÏÄã<—c0Ñÿ È0’ JߊÔÿy •ó±d²zþ4cUÒÉHùUrжMÀKþî–º‚“íÓ$ 8’u35zU£€­ÿ*w¦ÔñZ±+.Ëx/µ™µˆI×߀9˜¤Ê·}‘ʗש7\»K¸¹~WóÄDÇTŸ[sM1ÁÎïô+nr%ªaî{søj](üZ•ÉE^\F«þƒ`©Y•Õ–Ý´ià·¬ïïãópŸ²Ï<‡¹ Ÿðk»[¼¯ÆžÔ˜â-˜Té£.£ÊÙn‰ “]„Îf7tâç Ã&Í^Œ¯GVw XŸ/ùÍê£~4r"Rü3× ty>yZ“6ÒPÌßq¯®xQZ/PUƱ¨è_ü¡¨4¶ûh¤~…f,ÞPõ'¤îÿÖ–"U,}¶Dü²TV}šÎk“ƒÙ]Oapÿä[-Cz/2³QãÚ†ÛãíæŸžÝóTŸýÿQþÈD|ØÕÊtxOsÆ{Ñ4­môHü–͈òGœÐð¾L[t*îàÞÖky—Â`(Ú_Uij§];#VB$¢Ý®åÄážx8ƒ³Bå±ß$NXzt¡m]›â$ ÏìßÂF_#À®>‘R‰bÑNœáÍ…ø{?¼4}X±ìNûóëCá,Ùù0‹ýFÎ {»{.ªÔ\•ÐøL Éi¸Ã"6b P^­\xË86ððX²»F÷ITº¹Wè”X k ÑQÀ]1JàjKn¸´§ „„Qƒl´—, i6È•ØôVmeðD‘ÞFÔóâû—Ëq®wŒÚštþQÿMC»Û]m[º3Ù›¿PTŽ0sCÑóÁ?;˧a§E{ïá aÌŽg QÞâîÖ-[ŖÆ¬Ì; ¡f­ÌßÚú7ï/{E õL—玥L;I-—UîgÔ‘T‚$ß›_t=6qçÕ=IJ¼Æ@MÙ}ß΋{½" ËF×ÌbÛa`Ò¹=ÅovwMºo¡ô¼ “K:lÉÆ‹¦”ì¹Hî'kò‡HklLXëÇUÉp„~EM2±ÔT9íy•˾}Ѱ0«ûäãîE·úëƒ;#}Å[Á+};ѴܬB‚¸ýUŸž+a)°ŠÏ˜žL½ {»²¾|$cñUÚ@•¬’Á"T^è¯ñN/‚Ð˯¿Ðþíò¦s«©§ÏÀø“ñû†÷üÚ„¯ªO©¦ Ä,”žß³Ã9> nˆœC|k feÑZ„ÜVÂq‹U׌¦h[¼†º¹›çv6 &†ߢ]Ê(Tr‘¡›…K4’š5ùÑE§!ºW3.ŽÀ¯ÜUH©ô±·rš„5Œr|Ò{N|öhB]›ÚÿrØJ‘ŽÄ½|/‘PVÆ*|/ûʇ Rå3YCX©FÎååõ1/)ÎØ²‹—Ê;6x<¬ŠžÃ²õrÍ¥g¨i¡·Öï³™žj¤¯m BßK$ô}rߢù‰òƒ³Â¢ƒ‡âF._‡]m§ÒuÔC ¼Âkü4+›žMm`·çUmàoZVŸW¹–ß°™,fÚ ‰é½ûâÏLbÏyãhïÛó§2g"E% K,›Ÿð†ÖÙÌëig–=#.Szi†€Û)‘ ʈŃ£Œ±ÒÌŽþ¤·3¬^]k—LÛ<~Ë#Õ`EwF×ݶ‚õ²ð1^ÄPS`ÚuSõyÐ쀞xI«ÌËg$ÎS²·95/êF»px%Þ$…?HH8ŸGÞàÕÉ_ì׋Æó:¶Òq)µm IÌôŽÕà‹ÒlnÐé§Ñ‚Ó?‰>ûxÁúàÿµbûbëpD䋱‘°û\ߓӺ¯Ìv2!+FšˆíÝ©¹Â7Ì‚ŒÓ¹+:¢ÚuHñO›’q”1êóí¡ßls7ÞJÅ.Mqqä‹T$|{¬Ž÷­šV$Ë,Ê\BÏù Ò·UJxmaÇtû²×r]ë¹õ½ËØú …q§¯Ü;S£›ÛÚ—3š»»ƒ¸ŽÃôìÚʇÛhS‘ÖÄØÃ«-–&ŒßÏGÈz£Vs³=ÖXZ°kYä lï.ƒè8FÈ:rZ²_ %ÞލÊyMë^Ÿ£=*h9c,ç7’ÎÿôháxËw»‡6ÞŽíƒ‡Š•©Û‰•þçO!"ŸO‰c¼ÎઠŽÀ-©?´ä»iœÓBíééoue-Q¸Zc{ Ö³B›{Ý@ÑY£ôî;ö\^µs똳^4Ò—£ûñHª³Ô2o©ã’ç,p¾e¡Ëo²Ó*n¿IP9´)oYOòw.'Ì>z€Â‹XxÜêÛ_ô—ÿÜ.s:;6ôöám:{\-G÷ƽ‡þ»ŸÄ¿<êwkÞ{M}WîZ%>¾¼¯¬n ¦–4"jÓ»²?ƒÞhõ È…Ö>tw0½2Ø…÷˜ö¿}Ý=EJ¢,±÷ŽàÊxÜî Zc*n”œÜÄýùcyÃW—½;ó½Ž÷Ùçž§Øñp[ú÷¶àÞåx~¬"Úé?u`ñÇéé7ßæ½7WoœšSí|¥Èv“•ËggHÿ|QÏLŠeŸ”Rºq§Ô0 aÀ~*Í!7Í@©x/gØï#Áã¯ýüìä«|;=tï^Ú^´ë}ùylÆ5Bgö”ƒ¹vÍà'Ãó§>&U3ØžÚG›Ùœrù9Ê|/ŒnIEtÞýhÖ½|çù#·¼ÛÃe…ôä²|zkŽ¿ Sy?™¶ç>›êB®àͨŸ©;Æ>J/;êõM•Ïç÷o r.nÌ'qÔ¬6È_Yo+¹= <¢v²!Ñúy ® ˬÊuPоÿƾ0Â>¹m¹ß¦#â :œ´OŠŸg•¢Ûüب! W›¡£O–›â²ÔEg·û‚wÂææ¨ÂXšIÆ~Z îi±À ¿­?¡ÁX­Væ ý¹í\u±YkçºRª`ÍÞm‹Ï$zܱ“ §››çNZ¹q èCJËê¡#û!vi™üûçÙ÷Sy§iN.™G˾"¤ªû«?áXE¤m«ƒlÿy€_ endstream endobj 2926 0 obj << /Length1 2440 /Length2 20181 /Length3 0 /Length 21590 /Filter /FlateDecode >> stream xÚŒøtëÚ m6qÒØ¶m3vfÜØl£Æ¶m6¶ÝX'kïµw×þþŒsÆ#ó½n]·žç3äÄŠ*tB¦öÆ@q{;=#7@DNUЉÀÈÈBÏÈÈ ON®j ²þGO®tr¶´·ãþ‡…ˆÐô.5½ÊÙÛ¤]lL,&vn&nFF3##× í¸¢F®–¦9z€´½Ðž\ÄÞÁÃÉÒÜôÎóŸG• 5€‰‹‹ƒö_î![ “¥‰‘@Îd´}g41²¨Ø›XAÿ‚Š×ràf`pss£7²u¦·w2秦¸Y‚,Ê@g “+ÐðWÉy#[àߥÑÓT-,ÿ­P±7¹9ïK ó»‹‹)Ð ðÎP‘’(8íþm,ûoZÀßÍ0Ñ3ý7ÜßÞ²´û—³‘‰‰½­ƒ‘‡¥9ÀÌÒP—¥¹ƒhFv¦Ù8Û¿û¹YÚ¿ü+u#€¸Àè½Â¿ës6q²t9Ó;[ÚüU#Ã_aÞÛ,fg*bok ´9Ãÿ•Ÿ¨¥Ðä½ï ×ÚÎÞÍÎë?ÈÌÒÎÔì¯2L]Ôì,]€R¢Û¼‹àÿÈÌ ###'3'躛X0üE êáü—’é/ñ{ Þ^ö³÷2€Þ–fÀ÷/x/g#W ääôöú§â<ÀÔÒ0š[ÚÁÿ‰þ.šý¿ÏßÉÒ Ãø¾~LÆ¿>ÿ}Ò{ß0S{;?æÿ1ƒ¦º´°ºÍß%ÿW),lïð¢caÐ1³1˜˜˜YïÞÿç¿øOõÿ’*YþÝ?"JÙ™Ù¸þ]Ä{÷þSˆëß›Aõ÷±¡ü/ƒ¼ýû>TÖ_—‘ÑäýÓÿçCð/—ÿ»ÿW”ÿ×õÿ¿‰»ØØüKOõoƒÿ½‘­¥Çßïûìz?röï'Äîÿšjÿ} å€¦–.¶ÿW+2z?#Bvæï{NÇÄJÏÈúo¹¥³¸¥;ÐTÑdbñï]úÏ0Þ9l,퀊öΖÝ;ï^ŒŒÿG÷~ôL¬ßïç÷‘ýK|?YÿË+fgboú×dfc99yÀ¿oÀ;bx1½ŸUS û¿VÀ@ogzw¼×è 0³w‚ÿk°ìl¡¿DÿFìá?ˆÀ òqDÿ .ƒØ#€Aüb0HüAÌÉ?ˆÀ õ±¤ÿ ÷\dþ ÷\dÿ ÷\äþ wv…ÿ"ÎwvÅ?èOùzçSùƒÞùTÿ w>µ?èA㿈ëýAïµÿAïì&ÿElï:{›÷þGÂÊú—ÄÖöÿ_“e0ý™ß£›Z€Îï×ä£÷¾ÿaôhkjälñ_Ë{5ïô1²ý‡×{½fà{ ³À¿”–reù ºþƒä/Í?‚½cóÀ÷þ°³¾÷ËÂÃÁh÷‹w™å?àûЬþßë´þ|oÕ?ÉÞûøBÞo4†Dþ«ûÀ÷Jþ¤ònëðþb³³šþH™þ–þûîù¯ø=)‡÷ÇþÏXßët°qùGóÿê„㟿³9ºØƒ€¦Æ6ÿCÁÂúGñ¿,,\kþWÌÄôîáôøÞ°?´lïNÎ@[Ëÿ] ¶wç÷—ç÷ þ„|¿ @nÿìÍ{›]þßÛìúøÎáöx÷þGhæ÷žyüéË»«'Ðéß±ÿç¢1qqzo,è_o„÷[è?ø_/~ Ðh¿4ooÂdUÔvÿCˆÀnwœ™©ÿ*â7¬ÆŽžë¾R€ïÃ5K^ä¢P×ì^äÃú1sñ[£µ&6£µþú—”Hn쥺6(3ãmÚ/“è|Çβ.Ì{2Ú†,v¦æØçMʃn¿g¨qh/wçÒ%x)š*ï*,Îa(Nè!Æ£#ap99Y!‚Ú…ÒÛ+…«…ff;¤Èœ¯ÇOã?Š>¤ô0³mõÿ*¥·ÜL!8:Brù~ÄŸ|ÐÍŽ/c8 ˜!ßéÃ}úFð»-ÈŸÊØyTE€”'CjgòJòj'ZJÙ¼Ir`²/ RdãÉÅœP–»1å–>ÏçNÑâ–ˆ¥DÕO6ÊÒî²2 >q8„ÞE8ñ©“ ú,4™/²ÕCSqúªÎ‰3)´#i Š*×^ LS&p#‘N1–´Âí·}•Á2£a¬l V&@Õjùm=(’äÄ(—ODǤêù„_Ø'ÎF%¸,s°’FŸÚ(šÑãŽÁªÏðzL³íç™®û{5F" $Âzçá»Ã3«]eIŒ U¿Óáæšï7„zƒ®Z7½ð(K&µfn2 Ã¥à¿,ç:£MYšÍ¼4oŽ„ê½ÕòB„áz>WŸX¾¥}·É¸ÐHz þ¨V=jPæ=‘ã­oB,XžèV;ÂÞís¾.!­ÒYSÚ[ëzC–PûÛ²–„ì²F! >7õS–ú’R¬À1Øê,3ØUY9 {©K>xñȸ¡7z‹O^MØQÅvÞw®›ÎÝžjÒ19¾b3zcô«™Á²m|ßV$ ¢ÄÆã’“ÿœY™Oy迳JSFR)ºòµŸ;.”²—O?CbòôJ°âC£b¢ã1jS‘ÎiºâÖˆrŽ>VüðºdW g¡ùªÆƒ_@ßgô‰Cs`š ÂËF.Ås_²¡Su%ñƪ0QÀ§÷éãf*´>üœ¬EEeá“Ûõ#p f“¢cŸVH±áEùæâDÞƒàÇ%·¹=¹ b†¡äNbÂÿkÝGÞ¢"‚œñÜðW¨hÅîMhŒãÙå/;DžX†Ë[Íúìât9°0D7mÓ–,çÝê‘){$4dTlsÈ_è”ïÎb %tʰÜ' 帜)8pÉa?ó-4ü&ÉBõŒË“f"?üf3ýiãzÚ”Á¢L/Óüº×?€yäv W÷)œ|=ÞnBƒ*“ÍE {bzÍ4O .ßLãG¨L/éAªãˆ…ùÓ „ñÕaI&”:2Dý”ŠŸÂMIe=ÒE‚áˡņ¦³„Ií6ù>JlÿXÉ”ÅY+ï[}Œ:z¥iv")A ŒêÄDDñƒ¬8‘yÆl‹²ò Kî²·œ‰·a÷Õ÷Øüÿ‰’*]‹);'½y÷Z.Rð K+ïØÉ>²‡¬^¤Î[Ó’IõM½Ê†’<­bþ‹ÏEQq¬ãi#†ÜæJæ©ùûF0 ùïƒ\$ͤ࢟/ÉJÛÒÑ·<iü#4¢N+ÁHªs×'û\D8°–'QÐÕÓ¡ÑŽÌG¿qß$nï%Ôv.¹%=³ÓVhÍ%³«<ºGññ/‹€-‚ÓnˆR"ÊæWN€ ÖaênkɃ~ÒŒ©º0"¬ŽÑZ¾´gm“dãW—Œ,¿êI•Æeû(-CJsj6ÌáÒCnÝ(YZ NíĉÍ®ê9§ p“Œƒ:£zsÏÒÊu{¼‰d2Á0=N„Üò,åý±ßŠ¿ë.5,êzÁÇÚ=õÄQ±¤s:=—ködÇ¿ˆˆýpóÞKïk/8¬d¬d¡p¸v fUâvIvkÿMc'2ëãÚy;²ˬ àN2ª¥Eòø¤ ƒ§…ËyÖ. pÞ­ùy11Q…íƒc:Ò…ØÛíPÈg7,-Ju‰»ÃÇßå{8eî¾ä™#Ïö‡ŽŸˆ<}M;BÆÌ@r †‚ymæ[”Åžó‰œZ™|Øx•sɪ$;&î“í9VZ½#수È'¤1çï2³o¢þWõºå|Ê,8CX¦üÄZËã1Ç\­raJ5Ð㉠ês¦µ›•à°«Ý4¯Âû+XUxR—ç+„R7B7EŸ›K=´P?zЮn Pò ©Yk0ÏKPìFƒ¬ i,ÔyÉJ TÍ‹d\^>ü6ñä8ׯ›ñx®¦â)Ïa®^9=ú=J·xïÃQÓ§‡zã?väTQD¡”¸À¨Ó‘6%$§—i6§¹'Ðà®GiÙ|Ÿ²wa§ÆÿxB>ÜôB5Õ¥*‹˜2F‰dÄ$û¾Î­aÔÒ($xM²¢ìõðŽT$šÎМ¦Òl•^5¾FL"Ä÷)˜&å"†h/ N`Ž0ÖòÓ™«4ök2±ßïI -§ž²ùœ=ÀyÖµìNWß=f;g¼÷±ÕGK¸tÑ]ÂPNkBúû3›Óªn”/6_ÐÐbKjÊîWRy(S¨˜õxá6íîfªgïámt{Ežý6¸ó7£Ò)¿ÐÍ8xcͳ·GD‹>ÑžÄÂ'ÆjX~%!æ&Þ÷2æ²%Ú}j)ñs­àÿú™Ø€ þìÐ@à 1ê³q>Ñé4DÍ#ÍÓœ:¶!Í\4í¡GÏô» F Ì¢dÜßÓ->B—kq~õ7ïZïï?§± 8rJ`™Ç®)ùŒ iʸ(CÊ~ʆšG=).èžeßý3ªh‹šÑk´ÙyíÔ©0ænZ{W.q j…%g”Áß8 ßn‹91æìUÍMñŠ UÄr9åBø@NßÑŸÆ„>ֻ؂ö[?@F MjÙ³¹8kiÇìa³Æy¬“²$EÜÒM‚‚yظO”Wó+Êͤäø]'¤ëìLÀ¿fkÈ.Aß,Å& HϵCåjÈ1§¹ûÐzC;ΘˆùÁ÷¢ÙVÒ*œÉÛñ¥µÌ@‘û˪çIÁOØÈ¨uâæ-«ýC¡Áñ~(ê áß.V4ÜuJkÚllèu4êuÙÐúòç½›N³Á òÂÏ)êÃß@h>ÛáÍÇáî·—&¦ÙhTãF$ÑB®ïqÃPÈùÎ Æ;“ýÆ»\å•À.©Û0‡:KQO6G`|­Š©ãÕð·eÄ’R†´:{Ìf~ ¿=虂ùòò8»­Q[c‚ìµSN‰[q¢m´K÷¬kÜ­ð¶•áÚUЪ‰oümÃ@6Q0¤à®Ô­G~º :È[|ÅT“¶9v8âÌ-r`ï|œ¼ÅH®Ø¤'Û÷˜!÷ŒðÒØ˜ÈW†+-Ùq­ÌÌ M) &õ§!Ôx»LY”{†ˆJ·è}ØrýϹ F5Åéaáö —O›‘PlΘñ¨ë(€X4‹uÁwæ¯yia/oAGÄ5æuH~”f=޵n­á …t™\í¹'ÐÝ ÔD6-/)Ø õ–V2­gòCŸgädg4Ì^a9qb>Ø@vÃÚ —‰g@‚ío#e'¦âõm§çç‚"¡TúH †Í7e}ÆÂÈ1ú¹×\'йpíÉÜzÑݹ¨Ù=ñÆ:ߗȸ¥xÈmîçËxªN8ˆŸb ´hgW"+ß”áxë2EsÂm† ÜZ>èy”ëÛozj`DÙ ?=>Å#ªžÓ’©—Lq¡Y-k¯×ÿþú†úñ̓m«c½±47¢ä8Zyº”2-am2~»y敟÷¥H¹åâEá§_ÓUDÈ‬…Š-ǃ‹ŸóXˆ“Óþ…iä>ùGé`xxŽÊ°Â ¢«€@dRBözëÄvs¬ºµ3Ÿ«ñÚD8çЗšÁÝvr¯‹éâZ~ OB)¬ô›Èêí*–jBÑçêy4«`3qdƒ¢Þqˆm77Ï@>3Ù/(ýšSê {ÔÈ }1ÃÛÆÒÆÃ)×8ô‚3Žs?34™¶ZçÖQÏlfçË>¨â׆#VšŸ‡¾á»ÜüBv¾ª óKMšo1³C«9˪1´‚ªÁÏö†KlrYµf´ipO¤î"F¡Y'¤v£ræéjÌü/”÷Bp£–Y–µ_¿²c®ÈB?šs“%¸ë¢,yë¶×£ÑýØt÷Yµ14‡ÊýÅÙ oÕthºsO¹j½ð%tE3s¡-eì¨ðs!à{Ÿ€øöqÚ"¼òk˜¾ÏÆã+ÌYÛPII–ãøc©õJà° –£7Y€7ßq/Ùsòä+D~xÒÄ Šb5Aû) )°ùÃÕþ$¥ÇæóLöxô±²ýA8çCtÕ³ªås]÷¯Ëõšà™pvq£8Õ}â\h¡ŸŽÒCª~íÐÚÝÄ´ååœâ•~ÙßéߺÑè‘ÂÖDá˜Pói¯¸1ø ¥|N9hx±"Vî"ÙŸ+y.Û?aúõ  Úgì±o9»rºöm1¤9´×¶ïÆ…“ðfñ$ë™øY*¦ú¸&ïù†›¢?6(¥fNƿ⃠t|/ì©Òny´’ìq¥¦§Ý›-!a 9U.;pö¶¿p m£h[åÖ}¾\ê hGëáÛMÈ:=æ\>ÌÝç.ŸVŸs(£iÄLúér£jx^¤p„öaÔÔm,l!ó·öÿ Á¸§_³»öÐ3“4xÑç‘GöT‹ƒbX%%¡&š{5AŸÓ—Œø•tO¤Yº…»g&à}ôò=Bôù½Š(bü%r²·µ±5…§z;‘Ãúg|BþNƛ̱ ÓU{òŽ´W½çªF—sÞH„©è(XMÉGôt]ÓåŒ8«_j÷r»JX–¯ŒBÑc•­2¦îª›ƒ%–‚ÿ¤¹ Ö2ÛN" þT7×ËVÓBc<ãP]íkNAäçðª!ÄàÛ´ÈŽß…†ºãW DÛYå…K]`¯º¶=@(“žzå̓E $1ßéºG㦪fVlVtlV)Ò÷1ñÑÕ}¾j¸ çýŽ»{²Óë礑bsÓÒ“tÅX©içQ#Hþô;p#J÷ç zóëUZÈÄêçUèÞ>/íŒ5ö¯ö4²äc«|/?î™­µ®Ch.ÞeŽÎ?ºŠi•¶~ˆW (wHØ¥CuÞ¯Xnàïf x z<ºOš©áÈ~ûª¦t—/ˆ¢¶BÇ^ \>\jn¡‘®íO]k˜á¹õŸ5Ú É¶ùÉnþÞn†|ÑžÓš’]V¸,Ì¿ó.WЧ&ìR‡d#ãÕh³ S úña9ýìÓ[-¶ôTwWìWÀy¾u¢9†Ýž#ÑqTX¼…0ûy­¾Uóá/B÷¨~c€©ò8…`V{ĵß[ ÒÅwù·µ¯ûÑNI³3¢áÜ!œDÖͯÌ¡¸ª)Îh• µöᤚŸƒj…Å¡¤;(œÚ´á°‡(¨ôóÌú8Šs™ ’Þ–™˜$áµÌ§t˜Êä3öéD‹L]³èÓ^¸¨QÄ”.ðž•(Eÿº„·íÅ#B ´‘2Ñ´ Ñ¦/†²çΧPlåŠÙ&]Ûá}ˆ¦W–Ø~ Ö” ôå2§h|ü/ÓT S2¨Dâ‡tÿV÷Dü€•3€ˆ„ 7&t“2ËSu·8álü¶Í‚Ô‘ËÀ¼ü5Ì™šZ£xåíåmÉ÷µÈt&,å¾ÅÕnß÷þʯ±MŸÌY?MÕ°Ú0üìÓT†¤™ü"efä•c1Ž(– Ç¨cG›ö…S¨J$›§Mx\}ˆä³|@ölãÀP’yBÕÚgÃ:çåo0Š!""A­™W×Ô²sb¢¿P»W¦ÏñUTÆÁìñA Æáp¥º©0ª| KO¿Ÿüœ§únúº>EÞ6€ÊD kÍÄqŠnSGàVèN¿S‰/®ƒ‹ÿ¼%Mƒ+qÇ_²"?mšÒ:íë>—Ñx‰cºJ‹^û¾ŸÃ e ìȦçòe»zpãíQ€!Й¨@ú~yM ðfF«rQ3ø:jRÜÛSGJN #ùóš§œûè\ÄV2¯¡žE´µ<— Û6þ y‚ê jVÔ«÷W5ž?®þØN¦/?²äÌ‘x‡Iï/yQ,‘‹µyËO‡ÎñSÛA ‰¸5aUÚèœBì 2ÚrßmÅî$43g³o·³ xZñw\>â0€ (:Új*u·’²3øÓß:pÓâ_ÍJÝŒõø¿¾=¦Ž‰;ïKÜ5ˆþšÍðÚñœÌÆnãuø:GÀ}áˆ3eo¢ïÕþi%òv«ËJñÆÐxËáãÛ‡~«ˆÀK½.eœOü¿_Ų‘ƒÍ‡t©½ [ëUͰÀûV}oý©l>dÂgN„ƒ…±Îj„;§ys `ž­[¿‘bÊ¥-ó:œSÆ·@ÌQ›Ø(yxtu•cºãßÈvsX£šÊ]‡¶Õ ÖïcÙ9S.Rt.₲_°ªÚRÆ“ùó—»3žŠ‘9“B²Ïë¥üãô^™²Ñ!“ÑŽº4šÑ¢ŸùÆÏ[Ëí=#lgÔÆIï¼CœNñ·»s¡åöü¦yRè|]D=ÆØ“ð¨]±…RO‹ør#˜ã¥ŸlòTúS¹7â··²É=¬‚Ž»±>I4 Žc¼PuÄ›²°\¨*wHD´ˆÁñ`b.Á’ü¡,ó>%ÇÔ¡ þÐo=¾Î\L;JN¯o)—_}CŒ~jÍ…µ#åÕŠ`|ëžó…šÿ~>Y¹=“”íX$}ð„±áØ3©¸x»¨Ÿ 1ˆàVñÕ°õÕ}°åq–n$ñøñ­:#ŒÛy¹¨N%?GßýÍ´+â{ÍV9ô¢§Ù½;XûÄÑØñéLþF‘k 1mô m$}v×Ick—èâ~ãìêô!„;écC*ûÁ‘FÔÄi¨Uƒ¢95‰Ý­6û=ñ¥:s¬Õ­[·Ú²ÄvpyH¡$ù±·@ÄêŠ';†@{ϬF’eÇ| 1aÝwˆâýÙjÒï_«»:r\ˆ••#š“âYN-Æk¾/µ3ôpë×Û{í›®x2¼  ΦFÛXYïÉ­dwE³õq§YCcK³À„KÍô„Ÿ/œå÷LÓ9ˆ…“N¦’ñ…YÄÑÑÕFJ˜Ízvõ{«Ñ­)uýh7‹+6•)ZŠ> /sÓº› ¹™GiŽf½µ Øïò¡QC“­p=y¼>vyÓ­ £—·—-WØ:™§è:•wc, >[‡Ì®85ŠãŽ'qÝ¥˜r¼WB*ú8½>…RF»„Fú-§×Jª–“mªæDˆž“%ñ¡y¿ßz47ü‚jeúÉu¹çî\’6¯À’õ$$ mÆq;Äé¾t‡ƒÚQ!3x"X6pç^>¿2!P‚qD;Á!dÅÉhG±_c»e ³ƒ4ký¤›eÖDÕæ â7¦\T¶z ²åõO#‘Lí d-Õo¼NÛÊZ~«›™70(Ë1þ"vìç_—Ñ<8ñfôàŒôITa bLi8©'\Ö1; u“%‡ƒºkõGÓ¸0rN[…iªç«?z§ðÅ.\›áIäS×À·ç¼~2^íî*ÖõQ­@òB#ÓþYýYŠÈM¾)€æèÏÑpZ¿ãȺC >ù;î*ñ;Г,'’â’3Á'QY–M¶&øœŠŒz–qœM›™Pi.ø`êçÏå‘00§¨ž×^4={ý³8r(?Ä»´î“îYcßÕMÝ oˆÊÉ(YBƒ¤–ž«æuYØ®TÄÓιÔª —ž—=)Ŷ¤-@|†°+êäÔÁ)'˜ðW7Ä%Ët6´pøÌ¶ßÑ3—D‚¯È“ w”½Ñ¯Ä-ýŸˆð h?%RY#êu‚<vê5 ªYžàxÎr(S+Í;SS‚B~'‡—ržlRV8Ì #¯Nwœ³¯©¡]ЄûÎAª\ô©J¡ ±˜aÚüËU ~n [Nqµ³lþö{]d°ÅKÖ‘†¢¡ü(²“Í^FßÚVTɬŠª…Ý®>©}:Pzba¥ê¶7ó6w^A€K½Ha\½¿ ®öÎR\ƆåÖýHô·öÎÄ2EµOK¥aQpÎA²‰iŸDבhææðwC „}:|‚Ì¡|Â…Îþsõ Ìšÿ8þ8då4è¿gqîøàĦ>ùDtàÜôtÎE˜ªF÷õH RÑõ£–BË1K•DÂÃJfHƒNä”ß"ÔÄNHŒ±†}Ûý”gïHvßõµäÁ÷ÍU[9¹‘^ I»OÄu»ò•tpê£,·\†Mâ1,>ú2’€ÙV³æù¡WÔr*á5ü^Š‘TPþôkE¶K#~‘GæÉÙÛ‡]ùä¿zPÆjFT'uÇ‘bî§aµ+Î <Ò/Ò˪b¼Î½`.²Eí^|ç²KH¾}0SÊrç&•ä\úfê5uˆ_áÕ4¸Êc´y²oGï’Øn…ð‘ãý¶Ôw77kŒcŠ–JõádÃÕóú1’áå1÷È«c›¶Œ\­µÙWÈkF¬âBjr® ± „u±ý"sÒ×8‰v·ˆÀJÿ†˜/µ'"PKßËÚcp¸‚$È«FÖϨǒëÈ'¢]©_E´„ËInAÏQsAô/Eeu‰´še™j&ŸG“í t"yûW¥<Ò½îrÁ‹USF«Ý|Ò~ìÏ^å&!µö*)©×}’LP f˜<™Ï âO™¹†Â´t 4çvùãää]0ߤ&Še |ˆ<ù”¥:‘›Áá%ÀŽîÆ>¦ƒÞÎdXá;tšà@«ÀìG±mÚº…ìÉR%ç‰àÈðÀ äK÷÷¯Nÿ¤j£tƒÁCì%ÔâãwP¹K{™1!þ‚}e¬Vl‰9Õzúé„ÜÿÎ6+Ò=±•¬“eãù;‘4‚°™ïC‘q>ʳqpþ’žù2y¼P&f²$Ù¥HVm"':Êþì5ÄÏV1Ï…õ¢îÒPØ)°Kä1ñÝEøV„§úÛ &IK¯–t•:-r:°*×W‚â{\Ž·c?+­ Ú8¡¤ëøÒì…Pðhž¥íøª×ßššCÀB0óÓ2ƒé,jÅ45(2`˜y–9ó€WE]†øÕu±u!€3«´äuËà¸|"?ÒÖÌG£AS.|k6hâ;§½èÄ‚»’ÃÁ?s }6zƒXßïÔv·Ð"UJ¶(‡IÓÂd®›Ç–}[ÅäNülš0jT ’Â2°ˆOìótÔÞnm.ôƒî]n&E-iŒ”;l)Çòs¨R’ߢ¨ Þx†/ÍWÜÆ`#¯Lä‰[÷O©5áu–™4öSÝ(•;z ¬Ïɹí‚hÈ£ö Û|A'º=G‚ˆG‰X^úù0ÀA;L¼“}”† ï±µ1RCsi2<¬±âC:˜ñ²û‘- è¿¶’öÁq¹»¦ª²»„R~c?u0À:©êìªp±WŠ,ôýŒ{—¡tލ)óm8Yµh¹¨Ð•;éÅUptZ^Q/±JÈyš©?«¥|áHFõÁçv?[Ye)^I±Éøˆ@¥u}EèË•jVÖ.^KUy¯öœ5˜GÞ|¥áî²,„ÒÂiôë4a0í"Áê½=üÅD ?È"œüþêÉ|qòã–¸ãP×05†µ²öëa¿yÑ" ½D˲ 1Mð°ÑVBW>è|S 둾ؤAêgþf6‚žikÖ ÒÝabÞt’¼«)fïþo¡°¿°8Òkœ¢µÃ%! QÎÁ” 7$.ÚJ‚­ :î„é'"ݤÛf(9¨žª \*âU>2ÌÄ×,ÖTå„F¯q¿ªo†ÅˆŸ1<ˆŽëoPeúƒ^—ʹ B3C5ôàù*¬Ñ}û”fžoTë ºHÁ²Ò©~9õq´Õí°ñNóáå–!/ç®ÆÄò³WzM=6Ÿ>€Iê¤:Úw©‰0”²»93¿º óØ]öÒ\6'ÐbLZ¼p0ŸOŒ[8¥õ%ßߟóg¬8¼ã°-XÅØ9âh8v9óAô+hR½‘N0ûÍ”ÿ#ÅêŽç$ZY»½Mð£ŸTºŒ@òݰmþ¨×Üók“ò½$áïšMzâ—– !ø"#ƒŒùD£ˆl{ ” ÝÐÜ®D¤ÿSyΨ‚Áø Ë#ƶ۶‹3:=ÔwÍ_6]íSˆ0"hvøò#GJœ>¡yžAœáí~g|ã»It¡åy£›k¤òj6›] /BÊÆ˜"½¿*:îIlúÜ@5XùƒöF9hÎש"'Êÿäa>v'¤ÆED®9®Ó¾¬óC§¸,'§é¼NO"—ßä†Ú4Â_.ÑZ8³9ûeµ´ãGU>ÎD<©ï¡ª\SC5ô­¹ø ³Sç ÑD;Dv×&t)#»+Æ\,« 3" Ö9¦M<_TÉ”½…¯@Ä5J,6—þwÇ7UÌÆŒ¢ôýå(ß*GåxK̼xUà¹ø–^¹ìØ;“ ¨P ë°£¦ØtŸÏWH™Ÿ¦x{c)œð¾wÀÌPÀÉgöf^v]ÎF7Ù¹Ö=LjÆ,0âÞx{qåÇL®™œÂý´¯oê³ó Ðn¤?pͯ+d¹‘Jeû¯Éèt¨wë©4Á°P·Jó(ÒÙ©TyF¿1@¬ç¡¿@M²4¶v ØGݯj(Ê™'ñdõ>–.BUÓÉ-ÐpAül1|á,龕‹ yqd[IsŠ_RÒA‰ËÉÌËoûZ5 *ówUIÐ5eµ -Pçó•¿AÃy8]¦õaw¢aK¬díEýÖ) Ï~y©`A技[.mUþªÌ‚n ¥ïâp)(À”(éÞEJÕδ·Ž4Äï$išr¸»`° Ï¿J£çi¼67ÔõsԳЗwÆ{hF›Ê€+êZ†‘o!µ…+KŽé‘S4•~ÙÏË®‰%f#ü̽žk{«xˆìügpqÅÞ £ŠaO'/Ã¦Ô ýÚÍŠv¤'»’´pµ^ÖG7ŠÚÏË&&‡NŸÕv¡ÔI¦XfÖ«½²±yQ†Zs[E­êKD¡ZÜÔ_>"dO»‡ü¢6ý~=7a˲Eš½Üo¸­Jëõ™*h¾ÍFö{¾§ÚÇÛðCHÏXY¤õî„1"ñÍ—‚OƒY“Ø—QIÁUõ0f¤x^•Y¦›Æâ–2Ý;Hõ„úftfoÀ…è?L.Q?Xª·}6Ì|Wö=°èsý“ãP K¤¸­(6¤Üîq©zbóè~ÎK<ì®ûCõ¯c`cðøÄ0:ÒAY›´Í3k GU;X“68/Läï•/9` ÕŒë÷<„QƲ´‡‰:¸kÚâ چà °~u,Æ!U(C5Us-¡KwÂP6h±ƒ]ÈIB»±hæ±Iо:(ÝýÈh‡íB8a¬T“Y-ÔRSÄp¹*tó}’LgO>ûìÇa)Æ[ò+o㧨Â5„üQ~Åï/X=÷7*áìó¢¾NìB¡AƒõIÊßl¾Ç6v€ôfž¬ù\S€EEm©ë¹$-5}êZµÙ{ÓžäV]ÞzÅwÂe¬c&NfNZ“›\ïÓ. /%ÛÊ?‘(ˆ¿ tl¦«îx²7ùb&ëË)ųe0¸búp˜“io˜üˤ°’EéØ]¸ï£ÙsKíÅí­Õᘼ„Þö&àcp9æŠo?Ù\•¬n7G¼ÊÒûçÂ÷’ÁH ;Õ o ×ø›ÙÕL¼fbº¥)#©†tâ«„ã0ϱ%e»»Jgöû‘TùiŒ˜=8+b>¾ürk€öYጺ¡1Ŭ¬6ENŽQÐÊq5žk±Y4»«N;§‰:V#õœ1òÞw£cugaóíö9 ñ§‹·yˆ|¥j—£DÑa 0ªB·òþMÄXѲ¨sx‘kJ¹‹T8\¼0gr)|¸¬Ž»ÍŸ±Ë2ÜÐU˜ñ-(ª<ðwõNˆÑD¯!AZµôR¡sÈÓnuI-?KíAÃÏüó7Š)¼:û˜iÚ‘Wõ1ì‘xƆ‡ÁÖP::÷±¿Ìc4Û×YF}:nìšyO¡œùt6ªöNÇâe7lI¬ÌX“±¸ð>€, 2ʯ tZï2R\äÕpÉ dTÔ(…‹ë.[…4û`“´ÌžœWbâ<´ªäÈ)W)ʾߗó[çVŠt0h̰<¬‡-43°õ0¤äæeY¿sËí胾|¿ÏHa`3½T"[%‚]9¿§LÁósÈç6j4^LŽëñeã¡´Ë¼à²ØYܹ³µ!„“KÑW–ƒC“ãÄ~Y“ô„—¡– ¸0ˆ%2fÊý¤ŒºøÒÓÚtÔçØHåÓ¼ þå0ScI*¶H{õi¿ÿž¢‚‡éó)³u3ÆŽ1R_µÖ°k0ó»z½|¯Ÿ<­oÛG«ËpüÎÍ©û£¦¡œòÝ0œ¨d–Ù’ÕøÝ3MŒ¼Ô[oF•Î>T « _ßÍOo­/±o´+{Ôp !ñ—õ¨fLo¹9ß b¢ïn^{Å{܆¯¿}Ä÷âJ¯n3q?Ý#_Cäƒä-'e*O¬î«àES*L,=—Éõ[FŠ«jX™<›qb™!f´¢nnéÀI¼´aéþNUðYԼݖ,¾!$ÓM7„ò7PôÊ~\ñÂY˧qßBÇ¥ïŸ0W·Kó~ݤ¤?‡r­sZ|[þ(ìC5l$¸]È`˜Ò÷P”%Å÷í‘NÖŠCó@>vþ,Æï)@•-&k!yk/yM”(5ô$’ÆäÎBsDSL€®†1Ö9:çYw]/K2=<=z1ØP­Øh Np—SõâËþ¢n&Ãâî 6a™ûü¼:†Ž?´ÞšõuŸ¤² -F\r´¾N\¾°‘¿O9Ê´á¬%XVlí'áöïû1µ>kh’ü¹¶{0vùd´ñ&V¨Hu®lüñTdpiX’­a¤dÇú6êÍ”¤N®{?÷ìŸØðšÒÒg(“©¢¸ºc,ÚÀƒ}p¢ò"ÇÁ‹ïDSIÕÁâîÓ`S>ª4Ñý°H±‰2Ò•eOíÛ<â¤C(ü8ƒ©æÿE«Žœ±<ð<(̘Gíô…Í/òh#2„KßÐÙˆ`“³Rȉ´á÷,þÍhK%§3˜7ö¶Œ«ºÕí $ógŒŠ¸H[tïUÙBß h>Àšñ̤ÖTê<Øõ®V°QÞ†-¦fŸ&SC¨iññX11,mÑ›7RSU”Ö ¹2MsBjú³¹ò‹é—9ÄüªÑž¡¦/ë$Ũ³ ö~pˆöÌÍ_`Òö΄[0j W“{8LcF¢¡ó·—Ëñ¦¶ Wînׇ¾ü¬×¨f>ú$Ò¸ V:õűŸâJxƒIA™Gñ¸®0Î^v³nJ~ƃå´Ò]3ÝÓoz*Œeõ•ÅO¬£fíü–GE®_`.zU³†1_ŽfkŸ,$|>ß<`™Ø½ÎË0Æ\Í:ûwMîYxü\çV¬ÙØQ°¢)c$„ì&Æ}L}n;}yÙÙ•pÔ3ÏeC”¾–ºJ>/—ƒ¸¼­ì£×¤`>Ñç¦J¹ ­‡?O° bß®&²‡½±žÒ¿ŽÝ0… •óP‹èK!èöðÊ› ÁKBò—‘s¬Tûùs„ȘfÏ“QðصÖlp›øqCI…tdÕ7‚Ž7g‡éŒ\hCäc(Bœü²‘P”¸a©AÍÍzºp}Ê–Š¶ÊµÐ);= SäHÅ®¼ÈJwy’œY€tå=ÒðÜ74çÉkN³ ßûåájæO†)æ@wÇ-m·EzSZ]Kk" É»(-‰ÚåZQÚe~[$P1ÖÇd –üKÆoø.Ö` —t©ƒÐ­wxÞü6FO1V# úÇn ³Ã­N¿‘äxNz‹À^2 GËÎ\Üõ¯ àÖ){*ò9øso¤ÃšG›ù+NŽ| 'üÆ"Ìëÿ‰æEZ‰ç)ÙOF1ïŠwF’ä‘\¬[õ7,æçqŠÛùa]WûByTÁ¨4:•땲  ù +ã½Ø|µ,zŸuW O[:ž¡ˆè|Ù1;\ %ˆð0ÐÝqZo“þr6ÄuDe&¤s–µI­,íúH:#ÊNkÐŒ2r¸t?f–TØÞŠ)ù &‡2}­ÐíÆ»m¹jU·º­?Sè¹Dæ'½Š,Ê\ÇWm=]”Ê™…ŸÂ ð‹5°Èñ\AÁ¤l:«†¨ù§Ã‚å'uåœÏçã™w×È1'ÔlK*ªæmϵWµ]zpºz<8# g¬ìbØè+Nº˜ê°¢í ÉwÖ‚P¦pøV5Gßâ3Óª²ˆW©Àµßú±\.¾+Z4|ŸvjXcЙ!;øÛAz|©bß Á?éŽû_@1VÛ!.øÉòκ\ y 6¸?B­oì$%pÅ! Or:‡mœOg˜Œ‹\?Ã=7Í•æä¿œgƒ¤„ã÷x£fì8pÐÒ>yOSL´¨åS "¥\¥‘ý̬Â1:¥‰£àyÍ•‚IÖÇjCÉyXT˜‰U(Œ’ NmG!¥Rþš¶U9']\eLŸÝ®À¯CÄóÎý¾QIÖó2“ñœôb~™"+1±Bân(ß쾕NZŸõö”G¤qyÉ ñšò¨_ÔåêàNM¥;ƒ_1`ƒgËÓTɘ(KL˜’ÎŒMÔS*8}<Ý”:‹ËbA‚=…uwe¶ÈG²´…ªi¡&ûq{¹ ¯:ãb¾Qã$ÆóÓŸmч«­„•_ÅÝ^}ë«È’y‡Ë¤ôö'Âf ×Tƒ>¾WEºDáLƒûÈ«w¿‰ì"¦Rúâ…ÁR9—Ü脈/ʤî.0 «šd•OkE±Ú"ŽéZÔþ¬hã›/>n!\ƒh·su°ÍÍí\*;Éô–$Ä.ýå·ÇÍ÷+OԳĆ/2 ’ÒRThú–öy©gñÍ¢%AçëÓ3aD×:ÿÍØaIØH~ZS„VblÊ£çšØá~Kj/hPÚ`¨*ª¥pµ‹©÷M>Ù¡¦œ¨°b™f‹›§pdhª Ú#“…4ìXó> w#Ë£û)WËSt:Ìt eýÈ ffnóMk&S$±;ä(+Õ½vÎU& ßXÿƒ=f\ðwNŽˆ +k’Áw¬<Ô“”ú¨jiäO+ÂÀ⥺»o|ÃWg¯W¿E´š'[;h‚#¨:.Ü2ÀÐÖy}ƒ`‹óa’<<ïòƒ€†Ê¦CMw@_è;L°J‡Ý œ´úù¦ÁÓÑJ·Å3"ä?)•v¾ a±.Â%c±I¸–`Ñó¯îP#:I¨9¼~ÒÌÿZé‰k•±.Š7¢¯¿;¥ßAò­\Ί6Šïý¤[íçs9a•[{!}ìçˆG&»kT/A( tÚx½}!dz\$Ànfì£g‚P~ÞÉo¥5P^è¯gÿô•õLž¥8øªÙÛz…¬Ð²x¡õÜ\¤ˆ‹5G'e¬Ïm“¬ÚýC4µÉ¯rx#ÌNLa‹Ö/ĪN¿£­.] Gº¶õÞ3Ýk³€.úÃH]4úíµiÎ÷Œe-A$F¼ÝKX*ò^UOùdïÆ©‰]Á½*‘k(°|R‚Lœù¬k¹ÖÝÁ–¿l­,B„ô)Vr%7=õ^âo“h±GáЂµÕ§6²+¬ª t£ó„Lû#8¹¾4ÆQæsJJè zÒêVÁêÛq~‘Síož> =V”ÿvgŠ+þ€ , ¡¶à.Æ<¦^[/Õ[àÕ/ó~Ó\Š SˆÎX»§ÊœXŸ6á<³mhÈÍ8‰&Ã¥xÉ!†zÅhÌ®¦Ì›š ÕL(¤£ør [ R`W­Kýt%Hõè¦~7 ½²ó¯dD}1´ˆ¶aøÄ^A²¯SáýÆKI‚m la8ŸÇØê>€˜œV<¡£ÐI· Æ¢§Äé1ýþL€G,ªœk2<Ýj…ì,§ÛáHQ^ëÜŠ ì<ÅÖÄš¥Ö»Ój‡ oÿ†þm§œ˜ˆ=¡Jg²R‘ð4?b‚ˆÙ¾òÉ,Èÿ†  hð@g$}Kå8¦ ÐPªHŽ”ÃÊÌáWàa¦Bɹº…«hí ›ÈritD˜´ˆ( “]æÝò.ˆyõQN5LÃu‚÷1Ú—©°¨'Í„t4n¬ï&AÿÒg\Áy“(n4{Z²e’';€û¾M¿ã ×8ôp8]_ž h §ººúæ5iÎz¯q”„˼àÔx%¢['[F(6«Í™µzÕþ)]H£DLÃì¬äÂòdæcàÔré¹#-B¼9’ì¥7Pì¤2yà'«E}ÇYEiE &ˆ+m‘H ÛB/’œbIã”wÓM %Úµ^@TŲðÐÇZºQ½à –Ÿô†/œgU·<#Ò  ‡Å MÅW®ÌÃÍÐnkƒmk*â²—ø…³ê!pþûøöë#èŽN”ÒY‡˜^Çp8ã€8uÏ“YÝù«©oÎwhvº§°à©`Þ8¸'žÍE­Ú–|ÁÒ¸Ð䃾q2ºÂWAäh ÌÛjw;14ítù3 3ÈÁC G¢•B=óÅÁ&ÕA°ðiû cä·Ë`,°×w›cWÑK°íì.ÍE?ÖyßÇ H´Û¹ÈV³Ì+ÖŸÔ­‡#VbÆ ¿bäpu9èJœ:‹ ßà‡œõ޲]„¯@Ý£ûm¶î‹S‚N®ä<Âm;Ìhb¶â7ôÿ]'Sw\ûÎÜ—0„:€fEvù‰³BÛÕÚ¥GÁ¥^#[»Úï©‹‰6Ë,ÓmPÏöéc1p˜ôÎ1'uƒ‰Ø ÇÂÐ7"â[ëwt¦êþà­äÜ­Ú£>Ž6øåÄ2Ù­ÀY-l%¹wY ÈÁÊ<Ítp%|Ó±OÄ5ÅáŸ)Ö~[]TÏÊ[¾–³ž b@tz‰Žs—ÖEضË$â^56íŠW A‘k˜$‹7x†¥ý8LæíXõ£ð]Í[|s¡!YfPé6ÊŽŽ4ÖH ¬7zA€ Q;‹Õ¦ÉW£û@íV©5ƬZÿUšYÈB(ëÖ°¦ë¢œáWYðß\q#á#ôLçÜ„öPG$` jATCNHJº\æü~+r2 H©¬Ê ¬SÑ -‚ "¿í]O«ã´‘'‘†¢ÈˆùNR®Ø;™œ<*l–™Ô<ç€-—=1¤õÅóƒò±áö|ü¾&¥U-¾âS#—z âÄÑZï1.­÷±•”¶¼Ê72máiä°ÇÎ Øí或FU!Ñ-]§¬dbU¢„ã™Å¸þ= ø,eLvEiÿÊä™ÂÎ÷d‡<ò_ŠÙ7í)¿—ôôÙ ÕJ_L–݆‡y«2’ǽy*'S{í ¿+g/Ä«çZ&$¦¥ü0áÀi}3Ñ­•ú¹Í6Ë ®×;rý5éÎy|ØÐ…p£L€#…"ØQ)¾’;Þ“çß”´¥ÆØ¥èúç²_È%‹ãÝ—®Xî×`¯” vh¯ÒÈbTñYÈ\Á"A›XÍ™ j²¶ŽZChN¬ùW õ9=iO~iÅÖÉÁ J¡R#1‘Í.—Ð:´Baê€z=~iŸïÄÎðN¬vœ‰Â;w¯föÞcʦÎ1ÂNÝÍá݈Œö ¶1þnécÛò-t.š¯¬òi©ýX[ÂÁ¨ £±°a“%h\tÛ™ƒí(£>t>à\NbÜ+ÎÛ2 +ÓI©‹ô§l5|ÂhÿYŠ–$A Hs[0q•â‹`©Ilù瓳àºÞô±Â~ö•˜yS¬Ì¹ÿ›HuÃǵl¼ïAÁЧˆü8d©š¤Äó¼+iø¯'L¢Œ—Ï:Ä ÈìÎeâbáÏ cg_­Ýÿ[^ޤ¿8J1§Ð—?[Ô(Æv¶[/úx·zËßÕ?ì°Ç±ªÿ›õФSo¡#K ú‚}­PÁÏ€ ¡5¨/ÇH¥¨„ÀV¼Ö0P®P5››’Yê>óêg¡´~¢OgÔˆwÙƒþø ÎÁ’ð>ðÍaÖší^z8!ceVþGãY\]~/åýI´iô­p  Â€äuÿ¯1& ±Š\ó®÷|¹ÃÛÆòî‘×Þ5À=^Œ²Dpû”óÑQRs´ªXÊ~.¯ÅÁøŽ”Ä‹¾Eqã!.n•µ™>ÅhŒ™ 3fñûòîƒÚf½Ho)æ1½ ËVyW|ž·íç„6¾ά„ÀtäzÙ®J{"%øç¥ÈÍôhîFýA·¸† Ùßògöâw M‰õð³—ôN;j‡pÁœkêsSoB2m(ŸÄíµò¨“voƒï4zÖ*e^ºF¾úä€=gï ‡7´Õš`w¼µšÜ^ÁƒêC²_¦ë’„»(£5Q–žs¼®¬SHJ:¤·¾ÿËöç&;'ôžˆ®ƒimêÕùÓÁ¸ž]—FŸ5ÕÛ n볊B@$Á>ÐZëäL¤Ê!‰i'd çy†W¤ ôª§ -½‘μT¦€ç$äøWrç(X‘2Èé2Bpøˆ‰ ÓGƒÙ}@Ïn ƒP2×ãËð€¶¢<—´Àx_nùòSÐ>„–®âXŒ=ôwdPÒ2õ鈓®®à«æµYÏ”ÁA›Á{ÿ1æME~°B‰i‰PX+‡; 6‹ßQ8~eޏàJ ‘F0¥ÈÉî4óè¼ÇM„ÄïzþÁ¯‡.ˆá+ïøoz¨´*α(ÖZ=I¶36¨8êÆ„Ÿ,ðÏ~ä‹"óÒ ¡Ö”Âç%ÕÞ0Ò¯§¸RêT˪C.>x]¹à©+Rpw,<‘Q4ZDµ×Ĭt/üXQçr¦ÌYØ,I”Ì3'¥ýËⲬ¸‡¼|ÀýÍ6ä)P]`‡ý%„S =+DÊK V/{´U@õW/M}Ê'˜ æŽÀÝOH*ü›oÛ¬)©óû.4ëHÖËu¯~Ø´¢$…F»ï‰`V¼QNfI?˜ÉÁz”§Ùs•º–÷³#ÙiŸ£²år›tÿˆ[ivï§8û ³4<~¶ #‚¢ëHMðŽ»´-“z5ð†ý®¥ËæÊsÛlÆw†ðfpþ|ý¡Cþ±_LœÇò¶äí êö ¯0É̦ÊàñvPLZ‡ë¹œ}äѱهrû·DšÈ<I%À"Iµ° æ}8b [ÁØÕwºÕ…KÆF0*cL¤G3R:¸¡¸D,iQý¯zT¹×9ºžx€ŒÉ€d<÷|qŸ6ú0=âös©ýÔUÈÊëcdU.ËÀ¼9†qp‘FžN?P@$ü©xž‘®! ÎÑI³mL™ë×W?)ûÆäj1è /5ÞÖØÈ9ÃÑ„“‚¾îu"si  ]¡ôGPõ–´äSæÈ€¨é[±ehÐçC(ãAÍ™Œì‡È˜o,T쬉¶K?*Jö?ÖÛÝŒfí2£î‹÷ñÖrVñR~Žg`ÌFÛD óב1Ñþ”ãÿ¬º„Þ4? œ¹Šx<³C)Vÿ¯/~/P„cÙ[5-IŸ-ç ’ÀxWz«)Úú†~ÒÐ~1ÐŒöò¸Û¸8l¯°ùÞ'/'…\Qøýî@e&œeÅ…póˆþE}ψ¨m=ÿˆBërýˆgÿ²àÕð­Í4bR“sĶÑ} op4Ð?lbÈJ¦˜ÊÊÓî­·=t­•ç¼çmˆæcäI'<2Ý)fA¯˜3×!•6´Ç.8••¸v8h³/°Ƚ< NI¡áWÌ"†¥‹1€Üè=ý?ëðÙ>a ¯K;:bzcù½°ËÉ,Íè"&a~þ$Ò< µr»>4}ª³î´á):ɹ`1^76Çò›*Ïõ®}WY«#ÅÚ>ê[!{ ñJBÎßjLô:Z¾<îLf²Ãéš3$’¨ôéIR <*ƒ£(²I>²§íææô»™ÄrÝ\‡i_ÛñJ\JØÛÐ:Ð1€6ålu‘¢íƒ€”4íÏI)oFW0Ý'9nÇ€økØ Ô £:WïH•¿D´Åú«ï œïA!ੜš“}á©'~ßlþÑĬ"c{òd¼ÐCó”Dž‹§°–ÏÞqª²&¡É #n LÙ®m˜¨ÁÁ†¢'`ÝÙµ®ÃÙuÁÕIX&G:ãtëÿSq"x­‚Øwº‡­-éyxYrx³-oýG«ÅéÖ _pmß± øÄõ‡ìêI«äÊñI™{¸¯îÞFvùÔ—š^pMb s„FS¹~¿]³06z> stream xÚ´T”í6,)©H7ƒHç %!]CwH90 5ÄÐÒ¥€´¨ Ýtw‡´”tƒ ð¡ï{ÎyÏùÿµ¾oÍZÏÜ×îëÞ{ߌôêZœ’P„Laärñ¤U´ÁB^.#£6i û[ŒÃ¨ sr†#ì…ÿa íƒ ïe2ä½ Â èb ò€Â@Aaˆ‡Gè_†'a€ Ĩpö0gFi„ƒ‡ÜÒ yŸæ_G‹9+($$ÈñÇ is‚›Cì*¤Ìî>£9Ä …0‡Ãÿ‚EÔ ‰tæævssã‚Ø9s!œ,ÅX9np¤@æ sr…A¿ T!v°¿˜qá0´­àÎɵH7ˆ p/°…›Ãìï=\ì¡0'À}r€X æ³ÿËXù/Àßwrÿîoïßàöœ!ææ;ˆ½ÜÞ`·…Ô䔹îHÄúÛb댸÷‡¸Bà¶³{ƒ?•Cr’È=Á¿é9›;ÁÎ\ÎpÛß¹‡¹¿eY{¨4ÂÎftÆù]Ÿ Ü f~íÜuÖÆáfïõ7°€ÛC-~“€º8pëØÃ]``™¿MîE8ÿ‘YÂ~žç AÌs7·âþ^ÛÃöG ü-¾gàãå€pXÜ“€ùÀ-`÷8^ÎWéäóñú§â¿€ÂÍ‘3˜%Üç?ÑïÅ0‹¿ð}óàîCžûÙx~ÿþ}2¾/(ÂÞÖã?æúË­¨$¥  Êþã뤤î/N^~'ˆŸò=Þ|þ;Ì¿/à_äÿHÕ!ð¿‹ãùOD°½ ô‡ûËû׿ǂåï•aüwUÄý,Ã,ÿ}#~óûðÿyþ¸üÿÍýï(ÿ·Ñÿß‚ä\lmÿ¨Yþèÿ?jˆÜÖãoƒûQvAÞ¯… â~9ìÿ×Tö×*«À p»ÿÕ‚‘ûõ´·¼qN ß_r¸³ÜU‡#Í­þ¤µâ>‡-ܦŽp†ÿ~qî½xxþGw¿uæ6÷¯Šó}Ãþ¨`÷KõßyeíÍÐßÛâ@œœ 8÷ý¿Gü/àýšBaîæÀÍe@Þ»î9ú,N8¿Û*ðÀ-ó[ô ¸!ÿA÷:³£ßÕqCÿnØ? /€ÛòðÞ×ö?xïkÿxï‹øäp;ýò¸ÿï‹rùÿ‹¹¹‹“Óý»ðg@ï¯å_øÏ#ƒ¹ÃÌqf§æ"ÁÖÁ?Ë$©Ü8¿ƒøð»O"ΰôÖe)\75¥E/Oy³"g$['7"/— wAywµ6ú¤<6&ß¼S"…Ig«1,ÌÖ8¼G _\í:+»€6”ZZ^¾âµ‡Z’ÖiöºIL°’q8ŸJß–eª+¹(¶:|È\³Ç…‡:ùüùs^<Ôà&Éô¦©rɉÉfð3ç‰áýx¹íË”®ÿj÷\ |%…jgßAé,}G,y«]€RéÕ(`‚q½]–ü:Ž%ð¬18€ÅÌyPKœA$¼>z¢p² Ö„âõ‡“0ŸÔ» ~¬4~ùÙ¤ø$FÓ7Ò’Y¥Äœw/âǾø¤­ƒ?CärºÜF‚W4‘C¿aFL}@j²ûmÛ÷´"¦¸H€í·¼]Žž±É¢t·`ÞF¾ë•0ÐRÃ3ýýeX³9˜XšBŽšˆ>áxËʉÞ~°†¦^ªÑuÐÚ°.`#¨çÛV—ÙŸSÜÿEè.ßU]Uü¡všÄ¬Ì»kO%eɘ U[_jè~OqóWj*JXˆ¼šØÓke¼l» ½k޼ö!úÁn(#ß58|NÅ™TØÔ0N奟OÒ¨Òõƒ­2oáêåpiöc5Í E¼²¡5öŸOo–C’Çß|lsUÛ‘ ãÝ¡9è„*–”Ìïg¸ÿ²EæO¦Ò™ôø”\n×í“ìUz<#?kl4:^2¸èÆu»!Áq ž›Éx>8•bâ=›;ƒ¦@þr=ýpÜy\uä2Œ7•S8ËO¡—4Qr<½ƒš[^%ˆ]Ïûƒwd¸ÍÁ±f@|a#êòÐæpc·öðù$ï:ÿ[µ€­Â“’»hcK•5=Ÿ tj`'ÔÙ |BÝåé~Î0 °zöYV »ñ§y2ßÑ90ªÞŸ$ìM NÈ]×Ñnþ¯¨"´'¸=¾µ³+wߎ¶ ‹óí0æG4 ò°Z'”Î^ÀP\ºíK4p$l-µÎå&üù°@¦ÂÖFB¤@‰jLÃåÃTyEEw„=÷C¹j¡ ’»‡¿Ò³‡bÄ]=Åâðã†Âë½ÕŽáâeÿØøYðš7šk¢½ð%xâÀEv‰‹+¿N)Ïr*O¢ÊHqÇÐ5kª¤*>¡]_e£DHV&mßÙa.ž=“ع"žkšÇ|*ý4Ï´ê™q7€ü4ã êLH¬¿±%ŒTÎTcGG3.›Iªÿ¢´Ú¿ŠÏ§D®ÄÙÌB*Jcõ*‰Ú9;û”E'мåc^ÓqÊ}µ#¤iÑ’–¨ßø%É*¾iᕲ²vº4~“ØÁ¬TúlIùãÎpÈÜ o9QüØ”¾Ç†ŒïI‚Ñð kJéâ,lˆ¶ÂIkƨ»ôÓÜ”2ÆÄ &-·“º‡ s*ýÂb>• ñe¤(Û|ª.~À¢î>ˆþuD’7Ó^¢³ÑË[ø=:s§ûùF5ÐI®‡zá=ÝaÝ£Õy?ñ§rÁê¹>Átý妽º [Ш㨨T¦K‡2è-žÚìyyádKvp"ô™ˆŒ›‘õá»eÛJ…õç„éFú5GÕ«R¹„8PWào‘VKBMm†×ðZvþPsÆÕÎÐë·ÝÙ“µn/ëYZ“~Ý$ZS_„S)…ã.W’¸øÜ*zØ)© ›O…œÙwú2pãovF,+ußVGe–%G•É¡^-× å6jc³1â#×u+ö½ê³Èot2†Ô»‰e¥[Ñ ·G;{dÅ“Ÿ¨y2©[ø`÷LÕª\¾*µ¾­Ö»Øk ÝÄ-ûuóqÄ[¥MéÖ¿€Ⱪ^ºdñ?}¦ñHEò³&³_]}︥\•“SšI,oMEŸw3kn¡j„[A>‡™]Ø {¢i7Ýß⣠È÷οÁpÄs€Qcí onañgýÁÃÇ'= …ÚfEņžª²ëôꣴ1úT {}$!@ù.”ÀYÜ»gžÒk©¨õí…)bö²Þ”#Á«‡NÌþî/?ïb(S7M3x ÔoKP|õ3©!8©à:ð¾Yê…`ÎÞ¢œU™a½l.P¯ÅÛ¶Îsö怒Ú|3óñÝ)ë xEx'4S%²”Dùʼ…ã@k*L;b6U續àd| ™ýLÏhm8UígŽY¾éh+²Î9¥ÕãP÷æçó®uB'çpw§§¤Jz‚àõ9eW“rA5StL´ŽŒàåûö\^™åã ì¸…wÝ´Ö \R~Üžêù¯±ÅðöʇW‚ïUùѰ;ËüGà¹{‰Š#yŸ²c¯$ýq±Â”o6ÏòKïD%I8=™).7™mÝßç°fżEy3”äÑìŸ{Ä)H‚~V=pËžc’=º?Wÿ8°¬;ïë•צú³v©íÚüÇ'H_A•DZ‘½óîîýdvqUù·‰#°ÃÐàØ(‹s8ˆ©6ÉMiôƒà ‹K-ÈCá‹ðE‰ZÞM—.ЉbV zT¹QCLš¯B+‘áxT¾xæ#¹ Ù/"§„¸°ÍµîòÜ( ÄÔ"­`?oÝû4ÖþüÞѰ;áÁ×{\‘ÓéhÓ úþÓà'0 =VüB®X‚/|7•[ÅRªÕN…]A¥¶§Ûh_ê*G*;¦ýJ[‚(c&ȵ+¯ŸN}˽8”¡ÙÐa— Ïí…æB»úúdòŒ‘-óËÑÇèF|ã›[;I`G­¯'-Ëã…™ÝUéDÈ“áLªÂ½³ûà&J,9 q dk-׃“Ï/ÇÝ d9kÚ£æ/E3ÌÑyGŠY?žé!΄‘ޝ&Â×I8ê…Ob°‚жÎTtT”×¢¿ÛÌ ô—“ÞÊ^?ÔÔ’‹v×üD@áëró2I¼âש¿³õ“ŠAeѻԮ…\/ìNeñšÎô ¢ušoÅo6L¶¼D)³‘iS'˜bÇdÙ³ó‹á؈6äZ‡&åœj2c#o÷ü€E b-N ±¥®/®Óø,l36ò=˻ֹ°ðT Ý#B–ƒxbÈzC~tðøhåSL­®…Ex2Þ”I–Ð f8è°ûuƒžF%F"êÓBòk¯ÅyÅ|h¯c¿=Ù‘l6ãØ×}ŠlZîý¡>{+—!@3í(`™¡P³´ß+m2 {ÑyèÙXú]·§ Ó9]{˜2±·Ð]ç—·›ùöRS¯Ûh!„.Æ 5£© ›$\Ÿ ¹”9äט6TÍ2×ÌÜØhÒƒ¼ØÏªã('ÎÄ)[Æå†ÑDš“š¦vN«BQùcÔY‘\X9\•˜bÇT#M®ì)ÆW´enM7Az2.Ö›ªöàyòP¤~]Ù÷ÔpC ÎúKôË–¤XCQµ<7ë<­ˆÈIFÉu‰ô£‘ñâê¥ÂD²Ð±]{ŒßØUKíŸ|0Í·ö0y¥¿ù¨¿Ó 3ÇЮ~óàÕ˜Ê+€§‰™¢ÂìZêIP”Ánrÿ¦ýYéÜ-$‹÷Kùá´ùƒëA†‰Å'½ÁýÇe\K´›­~ªÙ̽ѽi-øä!5$_3ÅMDLŽÏ;àe¹®'ëcüòM5ÉáZ8 R !‹7vᯤ¿Ë]º0ÊGÃêpC!r[’[dC9ÿxÖÕ¦ªt? 䢴‡5¾žÒÔÈ~Ó2ëb-|¯˜»Â[¦ 4¼.(-zZéÌѽ\F×s¨,­@0ÊÄ[64Û̘c™=þÉM¾Ùïºzö'&§«JCå{ŽÒÚðz/‚!ñOIø؃V¼‰j¢ì~Q2¡¶]—¦ö^ìy^þËš³Ž+@“Ì™zQ%rAî´w8Ïúgä¿&šÌ‰:‚ȉ» ÎcóqVvå};d·äÅ¿’÷¨GÌ/ØžEÊš†åðÕ(ŠÂïx?ÈÛ²ô‰AÐL#–î:Í{Ç\nÛåEÇQ¼µ]6cIn»Qã‹å;QíýºÁ!SF(ñÛÈ39¶L¡ð¨w&¡ue*5ÏRáx5Ãcß"'&zŸ )i¾’Z½Þ*N& ÁÊb¦wokjFwOoÆS&ºOÛ4%nÊ&¹'LšQ3tºP(ˆ}bH K~Â,þ¸MÙÞ@ߦˆ øª¤w€-ß6]"øzmÊ‹¬„Q7;”Hí~ê=lÐŒ”ò f|º¢«¸®”ÿÜ¢I{»«¢%,‰÷©|‹F.¯b˜•ˆéMï‚o×Kç˜o@?ºUi‚=%-§CŒÒ‚8p8o>}é$ÉcÖ×$Åó=¶Í«õIü[ï&º×%RŠJ<Ԙϭ'N^…œÆír¾YÆÙå`|ÀåX¤ñøØY‰kùñ®¥ 0Wu¢—ªf»!/4û6„L£w ¶]qÎw•jp}TŽãŒ£4ÙZ’hr¼·"çG`!òåg|å¦PŸÌÅ‹KË|FÁ‚׌dží ^¥¯ÀÀ7 ~}æÔË4ùv’ •@D‡lS{eué¯gNªXÇ"£lÓgz‚T¦$} Ô©Ž…d¯˜£Bˆá–É&¬f¾7MÔßüË1GàŒ'ô‚Áþšª‚|Èk[ hÔ÷™RÊ’Cºà••c¡Í I~=_pÆMΨé–QMsiÃMÖ‘ZÓî\WßÃ^~7´•môq1d~IŽˆ­2^~Hµ ‚_†²v¿œ®Yc ê£v;2ËIPtè~L˜ Ñ‚ VǘÇ]‚5¾’ýà^Ù¤Àç2{´XH §}>•¸ÞT dùQÍ>}£Ý!¥®·ÚK¦›U]ñ‹¦ˆÄýÌ~딤´¹k2Ë0[(q&”°eò­üùöóí;jÕ~¹‰/MjRCoûDDå%¤Œ²öÊüÔ¶MM= 6w ¥w™Q2‰“SÆòÐi\¾Õ,ö¿y>øFîÝ«¤'l ù /¬‰œjçŠ"ô1†Ç8N| ÷…–ÈYKå½êh1¿» ,›ò`k²¾ˆtó|TÖ}±@ç¦BòPˆvo(±Ý¸ÖTdS,u:>K|sü¨C`DfûQD¨¤õ¸!ȧÀéºwb~ —ê×Loø§@ÌD‚Ô¹ll°1yâBIZ•µ‚¸ÎV|õÃêÁ¼·´j¤ïížkÙ¿þ £íT<ÿ´¤5YzB¯êÅ=0ÀšÚCzM¥5L2-ÍûmèTkýãØ!:1þK”™×jÄæØÎZ"—.øÛ͉ÝÞæ ‘>”ûScn¥ò Oœ¬Æ—0áÅl0ÝdKU\r›jËu˜àX2!ë<’áôC]ÄVåäm ­m„fº”¢ Óͤˆ&¹§q$§¸Ê˜i¨;}’`©-Q¿²åØ÷~'ùX÷àÙò8·jqu¶–ȪzŒüMÄÓîÏOàd/£ÊÄÑéâè²Ë¹«a ‚˜ÄáϬ9Va?Ç$"!ZxÜa­âT¿ÀÌÒÍÝT±¨l‹QÙÁü§ƒã¡#€ÛƒŽôáÎ7òYO‡|Y×ôÚ#Ôë5²LmTè0«%6 íÔüÃÔ²itqA¸Ì×£Dê:à‹1ØBX*ÃMŽW¦5ãyÝ~:JþÏô»ØÕ~´I÷¡É2`{¶X~ËsáÛ(~¤`QË4¯½üÿi¯][?É‘Âc&N¬db³ Õ×êFÞ‘ø'Ÿ0\2g ý.0„Õ›g£å8«D26²>L[›¬Ð\삘³¶'¹L?’û{#»ßN9¦'!†÷Ià}D9hí±çПùcAƒÎÄOñî>›]9¥>ß­aà Ø}mÂÔÊ‘}WQÇæÿ\“¥i‘ϸö¥äÉŠ"뾫 &mú¸VP’/\Y‰’¨\QòzÊÉî³µ ÜÕÆþ>b1¾ M©rnÛÆÓS‹å{-þ-PçTîB¼r2œâ þ»Û'Õyú…Š~X°&‘5'J<Õ Ú¤â-9Œ ¤©íü«òÜ(ß.’ÐÛãUýƒËÖÊð¸5û|!/¥ÞÐ~¶«¶Ì'. Ï JfRLПÅ6 hsÆ¡üºÿ6ã*΂³“›¢–øÈ{9Ãv©ó’5Yqs/y¤-‚ÔvÓ=ƒ†aùnwwZÝ…ûµÜkgAPäµ·&jëƒIçqïÙns´iÇ´Uq(è‡ìxPWhª’¤'}NµçQ)ŽtлjNk8õ¬f°F¿Ð½8飊píN'ëÆ·)’m!pߣjýï³uWE G&ø ²r(C@ˆŸ‹Yj‹e•A]ykT}li[›¹ÊK"95ÿ=p. *U$7WZóí~È‹:ÕN°¸%Ϥ0q¥Ó·Ñ,’Ð{6~ÐßL˜(Äá4úéJSàs¦²ùž¡ÊuÏL*éûšJf†Ôòb5رµDùá- ùÕP*êŠ6Kˆw6í øÚ‹¨øqÉ’_ñ"Ë/nG¬˜h:„{ù°€ìWÅÈ€“³ÑÊ&WXŒ³¼[?‚2ânç6†)pa%"Å&†üÏ%Nž8#{´ß6þHˆIªezѸºˆÔ{ÃåYßJ>·»ŠFé»v)˜€š\MÄ@ww¦¡jõÝÅ”.RøøA¿ñèG5Y`ýùÃïÎ YD>ó)ÍOhÐö^÷]V]¡§¯-œÆ' ‰¶›šàêLúŽò¼†Dvc0éÇ¡ ~Š[zPŠóž¾ón`®n 7Øì½j¦ºëÆ)ŠkIí äåv…´NãÏòdˆA¬‹MÝ®¡÷ ²&iEPs‰ß‹%ÊmRfö‰À….CKÑ:‡VŸ`W+³_W4ûëVÈvŒm~©{)­å†ÙA=gù¸Ö±û]˜$ÖgH¯îg¤ª8KÚGáK4Gò¸¶"ƒ¤“ ÒÅã b–âÏù˜–­t~ˆiƶ°-U†/;­"Tçorù¨¬…CSã½q9,ße#Ò‚OgZ\Ö–°{?„vÖS)néœÒ`Ë5à=Â/v0læaظlŒ[®Da¬)¯ü5°†MÀÍ"ZÉ]pû<æÒ «G‰5ƒÜúô¢º{ÛL¿N¥¿†ð°Rü¯Cž5tÈ®l(ë–¦µ¬ÃqÛƒìtB$·ùM*>r,m·ñ—6g<~h~þíŠÏ¢\~«1)AYdåUXmšæÉù«Ê˜V ÿ´öÂ-¨6¯–ÖD\ÑlÁIÂÚqÐGJòçXňohÉ·Ö‚xÎp¢Íô=ÍLiG÷VWÂüWP’…Ö–¶¦YŒ\çözJ޵åÓ­\‰u gL9òLv qØ„`JÏáçnÝõ˜émòc2š´” É|ó÷’þü0VIG­Ä‘ÙXÿ¦sË ÅÏÌ > stream xÚŒ÷PXÓ cÁ%¸ÃîÜ=¸ûàîÜ=¸»»»»; ‚Cðàp'»ûn²ßÿWÝ[TOŸî~ZÏ™!§ D'hlk³µq¢c¢gäË*+31Yè™áÉɕͬ€ÿ“Ó«Ímm¸ÿÐv8d"N EY[€”³€‰ÀÄÎÍÄÁÍÈ`fdäúŸ¢­7@ÄÀÅÜ K²µ:“ ÛÚ¹;˜›š9xþ÷/€Êè=€‰‹‹ƒö/s€ 5ÐÁÜÈÀ kàd´1X”lÌNîÿqAÅkæädÇÍÀàêêJo`íHoë`Ê÷žàjîdP:\€Æ€_)ä ¬ÿ¤FOP63wüû@ÉÖÄÉÕÀ ¬Ì€6Ž gc ÄP’”ÈÛmþV–ù[ðOqLôLÿºûÇú—#s›¿Œ ŒŒl­í lÜÍmL&æV@€¼˜ ½“›-ÀÀÆø—¢•£-ÈÞÀÅÀÜÊÀ¤ðWè1ÁP†ÿäçhä`nçäHïhnõ+G†_n@eµ1¶µ¶Ú89ÂÿŠOÄÜhª»;Ã?͵´±uµñü21·16ù•†±³ƒŠ¹½3PRäþ·Ìè`cddädaí@7#3†_ÊîvÀ¿™~‰A9x{ÚÙÚL@i½ÍM€ ?ðžŽ.@€“ƒ3ÐÛóσÿ"x&&€±¹‘ÀhjnÿÛ;H 4ùƒúï`îÐb€ñ×Ï¿ÿé€&ÌØÖÆÊý·ú_-fWVU× ù'å…„lÝžt¬:f €‹àý_/ÿæÿ¿Üÿ’*˜ÿÛþ$mLl\§ªÝÿÒpùg.¨þYš÷€ÿ2ÈÙ‚¦ ú=üÚŒlŒF _LÿŸWà/“ÿ“ÿËËÿëðÿ߈Ĝ­¬þ:§ú[áÿçÜÀÚÜÊý Ð4;;6CÖ´6ÿWU ø÷:ËÍ­ÿ賓“hCmL­þ-¤¹£˜¹ÐXÁÜÉÈ쯉ù_@Þ­Ìm€ ¶Žæ¿î#ãÿ9­œ‘%èNq5ë¯# h£þË(jcdkükõ˜ÙØîðŒ ùbfcx2vÔèö×hèml@&PvÞ[ø_-eg0þýØ B¿€Aø7â0ˆüF\Ñ#€Aì7b0ˆÿF̉߈À ù±¤~#»Ìob—ý@ìr¿ˆ]þ_Ä bWø@|Š¿ˆOé7ñ)ÿF ÜU~#»êobWû@ì꿈]ã_Äb×ü@vÿ"µh_~]…ÿ“21ƒ¨ ÌA}·2þ+geþ%ž¹£åïBƒB6púíäÑð7YY:Z8šýáŸõ—Øá¨ †F@+ ‰Ób¶Äoé¿^™þ[þ£ÏÅò¯üÿ€ bô/b…hdkšècý%±¶þ]˜_£Îð»", ‚ÛZYý3èdø]Ðp3ÿCÊþëÜÞteüëhÔ­ ¬ÿðªÉo/ s—?Üþ:¶uþ“¤bú›tnúëþ©JçwµYAE4s·3Úü¡’™ÿAÁ[üA3bùÕëwì ÂXýÚøßç êþ‘èÂgøMÅòeº)~DmãlmøëŽ6ý#$ÐSÄ`û;hOÛ?¬˜˜@‰Úý>qØ>/Øü§ÿ¬LÿHÿÛ}VPv 7·ýÝOVPí¬œÿHôù‰Áþw  Ú;Û: gzªþþ‡”…ëéI™˜@.þè (íßtl #G µùÇí—ÐåF±œ8‚^ßãUóÿì(ªß´ ŒÁÉÌøÇJåäjû‡ȇóï¤@œ}Ðr4²uø³Þ ¦»üA»þ±˜ §n@«ûÔ+ß1ƒwS‹Îª WÍÕn§Ýû^kwULeÞþbï…õ4wB3…SúÑÃÕ• ÑÝ*aºH’Í­™ØÂ(îT³95œ6ž#»`i´Lº–ûŽT@j͸J`¶]ì|R6dÿ¶W¯,÷ѕԔ¦îáøCóßq8Ô‚ffˆOKs²A¸Ü F¸›Ãê¯fÝPÁAAnÈ`<8¾èd¡ÖøEN”$BëÁâíO¤ÈïÐI(8fv–&Í¡rZ•äXBO£c—Õb}ü¦Š©Ò¥õ:a“±¼Jó þ-=¯(1…nʶµ&úãWtjH?¥LhÎ÷j~qs©Ž¬ ©öS£ÑŠ›?K§@kÜm[ä!á"hRð¾÷îŠÛìîŸ5¸Y² ×{žŠÊY— nًܰÒ=ºr—mž§v³nYÄÚÓ¨JƘà;YG¢wØE¯ˆµ3ñdéñb(ßÏ>ÌäÑ9b¨î2óšž¡¿+V„ú:Z#½iaõSwBmÝ;bcØ“¨9ïüÙZlo㬜0³!¹u1u”%VLú“$Vp!‡–2‡àºì£¼r8=OôFl¤Äy°zmwÝç»,Œ=‹A õÑeçrâŽ|¶áv»µX!ÉŽ¢o¹áJ¬§Ò»Q¬ŒFà© ‹¬çÎZ'H®ýIiY»™ÌZN3s£cI«ù‘ üfשá-†ß^¨W!È|ᇠõÃÉ AˆAéaÜ~oIüs.JßG—z©Ìž •Gš`Cß—£‹48ݽ]0Nî+ÎùP‘žÁ6yÕáCƒßTð£—üØ\à5k}õ=.ølè¸2ØŒ}(žÊúŒØaíml+S‚“è´ÿ\óFžÒlž/6n~˜®"]fbæe_‘=V ŒnÆ»ÇHj&S×Û}æž\V†¢œì–nòmí5£Y&‚Ã÷aÍô[©çW~¢nþ”m#e·Gl¡bF>l,º˜·;¡—Œ0b]™£žî&X| ³%uB2Â{Ý[긣'¾#™,å–®EÄï]=–˜˜žwÛå>òš_ËQQz–Æ,Ö#»–¿(í)Ó)9E^/Ægñ·ë™§§zö¼‰nÅ*}…Klç£ÚâNÑu¡z“heC#¯¼R&ÆV#ƒË{Ί¥„õ|KWñ{¼›æaÛÈ(P°\¡ÉQ]óØËÿœn„E‚£Ï¢«Œ Ÿ­àOWS³Ó{T§s«¨˜^&\( ¥[ÍöÌEz-xú†Xè˜l}øý‘Àç:îb*5Ê=ZȰ¡Añ2D\:‡ÏʹÁ‰‹Xæ¾P(B´–™%ûo}¦ÊEIÒ/ÚW4¶JõÏøPguõ‰À¨+ç)¡­S¤)Q¤·ç‘(ù²Q3D·äh¹e<ÕXÄ™‘ص³·øéÎu±Ô£(}×n|İèíÍRúßÜjàg_>Zù”•¸N¬ÈU©ØMëWV^o§ÉrÕB×Ã23t}·Œ8Ñá8à7¦<—V)Òiè?Ê­fÿNÇÇ|(×µ=^ÿõ   &’r·OËLºQY9F²ÜF" hõ½)µsòóeômŽ>ÚÆÏ¥¿ߟËÊ"»ÐMdªPåL­{?ËÃrTºg+JNäÞ(ÓëSœxRáHrÓ Ÿ˜OJsåu»I Ò¡»l‹>-°ºé±…îÆä¬´=…§ Ð^go[±QŽnØÓ&Iü¤ÈÇ×p~ƒ““³¹Õ¿|cï?1«qÜ÷­ÚeZ‰îÜj1Õã*S·K¶,¸úÓA‹ØwªPW–lކ(Ò5rỎV\¯‚ǽ°Kp2ƒ]„«#€;bPµ_£õŶ¥`äßõ”¿x å÷ç‹Ò¿çÌÌpÒ§Iž²=Z9J€­ªDò ðÀÐß{çõâSi@]5i¼¯‚ óžÞI’ÀÌ>nù%”ˆš2Çþ‡o[­o5ß~ æ° Ü ËñHÌÊ€/—¼S“‹WÔ9›#äU«ÝЗ—Ç/œ0›‰j)ö"2ƒÑžë§úuñ#Æ® ø^ËHâR¯ Í”]šda+`©_d§ 8£ ¶¢c†4ßN„FƒÀòrlzVËØ}Eí¿U}OŽŽöíÀrl% ð$UÙ¶àIØÆ›•¯YóÕa¤Æ³Ý»WEó•K´,{iA¼ê›s+×*ß–¾-®}×$ƒÁ·O‡ÈnÛI1JA^&\ÄËü=êôÎ#Bn&↢Oô®j¾»:šéë{ãG¬ˆÒ«1IèIžv_l´ÎÑÆ‹V,Eðî—ħƒÄ6IHÚ’þôÌx¿Ÿ;†BÙÓS#OËœ^ëkâÓY_7δyÚ$ám†¾A1‡nV»«OAcä0½ãçÞÂü†Úš´ûˉ”¨ ‹Ÿ¼uö6Ñ40\©¨å‘– œ òŒmš½O~9A„´ {‚ 8‘dw¹ñp.ˆ0 €‹„3wk0ÚÐwXC£pèÙ'@B–<9‚F‹ÁYmÕãC…õCbR:R2~s †³«Aö#Hÿ}A_åÍìÎ2÷›p¬݉¨:wŠh:3b’UÊ–nç馆YñưôTÜð½Ûgåô‘3ÉävöÝe×|X>|º‡n´«žºŸ'tÒ·Ùm«šƒrG¾V8IÄ+¯ ?O/åyfì·ýt8ïÉ0Ü[š…Bme|=?˜ô4UQÄoÈï©#ÑÊœŒó°Ò…Áå<ŒšÚÓŠýÙÄ?Mú|ékÉŽ˜#ŒË ÐÀÃwt =(»G¸w§ ÔÊRùXqhàŸ!ŠØœ7?H)_>TÆK„b‚s–h|kƲiAŸ™ö|ª¥óCé¸{€ÍrzóVx:IpÀÌ+–r«Oä\™W$XûF­í9¦ï¼ñª…ŠOÜX|M~ØÊÒóÄѧ½è`ã,'EÜxô1}™úœ#ViYQ‡Pÿæ²KÞ¢;¹¯jsu¦F ˆ·8ãX*»¨šñ¾ì.%éªw ¦LêBCõb<³á¤‡©÷Ú˜TJ† ‹]¶a„d0ݰxâc/2ÁYW«‰QóÌ|¶CCg5¯©Õ§¨³ä86jéé~J»:ÇÆð¡¾z0l‹Ž[þ7ë˜CG —Ûm–ªÎ{¦ß}žs#–~¼õ¦dµJœIظ¯îÖ“—ÜlåÀMŸfðŒÕ…òp§3v˜ÄqC2ÁÏíœ ~@ãÚœ]º¸ \žï¹mPÊ,Ý¡ÌÆÃ÷ðÄm=6l,œ7²T0„ý4äöž1·¶¯ÿ®hÒGr¾ò] ’r@K„bÙüþ» ‘áf/mµ©¼ %'æèÓHYeÕ;l<Ñ…`J— &,@ÈNpƘ%î•æÀjŸ d¾â'Ç=I¯òœ@ÉGüW»)‹tÌøE3u¦ÛzÊ›’™7 ºEö(¼ÓTgW>½lâ=@ηz±SºøÄzpÆÉ4VåÊ$žDæì5z.ªòkXyÁ°à±&ÐIûÙþef›¦ ©ní¹5r³§Có*Ìü—¦Â?0>ú•cÚÁ{kHÂHkù߆ÒvÍß ¦œ)*LÃ(XšóÞª)ƒïÆÄ"më‡:Mɇ~VJ³šˆù©ìI­Í¨Œ0ID>"´º›#—ƒXÇÿ†1!Ù÷õôEæ¼!A½¡iõë½H‚ô.ŸšCërü¢î½qWYro¾K5F=ÄQ[s@ÄD‘¦Ù胂9Ä«cùšz'áKÚÂŒµu„oÚheµÌÑ€N†„W¥R|_MmH3€ôf¤¦»øünœ°¡xw¿¦§}¥Ìjù¦ÿ>u0r[r¨ÄŽŒu¾w,øÑÛýŽÜVHCÙôm ô*t­7–r®²AÊT¨hvù4„ fú‚ivQûÂ˹z‘SS.ó{Á%dÏÍ’»³£€åšœ¸òêã¥ÉJËŠ»ÆÔÄûVr§Ø_b Ñ-FCJ1 \;õ‹!q7qX õº­û?@2lú|¼¸®w6¹Þ΃¿ ”„“ƒÊkßæE··(»H}?}œ6_G“Õ”+ˆ6e»Ýq‰u}^‚‹$b8ÃOœ¥$˜ïÀšÁsÉ9¡â~âòow67Úsœü.åë o¤éÕÔ‹ñ†LxDk–È<|x€0Gr öX·Õ5ăÇâ%ç!öMƒõ§Ì%‰±©oÅY‡ï?½bgju£Êó÷_ ò`f+º†l¶‹V²åó“d©ízùò,VI²ÿˆ‚HP‡ Ô6?¾¿vôfŽÄõü(øÞOêÈ F}+ÓœÅ9RB9Ýž-ÎЋèÓñÃgÞCæÇ\CAï ¿ìT¼BõyöýG†·”úÜÄÓ  Ý q%Dmà˜œ¦‘’àd7â´‰¯²úîÞâGEØcüï>¯¿ùz•”öÊñMá§ÐXg´ø(ý:"„í Ñ4Vã¢s¨ ¼ts ÿ$£&oaÇ¥¬n–­(Ä·¥³$^õPc 4’î§á­f_¸wÈ][¼Öâ­.Q\|Å $DL‡E§Ú•À© É&D%GÔQ!IåæÈÅ—K´àAc.1œb»¥‹™W¥ùí £½Ýy'üG7°YÛ‰‡¡õ©.ûéƒçÀЕ Öý’á `©ámJ¹*eµÛ9&bõ·I,¸á\ðöO²»ÂÂ×yaU 7Œs$iøŽéSJÂU{úæÜǵtyßÑ1‘Õ°É$|•EE•¤ã{ÁZLüÆbLš&Åõƒ"U22ˆ´0=h½ÙdDÝ.„ NSR‰¹.¦fc,ë=­¨áœj¨Ùì_é’¶oįg*kɦi;`»ñ $»>`Î$'òöæ©xßÂÓ—ÆãÉPÚì·9);¦–£:¢œèÍü)Ù_ô Båôí ‹Qö§¶™™Í!KœÆá¨´v¼x„‹6Át ØwÕoÕZh!:„#ÂÁÀä±~†}< ÓÐ/Ù×—ÒªÞ"2+^°¿8DçD|Ç3J9=ŒßM=Ð-#{[1|¶ŸnØP$+›làih+.¹g3«hÛ‚ïºhJxÉò¹w1Ê+N±Ëžõ¼œò¡e\éaÉVrIU{fMÇ|IÙt$"JKoS³QïÄ"˜ *ÿ%­ º„RŽÓE6”†F”Û%>|Œ$²e¾ì¬Ôç[¼A‘Ï´b´~½5âmíÔ0êò쬔ÄÐqËÜžvOÓfŒ°¿$e¯/83AUXk:ôÅö±³ðìDñ¾ù5»ñe½âáMu6%ä¶·‘EK‘¿ 3¼ÜçFnaáXù·c.$¼>X#õ‚ü\ºB >ÏãŒxb<<ÈŽ·‡7ý¤ð–Ù³qÎ,òÁ)d]ËV՚آ¡ÏÓ 2<*!súYËtDßä=º4<ßk4ûTíù½œ—7Ýåäv½ekÂcé:„÷aì"id&ŒkÂú+N£I†¡¿SSêX ™ûáLÙR®ê @G- §oin/c‡2 õƇX¡@ès³5¡¦ðèPz¸|Ö‘’Ÿ/Ü1cý¡ï¢A v›ÿÔROô®R`-ÛTâ-7G˜?ìÂÖ ]o:5v‹¤pUŒ'ÓHk°`xʦæ`ýw˜*\ù8*qX<›4öbŒŽ˜<.ó¶MCT‘g¹Û:b"JW™>$$ð]Z´: ’ÄC05—zwÙ)C—ôÖ‚{ ÚÅ` ˜ªà€·³MâZþ&A§˜ñ¥ =n- ’h8i©¯Ç1æ¨PÆ“s<¸ýµ¼idG|KP³: ¹û’V.Uî ×+OÆ‘óZDþN¨m³®ßyfÍÀŒ ¹’ªÕ•8OÐ<3ã35*¤X-1[Ï)ÉhÒÒžCö8޾ߴ¦ˆQ›ø¸€´#Ãÿ¾²Þô§o³_ðòUÜd\ }hOÇ« ô­hú3õ6IV²/E š …Pöõ›ñ0Š„w!(;Mª^ýúV«èp»õFS‡˜ 3Ÿås¥7œ‰»5÷øØl§ŠÛd´!måÊx{ò÷5Y S$©Gƒé eµï¬}%}1y©¡EoÏ3>¹,w ;Ø¡7U»Gñζ֫HA¢;ÀO1‡  Ž±5É; ÷›ñFDœF˦­ø–Ï_ô’ÔQ`TPÅê#ŸTcÕ%jH=)© • ²3ì£ëÅ\IËö2Åñ:ŒÛ¥á¸ù¹ \¸( g1vnï4)Þ]ëEpseì´fËRÛÃÇa­Kýi§°¶ñ^Hn‚ϱ$U2Æ#Òñ°‰™¤gšìÁpÛ\©QíHV¢ï9j‰‹e˜3wu/Oʆã⡈Sú‰ ¶œ½œDùEx`Ý©ˆq"ñ p«óݲ¨¾51Žo²$ƒóòø1ðýÿ»«¾žE½b§+µˆ´Ò¹0Ä ðìØªÊå_•3ð‘m¢«·pðˆD9"÷ |JÜF_ü4G~eÐ\zûÙ¼eJ{ø”朼¼]‡-·ÆÒ!È`–yïqJÜözƒsùl|Üå›ÖÁíÝ‚ôŽÓ‡V‘`úå[_LÅÏû;´¼Pô¶¨¸Ì«ç`‡”O6üó5î$ ÔþÈ#Jœn9.µJæZŹ»SbÛŽžªÔ«Óéõê OI51úIi.Òý@XUÚ+.çP §Þ¶B;t9Ü÷yÇž2feF…ÛpGÔ[áÇ85iÃ8l pžI1Îëäˆ\Ê{šxŒÜÁ+D?v•NW_9Ü«5û“j‰“±(k^°B aM¡ØLhׇe†«¬Ð'Œ"˜XÇ«ÑÈ®håX2¥Ÿew¦Êi’› ±!y­>A<6*‘éQZÆÊ±ò­ûÙÓ¢ã¹õ?ÇÃ}o oZÐÀ%xŠsðÖ/Sk诽IP­WMç˲M <þ²"¼Ë¾ns—⤮o½T¤½{@î¸[Ï¢òöRï” þ#Oèû•³§2Nkøè¢$ÚFŸcÜ/héy$àS!¦Éòég×%+'ˆËW”èI+Ýž:*Åz×eÛÈŽIÒð*ÎÕËD5¹®%h°ºì êß™ÙtáBÏöyt^)çtTåBih¶µ²Æ2o‹Ir08ð-¢’Q-Þ ñ4ìƒcúNÆÌ^8šäœb!ЧïXú.÷¾FKo³›[íYÒRÅ¿m{¶Ð/øê2wòö¹Þ.¬h¥Úÿ@æYÃáÙ¡tùF<³—ÿ%íö3Λ˜¨À× &ÈG41˜¹pÔÍqÐå‰o’)v¸ LÅ(½c`·\šÜq#dFøg»¯eìêØZ¶óÖÔÓ£ðDsÜN`×U»×ç._¿XÎr†ã=L8Ì1eŸ³ŸîÈÍìÕöÄÆmsðF–˜…á-äù(A—à&“ƒõ@’‘•ÝdÜ«yõÙI'ÇÐÌÁt"¬µ§ÀËó6,uŠ,géV 1+û†aGEÄo¹¦;Ú!|Ù£øÊ¬gý~@MΪR§"ÈoÊå NÐ.<¥*⤩t.#>J I‹ƒüÊÊ‹ eˆè¥ †¹é>Æc1%4-ÿ¦½bðç+/e³æV¬ÜÚåÞïw€£èàa¥K]¤^U¥à 1r­™¶D­7*pÌj…^xßI4ÒBaÖ낈2E°fžçú»Ú2á …NÐhG„¸÷‘$©{?aµ¾x¦¹ÛÉbö%#øÅ,œ»­ÆfÒz¶Ä ÷;µÛæ«ÖûÑV<^çÑ(‘î !³…ÎŽÖù'#±ƒ¸Ï{°º ß~+XÝéÚõI[p™³ðób®ð+£à7ˆµ¦¼šñùÒØ:øY2ØV¿%Ã7úÆ,µ­œFɃE»IE\Ä+p·0Ó{eb̉NT'­Aª²¦Uƒ7V»+oë;‚ÛÝ^]¨ë)%`„‡Ó!cÝ«2Áv¿·ÜZÇÂR{ý+D»7S]ÑR9E´£Ú\„¬·KäÕû¶š“ŠN+s>>ýü ™Z ‹û…Ÿ‡ÕÜâÁiKì=aÊ}©¶óçTŸãëP<ìøG?ÁNˆÁ¼§¾R@÷­Sè¸bIœ°ðTluÒh]Nnàvôiz jSn[ÇØòÐ< çñCÄayÛuHníWào¡Ph—#Ä U¥û€Ç¯|¾j Íÿ<ª-…œY®(3X3,‰¯ÄQºà3¦úÁš-µƒÒÝ^¦îÖŒ¦®­ìv¯ÁFñÕG‘,J|üãCç»â0ïÞRlRïö0àeúÕ$qÿ¼í>ñ{ª<¹ÂcŸ@é»­AUaa§mLŸø}n³³ä’H¿çn”«&éˆÒÓN(Tç~òÂ~»I¬±]½p‚9;Ûï+ö½Ž–o1¹°²\„RzYÙ!1R: Ä ,¯ávŸ%p.-au«‰%y}2Åß=œ^ÎQ3Ò©^íA0íjyì&õ<ÂV.ájƒV“Þq§?O*ÇìyÈ ¼°:ŽAkâVt®¾È|‰,û² óváçC†X¯­ü-u¨ÑEš»ømÂmw™îæï·Þ[Ńû½ën{IA£‡fèh~rp®%?ú¤%î´C5v)’ÌO­´Íêò=‡n2BÆ0϶¸5©žH¾m®qC[êN±´9öŠ¢¼`ÆÛ$]¾Ñ6íHu«x!!ŠZ|ÿüxVÑ—³ŠyàÏ’2¾Ûº F¦‹@d¬•}s͸l݆¢Îä Ž!m¦Z+?ÖÛe:Hé‘ÉN„Çz€*(pa'V'ºÁ²Hßp³üƒ—âÒºm[i¡BbÙ˜!ŸCíu=S½Ä³Ö,þÃý¹ûœU<¤~‰X TS$0O‹ð­Á£þdÞÍr² 3RÍ@%á]’šÂÞê¬PÉÀçó¨êhŸmyèáé´ä&!¨ÁˆãWÕ ©ükKŒ³>¼¾5†¼øÞÌs5Ä: ôWiŠa¡K÷yR»‘¯?+Š•ëQPôÅ–2ÂfvgØjCÌ_ibî?çHÈ‹êm³0Zë J_†¡¿[šÛ…† ëÓ†y!¹ªÍÕ”SJUñY²Q7¦ž…q ½x½F¼±P u/z[L«jH Z…øœ_•7U%ÑæÑô(¥Š¯ldT‚¬Qöަ=øÜ†æMè‹1“a£gžÇkwìw¿³äÌŠöç%´TWùýžËeŒX7!&²‘OD¥(³-ˆ‚¥î-ùKl Ö¤Ù¶fû-¾²òo׉¯Ⱦ"…¥}O=Úó ¹bE3p8kGÖ½2aþ.¢ó麋_–Îð.ÿáàzÅÏ×Èc§˜Oëe –Uºs3ƒ!êù-oÅÞÓ:ò³Gºl«þ¾‡¬LJ·OÊÑãRÏ«? ´Ù\¢»¼lyãèÊ6MÓíÊàXç¸äº)ü^@{E%ùêÇbéåËÏ õ¯M¦}Ã*?ØbË彈 ›ûüõ&·%ê¶Î;8Ô×^uµX,¹?'—H~¾ák#_è!²1颀È[ˆÕ¸Ã߯Ç[„¢Ñ´= »û²×ºÜó.0©j,ið†¿õOõà]¶ª¾_ÅGúíµjµ‰X0¡éÅΠ0Õž@Ý3ž‰Y¾;G¼ôž{F†øÏc¨’ª;½zÃÃ/þ"“Fa’ï×o>nD¥ºÀ ¸O~àד[*a§>±ÃAOpïWøév¸ë´êSÞ5b*n f,œ]\âOq]®ºU¶°Ý”ëjrçv£Û b«ùÝb?³-3ò LÄ’KMÒ¬Û˜ŸK©âF3*¬ ‹—)‡ªJ›øyÌhÈÄ4*Û' Ómnidi"Õ.t?{ jZ|§½k &äT‡Sª§fýì$½#zk‡É%Þ³©áÃå.%;„ LÞ3=zôCƒ³1äWÓAIñ´÷—4,äfñ©ˆ ˜šOÏUþw— A©+w}ÐV*<š-ŸˆKN(N~Õ%Mæ“f-­¾Âš(‹Ë‹à0ÀpËõùqF@{S{ˆ|ÿPq¯§uCúá;²D#Š6VZk4Åþr²¤ðÚ{dDò"w×XßrÿŠ^I<‰¥/vöw@îëž&Ë4‘cñD‚®ÎÁxæ˜Ì&[=ûÁëîXµÖõ”*”íAŒó%Ý͈¼ßú‘8¡¿Ë[ú»×@¥ÈU1±y¤cZdÒ¸õ“´óV›aÔÚ¼!•«%ëzhæl[æ‘°¡‚+WA¡lÜ-•%E–}}ÎÎokÈ¥H_b“óY1¿ÚN.˜Žç ¦X\.]"œytÀж ïW™>y—Mê<ÂÝá<'Õfô½Š×WíÕzùSû€_µæÔî¿™'n‘§D)3û¤žC8f(¶ï2;d¬î/%ØèRMÙÆÓD¼L:Rh6°kÅÊ:t’'‘ m¦Qqñgh\¢;$÷ÉT ù:Æpz•ƒƒ_XI¢oÃÛQŒÜ ü ·œ¾¯sØÅf®üÙµY2÷hë(5ßå<3 V8¥ÝfˆÂ }³ï~M¯ÏÇ@À·?ÆÒ:°o¸~FÆÁʹa£/~ýÙµÕ‘Þ ì>>¾<~ÝÈ^i]-Rºn‰&ê<ºð<éwġ¼}!-ÛÒßv ðÉGï—ìÈ–0`|+Ÿ½ë¹¾âž¬¤{õÅãC&[˜ð\¤x…Ûµwã3!àÌm0Bþ É:TJÇ<DŽ%ɳ•Á1’¥ù¸ÙBhòúÈjcC—XQ=‹Ek5 3~"Ùv¾ZŒvߨª8þ{a˜*¡}!刳Ì#g]/‚Ú™’äž^•n6tQ°o‹¸•ØÉáO/]ñ àÝoR*Ãîyvj<ñ %ÙŠ¯¾1~Å¢ÓK¤µÚQÒ…[&7 J†ÅGÔHëû9ºÒ®Ü´t’ka–|~«¶o[S=@DXjüZ=ÞGÕØÞ=Ãi0]œÿÆßÊ}þµ^ÜñÝ7ðoTL.ŒÒ¥î¥¤M7Á\[¡2EÊ[TþOèµ,û5ÀÙÏ} c"´Ñ¼”ÚÔã†ÙI­õL³×QnÆ©7ª$¼i…¶¦?UeuÌfÛ>ù¼(™½V þ8òÍõf÷‰7€F­ä–ÖĤB=`ÙhciÞ|It~Wì»6ò4ü ³†‰§J>ÁA&êÛÒâ»/J.åm–;èÂ-¥‘_¯Gß ô0™þ@W>N$zÅ*"-ªÄu.rÕ³ÕB„XãsÆY„•0Ä€£¾؈þ˜å’i§?—ç4é˜m‘F pþòx‰&9f¯Ú¨âÝ÷ƒz ?˘9'õ»@‘»ÛV¼2Œ’½j!ÿ ÿ²%i£,ñ¬f,Ul0jCÂ[C°±ûšÖjÂcŽ„Ùäž­ó´©Â/ 扶K}ŒåÞÓ DÁ†– "ÌìÏ"56<[­fšp¹ §y9$Ë9´•lº3­>`'„Ó|$“ÛÞ—ÅäΩÉQÇ&ï—Œïghé"ª²Ž¾ŽmM_Éõ`>×Óúµ:*¶sì*¨†/{JŽ@_rÆ•ª:ª2¿þ8]?x0 奉êO'‚˜VC£³øÆëYŠí?È3U`“ H÷ŠŒ2ÐÞX{èשâå[CœD3,”j ¼«bö(]•pVUOËÁhëm†??ÞW‰œƒÖ@(?×Ãóvì¨q2Ÿžq^ìÓb…¿"õQn¯Õ—•^‘NÀŒÍ92 x6·ôn7 ž*ë“UjÃýo©ì²;R¯ALò,<¬f ÷ûcóÈUE­&/þê”/ÔV`¡íªímjÙ¡˜"„ê×d_6¨$¶>¡ ûÓðì{èŸg Û‘Wåx bRŽd‰ñsÞÍR`X¶pC‰)¾ëZ‹X™HRuBÿ8åN4uÀ«s3èt­O¥Ù\„ÛÅœˆ0ÏòzÊOœ'ÖÔ Ø6>äÃ8)žÃ´ÒaH‚@ª©™Üpí-ö ›Dà‡Ü+èN­V÷äZð€~ágY÷º©öhFôcÆÞ)!Ø“ó‰ØFT™|ë{âë4&´Äy rVZðçº}s~²¾öY«/ëFb >–GT  OˆBðHà bÕ?rã«'åd!4ž­è Ѷ֦£Xä~?gÓ®ŸÍ¦w…—EuÊ­ºã(!3Û£\³õ2T•CÎ'Í&£¢Kæ\\{†Ÿiû†=CYexCpÚ ¼Ì#‘æ}¿r4F:nCÊM Ölì\ò’/oAÍL¬'®õ*篩êÇ{¨Ú™Ìý+…žmgTf©H&ÚN¿cp÷)·;í;ñaSÇ•ã‡ÁU ÖTgÙ-•§MâK8JT˜çx8Ún 7—?z€ÝUá„çaá~JËÌ_|jÛ ˆQÜ‹>ô>òx£Áˆæg2 ”mÆ{CCANÒS°O>–…ј/,µY€ãE= Ù•0=œ…»ßnK¬ö tÀ-ãG©]Åœÿ€:C:À>‘ú–{ü¼1K¸+v|®xSs”™ûÚZ²·² C&¿o6"ªŸÜ;íuZ¦³ÑÑT-,ró³¶ûVÈÔzÌÎ \1sp„BÌå”AÙ§Mìwô\x~ýÌ`‡õˆ9W 7Ì[•ç„WGœˆ&%MxC¦4}ˤWKâÖÔÏ#çß×3Ü‚HlŸ½?Šs«Ðødûå…àe`Pò/„¯®œ:÷«[à اk†à“’GÕñ¿QsÅð|×).Ì—ÛOŸcLÔIq¸K´6ÁSî1B…F1yÙ>I@Ødwè|Žô-/úë;ßÎÚÎâyVêÔd0¨o”š«íï3`™fú1™ 7\ 5Öù7×pÃLÖw¡»t³ñÕ¬Lö"8v±5Ÿѧ—Ѱ aX×;OÂ:qÔ&À½µ«&',Y“ª‰éV{gò‘£`¬±¢á,¨îr¥•AßÇ×69!r ¢WÚ<ùÎ Ÿ—nä$oYùïké3úôÝcI¼ŽY¬iÁ>†·mM6è§2BŸ¹º+"“‚¡¿t–pТtKNYw+'* -ÞxɦäC‹9ñøo]@ŒüTs2‘”îr ?C¼!æ/„;Byðíß$_§«=ܦ­6¿DìNÅ"LW‘~àžh‰ÖUÜØvEƒÍ,,ÿª0ãÝßjÓwÄSéÖ@Mˆfái;éU,§œqž«çyN¤Ë Ù ÏÂ-cL¢N¬þ>=ÿ^ß{„ _É$J͇ޕ‘MºÒÇäŽs¸ßÜìD]ä'büªÍ´ïHP ð1 ~¬ÅÐü,Ï윩±rïQ °¥ðÁ»¼Ê‘ÈoÙýIÏ °wÖéÈCO†¯»“T´G,Šá÷1úÁ?„÷Þ¹åô[€u:8ÞÓ£zÅñx²]¿çìNià¾G1?’^°ü±ˆqb×4°à»ôX^mé6¦ŸómDhnN‘ŒG ݺ¹ãúâñâkü d2 `)#3ªY!h`–Ö¬¤š¼Ìñ‘D`T>²|$¾¶Þõ92‡¹H1')§ïYiýëðw¹ãbmõ·¸2à@wOJ»§ð+­çô±·Ñþ-;©Sß’À¹Óß`›^-ŒÙiÉrÇô7ûÕù̽¡€‘æïÞü9ÐÑA)ü%¹¸‰Ãx8›æžTi&±žŽ‹g<Ù«Á¬½ nß‚³¾GÉŠØ.ýÈŠ˜3Ið;¡¥÷|»ÆVϘWÆzÊ`³L&Ã.€ÿ“pi¯Ã>Î|“KïÚp3@Õ_OV ‡7 »3}M¼‡«fn•yü±zÞ“cn;Äu÷@—mÚ€¨ ÓhçT&:,#hÕ¬ÛÙÆG`Y*˜èkcÝ#Ï»Í8£à²òìŒQ?š¿Dâ»1{‹»ñj]¢°,*s‡˜\'øe܂Р˜ºWYJ›Ð1ÌæÝð¸28mß&âÌBjSÔúq“èX rc€t¨SB±jÈ®eŠC²_AòÅñ¥©©J µ"’ ¹áúD“Dƒ¤˜€Çæ-­jÙl^Ýžr¢pñ\Áv„t’ù¬„ý¾â(]^~œ¹­•š^>½^eaI Å¥o'ΪÚÕyXe­Ó…Àm0ÁÙ.•ù**©dä0ƒÄáѪÆíMî=Ɇˆ¿=UÚ²áGï©%[6}ÝW¯·I‰Å†µiù>QWñÑŸ—§ø9âüº[ª4ávÎØÔ«¶è6ô 7Ma2åBrÞŠ|rH_ä±& }öÞùæêÁ“1£Ñ€HX;¾U_^€±dÿpw8Öd,Œ­åÂ×Àwªé®F窊cm¬QÃ[Ýo; ;kžôªª”:Á륈§7mÁý)h²G†sUôØÒâÿ ¿@최ʱ£Ó¾ Ã’°†²¼Žf^Ìry®:‚`ñÂõâkèD‰)dF™"².l »æ° ÿT©ê6ÿcíƒo#L^F´¾âp;ªMUÞïÓÛ©dyøö‘âöMAÇÙ˜:;ãäD Áîþ—åƒî±Ìâr…5•_»Ú–³{]|Þ6¦ìRÊC ,î‡Ã÷,;o±ôdÅF^n‰ˆqõbc"[UÆÑb¥æ3"Õá×^?¨Dôâ,uþ •ŽÄ§Ø-/…g/Y‡‰Ñ{<æ¦9¥ aj0åK,¥ü²™yšÿ|š[ R¥o½Ÿ¥2o­s­æI·Ñ5¢E¯»‘h"ƒÃEèö5u`a×}îb M…ˆjû—Çþßë³áޏ Í&µ¬9‹¡Òz“X1-½ºú†ÂúñA[e·àš?§1üÿRçÃ`Ì¥ÏÏBáq”§§05HÝà§ÂŽ11ð ÜÒ6XY"å/Ÿï4 ]ŸÈl Û6·po_nß;±ô}1®Qv Ìï­ÃÆD£C¡u"õQ…jzÏ:š…¥F»ê;íqŒµøHóQ빑œTz˜ÓǵFª”Î…¬b2.Z„8ûP·ìFÁ Ç÷‘®øßaxþÇ‚úÍ—ŸY¼n¹a™8ÒîYf,jò…¶i¬ñfX‚ºåödõPïzÑ×ÝÃÉ Mx÷·`=:Æ^QlǬ®{Í•yªxÍ€(ÂëÔ³¤®%í×3Ór–ÎáM·är 1G2|¢6wY„ÅoœÎÑw˪q†+båöi»FòWåüÞ Õ°h8^:ðmªŒ³¬öo ÌßÕw;›$jÖ]ʼn%à–u{Q˜$޹ÓËG#ä g»^Ü‹vŠåL޶¥Í~¦ß©X2ŒôBÉþIºÆµW sCïJ* o­!ݳhÒë[PŸ2?“+v¸a'\Ò¨ÿ.t„®Ú’S¸ë;\ˆ h _êY+µS¼ç…}ÆY¬±°ÃÔkD䨴?[ùýº¡á S|‰_Ùí”PñcÀ£9w6{? ’•¢Žêwcérn¡€¦°{~ªßDiˆî+ ÆKBœ^­ºPy¯È‡A 4éhɶÜÊÇeø÷^h‹adïQ#5¥aí¼÷9Ÿð¬¼K¹®"COàž ï½Tçh×Þ°!Ä…š¤i’?¢¹«ÅSÈë©P¨¢"ªÙ)ÇvG@ã ±‘ þcöÊïy¢G½3D4 rßã\¿æ&¸$1 DeÂljZÆIË# ½õ?OWumˆ†|̾Ĝkž¶xºï.ëAš@¦¿|[ªJƒ>.=²iØ€FM] RRÑ(:÷®)£hð\u.,Õ”ÐǼúäT󬎨ƒb#üD¼òwîWÒiB0Á) œwû¦-ÞZýI›‘îÅXË ’Ô/”lHÕÄ•QÖu× 6«kž5Ô@Ô± Ævݹ\Â?•€Œ=’·ßŽmQ7"J£†1”…Ïs¤z®Ø(cäa$Mï÷D#|«7&Íž+_‹qÀfšÛQϬ“Æâ´né)Áæ0Û„@ÀuˆÚt²‚U.k5 ·%r䈮–e2Òˆ°Æ´«Û(behæ-FûZX>{l,³¢¸7_Ø”)D£t…¬¿ú$ Ò® eð ȉãìüYÙOUDäkéÇàŠ€ºñ×1Äþ]%'–˜dΘ¾er<áY®!{÷z³bq(Ö"Tá5/KÚï„1zã*KÆ †®?×.¦o™ ÀÕ…Œà)szˆ¨=ÓWáøëŵ„Ý…’Hu $¨Wç-ŠU[PMÏæí½úõÅâ¹ [§Þh{þ/}$Í£íCEqF7oƒ³-Ãi•¦*FòœÃjCìv ¾±û¡Cú¯fòö WNï"Š¿‰n‹ÐéúÊ®ý6{}.‡¿‹œoÄNŽŠÃBÓ¡?1É+YÊQÖ*ìx?­q’W¥9Sx”–ðŸðS„Úøˆ=¸L;ì}«q;ÆÚg(iGå—HJmú#â;®·„å;×¢7®ŒOlîÑ©„FkÈ(˜KŒù&s|+£ïúíç¹Xâ6pÔš"ÝRæƒ|~»IÊl=Ðâ'žÓ¿áÁCci$çsâ`ǿ{'…A<$5™5îdlÏ6Y·SÛjÎÛ캸\WmÎ/ ¹£+ÀOú¤lw„/Ú˜žöNƒd/¡¢æ0æ0JDSg…}âÕ£{&Nª?Wš æ5ú)ÄHɧs_ðU¤Mé\ µrk­‡ÏݬG|ùi×Yhw{é0‡0æÔ-á4:ؽÕRv£ vg-·qq´¼ Wz¯MŸ Î @EÁ‹»µÝ‡µË„=0­¯zÐ.“ANžrµ çq™Pm`ŠRÓ‡ó£tz^Ë& ó[®™qÒ¬j;`§^¢×=-µôÅltg'³4ë(Ê„€ô7î™RÓît3ãH¡k†bELúÌx"8в•¾%a—Gÿéã E¬ü_AõÍ#7eËGn9Š@¾Ÿr:ˆÍX;éƒO*ø™Ec%¨UýyþY# ¤ñ²Ið&gΜ%(G@…³Ô5Ÿe»fIWáJé¢ãaª“aÀU„¬†|}hÇ0÷d]¬@ª¸(tI;ê#á¸ú4ä›×÷ÑrktÆX á¦pÐ X5ùœÓ0¦m£à‡GÕp_DÈß$§RQëF5j ü±'(ø%73 ¯¸ŽëÔ´ʾήŮù Ïx£Ïn—ëæÙ_¤UÅõŽIr¥Ð˜ÚVP1M̓ R­†bG:ÖòýÉô¦Ùæ"ü²lº¾#¢ öbêQ/šÀ&‰>+á*±’e™Ç) ż4âSœÈ¥u_ÿ¦‚TH¿…4­a–§Æ8+p6#Cm’_­~*©b­59”I€Éˆu¥j°ºþã®s™‹•x³ÎÕÃËŽ"—ž\ÞGÀâj>‘­“}þGAU¢·¼QŠr×?¦¤H9ƒØ¢0C¼ü³±ðfޛĸ ‡3/ý0vœÞéPÏÝ¥`©ú › ÌŽˆôww›‡ì&+jû“·UüÝÆ=‡yIŠ“7ãsÿ%UZ㢠‘@Óë‚…à†Â}ÂIc—´tÁàçµx~4+͹é#ÝhR†È¡;RÓƒe‹ª(Z¿Ô›ƒÆî[qþ *Ëéc¼ow“O‚0©…ä³þ›Z %?pêj¶ùª ¥4\v÷yÆf…åMªt¦´>-F2_kúh L½u$×ûa$Ðh0¯¨V˜D8ÕÍ’ÞüìšþåÔê8Ã,s>ˆ§x¯Ë­¨mjnŠòµ¿·ÍÛ9UiÖÕâ_þ; øXòŽáÁØ»Lż>Îߺ Mäé ‰:Jò픿êmd!ÀqÿàB• ïª\«“R{>:XLÛ¤¹Olü§ ‡çe<œÕêê㑽¸Õ*f(çBœ7bÓÈ% `¯\˜“¯Ûzz‚µ( hÃJáÐmQûgì1Œß­º¢V.æ¢|LoO/{­ã8ðÞ{\°„“ùj‹:4 {µ”Ô8¹JUÓ† ±e/?äÂwxßí|fÔzIÈ&œßäidCÔ`fkÁQúôÄÒÝ‹»àpú|,ö>6Kak%xOØÒ÷¥£W¨\G”H–Íq>HÅ‹OСá%eÃcýñš}´u¥Ë¬Bˆ7¡²F´-ƒCͯUì•d¿¤>7Ø" º²æÓ—š>ôGÏF)íÔÛ]Ä€–ôKáÕT*ÚO=1¾‹ÊŸÑ{Ar'6!¾]ë®$æ1ÇZ<µµFŒ­ü²…×§ãEñd»¸$œ÷‡¥ƒaŸY°Û½?<ßiOú*½ùíYçfLzÁõ¨&’-ÓϤÿâÐ ŽÚ3Ƹ¦ò*ò?(rJ:¡þæbË„ôÃýàqû¦»B<*LËÄX&™×&½´< 'ÛRç×É› Ðð"h¶8ÇÇÜŠo-bbO+­ŽÆA^G÷‹G¬¬3›}þº«ëÅ©zØäÍÀ5…ºm~z]Zôy„.ØŠûY¤2¶ÑZè²4M½!"˜ ]pMˆðƒB–ý¼þÆ’“îZ[e.7uå(åCñaùPÖft?ù¹¼@¬yª.ýy4ñØ Ò‚âa}(›•/˜ ºÙ™^­-`ì6³Ëb|àD¯…A)zñV¼Ô¢8¿}OâÝû=Vá ¦”!;*†DÚÙq³šÛMSW­)Iz¾Ðù$[3Œ˜ÌŒŽpÅ«~¡BG×±—Ë£i¿Hw#¹fÿ«go OàøE©9+Û¯w¶&,;[ú}‰ ëÇø¸sëÔ«úÔ»»÷r\[®½Ÿ™W‘‰¯¸‚²‹ý ‰ë^€°ù\¶Ds£-…¦Ò´.m–żpÔxŒÞFÁMùeøpýõ£ÚOëñH¥3ô@†0,bíä‹HÛ> stream xÚ´TÞ6NÇhPR` Ý´HHw1`06b . ¤;¤;¤¥¥» )QJZ|ÑoÿþÿsÞ÷ìœmÏ'ž{Ÿ{ŸÏeeÒÒå–³AXC”p$7?ŸPACOOÈÇ'ÈÃÇ'`eÕƒ"a?ÃVˆ«—øW‚+„¼)‚·u8ð‰; È/ä‘à•àã ðñ‰ÿUˆp•*‚PP ð q°* œ½\¡vöÈÛeþú dsùÅÅE¹~·åœ ®P0Ô!í!N·+‚A0 . … ½þCÁ.eD:Kðòzxxð€œÜx®v2\@(Ò¨qƒ¸¢ 6À_‚š 'ÈÊx¬@={¨Ûq]„-Òä Þ`P0îvÛá·¸oꪪŸ:Cà«ÿQÀüól€ü<üÓýÙý‹ ÿÝ ƒNÎ ¸n´… À§Êê?,cu&6[óã”ïÇò¿ÊÕöÒãßãÖ{´åsíâcèˆÙ„Þþ„5ÛÅ]ŒX+—â£Gų¶·äÃðóÙMí­J5‚%“ÜQú/Í §Ys¬3f¨™qÜôxœä‡ž$Ó§gSäYc?ŸÄ>øîF ¾ñ6Yˆþ>óìc™ž€[ 5=æ)ùð›·üçÄ'TsÞE/W¤ç2ù8xÐæá¹‡ò6g¼o˜¸UæúXO ‰Ö5/Ø`Á76hn§Ék¬á†CAÍÆ«‘q,­j°ø¾>×kã¯ÕA|w±ÕkÚ϶«>•ë´‘jÒʰsÙûÄ5Ë´_ñÌ—”ø£Þ¨‰m)‹ÃQ“B¸*Rýf…þ¦@î€gˆ¢3aÙ œ *µÉH1_Ø-~ä–„éÌÔýa.I²ý{ûëû@p‘Fš?‡>ÓéMfçdl®ÐCK.£~]°øµgùKL@ìéÝA\ž²ý¼)ñ±‹³Å7÷“ͷĘˆ’t}yAI…-ù”¥;ÌýgŒ“BbJRD2)š’é´o§p3—6ÏÚLŇèâ™Þ0ç;Z¾˜z΂¦31eM5“êµa4hÇÙÆt_^RÙæŽ×¥8J™§Ù³‹Íp)€jl{¡f:¹ó®üÒ᤼ô¨fE/ÛÞ¡1y«#Ob¶æË°5¸w*דî»ß¸ƒ#5ŸªEžI¢ùhQÛKAA»—ß·¾x8 œcuD;Ë¿LWÀ&Žð‹q)S&^Ý Šp—úhAv¨ª$=Æ9ñdœ§ÜÄãù$xK0lVŒn׸z–‡ŸÔAMÎ-J²éÍaOKô¹Õ¨ŽÅ´£‚¶žWKxôr?ñ&áÛ>6o÷˜Cm;eÀ8ͬF+ç ±¸*w¸³0Ùî‘Vñ‚y<ÍQùÍd‘8yl—ídqÛ†E¨v«s]Wïò„®“ö´+ÒáÕ2泑}\ry4÷| ·mú°ò”>/ѯ¹¸­1:6õÚp#ZBÇ1ƽÁ®é¼‡Ö»‘Ïl݇½N—ßãRs[ª]Û/úeÝ(ÏbóʧÊe@ìIÏ_Ø>cº]ŠúhâÞº‚f²ÅlЭ¯4uéQ~qÍ}‚~íQ‹?Î:pƒòí¸qR}˜L ó…t¸½Z+ñgÁ;I£V ¤í+}ZÇÃ}‡ÈÜ i}‡è7ª3n ‡8ôÜO¦wi´vÑUâ/H#Ë ç»CßS)wÒÆ}À³V7Χ|ðª|¢ ]ü ûËë=*²IS$•’òz°X&È`«W°È)åg…8UgÐa†´¡sAøÃuØlL'|.ŒQÐ.»è¾è{‰Aí@êÎGõZ~“ܻ ÌèÜt‹ã$o<%ÁO*ÊÆˆ*8Ç$¡š½d‡ob,Nɾ«½eyõXÅ89eEK‚G²cöJ=ÝõÚ¶,}Ó³ogW' wñ¥ëîÇ¥wEwøn$¥3a’UÝÙª2 ÂN=3ßéýrmLËI‰j‚…Äàݧ>íî<Ÿ&4ɶÝiÓ=¬­v'Ä›…ejò/–ñlž< %¬ê9äÛ;96zUp8@ï|–…e:Š<þ¸JÁ€=àþ™Ñ‚u¾àÈŠþÁ)€OÏ?‡KÕŸ1TÄA:‡æcØ#r íMûb^ËP¯èsš‹þäëw8cv)z¿/Jx_Ü)&9Íj“…=®kMá8JÚ‹yZa›Ÿëd犬eHZI"ÒJÅhƒBoæÌ؈öä¯<½i“…éûÊlï)½ _®x§H‡\Ý~6+òÊ‘eèí¦­#âo½ Ǻ¼K•í<Ç’ûÈ“íڇᠧH豟ùþË'¢EòA«©R¹iã]¥wª´¶ÆÑÓ;}ÝŸ}îòÉ8·ë&Cwå¦L%“ Íþì¾~œCs²jÚ­øÙL(etºdåA;ÅÃ1 jo>…Q¥iîµÎôø°Öðã§óÝ56jyzÀ;gfÿÈ7K÷gTž€¿ á+gœ1g"¢|ñÚå’ F)®¦Ö q‡8¾Æ\Û)õ_ƒul’ìК·¿gqY*“¦å!|(Ü7LË>Ý9›ÖVåßeq«L\ÅÒ9ˆº*&áÙA}=j2—ÊH=Só×-&1àNæVˆ´×ëóT&$ÜC²| Êϧû¼Ÿ ¦³¯‘I;‡Ë' ¸•¸ ‹ª²Ès¬P¿”(-'!Pgd_œfVïž&üÉ$yž©ëêpEšðàÚSÂé§wú BËxÍ!$(¹{×BØ! ¸l¼%.åþµJ½VÃÇÁB¦‰f{£d…è§åá±Û^Ö"Aù]¯úÖÇßxbÛÏ$ŒÄß>³ëçIéï:âmþ$¤LŸ‘š™›ÿæÃ ñk9Ñ«»Xº¾¯Ø©ç¶}º=ÚÈØ<õéjQNõuèÖ¸Mq Éè¢êx ÁHåõzoU8?ý”ÜXí”Ïk—Æiz¬têk aÆo½mÊèõnGQj‡ŸýûO–S†éTB™†äS"‰-â)Ð)¤~$¿×QÌöÉ½Çæ\s…ñ1d IÚ™úІäs›ôÇH,Á>ÅÍŸ¨þÄòã%~Àû¯  Yx¿bá‘]€-~ÿXçÏŽY@iä“myF¤¹_“#Åò’{mzOÎs û'ÝÑýr{ú±Šš÷â ^GmLæjggî­áV=Àó_LWÉæÇ.eÃåcjã>„¸ízK<æ6 Øæ¯>mþAYVih^{9]b²àÓÆ¡$.Î"R´÷¦ðRSbÒ¡fò%/u™^úp<$‹ìÿìú¡Ý?[ àL½áΪâüAª• z*¼Ä°—iS7Óý¼'«Q¨Lt°ò…gd¨3<»„¨ö‚fA°¤¼óYüš"hÊÚuÀöÓZ"²Ñ£}פ†Ý‡óh+Ð(Ž…EI ½ö#§ØT«O¢mí€×¾Òœ„g¤É®¬)‹ËµxÈ8îãq¤Ó»KŠL–% ËXS#—vM¬}αpHla“¼¹Eu|FŸ½ôÙ— šÇ8ÝÊÒDmqÞ!j×b¬Y*@‰„oWæKÄßá™úPHÞ1köCšo$eûJ;Kj=~* À% 3¨êGk3jÝ~Ì¢ûFöþ6ôú£î‰}åûf‚2WŒù:òO† öÓíˆåµZ«† áP»¦8JC‘ÛãîP/TÛ#OçNϤÑHŒð)‹78a$\fƒ|?—¿o°j:È~[™“#Ò ~¹óÈß§H­Cë;©o8éQ@5·áÚhFBÆ^êä>¹EÒÇ;&ªÜây³½QÙZ•~4¯¡!ñqª‡ÆëŸ\K‰ŸjT ºþ,e ³Á̲Yðäò á:ÿ@¹—›ªü®ÔÆÐjÄ Èü}ŠØ<;ýÆÂFD¾:‡jã1–ñ $Ï®¶Ö¿R¥ÖõN]”þ†Y<¹‹K¨,Ÿæ²üP° Ãäñcîé÷?Ù@fí=¥~Æ-¨sE¹µÐ`2bš”Ï6¹>`¯xsîS%§½¢¢ð(aö ²Ñ 5¼.Ðtæ-È–ÁvÇg‹æ»nZiy- y^ÁÇon0Š×+.ºÈO®µJÍ~¯Ðó„?œ7kB½Òð†(Ùì8P“Ÿ1އMÚí .[DWWð)ªîµ fm5.eçy{T/›vLŠÞ‰¨4CÜ­5xv *Äå{?Û Mi>,åÌœUoXfø:øp‘Ü—«S?ŸÉŸÓ¿“ç8Ÿ?>•ŒÜ}~~LOeJó´!¯‹±Zë¢ÔømÅóœÝÓDÝtÝéá™LØCâ‘èV´êF‰Hå¦~…qóAñƒò¢ï–¹Î¬X¸ÒU?Ì-$€½ÔÖíØ‚“5(w ³›à˜˜$G¦ÔçÛðŒËSáÁ´c9Ѩ(P¾ÓÂÏVçSxߟUÖ–eÑÔY’DûµïŒ«Ø¢Q©ì–ÄÆ ½âzSþâ‹tðÕkÎb“ù†RÆãH[øÀ‡ÏïuîÕ]f©ó2>hŠâñ¤7¬ƒ`Ÿµ†¼ª £Mªøn†Rî"q­Éøs–šK±$`V ¸×çÓI]£¤Žæ4µ(|råú¨Ð:æðàj—¿Ÿ˜bx*YÔÒ&¯“~£¼Q¶cð¥ªûP÷fKª'(YÔ«ÍÀÿÒý_¸Z+½Î n'ë]:u,í¥Ûßð›€Y„âFtˆ=Zn)1>k˜idŸ§­ð<\H`Gö1²q·”‹r–ÒñxÆs +í#Ú=$í@ÌüÂ=榶µ0üÕÏ&Q[ùêÖÑv”¯fܼ°_®ï~±qÉ2^˜¬ú“ C‚öö$!ÞÆ±â­-ÿºÌÈôþ²Bª Cð ä8.œW33«Y߈ìaþW´Y«°Ï±Ì‘ؤZ¦fW«hÁÍrFÍ Zh>VâkÂÇðrFÇ&.Ú‚)Y‚Ø'Q–^‚d]Øà‘ _J’Џ ÿG¥æ'I~TÜ£œeo2¥É²Òþ!"ÂÔ;¹¼©J»¢e‰é¬ê§ŠvéÑOc'„óæfùå Äå*C6_F6¨¦ sèV-0¢4#ë Áéñ¡ýøò“íN^]=–ü³BȽßö²Ï§aI|‰?‚j.½Oß—Æ¢Èˇ»ÍÊЧZŸDÇÁî•„™³Z¿Ár¾¶ËXbUÁ£ãhC~ª2]5ˆ˜ÐÌy7ã×÷Ô¢ ,yûå4=Ê*²ôÊj"̉Ðn”mßXt$ãJYÝ.,¡ã×=ÑTØ]eoÍ_°F ß9eaì*àÒËÑÀˆSxúñ‡A$K:á¢OCtÍ=/0Á2&„ØÛ3(a‘eWâ¾Éôÿ`X ,À‹¨û­…öUfN•úX8¸fü1<Žc ¬hð{¿=„º›ú#Q‡ï7â4Õ‹f±¼Ü¾ÙCN’‡Ü&e_W¸l–K¼lsŠœPÓiæHüI,z:«E²@DÝ<ùëHÃÇeäU{«Æ˜}©hiZ5ëºËÛR²peÌ$L©ŸMo7H_z8Õò9Ñà‘Noâ'ÂSÂõžÂ‘4y"sÌFCÁë÷Î]Z7£mùÜÄeé{2S-Sc¶œà­ÖåBåæÈœ&S›i³Kåñ ¸ƒÜD´Ï/÷láÃúóR^v+d¦5ò ¼/—¶{¶ÚÐŽP–æVµ\î)±hjYX.„Ù|ÿŒªn<+d&ÑËBS0Þ´ûµxLòûˆ’Ÿ$ɳNý|ûÙ6ˆ1ʰ<ŠÙ¦cMOWÔv>™ñœ¸W‰gMên4ý{gÅL ÅÌÃúL‚aÖñ^,c+Iü˜¤È a¦05„ºnK’æ CÜ™½–ý†âáâ[Øjîw!M´ºG;[/B¶[dñ 6gòuÅ®°#™J’¸Ç( BJQcšT÷jL1[VÌò¸ ­¸.áYÆ®ûÑ46͸;†¬Æ°ˆw~”T¼uA2&E’iåNoÍûÙÞ“{¾ƒ²¢^vŠd{݆Ð\ÂU+¤I3!' ågm657wØàô“†TR‘9 è2‹k¸Ò¬²‘Ýè»6Ô`ÿcKÕÒŽÚ¾ê:ÔkœÑÕt ØÚ]vF•hî©\ãqÌ%¬–¯Šé_©†ä3 ¡–šÞt-£º[LúN™°›3ÃûW+Æ.Ô##îxû£Všcâ¾Õä4¦Œzè5¿ÀÛçµPçXgˆ¬‹¤£sòZá§•>SûROM”Réç ­GzOÂe<¨±¡åªßhK%w ßGƮԜ¿>ãnU^ -/ ÌÇ W†Ñ¨ã{E`Ú¾ßR–Õø`™ô‘ÔI–ø’®i£§“Vx¦ycª-¡ë%SKYDžM!‘ñ‹õÑ4bèe‘/󘤋­ást’^Å: ™"ä dxœƒúâÄóc$WþC/øQ¦·D» s€Üe5jìÂ\ËW÷“ ×ÑsPò$Ç1@déù$±ç@0kó ‘…‘À„úK;óœ¸ ºãÐa§Ê†rô {Ïó,-¶öqï,º­£ »«Üq‹Ù<ªþküžüé¸!Ÿ½êfö]ÇþMÚö]ޜѥæ¨ÇÓ¯1]Æž<ð(“ßÏCV´Ñ$úgÚ=ýhõ´:ûÍ xú¤)ž°Â,]ó˜7y„쪎´¢/¥ÕîU¸É™jC>¶á„ÁPM:ÉC;Ö$N*5Öa Å]®±¶ðYÈs¡Ëë`cƒQdûìĸ}±ƒþœÐ–~ËØAN¶sê:…µ t2E£§™”@wUgŸj< u¥§v«ÂêK!‘S×ïÛ('0eM*4‚ôýŸ×]ÎýˆI„t€±$-¤ KÎ[yÑ•ï] uaÑuž¡Ã§ÓëÀ=¤òò¸¨É)0l‰$Æ|+/úÒm5¢­H%7V2Nÿ`^ ‚…û´èZere Oq$î„ÑT»e[ÌMJSQ$ÙN¢R3¡È7F,f¤Í=Þ7„G¸\BÿõÕu¿J¿¼î á½úÀ§ƒAW Ü@@[Πoó©côu•€Þ±­\j—²[ñZo–é¡ýe1õþéìhO${#¤.fú(ÑûÌ:ŠUU+üeÎ8Íˬãë6rÇôýoþsi=‘/óŸÉ`9 ìOÏIL&¦Ãb]U,›ps”Nˆß²Ú;–ÃÆCî[}¨¯F½£Ž‰ Û&Ö'ªžô,§<.f*·€(õÜB´ ŸeqP{˦Pcã·K\1¹Ü˜ÈÕ\yRzºÄ‹Rë´‰v’îÁœH£ªSû}¿àt ä°L¸tE'î¶dO³'ì;éû¢-?©CØ.¾}r$ÁPó¨hZ/¹×4åWÅn\`rª9Y´¡! b‰£8ß ~ŸÙ°–ë‹Ü X)NGûÙåïð†×+×9¢ð®i.l`Ìi×zœD”az¥“etù *¹¼ÚTjUBßóYÙÓÖ÷nÉéh”e‰0J³c¾à|´€F¹‡±éÉž,>•k‚î¶LÝø–W݉2ž7~[¬_|ŸïÌj¿0áQo=¿Zh´^,%XxÖÚ&vê—„€§M.fyI;g‹±fç*B…ˆœq1†·Ô„8'Ô—ð¤ÛÍ x<æc.5'Ëlò>ÁZO‡§µT”„"ÄZ™F‚Þ˃½¼°­žq´6c;£°=<øJ ýà?›$“¡ú@ÅÏ»”¸¤”*û®¸ L†G0¨‹U™%8û’ŽÈ‘düåüúÀæJC ä1üÎB"lqø‘Ô]É,uTPÈÌb3¾Íü­·¯ŒL‰ÆŽ¼ïX‡çÝÿ쮩¥Ç!$•€Ã’ŸiMÍVoŠ#Q¸ÖØ<¯°&pìô¼‡Ïr+@énˆ- U¨ÑÐæB}Ú¥‚kÒC™6@œˆÌ¸õ˜¸ê, \±÷“ÃÑÔçSwqôÂWùô¹ã˜Ú›¶uVK…šïÆKª¹´CcôÛpžÇ¥,jˆç ¼[¥’b'á2:‡4&¬ä¦ï÷EÜŸÎ’-Åî¯(PoV9_Ò þÔwžò{×ÞPÛŸ$ŒsÈ;³hlŽŒ¼žÙñq•óCÐ=)ö¥‹ôuÞ.›fö"ÓŸê«Snð³'™¯àë}x__®¸rdtoLÚêûÑÉí½¥Žâ½ø‚™ŒMØ­ßÔ•ßîðH¦ uåAÛ±»OS‹®˜ØÊWRöûeÏâÌŒ_¼Ä–ê ?aÚ $,n(Ý5í[ópÏÆ\_1ðh‡n;–=Ûëµ]i8îhÑùèDÄ÷ãìmêÊ¢PùüW-ýi¯ÈAu_Ál4Y‰5ѬqNâë}µöô§“ ÑS û’Iî“‚ÆüH§T¹óƒ?·3CèàŒUµ´œï^ÔÒlYû­ÎÉ|EÇ•o¾ $XZj\@¯‰ùÂÅ›tûǸTîÚ‘rŠ¢Lsz=¤í@CÈ¿tŒ|Z$i™Í kË~Ï„y™Ñ®»å—kH•̵ïI~4Æ`œFC79(uûÌîÅr]tj¢¹Ü5w9Ï`ð>Ø¿k@ÛÚ×}fá2cô}æ#åSeå8Hﻹ÷mM7ž,A27ËcB<-nA¬¸JÁDºç`…/#µr¯SüXËL²X“­zˆ£Ä¬¸¹’g_Óð¬ó T(õd oXp#P–ØG®žó¨Ë@¢×K¸|ÒDW;Ç©w÷޶ñl]ép_ÄÌôÞlÙ²Ï¼Š½û)TG8ÚÎñ`RäÉ£%ÔŠWnú`»š ©ËÞNé¢kjþFp`ôxJØ5M6x,#Á­¹dÖ 7CéX Ĭ÷ã[äµ~ËL w~ßm›âã&N£ôIˆI˜Þúw9³M•tn.rýräi¶"šë•'Ö+Ø-hO±¡?EYþNro!Ÿ´>Hè|5‚ùRÑ0ãdŸ¿}!s8fË¥yW¬Vš§èedD–¬±©—„¡Õ¥úmÝ¥„;]lŽÑfš;üã3¶,à ƒ+ú§ÐMU¿ËCì†õ˜ìûÖ({K5UIŽÍt"Þˆ¾¬‘YÀk(Xo½˜¹;-MŸ7ÇÆðBÄ(Ç3DÂ@ÿ´Uš«ýlGïzIE¾îÎ5ê9QãfRÙi 0ý¡»|»TEïáuÔšƒ”0#õ›–ÜE«u¸Z­Î¿’/Æ÷Sª"Æ-6•*N)?¼_­›o§C²gÀÆÖ¢ÌØ1ãx) +øçR#Íbü©ÚËþüôcÿˆkrÖ¤“xg]w®`Ý£7ŸûD'IÍ 2)æø½ ¼/d û?rN0 endstream endobj 2895 0 obj << /Type /ObjStm /N 100 /First 1025 /Length 3849 /Filter /FlateDecode >> stream xÚ­[ioIþž_1½B}_Òj%’%p€Àj?8ÉÌâ#øXÂþú·ª»Ë™ÇNÆF ¨éi÷SÇÓUÕíDú  ^H\!eB¡½(dࢰÁ  Š = ¦ 'î a¬F)Â;øpð!îqL¨B:v@ÂÏ…c®PRJ”B¡ŒÄyRÊÅ·Rš›8f ­µEÉÚÁò …ˆ8O‰Â((U˜àìŽJV‚ŽB8_X/À«-/À&k¼‡7AÖ °ºõÌ0>¨ç´,œˆŸD'áó°f(œ²rÖ„1Ñ‚€ÀÜÂ9«‚uÎà ©ÂspH¶ð¼%¸ …—± ¯À/‚ƒâ Y°¾·Zíàlg¾…÷>çŠÀ¥Eúürt?€›På#LÒÞ‚> & Ê\‚½Ô“ÞzîÀ5A€/@+“9‡ – UÔ µ’ 4Š«q¾GÃr\ë€^BÑxg%ŠÖ¿֡ÂÎ* º;sèhÐPË€ h\ú¢aç …$ ø#´:pDH!¹Ã 2ÆÞI8°$„@ÆÑ ÝŽ”N¢ÍHRX ŸJ )-U#1¥Â#À+`·Ô'h)¤ €fÒ¤‰ëh@/ð€f%2_ i-FK(D(yÌfJkä“o)cÍ¡”5ÈatµÂw âbÞáð¨àâ@ÓàJØ5è(-âÞ¢@˜P³Zã. ÖÕÑg]­mÜž¨ƒ¶!N4í4nK£â €f ²(â†ìüþû;ûy[ì`<ší—ÓËIu;OvâóIoÎŽŽÞœýoïx÷ÜÃø =-tš°»;¾+þz&>—Ý Æ9ÃÿÞa/¦—åh› fîõo_•Õõ .Ì’HκYÏ‘É0Ö„÷U ée eÅþ©…±ih€<ÞÅÐwg/Î^ƒ¡Ç‡«ÂE2s*×ú ªÖmК¥kˆ¼‰üg¤òëHæcvÂÞ±÷¬ÇÎØGö‰³/à‰þàö&Sü¦šCà£oÊY?Rýº#ד²?+'‘øÿ°oàµA9²Ar²áü8šƒ+ÇÃòº½-'ÕøŠÝª·ðwZ±ïàäÉÍöË´º†E§ƒþôöά?‡ýó/»cwûÉþkÅAvË%½/{G1~Í.2±$ò_¿& ¯£ÃÏÁÁevæM¤ÝÂwsL -›u›÷_ŸF›wW‘Zž\ ßÙ¢:Ô¬†Fbe}Øœ;Ó‰gyÏe^eG|«Sç)ÄiPéÒr\§œûùôåéá^rœÌoÐõý"¿é°º®¶Ìé”lß}ÞÝýæ¼_Åè_r ‚Öl îó'¥Ú]¶DØ/ò—ì ‘ŒŽúË«~ÌI§ì4Fþ4÷mNR½˜#ÎØö8€Õ7%­óŠ}N™kL™öGW¬?…ÜTM¿±þ xv1é_~+gƒòëŒä *¸¨âµ$ÇËá—£ôß÷yÀÊ»ËA˜ÿ»ÿi¿âߊſÿB#0`_ÇóIln~ÞÞ”£ErR÷/'ªQ‰Yþj÷'å(*¥¤Xn^ðÛªïìû¼œb^Q‰ïóñ¬¼ºÄ5è!-ŸîÇÓ 6'ÓrX%ç忠䴺»ßG7“²d³jpUÆVÓðHÄ…—Û:lɻ쮷½wg=¤£]‘‰‰x6ülôj%ÑÿÙØm«:˜¯ßüytŠV­Èpž V•ÿ«à„½Êª”VËÄGªÍÃØÑdÂ!™" è³{Ä~õî¡wª<ç‡'‡ž 3 gС„+ûkœ¡×¶î‡>0yPÓþðFO{ûk{çš®KÛ‘Úû¼/ZÞêTnN_ö>½oõz«´É_!`~«Ý…Oq—_YjÀ1ãÁ ?‰Gš…FhpËÈNEèÍÁ‹“½ÑÈÝ•''ˆh§ç[Û Gü𡯷 –ŸWPz° ¾çÇ»ªÊI9­¦ ŠÐéî[“ u.¤M”±Ô­ÊN)òäåAïãgtÖ畇>ØAñ̇×ZΙ{WÁvÚ¬]ÅÃâŠ=tÊú£ëz½L¥{;ߥÙŸLÆ?òp®Àpj¼a0?˜  ~¼\ã\—.æPÂ`CÊ!–¾|¼HË«$­á|0«n?³ïÑ*˜Êcš1é_U—0Z +àq+ÝN ¾?ííÇ8¬ÊêP«Þ$ o áW„aM^¯»3Y;¾-GÙkàxãç¸}ïr;©†eË ÝÒùÇ×»ñ q¶úKý0ÞÄýšÓ“õöíîñ8Þ̤£ìè ëw4”ôë[»•÷±‘»oâìßÒ¥Àª~­Ñ§­ïÈìÃR1nö[K¥Xv*.¯ßì¾zuc ݯ»XIöcP°ö^ç;ôÁ¼eb§Òrúaïã9fË•wIÏuºK2Êms—ÔåxS§æQ>ÏÜS3Y–Ï+—U•šîÖÑå ™ó©§›EuϽOýXó5“?_î/wZÛ Þñ é3š/À€êzôèyæý±Õù$î”ùè à/Ç“rí!EuªÀgŽ{çï#§Vl›)¥ñÛ*¿5¥Ö6°éj²~1™ZŽVÛ©V7À˜_Ìâ#Ââ»ýi‰o öéó«Þ>^²ïæ^£á’BzŸÒ ;¨&Ó*U(HGýü ‡}ª®f7S˜¬Tw Ž^žŸ¿Nø‡ðmx ߪ:¼évøáÍÉ›ø ʃöÞ†uóeßùîøï¿|9Løò!|ÙÆÇ¡¦€¨+6p@ó+¤%|½„߈?×õèîøK_ó,iàÚ`#¿ÂžoÀÀÖw,K „¶¾NA|¸÷€èŽ¿ômHKü¾¿¥€5=hkÈ HØþšbIµ´ š» ‘ü&$hÜÏ/á›%|µÒ›¤Á¥»ò% Üz $T¶»íKç%–HBM|¸Çß`´n‰ÛðB¬Oƒõø ö@óVp }‰ºn¼©;_o`|óön ݬO²žôÆ7ïË–àÝú ,xƒ о€ZR`‰zªQ‚„©Û¿A X¾j« Å#UÐÕù· í+—%Ôº.¤Ùé º ÖUüyzä6 `ë„¿ïÉÿ ÷o`~똺„¿Ä@ÛhD_oÿÛgȶJ<²ùoZŽ%|µ¾h”ù@xÛ¿.§pªÏñŒ²Ï<‘ÄŸ~Š+¿©®¦Å_éK"]“Á¤§”T Š´_qüiítIŽ_„,8—…´>^ÛÍâùq‘®»ð›iAB†‰,(˜m  -l‚Ï‚ËÆOZ±”äÙ*É3‚Ù™’JhN²sS(U—&«.É m•ø“ÓÙ]ÞdOzKà.³>Ÿ|ž åšP"O90ÿÜdU :ZÕ„ «@±Â/±’@± Ž“à·¢bÒOÿPÀ8 6 ‚^I¹9”äy;I® !›'¹¡Wv!øm ©ž“¡äÎÑ“‚g«„ØÆ*‘³! ŠÈ<‘wšÌýÇ“¡|*Wu)!xB ^Pæd(eÇØ„’dõ* dpü-‰$ìVPŽÈ*éIÈù”$ø- ” õrË)™§5Ó¹í*mS(K“yŠ8©> stream xÚu[ËŽÇ Ýë+z™»SÖË0¼É6H€ » Å+ƒX’¡™ÀÈ߇‡ý¨Söb€n^VñÔ)6Éb÷¤!} [%l±D\Ä-»H›èŸ^ä­»­é^”m»¨[ *Ö«¶Åìªo1—ôN¯Æe@Vuöš®â[ë¸J[qàJ§ ª*ï³Ô²¥,6¢nIºéémͦ§´&j£â‡½xÁmÓ%$CÜÒ–³iË[–n2ÙrMvU¶Üª­[<´¶I°E*H‰£«66É‚=l"#zܤfð¤“JÓ ô*o2f鲕€%Œ^¶’Põº•l\éE†ÍÒ·R%¨ ]`i#FØÊH1¢ß0b¤­¦C7#WØUbk 6¢lU/qU·ÚŒq¾Žl³ô­…ÞÔÆ[K¹+M!l-+ ½ŠØSÁUÚ”Œ„«¼µ®˜õJw|HÁUÙzèökÝzŠ6KÛz.ökߺŒøN¯ÆÖk¯Jgo3Ǹõ̯vcÞtÛL&ÛÈÁF¨[‰YÓ¥ªWØØ¶)KWêWj¼©õšRÂh¥;†lÀôÎh—ê[¡ KY/{5]Ùb.½,z+l%õá˜÷ÉÔ‰£˜#éô÷Œ%é^ÄØæÍj-ÂÃõ2Âá•f½Tk) †eµ–ò€a…S±ådµ–ê°aj-u±K<2Øx½Ä3ÕôR­eui•êŒ1‹€‰x¨˜ÓÆÜÃÔ³cÞ™U-_LW­I2¼¢ÖÔuMW­IÙ¥jMj‘w?üðîùðééeûÇþõü/]ÏcÓ­mþ¶í’É`Izà­$ÉèæM‰@¢tOID‰RÉ?ßýñÏÏŸž_Ùê©ôÏw?þøVÅ`ecN×L2HÒ!),T‚¥8±§$ÀzSË.ªú¸”\T9Ú`²˜šÎ£ft’€Ý’€šiu¹šdx°`õTòašœh2¨É™ö0ƒš,D€šFÔäBƒëÍ;ŸoPµÇ¥ä¢P“[¢é@MîŒÁ¨´?j$ð(P#L–4“4¬žJ>,P#‰W j$¬bÔЦPƒÇrJ@B^°^Ѩã¡êKÉEU² &¯) ¦ò¦PS3›5•Ÿ’ÒL£°^}ò=X°z*ù°@MÝ×´kVPÓiþ j*ûQ&!†+¨©Ë(¬·Õx\J.ª jZ`“Å$lÔ´Ä:Í$¢a-ƒ6U©ÒÐ䯨CÆÍhnxt¢MB¨SÁ$ áYj ŒŒ1ÄdK^ˆJ9ªâÁ± ¦!kŒ;§anâEXÕØ:ñ"ª"GN–xD¸oÐN­.PÁ¡Õë4-P‘+á¹M¼Kƒ—ê`n×ðÀˆ1Ñi"cbL®Ï42O&DU0Ñ!†jžèB5zQ[޼+~ÚE¨ i#Ç=2Ñ$BÂbg˜+BèTÏmäÈ·ÅO·±Ƨã‚j•b\P©‚ ©Ázr˜©±z®!S£°·UåȳÅO³­•i¥à¢ Ì­±`çX©A{âE¨Ôàë…Árä×ê§W„T”ÓkQ5OGAÄÒÈ;· A2rþ@ŒÔÀ6€©±Ô €õÈ«ÕO«\TŠ8\pZ°`'7 \ÔN à¢`‰-x µù´ùé´‹ç¸hi²ÕÀEËd¬š€ðp“¹W Kln8nGÈi~rhàç¢s*Ì)ºup¡‡Û)­O¼Ý¸ :³Û÷2ó[4Grè~rèà¢S®ìà¢Sé࢓çtpÑ3ÁÁ ºÌíîXb/ÞcÕäÐýä0Œ‹¹U\ô:ÉࢷùpÑ)FŽl‚IÎÀGðÈ9¸~< bT JÛT ¢btq¬hœŽóÛ‡V;zPì÷7PTjÁïš#‚•pž*L i‘‚L‚A!A†àMÊÜ.– 9h*Å.­WØzƒ€­w Ã{§Ž ìbüÈ <ÐAx"Ø„gÃ+w˜@ÏÉO”8JGYÌWØ|ƒ€ÍwØü€€8¶2¹pωɇƒb³‚ƒb³‚ƒb³‚ƒb³‚ƒš®†£FkŒ;Î:> Š±l¿AÀö;l@@ö­Š¤¨"kòñÔÇ¥ãâAÁYáAÁYÏ>áAÁYãg 0™Å”OòŽð&¹Òdà#“‡£æ¼ŽzìçwºBxPKVññ´Ç¥ãâAÙy#M>„ð ìDr ÀGaûà£P C5Yß&ÐÓÞ©ã…íƒJöíˆÃ÷à£ÔwµÔ“µúxúãÒqñ ô¬•ð ô¼ê€ÆöÁGcûÊG«ô˜¢¢l5{€ì¨~èø€Æ’Û \Åg«ä0(>[%F×8¥ ¦lÍÇ3—Ž‹ågãìƒò³5¶_!`ûàƒ“ ʼÆIUeëÅTÏ”QoR†p  ÐÆùh´ƒ(@Û D×í êÊ6\:Ÿ°v“2P6Nè¨@{`ó Z=*ÐÎA•^ç4¸ŸÙ]8gʸq” =÷(A;‡l” 0JÐÙº²ÑùDeÙ“›Âú™2úMÊ@zÕ &‰BŠÐžØ>èÈdߎé´&Ô–=ûxΔ1nRÊО ÊÐÎ!eèàå£ ‰üßà5¡¼ÉõŸq¦Œq“2P‰^>*ѱ,@0í[ƒrÒa-©œé>@ßMãpgèxhªÏAl$TŸƒXBõ9(%yƒVBQ9DHzÄ£Çì:> Ð#lô¶z(aYG.º”ÀêÀQ|<'AÑϨ åÜ –PÐ J` }TÆ>*•çÀ"÷¤ó- ˜—Ž|46>(?YC27ºöŒá¥é`‘ÝÇsdTè¸xPŽNxPŽÎxÀGgûࣀªÃÊÊ1¼ föNø ’Ýú±™¬Ù»¤FO\²Ff`¶Nf Ó`²Vfáb:²*”\LÖö ì´ÖÏ ì¥ÖÐ ìjÖÑ Ti$kiö-ëi†Ú=XY—’ koAÎÉìUR£j(Ù«¤ÆÞeï‡{µ6Ã2Ê:ýÝ;²¦“È &#f±hï9½I⤛ìõP¼Ð6XÕ¼Åú­dÛZŒ“iœa£ ¥ Öw$kÁ—‰Ã·Lö^Sèw{?E¿cc§½Ñt}:Ÿ8|JìÅ'/;ÂÀ° »Q¦a;³Ó­½òP>¼ø Ìü“‚¯y'ìÝe®cžI¡Xö7Pó~ÿä‘#s‰Ÿ¸Ì%ÉkÍ!©l6w¤ªe$=뇇Í{¬«{"GÆ*~²יԿ±7”Ä´½Ÿ¤Øko')ôÚ»Iê€Ø›Éá•îåÈTÅOTö“%öN’ú$ÈT…☓©÷SN¦*‡œ\G†ª~‚Âa(S‡ŽLaç›L4Ž7™uœn2ÕÏ8Üäè…¶zd¦ê'&‚2uF,¸O»8×äD÷ €‚8Õd:5‹!!õÈFÍ!8üu pÄÆ…– AG !È@ÐL!íˆõÍO?–Ëæ¼8Zujp’:à #T÷â#T÷á#ÙÃq8H÷3N;BõŽBY¡Úç¡ Ž/B«%do_ú‘e|6pȪsqªpnªpl‘2aàÔ"Qph7¤Ž#´?´ãp#Rq†*9p^jHà¸"³ñõu/¦æýþ‚ܲÇvh8@¾¾¢²4‘Qli/—øúôËû÷ÿëŸÞ£¸œ¢¿ýöý‡ŸþóùËï¿>ýüñéÓÓç׫Nò7:Ÿ}úúßÏŸ~²þ­SP Oÿ xè@ÿûŸ?üú¿—§ë’AûñãÓëëóç/¯zóô³uÆÛ7*¿}† M:­íåé§Çû øùòáüù—ç_¾¼þùùË'[V]ýøôùåé«{“óœE|;Î]¸þþúüåó÷ÿ~~yýòñë‡OŸt–Ss‘0o¿3AšœøO²{hôó ñ.ÁA>4ö „kÜÜûhŒ„Á&Љ˚+Ë€_ïà‰u+ò"²&Ä›˜pYj.2ý´8–9­m‘5.VËÖº(‹ÈšmYObxøvÛSï 51V4ÖÆXÐX+j±lgÓ¼à³Ói^µ¬)q‡¯?HïŸReÁgçTYñY'cEc½Œµ(–Ͱój‰>À4wØ;³¿XWcAc}ºÅL¶ÎÆ‚/[ocÁ—­e± ´ß¼ñ˜j7è¬!¸€³6ß‚Äú| kô-8¬ÓG»¤õWyœ:.¨„GoTez8ó®Q ìyA«—Edýîá2³SÍ…–÷‡s„eN¸ÛH,²Õ7–ØK0ªE–ÀGß6÷§ÝKíº-˵nÔ‚ÃzL ¸g'–‹…–c¹XnpÕÇ©ä‚*{üç'¯|·w`h÷¬?rZ&؇•À"Vâ":ô\påÚÐ]шŸö‰Ë:±µ>J]…{³§±p×,Ú«™»ì@kò€HõªìPùѨßÙöðÓ¡¢Ã¡ßNù>ѼÝG4žœðîh<8œ,ì_Î[›>FØËôL2—aoS«ƒçâÊi;Óq:ÓN…[1S”`Åv,M—·7—“œÎä‘#§•fЦ(³٧$Ëüû‡t,ÉöáKìSºÄû–NX»ÕKë˜}ǽLhßq/Píãìª}œÍPí°Ðò(ÁÇUSËÇeÿï°,Ôþß¡0.û‡Â¸ìÿè9,–óS,±Ï³³ ,]™ê0û–»ð„ö-wc‰} Í0¬I͹w©—}:›|Xíq)ù¨öÏgi6û|–©±Ïgyƒ¬‡Éì›ÑɸµÊ|šŽÜíSda;Q ªæ‡‰’c5ïOCX‚í•%ØÞÑYbÍϧêùšÒ ,´‚‚Í ° @;(,(Ð ëô’Xϼú°N®nÎ%Õ”¼0G†ßÏ‘aÁ÷sdXðýëãì]‚§äâJá1µn€´À@¯`†nÁ ý‚X¶ó8 ¬äocª©åãBM,‰ CI, RtÆ%1.ôÆ%-0¬3Ä„¡-Ù',_–ïü]rÉ Ð“ '3 ëØ2 tËE V,7¸Úcjù¸Ð5á}s¡cJ@zTz¨ÒR è¡CŒJ°âR\`’Sëè) ÐSâwçÍF\êL²½-bŽíeQ÷AõÇ¥äc²>ö$ߺc“„†8#T{5 nBØ,¸ anܤ‹ é8Ÿµ»óF³@(´ÂfPzg vk,(°[cAÅPÐmÜdx‘«]‡ Óº†#Xge ˆ3eÁ…èV\ˆneÁ…èVîp]„yÿg³ÿ€÷OcÁ…ϾÂß}…>„ |Þ˜xûþ1t˜½û<µ Øÿ] ŽË endstream endobj 3088 0 obj << /Producer (pdfTeX-1.40.13) /Creator (TeX) /CreationDate (D:20130409230511+02'00') /ModDate (D:20130409230511+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian) kpathsea version 6.1.0) >> endobj 3050 0 obj << /Type /ObjStm /N 38 /First 371 /Length 1189 /Filter /FlateDecode >> stream xÚ•—ËŽG E÷úŠZZ‹hêE²Ê0 ä±KAvr"Ë23Æh6ùûÕ}¥êtu/FC±Y—‡·_¥äsuÞ%OÁýÓ ê‡ýQr™È‚ìØ‹ä„[1»Z¸à¹bhUÕ…Äi—¼ÖòYs¬êLž£ âm'Šo¹¬Qe‹È…Z­³‹¾´:qQ -*.FiuÕÅ$Q{ˆw1ë‚‹ÄF%ÑE&«“ä¢P;š],b,B.Ö)âé€~(x¶V‹£X7©.%.ÚÚgÅÕHq©M^ôƒ½ = ÁV•*±å¼4ú¢_«Z¢‘ö¨%ìÞ½Û=ü||<]Ýïo®§?äö.ë¸Þýêæ„ß;VÅ.,ûL´Lî3É2 l™b™»‡Ÿ.—×¾é­èÃîýûé긠`Ë,(Ä2 Šb™EµLé2ÙÞÀ¢ý­hŒ•Íœz93'¥>cæ$ê3fN’>cæ¤Úglà†\ÖõVµfî䆹“æN^`˜;¹ÇPŠ,½ídÓïïUc.2{¨ç"³‡z.2{¨ç"³‡\f÷Æ“MÌif]oU`f/0Ì^`˜=Üc°ÙÓ_ƒlöHÏÅ6±lpÉþ^5æbµÇžs`²Ì¢i¶Lá3Y¦¿ð™-Ó_ø¬Íe:·+0ëz«Ú+¶|Q-ÓcˆÙ³Hx+é¹$X¦ç›¸lp•ý½jÌ%fOé¹Äì)=F1®ž¢Zâa£•ûñr0È2~HÈüð²¢Q9´yj§f„5t ¬©KØé«Ô%ììÕûµhN×:àiݦŠLµIì=w²úâïv}»×—hw×¾ÇA«¦5•ÜZýxùSÆš'·5 Œ@”9 Õ¹þxùhÚö/ùµúôø±•AB€Æ„ÆÄ#õ}½›Öú@¤bƒùNÔ GúvKZÐ? !Ï€eÀ2`.1Ö¯&SåI]Ê@¨TªÀ.ÁtsþK]ôêzóåx¾®å¨TªÀ-Âú.6Ù0Ëç°–/`-`-`-p«¡ðHÞÞ·-<Ðlll…_ 5Žô…&ýèy­_A[A[A[aXC-ýèeÖOû§›^7pÞ#"‚„ ôó$ŸWôº€°’‚‚atró /u­@@@:ï5A[{ú¿œ>}£·çÓÓõô2èâââÏ"Hâê Ïò¯—ç§·Ÿ/××çóËñññòtžžu!òºgÄsDÌádW½GTwÞl>äCôÀ S$L‘àgGÊ£¦<¿èç?:::ÁÍŽ <6167AAB2A7A57A37CB1584D5BED85E11>] /Length 7511 /Filter /FlateDecode >> stream xÚ%Û{x[wyÀq½’ŽdÉ·Äq;ñ-'¾Ç±å8–rqœÄ‰ãıãÄ·ÜØá!£OË0 ÖvÏžVô`ÕàtеÀ½ÀNm퀩tPq¸žŽBYWM£x¦Q ìì|_ýóy¤ãŸÎå÷¾ï‰ô{O@À ‚‚0(TA j¡ÔxªÏvBô@‡Z¼¯úR5¿ Ÿ¨ãͼZ °a#l‚ÍÐ:x l…h…6h‡ØÛaì„NØ»¡ º¡zAO²` Â^‚aHÀìƒQØc„€ƒpÃ8 8 Çà8L 8 Sp ¦á4œ8 ³p.À,Â9X'èËÄ9^ùsr÷Ã(€q8 à<,Â\Ëp-ß@ ˆB5Ä¡ÖA=l†MÐ [`;lƒnè‚AØ£°ÁA˜„ãpNÃ\€Ëpɧ §vƒWœZ! µÀY6B#´€¦Ô,à \„Kp®ÀU¸×aücøsAA ˆ@ª q¨†¨…:¨‡u°`4ÂFØ›¡ ša l…h…6h‡ØÛaì„NØ»¡ º¡z¡úaöÀ ì…!†ŒÀ>…ý0IHÁ8‡à0ŒÃ˜€£pN‚ÖǼÖ¿®ó|ŒíҧФOa/>…ý@úéS s dNÌ)9…óàïyè.ò¥@úü˜I}{ƒWQˆ@ÔÂFh„Ø ;`;ôA/ôÃ$à„0 3pa®Ÿk†e@8¸ÅÁ-nqp«8«vÂp\k?ŒÂ‡S0s0 ×â¸Öeð/?@bÐëa 4C´CtÃhnLÁ)˜†Ópfà,Ìœƒy8`a –a.Â%¸ Wà*\ƒë° §MÒØ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚ§MqÚÀ¦8mŠÓ¦8mŠÓ¦8mªÑ¦m­ÐI ìþ[¦Q‚—„1‡Ã0 ÇaNÁy˜‡Ë@æ˜dŽIæ˜5P ›`#´B ì‚N„=nr óÌJ`ÒÐý…%X„kàÇ<â„!ÒáN#l€6งt8¤Ó½0 Ø\ªsN ˜îpp‡ƒ;«à§Y4ê 6ÁFhƒVØ0ý°Fà0‚0 ³pa.yosµ¹‹ÚÜEmî¢6wQ›»¨Í]Ôæ.jƒã0 ÜTmnª6ÅiSœ6ÅiSœ6ÅiSœ6ÅiSœ6ÅiSœ6ÅiSœ6ÅiSœ6ÅiSœ6ÅiSœ6ÅiëIRœ6ÅiSœ6ÅiSœ6Åiûż-üz[B"…*ˆAª¡j¡êa¬‡ذ6Áfh‚fØ[¡Z¡ Ú¡¶ÁvØ;¡vÁnè‚nè^؃ :&d¯^¯ŸѬ@âƒX[ ¶Ã6èn‚½0ûaH¤ìI ‘²s@"eW`VÜõBîUÁà4¼­Àix;€Óð83ð8¸7Ü•ÀÊ2ã‘ÅÞAà4…ý0IHÁ8‡à0ŒÃ˜€£p ŽÃ$œ€“0§`Nس0 spæá<\€X„%X†¸—à2\«p ®Ã*øµê €@B"…*ˆAª¡j¡êa¬‡ذø±Ò³š ¶@´ƒì€fÞ®§¶•ß8ýD‹ÜÈwÃ0 Áì‡Ã@¾äI•<©’'Kògà<Ìà ,Ã*ø³KÄ  ÖA=l†MÐ -Ð ;a @?ŒÂ>8á8ƒ³0‹°K ÷ƒË†ÔB 4Jàæí^mÎ%ùd¶Ã6ØÝМU†³Ê ÃìN2éeÀ0 §aæ`8Ý ?{:`l‡°:aì†.è†è…>è‡Øƒ°†`0û€Ÿ´=ü¸íƒ$ð㶇Ÿ¹=á~ëöð«·gøÕÛs ŽÃ$œ€“0§`Nس0 spæÐ=: ÀOé~J÷,à \„KÀ/ë~c÷\…kpVòsÉq—òs)?—òs)?—òs)?—òs©7—zsµ[%p£_?KÚf. h6ùG‹Èœ")U$ÊÕ‡õ@¶Iô"‰^$¯Š[¼*v‰^$Ѓ°F IƒÃ@IþâQ˜‚“@ÏÀ<œj¡Hi/Ã%Xê£èOSœßjñ¤Q¨ƒZذ¶ÀvØÝÐ{aöÃ(q˜‚“pf$ðÝ¡¯à\†K 'äŸ_< 7A—› ËMÐå&èrt¹ ºÜ]n‚.7AWWl¸ ºÜ]n‚.7Aw+´@+pOt¹'ºTžKå¹TžKå¹TžKå¹TžKå¹TžKå¹TžKå¹TžKå¹TžKå¹TžKå¹TžKå¹TžKå¹TžK½¹q ¼ýMLD™9È…Óž«¢k€õ° ˆGn3´AÉu@;”áÉí‚NØ }Ð ý0C@ÜrÃ@ÜrÄ-wŽÁ$·Ü,œ•À_lÒªàÎà&%ðÞ ]-Û » [÷Ü¡C¸e¸ÜÜCÈü³n›`/ZyÜ-\î.w —»…ËÝÂåöàr·pKàkú±i>6ç`΃®¹q/q¹—¸ÜK\î%.÷—»…{FTî œŸÆw™WÛ`èl‰¹EXn7.7—Š{Qö“º—«|Bç^ÏžÕ²›zkY•À×Y¨çVDÆ_е4VÐnVAH/|XçJãq‘m,­ÝŒIàgûtðz¨“Àkmúv°Üv“…·›[¡ADtÕåf»ÚîX¹»Ù mÐÀjÏÍ‘ª_éYé2_'ì‚ÝÀ2ÐÍ"õ“:ä oû €õ¡›½"1=û6Ð$¼Ê†!#ÀÒÍ!‘¦{uºè™„Ö–nމ´¾¢ûkbÜu¶ 8 ,XÝ<ã"ÛK:˜ûKn•mSp ¦aNŠtýH«A™…98óÀÒÕÍE8+Òÿ{ÉeX ŠÎÁ’Hb]uˆ^‡ž$/è2îU‘äèYqw,ú¹÷ºÖw A‘“¿Ñ!„§@bÀJo5ßBDEfzuÕX ²%àQh’¡À:p¡^ä\IOMÔ¬ X.è6‹,îÒ!º‚KFȈ‹Æ…Ð&rIo‘7LèV± äA<(°þ\ƒa‘7gôÚ¸Ýõ¢I†ÉP`uº0I‘?úîJךɃyPÐ…Kò pDä¶ßë]“& ¤@(?Þõ}¢K H)P`µ»àþ}aÂ{d(,yP  äA<(,ˆÜqZk<ȃyPXeµ‘<(øyp÷²^ wÑâz‘—iáɰ É¿«F² üŒ¸ÿEÝ_oãP 5P1‘ܰÙÀÛõ ƒõí&X'òàuˆ.§6A3l8“~ üý'tˆ.»¶Cl=“~ |vL‡èNwÁnè‚nèG“~2<¾¨W™à›Ù6{a†aì±ïÓ=멱¦šƒ$¤à†Q‘ú ÖK`Ù59Gᇓàß ¾þ¤ÖKee69 §á,L‰<[I$]afÉ6yæá<\€%˜)<ªƒuMz.‚®g³´›¼×aYäù£:#|Bç™Õn‹p[A ð–.~¯ŠüdDwß&Á‰c:Ž<°b@ô-¢o}‹è[þ­à•è2‹è[Dß"ú²üè—ß§C¨Å[LÅ”X\´Õ~ ¼þ%GÌ-¬¯Xo·Xy·ˆ¹Õ.A£Rçú¢o}‹è[,É[,Î[{`·ëštöñ Ý )`‘)`±jo±~o‘ ·%Øøa=†®·“)`±°o±Äo‘ ·üºÚâè`]¡',RÀbíߢ `‘ ·ŽJ°ãÿt°^ M‹ö€E2XÞ:-ÁÝŸ×!¤·E X¤€E X󸬑!úÑ·ˆ¹µ,ÁÄSz©Ú ¿`‘µoÝ`ñVÃ}U‚©J¶wIð#•««"…*`5’àÔ+ú ]û¯…:¨‡uÀ*l¤F‚s•Hk£€ÅàË‘ÍÐ[¡Q‚ 7À[Öm#¬àF¶A‹¯|^Ïjìt#,íFvC°´Ù.Áµ*½è-ÀwB~‰D"ý »×·¬?G†¡O‚ø=¸ncm8²pDWÅ÷KÔ‘„ßÑq{y{X4޼m@Oò(°Ša!92!Áw×ê¦à4œ”àûïÓm3À2s„çÈœƒ pF‚|T/fŒãj…•èkÒ‘eX‹p$x·§'©×Æryä:°v!æfW~Ìïý¸Žó/ëçͺÔNÌMbns“˜›ÄܤdÒ2‰´éG?W¹)0W&17‰¹I›È¤ad}“Õx“H›uüTQ?ÁÄš4‘LÚI&Ñ7‰´Ù$ÁÏ~R‡0í&-&“è›ÛÀ›Þ$ܦ_ñ¿Iç%É'ˆ‘I&š¤™I˜,ö›ÄÜ$æ&!3ýôþRåÞD›Ãd†Lº¦^‡žš\÷§CÀŸZÑi—‚˜›´ Lú$&Ñ7'€À›tL̃|¶mnÐU0‰¾IŤ•b’æ Lož S™&=.=“n‹I2˜ @ÌÍst§ãHB“è›Ú†¡!c’&17W$øb·NSŠÁzâ¤÷¦ˆCÏÆ!ùªÿóaÝéa í?¯CH‡pH‡pH'"Áò×t0sà)à)àPìŽøßíÐqL“C28”½C 8¤€C 84‡:ŠÎ& +7sæÔ!RÀ!RÀ!œ Å* Ì´;Dß!ú1wº$Tÿf½ò ¡ÊÞ¡Ä’Á¡˜RÀ!æÎ€„6<¡û£ å}‡p;DÐ!“íèõî—Ж/ë`Âíè™êiètúbî‘PGåûš6–ˆ¾Cô¢ï}‡è;§$Ôù×:N»PDß!úÑwˆ¾Côsê­|yÒÝ}‡è;Dß!úŽ6Ȩ}Gý"¡ÁÛu6ò±S´“èC¤è¤è¤Â…€„Æ‹>÷lÓcL³FAŠ~Eªj ª$4ùMwš·ô0R´R4R°ÖIhæ1)š)ú ): ©h‡& -\Ñ]á-­݇}ˆÔNØ ~à/¾¦»¢#‘¢7‘êÚ+©=àGõA½ÞCì>DŠÎEŠJj0 ƒzÓ³zÜs¼¥³’JB }–”ø·TþeŸçí…cpè¤ü˜ßòwž·:ã:“:Mz3 §6%¡w¼U_à­îY?¦oé¤ü˜¿çÏuˆ6ië¤.ÂX–Ðí¢×{˜!Ú8¤Ñ’Ò^%ŸÔ Ú?kZwµ$!÷ymEý,íÌ,Í,y¥/”%ÜÙ„îEÇÑçÌÒñÌýì: ÒÙ åÚu§Úl¢ š¥š%úÙ& ÜÙF =xRÇigŠi–ni–ÈváζHè¡Oë!ižfi£f‰~¶ wv§„>s·^´¶Àh­fi²fI,=ª,‘ÎöIèÑÊ·H&,Kã5K 6Kô³D:›Ðëôh„;K¸³4´²G %¡/?¡%ÒY"%ÒYúµÙ)˜Ð¿üXq‰·D:K¤³D:K¤³´t³dXÖ¯óg.ë`úºY"%ÒYB›%xYbžÕÓ—Ðs/éU²Y$ÜYý˜¾º D:«ñ½$¡ïÞ¯{æ%îZÏ/矾ðAS›uÙ#È5í*¾¤ÓîÕíiH{DÚ#ÒÕíQÓ^µ„~1§»"ÈAö²Gu{Ô´·QB¿­|«Ò¦#Aö²G=ªÛ£¦½V ËõYZcU7ênp{„Û#Ü^§„«nÕýq©áö·G¸= Ûë“pÝOô¬¨nH{DÚ£¦½a 7nÖ•JBu{„Û£yê%%ܼª æ…ínp{„Û#ÜáöÆ%ܦÿF•uŠ ·G¸=Âínp{„Û;%áλôò m¼s˜{ÄÜ£f¼y ÷µéNµAKô=²É#Üáöt&W$<Ô¯gzƒžf‚@csMã»*á}×ta gîÓqUƒ8TCD%<ù¬mÙu°hŠ®m„z ŸÖŸ¥åo7CÐ-]kM>÷^*k¯å(ÛÚ h¨®mƒà~±A÷§§± vCÐÅ[ë?ðW~¨ã´E<{`ö¾5Z~kû _ÂoПKeí,Óü[£ ¸–„‚k£~Ë:X'âLÀQ8Çá$ø¿õ1\ÏÛS0 §>âÚ,LIø]_Ó‰`%º¬Óyh0®Ñj\»K0'á÷ý£îTgœöãÚE¸—á,KøŽoé8 ÍÉ5R Ohó¤@žÈk¯KøîÛuð ÿê:„xäI<)'òÌ}ž+ÏG$üÑwë'èÂç9ç<'”×·~ôÔµá2Éߤ@žÈÓ­Ïo”ðæ͢{Y‡´)'ðù nA÷¢Ÿ¥µŸ'ò@ äI<)§ÝŸß.áˆë'ô@Úæ%ò¤@žÈ“yÈû7€¯ôé`íà“ ùQ ðù ?ݪÕ&?)çÉü8¤$üLZÿªC äI<)'ò¤@þˆ„¿Ó¥Wy‚Áä}ž<È“yò Ïóy?ž×QYç`H<ÏÏJøÅ (äɃ<1Ï/Høå×õc:kD?¯-ðCž<ÈkÌ/Iø•)×N‹˜V^"! Oœ Ÿ— ³—ˆM½„ÿoÀoã”~Ñ,ÓÀKÐENÐONÔ}¿DµRYÐ¥wR¦Û— ½œh„Ð bD;tWt›[€þ`¢ šÅ¨e½)–Ðé^t éÄnh£á†î@·Ñ¤NÐBLÐLLô}ÄD—›»uœv×÷ë-ì Æ­Æ}ìÄ -ÓÁÚ§ó˜HmííÇĘ;~©Hg¯¬ÝzZÝ šÞ Z’ ú݉q1vWªBO—e‚^eâÐOÐOаLÐ Oœc®–õè_&èd&ÎÃX†91F7ê8½J´ › Zœ‰+@—6AŸ3±"ÆÁ‹:XûöÚî'æbž!æ ò 1Ž?èÇ÷^]Ô.k§Ÿg2D?Cs7C3UbÌ?©—ŠqLq†^o†èg€ gêÅXºGwEK7C'8Cà3Í@¸3„;C¸3›Ä¸ô¸žáΨŒß5G·1Å&1C|3b¼ñkú.?£gÐ+†ùÝF|3D5ãÇò-¿Ö3Õ§x„"C93"ÆÛ:t0¡ÍÐOÎ$Ÿu^·aÌãߢÛxÞ"C3ÇÄxç º0f^fJŒ÷þZ·ñ4F†¸efÄø@Ÿ\Ÿ{ ‚ÚЙy1îè`b™!n™%1>ô¬n#xZÓ™ËbÜ•Õm7èTk´VÅøË¸#í¦ÅèpÄè>ÄŠ!1î×r)2Ú±¢¨~PÏ@[âeÿËï±b­¹ÇôÔ%+å1V¬cÅ bX_Õ?#VzcE¿?Õ§Û¸e°V+¶‰ñp“n#Z,/ÆŠ;ÄøŒè6ª±HxŠ~ù}†¶çÉ+VÁbÅ~1›ÖÁ"Ë;±â_¸_·Q,ÄŠ£b<ù!ÝÆó%¬ÄŠÄøÊÿê6ŠŽßݱâ1žªœgNø©+NŠñU[Ndø¥+ê«i1žy§æa~jÅŠ³b|sV·ñX ?GbÅ b|û¬n£Êø+úõ½ÊÃ×èÖë««b¸¯$2\«­ý „€6>ýxRÄx颞 ýä²>4‡j éM$žŒ‰QzH ‡®M8M8M8Mxr¯êÂo™¾ M8M8O—Ç“›Å(ë/ª2ýŠdÐ!§ ç±óx²UŒßTzü¡Ìš~’†988ýxr§DOë®XòæAõ8ϨÇiŒÄ“´`“z’½‰ättªËú„\÷¬Ÿe29,‘šJÏ_Ÿ”`m‰vHœ‡Üã<î§1§ O&%²þ.¬Ÿå‹!í8ÏÁÇy">N$ž<*‘æfÇ’í8ÈÇ“ÌsrZ"mºD]Ö£ÑD§§çúxrN"ÛÿT‡è¹,à \„+°$‘®czº üuڭ|¹;(Ñž×>,)ã’œH$ùKý+˜#æ¹*‰œlÔq1 ð¹j‰,úwàÈ-ÕúÂ['‘µ×õ¸úƒvŒ%òêÇu›>¿6/ÑÈ{õ< ’k…f‰¼~‡nã•1ϵIô˜.þäxr%·S¢s¯é[í¤÷Hôr¾%n¹A‰šúkŽàå@nD¢oߨÇÕ瘫\R¢ö~Çìæ^Οƒô§u›^¯>÷0.Ñ;é6~Œæˆ[î¨Dï®üÌà9™ÿšæˆ[nZ¢u›&–Eª'7#ÑûoÕƒ_è•&0SRŒIôï*íj&–g€âÅ>‰>ò7ºd-³ƒâY‰~~\·ÍJÕ“èq™œ²¿ƒ'u"Êì Ì%”»%úÔÛt›?/ÿú€DŸ‰ø|£ÛçÙEŸ{Æç›ù|ë=>ÏÝáS¸ÓçÛ·û8¢ŸåRË\~Y¿é/ýV¯ßrõK ~GÒïú¯){”¹è2QæbÊ<5TÖ[†ÖùW&Ëç%úCþѾ;åó½¤Ï÷ÛáÇ>?ø˜Ïïõq¯ú<¿êóïoöùÑ|^¸ÅçÇŸŸ¼ÕçÅ÷úüô~ŸÿxØç¥§|^n‚_û¿äó_Oû”>ãóß_ðù¯^ñ“5úówú¼šöùÅ·|~YùAÄ%ej«Ì%e*ªLE•©¨2O:•yæ©Lm•¯JôWÇõcפª¾ò%ÿºT5ߢ¯V¥ê]õúê†T=7¦)šûv¤êÕ]úV$Öñ?ú*(± ú*$±™çôUXblÒW†Ä¾Zùæ‘x𺾊J¼õ}U%ñ;+{‰Iü“O諸ĿSYC©–êºÇõUT<­¯j¥újT_ÕIuú}U/ÕŸ¨|ý]'Õ¯ýN_­—š–oè«©¹¥ò‰  Oå,Âè£9+p.Áe¸úðÍ5¸«à5¨öç¾Æz€¦‚‚0(TA øO˜éj¨Zà¿Y¦ëa¬‡àtÓ°6ÁfàYœt3Ð4KsGJ·@+ðÄLº:€ÇŽÒÛgÒ<9•濦y|*½ø¡énà…¦{¡úaöÀ ì…!†ŒÀ>…ý0IHÁ8‡à0ŒÃ˜€£p ŽÃ$œ€“0§`Nس0 üÊô9˜‡óp|šÀ§ |šÀ§ |šÀ§ |šÀ§ |šÀ§ |šÀ§ |šÀ—üÀ?Á•ê/ø/ø/ø/ø/ø/ø/ø/ø/ø/ø/ø/ø/ø/ø/ø/ø/ø/øR§Ô<~ O>ø“q endstream endobj startxref 834740 %%EOF rivet-1.8.3/doc/preamble.tex0000644000175000017500000001013412116077755014140 0ustar sunsun%auto-ignore \usepackage{xspace,graphicx,mparhack,amsmath} \usepackage{amssymb,url,underscore,fancyvrb,cancel} \usepackage{hepnicenames,hepunits} \usepackage{picinpar,fancybox} \usepackage{microtype,relsize} %\usepackage{xcolor} %\usepackage{palatino,mathpazo} %\usepackage{utopia} %\usepackage{euler} \usepackage{rivetversion} \DeclareRobustCommand{\TODO}[1]{\ensuremath{\bigstar}{#1}\xspace} %\DeclareRobustCommand{\TODO}[1]{\textcolor{red!20!black}{\ensuremath{\bigstar}{#1}}\xspace} %\DeclareRobustCommand{\TOCHECK}[1]{\textcolor{blue!20!black}{\ensuremath{\bigcircle}{#1}}\xspace} %% Bold tt font \DeclareFontShape{OT1}{cmtt}{bx}{n}{<5><6><7><8><9><10><10.95><12><14.4><17.28><20.74><24.88>cmttb10}{} %% Auto bold math in bold environments \makeatletter \g@addto@macro\bfseries{\boldmath} \makeatother \newenvironment{snippet}{\Verbatim}{\endVerbatim} \newcommand{\kbd}[1]{\texttt{#1}\xspace} \newcommand{\inp}[1]{\textsf{\textdollar}\hspace{1mm}\texttt{#1}\xspace} \newcommand{\outp}[1]{\textsf{#1}\xspace} \newcommand{\code}[1]{\texttt{#1}\xspace} \newcommand{\var}[1]{\texttt{\textdollar{}#1}\xspace} \newcommand{\val}[1]{\textit{\ensuremath{\langle\text{\textrm{#1}\/}\rangle}}\xspace} \newcommand{\home}{\texttt{\ensuremath{\sim}}\xspace} %\newcommand{\RGnegate}{\texttt{\ensuremath{\sim}}} \newcommand{\Delphi}{\textsc{Delphi}\xspace} \newcommand{\cmdbreak}{\textbackslash\newline} \newcommand{\AppendixRef}[1]{appendix~\ref{#1}} \newcommand{\SectionRef}[1]{section~\ref{#1}} \newcommand{\SubsectionRef}[1]{sub-section~\ref{#1}} \let\oldmarginpar\marginpar \renewcommand\marginpar[1]{\-\oldmarginpar{\footnotesize \textit{#1}}} %\renewcommand\marginpar[1]{\-\oldmarginpar[\raggedleft\footnotesize \textit{#1}]% %{\raggedright\footnotesize \textit{#1}}} \newcommand{\warnimg}{\includegraphics[height=11mm]{warning}} \newcommand{\coneimg}{\includegraphics[height=11mm]{cone}} \newcommand{\bendimg}{\includegraphics[height=11mm]{bend}} \newcommand{\dblbendimg}{\bendimg\hspace{0.5mm}\bendimg} \newcommand{\thinkimg}{\includegraphics[height=16mm]{thinker}} \setlength{\fboxsep}{5mm} \setlength{\linewidth}{5pt} \newenvironment{detail}{\begin{window}[0,l,{\bendimg},{}]}{\end{window}\ignorespacesafterend} \newenvironment{dbldetail}{\begin{window}[0,l,{\dblbendimg},{}]}{\end{window}\ignorespacesafterend} %% Make narrower and box (box must be able to break over pages) \newenvironment{warning}{\vspace{5mm}\hrule\nobreak\vspace{3mm}\begingroup% \begin{window}[0,l,{\warnimg},{}] \setlength{\parindent}{0cm}\noindent}{% \end{window}\endgroup\vspace{3mm}\nobreak\hrule\vspace{5mm}\ignorespacesafterend} %% Make narrower and box (box must be able to break over pages) \newenvironment{change}{\vspace{5mm}\hrule\nobreak\vspace{3mm}\begingroup% \it\begin{window}[0,l,{\coneimg},{}] \setlength{\parindent}{0cm}\noindent}{% \end{window}\endgroup\vspace{3mm}\nobreak\hrule\vspace{5mm}\ignorespacesafterend} % \newenvironment{change}% % {\begin{Sbox}% % \begin{minipage}{0.9\textwidth}% % \window[0,l,{\coneimg},{}] \noindent\hspace{-0.8ex}} % {\par\endwindow% % \end{minipage}% % \end{Sbox}% % \vspace{2mm}% % \noindent% % \begin{center}% % \cornersize{0.1} % \Ovalbox{\TheSbox}% % \end{center}% % \vspace{2mm}% % \ignorespacesafterend} %% Make narrower and box (box must be able to break over pages) \newenvironment{philosophy}{\vspace{5mm}\hrule\nobreak\vspace{3mm}\begingroup% \it\begin{window}[0,l,{\thinkimg},{}] \setlength{\parindent}{0cm}\noindent}{% \end{window}\endgroup\vspace{3mm}\nobreak\hrule\vspace{5mm}\ignorespacesafterend} % \newenvironment{philosophy}% % {\begin{Sbox}% % \begin{minipage}{0.9\textwidth}% % \it % \window[0,l,{\thinkimg},{}] % \setlength{\parindent}{0cm}\noindent\hspace{-0.8ex}} % {\par\endwindow% % \end{minipage}% % \end{Sbox}% % \vspace{2mm}% % \noindent% % \begin{center}% % \cornersize{0.01} % \Ovalbox{\TheSbox}% % \end{center}% % \vspace{2mm}% % \ignorespacesafterend} \newcommand{\pT}{\ensuremath{p_\perp}\xspace} \newcommand{\ET}{\ensuremath{E_\perp}\xspace} \newcommand{\MET}{\ensuremath{\cancel{E_\perp}}\xspace} rivet-1.8.3/doc/warning.png0000644000175000017500000003700212116077755014005 0ustar sunsun‰PNG  IHDRttÛøp pHYsHHFÉk> vpAgttÎ2N,<ôIDATxÚí½w¸]Uµú›eõÝOÍÉÉI#…^.½#$,ô*‚€Ø®â5tAŠ(赡^;-Ò‚€ t‚t=ÒN?»ï½ê,ïbTôÁ$ï^Ç7¾ñͳö^k¯õ;s9æ˜cŒIõ¿é}#ŠÓûFÿ÷}¤ƒû>Ò¿Á}éßà¾ôopßGú7¸ï#m à6 )å[~411‘6þÑ6ÚàÀ¢@.—cŒ5›Mív»V«ýá¸çž{†††:;;ÓoB6p|78p•Râ8‚ ›ÍŽŒŒ xâ‰|ð¼yóf̘q饗Öëõ•+WRJcôýþ3ÚàÀu'Š"Ó4…z{{O:餛nº)ŽãÎÎÎ(Š.¿üò_üâS§NP©T>èûýg´Á …•1æûþ 7Üpÿý÷H’¤Ýn3ÆÆÆÆN;í´ÑÑÑZ­V*•>è›ýg´!‚ë8Ã0\×=á„r¹œeYžçA`F&“pòÉ'зùÿN"¸­V €açž{.ç¼Ñh¤Ý6ÁZ­V©TºýöÛ׬YóoµðÎHAgs@¬^õÚ÷¿÷ÝFµÞ‘ëÔ §:IT*µ0Œ?ò‘ýK¥ >è[þ‡ôA‚ëû~ÚIבˆ/ ¼ô’sZÕº†0”P^fíýv`aԼ⻗K¯ga~€ÏµŽ>0pã8v]7U )(B©$ýÒ²ó›kàp§·(¨â@`Û& GGk?üᕾï·Ûíîînß÷¥”A(¥lÛþ >@p)]ûÓRJ­5cŒsÎ(i´Ë7N?íÌf ”[†Dœ@Ê…4ÓSü Î ×^¼ð‚K,ËJÿUŒ1˲Ö]ù§ì>8ç’$I’„‚µo´2 }ÿƒºóö?åó=¦•iÄm‰„p¢`hi€˜¤ˆ•Vž›w¬Üe—}û…^H’´WÃ0Œt‰åƒö€‚Rš¾ÂBß÷£(°MvöÂ3-+_«GA,£$Ö0E¡˜i{^> ­àûIi€.\¸Ðó¼ÑÑQJ© Ù\­µ”2¿&I¢µÎf³¶eÿøÊ+—<ò´’`ZŒð qL ÈØoŠ$|ó½§,Ÿ+üþ÷¿¿çž{zzz”RÍf“Rú}@#„¬ëbÍfÓ0 #££ßøúÅD!Q¡X±LP€ó¤ ˆÈO´81MîÔu§vZ’$”Òô:}jaOË4M•Jåçÿó‹ñ‘&€B![«q×ÔBˆ–È–Œ$]Ž p ¢h‰@ww÷óÏ?ÿ­o} €ëº•J%ã}àôA‚›bº®áûþ¹çœÏ`ØÜ®ÕF¸#DP'Ðɳ«}&M`jxÊ) +•Šëº .l·Û²Ù캟ø`·ÜÔHÀ›>ÜsÏ=W*-5%š %@é0é(R–às'ì?©ØÞoOš3‘„°(*4l¨t0ô<ïôÓOÇ›~Ÿ¿ù‰ÿsà¦Ö˜R*›ÍÞwß}W_}5@5¸ JÁ¶ÁÑV{íÈ÷ßcÚË>{ü¾Y H@E·é›.]BÈO~ò“Ç{Ìqœ¿Çw]ÌÿpSJMÔ¯ýë„ ©àXpM Ä©'~,œxÑ×Ìé·çí Ì¢ PJÈd2éLúì³ÏþGþWkj˲®¹æš{ï½—Rª¡(J@5D$8xl»q±>´´7+««—žzÒ‡û{¡™$à!$µ½<ÏûÃþpÕUWqΕRoóþ_—’¾°q_|ñÅžçù¾O‘H8v–($!rÎ:ã“CÏôd ª6ÚýÝöqÇÌT©.å&(¥é|¤ÝnsÎ/»ì²t}s}pÉ›ô\†a(¥®¼òÊ矾P(`Œ)$”RP ¸;¤ØßÃãæÊ‚…¤Qí-¹+_{fÿì4m`‘¤†št©¨P(,]ºô?øÁ߀»þ¿ó¸oåoÕ€†’‰ßnžwÞ9âœK™h(ËæaÒ$@W>sÒa=vwo_¾RË2±ˆbéS4¿xÊ^6´U’†aí°‚‰ò€‹.ºD+¦5yó  Aôÿ*p•†ÒPív („m%c@C% £dáýg­Vïé*(©¥œsÖö›S¹,>uâæRŒ:½‰vÍè̯jÖÚ†AÝL­6±ï®sìWƒ( x‰H48À@ ´ZþñŸü4g£ Ð1´‚‚J€¡Ö}ß{n…\×I­#Û¦ŒADPË—½ò‹_ü¢·+;>^K¿Ee(u86ÛÛ·ÁÕË9çŠðFœØÅÎVBíl> ü¡U¯|îØÝ'aRA(JjAIX¶sçøó£OתU :öÛÈ¿vÕâý—MIj9±7{ ¦ššÆ߸¨¨‘±¦4àer“z;{» Ý8ö‡ZÜÊyùF=0¹§„eðŒ’LIj™n«ÞØj‹-øèäbærÈçl(P* fXõfõ̳JE¿Ý¸iÙ"–Äú_.lÛU Q( âXÀ0ùîºë×W]ÛÕUÔÓ¦O/Jý“úû&O›ÒY>èc;l¿Í–/,}®TìLM`[f.ð•ixÍzÏ:::^}ååÃû覛ö¸nØÝ]è›TÌØ”m$‰t2î}÷ÝsÇ]wº^FIn0“ÿB­ûþhDSžÎ£˜I@Ðh6žy¶eÛA(æn¼q¾ÐY,u9n6ÛqXv-q؇džW˜œ´šÍ¼W”1aÔM"J‰cpÇoµ ù|y|¸£ÃY°`«R1a:îëš\Èõ²ý†•‰ ü–á˜GsL M(JƒâÝ>ÎnHBÀ8”Ôa3Fâ8¾ýŽß¿²ìÕžîIS¦Y¦W«Õ:::ªµ²çðÑá¡#ÝΤÍ8œ(æm ¡„dÌŠBiËÎbibl$j×gLï_µâ¹]wÝhÓK"®‰XäŽîŽYÓ7¶mD¦j•òE—|„RfDQÀù¿Ôô|ߌRšªZ)%cP/½òâ¯~ó›)S§+B»'õNŒ !ƒHBÓŒgNÃûo;:´´»Ä“¨šó¬0òciŒ“ÖZ$QÆ3[­‰¬G”(ÛfyŸ½æöv;I»eQ›++ëe …BO_w„ÙbñÒ˾ùè£ORNcéµfÙÿp5 ƒ@! Ãä†aH-žéŇzHJÝQê|ù…—¦öOÉefs¼X´W¿þáùÛxf½”KˆªÝƒr.c&q›B"M®Ç'†fÎèS¢½rå Ó¦äÆGŸÛa»©s¦w›$$*i×kqr™B>›+eÃ$N‚è¢K.ñ2í õ®éƒwýéÖZ)%¥Ô ”„íI–+ãccc_|q__DÈgs£CŽ© PÔçÎvwÙqV쯱yC« ÇŠ´l@ùœ%¶C„j+äóÆÄĪ\%Ëo f­ 1þê1‡Ï/fµŽk¶­ &µŠÛíöÌ™3'Ož à÷·Þúð’Ç´ë¬]rO½”i;õoÐàþÍä’B)%2ÑÔ€±ññB¡ðío»Ý lÛ-æŠÍz‹X\G~Ù1"}lÁö†*'uŽC›ÒÑЈˆ ‰)‰‰ Úm›¶-Ú´huÞ^[ÄÁšR•‰•ŽÍJ…|³Ùd ÅžfY_[øÕz³Fqê„㜯sÕ[Öûe ½—঴ÿ®Ãšq…À÷sùÌ3Ï<}à 7†Å £0´ÓÊbʳ¿6¾ùƹÝwžÍUÍP-¦ÛmF"NBÂbJc$$$‰)R|#†HGõ‚-U<¸÷î³çÌv£h¥Á}†ˆh„~È›Ü;©oRï#÷?pû­¿s¬¿¸z9çé­®kl¸à¦”*‡¿taP4šÕJu,“ñ¾}ÅåŒÙl¾ÙµFÁË3¥8"ÇUŒÃÚ™ë1Cµ˜Š¹Ž™N8I(”$ H "A$$LK¦ÓRAÖPˆG‹ÿÀ¶ö[ãÝF6¢ tLÇä†Ò"“q3ùìE]24<œ.¯­ƒ8uú¼O÷w@ÓZ‹8 ‚v6›¹óÎ;ïºë®B¡$#‡B„ʳƒ*•´&ƒ¶Ç¶[õ–Ç^f*fRsÍ E´"JD¬uÁE¡¨¦L#gX"hf\¿YqÛíz6ßœŠx\Kßäܱ2„v³¡e´éƳ^~ñ•o^rYúÈ©r „¬‹&ÙÐÁM]ýëzR*I’ñʸ阔“ï~÷Šb¡Ôjú¾f¼œçe£ ”Q”ø­0ÀQ‡Í ýÕœ4¸\® !Jk¹ž ¥E5 )Ñ”*RÊüz¥#Ïâx«=t×8‰m&7’XÊXrƒR¦¥}}}?ýéÏžxâ ëVàS…ð>åV¼Çà®ÿ§"ŽC¥7ÈM7ßð /tvvAÀ©i›žeX­f³Z‹,˜çΜÑU]–w%%škÎ`PmЊ¤¶ÇºÛ¥é ¦&DSª9•”&‚‘¶ç†ÍÖ›l:i‡í§œÈ8!š$qìZ¶ÉZ¥:wö-qùå— qÎ×ů¿°¾_à®ßs…Œ SµZµ+¾ýŽŽîjµiš¶im¿.“P&­z3Çÿáfu9Q5ƒ)M`(b'ÔJˆ1#"4F•I…GdFkO+䈸¨uÓ1›vÖ1-ÚRÁšC?²—¶J^^+"´HTÛ꣣å¹s¶¼öÚëW®\ Žãuànè:7ŽcÆcl]/ó}? Z%çûßýf³‹ÈI"šËåí ÇÓåêªÕ#¯»6¾ø¥ÙB¼˜ÍTl–ˆv[ ™h¯A2Ô«»m˜Útµ4YœåQ'º…(ùÔ®[²jûvŸ·f¢/õ·jª`Rê¯ì¶×°ç€?:$Zçxa†´–í°µ4™òº;z<òH¼™6”ÎýÞ§ÀÈ÷ì¢é[V«Õ(¥q§Íƒ«ï½÷~¥à8žã8ÅR­6Ñö+–‰®ìºûFžëW&Þð Ë62B‚˜ ¸ –Ò¶ÔžÔ¡²Zg•v”¶LSiGÀðÖ ÷Níhµ#ÇÍsæQI¢öøgO:¸¿i—GG;KQøA£ØQ/W»{{V­ZuÉ%—d2ß÷“$±,+‚ ÜÔO»€išÍfÓq%Éå—ÿdõêr¡˜‘º%dq]™5«eЧ¾³T•lΔRÇ!c¬7"¦ÐŠIi jÅžtÒ¨[ªRD­Ð "³¡XD¥eS¬`ZÁ™jpWÒ¤Þn¼±*iÄì|eÅò¶ýk¯¿ÔÛ‘ñ«~Þ,Yff¢>Ê麖ã8guVÇq¿¯±e︌1­u.—KuY’$¥Ré¾û—\síï:»¦¦ã¤…­\.÷Æò78¨RØiGòáý·«–—GaÛ1³&ͶÛDP7WÐDICR[r.<GÂJŒ(1Icª©嬰#¬[Ckj†er77{Ó½­Ì&ý3·Óûð;LŽ >Èci/cæÇj#™.·ÙnL›6MJyᅦѫRÊ÷)¶ì½Ô5i6©Báºn¹\þÕ/¯*§â5Û BcÛ1ªãc¾ßêÊå9pÆ—?±|ùC}“¬zeŒ žq{âØL˜•p&!™Ö–Ö–"†&DkI”`"æIÌ#E%²µÇa==Ýs‚D6"½l•úÔ®ÞyÞ÷¿õƒ[¸×øònf âz˜„ºØ•o‹F;lÛ¶=yòä .¸`éÒ¥I’0ÆÖÐÙ@ÁM;‚ëºããã¶mß{ï½K–ü¹Xê©f2©Ó`õZÍ­5ÆþhïäIÐbT&ͬ£ÚmÖ¢|®ƒ0 ª a¡„sF „ÆšŠš&€EBHD!ö%âB³Å³…©=þú²•®bÉÓxõµ·ØlÊQöúk¯YR‰L>W÷[Ü4LÓLÕ׹瞻.@xCw+„RºråÊ믿^*5^®ʘaI¡e(UZ¤1ð‰cv_¹rÉäI™V­aó‚Á ­f`™œÁ‰€æŠ8Š›ÒŒ@™5°%>Ó‚iPHBmL(Ö´ÜR«•¢IïXMLš™ëŸÅF+xxÉÒzuü Ÿ;,°¤árÞh¶ Û£”RJ“$éëë»ãŽ;/^,¥|Ÿ|7ï¥Ë1çT*•|>ÿÌ3Ï<øàƒÙl–rÝÓÛ=28j0KÇÊšRËÏž´ýF3ÍR!\½|Jß”‰áv>_¬VËц"¦‚Ó|L³1·a ’"æZp3-4Q‚ʈQÓ™äff9öœFÓÛj»]cM‘#^vvLfzâØÃ&UG[–ŽÃfñòI"ËåòÔ©SÇÇÇ9çgœqF5½Aƒ›vBˆv»}ÁôööJƒFB¶s™"SF³RãÀ¤}Ôc£´–³œvUe½þDX Ò2P²ÚHÊaVÏí÷¾xÙ•kæ©5ÅoR.ˆG䤒Ç-AHaÒÌÁŠþÅ¢;üóßÝïªfÍÛh£Å®\Wß,p¼ð<†‡’À_ó¹OÏÏ;`ª®’XFšQ#{ûûû…­VëÌ3ÏÄ›>èôYÖi‰u>ßÜ$IlÛ®T*¥RéŠ+®Bh­…ˆ5‚(ªS+“)8åäÛ8-¨2¨t¡l SR "^zvé䎾þÞ©‹nüý·¾·æþGqøÑwŒŽæ7šº‘™Fubtè Û6™‘¿ÿ‘•ÿyæƒzô•E‹_¾ê×÷\wõ]”&Å’»båÐÆ›ìZ«£Þ¤a\ñýåž»çË/–§÷uJ¿•Ëz¦iŽŒŒ(¥Ç½á†V¯^ZèÕj€aRÊ(Š\×Ý ÀM߬L&³lٲ뮻.Um”)Ã2iR%MŠj­±éFøè~›I±Â@“jE¥åAY D¥¨œ;sc¦y’$>ÞÒce…S>wÍÖ ™9ÅB§iÁËæÊ5rιϮC@ósÿczï¤Í¾ï•›®»zŸ=¶¥ ­–Ã}÷?3uƤñòK{ï¹Ù›¡6²,cªzuܶm×u×%P¬Zµê‚ .(‹F£X,¦Ýö=QÄï¥[©TLÓ¼òÊ+µÖ”R­5gÄ2`rM‘¨¤Á€ÓOûH«ù²gµ¹N˜4ˆ²ˆ²¡šhIÓ ¯¤<:üð¹‰@ƃ†Yná´3¯X#k-#Ò™j[Ûî¤(B<³¬¾ôµ7ÂPÍ9mé“Oì°ÍP±PbRÿÀƒ~ʰ fÄo¼þØÂ3±t@E™S뺶m·Z­\.Ç9ÿéOúÔSO¥2c,ŽãÔOÒh46pX–uÏ=÷,^¼¸T*)¥ÒÙ„±mÛÔ££c{íFvÚi 2ñMÔêììLc¤{zz}ôÑýèGÓ§O_犬×ëï÷Ò[´hÑ’%KzzzR?ˆaJHN¸R$œ5kN±Z]fñÈ`ŒJJ(¢4 ‹$!’à±e^—X=ör<´úÎï;éãGÏ59 6àkìwàâzO„<ïÜ¶Ú Pðë G¶ÇA ¼õ·‹+ノ 2>uzû§…Õ¦P9xø[·Z¾mÛ™L†Rª”J‡ŠññqÇq¾úÕ¯¦Ï’†¼»®»Î~øW«×Ea ÖNÃ@\tÑ%¤Š•q(¡ƒ r=K©V”?yÜkV>ßÛá–GÛY/P*˜–T)hJ•I5íé-DQ½”Am¼^pEÐ|õÞsñÅûdþà’—ú{&é ”“cØŒ(•ËFÆVÛ®TÑð¼=æn½Y¶Y{#hUÇ›(ו¢Ù|Ni‘LÄ—¿t*çÒª 3M únV.ß!¸ !eÒò'4ÚµA ¥oë¿_[¾‚œ)ƒË(h1°œ— E3R£ŽÚÓ³ü¸VnO4gL­M´¨éF‰GLÅÒ±iH;Ç<;‘F€¸J:íN‡D«ÍôÈ>{L½â›ËX0…a‘ÉsçNl)þûªç;îG_:á{×^ùë[îZrßÒ¡»Ÿm’žáÕ­>§Ø‘`§Y†­ñbO¶Ò.dHP]~üQÛ«`0çj™(ML0«„,f©0úþw¿¿rùÓÅQª”ô]Åç¼ãž›ËÂoCÈ8㺵юBÀððÄÅ_ª5±,622d›fWW‡ˆèX&ã½]Ø{ÏM‡V>Û]ôzò…ÖDSCª8ˆë~T³Y'ŸÍ@FÕ‰ñ¨æ½RÁëôëa»Z·¨Áಗþ´Íf¥óޤ´ê&óºzŠ`€FWKî]ñ³_ÝvÊW¿~Ým÷UÛ´£ÔãW«ÛnbæMB‚(ʵA” k ¸{î2ÉfImb´Tì„58IT¢  YrÆWþP#•Q×a~ü. ýÿ¢(e:ë,LŠ¥Ô|=ˆÚRIC ®$M)d˜õ4‰Õ§ŽÙ+i¯ìÊká41˜‚ˆ=“f]BT«ÑXÓj¯± rÑq:ü6ñ}ßsYGwì0ïéYS‹Co<±ýÖ]ç,¸ÝæîîÛÎjŒ-Ï9*hGAÍ4$£:q+ŽZ”&…¼—Ïgâ$X±jŸ8~äJí8žËZZyl°QYÝSÒQsY¼xÎ׎>ý ‡m½ÉŒ,c*¢2zzûm×ITÅZ}túLcÎÜ©¡R1çT)A §”k­ƒF¹·ÃÝe§M+q"ÄÚô70›F ”áܳ/¥°ZͦÃßÕˆÿÏ%à†A’È(RõFh›Ùÿ:s!³øèè ÃoIƒ{ù|žÐ8 üÜ?ôÚ‹³zjc«óy $ôƒ6·µDÌmfÙFËr¥Q¯…šx¹âŒ¦Ÿwòs¸Ó³b°²jMÝ󬩓û [F~kùæ›dšµg9)ÿðŠK&•úœD€R²fÍH;𥌙!‚¨µÍ6s2¢°1­5!š™¦Md6Ç;xŽBb›t’)¡†¦/™I…4ž}úÕË¿ù½Žl–Aw¡ußé?FqS"ôË´ò¹âíwþñá1,¢ìŒ+„¬×[¥ÎZ½:6±rþ¼­gL²­Wë…B‘¶d†2™Ÿ@ÀÔÜ%Fš%nL2¬~ÓžÎÌi™`qg{¶*tΈDil"®†FÍju•Fc›mæžwþÂÁñÁœÙ8„:ëëëËLfDÝ=d‹-¦Š¤*Dƒ%!š°8Ñ&·˜†Ã’‚ìý¡¹QK3¦Z• b©4(`|ãüKÂV“¨wÏðŽÁbÄ0,h´šú´/AM¶#fSÃ`QBÊ$n7Æ;KüÀí]¯4z{¦OLø¡t+> INš]-‹Œ®jÛ«Ù‘ìsr[ræ½U¾ùßwžüÕE_\ø›üâ—ß°`ne8[2{v®4'[š c`朱jó•×V<öÔ ª7(q„ä„›„¨±ÑU#Ã+·ÙjÆœ¹}J62‰ )¥fk“*ê0Y}fÏ]¶ØÝE@*h Ä†Ö \hú‹Î¿X…ïʉþNÁÕ€Œ‚–m~ý««—¿²Œ€Bƪí×I´|mROf·]6ËfµÑÊÕC›l¹ãÝ<Ó’%iͬåàmš°Ù¥É»»v|ñUùÍ+n>ý«?úŸß<øüò Û]ð©q÷µ…_àüKn{ø‰v¤fgöòA‘ëÚä™Ë[n»ïåßûå²ð²Y‰Ä0M(å˜F.gòfÆÃ6[Í”q•‘¶É•$ !”#N´Ò,c¹ÍúD!ÚæÈɟٵ݀c‰€€ae¹±ÉHO¡ë²o]V¯´ð.6$xÇg*YŽ“52ìŸþn&/£Är84LJ8„”uŽ‘•ƒÜUÄã’´™gk;ÿÇG£³.]J²ÛY{Gl»§_rÏ<ÿwZpå¿rÏk&]Ô §w´%›±íœ™ïœýÜKÖw~øè%ß¹ëW‹ž0£NÞxë#¯¾ñé??‡€b¤Õ¤¶ô£¦ã8ŽÃüæ8#Í©S¬íþcVŽs ÑÒ2L­Xœhn¸J’J¥¶Ñ´ÉÍúëåѧö›?g·@X”PhıC$[åÚHÆÌvÈQЈ¢(I’tÚV«ÕÞGp)³&Êã†I¿óßWŒ—ÇüVŒEMÁ¢PP$9:2Ô:äÀݨ×b\‘V¼ÑtŠpЏë¾Õ?úùc'~æÊ/œvû­·UZ4ZX98ZnT¨M ÇsGÆýÑ ïØ‚;³Ÿy©qÇŸ^9ÿÒkóÛÇn¼íÅÛïY>V‡âБð( êÓz2Zõæ!ìÝ®BÔ™Ž˜–oGT)pMh¡P^ÙQ0¦ôÙÏ<ñûóÏ::Ãá°ˆH -@)´bÿÅ—–]{Õu–e¥EŸ …u>³÷\°l¦ðÚò×ù«ŸA'€r4 Ƙ†m òÕÀdÌÛkSDƒ ål>qó$&‰/ñÆ~~Í#wß;øÒk,ãõ¬È`rBEX=2ñÌs¯úÍá¡U£ž!'õt…4¬ŽÉÓ·”¼·ßñÒù_{ÿƒ+´¦ÙŽbŸJ :‹–Œ«ZÕú°×®[FíQÏT Ó‚)Mˆ•„J‚D Q5eXÏ;Qg.8ý”mU¢-4M:"0 Cåfíü /P¯×m{m’±išo3pï‚KÃ0±¬Ì³¾6:ºNÎó-B8šYZàË_ÜݤãLWlÚQMÄíLÆ¥Üб0¦LÛxÓ·­µ[‰ôXJP‰™Óð‰#{¿uñ‡®ùÉ×¾wÉ13ûéë/?"âÁV{襗Ÿ¯·’f`6}³ZeÐ9h§>VPì Ž‰ÞNÇ6Âz9üò—NXþÒã“J.W¡¡Ó š à:-ŒC”— %+hµƒf8Ð[zí…GŽ=rמÂÚê944@Lª¡Ä«Ë^¾òÊ+mÛNáSå–áxïÁµíÂý÷?ôÛë "@B4ÀµbI¢< ­&¶ß{í>»9ñbÁŽ ÑæqâWêc !°í¸2±¬Ù\Ö™iÍhz7Þ7ó­ wøñò…Oï±û6¹êë÷ÎÈ×þûÿÞe‡–²«W¼¾<ŽZ#Ãã«V kiºnàЄqͲš2)Ó‘£~£üÉcvœ2)ÃÑ[ãLÅTK¦@5¥Šjp¦Á•ÜcÕt­Bg¶wbõÐÌþ\}â©ÓN™e3p$…F…‘&IÆsO=õÔ0 Óbœóß÷\@cáÂs,‡‚ÚðUÆLN)ÀNÿÂþ•± VËÙ1aÑÉ»ðT(HŒzq4ÆÁfÄŸøøV]¸ï¯ÿç¸KÏ?rß='ÌÕIí9Y{~Š×è5GÆ^»uJÇê®ýÒm·¿Û®h0@ é·›€â 5Š®eÈš´<>2c sä¡û ­|eúä®$hr"™AÚs94Ñ„*E…bÍPÔ ž1TNÒaI£úüÙ|³¹`‘`<XJiEµ¦*‘±âŒ3Î(‹a¦ ߦ+ò{Å®úÍ<òçlÖÀ¸£`”ûÍ·7Ù¸?†]3’QÍ"„ø¦£‹I=Þé?fÏûýáýfž|òngŸ³à㟶õVm*^¹¸1ò€½^à•kšþJÃevoµ+»lÙK¿Î¹¯}ãüOÝ~Ë… ‰CDWÖ¦hÅA½Ëéø¹›ç£¿ÏýìIǼ¾ìùþ¾Ž±‘Õ½Ý%EL+’Ž:ššjPM„`MI|-íV Ý…¾òÐ`OIˆèõ£ŽÜbú8#Y0   a÷õõýä'?yöÙg}ßO‡²·Yî÷Ü‹.8˱ÉÄx€ŒÇ‰o ´‰Ê:8þ˜}GW/ÖWТÝlTmÛVšÊüvc¿y»|?6o‹­çäX´²1¶T…k³saŠèDÅQúvÆÓ†1T­4Ñ30³ÚN.üÖw?|ÐY¾€„е_oŽ0¨S:§ W½±4ë´.<û³³§ç,Ö®O¬î,yÃÆi Êá‚0I©"Q„ÄÒËX‰Tܶ(7Â8êéé ãÆÄÄ«|tû™3À dRƒ–©ÃA0,2<4dpzê)Ÿ/• Ij©Ë^ëÔþ‹ÕðfU‡· nº<Aº EÑÅß8wÕŠ—U (p³’)ðÙú§tù^[´&˜`jÓò ¡2:På =èÈŠÑë½ ê±:ï¨%×Ü–„|bifH‡÷Ïê›:;¨ Á_?äðMÏþÚa,^Ö{ºà6]3 ‚š—Ï„„Ü ;ävÌ M %Â@l@ľ2»ÔÓ—êqÀ,ÃuéŠ×ï;ká…,2™t0,#‰´e€hõÈCÜqÛͦÉ…JTZ>é YCi$í°¾>¾ÿ\)¥çyi4‚a«W¯N’äÇ?þ‘ @Æ6¡¸ƒrÛ‚ea‹M±Ùì\ÞÂúHÜ®ç=×ó¼†_%V“YÎjeW\O*ä:½\ÔŠÊ•0[˜â¦µ“BBzí#Îl¯g·&6[xá=ìOwÞ/映Ls`öÀœ&EÑp1ŸœxÜçžyâqŸØÃÄI‡ 2f¢ÊHÑ6H&MŠ%šE %m-S†¤¦¤†Ž¢48Ê”ÄTÂE«hÕ¾ð©>ÝFo‡’H´ç¸n’À±L'îóÐhVªÌä:ŠGH"$©e¦\Û~[à¦1â†a¤µ¦L™rñůZ3žv}Bs€P×6Tà°gl4­2‘O¡)! Ñ5ƒ¬°Èk.3Q£:$„˜v¦Üh›…"/æF%F%äº|Õ[©÷ÿôÇÏåô[žx8Ùn‹Y;l½iÑîëÉçN™´ãæÓÂñeŽ>ã3ÿô²¯í·ë¦º±:é ÕNjœV8©qR3YÓd NR®qÔÒãœÔLÝv…ðbx‰ôáÅÚ‹•ÓLD½Pðfý˜ýöšÝ‰x\ x"I‚¸-'J¬Z3ö .Ì–ŠZ b€0 X¡B ÞëAúÏÔBj*§!=###]tg\F³M`´¡±ñLì¹ë¦6Úµ1Ç62®í ldli ß’å ¯¹¼móD«$ £%O.o{ű:oFùξmZqçÝZ~ÎyW-}Ö¯Žg\sºíÖX£;kÏ™’§þЬZyù¹Ÿ¸õ7î¹uiìµ{YkÙ”|@ý!K¶ sJJšZJ˜ZJJR¥Ç % %¸–Li¤9lL+¦)Sœ)NµnׯLÖúê—w1!OL  F(×ËäK…sο`õêU‘ˆ@  Æ£T ¥Ô_ÍÜþ¸ë ýÚ¶}Ê)§`Ü‘(2Y£ÈËÒ¬l×s>süf9ÓG<¸aqE´Ö""€™¼^™¢f! :JùÄþOþh÷¤'MÞkp(wõµO~å+¿X|ë“ad7'÷sMy«)j¯w«Îþ¼\|ôæýµÑ—o0ZOL/–Kt¥½Úíú¶ÐVb[‰cÅŽ•8o¶=+öÞ<’6l+q¸°$á1¥×GÄhD­ˆ° aDCW÷ÚËͶF+3 @-; pÀBY©44È—¿òÛq¤ŽbÙŽ…ŸfÇQB fBß.¸ëj$ÞrË-7Þx£eYa‚["Šv¢ °ÛXð¡¹ÍêK U×&*NÚmß²<Ï¥~Ž (0}øÒÉæ– €ùеoÿîo}ÿî­G¶¶»Œ|!ÛmµõðàØÒrkåVÛt_òÍã¿qá§6ßÄiVžâdeÖ-ƒ"¦´¦Ñhû`RQ€jE¡ d:ÓÑ ŠÐµ’´- U 1cEF3qÄ  X&‘|bÍÄ“§Ÿ±~Ô H‚Ð8åŽX¶Xúíõ7Ü{ÿŸ(¥¦ÉMƒ)ètP#Œ‚½]µÀu]ß÷/¼ðBÓ4ã8I`µBº‚°Œ¯6uåqø!ý2yrˆ¨šÉ g¶–RB ‰6[rR ]¡YlZNÝ uA>¿2À#¯Æßüéý=¯Fý’ë߸m°Ø ¢ìP•­ÜçÈ¿ûë/ñ™=x~|´ýÂ`yi@*,'.[g&W5¦“l–÷t´Ùv£¦5í iEM;ªaÝ švÔ´“¦4íôÓ¨iGm;ŠŒ(6ÂØŒ3Œvb‚E‚G1m V7²Ãå?ÏÙÂ>à`FÛ@D#ŒÔ+Õ:€s¿~þxm\AiJ UšŠäí™b­V˲,BÈM7Ýôä“OÆqì84@ 8& ‚·ÇAÙqdõ‹ù¢aÚ™¬ádZaD´ó~à$2GÌ"±2Úd •ŠªzQŒ??ú4+kg›Õ2D½U4H}þüiß½âãÇ·k¼ì×^v¦­ÛÝE·à™~£91V†f^¶@ ¯ÄÕv[3©i¤y¬i¢X¬ KE…&BÑX¡˜Ô4Q4ÑDMˆÕH%@‰fTSÇ0‰€Cuo‡1ºê©“OÚ?Ç‘apM¥e$#PíZ ôÁûzâ‰ÇÖ ¯ÂZ‹ ©9F5]¿´ÖÚ Ôé.NëŽÆqœÉdÚív«Õ:묳þ’é)bö L¢ä‚k|ú“û¯~í5“)aºœ4¢VB#nÅ”ÐÂf¶) ÙŠy¤Œ(q„,p…ä:”_{pøÕ»Z+–vëU_ùÄv?¿äíÜWˆ_COö ÚC¢œïçC™ ¨Ó2 2_@ÉŒ\Ú6Yb:4ãPÛHKD–Hl!m!%©][¨õX¬m$Ô‰'ÊÙ‘íD¶ç¬8kE9+ÊedÁ`¶PRF‡†ç7¾~êF›H  DŠ@ ·`°#þxOow+h$2æÜP±„!•ImÛÖZ†á8Ž”2ᙦY¯×=Ï;ÿüóÓý- Èã˜2ƒ7l¶ .©Làó'͘2)øÍ|¾(4O@cBB*#ª"&ªt·¤Œ2¶ípÛ†vŒOïAžÁlD»n¯8gÞ/;é M§Í³jÐSC1ኪ'švâ›"1Éa‚0I¨ÒD ¢tH´ T2&•œ N…É“J‹%öZ™k?ÕÒÕÂS2#TFJWJOhW*§Q“ùl¯kåã¾ ÚÝyc—¦o6IF`‰É¡’ÈËt¢ f~ô•3¾šq2ëòÞuò·N^šj€4?SaÛvÚÎçó+V¬øá˜öè4rÍ4˜–mŽ$öuwüØvRÖêšZ’¸1sCnÆ‹ s"¨)¡^,xU±Ä#-˜m8Y›žðqºóöøÜ øùþãòoî·ËNHüGëOÙzÔEÕÕM‹4-Òf$d4¦4&T€ ÅcÅCp_ eVµYÓ¼XZg¡³Zg¡óZç¡‹Zþ"uñM™WȆ,ðLÀ³Ï<p70ÌÀ°í÷u5 V¡Dl6Ñ^åuÖýÄ¡(æ cm2A ýFš&~,"ùãÿté‹/ئ­µ"œ !ÿºã‚¦–€Ô_™¦¥óݳÎ:Ë÷ý´e*â(góÎ 8ÁÙ ÷è,Ñ8 {ºç®\Aýh#?ܸoÔŠ6jdzƒ`ãÐßÒ7o`ú¨èO¦ûÓ[b‹˜lé‹é;í~ô¥ß=倣>ît”ÖÔ*Ãõ Mò±1¹­šÉÔf2µ)šÉÔ†œR“U9µ¢§”õ䊞\U“«ª¿¦úrr]Nª«)U9­*f—åì¿–sËrî›rö›rvUnT—ÓjrZM̨‰u9­®¦4dCNÖÜÑæ¤Z0M²G*¶‘éI¸þÈÁûì;Ÿ-I$- ¤«ðšCQhþÕ¯-Ô i¹_ÃâoÑsÓë8ŽSp«Õ2 ã‘GY´h‘eYërt8çZÉ8 ƒ6ž‰þcöëË– ­i%áô3¿6xàÁO}ì Ç?zÀã=àÏ|lÉ>tàA÷}ä vþð’}Ž}q—Cï_pìãóŽº}oµ×ÏwÜÿªY;~Û}¯>ø3wñŇ÷ùäC;zßß¿Ó!ìrèS»òÌn‡<¹óaKv>üŽøãNGÞµã‘wí|Ä];ñÇx`×Öì~èS{òü^¿²Ç!ÏïvøC»q÷®‡ÿ=ßõwòîÝ»{Þ!w/8èîýqÁAœðÝó¾kßCîXpÈ];ïsó‘Ç=sÔqÏìµÏÃG»jp´óùåÍWß:ñ„Ã9AGÐJtç;¨ezP,ãåï¼ý¾›/æÌŒÃøë ºn[BÏóÒùXÚ‘¿öµ¯¥ŽáuNbÎ9ÀÎ=ëcZ‹º»'ïeJCeh@’@RH’Ž™Y Z±€Ôˆ×iíaÀó5P­£\ƒŸ "H ’Aòµ, $&„0¡8ÀFÀ5L ®¡¤ñvY§Wxó:` éŸ¦…lZBZcÖì™=½¶a–§ö{‡ä6kè,€ÕzÙ¡N 0«:^…FÛ™Fõþ›—¦–ÀºüÛ¶9ç7ÝtÓ<Â&Ȧ•)( €}?äÌœe <ã ˜+FªÏn²9r“ëGvr3P˜Â4úš==ínlÑ©yLÍc 'ætªÍû°ÕT” 2ظ› `Óé˜=“Ðß…é]˜Ö‰©]˜Úƒ©=˜Öƒi=˜ÞݘÑY˜]ÄÜ<6Îaã,ææ1«3;1³k=îüÜ…iÝèïÆäõxR&÷`r7:2ð äLÌèÆž;`õë¿CòˆÅŸ-?÷ÙOUÈBI˜Èfó³˜ Å:º;Ÿzòù]yeúÒÓ¿N$¦ëh4iÆÓý×QJËårª2™LšfæØ0€/Ÿvxe앞.‡’Ȱ”$åï_yôo¯ÿôõ×úÆë¼ñ·ÜpýGn¸þ ëo<î†>}õÏŽ¼ýúÏÝyÓ±÷ßyââ¶¹íúuåáÝõ™{n=iñ¢O]ÿë¯ÿåI7þæÄ[®ùäâ뎿eÑI·,:é–E'þîºão½îØ[¯;æÖëŽNùw×sëuÇýîº/úô-‹>ëµ§ÞzÝço½îø[sëuÇÞ²èØ[¯;ö–뎻uÑq·,:îÖ뎿eÑñkÛkwËuÇݲèÄÅ‹>½xÑ)‹²xÑg/:ñæEÇÞ¼èØë¯ùøï<ý®Û¾tÍUÇœwö®Y»Ý×mÚLª¤ÕÕûô§·l5‘ñµI¹>èš<Žc€74Î9ûà÷;úwóþG|Ûüƒ~ÿV|Ç¿žçüyŸƒnÿ{Þ÷ ›<ôú]vùÎö;œwÑ…×+ËrÐö£71mÛV"B­õ7.¸ =ø—Ч֝ÒPäoeê@ú×KEÓÚdoG*ɬ0ɶ;P¶„c™ ŒÃØ×Th˜QµZò4^~é'žx"Åײ¬µ¹XJ©çž{@½^7 #5!þ~{¢ ‘`¡&1ˆS°À Mmb·d*Ù[2‘ôƒaõÖL{ W°B®×%a˜V&L"I”J@„eò´Rw_ïdžçÔj4$'Š"šŽfaŽQJ;::þIÙ ¢aÀ$‚à <ò:¦DPéôÈßKJA9ð7Òa`¸¤  vƒD-Ëæ@lÙ”¡í7µFWWÇŠ«²™|»Íž=;ÝP$Žãµv®ëº‡z¨R* CÛ¶Ó aüïˆ1ƒÛ€k"c!#¶®ý¥cÁyûÒ€mÂþ{ùN¯óžü®ALÊ411xBM•è·T"Bt”r©ž ˜R+ŒÔ‡>4Μ9iGÌf³ÔuÝÁÁÁV«5yòäŸýìg¥R) ÃtÞ· )b„BDo[!ü·Ï‚·äwt‘ÂÁ;’º%dKË––-%}%"•h! Æ'ZÃ4i%R©~䀻ï¾ã¯V"RX3™LÇ'œpÂSO=õÜsÏÝ|óÍ·½Ýzûâ›ï¸á¦;ÝtÇuoWÞyíMw]sÓ×¼Myó]×Þü‡kÿ^.þÃu‹ï¾î=ï„o½û··Ü}Ó-w.þÝ‹w×âÛî¼á÷w^Ç‹î¼cѵ×üâþ{oÿ÷]ý›kn¿ýöe¯.ûå¯õ·Óßu{F§›ÂwvvΚ5kŸ}öÙÿо öÛwßóìûöäüùû.Øwþ~ó÷ÝïmÊyóÌŸ·àïå>óö·Ï¾ï|g<Á>óöŸ7oÁ¼ùûí3ÿy ö›·`Á¼ý÷¿ÿ!¶ûn{Λ?ÿÐÃÛgŸÍœ5Õui½á¯/MU¯ïû½½½Zk!„eYëÿ;¢\Â|‡l½{V°ß+o›,¢¡×F£j Å $ƒæ~Ë£PQŒOŒÇJfóîú@)M éZ!dtt”¼%˜ Ö;`fÁxOØ÷l€ów|ŠÉa2X…u+7S0MKII9éè,r®W¾ñ·±b•J%I’t¡-µm{zzä[‘’)ÉäÛgÍ$˜x/X¾ÌeZeóí2×`äÍ€F( E±¶ ›(e”2&m…¨rß_½æqwww§!„iš)Ðì­ˆ2ývåÚƒ7'rïF®ûn¤ôÛ–j½\õ-˜ Œ‹(‰  ¶a§Úã¯À]·Dæy^ê(3 ãÖC&¡ ï„Ù›¡³w()þ½ÈÖc pËá†EÀ( 6…AÞ~8Ó[ã úvå:¦Œ|§üWë-¿@Ó I 8ùk %% %% This material is subject to the LaTeX Project Public License. %% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html %% for the details of that license. %% %% ------------------------------------------------------------- \def\fileversion{1.5} \def\filedate{2009/03/11} \ProvidesPackage{hepnicenames}[\filedate\space Friendly alternatives to the PEN particle codes (version \fileversion)] \NeedsTeXFormat{LaTeX2e} \RequirePackage{heppennames} %% Declare package options: map directly on to options in hepparticles %% package via heppennames \DeclareOption{italic}{% \PassOptionsToPackage{italic}{heppennames}% } \DeclareOption{itforce}{% \PassOptionsToPackage{itforce}{heppennames}% } \DeclareOption{maybess}{% \PassOptionsToPackage{maybess}{heppennames}% } \DeclareOption{noss}{% \PassOptionsToPackage{noss}{heppennames}% } %% Process package options \ProcessOptions %% For referencing this package \DeclareRobustCommand{\hepnicenames}{\texttt{hepnicenames}\xspace} %% ------------------------------------------------------------- %% The particles... %% ------------------------------------------------------------- %% B mesons %\DeclareRobustCommand{\PB}{\PB} %% in pennames %\DeclareRobustCommand{\PBpm}{\PBpm} %% in pennames %\DeclareRobustCommand{\PBmp}{\PBmp} %% in pennames \DeclareRobustCommand{\PBplus}{\PBp} \DeclareRobustCommand{\PBminus}{\PBm} \DeclareRobustCommand{\PBzero}{\PBz} \DeclareRobustCommand{\PBstar}{\PBst} \DeclareRobustCommand{\PBd}{\PdB} \DeclareRobustCommand{\PBu}{\PuB} \DeclareRobustCommand{\PBc}{\PcB} \DeclareRobustCommand{\PBs}{\PsB} \DeclareRobustCommand{\APB}{\PaB} \DeclareRobustCommand{\APBzero}{\PaBz} \DeclareRobustCommand{\APBd}{\PadB} \DeclareRobustCommand{\APBu}{\PauB} \DeclareRobustCommand{\APBc}{\PacB} \DeclareRobustCommand{\APBs}{\PasB} %% Kaons %\DeclareRobustCommand{\PK}{\PK} %% in pennames %\DeclareRobustCommand{\PKpm}{\PKpm} %% in pennames %\DeclareRobustCommand{\PKmp}{\PKmp} %% in pennames \DeclareRobustCommand{\PKplus}{\PKp} \DeclareRobustCommand{\PKminus}{\PKm} \DeclareRobustCommand{\PKzero}{\PKz} \DeclareRobustCommand{\PKshort}{\PKzS} \DeclareRobustCommand{\PKs}{\PKzS} \DeclareRobustCommand{\PKlong}{\PKzL} \DeclareRobustCommand{\PKl}{\PKzL} \DeclareRobustCommand{\PKstar}{\PKst} \DeclareRobustCommand{\APK}{\PaKz} \DeclareRobustCommand{\APKzero}{\PaKz} %% Bosons \DeclareRobustCommand{\Pphoton}{\Pgg} \DeclareRobustCommand{\Pgluon}{\Pg} %\DeclareRobustCommand{\PW}{\PW} %% in pennames %\DeclareRobustCommand{\PWpm}{\PWpm} %% in pennames %\DeclareRobustCommand{\PWmp}{\PWmp} %% in pennames \DeclareRobustCommand{\PWplus}{\PWp} \DeclareRobustCommand{\PWminus}{\PWm} \DeclareRobustCommand{\PWprime}{\PWpr} %\DeclareRobustCommand{\PZ}{\PZ} %% in pennames \DeclareRobustCommand{\PZzero}{\PZz} % Z with a zero \DeclareRobustCommand{\PZprime}{\PZpr} % Z-prime \DeclareRobustCommand{\Paxion}{\PAz} % axion %% Generic fermions \DeclareRobustCommand{\Pfermion}{\Pf} \DeclareRobustCommand{\Pfermionpm}{\Pfpm} \DeclareRobustCommand{\Pfermionmp}{\Pfmp} \DeclareRobustCommand{\Pfermionplus}{\Pfp} \DeclareRobustCommand{\Pfermionminus}{\Pfm} \DeclareRobustCommand{\APfermion}{\Paf} %% Leptons \DeclareRobustCommand{\Plepton}{\Pl} % lepton \DeclareRobustCommand{\Pleptonpm}{\Plpm} % charged lepton \DeclareRobustCommand{\Pleptonmp}{\Plmp} % charged lepton \DeclareRobustCommand{\Pleptonplus}{\Plp} % positive lepton \DeclareRobustCommand{\Pleptonminus}{\Plm} % negative lepton \DeclareRobustCommand{\APlepton}{\Pal} % anti-lepton \DeclareRobustCommand{\Pnu}{\Pgn} % neutrino \DeclareRobustCommand{\APnu}{\Pagn} % antineutrino \DeclareRobustCommand{\Pneutrino}{\Pgn} % neutrino \DeclareRobustCommand{\APneutrino}{\Pagn} % antineutrino \DeclareRobustCommand{\Pnulepton}{\Pgnl} % lepton-flavour neutrino \DeclareRobustCommand{\APnulepton}{\Pagnl} % lepton-flavour antineutrino %\DeclareRobustCommand{\Pe}{\Pe} %% in pennames %\DeclareRobustCommand{\Pepm}{\Pepm} %% in pennames %\DeclareRobustCommand{\Pemp}{\Pemp} %% in pennames \DeclareRobustCommand{\Pelectron}{\Pem} \DeclareRobustCommand{\APelectron}{\Pep} \DeclareRobustCommand{\Ppositron}{\Pep} \DeclareRobustCommand{\APpositron}{\Pep} \DeclareRobustCommand{\Pmu}{\Pgm} \DeclareRobustCommand{\Pmupm}{\Pgmpm} \DeclareRobustCommand{\Pmump}{\Pgmmp} \DeclareRobustCommand{\Pmuon}{\Pgmm} \DeclareRobustCommand{\APmuon}{\Pgmp} \DeclareRobustCommand{\Ptau}{\Pgt} \DeclareRobustCommand{\Ptaupm}{\Pgtpm} \DeclareRobustCommand{\Ptaump}{\Pgtmp} \DeclareRobustCommand{\Ptauon}{\Pgtm} \DeclareRobustCommand{\APtauon}{\Pgtp} \DeclareRobustCommand{\Pnue}{\Pgne} \DeclareRobustCommand{\Pnum}{\Pgngm} \DeclareRobustCommand{\Pnut}{\Pgngt} \DeclareRobustCommand{\APnue}{\Pagne} \DeclareRobustCommand{\APnum}{\Pagngm} \DeclareRobustCommand{\APnut}{\Pagngt} %% Quarks \DeclareRobustCommand{\Pquark}{\Pq} \DeclareRobustCommand{\APquark}{\Paq} \DeclareRobustCommand{\Pdown}{\Pqd} \DeclareRobustCommand{\Pup}{\Pqu} \DeclareRobustCommand{\Pstrange}{\Pqs} \DeclareRobustCommand{\Pcharm}{\Pqc} \DeclareRobustCommand{\Pbottom}{\Pqb} \DeclareRobustCommand{\Pbeauty}{\Pqb} \DeclareRobustCommand{\Ptop}{\Pqt} \DeclareRobustCommand{\Ptruth}{\Pqt} \DeclareRobustCommand{\APdown}{\Paqd} \DeclareRobustCommand{\APqd}{\Paqd} \DeclareRobustCommand{\APup}{\Paqu} \DeclareRobustCommand{\APqu}{\Paqu} \DeclareRobustCommand{\APstrange}{\Paqs} \DeclareRobustCommand{\APqs}{\Paqs} \DeclareRobustCommand{\APcharm}{\Paqc} \DeclareRobustCommand{\APqc}{\Paqc} \DeclareRobustCommand{\APbottom}{\Paqb} \DeclareRobustCommand{\APbeauty}{\Paqb} \DeclareRobustCommand{\APqb}{\Paqb} \DeclareRobustCommand{\APtop}{\Paqt} \DeclareRobustCommand{\APtruth}{\Paqt} \DeclareRobustCommand{\APqt}{\Paqt} %% Nucleons \DeclareRobustCommand{\Pproton}{\Pp} \DeclareRobustCommand{\Pneutron}{\Pn} \DeclareRobustCommand{\APproton}{\Pap} \DeclareRobustCommand{\APneutron}{\Pan} %% Chi_c mesons \DeclareRobustCommand{\Pchic}{\Pcgc} %% Delta baryons \DeclareRobustCommand{\PDelta}{\PgD} %% Lambda baryons \DeclareRobustCommand{\PLambda}{\PgL} \DeclareRobustCommand{\APLambda}{\PagL} \DeclareRobustCommand{\PLambdac}{\PcgLp} \DeclareRobustCommand{\PLambdab}{\PbgL} %% Lambda_b %% Omega \DeclareRobustCommand{\POmega}{\PgO} \DeclareRobustCommand{\POmegapm}{\PgOpm} \DeclareRobustCommand{\POmegamp}{\PgOmp} \DeclareRobustCommand{\POmegaplus}{\PgOp} \DeclareRobustCommand{\POmegaminus}{\PgOm} \DeclareRobustCommand{\APOmega}{\PagO} \DeclareRobustCommand{\APOmegaplus}{\PagOp} \DeclareRobustCommand{\APOmegaminus}{\PagOm} %% Sigma baryons \DeclareRobustCommand{\PSigma}{\PgS} \DeclareRobustCommand{\PSigmapm}{\PgSpm} \DeclareRobustCommand{\PSigmamp}{\PgSmp} \DeclareRobustCommand{\PSigmaminus}{\PgSm} \DeclareRobustCommand{\PSigmaplus}{\PgSp} \DeclareRobustCommand{\PSigmazero}{\PgSz} \DeclareRobustCommand{\PSigmac}{\PcgS} \DeclareRobustCommand{\APSigmaminus}{\PagSm} \DeclareRobustCommand{\APSigmaplus}{\PagSp} \DeclareRobustCommand{\APSigmazero}{\PagSz} \DeclareRobustCommand{\APSigmac}{\PacgS} %% Upsilon \DeclareRobustCommand{\PUpsilon}{\PgU} \DeclareRobustCommand{\PUpsilonOneS}{\PgUi} \DeclareRobustCommand{\PUpsilonTwoS}{\PgUa} \DeclareRobustCommand{\PUpsilonThreeS}{\PgUb} \DeclareRobustCommand{\PUpsilonFourS}{\PgUc} %% Xi \DeclareRobustCommand{\PXi}{\PgX} \DeclareRobustCommand{\PXiplus}{\PgXp} \DeclareRobustCommand{\PXiminus}{\PgXm} \DeclareRobustCommand{\PXizero}{\PgXz} \DeclareRobustCommand{\APXiplus}{\PagXp} \DeclareRobustCommand{\APXiminus}{\PagXm} \DeclareRobustCommand{\APXizero}{\PagXz} \DeclareRobustCommand{\PXicplus}{\PcgXp} \DeclareRobustCommand{\PXiczero}{\PcgXz} %% others? %% Strange mesons \DeclareRobustCommand{\Pphi}{\Pgf} %% Eta mesons \DeclareRobustCommand{\Peta}{\Pgh} \DeclareRobustCommand{\Petaprime}{\Pghpr} \DeclareRobustCommand{\Petac}{\Pcgh} %% omega mesons \DeclareRobustCommand{\Pomega}{\Pgo} %% Pions \DeclareRobustCommand{\Ppi}{\Pgp} \DeclareRobustCommand{\Ppipm}{\Pgppm} \DeclareRobustCommand{\Ppimp}{\Pgpmp} \DeclareRobustCommand{\Ppiplus}{\Pgpp} \DeclareRobustCommand{\Ppiminus}{\Pgpm} \DeclareRobustCommand{\Ppizero}{\Pgpz} %% Rho mesons \DeclareRobustCommand{\Prho}{\Pgr} \DeclareRobustCommand{\Prhoplus}{\Pgrp} \DeclareRobustCommand{\Prhominus}{\Pgrm} \DeclareRobustCommand{\Prhopm}{\Pgrpm} \DeclareRobustCommand{\Prhomp}{\Pgrmp} \DeclareRobustCommand{\Prhozero}{\Pgrz} %% Psi resonances \DeclareRobustCommand{\PJpsi}{\PJgy} \DeclareRobustCommand{\PJpsiOneS}{\PJgyi} \DeclareRobustCommand{\Ppsi}{\Pgy} \DeclareRobustCommand{\PpsiTwoS}{\Pgyii} %% Charmed mesons %\DeclareRobustCommand{\PD}{\PD} %% in pennames %\DeclareRobustCommand{\PDpm}{\PDpm} %% in pennames %\DeclareRobustCommand{\PDmp}{\PDmp} %% in pennames \DeclareRobustCommand{\PDzero}{\PDz} \DeclareRobustCommand{\PDminus}{\PDm} \DeclareRobustCommand{\PDplus}{\PDp} \DeclareRobustCommand{\PDstar}{\PDst} \DeclareRobustCommand{\APD}{\PaD} \DeclareRobustCommand{\APDzero}{\PaDz} \DeclareRobustCommand{\PDs}{\PsD} \DeclareRobustCommand{\PDsminus}{\PsDm} \DeclareRobustCommand{\PDsplus}{\PsDp} \DeclareRobustCommand{\PDspm}{\PsDpm} \DeclareRobustCommand{\PDsmp}{\PsDmp} \DeclareRobustCommand{\PDsstar}{\PsDst} %% Higgses (including SUSY sector Higgses) \DeclareRobustCommand{\PHiggs}{\PH} \DeclareRobustCommand{\PHiggsheavy}{\PH} \DeclareRobustCommand{\PHiggslight}{\Ph} \DeclareRobustCommand{\PHiggsheavyzero}{\PHz} \DeclareRobustCommand{\PHiggslightzero}{\Phz} \DeclareRobustCommand{\PHiggsps}{\PA} \DeclareRobustCommand{\PHiggspszero}{\PAz} \DeclareRobustCommand{\PHiggsplus}{\PHp} \DeclareRobustCommand{\PHiggsminus}{\PHm} \DeclareRobustCommand{\PHiggspm}{\PHpm} \DeclareRobustCommand{\PHiggsmp}{\PHmp} \DeclareRobustCommand{\PHiggszero}{\PHz} %% SUSY partners \DeclareRobustCommand{\PSHiggs}{\PSH} \DeclareRobustCommand{\PSHiggsino}{\PSH} \DeclareRobustCommand{\PSHiggsplus}{\PSHp} \DeclareRobustCommand{\PSHiggsinoplus}{\PSHp} \DeclareRobustCommand{\PSHiggsminus}{\PSHm} \DeclareRobustCommand{\PSHiggsinominus}{\PSHm} \DeclareRobustCommand{\PSHiggspm}{\PSHpm} \DeclareRobustCommand{\PSHiggsinopm}{\PSHpm} \DeclareRobustCommand{\PSHiggsmp}{\PSHmp} \DeclareRobustCommand{\PSHiggsinomp}{\PSHmp} \DeclareRobustCommand{\PSHiggszero}{\PSHz} \DeclareRobustCommand{\PSHiggsinozero}{\PSHz} %\DeclareRobustCommand{\PSB}{\PSB} % bino %% in pennames \DeclareRobustCommand{\PSBino}{\PSB} % bino %\DeclareRobustCommand{\PSW}{\PSW} %% in pennames \DeclareRobustCommand{\PSWplus}{\PSWp} %% in pennames \DeclareRobustCommand{\PSWminus}{\PSWm} %% in pennames %\DeclareRobustCommand{\PSWpm}{\PSWpm} %% in pennames %\DeclareRobustCommand{\PSWmp}{\PSWmp} %% in pennames \DeclareRobustCommand{\PSWino}{\PSW} %% in pennames \DeclareRobustCommand{\PSWinopm}{\PSWpm} %% in pennames \DeclareRobustCommand{\PSWinomp}{\PSWmp} %% in pennames %\DeclareRobustCommand{\PSZ}{\PSZ} %% in pennames \DeclareRobustCommand{\PSZzero}{\PSZz} %\DeclareRobustCommand{\PSe}{\PSe} %% in pennames \DeclareRobustCommand{\PSphoton}{\PSgg} % photino \DeclareRobustCommand{\PSphotino}{\PSgg} % photino \DeclareRobustCommand{\Pphotino}{\PSgg} % photino \DeclareRobustCommand{\PSmu}{\PSgm} % smuon \DeclareRobustCommand{\PSnu}{\PSgn} % sneutrino \DeclareRobustCommand{\PStau}{\PSgt} % stau \DeclareRobustCommand{\PSino}{\PSgx} % neutralino/chargino \DeclareRobustCommand{\PScharginopm}{\PSgxpm} % chargino \pm \DeclareRobustCommand{\PScharginomp}{\PSgxmp} % chargino \mp \DeclareRobustCommand{\PSneutralino}{\PSgxz} % neutralino \DeclareRobustCommand{\PSneutralinoOne}{\PSgxzi} % lightest neutralino \DeclareRobustCommand{\PSneutralinoTwo}{\PSgxzii} % next-to-lightest neutralino \DeclareRobustCommand{\PSgluino}{\PSg} % gluino \DeclareRobustCommand{\PSlepton}{\PSl} % slepton \DeclareRobustCommand{\Pslepton}{\PSl} % duplicate slepton macro \DeclareRobustCommand{\APSlepton}{\PaSl} % anti-slepton \DeclareRobustCommand{\APslepton}{\PaSl} % anti-slepton %% Squarks %\DeclareRobustCommand{\PSq}{\PSq} %% in pennames \DeclareRobustCommand{\Psquark}{\PSq} \DeclareRobustCommand{\APSq}{\PaSq} \DeclareRobustCommand{\APsquark}{\PaSq} % \DeclareRobustCommand{\PSdown}{\PSqd} \DeclareRobustCommand{\PSup}{\PSqu} \DeclareRobustCommand{\PSstrange}{\PSqs} \DeclareRobustCommand{\PScharm}{\PSqc} \DeclareRobustCommand{\PSbottom}{\PSqb} \DeclareRobustCommand{\PStop}{\PSqt} \DeclareRobustCommand{\PASdown}{\PaSqd} \DeclareRobustCommand{\PASup}{\PaSqu} \DeclareRobustCommand{\PASstrange}{\PaSqs} \DeclareRobustCommand{\PAScharm}{\PaSqc} \DeclareRobustCommand{\PASbottom}{\PaSqb} \DeclareRobustCommand{\PAStop}{\PaSqt} %% Even less formal names \DeclareRobustCommand{\eplus}{\Pep} \DeclareRobustCommand{\eminus}{\Pem} %% Just for completeness... \endinput rivet-1.8.3/doc/heppennames.sty0000644000175000017500000007400312116077755014700 0ustar sunsun%% heppennames.sty --- A flexible re-implementation and extension %% of pennames.sty using the hepparticles package %% %% It contains the definition of the short names for the PEN %% Elementary Particle Naming Scheme, described in CNL 203, pp 8-11 %% %% Author: Andy Buckley %% based on pennames.sty by %% Michel Goossens and Eric van Herwijnen %% %% This material is subject to the LaTeX Project Public License. %% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html %% for the details of that license. %% %% ------------------------------------------------------------- \def\fileversion{1.5} \def\filedate{2009/03/11} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{heppennames}[\filedate\space Elementary Particle Naming Scheme (version \fileversion)] %% Declare package options: map directly on to options in hepparticles package \DeclareOption{italic}{% \PassOptionsToPackage{italic}{hepparticles}% } \DeclareOption{itforce}{% \PassOptionsToPackage{itforce}{hepparticles}% } \DeclareOption{maybess}{% \PassOptionsToPackage{maybess}{hepparticles}% } \DeclareOption{noss}{% \PassOptionsToPackage{noss}{hepparticles}% } %% Process package options \ProcessOptions %% Package dependancies \RequirePackage{hepparticles} %% TODO depend on > 1.6 (date: 2005/03/01) \RequirePackage{xspace} \RequirePackage{amsmath} %% ------------------------------------------------------------- %% The commands follow... %% ------------------------------------------------------------- %% For referencing this package \DeclareRobustCommand{\hepnames}{\texttt{hepnames}\xspace} \DeclareRobustCommand{\heppennames}{\texttt{heppennames}\xspace} %% ------------------------------------------------------------- %% The particles... %% ------------------------------------------------------------- %% B mesons \DeclareRobustCommand{\PB}{\HepParticle{B}{}{}\xspace} \DeclareRobustCommand{\PBpm}{\HepParticle{B}{}{\pm}\xspace} \DeclareRobustCommand{\PBmp}{\HepParticle{B}{}{\mp}\xspace} \DeclareRobustCommand{\PBp}{\HepParticle{B}{}{+}\xspace} \DeclareRobustCommand{\PBm}{\HepParticle{B}{}{-}\xspace} \DeclareRobustCommand{\PBz}{\HepParticle{B}{}{0}\xspace} \DeclareRobustCommand{\PBst}{\HepParticle{B}{}{\ast}\xspace} \DeclareRobustCommand{\PdB}{\HepParticle{B}{\Pqd}{0}\xspace} \DeclareRobustCommand{\PuB}{\HepParticle{B}{}{+}\xspace} \DeclareRobustCommand{\PcB}{\HepParticle{B}{\Pqc}{+}\xspace} \DeclareRobustCommand{\PsB}{\HepParticle{B}{\Pqs}{0}\xspace} \DeclareRobustCommand{\PaB}{\HepAntiParticle{B}{}{}\xspace} \DeclareRobustCommand{\PaBz}{\HepAntiParticle{B}{}{0}\xspace} \DeclareRobustCommand{\PadB}{\HepAntiParticle{B}{\Pqd}{0}\xspace} \DeclareRobustCommand{\PauB}{\HepParticle{B}{}{-}\xspace} \DeclareRobustCommand{\PacB}{\HepParticle{B}{\Pqc}{-}\xspace} \DeclareRobustCommand{\PasB}{\HepAntiParticle{B}{\Pqs}{0}\xspace} %% Kaons \DeclareRobustCommand{\PK}{\HepParticle{K}{}{}\xspace} % kaon \DeclareRobustCommand{\PKpm}{\HepParticle{K}{}{\pm}\xspace} % charged kaon \DeclareRobustCommand{\PKmp}{\HepParticle{K}{}{\mp}\xspace} % charged kaon \DeclareRobustCommand{\PKm}{\HepParticle{K}{}{-}\xspace} % negative kaon \DeclareRobustCommand{\PKp}{\HepParticle{K}{}{+}\xspace} % positive kaon \DeclareRobustCommand{\PKz}{\HepParticle{K}{}{0}\xspace} % neutral kaon \DeclareRobustCommand{\PKzL}{\HepParticle{K}{L}{0}\xspace} % K-long \DeclareRobustCommand{\PKzS}{\HepParticle{K}{S}{0}\xspace} % K-short \DeclareRobustCommand{\PKst}{\HepParticle{K}{}{\ast}\xspace} % K star \DeclareRobustCommand{\PaK}{\HepAntiParticle{K}{}{}\xspace} % anti-kaon \DeclareRobustCommand{\PaKz}{\HepAntiParticle{K}{}{0}\xspace} % neutral anti-kaon \DeclareRobustCommand{\PKeiii}{\HepParticle{K}{e3}{}\xspace} \DeclareRobustCommand{\PKgmiii}{\HepParticle{K}{\mu3}{}\xspace} \DeclareRobustCommand{\PKzeiii}{\HepParticle{K}{e3}{0}\xspace} \DeclareRobustCommand{\PKzgmiii}{\HepParticle{K}{\mu3}{0}\xspace} \DeclareRobustCommand{\PKia}{\HepParticleResonanceFull{K}{1}{}{1400}{}{}\xspace} \DeclareRobustCommand{\PKii}{\HepParticleResonanceFull{K}{2}{}{1770}{}{}\xspace} \DeclareRobustCommand{\PKi}{\HepParticleResonanceFull{K}{1}{}{1270}{}{}\xspace} \DeclareRobustCommand{\PKsti}{\HepParticleResonance{\PKst}{892}{}{}\xspace} \DeclareRobustCommand{\PKsta}{\HepParticleResonance{\PKst}{1370}{}{}\xspace} \DeclareRobustCommand{\PKstb}{\HepParticleResonance{\PKst}{1680}{}{}\xspace} \DeclareRobustCommand{\PKstiii}{\HepParticleResonanceFull{K}{3}{\ast}{1780}{}{}\xspace} \DeclareRobustCommand{\PKstii}{\HepParticleResonanceFull{K}{2}{\ast}{1430}{}{}\xspace} \DeclareRobustCommand{\PKstiv}{\HepParticleResonanceFull{K}{4}{\ast}{2045}{}{}\xspace} \DeclareRobustCommand{\PKstz}{\HepParticleResonanceFull{K}{0}{\ast}{1430}{}{}\xspace} %% N resonances \DeclareRobustCommand{\PN}{\HepParticle{N}{}{}\xspace} \DeclareRobustCommand{\PNa}{\HepParticleResonanceFormal{\PN}{1440}{}{}{P}{11}{}\xspace} \DeclareRobustCommand{\PNb}{\HepParticleResonanceFormal{\PN}{1520}{}{}{D}{13}{}\xspace} \DeclareRobustCommand{\PNc}{\HepParticleResonanceFormal{\PN}{1535}{}{}{S}{11}{}\xspace} \DeclareRobustCommand{\PNd}{\HepParticleResonanceFormal{\PN}{1650}{}{}{S}{11}{}\xspace} \DeclareRobustCommand{\PNe}{\HepParticleResonanceFormal{\PN}{1675}{}{}{D}{15}{}\xspace} \DeclareRobustCommand{\PNf}{\HepParticleResonanceFormal{\PN}{1680}{}{}{F}{15}{}\xspace} \DeclareRobustCommand{\PNg}{\HepParticleResonanceFormal{\PN}{1700}{}{}{D}{13}{}\xspace} \DeclareRobustCommand{\PNh}{\HepParticleResonanceFormal{\PN}{1710}{}{}{P}{11}{}\xspace} \DeclareRobustCommand{\PNi}{\HepParticleResonanceFormal{\PN}{1720}{}{}{P}{13}{}\xspace} \DeclareRobustCommand{\PNj}{\HepParticleResonanceFormal{\PN}{2190}{}{}{G}{17}{}\xspace} \DeclareRobustCommand{\PNk}{\HepParticleResonanceFormal{\PN}{2220}{}{}{H}{19}{}\xspace} \DeclareRobustCommand{\PNl}{\HepParticleResonanceFormal{\PN}{2250}{}{}{G}{19}{}\xspace} \DeclareRobustCommand{\PNm}{\HepParticleResonanceFormal{\PN}{2600}{}{}{I}{1,11}{}\xspace} %% Bosons \DeclareRobustCommand{\Pg}{\HepParticle{g}{}{}\xspace} % gluon \DeclareRobustCommand{\Pgg}{\HepParticle{\gamma}{}{}\xspace} % photon \DeclareRobustCommand{\PW}{\HepParticle{W}{}{}\xspace} % W boson \DeclareRobustCommand{\PWpm}{\HepParticle{W}{}{\pm}\xspace} % charged W boson \DeclareRobustCommand{\PWmp}{\HepParticle{W}{}{\mp}\xspace} % charged W boson \DeclareRobustCommand{\PWp}{\HepParticle{W}{}{+}\xspace} % W-plus \DeclareRobustCommand{\PWm}{\HepParticle{W}{}{-}\xspace} % W-minus \DeclareRobustCommand{\PWR}{\HepParticle{W}{R}{}\xspace} \DeclareRobustCommand{\PWpr}{\HepParticle{W}{}{\prime}\xspace} % W-prime boson \DeclareRobustCommand{\PZ}{\HepParticle{Z}{}{}\xspace} % Z boson \DeclareRobustCommand{\PZz}{\HepParticle{Z}{}{0}\xspace} % neutral Z boson \DeclareRobustCommand{\PZpr}{\HepParticle{Z}{}{\prime}\xspace} % Z-prime boson \DeclareRobustCommand{\PZLR}{\HepParticle{Z}{LR}{}\xspace} % left-right Z boson \DeclareRobustCommand{\PZgc}{\HepParticle{Z}{\chi}{}\xspace} \DeclareRobustCommand{\PZge}{\HepParticle{Z}{\eta}{}\xspace} \DeclareRobustCommand{\PZgy}{\HepParticle{Z}{\psi}{}\xspace} \DeclareRobustCommand{\PZi}{\HepParticle{Z}{1}{}\xspace} \DeclareRobustCommand{\PAz}{\HepParticle{A}{}{\mspace{-2mu}0}\xspace} % axion %% Higgs (inc. SUSY Higgs) \DeclareRobustCommand{\PH}{\HepParticle{H}{}{}\xspace} % standard/heavy Higgs \DeclareRobustCommand{\PHz}{\HepParticle{H}{}{0}\xspace} % explicitly neutral standard/heavy Higgs \DeclareRobustCommand{\Ph}{\HepParticle{h}{}{}\xspace} % light Higgs \DeclareRobustCommand{\Phz}{\HepParticle{h}{}{0}\xspace} % explicitly neutral light Higgs \DeclareRobustCommand{\PA}{\HepParticle{A}{}{}\xspace} % pseudoscalar Higgs %\DeclareRobustCommand{\PAz}{\HepParticle{A}{}{\mspace{-2mu}0}\xspace}\xspace} % explicitly neutral pseudoscalar Higgs \DeclareRobustCommand{\PHpm}{\HepParticle{H}{}{\pm}\xspace} % charged Higgs \DeclareRobustCommand{\PHmp}{\HepParticle{H}{}{\mp}\xspace} % charged Higgs \DeclareRobustCommand{\PHp}{\HepParticle{H}{}{+}\xspace} % positive-charged Higgs \DeclareRobustCommand{\PHm}{\HepParticle{H}{}{-}\xspace} % negative-charged Higgs \DeclareRobustCommand{\Pf}{\HepGenParticle{f}{}{}\xspace} % fermion \DeclareRobustCommand{\Pfpm}{\HepGenParticle{f}{}{\pm}\xspace} % charged fermion \DeclareRobustCommand{\Pfmp}{\HepGenParticle{f}{}{\mp}\xspace} % charged fermion \DeclareRobustCommand{\Pfp}{\HepGenParticle{f}{}{+}\xspace} % positive fermion \DeclareRobustCommand{\Pfm}{\HepGenParticle{f}{}{-}\xspace} % negative fermion \DeclareRobustCommand{\Paf}{\HepGenAntiParticle{f}{}{}\xspace} % anti-fermion %% Leptons \DeclareRobustCommand{\Pl}{\HepGenParticle{\ell}{}{}\xspace} % lepton \DeclareRobustCommand{\Plpm}{\HepGenParticle{\ell}{}{\pm}\xspace} % charged lepton \DeclareRobustCommand{\Plmp}{\HepGenParticle{\ell}{}{\mp}\xspace} % charged lepton \DeclareRobustCommand{\Plp}{\HepGenParticle{\ell}{}{+}\xspace} % positive lepton \DeclareRobustCommand{\Plm}{\HepGenParticle{\ell}{}{-}\xspace} % negative lepton \DeclareRobustCommand{\Pal}{\HepGenAntiParticle{\ell}{}{}\xspace} % anti-lepton \DeclareRobustCommand{\Pgn}{\HepGenParticle{\nu}{}{}\xspace} % generic neutrino \DeclareRobustCommand{\Pgnl}{\HepGenParticle{\nu}{\ell}{}\xspace} % neutrino (for lepton \ell) \DeclareRobustCommand{\Pagn}{\HepGenAntiParticle{\nu}{}{}\xspace} % generic anti-neutrino \DeclareRobustCommand{\Pagnl}{\HepGenAntiParticle{\nu}{\ell}{}\xspace} % anti-neutrino (for lepton \ell) \DeclareRobustCommand{\Pe}{\HepParticle{e}{}{}\xspace} % electronic \DeclareRobustCommand{\Pepm}{\HepParticle{e}{}{\pm}\xspace} % e plus/minus \DeclareRobustCommand{\Pemp}{\HepParticle{e}{}{\mp}\xspace} % e minus/plus \DeclareRobustCommand{\Pem}{\HepParticle{e}{}{-}\xspace} % electron \DeclareRobustCommand{\Pep}{\HepParticle{e}{}{+}\xspace} % positron \DeclareRobustCommand{\Pgm}{\HepParticle{\mu}{}{}\xspace} % muonic \DeclareRobustCommand{\Pgmpm}{\HepParticle{\mu}{}{\pm}\xspace} % mu plus/minus \DeclareRobustCommand{\Pgmmp}{\HepParticle{\mu}{}{\mp}\xspace} % mu minus/plus \DeclareRobustCommand{\Pgmm}{\HepParticle{\mu}{}{-}\xspace} % muon \DeclareRobustCommand{\Pgmp}{\HepParticle{\mu}{}{+}\xspace} % anti-muon \DeclareRobustCommand{\Pgt}{\HepParticle{\tau}{}{}\xspace} % tauonic \DeclareRobustCommand{\Pgtpm}{\HepParticle{\tau}{}{\pm}\xspace} % tau plus/minus \DeclareRobustCommand{\Pgtmp}{\HepParticle{\tau}{}{\mp}\xspace} % tau minus/plus \DeclareRobustCommand{\Pgtm}{\HepParticle{\tau}{}{-}\xspace} % tau lepton \DeclareRobustCommand{\Pgtp}{\HepParticle{\tau}{}{+}\xspace} % anti-tau \DeclareRobustCommand{\Pgne}{\HepParticle{\nu}{\!e}{}\xspace} % electron neutrino \DeclareRobustCommand{\Pgngm}{\HepParticle{\nu}{\!\mu}{}\xspace} % muon neutrino \DeclareRobustCommand{\Pgngt}{\HepParticle{\nu}{\!\tau}{}\xspace} % tau neutrino \DeclareRobustCommand{\Pagne}{\HepAntiParticle{\nu}{\!e}{}\xspace} % electron anti-neutrino \DeclareRobustCommand{\Pagngm}{\HepAntiParticle{\nu}{\!\mu}{}\xspace} % muon anti-neutrino \DeclareRobustCommand{\Pagngt}{\HepAntiParticle{\nu}{\!\tau}{}\xspace} % tau anti-neutrino %% Quarks \DeclareRobustCommand{\Pq}{\HepGenParticle{q}{}{}\xspace} % quark \DeclareRobustCommand{\Paq}{\HepGenAntiParticle{q}{}{}\xspace} % anti-quark \DeclareRobustCommand{\Pqd}{\HepParticle{d}{}{}\xspace} % down quark \DeclareRobustCommand{\Pqu}{\HepParticle{u}{}{}\xspace} % up quark \DeclareRobustCommand{\Pqs}{\HepParticle{s}{}{}\xspace} % strange quark \DeclareRobustCommand{\Pqc}{\HepParticle{c}{}{}\xspace} % charm quark \DeclareRobustCommand{\Pqb}{\HepParticle{b}{}{}\xspace} % bottom quark \DeclareRobustCommand{\Pqt}{\HepParticle{t}{}{}\xspace} % top quark \DeclareRobustCommand{\Paqd}{\HepAntiParticle{d}{}{}\xspace} % down anti-quark \DeclareRobustCommand{\Paqu}{\HepAntiParticle{u}{}{}\xspace} % up anti-quark \DeclareRobustCommand{\Paqs}{\HepAntiParticle{s}{}{}\xspace} % strange anti-quark \DeclareRobustCommand{\Paqc}{\HepAntiParticle{c}{}{}\xspace} % charm anti-quark \DeclareRobustCommand{\Paqb}{\HepAntiParticle{b}{}{}\xspace} % bottom anti-quark \DeclareRobustCommand{\Paqt}{\HepAntiParticle{t}{}{}\xspace} % top anti-quark % I don't like these versions... %\DeclareRobustCommand{\Pqb}{\HepParticle{q}{b}{}\xspace} %\DeclareRobustCommand{\Pqc}{\HepParticle{q}{c}{}\xspace} %\DeclareRobustCommand{\Pqd}{\HepParticle{q}{d}{}\xspace} %\DeclareRobustCommand{\Pqs}{\HepParticle{q}{s}{}\xspace} %\DeclareRobustCommand{\Pqt}{\HepParticle{q}{t}{}\xspace} %\DeclareRobustCommand{\Pqu}{\HepParticle{q}{u}{}\xspace} %\DeclareRobustCommand{\Pq}{\HepGenParticle{q}{}{}\xspace} %\DeclareRobustCommand{\Paqb}{\HepAntiParticle{q}{b}{}\xspace} % anti-bottom quark %\DeclareRobustCommand{\Paqc}{\HepAntiParticle{q}{c}{}\xspace} % anti-charm quark %\DeclareRobustCommand{\Paqd}{\HepAntiParticle{q}{d}{}\xspace} % anti-down quark %\DeclareRobustCommand{\Paqs}{\HepAntiParticle{q}{s}{}\xspace} % anti-strange quark %\DeclareRobustCommand{\Paqt}{\HepAntiParticle{q}{t}{}\xspace} % anti-top quark %\DeclareRobustCommand{\Paqu}{\HepAntiParticle{q}{u}{}\xspace} % anti-up quark %\DeclareRobustCommand{\Paq}{\HepAntiParticle{q}{}{}\xspace} % anti-quark %% Nucleons \DeclareRobustCommand{\Pp}{\HepParticle{p}{}{}\xspace} % proton \DeclareRobustCommand{\Pn}{\HepParticle{n}{}{}\xspace} % neutron \DeclareRobustCommand{\Pap}{\HepAntiParticle{p}{}{}\xspace} % anti-proton \DeclareRobustCommand{\Pan}{\HepAntiParticle{n}{}{}\xspace} % anti-neutron %% Chi_c mesons \DeclareRobustCommand{\Pcgc}{\HepParticle{\chi}{c}{}\xspace} \DeclareRobustCommand{\Pcgcii}{\HepParticleResonanceFull{\chi}{c2}{}{1P}{}{}\xspace} \DeclareRobustCommand{\Pcgci}{\HepParticleResonanceFull{\chi}{c1}{}{1P}{}{}\xspace} \DeclareRobustCommand{\Pcgcz}{\HepParticleResonanceFull{\chi}{c0}{}{1P}{}{}\xspace} %% f baryons \DeclareRobustCommand{\Pfia}{\HepParticleResonanceFull{f}{1}{}{1390}{}{}\xspace} \DeclareRobustCommand{\Pfib}{\HepParticleResonanceFull{f}{1}{}{1510}{}{}\xspace} \DeclareRobustCommand{\Pfiia}{\HepParticleResonanceFull{f}{2}{}{1720}{}{}\xspace} \DeclareRobustCommand{\Pfiib}{\HepParticleResonanceFull{f}{2}{}{2010}{}{}\xspace} \DeclareRobustCommand{\Pfiic}{\HepParticleResonanceFull{f}{2}{}{2300}{}{}\xspace} \DeclareRobustCommand{\Pfiid}{\HepParticleResonanceFull{f}{2}{}{2340}{}{}\xspace} \DeclareRobustCommand{\Pfiipr}{\HepParticleResonanceFull{f}{2}{\prime}{1525}{}{}\xspace} \DeclareRobustCommand{\Pfii}{\HepParticleResonanceFull{f}{2}{}{1270}{}{}\xspace} \DeclareRobustCommand{\Pfiv}{\HepParticleResonanceFull{f}{4}{}{2050}{}{}\xspace} \DeclareRobustCommand{\Pfi}{\HepParticleResonanceFull{f}{1}{}{1285}{}{}\xspace} \DeclareRobustCommand{\Pfza}{\HepParticleResonanceFull{f}{0}{}{1400}{}{}\xspace} \DeclareRobustCommand{\Pfzb}{\HepParticleResonanceFull{f}{0}{}{1590}{}{}\xspace} \DeclareRobustCommand{\Pfz}{\HepParticleResonanceFull{f}{0}{}{975}{}{}\xspace} %% Delta baryons \DeclareRobustCommand{\PgD}{\HepParticle{\Delta}{}{}\xspace} \DeclareRobustCommand{\PgDa}{\HepParticleResonanceFormal{\PgD}{1232}{}{}{P}{33}{}\xspace} \DeclareRobustCommand{\PgDb}{\HepParticleResonanceFormal{\PgD}{1620}{}{}{S}{31}{}\xspace} \DeclareRobustCommand{\PgDc}{\HepParticleResonanceFormal{\PgD}{1700}{}{}{D}{33}{}\xspace} \DeclareRobustCommand{\PgDd}{\HepParticleResonanceFormal{\PgD}{1900}{}{}{S}{31}{}\xspace} \DeclareRobustCommand{\PgDe}{\HepParticleResonanceFormal{\PgD}{1905}{}{}{F}{35}{}\xspace} \DeclareRobustCommand{\PgDf}{\HepParticleResonanceFormal{\PgD}{1910}{}{}{P}{31}{}\xspace} \DeclareRobustCommand{\PgDh}{\HepParticleResonanceFormal{\PgD}{1920}{}{}{P}{33}{}\xspace} \DeclareRobustCommand{\PgDi}{\HepParticleResonanceFormal{\PgD}{1930}{}{}{D}{35}{}\xspace} \DeclareRobustCommand{\PgDj}{\HepParticleResonanceFormal{\PgD}{1950}{}{}{F}{37}{}\xspace} \DeclareRobustCommand{\PgDk}{\HepParticleResonanceFormal{\PgD}{2420}{}{}{H}{3,11}{}\xspace} %% Lambda baryons \DeclareRobustCommand{\PgL}{\HepParticle{\Lambda}{}{}\xspace} %% Lambda \DeclareRobustCommand{\PagL}{\HepAntiParticle{\Lambda}{}{}\xspace} %% Anti-lambda \DeclareRobustCommand{\PcgLp}{\HepParticle{\Lambda}{\,c}{+}\xspace} %% Lambda_c \DeclareRobustCommand{\PbgL}{\HepParticle{\Lambda}{b}{}\xspace} %% Lambda_b \DeclareRobustCommand{\PgLa}{\HepParticleResonanceFormal{\PgL}{1405}{}{}{S}{01}{}\xspace} \DeclareRobustCommand{\PgLb}{\HepParticleResonanceFormal{\PgL}{1520}{}{}{D}{03}{}\xspace} \DeclareRobustCommand{\PgLc}{\HepParticleResonanceFormal{\PgL}{1600}{}{}{P}{01}{}\xspace} \DeclareRobustCommand{\PgLd}{\HepParticleResonanceFormal{\PgL}{1670}{}{}{S}{01}{}\xspace} \DeclareRobustCommand{\PgLe}{\HepParticleResonanceFormal{\PgL}{1690}{}{}{D}{03}{}\xspace} \DeclareRobustCommand{\PgLf}{\HepParticleResonanceFormal{\PgL}{1800}{}{}{S}{01}{}\xspace} \DeclareRobustCommand{\PgLg}{\HepParticleResonanceFormal{\PgL}{1810}{}{}{P}{01}{}\xspace} \DeclareRobustCommand{\PgLh}{\HepParticleResonanceFormal{\PgL}{1820}{}{}{F}{05}{}\xspace} \DeclareRobustCommand{\PgLi}{\HepParticleResonanceFormal{\PgL}{1830}{}{}{D}{05}{}\xspace} \DeclareRobustCommand{\PgLj}{\HepParticleResonanceFormal{\PgL}{1890}{}{}{P}{03}{}\xspace} \DeclareRobustCommand{\PgLk}{\HepParticleResonanceFormal{\PgL}{2100}{}{}{G}{07}{}\xspace} \DeclareRobustCommand{\PgLl}{\HepParticleResonanceFormal{\PgL}{2110}{}{}{F}{05}{}\xspace} \DeclareRobustCommand{\PgLm}{\HepParticleResonanceFormal{\PgL}{2350}{}{}{H}{09}{}\xspace} %% Omega \DeclareRobustCommand{\PgO}{\HepParticle{\Omega}{}{}\xspace} %% Omega \DeclareRobustCommand{\PgOpm}{\HepParticle{\Omega}{}{\pm}\xspace} %% charged Omega \DeclareRobustCommand{\PgOmp}{\HepParticle{\Omega}{}{\mp}\xspace} %% charged Omega \DeclareRobustCommand{\PgOp}{\HepParticle{\Omega}{}{+}\xspace} %% Omega-plus \DeclareRobustCommand{\PgOm}{\HepParticle{\Omega}{}{-}\xspace} %% Omega-minus \DeclareRobustCommand{\PgOma}{\HepParticleResonanceFull{\Omega}{}{}{2250}{}{-}\xspace} \DeclareRobustCommand{\PagO}{\HepAntiParticle{\Omega}{}{}\xspace} % new %% anti-Omega \DeclareRobustCommand{\PagOp}{\HepAntiParticle{\Omega}{}{+}\xspace} %% anti-Omega-plus \DeclareRobustCommand{\PagOm}{\HepAntiParticle{\Omega}{}{-}\xspace} %% anti-Omega-minus %% Sigma baryons \DeclareRobustCommand{\PgS}{\HepParticle{\Sigma}{}{}\xspace} %% Sigma \DeclareRobustCommand{\PgSpm}{\HepParticle{\Sigma}{}{\pm}\xspace} %% charged Sigma \DeclareRobustCommand{\PgSmp}{\HepParticle{\Sigma}{}{\mp}\xspace} %% charged Sigma \DeclareRobustCommand{\PgSm}{\HepParticle{\Sigma}{}{-}\xspace} \DeclareRobustCommand{\PgSp}{\HepParticle{\Sigma}{}{+}\xspace} \DeclareRobustCommand{\PgSz}{\HepParticle{\Sigma}{}{0}\xspace} \DeclareRobustCommand{\PcgS}{\HepParticle{\Sigma}{c}{}\xspace} \DeclareRobustCommand{\PagSm}{\HepAntiParticle{\Sigma}{}{-}\xspace} \DeclareRobustCommand{\PagSp}{\HepAntiParticle{\Sigma}{}{+}\xspace} \DeclareRobustCommand{\PagSz}{\HepAntiParticle{\Sigma}{}{0}\xspace} \DeclareRobustCommand{\PacgS}{\HepAntiParticle{\Sigma}{c}{}\xspace} \DeclareRobustCommand{\PgSa}{\HepParticleResonanceFormal{\PgS}{1385}{}{}{P}{13}{}\xspace} \DeclareRobustCommand{\PgSb}{\HepParticleResonanceFormal{\PgS}{1660}{}{}{P}{11}{}\xspace} \DeclareRobustCommand{\PgSc}{\HepParticleResonanceFormal{\PgS}{1670}{}{}{D}{13}{}\xspace} \DeclareRobustCommand{\PgSd}{\HepParticleResonanceFormal{\PgS}{1750}{}{}{S}{11}{}\xspace} \DeclareRobustCommand{\PgSe}{\HepParticleResonanceFormal{\PgS}{1775}{}{}{D}{15}{}\xspace} \DeclareRobustCommand{\PgSf}{\HepParticleResonanceFormal{\PgS}{1915}{}{}{F}{15}{}\xspace} \DeclareRobustCommand{\PgSg}{\HepParticleResonanceFormal{\PgS}{1940}{}{}{D}{13}{}\xspace} \DeclareRobustCommand{\PgSh}{\HepParticleResonanceFormal{\PgS}{2030}{}{}{F}{17}{}\xspace} \DeclareRobustCommand{\PgSi}{\HepParticleResonance{\PgS}{2050}{}{}\xspace} \DeclareRobustCommand{\PcgSi}{\HepParticleResonance{\PcgS}{2455}{}{}\xspace} %% Upsilon \DeclareRobustCommand{\PgU}{\HepParticle{\Upsilon}{}{}\xspace} \DeclareRobustCommand{\PgUi}{\HepParticleResonance{\PgU}{1S}{}{}\xspace} \DeclareRobustCommand{\PgUa}{\HepParticleResonance{\PgU}{2S}{}{}\xspace} \DeclareRobustCommand{\PgUb}{\HepParticleResonance{\PgU}{3S}{}{}\xspace} \DeclareRobustCommand{\PgUc}{\HepParticleResonance{\PgU}{4S}{}{}\xspace} \DeclareRobustCommand{\PgUd}{\HepParticleResonance{\PgU}{10860}{}{}\xspace} \DeclareRobustCommand{\PgUe}{\HepParticleResonance{\PgU}{11020}{}{}\xspace} %% Xi \DeclareRobustCommand{\PgX}{\HepParticle{\Xi}{}{}\xspace} \DeclareRobustCommand{\PgXp}{\HepParticle{\Xi}{}{+}\xspace} \DeclareRobustCommand{\PgXm}{\HepParticle{\Xi}{}{-}\xspace} \DeclareRobustCommand{\PgXz}{\HepAntiParticle{\Xi}{}{0}\xspace} \DeclareRobustCommand{\PgXa}{\HepParticleResonanceFormalFull{\Xi}{}{}{1530}{}{}{P}{13}{}\xspace} \DeclareRobustCommand{\PgXb}{\HepParticleResonanceFull{\Xi}{}{}{1690}{}{}\xspace} \DeclareRobustCommand{\PgXc}{\HepParticleResonanceFormalFull{\Xi}{}{}{1820}{}{}{D}{13}{}\xspace} \DeclareRobustCommand{\PgXd}{\HepParticleResonanceFull{\Xi}{}{}{1950}{}{}\xspace} \DeclareRobustCommand{\PgXe}{\HepParticleResonanceFull{\Xi}{}{}{2030}{}{}\xspace} \DeclareRobustCommand{\PagXp}{\HepAntiParticle{\Xi}{}{+}\xspace} \DeclareRobustCommand{\PagXm}{\HepAntiParticle{\Xi}{}{-}\xspace} \DeclareRobustCommand{\PagXz}{\HepAntiParticle{\Xi}{}{0}\xspace} \DeclareRobustCommand{\PcgXp}{\HepParticle{\Xi}{\,c}{+}\xspace} \DeclareRobustCommand{\PcgXz}{\HepParticle{\Xi}{c}{0}\xspace} %% Strange mesons \DeclareRobustCommand{\Pgf}{\HepParticle{\phi}{}{}\xspace} \DeclareRobustCommand{\Pgfi}{\HepParticleResonance{\Pgf}{1020}{}{}\xspace} \DeclareRobustCommand{\Pgfa}{\HepParticleResonance{\Pgf}{1680}{}{}\xspace} \DeclareRobustCommand{\Pgfiii}{\HepParticleResonanceFull{\phi}{3}{}{1850}{}{}\xspace} %% Eta mesons \DeclareRobustCommand{\Pgh}{\HepParticle{\eta}{}{}\xspace} \DeclareRobustCommand{\Pghpr}{\HepParticle{\eta}{}{\prime}\xspace} \DeclareRobustCommand{\Pcgh}{\HepParticle{\eta}{\Pqc}{}\xspace} \DeclareRobustCommand{\Pgha}{\HepParticleResonance{\Pgh}{1295}{}{}\xspace} \DeclareRobustCommand{\Pghb}{\HepParticleResonance{\Pgh}{1440}{}{}\xspace} \DeclareRobustCommand{\Pghpri}{\HepParticleResonance{\Pghpr}{958}{}{}\xspace} \DeclareRobustCommand{\Pcghi}{\HepParticleResonance{\Pcgh}{1S}{}{}\xspace} %% omega mesons \DeclareRobustCommand{\Pgo}{\HepParticle{\omega}{}{}\xspace} \DeclareRobustCommand{\Pgoi}{\HepParticleResonance{\Pgo}{783}{}{}\xspace} \DeclareRobustCommand{\Pgoa}{\HepParticleResonance{\Pgo}{1390}{}{}\xspace} \DeclareRobustCommand{\Pgob}{\HepParticleResonance{\Pgo}{1600}{}{}\xspace} \DeclareRobustCommand{\Pgoiii}{\HepParticleResonance{\Pgo}{3}{}{1670}{}{}\xspace} %% Pions \DeclareRobustCommand{\Pgp}{\HepParticle{\pi}{}{}\xspace} % pion \DeclareRobustCommand{\Pgppm}{\HepParticle{\pi}{}{\pm}\xspace} % charged pion \DeclareRobustCommand{\Pgpmp}{\HepParticle{\pi}{}{\mp}\xspace} % charged pion \DeclareRobustCommand{\Pgpm}{\HepParticle{\pi}{}{-}\xspace} % negative pion \DeclareRobustCommand{\Pgpp}{\HepParticle{\pi}{}{+}\xspace} % positive pion \DeclareRobustCommand{\Pgpz}{\HepParticle{\pi}{}{0}\xspace} % neutral pion \DeclareRobustCommand{\Pgpa}{\HepParticleResonanceFull{\pi}{}{}{1300}{}{}\xspace} \DeclareRobustCommand{\Pgpii}{\HepParticleResonanceFull{\pi}{2}{}{1670}{}{}\xspace} %% Rho mesons \DeclareRobustCommand{\Pgr}{\HepParticle{\rho}{}{}\xspace} % resonance removed \DeclareRobustCommand{\Pgrp}{\HepParticle{\rho}{}{+}\xspace} \DeclareRobustCommand{\Pgrm}{\HepParticle{\rho}{}{-}\xspace} \DeclareRobustCommand{\Pgrpm}{\HepParticle{\rho}{}{\pm}\xspace} \DeclareRobustCommand{\Pgrmp}{\HepParticle{\rho}{}{\mp}\xspace} \DeclareRobustCommand{\Pgrz}{\HepParticle{\rho}{}{0}\xspace} \DeclareRobustCommand{\Pgri}{\HepParticleResonanceFull{\rho}{}{}{770}{}{}\xspace} % new \DeclareRobustCommand{\Pgra}{\HepParticleResonanceFull{\rho}{}{}{1450}{}{}\xspace} \DeclareRobustCommand{\Pgrb}{\HepParticleResonanceFull{\rho}{}{}{1700}{}{}\xspace} \DeclareRobustCommand{\Pgriii}{\HepParticleResonanceFull{\rho}{3}{}{1690}{}{}\xspace} %% Psi resonances \DeclareRobustCommand{\PJgy}{\HepParticle{J\mspace{-2mu}/\mspace{-2mu}\psi}{}{}\xspace} \DeclareRobustCommand{\PJgyi}{\HepParticleResonance{\PJgy}{1S}{}{}\xspace} \DeclareRobustCommand{\Pgy}{\HepParticle{\psi}{}{}\xspace} \DeclareRobustCommand{\Pgyii}{\HepParticleResonance{\Pgy}{2S}{}{}\xspace} \DeclareRobustCommand{\Pgya}{\HepParticleResonance{\Pgy}{3770}{}{}\xspace} \DeclareRobustCommand{\Pgyb}{\HepParticleResonance{\Pgy}{4040}{}{}\xspace} \DeclareRobustCommand{\Pgyc}{\HepParticleResonance{\Pgy}{4160}{}{}\xspace} \DeclareRobustCommand{\Pgyd}{\HepParticleResonance{\Pgy}{4415}{}{}\xspace} %% Charmed mesons \DeclareRobustCommand{\PD}{\HepParticle{D}{}{}\xspace} \DeclareRobustCommand{\PDpm}{\HepParticle{D}{}{\pm}\xspace} \DeclareRobustCommand{\PDmp}{\HepParticle{D}{}{\mp}\xspace} \DeclareRobustCommand{\PDz}{\HepParticle{D}{}{0}\xspace} \DeclareRobustCommand{\PDm}{\HepParticle{D}{}{-}\xspace} \DeclareRobustCommand{\PDp}{\HepParticle{D}{}{+}\xspace} \DeclareRobustCommand{\PDst}{\HepParticle{D}{}{\ast}\xspace} \DeclareRobustCommand{\PaD}{\HepAntiParticle{D}{}{}\xspace} \DeclareRobustCommand{\PaDz}{\HepAntiParticle{D}{}{0}\xspace} \DeclareRobustCommand{\PsD}{\HepParticle{D}{s}{}\xspace} % new 2005-07-08 \DeclareRobustCommand{\PsDm}{\HepParticle{D}{\,s}{-}\xspace} \DeclareRobustCommand{\PsDp}{\HepParticle{D}{\,s}{+}\xspace} \DeclareRobustCommand{\PsDpm}{\HepParticle{D}{\,s}{\pm}\xspace} \DeclareRobustCommand{\PsDmp}{\HepParticle{D}{\,s}{\mp}\xspace} \DeclareRobustCommand{\PsDst}{\HepParticle{D}{s}{\ast}\xspace} \DeclareRobustCommand{\PsDipm}{\HepParticleResonanceFull{D}{s1}{}{2536}{}{\pm}\xspace} \DeclareRobustCommand{\PsDimp}{\HepParticleResonanceFull{D}{s1}{}{2536}{}{\mp}\xspace} \DeclareRobustCommand{\PDiz}{\HepParticleResonanceFull{D}{1}{}{2420}{}{0}\xspace} \DeclareRobustCommand{\PDstiiz}{\HepParticleResonanceFull{D}{2}{\ast}{2460}{}{0}\xspace} \DeclareRobustCommand{\PDstpm}{\HepParticleResonanceFull{D}{}{\ast}{2010}{}{\pm}\xspace} \DeclareRobustCommand{\PDstmp}{\HepParticleResonanceFull{D}{}{\ast}{2010}{}{\mp}\xspace} \DeclareRobustCommand{\PDstz}{\HepParticleResonanceFull{D}{}{\ast}{2010}{}{0}\xspace} %% Deltas \DeclareRobustCommand{\PgD}{\HepParticle{E}{}{0}\xspace} %% Random things \DeclareRobustCommand{\PEz}{\HepParticle{E}{}{0}\xspace} \DeclareRobustCommand{\PLpm}{\HepParticle{L}{}{\mspace{-1mu}\pm}\xspace} \DeclareRobustCommand{\PLmp}{\HepParticle{L}{}{\mspace{-1mu}\mp}\xspace} \DeclareRobustCommand{\PLz}{\HepParticle{L}{}{\mspace{-1mu}0}\xspace} %% a hadrons: bit of a collision with the antiparticle marker token... \DeclareRobustCommand{\Paii}{\HepParticleResonanceFull{a}{2}{}{1320}{}{}\xspace} \DeclareRobustCommand{\Pai}{\HepParticleResonanceFull{a}{1}{}{1260}{}{}\xspace} \DeclareRobustCommand{\Paz}{\HepParticleResonanceFull{a}{0}{}{980}{}{}\xspace} \DeclareRobustCommand{\Pbgcia}{\HepParticleResonanceFull{\chi}{b1}{}{2P}{}{}\xspace} \DeclareRobustCommand{\Pbgciia}{\HepParticleResonanceFull{\chi}{b2}{}{2P}{}{}\xspace} \DeclareRobustCommand{\Pbgcii}{\HepParticleResonanceFull{\chi}{b2}{}{1P}{}{}\xspace} \DeclareRobustCommand{\Pbgci}{\HepParticleResonanceFull{\chi}{b1}{}{1P}{}{}\xspace} \DeclareRobustCommand{\Pbgcza}{\HepParticleResonanceFull{\chi}{b0}{}{2P}{}{}\xspace} \DeclareRobustCommand{\Pbgcz}{\HepParticleResonanceFull{\chi}{b0}{}{1P}{}{}\xspace} \DeclareRobustCommand{\Pbi}{\HepParticleResonanceFull{b}{1}{}{1235}{}{}\xspace} \DeclareRobustCommand{\Phia}{\HepParticleResonanceFull{h}{1}{}{1170}{}{}\xspace} %% SUSY particles \DeclareRobustCommand{\PSH}{\HepSusyParticle{H}{}{}\xspace} % Higgsino \DeclareRobustCommand{\PSHp}{\HepSusyParticle{H}{}{+}\xspace} % positive Higgsino \DeclareRobustCommand{\PSHm}{\HepSusyParticle{H}{}{-}\xspace} % negative Higgsino \DeclareRobustCommand{\PSHpm}{\HepSusyParticle{H}{}{\pm}\xspace} % charged Higgsino \DeclareRobustCommand{\PSHmp}{\HepSusyParticle{H}{}{\mp}\xspace} % charged Higgsino \DeclareRobustCommand{\PSHz}{\HepSusyParticle{H}{}{0}\xspace} % neutral Higgsino \DeclareRobustCommand{\PSW}{\HepSusyParticle{W}{}{}\xspace} % wino \DeclareRobustCommand{\PSWp}{\HepSusyParticle{W}{}{+}\xspace} % positive wino \DeclareRobustCommand{\PSWm}{\HepSusyParticle{W}{}{-}\xspace} % negative wino \DeclareRobustCommand{\PSWpm}{\HepSusyParticle{W}{}{\pm}\xspace} % wino \pm \DeclareRobustCommand{\PSWmp}{\HepSusyParticle{W}{}{\mp}\xspace} % wino \mp \DeclareRobustCommand{\PSZ}{\HepSusyParticle{Z}{}{}\xspace} % zino \DeclareRobustCommand{\PSZz}{\HepSusyParticle{Z}{}{0}\xspace} % zino \DeclareRobustCommand{\PSB}{\HepSusyParticle{B}{}{}\xspace} % bino \DeclareRobustCommand{\PSe}{\HepSusyParticle{e}{}{}\xspace} % selectron \DeclareRobustCommand{\PSgg}{\HepSusyParticle{\gamma}{}{}\xspace} % photino \DeclareRobustCommand{\PSgm}{\HepSusyParticle{\mu}{}{}\xspace} % smuon \DeclareRobustCommand{\PSgn}{\HepSusyParticle{\nu}{}{}\xspace} % sneutrino \DeclareRobustCommand{\PSgt}{\HepSusyParticle{\tau}{}{}\xspace} % stau \DeclareRobustCommand{\PSgx}{\HepSusyParticle{\chi}{}{}\xspace} % chargino/neutralino \DeclareRobustCommand{\PSgxpm}{\HepSusyParticle{\chi}{}{\pm}\xspace} % chargino \pm \DeclareRobustCommand{\PSgxmp}{\HepSusyParticle{\chi}{}{\mp}\xspace} % chargino \mp \DeclareRobustCommand{\PSgxz}{\HepSusyParticle{\chi}{}{0}\xspace} % neutralino \DeclareRobustCommand{\PSgxzi}{\HepSusyParticle{\chi}{1}{0}\xspace} % lightest neutralino \DeclareRobustCommand{\PSgxzii}{\HepSusyParticle{\chi}{2}{0}\xspace} % next-to-lightest neutralino \DeclareRobustCommand{\PSg}{\HepSusyParticle{g}{}{}\xspace} % gluino \DeclareRobustCommand{\PSl}{\HepGenSusyParticle{\ell}{}{}\xspace} % slepton (generic) \DeclareRobustCommand{\PaSl}{\HepGenSusyAntiParticle{\ell}{}{}\xspace} % anti-slepton (generic) \DeclareRobustCommand{\PSq}{\HepGenSusyParticle{q}{}{}\xspace} % squark (generic) \DeclareRobustCommand{\PaSq}{\HepGenSusyAntiParticle{q}{}{}\xspace} % anti-squark (generic) \DeclareRobustCommand{\PSqd}{\HepSusyParticle{d}{}{}\xspace} % down squark \DeclareRobustCommand{\PSqu}{\HepSusyParticle{u}{}{}\xspace} % up squark \DeclareRobustCommand{\PSqs}{\HepSusyParticle{s}{}{}\xspace} % strange squark \DeclareRobustCommand{\PSqc}{\HepSusyParticle{c}{}{}\xspace} % charm squark \DeclareRobustCommand{\PSqb}{\HepSusyParticle{b}{}{}\xspace} % bottom squark (sbottom) \DeclareRobustCommand{\PSqt}{\HepSusyParticle{t}{}{}\xspace} % top squark (stop) \DeclareRobustCommand{\PaSqd}{\HepSusyAntiParticle{d}{}{}\xspace} % anti-down squark \DeclareRobustCommand{\PaSqu}{\HepSusyAntiParticle{u}{}{}\xspace} % anti-up squark \DeclareRobustCommand{\PaSqs}{\HepSusyAntiParticle{s}{}{}\xspace} % anti-strange squark \DeclareRobustCommand{\PaSqc}{\HepSusyAntiParticle{c}{}{}\xspace} % anti-charm squark \DeclareRobustCommand{\PaSqb}{\HepSusyAntiParticle{b}{}{}\xspace} % anti-bottom squark \DeclareRobustCommand{\PaSqt}{\HepSusyAntiParticle{t}{}{}\xspace} % anti-top squark (stop) %% Just for completeness... \endinput rivet-1.8.3/doc/mk-analysis-html0000755000175000017500000001354112116077755014754 0ustar sunsun#! /usr/bin/env python ## Get output filename OUTFILE = "analyses.html" import sys if len(sys.argv) < 2: pass #print "Using output name '%s'" % OUTNAME else: OUTFILE = sys.argv[1] ## Get input paths to allow rivet module to be imported from the src dir import os, re, glob pybuild = os.path.abspath(os.path.join(os.getcwd(), "..", "pyext", "build")) dirs = [] for d in os.listdir(pybuild): if re.match(r"lib\..*-.*-%d\.%d" % (sys.version_info[0], sys.version_info[1]), d): dirs.append(os.path.join(pybuild, d)) sys.path = dirs + sys.path try: os.environ["LD_LIBRARY_PATH"] = os.environ["LD_LIBRARY_PATH"] + ":" + \ os.path.abspath(os.path.join(os.getcwd(), "..", "src", ".libs")) except: pass try: os.environ["DYLD_LIBRARY_PATH"] = os.environ["DYLD_LIBRARY_PATH"] + ":" + \ os.path.abspath(os.path.join(os.getcwd(), "..", "src", ".libs")) except: pass anadirs = glob.glob(os.path.join(os.getcwd(), "..", "src", "Analyses", ".libs")) #print anadirs os.environ["RIVET_ANALYSIS_PATH"] = ":".join(anadirs) ## Change dlopen status to GLOBAL for Rivet lib try: import ctypes sys.setdlopenflags(sys.getdlopenflags() | ctypes.RTLD_GLOBAL) except: import dl sys.setdlopenflags(sys.getdlopenflags() | dl.RTLD_GLOBAL) import rivet def htmlify(s, para=False): # TODO: also replace LaTeX like \text, $$, \le, \ge, \mathrm, \emph, etc. t = s \ .replace("&", "&") \ .replace(">", ">") \ .replace("<", "<") \ .replace("$", "") \ .replace("\\pm", "+-") if para: t = t.replace("\n\n", "

") return t ## Build analysis pages all_analyses = rivet.AnalysisLoader.analysisNames() summaries = {} pages = [] ## Use list(...) ctor for 2.3 compatibility for aname in sorted(list(all_analyses)): page = "" ana = rivet.AnalysisLoader.getAnalysis(aname) summaries[aname] = ana.summary() page += "

%s

\n" % (aname, aname) page += "%s
\n" % htmlify(ana.summary()) page += "Experiment: %s (%s)
\n" % (ana.experiment(), ana.collider()) if ana.inspireId(): spiresbase = "http://inspire-hep.net/record" page += "Inspire ID:
%s
\n" % \ (spiresbase, ana.inspireId(), ana.inspireId()) elif ana.spiresId(): spiresbase = "http://inspire-hep.net/search?p=find+key" page += "Spires ID: %s
\n" % \ (spiresbase, ana.spiresId(), ana.spiresId()) page += "Status: %s
\n" % ana.status() if ana.authors(): page += "Authors:\n" page += "
    \n" for a in ana.authors(): s = a import re if re.search(".* <.*@.*>", a): name = " ".join(a.split()[:-1]) email = a.split()[-1].replace("<", "").replace(">", "") #s = "%s" % (email, name) s = name page += "
  • %s
  • \n" % htmlify(s) page += "
\n" else: page += "No authors listed\n" if ana.references(): page += "References:\n" page += "
    \n" for r in ana.references(): if r.startswith("arXiv:"): code = r.split()[0].replace("arXiv:", "") url = "http://arxiv.org/abs/" + code page += "
  • %s %s
  • \n" % ("arXiv:", htmlify(url), htmlify(code)) elif r.startswith("doi:"): code = r.replace("doi:", "") url = "http://dx.doi.org/" + code page += "
  • %s %s
  • \n" % ("DOI:", htmlify(url), htmlify(code)) else: page += "
  • %s
  • \n" % htmlify(r) page += "
\n" else: page += "No references listed\n" if ana.requiredBeams(): def pid_to_str(pid): if pid == 11: return "e-" elif pid == -11: return "e+" elif pid == 2212: return "p+" elif pid == -2212: return "p-" elif pid == 10000: return "*" else: return str(pid) beamstrs = [] for bp in ana.requiredBeams(): beamstrs.append(pid_to_str(bp[0]) + " " + pid_to_str(bp[1])) page += "Beams: %s
\n" % ", ".join(beamstrs) page += "Beam energies: " if ana.requiredEnergies(): page += "; ".join(["(%0.1f, %0.1f)" % (epair[0], epair[1]) for epair in ana.requiredEnergies()]) page += "GeV" else: page += "ANY" page += "
\n" if ana.runInfo(): page += "Run details:\n" page += "
    \n" for l in ana.runInfo().split("\n*"): l = l.strip() if l.startswith("*"): l = l[1:].strip() page += "
  • %s
  • \n" % htmlify(l) page += "
\n" else: page += "
    No run details listed
\n" page += "\n

" + htmlify(ana.description(), para=True) + "

\n" pages.append(page) ## Write out HTML head = """\ Rivet analyses reference

Rivet analyses reference

""" toc = "

Contents

\n" toc += "
    \n" for a in all_analyses: toc += "
  • %s – %s
  • \n" % (a,a, htmlify(summaries[a])) toc += "
\n" foot = """\ """ body = "\n\n".join(pages) outstr = head + toc + body + foot if OUTFILE == "-": sys.stdout.write(outstr) else: f = open(OUTFILE, "w") f.write(outstr) f.close() rivet-1.8.3/doc/cone.png0000644000175000017500000005371212116077755013272 0ustar sunsun‰PNG  IHDRÓ›tÊsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ /ÿ›= IDATxÚݽy´%×YúûvUsî|ûö<ªÕ³ZêÖ<Ú–,c#ËÆÁƒ 0Æ/ÆI0ðÞŠå¬ä%BÂ"¦8N^˜Á+1XÆÆ6Y–F¼êà{ß-Àh;S·’¥Õ ¤1ªT"2‰t=€R¶+€²lé¶ð[p.€TàÒ}øÝ‡pÝëðÚÁ‡¢‡£¯-p—€Óp”ï{á½€Ö8Ö‹ñµÙ>| ŸÛŸâkΙ­Z|ŒIWx?x“a6ÃpP€ [†år=Ž`@DâTR΀ä2 —=NˆV°.èvô-6X…å?>„ën݈· ·ðžpÈ÷ÉJ­ÐÏE½.Ð[ðCH3ŽÍõðgw ¿ñ#ŸÆËâöeç5<lj„,ûãÙ÷6´ŠÁè­* ¡ZŽÕ„ ÈX¨*…H… J,Y Ù …µš[ª@˜¿Îžmk–®aÀùĨr@§Ð_~/^·mÿ°à-òCBtZ@'¢09ùÙ»”óZ™s¦€nX˜榹ËÀ´ ¥¹.>þÅSø?ú¼äNW0ߪï÷Þ<°3šj™çN„`p(›ŠRÐ%n Iâ. 3ð¥®P@(8Ð<`ƒ9–®aÀ•‰Ï .ñ.¼nÇ(~VŠÎ0C`¸´Ã ¹€ sŸ»]`ú 0ý*ЛÍa3×ÃÇçüÜGŸÄ…àiðVéÿa`bа[Ç<@u¢ pÔ àE†Õ‚*0>:äÏ*̦rPÙ,—˶k…é¨ÂíA%€S?y'Æß{3~i Ä»Ówt`4†"Ï;76&®ZCÀÄ. 5lé4è]¦^æÎS/¾\y±À©ÓÀÅç“ÃÁ3.= ßÿ¦?Ãç È$øtηr¾¹íÀï¾Õ8‚##^[„p°cX. ¶£0€JÂ|D s–KA'D+jD+òcÓít®ÀKŸ|'îß7ÿ¤cD‰]×:®¦·ó`Ë­ÀÖÛE6ÀˆœmbQâ˜ù³À¹/'þèžM~Ah \>\|ÖèÉ85ƒ¿ïàãlÚ^l^¯Êã“ïnØ Dk P­A'J˜­èqA;­iä!¯¹h¥ œ ¯äŠQŸ'")ƒkp>Á<öð£øm"t €5!°!Âô]­°ç À]ïM7´àÐ={a¹çÛÜ%l£»íuÀÌË@<Š€Îz ³˜}5ùŠáoùž]8ñ;Ïá©WŠ^Í|¥›è±ÃÀè_ @A… *TÉë u™ˆ”x.*¿)!£e‰lKÖÙvµAWåö°÷÷âßµñ `K ³Ýö`ÝÞä–Ì!‹ýlös€À¡mÀ–7%n€©ç„ÃÀÀV`æXò¶‘}û6|ñãßÄqçÆÒ†éVíñüEàÑ—€.›ÆMc@Ø"¨ @!ÉœR*šD K³ÍUêb© Ù\,×pÿn0Â÷€¶¶„‚ÝF›ßl½µ¶«¹ó0Ëzp@8ºhOWŽè!¶àõ€µ”˜ñ>FsÅ)÷JžãLR¤B°œmèíµÉ¯ž}  µ˜;ô¦€–ÂMkÛøÃϼŠËæ×Î_íì¹+ÀÅYà¶ë ëFm¶S€Û)6Á€â¶ŠÙ¸ší®èÊ" ÒCþíñûQ€½ `C`,Th ¾Ý„U\Ñ/Nœº:—.ΗÁ뀩'žG+Ï'ðZÛÆÉß=‚¯ñã*?^œ¦æ{öC†Ù,#Âèqˆ€Ù&†ZÑJ}O¬×Ë)X ÿß·ãµÛGñS `@k”ø„w­\œr•—€ËÄ\!ŽÝ%aÐf¿™£Àôó/!Ðù÷ÏàÍ/îà]Õ8rhÀ¾ÍÀÈ9ÁþԨșÍŸÊc°MÄhÙ¶«ð¯Ôç¬ÅûÒñ¸ÌÓÛœ8xfs_›ë‡SŽßM9>8w›\”½-]˜mö³Yèl³®jg30=´4ŒÍ¢k%À½Ð~í/€.küïÇX3nöi;9s,Ä%7Ë"ɶ±“@`Ž V™åà‰Zz€ð»öaíÃ{ð+  M†åÒÇºÝ Êt¶2‰ËTRœj‹éT´Æ¢¶—ü‹¹—žMBfùS1ÚÛñ—Ÿ:‰sæàÙ%ž¿e»V= |ý8°·ï" ´‹lGÒ(X¬ ™<®ZýÔ&jÂt?pîM”ïˆ: S-ÌYÌ&¸,˜±V Ó‘a.¥FKÙÍe¼”éÁvZ+dyýfü€ŸBÿµä¹Qc/óxøÕ?gtZ=üã‡ÖŒ*X ˜ÅdÎÜù[‘sç0`¸Ê@kyX?ˆäâu仃Ð Sà<ÏT".•GÜêxr]ÅlàXiœdDm¼7þ½­ÿ_'qi‰*ˆ¤¯¼¦\˜ëÿ ~é q?ó]„5£©;D¤˜§ytýŠVˆœ;ç¸à*±›*1 "á½£mÜ­`˜ßaB .sxŒŠ*Ë´Ìp@…õšî—ËÜK 0&¯Ì‰ˆ½n/þ—ð8€~ ¡Äù’çIû@wÏVàý·_8tl{ê£7]§0Ð’–«õ5þ8ª·tu jà2QÍâ?Znö.°àaº2Q*E­%"Åû}û¤Xee‹ÚÀ9±¬îTvgt§G@ÁTvóïÆwøíe:¡x~ °c p~ø×_fû´“/Ï¿þÉnØ®ðö{ˆÓ ß>jJŒß{W“éÊ,ÕÌ/g˜.úÁC¸g¼ƒ»HÀsgp9ÓU9‚eH«‰{¤Ì9,™ŽzIöI|1Á_4‚xãÏcá™O'Å@‹°uAã÷¿|çú·e¿s9–;·NDœè‡qˆ€Þ|ÌžY6¾îÅìwððmÐÔ\$ÎÍoËl2gøÆq¼w‘ ]¢šþûw%Æ|šÔK!’V¬$üÄ ?óæþOÑo}*Æ«tâ&qA¤—@èU]c˜&0š9YÍÞ…7A·‡„›÷[ޱ¾ç ›±u ‹…ާ¤µiØ›Vî9ËÉÀøáo üèý¦H©ß›K`6ù^ØÇ©V˜uK ƒCëq;GsâÊ¡×莥FÀ-Ñìl/<‹ƒàÁ݈÷þ@ æÌiNìÀÝï±J2à§nÄ÷BØE ±s®.ÀûnN*Þˆ\ñJÖúø៾™ðÖÛú½x Á¦ËÅhÙ{Õ*³[AA#¶€s_c"ž4ôðæöÝî©]4µb—^s/â}¿ìX£µïõyÿÃD»FðãÖ.tÚ­ï:(Äw¦õ‘Ízfÿ¶µÀ‡ÞJ¸{O³/|ß ›Ç±d1ZvœZEQÚHÄDØb;cÇ`ÖènÞ‰+÷~G‘ñ¸ae_ß¿ŠŸËÁôÎ÷÷þ3 4~»Ø9ñ1¨=„Î-oµX§`ë?¿w\ð€©tÃö§?‰‚ ÖƒJl>ô6º‘ú/»c70ÒY~°¥Û®¶!QØ6adµ`k²šOŽaæÁ·#^»±Ür]²ÈŸ#D,o|=ô-¿ÞüVıs’µÀÎÍo-X–oÞŠ°¦Ï_•f_€ßhEF lNŠôŒ U¼7Ý|üv®/ÿ¢ß|?áû^ wˆHí‘^„¸Û«(^½À F¤“@uFÍoBÌ¿æÛ\8ƒÖ_ÍNW[·“±8+ƒ7½¼åõàñC‰Ç" ð§Ÿëm‹Gˆ¶ß µf3ôÙW3w×Doø¶MØøéS¸Ð‡ß΢Üë„ê‘‚- ø œ’Þ€pÿ Àù'ÀçžI²LN]LE*ðð„#²›âpÞL§ÖG'›æHèð®Àê\&Ùò/_Û ÙQÇÄÍoX¯Û€ù7¿Áù3žê•—kØ þ^žNu<² ¼ýµÀ†;€ HÚ!h0H\þÄ[Ïù6;‡Æô£¿•]ƒ€0úxó§OáDŸ » $•ûëMrLwcJ y§ 9Wà¶]„Û÷?ù¶älBÓ†¸È,qÓ˜šÄZejSÚái•R›šF%hÛ6§€Ëô’° FlÞ”zÇS°$é À›6ƒz1Ô¹S W^]œ]jîä±-ÀøV`|;°ù– hy¸S|wú#å:çJ‹¿Ú>ô\ùÌo凰woð_œ7ñ´&9øÐ½¶Åš(6+ðÝþÙq(‚³Ôm‚EF$d4C0`¸Š@£:Q»v[ä^"€ZCIn‹`™ÀQÞvxûõYï š™f¦“‚“^¸x˜Ø´Öl Ç·å R æ89g€õÝÉ6rÄ5Y¿‡`Â`t#ÚÀÜSŸÍÄÞpˆ;ÿá>ìø#8Ñï‰Ü9&D¨c©º©ä«‘‘`ó1A¡ëÊ"òè*·­<è¨ñ:1€}i ‡@‚”ÌhÍY†äºÌùÊÄ¥Y†Çr{Û>¤ý5’ ªÄq‚—\$ØË¥Óè™ â”JElûÐC˜æ³Pß¿ ?üGðeô‘ üÏ^ HBÙVkéJ^ÀÆ œÄuº¬§ Ÿ¾º™Ã¥q×Nˆ-ò$©Öøƒâm,áæ2 ’à‚‰ò, x¢JqrAX€ËˆnNu6÷}¸2¼º€3ŸÓÞ÷:¨aÄW¦óÀ|ßÖoXì¡=&½/lFFKU¹îE¡ “¥_¶ã¼3»×Ç^ çp­»$Û¶ÓUøÁ²ÈP¾Né~8Ç8¾3{²0dØ&Î÷É÷y\"T¶_nC¾Þ9ü¥‹µ¶þÁkp_?I¾à> „¹5ÐD ìa Ʋff–K¤Ä‚&¾¼ÕõÓÕe˜ÐÞ„-p»yE­ Ióe Bl¬Y€é6’ t×àˆcÓ¾>=aql)˜)™2sò[ EpÌ;ÞYYÇ;f×àÿy{’'Wy¹Û<,&Á×X´¯ÆI¬ëÁ–nW«,NK}t‡×c³«ôR{Äb%Pl¯Ë ìÛæ2QÊföÒÎêÿ\ŸKHÀ”¾‡RZNÒ´jt#ÂM{,¼ï»C³°Øþ oΣ·Á㟓.(Ÿ5‹2#¢º>ƒý+®^À¿/wÉ¡õ¸CºK²;9XH¡ ゘µ˜(ý h <9Ù+É'.á0  …Y àçTÄÞñNG4¢õ¡›ðu'íF:ÅèC’RîMy@è3&ÖÊø:¶ƒ'Ø}Õþ„êÄM@­£.RÔ§±M8´ ® žx(Jt/K7qtC¸å{XˆnrôI‚­O¶ö¾ª3l]ð=ÃøiU'ð]7£0{&H@a@ ‰$j¯+AêtMT±n Z±ú©MTÀñöY·:ÙÅ"—e ùTì¹Ê>üñP[Ìú(Ïó]½¯Üˆ`-ŽÑÔDkïk­öþÜAû¿»í£"1ýuäœà’T ËqÜO7ä*¶Cµ'©V‰åjýu6“À,!±4c›QÈ5|Fƒ‡uJW–-a3§k¬ô>WÄ 1ܾéM¶˜SÀÛ¶ãý€ß}õëoJÞdŽ}å è—Y¯°u:‹ÕÒ°"7p™X¹†%–lÁ(æj»LJÓÕ[Ab½fGƒ€ý ®ŽW&]âÞ@ã馀Œ+™4½a¢m‡®Ùhg}ßyÏ:x“ŽnX[t§Hb”8€¥ë^1ÔïüŸÎ_"§“™¢WF¼RÇdÀû胸 Ž•EA˜]‰‹Eœ:kÀÔ4دZº…OýçRÅï ·„[o™yüB&Ê=nu¯@ÕW…–Õx( Õëv«í§³–ÝmòÈ,CÓÈ2ìÆ€n,Óñ‹±O¹G…¡2^Iê;¹)bÕÅ}õέ'Uû†é3ø'ì𻌹[ &ØqÓRÁ öéúž'«é§+€n×lFÁêb[|¢ÂºD¹ãÕb/ݽ-†EqOMBgá†0ÇD»î(´xšÂ¿vû÷³/¸O+_/3³•Šîj¿]¸ k¢‘ºnÔnõšeR°6NnÛ"%é-E “–¥¯ØyÉ¡0vÔàZ¶)“ÃÂùœÔÈp»¤ÇÃëí¾ GËôºVz nål—]C ðÆReðe‰<ô!b}~;Q»š.“ÂÕi™âj«º)½Uµ­Àø ™9ïB\¡UWÎz_“¨]Å:§úhz½s+Öþ-N{ ³Þ>øºÏ?¥’îè¤Á‹ŒÙÊ&–Hð5Òª¹¤®u%YªnN«!^KõºÁV"^}¥s™ nœ±œélÅ$JrD¬·P/&öZ¡Ó•'\ Ýùb¶}2ºþv¨Î ˜ÂϦ Ó‚å|É"pj¨ÊPXIË(Í^éÔ&ªsŒµp;J’3óE< ©#é~ù ¨Ë!ÕÊàBÝ+D©¢]âè´½áë|Œ_lOq8Ø®ÉÒþ¦MòãxEl%«V@œ6òÕݳŔÊ _¦!gŒA¾Ð’eT”îu–dé1ºÉ[eJ ÁÛ‡ÿž[(Mí‹üCÒ‚õJÉ&£e s-fŸ¾fŠ­ ½c?öê4aW9‘Hæ,0œ®ðɡĊ]"˜J­c.i-!²Ž©!ØÕðZëvä­ú èLá×isiÅv§[ÞjÓÓWCÄfbV¤;­Ððj²l3ªº¨º.-©ÄÉ ÝÜ/×Û$uRk£ÁWå^Uf²Šo~³[b8^,.»çʳŸWl¾(Å [÷Õòu¢cº¨[£j=Åͱë§àF‚B/pº*çN¬ëØSÊèaiØ¿/Úy+TgЪ8ËŒ9# KÇK³N ½¾¯&ØÊt;ðŠ– –q— Ò@¿¯Sdᵥ≮K¾4$ÔˆK]ãLæ>J-븪5{ÝEÆË¢QÑ®Û,Ý.èâÔ%¶§µm(\$ÈÁxuÀæèvze»6Õ*ɺ¨“Û4Çç:‘v³vQ.æ[¤®kEWètºHɱݾŒ|õ´f[´ï5nu×Hëç]ö¥~.ÅUNc\-‹üf_†€ÿ¢ýCöQIÊµÛ ¼ØâÊN§Æ}JªÄcɺ®w›T‰áü÷%(!ǰ(¬›ßmÞ5º6@ÑEü,wÙò×É ø|UÁæŠX½ò5Tè?P<‚J{¨Ùn)f—£à¦„½š8“u¦pCèbGÉ{Ú‡¿ÝªsU1~1<Ÿèp®^—ÏŒ€È:ÙúJ ¯ŠˆÅ²»Lšèr麚°ûvø<çeà+ú éåuú.ÈUÍu±GJU­ltÝ-ùsªZ§øƒ±bù×µÝÉ \bP”‚a•€¸ í_K™îðÜÑæª0 ùÝJžØ½¢u”vÖ+¦*6Ó¹h”ù~¹Qã4tµI©jh ¢ëoIþ§éfÎà—1›øì4„5«mýνàÌý²Ò2Q°]¸ C!1ÒJ7m0Ù-…È̓“A‘­‹‚߯™#}òs ;(¢Ž"y(¸ã‹ @´ï^,|óÉìdB+z…¡÷Q4åxG8cáD&\_^?©J˒ÝJö®ê¢¾…<ã„Jaësáù:Dz‡Ä-ƒˆÕ}D8´s ŠýŽÉ E¬´j£7#]kEh¢3ã8pÈ IDATø°d8íId^¾‚›%‚Í£©eWhu…' ·°·´‰ü ¬ï‰[âÖ‹È6±ÞS.Ó‹L"€ˆÓÖ´¨vÞluyRÐYF¬XD)4Šý¥QæJY –<¯zSÄ{¶`4P±Û!ØsJ-ß×HÇtW!«a©^bFŠ.éÖ„b6L®÷±åf°uヅqÑi.° {ÉœƒÕ³N+Īx¬DD¢2¥é»ö9ÙÂ%•MV{™*¿¢Z &½Ä”uÝŸqRëG´Ò3‹`WÃknÙkG(&ñføaí¶ ‘€s£(êz+¦Ã•yËbH4™Z-[GÌÐ9”·–w«Ó]£‚à r“8«¬§ü÷›Ö.³Ž½êòϵç‰IÃÂÎ VÖ1‹1QZ{ïF÷äQ»ÂYüžÄ­¡YÆdY65û2Ű ¬Wñ¼½L*+ü'°EÁ•Žá‚WÆf¾Þ¹VµSÊ€ó̳€ÃÎÑOZ»ü"@{éý=î “î8ÕÏÎæÅIYØA´Æ)­óÚX¦¬ÓZ^#*Á%õ°ËĵB€£cB­M *ÿÄ>7üU¡(F)䢛‹KTÍýt…I9ð·€%·O²õ[XÄb….µ]wÈc5ÎóÝÚ8‹c©ãyŒ .{Ë^Qý¼š-ý“Öý‘ñÑ¡‚='Æ'vëõˆ†N_½LéMý£m “ìƒç1zZ7>Phåžâûb‘çP{¬Ö•L@=ó©%2[c]Î ô{Ò—ä[_vI“–XÞ;˜uã¬Æ`jÒ~B—…¹b¯k·¨eÏ6`Íf¨‘5–d&ñ&^àaiÁú=]C‚yu‡•r™Ôºúð&“-ì¸K|6oíØÈ¦”¾u…ÛD/ÒjíÓOG•gÒÕÂÅð˜Öh|À.°îa'ÃͱÏIì°sUxje‡•t™T²Ý¡õb\º\¸„Ñ|€ªóÕ•F,<µ ºIýCÃ|:Ý ]Þic[–ÞëƒÄyÏpŒh÷í¹“8yNð§z]!ëK[‡#vWÁxXN— Õ‡å¯TñÚZ®Í#Ölù’ itŒû ôºöX¾¼Ú9uŽâêÚX7Ê@¦”=ßíÖZÈrFbpëP»c±]xš?Ç@ìü¬´x>[Wij ÆÃJˆ×ÚœkŤÃ|ÞD\q ׿Nj­ð/®®qÕ5âS7lîÓxÖ¬®€Â ¨…hÛ{¢õ<ÁN ³èŠÙ¿ÜoQö"‡•r™TÆ\#åøèïÜùBÍ„û ‹Uh+Ç‹7ú­.Ó±ÿsùgTbhå~aDûîÉÓÄŒè Ïð‡eXÌÒëtIc&±Ø%«‘eR€ÒHw¸Á…Ô&߇”¯²\›ˆÖ2àé Ç0œuí —ùê*t5Œ£Â3P!o†ß5ƒ²ó–E*`OàaÂ-ûO=–¿³Ç¨3ú#ñ–á$*‘.‹›œÅ8L[Ù#°ùóºTLΕí7ŸÁf}¥&æXK+Ä–|Sò”ì¼™¾ÑéÀIî@ë„°ÑÚŒ©ä —Éu®©e)ªv“CŠÅ4 ÿø©”ñÌ›¢=wbþ¹ÇòŠ1ÔäçN3)Î_€î.@/,`aò< غé‘pëæ³í[ :­?e@§?5!EO: sñu…Ûd©âµ*¿—н[“láB$¢®õ+£:þµ¨,áe#k?à¨Îj­S‹¡0N3ˆ ž™›~}2Ú}+ôW?k%@ö/òŸ§¡N|òÔ#ñÉSzá«O=×yàþKíþ•2ì§Á€"³¸„¹…3c£BÔ.Ñz­ }ešÞ±?7"È­mðukâú8›×ª]ö0X“÷ ýŽ*à ìVîÿ“)D(Œ„ #ÎAé~w¸íÌý³VÁµU·-J9ÝÌ#ž_80û©¿|„UëýíC‡žcJ||9µ”8‰ç2\°å–oØ'Èš Îz ï[#,×Ej‘Z%bWÄx¨^ªã•9‚«DlüWź öÔZHÀ]°™¾0©_%ŒnÞ……ã/d>Iw>€Ÿ{Ý—ŸõKËä‹o›ûŸŸüµsï‡Â5ã ‡) 0ϲK%‰7²kdH ÖøïÂE@¡hVøKTô“Ïjhb©¸,H«(Z›|VZp 6Q”Œ¦ÎÓõ,N!Oft8]D£m7 {⋌պ-÷Ïa„øüiLý÷_ÃÌ_ý¡`ÓìFüoó_øë¯ÑÛÞõŸSc#Uð’èEúÓd‚€O¿³×ÕDj™hÍ^oÄ®8­l!,é¸â³¯å«(Z –s?í'txBÅPb]_ì“n 6성@7ûÅ?É>'\·k>ðËXóÁ_-„ Íc4>òôÏ÷Ôâ`:‡CÐá8GÉ‚pˆ†€h™×­a J—!±¨–é¨_¿œÔéBÊ'–)jeF\Ù¯¨Œµ®¦hõµVk‰¥kD¬%>Ý|:ì¯4"Ý0Üvñse7½žÂ•Ïÿ ÝÿŽÀ*ÆÐ뿤þíOX‹ósã³gïV[¯û)Rƽ£Œ' À›âx£ãyÂ`©±¡úˆ8”‰S%–@<ƒöIñJ j[É÷~’WU´:;uÍ ‹ªRESGAºzh2¹)ëæ”™ÉÑöýPy[1ÀÜŸ) <|ý÷ }è>/ãÅ/¿ðþžê :ÐÁt4¡£A µ†@Ñ0¨5”0[kÜNØ®5”-é~µHŽ*§¨Ÿº+ôK$Ê›,­I¼•WŒ®E«®ª‡vj$tE#«ˆGTŠ¥ì AMl±rg¿òÄgO*Þ†ßò>[ ¥ªçKGvê`:@€Ã°\"bÍ"@¥Ï)ø’…ÚEñºXÀIàH&ŽÂ’›e7Àtn"ßüˆ*C‚VÃÒp[ÙÍ‘6†+{®Ð$ ÎäT³O4':~´mâÉWˆ©»òùO`ìïЬ4HÇhÝxo–šð Ÿ}läÒøA´7îB4¾­5›*Bëº[§±¢ä²ŽmF0¾)»{/?aÄl¹à‹¯B_§>p3&~âf|"T8 Òs+ÛsW–5ìËŸ£2QºÔºÕ­…ˆE\"b+t8ŸkN¶ ÛïÉœÅélYó͉ '^céÖ¬+_øSŒßOCL$†RhÝp­c›ïi÷€ =“*ä¥#i²„¬Ü„[G2©F„År¼¿8”IL¨N‘†qpq1[å“»VE«eXp¹£X;-*´¯E±ó:PìÏž^+,úÜQgк)þg¿ò¨õj`á΃…² ’Âí^ˆ{¦Û¼Ö=Ç “®›gÝ3F}¯Xá_aP‚?ýN¼®â!*œ  (wnkU[lvØ®IôáZ­®˜-€KWö?¡&3k+"ÌÅÏPCÖõ ¦þâãÙç¥Ý?S¶súsA/\O€-vÝ5 KŸàtÏoH”Š×£ø¾ öìTo©|$zaœ‹lªîE—~FÓ¡tפh-Rã³î)‚ÿlýÏb\ÕÍ(†¬› Ø–o¯í W®Xzv÷Øè+—KL1¢ënÈBædð‹m_šé%ª“vœô5† “©ÜôýRO/_ˆKºC°"U†Ó©€Ìs™ S7U®!£¬–_®ÑÚ”õÊ-êj6c_(±ž&f¨fk½´²pìYëwµÜm—~šÇãÇb ôÒxN'(-¦L±;@E¼®¯I °=;§ÎQ„ò¿YY&M€TÕ—°ÎJ‚q1a9oÄ¢ª…˜§—±öèkÚn°ÃÚIÐ Žâü³[b?X»ậòˆ¿Ùj%jTéì1 ˜£'+ÛTn½Ro.„tò’…rà¥:™Ot’G|J]­ªâKúZy‰"r±`\޾²k@™ˆ%ÿx€jk·¤°ütæ#ô• Þk¡g.[“FtànôÎþ‘eP0kFµ†ÐR@D@¤=Ï @Œ¿;p\e­NµÈ’PLwú2ˆo÷Asz¢eSˆűèeÑwq|€sÖžìá«•aÒwR‚grvÎ ¸HºùDa5ìþ'`crRÝÉÑñz]¯~Ý=~ı°ZîÆÜçÿ¨p|0 ôFGq@Ɍ٨M‘$dâ1µz͵ӱˆpÔ8‡í0W™]+^³±dkÉ…á=ƒ¹I?ºU ê/R´n8;»¤rBO ñÉî6£²\×<;íý-Ùy• ì´F´ÿN»¥›yDsø¹´ß]ÖûθOØÓT{FתŽá ZVƒ3fÉÕçj„&I˜e ÑXýäÍå­¥†…4bÇGç7"Øm­=ífS#Dkèé 2¬åè\\hܬ݂`ÝV»¶…€ ‡_Ä'n>-šj׸+]&ÊÃvVS¸V,%~š²Lêç¢5 ô«‰VßÄEënc”×½æ ¼­÷É÷ð¥³7¿0p(]b´Ü…Þ™?Îç"V+3@”€MS¡V©4´ÌÅK©œKZ/ç„´HˆÖÔu’Z3$%+ÛMú%c‰YmÖ6ö Ç¥U­KW-Ûqf}r:%G÷G*‚9—ˆÓcÌþt»©’9ã‹§ ꌥ²xú,Gûît§-&†À<~¾'N[̦½¿µ8&ýа䔔e —gû¦j[¼È°QÛù FózØ• y-›Î§Ë[¹í¬É9y »¿ulòˆç¦…ÙÒßÖÞ{Ø2"RÖ‹öÝYLØ šÇ/Ä=üb̦Ù";MÌ•ápÊ$“?B‡x—ó îÊÚÆ‹sBƾM÷i]FßTœ¬ì„Ù±`ÝÖ£¢J â-™h}Í‹VW™×6˜Üœ!éJq—Ša–n1¨XOžôvTϬÉÎ`8!bƒ‰ÍPk·@ŸyÅúê@ºÇˆ™ÐS9èTüwü!Úñ†Õ%qfl³í¢’‘ÂÜk „;#½-]Iá¬w3œ ¾»åv¯”h…ÛƒF—×(§Fì~u̹êöu!èó§rIîŠV¢­;m.sR+´ö߉ÞÙO~w8ôÚ ÀbSSKÚèûœ·¢HŸ¥ç¦1Ó±›Šé›fH~WG’=ÊIJ5‹@«sþÃÙSíŸ1;.¨2‰» ·Œ¢• .!6ViÞ‹Ž¥!ÇðˆX&ñw’múâp¯gƒÛùïÝ7æ€Ó‰‘¢(ܾ¿ÐS´zÀtÄacÃvš!òݞȯÓy£ì0Û–ŸÊÚCp>ÚŠ•Œ– É1HÁçñ$–üÓ MXû§Õ…AOs¢ü“G§#`% LsçØaZý¯uŒøìñB±½4Т-; ŽáL¯chïE â$¿îRÀ9èTîÙ€N\I’'elG§C¹£#ÏNöï±A¨‚ÄY(]QDki*Îk8`cö,>ÃÕ—]´.‘õØGvãYÏ­M„Á®äw .¸N˜L }áxaÞ?˜Äœç¡;HÌKJº`3%ñÚ4}=ܺjh<=eõDi1/]YÞèôxHX޳òHâÂQÉt2G.k[: g‰N 5O‚ݹóZ¸Vت´Jz(£dѪ‰Ö¦S|¸ÈvEµ$w°ð®&ÛØ,)«)0…€Š’%lÌÐNúBœS8x{aÚ#gh“u²ïŽbràÃm™¹u2iSìsóéÊÀVNƒTÔí2ß`/ËH)Î,ª„,òREÎ2’Æþ˜®eL,GZûJˆVÙÊ ö GçbãMĦSP˜/ˆìu à!yÝ;þ5è^\˜z(Emkó„c¥FD’_§í½sO~ÆEÄ#1®tðѶtDHž³@A`§±§¸ kÀ–Ái¬-ZDøÆd¦áнoGPÒ (÷\K£AÅ({´K7†Í%.åp«&ZÉŸÄÀ¥Ö*eºD*J9P`­•€ œ€RPe @³¶ˆÏ„ž¾äíO( ‰á{ß讨Ó%zÝmV×Ôôý¡Â#èâ£-ZÆéõ€Ðdš¤wÁ€pÁ½5îO·s,™zC…qK6ûmç®v­Ô˜óñCJD RETçŒGœ+¦p*Øée·8 d_÷€*Ѻ\1Vö̃HYF$)°”É.IzšC›ËÅiÌ1#Xú:\΂zêz'ŽÚI”2¹ÒüÇ`|C·ÜkÚœl¬§c[ö‚‡éi[gS2¶49“°ø:Fš ˆÔ&ÔˆXò¹ÁÊŽŒÅ Os9§Wް²ûåfº†Sþ™öUóúåìîY9Ù°ˆ:w7-F‡«©²á´lkhØIªR"† ¼Œ˜@PÆBMÀ˜‰W–¥L¤æ€ã™it_øJAçÛ1}00öÀ[ÀIñ*’GMéX´÷vè'>›§¯¥ÿ\!b®åÿ÷¼–ihaåZ/Nœê"ÂAFoÆ6&X¶é9t°k[dZàc;"Fl !D)—0W¡ë¤o¢³ËŠì: %Åð'7‚òI 2ŠÈ¾|0Vù±)ÈØíO”—‹PV†á&Ö[¬Ñ}ñ«àn¯8ÉZŽNŒ­ÁðÍw˜¸¬¬–úêâ<‹Ãlkí½óO~Ö 0ÕƒzŸÒê=)ó‘'"A•‘ O¼Õ*°Iét ˜¾R &+aqnµÎý9™ÛÄ]|ã´l]ÏYfh,N'wË*ÜU6(L¾ß‹lp±'i‡Ù&³ý}ॢ6³Aþk,<ýYèéK i 8³¬}ë»’Š3ròñ\N°_¸çV;Q7½$ƒxG|ŸÒ Ðsâûf̽rÉ8l GñZ/|!Î3­Q¯8¡--ÀÁ€6q5bʲKI9zžÓÓ$c8ò{ˆeÔ¢ R)Ÿ(h§É3Q9sH)'—K•²š•vCF/£„$˜.g4É`6@3Àe¢8eVf•épDtcþ럆¾|%Ù­ïÀÞÐÙ±³Èl°™ÍP„›÷@ #¾<ëò ¨Y¼iÏo"|ÏAôܱ ˜ècm`׌»ÆÅ力‰×zΉɒ"´Çóòí)˜4L@˜ó(!˘¢ËFŽ!AŽ›½Ngœš†}0zÀÆ]N™•X_$Ã[‘dìnsßËöqL¶N'?‡YQR¼2Ø¡@O]ÄÂSŸƒžºP°P­ñ xÔjcÝCo/ºGkµÌš ¶îCoê+¶÷€±óÝqý~Gà¾QwßlZÊèÍšêC›ƒŽíø©ˆÞt%=g$R±à¶¦Pd,VÎ'¥2—I½Ê<É×>vSEö+±9¸œ¤BùyîkW÷Kd¾ƒX9:Ÿ`[$7L“U VÐS“Xxü“Ð YbXÝðï„jµ²’FN-V©ÓÁÄ^ž4:í¹óÏ~¥ÐrâþqÜõñÓ èªÆ/^ËæbÝö–ó`ÑÚ "Bg‚1w>­šMLz—Ä)ý'£¾U â‡ÊÜ51—€2‘‰Ád"Q³K]À±(fùÄ®+b©(n¹N÷#ç8‡M™m 3{@o¶õž ßøl*íky̶ñ0vÏ}èlÛž×Ðz flpÌ1¢]·XqöÔ¼aïðñ¦§Æâ5 òNéMÙnt0ɤ;%R9¦¬VøÌ`ŠÀ*ÈÁ£À$5m*÷s©|¿]¨ao#¡‘Ù–2¹À#‡ñ$ÓÉg*a#‡YmÖ³oé›s­\,šŠRJEpwóý)z'dúšpÚa¸¡7`ü®{„¸d‡Ù„^í£VwÝâÍüÙÞÁHº±_ît´˜PXj>–ð‡„áÍŒ©cÂWþ´Vô2IDATçcëÝø«æ. Û@`L‘y³ZÆfxlt·,ÕÁ0"Cl0²Og³éˆSû±O“àJ}s”ЏÂ`ÍF1™ÏO<ƒù¿ýcèù9¯;à“ykÝZ¬{Ã¥ì–ng*êuL±˜Hœlkí¹óGžpÑ1ñc[ðmÿáüq¿Lפ k%/úæ m",L1æÏC™$låF-†¾r „1#ëÀJ%@3 c%˜N¤ª&âÓ\¶]ˆØt?»Lç:s]vóӻ͙ï8–+IßùAØÇÜþ+z/?•‹Í؉4èb0ÐZ»ßòPÆhl€Ã0ýè„ó×e=&!fE6q´û,} þ3¯ïtÔ—Éà+¢®˜©³f7pvˆçDœµgþS D­ÑãéKà^áÚ뀠†%He¬Ç¦½< àÈÕéRO0 <ÀÞVé)l=Ïk €Š¯Ë˜N|f÷+Ž…§þ znÖê ¦%ø´ßÜšÇÆ7;TÚ€‚Inî†öòºN £Ý7[þÑô±g0³XЕ³U ´dL&…„‰Œs_7ýÊœ°”éÒò5…œõôÌtçžF0±ÁÄPÐÊÅ©2 “,Hù¶Ô¨ ás#ild`¬æq‹9zœxfaR“ØœÅeÖ0ù].……g¿€…Çþúò¤7ªà›“"såZkưéM¯ ÀqÊ`Ùw¦l×ÄW—G(¢]7[îªtÙØÂA»|c9˜nÑžùˆ†û“O—¤ô˜À1)!vè;=uá†}Öî´eL°›d:y1SŽ\ë'ÙMº:ȉTØÏeFGjxô½Lä ‡t÷éÏaáK„øÒ¹œµÍŠ£ÆÅüÁá[±îÞÛƒ,¥R7sz–;ût.†ËÞí¾óGŸt='øé¸ï_ÃÓ¨l×ÜOG¡2Ö«H'bعnu&ÈÀD¼óωx\œŸH¥D>òÒ5=7‡îñ¯!>óM„[!ذÏœ2Šº©Ü%«ÑŠ 2&$äF*¤.V'b©xTâ $}ù,ºOýÿ3è¹+aÕSx_O€ñ®ÇøMû’$L²³GXŠWi@@0!r?g¾M§1¢]7cáè“Öè-pß8nÃ1MAWËtCéôª³TMƒƒ“ŸxþY‘ÆdĪV&Ý]Ok[ Ò³3è¾ð%ôŽ?pë!›‚Zã6»¥`¤\ ¦ ÌçGª’Œ ðßèð‚°˜2êÑ=ú·è~ý/Ñ=ú¥r Õ€.Kf¬»m/·nJ'€“LjÕvÊR&Ju^ äX³E+7q¸ë°W ÛÞÁ]Æœm:n$A}ó¼šdæV?¡„Ö0ãôFÇÓyJR*b‰ý¡ˆÄ Ð/>zñq÷ ܰÁ¦ p0s*³`. „>ö³Œ Ÿ«Äq›øÄ²xŽ!Ò=úEôžûºG¾={%¸èbŠ~ÆbqÚ¬ºh@{bëïB8<œuÈ‹¶ŠsÇ8•ˆRwduX²/ºþ°÷†Ø `´)èšÅUá”RɘtYl#Þ/k\[Ä·2&ŸºÓNN¯Œ"èäT—Þ«ßD|ê›À×þáæ¬ß…pË!¨¡µ™ØuAf¯„éJôCRˆO?Þ±'Ñ{ñIô^~<;]Y¡>DN{jE8×wÆw­ÃèÎI]Dj$HCÀ°ÃD (¥:„›uBÑî›±ðͯZ©e!aøŸîÀ ¿z Çt—ÂtÅÔ¢ÅX" “à]< L¿jg–°h²ÈÊa=mƒ0Mìžx½“Ï`᫚@°aŸ±~¯C°ù† P„¢žGeLV²VÓ—N#¾t ½—ž@|ê(â—ž€ž.æºÀâbØJ.êníÑ6ÖØ€ph S!œ`(O"¦´JÙègIDÄta·,Z!‚åbœÆÁæ]€L®½wýê1|Àùea:_Ù¡Wn¹››Õ+¶©0qXË8÷ À]a`h‘ªD" @›2Ê™¾LM‡¾ü·èÒßfß§†×Al€Z»ª= Ù5º){c¸ã–œÁTîã‹Ï<ž¿’¿üD²ýÔQðÜ4z/~Åbx_åU`±0šÒ–`AxØ-h)¬Ù9ŒÁuà ;űÈÅst·P‚ÝØÝ'Â^œ=ç¬H&ö*;9¥Ì]³ýÇ…îøÛÚ¸Ào77•”îxT:ª«Äb;}p=aÛÆù#À•W3@¤6¥`‹sÇ¿` 1nËò˜§_yáâ ç€cO7 »xz»s® E8±ÃjlëmÙ¶Øf5Àè÷n³B£^Œl1¶uP8ŽEƱ-J)gÄ>l¾ø+“k\äÌ]¨X`<Ä݆DRZ©À¤Z×9à«qÖ±OÏs«¢\– ën l¼huÄ´æ"sŠÆÅ% zËugŸ«äØî'­aZ´¼ÊÀûß/ýgÚ7³$öô¶v¬ÑФ€Ñ À–ý £S+ºkÆfI[‹Åq¾ÍÝ—¶sû»)+y;2·3(µnÞU¸ôaäÃ×ã¬6õ±×§½ç 6RÔ]d•õ1õYŸOÍ ùÜ'lº˜~•qñE ž-¢8ͽó1;õ¹n\Ø*¥+USé_Õ<û÷t9]|Ÿüø †Æ€áu¦A4sÂniN`§g+k›Á,vÓ~#"Ë÷s÷ÇÂGéèuƒX!ÚuÝ“/@u÷(îð©2c¢‘Ÿîðút^‰YÕ%žÞ#ÚÏžìiC C€+¯2¦Oóí‹Ï1 c=µÔá4gã!+Ãyh:_ÕU©^‡<©¬ª¬5 ƒãd‰Ù„åÝøiZj—„ó¬Xó˜$Í@9'ýbֻߛp0i„×þºØÑicwh¸²çp­±Ê ô¸²æ7¾ùÁrnX ¾î4ãòI`öœè—"J õ¯îP@‡­¹îÏVÕ³ºz€¹í.J4ˆ€Î0<-*´}ÈßÇ6 qš¾å°žÙGB§#©Óq‰Å 0ØHlvÞh»ÔLúÚh€;t–7ËÄ,·NÉU-46¤Üª-” :ÅÓÑaí>@_Ϙ=ÌœfÏ;¿v •5BµÎБ?»¢¿ž¯?ˆ¬õµtVOw ´Á1 êPA {ÿa;J‡’Ø ‹M­Eb¤®fa•ÂŒºqŬ”LmäqA¤A훯‡>ù¢UêFÿ¯]Øý¾€W–ð§z+T^b_Y«Á!WÔ³²¤Ü¦ƒ€Áõ€î2f'¹KÀìd±)#{º&D£Ó¥Û¨Âð€ÍzDyÁ˜½§gc ÷•᪮k5W8'O:ƒEL¶•òŽàé¢.²YÊ@gm×@4@ˆ:ö¾ùËŒÞBÀîL¢vgœ¦ÜuÌæl ÛIrB%ÖfØNž#`–ñT®2ý‘]VµE©e<@Û(áìó€*Dpìì#ΣdfQÞɉLt¢÷Ê‹ÅnT†[¸Å3M@çOT"áŸRB|¦‰˜Ún–F^dGW §€²Ü®h­WìOÃmC„Ö_÷ÝÎÇ•}&€Ö yç<ÈÏJXKVÆ€RWÔq‘Ý”±f óQë{$ÌG¡ò³˜ £‘ÙGVÈÙ8×ëRQ<ÿ•G¡ggŠR@DØZæ« KÍ­Ç-pkcñâÞÝ®î䬓Gé&x”ñ:Е¸4| ’½áqH^ÿ›ûŸ´LF(³Hµh°»ôH 7 ’ëxBÄêD§#e ¶•¶§ÖãÀX³ˆ³"Ï$&8Ñ {Mõ9Žó}½3'0ý?ÿ Tèµ’Mƒ¦| «Mk*tÚb›­,`hQ¼^6ìOêlTÔÙØq™4R][U”±ˆÓú¢Täé\ ÃrQPˆÊpÛ¹L—úítš!¢2‹3a5“œºN”3z݈Q ì¸,ÉΔõâÜÑL¤¡g¦1ÿÕÏbîËŸ†ž›-:·ÍõžH¯Šéªr©68âÕ‰ZÙ ]¥~2ÇU@  ÔçlÕ@Ó j(ÊD\;•¯ xì1^JÚk§ÜhË@ Ç&b6@JˆPÄfõKBÌ2bðÌðÜ 8îA_:¦ñé—zç^ÏÏU†7S–Y ü»ûqàÇ?‡Szýêtvk~í4¨©Y&kJQ⎠uríÕ^ÿ‚Aá‡.®3ªu>F5srIw'ÖÕ *”Ì5lȨl|f€C3\¦ë±²§:f’x"÷ºàî<ô¥sIîßÔpwÁ¯4ñÓ¦‰ãÀºÉë ƒXkDìå~R›ÒÆJÞÔ%÷D’ uQMb@“6^%zM)3ÕérUb¸”:Ÿ·qw €¸Æ‚å u gB1ñ°ÇF›Ï:êÞB’9={ÅëðfŸ¡S—ž'!N(Z¦²o°D×çæ3Z&ãdJ~b]ÀßË~ì*z¾»ÂIÚ$Ǩ`Ït¼2gp¥Ê ­Z®Ðñ b· PeLéÞeŒV!šý¢•Knëy0æmÉRâ~â†þ¯VœHä`@'Î÷UÀ¼„¤J"Ïbêöú1$¨`<”˜ù–‹Ã ¬—é)T¢/VŠP4[–«bK®8¦’é|1XTŽ«uV®Ðù|lÅ Å9 ”iR =,ëc¼QGG”ṈÃV |Êepƒé¾Œ“ Žª\%䦬æcHxt@]¢“9€ðÅI :W•%\’±Rç,FENbÇ$µ ˜BÃV07Œ6ñònçöø„Ï`O|̯k:¢M˜Ç/ÅN¡NA= ’P<"®B¬–± sÑY]Êt¾×¨×ÛlñÉåìá^©3*PÂhݪc²Š[:êšg¥¶n¦‡­Ø# -cDäÞ²}å¾$*Þ ìçNvů“U"³ƒ :¯•‰êã¹`ír­/®ñÊÆ`‹7 ¬”©"®ŽM¯8ÐÚF+ °†ÌzG$0‰ß1ÝÅ‘Xãòù9œôýÂP ±6ð/ýsùÙ¦BŽKÿÞCYvn@qµ‚_ TÍ¥"´0¹†ÊBYòµâœ…2E\ç:U¤¯A@9Àrggql.ÆÌ…9œ9wgfz˜úê9|3"ô>ô7xÀ€9ó¼€´;·cH4ÿ{RŸRB´"±úÜ\–ªTÒN_&I–YVÑN:¶R׈<]‘ŠTåö¨©¾¤Ìp6p2¤CŠÀF*‹Ñ«šã²Qh¶Ą́—/ã¼<…ãÓ1;µ€™ÇNã8ø£Oà9¬MÛ\ö̲€$5=FVÇ…| +Í0)œ(²+¢¬"TrQÙ“œéQ® W‹©€u¬§kt2Ýöl% jb6àÉü¨X¯ë,=xA?†DÑ<×ùÌÏ4® °±ZI¤ÙÑbµZÅxUÑXƒýV: “[ 0€BH]I‚+ÞR¦j Êù) à©38Jõ,NLÎaæ‰3˜|ô8&«„¾V¼X\!—Ѻ5¬'sª2Щ*5ZOà¦ýìakyýgÚ°*÷…y–iRÎTí*‡²ë¬^N_Uz¬MS97Ê¥9L^˜Ãäl³/œÆ œ?z,Ñ©ž<ƒÉGyµÆBŸëU Ó% ‹=ÏZÜv M˜.ù1;ñª:è+å!¡&늀V`€`™;¡M%Dï}©nÝò¸ 6JA]¦rn’Ks˜¼0‹ÉÙ.f_8—0Õ£/á9øÄQœxþ"f †~Y Í„¶û@§=º]ìaºôÖìà°\ûÉ·¿0‰£7>œz4^Q¥hEPæ¹¥ŒNE@DŽŠÊ[ ±—‚&¨`*çRœžÆ‰Ù.f'g0yê,&/ÏaæË¯àþ•/áh­pµXªŽ¹ú=V{ ŠØcXÄ5¬ñÒˆCŸÇØýÂg^Æ«ß}?°í-Àåg€¹—ó½°ZÉ'µÂdôC!+Ú÷ÓW(“±QÛØN‡©H¼t>™úrî &OŸÂäåyÌ|ùd¢ˆÿÊÑ·*^" ô˜K/‚é$5ÄÎëØ¹=û$•¬1 ?ʠٙ˔.~6ùõ@õ³î²œ.ù›r¬Ô¨ÿÔ½tGÁÀËçqbz3Ç.bò›ç0yf3{rIú}¨¹ðMÁ — >õÀÊž«ïc>w[ºÌ‡M©ujGF:؇Ð\äŲÕ?æ+…> Ä2×ÅÌ©K8‰øÆ+‰x;~“GÏ`òì4f>öx"úúÏRÅßb˜ K{Ë!fû}_\âJ)š5×RŠW]&^p·'ì×7o ¡âž‚¦c¤{ (e@æÔEœDøÆÉ„©¾vÇÏMcöÉã8÷™#Ëjá-ź[- ˜n1ßÝïï×5ÏqÉ>íUª¼>~_™Æmè¦`Ïá2G9ÀJ…µ#*/]Áä…iœŸ™6.}GÀÀ“Ç0ù™gq®¡èZ,ÐúÑ«–›1šêdUÛûÛ›üï&çM708\ÐŮˤ'àÁ.Mž»$úR¬7¬•j€ÎÇ_žÁ¹‹S˜œ™Ãìó§p‚øô×%ýáøó§1Ó‡e§û•Æòø¤úÑ‹°öXŒŽWbTœ·ºóÝÏ6]rÔE2¼‰²7Å/ŸÁI¸<ƒoÎÍãÊ…)œ=}“§0÷wÏá¸ÖP¿ôßpöt*ô¥5]׫$Úê.úJýö¦Ÿµ«ºßç~,Ý‚ö•4Ü•rXdlÄȱf#ç¸P„:”á@'C¯K5µ—ÃéºÔõŸcúM?`k@í±P{õÑblìHÜõ%;°Ç;SybÐ’”Ü~-À~€²ÊùR# ‹q,/(MßÓ䵋™Ú04JÞè†:R0ž/•A]êtË%â–ªØ/U9ï÷X¬€Èk :4›»®+tȾrP¼žG$»Þhå]Ѫ² ¬¥*ç‹u—©_ -¨êö•§*bI 7î—h¬ØÃ^2"Ï#vG5c1L¶Ü¢o)>¾•sKy‹—`a١Ǩ`|±‡½¤ï¥Žå°HÂr92ËRX&ëHý°Ôr€®ŽÝVìá2d¹ª^™ZMt9`éNØ~¬¾•°öê\?ý²/#`ªÆ6y¬f²}©!!ÁW€®Lü6]¿qÌ& [ ¨–ªG]K,…%€oÕªf« ßÉÑ%"UNÞ¡>× a¹¬¾&þª¦bo¥Xh¹uÍ®Œé\«‘<Ö¦ª`8êƒ1–ËÁ¹:ÕrY|M."_e@\­^€ÿNîmsJ Á›IEND®B`‚rivet-1.8.3/doc/readplot.py0000644000175000017500000000527312116077755014023 0ustar sunsun#! /usr/bin/env python ## TODO: Why don't these tests work within 'make'? ## Make "set" a builtin type on Python < 2.4 try: tmp = set() del tmp except: from sets import Set as set ## Make "sorted" a builtin function on Python < 2.4 if 'sorted' not in dir(__builtins__): def sorted(iterable, cmp=None, key=None, reverse=None): rtn = iterable rtn.sort(cmp)#, key, reverse) return rtn ## Get input paths to allow rivet module to be imported from the src dir import os, re, glob, sys pybuild = os.path.abspath(os.path.join(os.getcwd(), "..", "pyext", "build")) dirs = [] for d in os.listdir(pybuild): if re.match(r"lib\..*-.*-%d\.%d" % (sys.version_info[0], sys.version_info[1]), d): dirs.append(os.path.join(pybuild, d)) sys.path = dirs + sys.path os.environ["LD_LIBRARY_PATH"] = os.environ["LD_LIBRARY_PATH"] + ":" + \ os.path.abspath(os.path.join(os.getcwd(), "..", "src", ".libs")) anadirs = glob.glob(os.path.join(os.getcwd(), "..", "src", "Analyses", "*", ".libs")) #print anadirs os.environ["RIVET_ANALYSIS_PATH"] = ":".join(anadirs) ## Change dlopen status to GLOBAL for Rivet lib try: import ctypes sys.setdlopenflags(sys.getdlopenflags() | ctypes.RTLD_GLOBAL) except: import dl sys.setdlopenflags(sys.getdlopenflags() | dl.RTLD_GLOBAL) import rivet # all_analyses = rivet.AnalysisLoader.analysisNames() # for a in #plotinfos = glob.glob(os.path.join(os.getcwd(), "..", "data", "plotinfo", "*")) ## Get list of plots for each analysis def plotinfo(aname): finfo = None rtn = {} try: import yaml, glob files = glob.glob(os.path.join(os.getcwd(), "..", "data", "plotinfo", aname+"*")) plotinfofile = files[0] finfo = open(plotinfofile, "r") except: return rtn import re pat_begin_block = re.compile('^# BEGIN ([A-Z0-9_]+) ?(\S+)?') pat_end_block = re.compile('^#+ END ([A-Z0-9_]+)') pat_comment = re.compile('^#|^\s*$') pat_property = re.compile('^(\w+?)=(.*)$') pat_path_property = re.compile('^(\S+?)::(\w+?)=(.*)$') current_histo = None for line in finfo: mbegin = pat_begin_block.match(line) if mbegin: current_histo = mbegin.group(2) rtn.setdefault(current_histo, dict()) continue mend = pat_end_block.match(line) if mend: current_histo = None continue if pat_comment.match(line): continue mprop = pat_property.match(line) if mprop and mprop.group(1) == "Title": rtn[current_histo]["TITLE"] = mprop.group(2) finfo.close() return rtn if __name__ == "__main__": for i in sys.argv[1:]: print plotinfo(i) rivet-1.8.3/doc/rivetversion.sty.in0000644000175000017500000000012712116077755015535 0ustar sunsun\RequirePackage{xspace} \DeclareRobustCommand{\RivetVersion}{@PACKAGE_VERSION@\xspace} rivet-1.8.3/doc/compare-histos.html0000644000175000017500000004260412116416770015453 0ustar sunsun compare-histos

About

compare-histos is a small script which reads two or more AIDA XML files and creates comparison plots of the histograms in the AIDA files. The plots are saved in .dat files in the input format of make_plot.py. To create PostScript or PDF file from the .dat files, you need to run make-plots.

Usage

To run compare-histos call

 compare-histos [options] [REF:'Expt data'] aidafile1:'label 1' [path/to/aidafile2:label2 ...]

All available options can be listed by running

 compare-histos --help

rivet-1.8.3/doc/hepparticles.sty0000644000175000017500000004136312116077755015063 0ustar sunsun%% hepparticles --- flexible elementary particle symbols %% Author: Andy Buckley %% %% This material is subject to the LaTeX Project Public License. %% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html %% for the details of that license. %% %% %% The macros provided are: %% %% For generic particle names e.g. all positively charged leptons: %% \HepGenParticle{main}{subscript}{superscript} %% \HepGenAntiParticle{main}{subscript}{superscript} %% %% For concrete particle names: %% \HepParticle{main}{subscript}{superscript} %% \HepAntiParticle{main}{subscript}{superscript} %% %% For supersymmetric "sparticles": %% \HepSusyParticle{main}{subscript}{superscript} %% \HepGenSusyParticle{main}{subscript}{superscript} %% \HepSusyAntiParticle{main}{subscript}{superscript} %% \HepGenSusyAntiParticle{main}{subscript}{superscript} %% %% For resonance specifiers (just the extra terms): %% \HepResonanceMassTerm{mainTermInParenths}{subscript}{superscript} %% \HepResonanceSpecTerm{mainSpecTerm}{subscript}{superscript} %% %% For the total particle name and resonance specifications: the %% ``formal'' definitions include the spectroscopic term and the %% ``full'' versions pf each require the main particle name to be %% explicitly specified rather than just pass a \HepParticle as the first arg: %% \HepParticleResonance{name}{mass}{massSub}{massSup} %% \HepParticleResonanceFormal{name}{mass}{massSub}\ %% {massSup}{spec}{specSub}{specSup} %% \HepParticleResonanceFull{name}{sub}{sup}{mass}{massSub}{massSup} %% \HepParticleResonanceFormalFull{name}{sub}{sup}\ %% {mass}{massSub}{massSup}\ %% {spec}{specSub}{specSup} %% %% And finally, for containing processes describing the evolution %% of these particles: %% \HepProcess{iParticles \to fParticles} %% where \to is re-defined to have a bit of extra space. %% %% There are probably some missing cases but they can be handled %% as explicit exceptions. You might also be interested in the %% ``heppennames'' package, which updates the "pennames" set of %% typeset concrete particle names to use this more flexible scheme. %% Admin \def\fileversion{1.6} \def\filedate{2005/03/01} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{hepparticles}[\filedate\space HEP particle typesetting (v\fileversion)] %% Package options \def\@italicNames{}% \def\@forceItalic{}% \def\@maybeSansSerif{yes}% default is ON \def\@emptyOption{}% \def\@empty{}% %% Make particle symbols behave as for generic math mode \DeclareOption{italic}{% \def\@italicNames{yes}% } %% Force particle symbols to behave as for italic math mode \DeclareOption{itforce}{% \def\@italicNames{yes}% \def\@forceItalic{yes}% } %% Force upright particle names (default) \DeclareOption{notitalic}{% \def\@italicNames{}% \def\@forceItalic{}% } %% Allow particle names to be sans-serif in context (no italics, even for generic particles) \DeclareOption{maybess}{% \def\@maybeSansSerif{yes}% } \DeclareOption{noss}{% \def\@maybeSansSerif{}% } \ProcessOptions \RequirePackage{maybemath}[2005/2/22] %\RequirePackage{pxfonts} %\RequirePackage{xspace} %% An italicised overline from Philip Ratcliffe %\DeclareRobustCommand{\anti}{\@anti} %\DeclareRobustCommand{\@anti}[1]{\mathpalette{\@@anti}{#1}#1} %\DeclareRobustCommand{\@@anti}[2]{% % \sbox[0]{$#1#2$}% % \makebox[0pt][l]{$#1\kern0.3\ht0\overline{\kern-0.4\ht0\phantom{#2}}$}% %} %% ----------------------------------------------------------------------- %% Styling commands (exported) %% ----------------------------------------------------------------------- %% Undecorated particle style (boldness and sans-serif handling) \DeclareRobustCommand{\HepNormStyle}[1]{% \ifx\@maybeSansSerif\@emptyOption% {\ensuremath{\maybebm{#1}}}% %{\ensuremath{#1}}% lots of problems with the bold math nesting... cocks up in italic mode \else% {\ensuremath{\maybebm{\maybesf{#1}}}}% \fi% } %% Generic particle style (normal style with optional forced italics) \DeclareRobustCommand{\HepGenStyle}[1]{% \ifx\@forceItalic\@emptyOption% {\HepNormStyle{#1}}% \else% {\HepNormStyle{\mathit{#1}}}% \fi% } %% Concrete particle style (normal style with upright and forced italic handling) %% HepNormStyle can't be used in the first portion as it's important that sf be the %% innermost operator and that bm is the outermost so the rm must be sandwiched. %% The choice has been made to have forced-italics override the sf option, as you %% presumably have no sense of style if you use forced-it anyway :P \DeclareRobustCommand{\HepConStyle}[1]{% \ifx\@forceItalic\@emptyOption% \ifx\@maybeSansSerif\@emptyOption% {\ensuremath{\maybebm{\mayberm{#1}}}}% \else% {\ensuremath{\maybebm{\mayberm{\maybesf{#1}}}}}% \fi% \else% {\HepNormStyle{\maybeitrm{#1}}}% \fi% } %\setcounter{errorcontextlines}{10} %% ----------------------------------------------------------------------- %% Internal commands %% ----------------------------------------------------------------------- %% Spacer used for filling in superscripts to stabilise placement \DeclareRobustCommand{\@dummysuper}{{\vphantom{\ast}}} %\DeclareRobustCommand{\@dummysuper}{\ast} %% Internal command for typesetting conditionally-bold terms with optional %% following sub- and super-scripts. Used by most other commands \DeclareRobustCommand{\@HepMainSubSupTerm}[3]{% {\def\myargtwo{#2}}% {\def\myargthree{#3}}% \ensuremath{% \ifx\myargtwo\@empty% \ifx\myargthree\@empty% {#1}% \else% {{#1}^{#3}}% \fi% \else% \ifx\myargthree\@empty% {{#1}_{#2}}% \else% {{#1}_{#2}^{#3}}% \fi% \fi% \mspace{-0.6mu}% I don't know why, but a 0.6mu space was arising compared to pure text names }% } \DeclareRobustCommand{\@HepGenericSubSupTerm}[3]{% {\def\myargtwo{#2}}% \ifx\myargtwo\@empty% {\HepGenStyle{\@HepMainSubSupTerm{#1}{}{#3}}}% \else% {\HepGenStyle{\@HepMainSubSupTerm{#1}{\mspace{-2mu}{#2}}{#3}}}% \fi% } \DeclareMathAlphabet{\upright}{OML}{cmmu}{m}{r} \DeclareRobustCommand{\@HepConcreteSubSupTerm}[3]{% {\def\myargtwo{#2}}% % %% Re-define lowercase Greek characters to be upright (using txfonts) %% \begingroup% %% \let\@Oldalpha\alpha% %% \let\@Oldbeta\beta% %% \let\@Oldgamma\gamma% %% \let\@Olddelta\delta% %% \let\@Oldepsilon\epsilon% %% \let\@Oldvarepsilon\varepsilon% %% \let\@Oldzeta\zeta% %% \let\@Oldeta\eta% %% \let\@Oldtheta\theta% %% \let\@Oldvartheta\vartheta% %% \let\@Oldiota\iota% %% \let\@Oldkappa\kappa% %% \let\@Oldlambda\lambda% %% \let\@Oldmu\mu% %% \let\@Oldnu\nu% %% \let\@Oldxi\xi% %% \let\@Oldpi\pi% %% \let\@Oldvarpi\varpi% %% \let\@Oldrho\rho% %% \let\@Oldvarrho\varrho% %% \let\@Oldsigma\sigma% %% \let\@Oldvarsigma\varsigma% %% \let\@Oldtau\tau% %% \let\@Oldupsilon\upsilon% %% \let\@Oldphi\phi% %% \let\@Oldvarphi\varphi% %% \let\@Oldchi\chi% %% \let\@Oldpsi\psi% %% \let\@Oldomega\omega% %% \renewcommand{\alpha}{\alphaup}% %% \renewcommand{\beta}{\betaup}% %% \renewcommand{\gamma}{\gammaup}% %% \renewcommand{\delta}{\deltaup}% %% \renewcommand{\epsilon}{\epsilonup}% %% \renewcommand{\varepsilon}{\varepsilonup}% %% \renewcommand{\zeta}{\zetaup}% %% \renewcommand{\eta}{\etaup}% %% \renewcommand{\theta}{\thetaup}% %% \renewcommand{\vartheta}{\varthetaup}% %% \renewcommand{\iota}{\iotaup}% %% \renewcommand{\kappa}{\kappaup}% %% \renewcommand{\lambda}{\lambdaup}% %% \renewcommand{\mu}{\muup}% %% \renewcommand{\nu}{\nuup}% %% \renewcommand{\xi}{\xiup}% %% \renewcommand{\pi}{\piup}% %% \renewcommand{\varpi}{\varpiup}% %% \renewcommand{\rho}{\rhoup}% %% \renewcommand{\varrho}{\varrhoup}% %% \renewcommand{\sigma}{\sigmaup}% %% \renewcommand{\varsigma}{\varsigmaup}% %% \renewcommand{\tau}{\tauup}% %% \renewcommand{\upsilon}{\upsilonup}% %% \renewcommand{\phi}{\phiup}% %% \renewcommand{\varphi}{\varphiup}% %% \renewcommand{\chi}{\chiup}% %% \renewcommand{\psi}{\psiup}% %% \renewcommand{\omega}{\omegaup}% % \ifx\myargtwo\@empty% %{\HepConStyle{\@HepMainSubSupTerm{#1}{}{#3}}}% {\HepConStyle{\@HepMainSubSupTerm{\upright{#1}}{}{#3}}}% \else% {\HepConStyle{\@HepMainSubSupTerm{#1}{\maybeitsubscript{#2}}{#3}}}% \fi% % %% Restore the normal behaviour of lowercase Greek characters %% \renewcommand{\alpha}{\@Oldalpha}% %% \renewcommand{\beta}{\@Oldbeta}% %% \renewcommand{\gamma}{\@Oldgamma}% %% \renewcommand{\delta}{\@Olddelta}% %% \renewcommand{\epsilon}{\@Oldepsilon}% %% \renewcommand{\varepsilon}{\@Oldvarepsilon}% %% \renewcommand{\zeta}{\@Oldzeta}% %% \renewcommand{\eta}{\@Oldeta}% %% \renewcommand{\theta}{\@Oldtheta}% %% \renewcommand{\vartheta}{\@Oldvartheta}% %% \renewcommand{\iota}{\@Oldiota}% %% \renewcommand{\kappa}{\@Oldkappa}% %% \renewcommand{\lambda}{\@Oldlambda}% %% \renewcommand{\mu}{\@Oldmu}% %% \renewcommand{\nu}{\@Oldnu}% %% \renewcommand{\xi}{\@Oldxi}% %% \renewcommand{\pi}{\@Oldpi}% %% \renewcommand{\varpi}{\@Oldvarpi}% %% \renewcommand{\rho}{\@Oldrho}% %% \renewcommand{\varrho}{\@Oldvarrho}% %% \renewcommand{\sigma}{\@Oldsigma}% %% \renewcommand{\varsigma}{\@Oldvarsigma}% %% \renewcommand{\tau}{\@Oldtau}% %% \renewcommand{\upsilon}{\@Oldupsilon}% %% \renewcommand{\phi}{\@Oldphi}% %% \renewcommand{\varphi}{\@Oldvarphi}% %% \renewcommand{\chi}{\@Oldchi}% %% \renewcommand{\psi}{\@Oldpsi}% %% \renewcommand{\omega}{\@Oldomega}% %% \endgroup% } %% Internal command for shifting sub- and super-scripts vertically to counter the effects of overlines etc. \DeclareRobustCommand{\@VerticalScriptShift}[2]{% {\raisebox{#1}{\HepNormStyle{\scriptstyle{#2}}}}% } %% Generic version of the above \DeclareRobustCommand{\@GenericVerticalScriptShift}[2]{% {\@VerticalScriptShift{#1}{\HepGenStyle{#2}}}% } %% Concrete version of the above \DeclareRobustCommand{\@ConcreteVerticalScriptShift}[2]{% {\@VerticalScriptShift{#1}{\HepConStyle{#2}}}% } %% ----------------------------------------------------------------------- %% Exported (public) commands %% ----------------------------------------------------------------------- %% Alias for the internal particle (main-sub-sup) structure \DeclareRobustCommand{\HepParticleStruct}[3]{\@HepMainSubSupTerm{#1}{#2}{#3}} %% For generic particles like "lepton", "quark" etc (no upright font) \DeclareRobustCommand{\HepGenParticle}[3]{% {\def\myargthree{#3}}% \ifx\myargthree\@empty% {\@HepGenericSubSupTerm{#1}{#2}{\@dummysuper}}% unmatched subscripts are very unstable \else% {\@HepGenericSubSupTerm{#1}{#2}{#3}}% \fi% } %% For concrete HEP particle names like "B", "J/psi" etc \DeclareRobustCommand{\HepParticle}[3]{% \ifx\@italicNames\@emptyOption% {\def\myargthree{#3}}% \ifx\myargthree\@empty% {\@HepConcreteSubSupTerm{#1}{#2}{\@dummysuper}}% unmatched subscripts are very unstable \else% {\@HepConcreteSubSupTerm{#1}{#2}{#3}}% \fi% \else% {\HepGenParticle{#1}{#2}{#3}}% \fi% } %% For generic antiparticles \DeclareRobustCommand{\HepGenAntiParticle}[3]{% {\def\myargtwo{#2}}% {\def\myargthree{#3}}% \ifx\myargtwo\@empty% \HepGenParticle% {\overline{#1}}% {}% {\mspace{1mu}\@GenericVerticalScriptShift{-0.6ex}{#3}}% \else% \ifx\myargthree\@empty% {\HepGenParticle% {\overline{#1}}% {\mspace{0mu}{#2}}% {\mspace{1mu}\@GenericVerticalScriptShift{-0.55ex}{\@dummysuper}}}% \else% {\HepGenParticle% {\overline{#1}}% {\mspace{1mu}{#2}}% {\mspace{1mu}\@GenericVerticalScriptShift{-0.55ex}{#3}}}% \fi% \fi% } %% For antiparticles \DeclareRobustCommand{\HepAntiParticle}[3]{% \ifx\@italicNames\@emptyOption% {\def\myargtwo{#2}}% {\def\myargthree{#2}}% \ifx\myargtwo\@empty% {\HepParticle% {\overline{#1}}% {}% {\mspace{1mu}\@ConcreteVerticalScriptShift{-0.6ex}{#3}}}% \else% \ifx\myargthree\@empty% {\HepParticle% {\overline{#1}}% {\mspace{1mu}#2}% {\mspace{1mu}\@ConcreteVerticalScriptShift{-0.55ex}{\@dummysuper}}}% \else% {\HepParticle% {\overline{#1}}% {\mspace{1mu}#2}% {\mspace{1mu}\@ConcreteVerticalScriptShift{-0.55ex}{#3}}}% \fi% \fi% \else% {\HepGenAntiParticle{#1}{#2}{#3}}% \fi% } %% For generic SUSY particles e.g. slepton, squark \DeclareRobustCommand{\HepGenSusyParticle}[3]{% {\def\myargtwo{#2}}% {\def\myargthree{#3}}% \ifx\myargtwo\@empty% {\HepGenParticle% {\widetilde{#1}}% {}% {\mspace{1mu}{#3}}}% \else% \ifx\myargthree\@empty% {\HepGenParticle% {\widetilde{#1}}% {\mspace{0mu}\@GenericVerticalScriptShift{0.0ex}{#2}}% {}}% \else% {\HepGenParticle% {\widetilde{#1}}% {\mspace{0mu}#2}% {\mspace{1mu}\@GenericVerticalScriptShift{-0.02ex}{#3}}}% \fi% \fi% } %% For SUSY particles \DeclareRobustCommand{\HepSusyParticle}[3]{% \ifx\@italicNames\@emptyOption% {\def\myargtwo{#2}}% {\def\myargthree{#3}}% \ifx\myargtwo\@empty% {\HepParticle% {\widetilde{#1}}% {}% {\mspace{1mu}{#3}}}% \else% \ifx\myargthree\@empty% {\HepParticle% {\widetilde{#1}}% {\mspace{1mu}{#2}}% {\mspace{1mu}{\@dummysuper}}}% \else% {\HepParticle% {\widetilde{#1}}% {\mspace{1mu}{#2}}% {\mspace{1mu}{#3}}}% \fi% \fi% \else% {\HepGenSusyParticle{#1}{#2}{#3}}% \fi% } %% For generic SUSY anti-particles e.g. slepton, squark \DeclareRobustCommand{\HepGenSusyAntiParticle}[3]{% {\HepGenParticle% {\overline{\widetilde{#1}}}% {\mspace{0mu}{#2}}% {\mspace{1mu}\@GenericVerticalScriptShift{-1.25ex}{#3}}}% } %% For SUSY anti-particles \DeclareRobustCommand{\HepSusyAntiParticle}[3]{% \ifx\@italicNames\@emptyOption% {\HepParticle% {\overline{\widetilde{#1}}}% {\mspace{0mu}{#2}}% {\mspace{1mu}\@ConcreteVerticalScriptShift{-1.25ex}{#3}}}% \else% {\HepGenSusyAntiParticle{#1}{#2}{#3}}% \fi% } %% Resonances and other such structures. These are actually pretty %% complicated since the most general structure has a main particle %% term, a mass term and a spectroscopic term: in total 9 possible arguments %% if we let each main term have optional following sub- and super-scripts! %% The mass and spectroscopic terms seem to be mixed up quite often... *sigh* %% %% Apologies for the interface changing yet again as I learn how general %% these terms can be! Hopefully stable now (touch wood)... %% For resonance mass specifications like the bracket in "J/psi(1S)" \DeclareRobustCommand{\HepResonanceMassTerm}[3]{% \ifx\@italicNames\@emptyOption% \@HepConcreteSubSupTerm{\left({#1}\right)}{#2}{#3}% \else% \@HepGenericSubSupTerm{\left({#1}\right)}{#2}{#3}% \fi% } %% For resonance spectroscopic specifications like the P_11 in "N(1440)P_11" \DeclareRobustCommand{\HepResonanceSpecTerm}[3]{% \ifx\@italicNames\@emptyOption% \@HepConcreteSubSupTerm{#1}{#2}{#3}% \else% \@HepGenericSubSupTerm{#1}{#2}{#3}% \fi% } %% For resonances like "J/psi(1S)" (first arg is a whole \HepParticle) \DeclareRobustCommand{\HepParticleResonance}[4]{% \ensuremath{% {#1}{\HepResonanceMassTerm{#2}{#3}{#4}}% }% } %% For resonances like "N(1440)P_11" (first arg is a whole \HepParticle) \DeclareRobustCommand{\HepParticleResonanceFormal}[7]{% \ensuremath{% {\HepParticleResonance{#1}{#2}{#3}{#4}}\,{\HepResonanceSpecTerm{#5}{#6}{#7}}% }% } %% For resonances like "J/psi(1S)" (all arguments ``spelt out'') \DeclareRobustCommand{\HepParticleResonanceFull}[6]{% \HepParticleResonance{\HepParticle{#1}{#2}{#3}}{#4}{#5}{#6}% } %% For resonances like "N(1440)P_11" (all arguments ``spelt out'') \DeclareRobustCommand{\HepParticleResonanceFormalFull}[9]{% \HepParticleResonanceFormal{\HepParticle{#1}{#2}{#3}}{#4}{#5}{#6}{#7}{#8}{#9}% } %% For typesetting HEP processes with these particle names. %% Help on how to widen the math spacing would be nice: I always %% find myself putting \, between particle names to make it look good. \let\@HepOldto\to \DeclareRobustCommand{\HepTo}{\ensuremath{\to}}% \DeclareRobustCommand{\HepProcess}[1]{% \ifx\pdfoutput\undefined% \begingroup% \renewcommand{\to}{\mspace{2mu}\@HepOldto\mspace{2mu}}% %this defn makes PDFTeX do bad things \ensuremath{#1}% \renewcommand{\to}{\@HepOldto}% \endgroup% \else% \ensuremath{#1}% \fi% } %% Remove mspace from hyperref labels in PDFTeX %% Thanks to Heiko Oberdiek and Donald Arseneau for %% providing this solution via comp.text.tex \@ifpackageloaded{hyperref}{ \pdfstringdefDisableCommands{% \DeclareRobustCommand{\HepProcess}[1]{#1} \let\mspace\@gobble \def\to{to } \def\HepTo{to } }% }{} %% For reference purposes :-) %\DeclareRobustCommand{\hepparticles}{\texttt{hepparticles}\xspace} rivet-1.8.3/doc/hepnames.sty0000644000175000017500000000272512116077755014177 0ustar sunsun%% hepnames.sty --- standard predefined high energy particle names %% %% This package is a wrapper to the hepnicenames and heppennames packages, %% primarily because the pair of packages as a whole are called hepnames %% and it's less of a mouthful. Plus, I imagine that anyone who's interested %% in using this package will prefer the ``nicenames'' scheme over PEN, %% historical precendent notwithstanding! %% %% Author: Andy Buckley %% %% This material is subject to the LaTeX Project Public License. %% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html %% for the details of that license. %% %% ------------------------------------------------------------- \def\fileversion{1.5} \def\filedate{2009/03/11} \ProvidesPackage{hepnames}[\filedate\space Pre-defined HEP particle symbols (version \fileversion)] \NeedsTeXFormat{LaTeX2e} \RequirePackage{hepnicenames} \RequirePackage{heppennames} %% Declare package options: map directly on to options in hepnicenames \DeclareOption{italic}{% \PassOptionsToPackage{italic}{hepnicenames}% } \DeclareOption{itforce}{% \PassOptionsToPackage{itforce}{hepnicenames}% } \DeclareOption{maybess}{% \PassOptionsToPackage{maybess}{hepnicenames}% } \DeclareOption{noss}{% \PassOptionsToPackage{noss}{hepnicenames}% } %% Process package options \ProcessOptions %% For referencing this package \DeclareRobustCommand{\hepnames}{\texttt{hepnames}\xspace} %% Just for completeness... \endinput rivet-1.8.3/doc/make-plots.txt0000644000175000017500000004730612123033122014431 0ustar sunsunmake-plots ============ About ----- `make-plots` reads histogram files in a simple text format and converts them into PostScript or PDF files. This is done by creating a LaTeX file and running `latex`, `dvips`, and maybe `ps2pdf`. Usage ----- To run `make-plots` call -------------------- make-plots [options] file.dat [file2.dat ...] -------------------- All available options can be listed by running -------------------- make-plots --help -------------------- Configuration files ~~~~~~~~~~~~~~~~~~~ `make-plots` typically takes the plotting instructions and settings from the input ascii files as described in the "Input Format" chapter. It is also possible though to pass a global configuration file to `make-plots` (cf. `--help`) which allows to specify/overwrite settings for certain plots or histograms in a plot on top of what the input files specify. This could be useful if the ascii files are generated automatically (e.g. with `rivet-mkhtml` or `compare-histos`) and you still want to apply custom plotting options. An example for this looks like: -------------------- # BEGIN PLOT figures/MC_WJETS/W_mass.dat XMin=60.0 XMax=100.0 LegendXPos=0.65 # END PLOT .*myLOrun.aida/D0_2008_S7554427/d01-x01-y01::Scale=1.0 -------------------- Here first the options in the `PLOT` section of a specific ascii file are being amended/overwritten. The second part shows how to overwrite the `Scale` property of one specific histogram line using the ID of the histogram. Input Format ------------ The ascii files which can be read by `make-plots` are divided into sections. There are four types of sections which are called `PLOT`, `HISTOGRAM`, `FUNCTION`, and `SPECIAL`. Every file must contain exactly one `PLOT` section and at least one section of the other three types. There may be multiple `HISTOGRAM`, `FUNCTION`, and `SPECIAL` sections. Empty lines and lines starting with `#` are ignored, except for the section delimiters described below. PLOT ~~~~ The `PLOT` section starts with -------------------- # BEGIN PLOT -------------------- and ends with -------------------- # END PLOT -------------------- Every file must have exactly one `PLOT` section. In this section global parameters are specified, like the axis labels, the plot title, size, ... An empty `PLOT` section is perfectly legal, though. In this section the following parameters can be set: Titles, Labels ^^^^^^^^^^^^^^ -------------------- Title= -------------------- The title of the plot. -------------------- XLabel=<label> YLabel=<label> ZLabel=<label> -------------------- Axis labels for the x-, y-, and z-axis. -------------------- XLabelSep=<distance> YLabelSep=<distance> ZLabelSep=<distance> -------------------- Distance between the axis label and the plot in units of `\labelsep`. -------------------- XMajorTickMarks=<last_digit> YMajorTickMarks=<last_digit> ZMajorTickMarks=<last_digit> XMinorTickMarks=<nticks> YMinorTickMarks=<nticks> ZMinorTickMarks=<nticks> -------------------- `make-plots` tries to guess the distance between tickmarks automatically. If you are not satisfied with its result, you can override this by setting `<last_digit>` to 1, 2, 5, or 10, and `<nticks>` to the number of minor ticks you like. _Note_: These options are not available for logarithmic axes. -------------------- XTwosidedTicks=<0|1> YTwosidedTicks=<0|1> -------------------- Draw tickmarks also on the upper and/or right side of the plot. -------------------- XCustomMajorTicks=<list> YCustomMajorTicks=<list> ZCustomMajorTicks=<list> -------------------- To specify major ticks at arbitrary positions and/or with arbitrary labels. `<list>` is a tab separated list of format `value1 <tab> label1 <tab> value2 <tab> label2 ...`. -------------------- XCustomMinorTicks=<list> YCustomMinorTicks=<list> ZCustomMinorTicks=<list> -------------------- To specify minor ticks at arbitrary positions. `<list>` is a tab separated list of format `value1 <tab> value2 <tab> value3 ...`. -------------------- PlotTickLabels=<0|1> RatioPlotTickLabels=<0|1> -------------------- Disable/enable plotting of the tick labels in the plot and ratio plot (useful if multiple plots are to be combined manually later). Axes ^^^^ -------------------- LogX=<0|1> LogY=<0|1> LogZ=<0|1> -------------------- Use a logarithmic x-, y-, or z-axis. Default is linear. -------------------- XMin=<value> XMax=<value> YMin=<value> YMax=<value> ZMin=<value> ZMax=<value> FullRange=<0|1> ShowZero=<0|1> -------------------- Specify the plot range. By default the range is chosen such that all data is visible in linear plots, and the zero is visible. `ShowZero=0` suppresses plotting the zero in linear plots and thus zooms into the actual y-value range of the distribution. In logarithmic plots the automatic choice of `YMin` is limited to be not smaller than 2e-4*`YMax`, but manually you can specify any value. `FullRange=1` also overrides the 2e-4*`YMax` limit and plots the full range in y. Normalization, Rebinning ^^^^^^^^^^^^^^^^^^^^^^^^ -------------------- NormalizeToIntegral=<1|0> NormalizeToSum=<1|0> Scale=<factor> -------------------- Normalize all histograms to their integral, to their sum of entries, or scale them by some arbitrary factor. Normalization and scale options in the `PLOT` section override the corresponding option in the `HISTOGRAM` section. The scale factor is applied after normalization. -------------------- Rebin=<nbins> -------------------- Rebin all histograms in this plot. Syntax and functionality is the same as for the Rebin option in the `HISTOGRAM` section. Sizes and Margins ^^^^^^^^^^^^^^^^^ -------------------- PlotSize=<xsize,ysize> -------------------- Size in x and y direction of the plot. This can be specified in any unit LaTeX understands. -------------------- LeftMargin=<size> RightMargin=<size> TopMargin=<size> BottomMargin=<size> -------------------- Distance between the plot and the paper edge. -------------------- FrameColor=<color> -------------------- Background color for the margin around the plot. Legends ^^^^^^^ -------------------- Legend=<0|1> -------------------- Display a legend in the plot. -------------------- CustomLegend=<text> -------------------- Custom text that is added to the legend. -------------------- LegendXPos=<pos> LegendYPos=<pos> -------------------- Position of the legend within the plot. Anchor point is the top left corner of the legend, so units typically range between 0.0 and 1.0. -------------------- LegendAlign=<align> -------------------- Horizontal alignment of the legend: `LegendAlign=l` is the default and will create a left-aligned legend, while `LegendAlign=r` is right-aligned with the keys on the right hand side. -------------------- LegendOnly=<list> -------------------- Whitespace separated list of IDs. These can be histograms or functions. The legend is only shown for the listed objects. Without this option, all plotted objects which have a title enter the legend. The legend titles are plotted in the given order, so there are cases in which it makes sense to use `LegendOnly` together with all histogram IDs. It is also possible to specify the legend order on an entry-by-entry basis using the `LegendOrder=<int>` setting for each histogram or function. Plotting Options ^^^^^^^^^^^^^^^^ -------------------- DrawOnly=<list> -------------------- Whitespace separated list of histogram IDs. Only the histograms in this list are plotted, even if there are more histograms defined in the file. The histograms are plotted in the given order, so there are cases in which it makes sense to use `DrawOnly` together with all histogram IDs. This is especially useful for the `Stack` option. It is also possible to specify the plotting order on a histogram-by-histogram basis using the `PlotOrder=<int>` setting for each histogram. -------------------- Stack=<list> -------------------- Whitespace separated list of histogram IDs. The histograms will be added on top of each other. This is useful for example to compare data with background if the background has contributions from several histograms. -------------------- DrawSpecialFirst=<0|1> DrawFunctionFirst=<0|1> -------------------- By default the `SPECIAL` and `FUNCTION` sections are plotted after the histograms. With these options you can override that behaviour. -------------------- ConnectGaps=<0|1> -------------------- If error bars are disabled and you want to bridge gaps in a histogram, you can set this parameter. By default it is off. Setting it in the `PLOT` section affects all histograms, but you can also set it in the `HISTOGRAM` section for individual histograms. The local setting overrides the global setting. Comparison Plots ^^^^^^^^^^^^^^^^ With the -------------------- RatioPlot=1 RatioPlotReference=<histogram_ID> -------------------- options you can create ratio plots for two or more histograms. Note that you must specify your reference data ID. This option is used by the link:compare-histos.html[`compare-histos`] script. -------------------- RatioPlotMode=<default|deviation|datamc> -------------------- By default, the ratio plot displays MC/Data. You can switch to (MC-data)/uncertainty (`deviation`) or Data/MC (`datamc`) with this option. In ratio plots the following additional options are available and work in a similar way as their regular counterparts: -------------------- RatioPlotYLabel=<label> RatioPlotYMin=<value> RatioPlotYMax=<value> RatioPlotYSize=<size> RatioPlotErrorBandColor=<color> -------------------- By default, the reference data is plotted using a yellow error band around the central value of the ratio plot. If you would rather have it plotted in the same style as in the main plot (e.g. with black errorbars), you can specify: -------------------- RatioPlotSameStyle=1 -------------------- If you only want the ratio plot without showing the actual data distribution, you can switch off the main plot. This option implies `RatioPlot=1`: -------------------- MainPlot=0 -------------------- Goodness of Fit ^^^^^^^^^^^^^^^ `make-plots` can calculate the goodness of fit between histograms and display the result in the legend. It is also possible to change the color of the margin around the plot depending on the GoF. This is useful to provide a quick overview when looking at many plots. -------------------- GofType=chi2 -------------------- The type of GoF. The default is `chi2` and currently that's the only option. -------------------- GofReference=<histogram_ID> -------------------- specifies the reference histogram to be used for the GoF calculation. If this option is omitted, the fallback is `RatioPlotReference`. The GoF calculation is activated by two options: -------------------- GofLegend=<0|1> GofFrame=<histogram_ID> -------------------- `GofLegend` calculates the GoF for all histograms and displays the results in the legend. With `GofFrame` you can specify a single histogram for which the GoF result will be shown in the legend and used to assign a color to the plot margins. Note that `FrameColor` overrides the color choice for the margin. You can use -------------------- GofFrameColor=<colorthresholds> -------------------- to specify the thresholds for the frame color. This option takes a list of `<threshold>:<color>` pairs, separated by whitespace. The default is `GofFrameColor=0:green 3:yellow 6:red!70`. Again, if you use `FrameColor`, this option is disabled. Color Palettes for 2-dim Plots ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ With the option `ColorSeries` you can define a custom color palette for 2-dimensional plots. The syntax is the same as for the `\definecolorseries` command in the `xcolor` LaTeX package after the color series name, i.e. `{core-model}{method}[begin-model]{begin-spec}[end-model]{end-spec}`. For more information you can consult the http://www.ctan.org/tex-archive/macros/latex/contrib/xcolor/xcolor.pdf[xcolor documentation]. Here is an example: -------------------- ColorSeries={rgb}{last}[rgb]{1,0.97,0.94}[rgb]{0.6,0.0,0.05} -------------------- HISTOGRAM ~~~~~~~~~ The `HISTOGRAM` section starts with -------------------- # BEGIN HISTOGRAM <ID> -------------------- and ends with -------------------- # END HISTOGRAM -------------------- There can be more than one `HISTOGRAM` section in a file. Histograms are identified by `<ID>` which can be any string _not_ containing whitespace. Data Format ^^^^^^^^^^^ Lines starting with a number (positive or negative) are interpreted as data. Each line specifies one bin. The fields in each line must be separated by tabs, not spaces (this needs to be fixes some day). For 1-dimensional histograms the format can be -------------------- <lowerbinedge> <upperbinedge> <value> <error> <lowerbinedge> <upperbinedge> <value> <minuserror> <pluserror> -------------------- 2-dimensional histograms are supported, too. They are plotted as colormap (errors are ignored) and specified as -------------------- <lowerxbinedge> <upperxbinedge> <lowerybinedge> <upperybinedge> <value> <error> -------------------- Titles ^^^^^^ -------------------- Title=<title> -------------------- Title of the histogram. This is used for the legend. Linestyles ^^^^^^^^^^ -------------------- LineStyle=<style> -------------------- Any linestyle that is understood by the LaTeX pstricks package, e.g. `solid`, `dotted`, `dashed`, `none`, as well as a special `dashdotted` (or `dotdashed`) linestyle which does what you might expect. -------------------- LineColor=<color> -------------------- Color of the line. Default is black, but any color that pstricks understands can be used, including constructions like `red!70!blue!20` (for mixing colors), `{[rgb]{0.8,0,0.7}}` (for RGB-colors), `{[wave]{580}}` (for wavelengths in nm), `LineColor={[cmyk]{1,1,0,0}}` for CMYK-colors, or `[hsb]{0.5,1,1}` for HSB-colors. -------------------- LineOpacity=<opacity> -------------------- Set the opacity of the line. Default is 1.0. This might not work for ps output. -------------------- LineWidth=<width> -------------------- Width of the line. -------------------- LineDash=<dashstyle> -------------------- If `LineStyle` is set to `dashed`, you can specify the dash style with this option. Anything that is understood by pstrick's `dash=...` option is valid. An example for a dash-dotted line is `LineDash=3pt 3pt .8pt 3pt`. You can use `LineStyle=dashdotted` or `LineStyle=dotdashed` as an abbreviation for `LineStyle=dashed` with `LineDash=3pt 3pt .8pt 3pt`. -------------------- ConnectGaps=<0|1> -------------------- If error bars are disabled and you want to bridge gaps in a histogram, you can set this parameter. By default it is off. Setting it in the `PLOT` section affects all histograms, but you can also set it in the `HISTOGRAM` section for individual histograms. The local setting overrides the global setting. -------------------- SmoothLine=<0|1> -------------------- Draw a smooth curve rather than a histogram Fillstyles ^^^^^^^^^^ -------------------- FillStyle=<style> FillColor=<color> -------------------- To fill the area below a histogram, set `FillStyle` and `FillColor` to something pstricks understands. Examples for the style are `solid` or `vlines`. See `LineColor` for examples of color definitions. -------------------- FillOpacity=<opacity> -------------------- Set the opacity of the solid fillcolor. Default is 1.0. This might not work for ps output. -------------------- HatchColor=<color> -------------------- The color of a hatch pattern used for filling the area below a histogram. This is used for example when you use `vlines` as style. Data Points ^^^^^^^^^^^ -------------------- ErrorBars=<0|1> -------------------- Turn on error bars. -------------------- ErrorBands=<0|1> ErrorBandColor=<color> -------------------- Turn on error bands and set their color (see `LineColor` for a description of color definitions). -------------------- ErrorBandOpacity=<opacity> -------------------- Set the opacity of the error band. Default is 1.0. This might not work for ps output. -------------------- PolyMarker=<dotstyle> -------------------- The marker style of the points. Any dot style which is understood by pstricks is valid, e.g. `*`, `o`, `triangle`, `diamond`, ... -------------------- DotSize=<size> DotScale=<factor> -------------------- The size of the markers. With `DotSize` you can specify the absolute size, e.g. in units of `pt`, while `DotScale` is a relative measure with respect to the default size. Normalization, Rebinning ^^^^^^^^^^^^^^^^^^^^^^^^ -------------------- NormalizeToIntegral=<1|0> NormalizeToSum=<1|0> Scale=<factor> -------------------- Normalize the histogram to the integral, to the sum of entries, or scale it by some arbitrary factor. If normalization and a scale factor are given, the scale factor is applied after normalization. This is useful for stacking histograms when the ratios are known. -------------------- Rebin=<nbins> ErrorType=<stat|env> -------------------- Rebin the histogram. Starting with the lowest bin <nbins> bins are combined into a new bin. If the number of bins in the histogram is not a multiple of <nbins>, the remaining bins at the upper histogram end are silently ignored (i.e. if the original histogram has 10 bins and <nbins> is 3, the plotted histogram shows three bins combining the bins 1--9 of the original histogram). The treatment of the errors is determined by the given ErrorType: `stat` (default) assumes the errors are of statistical nature and combines them in quadrature sum, while `env` allows to treat errors as envelope of various uncertainty runs which are combined linearly. FUNCTION ~~~~~~~~ `make-plots` can draw arbitrary functions. These functions are defined as python code sniplets which are evaluated by `make-plots`. The code sniplet must come after all other options in a `FUNCTION` section and are preceded by `Code=` on a single line. An example `FUNCTION` section might look like this: -------------------- # BEGIN FUNCTION f_cc LineColor=red Code= p0=16.4 p1=1.25 p2=0.9832 from scipy.special import erf x-=0.5 if x<=0: return 0 else: return .5*p2*(1.+erf( (x-p0)/sqrt(x*p1) )) # END FUNCTION -------------------- Common Options with HISTOGRAM ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The following options have the same meaning as in the `HISTOGRAM` section: -------------------- Title=<title> LineStyle=<style> LineColor=<color> LineWidth=<width> LineDash=<dashstyle> FillStyle=<style> FillColor=<color> HatchColor=<color> -------------------- Function Range ^^^^^^^^^^^^^^ You can limit the plot range of functions by specifying -------------------- XMin=<value> XMax=<value> -------------------- SPECIAL ~~~~~~~ The `SPECIAL` sections are used to include any custom pstricks code. This is useful for drawing arrows and lines, put text at any position into the plot, etc. The default coordinate system is defined to be `(0,0)` at the lower left and `(1,1)` at the upper right corner of the plot. By putting the `\physicscoor` command in front of a coordinate pair, these coordinates are interpreted not in the pstricks coordinate system, but in the physics coordinate system of the plot, which is useful e.g. for marking cut values in a plot. Similar `\physicsxcoor` and `\physicsycoor` commands exist which will only treat the x or y coordinate respectively as being in physics units. Hint: If you want to clip your `SPECIAL` code to the plot area, you can use -------------------- \psclip{\psframe[linewidth=0, linestyle=none](0,0)(1,1)} ... \endpsclip -------------------- An example of a `SPECIAL` section might look like this: -------------------- # BEGIN SPECIAL \psclip{\psframe[linewidth=0, linestyle=none](0,0)(1,1)} \psline[linewidth=1.2pt,linecolor=red]{<-}\physicscoor(2.83,2)\physicscoor(2.83,18) \uput{4pt}[180]{0}\physicscoor(2.83,12){observed} \psline[linewidth=0.8pt,linecolor=red,linestyle=dashed]\physicscoor( 3.17,0)\physicscoor( 3.17,28.14) \psline[linewidth=0.8pt,linecolor=red,linestyle=dashed]\physicscoor(-3.59,0)\physicscoor(-3.59,28.14) \endpsclip # END SPECIAL -------------------- ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/doc/JHEP.bst����������������������������������������������������������������������������0000644�0001750�0001750�00000047622�12116077755�013103� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% UT Physics bibliographic style, ver. 1.2. Based on: % %X IEEE Transactions bibliography style (29-Jan-88 version) %X numeric labels, order-of-reference, IEEE abbreviations, %X quotes around article titles, commas separate all fields %X except after book titles and before "notes". Otherwise, %X much like the "plain" family, from which this is adapted. %X %X History %X 9/30/85 (HWT) Original version, by Howard Trickey. %X 1/29/88 (OP&HWT) Updated for BibTeX version 0.99a, Oren Patashnik; %X THIS `ieeetr' VERSION DOES NOT WORK WITH BIBTEX 0.98i. % % Modifications: 1) added hypertex support and "archive" and "eprint" fields. % 2) parentheses around dates, and no "pp." for article entries % 3) "publisher, address" instead of "address: publisher" % 4) added "report" field for article entries. % 5) particle physics-oriented abbreviations, rather than ieee. % 6) added "collaboration" field, as per % Jonathan Flynn' suggestion. SPIRES now supports this field. % 7) added support for new arXIv identifier format % % Modified by Jacques Distler, 7/97 % History: ver 1.0 9/96 % ver 1.1 10/96 - added "collaboration" field % ver 1.2 7/97 - added a "\providecommand{\href}[2]{#2}" % to handle case where \href is not defined % % HyperTeX Wizardry: % % The following are equivalent: % archive = "hep-th" % eprint = "9605023" % and % eprint = "hep-th/9605023" % both produce % \href{http://arxiv.org/abs/hep-th/9605023}{{\tt hep-th/9605023}} % in the bibliographic output at the appropriate point. If you are using a % hypertex macropackage, like hyperref.sty, this will create a link to Los % Alamos. % % The bibtex output produced by SPIRES, while far from perfect, is pretty % suitable for use with this style. Indeed, this style was designed with % SPIRES in mind. ENTRY { address author booktitle chapter edition editor howpublished institution journal key month note number organization pages publisher school series title type volume year archive eprint report collaboration } {} { label } INTEGERS { output.state before.all mid.sentence after.quote after.sentence after.quoted.block after.block } FUNCTION {init.state.consts} { #0 'before.all := #1 'mid.sentence := #2 'after.quote := #3 'after.sentence := #4 'after.quoted.block := #5 'after.block := } STRINGS { s t } FUNCTION {output.nonnull} { 's := output.state mid.sentence = { ", " * write$ } { output.state after.quote = { " " * write$ } { output.state after.block = { add.period$ write$ newline$ "\newblock " write$ } { output.state before.all = 'write$ { output.state after.quoted.block = { write$ newline$ "\newblock " write$ } { add.period$ " " * write$ } if$ } if$ } if$ } if$ mid.sentence 'output.state := } if$ s } FUNCTION {output} { duplicate$ empty$ 'pop$ 'output.nonnull if$ } FUNCTION {output.check} { 't := duplicate$ empty$ { pop$ "empty " t * " in " * cite$ * warning$ } 'output.nonnull if$ } FUNCTION {output.bibitem} { newline$ "\bibitem{" write$ cite$ write$ "}" write$ newline$ "" before.all 'output.state := } FUNCTION {blank.sep} { after.quote 'output.state := } FUNCTION {fin.entry} { output.state after.quoted.block = 'skip$ 'add.period$ if$ write$ newline$ } FUNCTION {new.block} { output.state before.all = 'skip$ { output.state after.quote = { after.quoted.block 'output.state := } { after.block 'output.state := } if$ } if$ } FUNCTION {new.sentence} { output.state after.block = 'skip$ { output.state before.all = 'skip$ { after.sentence 'output.state := } if$ } if$ } FUNCTION {not} { { #0 } { #1 } if$ } FUNCTION {and} { 'skip$ { pop$ #0 } if$ } FUNCTION {or} { { pop$ #1 } 'skip$ if$ } FUNCTION {new.block.checka} { empty$ 'skip$ 'new.block if$ } FUNCTION {new.block.checkb} { empty$ swap$ empty$ and 'skip$ 'new.block if$ } FUNCTION {new.sentence.checka} { empty$ 'skip$ 'new.sentence if$ } FUNCTION {field.or.null} { duplicate$ empty$ { pop$ "" } 'skip$ if$ } FUNCTION {emphasize} { duplicate$ empty$ { pop$ "" } { "{\em " swap$ * "}" * } if$ } INTEGERS { nameptr namesleft numnames } FUNCTION {format.names} { 's := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := nameptr #1 > { namesleft #1 > { ", " * t * } { numnames #2 > { "," * } 'skip$ if$ t "others" = { " {\em et.~al.}" * } { " and " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {format.authors} { author empty$ { "" } { author format.names } if$ } FUNCTION {format.eprint.newarXivid} { eprint #1 #6 substring$ "arXiv:" = {"\href{http://xxx.lanl.gov/abs/" eprint #7 #9 substring$ * "}" * "{{\tt " * eprint #7 #9 substring$ * "}}" *} {"\href{http://xxx.lanl.gov/abs/" eprint #1 #9 substring$ * "}" * "{{\tt arXiv:" * eprint #1 #9 substring$ * "}}" *} if$ } FUNCTION {format.eprint.oldarXivid} { archive empty$ {"\href{http://xxx.lanl.gov/abs/" eprint * "}" * "{{\tt " * eprint * "}}" *} {"\href{http://xxx.lanl.gov/abs/" archive * "/" * eprint * "}" * "{{\tt " * archive * "/" * eprint * "}}" *} if$ } FUNCTION {format.eprint} { eprint empty$ { ""} { eprint #1 #6 substring$ "arXiv:" = eprint #5 #1 substring$ "." = or { format.eprint.newarXivid } { format.eprint.oldarXivid } if$ } if$ } FUNCTION {format.eprint.paren} { eprint missing$ { "" } { eprint empty$ { "" } {"[" format.eprint * "]" *} if$ } if$ } FUNCTION {format.report} { report empty$ { ""} { report} if$ } FUNCTION {format.editors} { editor empty$ { "" } { editor format.names editor num.names$ #1 > { ", eds." * } { ", ed." * } if$ } if$ } FUNCTION {format.title} { title empty$ { "" } { "{\it " title "t" change.case$ * "}, " * } if$ } FUNCTION {format.title.p} { title empty$ { "" } { "``" title "t" change.case$ * ".''" * } if$ } FUNCTION {n.dashify} { 't := "" { t empty$ not } { t #1 #1 substring$ "-" = { t #1 #2 substring$ "--" = not { "--" * t #2 global.max$ substring$ 't := } { { t #1 #1 substring$ "-" = } { "-" * t #2 global.max$ substring$ 't := } while$ } if$ } { t #1 #1 substring$ * t #2 global.max$ substring$ 't := } if$ } while$ } FUNCTION {format.date} { year empty$ { month empty$ { "" } { "there's a month but no year in " cite$ * warning$ month } if$ } { month empty$ 'year { month ", " * year * } if$ } if$ } FUNCTION {format.date.paren} { year empty$ { month empty$ { "" } { "there's a month but no year in " cite$ * warning$ month } if$ } { month empty$ {"(" year * ")" *} {"(" month * ", " * year * ")" *} if$ } if$ } FUNCTION {format.collaboration} { collaboration empty$ { "" } { "{\bf " collaboration * "} " * "Collaboration" * } if$ } FUNCTION {format.btitle} { title emphasize } FUNCTION {tie.or.space.connect} { duplicate$ text.length$ #3 < { "~" } { " " } if$ swap$ * * } FUNCTION {either.or.check} { empty$ 'pop$ { "can't use both " swap$ * " fields in " * cite$ * warning$ } if$ } FUNCTION {format.bvolume} { volume empty$ { "" } { "vol.~" volume * series empty$ 'skip$ { " of " * series emphasize * } if$ "volume and number" number either.or.check } if$ } FUNCTION {format.number.series} { volume empty$ { number empty$ { series field.or.null } { output.state mid.sentence = { "no.~" } { "No.~" } if$ number * series empty$ { "there's a number but no series in " cite$ * warning$ } { " in " * series * } if$ } if$ } { "" } if$ } FUNCTION {format.edition} { edition empty$ { "" } { edition "l" change.case$ "~ed." * } if$ } INTEGERS { multiresult } FUNCTION {multi.page.check} { 't := #0 'multiresult := { multiresult not t empty$ not and } { t #1 #1 substring$ duplicate$ "-" = swap$ duplicate$ "," = swap$ "+" = or or { #1 'multiresult := } { t #2 global.max$ substring$ 't := } if$ } while$ multiresult } FUNCTION {format.pages} { pages empty$ { "" } { pages multi.page.check { "pp.~" pages n.dashify * } { "p.~" pages * } if$ } if$ } FUNCTION {format.pages.nopp} { pages empty$ { "" } { pages multi.page.check { pages n.dashify } { pages } if$ } if$ } FUNCTION {format.volume} { volume empty$ { "" } { "{\bf " volume * "}" * } if$ } FUNCTION {format.number} { number empty$ { "" } { "no.~" number * } if$ } FUNCTION {format.chapter.pages} { chapter empty$ 'format.pages { type empty$ { "ch.~" chapter * } { type "l" change.case$ chapter tie.or.space.connect } if$ pages empty$ 'skip$ { ", " * format.pages * } if$ } if$ } FUNCTION {format.in.ed.booktitle} { booktitle empty$ { "" } { "in " booktitle emphasize * editor empty$ 'skip$ { " (" * format.editors * ")" * } if$ } if$ } FUNCTION {format.thesis.type} { type empty$ 'skip$ { pop$ output.state after.block = { type "t" change.case$ } { type "l" change.case$ } if$ } if$ } FUNCTION {empty.misc.check} { author empty$ title empty$ howpublished empty$ month empty$ year empty$ note empty$ and and and and and { "all relevant fields are empty in " cite$ * warning$ } 'skip$ if$ } FUNCTION {format.tr.number} { type empty$ { "Tech. Rep." } 'type if$ number empty$ { "l" change.case$ } { number tie.or.space.connect } if$ } FUNCTION {format.paddress} { address empty$ { "" } { "(" address * ")" * } if$ } FUNCTION {format.article.crossref} { key empty$ { journal empty$ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ "" } { "in {\em " journal * "\/}" * } if$ } { "in " key * } if$ " \cite{" * crossref * "}" * } FUNCTION {format.crossref.editor} { editor #1 "{vv~}{ll}" format.name$ editor num.names$ duplicate$ #2 > { pop$ " {\em et.~al.}" * } { #2 < 'skip$ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = { " {\em et.~al.}" * } { " and " * editor #2 "{vv~}{ll}" format.name$ * } if$ } if$ } if$ } FUNCTION {format.book.crossref} { volume empty$ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ "In " } { "Vol.~" volume * " of " * } if$ editor empty$ editor field.or.null author field.or.null = or { key empty$ { series empty$ { "need editor, key, or series for " cite$ * " to crossref " * crossref * warning$ "" * } { "{\em " * series * "\/}" * } if$ } { key * } if$ } { format.crossref.editor * } if$ " \cite{" * crossref * "}" * } FUNCTION {format.incoll.inproc.crossref} { editor empty$ editor field.or.null author field.or.null = or { key empty$ { booktitle empty$ { "need editor, key, or booktitle for " cite$ * " to crossref " * crossref * warning$ "" } { "in {\em " booktitle * "\/}" * } if$ } { "in " key * } if$ } { "in " format.crossref.editor * } if$ " \cite{" * crossref * "}" * } FUNCTION {article} { output.bibitem format.collaboration output format.authors "author" output.check format.title "title" output.check blank.sep crossref missing$ { journal missing$ { format.eprint output } { journal empty$ { format.eprint output } { journal emphasize "journal" output.check blank.sep format.volume output blank.sep format.date.paren "year" output.check month empty$ { format.number output } 'skip$ if$ blank.sep format.pages.nopp output } if$ } if$ report missing$ { journal empty$ {} { format.eprint.paren output} if$ } {blank.sep format.report output format.eprint.paren output} if$ } { format.article.crossref output.nonnull format.pages output format.eprint.paren output } if$ new.sentence note output fin.entry } FUNCTION {book} { output.bibitem format.collaboration output author empty$ { format.editors "author and editor" output.check } { format.authors output.nonnull crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ format.btitle "title" output.check crossref missing$ { format.bvolume output new.block format.number.series output new.sentence publisher "publisher" output.check address output } { new.block format.book.crossref output.nonnull } if$ format.edition output format.date "year" output.check new.block note output fin.entry } FUNCTION {booklet} { output.bibitem format.collaboration output format.authors output title empty$ { "empty title in " cite$ * warning$ howpublished new.sentence.checka } { howpublished empty$ not address empty$ month empty$ year empty$ and and or { format.title.p output.nonnull } { format.title output.nonnull } if$ blank.sep } if$ howpublished output address output format.date output new.block note output fin.entry } FUNCTION {inbook} { output.bibitem format.collaboration output author empty$ { format.editors "author and editor" output.check } { format.authors output.nonnull crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ format.btitle "title" output.check crossref missing$ { format.bvolume output format.chapter.pages "chapter and pages" output.check new.block format.number.series output new.block publisher "publisher" output.check address output } { format.chapter.pages "chapter and pages" output.check new.block format.book.crossref output.nonnull } if$ format.edition output format.date "year" output.check new.block format.eprint output new.block note output fin.entry } FUNCTION {incollection} { output.bibitem format.collaboration output format.authors "author" output.check format.title "title" output.check blank.sep crossref missing$ { format.in.ed.booktitle "booktitle" output.check format.bvolume output format.number.series output format.chapter.pages output new.block publisher "publisher" output.check address output format.edition output format.date "year" output.check } { format.incoll.inproc.crossref output.nonnull format.chapter.pages output } if$ new.block format.eprint output new.block note output fin.entry } FUNCTION {inproceedings} { output.bibitem format.collaboration output format.authors "author" output.check format.title "title" output.check blank.sep crossref missing$ { format.in.ed.booktitle "booktitle" output.check format.bvolume output format.number.series output format.paddress output format.pages output organization output publisher output format.date "year" output.check } { format.incoll.inproc.crossref output.nonnull format.pages output } if$ new.block format.eprint output new.block note output fin.entry } FUNCTION {conference} { inproceedings } FUNCTION {manual} { output.bibitem format.collaboration output author empty$ { organization empty$ 'skip$ { organization output.nonnull address output } if$ } { format.authors output.nonnull } if$ format.btitle "title" output.check author empty$ { organization empty$ { address new.block.checka address output } 'skip$ if$ } { organization address new.block.checkb organization output address output } if$ format.edition output format.date output new.block note output fin.entry } FUNCTION {mastersthesis} { output.bibitem format.authors "author" output.check format.title "title" output.check blank.sep "Master's thesis" format.thesis.type output.nonnull school "school" output.check address output format.date "year" output.check new.block note output fin.entry } FUNCTION {misc} { output.bibitem format.collaboration output format.authors output title empty$ { howpublished new.sentence.checka } { howpublished empty$ not month empty$ year empty$ and or { format.title.p output.nonnull } { format.title output.nonnull } if$ blank.sep } if$ howpublished output format.date output new.block note output fin.entry empty.misc.check } FUNCTION {phdthesis} { output.bibitem format.authors "author" output.check format.btitle "title" output.check new.block "PhD thesis" format.thesis.type output.nonnull school "school" output.check address output format.date "year" output.check new.block format.eprint output new.block note output fin.entry } FUNCTION {proceedings} { output.bibitem editor empty$ { organization output } { format.editors output.nonnull } if$ format.btitle "title" output.check format.bvolume output format.number.series output format.paddress output editor empty$ 'skip$ { organization output } if$ publisher output format.date "year" output.check new.block note output fin.entry } FUNCTION {techreport} { output.bibitem format.collaboration output format.authors "author" output.check format.title "title" output.check blank.sep format.tr.number output.nonnull institution "institution" output.check address output format.date "year" output.check new.block note output fin.entry } FUNCTION {unpublished} { output.bibitem format.collaboration output format.authors "author" output.check format.title.p "title" output.check blank.sep note "note" output.check format.date output fin.entry } FUNCTION {default.type} { misc } MACRO {jan} {"Jan."} MACRO {feb} {"Feb."} MACRO {mar} {"Mar."} MACRO {apr} {"Apr."} MACRO {may} {"May"} MACRO {jun} {"June"} MACRO {jul} {"July"} MACRO {aug} {"Aug."} MACRO {sep} {"Sept."} MACRO {oct} {"Oct."} MACRO {nov} {"Nov."} MACRO {dec} {"Dec."} MACRO {nup} {"Nucl. Phys."} MACRO {cmp} {"Comm. Math. Phys."} MACRO {prl} {"Phys. Rev. Lett."} MACRO {pl} {"Phys. Lett."} MACRO {rmp} {"Rev. Mod. Phys."} MACRO {ijmp} {"Int. Jour. Mod. Phys."} MACRO {mpl} {"Mod. Phys. Lett."} MACRO {pr} {"Phys. Rev."} READ STRINGS { longest.label } INTEGERS { number.label longest.label.width } FUNCTION {initialize.longest.label} { "" 'longest.label := #1 'number.label := #0 'longest.label.width := } FUNCTION {longest.label.pass} { number.label int.to.str$ 'label := number.label #1 + 'number.label := label width$ longest.label.width > { label 'longest.label := label width$ 'longest.label.width := } 'skip$ if$ } EXECUTE {initialize.longest.label} ITERATE {longest.label.pass} FUNCTION {begin.bib} { preamble$ empty$ 'skip$ { preamble$ write$ newline$ } if$ "\providecommand{\href}[2]{#2}" "\begingroup\raggedright\begin{thebibliography}{" * longest.label * "}" * write$ newline$ } EXECUTE {begin.bib} EXECUTE {init.state.consts} ITERATE {call.type$} FUNCTION {end.bib} { newline$ "\end{thebibliography}\endgroup" write$ newline$ } EXECUTE {end.bib} ��������������������������������������������������������������������������������������������������������������rivet-1.8.3/doc/hepunits.sty������������������������������������������������������������������������0000644�0001750�0001750�00000014417�12116077755�014237� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%% hepunits %% High energy physics (HEP) extensions to the SIunits package %% Author: Andy Buckley <andy@insectnation.org> %% %% This material is subject to the LaTeX Project Public License. %% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html %% or the details of that license. %% %% Please let me know if you use hepunits and what you think of it. %% I'll try to implement any suggested options that seem sensible! \def\fileversion{1.1.1} \def\filedate{2007/09/27} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{hepunits}[\filedate\space High-energy physics units by Andy Buckley (v\fileversion)] %% Now-redundant wrapper for declaring new units \DeclareRobustCommand{\@NewUnit}[2]{\addunit{#1}{#2}} %% Option handling variables \def\@empty{} \def\@yes{yes} \def\@HEPopt@noprefixcmds{} \def\@SIopt@cdot{} \def\@SIopt@space{mediumspace} \def\@SIopt@qspace{thickqspace} \def\@SIopt@amssquare{squaren} \def\@SIopt@pstricks{} \def\@SIopt@Gray{} \def\@SIopt@italian{} \def\@SIopt@textstyle{yes} \def\@SIopt@binary{} \def\@SIopt@noams{} \def\@SIopt@derivedinbase{} \def\@SIopt@derived{} %% Option for turning off explicit SI prefix commands \DeclareOption{noprefixcmds}{\def\@HEPopt@noprefixcmds{yes}} %% Options for passing to SIunits \DeclareOption{cdot}{\def\@SIopt@cdot{yes}} \DeclareOption{thickspace}{\def\@SIopt@space{thickspace}} \DeclareOption{mediumspace}{\def\@SIopt@space{mediumspace}} \DeclareOption{thinspace}{\def\@SIopt@space{thinspace}} \DeclareOption{thickqspace}{\def\@SIopt@qspace{thickqspace}} \DeclareOption{mediumqspace}{\def\@SIopt@qspace{mediumqspace}} \DeclareOption{thinqspace}{\def\@SIopt@qspace{thinqspace}} \DeclareOption{noamssquareissue}{\def\@SIopt@amssquare{}} \DeclareOption{amssymb}{\def\@SIopt@amssquare{amssymb}} \DeclareOption{squaren}{\def\@SIopt@amssquare{squaren}} \DeclareOption{pstricks}{\def\@SIopt@pstricks{yes}} \DeclareOption{Gray}{\def\@SIopt@Gray{yes}} \DeclareOption{italian}{\def\@SIopt@italian{yes}} \DeclareOption{textstyle}{\def\@SIopt@textstyle{yes}} \DeclareOption{notextstyle}{\def\@SIopt@textstyle{}} \DeclareOption{binary}{\def\@SIopt@binary{yes}} \DeclareOption{noams}{\def\@SIopt@noams{yes}} \DeclareOption{derivedinbase}{\def\@SIopt@derivedinbase{yes}} \DeclareOption{derived}{\def\@SIopt@derived{yes}} %\DeclareOption{noderived}{\def\@SIopt@derived{}} \ProcessOptions %% Pass the SIunits yes/no options \ifx\@SIopt@cdot\@yes\PassOptionsToPackage{cdot}{SIunits}\fi \ifx\@SIopt@pstricks\@yes\PassOptionsToPackage{pstricks}{SIunits}\fi \ifx\@SIopt@Gray\@yes\PassOptionsToPackage{Gray}{SIunits}\fi \ifx\@SIopt@italian\@yes\PassOptionsToPackage{italian}{SIunits}\fi \ifx\@SIopt@textstyle\@yes\PassOptionsToPackage{textstyle}{SIunits}\fi \ifx\@SIopt@binary\@yes\PassOptionsToPackage{binary}{SIunits}\fi \ifx\@SIopt@noams\@yes\PassOptionsToPackage{noams}{SIunits}\fi \ifx\@SIopt@derivedinbase\@yes\PassOptionsToPackage{derivedinbase}{SIunits}\fi \ifx\@SIopt@derived\@yes\PassOptionsToPackage{derived}{SIunits}\fi %% Pass the SIunits "choice" options \ifx\@SIopt@space\@empty\else\PassOptionsToPackage{\@SIopt@space}{SIunits}\fi \ifx\@SIopt@qspace\@empty\else\PassOptionsToPackage{\@SIopt@qspace}{SIunits}\fi \ifx\@SIopt@amssquare\@empty\else\PassOptionsToPackage{\@SIopt@amssquare}{SIunits}\fi %% Get the dependancy packages, now that the options %% have been processed \RequirePackage{amsmath} \RequirePackage{xspace} \RequirePackage{SIunits} %% ------------------------------------------------- %% Units defined below here %% ------------------------------------------------- \@NewUnit{\Hz}{\hertz} \ifx\@HEPopt@noprefixcmds\@empty %% Lengths \@NewUnit{\nm}{\nano\metre} \@NewUnit{\micron}{\micro\metre} \@NewUnit{\mm}{\milli\metre} \@NewUnit{\cm}{\centi\metre} %% Angles \@NewUnit{\mrad}{\milli\rad} %% Times \@NewUnit{\as}{\atto\second} \@NewUnit{\fs}{\femto\second} \@NewUnit{\ps}{\pico\second} \@NewUnit{\ns}{\nano\second} %% Rates \@NewUnit{\mHz}{\milli\hertz} \@NewUnit{\kHz}{\kilo\hertz} \@NewUnit{\MHz}{\mega\hertz} \@NewUnit{\GHz}{\giga\hertz} \@NewUnit{\THz}{\tera\hertz} \fi %% Fields \@NewUnit{\gauss}{G} %% Luminosity \@NewUnit{\invcmsqpersecond}{\rpsquare{\centi\metre}\usk\reciprocal{\second}} \@NewUnit{\invcmsqpersec}{\invcmsqpersecond} \DeclareRobustCommand{\lumiunits}{\invcmsqpersecond} %% (Inverse) cross-sections \@NewUnit{\invbarn}{\reciprocal\barn\xspace} \ifx\@HEPopt@noprefixcmds\@empty \@NewUnit{\millibarn}{\milli\barn\xspace} \@NewUnit{\microbarn}{\micro\barn\xspace} \@NewUnit{\nanobarn}{\nano\barn\xspace} \@NewUnit{\picobarn}{\pico\barn\xspace} \@NewUnit{\femtobarn}{\femto\barn\xspace} \@NewUnit{\attobarn}{\atto\barn\xspace} \@NewUnit{\zeptobarn}{\zepto\barn\xspace} \@NewUnit{\yoctobarn}{\yocto\barn\xspace} \@NewUnit{\invnanobarn}{\nano\invbarn\xspace} \@NewUnit{\invpicobarn}{\pico\invbarn\xspace} \@NewUnit{\invfemtobarn}{\femto\invbarn\xspace} \@NewUnit{\invattobarn}{\atto\invbarn\xspace} \@NewUnit{\invzeptobarn}{\zepto\invbarn\xspace} \@NewUnit{\invyoctobarn}{\yocto\invbarn\xspace} \@NewUnit{\invnb}{\invnanobarn} \@NewUnit{\invpb}{\invpicobarn} \@NewUnit{\invfb}{\invfemtobarn} \@NewUnit{\invab}{\invattobarn} \@NewUnit{\invzb}{\invzeptobarn} \@NewUnit{\invyb}{\invyoctobarn} \fi %% HEP energy, momentum and mass units \DeclareRobustCommand{\clight}{\ensuremath{c}} \@NewUnit{\eV}{\electronvolt\xspace} \@NewUnit{\inveV}{\reciprocal\electronvolt\xspace} \@NewUnit{\eVoverc}{\ensuremath{\eV\!/\clight}\xspace} \@NewUnit{\eVovercsq}{\ensuremath{\eV\!/\clight^{2}}\xspace} \ifx\@HEPopt@noprefixcmds\@empty \@NewUnit{\meV}{\milli\eV} \@NewUnit{\keV}{\kilo\eV} \@NewUnit{\MeV}{\mega\eV} \@NewUnit{\GeV}{\giga\eV} \@NewUnit{\TeV}{\tera\eV} \@NewUnit{\minveV}{\milli\inveV} \@NewUnit{\kinveV}{\kilo\inveV} \@NewUnit{\MinveV}{\mega\inveV} \@NewUnit{\GinveV}{\giga\inveV} \@NewUnit{\TinveV}{\tera\inveV} \@NewUnit{\meVoverc}{\ensuremath{\milli\eVoverc}\xspace} \@NewUnit{\keVoverc}{\ensuremath{\kilo\eVoverc}\xspace} \@NewUnit{\MeVoverc}{\ensuremath{\mega\eVoverc}\xspace} \@NewUnit{\GeVoverc}{\ensuremath{\giga\eVoverc}\xspace} \@NewUnit{\TeVoverc}{\ensuremath{\tera\eVoverc}\xspace} \@NewUnit{\meVovercsq}{\ensuremath{\milli\eVovercsq}\xspace} \@NewUnit{\keVovercsq}{\ensuremath{\kilo\eVovercsq}\xspace} \@NewUnit{\MeVovercsq}{\ensuremath{\mega\eVovercsq}\xspace} \@NewUnit{\GeVovercsq}{\ensuremath{\giga\eVovercsq}\xspace} \@NewUnit{\TeVovercsq}{\ensuremath{\tera\eVovercsq}\xspace} \fi �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/doc/analyses.tex������������������������������������������������������������������������0000644�0001750�0001750�00001037437�12131101204�014156� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%auto-ignore \makeatletter \renewcommand{\d}[1]{\ensuremath{\mathrm{#1}}} \let\old@eta\eta \renewcommand{\eta}{\ensuremath{\old@eta}\xspace} \let\old@phi\phi \renewcommand{\phi}{\ensuremath{\old@phi}\xspace} \providecommand{\pT}{\ensuremath{p_\perp}\xspace} \providecommand{\pTmin}{\ensuremath{p_\perp^\text{min}}\xspace} \makeatother \section{LEP and SLC analyses}\typeout{Handling analysis ALEPH_1991_S2435284}\subsection[ALEPH\_1991\_S2435284]{ALEPH\_1991\_S2435284\,\cite{Decamp:1991uz}} \textbf{Hadronic Z decay charged multiplicity measurement}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} ALEPH (LEP 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+2435284}{2435284}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys. Lett. B, 273, 181 (1991) \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent The charged particle multiplicity distribution of hadronic Z decays, as measured on the peak of the Z resonance using the ALEPH detector at LEP. The unfolding procedure was model independent, and the distribution was found to have a mean of $20.85 \pm 0.24$, Comparison with lower energy data supports the KNO scaling hypothesis. The shape of the multiplicity distribution is well described by a log-normal distribution, as predicted from a cascading model for multi-particle production. \clearpage \clearpage \typeout{Handling analysis ALEPH_1996_S3196992}\subsection[ALEPH\_1996\_S3196992]{ALEPH\_1996\_S3196992\,\cite{Buskulic:1995au}} \textbf{Measurement of the quark to photon fragmentation function}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} ALEPH (LEP Run 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+3196992}{3196992}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Z.Phys.C69:365-378,1996 \item DOI: \href{http://dx.doi.org/10.1007/s002880050037}{10.1007/s002880050037} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^+e^-\to$ jets with $\pi$ and $\eta$ decays turned off.\end{itemize} \noindent Earlier measurements at LEP of isolated hard photons in hadronic Z decays, attributed to radiation from primary quark pairs, have been extended in the ALEPH experiment to include hard photon production inside hadron jets. Events are selected where all particles combine democratically to form hadron jets, one of which contains a photon with a fractional energy $z > 0.7$. After statistical subtraction of non-prompt photons, the quark-to-photon fragmentation function, $D(z)$, is extracted directly from the measured 2-jet rate. \clearpage \clearpage \typeout{Handling analysis ALEPH_1996_S3486095}\subsection[ALEPH\_1996\_S3486095]{ALEPH\_1996\_S3486095\,\cite{Barate:1996fi}} \textbf{Studies of QCD with the ALEPH detector.}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} ALEPH (LEP 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+3486095}{3486095}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Holger Schulz $\langle\,$\href{mailto:holger.schulz@physik.hu-berlin.de}{holger.schulz@physik.hu-berlin.de}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys. Rept., 294, 1--165 (1998) \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent Summary paper of QCD results as measured by ALEPH at LEP 1. The publication includes various event shape variables, multiplicities (identified particles and inclusive), and particle spectra. \clearpage \clearpage \typeout{Handling analysis ALEPH_1999_S4193598}\subsection[ALEPH\_1999\_S4193598]{ALEPH\_1999\_S4193598\,\cite{Barate:1999bg}} \textbf{Scaled energy distribution of $D^*$ at LEP}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} ALEPH (LEP)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4193598}{4193598}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Holger Schulz $\langle\,$\href{mailto:hschulz@physik.hu-berlin.de}{hschulz@physik.hu-berlin.de}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Eur.Phys.J.C16:597-611,2000 \item hep-ex/9909032 \item CERN-EP-99-094 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic $Z$ decays at 91.2~GeV.\end{itemize} \noindent Study of Charm Production in $Z$ Decays. Here, only the scaled energy distribution of $D^{*\pm}$ is implemented. Should be very important for fragmentation tuning. \clearpage \clearpage \typeout{Handling analysis ALEPH_2001_S4656318}\subsection[ALEPH\_2001\_S4656318]{ALEPH\_2001\_S4656318\,\cite{Heister:2001jg}} \textbf{Study of the fragmentation of b quarks into B mesons at the Z peak}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} ALEPH (LEP 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4656318}{4656318}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Lett.B512:30-48,2001. \item hep-ex/0106051 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent Measurement of the $b$-quark fragmentation function by ALEPH using LEP 1 data. The fragmentation function for both weakly decaying and leading $b$-quarks has been determined. The data used for the plots has been renormalised to give a differential distribution rather than the bin-by-bin average in HEPDATA. \clearpage \clearpage \typeout{Handling analysis ALEPH_2002_S4823664}\subsection[ALEPH\_2002\_S4823664]{ALEPH\_2002\_S4823664\,\cite{Heister:2001kp}} \textbf{$\eta$ and $\omega$ Production in Hadronic $Z^0$ Decays}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} OPAL (LEP 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4823664}{4823664}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Lett. B528 (2002) 19-33 \item hep-ex/0201012 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent The production of $\eta$ and $\omega$ mesons measured using 4 millon $Z^0$ events by the ALEPH experiment at LEP. Only the fragmentation functions are implemented. \clearpage \clearpage \typeout{Handling analysis ALEPH_2004_S5765862}\subsection[ALEPH\_2004\_S5765862]{ALEPH\_2004\_S5765862\,\cite{Heister:2003aj}} \textbf{Jet rates and event shapes at LEP I and II}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6), (66.5, 66.5), (80.5, 80.5), (86.0, 86.0), (91.5, 91.5), (94.5, 94.5), (98.5, 98.5), (100.0, 100.0), (103.0, 103.0) GeV \newline \textbf{Experiment:} ALEPH (LEP Run 1 and 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+5765862}{5765862}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Eur.Phys.J.C35:457-486,2004 \item DOI: \href{http://dx.doi.org/10.1140/epjc/s2004-01891-4}{10.1140/epjc/s2004-01891-4} \item http://cdsweb.cern.ch/record/690637/files/ep-2003-084.pdf \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^+ e^- \to$ jet jet (+ jets)\end{itemize} \noindent Jet rates, event-shape variables and inclusive charged particle spectra are measured in $e^+ e^-$ collisions at CMS energies between 91 and 209 GeV. The previously published data at 91.2 GeV and 133 GeV have been re-processed and the higher energy data are presented here for the first time. Note that the data have been corrected to include neutrinos. \clearpage \clearpage \typeout{Handling analysis DELPHI_1995_S3137023}\subsection[DELPHI\_1995\_S3137023]{DELPHI\_1995\_S3137023\,\cite{Abreu:1995qx}} \textbf{Strange baryon production in $Z$ hadronic decays at Delphi}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} DELPHI (LEP 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+3137023}{3137023}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Z. Phys. C, 67, 543--554 (1995) \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent Measurement of the $\Xi^-$ and $\Sigma^+(1385)/\Sigma^-(1385)$ scaled momentum distributions by DELPHI at LEP 1. The paper also has the production cross-sections of these particles, but that's not implemented in Rivet. \clearpage \clearpage \typeout{Handling analysis DELPHI_1996_S3430090}\subsection[DELPHI\_1996\_S3430090]{DELPHI\_1996\_S3430090\,\cite{Abreu:1996na}} \textbf{Delphi MC tuning on event shapes and identified particles.}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} DELPHI (LEP 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+3430090}{3430090}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Z.Phys.C73:11-60,1996 \item DOI: \href{http://dx.doi.org/10.1007/s002880050295}{10.1007/s002880050295} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item \ensuremath{\sqrt{s}} = 91.2 GeV, $e^+ e^- \ensuremath{\to} Z^0$ production with hadronic decays only\end{itemize} \noindent Event shape and charged particle inclusive distributions measured using 750000 decays of Z bosons to hadrons from the DELPHI detector at LEP. This data, combined with identified particle distributions from all LEP experiments, was used for tuning of shower-hadronisation event generators by the original PROFESSOR method. This is a critical analysis for MC event generator tuning of final state radiation and both flavour and kinematic aspects of hadronisation models. \clearpage \clearpage \typeout{Handling analysis DELPHI_1999_S3960137}\subsection[DELPHI\_1999\_S3960137]{DELPHI\_1999\_S3960137\,\cite{Abreu:1998nn}} \textbf{Measurement of inclusive $\rho^0$, $f_0(980)$, $f_2(1270)$, $K^{*0}_2(1430)$ and $f'_2(1525)$ production in $Z^0$ decays}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} DELPHI (LEP 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+3960137}{3960137}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Lett.B449:364-382,1999 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent DELPHI results for the production of $\rho^0$, $f_0(980)$, $f_2(1270)$, $K^{*0}_2(1430)$ and $f'_2(1525)$ in $Z^0$ decays. Only the identified particle spectra for $\rho^0$, $f_0(980)$ and $f_2(1270)$ are implemented. \clearpage \clearpage \typeout{Handling analysis DELPHI_2000_S4328825}\subsection[DELPHI\_2000\_S4328825]{DELPHI\_2000\_S4328825\,\cite{Abreu:2000nt}} \textbf{Hadronization properties of $b$ quarks compared to light quarks in $e^+e^-\to q \bar q$ from 183 GeV to 200 GeV}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (91.5, 91.5), (94.5, 94.5), (96.0, 96.0), (98.0, 98.0), (100.0, 100.0), (103.0, 103.0) GeV \newline \textbf{Experiment:} OPAL (LEP 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4328825}{4328825}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Lett.B479:118-128,2000 \item hep-ex/0103022 \item DELPHI 2002-052 CONF 586 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent Measurements of the mean charged multiplicities separately for $b\bar b$, $c\bar c$ and light quark ($uds$) initiated events in $e^+e^-$ interactions at energies above the $Z^0$ mass. In addition to the energy points in the original paper one additional point at 206 GeV is included from a later preliminary result. \clearpage \clearpage \typeout{Handling analysis DELPHI_2002_069_CONF_603}\subsection{DELPHI\_2002\_069\_CONF\_603} \textbf{Study of the b-quark fragmentation function at LEP 1}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} DELPHI (LEP 1)\newline \textbf{Status:} PRELIMINARY\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item DELPHI note 2002-069-CONF-603 (ICHEP 2002) \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent Measurement of the $b$-quark fragmentation function by DELPHI using 1994 LEP 1 data. The fragmentation function for both weakly decaying and primary $b$-quarks has been determined in a model independent way. Nevertheless the authors trust $f(x_B^\text{weak})$ more than $f(x_B^\text{prim})$. \clearpage \clearpage \typeout{Handling analysis JADE_OPAL_2000_S4300807}\subsection[JADE\_OPAL\_2000\_S4300807]{JADE\_OPAL\_2000\_S4300807\,\cite{Pfeifenschneider:1999rz}} \textbf{Jet rates in $e^+e^-$ at JADE [35--44 GeV] and OPAL [91--189 GeV].}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (17.5, 17.5), (22.0, 22.0), (45.6, 45.6), (66.5, 66.5), (80.5, 80.5), (86.0, 86.0), (91.5, 91.5), (94.5, 94.5) GeV \newline \textbf{Experiment:} JADE_OPAL (PETRA and LEP)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4300807}{4300807}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Eur.Phys.J.C17:19-51,2000 \item arXiv: \href{http://arxiv.org/abs/hep-ex/0001055}{hep-ex/0001055} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^+ e^- \to$ jet jet (+ jets)\end{itemize} \noindent Differential and integrated jet rates for Durham and JADE jet algorithms. \clearpage \clearpage \typeout{Handling analysis OPAL_1993_S2692198}\subsection[OPAL\_1993\_S2692198]{OPAL\_1993\_S2692198\,\cite{Acton:1992jk}} \textbf{Measurement of photon production at LEP 1}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} OPAL (LEP Run 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+2692198}{2692198}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Z.Phys.C58:405-418,1993 \item DOI: \href{http://dx.doi.org/10.1007/BF01557697}{10.1007/BF01557697} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^+ e^- \to$ jet jet (+ photons)\end{itemize} \noindent Measurement of the production of photons in $e^+ e^-\to q \bar q$ events at LEP 1. \clearpage \clearpage \typeout{Handling analysis OPAL_1994_S2927284}\subsection[OPAL\_1994\_S2927284]{OPAL\_1994\_S2927284\,\cite{Akers:1994ez}} \textbf{Measurement of the production rates of charged hadrons in $e^+e^-$ annihilation at the $Z^0$}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} OPAL (LEP 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+2927284}{2927284}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Z.Phys.C63:181-196,1994 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent The inclusive production rates of $\pi^\pm$, $K^\pm$ and $p\bar{p}$ in $Z^0$ decays measured using the OPAL detector at LEP. Only the differential cross sections are currently implemented. \clearpage \clearpage \typeout{Handling analysis OPAL_1995_S3198391}\subsection[OPAL\_1995\_S3198391]{OPAL\_1995\_S3198391\,\cite{Alexander:1995gq}} \textbf{$\Delta^{++}$ Production in Hadronic $Z^0$ Decays}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} OPAL (LEP 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+3198391}{3198391}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Lett.B358:162-172,1995 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent The production of $\Delta^{++}$ baryons measured using 3.5 millon $Z^0$ events by the OPAL experiment at LEP. Only the fragmentation function is implemented. \clearpage \clearpage \typeout{Handling analysis OPAL_1996_S3257789}\subsection[OPAL\_1996\_S3257789]{OPAL\_1996\_S3257789\,\cite{Alexander:1995qb}} \textbf{$J/\psi$ and $\psi^\prime$ Production in Hadronic $Z^0$ Decays}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} OPAL (LEP 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+3257789}{3257789}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Z.Phys. C70 (1996) 197-210 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent The production of $J/\psi$ and $\psi^\prime$ mesons measured by the OPAL experiment at LEP. The fragmentation function for $J/\psi$ and the multiplicities of $J/\psi$ and $\psi^\prime$ are included. \clearpage \clearpage \typeout{Handling analysis OPAL_1997_S3396100}\subsection[OPAL\_1997\_S3396100]{OPAL\_1997\_S3396100\,\cite{Alexander:1996qj}} \textbf{Strange baryon production in $Z$ hadronic decays at OPAL}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} OPAL (LEP 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+3396100}{3396100}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Z. Phys. C, 73, 569--586 (1997) \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent Measurement of the $\Xi^-$, $\Lambda^0$, $\Sigma^+(1385)$, $\Sigma^-(1385)$, $\Xi^0(1530)$ and $\Lambda^0(1520)$ scaled momentum distributions by OPAL at LEP 1. The paper also has the production cross-sections of these particles, but that is not implemented in Rivet. \clearpage \clearpage \typeout{Handling analysis OPAL_1997_S3608263}\subsection[OPAL\_1997\_S3608263]{OPAL\_1997\_S3608263\,\cite{Ackerstaff:1997kj}} \textbf{$K^{*0}$ meson production measured by OPAL at LEP 1.}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} OPAL (LEP 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+3608263}{3608263}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Lett.B412:210-224,1997 \item hep-ex/9708022 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent The $K^{*0}$ fragmentation function has been measured in hadronic $Z^0$ decays. In addition the helicity density matrix elements for inclusive $K^*(892)^0$ mesons from hadronic $Z^0$ decays have been measured over the full range of $K^{*0}$ momentum using data taken with the OPAL experiment at LEP. Only the fragmentation function measurement is currently implemented. \clearpage \clearpage \typeout{Handling analysis OPAL_1998_S3702294}\subsection[OPAL\_1998\_S3702294]{OPAL\_1998\_S3702294\,\cite{Ackerstaff:1998ue}} \textbf{Production of $f_0(980)$, $f_2(1270)$ and $\phi(1020)$ in hadronic $Z^0$ decay}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} OPAL (LEP 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+3702294}{3702294}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Eur.Phys.J.C4:19-28,1998 \item hep-ex/9802013 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent Inclusive production of the $f_0(980)$, $f_2(1270)$ and $\phi(1020)$ resonances studied in a sample of 4.3 million hadronic $Z^0$ decays from the OPAL experiment at LEP. Fragmentation functions are reported for the three states. \clearpage \clearpage \typeout{Handling analysis OPAL_1998_S3749908}\subsection[OPAL\_1998\_S3749908]{OPAL\_1998\_S3749908\,\cite{Ackerstaff:1998ap}} \textbf{Photon and Light Meson Production in Hadronic $Z^0$ Decays}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} OPAL (LEP 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+3749908}{3749908}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Eur.Phys.J.C5:411-437,1998 \item hep-ex/9805011 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent The inclusive production rates and differential cross sections of photons and mesons with a final state containing photons have been measured with the OPAL detector at LEP. The light mesons covered by the measurements are the $\pi^0$, $\eta$, $\rho(770)^\pm$, $\omega(782)$, $\eta'(958)$ and $a_0(980)^\pm$. \clearpage \clearpage \typeout{Handling analysis OPAL_1998_S3780481}\subsection[OPAL\_1998\_S3780481]{OPAL\_1998\_S3780481\,\cite{Ackerstaff:1998hz}} \textbf{Measurements of flavor dependent fragmentation functions in $Z^0 \ensuremath{\to} q \bar{q}$ events}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} OPAL (LEP 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+3780481}{3780481}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Eur. Phys. J, C7, 369--381 (1999) \item hep-ex/9807004 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent Measurement of scaled momentum distributions and total charged multiplicities in flavour tagged events at LEP 1. OPAL measured these observables in uds-, c-, and b-events separately. An inclusive measurement is also included. \clearpage \clearpage \typeout{Handling analysis OPAL_2000_S4418603}\subsection[OPAL\_2000\_S4418603]{OPAL\_2000\_S4418603\,\cite{Abbiendi:2000cv}} \textbf{Multiplicities of $\pi^0$, $\eta$, $K^0$ and of charged particles in quark and gluon jets}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} OPAL (LEP 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4418603}{4418603}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Eur.Phys.J.C17:373-387,2000 \item hep-ex/0007017 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent Multiplicities of $\pi^0$, $\eta$, $K^0$ and of charged particles in quark and gluon jets in 3-jet events, as measured by the OPAL experiment at LEP. The main implemented measurement is the $K^0$ fragmentation function. \clearpage \clearpage \typeout{Handling analysis OPAL_2001_S4553896}\subsection[OPAL\_2001\_S4553896]{OPAL\_2001\_S4553896\,\cite{Abbiendi:2001qn}} \textbf{Four-jet angles using Durham algorithm}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} OPAL (LEP Run 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4553896}{4553896}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Eur.Phys.J.C20:601-615,2001 \item DOI: \href{http://dx.doi.org/10.1007/s100520100699}{10.1007/s100520100699} \item arXiv: \href{http://arxiv.org/abs/hep-ex/0101044}{hep-ex/0101044} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV) Hadronisation should be turned off because the data is corrected back to the parton level.\end{itemize} \noindent Angles between the leading (in energy) four jets defined using the Durham algorithm with $y_\mathrm{cut}=0.008$. The data is presented at the parton level and includes the Bengtsson-Zerwas, Korner-Schierholz-Willrodt and Nachtmann-Reiter angles as well as the angle between the two softest jets. \clearpage \clearpage \typeout{Handling analysis OPAL_2002_S5361494}\subsection[OPAL\_2002\_S5361494]{OPAL\_2002\_S5361494\,\cite{Abbiendi:2002vn}} \textbf{Charged particle multiplicities in heavy and light quark initiated events above the $Z^0$ peak}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (65.0, 65.0), (68.0, 68.0), (80.5, 80.5), (86.0, 86.0), (91.5, 91.5), (94.5, 94.5), (96.0, 96.0), (98.0, 98.0), (100.0, 100.0), (101.0, 101.0), (103.0, 103.0) GeV \newline \textbf{Experiment:} OPAL (LEP 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+5361494}{5361494}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Lett. B550 (2002) 33-46 \item hep-ex/0211007 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent Measurements of the mean charged multiplicities separately for $b\bar b$, $c\bar c$ and light quark ($uds$) initiated events in $e^+e^-$ interactions at energies above the $Z^0$ mass. The data is from the LEP running periods between 1995 and 2000. \clearpage \clearpage \typeout{Handling analysis OPAL_2004_S6132243}\subsection[OPAL\_2004\_S6132243]{OPAL\_2004\_S6132243\,\cite{Abbiendi:2004qz}} \textbf{Event shape distributions and moments in $e^+ e^-$ \ensuremath{\to} hadrons at 91--209 GeV}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6), (66.5, 66.5), (88.5, 88.5), (98.5, 98.5) GeV \newline \textbf{Experiment:} OPAL (LEP 1 \& 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+6132243}{6132243}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Eur.Phys.J.C40:287-316,2005 \item hep-ex/0503051 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic $e^+ e^-$ events at 4 representative energies (91, 133, 177, 197). Runs need to have ISR suppressed, since the analysis was done using a cut of $\sqrt{s} - \sqrt{s_\text{reco}} < 1\,\text{GeV}$. Particles with a livetime $> 3 \cdot 10^{-10}\,\text{s}$ are considered to be stable.\end{itemize} \noindent Measurement of $e^+ e^-$ event shape variable distributions and their 1st to 5th moments in LEP running from the Z pole to the highest LEP 2 energy of 209 GeV. \clearpage \clearpage \typeout{Handling analysis SLD_1996_S3398250}\subsection[SLD\_1996\_S3398250]{SLD\_1996\_S3398250\,\cite{Abe:1996zi}} \textbf{Charged particle multiplicities in heavy and light quark initiated events on the $Z^0$ peak}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} SLD (SLC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+3398250}{3398250}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Lett.B386:475-485,1996 \item hep-ex/9608008 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent Measurements of the mean charged multiplicities separately for $b\bar b$, $c\bar c$ and light quark ($uds$) initiated events in $e^+e^-$ interactions at the $Z^0$ mass. \clearpage \clearpage \typeout{Handling analysis SLD_1999_S3743934}\subsection[SLD\_1999\_S3743934]{SLD\_1999\_S3743934\,\cite{Abe:1998zs}} \textbf{Production of $\pi^+$, $K^+$, $K^0$, $K^{*0}$, $\Phi$, $p$ and $\Lambda^0$ in hadronic $Z^0$ decay}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} SLD (SLC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+3743934}{3743934}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D59:052001,1999 \item hep-ex/9805029 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent Measurement of scaled momentum distributions and fragmentation functions in flavour tagged events at SLC. SLD measured these observables in uds-, c-, and b-events separately. An inclusive measurement is also included. \clearpage \clearpage \typeout{Handling analysis SLD_2002_S4869273}\subsection[SLD\_2002\_S4869273]{SLD\_2002\_S4869273\,\cite{Abe:2002iq}} \textbf{Measurement of the b-quark fragmentation function in $Z^0$ decays}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} SLD (SLC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4869273}{4869273}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys. Rev.D65:092006,2002 \item hep-ex/0202031 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent Measurement of the $b$-quark fragmentation function by SLC. The fragmentation function for weakly decaying $b$-quarks has been measured. \clearpage \clearpage \typeout{Handling analysis SLD_2004_S5693039}\subsection[SLD\_2004\_S5693039]{SLD\_2004\_S5693039\,\cite{Abe:2003iy}} \textbf{Production of $\pi^+$, $\pi^-$, $K^+$, $K^-$, $p$ and $\bar p$ in Light ($uds$), $c$ and $b$ Jets from Z Decays}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (45.6, 45.6) GeV \newline \textbf{Experiment:} SLD (SLC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+5693039}{5693039}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D69:072003,2004 \item hep-ex/0310017 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic Z decay events generated on the Z pole (\ensuremath{\sqrt{s}} = 91.2 GeV)\end{itemize} \noindent Measurements of the differential production rates of stable charged particles in hadronic $Z^0$ decays, and of charged pions, kaons and protons identified over a wide momentum range. In addition to flavour-inclusive $Z^0$ decays, measurements are made for $Z^0$ decays into light ($u$, $d$, $s$), $c$ and $b$ primary flavors. \clearpage \section{Tevatron analyses}\typeout{Handling analysis CDF_1988_S1865951}\subsection[CDF\_1988\_S1865951]{CDF\_1988\_S1865951\,\cite{Abe:1988yu}} \textbf{CDF transverse momentum distributions at 630 GeV and 1800 GeV.}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (315.0, 315.0), (900.0, 900.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run I)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+1865951}{1865951}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Christophe Vaillant $\langle\,$\href{mailto:c.l.j.j.vaillant@durham.ac.uk}{c.l.j.j.vaillant@durham.ac.uk}$\,\rangle$ \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.Lett.61:1819,1988 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevLett.61.1819}{10.1103/PhysRevLett.61.1819} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD min bias events at \ensuremath{\sqrt{s}} = 630 GeV and 1800 GeV, $|\eta| < 1.0$.\end{itemize} \noindent Transverse momentum distributions at 630 GeV and 1800 GeV based on data from the CDF experiment at the Tevatron collider. \clearpage \clearpage \typeout{Handling analysis CDF_1990_S2089246}\subsection[CDF\_1990\_S2089246]{CDF\_1990\_S2089246\,\cite{Abe:1989td}} \textbf{CDF pseudorapidity distributions at 630 and 1800 GeV}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (315.0, 315.0), (900.0, 900.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 0)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+2089246}{2089246}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D41:2330,1990 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevD.41.2330}{10.1103/PhysRevD.41.2330} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD min bias events at \ensuremath{\sqrt{s}} = 630 and 1800 GeV. Particles with $c \tau > 10$mm should be set stable.\end{itemize} \noindent Pseudorapidity distributions based on the CDF 630 and 1800 GeV runs from 1987. All data is detector corrected. The data confirms the UA5 measurement of a $\d{N}/\d{\eta}$ rise with energy faster than $\ln{\sqrt{s}}$, and as such this analysis is important for constraining the energy evolution of minimum bias and underlying event characteristics in MC simulations. \clearpage \clearpage \typeout{Handling analysis CDF_1994_S2952106}\subsection[CDF\_1994\_S2952106]{CDF\_1994\_S2952106\,\cite{Abe:1994nj}} \textbf{CDF Run I color coherence analysis.}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (900.0, 900.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+2952106}{2952106}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Lars Sonnenschein $\langle\,$\href{mailto:Lars.Sonnenschein@cern.ch}{Lars.Sonnenschein@cern.ch}$\,\rangle$ \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D50,5562,1994 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevD.50.5562}{10.1103/PhysRevD.50.5562} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD events at \ensuremath{\sqrt{s}} = 1800 GeV. Leading jet \pTmin = 100 GeV.\end{itemize} \noindent CDF Run I color coherence analysis. Events with $\ge 3$ jets are selected and Et distributions of the three highest-\pT jets are obtained. The plotted quantities are the $\Delta{R}$ between the 2nd and 3rd leading jets in the \pT and pseudorapidity of the 3rd jet, and $\alpha = \mathrm{d}{\eta}/\mathrm{d}{\phi}$, where $\mathrm{d}{\eta}$ is the pseudorapidity difference between the 2nd and 3rd jets and $\mathrm{d}{\phi}$ is their azimuthal angle difference. Since the data has not been detector-corrected, a bin by bin correction is applied, based on the distributions with ideal and CDF simulation as given in the publication. \clearpage \clearpage \typeout{Handling analysis CDF_1996_S3418421}\subsection[CDF\_1996\_S3418421]{CDF\_1996\_S3418421\,\cite{Abe:1996mj}} \textbf{Dijet angular distributions}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (900.0, 900.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+3418421}{3418421}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.Lett.77:5336-5341,1996 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevLett.77.5336}{10.1103/PhysRevLett.77.5336} \item arXiv: \href{http://arxiv.org/abs/hep-ex/9609011}{hep-ex/9609011} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD dijet events at Tevatron $\sqrt{s}=1.8$ TeV without MPI.\end{itemize} \noindent Measurement of jet angular distributions in events with two jets in the final state in 5 bins of dijet invariant mass. Based on $106 \mathrm{pb}^{-1}$ \clearpage \clearpage \typeout{Handling analysis CDF_1998_S3618439}\subsection[CDF\_1998\_S3618439]{CDF\_1998\_S3618439\,\cite{Abe:1997eua}} \textbf{Differential cross-section for events with large total transverse energy}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (900.0, 900.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+3618439}{3618439}\newline \textbf{Status:} UNVALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.Lett.80:3461-3466,1998 \item 10.1103/PhysRevLett.80.3461 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD events at Tevatron with $\sqrt{s}=1.8$ TeV without MPI.\end{itemize} \noindent Measurement of the differential cross section $\mathrm{d}\sigma/\mathrm{d}E_\perp^j$ for the production of multijet events in $p\bar{p}$ collisions where the sum is over all jets with transverse energy $E_\perp^j > E_\perp^\mathrm{min}$. \clearpage \clearpage \typeout{Handling analysis CDF_2000_S4155203}\subsection[CDF\_2000\_S4155203]{CDF\_2000\_S4155203\,\cite{Affolder:1999jh}} \textbf{Z \pT measurement in CDF Z \ensuremath{\to} $e^+e^-$ events}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (900.0, 900.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4155203}{4155203}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.Lett.84:845-850,2000 \item arXiv: \href{http://arxiv.org/abs/hep-ex/0001021}{hep-ex/0001021} \item DOI: \href{http://dx.doi.org/10.1103/PhysRevLett.84.845}{10.1103/PhysRevLett.84.845} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p\bar{p}$ collisions at 1800 GeV. $Z/\gamma^*$ Drell-Yan events with $e^+e^-$ decay mode only. Restrict $Z/\gamma^*$ mass range to roughly $50~\text{GeV}/c^2 < m_{ee} < 120~\text{GeV}/c^2$ for efficiency.\end{itemize} \noindent Measurement of transverse momentum and total cross section of $e^+e^-$ pairs in the Z-boson region of $66~\text{GeV}/c^2 < m_{ee} < 116~\text{GeV}/c^2$ from pbar-p collisions at \ensuremath{\sqrt{s}} = 1.8 TeV, with the Tevatron CDF detector. The Z \pT, in a fully-factorised picture, is generated by the momentum balance against initial state radiation (ISR) and the primordial/intrinsic \pT of the Z's parent partons in the incoming hadrons. The Z \pT is important in generator tuning to fix the interplay of ISR and multi-parton interactions (MPI) ingenerating `underlying event' activity. This analysis is subject to ambiguities in the experimental Z \pT definition, since the Rivet implementation reconstructs the Z momentum from the dilepton pair with finite cones for QED bremstrahlung summation, rather than non-portable direct use of the (sometimes absent) Z in the event record. \clearpage \clearpage \typeout{Handling analysis CDF_2000_S4266730}\subsection[CDF\_2000\_S4266730]{CDF\_2000\_S4266730\,\cite{Affolder:1999ua}} \textbf{Differential Dijet Mass Cross Section}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (900.0, 900.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4266730}{4266730}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D61:091101,2000 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevD.61.091101}{10.1103/PhysRevD.61.091101} \item arXiv: \href{http://arxiv.org/abs/hep-ex/9912022}{hep-ex/9912022} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Dijet events at Tevatron with $\sqrt{s}=1.8$ TeV\end{itemize} \noindent Measurement of the cross section for production of two or more jets as a function of dijet mass in the range 180 to 1000 GeV. It is based on an integrated luminosity of $86 \mathrm{pb}^{-1}$. \clearpage \clearpage \typeout{Handling analysis CDF_2001_S4517016}\subsection[CDF\_2001\_S4517016]{CDF\_2001\_S4517016\,\cite{Affolder:2000ew}} \textbf{Two jet triply-differential cross-section}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (900.0, 900.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4517016}{4517016}\newline \textbf{Status:} UNVALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D64:012001,2001 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevD.64.012001}{10.1103/PhysRevD.64.012001} \item arXiv: \href{http://arxiv.org/abs/hep-ex/0012013}{hep-ex/0012013} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Dijet events at Tevatron with $\sqrt{s}=1.8$ TeV\end{itemize} \noindent A measurement of the two-jet differential cross section, $\mathrm{d}^3\sigma/\mathrm{d}E_T \, \mathrm{d}\eta_1 \, \mathrm{d}\eta_2$, based on an integrated luminosity of $86 \mathrm{pb}^{-1}$. The differential cross section is measured as a function of the transverse energy, $E_\perp$, of a jet in the pseudorapidity region $0.1 < |\eta_1| < 0.7$ for four different pseudorapidity bins of a second jet restricted to $0.1 < |\eta_2| < 3.0$. \clearpage \clearpage \typeout{Handling analysis CDF_2001_S4563131}\subsection[CDF\_2001\_S4563131]{CDF\_2001\_S4563131\,\cite{Affolder:2001fa}} \textbf{Inclusive jet cross section}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (900.0, 900.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4563131}{4563131}\newline \textbf{Status:} UNVALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D64:032001,2001 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevD.64.032001}{10.1103/PhysRevD.64.032001} \item arXiv: \href{http://arxiv.org/abs/hep-ph/0102074}{hep-ph/0102074} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Dijet events at Tevatron with $\sqrt{s}=1.8$ TeV\end{itemize} \noindent Measurement of the inclusive jet cross section for jet transverse energies from 40 to 465 GeV in the pseudo-rapidity range $0.1<|\eta|<0.7$. The results are based on 87 $\mathrm{pb}^{-1}$ of data. \clearpage \clearpage \typeout{Handling analysis CDF_2001_S4751469}\subsection[CDF\_2001\_S4751469]{CDF\_2001\_S4751469\,\cite{Affolder:2001xt}} \textbf{Field \& Stuart Run I underlying event analysis.}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (900.0, 900.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4751469}{4751469}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D65:092002,2002 \item FNAL-PUB 01/211-E \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p\bar{p}$ QCD interactions at 1800 GeV. The leading jet is binned from 0--49 GeV, and histos can usually can be filled with a single generator run without kinematic sub-samples.\end{itemize} \noindent The original CDF underlying event analysis, based on decomposing each event into a transverse structure with ``toward'', ``away'' and ``transverse'' regions defined relative to the azimuthal direction of the leading jet in the event. Since the toward region is by definition dominated by the hard process, as is the away region by momentum balance in the matrix element, the transverse region is most sensitive to multi-parton interactions. The transverse regions occupy $|\phi| \in [60\degree, 120\degree]$ for $|\eta| < 1$. The \pT ranges for the leading jet are divided experimentally into the `min-bias' sample from 0--20 GeV, and the `JET20' sample from 18--49 GeV. \clearpage \clearpage \typeout{Handling analysis CDF_2002_S4796047}\subsection[CDF\_2002\_S4796047]{CDF\_2002\_S4796047\,\cite{Acosta:2001rm}} \textbf{CDF Run 1 charged multiplicity measurement}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (315.0, 315.0), (900.0, 900.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4796047}{4796047}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D65:072005,2002 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevD.65.072005}{10.1103/PhysRevD.65.072005} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD events at \ensuremath{\sqrt{s}} = 630 and 1800 GeV.\end{itemize} \noindent A study of $p\bar{p}$ collisions at \ensuremath{\sqrt{s}} = 1800 and 630 GeV collected using a minimum bias trigger in which the data set is divided into two classes corresponding to `soft' and `hard' interactions. For each subsample, the analysis includes measurements of the multiplicity, transverse momentum (\pT) spectra, and the average \pT and event-by-event \pT dispersion as a function of multiplicity. A comparison of results shows distinct differences in the behavior of the two samples as a function of the center of mass energy. The properties of the soft sample are invariant as a function of c.m. energy. It should be noticed that minimum bias tunings of PYTHIA made by ATLAS in early 2010, which used this among all other available data from CDF and from ATLAS at 900~GeV and 7~TeV, found an unavoidable tension between this data and the rest. Accordingly, this data was excluded from the fits. Whether this reflects a problem with this dataset or with the PYTHIA MPI model is a judgement for users to make! \clearpage \clearpage \typeout{Handling analysis CDF_2004_S5839831}\subsection[CDF\_2004\_S5839831]{CDF\_2004\_S5839831\,\cite{Acosta:2004wqa}} \textbf{Transverse cone and `Swiss cheese' underlying event studies}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (315.0, 315.0), (900.0, 900.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+5839831}{5839831}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys. Rev. D70, 072002 (2004) \item arXiv: \href{http://arxiv.org/abs/hep-ex/0404004}{hep-ex/0404004} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD events at \ensuremath{\sqrt{s}} = 630 \& 1800 GeV. Several \pTmin cutoffs are probably required to fill the profile histograms, e.g. 0 (min bias), 30, 90, 150 GeV at 1800 GeV, and 0 (min bias), 20, 90, 150 GeV at 630 GeV.\end{itemize} \noindent This analysis studies the underlying event via transverse cones of $R = 0.7$ at 90 degrees in \phi relative to the leading (highest E) jet, at \ensuremath{\sqrt{s}} = 630 and 1800 GeV. This is similar to the 2001 CDF UE analysis, except that cones, rather than the whole central \eta range are used. The transverse cones are categorised as TransMIN and TransMAX on an event-by-event basis, to give greater sensitivity to the UE component. `Swiss Cheese' distributions, where cones around the leading $n$ jets are excluded from the distributions, are also included for $n = 2, 3$. This analysis is useful for constraining the energy evolution of the underlying event, since it performs the same analyses at two distinct CoM energies. WARNING! The \pT plots are normalised to raw number of events. The min bias data have not been reproduced by MC, and are not recommended for tuning. \clearpage \clearpage \typeout{Handling analysis CDF_2005_S6080774}\subsection[CDF\_2005\_S6080774]{CDF\_2005\_S6080774\,\cite{Acosta:2004sn}} \textbf{Differential cross sections for prompt diphoton production}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+6080774}{6080774}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys. Rev. Lett. 95, 022003 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevLett.95.022003}{10.1103/PhysRevLett.95.022003} \item arXiv: \href{http://arxiv.org/abs/hep-ex/0412050}{hep-ex/0412050} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p \bar{p} \to \gamma \gamma$ [+ jets] at 1960 GeV. The analysis uses photons with \pT larger then 13 GeV. To allow for shifts in the shower, the ME cut on the transverse photon momentum shouldn't be too hard, e.g. 5 GeV.\end{itemize} \noindent Measurement of the cross section of prompt diphoton production in $p\bar{p}$ collisions at $\sqrt{s} = 1.96$ TeV using a data sample of 207~pb$^{-1}$ as a function of the diphoton mass, the transverse momentum of the diphoton system, and the azimuthal angle between the two photons. \clearpage \clearpage \typeout{Handling analysis CDF_2005_S6217184}\subsection[CDF\_2005\_S6217184]{CDF\_2005\_S6217184\,\cite{Acosta:2005ix}} \textbf{CDF Run II jet shape analysis}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+6217184}{6217184}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Lars Sonnenschein $\langle\,$\href{mailto:Lars.Sonnenschein@cern.ch}{Lars.Sonnenschein@cern.ch}$\,\rangle$ \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D71:112002,2005 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevD.71.112002}{10.1103/PhysRevD.71.112002} \item arXiv: \href{http://arxiv.org/abs/hep-ex/0505013}{hep-ex/0505013} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD events at \ensuremath{\sqrt{s}} = 1960 GeV. Jet \pTmin in plots is 37 GeV/c --- choose generator min \pT somewhere well below this.\end{itemize} \noindent Measurement of jet shapes in inclusive jet production in p pbar collisions at center-of-mass energy \ensuremath{\sqrt{s}} = 1.96 TeV. The data cover jet transverse momenta from 37--380 GeV and absolute jet rapidities in the range 0.1--0.7. \clearpage \clearpage \typeout{Handling analysis CDF_2006_S6450792}\subsection[CDF\_2006\_S6450792]{CDF\_2006\_S6450792\,\cite{Abulencia:2005yg}} \textbf{Inclusive jet cross section differential in \pT}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+6450792}{6450792}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D74:071103,2006 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevD.74.071103}{10.1103/PhysRevD.74.071103} \item arXiv: \href{http://arxiv.org/abs/hep-ex/0512020}{hep-ex/0512020} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p\bar{p}$ \ensuremath{\to} jets at 1960 GeV\end{itemize} \noindent Measurement of the inclusive jet cross section in ppbar interactions at $\sqrt{s}=1.96$ TeV using 385 $\mathrm{pb}^{-1}$ of data. The data cover the jet transverse momentum range from 61 to 620 GeV/c in $0.1 < |y| < 0.7$. This analysis has been updated with more data in more rapidity bins in CDF_2008_S7828950. \clearpage \clearpage \typeout{Handling analysis CDF_2006_S6653332}\subsection[CDF\_2006\_S6653332]{CDF\_2006\_S6653332\,\cite{Abulencia:2006ce}} \textbf{b-jet cross section in Z + jets events}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+6653332}{6653332}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Lars Sonnenschein $\langle\,$\href{mailto:Lars.Sonnenschein@cern.ch}{Lars.Sonnenschein@cern.ch}$\,\rangle$ \item Steffen Schumann <s.schumann(at)thphys.uni-heidelberg.de> \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D.74:032008,2006 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevD.74.032008}{10.1103/PhysRevD.74.032008} \item arXiv: \href{http://arxiv.org/abs/hep-ex/0605099v2}{hep-ex/0605099v2} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Z + jets events at \ensuremath{\sqrt{s}} = 1960 GeV. Jets min \pT cut = 20~GeV, leptons min \pT cut = 10~GeV\end{itemize} \noindent Measurement of the $b$-jet cross section in events with $Z$ boson in $p\bar{p}$ collisions at center-of-mass energy \ensuremath{\sqrt{s}} = 1.96 TeV. The data cover jet transverse momenta above 20 GeV and jet pseudorapidities in the range -1.5 to 1.5. $Z$ bosons are identified in their electron and muon decay modes in an invariant dilepton mass range between 66 and 116 GeV. \clearpage \clearpage \typeout{Handling analysis CDF_2007_S7057202}\subsection[CDF\_2007\_S7057202]{CDF\_2007\_S7057202\,\cite{Abulencia:2007ez}} \textbf{CDF Run II inclusive jet cross-section using the kT algorithm}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+7057202}{7057202}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item David Voong \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D75:092006,2007 \item Erratum-ibid.D75:119901,2007 \item FNAL-PUB 07/026-E \item hep-ex/0701051 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item p-pbar collisions at 1960~GeV. Jet \pT bins from 54~GeV to 700~GeV. Jet rapidity $< |2.1|$.\end{itemize} \noindent CDF Run II measurement of inclusive jet cross sections at a p-pbar collision energy of 1.96~TeV. Jets are reconstructed in the central part of the detector ($|y|<2.1$) using the kT algorithm with an $R$ parameter of 0.7. The minimum jet \pT considered is 54~GeV, with a maximum around 700~GeV. The inclusive jet \pT is plotted in bins of rapidity $|y|<0.1$, $0.1<|y|<0.7$, $0.7<|y|<1.1$, $1.1<|y|<1.6$ and $1.6<|y|<2.1$. \clearpage \clearpage \typeout{Handling analysis CDF_2008_LEADINGJETS}\subsection{CDF\_2008\_LEADINGJETS} \textbf{CDF Run 2 underlying event in leading jet events}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+NONE}{NONE}\newline \textbf{Status:} OBSOLETE\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $p\bar{p}$ QCD interactions at 1960~GeV. Particles with $c \tau > {}$10 mm should be set stable. Several $p_\perp^\text{min}$ cutoffs are probably required to fill the profile histograms. $p_\perp^\text{min} = {}$ 0 (min bias), 10, 20, 50, 100, 150 GeV. The corresponding merging points are at $p_T = $ 0, 30, 50, 80, 130, 180 GeV\end{itemize} \noindent Rick Field's measurement of the underlying event in leading jet events. If the leading jet of the event is within $|\eta| < 2$, the event is accepted and ``toward'', ``away'' and ``transverse'' regions are defined in the same way as in the original (2001) CDF underlying event analysis. The leading jet defines the $\phi$ direction of the toward region. The transverse regions are most sensitive to the underlying event. \clearpage \clearpage \typeout{Handling analysis CDF_2008_NOTE_9351}\subsection{CDF\_2008\_NOTE\_9351} \textbf{CDF Run 2 underlying event in Drell-Yan}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+NONE}{NONE}\newline \textbf{Status:} OBSOLETE\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item CDF public note 9351 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item ppbar collisions at 1960 GeV. \item Drell-Yan events with $Z/\gamma* \ensuremath{\to} e e$ and $Z/\gamma* \ensuremath{\to} \mu\mu$. \item A mass cut $m_{ll} > 70~\text{GeV}$ can be applied on generator level. \item Particles with $c \tau > 10~\text{mm}$ should be set stable.\end{itemize} \noindent Deepak Kar and Rick Field's measurement of the underlying event in Drell-Yan events. $Z \ensuremath{\to} ee$ and $Z \ensuremath{\to} \mu\mu$ events are selected using a $Z$ mass window cut between 70 and 110~GeV. ``Toward'', ``away'' and ``transverse'' regions are defined in the same way as in the original (2001) CDF underlying event analysis. The reconstructed $Z$ defines the $\phi$ direction of the toward region. The leptons are ignored after the $Z$ has been reconstructed. Thus the region most sensitive to the underlying event is the toward region (the recoil jet is boosted into the away region). \clearpage \clearpage \typeout{Handling analysis CDF_2008_S7540469}\subsection[CDF\_2008\_S7540469]{CDF\_2008\_S7540469\,\cite{:2007cp}} \textbf{Measurement of differential Z/$\gamma^*$ + jet + X cross sections}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+7540469}{7540469}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.Lett.100:102001,2008 \item arXiv: \href{http://arxiv.org/abs/0711.3717}{0711.3717} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p \bar{p} \to e^+ e^-$ + jets at 1960 GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $66 < m_{ee} < 116$\end{itemize} \noindent Cross sections as a function of jet transverse momentum in 1 and 2 jet events, and jet multiplicity in ppbar collisions at \ensuremath{\sqrt{s}} = 1.96 TeV, based on an integrated luminosity of $1.7~\text{fb}^{-1}$. The measurements cover the rapidity region $|y_\text{jet}| < 2.1$ and the transverse momentum range $\pT^\text{jet} > 30~\text{GeV}/c$. \clearpage \clearpage \typeout{Handling analysis CDF_2008_S7828950}\subsection[CDF\_2008\_S7828950]{CDF\_2008\_S7828950\,\cite{Aaltonen:2008eq}} \textbf{CDF Run II inclusive jet cross-section using the Midpoint algorithm}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+7828950}{7828950}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Craig Group $\langle\,$\href{mailto:group@fnal.gov}{group@fnal.gov}$\,\rangle$ \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/0807.2204}{0807.2204} \item Phys.Rev.D78:052006,2008 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Requires $2\rightarrow{2}$ QCD scattering processes. The minimum jet $E_\perp$ is 62 GeV, so a cut on kinematic \pTmin may be required for good statistics.\end{itemize} \noindent Measurement of the inclusive jet cross section in $p\bar{p}$ collisions at $\sqrt{s}=1.96$ TeV as a function of jet $E_\perp$, for $E_\perp >$ 62 GeV. The data is collected by the CDF II detector and has an integrated luminosity of 1.13 fb$^{-1}$. The measurement was made using the cone-based Midpoint jet clustering algorithm in rapidity bins within $|y|<2.1$. This measurement can be used to provide increased precision in PDFs at high parton momentum fraction $x$. \clearpage \clearpage \typeout{Handling analysis CDF_2008_S8093652}\subsection[CDF\_2008\_S8093652]{CDF\_2008\_S8093652\,\cite{Aaltonen:2008dn}} \textbf{Dijet mass spectrum}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8093652}{8093652}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/0812.4036}{0812.4036} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p \bar{p} \to$ jets at 1960 GeV\end{itemize} \noindent Dijet mass spectrum from 0.2 TeV to 1.4 TeV in $p \bar{p}$ collisions at $\sqrt{s} = 1.96$ TeV, based on an integrated luminosity of 1.13 fb$^{-1}$. \clearpage \clearpage \typeout{Handling analysis CDF_2008_S8095620}\subsection[CDF\_2008\_S8095620]{CDF\_2008\_S8095620\,\cite{Aaltonen:2008mt}} \textbf{CDF Run II Z+b-jet cross section paper, 2 fb-1}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8095620}{8095620}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Emily Nurse $\langle\,$\href{mailto:nurse@hep.ucl.ac.uk}{nurse@hep.ucl.ac.uk}$\,\rangle$ \item Steffen Schumann <s.schumann(at)thphys.uni-heidelberg.de> \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/0812.4458}{0812.4458} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Requires the process $p\bar{p} \rightarrow {Z} \rightarrow{\ell}\ell$, where $\ell$ is $e$ or $\mu$. Additional hard jets will also have to be included to get a good description.\end{itemize} \noindent Measurement of the b-jet production cross section for events containing a $Z$ boson produced in $p\bar{p}$ collisions at $\sqrt{s}=1.96$ TeV, using data corresponding to an integrated luminosity of 2 fb$^{-1}$ collected by the CDF II detector at the Tevatron. $Z$ bosons are selected in the electron and muon decay modes. Jets are considered with transverse energy $E_T>20$ GeV and pseudorapidity $|\eta|<1.5$. The ratio of the integrated $Z$ + b-jet cross section to the inclusive $Z$ production cross section is measured differentially in jet $E_T$, jet $\eta$, $Z$-boson transverse momentum, number of jets, and number of b-jets. The first two measurements have an entry for each b-jet in the event, the last three measurements have one entry per event. \clearpage \clearpage \typeout{Handling analysis CDF_2009_NOTE_9936}\subsection{CDF\_2009\_NOTE\_9936} \textbf{CDF Run 2 min bias charged multiplicity analysis}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+None}{None}\newline \textbf{Status:} PRELIMINARY\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Holger Schulz $\langle\,$\href{mailto:holger.schulz@physik.hu-berlin.de}{holger.schulz@physik.hu-berlin.de}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item CDF public note 9936 \item http://www-cdf.fnal.gov/physics/new/qcd/minbias_mult09/multpage.html \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p\bar{p}$ QCD interactions at 1960~GeV. Particles with $c \\tau > {}$10 mm should be set stable.\end{itemize} \noindent Niccolo Moggi's min bias analysis. Minimum bias events are used to measure the charged multiplicity distribution. The multiplicity distribution was not published in S8233977 but the numbers and a public note are available from the CDF website given above. Note: the systematic and statistical errors in Rivet were added in quadrature. \clearpage \clearpage \typeout{Handling analysis CDF_2009_S8233977}\subsection[CDF\_2009\_S8233977]{CDF\_2009\_S8233977\,\cite{Aaltonen:2009ne}} \textbf{CDF Run 2 min bias cross-section analysis}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8233977}{8233977}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \item Niccolo' Moggi $\langle\,$\href{mailto:niccolo.moggi@bo.infn.it}{niccolo.moggi@bo.infn.it}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D79:112005,2009 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevD.79.112005}{10.1103/PhysRevD.79.112005} \item arXiv: \href{http://arxiv.org/abs/0904.1098}{0904.1098} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p\bar{p}$ QCD interactions at 1960~GeV. Particles with $c \\tau > {}$10 mm should be set stable.\end{itemize} \noindent Niccolo Moggi's min bias analysis. Minimum bias events are used to measure the average track \pT vs. charged multiplicity, a track \pT distribution and an inclusive $\sum E_T$ distribution. \clearpage \clearpage \typeout{Handling analysis CDF_2009_S8383952}\subsection[CDF\_2009\_S8383952]{CDF\_2009\_S8383952\,\cite{Aaltonen:2009pc}} \textbf{Z rapidity measurement}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8383952}{8383952}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/0908.3914}{0908.3914} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p \bar{p} \to e^+ e^-$ + jets at 1960 GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $66 < m_{ee} < 116$ GeV\end{itemize} \noindent CDF measurement of the total cross section and rapidity distribution, $\mathrm{d}\sigma/\mathrm{d}y$, for $q\bar{q}\to \gamma^{*}/Z\to e^{+}e^{-}$ events in the $Z$ boson mass region ($66<M_{ee}<116$ GeV/c$^2$) produced in $p\bar{p}$ collisions at $\sqrt{s}=1.96$ TeV with 2.1 fb$^{-1}$ of integrated luminosity. \clearpage \clearpage \typeout{Handling analysis CDF_2009_S8436959}\subsection[CDF\_2009\_S8436959]{CDF\_2009\_S8436959\,\cite{Aaltonen:2009ty}} \textbf{Measurement of the inclusive isolated prompt photon cross-section}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8436959}{8436959}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/0910.3623}{0910.3623} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $\gamma$ + jet processes in ppbar collisions at $\sqrt{s} = 1960$~GeV. Minimum \pT cut on the photon in the analysis is 30~GeV.\end{itemize} \noindent A measurement of the cross section for the inclusive production of isolated photons. The measurement covers the pseudorapidity region $|\eta^\gamma|<1.0$ and the transverse energy range $E_T^\gamma>30$~GeV and is based on 2.5~fb$^{-1}$ of integrated luminosity. The cross section is measured differential in $E_\perp(\gamma)$. \clearpage \clearpage \typeout{Handling analysis CDF_2010_S8591881_DY}\subsection{CDF\_2010\_S8591881\_DY} \textbf{CDF Run 2 underlying event in Drell-Yan}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8591881}{8591881}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D82:034001,2010 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item ppbar collisions at 1960 GeV. \item Drell-Yan events with $Z/\gamma* \ensuremath{\to} e e$ and $Z/\gamma* \ensuremath{\to} \mu\mu$. \item A mass cut $m_{ll} > 70~\text{GeV}$ can be applied on generator level. \item Particles with $c \tau > 10~\text{mm}$ should be set stable.\end{itemize} \noindent Deepak Kar and Rick Field's measurement of the underlying event in Drell-Yan events. $Z \ensuremath{\to} ee$ and $Z \ensuremath{\to} \mu\mu$ events are selected using a $Z$ mass window cut between 70 and 110~GeV. ``Toward'', ``away'' and ``transverse'' regions are defined in the same way as in the original (2001) CDF underlying event analysis. The reconstructed $Z$ defines the $\phi$ direction of the toward region. The leptons are ignored after the $Z$ has been reconstructed. Thus the region most sensitive to the underlying event is the toward region (the recoil jet is boosted into the away region). \clearpage \clearpage \typeout{Handling analysis CDF_2010_S8591881_QCD}\subsection{CDF\_2010\_S8591881\_QCD} \textbf{CDF Run 2 underlying event in leading jet events}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8591881}{8591881}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D82:034001,2010 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p\bar{p}$ QCD interactions at 1960~GeV. Particles with $c \tau > {}$10 mm should be set stable. Several $p_\perp^\text{min}$ cutoffs are probably required to fill the profile histograms. $p_\perp^\text{min} = {}$ 0 (min bias), 10, 20, 50, 100, 150 GeV. The corresponding merging points are at $p_T = $ 0, 30, 50, 80, 130, 180 GeV\end{itemize} \noindent Rick Field's measurement of the underlying event in leading jet events. If the leading jet of the event is within $|\eta| < 2$, the event is accepted and ``toward'', ``away'' and ``transverse'' regions are defined in the same way as in the original (2001) CDF underlying event analysis. The leading jet defines the $\phi$ direction of the toward region. The transverse regions are most sensitive to the underlying event. \clearpage \clearpage \typeout{Handling analysis CDF_2012_NOTE10874}\subsection{CDF\_2012\_NOTE10874} \textbf{CDF energy scan underlying event analysis}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (150.0, 150.0), (450.0, 450.0), (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron energy scan)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Rick Field $\langle\,$\href{mailto:rfield@phys.ufl.edu}{rfield@phys.ufl.edu}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item CDF Note 10874 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p\bar{p}$ QCD interactions at 300, 900, and 1960~GeV. Particles with $c \tau > {}$10 mm should be set stable.\end{itemize} \noindent In this analysis the behavior of the underlying event in hard scattering proton-antiproton collisions at 300 GeV, 900 GeV, and 1.96 TeV is studied. The 300 GeV and 900 GeV data are a result of the Tevatron Energy Scan which was performed just before the Tevatron was shut down. The energy ratio histograms can be created from different runs with a merging script available in the Rivet bin directory. \clearpage \clearpage \typeout{Handling analysis D0_2000_S4480767}\subsection[D0\_2000\_S4480767]{D0\_2000\_S4480767\,\cite{Abbott:2000xv}} \textbf{Transverse momentum of the W boson}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (900.0, 900.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4480767}{4480767}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Lett. B513 (2001) 292-300 \item DOI: \href{http://dx.doi.org/10.1016/S0370-2693(01)00628-1}{10.1016/S0370-2693(01)00628-1} \item arXiv: \href{http://arxiv.org/abs/hep-ex/0010026}{hep-ex/0010026} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Production of W+ and W- decaying into the electron channel.\end{itemize} \noindent Measurement of the differential cross section for W boson production as a function of its transverse momentum. The data were collected by the D0 experiment at the Fermilab Tevatron Collider during 1994-1995 and correspond to an integrated luminosity of 85 pb$^{-1}$. \clearpage \clearpage \typeout{Handling analysis D0_2001_S4674421}\subsection[D0\_2001\_S4674421]{D0\_2001\_S4674421\,\cite{Abazov:2001nta}} \textbf{Tevatron Run I differential W/Z boson cross-section analysis}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (900.0, 900.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 1)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4674421}{4674421}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Lars Sonnenschein $\langle\,$\href{mailto:Lars.Sonnenschein@cern.ch}{Lars.Sonnenschein@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Lett.B517:299-308,2001 \item DOI: \href{http://dx.doi.org/10.1016/S0370-2693(01)01020-6}{10.1016/S0370-2693(01)01020-6} \item arXiv: \href{http://arxiv.org/abs/hep-ex/0107012v2}{hep-ex/0107012v2} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item W/Z events with decays to first generation leptons, in ppbar collisions at \ensuremath{\sqrt{s}} = 1800~GeV\end{itemize} \noindent Measurement of differential W/Z boson cross section and ratio in $p \bar{p}$ collisions at center-of-mass energy \ensuremath{\sqrt{s}} = 1.8 TeV. The data cover electrons and neutrinos in a pseudo-rapidity range of -2.5 to 2.5. \clearpage \clearpage \typeout{Handling analysis D0_2004_S5992206}\subsection[D0\_2004\_S5992206]{D0\_2004\_S5992206\,\cite{Abazov:2004hm}} \textbf{Run II jet azimuthal decorrelation analysis}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+5992206}{5992206}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Lars Sonnenschein $\langle\,$\href{mailto:lars.sonnenschein@cern.ch}{lars.sonnenschein@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys. Rev. Lett., 94, 221801 (2005) \item arXiv: \href{http://arxiv.org/abs/hep-ex/0409040}{hep-ex/0409040} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD events in ppbar interactions at \ensuremath{\sqrt{s}} = 1960 GeV.\end{itemize} \noindent Correlations in the azimuthal angle between the two largest \pT jets have been measured using the D0 detector in ppbar collisions at 1960~GeV. The analysis is based on an inclusive dijet event sample in the central rapidity region. The correlations are determined for four different \pT intervals. \clearpage \clearpage \typeout{Handling analysis D0_2006_S6438750}\subsection[D0\_2006\_S6438750]{D0\_2006\_S6438750\,\cite{Abazov:2005wc}} \textbf{Inclusive isolated photon cross-section, differential in \pT(gamma)}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+6438750}{6438750}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \item Gavin Hesketh $\langle\,$\href{mailto:gavin.hesketh@cern.ch}{gavin.hesketh@cern.ch}$\,\rangle$ \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Lett.B639:151-158,2006, Erratum-ibid.B658:285-289,2008 \item DOI: \href{http://dx.doi.org/10.1016/j.physletb.2006.04.048}{10.1016/j.physletb.2006.04.048} \item arXiv: \href{http://arxiv.org/abs/hep-ex/0511054}{hep-ex/0511054} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item ppbar collisions at \ensuremath{\sqrt{s}} = 1960 GeV. Requires gamma + jet (q,qbar,g) hard processes, which for Pythia 6 means MSEL=10 for with MSUB indices 14, 18, 29, 114, 115 enabled.\end{itemize} \noindent Measurement of differential cross section for inclusive production of isolated photons in p pbar collisions at \ensuremath{\sqrt{s}} = 1.96 TeV with the D\O detector at the Fermilab Tevatron collider. The photons span transverse momenta 23--300 GeV and have pseudorapidity $|\eta| < 0.9$. Isolated direct photons are probes of pQCD via the annihilation ($q \bar{q} \ensuremath{\to} \gamma g$) and quark-gluon Compton scattering ($q g \ensuremath{\to} \gamma q$) processes, the latter of which is also sensitive to the gluon PDF. The initial state radiation / resummation formalisms are sensitive to the resulting photon \pT spectrum \clearpage \clearpage \typeout{Handling analysis D0_2007_S7075677}\subsection[D0\_2007\_S7075677]{D0\_2007\_S7075677\,\cite{Abazov:2007jy}} \textbf{$Z/\gamma^* + X$ cross-section shape, differential in $y(Z)$}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+7075677}{7075677}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \item Gavin Hesketh $\langle\,$\href{mailto:ghesketh@fnal.gov}{ghesketh@fnal.gov}$\,\rangle$ \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D76:012003,2007 \item arXiv: \href{http://arxiv.org/abs/hep-ex/0702025}{hep-ex/0702025} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Drell-Yan $p \bar{p} \to Z/\gamma^*$ + jets events at $\sqrt{s}$ = 1960 GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $71 < m_{ee} < 111$ GeV\end{itemize} \noindent Cross sections as a function of di-electron rapidity $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96 TeV, based on an integrated luminosity of $0.4~\text{fb}^{-1}$. \clearpage \clearpage \typeout{Handling analysis D0_2008_S6879055}\subsection[D0\_2008\_S6879055]{D0\_2008\_S6879055\,\cite{Abazov:2006gs}} \textbf{Measurement of the ratio sigma($Z/\gamma^*$ + $n$ jets)/sigma($Z/\gamma^*$)}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+6879055}{6879055}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Giulio Lenzi \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item hep-ex/0608052 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p \bar{p} \to e^+ e^-$ + jets at 1960~GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $75 < m_{ee} < 105$ GeV.\end{itemize} \noindent Cross sections as a function of \pT of the three leading jets and $n$-jet cross section ratios in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96 TeV, based on an integrated luminosity of $0.4~\text{fb}^{-1}$. \clearpage \clearpage \typeout{Handling analysis D0_2008_S7554427}\subsection[D0\_2008\_S7554427]{D0\_2008\_S7554427\,\cite{:2007nt}} \textbf{$Z/\gamma^* + X$ cross-section shape, differential in $\pT(Z)$}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+7554427}{7554427}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/0712.0803}{0712.0803} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item * $p \bar{p} \to e^+ e^-$ + jets at 1960~GeV. \item Needs mass cut on lepton pair to avoid photon singularity, looser than $40 < m_{ee} < 200$ GeV.\end{itemize} \noindent Cross sections as a function of \pT of the vector boson inclusive and in forward region ($|y| > 2$, $\pT<30$ GeV) in the di-electron channel in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96 TeV, based on an integrated luminosity of 0.98~fb$^{-1}$. \clearpage \clearpage \typeout{Handling analysis D0_2008_S7662670}\subsection[D0\_2008\_S7662670]{D0\_2008\_S7662670\,\cite{:2008hua}} \textbf{Measurement of D0 Run II differential jet cross sections}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+7662670}{7662670}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \item Gavin Hesketh $\langle\,$\href{mailto:gavin.hesketh@cern.ch}{gavin.hesketh@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.Lett.101:062001,2008 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevLett.101.062001}{10.1103/PhysRevLett.101.062001} \item arXiv: \href{http://arxiv.org/abs/0802.2400v3}{0802.2400v3} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD events at \ensuremath{\sqrt{s}} = 1960 GeV. A \pTmin cut is probably necessary since the lowest jet \pT bin is at 50 GeV\end{itemize} \noindent Measurement of the inclusive jet cross section in $p \bar{p}$ collisions at center-of-mass energy \ensuremath{\sqrt{s}} = 1.96 TeV. The data cover jet transverse momenta from 50--600 GeV and jet rapidities in the range -2.4 to 2.4. \clearpage \clearpage \typeout{Handling analysis D0_2008_S7719523}\subsection[D0\_2008\_S7719523]{D0\_2008\_S7719523\,\cite{Abazov:2008er}} \textbf{Isolated $\gamma$ + jet cross-sections, differential in \pT($\gamma$) for various $y$ bins}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+7719523}{7719523}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \item Gavin Hesketh $\langle\,$\href{mailto:gavin.hesketh@cern.ch}{gavin.hesketh@cern.ch}$\,\rangle$ \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Lett.B666:435-445,2008 \item DOI: \href{http://dx.doi.org/10.1016/j.physletb.2008.06.076}{10.1016/j.physletb.2008.06.076} \item arXiv: \href{http://arxiv.org/abs/0804.1107v2}{0804.1107v2} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Produce only gamma + jet ($q,\bar{q},g$) hard processes (for Pythia 6, this means MSEL=10 and MSUB indices 14, 29 \& 115 enabled). The lowest bin edge is at 30 GeV, so a kinematic \pTmin cut is probably required to fill the histograms.\end{itemize} \noindent The process $p \bar{p}$ \ensuremath{\to} photon + jet + X as studied by the D0 detector at the Fermilab Tevatron collider at center-of-mass energy \ensuremath{\sqrt{s}} = 1.96 TeV. Photons are reconstructed in the central rapidity region $|y_\gamma| < 1.0$ with transverse momenta in the range 30--400 GeV, while jets are reconstructed in either the central $|y_\text{jet}| < 0.8$ or forward $1.5 < |y_\text{jet}| < 2.5$ rapidity intervals with $\pT^\text{jet} > 15~\text{GeV}$. The differential cross section $\mathrm{d}^3 \sigma / \mathrm{d}{\pT^\gamma} \mathrm{d}{y_\gamma} \mathrm{d}{y_\text{jet}}$ is measured as a function of $\pT^\gamma$ in four regions, differing by the relative orientations of the photon and the jet. MC predictions have trouble with simultaneously describing the measured normalization and $\pT^\gamma$ dependence of the cross section in any of the four measured regions. \clearpage \clearpage \typeout{Handling analysis D0_2008_S7837160}\subsection[D0\_2008\_S7837160]{D0\_2008\_S7837160\,\cite{Abazov:2008qv}} \textbf{Measurement of W charge asymmetry from D0 Run II}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+7837160}{7837160}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \item Gavin Hesketh $\langle\,$\href{mailto:gavin.hesketh@cern.ch}{gavin.hesketh@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.Lett.101:211801,2008 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevLett.101.211801}{10.1103/PhysRevLett.101.211801} \item arXiv: \href{http://arxiv.org/abs/0807.3367v1}{0807.3367v1} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item * Event type: W production with decay to $e \, \nu_e$ only \item for Pythia 6: MSEL = 12, MDME(206,1) = 1 \item Energy: 1.96 TeV\end{itemize} \noindent Measurement of the electron charge asymmetry in $p \bar p \to W + X \to e \nu_e + X$ events at a center of mass energy of 1.96 TeV. The asymmetry is measured as a function of the electron transverse momentum and pseudorapidity in the interval (-3.2, 3.2). This data is sensitive to proton parton distribution functions due to the valence asymmetry in the incoming quarks which produce the W. Initial state radiation should also affect the \pT distribution. \clearpage \clearpage \typeout{Handling analysis D0_2008_S7863608}\subsection[D0\_2008\_S7863608]{D0\_2008\_S7863608\,\cite{Abazov:2008ez}} \textbf{Measurement of differential $Z/\gamma^*$ + jet + $X$ cross sections}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+7863608}{7863608}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \item Gavin Hesketh $\langle\,$\href{mailto:gavin.hesketh@fnal.gov}{gavin.hesketh@fnal.gov}$\,\rangle$ \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Lett. B669 (2008) 278-286 \item DOI: \href{http://dx.doi.org/10.1016/j.physletb.2008.09.060}{10.1016/j.physletb.2008.09.060} \item arXiv: \href{http://arxiv.org/abs/0808.1296}{0808.1296} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p \bar{p} \to \mu^+ \mu^-$ + jets at 1960~GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $65 < m_{\mu\mu} < 115$ GeV.\end{itemize} \noindent Cross sections as a function of \pT and rapidity of the boson and \pT and rapidity of the leading jet in the di-muon channel in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96 TeV, based on an integrated luminosity of 1.0 fb$^{-1}$. \clearpage \clearpage \typeout{Handling analysis D0_2009_S8202443}\subsection[D0\_2009\_S8202443]{D0\_2009\_S8202443\,\cite{Abazov:2009av}} \textbf{$Z/\gamma^*$ + jet + $X$ cross sections differential in \pT(jet 1,2,3)}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8202443}{8202443}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/0903.1748}{0903.1748} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p \bar{p} \to e^+ e^-$ + jets at 1960~GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $65 < m_{ee} < 115$ GeV.\end{itemize} \noindent Cross sections as a function of \pT of the three leading jets in $Z/\gamma^{*} (\to e^{+} e^{-})$ + jet + X production in $p \bar{p}$ collisions at $\sqrt{s} = 1.96$ TeV, based on an integrated luminosity of 1.0 fb$^{-1}$. \clearpage \clearpage \typeout{Handling analysis D0_2009_S8320160}\subsection[D0\_2009\_S8320160]{D0\_2009\_S8320160\,\cite{:2009mh}} \textbf{Dijet angular distributions}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8320160}{8320160}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/0906.4819}{0906.4819} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p \bar{p} \to$ jets at 1960 GeV\end{itemize} \noindent Dijet angular distributions in different bins of dijet mass from 0.25 TeV to above 1.1 TeV in $p \bar{p}$ collisions at $\sqrt{s} = 1.96$ TeV, based on an integrated luminosity of 0.7 fb$^{-1}$. \clearpage \clearpage \typeout{Handling analysis D0_2009_S8349509}\subsection[D0\_2009\_S8349509]{D0\_2009\_S8349509\,\cite{Abazov:2009pp}} \textbf{Z+jets angular distributions}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8349509}{8349509}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/0907.4286}{0907.4286} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p \bar{p} \to \mu^+ \mu^-$ + jets at 1960~GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $65 < m_{ee} < 115$ GeV.\end{itemize} \noindent First measurements at a hadron collider of differential cross sections for $Z (\to \mu\mu)$+jet+X production in $\Delta\phi(Z, j)$, $|\Delta y(Z, j)|$ and $|y_\mathrm{boost}(Z, j)|$. Vector boson production in association with jets is an excellent probe of QCD and constitutes the main background to many small cross section processes, such as associated Higgs production. These measurements are crucial tests of the predictions of perturbative QCD and current event generators, which have varied success in describing the data. Using these measurements as inputs in tuning event generators will increase the experimental sensitivity to rare signals. \clearpage \clearpage \typeout{Handling analysis D0_2010_S8566488}\subsection[D0\_2010\_S8566488]{D0\_2010\_S8566488\,\cite{Abazov:2010fr}} \textbf{Dijet invariant mass}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8566488}{8566488}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1002.4594}{1002.4594} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p \bar{p} \to$ jets at 1960 GeV. Analysis needs two hard jets above 40 GeV.\end{itemize} \noindent The inclusive dijet production double differential cross section as a function of the dijet invariant mass and of the largest absolute rapidity ($|y|_\text{max}$) of the two jets with the largest transverse momentum in an event is measured using 0.7 fb$^{-1}$ of data. The measurement is performed in six rapidity regions up to $|y|_\text{max}=2.4$. \clearpage \clearpage \typeout{Handling analysis D0_2010_S8570965}\subsection[D0\_2010\_S8570965]{D0\_2010\_S8570965\,\cite{Abazov:2010ah}} \textbf{Direct photon pair production}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} CDF (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8570965}{8570965}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1002.4917}{1002.4917} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item All processes that can produce prompt photon pairs, e.g. $jj \to jj$, $jj \to j\gamma$ and $jj \to \gamma \gamma$. Non-prompt photons from hadron decays like $\pi$ and $\eta$ have been corrected for.\end{itemize} \noindent Direct photon pair production cross sections are measured using 4.2 fb$^{-1}$ of data. They are binned in diphoton mass, the transverse momentum of the diphoton system, the azimuthal angle between the photons, and the polar scattering angle of the photons. Also available are double differential cross sections considering the last three kinematic variables in three diphoton mass bins. Note, the numbers in version 1 of the arXiv preprint were missing the dM normalisation in the double differential cross sections. This has been reported to and fixed by the authors in v2 and the journal submission. HepData as well as the Rivet analysis have also been updated. \clearpage \clearpage \typeout{Handling analysis D0_2010_S8671338}\subsection[D0\_2010\_S8671338]{D0\_2010\_S8671338\,\cite{Abazov:2010kn}} \textbf{Measurement of differential $Z/\gamma^*$ \pT}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8671338}{8671338}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Flavia Dias $\langle\,$\href{mailto:fladias@gmail.com}{fladias@gmail.com}$\,\rangle$ \item Gavin Hesketh $\langle\,$\href{mailto:gavin.hesketh@cern.ch}{gavin.hesketh@cern.ch}$\,\rangle$ \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1006.0618}{1006.0618} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $p \bar{p} \to \mu^+ \mu^-$ + jets at 1960~GeV. Needs mass cut on lepton pair to avoid photon singularity, looser than $65 < m_{\mu\mu} < 115$ GeV. Restrict $Z/\gamma^*$ mass range to roughly $50~\text{GeV}/c^2 < m_{\mu\mu} < 120~\text{GeV}/c^2$ for efficiency. Weighted events and kinematic sampling enhancement can help to fill the \pT tail.\end{itemize} \noindent Cross section as a function of \pT of the Z boson decaying into muons in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96 TeV, based on an integrated luminosity of 0.97 fb$^{-1}$. \clearpage \clearpage \typeout{Handling analysis D0_2010_S8821313}\subsection[D0\_2010\_S8821313]{D0\_2010\_S8821313\,\cite{Abazov:2010mk}} \textbf{Precise study of Z \pT using novel technique}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 2)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8821313}{8821313}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1010.0262}{1010.0262} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Inclusive $Z/\gamma^*$ production in both electron and muon channels. Cut on invariant lepton mass should be wider than $70<m_{\ell\ell}<110$ GeV.\end{itemize} \noindent Using 7.3 pb-1 the distribution of the variable $\phi^*$ is measured, which probes the same physical effects as the $Z/\gamma^*$ boson transverse momentum, but is less susceptible to the effects of experimental resolution and efficiency. Results are presented for both the di-electron and di-muon channel. \clearpage \clearpage \typeout{Handling analysis D0_2011_I895662}\subsection[D0\_2011\_I895662]{D0\_2011\_I895662\,\cite{Abazov:2011ub}} \textbf{3-jet invariant mass}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (980.0, 980.0) GeV \newline \textbf{Experiment:} D0 (Tevatron Run 2)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arxiv:1104.1986 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD events, three jets above 40 GeV.\end{itemize} \noindent Inclusive three-jet differential cross-section as a function of invariant mass of the three jets with the largest transverse momenta. The measurement is made in three rapidity regions ($|y|<0.8, 1.6, 2.4$) and with jets above 40, 70, and 100 GeV. \clearpage \section{LHC analyses}\typeout{Handling analysis ALICE_2010_S8624100}\subsection[ALICE\_2010\_S8624100]{ALICE\_2010\_S8624100\,\cite{Aamodt:2010ft}} \textbf{Charged particle multiplicities at $\unit{0.9 \& 2.36}{\TeV}$ in three different pseudorapidity intervals.}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0), (1180.0, 1180.0) GeV \newline \textbf{Experiment:} ALICE (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8624100}{8624100}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Holger Schulz $\langle\,$\href{mailto:holger.schulz@physik.hu-berlin.de}{holger.schulz@physik.hu-berlin.de}$\,\rangle$ \item Jan Fiete Grosse-Oetringhaus@cern.ch $\langle\,$\href{mailto:Jan.Fiete.Grosse-Oetringhaus@cern.ch}{Jan.Fiete.Grosse-Oetringhaus@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Eur.Phys.J.C68:89-108,2010 \item arXiv: \href{http://arxiv.org/abs/1004.3034}{1004.3034} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD and diffractive events at $\sqrt{s}=\unit{0.9}{\TeV}$ and $\sqrt{s}=\unit{2.36}{\TeV}$\end{itemize} \noindent This is an ALICE analysis where charged particle multiplicities (including the zero bin) have been measured in three different pseudorapidity intervals ($|\eta|<0.5; |\eta|<1.0; |\eta|<1.3$. Only the INEL distributions have been considered here, i.e. this analysis can only be meaningfully compared to PYTHIA 6 with diffractive processes disabled. The data were taken at 900 and 2360 GeV. \clearpage \clearpage \typeout{Handling analysis ALICE_2010_S8625980}\subsection[ALICE\_2010\_S8625980]{ALICE\_2010\_S8625980\,\cite{Aamodt:2010pp}} \textbf{Pseudorapidities at three energies, charged multiplicity at 7 TeV.}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0), (1180.0, 1180.0), (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ALICE (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8625980}{8625980}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Holger Schulz $\langle\,$\href{mailto:holger.schulz@physik.hu-berlin.de}{holger.schulz@physik.hu-berlin.de}$\,\rangle$ \item Jan Fiete Grosse-Oetringhaus@cern.ch $\langle\,$\href{mailto:Jan.Fiete.Grosse-Oetringhaus@cern.ch}{Jan.Fiete.Grosse-Oetringhaus@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Eur.Phys.J. C68 (2010) 345-354 \item arXiv: \href{http://arxiv.org/abs/1004.3514}{1004.3514} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Diffractive events need to be enabled.\end{itemize} \noindent This is an ALICE publication with pseudorapities for $\unit{0.9, 2.36 and 7}{\TeV}$ and the charged multiplicity at $\unit{7}{\TeV}$. The analysis requires at least on charged particle in the event. Only the INEL distributions are considered here \clearpage \clearpage \typeout{Handling analysis ALICE_2010_S8706239}\subsection[ALICE\_2010\_S8706239]{ALICE\_2010\_S8706239\,\cite{Aamodt:2010my}} \textbf{Charged particle $\langle p_\perp \rangle$ vs. $N_\text{ch}$ in $pp$ collisions at 900 GeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0) GeV \newline \textbf{Experiment:} ALICE (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8706239}{8706239}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Holger Schulz $\langle\,$\href{mailto:holger.schulz@physik.hu-berlin.de}{holger.schulz@physik.hu-berlin.de}$\,\rangle$ \item Jan Fiete Grosse-Oetringhaus@cern.ch $\langle\,$\href{mailto:Jan.Fiete.Grosse-Oetringhaus@cern.ch}{Jan.Fiete.Grosse-Oetringhaus@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Lett.B693:53-68,2010 \item arXiv: \href{http://arxiv.org/abs/1007.0719}{1007.0719} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Diffractive events need to be switched on\end{itemize} \noindent ALICE measurement of $\langle p_\perp \rangle$ vs. $N_\text{ch}$ and invariant particle yield (as function of $p_\perp$) in proton-proton collisions at $\sqrt{s}=\unit{900}{\GeV}$. \clearpage \clearpage \typeout{Handling analysis ALICE_2011_S8909580}\subsection[ALICE\_2011\_S8909580]{ALICE\_2011\_S8909580\,\cite{Aamodt:2011zza}} \textbf{Strange particle production in proton-proton collisions at \ensuremath{\sqrt{s}} = 0.9 TeV with ALICE at the LHC.}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0) GeV \newline \textbf{Experiment:} ALICE (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8909580}{8909580}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Pablo Bueno Gomez $\langle\,$\href{mailto:UO189399@uniovi.es}{UO189399@uniovi.es}$\,\rangle$ \item Eva Sicking $\langle\,$\href{mailto:esicking@cern.ch}{esicking@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Eur.Phys.J.C71:1594,2011. \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Diffractive events need to be switched on.\end{itemize} \noindent Tranverse momentum spectra of strange particles ($K^0_S$, $\Lambda$, $\phi$ and $\Xi$) in $pp$ collisions at $\sqrt{s} = 0.9$\;TeV with ALICE at the LHC. The ratio of cross-sections as a function of \pT for $\Lambda/K^0_S$ is also included. \clearpage \clearpage \typeout{Handling analysis ALICE_2011_S8945144}\subsection[ALICE\_2011\_S8945144]{ALICE\_2011\_S8945144\,\cite{Aamodt:2011zj}} \textbf{Tranverse momentum spectra of pions, kaons and protons in pp collisions at 0.9 TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0) GeV \newline \textbf{Experiment:} ALICE (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8945144}{8945144}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Pablo Bueno Gomez $\langle\,$\href{mailto:UO189399@uniovi.es}{UO189399@uniovi.es}$\,\rangle$ \item Eva Sicking $\langle\,$\href{mailto:esicking@cern.ch}{esicking@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Eur.Phys.J.C71:1655,2011. \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Diffractive events need to be enabled.\end{itemize} \noindent Obtaining the tranverse momentum spectra of pions, kaons and protons in $pp$ collisions at $\sqrt{s} = 0.9$ TeV with ALICE at the LHC. Mean transverse momentum as a function of the mass of the emitted particle is also included. \clearpage \clearpage \typeout{Handling analysis ALICE_2012_I1181770}\subsection[ALICE\_2012\_I1181770]{ALICE\_2012\_I1181770\,\cite{:2012sja}} \textbf{Measurement of inelastic, single- and double-diffraction cross sections in proton--proton collisions at the LHC with ALICE}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0), (1380.0, 1380.0), (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ALICE (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Martin Poghosyan $\langle\,$\href{mailto:Martin.Poghosyan@cern.ch}{Martin.Poghosyan@cern.ch}$\,\rangle$ \item Sercan Sen $\langle\,$\href{mailto:Sercan.Sen@cern.ch}{Sercan.Sen@cern.ch}$\,\rangle$ \item Burak Bilki $\langle\,$\href{mailto:bbilki@gmail.com}{bbilki@gmail.com}$\,\rangle$ \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1208.4968}{1208.4968} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Inelastic events (non-diffractive and inelastic diffractive).\end{itemize} \noindent Measurements of cross-sections of inelastic and diffractive processes in proton-proton collisions at $\sqrt{s} = 900$, 2760 and 7000 GeV. The fractions of diffractive processes in inelastic collisions were determined from a study of gaps in charged particle pseudorapidity distributions. Single-diffractive events are selected with $M_{X} < 200\;\GeV/c^2$ and double-diffractive events defined as NSD events with $\Delta\eta > 3$. To measure the inelastic cross-section, beam properties were determined with van der Meer scans using a simulation of diffraction adjusted to data. Note that these are experimental approximations to theoretical concepts -- it is not totally clear whether the data point values are model-independent. \clearpage \clearpage \typeout{Handling analysis ATLAS_2010_S8591806}\subsection[ATLAS\_2010\_S8591806]{ATLAS\_2010\_S8591806\,\cite{Aad:2010rd}} \textbf{Charged particles at 900 GeV in ATLAS}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0) GeV \newline \textbf{Experiment:} ATLAS (LHC 900GeV)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8591806}{8591806}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1003.3124}{1003.3124} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp QCD interactions at 900 GeV including diffractive events.\end{itemize} \noindent The first measurements with the ATLAS detector at the LHC. Data were collected using a minimum-bias trigger in December 2009 during proton-proton collisions at a centre of mass energy of 900 GeV. The charged- particle density, its dependence on transverse momentum and pseudorapid- ity, and the relationship between transverse momentum and charged-particle multiplicity are measured for events with at least one charged particle in the kinematic range $|\eta| < 2.5$ and $p_\perp > 500$ MeV. All data is corrected to the particle level. \clearpage \clearpage \typeout{Handling analysis ATLAS_2010_S8817804}\subsection[ATLAS\_2010\_S8817804]{ATLAS\_2010\_S8817804\,\cite{Aad:2010wv}} \textbf{Inclusive jet cross section and di-jet mass and chi spectra at 7 TeV in ATLAS}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC 7TeV)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8817804}{8817804}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item James Monk $\langle\,$\href{mailto:jmonk@cern.ch}{jmonk@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1009.5908}{1009.5908} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp QCD jet production with a minimum jet \pT of 60 GeV (inclusive) or 30 GeV (di-jets) at 7 TeV.\end{itemize} \noindent The first jet cross section measurement made with the ATLAS detector at the LHC. Anti-kt jets with $R=0.4$ and $R=0.6$ are resconstructed within $|y|<2.8$ and above 60~GeV for the inclusive jet cross section plots. For the di-jet plots the second jet must have \pT>30~GeV. Jet \pT and di-jet mass spectra are plotted in bins or rapidity $|y|<0.3$, $0.3<|y|<0.8$, $0.8<|y|<1.2$, $1.2<|y|<2.1$, $2.1<|y|<2.8$. Di-jet $\chi$ spectra are plotted in bins of di-jet mass $340~GeV<m_{12}<520~GeV$, $520~GeV<m_{12}<800~GeV$ and $800~GeV<m_{12}<1200~GeV$. \clearpage \clearpage \typeout{Handling analysis ATLAS_2010_S8894728}\subsection{ATLAS\_2010\_S8894728} \textbf{Track-based underlying event at 900 GeV and 7 TeV in ATLAS}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0), (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8894728}{8894728}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \item Holger Schulz $\langle\,$\href{mailto:holger.schulz@physik.hu-berlin.de}{holger.schulz@physik.hu-berlin.de}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1012.0791}{1012.0791} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp QCD interactions at 900 GeV and 7 TeV. Diffractive events should be included, but only influence the lowest bins. Multiple kinematic cuts should not be required.\end{itemize} \noindent The underlying event measurements with the ATLAS detector at the LHC at the center of mass energies of 900 GeV and 7 TeV. The observables sensitive to the underlying event, i.e the charged particle density and charged \pT sum, as well as their standard deviations and the average \pT, are measured as functions of the leading track. A track \pT cut of 500 MeV is applied for most observables, but the main profile plots are also shown for a lower track cut of 100 MeV, which includes much more of the soft cross-section. The angular distribution of the charged tracks with respect to the leading track is also studied, as are the correlation between mean transverse momentum and charged particle multiplicity, and the `plateau' height as a function of the leading track $|\eta|$. \clearpage \clearpage \typeout{Handling analysis ATLAS_2010_S8914702}\subsection[ATLAS\_2010\_S8914702]{ATLAS\_2010\_S8914702\,\cite{Collaboration:2010sp}} \textbf{Inclusive isolated prompt photon analysis}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC 7TeV)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8914702}{8914702}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Mike Hance $\langle\,$\href{mailto:michael.hance@cern.ch}{michael.hance@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1012.4389}{1012.4389} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Inclusive photon+X events (primary gamma+jet events) at $\sqrt{s} = 7$~TeV.\end{itemize} \noindent A measurement of the cross section for inclusive isolated photon production at $sqrt{s} = 7$ TeV. The measurement covers three ranges in $|\eta|$: [0.00,0.60), [0.60,1.37), and [1.52,1.81), for $E_T^\gamma>15$~GeV. The measurement uses 880nb$^{-1}$ of integrated luminosity collected with the ATLAS detector. \clearpage \clearpage \typeout{Handling analysis ATLAS_2010_S8918562}\subsection{ATLAS\_2010\_S8918562} \textbf{Track-based minimum bias at 900 GeV and 2.36 and 7 TeV in ATLAS}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0), (1180.0, 1180.0), (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8918562}{8918562}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Thomas Burgess $\langle\,$\href{mailto:thomas.burgess@cern.ch}{thomas.burgess@cern.ch}$\,\rangle$ \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1012.5104}{1012.5104} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp QCD interactions at 0.9, 2.36, and 7 TeV. Diffractive events should be included. Multiple kinematic cuts should not be required.\end{itemize} \noindent Measurements from proton-proton collisions at centre-of-mass energies of \ensuremath{\sqrt{s}} = 0.9, 2.36, and 7 TeV recorded with the ATLAS detector at the LHC. Events were collected using a single-arm minimum-bias trigger. The charged-particle multiplicity, its dependence on transverse momentum and pseudorapidity and the relationship between the mean transverse momentum and charged-particle multiplicity are measured. Measurements in different regions of phase-space are shown, providing diffraction-reduced measurements as well as more inclusive ones. The observed distributions are corrected to well-defined phase-space regions, using model-independent corrections. \clearpage \clearpage \typeout{Handling analysis ATLAS_2010_S8919674}\subsection[ATLAS\_2010\_S8919674]{ATLAS\_2010\_S8919674\,\cite{Aad:2010pg}} \textbf{W+jets jet multiplicities and \pT}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8919674}{8919674}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1012.5382}{1012.5382} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item W+jets events ideally with matrix element corrections to describe the higher jet multiplicities correctly. Both channels, electron and muon, are part of this analysis and should be run simultaneously.\end{itemize} \noindent Cross sections, in both the electron and muon decay modes of the W boson, are presented as a function of jet multiplicity and of the transverse momentum of the leading and next-to-leading jets in the event. Measurements are also presented of the ratio of cross sections for inclusive jet multiplicities. The results, based on an integrated luminosity of 1.3 pb-1, have been corrected for all known detector effects and are quoted in a limited and well-defined range of jet and lepton kinematics. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_I894867}\subsection[ATLAS\_2011\_I894867]{ATLAS\_2011\_I894867\,\cite{Aad:2011eu}} \textbf{Measurement of the inelastic proton-proton cross-section at sqrt{s}=7 TeV.}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Anton Karneyeu $\langle\,$\href{mailto:Anton.Karneyeu@cern.ch}{Anton.Karneyeu@cern.ch}$\,\rangle$ \item Sercan Sen $\langle\,$\href{mailto:Sercan.Sen@cern.ch}{Sercan.Sen@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1104.0326}{1104.0326} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Inelastic events (non-diffractive and inelastic diffractive).\end{itemize} \noindent Inelastic cross-section is measured for $\xi > 5 \times 10^{-6}$, where $\xi=M_X^2/s$ is calculated from the invariant mass, $M_X$, of hadrons selected using the largest rapidity gap in the event. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_I919017}\subsection[ATLAS\_2011\_I919017]{ATLAS\_2011\_I919017\,\cite{Aad:2011gn}} \textbf{Measurement of ATLAS track jet properties at 7 TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Seth Zenz $\langle\,$\href{mailto:seth.zenz@cern.ch}{seth.zenz@cern.ch}$\,\rangle$ \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D 84 (2011) 054001 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevD.84.054001}{10.1103/PhysRevD.84.054001} \item arXiv: \href{http://arxiv.org/abs/1107.3311}{1107.3311} \item ATLAS-STDM-2010-14 \item CERN-PH-EP-2011-110 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Min bias QCD at 7 TeV.\end{itemize} \noindent ATLAS measurement of track jet \pT, multiplicity per jet, longitudinal fragmentation, transverse momentum, radius w.r.t jet axis distributions, with jets constructed from charged tracks with $\pT > 300$ MeV, using the anti-$k_T$ jet algorithm with $R = 0.4, 0.6$. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_I925932}\subsection[ATLAS\_2011\_I925932]{ATLAS\_2011\_I925932\,\cite{Aad:2011fp}} \textbf{Measurement of the W \pT with electrons and muons at 7 TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Elena Yatsenko $\langle\,$\href{mailto:elena.yatsenko@desy.de}{elena.yatsenko@desy.de}$\,\rangle$ \item Judith Katzy $\langle\,$\href{mailto:jkatzy@mail.cern.ch}{jkatzy@mail.cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1108.6308v1}{1108.6308v1} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Run with $W$ decays to $e\,\nu_e$ and/or $\mu\,\nu_\mu$.\end{itemize} \noindent The W \pT at $\sqrt{s} = 7$\;TeV is measured using $W\to e \, \nu_e$ and $W\to \mu \, \nu_\mu$ decay channels. The dressed leptons kinematics calculated from the sum of the post-FSR lepton momentum and the momenta of all photons radiated in a cone around the lepton, while the bare uses the lepton kinematics after all QED radiation. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_I926145}\subsection[ATLAS\_2011\_I926145]{ATLAS\_2011\_I926145\,\cite{Aad:2011rr}} \textbf{Measurement of electron and muon differential cross-section from heavy-flavour decays}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+9185208}{9185208}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Paul Bell $\langle\,$\href{mailto:paul.bell@cern.ch}{paul.bell@cern.ch}$\,\rangle$ \item Holger Schulz $\langle\,$\href{mailto:holger.schulz@physik.hu-berlin.de}{holger.schulz@physik.hu-berlin.de}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item CERN-PH-EP-2011-108 \item arXiv: \href{http://arxiv.org/abs/1109.0525}{1109.0525} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp to ele + X or mu + X at 7 TeV, heavy-flavour (bb and cc) production with B/D \ensuremath{\to} ele or muon\end{itemize} \noindent Measurement of inclusive electron and muon cross sections for $7 < \\pT <26$~GeV in $|\eta| <2.0$, excluding $1.37<|\eta|<1.52$, and muon cross section for $4 < \\pT < 100$~GeV in $|\eta| <2.50$. W/Z/gamma* component must be subtracted to leave the heavy flavour contribution. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_I944826}\subsection[ATLAS\_2011\_I944826]{ATLAS\_2011\_I944826\,\cite{Aad:2011hd}} \textbf{KS0 and Lambda production at 0.9 and 7 TeV with ATLAS}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0), (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Holger Schulz $\langle\,$\href{mailto:holger.schulz@physik.hu-berlin.de}{holger.schulz@physik.hu-berlin.de}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1111.1297v2}{1111.1297v2} \item Phys.Rev. D85 (2012) 012001 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD events, 900GeV and 7TeV, Lambdas and Kshorts must be able to decay. Allow only charged decay modes to improve efficiency.\end{itemize} \noindent The production of Kshort and Lambda hadrons is studied in inelastic pp collisions at \ensuremath{\sqrt{s}} = 0.9 and 7 TeV collected with the ATLAS detector at the LHC using a minimum-bias trigger. The observed distributions of transverse momentum, rapidity, and multiplicity are corrected to hadron level in a model-independent way within well defined phase-space regions. The distribution of the production ratio of Lambdabar to Lambda baryons is also measured. The results are compared with various Monte Carlo simulation models. Although most of these models agree with data to within 15% in the Kshort distributions, substantial disagreements with data are found in the Lambda distributions of transverse momentum. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_I945498}\subsection[ATLAS\_2011\_I945498]{ATLAS\_2011\_I945498\,\cite{Aad:2011qv}} \textbf{Z+jets in pp at 7TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Status:} UNVALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Evelin Meoni evelin.meoni@cern.ch \item Holger Schulz \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1111.2690v1}{1111.2690v1} \item CERN-PH-EP-2011-162 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Z+jets, electronic and muonic Z-decays. Jets with transverse momentum $p_T > 30$ GeV and jet rapidity $|y| < 4.4$.\end{itemize} \noindent Production of jets in association with a $Z/\gamma^*$ boson in proton-proton collisions at $\sqrt{s} = 7$ TeV with the ATLAS detector. The analysis includes the full 2010 data set, collected with a low rate of multiple proton-proton collisions in the accelerator, corresponding to an integrated luminosity of 36 pb$^{-1}$. Inclusive jet cross sections in $Z/\gamma^*$ events, with $Z/\gamma^*$ decaying into electron or muon pairs, are measured for jets with transverse momentum $p_T > 30$ GeV and jet rapidity $|y| < 4.4$. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_I954993}\subsection[ATLAS\_2011\_I954993]{ATLAS\_2011\_I954993\,\cite{Aad:2011cx}} \textbf{WZ fiducial cross-section at 7 TeV in ATLAS}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC 7TeV)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Lynn Marx $\langle\,$\href{mailto:Lynn.Marx@hep.manchester.ac.uk}{Lynn.Marx@hep.manchester.ac.uk}$\,\rangle$ \item Roman Lysak $\langle\,$\href{mailto:lysak@fzu.cz}{lysak@fzu.cz}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Lett. B709 (2012) 341-357 \item arXiv: \href{http://arxiv.org/abs/1111.5570}{1111.5570} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp WZ events at 7 TeV with direct e, mu W/Z boson decays (no taus from W/Z)\end{itemize} \noindent This is a measurement of WZ production in 1.02 $fb^{-1}$ of pp collision data at $\sqrt{s} = $7 TeV collected by the ATLAS experiment in 2011. Doubly leptonic decay events are selected with electrons, muons and missing transverse momentum in the final state. The measurement of the combined fiducial cross section for the WZ bosons decaying directly into electrons and muons is performed. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_S8924791}\subsection{ATLAS\_2011\_S8924791} \textbf{Jet shapes at 7 TeV in ATLAS}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8924791}{8924791}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \item Francesc Vives $\langle\,$\href{mailto:fvives@ifae.es}{fvives@ifae.es}$\,\rangle$ \item Judith Katzy $\langle\,$\href{mailto:judith.katzy@cern.ch}{judith.katzy@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1101.0070}{1101.0070} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp QCD interactions at 7TeV GeV, corresponding to JX samples. Matching plots to kinematic \pT cut samples, or merging from slices or \pT-enhanced sampling is advised.\end{itemize} \noindent Measurement of jet shapes in inclusive jet production in pp collisions at 7 TeV based on 3pb$^-1$ of data. Jets are reconstructed in $|\eta| < 5$ using the anti-$k_\perp$ algorithm with $30 < \pT < 600$ GeV and $|y| < 2.8$. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_S8971293}\subsection[ATLAS\_2011\_S8971293]{ATLAS\_2011\_S8971293\,\cite{Aad:2011ni}} \textbf{Dijet azimuthal decorrelations}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8971293}{8971293}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1102.2696}{1102.2696} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp QCD interactions at 7000 GeV. The distributions are binned in leading \pT starting at 110 GeV with the last bin starting at 800 GeV.\end{itemize} \noindent Dijet azimuthal decorrelation measured by ATLAS at 7 TeV. Jets are anti- kt with $R=0.6$, $p_\perp>100$ GeV, $|\eta|<0.8$. The analysis is binned in leading jet $p_\perp$ bins. All data is fully corrected. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_S8983313}\subsection[ATLAS\_2011\_S8983313]{ATLAS\_2011\_S8983313\,\cite{daCosta:2011qk}} \textbf{0-lepton squark and gluino search}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8983313}{8983313}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item David Grellscheid $\langle\,$\href{mailto:david.grellscheid@durham.ac.uk}{david.grellscheid@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1102.5290}{1102.5290} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item BSM signal events at 7000 GeV.\end{itemize} \noindent 0-lepton search for squarks and gluinos by ATLAS at 7 TeV with an integrated luminosity of $35\,\mathrm{pb}^{-1}$. Event counts in four signal regions A-D are implemented as one-bin histograms. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_S8994773}\subsection{ATLAS\_2011\_S8994773} \textbf{Calo-based underlying event at 900 GeV and 7 TeV in ATLAS}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0), (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8994773}{8994773}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Jinlong Zhang $\langle\,$\href{mailto:jinlong@mail.cern.ch}{jinlong@mail.cern.ch}$\,\rangle$ \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1103.1816}{1103.1816} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp QCD interactions at 900 GeV and 7 TeV. Diffractive events should be included, but only influence the lowest bins. Multiple kinematic cuts should not be required.\end{itemize} \noindent Underlying event measurements with the ATLAS detector at the LHC at center-of-mass energies of 900 GeV and 7 TeV, using calorimeter clusters rather than charged tracks. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_S9002537}\subsection{ATLAS\_2011\_S9002537} \textbf{Muon charge asymmetry in W events at 7 TeV in ATLAS}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+9002537}{9002537}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Krauss $\langle\,$\href{mailto:frank.krauss@durham.ac.uk}{frank.krauss@durham.ac.uk}$\,\rangle$ \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1103.2929}{1103.2929} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item W \ensuremath{\to} munu events at 7 TeV\end{itemize} \noindent Measurement of the muon charge asymmetry from W bosons produced in proton-proton collisions at a centre-of-mass energy of 7 TeV with ATLAS. The asymmetry is measured in the $W \rightarrow \mu$ decay mode as a function of the muon pseudorapidity using a data sample corresponding to a total integrated luminosity of 31pb$^-1$. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_S9019561}\subsection[ATLAS\_2011\_S9019561]{ATLAS\_2011\_S9019561\,\cite{Aad:2011xm}} \textbf{Two lepton supersymmetry search}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+9019561}{9019561}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Angela Chen $\langle\,$\href{mailto:aqchen@fas.harvard.edu}{aqchen@fas.harvard.edu}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1103.6214}{1103.6214} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item BSM signal events at 7000 GeV.\end{itemize} \noindent 2-lepton search for supersymmetric particles by ATLAS at 7 TeV. Event counts in signal regions (3 same sign and 3 opposite sign) are implemented as one bin histograms. Histograms for missing transverse energy are implemented. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_S9120807}\subsection{ATLAS\_2011\_S9120807} \textbf{Inclusive isolated diphoton analysis}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC 7TeV)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+9120807}{9120807}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Giovanni Marchiori $\langle\,$\href{mailto:giovanni.marchiori@cern.ch}{giovanni.marchiori@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1107.0581}{1107.0581} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Inclusive diphoton+X events at $\sqrt{s} = 7$~TeV.\end{itemize} \noindent A measurement of the cross section for inclusive isolated photon production at $sqrt{s} = 7$ TeV. The measurement is done in bins of $M_{\gamma\gamma}$, $p_{T\gamma\gamma}$, and $\Delta\phi_{\gamma\gamma}$, for isolated photons with $|\eta|<2.37$ and $E_T^\gamma>16$~GeV. The measurement uses 37 pb$^{-1}$ of integrated luminosity collected with the ATLAS detector. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_S9126244}\subsection{ATLAS\_2011\_S9126244} \textbf{Measurement of dijet production with a veto on additional central jet activity}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+9126244}{9126244}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Graham Jones $\langle\,$\href{mailto:grahamj@cern.ch}{grahamj@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1107.1641}{1107.1641} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Require QCD interactions at 7TeV. A substantial number of events are required to populate the large rapidity seperation region.\end{itemize} \noindent A measurement of the jet activity in rapidity intervals bounded by a dijet system. The fraction of events passing a veto requirement are shown as a function of both the rapidity interval size and the average transverse momentum of the dijet system. The average number of jets above the veto threshold are also shown as a function of the same variables. There are two possible selection criteria applied to data. Either the two highest transverse momentum jets or the jets most forward and backward in rapidity are taken to define the dijet system, where the veto threhsold is 20GeV. Additionally for the latter selection an alternative veto transverse momentum threshold which is equal to the average transverse momentum is applied. Jet selections are based on anti-kt with $R=0.6$, $p_\perp>20$ GeV and $|y|<4.4$. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_S9128077}\subsection[ATLAS\_2011\_S9128077]{ATLAS\_2011\_S9128077\,\cite{Collaboration:2011tq}} \textbf{Measurement of multi-jet cross sections}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+9128077}{9128077}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1107.2092}{1107.2092} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Pure QCD, inclusive enough for jet \pT down to 60 GeV.\end{itemize} \noindent Inclusive multi-jet production is studied using an integrated luminosity of 2.4 pb-1. Results on multi-jet cross sections are presented differential in \pT of the four leading jets, HT. Additionally three-to-two jet fractions are presented differential in different observables. Jets are anti-kt with $R=0.4$ and $R=0.6$, $p_\perp>80(60)$ GeV and $|\eta|<2.8$. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_S9131140}\subsection[ATLAS\_2011\_S9131140]{ATLAS\_2011\_S9131140\,\cite{Aad:2011gj}} \textbf{Measurement of the Z \pT with electrons and muons at 7 TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+9131140}{9131140}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Elena Yatsenko $\langle\,$\href{mailto:elena.yatsenko@desy.de}{elena.yatsenko@desy.de}$\,\rangle$ \item Judith Katzy $\langle\,$\href{mailto:jkatzy@mail.cern.ch}{jkatzy@mail.cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1107.2381}{1107.2381} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Run with inclusive $Z$ events, with $Z/\gamma^*$ decays to electrons and/or muons.\end{itemize} \noindent The Z \pT at $\sqrt{s} = 7$\;TeV is measured using electron and muon $Z$ decay channels. The dressed leptons definition uses photons clustered in a cone around the charged leptons, while the bare lepton definition uses the post-FSR charged leptons only in the $Z$ reconstruction. The data used in the bare leptons calculation are based on a forward application of a PHOTOS-based energy loss correction and are hence not quite model-independent. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_S9212183}\subsection[ATLAS\_2011\_S9212183]{ATLAS\_2011\_S9212183\,\cite{Aad:2011ib}} \textbf{0-lepton squark and gluino search}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+9212183}{9212183}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Chris Wymant $\langle\,$\href{mailto:c.m.wymant@durham.ac.uk}{c.m.wymant@durham.ac.uk}$\,\rangle$ \item David Grellscheid $\langle\,$\href{mailto:david.grellscheid@durham.ac.uk}{david.grellscheid@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1109.6572}{1109.6572} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item BSM signal events at 7000 GeV.\end{itemize} \noindent 0-lepton search for squarks and gluinos by ATLAS at 7 TeV with an integrated luminosity of $1.04\,\mathrm{fb}^{-1}$. Event counts in five signal regions are implemented as one-bin histograms. \clearpage \clearpage \typeout{Handling analysis ATLAS_2011_S9225137}\subsection[ATLAS\_2011\_S9225137]{ATLAS\_2011\_S9225137\,\cite{Aad:2011qa}} \textbf{High jet multiplicity squark and gluino search}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+9225137}{9225137}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:peter.richardson@durham.ac.uk}{peter.richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1110.2299}{1110.2299} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item BSM signal events at 7000 GeV.\end{itemize} \noindent Search for SUSY using events with 6 or more jets in association with missing transverse momentum produced in proton-proton collisions at a centre-of-mass energy of 7 TeV. The data sample has a total integrated luminosity of 1.34 fb$^{-1}$. Distributions in the W and top control regions are not produced, while in addition to the plots from the paper the count of events in the different signal regions is included. \clearpage \clearpage \typeout{Handling analysis ATLAS_2012_CONF_2012_001}\subsection{ATLAS\_2012\_CONF\_2012\_001} \textbf{4 or more lepton plus missing transverse energy SUSY search}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Status:} PRELIMINARY\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:peter.richardson@durham.ac.uk}{peter.richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item ATLAS-CONF-2012-001 \item ATLAS-CONF-2012-035 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item BSM signal events at 7000 GeV.\end{itemize} \noindent Search for SUSY using events with 4 or more leptons in association with missing transverse energy in proton-proton collisions at a centre-of-mass energy of 7 TeV. The data sample has a total integrated luminosity of 2.06 fb$^{-1}$. There is no reference data and in addition to the control plots from the paper the number of events in the two signal regions, correctly normalized to an integrated luminosity 2.06 fb$^{-1}$, are calculated. \clearpage \clearpage \typeout{Handling analysis ATLAS_2012_I1082936}\subsection[ATLAS\_2012\_I1082936]{ATLAS\_2012\_I1082936\,\cite{Aad:2011fc}} \textbf{Inclusive jet and dijet cross sections at 7 TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Holger Schulz hschulz@physik.hu-berlin.de \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1112.6297v2}{1112.6297v2} \item CERN-PH-EP-2011-192 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD jet production with a minimum leading jet \pT of 30 GeV and minimum second jet \pT of 20 GeV at 7 TeV.\end{itemize} \noindent Inclusive jet and dijet cross sections have been measured in proton-proton collisions at a centre-of-mass energy of 7 TeV using the ATLAS detector at the Large Hadron Collider. The cross sections were measured using jets clustered with the anti-kT algorithm with parameters R=0.4 and R=0.6. These measurements are based on the 2010 data sample, consisting of a total integrated luminosity of 37 inverse picobarns. Inclusive jet double-differential cross sections are presented as a function of jet transverse momentum, in bins of jet rapidity. Dijet double-differential cross sections are studied as a function of the dijet invariant mass, in bins of half the rapidity separation of the two leading jets. The measurements are performed in the jet rapidity range $|y|<4.4$, covering jet transverse momenta from 20 GeV to 1.5 TeV and dijet invariant masses from 70 GeV to 5 TeV. This is the successor analysis of ATLAS_2010_S8817804 \clearpage \clearpage \typeout{Handling analysis ATLAS_2012_I1084540}\subsection{ATLAS\_2012\_I1084540} \textbf{Rapidity gap cross sections measured with the ATLAS detector in pp collisions at \ensuremath{\sqrt{s}} = 7 TeV.}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC 7TeV)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+1084540}{1084540}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Oldrich Kepka $\langle\,$\href{mailto:kepkao@fzu.cz}{kepkao@fzu.cz}$\,\rangle$ \item Tim Martin $\langle\,$\href{mailto:tim.martin@cern.ch}{tim.martin@cern.ch}$\,\rangle$ \item Paul Newman $\langle\,$\href{mailto:Paul.Newman@cern.ch}{Paul.Newman@cern.ch}$\,\rangle$ \item Pavel Ruzicka $\langle\,$\href{mailto:ruzicka@fzu.cz}{ruzicka@fzu.cz}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1201.2808}{1201.2808} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Minimum bias inelastic pp collision at 7 TeV including diffractive component and overall cross section.\end{itemize} \noindent Pseudorapidity gap distributions in proton-proton collisions at \ensuremath{\sqrt{s}} = 7 TeV are studied using a minimum bias data sample with an integrated luminosity of 7.1 inverse microbarns. Cross sections are measured differentially in terms of Delta eta F, the larger of the pseudorapidity regions extending to the limits of the ATLAS sensitivity, at eta = +/- 4.9, in which no final state particles are produced above a transverse momentum threshold p_T Cut. The measurements span the region 0 < Delta eta F < 8 for 200 < p_T Cut < 800 MeV. At small Delta eta F, the data test the reliability of hadronisation models in describing rapidity and transverse momentum fluctuations in final state particle production. The measurements at larger gap sizes are dominated by contributions from the single diffractive dissociation process (pp \ensuremath{\to} Xp), enhanced by double dissociation (pp \ensuremath{\to} XY) where the invariant mass of the lighter of the two dissociation systems satisfies M_Y <~ 7 GeV. The resulting cross section is d sigma / d Delta eta F ~ 1 mb for Delta eta F >~ 3. The large rapidity gap data are used to constrain the value of the pomeron intercept appropriate to triple Regge models of soft diffraction. The cross section integrated over all gap sizes is compared with other LHC inelastic cross section measurements. \clearpage \clearpage \typeout{Handling analysis ATLAS_2012_I1091481}\subsection[ATLAS\_2012\_I1091481]{ATLAS\_2012\_I1091481\,\cite{:2012fa}} \textbf{Azimuthal ordering of charged hadrons}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0), (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Status:} UNVALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Sharka Todorova $\langle\,$\href{mailto:sarka.todorova@cern.ch}{sarka.todorova@cern.ch}$\,\rangle$ \item Holger Schulz $\langle\,$\href{mailto:hschulz@physik.hu-berlin.de}{hschulz@physik.hu-berlin.de}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item CERN-PH-EP-2011-197 \item arXiv: \href{http://arxiv.org/abs/1203.0419}{1203.0419} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD events with diffractives switched on.\end{itemize} \noindent Measurement of the ordering of charged hadrons in the azimuthal angle relative to the beam axis at the Large Hadron Collider (LHC). A spectral analysis of correlations between longitudinal and transverse components of the momentum of the charged hadrons is performed. Data were recorded with the ATLAS detector at centre-of-mass energies of $\sqrt{s} = \unit{900}{\GeV}$ and $\sqrt{s} = \unit{7}{\TeV}$. The correlations measured in a phase space region dominated by low-\pT particles are not well described by conventional models of hadron production. The measured spectra show features consistent with the fragmentation of a QCD string represented by a helix-like ordered gluon chain. \clearpage \clearpage \typeout{Handling analysis ATLAS_2012_I1093738}\subsection[ATLAS\_2012\_I1093738]{ATLAS\_2012\_I1093738\,\cite{Aad:2012cv}} \textbf{Isolated prompt photon + jet xsection}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+1093738}{1093738}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Giovanni Marchiori $\langle\,$\href{mailto:giovanni.marchiori@cern.ch}{giovanni.marchiori@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1203.3161}{1203.3161} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Inclusive photon+jet+X events at $\sqrt{s} = 7$~TeV.\end{itemize} \noindent A measurement of the production cross section for isolated photons in association with jets in $pp$ collisions at $sqrt{s} = 7$ TeV. Photons with $|\eta|<1.37$ and $E_T>25$~GeV and jets with $|y|<4.4$ and $p_T>20$ GeV are selected. The differential cross section as a function of the photon transverse energy is measured, for three leading jet rapidity configurations, separately for the cases where the photon and jet rapidities have the same or the opposite sign. The measurement uses 37 pb$^{-1}$ of integrated luminosity collected with the ATLAS detector. \clearpage \clearpage \typeout{Handling analysis ATLAS_2012_I1094061}\subsection[ATLAS\_2012\_I1094061]{ATLAS\_2012\_I1094061\,\cite{ATLAS:2012ap}} \textbf{Measurement of two-particle correlation function at 900 GeV and 7 TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0), (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item James Monk $\langle\,$\href{mailto:jmonk@cern.ch}{jmonk@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item JHEP 1205 (2012) 157 \item CERN-PH-EP-2012-011 \item DOI: \href{http://dx.doi.org/10.1007/JHEP05(2012)157}{10.1007/JHEP05(2012)157} \item arxiv:1203.3549 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Soft-QCD proton-proton interactions (including diffraction) at 900 GeV or 7 TeV. Generated events should include an average lifetime cut of ctau < 10mm\end{itemize} \noindent Two-particle angular correlations are measured in proton-proton collisions at $\\ensuremath{\sqrt{s}}=900$ GeV and 7 TeV. Correlations are determined for charged particles with $\\pT > 100 MeV$ and $|\eta| < 2.5$. A complicated function of both pseudorapidity and azimuth is observed. Results are obtained from an inclusive sample of events (900 GeV and 7 TeV), as well as a sample satisfying $n_{ch} \ge 20$ (7 TeV only). \clearpage \clearpage \typeout{Handling analysis ATLAS_2012_I1094568}\subsection{ATLAS\_2012\_I1094568} \textbf{Measurement of ttbar production with a veto on additional central jet activity}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+1094568}{1094568}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Kiran Joshi $\langle\,$\href{mailto:kiran.joshi@cern.ch}{kiran.joshi@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1203.5015}{1203.5015} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Require dileptonic ttbar events at 7TeV.\end{itemize} \noindent A measurement of the additional jet activity in dileptonic ttbar events. The fraction of events passing a veto requirement are shown as a function the veto scale for four central rapidity intervals. Two veto definitions are used: events are vetoed if they contain an additional jet in the rapidity interval with transverse momentum above a threshold, or alternatively, if the scalar transverse momentum sum of all additional jets in the rapidity interval is above a threshold. \clearpage \clearpage \typeout{Handling analysis ATLAS_2012_I1112263}\subsection[ATLAS\_2012\_I1112263]{ATLAS\_2012\_I1112263\,\cite{Aad:2012I1112263}} \textbf{3 lepton plus missing transverse energy SUSY search}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:peter.richardson@durham.ac.uk}{peter.richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item ATLAS-CONF-2012-023 \item arXiv: \href{http://arxiv.org/abs/1204.5638}{1204.5638} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item BSM signal events at 7000 GeV.\end{itemize} \noindent Search for SUSY using events with 3 leptons in association with missing transverse energy in proton-proton collisions at a centre-of-mass energy of 7 TeV. The data sample has a total integrated luminosity of 2.06 fb$^{-1}$. There is no reference data and in addition to the control plots from the paper the number of events in the two signal regions, correctly normalized to an integrated luminosity 2.06 fb$^{-1}$, are calculated. \clearpage \clearpage \typeout{Handling analysis ATLAS_2012_I1117704}\subsection{ATLAS\_2012\_I1117704} \textbf{High jet multiplicity squark and gluino search}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:peter.richardson@durham.ac.uk}{peter.richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1206.1760}{1206.1760} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item BSM signal events at 7000 GeV.\end{itemize} \noindent Search for SUSY using events with 6 or more jets in association with missing transverse momentum produced in proton-proton collisions at a centre-of-mass energy of 7 TeV. The data sample has a total integrated luminosity of 4.7 fb$^{-1}$. Distributions in the W and top control regions are not produced, while in addition to the plots from the paper the count of events in the different signal regions is included. \clearpage \clearpage \typeout{Handling analysis ATLAS_2012_I1118269}\subsection[ATLAS\_2012\_I1118269]{ATLAS\_2012\_I1118269\,\cite{:2012fc}} \textbf{Measurement of the b-hadron production cross section using decays to $D^{*}\mu^-X$ final states in pp collisions at \ensuremath{\sqrt{s}} = 7 TeV with the ATLAS detector}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+9626190}{9626190}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@ed.ac.uk}{andy.buckley@ed.ac.uk}$\,\rangle$ \item Sercan Sen $\langle\,$\href{mailto:sercan.sen@cern.ch}{sercan.sen@cern.ch}$\,\rangle$ \item Peter Skands $\langle\,$\href{mailto:Peter.Skands@cern.ch}{Peter.Skands@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1206.3122}{1206.3122} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp to b-hadron + X at 7 TeV, i.e. switch on "HardQCD:gg2bbbar" and "HardQCD:qqbar2bbbar" flags in Pythia8.\end{itemize} \noindent Measurement of $b$-hadron production cross section using 3.3 pb$^{-1}$ of integrated luminosity, collected during the 2010 LHC run. The $b$-hadrons are selected by partially reconstructing $D^{*}\mu^-X$ final states using only direct semileptonic decays of $b$ to $D^{*}\mu^-X$. Differential cross sections as functions of $p_\perp$ and $|\eta|$. \clearpage \clearpage \typeout{Handling analysis ATLAS_2012_I1119557}\subsection[ATLAS\_2012\_I1119557]{ATLAS\_2012\_I1119557\,\cite{Aad:2012meb}} \textbf{Jet shapes and jet masses}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC 7TeV)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Lily Asquith $\langle\,$\href{mailto:lasquith@hep.anl.gov}{lasquith@hep.anl.gov}$\,\rangle$ \item Roman Lysak $\langle\,$\href{mailto:lysak@fzu.cz}{lysak@fzu.cz}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev. D86 (2012) 072006 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevD.86.072006}{10.1103/PhysRevD.86.072006} \item arXiv: \href{http://arxiv.org/abs/1206.5369}{1206.5369} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD events at 7 TeV, leading-\pT jets with $\\pT > 300\;GeV$.\end{itemize} \noindent Measurements are presented of the properties of high transverse momentum jets, produced in proton-proton collisions at a center-of-mass energy of $\sqrt{s} = 7$\;TeV. Jet mass, width, eccentricity, planar flow and angularity are measured for jets reconstructed using the anti-$k_t$ algorithm with distance parameters $R = 0.6$ and 1.0, with transverse momentum $\pT > 300$\;GeV and pseudorapidity $|\eta| < 2$. \clearpage \clearpage \typeout{Handling analysis ATLAS_2012_I1125575}\subsection[ATLAS\_2012\_I1125575]{ATLAS\_2012\_I1125575\,\cite{:2012fs}} \textbf{Distributions sensitive to the underlying event are studied in events containing one or more charged-particle.}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Kiran Joshi $\langle\,$\href{mailto:kiran.joshi@cern.ch}{kiran.joshi@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1208.0563}{1208.0563} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Minimum bias events at 7 TeV.\end{itemize} \noindent Distributions sensitive to the underlying event are studied in events containing one or more charged-particle. Jets are reconstructed using the antikt algorithm with radius parameter R varying between 0.2 and 1.0. Distributions of the charged-particle multiplicity, the scalar sum of the transverse momentum of charged particles, and the average charged-particle \pT are measured as functions of \pT^JET in regions transverse to and opposite the leading jet for 4 GeV < \pT^JET < 100 GeV. In addition, the R-dependence of the mean values of these observables is studied. \clearpage \clearpage \typeout{Handling analysis ATLAS_2012_I1125961}\subsection{ATLAS\_2012\_I1125961} \textbf{0-lepton squark and gluino search}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \item David Grellscheid $\langle\,$\href{mailto:david.grellscheid@durham.ac.uk}{david.grellscheid@durham.ac.uk}$\,\rangle$ \item Chris Wymant $\langle\,$\href{mailto:c.m.wymant@durham.ac.uk}{c.m.wymant@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1208.0949}{1208.0949} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item BSM signal events at 7000 GeV.\end{itemize} \noindent 0-lepton search for squarks and gluinos by ATLAS at 7 TeV. Event counts in five signal regions are implemented as one-bin histograms. \clearpage \clearpage \typeout{Handling analysis ATLAS_2012_I1183818}\subsection[ATLAS\_2012\_I1183818]{ATLAS\_2012\_I1183818\,\cite{:2012dr}} \textbf{pseudorapidity dependence of the total transverse energy at 7 TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC 7TeV)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Robindra Prabhu $\langle\,$\href{mailto:prabhu@cern.ch}{prabhu@cern.ch}$\,\rangle$ \item Peter Wijeratne $\langle\,$\href{mailto:paw@hep.ucl.ac.uk}{paw@hep.ucl.ac.uk}$\,\rangle$ \item Roman Lysak $\langle\,$\href{mailto:lysak@fzu.cz}{lysak@fzu.cz}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1208.6256}{1208.6256} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp QCD interactions at 7 TeV, min bias and di-jet events\end{itemize} \noindent The measurement of the sum of the transverse energy of particles as a function of particle pseudorapidity, eta, in proton-proton collisions at a centre-of-mass energy, $\\ensuremath{\sqrt{s}} = 7 TeV$ using the ATLAS detector at the Large Hadron Collider. The measurements are performed in the region $|\eta| < 4.8$ for two event classes: those requiring the presence of particles with a low transverse momentum and those requiring particles with a significant transverse momentum (dijet events where both jets have $E_T > 20$ GeV). In the second dataset measurements are made in the region transverse to the hard scatter. \clearpage \clearpage \typeout{Handling analysis ATLAS_2012_I1188891}\subsection[ATLAS\_2012\_I1188891]{ATLAS\_2012\_I1188891\,\cite{Aad:2012ma}} \textbf{flavour composition of dijet events at 7 TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC 7TeV)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Cecile Lapoire $\langle\,$\href{mailto:clapoire@cern.ch}{clapoire@cern.ch}$\,\rangle$ \item Roman Lysak $\langle\,$\href{mailto:lysak@fzu.cz}{lysak@fzu.cz}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1210.0441}{1210.0441} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp di-jet events at 7 TeV\end{itemize} \noindent The measurement of the flavour composition of dijet events produced in pp collisions at $\sqrt{s}=7 TeV$ using the ATLAS detector. Six possible combinations of light, charm and bottom jets are identified in the dijet events, where the jet flavour is defined by the presence of bottom, charm or solely light flavour hadrons in the jet. The fractions of these dijet flavour states as functions of the leading jet transverse momentum in the range 40 GeV to 500 GeV and jet rapidity $|y| < 2.1$ are measured. \clearpage \clearpage \typeout{Handling analysis ATLAS_2012_I943401}\subsection[ATLAS\_2012\_I943401]{ATLAS\_2012\_I943401\,\cite{Aad:2011cwa}} \textbf{Search for supersymmetry with 2 leptons and missing transverse energy}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1110.6189}{1110.6189} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item BSM signal events at 7000 GeV.\end{itemize} \noindent Results of three searches for the production of supersymmetric particles decaying into final states with missing transverse momentum and exactly two isolated leptons, electrons or muons. The analysis uses a data sample collected during the first half of 2011 that corresponds to a total integrated luminosity of 1 $\text{fb}^{-1}$ of $\sqrt{s} = 7$\,TeV proton-proton collisions recorded with the ATLAS detector at the Large Hadron Collider. Opposite-sign and same-sign dilepton events are studied separately. Additionally, in opposite- sign events, a search is made for an excess of same-flavour over different-flavour lepton pairs. \clearpage \clearpage \typeout{Handling analysis ATLAS_2013_I1217867}\subsection[ATLAS\_2013\_I1217867]{ATLAS\_2013\_I1217867\,\cite{Aad:2013ueu}} \textbf{kT splitting scales in W\ensuremath{\to}lv events}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} ATLAS (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1302.1415}{1302.1415} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item W+jet events in the electron and/or the muon decay channel.\end{itemize} \noindent Cluster splitting scales are measured in events containing W bosons decaying to electrons or muons. The measurement comprises the four hardest splitting scales in a kT cluster sequence of the hadronic activity accompanying the W boson, and ratios of these splitting scales. \clearpage \clearpage \typeout{Handling analysis CMS_2010_S8547297}\subsection[CMS\_2010\_S8547297]{CMS\_2010\_S8547297\,\cite{Khachatryan:2010xs}} \textbf{Charged particle transverse momentum and pseudorapidity spectra from proton-proton collisions at 900 and 2360 GeV.}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0), (1180.0, 1180.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8547297}{8547297}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item A. Knutsson \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item JHEP 02 (2010) 041 \item DOI: \href{http://dx.doi.org/10.1007/JHEP02(2010)041}{10.1007/JHEP02(2010)041} \item arXiv: \href{http://arxiv.org/abs/1002.0621}{1002.0621} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Non-single-diffractive (NSD) events only. Should include double-diffractive (DD) events and non-diffractive (ND) events but NOT single-diffractive (SD) events. Examples, in Pythia6 the SD processes to be turned off are 92 and 93, and in Pythia8 the SD processes are 103 and 104 (also called SoftQCD:singleDiffractive).\end{itemize} \noindent Charged particle spectra are measured in proton-proton collisions at center-of-mass energies 900 and 2360 GeV. The spectra are normalized to all non-single-diffractive (NSD) events using corrections for trigger and selection efficiency, acceptance, and branching ratios. There are transverse-momentum (\pT) spectra from 0.1 to 2 GeV in bins of pseudorapidity (eta) and \pT spectra from 0.1 to 4 GeV for |eta|<2.4. The eta spectra come from the average of three methods and cover |eta|<2.5 and are corrected to include all \pT. The data were corrected according to the SD/DD/ND content of the CMS trigger, as predicted by pythia6. The uncertainties connected with correct or uncorrect modelling of diffraction were included in the systematic errors. \clearpage \clearpage \typeout{Handling analysis CMS_2010_S8656010}\subsection[CMS\_2010\_S8656010]{CMS\_2010\_S8656010\,\cite{Khachatryan:2010us}} \textbf{Charged particle transverse momentum and pseudorapidity spectra from proton-proton collisions at 7000 GeV.}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8656010}{8656010}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item A. Knutsson \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.Lett.105:022002,2010 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevLett.105.022002}{10.1103/PhysRevLett.105.022002} \item arXiv: \href{http://arxiv.org/abs/1005.3299}{1005.3299} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Non-single-diffractive (NSD) events only. Should include double-diffractive (DD) events and non-diffractive (ND) events but NOT single-diffractive (SD) events. For example, in Pythia6 the SD processes to be turned off are 92 and 93, and in Pythia8 the SD processes are 103 and 104 (also called SoftQCD:singleDiffractive).\end{itemize} \noindent Charged particle spectra are measured in proton-proton collisions at center-of-mass energies 7000 GeV. The spectra are normalized to all non-single-diffractive (NSD) events using corrections for trigger and selection efficiency, acceptance, and branching ratios. There are transverse-momentum (\pT) spectra from 0.1 to 2 GeV in bins of pseudorapidity (eta) and the \pT spectrum from 0.1 to 6 GeV for |eta|<2.4. The eta spectra come from the average of three methods and cover |eta|<2.5 and are corrected to include all \pT. The data were corrected according to the SD/DD/ND content of the CMS trigger, as predicted by pythia6. The uncertainties connected with correct or uncorrect modelling of diffraction were included in the systematic errors. \clearpage \clearpage \typeout{Handling analysis CMS_2011_I954992}\subsection[CMS\_2011\_I954992]{CMS\_2011\_I954992\,\cite{Chatrchyan:2011ci}} \textbf{Exclusive photon-photon production of muon pairs in proton-proton collisions at $\sqrt{s} = 7$ TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+9279938}{9279938}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item David d'Enterria $\langle\,$\href{mailto:dde@cern.ch}{dde@cern.ch}$\,\rangle$ \item Jonathan Hollar $\langle\,$\href{mailto:jjhollar@mail.cern.ch}{jjhollar@mail.cern.ch}$\,\rangle$ \item Sercan Sen $\langle\,$\href{mailto:Sercan.Sen@cern.ch}{Sercan.Sen@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1111.5536}{1111.5536} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item gamma gamma TO mu+ mu- process.\end{itemize} \noindent A measurement of the exclusive two-photon production of muon pairs in proton-proton collisions at at a centre-of-mass energy 7 TeV with the final state $p \mu^+ \mu^- p$, is reported using data corresponding to an integrated luminosity of 40 pb$^-1$ collected in 2010. The measured cross section is obtained with a fit to the dimuon $p_T$ distribution for muon pairs with invariant mass greater than 11.5 GeV with each muon $p_T > 4$ GeV and $|\eta| < 2.1$. \clearpage \clearpage \typeout{Handling analysis CMS_2011_S8884919}\subsection[CMS\_2011\_S8884919]{CMS\_2011\_S8884919\,\cite{Khachatryan:2010nk}} \textbf{Measurement of the NSD charged particle multiplicity at \ensuremath{\sqrt{s}} = 0.9, 2.36, and 7 TeV with the CMS detector.}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0), (1180.0, 1180.0), (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8884919}{8884919}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Romain Rougny $\langle\,$\href{mailto:romain.rougny@cern.ch}{romain.rougny@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item J. High Energy Phys. 01 (2011) 079 \item DOI: \href{http://dx.doi.org/10.1007/JHEP01(2011)079}{10.1007/JHEP01(2011)079} \item arXiv: \href{http://arxiv.org/abs/1011.5531}{1011.5531} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Non-single-diffractive (NSD) events only. Should include double-diffractive (DD) events and non-diffractive (ND) events but NOT single-diffractive (SD) events. For example, in Pythia6 the SD processes to be turned off are 92 and 93 and in Pythia8 the SD processes are 103 and 104 (also called SoftQCD:singleDiffractive).\end{itemize} \noindent Measurements of primary charged hadron multiplicity distributions are presented for non-single-diffractive events in proton-proton collisions at centre-of-mass energies of \ensuremath{\sqrt{s}} = 0.9, 2.36, and 7 TeV, in five pseudorapidity ranges from |eta|<0.5 to |eta|<2.4. The data were collected with the minimum-bias trigger of the CMS experiment during the LHC commissioning runs in 2009 and the 7 TeV run in 2010. The average transverse momentum as a function of the multiplicity is also presented. The measurement of higher-order moments of the multiplicity distribution confirms the violation of Koba-Nielsen-Olesen scaling that has been observed at lower energies. \clearpage \clearpage \typeout{Handling analysis CMS_2011_S8941262}\subsection[CMS\_2011\_S8941262]{CMS\_2011\_S8941262\,\cite{Khachatryan:2011hf}} \textbf{Production cross-sections of muons from $b$ hadron decays in $pp$ collisions}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8941262}{8941262}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Wolfram Erdmann $\langle\,$\href{mailto:wolfram.erdmann@psi.ch}{wolfram.erdmann@psi.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item JHEP 1103,090 \item DOI: \href{http://dx.doi.org/10.1007/JHEP03(2011)090}{10.1007/JHEP03(2011)090} \item arXiv: \href{http://arxiv.org/abs/hep-ex/1101.3512}{hep-ex/1101.3512} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Inclusive QCD at 7 TeV, with no \pT cuts.\end{itemize} \noindent A measurement of the $b$-hadron production cross-section in proton-proton collisions at $\sqrt{s} = 7$~TeV. The dataset, corresponding to 85 inverse nanobarns, was recorded with the CMS experiment at the LHC using a low-threshold single-muon trigger. Events are selected by the presence of a muon with transverse momentum greater than 6 GeV with respect to the beam direction and pseudorapidity less than 2.1. The transverse momentum of the muon with respect to the closest jet discriminates events containing $b$ hadrons from background. The inclusive $b$-hadron production cross section is presented as a function of muon transverse momentum and pseudorapidity. \clearpage \clearpage \typeout{Handling analysis CMS_2011_S8950903}\subsection[CMS\_2011\_S8950903]{CMS\_2011\_S8950903\,\cite{Khachatryan:2011zj}} \textbf{Dijet azimuthal decorrelations in $pp$ collisions at $\sqrt{s} = 7$ TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8950903}{8950903}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Tomo Umer $\langle\,$\href{mailto:tomo.umer@cern.ch}{tomo.umer@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys. Rev. Lett. 106 (2011) 122003 \item arXiv: \href{http://arxiv.org/abs/1101.5029}{1101.5029} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Inclusive QCD at 7TeV comEnergy, ptHat (or equivalent) greater than 20 GeV\end{itemize} \noindent Measurements of dijet azimuthal decorrelations in pp collisions at \ensuremath{\sqrt{s}} = 7 TeV using the CMS detector at the CERN LHC are presented. The analysis is based on an inclusive dijet event sample corresponding to an integrated luminosity of 2.9/pb. Jets are anti-kt with $R=0.5$, $p_\perp>80(30)$ GeV and $|\eta|<1.1$. \clearpage \clearpage \typeout{Handling analysis CMS_2011_S8957746}\subsection[CMS\_2011\_S8957746]{CMS\_2011\_S8957746\,\cite{Khachatryan:2011dx}} \textbf{Event shapes}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8957746}{8957746}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Lett.B699:48-67,2011 \item arXiv: \href{http://arxiv.org/abs/1102.0068}{1102.0068} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp QCD interactions at 7000 GeV. Particles with c*tau>10mm are stable.\end{itemize} \noindent Central transverse Thrust and Minor have been measured in proton-proton collisions at \ensuremath{\sqrt{s}}=7 TeV, with a data sample collected with the CMS detector at the LHC. The sample corresponds to an integrated luminosity of 3.2 inverse picobarns. Input for the variables are anti-kt jets with $R=0.5$. \clearpage \clearpage \typeout{Handling analysis CMS_2011_S8968497}\subsection[CMS\_2011\_S8968497]{CMS\_2011\_S8968497\,\cite{Khachatryan:2011as}} \textbf{Measurement of dijet angular distributions and search for quark compositeness in $pp$ collisions at $\sqrt{s} = 7$ TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (CERN LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8968497}{8968497}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item A. Hinzmann \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.Lett.106:201804,2011 \item DOI: \href{http://dx.doi.org/10.1103/PhysRevLett.106.201804}{10.1103/PhysRevLett.106.201804} \item arXiv: \href{http://arxiv.org/abs/hep-ex/1102.2020}{hep-ex/1102.2020} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item ~\end{itemize} \noindent Measurement of dijet angular distributions in proton-proton collisions at a center-of-mass energy of 7 TeV. The data sample, collected with single jet triggers, has a total integrated luminosity of 36 pb-1, with jets being reconstructed using the anti-KT clustering algorithm using R=0.5. The data are presented for the variable CHI defined as EXP(|Y1-Y2|) where Y1 and Y2 are the rapidities of the two leading (highest PT) jets.' \clearpage \clearpage \typeout{Handling analysis CMS_2011_S8973270}\subsection[CMS\_2011\_S8973270]{CMS\_2011\_S8973270\,\cite{Khachatryan:2011wq}} \textbf{B/anti-B angular correlations based on secondary vertex reconstruction in pp collisions}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8973270}{8973270}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Lukas Wehrli $\langle\,$\href{mailto:wehrlilu@cern.ch}{wehrlilu@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item JHEP 1103 136 \item DOI: \href{http://dx.doi.org/10.1007/JHEP03(2011)136}{10.1007/JHEP03(2011)136} \item arXiv: \href{http://arxiv.org/abs/hep-ex/1102.3194}{hep-ex/1102.3194} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Inclusive QCD at 7TeV comEnergy, pthat cut (or similar) recommended (leading jet pt > 56 GeV required)\end{itemize} \noindent The differential $B\bar{B}$ cross-section is measured as a function of the opening angle $\Delta{R}$ and $\Delta\phi$ using data collected with the CMS detector during 2010 and corresponding to an integrated luminosity of 3.1 pb$^{-1}$. The measurement is performed for three different event energy scales, characterized by the transverse momentum of the leading jet in the event (above 56 GeV, above 84 GeV and above 120 GeV). Simulated events are normalised in the region $\Delta{R} > 2.4$ and $\Delta\phi > 3/4\pi$ respectively. \clearpage \clearpage \typeout{Handling analysis CMS_2011_S8978280}\subsection[CMS\_2011\_S8978280]{CMS\_2011\_S8978280\,\cite{Khachatryan:2011tm}} \textbf{Kshort, Lambda, and Cascade- transverse momentum and rapidity spectra from proton-proton collisions at 900 and 7000 GeV.}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0), (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8978280}{8978280}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Kevin Stenson $\langle\,$\href{mailto:kevin.stenson@colorado.edu}{kevin.stenson@colorado.edu}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item JHEP 05 (2011) 064 \item DOI: \href{http://dx.doi.org/10.1007/JHEP05(2011)064}{10.1007/JHEP05(2011)064} \item arXiv: \href{http://arxiv.org/abs/1102.4282}{1102.4282} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Non-single-diffractive (NSD) events only. Should include double-diffractive (DD) events and non-diffractive (ND) events but NOT single-diffractive (SD) events. For example, in Pythia6 the SD processes to be turned off are 92 and 93, and in Pythia8 the SD processes are 103 and 104 (also called SoftQCD:singleDiffractive).\end{itemize} \noindent The spectra of Kshort, Lambda, and Cascade- particles were measured versus transverse-momentum (\pT) and rapidity(y) in proton-proton collisions at center-of-mass energies 900 and 7000 GeV. The production is normalized to all non-single-diffractive (NSD) events using corrections for trigger and selection efficiency, acceptance, and branching ratios. The results cover a rapidity range of |y|<2 and a \pT range from 0 to 10 GeV (Kshort and Lambda) and 0 to 6 GeV (Cascade-). Antiparticles are included in all measurements so only the sum of Lambda and Lambdabar and Cascade- and anti-Cascade- are given. The rapidity distributions are shown versus |y| but normalized to a unit of y. Ratios of Lambda/Kshort and Cascade-/Lambda production versus \pT and |y| are also given, with somewhat smaller systematic uncertainties than obtained from taking the ratio of the individual distributions.' The data were corrected according to the SD/DD/ND content of the CMS trigger, as predicted by pythia6. The uncertainties connected with correct or uncorrect modelling of diffraction were included in the systematic errors. \clearpage \clearpage \typeout{Handling analysis CMS_2011_S9086218}\subsection[CMS\_2011\_S9086218]{CMS\_2011\_S9086218\,\cite{:2011me}} \textbf{Measurement of the inclusive jet cross-section in $pp$ collisions at $\sqrt{s} = 7$ TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+9086218}{9086218}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Rasmus Sloth Hansen<rsh07@phys.au.dk> \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item http://cdsweb.cern.ch/record/1355680 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Inclusive QCD at 7TeV comEnergy, ptHat (or equivalent) greater than 10 GeV\end{itemize} \noindent The inclusive jet cross section is measured in pp collisions with a center-of-mass energy of 7 TeV at the LHC using the CMS experiment. The data sample corresponds to an integrated luminosity of 34 inverse picobarns. The measurement is made for jet transverse momenta in the range 18-1100 GeV and for absolute values of rapidity less than 3. Jets are anti-kt with $R=0.5$, $p_\perp>18$ GeV and $|y|<3.0$. \clearpage \clearpage \typeout{Handling analysis CMS_2011_S9088458}\subsection[CMS\_2011\_S9088458]{CMS\_2011\_S9088458\,\cite{Chatrchyan:2011wn}} \textbf{Measurement of ratio of the 3-jet over 2-jet cross section in pp collisions at \ensuremath{\sqrt{s}} = 7 TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+9088458}{9088458}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Tomo Umer $\langle\,$\href{mailto:tomo.umer@cern.ch}{tomo.umer@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys. Lett. B 702 (2011) 336 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Inclusive QCD at 7TeV comEnergy, ptHat (or equivalent) greater than 30 GeV\end{itemize} \noindent A measurement of the ratio of the inclusive 3-jet to 2-jet cross sections as a function of the total jet transverse momentum, HT, in the range 0.2 < HT < 2.5 TeV is presented. The data have been collected at a proton-proton centre-of-mass energy of 7 TeV with the CMS detector at the LHC, and correspond to an integrated luminosity of 36/pb. Jets are anti-kt with $R=0.5$, $p_\perp>50$ GeV and $|\eta|<2.5$. \clearpage \clearpage \typeout{Handling analysis CMS_2011_S9120041}\subsection[CMS\_2011\_S9120041]{CMS\_2011\_S9120041\,\cite{Chatrchyan:2011id}} \textbf{Traditional leading jet UE measurement at $\\ensuremath{\sqrt{s}}=0.9$ and 7 TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0), (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+9120041}{9120041}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Mohammed Zakaria (mzakaria@ufl.edu) \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item J. High Energy Phys 09 (2011) 109 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Requires inclusive inelastic events (non-diffractive and inelastic diffractive). The profile plots require large statistics.\end{itemize} \noindent A measurement of the underlying activity in scattering processes with a hard scale in the several-GeV region is performed in proton-proton collisions at Energies of 0.9 and 7 TeV, using data collected by the CMS experiment at the LHC. The production of charged particles with pseudorapidity |eta| < 2 and transverse momentum \pT > 0.5 GeV/c is studied in the azimuthal region transverse to that of the leading set of charged particles forming a track-jet. Various comparisons are made between the two different energies and also beteen two sets of cuts on \pT for leading track jet \pT-leading > 3 GeV and \pT-leading > 20 GeV. The activity is studied using 5 types of plots. 2 profile plots for the multiplcity of charged particles and the scalar sum of \pT. and 3 distributions for the two previous quantities as well we \pT for all the particles in the transverse region. \clearpage \clearpage \typeout{Handling analysis CMS_2011_S9215166}\subsection[CMS\_2011\_S9215166]{CMS\_2011\_S9215166\,\cite{Chatrchyan:2011wm}} \textbf{Forward energy flow in MB and dijet events at 0.9 and 7 TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0), (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+9215166}{9215166}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item S. Dooling $\langle\,$\href{mailto:samantha.dooling@cern.ch}{samantha.dooling@cern.ch}$\,\rangle$ \item A. Knutsson $\langle\,$\href{mailto:albert.knutsson@cern.ch}{albert.knutsson@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item JHEP 1111 148 \item DOI: \href{http://dx.doi.org/10.1007/JHEP11(2011)148}{10.1007/JHEP11(2011)148} \item arXiv: \href{http://arxiv.org/abs/hep-ex/1110.0211}{hep-ex/1110.0211} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $pp$ MB and QCD interactions at 0.9 and 7~TeV. No \pT-cuts.\end{itemize} \noindent Forward energy flow measured by CMS at $\sqrt{s} = 0.9$ and 7~TeV in MB and dijet events. \clearpage \clearpage \typeout{Handling analysis CMS_2012_I1087342}\subsection[CMS\_2012\_I1087342]{CMS\_2012\_I1087342\,\cite{Chatrchyan:2012gwa}} \textbf{Measurement of forward and forward+central jets at \ensuremath{\sqrt{s}} = 7 TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+1087342}{1087342}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Albert Knutsson $\langle\,$\href{mailto:albert.knutsson@cern.ch}{albert.knutsson@cern.ch}$\,\rangle$ \item Rasmus Sloth Hansen $\langle\,$\href{mailto:rsh07@phys.au.dk}{rsh07@phys.au.dk}$\,\rangle$ \item Bo Zhu \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item JHEP 1206 (2012) 036 \item CMS-FWD-11-002 \item CERN-PH-EP-2011-179 \item doi 10.1007/JHEP06(2012)036 \item arXiv: \href{http://arxiv.org/abs/1202.0704}{1202.0704} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp QCD interactions at 7 TeV.\end{itemize} \noindent Inclusive forward jets and forward+central jets measured by CMS at \ensuremath{\sqrt{s}}=7 TeV. \clearpage \clearpage \typeout{Handling analysis CMS_2012_I1102908}\subsection[CMS\_2012\_I1102908]{CMS\_2012\_I1102908\,\cite{Chatrchyan:2012pb}} \textbf{Measurement of inclusive and exclusive dijet production ratio at large rapidity intervals at center-of-mass energy 7 TeV.}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Grzegorz Brona \item Vladimir Gavrilov \item Hannes Jung \item Victor Kim \item Victor Murzin \item Vadim Oreshkin \item Grigory Pivovarov \item Ivan Pozdnyakov \item Grigory Safronov \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item CMS-FWD-10-014 \item CERN-PH-EP-2012-088 \item arXiv: \href{http://arxiv.org/abs/1204.0696}{1204.0696} \item Submitted to the EPJ C \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Inclusive QCD at 7TeV comEnergy, ptHat (or equivalent) greater than 15 GeV\end{itemize} \noindent This is a measurement of the ratio of inclusive to exclusive dijet production as a function of the absolute distance in rapidity, $\Delta y$, between jets. The ratio of the Mueller-Navelet to exclusive dijet production is also measured. These measurements were performed with the CMS detector in proton-proton collisions at $\sqrt s = 7$ TeV for jets with $p_T > 35$ GeV and $|y| < 4.7$ taken from a mixture of two data samples, one of which containing dijets with moderate rapidity separation and the other containing dijets with large rapidity separation, with integrated luminosity of 33/nb and 5/pb respectively. The measured observables are corrected for detector effects. \clearpage \clearpage \typeout{Handling analysis CMS_2012_I1107658}\subsection[CMS\_2012\_I1107658]{CMS\_2012\_I1107658\,\cite{Chatrchyan:2012tb}} \textbf{Measurement of the underlying event activity in the Drell-Yan process at a centre-of-mass energy of 7 TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Sunil Bansal (sunil.bansal@cern.ch) \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item CMS-QCD-11-012 \item CERN-PH-EP-2012-085 \item arXiv: \href{http://arxiv.org/abs/1204.1411}{1204.1411} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Drell-Yan events with $Z/\gamma^* \to \mu\mu$. $m(\mu,\mu) > 20$ GeV\end{itemize} \noindent A measurement of the underlying event activity using Drell-Yan events using muonic final state. The production of charged particles with pseudorapidity $|\eta| < 2$ and transverse momentum $p_\perp > 0.5\,\GeV/c$ is studied in towards, transverse and away region w.r.t. to the direction of di-muon system. The UE activity is measured in terms of of a particle density and an energy density. The particle density is computed as the average number of primary charged particles per unit pseudorapidity and per unit azimuth. The energy density is expressed in terms of the average of the scalar sum of the transverse momenta of primary charged particles per unit pseudorapidity and azimuth. The ratio of the energy and particle density is also reported in 3 regions. UE activity is studied as a function of invariant mass of muon pair ($M_{\mu\mu}$) by limiting the ISR contribution by requiring transverse momentum of muon pair $p_\perp(\mu\mu) < 5\,\GeV/c$. The $p_\perp(\mu\mu)$ dependence is studied for the events having $M_{\mu\mu}$ in window of 81--101 GeV/$c$. The normalized charged particle multiplicity and $p_\perp$ spectrum of the charged particles in three regions also been reported for events having $M_{\mu\mu}$ in window of 81--101 GeV/$c$. Multiplicity and $p_\perp$ spectra in the transverse region are also reported, for events having $p_\perp(\mu\mu) < 5\,\GeV/c$. \clearpage \clearpage \typeout{Handling analysis CMS_2012_I1184941}\subsection[CMS\_2012\_I1184941]{CMS\_2012\_I1184941\,\cite{:2012vc}} \textbf{Measurement of the differential cross section for inclusive dijet production as a function of $\xi$ in 7 TeV proton-proton collisions.}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Sercan Sen $\langle\,$\href{mailto:ssen@cern.ch}{ssen@cern.ch}$\,\rangle$ \item Alexander Proskuryakov $\langle\,$\href{mailto:aproskur@mail.cern.ch}{aproskur@mail.cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1209.1805}{1209.1805} \item Submitted to Phys. Rev. D \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item High statistics is needed to observe events in the lowest (xi) bin. Distributions are presented for HardQCD events (i.e., in PYTHIA with ptHatMin=15GeV) and Diffractive events.\end{itemize} \noindent Measurement of the differential cross section for inclusive dijet production as a function of $\xi$ which approximates the fractional momentum loss of the scattered proton in single-diffraction events. The data used has a total integrated luminosity of 2.7 nb-1 collected during 2010 with low instantaneous luminosity. Events are selected with at least two jets in $|\eta| < 4.4$ with $\pT > 20$ GeV and all final states particles are used for the reconstruction of $\xi$. \clearpage \clearpage \typeout{Handling analysis CMS_2012_I1193338}\subsection[CMS\_2012\_I1193338]{CMS\_2012\_I1193338\,\cite{:2012}} \textbf{Measurement of the inelastic proton-proton cross section at \ensuremath{\sqrt{s}}=7 TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Sercan Sen $\langle\,$\href{mailto:ssen@cern.ch}{ssen@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1210.6718}{1210.6718} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Inelastic events (non-diffractive and inelastic diffractive).\end{itemize} \noindent The inelastic cross-section is measured through two independent methods based on information from (i) forward calorimetry (for pseudorapidity $3 < |\eta| < 5$), in collisions where at least one proton loses more than $\xi > 5 \cdot 10^{-6}$ of its longitudinal momentum, and (ii) the central tracker ($|\eta| < 2.4$), in collisions containing an interaction vertex with more than 1, 2, or 3 tracks with $p_\perp > 200$ MeV/c. \clearpage \clearpage \typeout{Handling analysis CMS_2012_PAS_FWD_11_003}\subsection{CMS\_2012\_PAS\_FWD\_11\_003} \textbf{Study of the Underlying Event at Forward Rapidity in Proton-Proton Collisions at the LHC}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0), (1380.0, 1380.0), (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+~}{~}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Samantha Dooling $\langle\,$\href{mailto:samantha.dooling@desy.de}{samantha.dooling@desy.de}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item CMS-PAS-FWD-11-003 \item http://cdsweb.cern.ch/record/1434458 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Inelastic events (non-diffractive and diffractive) at $\sqrt{s}$ = 0.9, 2.76 and 7 TeV.\end{itemize} \noindent Ratio of the energy deposited in the pseudorapidity range $-6.6 < \eta < -5.2$ for events with a charged particle jet with $|\eta|<2$ with respect to the energy in inclusive events, as a function of charged particle jet transverse momentum for $\sqrt{s}=$0.9, 2.76 and 7 TeV. \clearpage \clearpage \typeout{Handling analysis CMS_2012_PAS_QCD_11_010}\subsection[CMS\_2012\_PAS\_QCD\_11\_010]{CMS\_2012\_PAS\_QCD\_11\_010\,\cite{CMS-PAS-QCD-11-010}} \textbf{Strange particle production in underlying events in proton--proton collisions at $\sqrt{s} = 7$ TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Status:} PRELIMINARY\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Sercan Sen $\langle\,$\href{mailto:Sercan.Sen@cern.ch}{Sercan.Sen@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item CMS-PAS-QCD-11-010 \item http://cdsweb.cern.ch/record/1463352 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Inelastic events (non-diffractive and inelastic diffractive) at $\sqrt{s} = 7$\;TeV.\end{itemize} \noindent Measurements of the production of $K^0_S$, $\Lambda$ and $\bar{Lambda}$ particles in the underlying activity of events with a \pT scale ranging from 1 to 50 GeV/$c$ in $pp$ collisions at $\sqrt{s} = 7$\;TeV. \clearpage \clearpage \typeout{Handling analysis CMS_QCD_10_024}\subsection[CMS\_QCD\_10\_024]{CMS\_QCD\_10\_024\,\cite{CMS-PAS-QCD-10-024}} \textbf{Pseudorapidity distributions of charged particles at \ensuremath{\sqrt{s}}=0.9 and 7 TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (450.0, 450.0), (3500.0, 3500.0) GeV \newline \textbf{Experiment:} CMS (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+~}{~}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item P. Katsas $\langle\,$\href{mailto:panagiotis.katsas@cern.ch}{panagiotis.katsas@cern.ch}$\,\rangle$ \item A. Knutsson $\langle\,$\href{mailto:albert.knutsson@cern.ch}{albert.knutsson@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item CMS-PAS-QCD-10-024 \item https://cdsweb.cern.ch/record/1341853?ln=en \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $pp$ collisions at 0.9 and 7~TeV. Minimum bias events.\end{itemize} \noindent Pseudorapidity distributions of charged particles in $pp$ collisions at $\sqrt{s} = 0.9$ and 7~TeV with at least one central charged particle. \clearpage \clearpage \typeout{Handling analysis LHCB_2010_I867355}\subsection[LHCB\_2010\_I867355]{LHCB\_2010\_I867355\,\cite{Aaij:2010gn}} \textbf{Measurement of sigma(pp to bbar{b} X at sqrt{s}=7 TeV in the forward region}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} LHCb (LHC)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+8785570}{8785570}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@ed.ac.uk}{andy.buckley@ed.ac.uk}$\,\rangle$ \item Sercan Sen $\langle\,$\href{mailto:sercan.sen@cern.ch}{sercan.sen@cern.ch}$\,\rangle$ \item Peter Skands $\langle\,$\href{mailto:Peter.Skands@cern.ch}{Peter.Skands@cern.ch}$\,\rangle$ \item Sheldon Stone $\langle\,$\href{mailto:stone@physics.syr.edu}{stone@physics.syr.edu}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1009.2731}{1009.2731} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp to b-hadron + X at 7 TeV. i.e., Swith on "HardQCD:gg2bbbar" and "HardQCD:qqbar2bbbar" flags in pythia8(v165).\end{itemize} \noindent The average cross-section to produce b-flavoured or bbar-flavoured hadrons is measured in different pseudorapidity intervals over the entire range of \pT assuming the LEP (and Tevatron) fractions for fragmentation into b-flavoured hadrons. \clearpage \clearpage \typeout{Handling analysis LHCF_2012_I1115479}\subsection[LHCF\_2012\_I1115479]{LHCF\_2012\_I1115479\,\cite{Adriani:2012ap}} \textbf{Measurement of forward neutral pion transverse momentum spectra for $\sqrt{s}$ = 7 TeV proton-proton collisions at LHC}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} LHCF (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Sercan Sen $\langle\,$\href{mailto:ssen@cern.ch}{ssen@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/1205.4578}{1205.4578} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Inelastic events (ND+SD+DD) at $\sqrt{s}$ = 7 TeV.\end{itemize} \noindent The inclusive production rate of neutral pions has been measured by LHCf experiment during $\sqrt{s}=7$ TeV pp collision operation in early 2010. In order to ensure good event reconstruction efficiency, the range of the $\pi^0$ rapidity and $p_\perp$ are limited to $8.9 < y < 11.0$ and $p_\perp < 0.6$ GeV, respectively. \clearpage \clearpage \typeout{Handling analysis TOTEM_2012_002}\subsection[TOTEM\_2012\_002]{TOTEM\_2012\_002\,\cite{Antchev:1472948}} \textbf{Measurement of proton-proton elastic scattering and total cross section at \ensuremath{\sqrt{s}} = 7 TeV.}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} TOTEM (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Sercan Sen $\langle\,$\href{mailto:Sercan.Sen@cern.ch}{Sercan.Sen@cern.ch}$\,\rangle$ \item Peter Skands $\langle\,$\href{mailto:Peter.Skands@cern.ch}{Peter.Skands@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item CERN-PH-EP-2012-239 \item http://cds.cern.ch/record/1472948 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Elastic events only.\end{itemize} \noindent Measurement of the elastic differential cross-section in proton-proton interactions at a centre-of-mass energy $\sqrt{s}=7$ TeV at the LHC. The data, which cover the $|t|$ range 0.005--0.2 $\text{GeV}^2$, were collected using Roman Pot detectors very close to the outgoing beam in October 2011, allowing the precise extrapolation down to the optical point, $t = 0$, and hence the derivation of the elastic as well as the total cross-section via the optical theorem. \clearpage \clearpage \typeout{Handling analysis TOTEM_2012_I1115294}\subsection{TOTEM\_2012\_I1115294} \textbf{Forward dN/deta at 7 TeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (3500.0, 3500.0) GeV \newline \textbf{Experiment:} TOTEM (LHC)\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Europhys.Lett. 98 (2012) 31002 \item arXiv: \href{http://arxiv.org/abs/1205.4105}{1205.4105} \item CERN-PH-EP-2012-106 \item TOTEM 2012-01 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp QCD interactions at 900 GeV and 7 TeV.\end{itemize} \noindent The TOTEM experiment has measured the charged particle pseudorapidity density $dN_\text{ch}/d\eta$ in pp collisions at $\sqrt{s} = 7$\,TeV for $5.3 < |\eta| < 6.4$ in events with at least one charged particle with transverse momentum above 40 MeV/c in this pseudorapidity range. \clearpage \section{SPS analyses}\typeout{Handling analysis UA1_1990_S2044935}\subsection[UA1\_1990\_S2044935]{UA1\_1990\_S2044935\,\cite{Albajar:1989an}} \textbf{UA1 multiplicities, transverse momenta and transverse energy distributions.}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (31.5, 31.5), (100.0, 100.0), (250.0, 250.0), (450.0, 450.0) GeV \newline \textbf{Experiment:} UA1 (SPS)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+2044935}{2044935}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \item Christophe Vaillant $\langle\,$\href{mailto:c.l.j.j.vaillant@durham.ac.uk}{c.l.j.j.vaillant@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Nucl.Phys.B353:261,1990 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD min bias events at sqrtS = 63, 200, 500 and 900 GeV.\end{itemize} \noindent Particle multiplicities, transverse momenta and transverse energy distributions at the UA1 experiment, at energies of 200, 500 and 900 GeV (with one plot at 63 GeV for comparison). \clearpage \clearpage \typeout{Handling analysis UA5_1982_S875503}\subsection[UA5\_1982\_S875503]{UA5\_1982\_S875503\,\cite{Alpgard:1982zx}} \textbf{UA5 multiplicity and pseudorapidity distributions for $pp$ and $p\bar{p}$.}\newline \textbf{Beams:} $\bar{p}$\,$p$, $p$\,$p$ \newline \textbf{Energies:} (26.5, 26.5) GeV \newline \textbf{Experiment:} UA5 (SPS)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+875503}{875503}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \item Christophe Vaillant $\langle\,$\href{mailto:c.l.j.j.vaillant@durham.ac.uk}{c.l.j.j.vaillant@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Lett.112B:183,1982 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Min bias QCD events at \ensuremath{\sqrt{s}} = 53~GeV. Run with both $pp$ and $p\bar{p}$ beams.\end{itemize} \noindent Comparisons of multiplicity and pseudorapidity distributions for $pp$ and $p\bar{p}$ collisions at 53 GeV, based on the UA5 53~GeV runs in 1982. Data confirms the lack of significant difference between the two beams. \clearpage \clearpage \typeout{Handling analysis UA5_1986_S1583476}\subsection[UA5\_1986\_S1583476]{UA5\_1986\_S1583476\,\cite{Alner:1986xu}} \textbf{Pseudorapidity distributions in $p\bar{p}$ (NSD, NSD+SD) events at \ensuremath{\sqrt{s}} = 200 and 900 GeV}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (100.0, 100.0), (450.0, 450.0) GeV \newline \textbf{Experiment:} UA5 (CERN SPS)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+1583476}{1583476}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \item Holger Schulz $\langle\,$\href{mailto:holger.schulz@physik.hu-berlin.de}{holger.schulz@physik.hu-berlin.de}$\,\rangle$ \item Christophe Vaillant $\langle\,$\href{mailto:c.l.j.j.vaillant@durham.ac.uk}{c.l.j.j.vaillant@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Eur. Phys. J. C33, 1, 1986 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item * Single- and double-diffractive, plus non-diffractive inelastic, events. \item $p\bar{p}$ collider, \ensuremath{\sqrt{s}} = 200 or 900 GeV. \item The trigger implementation for NSD events is the same as in, e.g., the UA5_1989 analysis. No further cuts are needed.\end{itemize} \noindent This study comprises measurements of pseudorapidity distributions measured with the UA5 detector at 200 and 900 GeV center of momentum energy. There are distributions for non-single diffractive (NSD) events and also for the combination of single- and double-diffractive events. The NSD distributions are further studied for certain ranges of the events charged multiplicity. \clearpage \clearpage \typeout{Handling analysis UA5_1987_S1640666}\subsection[UA5\_1987\_S1640666]{UA5\_1987\_S1640666\,\cite{Alner:1987wb}} \textbf{UA5 charged multiplicity measurements at 546 GeV}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (273.0, 273.0) GeV \newline \textbf{Experiment:} UA5 (CERN SPS)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+1640666}{1640666}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Holger Schulz $\langle\,$\href{mailto:holger.schulz@physik.hu-berlin.de}{holger.schulz@physik.hu-berlin.de}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rept.154:247-383,1987 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item QCD and diffractive events at 546 GeV\end{itemize} \noindent Charged particle multiplicity measurement. \clearpage \clearpage \typeout{Handling analysis UA5_1988_S1867512}\subsection[UA5\_1988\_S1867512]{UA5\_1988\_S1867512\,\cite{Ansorge:1988fg}} \textbf{Charged particle correlations in UA5 $p \\bar{p}$ NSD events at \ensuremath{\sqrt{s}} = 200, 546 and 900 GeV.}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (100.0, 100.0), (273.0, 273.0), (450.0, 450.0) GeV \newline \textbf{Experiment:} UA5 (CERN SPS)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+1867512}{1867512}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Holger Schulz $\langle\,$\href{mailto:holger.schulz@physik.hu-berlin.de}{holger.schulz@physik.hu-berlin.de}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Z.Phys.C37:191-213,1988 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item ppbar events. Non-single diffractive events need to be switched on. The trigger implementation is the same as in UA5_1989_S1926373. Important: Only the correlation strengths with symmetric eta bins should be used for tuning.\end{itemize} \noindent Data on two-particle pseudorapidity and multiplicity correlations of charged particles for non single-diffractive $\bar{p}p$ collisions at c.m. energies of 200, 546 and 900 GeV. Pseudorapidity correlations interpreted in terms of a cluster model, which has been motivated by this and other experiments, require on average about two charged particles per cluster. The decay width of the clusters in pseudorapidity is approximately independent of multiplicity and of c.m. energy. The investigations of correlations in terms of pseudorapidity gaps confirm the picture of cluster production. The strength of forward-backward multiplicity correlations increases linearly with ins and depends strongly on position and size of the pseudorapidity gap separating the forward and backward interval. All our correlation studies can be understood in terms of a cluster model in which clusters contain on average about two charged particles, i.e. are of similar magnitude to earlier estimates from the ISR. \clearpage \clearpage \typeout{Handling analysis UA5_1989_S1926373}\subsection[UA5\_1989\_S1926373]{UA5\_1989\_S1926373\,\cite{Ansorge:1988kn}} \textbf{UA5 charged multiplicity measurements}\newline \textbf{Beams:} $\bar{p}$\,$p$ \newline \textbf{Energies:} (100.0, 100.0), (450.0, 450.0) GeV \newline \textbf{Experiment:} UA5 (CERN SPS)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+1926373}{1926373}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Holger Schulz $\langle\,$\href{mailto:holger.schulz@physik.hu-berlin.de}{holger.schulz@physik.hu-berlin.de}$\,\rangle$ \item Christophe L. J. Vaillant $\langle\,$\href{mailto:c.l.j.j.vaillant@durham.ac.uk}{c.l.j.j.vaillant@durham.ac.uk}$\,\rangle$ \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Z. Phys. C - Particles and Fields 43, 357-374 (1989) \item DOI: \href{http://dx.doi.org/10.1007/BF01506531}{10.1007/BF01506531} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Minimum bias events at \ensuremath{\sqrt{s}} = 200 and 900 GeV. Enable single and double diffractive events in addition to non-diffractive processes.\end{itemize} \noindent Multiplicity distributions of charged particles produced in non-single-diffractive collisions between protons and antiprotons at centre-of-mass energies of 200 and 900 GeV. The data were recorded in the UA5 streamer chambers at the CERN collider, which was operated in a pulsed mode between the two energies. This analysis confirms the violation of KNO scaling in full phase space found by the UA5 group at an energy of 546 GeV, with similar measurements at 200 and 900 GeV. \clearpage \section{HERA analyses}\typeout{Handling analysis H1_1994_S2919893}\subsection[H1\_1994\_S2919893]{H1\_1994\_S2919893\,\cite{Abt:1994ye}} \textbf{H1 energy flow and charged particle spectra in DIS}\newline \textbf{Beams:} $p$\,$e^-$, $p$\,$e^+$ \newline \textbf{Energies:} (820.0, 26.7) GeV \newline \textbf{Experiment:} H1 (HERA)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+2919893}{2919893}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:peter.richardson@durham.ac.uk}{peter.richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Z.Phys.C63:377-390,1994 \item DOI: \href{http://dx.doi.org/10.1007/BF01580319}{10.1007/BF01580319} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^- p$ / $e^+ p$ deep inelastic scattering, 820~GeV protons colliding with 26.7~GeV electrons\end{itemize} \noindent Global properties of the hadronic final state in deep inelastic scattering events at HERA are investigated. The data are corrected for detector effects. Energy flows in both the laboratory frame and the hadronic centre of mass system, and energy-energy correlations in the laboratory frame are presented. Historically, the Ariadne colour dipole model provided the only satisfactory description of this data, hence making it a useful 'target' analysis for MC shower models. \clearpage \clearpage \typeout{Handling analysis H1_2000_S4129130}\subsection[H1\_2000\_S4129130]{H1\_2000\_S4129130\,\cite{Adloff:1999ws}} \textbf{H1 energy flow in DIS}\newline \textbf{Beams:} $p$\,$e^+$ \newline \textbf{Energies:} (820.0, 27.5) GeV \newline \textbf{Experiment:} H1 (HERA)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4129130}{4129130}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:peter.richardson@durham.ac.uk}{peter.richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Eur.Phys.J.C12:595-607,2000 \item DOI: \href{http://dx.doi.org/10.1007/s100520000287}{10.1007/s100520000287} \item arXiv: \href{http://arxiv.org/abs/hep-ex/9907027v1}{hep-ex/9907027v1} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^+ p$ deep inelastic scattering with $p$ at 820 GeV, $e^+$ at 27.5 GeV \ensuremath{\to} \ensuremath{\sqrt{s}} = 300 GeV\end{itemize} \noindent Measurements of transverse energy flow for neutral current deep- inelastic scattering events produced in positron-proton collisions at HERA. The kinematic range covers squared momentum transfers $Q^2$ from 3.2 to 2200 GeV$^2$; the Bjorken scaling variable $x$ from $8 \times 10^{-5}$ to 0.11 and the hadronic mass $W$ from 66 to 233 GeV. The transverse energy flow is measured in the hadronic centre of mass frame and is studied as a function of $Q^2$, $x$, $W$ and pseudorapidity. The behaviour of the mean transverse energy in the central pseudorapidity region and an interval corresponding to the photon fragmentation region are analysed as a function of $Q^2$ and $W$. This analysis is useful for exploring the effect of photon PDFs and for tuning models of parton evolution and treatment of fragmentation and the proton remnant in DIS. \clearpage \section{RHIC analyses}\typeout{Handling analysis STAR_2006_S6500200}\subsection[STAR\_2006\_S6500200]{STAR\_2006\_S6500200\,\cite{Adams:2006nd}} \textbf{Identified hadron spectra in pp at 200 GeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (100.0, 100.0) GeV \newline \textbf{Experiment:} STAR (RHIC pp 200 GeV)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+6500200}{6500200}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Bedanga Mohanty $\langle\,$\href{mailto:bedanga@rcf.bnl.gov}{bedanga@rcf.bnl.gov}$\,\rangle$ \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys. Lett. B637, 161 \item nucl-ex/0601033 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp at 200 GeV\end{itemize} \noindent \pT distributions of charged pions and (anti)protons in pp collisions at $\sqrt{s} = 200$ GeV, measured by the STAR experiment at RHIC in non-single-diffractive minbias events. \clearpage \clearpage \typeout{Handling analysis STAR_2006_S6860818}\subsection[STAR\_2006\_S6860818]{STAR\_2006\_S6860818\,\cite{Abelev:2006cs}} \textbf{Strange particle production in pp at 200 GeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (100.0, 100.0) GeV \newline \textbf{Experiment:} STAR (RHIC pp 200 GeV)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+6860818}{6860818}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys. Rev. C75, 064901 \item nucl-ex/0607033 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp at 200 GeV\end{itemize} \noindent \pT distributions of identified strange particles in pp collisions at $\sqrt{s} = 200$ GeV, measured by the STAR experiment at RHIC in non-single-diffractive minbias events. WARNING The $\langle \pT \rangle$ vs. particle mass plot is not validated yet and might be wrong. \clearpage \clearpage \typeout{Handling analysis STAR_2006_S6870392}\subsection[STAR\_2006\_S6870392]{STAR\_2006\_S6870392\,\cite{Abelev:2006uq}} \textbf{Inclusive jet cross-section in pp at 200 GeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (100.0, 100.0) GeV \newline \textbf{Experiment:} STAR (RHIC pp 200 GeV)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+6870392}{6870392}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys. Rev. Lett. 97, 252001 \item hep-ex/0608030 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp at 200 GeV\end{itemize} \noindent Inclusive jet cross section as a function of \pT in pp collisions at $\sqrt{s} = 200$ GeV, measured by the STAR experiment at RHIC. \clearpage \clearpage \typeout{Handling analysis STAR_2009_UE_HELEN}\subsection{STAR\_2009\_UE\_HELEN} \textbf{UE measurement in pp at 200 GeV}\newline \textbf{Beams:} $p$\,$p$ \newline \textbf{Energies:} (100.0, 100.0) GeV \newline \textbf{Experiment:} STAR (RHIC pp 200 GeV)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+None}{None}\newline \textbf{Status:} PRELIMINARY\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Helen Caines $\langle\,$\href{mailto:helen.caines@yale.edu}{helen.caines@yale.edu}$\,\rangle$ \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item arXiv: \href{http://arxiv.org/abs/0910.5203}{0910.5203} \item arXiv: \href{http://arxiv.org/abs/0907.3460}{0907.3460} \item WARNING! Mark as "STAR preliminary" and contact authors when using it! \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item pp at 200 GeV\end{itemize} \noindent UE analysis similar to Rick Field's leading jet analysis. SIScone with radius/resolution parameter R=0.7 is used. Particles with $\pT > 0.2~\text{GeV}$ and $|\eta| < 1$ are included in the analysis. All particles are assumed to have zero mass. Only jets with neutral energy $< 0.7$ are included. For the transMIN and transMAX $\Delta(\phi)$ is between $\pi/3$ and $2\pi/3$, and $\Delta(\eta) < 2.0$. For the jet region the area of the jet is used for the normalization, i.e. the scaling factor is $\pi R^2$ and not $\mathrm{d}\phi\mathrm{d}\eta$ (this is different from what Rick Field does!). The tracking efficiency is $\sim 0.8$, but that is an approximation, as below $\pT \sim 0.6~\text{GeV}$ it is falling quite steeply. \clearpage \section{Monte Carlo analyses}\typeout{Handling analysis MC_DIPHOTON}\subsection{MC\_DIPHOTON} \textbf{Monte Carlo validation observables for diphoton production at LHC}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item LHC pp \ensuremath{\to} jet+jet, photon+jet, photon+photon, all with EW+QCD shower\end{itemize} \noindent Different observables related to the two photons \clearpage \clearpage \typeout{Handling analysis MC_GENERIC}\subsection{MC\_GENERIC} \textbf{Generic MC testing analysis}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Ian Bruce $\langle\,$\href{mailto:ibruce@cern.ch}{ibruce@cern.ch}$\,\rangle$ \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item Any!\end{itemize} \noindent Generic analysis of typical event distributions such as $\eta$, $y$, $\pT$, $\phi$\dots \clearpage \clearpage \typeout{Handling analysis MC_HINC}\subsection{MC\_HINC} \textbf{Monte Carlo validation observables for $h[\tau^+ \, \tau^-]$ production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $h [\to \tau^+ \tau^-]$.\end{itemize} \noindent Monte Carlo validation observables for $h[\tau^+ \, \tau^-]$ production \clearpage \clearpage \typeout{Handling analysis MC_HJETS}\subsection{MC\_HJETS} \textbf{Monte Carlo validation observables for $h[\tau^+ \, \tau^-]$ + jets production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $h [\to \tau^+ \tau^-]$ + jets.\end{itemize} \noindent The available observables are the Higgs mass, \pT of jets 1--4, jet multiplicity, $\Delta\eta(h, \text{jet1})$, $\Delta R(\text{jet2}, \text{jet3})$, differential jet rates 0\ensuremath{\to}1, 1\ensuremath{\to}2, 2\ensuremath{\to}3, 3\ensuremath{\to}4, and integrated 0--4 jet rates. \clearpage \clearpage \typeout{Handling analysis MC_HKTSPLITTINGS}\subsection{MC\_HKTSPLITTINGS} \textbf{Monte Carlo validation observables for $h[\tau^+ \, \tau^-]$ + jets production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $h [\to \tau^+ \tau^-]$ + jets.\end{itemize} \noindent Monte Carlo validation observables for $h[\tau^+ \, \tau^-]$ + jets production \clearpage \clearpage \typeout{Handling analysis MC_IDENTIFIED}\subsection{MC\_IDENTIFIED} \textbf{MC testing analysis for identified particle distributions}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item Any!\end{itemize} \noindent Plotting of distributions of PID codes (all/stable/unstable) and ID-specific distributions such as the $|\eta|$ of $K$, $\pi$ and $\Lambda$ mesons. \clearpage \clearpage \typeout{Handling analysis MC_JETS}\subsection{MC\_JETS} \textbf{Monte Carlo validation observables for jet production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item Pure QCD jet production events at an arbitrary collider.\end{itemize} \noindent Jets with $p_\perp>20$ GeV are constructed with a $k_\perp$ jet finder with $D=0.7$ and projected onto many different observables. \clearpage \clearpage \typeout{Handling analysis MC_LEADJETUE}\subsection{MC\_LEADJETUE} \textbf{Underlying event in leading jet events, extended to LHC}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item LHC pp QCD interactions at 0.9, 10 or 14 TeV. Particles with $c \tau > 10$ mm should be set stable. Several $p_\perp^\text{min}$ cutoffs are probably required to fill the profile histograms.\end{itemize} \noindent Rick Field's measurement of the underlying event in leading jet events, extended to the LHC. As usual, the leading jet of the defines an azimuthal toward/transverse/away decomposition, in this case the event is accepted within $|\eta| < 2$, as in the CDF 2008 version of the analysis. Since this isn't the Tevatron, I've chosen to use $k_\perp$ rather than midpoint jets. \clearpage \clearpage \typeout{Handling analysis MC_PDFS}\subsection{MC\_PDFS} \textbf{Analysis to study PDF sampling in any MC run}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item Any!\end{itemize} \noindent Plotting of PDF sampling info, such as the $Q^2$ and both $x$ values of the sampling (aggregated and distinguished as max/min, and some correlations with event properties. \clearpage \clearpage \typeout{Handling analysis MC_PHOTONINC}\subsection{MC\_PHOTONINC} \textbf{Monte Carlo validation observables for single isolated photon production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item Tevatron Run II ppbar \ensuremath{\to} gamma + jets.\end{itemize} \noindent Monte Carlo validation observables for single isolated photon production \clearpage \clearpage \typeout{Handling analysis MC_PHOTONJETS}\subsection{MC\_PHOTONJETS} \textbf{Monte Carlo validation observables for photon + jets production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item Tevatron Run II ppbar \ensuremath{\to} gamma + jets.\end{itemize} \noindent Different observables related to the photon and extra jets. \clearpage \clearpage \typeout{Handling analysis MC_PHOTONKTSPLITTINGS}\subsection{MC\_PHOTONKTSPLITTINGS} \textbf{Monte Carlo validation observables for photon + jets production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item Tevatron Run II ppbar \ensuremath{\to} gamma + jets.\end{itemize} \noindent Monte Carlo validation observables for photon + jets production \clearpage \clearpage \typeout{Handling analysis MC_PHOTONS}\subsection{MC\_PHOTONS} \textbf{Monte Carlo validation observables for general photons}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Steve Lloyd \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item Any event type, but there are many observables for photons associated to (semi-)hard leptons.\end{itemize} \noindent Observables for testing general unisolated photon properties, especially those associated with charged leptons (e and mu). \clearpage \clearpage \typeout{Handling analysis MC_PRINTEVENT}\subsection{MC\_PRINTEVENT} \textbf{Print out a dump of each event to standard output}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item Can be used with any event type.\end{itemize} \noindent Print out a dump of the event structure to the terminal standard output, in a conveniently human readable form with e.g. particle names in addition to the usual numerical ID codes. \clearpage \clearpage \typeout{Handling analysis MC_QCD_PARTONS}\subsection{MC\_QCD\_PARTONS} \textbf{Generic parton-level Monte Carlo validation analysis for <X> + jets.}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item Any <X> + jets.\end{itemize} \noindent Only partons (excluding top quarks) are taken into account to construct a kt cluster sequence. Thus this analysis can be used as a generic validation tool for QCD activity. \clearpage \clearpage \typeout{Handling analysis MC_SUSY}\subsection{MC\_SUSY} \textbf{Validate generic SUSY events, including various lepton invariant mass}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item SUSY events at any energy. \pT cutoff at 10 GeV may be advised.\end{itemize} \noindent Analysis of generic SUSY events at the LHC, based on Atlas Herwig++ validation analysis contents. Plotted are eta, phi and \pT observables for charged tracks, photons, isolated photons, electrons, muons, and jets, as well as various dilepton mass `edge' plots for different event selection criteria. \clearpage \clearpage \typeout{Handling analysis MC_TTBAR}\subsection{MC\_TTBAR} \textbf{MC analysis for ttbar studies}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \item Dave Mallows \item Michal Kawalec \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item * For Pythia6, set MSEL=6 and fix $W^+$ and $W^-$ decays to semi-leptonic modes via the MDME array. \item For Fortran Herwig/Jimmy select IPROC=1706.\end{itemize} \noindent This is a pure Monte Carlo study for semi-leptonic $t\bar{t}$ production. \clearpage \clearpage \typeout{Handling analysis MC_VH2BB}\subsection{MC\_VH2BB} \textbf{MC unboosted VH2bb validation plots}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} UNVALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Ben Smart $\langle\,$\href{mailto:bsmart@cern.ch}{bsmart@cern.ch}$\,\rangle$ \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $VH$ with $H \to b \bar{b}$ and the vector boson decaying to electron or muon channels.\end{itemize} \noindent Various plots for characterising the process $V H \to b\bar{b}$ \clearpage \clearpage \typeout{Handling analysis MC_WINC}\subsection{MC\_WINC} \textbf{Monte Carlo validation observables for inclusive $W[e \, \nu]$ production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $e \, \nu$ + jets analysis.\end{itemize} \noindent Monte Carlo validation observables for inclusive $W[e \, \nu]$ production \clearpage \clearpage \typeout{Handling analysis MC_WJETS}\subsection{MC\_WJETS} \textbf{Monte Carlo validation observables for $W[e \, \nu]$ + jets production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $e \, \nu$ + jets analysis.\end{itemize} \noindent Monte Carlo validation observables for $W[e \, \nu]$ + jets production \clearpage \clearpage \typeout{Handling analysis MC_WKTSPLITTINGS}\subsection{MC\_WKTSPLITTINGS} \textbf{Monte Carlo validation observables for $k_\perp$ splitting scales in $W[e \, \nu]$ + jets events}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $e \, \nu$ + jets analysis.\end{itemize} \noindent Monte Carlo validation observables for $k_\perp$ splitting scales in $W[e \, \nu]$ + jets events \clearpage \clearpage \typeout{Handling analysis MC_WPOL}\subsection{MC\_WPOL} \textbf{Monte Carlo validation observables for $W$ polarisation}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $W \to e \, \nu$ + jets.\end{itemize} \noindent Observables sensitive to the polarisation of the W boson: A0, ... A7, fR, fL, f0, separately for W+ and W-. \clearpage \clearpage \typeout{Handling analysis MC_WWINC}\subsection{MC\_WWINC} \textbf{Monte Carlo validation observables for $W^+[e^+ \, \nu]W^-[\mu^- \, \nu]$ production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $WW$ analysis.\end{itemize} \noindent Monte Carlo validation observables for $W^+[e^+ \, \nu]W^-[\mu^- \, \nu]$ production \clearpage \clearpage \typeout{Handling analysis MC_WWJETS}\subsection{MC\_WWJETS} \textbf{Monte Carlo validation observables for $W^+[e^+ \, \nu]W^-[\mu^- \, \nu]$ + jets production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $WW$ + jets analysis.\end{itemize} \noindent In addition to the typical jet observables this analysis contains observables related to properties of the WW-pair momentum, correlations between the WW, properties of the W bosons, properties of the leptons, correlations between the opposite charge leptons and correlations with jets. \clearpage \clearpage \typeout{Handling analysis MC_WWKTSPLITTINGS}\subsection{MC\_WWKTSPLITTINGS} \textbf{Monte Carlo validation observables for $W^+[e^+ \, \nu]W^-[\mu^- \, \nu]$ + jets production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $WW$ + jets analysis.\end{itemize} \noindent Monte Carlo validation observables for $W^+[e^+ \, \nu]W^-[\mu^- \, \nu]$ + jets production \clearpage \clearpage \typeout{Handling analysis MC_XS}\subsection{MC\_XS} \textbf{MC analysis for process total cross section}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Marek Schoenherr $\langle\,$\href{mailto:marek.schoenherr@tu-dresden.de}{marek.schoenherr@tu-dresden.de}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item Suitable for any process.\end{itemize} \noindent Analysis for bookkeeping of the total cross section, number of generated events and the ratio of events with positive and negative weights. \clearpage \clearpage \typeout{Handling analysis MC_ZINC}\subsection{MC\_ZINC} \textbf{Monte Carlo validation observables for $Z[e^+ \, e^-]$ production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^+ e^-$ analysis. Needs mass cut on lepton pair to avoid photon singularity, e.g. a min range of $66 < m_{ee} < 116$ GeV\end{itemize} \noindent Monte Carlo validation observables for $Z[e^+ \, e^-]$ production \clearpage \clearpage \typeout{Handling analysis MC_ZJETS}\subsection{MC\_ZJETS} \textbf{Monte Carlo validation observables for $Z[e^+ \, e^-]$ + jets production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^+ e^-$ + jets analysis. Needs mass cut on lepton pair to avoid photon singularity, e.g. a min range of $66 < m_{ee} < 116$ GeV\end{itemize} \noindent Available observables are Z mass, \pT of jets 1-4, jet multiplicity, $\Delta\eta(Z, \text{jet1})$, $\Delta R(\text{jet2}, \text{jet3})$, differential jet rates 0\ensuremath{\to}1, 1\ensuremath{\to}2, 2\ensuremath{\to}3, 3\ensuremath{\to}4, integrated 0--4 jet rates. \clearpage \clearpage \typeout{Handling analysis MC_ZKTSPLITTINGS}\subsection{MC\_ZKTSPLITTINGS} \textbf{Monte Carlo validation observables for $Z[e^+ \, e^-]$ + jets production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^+ e^-$ + jets analysis. Needs mass cut on lepton pair to avoid photon singularity, e.g. a min range of $66 < m_{ee} < 116$ GeV\end{itemize} \noindent Monte Carlo validation observables for $Z[e^+ \, e^-]$ + jets production \clearpage \clearpage \typeout{Handling analysis MC_ZZINC}\subsection{MC\_ZZINC} \textbf{Monte Carlo validation observables for $Z[e^+ \, e^-]Z[\mu^+ \, \mu^-]$ production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $ZZ$ + jets analysis. Needs mass cut on lepton pairs to avoid photon singularity, e.g. a min range of $66 < m_{ee} < 116$ GeV\end{itemize} \noindent Monte Carlo validation observables for $Z[e^+ \, e^-]Z[\mu^+ \, \mu^-]$ production \clearpage \clearpage \typeout{Handling analysis MC_ZZJETS}\subsection{MC\_ZZJETS} \textbf{Monte Carlo validation observables for $Z[e^+ \, e^-]Z[\mu^+ \, \mu^-]$ + jets production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $ZZ$ + jets analysis. Needs mass cut on lepton pairs to avoid photon singularity, e.g. a min range of $66 < m_{ee} < 116$ GeV\end{itemize} \noindent In addition to the typical jet observables this analysis contains observables related to properties of the ZZ-pair momentum, correlations between the ZZ, properties of the Z bosons, properties of the leptons, correlations between the opposite charge leptons and correlations with jets. \clearpage \clearpage \typeout{Handling analysis MC_ZZKTSPLITTINGS}\subsection{MC\_ZZKTSPLITTINGS} \textbf{Monte Carlo validation observables for $Z[e^+ \, e^-]Z[\mu^+ \, \mu^-]$ + jets production}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Frank Siegert $\langle\,$\href{mailto:frank.siegert@cern.ch}{frank.siegert@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item $ZZ$ + jets analysis. Needs mass cut on lepton pairs to avoid photon singularity, e.g. a min range of $66 < m_{ee} < 116$ GeV\end{itemize} \noindent Monte Carlo validation observables for $Z[e^+ \, e^-]Z[\mu^+ \, \mu^-]$ + jets production \clearpage \section{Example analyses}\typeout{Handling analysis EXAMPLE}\subsection{EXAMPLE} \textbf{A demo to show aspects of writing a Rivet analysis}\newline \textbf{Beams:} $*$\,$*$ \newline \textbf{Status:} EXAMPLE\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Andy Buckley $\langle\,$\href{mailto:andy.buckley@cern.ch}{andy.buckley@cern.ch}$\,\rangle$ \end{itemize} \textbf{No references listed}\\ \textbf{Run details:} \penalty 100 \begin{itemize} \item All event types will be accepted.\end{itemize} \noindent This analysis is a demonstration of the Rivet analysis structure and functionality: booking histograms; the initialisation, analysis and finalisation phases; and a simple loop over event particles. It has no physical meaning, but can be used as a simple pedagogical template for writing real analyses. \clearpage \section{Misc. analyses}\typeout{Handling analysis ARGUS_1993_S2653028}\subsection[ARGUS\_1993\_S2653028]{ARGUS\_1993\_S2653028\,\cite{Albrecht:1992qf}} \textbf{Inclusive production of charged pions, kaons and protons in $\Upsilon(4S)$ decays.}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (5.3, 5.3) GeV \newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+2653028}{2653028}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Z.Phys. C58 (1993) 191-198 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^+ e^-$ analysis on the $\Upsilon(4S)$ resonance.\end{itemize} \noindent Measurement of inclusive production of charged pions, kaons and protons from $\Upsilon(4S)$ decays. Kaon spectra are determined in two different ways using particle identification and detecting decays in-flight. Results are background continuum subtracted. This analysis is useful for tuning $B$ meson decay modes. \clearpage \clearpage \typeout{Handling analysis ARGUS_1993_S2669951}\subsection[ARGUS\_1993\_S2669951]{ARGUS\_1993\_S2669951\,\cite{Albrecht:1992nu}} \textbf{Production of the $\eta'(958)$ and $f_0(980)$ in $e^+e^-$ annihilation in the Upsilon region.}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (4.7, 4.7), (5.0, 5.0), (5.2, 5.2) GeV \newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+2669951}{2669951}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Z.Phys. C58 (1993) 199-206 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^+ e^-$ analysis near the $\Upsilon(4S)$ resonance.\end{itemize} \noindent Measurement of the inclusive production of the $\eta'(958)$ and $f_0(980)$ mesons in $e^+e^-$ annihilation in the Upsilon region. Data are taken on the $\Upsilon(1S)$, $\Upsilon(2S)$ and $\Upsilon(4S)$ resonances and in the nearby continuum (9.36 to 10.45 GeV cm energy) \clearpage \clearpage \typeout{Handling analysis ARGUS_1993_S2789213}\subsection[ARGUS\_1993\_S2789213]{ARGUS\_1993\_S2789213\,\cite{Albrecht:1993fs}} \textbf{Inclusive production of $K^*(892)$, $\rho^0(770)$, and $\omega(783)$ mesons in the upsilon energy region.}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (4.7, 4.7), (5.2, 5.2), (5.3, 5.3) GeV \newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+2789213}{2789213}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Z.Phys. C61 (1994) 1-18 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^+ e^-$ analysis in the 10 GeV CMS energy range\end{itemize} \noindent Measurement of the inclusive production of the vector mesons $K^*(892)$, $\rho^0(770)$ and $\omega(783)$ in $e^+e^-$ annihilation in the Upsilon region by the Argus Collaboration. Useful for tuning simulations of B meson and bottomium decays. \clearpage \clearpage \typeout{Handling analysis BABAR_2003_I593379}\subsection[BABAR\_2003\_I593379]{BABAR\_2003\_I593379\,\cite{Aubert:2002hc}} \textbf{Measurement of inclusive charmonium production}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (3.5, 8.0) GeV \newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev. D67 032002, 2003 \item hep-ex/0207097 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Production of charmionum at the $\Upsilon(4S)$ resonace.\end{itemize} \noindent Measurement of $J/\psi$, $\psi'$, $\chi_{c1}$ and $\chi_{c2}$ production using a data sample corresponding to an integrated luminosity of 20.3\;fb$^{-1}$ collected with the BABAR detector at the SLAC PEP-II electron-positron storage ring operating at a centre-of-mass energy near 10.58\;GeV. \clearpage \clearpage \typeout{Handling analysis BABAR_2005_S6181155}\subsection[BABAR\_2005\_S6181155]{BABAR\_2005\_S6181155\,\cite{Aubert:2005cu}} \textbf{Production and decay of $\Xi^0_c$ at BABAR.}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (3.5, 8.0), (3.5, 7.9) GeV \newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+6895344}{6895344}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.Lett. 95 (2005) 142003 \item hep-ex/0504014 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^+ e^-$ analysis on the $\Upsilon(4S)$ resonance, with CoM boost -- 8.0~GeV~($e^−$) and 3.5~GeV~($e^+$)\end{itemize} \noindent Analysis of $\Xi_c^0$ production in B decays and from the $c\bar{c}$ continuum, with the $\Xi_c^0$ decaying into $\Omega^- K^+$ and $\Xi^- \pi^+$ final states measured using 116.1 $\text{fb}^{-1}$ of data collected by the BABAR detector. The normalisation of the data as been modifed from that presented in the original paper in order to produce a differential cross section rather than the cross section in each bin. In addition to the data presented in the paper plots are alos made with unit normalisation which can be more useful for Monte Carlo tuning. \clearpage \clearpage \typeout{Handling analysis BABAR_2007_S6895344}\subsection[BABAR\_2007\_S6895344]{BABAR\_2007\_S6895344\,\cite{Aubert:2006cp}} \textbf{Inclusive $\Lambda_c^+$ Production in $e^+e^-$ Annihilation at $\sqrt{s}=10.54$ GeV and in $\Upsilon(4S)$ Decays.}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (3.5, 8.0), (3.5, 7.9) GeV \newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+6895344}{6895344}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev. D75 (2007) 012003 \item hep-ex/0609004 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^+ e^-$ analysis on the $\Upsilon(4S)$ resonance, with CoM boost -- 8.0~GeV~($e^−$) and 3.5~GeV~($e^+$)\end{itemize} \noindent Measurements of the total production rates and momentum distributions of the charmed baryon $\Lambda_c^+$ in $e^+e^- \to$ hadrons at a centre-of-mass energy of 10.54 GeV and in $\Upsilon(4S)$ decays. \clearpage \clearpage \typeout{Handling analysis BABAR_2007_S7266081}\subsection[BABAR\_2007\_S7266081]{BABAR\_2007\_S7266081\,\cite{Aubert:2007mh}} \textbf{Measurements of Semi-Leptonic Tau Decays into Three Charged Hadrons}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (3.5, 8.0) GeV \newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+7266081}{7266081}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.Lett.100:011801,2008 \item arXiv: \href{http://arxiv.org/abs/0707.2981}{0707.2981} \item SLAC-R-936 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Tau production, can be any process but original data was in $e^+ e^-$ at the $\Upsilon(4S)$ resonance, with CoM boost -- 8.0~GeV~($e^−$) and 3.5~GeV~($e^+$)\end{itemize} \noindent Measurement of tau decays to three charged hadrons using a data sample corresponding to an integrated luminosity of 342 $fb^{-1}$ collected with the BABAR detector at the SLAC PEP-II electron-positron storage ring operating at a center-of-mass energy near 10.58 GeV. \clearpage \clearpage \typeout{Handling analysis BELLE_2001_S4598261}\subsection[BELLE\_2001\_S4598261]{BELLE\_2001\_S4598261\,\cite{Abe:2001hj}} \textbf{Measurement of inclusive production of neutral pions from $\Upsilon(4S)$ decays.}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (3.5, 8.0) GeV \newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+4598261}{4598261}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev. D64 (2001) 072001 \item hep-ex/0103041 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^+ e^-$ analysis on the $\Upsilon(4S)$ resonance, with CoM boost -- 8.0~GeV~($e^−$) and 3.5~GeV~($e^+$)\end{itemize} \noindent Measurement of the mean multiplicity and the momentum spectrum of neutral pions from the decays of the Upsilon(4S) resonance using the Belle detector operating at the KEKB $e^+e^-$ storage ring. Useful for tuning $B$ meson decay models. \clearpage \clearpage \typeout{Handling analysis BELLE_2006_S6265367}\subsection[BELLE\_2006\_S6265367]{BELLE\_2006\_S6265367\,\cite{Seuster:2005tr}} \textbf{Charm hadrons from fragmentation and B decays on the $\Upsilon(4S)$}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (3.5, 8.0), (3.5, 7.9) GeV \newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+6265367}{6265367}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Jan Eike von Seggern $\langle\,$\href{mailto:jan.eike.von.seggern@physik.hu-berlin.de}{jan.eike.von.seggern@physik.hu-berlin.de}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D73:032002,2006. \item arXiv: \href{http://arxiv.org/abs/hep-ex/0506068}{hep-ex/0506068} \item DOI: \href{http://dx.doi.org/10.1103/PhysRevD.73.032002}{10.1103/PhysRevD.73.032002} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^+ e^-$ analysis on the $\Upsilon(4S)$ resonance, with CoM boost -- 8.0~GeV~($e^−$) and 3.5~GeV~($e^+$)\end{itemize} \noindent Analysis of charm quark fragmentation at 10.6 GeV, based on a data sample of 103 fb collected by the Belle detector at the KEKB accelerator. Fragmentation into charm is studied for the main charmed hadron ground states, namely $D^0$, $D^+$, $D^+_s$ and $\Lambda_c^+$, as well as the excited states $D^{*0}$ and $D^{*+}$. This analysis can be used to constrain charm fragmentation in Monte Carlo generators. As the original data are not corrected for the branching ratios of the decay modes used to observed the charm hadrons we also include distributions with unit normalisation which are more useful for Monte Carlo tuning. \clearpage \clearpage \typeout{Handling analysis CLEO_2004_S5809304}\subsection[CLEO\_2004\_S5809304]{CLEO\_2004\_S5809304\,\cite{Artuso:2004pj}} \textbf{Charm hadrons from fragmentation near the $\Upsilon(4S)$}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (5.3, 5.3) GeV \newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+6265367}{6265367}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Peter Richardson $\langle\,$\href{mailto:Peter.Richardson@durham.ac.uk}{Peter.Richardson@durham.ac.uk}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys.Rev.D70:112001,2004. \item arXiv: \href{http://arxiv.org/abs/hep-ex/0402040}{hep-ex/0402040} \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^+ e^-$ analysis near the $\Upsilon(4S)$ resonance\end{itemize} \noindent Analysis of charm quark fragmentation at 10.5 GeV, based on a data sample of 103 fb collected by the CLEO experiment. Fragmentation into charm is studied for the charmed hadron ground states, namely $D^0$, $D^+$, as well as the excited states $D^{*0}$ and $D^{*+}$. This analysis can be used to constrain charm fragmentation in Monte Carlo generators. \clearpage \clearpage \typeout{Handling analysis JADE_1998_S3612880}\subsection[JADE\_1998\_S3612880]{JADE\_1998\_S3612880\,\cite{MovillaFernandez:1997fr}} \textbf{Event shapes for 22, 35 and 44 GeV}\newline \textbf{Beams:} $e^-$\,$e^+$ \newline \textbf{Energies:} (11.0, 11.0), (17.5, 17.5), (22.0, 22.0) GeV \newline \textbf{Experiment:} JADE (PETRA)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+3612880}{3612880}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Holger Schulz holger.schulz@physik.hu-berlin.de \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item hep-ex/9708034 \item Eur.Phys.J.C1:461-478,1998 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Z\ensuremath{\to}hadronic final states, bbar contributions have been corrected for as well as ISR\end{itemize} \noindent Thrust, Jet Mass and Broadenings, Y23 for 35 and 44 GeV and only Y23 at 22 GeV. \clearpage \clearpage \typeout{Handling analysis PDG_HADRON_MULTIPLICITIES}\subsection[PDG\_HADRON\_MULTIPLICITIES]{PDG\_HADRON\_MULTIPLICITIES\,\cite{Amsler:2008zzb}} \textbf{Hadron multiplicities in hadronic $e^+e^-$ events}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (5.0, 5.0), (17.5, 17.5), (45.6, 45.6), (88.5, 88.5) GeV \newline \textbf{Experiment:} PDG (Various)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+7857373}{7857373}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Hendrik Hoeth $\langle\,$\href{mailto:hendrik.hoeth@cern.ch}{hendrik.hoeth@cern.ch}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys. Lett. B, 667, 1 (2008) \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic events in $e^+ e^-$ collisions\end{itemize} \noindent Hadron multiplicities in hadronic $e^+e^-$ events, taken from Review of Particle Properties 2008, table 40.1, page 355. Average hadron multiplicities per hadronic $e^+e^-$ annihilation event at $\sqrt{s} \approx {}$ 10, 29--35, 91, and 130--200 GeV. The numbers are averages from various experiments. Correlations of the systematic uncertainties were considered for the calculation of the averages. \clearpage \clearpage \typeout{Handling analysis PDG_HADRON_MULTIPLICITIES_RATIOS}\subsection[PDG\_HADRON\_MULTIPLICITIES\_RATIOS]{PDG\_HADRON\_MULTIPLICITIES\_RATIOS\,\cite{Amsler:2008zzb}} \textbf{Ratios (w.r.t. $\pi^+/\pi^-$) of hadron multiplicities in hadronic $e^+e^-$ events}\newline \textbf{Beams:} $e^+$\,$e^-$ \newline \textbf{Energies:} (5.0, 5.0), (17.5, 17.5), (45.6, 45.6), (88.5, 88.5) GeV \newline \textbf{Experiment:} PDG (Various)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+7857373}{7857373}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Holger Schulz $\langle\,$\href{mailto:holger.schulz@physik.hu-berlin.de}{holger.schulz@physik.hu-berlin.de}$\,\rangle$ \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Phys. Lett. B, 667, 1 (2008) \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item Hadronic events in $e^+ e^-$ collisions\end{itemize} \noindent Ratios (w.r.t. $\pi^+/\pi^-$) of hadron multiplicities in hadronic $e^+ e^-$ events, taken from Review of Particle Properties 2008, table 40.1, page 355. Average hadron multiplicities per hadronic $e^+ e^-$ annihilation event at $\sqrt{s} \approx$ 10, 29--35, 91, and 130--200 GeV, normalised to the pion multiplicity. The numbers are averages from various experiments. Correlations of the systematic uncertainties were considered for the calculation of the averages. \clearpage \clearpage \typeout{Handling analysis TASSO_1990_S2148048}\subsection[TASSO\_1990\_S2148048]{TASSO\_1990\_S2148048\,\cite{Braunschweig:1990yd}} \textbf{Event shapes in e+e- annihilation at 14-44 GeV}\newline \textbf{Beams:} $e^-$\,$e^+$ \newline \textbf{Energies:} (7.0, 7.0), (11.0, 11.0), (17.5, 17.5), (21.9, 21.9) GeV \newline \textbf{Experiment:} TASSO (PETRA)\newline \textbf{Spires ID:} \href{http://inspire-hep.net/search?p=find+key+2148048}{2148048}\newline \textbf{Status:} VALIDATED\newline \textbf{Authors:} \penalty 100 \begin{itemize} \item Holger Schulz holger.schulz@physik.hu-berlin.de \end{itemize} \textbf{References:} \penalty 100 \begin{itemize} \item Z.Phys.C47:187-198,1990 \item DESY-90-013 \end{itemize} \textbf{Run details:} \penalty 100 \begin{itemize} \item $e^+ e^- \to \text{jet jet}$ (+ jets). Kinematic cuts such as CKIN(1) in Pythia need to be set slightly below the CMS energy.\end{itemize} \noindent Event shapes Thrust, Sphericity, Aplanarity at four different energies \clearpage ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/doc/mk-analysis-latex�������������������������������������������������������������������0000755�0001750�0001750�00000020160�12117140534�015103� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env python ## Get output filename OUTNAME = "analyses" import sys if len(sys.argv) < 2: pass #print "Using output name '%s'" % OUTNAME else: OUTNAME = sys.argv[1] ## Get input paths to allow rivet module to be imported from the src dir import os, re, glob pybuild = os.path.abspath(os.path.join(os.getcwd(), "..", "pyext", "build")) dirs = [] for d in os.listdir(pybuild): if re.match(r"lib\..*-.*-%d\.%d" % (sys.version_info[0], sys.version_info[1]), d): dirs.append(os.path.join(pybuild, d)) sys.path = dirs + sys.path try: os.environ["LD_LIBRARY_PATH"] = os.environ["LD_LIBRARY_PATH"] + ":" + \ os.path.abspath(os.path.join(os.getcwd(), "..", "src", ".libs")) except: pass try: os.environ["DYLD_LIBRARY_PATH"] = os.environ["DYLD_LIBRARY_PATH"] + ":" + \ os.path.abspath(os.path.join(os.getcwd(), "..", "src", ".libs")) except: pass anadirs = glob.glob(os.path.join(os.getcwd(), "..", "src", "Analyses", ".libs")) #print anadirs os.environ["RIVET_ANALYSIS_PATH"] = ":".join(anadirs) ## Change dlopen status to GLOBAL for Rivet lib try: import ctypes sys.setdlopenflags(sys.getdlopenflags() | ctypes.RTLD_GLOBAL) except: import dl sys.setdlopenflags(sys.getdlopenflags() | dl.RTLD_GLOBAL) import rivet def texify(s): t = s \ .replace(r"&", r"\&") \ .replace(r"\\&", r"\&") \ .replace(r"#", r"\#") \ .replace(r"->", r"\ensuremath{\to}") \ .replace(r"pT", r"\pT") \ .replace(r"sqrt(s)", r"\ensuremath{\sqrt{s}}") # .replace(r"_", r"\_") \ # .replace(r"^", r"") \ return t ## Build analysis pages all_analyses = rivet.AnalysisLoader.analysisNames() pages = { "LEP and SLC":[], "Tevatron":[], "LHC":[], "SPS":[], "HERA":[], "RHIC":[], "Monte Carlo":[], "Example":[], "Misc.":[] } ## Use list(...) ctor for 2.3 compatibility bib = {} for aname in sorted(list(all_analyses)): #print "Handling analysis '%s'" % aname page = "" page += "\\typeout{Handling analysis %s}" % aname safe_aname = aname.replace(r"_", r"\_") ana = rivet.AnalysisLoader.getAnalysis(aname) subtitle = "\\subsection{%s}\n" % safe_aname if ana.bibKey() and ana.bibTeX(): bib[ana.bibKey()] = "%% (%s)\n" % aname + ana.bibTeX() citetex = r"\cite{%s}" % ana.bibKey() subtitle = "\\subsection[%s]{%s}\n" % (safe_aname, safe_aname + "\," + citetex) page += subtitle page += "\\textbf{%s}\\newline\n" % ana.summary() if ana.requiredBeams(): def pid_to_str(pid): if pid == 11: return "$e^-$" elif pid == -11: return "$e^+$" elif pid == 2212: return "$p$" elif pid == -2212: return "$\\bar{p}$" elif pid == 10000: return "$*$" else: return str(pid) beamstrs = [] for bp in ana.requiredBeams(): beamstrs.append(pid_to_str(bp[0]) + "\\," + pid_to_str(bp[1])) page += "\\textbf{Beams:} %s \\newline\n" % ", ".join(beamstrs) if ana.requiredEnergies(): page += "\\textbf{Energies:} %s GeV \\newline\n" % \ ", ".join(["(%0.1f, %0.1f)" % (epair[0], epair[1]) for epair in ana.requiredEnergies()]) if ana.experiment(): page += "\\textbf{Experiment:} %s" % ana.experiment() if ana.collider(): page += " (%s)" % ana.collider() page += "\\newline\n" if ana.inspireId(): spiresbase = "http://inspire-hep.net/record" page += "\\textbf{Inspire ID:} \\href{%s+%s}{%s}\\newline\n" % \ (spiresbase, ana.inspireId(), ana.inspireId()) elif ana.spiresId(): spiresbase = "http://inspire-hep.net/search?p=find+key" page += "\\textbf{Spires ID:} \\href{%s+%s}{%s}\\newline\n" % \ (spiresbase, ana.spiresId(), ana.spiresId()) page += "\\textbf{Status:} %s\\newline\n" % ana.status() if ana.authors(): page += "\\textbf{Authors:}\n \\penalty 100\n" page += "\\begin{itemize}\n" for a in ana.authors(): s = a import re if re.search(".* <.*@.*>", a): name = " ".join(a.split()[:-1]) email = a.split()[-1].replace("<", "").replace(">", "") #s = "\\href{mailto:%s}{%s}" % (email, name) s = "%s $\\langle\,$\\href{mailto:%s}{%s}$\,\\rangle$" % (name, email, email) page += " \\item %s\n" % s page += "\\end{itemize}\n" else: page += "\\textbf{No authors listed}\\\\ \n" if ana.references(): page += "\\textbf{References:}\n \\penalty 100\n" page += "\\begin{itemize}\n" for r in ana.references(): if r.startswith("arXiv:"): code = r.split()[0].replace("arXiv:", "") url = "http://arxiv.org/abs/" + code page += " \\item %s \\href{%s}{%s}\n" % ("arXiv:", url, code) elif r.startswith("doi:"): code = r.replace("doi:", "") url = "http://dx.doi.org/" + code page += " \\item %s \\href{%s}{%s}\n" % ("DOI:", url, code) else: page += " \\item %s\n" % r page += "\\end{itemize}\n" else: page += "\\textbf{No references listed}\\\\ \n" if ana.runInfo(): page += "\\textbf{Run details:}\n \\penalty 100\n" infos = ana.runInfo().split(" * ") #print ana.runInfo(), "->", infos page += "\\begin{itemize}\n" for i in infos: if i: page += "\n \\item %s" % i page += "\\end{itemize}\n" else: page += "\\textbf{No run details listed}\\\\ \n" for para in ana.description().split("\n\n"): page += "\n\\noindent " + para + "\n" # try: # import readplot # info = readplot.plotinfo(ana.name()) # if info: # page += "\n\\vspace{1em}\n\\noindent\n" # page += "\\textbf{Histograms:}\n \\penalty 100\n" # page += "\\begin{itemize}\n" # for hpath in sorted(info.keys()): # htitle = info[hpath]["TITLE"] # page += " \\item %s (\kbd{%s})\n" % (htitle, hpath.replace(r"_", r"\_")) # page += "\\end{itemize}\n" # except: # pass page += "\n\\clearpage\n" page = texify(page) if "MC_" in ana.name().upper(): pages["Monte Carlo"].append(page) elif "LEP" in ana.collider() or "SLC" in ana.collider(): pages["LEP and SLC"].append(page) elif "Tevatron" in ana.collider(): pages["Tevatron"].append(page) elif "LHC" in ana.collider(): pages["LHC"].append(page) elif "SPS" in ana.collider(): pages["SPS"].append(page) elif "HERA" in ana.collider(): pages["HERA"].append(page) elif "RHIC" in ana.collider(): pages["RHIC"].append(page) elif "EXAMPLE" in ana.name().upper(): pages["Example"].append(page) else: pages["Misc."].append(page) ## Write out LaTeX prefix = """\ \\makeatletter \\renewcommand{\\d}[1]{\\ensuremath{\\mathrm{#1}}} \\let\\old@eta\\eta \\renewcommand{\\eta}{\\ensuremath{\\old@eta}\\xspace} \\let\\old@phi\\phi \\renewcommand{\\phi}{\\ensuremath{\\old@phi}\\xspace} \\providecommand{\\pT}{\\ensuremath{p_\\perp}\\xspace} \\providecommand{\\pTmin}{\\ensuremath{p_\\perp^\\text{min}}\\xspace} \\makeatother """ groups = {} for group, ps in pages.iteritems(): s = "" #if len(ps): s = "\\section{%s analyses}" % group + "\n\n\\clearpage\n\n".join(ps) groups[group] = s body = \ groups["LEP and SLC"] + "\n\n" + \ groups["Tevatron"] + "\n\n" + \ groups["LHC"] + "\n\n" + \ groups["SPS"] + "\n\n" + \ groups["HERA"] + "\n\n" + \ groups["RHIC"] + "\n\n" + \ groups["Monte Carlo"] + "\n\n" + \ groups["Example"] + "\n\n" + \ groups["Misc."] + "\n\n" outstr = prefix + body ## Write out to TeX and BibTeX files f = open("%s.tex" % OUTNAME, "w") f.write("%auto-ignore\n") f.write(outstr) f.close() f = open("%s.bib" % OUTNAME, "w") # bibentries = "\n\n".join(["%% %s\n%s" % (k,b) for k,b in bib.iteritems()]) f.write(bibentries + "\n") f.close() ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/doc/bend.png����������������������������������������������������������������������������0000644�0001750�0001750�00000003421�12116077755�013246� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR���<���S���ô€”Ï���PLTE�����3��f��™��Ì��ÿ�3��33�3f�3™�3Ì�3ÿ�f��f3�ff�f™�fÌ�fÿ�™��™3�™f�™™�™Ì�™ÿ�Ì��Ì3�Ìf�Ì™�ÌÌ�Ìÿ�ÿ��ÿ3�ÿf�ÿ™�ÿÌ�ÿÿ3��3�33�f3�™3�Ì3�ÿ33�33333f33™33Ì33ÿ3f�3f33ff3f™3fÌ3fÿ3™�3™33™f3™™3™Ì3™ÿ3Ì�3Ì33Ìf3Ì™3ÌÌ3Ìÿ3ÿ�3ÿ33ÿf3ÿ™3ÿÌ3ÿÿf��f�3f�ff�™f�Ìf�ÿf3�f33f3ff3™f3Ìf3ÿff�ff3fffff™ffÌffÿf™�f™3f™ff™™f™Ìf™ÿfÌ�fÌ3fÌffÌ™fÌÌfÌÿfÿ�fÿ3fÿffÿ™fÿÌfÿÿ™��™�3™�f™�™™�Ì™�ÿ™3�™33™3f™3™™3Ì™3ÿ™f�™f3™ff™f™™fÌ™fÿ™™�™™3™™f™™™™™Ì™™ÿ™Ì�™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÿ�™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌ��Ì�3Ì�fÌ�™Ì�ÌÌ�ÿÌ3�Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌf�Ìf3ÌffÌf™ÌfÌÌfÿÌ™�Ì™3Ì™fÌ™™Ì™ÌÌ™ÿÌÌ�ÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÿ�Ìÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿ��ÿ�3ÿ�fÿ�™ÿ�Ìÿ�ÿÿ3�ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿf�ÿf3ÿffÿf™ÿfÌÿfÿÿ™�ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿÌ�ÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÿ�ÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿ (((555CCCPPP]]]kkkxxx†††“““¡¡¡®®®»»»ÉÉÉÖÖÖäääñññ������������������������������������������������������������������nf—���ØtRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�·[r½���bKGD�ˆH��� pHYs���H���H�FÉk>��ÆIDATXÃÕ˜krã Çuzšã8ËmHÒÓ@g‚Ç›ÆvšÜbýÀ˜‡ðóCg5é ö¿ BHsÔ^ß·ÚîñÎTAk?«à®·{¾Îû»Þ±ò¶N•J×Á?_�„�\žËáRBp iµ.@qÑÚ]©j\@Ú²²þ;Eiˆ°½nc‡Â¥ÃÆi f+›eÃiÞ{º"JÃ,6ây�(ÛÒ)¸Œ°BCPv¦6xl Íh§hðØCóVÒåP„î#ž –©Ëàƒ§ 6«ŽÝ;#”‡4Ølï" –µ± +(Aé/Ÿ†Àg 2é¶uÝ”§Ý¨Ñ†ÖÌ¥š. S¬>—ÎÍ{ôp<ž%¶²Ñ®áJM°œ:߬é~¦žÏRºä°d‰5 鳆3{ÌûR™w±?ͳ=dg(ÚÜŽ»{µ÷É_%\�ÿ`î õÞã×Ç]]T-ê,†Po-,}Qå¢$Á–²†³Æínð³ýljOþÚð¡v»€wWV…AÕlÕ>Æjw¥DؤÙ*$ýó!:w:HÜðÔÂê}<b:<ƒÁ;4%…,U0 -{˜L°•u$­ÍÍ'<êøIÙÉÀJaöb+ÞÂN¿à%O ž¹3H,4žu ívS¢©wXóm¶KúͱœOÖ»è†ýös>EXÿŠu²…ó„ .÷ ‘긘ºÜã)eç4úÀM4qí9¥Ô-Òggq¦$r<?Í,1ÏO³ W«,óù/ÖmzY±ÞÒ§ž=.llíýâÅ´F2_ÑuMÙÛE­jʶµƒ5ÌJv] 3–­W.~KyÇ6(ojûsV¬oû7*³MÊ»_SÞò#ËaÏ×îÝnW(½á¿`ž¥¨òwØ5Ê‹øjÞ¤ÿÆ����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/doc/h-physrev3.bst����������������������������������������������������������������������0000644�0001750�0001750�00000044153�12116077755�014361� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%%Modified 12Dec2000: {format.bvolume} %%h-physrev3.bst %%Modified to avoid extra comma at end of citations %%h-physrev2.bst %%Jonathan Flynn's h-physrev.bst modified to allow citation information %%for SPIRES processing by Heath O'Connell following suggestions by %%Jacques Distler. ENTRY { address eprint author booktitle chapter collaboration SLACcitation edition editor howpublished institution journal key month note number organization pages publisher school series title type volume year } {} { label } INTEGERS { output.state before.all mid.sentence after.sentence after.block } FUNCTION {init.state.consts} { #0 'before.all := #1 'mid.sentence := #2 'after.sentence := #3 'after.block := } STRINGS { s t } FUNCTION {output.nonnull} { 's := output.state mid.sentence = { ", " * write$ } { output.state after.block = { "," * write$ newline$ "\newblock " write$ } { output.state before.all = 'write$ { add.period$ " " * write$ } if$ } if$ mid.sentence 'output.state := } if$ s } FUNCTION {format.collaboration} { collaboration empty$ { "" } { collaboration "u" change.case$ write$ "~Collaboration" } if$ } FUNCTION {output} { duplicate$ empty$ 'pop$ 'output.nonnull if$ } FUNCTION {output.check} { 't := duplicate$ empty$ { pop$ "empty " t * " in " * cite$ * warning$ } 'output.nonnull if$ } FUNCTION {output.bibitem} { newline$ "\bibitem{" write$ cite$ write$ "}" write$ newline$ "" before.all 'output.state := } FUNCTION {fin.entry} { add.period$ write$ % modified to add SLACcitation field if present SLACcitation empty$ 'skip$ { newline$ SLACcitation write$ } if$ % end of modification newline$ } FUNCTION {new.block} { output.state before.all = 'skip$ { after.block 'output.state := } if$ } FUNCTION {new.sentence} { skip$ } FUNCTION {not} { { #0 } { #1 } if$ } FUNCTION {and} { 'skip$ { pop$ #0 } if$ } FUNCTION {or} { { pop$ #1 } 'skip$ if$ } FUNCTION {new.block.checka} { empty$ 'skip$ 'new.block if$ } FUNCTION {new.block.checkb} { empty$ swap$ empty$ and 'skip$ 'new.block if$ } FUNCTION {new.sentence.checka} { empty$ 'skip$ 'new.sentence if$ } FUNCTION {new.sentence.checkb} { empty$ swap$ empty$ and 'skip$ 'new.sentence if$ } FUNCTION {field.or.null} { duplicate$ empty$ { pop$ "" } 'skip$ if$ } FUNCTION {emphasize} { duplicate$ empty$ { pop$ "" } { "{\em " swap$ * "}" * } if$ } FUNCTION {embolden} { duplicate$ empty$ { pop$ "" } { "{\bf " swap$ * "}" * } if$ } FUNCTION {paren} { duplicate$ empty$ { pop$ "" } { "(" swap$ * ")" * } if$ } INTEGERS { nameptr namesleft numnames } INTEGERS { etal } FUNCTION {format.names} { 's := #1 'nameptr := s num.names$ 'numnames := numnames #5 > s numnames "{ll}" format.name$ "others" = numnames #1 > and or 'etal := etal { #1 #1 + 'namesleft := } { numnames 'namesleft := } if$ { namesleft #0 > } { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := nameptr #1 > { namesleft #1 > { ", " * t * } { nameptr #2 > { "," * } 'skip$ if$ t "others" = etal or { " {\em et~al.}" * } { " and " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {format.authors} { author empty$ { "" } { author format.names } if$ } FUNCTION {format.editors} { editor empty$ { "" } { editor format.names editor num.names$ #1 > { ", editors" * } { ", editor" * } if$ } if$ } FUNCTION {format.edited} { editor empty$ { "" } { "edited by " editor format.names * } if$ } FUNCTION {format.title} { title empty$ { "" } { title "t" change.case$ } if$ } FUNCTION {n.dashify} { 't := "" { t empty$ not } { t #1 #1 substring$ "-" = { t #1 #2 substring$ "--" = not { "--" * t #2 global.max$ substring$ 't := } { { t #1 #1 substring$ "-" = } { "-" * t #2 global.max$ substring$ 't := } while$ } if$ } { t #1 #1 substring$ * t #2 global.max$ substring$ 't := } if$ } while$ } FUNCTION {first.page} { 't := "" { t empty$ not t #1 #1 substring$ "-" = not and } { t #1 #1 substring$ * t #2 global.max$ substring$ 't := } while$ } FUNCTION {format.date} { year empty$ { "" } 'year if$ } %FUNCTION {format.SLACcitation} %{ SLACcitation empty$ % {""} % { SLACcitation } % if$ %} FUNCTION {format.btitle} { title emphasize } FUNCTION {tie.or.space.connect} { duplicate$ text.length$ #3 < { "~" } { " " } if$ swap$ * * } FUNCTION {either.or.check} { empty$ 'pop$ { "can't use both " swap$ * " fields in " * cite$ * warning$ } if$ } %FUNCTION {format.bvolume} %{ volume empty$ %{ "" } %{ series empty$ %'skip$ %{ ", " series * } %if$ %" Vol." volume tie.or.space.connect * %"volume and number" number either.or.check %} %if$ %} % From physis.btx from Charles Karney (Karney@Princeton.EDU) % (changing volume to Vol.) % The format.bvolume function is for formatting the volume and perhaps % series name of a multivolume work. If both a volume and a series field % are there, we assume the series field is the title of the whole multivolume % work (the title field should be the title of the thing being referred to), % and we add an "of <series>". This function is called in mid-sentence. FUNCTION {format.bvolume} { volume empty$ { "" } { "volume" volume tie.or.space.connect series empty$ 'skip$ { " of " * series emphasize * } if$ "volume and number" number either.or.check } if$ } FUNCTION {format.number.series} { volume empty$ { number empty$ { series field.or.null } { series empty$ { "there's a number but no series in " cite$ * warning$ } { ", " series * } if$ " No. " number tie.or.space.connect * } if$ } { "" } if$ } FUNCTION {format.edition} { edition empty$ { "" } { output.state mid.sentence = { ", " edition "l" change.case$ * } { ", " edition "t" change.case$ * } if$ " ed." * } if$ } INTEGERS { multiresult } FUNCTION {multi.page.check} { 't := #0 'multiresult := { multiresult not t empty$ not and } { t #1 #1 substring$ duplicate$ "-" = swap$ duplicate$ "," = swap$ "+" = or or { #1 'multiresult := } { t #2 global.max$ substring$ 't := } if$ } while$ multiresult } FUNCTION {format.pages} { pages empty$ { "" } { pages multi.page.check { "pp." pages n.dashify tie.or.space.connect } { "p." pages tie.or.space.connect } if$ } if$ } FUNCTION {format.pages.a} { pages empty$ { "" } { "p." pages first.page tie.or.space.connect } if$ } FUNCTION {format.vol.num.pages} { volume field.or.null embolden " " swap$ * * pages empty$ 'skip$ { duplicate$ empty$ { pop$ format.pages.a } { ", " * pages first.page * } if$ } if$ } FUNCTION {format.chapter.pages} { chapter empty$ 'format.pages { type empty$ { "chap." } { type "l" change.case$ } if$ chapter tie.or.space.connect pages empty$ 'skip$ { ", " * format.pages * } if$ } if$ } FUNCTION {format.pub.addr.date} { publisher empty$ { "" "empty publisher in " cite$ * warning$ } { publisher address empty$ 'skip$ { ", " * address * } if$ } if$ year empty$ { "empty year in " cite$ * warning$ } { ", " * year * } if$ paren " " swap$ * } FUNCTION {format.book.entry} { format.btitle format.bvolume * format.number.series * format.edition * format.pub.addr.date * } FUNCTION {format.inbook.entry} { format.book.entry ", " * format.chapter.pages * } FUNCTION {format.in.ed.booktitle} { booktitle empty$ { "" } { editor empty$ { "in " booktitle emphasize * } { "in " booktitle emphasize * ", " * format.edited * } if$ } if$ } FUNCTION {empty.misc.check} { author empty$ title empty$ howpublished empty$ month empty$ year empty$ note empty$ and and and and and { "all relevant fields are empty in " cite$ * warning$ } 'skip$ if$ } FUNCTION {format.thesis.type} { type empty$ 'skip$ { pop$ type "t" change.case$ } if$ } FUNCTION {format.inst.tr.num.date} { institution empty$ { "" "empty institution in " cite$ * warning$ } { institution } if$ " Report No." * number empty$ { "" } { number tie.or.space.connect } if$ year empty$ { "empty year in " cite$ * warning$ } { ", " * year * " (unpublished)" * } if$ } FUNCTION {format.article.crossref} { key empty$ { journal empty$ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ "" } { "In " journal * } if$ } { "In " key * } if$ " \cite{" * crossref * "}" * } FUNCTION {format.crossref.editor} { editor #1 "{vv~}{ll}" format.name$ editor num.names$ duplicate$ #2 > { pop$ " {\em et~al.}" * } { #2 < 'skip$ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = { " {\em et~al.}" * } { " and " * editor #2 "{vv~}{ll}" format.name$ * } if$ } if$ } if$ } FUNCTION {format.book.crossref} { volume empty$ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ "In " } { "Volume" volume tie.or.space.connect " of " * } if$ editor empty$ editor field.or.null author field.or.null = or { key empty$ { series empty$ { "need editor, key, or series for " cite$ * " to crossref " * crossref * warning$ "" * } { "{\em " * series * "\/}" * } if$ } { key * } if$ } { format.crossref.editor * } if$ " \cite{" * crossref * "}" * } FUNCTION {format.incoll.inproc.crossref} { editor empty$ editor field.or.null author field.or.null = or { key empty$ { booktitle empty$ { "need editor, key, or booktitle for " cite$ * " to crossref " * crossref * warning$ "" } { "In {\em " booktitle * "\/}" * } if$ } { "In " key * } if$ } { "In " format.crossref.editor * } if$ " \cite{" * crossref * "}" * } FUNCTION {article} { output.bibitem format.collaboration output format.authors "author" output.check new.block crossref missing$ { journal field.or.null format.vol.num.pages format.date empty$ 'skip$ { duplicate$ empty$ { pop$ format.date paren } { " " * format.date paren * } if$ } if$ output } { format.article.crossref output.nonnull format.pages output } if$ eprint output new.block note output %format.SLACcitation output fin.entry } FUNCTION {book} { output.bibitem format.collaboration output author empty$ { format.editors "author and editor" output.check } { format.authors output.nonnull crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ new.block crossref missing$ { format.book.entry output } { new.block format.book.crossref output.nonnull } if$ eprint output new.block note output %format.SLACcitation output fin.entry } FUNCTION {booklet} { output.bibitem format.collaboration output format.authors output new.block format.title "title" output.check howpublished address new.block.checkb howpublished output address output format.date output eprint output new.block note output %format.SLACcitation output fin.entry } FUNCTION {inbook} { output.bibitem format.collaboration output author empty$ { format.editors "author and editor" output.check } { format.authors output.nonnull crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ new.block crossref missing$ { format.inbook.entry output } { format.chapter.pages "chapter and pages" output.check new.block format.book.crossref output.nonnull } if$ eprint output new.block note output %format.SLACcitation output fin.entry } FUNCTION {incollection} { output.bibitem format.collaboration output format.authors "author" output.check new.block format.title "title" output.check new.block crossref missing$ { format.in.ed.booktitle "booktitle" output.check format.bvolume output format.number.series output format.chapter.pages output new.sentence publisher "publisher" output.check address output format.edition output format.date "year" output.check } { format.incoll.inproc.crossref output.nonnull format.chapter.pages output } if$ eprint output new.block note output %format.SLACcitation output fin.entry } FUNCTION {inproceedings} { output.bibitem format.collaboration output format.authors "author" output.check new.block format.title "title" output.check new.block crossref missing$ { format.in.ed.booktitle "booktitle" output.check format.bvolume output format.number.series output format.pages output address empty$ { organization publisher new.sentence.checkb organization output publisher output format.date "year" output.check } { address output.nonnull format.date "year" output.check new.sentence organization output publisher output } if$ } { format.incoll.inproc.crossref output.nonnull format.pages output } if$ eprint output new.block note output %format.SLACcitation output fin.entry } FUNCTION {conference} { inproceedings } FUNCTION {manual} { output.bibitem format.collaboration output author empty$ { organization empty$ 'skip$ { organization output.nonnull address output } if$ } { format.authors output.nonnull } if$ new.block format.btitle "title" output.check author empty$ { organization empty$ { address new.block.checka address output } 'skip$ if$ } { organization address new.block.checkb organization output address output } if$ format.edition output format.date output eprint output new.block note output fin.entry } FUNCTION {mastersthesis} { output.bibitem format.authors "author" output.check new.block format.title "title" output.check new.block "Master's thesis" format.thesis.type output.nonnull school "school" output.check address output format.date "year" output.check eprint output new.block note output fin.entry } FUNCTION {misc} { output.bibitem format.collaboration output format.authors output title howpublished new.block.checkb format.title output howpublished new.block.checka howpublished output format.date output eprint output new.block note output fin.entry empty.misc.check } FUNCTION {phdthesis} { output.bibitem format.authors "author" output.check new.block format.btitle "title" output.check new.block "PhD thesis" format.thesis.type output.nonnull school "school" output.check address output format.date "year" output.check eprint output new.block note output %format.SLACcitation output fin.entry } FUNCTION {proceedings} { output.bibitem format.collaboration output editor empty$ { organization output } { format.editors output.nonnull } if$ new.block format.btitle "title" output.check format.bvolume output format.number.series output address empty$ { editor empty$ { publisher new.sentence.checka } { organization publisher new.sentence.checkb organization output } if$ publisher output format.date "year" output.check } { address output.nonnull format.date "year" output.check new.sentence editor empty$ 'skip$ { organization output } if$ publisher output } if$ eprint output new.block note output %format.SLACcitation output fin.entry } FUNCTION {techreport} { output.bibitem format.collaboration output format.authors "author" output.check new.block format.inst.tr.num.date output.nonnull eprint output new.block note output fin.entry } FUNCTION {unpublished} { output.bibitem format.collaboration output format.authors "author" output.check new.block format.title "title" output.check new.block note "note" output.check format.date output %format.SLACcitation output fin.entry } FUNCTION {default.type} { misc } MACRO {jan} {"Jan."} MACRO {feb} {"Feb."} MACRO {mar} {"Mar."} MACRO {apr} {"Apr."} MACRO {may} {"May"} MACRO {jun} {"June"} MACRO {jul} {"July"} MACRO {aug} {"Aug."} MACRO {sep} {"Sept."} MACRO {oct} {"Oct."} MACRO {nov} {"Nov."} MACRO {dec} {"Dec."} MACRO {acmcs} {"ACM Comput. Surv."} MACRO {acta} {"Acta Inf."} MACRO {cacm} {"Commun. ACM"} MACRO {ibmjrd} {"IBM J. Res. Dev."} MACRO {ibmsj} {"IBM Syst.~J."} MACRO {ieeese} {"IEEE Trans. Softw. Eng."} MACRO {ieeetc} {"IEEE Trans. Comput."} MACRO {ieeetcad} {"IEEE Trans. Comput.-Aided Design Integrated Circuits"} MACRO {ipl} {"Inf. Process. Lett."} MACRO {jacm} {"J.~ACM"} MACRO {jcss} {"J.~Comput. Syst. Sci."} MACRO {scp} {"Sci. Comput. Programming"} MACRO {sicomp} {"SIAM J. Comput."} MACRO {tocs} {"ACM Trans. Comput. Syst."} MACRO {tods} {"ACM Trans. Database Syst."} MACRO {tog} {"ACM Trans. Gr."} MACRO {toms} {"ACM Trans. Math. Softw."} MACRO {toois} {"ACM Trans. Office Inf. Syst."} MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."} MACRO {tcs} {"Theoretical Comput. Sci."} MACRO {advp} {"Adv. Phys."} MACRO {ajp} {"Am. J. Phys."} MACRO {ao} {"Appl. Opt."} MACRO {apj} {"Astrophys. J."} MACRO {apl} {"Appl. Phys. Lett."} MACRO {arnps} {"Ann. Rev. Nucl. Sci."} MACRO {arns} {"Ann. Rev. Nucl. Part. Sci."} MACRO {baps} {"Bull. Am. Phys. Soc."} MACRO {cpc} {"Computer Phys. Comm."} MACRO {cppcf} {"Comments Plasma Phys. Controlled Fusion"} MACRO {fed} {"Fusion Eng. Design"} MACRO {ft} {"Fusion Tech."} MACRO {ieeens} {"IEEE Trans. Nucl. Sci."} MACRO {ieeeps} {"IEEE Trans. Plasma Sci."} MACRO {ijimw} {"Int. J. Infrared Millimeter Waves"} MACRO {ip} {"Infrared Phys."} MACRO {jap} {"J. Appl. Phys."} MACRO {jcp} {"J. Comput. Phys."} MACRO {jetp} {"Sov. Phys.-JETP"} MACRO {jfe} {"J. Fusion Energy"} MACRO {jfm} {"J. Fluid Mech."} MACRO {jgr} {"J. Geophys. Res."} MACRO {jmp} {"J. Math. Phys."} MACRO {jne} {"J. Nucl. Energy"} MACRO {jnm} {"J. Nucl. Mater."} MACRO {josa} {"J. Opt. Soc. Am."} MACRO {jpg} {"J. Phys.~G: Nucl. and Part. Phys."} MACRO {jphys} {"J. Phys"} MACRO {jpp} {"J. Plasma Phys."} MACRO {jpsj} {"J. Phys. Soc. Jpn"} MACRO {jvst} {"J. Vac. Sci. Technol."} MACRO {modphyslettA} {"Mod. Phys. Lett. A"} MACRO {nedf} {"Nucl. Eng. Design/Fusion"} MACRO {nf} {"Nucl. Fusion"} MACRO {nim} {"Nucl. Instrum. Methods"} MACRO {np} {"Nucl. Phys."} MACRO {npb} {"Nucl. Phys.~B"} MACRO {npbps} {"Nucl. Phys. B (Proc. Suppl.)"} MACRO {nt/f} {"Nucl. Tech./Fusion"} MACRO {pf} {"Phys. Fluids"} MACRO {pl} {"Phys. Lett."} MACRO {plb} {"Phys. Lett.~B"} MACRO {pnas} {"Proc. Nat. Acad. Sci. USA"} MACRO {pp} {"Plasma Phys."} MACRO {physrep} {"Phys. Rep."} MACRO {physrev} {"Phys. Rev."} MACRO {pr} {"Phys. Rev."} MACRO {prd} {"Phys. Rev.~D"} MACRO {prl} {"Phys. Rev. Lett."} MACRO {procroysoc} {"Proc. Roy. Soc"} MACRO {ps} {"Physica Scripta"} MACRO {rmp} {"Rev. Mod. Phys."} MACRO {rsi} {"Rev. Sci. Instrum."} MACRO {sjnp} {"Sov. J. Nucl. Phys."} MACRO {sjpp} {"Sov. J. Plasma Phys."} MACRO {spd} {"Sov. Phys.-Dokl."} MACRO {sptp} {"Sov. Phys.-Tech. Phys."} MACRO {spu} {"Sov. Phys.-Usp."} MACRO {zp} {"Z. Phys."} MACRO {zpc} {"Z. Phys.~C"} READ STRINGS { longest.label } INTEGERS { number.label longest.label.width } FUNCTION {initialize.longest.label} { "" 'longest.label := #1 'number.label := #0 'longest.label.width := } FUNCTION {longest.label.pass} { number.label int.to.str$ 'label := number.label #1 + 'number.label := label width$ longest.label.width > { label 'longest.label := label width$ 'longest.label.width := } 'skip$ if$ } EXECUTE {initialize.longest.label} ITERATE {longest.label.pass} FUNCTION {begin.bib} { preamble$ empty$ 'skip$ { preamble$ write$ newline$ } if$ "\begin{thebibliography}{" longest.label * "}" * write$ newline$ } EXECUTE {begin.bib} EXECUTE {init.state.consts} ITERATE {call.type$} FUNCTION {end.bib} { newline$ "\end{thebibliography}" write$ newline$ } EXECUTE {end.bib} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/doc/Makefile.in�������������������������������������������������������������������������0000644�0001750�0001750�00000047206�12116616065�013677� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @WITH_ASCIIDOC_TRUE@am__append_1 = compare-histos.html make-plots.html @ENABLE_PYEXT_TRUE@am__append_2 = analyses.html @ENABLE_PDFMANUAL_TRUE@@WITH_PDFLATEX_TRUE@am__append_3 = rivet-manual.pdf @ENABLE_PDFMANUAL_TRUE@@WITH_PDFLATEX_TRUE@am__append_4 = analyses.tex analyses.bib refs.bib @WITH_ASCIIDOC_TRUE@am__append_5 = compare-histos.html make-plots.html subdir = doc DIST_COMMON = $(dist_noinst_SCRIPTS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/rivetversion.sty.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = rivetversion.sty CONFIG_CLEAN_VPATH_FILES = SCRIPTS = $(dist_noinst_SCRIPTS) AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgdatadir)" DATA = $(pkgdata_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ dist_noinst_SCRIPTS = mk-analysis-html mk-analysis-latex DOCSOURCES = compare-histos.txt heppennames.sty warning.png thinker.png cone.png \ h-physrev3.bst hepnames.sty JHEP3.cls bend.png hepnicenames.sty JHEP.bst \ make-plots.txt rivet-manual.tex preamble.tex hepparticles.sty maybemath.sty \ rivet-manual.pdf hepunits.sty underscore.sty microtype.sty EXTRA_DIST = $(DOCSOURCES) readplot.py $(am__append_1) $(am__append_4) DOCS = $(am__append_2) $(am__append_3) $(am__append_5) #LATEX = pdflatex @ENABLE_PDFMANUAL_TRUE@@WITH_PDFLATEX_TRUE@LATEX = pdflatex --interaction=nonstopmode @ENABLE_PDFMANUAL_TRUE@@WITH_PDFLATEX_TRUE@BIBTEX = bibtex @ENABLE_PDFMANUAL_TRUE@@WITH_PDFLATEX_TRUE@MAKEINDEX = makeindex @ENABLE_PDFMANUAL_TRUE@@WITH_PDFLATEX_TRUE@RERUN = "(There were undefined references|Rerun to get (cross-references|the bars) right)" @ENABLE_PDFMANUAL_TRUE@@WITH_PDFLATEX_TRUE@RERUNBIB = "No file.*\.bbl|Citation.*undefined" @ENABLE_PDFMANUAL_TRUE@@WITH_PDFLATEX_TRUE@MAKEIDX = "^[^%]*\\makeindex" @ENABLE_PDFMANUAL_TRUE@@WITH_PDFLATEX_TRUE@RM = rm -f @ENABLE_PDFMANUAL_TRUE@@WITH_PDFLATEX_TRUE@DOCNAME = rivet-manual ################ .PHONY = all doc upload arxivtar RSH = rsync DEST = login.hepforge.org:rivet/public_html/ pkgdata_DATA = $(DOCS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): rivetversion.sty: $(top_builddir)/config.status $(srcdir)/rivetversion.sty.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgdataDATA: $(pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(SCRIPTS) $(DATA) installdirs: for dir in "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool \ mostlyclean-local pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ clean-local distclean distclean-generic distclean-libtool \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgdataDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool \ mostlyclean-local pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-pkgdataDATA @ENABLE_PYEXT_TRUE@analyses.html: $(top_srcdir)/src/Analyses mk-analysis-html @ENABLE_PYEXT_TRUE@ LD_LIBRARY_PATH=$(top_srcdir)/src/.libs:$(top_srcdir)/src/Tools/yaml-cpp/.libs:$(FASTJETLIBPATH):$(HEPMCLIBPATH):$(LD_LIBRARY_PATH):$(prefix)/lib \ @ENABLE_PYEXT_TRUE@DYLD_LIBRARY_PATH=$(top_srcdir)/src/.libs:$(top_srcdir)/src/Tools/yaml-cpp/.libs:$(FASTJETLIBPATH):$(HEPMCLIBPATH):$(DYLD_LIBRARY_PATH):$(prefix)/lib \ @ENABLE_PYEXT_TRUE@RIVET_INFO_PATH=$(top_srcdir)/data/anainfo \ @ENABLE_PYEXT_TRUE@PYTHONPATH=$(top_srcdir)/pyext:$(PYTHONPATH) \ @ENABLE_PYEXT_TRUE@$(PYTHON) mk-analysis-html analyses.html @ENABLE_PDFMANUAL_TRUE@@ENABLE_PYEXT_TRUE@@WITH_PDFLATEX_TRUE@analyses.bib analyses.tex: $(top_srcdir)/src/Analyses $(top_srcdir)/data/plotinfo $(top_srcdir)/data/anainfo mk-analysis-latex @ENABLE_PDFMANUAL_TRUE@@ENABLE_PYEXT_TRUE@@WITH_PDFLATEX_TRUE@ LD_LIBRARY_PATH=$(top_srcdir)/src/.libs:$(FASTJETLIBPATH):$(HEPMCLIBPATH):$(LD_LIBRARY_PATH) \ @ENABLE_PDFMANUAL_TRUE@@ENABLE_PYEXT_TRUE@@WITH_PDFLATEX_TRUE@DYLD_LIBRARY_PATH=$(top_srcdir)/src/.libs:$(FASTJETLIBPATH):$(HEPMCLIBPATH):$(DYLD_LIBRARY_PATH) \ @ENABLE_PDFMANUAL_TRUE@@ENABLE_PYEXT_TRUE@@WITH_PDFLATEX_TRUE@RIVET_INFO_PATH=$(top_srcdir)/data/anainfo \ @ENABLE_PDFMANUAL_TRUE@@ENABLE_PYEXT_TRUE@@WITH_PDFLATEX_TRUE@$(PYTHON) mk-analysis-latex @ENABLE_PDFMANUAL_TRUE@@ENABLE_PYEXT_FALSE@@WITH_PDFLATEX_TRUE@analyses.bib analyses.tex: @ENABLE_PDFMANUAL_TRUE@@ENABLE_PYEXT_FALSE@@WITH_PDFLATEX_TRUE@ > analyses.tex @ENABLE_PDFMANUAL_TRUE@@ENABLE_PYEXT_FALSE@@WITH_PDFLATEX_TRUE@ > analyses.bib @ENABLE_PDFMANUAL_TRUE@@WITH_PDFLATEX_TRUE@$(DOCNAME).pdf : $(DOCNAME).tex preamble.tex analyses.tex refs.bib analyses.bib @ENABLE_PDFMANUAL_TRUE@@WITH_PDFLATEX_TRUE@ $(LATEX) $<; true @ENABLE_PDFMANUAL_TRUE@@WITH_PDFLATEX_TRUE@ egrep $(MAKEIDX) $< && ($(MAKEINDEX) $(DOCNAME) && cp $(DOCNAME).toc $(DOCNAME).toc.bak && $(LATEX) $<) > /dev/null; true @ENABLE_PDFMANUAL_TRUE@@WITH_PDFLATEX_TRUE@ egrep -c $(RERUNBIB) $(DOCNAME).log && ($(BIBTEX) $(DOCNAME) && cp $(DOCNAME).toc $(DOCNAME).toc.bak && $(LATEX) $<); true @ENABLE_PDFMANUAL_TRUE@@WITH_PDFLATEX_TRUE@ for i in `seq 5`; do if egrep $(RERUN) $(DOCNAME).log; then echo "LaTeX re-run $i"; cp $(DOCNAME).toc $(DOCNAME).toc.bak; $(LATEX) $<; else break; fi; done; true @ENABLE_PDFMANUAL_TRUE@@WITH_PDFLATEX_TRUE@ if cmp -s $(DOCNAME).toc $(DOCNAME).toc.bak; then true; else $(LATEX) $<; true; fi @ENABLE_PDFMANUAL_TRUE@@WITH_PDFLATEX_TRUE@ $(RM) $(DOCNAME).toc.bak; true @WITH_ASCIIDOC_TRUE@compare-histos.html: compare-histos.txt @WITH_ASCIIDOC_TRUE@ asciidoc -a toc compare-histos.txt @WITH_ASCIIDOC_TRUE@make-plots.html: make-plots.txt @WITH_ASCIIDOC_TRUE@ asciidoc -a toc make-plots.txt #all: # @echo "Default make rule does nothing: use 'make doc'" doc: $(DOCS) @true upload: $(DOCS) $(RSH) $? $(DEST) arxivtar: $(DOCSOURCES) rivet-manual.bbl for i in *.png; do convert $$i $${i/.png/.eps}; done tar czf rivet-manual.tar.gz \ rivet-manual.tex preamble.tex analyses.tex rivetversion.sty rivet-manual.bbl \ hepnames.sty hepnicenames.sty hepparticles.sty heppennames.sty hepunits.sty maybemath.sty microtype.sty underscore.sty \ bend.eps cone.eps thinker.eps warning.eps \ h-physrev3.bst JHEP3.cls JHEP.bst mostlyclean-local: rm -rf *.aux *.log *.toc clean-local: rm -rf $(DOCS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/doc/JHEP3.cls���������������������������������������������������������������������������0000644�0001750�0001750�00000214417�12116077755�013155� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%% JHEP.cls 3.1.5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% This file is Copyright JHEP 2005: it can be freely distributed but %% NOT modified preserving its name, even in similar forms. %% %% JHEP3.cls is a LaTeX2e class file used to typeset manuscripts in JHEP %% style. It was written by F. Nesti as a (radical) modification of the %% class `article.cls' from distribution 960601 of LaTeX2e. %% %% For bugs, comments, suggestions email to jhep-eo@jhep.sissa.it %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ***:to do **?:question ...:to choose XXX:to delete ???:unknown % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesClass{JHEP3} [2005/09/26 v3.1.4 LaTeX document class - F.N.] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\logo{\raisebox{-10.5\p@}{\hb@xt@85\p@{\special{psfile=JHEPlogo.eps}\hfil}}} %%%%%%%%%%%%%%%%%%%%%%%%%%%% NEW SWITCHES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newif\if@preprint\@preprinttrue % DEFAULT IS PREPRINT! \newif\if@draft \@draftfalse % DEFAULT IS NOT DRAFT \newif\if@hyper \@hypertrue % DEFAULT IS HYPER \newif\if@proc \@procfalse % DEFAULT IS NOT PROC %\newif\if@title\@titlefalse % \newif\if@author\@authorfalse % \newif\if@abstract\@abstractfalse % FOR FRONTMATTER DECLARATIONS \newif\if@keywords\@keywordsfalse % \newif\if@todotoc\@todotocfalse % \newif\if@rece\@recefalse % \newif\if@revi\@revifalse % \newif\if@acce\@accefalse % \newif\if@Jcopy\@Jcopyfalse % \newif\if@JHEP\@JHEPfalse % \newif\if@conf\@conffalse % \newif\if@Jspecialurl\@Jspecialurlfalse \RequirePackage{ifpdf} % \newif\ifpdf % \ifx\pdfoutput\undefined % \else % \ifx\pdfoutput\relax % \else % \ifcase\pdfoutput % \else % \pdftrue % \fi % \fi % \fi %%\newif\if@restonecol\@twocolumnfalse \if@compatibility \setlength\paperheight {297mm}% % DEFAULT FOR LATEX209 IS a4 \setlength\paperwidth {210mm}% \else % CHOSE PAPER: \DeclareOption{a4paper} {\setlength\paperheight {297mm}% \setlength\paperwidth {210mm}} \DeclareOption{a5paper}{\@OImess{}} % IGNORED a5 \DeclareOption{b5paper}{\@OImess{}} % IGNORED b5 \DeclareOption{letterpaper} {\setlength\paperheight {11in}% \setlength\paperwidth {8.5in}} \DeclareOption{legalpaper} {\setlength\paperheight {14in}% \setlength\paperwidth {8.5in}} \DeclareOption{executivepaper} {\setlength\paperheight {10.5in}% \setlength\paperwidth {7.25in}} \DeclareOption{landscape}{\@OImess{}} % IGNORED landscape \fi \newcommand\@ptsize{1} % DEFAULT SIZE IS 11 PT \DeclareOption{proceedings}{\@preprintfalse\@proctrue \renewcommand\@ptsize{1}% PROCS: 11 PT \AtBeginDocument{\@todotocfalse}} \DeclareOption{published}{% \ifpdf \JHEP@warnl{Option 'published' incompatible with pdf output, turning to dvi output}\pdffalse\pdfoutput=0\@preprintfalse \else \@preprintfalse% \fi} \DeclareOption{hyper}{\@hypertrue} % HYPER IS 11 PT %\DeclareOption{screen}{\@hypertrue} % HYPER IS 11 PT \DeclareOption{nohyper}{\@hyperfalse} % PAPER IS ALSO 11 PT (v1.3) \DeclareOption{paper}{\@hyperfalse} % PAPER IS ALSO 11 PT \DeclareOption{11pt}{\renewcommand\@ptsize{1}\ExecuteOptions{@FONT}} \DeclareOption{12pt}{\renewcommand\@ptsize{2}\ExecuteOptions{@FONT}} \if@compatibility\else % LATEX2.09 HAS NO 10PT \DeclareOption{10pt}{\renewcommand\@ptsize{0}\ExecuteOptions{@FONT}}% v1.4 \fi % CHOSEN TO FREE MEMORY LATER: \DeclareOption{@FONT}{\if@preprint % IF PREPRINT ALLOW ANY, \else % IF PROCEEDINGS OR PUBLISHED: % \if@proc % % \renewcommand\@ptsize{0}\@NFmess{10pt}% ALWAYS 10PT % \else \renewcommand\@ptsize{1}\@NFmess{11pt}% ALWAYS 11PT \fi%\fi } \if@compatibility\else \DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}\fi \DeclareOption{twoside}{\if@preprint\if@hyper\@OImess{ in hyper-mode} \else\@twosidetrue\@mparswitchtrue\fi \else % FOR PROCEED./PUBLIC.: \@OImess{ in published papers} \fi} \DeclareOption{notoc}{\if@preprint % to disable TOC \AtBeginDocument{\@todotocfalse} \else \if@proc\@OImess{ is automatic for proceedings} \else\@OImess{ in JHEP papers}\fi\fi} \DeclareOption{draft}{\setlength\overfullrule{5pt}% EXTENDED DRAFT \newcount\hour\newcount\minute \hour=\time \divide\hour by60 \minute=\time {\multiply\hour by60 \global\advance\minute by-\hour} \edef\militarytime{\number\hour:\ifnum\minute<10 0\fi\number\minute} \let\old@eqnnum\@eqnnum \def\@eqnnum{\old@eqnnum\rlap{\kern\marginparsep \if@twocolumn\if@firstcolumn \kern-2\marginparsep\kern-\columnwidth\ \llap\bgroup\else\bgroup\fi \else \if@twoside\ifodd\c@page \kern-2\marginparsep\kern-\textwidth \llap\bgroup\else\bgroup\fi \else\bgroup\fi \fi \sf\scriptsize\@eqnlabel\egroup}% \gdef\@eqnlabel{}} \let\@eqnlabel\relax \def\math@note#1{\gdef\@eqnlabel{LAB: #1}} \def\norm@note#1#2{\special{}% SORRY AGAIN. \ifinner{\ifdim\baselineskip=\z@% IN ARRAY.. \baselineskip18\p@\fi%% \ifhmode% ATTENTION TO RESTRICTED VMODE! \raisebox{.5\baselineskip}[\z@][\z@]{% \rlap{\sf\scriptsize #2}}% \else\vskip-\baselineskip% \raisebox{-.6\baselineskip}[\z@][\z@]{% \rlap{\sf\scriptsize #2}}% \fi}% \else\marginpar{\raggedright\if@twoside\ifodd\c@page% \raggedleft\fi\fi\sf\scriptsize #1#2}% \fi}% \AtBeginDocument{\newbox\drft@box\setbox\drft@box=\hbox{% \framebox[\textwidth]{\sf\small JHEP 3.1 DRAFT \ttfamily(\cur@opt)\hfill\sf\bfseries\jobname\sf, \today, \militarytime}}} \@drafttrue} %\if@compatibility\else %\DeclareOption{final}{\setlength\overfullrule{\z@}} % ***? NO FINAL? %\fi \DeclareOption{titlepage}{\@OImess{}} % IGNORED \if@compatibility\else \DeclareOption{notitlepage}{\@OImess{}} % IGNORED \fi \if@compatibility\else \DeclareOption{onecolumn}{\@OImess{}} % IGNORED \fi \DeclareOption{twocolumn}{\@OImess{}} % IGNORED \DeclareOption{leqno}{\@OImess{}} %\input{leqno.clo}} IGNORED ... \DeclareOption{fleqn}{\@OImess{}} %\input{fleqn.clo}} IGNORED ... \DeclareOption{openbib}{\@OImess{}} % IGNORED %%%%%%%%%%%%%%%%%%%%%%%%%%%%% MESSAGES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand\JHEP@mess[1]{\typeout{Class JHEP Message: \protect#1.}}% \newcommand\JHEP@warn[1]{\ClassWarning{JHEP}{#1}} \newcommand\JHEP@warnl[1]{\ClassWarningNoLine{JHEP}{#1}} \newcommand\JHEP@igno[1]{\JHEP@warn{IGNORED \protect#1}} \newcommand\JHEP@ignol[1]{\JHEP@warnl{IGNORED \protect#1}} \newcommand\@OImess[1]{\JHEP@ignol{OPTION '\CurrentOption'#1}} \newcommand\@NFmess[1]{\JHEP@mess{Normalsize set to #1}} \newcommand\@ENVwarn[1]{\JHEP@warn{Please use \protect#1 in place of LaTeX environment}} %%%%%%%%%%%%%%%%%%%%%%%%%% PROCESS OPTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%% \ExecuteOptions{a4paper,oneside,hyper} %WERE ALSO 10pt,onecolumn \ProcessOptions %%%%%%%%%%%%%%%%%%%%%%%%%% REQUIRED PACKAGES %%%%%%%%%%%%%%%%%%%%%%%%%% \RequirePackage{amssymb} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%% START CODE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \input{size1\@ptsize.clo} \renewcommand{\baselinestretch}{1.1}\normalsize \setlength\lineskip{1\p@} \setlength\parindent{1.2\parindent} % AT 12pt 1.5em BECOMES 1.8em=tocindent \setlength\normallineskip{1\p@} \setlength\parskip{0\p@ \@plus \p@} \@lowpenalty 51 \@medpenalty 151 \@highpenalty 301 \widowpenalty 1000 \clubpenalty 1000 \setcounter{topnumber}{3} \renewcommand\topfraction{.95} % default .7 \setcounter{bottomnumber}{1} \renewcommand\bottomfraction{.6} %.2 % .6 ???*** \setcounter{totalnumber}{3} \renewcommand\textfraction{.05} \renewcommand\floatpagefraction{1} \setcounter{dbltopnumber}{3} \renewcommand\dbltopfraction{.7} \renewcommand\dblfloatpagefraction{1} \textwidth .72\paperwidth % WIDTH OF TEXT, REMAINS .28% FOR MARGINS % \setlength\@tempdima{.76\paperheight} % HEIGHT OF TEXT WITH FOOTNOTES \divide\@tempdima\baselineskip % EXCLUDING HEAD (AND FOOT) \@tempcnta=\@tempdima % rounded to integer (#lines-1) \setlength\textheight{\@tempcnta\baselineskip} \addtolength\textheight{\topskip} \voffset -1in \topmargin .05\paperheight % FROM TOP OF PAGE TO TOP OF HEADING (0=1inch) \headheight .02\paperheight % HEIGHT OF HEADING BOX. \headsep .03\paperheight % VERT. SPACE BETWEEN HEAD AND TEXT. \footskip .07\paperheight % FROM END OF TEX TO BASE OF FOOTER. (40pt) \marginparsep 9\p@ % HOR. SPACE BETWEEN TEXT AND MARGINAL NOTE \marginparpush 6\p@ % MIN. VERT. SPACE BETWEEN MARGINAL NOTES \hoffset -1in % TO ADJUST WITH PAPER: \if@twoside % IF TWO-SIDED: \oddsidemargin .13\paperwidth % LEFT MARGIN FOR ODD PAGES (10) \evensidemargin .15\paperwidth % LEFT MARGIN FOR EVEN PAGES (30) \marginparwidth .10\paperwidth % TEXTWIDTH OF MARGINALNOTES \reversemarginpar % BECAUSE OF TITLEPAGE. \else % IF ONE-SIDED: \oddsidemargin .14\paperwidth % LEFT MARGIN FOR ODD PAGES (20) \evensidemargin .14\paperwidth % LEFT MARGIN FOR EVEN PAGES (20) \marginparwidth .11\paperwidth % TEXTWIDTH OF MARGINALNOTES \fi % %%%%%%%%%%%%%%%%%%%%%%% HYPER (AND DRAFT) STUFF %%%%%%%%%%%%%%%%%%%%%%% %\let\textref\@gobble %\if@hyper % IF NOHYPER WE DO LESS DAMAGE AS POSSIBLE.*** \ifpdf \input pdfcolor.tex \else \fi \bgroup\catcode`\#=12\gdef\hash{#}\egroup % DEFINED \hash=#. %\fi \def\H@tilde{\string~} \newcommand{\href}[2]{\rule{0pt}{0pt}\bgroup\let~\H@tilde \if@hyper\ifpdf \def\hash{}% \pdfstartlink attr{/Border [0 0 0]} user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \pdfsetcolor{.9 .9 0 0}% \else \noexpand\special{html:<A href="#1">}% \fi \fi {#2}\rule{0pt}{0pt}\egroup \if@hyper\ifpdf \Black\pdfendlink \else \special{html:</A>}% \fi \fi } % \intPlink was added because in pdflatex you need two different commands % for internal and external links. For latex they are the same. \newcommand{\intJlink}[2]{\rule{0pt}{0pt}\bgroup\let~\H@tilde \if@hyper\ifpdf \def\hash{}% \pdfstartlink attr{/Border [0 0 0]} goto name{#1}% \pdfsetcolor{.9 .9 0 0}% \else \noexpand\special{html:<A href="#1">}% \fi \fi {#2}\rule{0pt}{0pt}\egroup \if@hyper\ifpdf \Black\pdfendlink \else \special{html:</A>}% \fi \fi } \newcommand{\name}[1]{\if@hyper\ifpdf \pdfdest name{#1} fith% \else \noexpand\special% NAME HAS NO TAGGED TEXT HERE. {html:<A name="#1">}\special{html:</A>}% \fi \fi } \newcommand{\base}[1]{\if@hyper\ifpdf \relax\JHEP@warn{Command base undefined for pdf output} %\pdfdest baseurl{#1} fith% \else \bgroup\let~\H@tilde \noexpand\special % BASE HAS NO TAGGED TEXT. {html:<base href="#1">}\egroup \fi\fi} %------------------------------------------------------------------% % SECTION TAGS and THEIR REFERENCE IN TOC \d@t will be '.' for sections only \if@hyper \renewcommand{\@seccntformat}[1]{\name{sec\csname the#1\endcsname}% \csname the#1\endcsname\d@t\hspace{1ex}} \renewcommand{\numberline}[1]{\hb@xt@\@tempdima{\intJlink {\hash\hyp@typ#1}{#1}\d@t\hfil}} \else \renewcommand{\@seccntformat}[1]{\csname the#1\endcsname\d@t\hspace{1ex}} \renewcommand{\numberline}[1]{\hb@xt@\@tempdima{#1\d@t\hfil}} \fi %------------------------------------------------------------------% % CITATION TAGS ARE TOGETHER WITH BIB STUFF. % CITATION HREF \def\@citex[#1]#2{% % UNFORTUNATELY REDEFINED!!!! \let\@citea\@empty \@cite{\@for\@citeb:=#2\do {\@citea\def\@citea{,\penalty\@m\ }% \edef\@citeb{\expandafter\@firstofone\@citeb}% \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi \@ifundefined{b@\@citeb}{\mbox{\reset@font\bfseries ?}% \G@refundefinedtrue \@latex@warning {Citation `\@citeb' on page \thepage \space undefined}}% {\edef\tmp@bn{\csname b@\@citeb\endcsname}% \hbox{\intJlink{\hash bib\tmp@bn}{\tmp@bn}}}}}{#1}% % **HYPER** \if@draft\norm@note{CIT: }{#2}\fi % **DRAFT** } %-----------------------------------------------------------------% % LABEL, REF AND PAGEREF, TEXTREF, ~ COMPATIBLE: \let\old@label\label % OLD LATEX COMMAND. \def\label{\bgroup\catcode`\>=15\catcode`\"=15 \@@label} \newcommand{\@@label}[1]{\egroup\name{ref-#1}% % LABEL IN HYPER TAG. \old@label{#1}% % \if@draft% % DRAFT: \ifmmode\math@note{#1}% \else\norm@note{}{LAB: #1}\fi% \fi% } \if@hyper \let\old@ref\ref \let\old@pageref\pageref % OLD LATEX COMMANDS. \renewcommand{\ref}[1]{\@ifundefined{r@#1}{}{\intJlink{\hash ref-#1}}% {\old@ref{#1}}} % LABEL INSIDE HREF. \renewcommand{\pageref}[1]{\@ifundefined{r@#1}{}{% % UNDEFINED => NO HREF \edef\tmp@ref{\noexpand\@secondoftwo\csname r@#1\endcsname}% \intJlink{\hash pag\tmp@ref}}{\old@pageref{#1}}} \fi \newcommand{\textref}[2]{\@ifundefined{r@#1} {% \protect\G@refundefinedtrue \nfss@text{\reset@font\bfseries ?#2?}% \@latex@warning{Reference `#1' on page \thepage \space undefined}} {\vrule height \z@ width \z@\intJlink{\hash ref-#1}{#2}}} %------------------------------------------------------------------% %%%%%%%%%%%%%%%%%%%%%%%%%% END HYPER-STUFF %%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%% JHEP HEADINGS %%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\ps@JHEP{% \def\@oddfoot{\ifnum\thepage=0\ifnum\Jacce@year>2001\if@JHEP \Jcopyright@box\fi\hfill % copyright only on front page of published papers \if@Jspecialurl\unhbox\Jspecial@url\else\if@JHEP\unhbox\Jpaper@url\fi\fi\fi %possible url \else\reset@font\hfil-- \thepage\ --\hfil\fi} % page numbers on other pages \if@draft\edef\cur@opt{\@curroptions}\fi \def\@oddhead{\name{pag\thepage}\hfil\if@draft\copy\drft@box\fi} \if@proc \def\@oddhead{\name{pag\thepage}% \smash{\if@draft\raise 2.5em\rlap{\copy\drft@box}\fi \vbox{\hsize=\textwidth\noindent \copy\conf@box\hfill \copy\@firstaubox\vskip.17em \hrule}}% }% \fi \if@twoside\let\@evenhead\@oddhead\let\@evenfoot\@oddfoot\fi \let\@mkboth\@gobbletwo \let\sectionmark\@gobble \let\subsectionmark\@gobble } %%%%%%%%%%%%%%%%%%%%%%%%%%%%% TITLE PAGE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\maketitle{\JHEP@ignol{\maketitle}} \newcommand\auto@maketitle{\begingroup \renewcommand\thefootnote{\@fnsymbol\c@footnote}% \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}% \long\def\@makefntext##1{\parindent 1em\noindent \hb@xt@1.8em{\hss\@textsuperscript{\normalfont\@thefnmark}}##1}% \let\footnote\thanks% \newpage % \if@proc % IF PROCEEDINGS: \global\let\@nodocument\relax % LaTeX FOULED:) \@maketitle % \@thanks % TITLE THANKS IN 1st COLUMN \let\@evenfoot\@empty % NO PAGENO. \let\@oddfoot\@empty \setcounter{page}{1}% \thispagestyle{empty}% % PROCS HAVE NO PAGENUMBER \else \@maketitle % CALL ACTUAL FORMATTING \@thanks % TITLE THANKS %\let\@evenfoot\@empty % NO PAGENO. %\let\@oddfoot\@empty \thispagestyle{JHEP} \setcounter{page}\z@ \newpage % FINE PAGINA \fi \endgroup \setcounter{footnote}{0}% \if@todotoc % IF THERE IS A SECTION \noindent\rule\textwidth{.1pt} % THEN MAKE TOC... \vskip 2em \@plus 3ex \@minus 3ex \tableofcontents \vskip 2em \@plus 3ex \@minus 3ex \noindent\rule\textwidth{.1pt} \vskip 2em \@plus 3ex \@minus 3ex \fi \if@preprint\else \if@proc \gdef\tableofcontents{\JHEP@igno{\tableofcontents\space there is no toc in proceedings}} \else \gdef\tableofcontents{\JHEP@igno{\tableofcontents\space is automatic}} \fi \fi \global\let\thanks\@gobble % \setbox\@tmpbox=\vbox{\rm\@author}% % FOR PROCS RESET HEADERS % \global\let\maketitle\relax % NO LONGER EXISTS. \global\let\@maketitle\relax % \global\let\@thanks\@empty % \global\let\@author\@empty % KILL ALL \global\let\@date\@empty % \global\let\@title\@empty % \global\let\@abstract\@empty % \global\let\title\relax % \global\let\author\relax % \global\let\date\relax % \global\let\and\relax % \global\let\email\@gobble \global\let\received\relax \global\let\revised\relax \global\let\accepted\relax \global\let\JHEPcopydate\relax \global\let\JHEPspecialurl\relax \global\let\keywords\relax \global\let\endkeywords\relax } %%%%%%%%%%%%%%%%%%%%%%%%%% ACTUAL TITLEPAGE %%%%%%%%%%%%%%%%%%%%%%%%%%% \newskip\titlesk@pa \newskip\titlesk@ja % Skips for titlepage \newskip\titlesk@pb \newskip\titlesk@jb % \newskip\titlesk@pc \newskip\titlesk@jc % \newskip\titlesk@pd % \titlesk@pa= 1.6em plus .4em% % Before title (papers) \titlesk@pb= 2em plus .06em minus .5ex% % Between title/rule \titlesk@pc= 2em plus .05em minus 1.2ex% % Before authors \titlesk@pd= 2em plus .06em minus .5ex% % After proc rule \titlesk@ja= 1.6em plus .4fil% % Before title (proceedings) \titlesk@jb= 2em plus .06fil minus .5ex% % Between title/rule \titlesk@jc= 2em plus .05fil minus 1.2ex% % Before authors \def\@maketitle{% % PAGE IS FLUSHED LEFT \begin{flushleft}% % PAY ATTENTION TO \par'S %header for preprints \if@preprint %%% PREPRINT HEADER: \vskip-7em % % \underline{\tiny Preprint typeset % % in JHEP style - % % \if@hyper{HYPER VERSION} % % \else{PAPER VERSION}\fi } % \normalsize\hfill% % *** MAYBE PUT IN A ZERO BOX \begin{tabular}[t]{r}\@preprint\end{tabular}% % PREPRINT NUMBERS \else % % header for proceedings \if@proc %%% PROCEEDINGS: LOGO ETC.. \vskip-4.48em\hfill\copy\conf@box \vskip-.7\baselineskip\logo\hrulefill \vskip-.4\baselineskip\hskip32\p@% % *** IDEM BOXIZE {\tiny PROCEEDINGS} \else % %%% PUBLISHED: LOGO ETC.. %header for published (after 2001) \ifnum\Jacce@year>2001 \vskip-7em\hfill {\small\scshape Published by Institute of Physics Publishing for SISSA/ISAS} \vskip-.7\baselineskip\logo\hrulefill \vskip-1.5\baselineskip\hskip21.73\p@% % *** IDEM BOXIZE \hfill{\parbox[t]{30em}{\begin{flushright}\setlength\baselineskip{11pt}\footnotesize \Jrece@cs\\ \if@revi\Jrevi@cs\\\fi \Jacce@cs \end{flushright}}}% \else % header for published (december 2001) *** TO BE REMOVED IN JHEP4... \vskip-7em\hfill{\small\Jrece@cs{\it,\ }\Jacce@cs \vskip-.7\baselineskip\logo\hrulefill \vskip-.5\baselineskip\hskip23\p@% % *** IDEM BOXIZE {\tiny \if@hyper{HYPER VERSION}\else{PAPER VERSION}\fi} \if@revi\hfill\Jrevi@cs\fi} \fi \fi \fi\null % end headers % title page: skips are different for procs (p) and jhep or preprints (j) % see above \if@proc \vskip \titlesk@pa \else \vskip \titlesk@ja % vspace before title \fi % TITLE {\LARGE \sffamily \bfseries \@title\par}% large sans-serif bf \if@proc \vskip \titlesk@pb \else \vskip \titlesk@jb % vspace between title and rule \fi \if@proc % RULE \hrule height \p@% for proc = 1pt \else \hrule height 1.5\p@% otherwise = 1.5pt. \fi \if@proc \vskip \titlesk@pb \else \vskip \titlesk@jb % vspace between rule and authors \fi % AUTHORS\\ADDRESSES \vskip-\auth@skip {\normalsize \bfseries \sffamily \@author \par} \if@proc \vskip \titlesk@pc \else \vskip \titlesk@jc % vspace between authors and abstract \fi % ABSTRACT IF PRESENT (SHOULD) \if@proc \centerline{\parbox{.9\textwidth}% % narrower abstract for proceedings {\abstract@cs}}% \else \parbox\textwidth{\abstract@cs}% \fi \normalsize % KEYWORDS IF PRESENT \if@keywords \if@proc \vskip \titlesk@pc \else \vskip .9\titlesk@jc % vspace between abstract and keywords \fi \par \@keywords \fi % DEDICATION, IF PRESENT \dedic@box % RULE (only for procs) \if@proc \vskip \titlesk@pb \hrule height 1\p@ \vskip \titlesk@pd \fi \end{flushleft}% % FINISHED. } %%%%%%%%%%%%%%%%%%%%%%%%%%% STANDARD STUFF %%%%%%%%%%%%%%%%%%%%%%%%%%%% \setcounter{secnumdepth}{3} \newcounter {part} \newcounter {section} \newcounter {subsection}[section] \newcounter {subsubsection}[subsection] \newcounter {paragraph}[subsubsection] \newcounter {subparagraph}[paragraph] \renewcommand\thepart {\@Roman\c@part} \renewcommand\thesection {\@arabic\c@section} \renewcommand\thesubsection {\thesection.\@arabic\c@subsection} \renewcommand\thesubsubsection{\thesubsection.\@arabic\c@subsubsection} \renewcommand\theparagraph {\thesubsubsection.\@arabic\c@paragraph} \renewcommand\thesubparagraph {\theparagraph.\@arabic\c@subparagraph} %%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION FORMATS %%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand\secstyle{\bfseries} \def\ts@flag{\let\d@t.% % Sections get ``.'' \immediate\write\@auxout % IF THERE IS A SECTION {\string\global\string\@todotoctrue}} % THEN SIGNAL IN AUX. \newcommand\part{\par \addvspace{4ex}% \@afterindentfalse \secdef\@part\@spart} \def\@part[#1]#2{\ts@flag \ifnum \c@secnumdepth >\m@ne \refstepcounter{part}% % DAMN LATEX !!! BELOW, \addcontentsline{toc}{part}{\string\intJlink % UNFORTUNATELY, NO NUMBERLINE: {\string\hash\space part\the\c@part}% {\thepart}\hspace{1em}#1}% \else \addcontentsline{toc}{part}{#1}% \fi {\parindent \z@ \raggedright \interlinepenalty \@M \normalfont \ifnum \c@secnumdepth >\m@ne \name{part\the\c@part}\Large\bfseries \partname~\thepart \par\nobreak \fi \huge \bfseries #2% \markboth{}{}\par}% \nobreak \vskip 3ex \@afterheading\let\d@t\relax} \def\@spart#1{% {\parindent \z@ \raggedright \interlinepenalty \@M \normalfont \huge \bfseries #1\par}% \nobreak \vskip 3ex \@afterheading} \newcommand\section{\@startsection{section}{1}{\z@}% {-3.5ex \@plus -1.3ex \@minus -.7ex}% {2.3ex \@plus.4ex \@minus .4ex}% {\normalfont\large\secstyle}} \newcommand\subsection{\@startsection{subsection}{2}{\z@}% {-2.3ex\@plus -1ex \@minus -.5ex}% {1.2ex \@plus .3ex \@minus .3ex}% {\normalfont\normalsize\secstyle}} \newcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% {-2.3ex\@plus -1ex \@minus -.5ex}% {1ex \@plus .2ex \@minus .2ex}% {\normalfont\normalsize\secstyle}} \newcommand\paragraph{\@startsection{paragraph}{4}{\z@}% {1.75ex \@plus1ex \@minus.2ex}% {-1em}% {\normalfont\normalsize\bfseries}} \newcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}% {1.75ex \@plus1ex \@minus .2ex}% {-1em}% {\normalfont\normalsize\bfseries}} % ---- turnaround for sections with figures ------ % \def\bef@sec{\iffigprocessing\JHEP@warnl{Floating figure \the\ffigcount\space and startsection colliding}\fi \iftabprocessing\JHEP@warnl{Floating table \the\ftabcount\space and startsection colliding}\fi \edef\bef@everypar{\the\everypar}} % HACK FOR FLOATS AND \everypar \def\aft@sec{\let\d@t\relax % RESTORE: NO DOTTED SUBSECS.. \edef\tmp@everypar{\the\everypar}% % DELETED CLUBPENALTY, BELOW. \everypar\expandafter{\bef@everypar{\tmp@everypar}}}% RESTORE. \let\old@sec\section % \let\old@ssec\subsection % \let\old@sssec\subsubsection % OLD SECTIONING COMMANDS. \let\old@par\paragraph % \let\old@spar\subparagraph % % ------- new forms ------- % \renewcommand{\section}{\secdef\JHEP@sec\JHEP@secs} \renewcommand{\subsection}{\secdef\JHEP@ssec\JHEP@ssecs} \renewcommand{\subsubsection}{\secdef\JHEP@sssec\JHEP@sssecs} \renewcommand{\paragraph}{\secdef\JHEP@par\JHEP@pars} \renewcommand{\subparagraph}{\secdef\JHEP@spar\JHEP@spars} % ---- unstarred forms ---- % \def\JHEP@sec[#1]#2{\ts@flag\bef@sec\old@sec[#1]{#2}\aft@sec} \def\JHEP@ssec[#1]#2{\bef@sec\old@ssec[#1]{#2}\aft@sec} \def\JHEP@sssec[#1]#2{\bef@sec\old@sssec[#1]{#2}\aft@sec} \def\JHEP@par[#1]#2{\bef@sec\old@par[#1]{#2}\aft@sec} \def\JHEP@spar[#1]#2{\bef@sec\old@spar[#1]{#2}\aft@sec} % ----- starred forms ----- % \def\JHEP@secs#1{\bef@sec\old@sec*{#1}\aft@sec} \def\JHEP@ssecs#1{\bef@sec\old@ssec*{#1}\aft@sec} \def\JHEP@sssecs#1{\bef@sec\old@sssec*{#1}\aft@sec} \def\JHEP@pars#1{\bef@sec\old@par*{#1}\aft@sec} \def\JHEP@spars#1{\bef@sec\old@spar*{#1}\aft@sec} % ----- end hack for sections with floats --------% \if@twocolumn \setlength\leftmargini {2em} \else \setlength\leftmargini {2.5em} \fi \leftmargin \leftmargini \setlength\leftmarginii {2.2em} \setlength\leftmarginiii {1.87em} \setlength\leftmarginiv {1.7em} \setlength\leftmarginv {1em} \setlength\leftmarginvi {1em} \setlength \labelsep {.5em} \setlength \labelwidth{\leftmargini} \addtolength\labelwidth{-\labelsep} \@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty -\@lowpenalty \renewcommand\theenumi{\@arabic\c@enumi} \renewcommand\theenumii{\@alph\c@enumii} \renewcommand\theenumiii{\@roman\c@enumiii} \renewcommand\theenumiv{\@Alph\c@enumiv} \newcommand\labelenumi{\theenumi.} \newcommand\labelenumii{(\theenumii)} \newcommand\labelenumiii{\theenumiii.} \newcommand\labelenumiv{\theenumiv.} \renewcommand\p@enumii{\theenumi} \renewcommand\p@enumiii{\theenumi(\theenumii)} \renewcommand\p@enumiv{\p@enumiii\theenumiii} \newcommand\labelitemi{$\m@th\bullet$} \newcommand\labelitemii{\normalfont\bfseries --} \newcommand\labelitemiii{$\m@th\ast$} \newcommand\labelitemiv{$\m@th\cdot$} \newenvironment{description} {\list{}{\labelwidth\z@ \itemindent-\leftmargin \let\makelabel\descriptionlabel}} {\endlist} \newcommand*\descriptionlabel[1]{\hspace\labelsep \normalfont\bfseries #1} %%%%%%%%%%%%%%%%%%%%%%%%%% AUTHORS/ADDRESSES %%%%%%%%%%%%%%%%%%%%%%%%%% % *** After proceedings, the authors go in a hbox. => \break does not work!! % *** if no address nobody closes the box! \newif\if@speaker\@speakerfalse \newif\if@dblspeak\@dblspeakfalse \newtoks\prev@t \newtoks\cur@t \newbox\@firstaubox \newskip\addr@skip\addr@skip=\if@proc .6em\@plus.02em\@minus.3ex \else .6em\@plus.02fil\@minus.3ex \fi \newskip\auth@skip\auth@skip=\if@proc .6em\@plus.03em\@minus.2ex \else .6em\@plus.03fil\@minus.2ex \fi \renewcommand\@author{\parskip\z@ % \def\@noaddr{\setbox\@tmpbox\vbox\bgroup\let\\\par}% \def\\{\egroup % CLOSE & aftergroup! \par % FIRST TIME \\=>ADDR. \vskip\addr@skip % GLUE UNDER AUTHOR \hskip1em% % ADDRESS INDENT \vbox\bgroup\hsize=.9\textwidth % \small\it\raggedright % STYLE FOR ADDRESSES \def\\{\par\leavevmode\ignorespaces}%\let\\\relax% \leavevmode\ignorespaces}% } \renewcommand\author[1]{% \global\@authortrue % \prev@t=\expandafter{\@author}% % TWO TOKEN LISTS. \cur@t={\vskip\auth@skip % glue before auth. \vtop\bgroup #1\egroup % ACTUAL AUTH.\\ADD. \par}% % \long\xdef\@author{\the\prev@t\the\cur@t}%STORE ALL IN \@AUTHOR } %%%%%%%%%%%%%%%%%%%%%%%%%%%% SPEAKER %%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand\speaker[1]{\if@speaker\global\@dblspeaktrue\fi \global\@speakertrue \global\setbox\@firstaubox \hbox{\let\thanks\@gobble \let\footnote\@gobble \rm #1}% #1\thanks{Speaker.}\ }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CONFERENCE %%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newbox\conf@box \newcommand\conference[1]{\global\setbox\conf@box\hbox{% \itshape #1}\@conftrue} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% RECEIVED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand\received[1]{\gdef\Jrece@cs{{\scshape\receivedname} {\itshape #1}}\@recetrue} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% REVISED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand\revised[1]{\gdef\Jrevi@cs{{\scshape\revisedname} {\itshape #1}}\@revitrue} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% PUBLISHED %%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand\accepted[1]{\gdef\Jacce@cs{{\scshape\acceptedname} {\itshape #1}}\@accetrue} %%%%%%%%%%%%%%%%%%%%%%%%%% COPYRIGHT DATE %%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newbox\Jcopy@date \newcommand\JHEPcopydate[1]{\global\setbox\Jcopy@date \hbox{\scriptsize #1}\global\@Jcopytrue} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DEDICATED %%%%%%%%%%%%%%%%%%%%%%%%%%%%% \gdef\dedic@box{\relax} \newcommand\dedicated[1]{\gdef\dedic@box{\vskip2em minus 1.2ex \vbox{\small\it\raggedleft #1}}} %%%%%%%%%%%%%%%%%%%%%%%%%%% ACKNOWELEDGMENTS %%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand\acknowledgments{\section*{\acknowlname}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% EMAIL %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand\email[1]{{\tt\href{mailto:#1}{#1}}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% PREPRINT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \let\@preprint\relax \newcommand\preprint[1]{\long\gdef\@preprint{#1}} %%%%%%%%%%%%%%%%% SPECIAL URL overrides paper@url %%%%%%%%%%%%%%%%%%%%% \newbox\Jspecial@url \newcommand\JHEPspecialurl[1]{\global\setbox\Jspecial@url\hbox{\tiny\ttfamily #1}\@Jspecialurltrue} %%%%%%%%%%%%%%%%%%%%%%%%% FILE NAME AND URL %%%%%%%%%%%%%%%%%%%%%%%%%%% \global\newbox\Jacce@month \global\newcount\Jacce@year \global\newbox\Jacce@number \def\Jsplit@ident#1(#2)#3.{\global\setbox\Jacce@month\hbox{\tiny\ttfamily #1} \global\Jacce@year= #2 \global\setbox\Jacce@number\hbox{\tiny\ttfamily #3} \newbox\Jpaper@url \gdef\Jfile@name{\hbox{\tiny\ttfamily jhep\unhcopy\Jacce@month\the\Jacce@year\unhcopy\Jacce@number}} \global\setbox\Jpaper@url\hbox{\tiny\ttfamily http://jhep.sissa.it/archive/papers/\Jfile@name/\Jfile@name.pdf}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% COPYRIGHT %%%%%%%%%%%%%%%%%%%%%%%%%%%%% \gdef\Jcopyright@box{\hbox{\if@preprint\else{\scriptsize $\copyright$ SISSA/ISAS\ \if@Jcopy\unhbox\Jcopy@date\else\the\year\fi}\fi}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ABSTRACT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% *** For beton! We need a cs, not a box. Maybe also for refs.. %%%%%% \newcommand{\abstract}[1]% % ABSTR. IN NORMALSIZE {\gdef\abstract@cs{ % cs FOR WHOLE ABSTRACT {\if@proc\small\else\fi \noindent{\scshape\abstractname}\ \ignorespaces #1}} \normalsize \global\@abstracttrue} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% KEYWORDS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\@keywords{\relax}% % CS FOR WHOLE KEYWORDS \def\keywords{\bgroup\gdef\@comma{,}\catcode`\ =\active\catcode`,=\active \@@keywords} \begingroup \catcode`\ =\active\catcode`,=\active\global \def\@@keywords#1{\gdef\@keywords{\noindent{\scshape\keywordsname} \bgroup\def, {+}\def {_}% %ATTENTION: NO EXPANSION. \href{http://jhep.sissa.it/stdsearch}% {\let,\@comma\let \ #1}. \egroup}\egroup\global\@keywordstrue}% \endgroup %%%%%%%%%%%%%%%%%%%%%%%%%% OTHER ENVIRONMENTS %%%%%%%%%%%%%%%%%%%%%%%%% \newenvironment{verse} {\let\\\@centercr \list{}{\itemsep \z@ \itemindent -1.5em% \listparindent\itemindent \rightmargin \leftmargin \advance\leftmargin 1.5em}% \item\relax} {\endlist} \newenvironment{quotation} {\list{}{\listparindent 1.5em% \itemindent \listparindent \rightmargin \leftmargin \parsep \z@ \@plus\p@}% \item\relax} {\endlist} \newenvironment{quote} {\list{}{\rightmargin\leftmargin}% \item\relax} {\endlist} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% THEOREMS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newif\if@twothms\@twothmsfalse \if@preprint%\ifx\@thmcountersep\@undefined %\def\@xthm#1#2{\@begintheorem{#2}{\csname the#1\endcsname.}\ignorespaces}% after thm number \else % if published or proc \def\@xthm#1#2{\@begintheorem{#2\if@twothms\else.\fi} % theorems are numbered {\if@twothms\csname the#1\endcsname.\fi} % only if more than one \ifnum \csname the#1\endcsname>1 \immediate\write\@auxout% and not within sections {\string\global\string\@twothmstrue}\fi \ignorespaces} \fi \newcommand\Proof{\noindent\emph{Proof.}\ } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% APPENDIX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand\appendix{\par \setcounter{section}{0}% \setcounter{subsection}{0}% \renewcommand\thesection{\@Alph\c@section}} %%%%%%%%%%%%%%%%%%%%%%%%%%% SOME MORE LENGHTS %%%%%%%%%%%%%%%%%%%%%%%%% \setlength\arraycolsep{2\p@} % TO MATCH eqnarrays<->equations \setlength\tabcolsep{6\p@} \setlength\arrayrulewidth{.4\p@} \setlength\doublerulesep{2\p@} \setlength\tabbingsep{\labelsep} \skip\@mpfootins = \skip\footins \setlength\fboxsep{3\p@} \setlength\fboxrule{.4\p@} %%%%%%%%%%%%%%%%%%%%%%%%%%%%% THE EQUATION %%%%%%%%%%%%%%%%%%%%%%%%%%%% \renewcommand\theequation{\ifnum\c@section=0\else\thesection.\fi \@arabic\c@equation} %%%%%%%%%%%%%%%%%%%%%%%%%%%% FIGURES, TABLES %%%%%%%%%%%%%%%%%%%%%%%%%% \newcounter{figure} \renewcommand\thefigure{\@arabic\c@figure} \def\fps@figure{Htbp} \def\ftype@figure{1} \def\ext@figure{lof} \def\fnum@figure{\figurename~\thefigure} \newenvironment{figure} {\@ENVwarn{\FIGURE{...}}\@float{figure}} {\end@float} \newenvironment{figure*} {\@ENVwarn{\FIGURE{...}}\@dblfloat{figure}} {\end@dblfloat} \newcounter{table} \renewcommand\thetable{\@arabic\c@table} \def\fps@table{tbp} \def\ftype@table{2} \def\ext@table{lot} \def\fnum@table{\tablename~\thetable} \newenvironment{table} {\@ENVwarn{\TABLE{...}}\@float{table}} {\end@float} \newenvironment{table*} {\@ENVwarn{\TABLE{...}}\@dblfloat{table}} {\end@dblfloat} %%-----------------------------------------------------------------%% \newcommand{\FIGURE}[2][v]{\begin{floatingfigure}[#1]#2 \end{floatingfigure}} \newcommand{\TABLE}[2][v]{\begin{floatingtable}[#1]{#2} \end{floatingtable}} \newcommand{\EPSFIGURE}[3][v]{\begin{floatingfigure}[#1]\epsfig{file=#2} \caption{#3}\end{floatingfigure}} \newcommand{\TABULAR}[4][v]{\begin{floatingtable}[#1]{\begin{tabular}{#2} #3\end{tabular}}\caption{#4} \end{floatingtable}} %Check below, and put automatic width *** \newcommand{\DOUBLEFIGURE}[5][ht]{\@dblfloat{figure}[#1]\centerline{% \parbox{.45\textwidth}{\centerline{\epsfig{file=#2}}}~~~~ \parbox{.45\textwidth}{\centerline{\epsfig{file=#3}}}} \centerline{\parbox[t]{.45\textwidth}{\caption{#4}}~~~~ \parbox[t]{.45\textwidth}{\caption{#5}}}\end@dblfloat} \newcommand{\DOUBLETABLE}[5][ht]{\@dblfloat{table}[#1]\centerline{% \parbox{.45\textwidth}{\centerline{#2}}~~~~ \parbox{.45\textwidth}{\centerline{#3}}} \centerline{\parbox[t]{.45\textwidth}{\caption{#4}}~~~~ \parbox[t]{.45\textwidth}{\caption{#5}}}\end@dblfloat} %%%%%%---------------- FROM FLOATFLT PACKAGE ------------------%%%%%%%% %% Original file `floatflt.sty', modified by F.Nesti <nesti@sissa.it> to: %% be inserted in JHEP.cls; %% correct float placement when shifting past pages; %% correct incompatibility with \marginpar; %% correct incompatibility with \@startsection; %% correct persisting indentation in following pars; %% let float also at beginning of pages; %% avoid the widht specification. %% %% Original was 1994-1996 by Mats Dahlgren <matsd@physchem.kth.se>. %% %%%%%%%%\NeedsTeXFormat{LaTeX2e}[1994/06/01] %LEFT THIS STUFF TO %%%%%%%%\ProvidesPackage{floatflt}[1996/02/27 v. 1.3] %RECONVERT TO PACKAGE. \newcounter{OptionTest} \if@twoside \setcounter{OptionTest}{0} \else % POS: 2side=p/1side=r \setcounter{OptionTest}{1} \fi %%%%%%%%\DeclareOption{rflt}{\setcounter{OptionTest}{1}} %%%%%%%%\DeclareOption{lflt}{\setcounter{OptionTest}{2}} % CHOSEN. %%%%%%%%\DeclareOption{vflt}{\setcounter{OptionTest}{0}} %%%%%%%%\DeclareOption*{\OptionNotUsed} %%%%%%%%\ProcessOptions \newbox\@tmpbox \newbox\figbox \newbox\tabbox \newbox\pagebox \newcount\ffigcount \newcount\ftabcount \newcount\hangcount \newcount\nosuccesstryfig \newcount\nosuccesstrytab \newdimen\figgutter \figgutter=1truepc \newdimen\tabgutter \tabgutter=1truepc \newdimen\fl@wd \newdimen\fl@ht %\newdimen\fl@gut \newdimen\htdone \htdone=\z@ \newdimen\pageht \newdimen\startpageht \newdimen\floatfltwidth \newdimen\fltitemwidth \newif\iftryingfig \tryingfigfalse \newif\iftryingtab \tryingtabfalse \newif\ifdoingfig \doingfigfalse \newif\ifdoingtab \doingtabfalse \newif\iffigprocessing \figprocessingfalse \newif\iftabprocessing \tabprocessingfalse \newif\ifpageafterfig \pageafterfigfalse \newif\ifpageaftertab \pageaftertabfalse \newif\ifoddpages \newif\ifoutput \newtoks\outputpretest \def\@captype{} %%---------------- ORRIBLE HACKS, SORRY -------------------------%% \let\old@marginpar\marginpar % \renewcommand\marginpar[1]{{\outputpretest={\outputtrue}% REDEF \marginpar. \old@marginpar{#1}}} % \def\g@addto#1#2{{\toks@\expandafter{#1#2}% \xdef#1{\the\toks@}}}% \def\postpone@captions{% % % \global\let\tmp@label\label % REDEF \caption AND \global\let\tmp@caption\caption % \label, LATER. \global\let\later@capt\relax % UN PO' PESANTI \gdef\later@label{}% % MA D'ALTRONDE... \let\J@ref\ref\def\ref{\protect\J@ref}% % protect ref in captions.. \renewcommand\caption{\@ifnextchar[\J@@caption\J@caption}% \newcommand\J@caption[1]{\gdef\later@capt{\tmp@caption{##1}}}% LOCAL!! \newcommand\J@@caption[2][v]% {\gdef\later@capt{\tmp@caption[##1]{##2}}}% LOCAL!! \renewcommand\@@label[1]{\egroup\name{ref-##1}% % TAG WHERE CALLED, AT LEAST, \if@draft\norm@note{}{LAB: ##1}\fi% & DRAFTNOTE. \g@addto\later@label{\old@label{##1}}}% } \AtEndDocument{\iftryingfig\JHEP@warnl{Floating figure \the\ffigcount\space remains undone}\fi \iftryingtab\JHEP@warnl{Floating table \the\ftabcount\space remains undone}\fi \if@JHEP\ifnum\Jacce@year>2001\if@Jcopy\else \ifnum\the\Jacce@year=\the\year\else \JHEP@warnl{The acceptance date \the\Jacce@year\space is different from today's \the\year}\fi\fi\fi\fi} % the copyright date must be that % of publication if it differs from the one in the % identifier it can be forced using command \JHEPcopydate %%----------------- FIGURE ---------------------------------------%% \newenvironment{floatingfigure}[1][v]% {\@tfor \@tempa :=#1\do {\xdef\@fside{\@tempa}}% \global\advance\ffigcount by 1% \iffigprocessing {\count0=\ffigcount\advance\count0 by -1% \JHEP@warnl{Floating figures \the\count0\space\space and \the\ffigcount\space colliding}}\fi \iftabprocessing \JHEP@warnl{Floating table \the\ftabcount\space and floating figure \the\ffigcount\space colliding}\fi \postpone@captions \global\setbox\@tmpbox=\hbox\bgroup% begin of figbox %HBOX FOR AUTO WIDTH! } {% \egroup% % CALCULATE WIDTH (NO CAPTION FOR NOW) \global\setlength{\floatfltwidth}{\the\wd\@tmpbox}% % New behavior: wd < .6 columnwidth => floatflt. % wd < columnwidth => float{figure} % wd > columnwidth => dblfloat{figure} \ifdim\floatfltwidth<.6\columnwidth% % IF NOT TOO WIDE OK: \global\setbox\figbox=\vbox{\hsize=\floatfltwidth \def\@captype{figure}% \noindent\unhbox\@tmpbox \later@capt\later@label}% \global\figprocessingtrue \global\everypar={\tryfig\oldeverypar}% must be set globally! \figinsert\par \else% % ELSE NORMAL LATEX FIGURE, SIGH. % \JHEP@mess{Floating figure \the\ffigcount\space is % wide becomes a LaTeX float}% \if\@fside v \def\@fside{ht}\fi \ifdim\floatfltwidth<\columnwidth \def\@@tempa{\@float{figure}[}\let\@@tempb\end@float \else \def\@@tempa{\@dblfloat{figure}[}\let\@@tempb\end@dblfloat \fi \expandafter\@@tempa\@fside]\center\unhbox\@tmpbox\later@capt\later@label\@@tempb \fi } %%------------ TABLE ----------------------------------------------%% \newenvironment{floatingtable}[1][v]% {\@tfor \@tempa :=#1\do {\global\edef\@tside{\@tempa}}% \global\advance\ftabcount by 1% \iftabprocessing {\count0=\ftabcount\advance\count0 by -1% \JHEP@warnl{Floating tables \the\count0\space \space and \the\ftabcount \space colliding}}\fi \iffigprocessing \JHEP@warnl{Floating figure \the\ffigcount\space and floating table \the\ftabcount\space colliding}\fi \postpone@captions \global\setbox\@tmpbox=\hbox\bgroup% begin of tabbox, ACTUALLY AN HBOX. } {% \egroup% end of \tabbox, % ACTUALLY \@tmpbox \global\setlength{\floatfltwidth}{\the\wd\@tmpbox}% \ifdim\floatfltwidth<.6\columnwidth% % IF NOT TOO WIDE OK: \global\setbox\tabbox=\vbox{\hsize=\floatfltwidth \def\@captype{table}% \noindent\unhbox\@tmpbox \later@capt\later@label}% \global\tabprocessingtrue \global\everypar={\trytab\oldeverypar}% \tabinsert\par% \else% % ELSE NORMAL LATEX TABLE. % \JHEP@mess{Floating table \the\ftabcount\space is % wide becomes a LaTeX float}% \ifdim\floatfltwidth<1.1\columnwidth \if\@tside v \def\@tside{ht}\fi \def\@@tempa{\@float{table}[}\let\@@tempb\end@float \else \if\@tside v \def\@tside{t}\fi \def\@@tempa{\@dblfloat{table}[}\let\@@tempb\end@dblfloat \fi \expandafter\@@tempa\@tside]% % ACTUALLY CALL THE LATEX FLOAT \center\unhbox\@tmpbox\later@capt\later@label \@@tempb \fi% } %----------- prepare for tries ----------------------------% \def\figinsert{% \global\nosuccesstryfig=0% \global\outputpretest={\do@test}% \global\tryingfigtrue \global\doingfigfalse% \global\pageafterfigfalse}% \def\tabinsert{% \global\nosuccesstrytab=0% \global\outputpretest={\do@test}% \global\tryingtabtrue \global\doingtabfalse% \global\pageaftertabfalse}% %----------- init -----------------------------------------% \AtBeginDocument{% \edef\oldoutput{\the\output} \output={\the\outputpretest\ifoutput\oldoutput\fi}% \outputpretest={\outputtrue}% \edef\oldeverypar{\the\everypar}% PERCHE' NESSUNO LO RIMETTE PIU' A POSTO?*** } %---- tests during \outputpretest -------------------------% \def\do@test{% \ifnum\outputpenalty=-10005 % \output \setbox\pagebox=\vbox{\unvbox255}% \global\pageht=\ht\pagebox \global\outputfalse \unvbox\pagebox \dimen0=\pageht\advance\dimen0 by 2 \baselineskip \ifdim\dimen0>\vsize\pagebreak[4]\global\pageht\z@\fi \else \global\outputtrue \ifnum\outputpenalty>-\@Mi %ie \marginpar's give penalty. \ifdoingtab\global\pageaftertabtrue\fi \ifdoingfig\global\pageafterfigtrue\fi \fi \fi}% %-------- check for side ----------------------------------% \def\chk@side#1{% DEFINED \fl@sid, BUT IF CHOSEN A DEFAULT, ELIMINATE ALL *** {\edef\fl@sid{#1}% \if\fl@sid r\global\oddpagestrue\fi \if\fl@sid l\global\oddpagesfalse\fi \if\fl@sid p% \ifodd\c@page\global\oddpagesfalse \else\global\oddpagestrue\fi \fi \if\fl@sid v% \ifnum\theOptionTest=0% \ifodd\c@page\global\oddpagesfalse \else\global\oddpagestrue\fi \else \ifodd\theOptionTest\global\oddpagestrue \else\global\oddpagesfalse\fi \fi \fi }}% %-------- get point in page -------------------------------% \def\get@pageht{{\everypar={\relax}\setbox0=\lastbox \parindent=\wd0 \parskip=\z@ \par \penalty-10005 \leavevmode}}% %-------- try at everypar ---------------------------------% \def\tryfig{% \global\fl@ht\ht\figbox \global\fl@wd\wd\figbox \global\let\fl@gut\figgutter \iftryingfig \get@pageht \dimen0=\vsize \advance\dimen0 by -\pageht \advance\dimen0 by -2\baselineskip \ifdim\dimen0>\fl@ht \chk@side\@fside \dimen0=0.3\baselineskip \vrule depth \dimen0 width \z@%height 1.5\baselineskip \vadjust{\kern -\dimen0 \vtop to \dimen0{% \baselineskip=\dimen0 \vss \vbox to 1ex{% \ifoddpages \hb@xt@\hsize{\hss\copy\figbox}% \else% leftsetting \hb@xt@\hsize{\copy\figbox\hss}% \fi \vss}\null}}% \global\tryingfigfalse \global\doingfigtrue \global\startpageht=\pageht \global\htdone=\z@ \dohang \ifnum\nosuccesstryfig>0% \JHEP@mess{Flt. fig. \the\ffigcount\space set on page \the\count0, shifted \the\nosuccesstryfig\space par(s) forward}% % \else % \JHEP@mess{Floating figure \the\ffigcount\space % set on page \the\count0}% \fi \else \global\advance\nosuccesstryfig by 1 \fi \else% % IF NOT TRYING \ifdoingfig \get@pageht \global\htdone=\pageht \global\advance\htdone by -\startpageht \ifpageafterfig \global\doingfigfalse% IN CASE A PAGEBREAK JUST BELOW? \else \dimen0=\fl@ht \advance\dimen0 by .85\baselineskip % .85 ENOUGH: WE ARE AT NEW PAR % \typeout{FLOAT HT: \the\dimen0, HTDONE: \the\htdone} \ifdim\htdone<\dimen0% \dohang \else \global\doingfigfalse \fi \fi \ifdoingfig\else\global\figprocessingfalse\fi% IF NO MORE DOING. \else \global\outputpretest={\outputtrue}% NOT RESTORE EVPAR IF NOT DOING? \fi% % END IF DOING \fi% % END IF TRYING } \def\trytab{% \global\fl@ht\ht\tabbox \global\fl@wd\wd\tabbox \global\let\fl@gut\tabgutter \iftryingtab \get@pageht \dimen0=\vsize \advance\dimen0 by -\pageht \advance\dimen0 by -2\baselineskip \ifdim\dimen0>\fl@ht \chk@side\@tside \dimen0=0.3\baselineskip \vrule depth \dimen0 width \z@ \vadjust{\kern -\dimen0 \vtop to \dimen0{% \baselineskip=\dimen0 \vss \vbox to 1ex{% \ifoddpages \hb@xt@\hsize{\hss\copy\tabbox}% \else% leftsetting \hb@xt@\hsize{\copy\tabbox\hss}% \fi \vss}\null}}% \global\tryingtabfalse \global\doingtabtrue \global\startpageht=\pageht \global\htdone=\z@ \dohang \ifnum\nosuccesstrytab>0% \JHEP@mess{Flt. tab. \the\ftabcount\space set on page \the\count0, shifted \the\nosuccesstrytab\space par(s) forward}% % \else % \JHEP@mess{Floating table \the\ftabcount\space % set on page \the\count0}% \fi \else \global\advance\nosuccesstrytab by 1 \fi \else \ifdoingtab \get@pageht \global\htdone=\pageht \global\advance\htdone by -\startpageht \ifpageaftertab \global\doingtabfalse \else \dimen0=\fl@ht \advance\dimen0 by .85\baselineskip % .85 ENOUGH: WE ARE AT NEW PAR \ifdim\htdone<\dimen0% \dohang \else \global\doingtabfalse \fi \fi \ifdoingtab\relax\else\global\tabprocessingfalse\fi \else \global\outputpretest={\outputtrue}% \fi \fi } %----- hanging lord -----------------------------% \def\dohang{% \dimen0=\fl@ht \advance\dimen0 by -\htdone \advance\dimen0 by 1.999\baselineskip % (16/12/98) WAS 1.49 BUT \hangcount=\dimen0 % TEX ROUNDS ON STRICT INTEGERS \divide\hangcount by \baselineskip % IN THIS DIVISION! % \typeout{HANGCOUNT: \the\hangcount.} % \ifnum\hangcount > 0 % IF ZERO ALSO INDENT MUST BE NULL. (7/6/97) \dimen0=\fl@wd \advance\dimen0 by \fl@gut \ifoddpages \global\hangindent=-\dimen0% placing right \else \global\hangindent=\dimen0% placing left \fi \global\hangafter=-\hangcount % \fi } %----------------------- TWO NEWITEMS ---------------------% \newcommand{\fltitem}[2][\z@]{\setlength{\fltitemwidth}{\linewidth}% \addtolength{\fltitemwidth}{-\floatfltwidth}% \addtolength{\fltitemwidth}{-0.5em}% \item \parbox[t]{\fltitemwidth}{#2}\\[#1]} \newcommand{\fltditem}[3][\z@]{\setlength{\fltitemwidth}{\linewidth}% \addtolength{\fltitemwidth}{-\floatfltwidth}% \addtolength{\fltitemwidth}{-0.5em}% \item[#2] \parbox[t]{\fltitemwidth}{#3}\\[#1]} %%%%%%\endinput %% %% End of ex-file `floatflt.sty'. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CAPTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newlength\abovecaptionskip \newlength\belowcaptionskip \setlength\abovecaptionskip{8\p@} \setlength\belowcaptionskip{0\p@} \long\def\@makecaption#1#2{% \if@hyper{\edef\@pippo{the\@captype} \name{\@captype\expandafter\csname\@pippo\endcsname}}\fi% \vskip\abovecaptionskip {\let\label\@gobble% % FN 10.2.97 REMOVED LATEX BUG: \let\index\@gobble% % LARGE CAPTIONS PROCESS LABEL \let\glossary\@gobble% % TWO TIMES. \sbox\@tempboxa{\small {\bfseries #1:} #2}% % \global\dimen0\wd\@tempboxa}% % \ifdim \dimen0 >\hsize \small {\bfseries #1:} #2\par \else \global\@minipagefalse \sbox\@tempboxa{\small {\bfseries #1:} #2}% \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% \fi \vskip\belowcaptionskip} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FONTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} \DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} \DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} \DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} \DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} \DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} \DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} \DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal} \DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TOC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand\tocsecs{} \newcommand\@pnumwidth{1.55em} \newcommand\@tocrmarg{2.55em} \newcommand\@dotsep{4.5} \setcounter{tocdepth}{3} \newcommand\tableofcontents{% \section*{\contentsname\label{-TOC-}} % \@mkboth{% % \MakeUppercase\contentsname}{\MakeUppercase\contentsname}% \@starttoc{toc}% \gdef\tableofcontents{\JHEP@igno{\tableofcontents\space already done}}} \newcommand*\l@part[2]{\def\hyp@typ{part}% \ifnum \c@tocdepth >-2\relax \addpenalty\@secpenalty \addvspace{2.25em \@plus\p@}% \begingroup \setlength\@tempdima{3em}% \parindent \z@ \rightskip \@pnumwidth \parfillskip -\@pnumwidth {\leavevmode \large \bfseries \tocsecs#1\hfil \hb@xt@\@pnumwidth{\hss \intJlink{\hash pag#2}{#2}}}\par \nobreak \if@compatibility \global\@nobreaktrue \everypar{\global\@nobreakfalse\everypar{}}% \fi \endgroup \fi} \newcommand*\l@section[2]{\def\hyp@typ{sec}% \ifnum \c@tocdepth >\z@ \addpenalty\@secpenalty \addvspace{1.0em \@plus\p@}% \setlength\@tempdima{1.8em}% %WIDTH OF SECT. N. \begingroup \let\d@t.% \parindent \z@ \rightskip \@pnumwidth \parfillskip -\@pnumwidth \leavevmode \bfseries \advance\leftskip\@tempdima \hskip -\leftskip \tocsecs#1\nobreak\hfil %HREF HERE WOULD GET ALSO THE TITLE(...) \nobreak\hb@xt@\@pnumwidth{\hss \intJlink{\hash pag#2}{#2}}\par \endgroup \fi} \newcommand*\l@subsection{\def\hyp@typ{sec}\@tocline{2}{1.8em}{2.3em}} \newcommand*\l@subsubsection{\def\hyp@typ{sec}\@tocline{3}{4.1em}{3.1em}} \newcommand*\l@paragraph{\def\hyp@typ{sec}\@tocline{4}{7.2em}{4.3em}} \newcommand*\l@subparagraph{\def\hyp@typ{sec}\@tocline{5}{10.5em}{5em}} \if@hyper \let\old@dtl\@dottedtocline \def\@dottedtocline#1#2#3#4#5{\old@dtl{#1}{#2}{#3}{#4}{% \intJlink{\hash pag#5}{#5}}} \fi \def\@tocline#1#2#3#4#5{% \ifnum #1>\c@tocdepth \else \vskip \z@ \@plus.2\p@ {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip \parindent #2\relax\@afterindenttrue \interlinepenalty\@M \leavevmode \@tempdima #3\relax \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip {#4}\nobreak %\leaders\hbox{$\m@th % \mkern \@dotsep mu\hbox{.}\mkern \@dotsep % mu$} \hfill \nobreak \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor \intJlink{\hash pag#5}{#5}}% \par}% \fi} %%%%%%%%%%%%%%%%%%%%%% LIST OF FIGURES AND TABLES %%%%%%%%%%%%%%%%%%%%% \if@draft % ONLY IF DRAFT! ... \newcommand\listoffigures{% \section*{\listfigurename \@mkboth{\MakeUppercase\listfigurename}% {\MakeUppercase\listfigurename}}% \@starttoc{lof}% } \newcommand*\l@figure{\def\hyp@typ{figure}\@dottedtocline{1}{1.5em}{2.3em}} \newcommand\listoftables{% \section*{\listtablename \@mkboth{% \MakeUppercase\listtablename}{\MakeUppercase\listtablename}}% \@starttoc{lot}% } \newcommand*\l@table{\def\hyp@typ{table}\@dottedtocline{1}{1.5em}{2.3em}} \else \newcommand\listoffigures{\JHEP@ignol{List of figures (draft mode only)}} \newcommand\listoftables{\JHEP@ignol{List of tables (draft mode only)}} \fi %%%%%%%%%%%%%%%%%%%%%%%%%%%%% BIBLIOGRAPHY %%%%%%%%%%%%%%%%%%%%%%%%%%%%*** \newdimen\bibindent \setlength\bibindent{1.5em} \newenvironment{thebibliography}[1]% %UNFORTUNATELY MODIFIED.. {\bgroup\raggedright\small\section*{\refname \@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}}% \list{\name{bib\@arabic\c@enumiv}% HOPE! \@biblabel{\@arabic\c@enumiv}}% {\settowidth\labelwidth{\@biblabel{#1}}% \leftmargin\labelwidth \advance\leftmargin\labelsep \@openbib@code \usecounter{enumiv}% \let\p@enumiv\@empty \renewcommand\theenumiv{\@arabic\c@enumiv}}% \sloppy\clubpenalty4000\widowpenalty4000% \sfcode`\.\@m} {\def\@noitemerr {\@latex@warning{Empty `thebibliography' environment}}% \endlist\egroup} \newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em} \if@draft \let\old@bbt\@bibitem\let\old@lbbt\@lbibitem% LOOK THE DISASTER HERE BELOW. \def\@lbibitem[#1]#2{\old@lbbt[#1]{#2}\reversemarginpar{\sf\bfseries\small#2}} \def\@bibitem#1{\old@bbt{#1}\reversemarginpar{\sf\bfseries\small#1}} \fi \let\@openbib@code\@empty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% JOURNALS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\@spires#1{\href{http://www-spires.slac.stanford.edu/spires/find/hep/www?j=#1}} % %PITY THAT target IS NOT IMPLEMENTED. \catcode`\%=12 \catcode`\|=14 \newcommand\apa[3] {\@spires{APASA%2C#1%2C#3} {{\it Acta Phys.\ Austriaca }{\bf #1} (#2) #3}} \newcommand\apas[3] {\@spires{APAUA%2C#1%2C#3} {{\it Acta Phys.\ Austriaca, Suppl.\ }{\bf #1} (#2) #3}} \newcommand\appol[3] {\@spires{APPOA%2C#1%2C#3} {{\it Acta Phys.\ Polon.\ }{\bf #1} (#2) #3}} \newcommand\advm[3] {\@spires{ADMTA%2C#1%2C#3} {{\it Adv.\ Math.\ }{\bf #1} (#2) #3}} \newcommand\adnp[3] {\@spires{ANUPB%2C#1%2C#3} {{\it Adv.\ Nucl.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\adp[3] {\@spires{ADPHA%2C#1%2C#3} {{\it Adv.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\atmp[3] {\@spires{00203%2C#1%2C#3} {{\it Adv.\ Theor.\ Math.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\am[3] {\@spires{ANMAA%2C#1%2C#3} {{\it Ann.\ Math.\ }{\bf #1} (#2) #3}} \newcommand\ap[3] {\@spires{APNYA%2C#1%2C#3} {{\it Ann.\ Phys.\ (NY) }{\bf #1} (#2) #3}} \newcommand\araa[3] {\@spires{ARAAA%2C#1%2C#3} {{\it Ann.\ Rev.\ Astron.\ \& Astrophys.\ }{\bf #1} (#2) #3}} \newcommand\arnps[3] {\@spires{ARNUA%2C#1%2C#3} {{\it Ann.\ Rev.\ Nucl.\ Part.\ Sci.\ }{\bf #1} (#2) #3}} \newcommand\asas[3] {\@spires{AAEJA%2C#1%2C#3} {{\it Astron.\ Astrophys.\ }{\bf #1} (#2) #3}} \newcommand\asj[3] {\@spires{ANJOA%2C#1%2C#3} {{\it Astron.\ J.\ }{\bf #1} (#2) #3}} \newcommand\app[3] {\@spires{APHYE%2C#1%2C#3} {{\it Astropart.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\apj[3] {\@spires{ASJOA%2C#1%2C#3} {{\it Astrophys.\ J. }{\bf #1} (#2) #3}} \newcommand\baas[3] {\@spires{AASBA%2C#1%2C#3} {{\it Bull.\ Am.\ Astron.\ Soc.\ }{\bf #1} (#2) #3}} \newcommand\bams[3] {\@spires{BAMOA%2C#1%2C#3} {{\it Bull.\ Am.\ Math.\ Soc.\ }{\bf #1} (#2) #3}} \newcommand\blms[3] {\@spires{LMSBB%2C#1%2C#3} {{\it Bull.\ London Math.\ Soc.\ }{\bf #1} (#2) #3}} \newcommand\cjm[3] {\@spires{CJMAA%2C#1%2C#3} {{\it Can.\ J.\ Math.\ }{\bf #1} (#2) #3}} \newcommand\cqg[3] {\@spires{CQGRD%2C#1%2C#3} {{\it Class.\ and Quant.\ Grav.\ }{\bf #1} (#2) #3}} \newcommand\cmp[3] {\@spires{CMPHA%2C#1%2C#3} {{\it Commun.\ Math.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\ctp[3] {\@spires{CTPMD%2C#1%2C#3} {{\it Commun.\ Theor.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\cag[3] {\@spires{00142%2C#1%2C#3} {{\it Commun.\ Anal.\ Geom.\ }{\bf #1} (#2) #3}} \newcommand\cpam[3] {\@spires{CPAMA%2C#1%2C#3} {{\it Commun.\ Pure Appl.\ Math.\ }{\bf #1} (#2) #3}} \newcommand\cpc[3] {\@spires{CPHCB%2C#1%2C#3} {{\it Comput.\ Phys.\ Commun.\ }{\bf #1} (#2) #3}} \newcommand\dmj[3] {\@spires{DUMJA%2C#1%2C#3} {{\it Duke Math.\ J. }{\bf #1} (#2) #3}} \newcommand\epjc[3] {\@spires{EPHJA%2CC#1%2C#3} {{\it Eur.\ Phys.\ J. }{\bf C #1} (#2) #3}} \newcommand\epjd[3] {\@spires{EPHJD%2CC#1%2C#3} {{\it Eur.\ Phys.\ J. Direct.\ }{\bf C #1} (#2) #3}} \newcommand\epl[3] {\@spires{EULEE%2C#1%2C#3} {{\it Europhys.\ Lett. }{\bf #1} (#2) #3}} \newcommand\forp[3] {\@spires{FPYKA%2C#1%2C#3} {{\it Fortschr.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\faa[3] {\@spires{FAAPB%2C#1%2C#3} {{\it Funct.\ Anal.\ Appl.\ }{\bf #1} (#2) #3}} \newcommand\grg[3] {\@spires{GRGVA%2C#1%2C#3} {{\it Gen.\ Rel.\ Grav.\ }{\bf #1} (#2) #3}} \newcommand\hpa[3] {\@spires{HPACA%2C#1%2C#3} {{\it Helv.\ Phys.\ Acta }{\bf #1} (#2) #3}} \newcommand\ijmpa[3] {\@spires{IMPAE%2CA#1%2C#3} {{\it Int.\ J.\ Mod.\ Phys.\ }{\bf A #1} (#2) #3}} \newcommand\ijmpb[3] {\@spires{IMPAE%2CB#1%2C#3} {{\it Int.\ J.\ Mod.\ Phys.\ }{\bf B #1} (#2) #3}} \newcommand\ijmpc[3] {\@spires{IMPAE%2CC#1%2C#3} {{\it Int.\ J.\ Mod.\ Phys.\ }{\bf C #1} (#2) #3}} \newcommand\ijmpd[3] {\@spires{IMPAE%2CD#1%2C#3} {{\it Int.\ J.\ Mod.\ Phys.\ }{\bf D #1} (#2) #3}} \newcommand\ijtp[3] {\@spires{IJTPB%2CB#1%2C#3} {{\it Int.\ J.\ Theor.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\invm[3] {\@spires{INVMB%2C#1%2C#3} {{\it Invent.\ Math.\ }{\bf #1} (#2) #3}} \newcommand\jag[3] {\@spires{00124%2C#1%2C#3} {{\it J.\ Alg.\ Geom.\ }{\bf #1} (#2) #3}} \newcommand\jams[3] {\@spires{00052%2C#1%2C#3} {{\it J.\ Am.\ Math.\ Soc.\ }{\bf #1} (#2) #3}} \newcommand\jap[3] {\@spires{JAPIA%2C#1%2C#3} {{\it J.\ Appl.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\jdg[3] {\@spires{JDGEA%2C#1%2C#3} {{\it J.\ Diff.\ Geom.\ }{\bf #1} (#2) #3}} \newcommand\jgp[3] {\@spires{JGPHE%2C#1%2C#3} {{\it J.\ Geom.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\jhep[3] {\href{http://jhep.sissa.it/stdsearch?paper=#1%28#2%29#3} {{\it J. High Energy Phys.\ }{\bf #1} (#2) #3}} \newcommand\jmp[3] {\@spires{JMAPA%2C#1%2C#3} {{\it J.\ Math.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\joth[3] {\@spires{JOTHE%2C#1%2C#3} {{\it J.\ Operator Theory }{\bf #1} (#2) #3}} \newcommand\jpha[3] {\@spires{JPAGB%2CA#1%2C#3} {{\it J. Phys.\ }{\bf A #1} (#2) #3}} \newcommand\jphc[3] {\@spires{JPAGB%2CC#1%2C#3} {{\it J. Phys.\ }{\bf C #1} (#2) #3}} \newcommand\jphg[3] {\@spires{JPAGB%2CG#1%2C#3} {{\it J. Phys.\ }{\bf G #1} (#2) #3}} \newcommand\lmp[3] {\@spires{LMPHD%2CA#1%2C#3} {{\it Lett.\ Math.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\ncl[3] {\@spires{NCLTA%2C#1%2C#3} {{\it Lett.\ Nuovo Cim.\ }{\bf #1} (#2) #3}} \newcommand\matan[3] {\@spires{MAANA%2CA#1%2C#3} {{\it Math.\ Ann.\ }{\bf #1} (#2) #3}} \newcommand\mussr[3] {\@spires{MUSIA%2CA#1%2C#3} {{\it Math.\ USSR Izv.\ }{\bf #1} (#2) #3}} \newcommand\mams[3] {\@spires{MAMCA%2CA#1%2C#3} {{\it Mem.\ Am.\ Math.\ Soc.\ }{\bf #1} (#2) #3}} \newcommand\mpla[3] {\@spires{MPLAE%2CA#1%2C#3} {{\it Mod.\ Phys.\ Lett.\ }{\bf A #1} (#2) #3}} \newcommand\mplb[3] {\@spires{MPLAE%2CB#1%2C#3} {{\it Mod.\ Phys.\ Lett.\ }{\bf B #1} (#2) #3}} \newcommand\nature[3] {\@spires{NATUA%2C#1%2C#3} {{\it Nature }{\bf #1} (#2) #3}} \newcommand\nim[3] {\@spires{NUIMA%2C#1%2C#3} {{\it Nucl.\ Instrum.\ Meth.\ }{\bf #1} (#2) #3}} \newcommand\npa[3] {\@spires{NUPHA%2CA#1%2C#3} {{\it Nucl.\ Phys.\ }{\bf A #1} (#2) #3}} \newcommand\npb[3] {\@spires{NUPHA%2CB#1%2C#3} {{\it Nucl.\ Phys.\ }{\bf B #1} (#2) #3}} \newcommand\npps[3] {\@spires{NUPHZ%2C#1%2C#3} {{\it Nucl.\ Phys.\ }{\bf #1} {\it(Proc.\ Suppl.)} (#2) #3}} \newcommand\nc[3] {\@spires{NUCIA%2C#1%2C#3} {{\it Nuovo Cim.\ }{\bf #1} (#2) #3}} \newcommand\ncs[3] {\@spires{NUCUA%2C#1%2C#3} {{\it Nuovo Cim.\ Suppl.\ }{\bf #1} (#2) #3}} \newcommand\pan[3] {\@spires{PANUE%2C#1%2C#3} {{\it Phys.\ Atom.\ Nucl.\ }{\bf #1} (#2) #3}} \newcommand\pla[3] {\@spires{PHLTA%2CA#1%2C#3} {{\it Phys.\ Lett.\ }{\bf A #1} (#2) #3}} \newcommand\plb[3] {\@spires{PHLTA%2CB#1%2C#3} {{\it Phys.\ Lett.\ }{\bf B #1} (#2) #3}} \newcommand\pr[3] {\@spires{PHRVA%2C#1%2C#3} {{\it Phys.\ Rev.\ }{\bf #1} (#2) #3}} \newcommand\pra[3] {\@spires{PHRVA%2CA#1%2C#3} {{\it Phys.\ Rev.\ }{\bf A #1} (#2) #3}} \newcommand\prb[3] {\@spires{PHRVA%2CB#1%2C#3} {{\it Phys.\ Rev.\ }{\bf B #1} (#2) #3}} \newcommand\prc[3] {\@spires{PHRVA%2CC#1%2C#3} {{\it Phys.\ Rev.\ }{\bf C #1} (#2) #3}} \newcommand\prd[3] {\@spires{PHRVA%2CD#1%2C#3} {{\it Phys.\ Rev.\ }{\bf D #1} (#2) #3}} \newcommand\pre[3] {\@spires{PHRVA%2CE#1%2C#3} {{\it Phys.\ Rev.\ }{\bf E #1} (#2) #3}} \newcommand\prep[3] {\@spires{PRPLC%2C#1%2C#3} {{\it Phys.\ Rept.\ }{\bf #1} (#2) #3}} \newcommand\prl[3] {\@spires{PRLTA%2C#1%2C#3} {{\it Phys.\ Rev.\ Lett.\ }{\bf #1} (#2) #3}} \newcommand\phys[3] {\@spires{PHYSA%2CA#1%2C#3} {{\it Physica }{\bf #1} (#2) #3}} \newcommand\plms[3] {\@spires{PHLTA%2CB#1%2C#3} {{\it Proc.\ London Math.\ Soc.\ }{\bf B #1} (#2) #3}} \newcommand\pnas[3] {\@spires{PNASA%2C#1%2C#3} {{\it Proc.\ Nat.\ Acad.\ Sci.\ }{\bf #1} (#2) #3}} \newcommand\ppnp[3] {\@spires{PPNPD%2C#1%2C#3} {{\it Prog.\ Part.\ Nucl.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\ptp[3] {\@spires{PTPKA%2C#1%2C#3} {{\it Prog.\ Theor.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\ptps[3] {\@spires{PTPSA%2C#1%2C#3} {{\it Prog.\ Theor.\ Phys.\ Suppl.\ }{\bf #1} (#2) #3}} \newcommand\rmp[3] {\@spires{RMPHA%2C#1%2C#3} {{\it Rev.\ Mod.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\sjnp[3] {\@spires{SJNCA%2C#1%2C#3} {{\it Sov.\ J.\ Nucl.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\sjpn[3] {\@spires{SJPNA%2C#1%2C#3} {{\it Sov.\ J.\ Part.\ Nucl.\ }{\bf #1} (#2) #3}} \newcommand\jetp[3] {\@spires{SPHJA%2C#1%2C#3} {{\it Sov.\ Phys.\ JETP\/ }{\bf #1} (#2) #3}} \newcommand\jetpl[3] {\@spires{JTPLA%2C#1%2C#3} {{\it Sov.\ Phys.\ JETP Lett.\ }{\bf #1} (#2) #3}} \newcommand\spu[3] {\@spires{SOPUA%2C#1%2C#3} {{\it Sov.\ Phys.\ Usp.\ }{\bf #1} (#2) #3}} \newcommand\tmf[3] {\@spires{TMFZA%2C#1%2C#3} {{\it Teor.\ Mat.\ Fiz.\ }{\bf #1} (#2) #3}} \newcommand\tmp[3] {\@spires{TMPHA%2C#1%2C#3} {{\it Theor.\ Math.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\ufn[3] {\@spires{UFNAA%2C#1%2C#3} {{\it Usp.\ Fiz.\ Nauk.\ }{\bf #1} (#2) #3}} | }}}}}}}}}}}}}}}}}}}}}} "|" is here a comment (catcode defined above) to | }}}}}}}}}}}}}}}}}}}}}} include parenthesis for emacs to parse properly. \newcommand\ujp[3] {\@spires{00267%2C#1%2C#3} {{\it Ukr.\ J.\ Phys.\ }{\bf #1} (#2) #3}} \newcommand\yf[3] {\@spires{YAFIA%2C#1%2C#3} {{\it Yad.\ Fiz.\ }{\bf #1} (#2) #3}} \newcommand\zpc[3] {\@spires{ZEPYA%2CC#1%2C#3} {{\it Z.\ Physik }{\bf C #1} (#2) #3}} \newcommand\zetf[3] {\@spires{ZETFA%2C#1%2C#3} {{\it Zh.\ Eksp.\ Teor.\ Fiz.\ }{\bf #1} (#2) #3}} \newcommand{\newjournal}[5]{\@spires{#2%2C#3%2C#5} {{\it #1 }{\bf #3} (#4) #5}} \newcommand\ibid[3]{{\it ibid.\ }{\bf #1} (#2) #3} \catcode`\%=14 \catcode`\|=12 % HEPTH's: \hepth{9912999} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\hepth}[1]{\href{http://xxx.lanl.gov/abs/hep-th/#1}{\tt hep-th/#1}} \newcommand{\hepph}[1]{\href{http://xxx.lanl.gov/abs/hep-ph/#1}{\tt hep-ph/#1}} \newcommand{\heplat}[1]{\href{http://xxx.lanl.gov/abs/hep-lat/#1}{\tt hep-lat/#1}} \newcommand{\hepex}[1]{\href{http://xxx.lanl.gov/abs/hep-ex/#1}{\tt hep-ex/#1}} \newcommand{\nuclth}[1]{\href{http://xxx.lanl.gov/abs/nucl-th/#1}{\tt nucl-th/#1}} \newcommand{\nuclex}[1]{\href{http://xxx.lanl.gov/abs/nucl-ex/#1}{\tt nucl-ex/#1}} \newcommand{\grqc}[1]{\href{http://xxx.lanl.gov/abs/gr-qc/#1}{\tt gr-qc/#1}} \newcommand{\qalg}[1]{\href{http://xxx.lanl.gov/abs/q-alg/#1}{\tt q-alg/#1}} \newcommand{\accphys}[1]{\href{http://xxx.lanl.gov/abs/accphys/#1}{\tt accphys/#1}} \newcommand{\alggeom}[1]{\href{http://xxx.lanl.gov/abs/alg-geom/#1}{\tt alg-geom/#1}} \newcommand{\astroph}[1]{\href{http://xxx.lanl.gov/abs/astro-ph/#1}{\tt astro-ph/#1}} \newcommand{\chaodyn}[1]{\href{http://xxx.lanl.gov/abs/chao-dyn/#1}{\tt chao-dyn/#1}} \newcommand{\condmat}[1]{\href{http://xxx.lanl.gov/abs/cond-mat/#1}{\tt cond-mat/#1}} \newcommand{\nlinsys}[1]{\href{http://xxx.lanl.gov/abs/nlin-sys/#1}{\tt nlin-sys/#1}} \newcommand{\quantph}[1]{\href{http://xxx.lanl.gov/abs/quant-ph/#1}{\tt quant-ph/#1}} \newcommand{\solvint}[1]{\href{http://xxx.lanl.gov/abs/solv-int/#1}{\tt solv-int/#1}} \newcommand{\suprcon}[1]{\href{http://xxx.lanl.gov/abs/supr-con/#1}{\tt supr-con/#1}} %\newcommand{\mathph}[1]{\href{http://xxx.lanl.gov/abs/math-ph/#1}{\tt math-ph/#1}} %\newcommand{\physics}[1]{\href{http://xxx.lanl.gov/abs/physics/#1}{\tt physics/#1}} \newcommand{\Math}[2]{\href{http://xxx.lanl.gov/abs/math.#1/#2}{\tt math.#1/#2}} \newcommand{\arXivid}[1]{\href{http://arxiv.org/abs/#1}{\tt arXiv:#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% BopHook %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \if@preprint\else \if@proc \newcommand\PrHEP[1]{\@JHEPtrue\special{!userdict begin /iseven {dup dup 2 idiv 2 mul eq} bind def /BHend { translate rotate /Courier findfont 30 scalefont setfont 0 0 moveto 0.80 setgray (#1) show grestore} bind def statusdict /duplexmode known {statusdict begin duplexmode end} {false} ifelse {/bop-hook {gsave iseven {-90 550 570} {+90 50 300} ifelse BHend} def} {/bop-hook {gsave -90 550 570 BHend} def} ifelse end }\let\PrHEP\gobble}\else \newcommand\JHEP[1]{\Jsplit@ident#1.\@JHEPtrue\special{!userdict begin /iseven {dup dup 2 idiv 2 mul eq} bind def /BHend { translate rotate /Courier findfont 30 scalefont setfont 0 0 moveto 0.80 setgray (JHEP#1) show grestore} bind def statusdict /duplexmode known {statusdict begin duplexmode end} {false} ifelse {/bop-hook {gsave iseven {-90 550 570} {+90 50 300} ifelse BHend} def} {/bop-hook {gsave -90 550 570 BHend} def} ifelse end }\let\JHEP\gobble}\fi \fi %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% INDEX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%..? % % REMOVED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FOOTNOTES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \skip\footins = 1\bigskipamount plus 2pt minus 8pt \addtolength{\footnotesep}{1pt} \renewcommand\footnoterule{% % NO HYPER... \kern-3\p@ \hrule\@width.4\columnwidth \kern2.6\p@} \newcommand\@makefntext[1]{% \parindent 1em% \noindent \hb@xt@1.8em{\hss\@makefnmark}#1} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% NAMES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand\contentsname{Contents} \if@draft\newcommand\listfigurename{List of figures} \newcommand\listtablename{List of tables}\fi \newcommand\refname{References} \newcommand\indexname{Index} \newcommand\figurename{Figure} \newcommand\tablename{Table} \newcommand\partname{Part} \newcommand\appendixname{Appendix} \newcommand\abstractname{Abstract:} \newcommand\keywordsname{Keywords:} \newcommand\receivedname{Received:} \newcommand\revisedname{Revised:} \newcommand\acceptedname{Accepted:} \newcommand\acknowlname{Acknowledgments} \newcommand\today{} \edef\today{\ifcase\month\or January\or February\or March\or April\or May\or June\or July\or August\or September\or October\or November\or December\fi \space\number\day, \number\year} \setlength\columnsep{20\p@} \setlength\columnseprule{0\p@} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DEFAULTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %\pagestyle{plain} \pagestyle{JHEP} \pagenumbering{arabic} \@addtoreset{equation}{section} \if@preprint\else\if@proc\else \let\pagestyle\@gobble \let\thispagestyle\@gobble \let\pagenumbering\@gobble\fi\fi %\if@twoside\else\raggedbottom\fi \onecolumn % FOR REQUESTED FRONTMATTER ... \AtBeginDocument{\bgroup% SOME NICE (LOCAL) MESSAGES... \def\@APPwarn#1{\JHEP@warnl{\protect#1 should appear before \protect\begin{document}}}% \def\@APPerr#1{\ClassError{JHEP}{\protect#1 should appear before \protect\begin{document}}}% % \if@title\else\@APPerr{Some \protect\title{...}}\fi% \if@author\else\@APPerr{Some \protect\author{...}}\fi \if@abstract\else\@APPerr{\abstract{...}}\fi % \if@email\else\@APPwarn{\email}\fi% \if@proc\else\if@keywords\else\@APPwarn{\keywords{...}}\fi\fi \if@preprint \ifx\@preprint\relax\@APPwarn{\preprint{...}}\fi \else \if@proc\if@conf\else\@APPwarn{\conference{...}}\fi \else \if@rece\else\@APPerr{\received{...}}\fi \if@acce\else\@APPerr{\accepted{...}}\fi \if@JHEP\else\@APPerr{\JHEP{mm(yyyy)nnn}}\fi \fi \fi \egroup \auto@maketitle \if@proc\if@speaker\else\JHEP@warnl{One \protect\speaker{...} must be specified among authors}\fi \if@dblspeak\JHEP@warnl{A single \protect\speaker{...} should appear in proceedings}\fi\fi }% IN THE BEGINNING THERE WAS THE TITLE, TYPESET IN TeX \endinput %% %% End of file `JHEP3.cls'. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/doc/microtype.sty�����������������������������������������������������������������������0000644�0001750�0001750�00000324510�12116077755�014411� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%% %% This is file `microtype.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% microtype.dtx (with options: `package') %% %% ------------------------------------------------------------------------ %% %% The `microtype' package %% An interface to the micro-typographic extensions of pdfTeX %% Copyright (c) 2004--2008 R Schlicht <w.m.l@gmx.net> %% %% This work may be distributed and/or modified under the conditions of the %% LaTeX Project Public License, either version 1.3c of this license or (at %% your option) any later version. The latest version of this license is in: %% http://www.latex-project.org/lppl.txt, and version 1.3c or later is part %% of all distributions of LaTeX version 2005/12/01 or later. %% %% This work has the LPPL maintenance status `author-maintained'. %% %% This work consists of the files microtype.dtx and microtype.ins and the %% derived files microtype.sty and letterspace.sty. %% %% ------------------------------------------------------------------------ %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage {microtype} [2008/06/04 v2.3b Micro-typography with pdfTeX (RS)% ] \def\MT@MT {microtype} \let\MT@restore@catcodes\@empty \def\MT@fix@catcode#1#2{% \edef\MT@restore@catcodes{% \MT@restore@catcodes \catcode#1 \the\catcode#1\relax }% \catcode#1 #2\relax } \MT@fix@catcode{17}{14}% ^^Q (comment) \MT@fix@catcode{24} {9}% ^^X (ignore) \MT@fix@catcode{33}{12}% ! \MT@fix@catcode{34}{12}% " \MT@fix@catcode{36} {3}% $ (math shift) \MT@fix@catcode{39}{12}% ' \MT@fix@catcode{42}{12}% * \MT@fix@catcode{43}{12}% + \MT@fix@catcode{44}{12}% , \MT@fix@catcode{45}{12}% - \MT@fix@catcode{58}{12}% : \MT@fix@catcode{60}{12}% < \MT@fix@catcode{61}{12}% = \MT@fix@catcode{62}{12}% > \MT@fix@catcode{63}{12}% ? \MT@fix@catcode{94} {7}% ^ (superscript) \MT@fix@catcode{96}{12}% ` \MT@fix@catcode{124}{12}% | \newcommand*\DeclareMicrotypeSet[3][]{} \newcommand*\UseMicrotypeSet[2][]{} \newcommand*\DeclareMicrotypeSetDefault[2][]{} \newcommand*\SetProtrusion[3][]{} \newcommand*\SetExpansion[3][]{} \newcommand*\SetTracking[3][]{} \newcommand*\SetExtraKerning[3][]{} \newcommand*\SetExtraSpacing[3][]{} \newcommand*\DisableLigatures[2][]{} \newcommand*\DeclareCharacterInheritance[3][]{} \newcommand*\DeclareMicrotypeVariants[1]{} \newcommand*\DeclareMicrotypeAlias[2]{} \newcommand*\LoadMicrotypeFile[1]{} \newcommand*\DeclareMicrotypeBabelHook[2]{} \newcommand*\microtypesetup[1]{} \newcommand*\microtypecontext[1]{} \newcommand*\textmicrotypecontext[2]{#2} \@ifpackageloaded{letterspace}{\let\MT@textls\relax}{% \newcommand*\lsstyle{} \newcommand\textls[2][]{} \def\textls#1#{} \newcommand*\lslig[1]{#1} } \def\DeclareMicrotypeSet#1#{\@gobbletwo} \def\DeclareMicrotypeVariants#1#{\@gobble} \@onlypreamble\DeclareMicrotypeSet \@onlypreamble\UseMicrotypeSet \@onlypreamble\DeclareMicrotypeSetDefault \@onlypreamble\DisableLigatures \@onlypreamble\DeclareMicrotypeVariants \@onlypreamble\DeclareMicrotypeBabelHook \def\MT@old@cmd#1#2{% \newcommand*#1{\MT@warning{% \string#1 is deprecated. Please use\MessageBreak \string#2 instead}% \let #1#2#2}} \MT@old@cmd\DeclareMicroTypeAlias\DeclareMicrotypeAlias \MT@old@cmd\DeclareMicroTypeSet \DeclareMicrotypeSet \MT@old@cmd\UseMicroTypeSet \UseMicrotypeSet \MT@old@cmd\LoadMicroTypeFile \LoadMicrotypeFile \def\MT@warning{\PackageWarning\MT@MT} \def\MT@warning@nl#1{\MT@warning{#1\@gobble}} \def\MT@info{\PackageInfo\MT@MT} \def\MT@info@nl#1{\MT@info{#1\@gobble}} \let\MT@vinfo\@gobble \def\MT@error{\PackageError\MT@MT} \def\MT@warn@err#1{\MT@error{#1}{% This error message appears because you loaded the `\MT@MT'\MessageBreak package with the option `verbose=errors'. Consult the documentation\MessageBreak in \MT@MT.pdf to find out what went wrong.}} \def\MT@pdftex@no{0} \ifx\normalpdftexversion\@undefined \else \let\pdftexversion \normalpdftexversion \let\pdftexrevision\normalpdftexrevision \let\pdfoutput \normalpdfoutput \fi \ifx\pdftexversion\@undefined \else \ifx\pdftexversion\relax \else \def\MT@pdftex@no{7} \ifnum\pdftexversion = 140 \ifnum\pdftexrevision < 4 \def\MT@pdftex@no{6} \fi \else \ifnum\pdftexversion < 140 \def\MT@pdftex@no{5} \ifnum\pdftexversion < 130 \def\MT@pdftex@no{4} \ifnum\pdftexversion < 120 \def\MT@pdftex@no{3} \ifnum\pdftexversion = 14 \ifnum \expandafter`\pdftexrevision < `h \def\MT@pdftex@no{2} \ifnum \expandafter`\pdftexrevision < `f \def\MT@pdftex@no{1} \fi \fi \else \ifnum\pdftexversion < 14 \def\MT@pdftex@no{1} \fi \fi \fi \fi \fi \fi \fi \fi \def\MT@clear@options{% \AtEndOfPackage{\let\@unprocessedoptions\relax}% \let\CurrentOption\@empty } \ifnum\MT@pdftex@no < 2 \MT@warning@nl{You \ifcase\MT@pdftex@no don't seem to be using pdftex.\MessageBreak `\MT@MT' only works with pdftex.\MessageBreak Try running `pdflatex' instead of `latex'% \else are using a pdftex version older than 0.14f% .\MessageBreak `\MT@MT' does not work with this version.\MessageBreak Please install a newer version of pdftex% \fi } \MT@clear@options\MT@restore@catcodes \endinput\fi \RequirePackage{keyval}[1997/11/10] \newtoks\MT@toks \newif\ifMT@if@ \newif\ifMT@protrusion \newif\ifMT@expansion \newif\ifMT@auto \newif\ifMT@selected \newif\ifMT@noligatures \newif\ifMT@draft \newif\ifMT@spacing \newif\ifMT@kerning \newif\ifMT@tracking \newif\ifMT@babel \let\MT@pr@level\tw@ \let\MT@ex@level\tw@ \let\MT@pr@factor\@m \let\MT@ex@factor\@m \let\MT@sp@factor\@m \let\MT@kn@factor\@m \let\MT@pr@unit\@empty \let\MT@sp@unit\m@ne \def\MT@kn@unit{1em} \let\MT@stretch\m@ne \let\MT@shrink \m@ne \let\MT@step \m@ne \def\MT@pr@min{-\@m} \let\MT@pr@max\@m \let\MT@ex@min\z@ \let\MT@ex@max\@m \def\MT@sp@min{-\@m} \let\MT@sp@max\@m \def\MT@kn@min{-\@m} \let\MT@kn@max\@m \def\MT@tr@min{-\@m} \let\MT@tr@max\@m \def\MT@factor@default{1000 } \def\MT@stretch@default{20 } \def\MT@shrink@default{20 } \def\MT@step@default{4 } \let\MT@letterspace\m@ne \def\MT@letterspace@default{100} \newif\ifMT@document \ifcase 0% \ifx\eTeXversion\@undefined 1\else \ifx\eTeXversion\relax 1\else \ifcase\eTeXversion 1\fi \fi \fi \else \catcode`\^^Q=9 \catcode`\^^X=14 \fi \def\MT@requires@pdftex#1{% \ifnum\MT@pdftex@no<#1 \expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi } \ifx\directlua\@undefined\else \MT@error {`\MT@MT' only works with luatex if you generate% \MessageBreak the package with the `lua' option% } {} \fi \def\MT@glet{\global\let} \def\MT@exp@cs#1#2{\expandafter#1\csname#2\endcsname} \def\MT@exp@gcs#1#2{\begingroup\expandafter\endgroup\expandafter#1\csname#2\endcsname} \def\MT@def@n{\MT@exp@cs\def} \def\MT@gdef@n{\MT@exp@gcs\gdef} \def\MT@edef@n{\MT@exp@cs\edef} \def\MT@xdef@n{\MT@exp@gcs\xdef} \def\MT@let@nc{\MT@exp@cs\let} \def\MT@glet@nc{\MT@exp@gcs\MT@glet} \def\MT@let@cn#1#2{\expandafter\let\expandafter#1\csname #2\endcsname} \def\MT@let@nn{\MT@exp@cs\MT@let@cn} \def\MT@glet@nn{\MT@exp@gcs{\global\expandafter\MT@let@cn}} \def\MT@@font{\expandafter\string\MT@font} \def\MT@exp@one@n#1#2{\expandafter#1\expandafter{#2}} \def\MT@exp@two@c#1{\expandafter\expandafter\expandafter#1\expandafter} \def\MT@exp@two@n#1#2#3{% \expandafter\expandafter\expandafter #1\expandafter\expandafter\expandafter {\expandafter#2\expandafter}\expandafter{#3}} \def\MT@ifdefined@c@T#1{% ^^X \ifdefined#1\expandafter\@firstofone\else\expandafter\@gobble\fi ^^Q \ifx#1\@undefined\expandafter\@gobble\else\expandafter\@firstofone\fi } \def\MT@ifdefined@c@TF#1{% ^^X \ifdefined#1\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi ^^Q \ifx#1\@undefined ^^Q \expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi } \def\MT@ifdefined@n@T#1{% ^^X \ifcsname#1\endcsname\expandafter\@firstofone\else\expandafter\@gobble\fi ^^Q \begingroup\MT@exp@two@c\endgroup\ifx\csname #1\endcsname\relax ^^Q \expandafter\@gobble\else\expandafter\@firstofone\fi } \def\MT@ifdefined@n@TF#1{% ^^X \ifcsname#1\endcsname\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi ^^Q \begingroup\MT@exp@two@c\endgroup\ifx\csname #1\endcsname\relax ^^Q \expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi } \def\MT@detokenize@n#1{% ^^X \detokenize\expandafter{% \string#1% ^^X }% } \def\MT@detokenize@c#1{% ^^X \detokenize\expandafter\expandafter\expandafter{\expandafter\string#1}% ^^Q \MT@exp@two@c\zap@space\strip@prefix\meaning#1 \@empty } \begingroup \catcode`\%=12 \catcode`\&=14 \gdef\MT@ifempty#1{& \if %#1%& \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } \endgroup \MT@requires@pdftex6{ \def\MT@ifint#1{% \ifcase\pdfmatch{^-*[0-9]+ *$}{#1}\relax \expandafter\@secondoftwo \else \expandafter\@firstoftwo \fi } }{ \def\MT@ifint#1{% \if!\ifnum9<1#1!\else?\fi \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } } \MT@requires@pdftex6{ \def\MT@ifdimen#1{% \ifcase\pdfmatch{^([0-9]+([.,][0-9]+)?|[.,][0-9]+)% (em|ex|cm|mm|in|pc|pt|dd|cc|bp|sp|nd|nc|px)? *$}{#1}\relax \expandafter\@secondoftwo \else \expandafter\@firstoftwo \fi } }{ \def\MT@ifdimen#1{% \setbox\z@=\hbox{% \MT@count=1#1\relax \ifnum\MT@count=\@ne \aftergroup\@secondoftwo \else \aftergroup\@firstoftwo \fi }% } } \def\MT@ifdim#1#2#3{% \ifdim #1\p@ #2 #3\p@ \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } \MT@requires@pdftex5{ \def\MT@ifstreq#1#2{% \ifcase\pdfstrcmp{#1}{#2}\relax \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } }{ \def\MT@ifstreq#1#2{% \edef\MT@res@a{#1}% \edef\MT@res@b{#2}% \ifx\MT@res@a\MT@res@b \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } } \def\MT@xadd#1#2{% \ifx#1\relax \xdef#1{#2}% \else \xdef#1{#1#2}% \fi } \def\MT@xaddb#1#2{% \ifx#1\relax \xdef#1{#2}% \else \xdef#1{#2#1}% \fi } \def\MT@map@clist@n#1#2{% \ifx\@empty#1\else \def\MT@clist@function##1{#2}% \MT@map@clist@#1,\@nil,\@nnil \fi } \def\MT@map@clist@c#1{\MT@exp@one@n\MT@map@clist@n#1} \def\MT@map@clist@#1,{% \ifx\@nil#1% \expandafter\MT@clist@break \fi \MT@clist@function{#1}% \MT@map@clist@ } \let\MT@clist@function\@gobble \def\MT@clist@break#1\@nnil{} \def\MT@map@tlist@n#1#2{\MT@map@tlist@#2#1\@nnil} \def\MT@map@tlist@c#1#2{\expandafter\MT@map@tlist@\expandafter#2#1\@nnil} \def\MT@map@tlist@#1#2{% \ifx\@nnil#2\else #1{#2}% \expandafter\MT@map@tlist@ \expandafter#1% \fi } \def\MT@tlist@break#1\@nnil{\fi} \newif\ifMT@inlist@ \def\MT@in@clist#1#2{% \def\MT@res@a##1,#1,##2##3\@nnil{% \ifx##2\@empty \MT@inlist@false \else \MT@inlist@true \fi }% \expandafter\MT@res@a\expandafter,#2,#1,\@empty\@nnil } \def\MT@rem@from@clist#1#2{% \def\MT@res@a##1,#1,##2\MT@res@a{##1,##2\MT@res@b}% \def\MT@res@b##1,\MT@res@b##2\MT@res@b{\ifx,##1\@empty\else##1\fi}% \xdef#2{\MT@exp@two@c\MT@res@b\MT@res@a\expandafter,#2,\MT@res@b,#1,\MT@res@a}% } \def\MT@in@tlist#1#2{% \MT@inlist@false \def\MT@res@a{#1}% \MT@map@tlist@c#2\MT@in@tlist@ } \def\MT@in@tlist@#1{% \edef\MT@res@b{#1}% \ifx\MT@res@a\MT@res@b \MT@inlist@true \expandafter\MT@tlist@break \fi } \def\MT@in@rlist#1{% \MT@inlist@false \MT@map@tlist@c#1\MT@in@rlist@ } \def\MT@in@rlist@#1{\expandafter\MT@in@rlist@@#1} \def\MT@in@rlist@@#1#2#3{% \MT@ifdim{#2}=\m@ne{% \MT@ifdim{#1}=\MT@size \MT@inlist@true \relax }{% \MT@ifdim\MT@size<{#1}\relax{% \MT@ifdim\MT@size<{#2}% \MT@inlist@true \relax }% }% \ifMT@inlist@ \def\MT@size@name{#3}% \expandafter\MT@tlist@break \fi } \def\MT@loop#1\MT@repeat{% \def\MT@iterate{#1\relax\expandafter\MT@iterate\fi}% \MT@iterate \let\MT@iterate\relax } \let\MT@repeat\fi \def\MT@while@num#1#2#3{% \@tempcnta#1\relax \MT@loop #3% \advance\@tempcnta \@ne \ifnum\@tempcnta < #2\MT@repeat } \def\MT@do@font{\MT@while@num\z@\@cclvi} \newcount\MT@count \def\MT@increment#1{% ^^X \edef#1{\number\numexpr #1 + 1\relax}% ^^Q \MT@count=#1\relax ^^Q \advance\MT@count \@ne ^^Q \edef#1{\number\MT@count}% } \def\MT@scale#1#2#3{% ^^Q \multiply #1 #2\relax \ifnum #3 = \z@ ^^X #1=\numexpr #1 * #2\relax \else ^^X #1=\numexpr #1 * #2 / #3\relax ^^Q \divide #1 #3\relax \fi } \def\MT@abbr@pr{protrusion} \def\MT@abbr@ex{expansion} \def\MT@abbr@pr@c{protrusion codes} \def\MT@abbr@ex@c{expansion codes} \def\MT@abbr@pr@inh{protrusion inheritance} \def\MT@abbr@ex@inh{expansion inheritance} \def\MT@abbr@nl{noligatures} \def\MT@abbr@sp{spacing} \def\MT@abbr@sp@c{interword spacing codes} \def\MT@abbr@sp@inh{interword spacing inheritance} \def\MT@abbr@kn{kerning} \def\MT@abbr@kn@c{kerning codes} \def\MT@abbr@kn@inh{kerning inheritance} \def\MT@abbr@tr{tracking} \def\MT@abbr@tr@c{tracking amount} \def\MT@rbba@protrusion{pr} \def\MT@rbba@expansion{ex} \def\MT@rbba@spacing{sp} \def\MT@rbba@kerning{kn} \def\MT@rbba@tracking{tr} \def\MT@features{pr,ex,sp,kn,tr} \def\MT@features@long{protrusion,expansion,spacing,kerning,tracking} \def\MT@is@feature#1{% \MT@exp@one@n\MT@in@clist\@tempa\MT@features@long \ifMT@inlist@ \expandafter\@firstofone \else \MT@error{`\@tempa' is not an available micro-typographic\MessageBreak feature. Ignoring #1}{Available features are: `\MT@features@long'.}% \expandafter\@gobble \fi } \@ifl@aded{tex}{wordcount}{% \MT@warning@nl{Detected the `wordcount' utility.\MessageBreak Disabling `\MT@MT', since it wouldn't work}% \MT@clear@options\MT@restore@catcodes\endinput}\relax \let\MT@setup@\@empty \def\MT@addto@setup{\g@addto@macro\MT@setup@} \AtBeginDocument{\MT@setup@ \MT@glet\MT@setup@\@empty} \def\MT@with@package@T#1{\@ifpackageloaded{#1}\@firstofone\@gobble} \def\MT@with@babel@and@T#1{% \MT@ifdefined@n@T{opt@babel.\@pkgextension}{% \@expandtwoargs\MT@in@clist{#1} {\csname opt@babel.\@pkgextension\endcsname,\@classoptionslist}% \ifMT@inlist@\expandafter\@gobble\fi }\@gobble } \MT@let@nc{ver@letterspace.sty}\@empty \MT@requires@pdftex5{ \def\MT@ledmac@setup{% \ifMT@protrusion \MT@ifdefined@c@TF\l@dunhbox@line{% \MT@info@nl{Patching ledmac to enable character protrusion}% \newdimen\MT@led@kern \let\MT@led@unhbox@line\l@dunhbox@line \renewcommand*{\l@dunhbox@line}[1]{% \ifhbox##1% \MT@led@kern=\rightmarginkern##1% \kern\leftmarginkern##1% \MT@led@unhbox@line##1% \kern\MT@led@kern \fi }% }{% \MT@warning@nl{% Character protrusion in paragraphs with line\MessageBreak numbering will only work if you update ledmac}% }% \fi } }{ \def\MT@ledmac@setup{% \ifMT@protrusion \MT@warning@nl{% The pdftex version you are using does not allow\MessageBreak character protrusion in paragraphs with line\MessageBreak numbering by the `ledmac' package.\MessageBreak Upgrade pdftex to version 1.30 or later}% \fi } } \def\MT@restore@p@h{\chardef\%`\% \chardef\#`\# } \def\MT@setupfont@hook{% \MT@if@false \MT@with@babel@and@T{spanish} \MT@if@true \MT@with@babel@and@T{galician}\MT@if@true \MT@with@babel@and@T{mexican} \MT@if@true \ifMT@if@\MT@ifdefined@c@T\percentsign{\let\%\percentsign}\fi \MT@with@package@T{csquotes}{% \@ifpackagelater{csquotes}{2005/05/11}\@disablequotes\relax}% \MT@if@false \MT@with@package@T{hyperref}\MT@if@true \MT@with@package@T{tex4ht} \MT@if@true \ifMT@if@\MT@restore@p@h\fi } \MT@addto@setup{% \MT@with@package@T{pdfcprot}{% \MT@error{Detected the `pdfcprot' package!\MessageBreak `\MT@MT' and `pdfcprot' may not be used together}{% The `pdfcprot' package provides an interface to character protrusion.\MessageBreak So does the `\MT@MT' package. Using both packages at the same\MessageBreak time will almost certainly lead to undesired results. Have your choice!}% } \MT@with@package@T{ledmac}\MT@ledmac@setup \let\MT@setupfont@hook\@empty \MT@if@false \MT@with@babel@and@T{spanish} \MT@if@true \MT@with@babel@and@T{galician}\MT@if@true \MT@with@babel@and@T{mexican} \MT@if@true \ifMT@if@ \g@addto@macro\MT@setupfont@hook{% \MT@ifdefined@c@T\percentsign{\let\%\percentsign}}% \fi \MT@with@package@T{csquotes}{% \@ifpackagelater{csquotes}{2005/05/11}{% \g@addto@macro\MT@setupfont@hook\@disablequotes }{% \MT@warning@nl{% Should you receive warnings about unknown slot\MessageBreak numbers, try upgrading the `csquotes' package}% }% } \MT@if@false \MT@with@package@T{hyperref}{% \pdfstringdefDisableCommands{% \let\pickup@font\MT@orig@pickupfont \let\textmicrotypecontext\@secondoftwo \let\microtypecontext\@gobble \def\lsstyle{\pdfstringdefWarn\lsstyle}% \def\textls#1#{\pdfstringdefWarn\textls}% }% \MT@if@true } \MT@with@package@T{tex4ht}\MT@if@true \ifMT@if@\g@addto@macro\MT@setupfont@hook\MT@restore@p@h\fi \MT@with@package@T{listings}{% \g@addto@macro\MT@cfg@catcodes{% \MT@while@num{"30}{"3A}{\catcode\@tempcnta 12\relax}% \MT@while@num{"41}{"5B}{\catcode\@tempcnta 11\relax}% \MT@while@num{"61}{"7B}{\catcode\@tempcnta 11\relax}% }% \g@addto@macro\MT@setupfont@hook{% \catcode`\\\z@ \let\lst@ProcessLetter\@empty }% } \MT@with@package@T{soul}{% \soulregister\lsstyle 0% \soulregister\textls 1% } \MT@with@package@T{pinyin}{% \let\MT@orig@py@macron\py@macron \@ifpackagelater{pinyin}{2006/10/17}{% 4.7.0 \def\py@macron#1#2{% \let\pickup@font\MT@orig@pickupfont \MT@orig@py@macron{#1}{#2}% \let\pickup@font\MT@pickupfont}% }{% \def\py@macron#1{% \let\pickup@font\MT@orig@pickupfont \MT@orig@py@macron{#1}% \let\pickup@font\MT@pickupfont}% }% } } \expandafter\ifx\the\font\nullfont\normalfont\fi \def\MT@setupfont{\MT@setupfont@hook} \MT@requires@pdftex7 {\g@addto@macro\MT@setupfont\MT@copy@font}\relax \g@addto@macro\MT@setupfont{% \MT@exp@two@c\MT@split@name\string\MT@font/\@nil \MT@exp@one@n\MT@find@file\MT@family \ifx\MT@familyalias\@empty \else \MT@exp@one@n\MT@find@file\MT@familyalias\fi } \MT@requires@pdftex6 {\g@addto@macro\MT@setupfont\MT@tracking}\relax \g@addto@macro\MT@setupfont{% \MT@check@font \ifMT@inlist@ \else \MT@vinfo{Setting up font `\MT@@font'\on@line}% \MT@protrusion \MT@expansion } \MT@requires@pdftex6 {\g@addto@macro\MT@setupfont{\MT@spacing\MT@kerning}}\relax \MT@requires@pdftex5 {\g@addto@macro\MT@setupfont\MT@noligatures}\relax \g@addto@macro\MT@setupfont{% \MT@register@font \fi } \let\MT@copy@font\relax \MT@requires@pdftex7{ \def\MT@copy@font@{% \xdef\MT@font@copy{\csname\MT@@font/\MT@pr@context/\MT@ex@context\endcsname}% \expandafter\ifx\MT@font@copy\relax \edef\MT@font@orig{\csname\expandafter\string\font@name @orig\endcsname}% \expandafter\ifx\MT@font@orig\relax \MT@exp@two@c\MT@glet\MT@font@orig\font@name \else \MT@exp@two@c\let\font@name\MT@font@orig \fi \global\MT@exp@two@c\pdfcopyfont\MT@font@copy\font@name \MT@map@clist@c\MT@active@features{% \MT@exp@cs\ifx{MT@\@nameuse{MT@abbr@##1}}\relax\else \def\@tempa{##1}% \MT@exp@cs\MT@map@tlist@c{MT@##1@doc@contexts}\MT@rem@from@list \fi }% \fi \MT@exp@two@c\let\MT@font\MT@font@copy \let\font@name\MT@font@copy \aftergroup\let\aftergroup\font@name\aftergroup\MT@font@copy } \def\MT@rem@from@list#1{% \MT@exp@cs\ifx{MT@\@tempa @#1font@list}\relax\else \expandafter\MT@exp@one@n\expandafter\MT@rem@from@clist\expandafter \MT@font \csname MT@\@tempa @#1font@list\endcsname \fi } }\relax \def\MT@split@name#1/#2/#3/#4/#5/#6\@nil{% \def\MT@encoding{#1}% \def\MT@family {#2}% \def\MT@series {#3}% \def\MT@shape {#4}% \def\MT@size {#5}% \MT@ifdefined@n@TF{MT@\MT@family @alias}% {\MT@let@cn\MT@familyalias{MT@\MT@family @alias}}% {\let\MT@familyalias\@empty}% } \newif\ifMT@do \def\MT@maybe@do#1{% \csname ifMT@\csname MT@abbr@#1\endcsname\endcsname \MT@dotrue \edef\@tempa{\csname MT@#1@setname\endcsname}% \MT@map@clist@n{font,encoding,family,series,shape,size}{% \MT@ifdefined@n@TF{MT@checklist@##1}% {\csname MT@checklist@##1\endcsname}% {\MT@checklist@{##1}}% {#1}% }% \else \MT@dofalse \fi \ifMT@do \def\MT@feat{#1}% \csname MT@set@#1@codes\endcsname \else \MT@vinfo{... No \@nameuse{MT@abbr@#1}}% \fi } \def\MT@checklist@#1#2{% \MT@ifdefined@n@T {MT@#2list@#1@\@tempa}{% \expandafter\MT@exp@one@n\expandafter\MT@in@clist \csname MT@#1\expandafter\endcsname \csname MT@#2list@#1@\@tempa\endcsname \ifMT@inlist@ \MT@dotrue \else \MT@dofalse \expandafter\MT@clist@break \fi }% } \def\MT@checklist@family#1{% \MT@ifdefined@n@T {MT@#1list@family@\@tempa}{% \MT@exp@two@n\MT@in@clist \MT@family{\csname MT@#1list@family@\@tempa\endcsname}% \ifMT@inlist@ \MT@dotrue \else \MT@dofalse \ifx\MT@familyalias\@empty \else \MT@exp@two@n\MT@in@clist \MT@familyalias{\csname MT@#1list@family@\@tempa\endcsname}% \ifMT@inlist@ \MT@dotrue \fi \fi \fi \ifMT@do \else \expandafter\MT@clist@break \fi }% } \def\MT@checklist@size#1{% \MT@ifdefined@n@T {MT@#1list@size@\@tempa}{% \MT@exp@cs\MT@in@rlist{MT@#1list@size@\@tempa}% \ifMT@inlist@ \MT@dotrue \else \MT@dofalse \expandafter\MT@clist@break \fi }% } \def\MT@checklist@font#1{% \MT@ifdefined@n@T {MT@#1list@font@\@tempa}{% \edef\@tempb{\MT@encoding/\MT@family/\MT@series/\MT@shape/\MT@size}% \expandafter\MT@exp@one@n\expandafter\MT@in@clist\expandafter \@tempb \csname MT@#1list@font@\@tempa\endcsname \ifMT@inlist@ \expandafter\MT@clist@break \else \MT@dofalse \fi }% } \def\MT@protrusion{\MT@maybe@do{pr}} \def\MT@set@pr@codes{% \MT@if@list@exists{% \MT@get@font@dimen@six \MT@get@opt \MT@reset@pr@codes \MT@get@inh@list \MT@set@inputenc{c}% \MT@load@list\MT@pr@c@name \MT@set@listname \MT@let@cn\@tempc{MT@pr@c@\MT@pr@c@name}% \expandafter\MT@set@codes\@tempc,\relax,% }\MT@reset@pr@codes } \def\MT@gobble@settings#1\@tempc,\relax,{} \def\MT@get@font@dimen@six{% \ifnum\fontdimen6\MT@font=\z@ \MT@warning@nl{% Font `\MT@@font' does not specify its\MessageBreak \@backslashchar fontdimen 6 (width of an `em')! Therefore,\MessageBreak \@nameuse{MT@abbr@\MT@feat} will not work with this font}% \expandafter\MT@gobble@settings \else \edef\MT@dimen@six{\number\fontdimen6\MT@font}% \fi } \def\MT@set@all@pr#1#2{% \let\MT@temp\@empty \MT@ifempty{#1}\relax{\g@addto@macro\MT@temp{\lpcode\MT@font\@tempcnta=#1\relax}}% \MT@ifempty{#2}\relax{\g@addto@macro\MT@temp{\rpcode\MT@font\@tempcnta=#2\relax}}% \MT@do@font\MT@temp } \def\MT@reset@pr@codes@{\MT@set@all@pr\z@\z@} \let\MT@reset@pr@codes\relax \def\MT@the@pr@code{\@tempcntb} \MT@requires@pdftex6{ \def\MT@the@pr@code@tr{% \numexpr\@tempcntb+\MT@letterspace@/2\relax } }\relax \def\MT@set@codes#1,{% \ifx\relax#1\@empty\else \MT@split@codes #1==\relax \expandafter\MT@set@codes \fi } \def\MT@split@codes#1=#2=#3\relax{% \def\@tempa{#1}% \ifx\@tempa\@empty \else \MT@get@slot \ifnum\MT@char > \m@ne \MT@get@char@unit \csname MT@\MT@feat @split@val\endcsname#2\relax \fi \fi } \def\MT@pr@split@val#1,#2\relax{% \def\@tempb{#1}% \MT@ifempty\@tempb\relax{% \MT@scale@to@em \lpcode\MT@font\MT@char=\MT@the@pr@code }% \def\@tempb{#2}% \MT@ifempty\@tempb\relax{% \MT@scale@to@em \rpcode\MT@font\MT@char=\MT@the@pr@code }% \MT@ifdefined@c@T\MT@pr@inh@name{% \MT@ifdefined@n@T{MT@inh@\MT@pr@inh@name @\MT@char @}{% \MT@exp@cs\MT@map@tlist@c {MT@inh@\MT@pr@inh@name @\MT@char @}% \MT@set@pr@heirs }% }% } \MT@requires@pdftex3{ \def\MT@scale@to@em{% \@tempcntb=\MT@count\relax \MT@scale\@tempcntb \@tempb \MT@dimen@six \ifnum\@tempcntb=\z@ \else \MT@scale@factor \fi } \def\MT@get@charwd{% ^^X \MT@count=\fontcharwd\MT@font\MT@char\relax ^^Q \setbox\z@=\hbox{\MT@font \char\MT@char}% ^^Q \MT@count=\wd\z@ \ifnum\MT@count=\z@ \MT@info@missing@char \fi } \MT@requires@pdftex6{ \g@addto@macro\MT@get@charwd{% \MT@ifdefined@c@T\MT@letterspace@ {\advance\MT@count -\dimexpr\MT@letterspace@ sp *\dimexpr 1em/1000\relax}% } }\relax }{ \def\MT@scale@to@em{% \MT@count=\@tempb\relax \ifnum\MT@count=\z@ \else \MT@scale@factor \fi } \def\MT@get@charwd{\MT@count=\MT@dimen@six} } \def\MT@get@font@dimen#1{% \ifnum\fontdimen#1\MT@font=\z@ \MT@warning@nl{Font `\MT@@font' does not specify its\MessageBreak \@backslashchar fontdimen #1 (it's zero)!\MessageBreak You should use a different `unit' for \MT@curr@list@name}% \else \MT@count=\fontdimen#1\MT@font \fi } \def\MT@info@missing@char{% \MT@info@nl{Character `\the\MT@toks' ^^X \iffontchar\MT@font\MT@char has a width of 0pt ^^X \else is missing\fi ^^Q \MessageBreak (it's probably missing) \MessageBreak in font `\MT@@font'.\MessageBreak Ignoring protrusion settings for this character}% } \def\MT@scale@factor{% \ifnum\csname MT@\MT@feat @factor@\endcsname=\@m \else \expandafter\MT@scale\expandafter \@tempcntb \csname MT@\MT@feat @factor@\endcsname \@m \fi \ifnum\@tempcntb>\csname MT@\MT@feat @max\endcsname\relax \MT@exp@cs\MT@warn@code@too@large{MT@\MT@feat @max}% \else \ifnum\@tempcntb<\csname MT@\MT@feat @min\endcsname\relax \MT@exp@cs\MT@warn@code@too@large{MT@\MT@feat @min}% \fi \fi } \def\MT@warn@code@too@large#1{% \@tempcnta=#1\relax \ifnum\csname MT@\MT@feat @factor@\endcsname=\@m \else \expandafter\MT@scale\expandafter\@tempcnta\expandafter \@m \csname MT@\MT@feat @factor@\endcsname \fi \MT@scale\@tempcnta \MT@dimen@six \MT@count \MT@warning@nl{The \@nameuse{MT@abbr@\MT@feat} code \@tempb\space is too large for character\MessageBreak `\the\MT@toks' in \MT@curr@list@name.\MessageBreak Setting it to the maximum of \number\@tempcnta}% \@tempcntb=#1\relax } \def\MT@get@opt{% \MT@set@listname \MT@ifdefined@n@TF{MT@\MT@feat @c@\csname MT@\MT@feat @c@name\endcsname @factor}{% \MT@let@nn{MT@\MT@feat @factor@} {MT@\MT@feat @c@\csname MT@\MT@feat @c@name\endcsname @factor}% \MT@vinfo{... : Multiplying \@nameuse{MT@abbr@\MT@feat} codes by \number\csname MT@\MT@feat @factor@\endcsname/1000}% }{% \MT@let@nn{MT@\MT@feat @factor@}{MT@\MT@feat @factor}% }% \MT@ifdefined@n@TF{MT@\MT@feat @c@\csname MT@\MT@feat @c@name\endcsname @unit}{% \MT@let@nn{MT@\MT@feat @unit@}% {MT@\MT@feat @c@\csname MT@\MT@feat @c@name\endcsname @unit}% \MT@exp@cs\ifx{MT@\MT@feat @unit@}\@empty \MT@vinfo{... : Setting \@nameuse{MT@abbr@\MT@feat} codes relative to character widths}% \else \MT@exp@cs\ifx{MT@\MT@feat @unit@}\m@ne \MT@vinfo{... : Setting \@nameuse{MT@abbr@\MT@feat} codes relative to width of space}% \fi \fi }{% \MT@let@nn{MT@\MT@feat @unit@}{MT@\MT@feat @unit}% }% \let\MT@get@char@unit\relax \let\MT@get@space@unit\@gobble \MT@exp@cs\ifx{MT@\MT@feat @unit@}\@empty \let\MT@get@char@unit\MT@get@charwd \else \MT@exp@cs\ifx{MT@\MT@feat @unit@}\m@ne \let\MT@get@space@unit\MT@get@font@dimen \else \MT@exp@cs\MT@get@unit{MT@\MT@feat @unit@}% \fi \fi \MT@ifdefined@n@T{MT@\MT@feat @c@\csname MT@\MT@feat @c@name\endcsname @preset}{% \csname MT@preset@\MT@feat\endcsname \MT@let@nc{MT@reset@\MT@feat @codes}\relax }% } \def\MT@get@unit#1{% \expandafter\MT@get@unit@#1 e!\@nil \ifx\x\@empty\else\let#1\x\fi \@defaultunits\@tempdima#1 pt\relax\@nnil \ifdim\@tempdima=\z@ \MT@warning@nl{% Cannot set \@nameuse{MT@abbr@\MT@feat} factors relative to zero\MessageBreak width. Setting factors of list `\@nameuse{MT@\MT@feat @c@name}'\MessageBreak relative to character widths instead}% \let#1\@empty \let\MT@get@char@unit\MT@get@charwd \else \MT@vinfo{... : Setting \@nameuse{MT@abbr@\MT@feat} factors relative to \the\@tempdima}% \MT@count=\@tempdima\relax \fi } \def\MT@get@unit@#1e#2#3\@nil{% \ifx\\#3\\\let\x\@empty \else \if m#2% \edef\x{#1\fontdimen6\MT@font}% \else \if x#2% \edef\x{#1\fontdimen5\MT@font}% \fi \fi \fi } \def\MT@set@inputenc#1{% \def\MT@cat{#1}% \edef\@tempa{MT@\MT@feat @#1@\csname MT@\MT@feat @#1@name\endcsname @inputenc}% \MT@ifdefined@n@T\@tempa\MT@set@inputenc@ } \MT@addto@setup{% \@ifpackageloaded{inputenc}{ \@ifpackagelater{inputenc}{2006/02/22}{ \def\MT@set@inputenc@{% \MT@ifstreq\inputencodingname{\csname\@tempa\endcsname}\relax \MT@load@inputenc } }{ \let\MT@set@inputenc@\MT@load@inputenc } }{ \def\MT@set@inputenc@{% \MT@warning@nl{Key `inputenc' used in \MT@curr@list@name, but the `inputenc' \MessageBreak package isn't loaded. Ignoring input encoding}% } } } \def\MT@load@inputenc{% \MT@cfg@catcodes \inputencoding{\@nameuse{\@tempa}}% } \def\MT@set@pr@heirs#1{% \lpcode\MT@font#1=\lpcode\MT@font\MT@char \rpcode\MT@font#1=\rpcode\MT@font\MT@char } \def\MT@preset@pr{% \expandafter\expandafter\expandafter\MT@preset@pr@ \csname MT@pr@c@\MT@pr@c@name @preset\endcsname\@nil } \def\MT@preset@pr@#1,#2\@nil{% \ifx\MT@pr@unit@\@empty \MT@warn@preset@towidth{pr}% \let\MT@preset@aux\MT@preset@aux@factor \else \def\MT@preset@aux{\MT@preset@aux@space2}% \fi \MT@ifempty{#1}{\let\@tempa\@empty}{\MT@preset@aux{#1}\@tempa}% \MT@ifempty{#2}{\let\@tempb\@empty}{\MT@preset@aux{#2}\@tempb}% \MT@set@all@pr\@tempa\@tempb } \def\MT@preset@aux@factor#1#2{% \@tempcntb=#1\relax \MT@scale@factor \edef#2{\number\@tempcntb}% } \def\MT@preset@aux@space#1#2#3{% \def\@tempb{#2}% \MT@get@space@unit#1% \MT@scale@to@em \edef#3{\number\@tempcntb}% } \def\MT@warn@preset@towidth#1{% \MT@warning@nl{% Cannot preset characters relative to their widths\MessageBreak for \@nameuse{MT@abbr@#1} list `\@nameuse{MT@#1@c@name}'. Presetting them% \MessageBreak relative to 1em instead}% } \def\MT@expansion{\MT@maybe@do{ex}} \def\MT@set@ex@codes@s{% \MT@if@list@exists{% \MT@get@ex@opt \let\MT@get@char@unit\relax \MT@reset@ef@codes \MT@get@inh@list \MT@set@inputenc{c}% \MT@load@list\MT@ex@c@name \MT@set@listname \MT@let@cn\@tempc{MT@ex@c@\MT@ex@c@name}% \expandafter\MT@set@codes\@tempc,\relax,% \MT@expandfont }\relax } \newif\ifMT@nonselected \def\MT@set@ex@codes@n{% \MT@nonselectedtrue \MT@if@list@exists \MT@get@ex@opt {% \let\MT@stretch@ \MT@stretch \let\MT@shrink@ \MT@shrink \let\MT@step@ \MT@step \let\MT@auto@ \MT@auto \let\MT@ex@factor@\MT@ex@factor }% \MT@reset@ef@codes \MT@expandfont \MT@nonselectedfalse } \let\MT@set@ex@codes\MT@set@ex@codes@n \def\MT@expandfont{% \pdffontexpand\MT@font \MT@stretch@ \MT@shrink@ \MT@step@ \MT@auto@\relax } \def\MT@set@all@ex#1{% \MT@do@font{\efcode\MT@font\@tempcnta=#1\relax}% } \def\MT@reset@ef@codes@{\MT@set@all@ex\MT@ex@factor@} \MT@requires@pdftex4{ \def\MT@reset@ef@codes{% \ifnum\MT@ex@factor@=\@m \else \MT@reset@ef@codes@ \fi } }{ \let\MT@reset@ef@codes\MT@reset@ef@codes@ } \def\MT@ex@split@val#1\relax{% \@tempcntb=#1\relax \ifnum\MT@ex@factor@=\@m \else \MT@scale\@tempcntb \MT@ex@factor@ \@m \fi \ifnum\@tempcntb > \MT@ex@max \MT@warn@ex@too@large\MT@ex@max \else \ifnum\@tempcntb < \MT@ex@min \MT@warn@ex@too@large\MT@ex@min \fi \fi \efcode\MT@font\MT@char=\@tempcntb \MT@ifdefined@c@T\MT@ex@inh@name{% \MT@ifdefined@n@T{MT@inh@\MT@ex@inh@name @\MT@char @}{% \MT@exp@cs\MT@map@tlist@c{MT@inh@\MT@ex@inh@name @\MT@char @}\MT@set@ex@heirs }% }% } \def\MT@warn@ex@too@large#1{% \MT@warning@nl{Expansion factor \number\@tempcntb\space too large for character\MessageBreak `\the\MT@toks' in \MT@curr@list@name.\MessageBreak Setting it to the maximum of \number#1}% \@tempcntb=#1\relax } \def\MT@get@ex@opt{% \MT@set@listname \MT@ifdefined@n@TF{MT@ex@c@\MT@ex@c@name @factor}{% \MT@let@cn\MT@ex@factor@{MT@ex@c@\MT@ex@c@name @factor}% \MT@vinfo{... : Multiplying expansion factors by \number\MT@ex@factor@/1000}% }{% \let\MT@ex@factor@\MT@ex@factor }% \MT@get@ex@opt@{stretch}{Setting stretch limit to \number\MT@stretch@}% \MT@get@ex@opt@{shrink} {Setting shrink limit to \number\MT@shrink@}% \MT@get@ex@opt@{step} {Setting expansion step to \number\MT@step@}% \def\@tempa{autoexpand}% \MT@get@ex@opt@{auto}{\ifx\@tempa\MT@auto@ En\else Dis\fi abling automatic expansion}% \MT@ifdefined@n@T{MT@ex@c@\MT@ex@c@name @preset}{% \MT@preset@ex \let\MT@reset@ef@codes\relax }% } \def\MT@get@ex@opt@#1#2{% \MT@ifdefined@n@TF{MT@ex@c@\MT@ex@c@name @#1}{% \MT@let@nn{MT@#1@}{MT@ex@c@\MT@ex@c@name @#1}% \MT@vinfo{... : #2}% }{% \MT@let@nn{MT@#1@}{MT@#1}% }% } \def\MT@set@ex@heirs#1{% \efcode\MT@font#1=\efcode\MT@font\MT@char } \def\MT@preset@ex{% \@tempcntb=\csname MT@ex@c@\MT@ex@c@name @preset\endcsname\relax \MT@scale@factor \MT@set@all@ex\@tempcntb } \MT@requires@pdftex6{ \def\MT@spacing{\MT@maybe@do{sp}} \def\MT@set@sp@codes{% \MT@if@list@exists{% \MT@get@font@dimen@six \MT@get@opt \MT@reset@sp@codes \MT@get@inh@list \MT@set@inputenc{c}% \MT@load@list\MT@sp@c@name \MT@set@listname \MT@let@cn\@tempc{MT@sp@c@\MT@sp@c@name}% \expandafter\MT@set@codes\@tempc,\relax,% }\MT@reset@sp@codes } \def\MT@sp@split@val#1,#2,#3\relax{% \def\@tempb{#1}% \MT@ifempty\@tempb\relax{% \MT@get@space@unit2% \MT@scale@to@em \knbscode\MT@font\MT@char=\@tempcntb }% \def\@tempb{#2}% \MT@ifempty\@tempb\relax{% \MT@get@space@unit3% \MT@scale@to@em \stbscode\MT@font\MT@char=\@tempcntb }% \def\@tempb{#3}% \MT@ifempty\@tempb\relax{% \MT@get@space@unit4% \MT@scale@to@em \shbscode\MT@font\MT@char=\@tempcntb }% \MT@ifdefined@c@T\MT@sp@inh@name{% \MT@ifdefined@n@T{MT@inh@\MT@sp@inh@name @\MT@char @}{% \MT@exp@cs\MT@map@tlist@c{MT@inh@\MT@sp@inh@name @\MT@char @}\MT@set@sp@heirs }% }% } \def\MT@set@sp@heirs#1{% \knbscode\MT@font#1=\knbscode\MT@font\MT@char \stbscode\MT@font#1=\stbscode\MT@font\MT@char \shbscode\MT@font#1=\shbscode\MT@font\MT@char } \def\MT@set@all@sp#1#2#3{% \let\MT@temp\@empty \MT@ifempty{#1}\relax{\g@addto@macro\MT@temp{\knbscode\MT@font\@tempcnta=#1\relax}}% \MT@ifempty{#2}\relax{\g@addto@macro\MT@temp{\stbscode\MT@font\@tempcnta=#2\relax}}% \MT@ifempty{#3}\relax{\g@addto@macro\MT@temp{\shbscode\MT@font\@tempcnta=#3\relax}}% \MT@do@font\MT@temp } \def\MT@reset@sp@codes@{\MT@set@all@sp\z@\z@\z@} \let\MT@reset@sp@codes\relax \def\MT@preset@sp{% \expandafter\expandafter\expandafter\MT@preset@sp@ \csname MT@sp@c@\MT@sp@c@name @preset\endcsname\@nil } \def\MT@preset@sp@#1,#2,#3\@nil{% \ifx\MT@sp@unit@\@empty \MT@warn@preset@towidth{sp}% \MT@ifempty{#1}{\let\@tempa\@empty}{\MT@preset@aux@factor{#1}\@tempa}% \MT@ifempty{#2}{\let\@tempc\@empty}{\MT@preset@aux@factor{#2}\@tempc}% \MT@ifempty{#3}{\let\@tempb\@empty}{\MT@preset@aux@factor{#3}\@tempb}% \else \MT@ifempty{#1}{\let\@tempa\@empty}{\MT@preset@aux@space2{#1}\@tempa}% \MT@ifempty{#2}{\let\@tempc\@empty}{\MT@preset@aux@space3{#2}\@tempc}% \MT@ifempty{#3}{\let\@tempb\@empty}{\MT@preset@aux@space4{#3}\@tempb}% \fi \MT@set@all@sp\@tempa\@tempc\@tempb } }\relax \MT@requires@pdftex6{ \def\MT@kerning{\MT@maybe@do{kn}} \def\MT@set@kn@codes{% \MT@if@list@exists{% \MT@get@font@dimen@six \MT@get@opt \MT@reset@kn@codes \MT@get@inh@list \MT@set@inputenc{c}% \MT@load@list\MT@kn@c@name \MT@set@listname \MT@let@cn\@tempc{MT@kn@c@\MT@kn@c@name}% \expandafter\MT@set@codes\@tempc,\relax,% }\MT@reset@kn@codes } \def\MT@kn@split@val#1,#2\relax{% \def\@tempb{#1}% \MT@ifempty\@tempb\relax{% \MT@get@space@unit2% \MT@scale@to@em \knbccode\MT@font\MT@char=\@tempcntb }% \def\@tempb{#2}% \MT@ifempty\@tempb\relax{% \MT@get@space@unit2% \MT@scale@to@em \knaccode\MT@font\MT@char=\@tempcntb }% \MT@ifdefined@c@T\MT@kn@inh@name{% \MT@ifdefined@n@T{MT@inh@\MT@kn@inh@name @\MT@char @}{% \MT@exp@cs\MT@map@tlist@c{MT@inh@\MT@kn@inh@name @\MT@char @}\MT@set@kn@heirs }% }% } \def\MT@set@kn@heirs#1{% \knbccode\MT@font#1=\knbccode\MT@font\MT@char \knaccode\MT@font#1=\knaccode\MT@font\MT@char } \def\MT@set@all@kn#1#2{% \let\MT@temp\@empty \MT@ifempty{#1}\relax{\g@addto@macro\MT@temp{\knbccode\MT@font\@tempcnta=#1\relax}}% \MT@ifempty{#2}\relax{\g@addto@macro\MT@temp{\knaccode\MT@font\@tempcnta=#2\relax}}% \MT@do@font\MT@temp } \def\MT@reset@kn@codes@{\MT@set@all@kn\z@\z@} \let\MT@reset@kn@codes\relax \def\MT@preset@kn{% \expandafter\expandafter\expandafter\MT@preset@kn@ \csname MT@kn@c@\MT@kn@c@name @preset\endcsname\@nil } \def\MT@preset@kn@#1,#2\@nil{% \ifx\MT@kn@unit@\@empty \MT@warn@preset@towidth{kn}% \let\MT@preset@aux\MT@preset@aux@factor \else \def\MT@preset@aux{\MT@preset@aux@space2}% \fi \MT@ifempty{#1}{\let\@tempa\@empty}{\MT@preset@aux{#1}\@tempa}% \MT@ifempty{#2}{\let\@tempb\@empty}{\MT@preset@aux{#2}\@tempb}% \MT@set@all@kn\@tempa\@tempb } }\relax \MT@requires@pdftex6{ \let\MT@tr@font@list\@empty \def\MT@tracking@{% \MT@exp@one@n\MT@in@clist\MT@font\MT@tr@font@list \ifMT@inlist@\else \MT@maybe@do{tr}% \ifMT@do\else \xdef\MT@tr@font@list{\MT@tr@font@list\MT@font,}% \fi \fi } \let\MT@tracking \MT@tracking@ \def\MT@set@tr@codes{% \MT@vinfo{Tracking font `\MT@@font'\on@line}% \MT@get@font@dimen@six \MT@if@list@exists \MT@get@tr@opt \relax \MT@ifdefined@c@TF\MT@letterspace@\relax{\let\MT@letterspace@\MT@letterspace}% \ifnum\MT@letterspace@=\z@\else \MT@vinfo{... Tracking by \number\MT@letterspace@}% \MT@warn@tracking@DVI \xdef\MT@lsfont{\csname\expandafter\string\font@name /\number\MT@letterspace@ ls\endcsname}% \expandafter\ifx\MT@lsfont\relax \MT@get@ls@basefont \global\expandafter\letterspacefont\MT@lsfont\font@name\MT@letterspace@ \MT@ifdefined@c@TF\MT@tr@ispace {\let\@tempa\MT@tr@ispace}% {\edef\@tempa{\MT@letterspace@*,,}}% \MT@ifdefined@c@TF\MT@tr@ospace {\edef\@tempa{\@tempa,\MT@tr@ospace}}% {\edef\@tempa{\@tempa,,,}}% \expandafter\MT@tr@set@space\@tempa,% \MT@ifdefined@c@TF\MT@tr@okern{\let\@tempa\MT@tr@okern}{\def\@tempa{*,*}}% \expandafter\MT@tr@set@okern\@tempa,% \MT@ifdefined@c@T\MT@tr@ligatures\MT@tr@noligatures \MT@do@font{\lpcode\MT@lsfont\@tempcnta=\numexpr\MT@letterspace@/2\relax \rpcode\MT@lsfont\@tempcnta=\numexpr\MT@letterspace@/2\relax}% \let\MT@the@pr@code\MT@the@pr@code@tr \fi \aftergroup\MT@set@lsfont \let\MT@font\MT@lsfont \xdef\MT@set@curr@ls{\def\noexpand\MT@curr@ls{\MT@letterspace@}}% \aftergroup\MT@set@curr@ls \MT@outer@space=\csname MT@outer@space\expandafter\string\font@name\endcsname\relax \xdef\MT@set@curr@os{\MT@outer@space=\the\MT@outer@space\relax}% \aftergroup\aftergroup\aftergroup\MT@set@curr@os \MT@tr@outer@l \ifx\MT@ls@adjust\@empty \MT@outer@kern=-\dimexpr\MT@letterspace@ sp * \fontdimen6\font@name/2000\relax \MT@ls@outer@k \else \MT@outer@kern=\expandafter\expandafter\expandafter\@firstoftwo \csname MT@outer@kern\expandafter\string\font@name\endcsname\relax \ifdim\MT@outer@kern=\z@\else \MT@ls@outer@k \fi \MT@outer@kern=\expandafter\expandafter\expandafter\@secondoftwo \csname MT@outer@kern\expandafter\string\font@name\endcsname\relax \fi \xdef\MT@set@curr@ok{\MT@outer@kern=\the\MT@outer@kern\relax}% \aftergroup\aftergroup\aftergroup\MT@set@curr@ok \aftergroup\aftergroup\aftergroup\MT@tr@outer@r \fi } \def\MT@get@tr@opt{% \MT@set@listname \MT@ifdefined@n@T{MT@tr@c@\MT@tr@c@name}{% \MT@let@cn\MT@letterspace{MT@tr@c@\MT@tr@c@name}% \MT@ifdefined@n@T{MT@tr@c@\MT@tr@c@name @unit}{% \MT@let@cn\MT@tr@unit@{MT@tr@c@\MT@tr@c@name @unit}% \ifdim\MT@tr@unit@=1em \let\MT@tr@unit@\@undefined \else \MT@let@cn\@tempb{MT@tr@c@\MT@tr@c@name}% \MT@get@unit\MT@tr@unit@ \let\MT@tr@factor@\@m \MT@scale@to@em \edef\MT@letterspace{\number\@tempcntb}% \fi }% }% \MT@get@tr@opt@{spacing} {ispace}% \MT@get@tr@opt@{outerspacing}{ospace}% \MT@get@tr@opt@{outerkerning}{okern}% \MT@get@tr@opt@{noligatures} {ligatures}% } \def\MT@get@tr@opt@#1#2{% \MT@ifdefined@n@T{MT@tr@c@\MT@tr@c@name @#1}% {\MT@let@nn{MT@tr@#2}{MT@tr@c@\MT@tr@c@name @#1}}% } \def\MT@set@lsfont{\MT@exp@two@c\let\font@name\MT@lsfont} \DeclareRobustCommand\lsstyle{% \def\MT@feat{tr}% \let\MT@tracking\MT@set@tr@codes \selectfont } \DeclareRobustCommand\lslig[1]{% {\MT@ifdefined@c@TF\MT@curr@ls{% \escapechar\m@ne \MT@get@ls@basefont \MT@outer@kern=\dimexpr\MT@curr@ls sp * \fontdimen6\font@name/2000\relax \kern\MT@outer@kern \font@name #1% \kern\MT@outer@kern% }{#1}}% } \def\MT@get@ls@basefont{% \edef\MT@ls@basefont{\csname\expandafter\string\font@name @base\endcsname}% \expandafter\ifx\MT@ls@basefont\relax \MT@exp@two@c\MT@glet\MT@ls@basefont\font@name \else \MT@exp@two@c\let\font@name\MT@ls@basefont \fi } \MT@requires@pdftex7{ \def\MT@tr@noligatures{% \ifx\MT@tr@ligatures\@empty \MT@noligatures@\MT@lsfont\@undefined \else \MT@noligatures@\MT@lsfont\MT@tr@ligatures \fi } }{ \def\MT@tr@noligatures{% \MT@warning@nl{% Disabling selected ligatures is only possible since\MessageBreak pdftex 1.40.4. Disabling all ligatures instead}% \MT@glet\MT@tr@noligatures\relax } } \newskip\MT@outer@space \def\MT@tr@set@space#1,#2,#3,#4,#5,#6,{% \let\MT@temp\@empty \MT@tr@set@space@{#1}{#4}{2}\@empty \MT@tr@set@space@{#2}{#5}{3}\@plus \MT@tr@set@space@{#3}{#6}{4}\@minus \MT@glet@nc{MT@outer@space\expandafter\string\font@name}\MT@temp } \def\MT@tr@set@space@#1#2#3#4{% \MT@ifempty{#2}{% \MT@ifempty{#1}{% \edef\MT@temp{\MT@temp#4\the\fontdimen#3\MT@lsfont}% }{% \MT@tr@set@space@@{#1}{#3}{1000}% \edef\MT@temp{\MT@temp#4\the\@tempdima}% \fontdimen#3\MT@lsfont=\@tempdima }% }{% \MT@tr@set@space@@{#2}{#3}{2000}% \edef\MT@temp{\MT@temp#4\the\@tempdima}% \MT@ifempty{#1}\relax{% \MT@tr@set@space@@{#1}{#3}{1000}% \fontdimen#3\MT@lsfont=\@tempdima }% }% } \def\MT@tr@set@space@@#1#2#3{% \MT@test@ast#1*\@nil{% \MT@ifdefined@c@TF\MT@tr@unit@ {\edef\@tempb{#1}\MT@scale@to@em} {\@tempcntb=#1\relax}% \@tempdima=\dimexpr \dimexpr\@tempcntb sp*\MT@dimen@six/1000\relax -\fontdimen#2\MT@lsfont\relax \ifnum#2=\tw@ \advance\@tempdima -\dimexpr\MT@letterspace@ sp*\MT@dimen@six/#3\relax \fi \@tempdima=\dimexpr \fontdimen#2\MT@lsfont+\@tempdima\relax }{% \MT@ifempty\@tempa{\let\@tempa\MT@letterspace@}\relax \@tempdima=\dimexpr \numexpr1000+\@tempa sp *\fontdimen#2\MT@lsfont/1000\relax }% } \def\MT@tr@outer@l{% \ifhmode \ifdim\lastskip>5sp \edef\x{\the\lastskip minus 0pt}% \setbox\z@\hbox{\MT@outer@space=\x}% \ifdim\wd\z@>\z@ \unskip \hskip\MT@outer@space\relax \let\MT@ls@outer@k\relax \else \ifdim\lastskip=% \ifnum\spacefactor<2000 \spaceskip \else \ifdim\xspaceskip=\z@ \dimexpr\spaceskip+\fontdimen7\font@name\relax \else \xspaceskip \fi \fi \unskip \hskip\MT@outer@space\relax \let\MT@ls@outer@k\relax \fi \fi \fi \fi } \def\MT@tr@outer@r{% \futurelet\MT@tr@outer@next\MT@tr@outer@r@ } \def\MT@tr@outer@r@{% \def\MT@temp*##1{\ifhmode\hskip\MT@outer@space \fi}% \ifcat\egroup\noexpand\MT@tr@outer@next \unkern\egroup \MT@set@curr@ok \MT@set@curr@os \def\MT@temp*{\afterassignment\MT@tr@outer@r\let\x=}% \else \ifx\maybe@ic\MT@tr@outer@next \def\MT@temp*{\afterassignment\MT@tr@outer@icr\let\x=}% \else \ifx\check@icr\MT@tr@outer@next \def\MT@temp*{\aftergroup\MT@tr@outer@r\check@icr\let\x=}% \else \ifx\@sptoken\MT@tr@outer@next \def\MT@temp* {\ifhmode\hskip\MT@outer@space \fi}% \else \ifx~\MT@tr@outer@next \def\MT@temp*~{\nobreak\hskip\MT@outer@space }% \else \ifx\ \MT@tr@outer@next \else \ifx\space\MT@tr@outer@next \else \ifx\@xobeysp\MT@tr@outer@next \else \def\MT@temp*{\ifdim\MT@outer@kern=\z@\else\MT@ls@outer@k\fi}% \let\MT@tr@outer@next\relax \fi\fi\fi\fi\fi\fi\fi\fi \MT@temp*% } \def\MT@tr@outer@icr{\afterassignment\MT@tr@outer@icr@\MT@tr@outer@r} \def\MT@tr@outer@icr@{% \let\@let@token= \MT@tr@outer@next \maybe@ic@ } }{ \DeclareRobustCommand\lsstyle{% \MT@error{Letterspacing only works with pdftex version 1.40\MessageBreak or newer}{Upgrade pdftex, or use the `soul' package instead.}% \MT@glet\lsstyle\relax } } \DeclareRobustCommand\textls{% \hmode@bgroup \@ifstar{\let\MT@ls@adjust\@empty\MT@textls}% {\let\MT@ls@adjust\relax \MT@textls}% } \newcommand\MT@textls[2][]{% \MT@ifempty{#1}% {\let\MT@letterspace@\@undefined}% {\KV@@sp@def\MT@letterspace@{#1}% \MT@ls@too@large\MT@letterspace@}% \lsstyle #2% \egroup } \def\MT@ls@too@large#1{% \ifnum#1>\MT@tr@max \MT@warning{Maximum for option `letterspace' is \number\MT@tr@max}% \let#1\MT@tr@max \else \ifnum#1<\MT@tr@min \MT@warning{Minimum for option `letterspace' is \number\MT@tr@min}% \let#1\MT@tr@min \fi \fi } \newdimen\MT@outer@kern \def\MT@tr@set@okern#1,#2,{% \let\MT@temp\@empty \MT@tr@set@okern@{#1}% \MT@tr@set@okern@{#2}% \MT@glet@nc{MT@outer@kern\expandafter\string\font@name}\MT@temp } \def\MT@tr@set@okern@#1{% \MT@test@ast#1*\@nil{% \MT@ifdefined@c@TF\MT@tr@unit@ {\edef\@tempb{#1}\MT@scale@to@em} {\@tempcntb=#1\relax}% \@tempdima=\dimexpr \@tempcntb sp * \MT@dimen@six/1000\relax }{% \MT@ifempty\@tempa{\let\@tempa\@m}\relax \@tempdima=\dimexpr \numexpr\@tempa*\MT@letterspace@/1000\relax sp * \fontdimen6\MT@lsfont/2000\relax }% \advance\@tempdima -\dimexpr \MT@letterspace@ sp * \fontdimen6\MT@lsfont/2000\relax \edef\MT@temp{\MT@temp{\the\@tempdima}}% } \def\MT@ls@outer@k{\ifhmode\kern\MT@outer@kern\relax\fi} \MT@requires@pdftex5{ \def\MT@noligatures{% \MT@dotrue \let\@tempa\MT@nl@setname \MT@map@clist@n{font,encoding,family,series,shape,size}{% \MT@ifdefined@n@TF{MT@checklist@##1}% {\csname MT@checklist@##1\endcsname}% {\MT@checklist@{##1}}% {nl}% }% \ifMT@do \MT@noligatures@\MT@font\MT@nl@ligatures \fi } \def\MT@noligatures@#1#2{% \MT@ifdefined@c@TF#2{% \MT@ifdefined@c@TF\tagcode{% \let\MT@warn@maybe@inputenc\@empty \def\MT@curr@list@name{\@backslashchar DisableLigatures}% \MT@map@clist@c#2{% \KV@@sp@def\@tempa{##1}\MT@get@slot \ifnum\MT@char>\m@ne \tagcode#1\MT@char=\m@ne \fi}% \MT@vinfo{... Disabling ligatures for characters: #2}% }{% \pdfnoligatures#1% \MT@warning{Cannot disable selected ligatures (pdftex doesn't\MessageBreak know \@backslashchar tagcode). Disabling all ligatures of\MessageBreak the font instead}% }% }{% \pdfnoligatures#1% \MT@vinfo{... Disabling ligatures}% }% } }\relax \def\MT@load@list#1{% \edef\@tempa{#1}% \MT@let@cn\@tempb{MT@\MT@feat @c@\@tempa @load}% \MT@ifstreq\@tempa\@tempb{% \MT@error{\@nameuse{MT@abbr@\MT@feat} list `\@tempa' cannot load itself}{}% }{% \ifx\@tempb\relax \else \MT@ifdefined@n@TF{MT@\MT@feat @c@\@tempb}{% \MT@vinfo{... : First loading \@nameuse{MT@abbr@\MT@feat} list `\@tempb'}% \begingroup \MT@load@list\@tempb \endgroup \edef\MT@curr@list@name{\@nameuse{MT@abbr@\MT@feat} list \noexpand\MessageBreak`\@tempb'}% \MT@let@cn\@tempc{MT@\MT@feat @c@\@tempb}% \expandafter\MT@set@codes\@tempc,\relax,% }{% \MT@error{\@nameuse{MT@abbr@\MT@feat} list `\@tempb' undefined.\MessageBreak Cannot load it from list `\@tempa'}{}% }% \fi }% } \let\MT@file@list\@empty \def\MT@find@file#1{% \MT@in@clist{#1}\MT@file@list \ifMT@inlist@ \else \MT@begin@catcodes \let\MT@begin@catcodes\relax \let\MT@end@catcodes\relax \InputIfFileExists{mt-#1.cfg}{% \edef\MT@curr@file{mt-#1.cfg}% \MT@vinfo{... Loading configuration file \MT@curr@file}% \MT@xadd\MT@file@list{#1,}% }{% \MT@get@basefamily#1\@empty\@empty\@empty\@nil \MT@exp@one@n\MT@in@clist\@tempa\MT@file@list \ifMT@inlist@ \MT@xadd\MT@file@list{#1,}% \else \InputIfFileExists{mt-\@tempa.cfg}{% \edef\MT@curr@file{mt-\@tempa.cfg}% \MT@vinfo{... Loading configuration file \MT@curr@file}% \MT@xadd\MT@file@list{\@tempa,#1,}% }{% \MT@vinfo{... No configuration file mt-#1.cfg}% \MT@xadd\MT@file@list{#1,}% }% \fi }% \endgroup \fi } \def\MT@cfg@catcodes{% \makeatletter \catcode`\^7% \catcode`\ 9% \catcode`\^^I9% \catcode`\^^M9% \catcode`\\\z@ \catcode`\{\@ne \catcode`\}\tw@ \catcode`\#6% \catcode`\%14% \MT@map@tlist@n {\!\"\$\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\[\]\_\`\|\~}% \@makeother } \def\MT@begin@catcodes{% \begingroup \MT@cfg@catcodes } \let\MT@end@catcodes\endgroup \def\MT@get@basefamily#1#2#3#4\@nil{% \ifx\@empty#4% \def\@tempa{#1#2#3}% \else \let\@tempa\@empty \edef\@tempb{#1#2#3#4}% \expandafter\MT@get@basefamily@\@tempb\@nil \fi } \def\MT@get@basefamily@#1#2\@nil{% \edef\@tempa{\@tempa#1}% \ifx\\#2\\\expandafter\@gobble\else\expandafter\@firstofone\fi {\MT@in@tlist{#2}\MT@variants \ifMT@inlist@\else\MT@get@basefamily@#2\@nil\fi}% } \def\MT@get@listname#1{% \let\MT@listname\@undefined \def\@tempb{#1}% \MT@map@tlist@c\MT@try@order\MT@get@listname@ } \def\MT@get@listname@#1{% \expandafter\MT@next@listname#1% \ifx\MT@listname\@undefined \else \expandafter\MT@tlist@break \fi } \def\MT@try@order{% {1111}{1110}{1101}{1100}{1011}{1010}{1001}{1000}% {0111}{0110}{0101}{0100}{0011}{0010}{0001}{0000}% } \def\MT@next@listname#1#2#3#4{% \edef\@tempa{\MT@encoding /\ifnum#1=\@ne \MT@family\fi /\ifnum#2=\@ne \MT@series\fi /\ifnum#3=\@ne \MT@shape\fi /\ifnum#4=\@ne *\fi \MT@context}% \MT@ifdefined@n@TF{MT@\@tempb @\@tempa}{% \MT@next@listname@#4% }{% \ifnum#1=\@ne \ifx\MT@familyalias\@empty \else \edef\@tempa{\MT@encoding /\MT@familyalias /\ifnum#2=\@ne \MT@series\fi /\ifnum#3=\@ne \MT@shape\fi /\ifnum#4=\@ne *\fi \MT@context}% \MT@ifdefined@n@T{MT@\@tempb @\@tempa}{% \MT@next@listname@#4% }% \fi \fi }% } \def\MT@next@listname@#1{% \ifnum#1=\@ne \MT@exp@cs\MT@in@rlist{MT@\@tempb @\@tempa @sizes}% \ifMT@inlist@ \let\MT@listname\MT@size@name \fi \else \MT@let@cn\MT@listname{MT@\@tempb @\@tempa}% \fi } \def\MT@if@list@exists{% \MT@let@cn\MT@context{MT@\MT@feat @context}% \MT@ifstreq{@}\MT@context{\let\MT@context\@empty}\relax \MT@get@listname{\MT@feat @c}% \MT@ifdefined@c@TF\MT@listname{% \MT@edef@n{MT@\MT@feat @c@name}{\MT@listname}% \ifMT@nonselected \MT@vinfo{... Applying non-selected expansion (list `\MT@listname')}% \else \MT@vinfo{... Loading \@nameuse{MT@abbr@\MT@feat} list `\MT@listname'}% \fi \@firstoftwo }{% \MT@let@nc{MT@\MT@feat @c@name}\@empty \ifMT@nonselected \MT@vinfo{... Applying non-selected expansion (no list)}% \else \MT@ifstreq\MT@feat{tr}\relax{% \MT@warning{I cannot find a \@nameuse{MT@abbr@\MT@feat} list for font\MessageBreak`\MT@@font'% \ifx\MT@context\@empty\else\space(context: `\MT@context')\fi. Switching off\MessageBreak\@nameuse{MT@abbr@\MT@feat} for this font}% }% \fi \@secondoftwo }% } \def\MT@get@inh@list{% \let\MT@context\@empty \MT@get@listname{\MT@feat @inh}% \MT@ifdefined@c@TF\MT@listname{% \MT@edef@n{MT@\MT@feat @inh@name}{\MT@listname}% \MT@let@cn\@tempc{MT@\MT@feat @inh@\MT@listname}% \ifx\@tempc\@empty \else \begingroup \edef\MT@curr@list@name{inheritance list\noexpand\MessageBreak`\MT@listname'}% \MT@set@inputenc{inh}% \expandafter\MT@inh@do\@tempc,\relax,% \MT@glet@nc{MT@\MT@feat @inh@\MT@listname}\@empty \endgroup \fi }{% \MT@let@nc{MT@\MT@feat @inh@name}\@undefined }% } \def\MT@get@slot{% \escapechar`\\ \let\MT@char@\m@ne \MT@noresttrue \MT@toks=\expandafter{\@tempa}% \expandafter\MT@is@letter\@tempa\relax\relax \ifnum\MT@char@ < \z@ \MT@exp@two@c\MT@is@active\string\@tempa\@nil \MT@ifdefined@n@TF{\MT@encoding\MT@detokenize@c\@tempa}% \MT@is@symbol {\expandafter\MT@is@composite\@tempa\relax\relax}% \ifnum\MT@char@ < \z@ \expandafter\MT@exp@two@c\expandafter\MT@is@char\expandafter \meaning\expandafter\@tempa\MT@charstring\relax\relax\relax \fi \fi \let\MT@char\MT@char@ \ifnum\MT@char < \z@ \MT@warn@unknown \else \ifMT@norest \else \MT@warn@rest \let\MT@char\m@ne \fi \fi \escapechar\m@ne } \newif\ifMT@norest \def\MT@is@letter#1#2\relax{% \ifcat a\noexpand#1\relax \edef\MT@char@{\number`#1}% \ifx\\#2\\% \else \MT@norestfalse \fi \else \ifcat !\noexpand#1\relax \edef\MT@char@{\number`#1}% \ifx\\#2\\% \ifnum\MT@char@ > 127 \MT@warn@ascii \fi \else \MT@norestfalse \expandafter\MT@is@number#1#2\relax\relax \fi \fi \fi } \def\MT@is@number#1#2#3\relax{% \ifx\relax#3\relax \else \ifx\relax#2\relax \else \MT@noresttrue \if#1"\relax \def\x{\uppercase{\edef\MT@char@{\number#1#2#3}}}\x \else \if#1'\relax \def\MT@char@{\number#1#2#3}% \else \MT@ifint{#1#2#3}{% \def\MT@char@{\number#1#2#3}% }\MT@norestfalse \fi \fi \ifnum\MT@char@ > \@cclv \MT@warn@number@too@large{\noexpand#1\noexpand#2\noexpand#3}% \let\MT@char@\m@ne \fi \fi \fi } \def\MT@is@active#1#2\@nil{% \ifnum\catcode`#1 = \active \begingroup \set@display@protect \let\IeC\@firstofone \let\@inpenc@undefined@\MT@undefined@char \def\UTFviii@defined##1{\ifx ##1\relax \MT@undefined@char{utf8}\else\expandafter ##1\fi}% \MT@ifdefined@c@T\PrerenderUnicode {\PrerenderUnicode{\@tempa}\let\unicode@charfilter\@firstofone}% \edef\x{\endgroup \def\noexpand\@tempa{\@tempa}% \MT@toks={\the\MT@toks\space(= \@tempa)}% }% \x \fi } \def\MT@undefined@char#1{undefined in input encoding ``#1''} \def\MT@is@symbol{% \expandafter\def\expandafter\MT@char\expandafter {\csname\MT@encoding\MT@detokenize@c\@tempa\endcsname}% \expandafter\MT@exp@two@c\expandafter\MT@is@char\expandafter \meaning\expandafter\MT@char\MT@charstring\relax\relax\relax \ifnum\MT@char@ < \z@ \expandafter\expandafter\expandafter\MT@is@letter\MT@char\relax\relax \fi } \begingroup \catcode`\/=\z@ /MT@map@tlist@n{/\CHAR}/@makeother /lowercase{% /def/x{/endgroup /def/MT@charstring{\CHAR"}% /def/MT@is@char##1\CHAR"##2##3##4/relax{% /ifx/relax##1/relax /if##3\/relax /edef/MT@char@{/number"##2}% /MT@ifstreq/MT@charstring{##3##4}/relax/MT@norestfalse /else /edef/MT@char@{/number"##2##3}% /MT@ifstreq/MT@charstring{##4}/relax/MT@norestfalse /fi /fi }% }% } /x \def\MT@is@composite#1#2\relax{% \ifx\\#2\\\else \expandafter\def\expandafter\MT@char\expandafter{\csname\expandafter \string\csname\MT@encoding\endcsname \MT@detokenize@n{#1}-\MT@detokenize@n{#2}\endcsname}% \expandafter\expandafter\expandafter\MT@is@letter\MT@char\relax\relax \fi } \def\MT@set@listname{% \edef\MT@curr@list@name{\@nameuse{MT@abbr@\MT@feat} list\noexpand\MessageBreak `\@nameuse{MT@\MT@feat @c@name}'}% } \def\MT@warn@ascii{% \MT@warning@nl{Character `\the\MT@toks' (= \MT@char@) is outside of ASCII range.\MessageBreak You must load the `inputenc' package before using\MessageBreak 8-bit characters in \MT@curr@list@name}% } \def\MT@warn@number@too@large#1{% \MT@warning@nl{% Number #1 in encoding `\MT@encoding' too large!\MessageBreak Ignoring it in \MT@curr@list@name}% } \def\MT@warn@rest{% \MT@warning@nl{% Unknown slot number of character\MessageBreak`\the\MT@toks'% \MT@warn@maybe@inputenc\MessageBreak in font encoding `\MT@encoding'.\MessageBreak Make sure it's a single character\MessageBreak (or a number) in \MT@curr@list@name}% } \def\MT@warn@unknown{% \MT@warning@nl{% Unknown slot number of character\MessageBreak`\the\MT@toks'% \MT@warn@maybe@inputenc\MessageBreak in font encoding `\MT@encoding' in \MT@curr@list@name}% } \def\MT@warn@maybe@inputenc{% \MT@ifdefined@n@T {MT@\MT@feat @\MT@cat @\csname MT@\MT@feat @\MT@cat @name\endcsname @inputenc}% { (input encoding `\@nameuse {MT@\MT@feat @\MT@cat @\csname MT@\MT@feat @\MT@cat @name\endcsname @inputenc}')}% } \let\MT@font@list\@empty \let\MT@font\@empty \MT@addto@setup{% \@ifpackageloaded{CJK}{ \@ifpackagelater{CJK}{2006/10/17} % 4.7.0 {\def\MT@orig@pickupfont{\CJK@ifundefined\CJK@plane}} {\def\MT@orig@pickupfont{\@ifundefined{CJK@plane}}} \g@addto@macro\MT@orig@pickupfont {{\expandafter\ifx\font@name\relax\define@newfont\fi}} \@ifpackageloaded{CJKutf8} {\@ifpackagelater{CJKutf8}{2008/05/22} % 4.8.0 {\ifpdf\expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi} {\@firstoftwo}} {\@firstoftwo} {\g@addto@macro\MT@orig@pickupfont{% {\expandafter\ifx\csname\curr@fontshape/\f@size/\CJK@plane\endcsname\relax \define@newfont\else\xdef\font@name{% \csname \curr@fontshape/\f@size/\CJK@plane\endcsname}\fi}}} {\g@addto@macro\MT@orig@pickupfont{% {\expandafter\ifx\csname \curr@fontshape/\f@size/\CJK@plane\endcsname\relax \define@newfont\def\CJK@temp{v}% \ifx\CJK@temp\CJK@plane \expandafter\ifx\csname CJK@cmap@\f@family\CJK@plane\endcsname\relax \else\csname CJK@cmap@\f@family\CJK@plane\endcsname\fi \else \CJK@addcmap\CJK@plane \fi \else\xdef\font@name{% \csname \curr@fontshape/\f@size/\CJK@plane\endcsname}\fi}}} }{ \def\MT@orig@pickupfont{\expandafter\ifx\font@name\relax\define@newfont\fi} } \ifx\pickup@font\MT@orig@pickupfont \else \MT@warning@nl{% Command \string\pickup@font\space is not defined as expected.% \MessageBreak Patching it anyway. Some things may break% .\MessageBreak Double-check whether micro-typography is indeed% \MessageBreak applied to the document.% \MessageBreak (Hint: Turn on `verbose' mode)% } \fi \g@addto@macro\pickup@font{\begingroup} \MT@with@package@T{trace}{\g@addto@macro\pickup@font{\conditionally@traceoff}} \g@addto@macro\pickup@font{% \escapechar\m@ne \MT@let@cn\MT@font{MT@subst@\expandafter\string\font@name}% \ifx\MT@font\relax \let\MT@font\font@name \else \ifx\MT@font\font@name \else \MT@register@subst@font \fi \fi \MT@setupfont \endgroup } \let\MT@pickupfont\pickup@font \g@addto@macro\do@subst@correction {\edef\MT@font{\csname\curr@fontshape/\f@size\endcsname}% \MT@glet@nc{MT@subst@\expandafter\string\font@name}\MT@font} \let\MT@orig@add@accent\add@accent \def\add@accent#1#2{% \let\pickup@font\MT@orig@pickupfont \MT@orig@add@accent{#1}{#2}% \let\pickup@font\MT@pickupfont } } \def\MT@check@font{\MT@exp@one@n\MT@in@clist\MT@font\MT@font@list} \def\MT@register@subst@font{\xdef\MT@font@list{\MT@font@list\font@name,}} \def\MT@register@font{\xdef\MT@font@list{\MT@font@list\MT@font,}} \let\MT@active@features\@empty \def\MT@check@font@cx{% \MT@if@true \MT@map@clist@c\MT@active@features{% \expandafter\MT@exp@one@n\expandafter\MT@in@clist\expandafter\MT@font \csname MT@##1@\csname MT@##1@context\endcsname font@list\endcsname \ifMT@inlist@ \MT@let@nc{MT@\@nameuse{MT@abbr@##1}}\relax \else \MT@if@false \fi }% \ifMT@if@ \MT@inlist@true \else \MT@inlist@false \fi } \def\MT@register@subst@font@cx{% \MT@map@clist@c\MT@active@features{% \MT@exp@cs\MT@xadd {MT@##1@\csname MT@##1@context\endcsname font@list}% {\font@name,}% }% } \def\MT@register@font@cx{% \MT@map@clist@c\MT@active@features{% \MT@exp@cs\ifx{MT@\@nameuse{MT@abbr@##1}}\relax\else \MT@exp@cs\MT@xadd {MT@##1@\csname MT@##1@context\endcsname font@list}% {\MT@font,}% \def\@tempa{##1}% \MT@exp@cs\MT@map@tlist@c{MT@##1@doc@contexts}\MT@maybe@rem@from@list \fi }% } \def\MT@maybe@rem@from@list#1{% \MT@ifstreq{\@tempa/#1}{\@tempa/\csname MT@\@tempa @context\endcsname}\relax{% \expandafter\MT@exp@one@n\expandafter\MT@rem@from@clist\expandafter \MT@font \csname MT@\@tempa @#1font@list\endcsname }% } \def\microtypecontext#1{\MT@addto@setup{\microtypecontext{#1}}} \MT@addto@setup{% \DeclareRobustCommand\microtypecontext[1]{% \MT@setup@contexts \let\MT@reset@context\relax \setkeys{MTC}{#1}% \selectfont \MT@reset@context }% } \DeclareRobustCommand\textmicrotypecontext[2]{{\microtypecontext{#1}#2}} \def\MT@reset@context@{% \MT@vinfo{<<< Resetting contexts\on@line }% \selectfont } \def\MT@setup@contexts{% \MT@map@clist@c\MT@active@features {\MT@glet@nc{MT@##1@@font@list}\MT@font@list}% \MT@glet\MT@check@font\MT@check@font@cx \MT@glet\MT@register@font\MT@register@font@cx \MT@glet\MT@register@subst@font\MT@register@subst@font@cx \MT@glet\MT@setup@contexts\relax } \MT@map@clist@c\MT@features@long{% \define@key{MTC}{#1}[]{% \edef\@tempb{\@nameuse{MT@rbba@#1}}% \MT@exp@one@n\MT@in@clist\@tempb\MT@active@features \ifMT@inlist@ \MT@ifempty{##1}{\def\MT@val{@}}{\def\MT@val{##1}}% \MT@exp@cs\ifx{MT@\@tempb @context}\MT@val \else \MT@vinfo{>>> Changing #1 context to `\MT@val'\MessageBreak\on@line }% \def\MT@reset@context{\aftergroup\MT@reset@context@}% \MT@glet@nn{MT@reset@\@tempb @codes}{MT@reset@\@tempb @codes@}% \expandafter\MT@exp@one@n\expandafter\MT@in@tlist\expandafter \MT@val \csname MT@\@tempb @doc@contexts\endcsname \ifMT@inlist@ \else \MT@exp@cs\MT@xadd{MT@\@tempb @doc@contexts}{{\MT@val}}% \fi \MT@edef@n{MT@\@tempb @context}{\MT@val}% \fi \fi }% } \MT@exp@one@n\MT@map@clist@n{\MT@features,nl}{% \MT@def@n{MT@#1@context}{@}% \MT@def@n{MT@#1@doc@contexts}{{@}}% } \let\MT@extra@context\@empty \def\DeclareMicrotypeSet{% \@ifstar \MT@DeclareSetAndUseIt \MT@DeclareSet } \newcommand\MT@DeclareSet[3][]{% \KV@@sp@def\@tempa{#1}% \MT@ifempty\@tempa{% \MT@map@clist@c\MT@features{{\MT@declare@sets{##1}{#2}{#3}}}% }{% \MT@map@clist@c\@tempa{{% \KV@@sp@def\@tempa{##1}% \MT@ifempty\@tempa\relax{% \MT@is@feature{set declaration `#2'}{% \MT@exp@one@n\MT@declare@sets {\csname MT@rbba@\@tempa\endcsname}{#2}{#3}% }% }% }}% }% } \newcommand\MT@DeclareSetAndUseIt[3][]{% \MT@DeclareSet[#1]{#2}{#3}% \UseMicrotypeSet[#1]{#2}% } \let\MT@curr@set@name\@empty \def\MT@declare@sets#1#2#3{% \KV@@sp@def\MT@curr@set@name{#2}% \MT@ifdefined@n@T{MT@#1@set@@\MT@curr@set@name}{% \MT@warning{Redefining \@nameuse{MT@abbr@#1} set `\MT@curr@set@name'}% \MT@glet@nc{MT@#1list@size@\MT@curr@set@name}\@empty }% \MT@glet@nc{MT@#1@set@@\MT@curr@set@name}\@empty \setkeys{MT@#1@set}{#3}% } \def\MT@define@set@key@#1#2{% \define@key{MT@#2@set}{#1}[]{% \MT@glet@nc{MT@#2list@#1@\MT@curr@set@name}\@empty \MT@map@clist@n{##1}{% \KV@@sp@def\MT@val{####1}% \MT@get@highlevel{#1}% \MT@exp@two@n\g@addto@macro {\csname MT@#2list@#1@\MT@curr@set@name\expandafter\endcsname}% {\MT@val,}% }% \expandafter\g@addto@macro\expandafter\MT@font@sets \csname MT@#2list@#1@\MT@curr@set@name\endcsname }% } \def\MT@get@highlevel#1{% \expandafter\MT@test@ast\MT@val*\@nil\relax{% \MT@ifempty\@tempa{\def\@tempa{#1}}\relax \edef\MT@val{\expandafter\noexpand\csname \@tempa default\endcsname}% }% } \def\MT@test@ast#1*#2\@nil{% \def\@tempa{#1}% \MT@ifempty{#2}% } \let\MT@font@sets\@empty \def\MT@fix@font@set#1{% \xdef#1{#1}% \global\@onelevel@sanitize#1% } \def\MT@define@set@key@size#1{% \define@key{MT@#1@set}{size}[]{% \MT@map@clist@n{##1}{% \KV@@sp@def\MT@val{####1}% \expandafter\MT@get@range\MT@val--\@nil \ifx\MT@val\relax \else \MT@exp@cs\MT@xadd {MT@#1list@size@\MT@curr@set@name}% {{{\MT@lower}{\MT@upper}\relax}}% \fi }% }% } \def\MT@get@range#1-#2-#3\@nil{% \MT@ifempty{#1}{% \MT@ifempty{#2}{% \let\MT@val\relax }{% \def\MT@lower{0}% \def\MT@val{#2}% \MT@get@size \edef\MT@upper{\MT@val}% }% }{% \def\MT@val{#1}% \MT@get@size \ifx\MT@val\relax \else \edef\MT@lower{\MT@val}% \MT@ifempty{#2}{% \MT@ifempty{#3}% {\def\MT@upper{-1}}% {\def\MT@upper{2048}}% }{% \def\MT@val{#2}% \MT@get@size \ifx\MT@val\relax \else \MT@ifdim\MT@lower>\MT@val{% \MT@error{% Invalid size range (\MT@lower\space > \MT@val) in font set `\MT@curr@set@name'.\MessageBreak Swapping sizes}{}% \edef\MT@upper{\MT@lower}% \edef\MT@lower{\MT@val}% }{% \edef\MT@upper{\MT@val}% }% \MT@ifdim\MT@lower=\MT@upper {\def\MT@upper{-1}}% \relax \fi }% \fi }% } \def\MT@get@size{% \if*\MT@val\relax \def\@tempa{\normalsize}% \else \MT@let@cn\@tempa{\MT@val}% \fi \ifx\@tempa\relax \else \begingroup \def\set@fontsize##1##2##3##4\@nil{\endgroup\def\MT@val{##2}}% \@tempa\@nil \fi \MT@ifdimen\MT@val{% \@defaultunits\@tempdima\MT@val pt\relax\@nnil \edef\MT@val{\strip@pt\@tempdima}% }{% \MT@warning{Could not parse font size `\MT@val'\MessageBreak in font set `\MT@curr@set@name'}% \let\MT@val\relax }% } \def\MT@define@set@key@font#1{% \define@key{MT@#1@set}{font}[]{% \MT@glet@nc{MT@#1list@font@\MT@curr@set@name}\@empty \MT@map@clist@n{##1}{% \KV@@sp@def\MT@val{####1}% \MT@ifstreq\MT@val*{\def\MT@val{*/*/*/*/*}}\relax \expandafter\MT@get@font\MT@val/////\@nil \MT@exp@two@n\g@addto@macro {\csname MT@#1list@font@\MT@curr@set@name\expandafter\endcsname}% {\MT@val,}% }% \expandafter\g@addto@macro\expandafter\MT@font@sets \csname MT@#1list@font@\MT@curr@set@name\endcsname }% } \def\MT@get@font#1/#2/#3/#4/#5/#6\@nil{% \MT@get@font@{#1}{#2}{#3}{#4}{#5}{0}% \ifx\MT@val\relax\def\MT@val{0}\fi \expandafter\g@addto@macro\expandafter\@tempb\expandafter{\MT@val}% \let\MT@val\@tempb } \def\MT@get@font@#1#2#3#4#5#6{% \let\@tempb\@empty \def\MT@temp{#1/#2/#3/#4/#5}% \MT@get@axis{encoding}{#1}% \MT@get@axis{family} {#2}% \MT@get@axis{series} {#3}% \MT@get@axis{shape} {#4}% \ifnum#6>\z@\edef\@tempb{\@tempb*}\fi \MT@ifempty{#5}{% \MT@warn@axis@empty{size}{\string\normalsize}% \def\MT@val{*}% }{% \def\MT@val{#5}% }% \MT@get@size } \def\MT@get@axis#1#2{% \def\MT@val{#2}% \MT@get@highlevel{#1}% \MT@ifempty\MT@val{% \MT@warn@axis@empty{#1}{\csname #1default\endcsname}% \expandafter\def\expandafter\MT@val\expandafter{\csname #1default\endcsname}% }\relax \expandafter\g@addto@macro\expandafter\@tempb\expandafter{\MT@val/}% } \def\MT@warn@axis@empty#1#2{% \MT@warning{#1 axis is empty in font specification\MessageBreak `\MT@temp'. Using `#2' instead}% } \MT@exp@one@n\MT@map@clist@n{\MT@features,nl}{% \MT@define@set@key@{encoding}{#1}% \MT@define@set@key@{family}{#1}% \MT@define@set@key@{series}{#1}% \MT@define@set@key@{shape}{#1}% \MT@define@set@key@size{#1}% \MT@define@set@key@font{#1}% } \renewcommand*\UseMicrotypeSet[2][]{% \KV@@sp@def\@tempa{#1}% \MT@ifempty\@tempa{% \MT@map@clist@c\MT@features{{\MT@use@set{##1}{#2}}}% }{% \MT@map@clist@c\@tempa{{% \KV@@sp@def\@tempa{##1}% \MT@ifempty\@tempa\relax{% \MT@is@feature{activation of set `#2'}{% \MT@exp@one@n\MT@use@set {\csname MT@rbba@\@tempa\endcsname}{#2}% }% }% }}% }% } \def\MT@use@set#1#2{% \KV@@sp@def\@tempa{#2}% \MT@ifdefined@n@TF{MT@#1@set@@\@tempa}{% \MT@xdef@n{MT@#1@setname}{\@tempa}% }{% \MT@ifdefined@n@TF{MT@#1@setname}\relax{% \MT@xdef@n{MT@#1@setname}{\@nameuse{MT@default@#1@set}}% }% \MT@error{% The \@nameuse{MT@abbr@#1} set `\@tempa' is undeclared.\MessageBreak Using set `\@nameuse{MT@#1@setname}' instead}{}% }% } \renewcommand*\DeclareMicrotypeSetDefault[2][]{% \KV@@sp@def\@tempa{#1}% \MT@ifempty\@tempa{% \MT@map@clist@c\MT@features{{\MT@set@default@set{##1}{#2}}}% }{% \MT@map@clist@c\@tempa{{% \KV@@sp@def\@tempa{##1}% \MT@ifempty\@tempa\relax{% \MT@is@feature{declaration of default set `#2'}{% \MT@exp@one@n\MT@set@default@set {\csname MT@rbba@\@tempa\endcsname}{#2}% }% }% }}% }% } \def\MT@set@default@set#1#2{% \KV@@sp@def\@tempa{#2}% \MT@ifdefined@n@TF{MT@#1@set@@\@tempa}{% \MT@xdef@n{MT@default@#1@set}{\@tempa}% }{% \MT@error{% The \@nameuse{MT@abbr@#1} set `\@tempa' is not declared.\MessageBreak Cannot make it the default set. Using set\MessageBreak `all' instead}{}% \MT@xdef@n{MT@default@#1@set}{all}% }% } \let\MT@variants\@empty \def\DeclareMicrotypeVariants{% \@ifstar \MT@DeclareVariants {\let\MT@variants\@empty\MT@DeclareVariants}% } \def\MT@DeclareVariants#1{% \MT@map@clist@n{#1}{% \KV@@sp@def\@tempa{##1}% \@onelevel@sanitize\@tempa \xdef\MT@variants{\MT@variants{\@tempa}}% }% } \renewcommand*\DeclareMicrotypeAlias[2]{% \KV@@sp@def\@tempa{#1}% \KV@@sp@def\@tempb{#2}% \@onelevel@sanitize\@tempb \MT@ifdefined@n@T{MT@\@tempa @alias}{% \MT@warning{Alias font family `\@tempb' will override alias `\@nameuse{MT@\@tempa @alias}'\MessageBreak for font family `\@tempa'}}% \MT@xdef@n{MT@\@tempa @alias}{\@tempb}% \MT@ifdefined@c@T\MT@family{% \MT@glet\MT@familyalias\@tempb }% } \def\LoadMicrotypeFile#1{% \KV@@sp@def\@tempa{#1}% \@onelevel@sanitize\@tempa \MT@exp@one@n\MT@in@clist\@tempa\MT@file@list \ifMT@inlist@ \MT@vinfo{... Configuration file mt-\@tempa.cfg already loaded}% \else \MT@xadd\MT@file@list{\@tempa,}% \MT@begin@catcodes \InputIfFileExists{mt-\@tempa.cfg}{% \edef\MT@curr@file{mt-\@tempa.cfg}% \MT@vinfo{... Loading configuration file \MT@curr@file}% }{% \MT@warning{... Configuration file mt-\@tempa.cfg\MessageBreak does not exist}% }% \MT@end@catcodes \fi } \MT@requires@pdftex5{ \def\DisableLigatures{% \MT@begin@catcodes \MT@DisableLigatures } \newcommand*\MT@DisableLigatures[2][]{% \MT@ifempty{#1}\relax{\gdef\MT@nl@ligatures{#1}}% \xdef\MT@active@features{\MT@active@features,nl}% \global\MT@noligaturestrue \MT@declare@sets{nl}{no ligatures}{#2}% \gdef\MT@nl@setname{no ligatures}% \MT@end@catcodes } }{ \renewcommand*\DisableLigatures[2][]{% \MT@error{Disabling ligatures of a font is only possible\MessageBreak with pdftex version 1.30 or newer.\MessageBreak Ignoring \string\DisableLigatures}{Upgrade pdftex.}% } } \def\DeclareMicrotypeBabelHook#1#2{% \MT@map@clist@n{#1}{% \KV@@sp@def\@tempa{##1}% \MT@gdef@n{MT@babel@\@tempa}{#2}% }% } \def\SetProtrusion{% \MT@begin@catcodes \MT@SetProtrusion } \newcommand*\MT@SetProtrusion[3][]{% \let\MT@extra@context\@empty \MT@set@named@keys{MT@pr@c}{#1}% \def\MT@permutelist{pr@c}% \setkeys{MT@cfg}{#2}% \MT@permute \MT@gdef@n{MT@pr@c@\MT@pr@c@name}{#3}% \MT@end@catcodes } \def\SetExpansion{% \MT@begin@catcodes \MT@SetExpansion } \newcommand*\MT@SetExpansion[3][]{% \let\MT@extra@context\@empty \MT@set@named@keys{MT@ex@c}{#1}% \MT@ifdefined@n@T{MT@ex@c@\MT@ex@c@name @factor}{% \ifnum\csname MT@ex@c@\MT@ex@c@name @factor\endcsname > \@m \MT@warning@nl{Expansion factor \number\@nameuse{MT@ex@c@\MT@ex@c@name @factor} too large in list\MessageBreak `\MT@ex@c@name'. Setting it to the maximum of 1000}% \MT@glet@nc{MT@ex@c@\MT@ex@c@name @factor}\@m \fi }% \def\MT@permutelist{ex@c}% \setkeys{MT@cfg}{#2}% \MT@permute \MT@gdef@n{MT@ex@c@\MT@ex@c@name}{#3}% \MT@end@catcodes } \def\SetTracking{% \MT@begin@catcodes \MT@SetTracking } \newcommand*\MT@SetTracking[3][]{% \let\MT@extra@context\@empty \MT@set@named@keys{MT@tr@c}{#1}% \def\MT@permutelist{tr@c}% \setkeys{MT@cfg}{#2}% \MT@permute \KV@@sp@def\@tempa{#3}% \MT@ifempty\@tempa\relax{% \MT@ifint\@tempa {\MT@xdef@n{MT@tr@c@\MT@tr@c@name}{\@tempa}}% {\MT@warning{Value `\@tempa' is not a number in\MessageBreak tracking set `\MT@curr@set@name'}}}% \MT@end@catcodes } \def\SetExtraSpacing{% \MT@begin@catcodes \MT@SetExtraSpacing } \newcommand*\MT@SetExtraSpacing[3][]{% \let\MT@extra@context\@empty \MT@set@named@keys{MT@sp@c}{#1}% \def\MT@permutelist{sp@c}% \setkeys{MT@cfg}{#2}% \MT@permute \MT@gdef@n{MT@sp@c@\MT@sp@c@name}{#3}% \MT@end@catcodes } \def\SetExtraKerning{% \MT@begin@catcodes \MT@SetExtraKerning } \newcommand*\MT@SetExtraKerning[3][]{% \let\MT@extra@context\@empty \MT@set@named@keys{MT@kn@c}{#1}% \def\MT@permutelist{kn@c}% \setkeys{MT@cfg}{#2}% \MT@permute \MT@gdef@n{MT@kn@c@\MT@kn@c@name}{#3}% \MT@end@catcodes } \def\MT@set@named@keys#1#2{% \def\x##1name=##2,##3\@nil{% \setkeys{#1}{name=##2}% \gdef\MT@options{##1##3}% \MT@rem@from@clist{name=}\MT@options }% \x#2,name=,\@nil \@expandtwoargs\setkeys{#1}\MT@options } \def\MT@define@code@key#1#2{% \define@key{MT@#2}{#1}[]{% \@tempcnta=\@ne \MT@map@clist@n{##1}{% \KV@@sp@def\MT@val{####1}% \MT@get@highlevel{#1}% \MT@edef@n{MT@temp#1\the\@tempcnta}{\MT@val}% \advance\@tempcnta \@ne }% }% } \def\MT@define@code@key@size#1{% \define@key{MT@#1}{size}[]{% \MT@map@clist@n{##1}{% \KV@@sp@def\MT@val{####1}% \expandafter\MT@get@range\MT@val--\@nil \ifx\MT@val\relax \else \MT@exp@cs\MT@xadd{MT@tempsize}% {{{\MT@lower}{\MT@upper}{\MT@curr@set@name}}}% \fi }% }% } \def\MT@define@code@key@font#1{% \define@key{MT@#1}{font}[]{% \MT@map@clist@n{##1}{% \KV@@sp@def\MT@val{####1}% \MT@ifstreq\MT@val*{\def\MT@val{*/*/*/*/*}}\relax \expandafter\MT@get@font@and@size\MT@val/////\@nil \MT@xdef@n{MT@\MT@permutelist @\@tempb\MT@extra@context}% {\csname MT@\MT@permutelist @name\endcsname}% \MT@exp@cs\MT@xaddb {MT@\MT@permutelist @\@tempb\MT@extra@context @sizes}% {{{\MT@val}{\m@ne}{\MT@curr@set@name}}}% }% }% } \def\MT@get@font@and@size#1/#2/#3/#4/#5/#6\@nil{% \MT@get@font@{#1}{#2}{#3}{#4}{#5}{1}% } \MT@define@code@key{encoding}{cfg} \MT@define@code@key{family}{cfg} \MT@define@code@key{series}{cfg} \MT@define@code@key{shape}{cfg} \MT@define@code@key@size{cfg} \MT@define@code@key@font{cfg} \def\MT@define@opt@key#1#2{% \define@key{MT@#1@c}{#2}[]{\MT@ifempty{##1}\relax{% \MT@xdef@n{MT@#1@c@\MT@curr@set@name @#2}{##1}}}% } \MT@map@clist@c\MT@features{% \define@key{MT@#1@c}{name}[]{% \MT@ifempty{##1}{% \MT@edef@n{MT@#1@c@name}{\MT@curr@file/\the\inputlineno}% }{% \MT@edef@n{MT@#1@c@name}{##1}% \MT@ifdefined@n@T{MT@#1@c@\csname MT@#1@c@name\endcsname}{% \MT@warning{Redefining \@nameuse{MT@abbr@#1} list `\@nameuse{MT@#1@c@name}'}% }% }% \MT@let@cn\MT@curr@set@name{MT@#1@c@name}% }% \MT@define@opt@key{#1}{load}% \MT@define@opt@key{#1}{factor}% \MT@define@opt@key{#1}{preset}% \MT@define@opt@key{#1}{inputenc}% \define@key{MT@#1@c}{context}[]{\MT@ifempty{##1}\relax{\def\MT@extra@context{##1}}}% } \MT@requires@pdftex7{ \define@key{MT@ex@c}{context}[]{% \MT@ifempty{#1}\relax{% \MT@glet\MT@copy@font\MT@copy@font@ \def\MT@extra@context{#1}% }% } \MT@addto@setup{% \define@key{MT@ex@c}{context}[]{% \ifx\MT@copy@font\MT@copy@font@ \MT@ifempty{#1}\relax{\def\MT@extra@context{#1}}% \else \MT@error{\MT@MT\space isn't set up for expansion contexts.\MessageBreak Ignoring `context' key\on@line}% {Either move the settings inside the preamble,\MessageBreak or load the package with the `copyfonts' option.}% \fi } } \define@key{MT@pr@c}{context}[]{% \MT@ifempty{#1}\relax{% \MT@glet\MT@copy@font\MT@copy@font@ \def\MT@extra@context{#1}% }% } \MT@addto@setup{% \define@key{MT@pr@c}{context}[]{% \MT@ifempty{#1}\relax{\def\MT@extra@context{#1}}% \ifx\MT@copy@font\MT@copy@font@\else \MT@warning@nl{If protrusion contexts don't work as expected, \MessageBreak load the package with the `copyfonts' option}% \fi } } }{ \define@key{MT@ex@c}{context}[]{% \MT@error{Expansion contexts only work with pdftex 1.40.4\MessageBreak or later. Ignoring `context' key\on@line}% {Upgrade pdftex.}% } } \def\MT@warn@nodim#1{% \MT@warning{`\@tempa' is not a dimension.\MessageBreak Ignoring it and setting values relative to\MessageBreak #1}% } \define@key{MT@pr@c}{unit}[character]{% \MT@glet@nc{MT@pr@c@\MT@curr@set@name @unit}\@empty \def\@tempa{#1}% \MT@ifstreq\@tempa{character}\relax{% \MT@ifdimen\@tempa {\MT@glet@nc{MT@pr@c@\MT@curr@set@name @unit}\@tempa}% {\MT@warn@nodim{character widths}}% }% } \define@key{MT@tr@c}{unit}[1em]{% \MT@glet@nc{MT@tr@c@\MT@curr@set@name @unit}\@empty \def\@tempa{#1}% \MT@ifdimen\@tempa {\MT@glet@nc{MT@tr@c@\MT@curr@set@name @unit}\@tempa}% {\MT@warn@nodim{1em}% \MT@gdef@n{MT@tr@c@\MT@curr@set@name @unit}{1em}}% } \MT@map@clist@n{sp,kn}{% \define@key{MT@#1@c}{unit}[space]{% \MT@glet@nc{MT@#1@c@\MT@curr@set@name @unit}\@empty \def\@tempa{##1}% \MT@ifstreq\@tempa{character}\relax{% \MT@glet@nc{MT@#1@c@\MT@curr@set@name @unit}\m@ne \MT@ifstreq\@tempa{space}\relax{% \MT@ifdimen\@tempa {\MT@glet@nc{MT@#1@c@\MT@curr@set@name @unit}\@tempa}% {\MT@warn@nodim{width of space}}% }% }% }% } \MT@map@clist@n{stretch,shrink,step}{% \define@key{MT@ex@c}{#1}[]{% \MT@ifempty{##1}\relax{% \MT@ifint{##1}{% \MT@gdef@n{MT@ex@c@\MT@curr@set@name @#1}{##1 }% }{% \MT@warning{% Value `##1' for option `#1' is not a number.\MessageBreak Ignoring it}% }% }% }% } \define@key{MT@ex@c}{auto}[true]{% \def\@tempa{#1}% \csname if\@tempa\endcsname \MT@requires@pdftex4{% \MT@gdef@n{MT@ex@c@\MT@curr@set@name @auto}{autoexpand}% }{% \MT@warning{pdftex too old for automatic font expansion}% } \else \MT@requires@pdftex4{% \MT@glet@nc{MT@ex@c@\MT@curr@set@name @auto}\@empty }\relax \fi } \MT@define@opt@key{tr}{spacing} \MT@define@opt@key{tr}{outerspacing} \MT@define@opt@key{tr}{outerkerning} \define@key{MT@tr@c}{noligatures}[]% {\MT@xdef@n{MT@tr@c@\MT@curr@set@name @noligatures}{#1}} \define@key{MT@tr@c}{outer spacing}[]{\setkeys{MT@tr@c}{outerspacing={#1}}} \define@key{MT@tr@c}{outer kerning}[]{\setkeys{MT@tr@c}{outerkerning={#1}}} \define@key{MT@tr@c}{no ligatures}[]{\setkeys{MT@tr@c}{noligatures={#1}}} \renewcommand*\DeclareCharacterInheritance[1][]{% \let\MT@extra@context\@empty \let\MT@extra@inputenc\@undefined \let\MT@inh@feat\@empty \setkeys{MT@inh@}{#1}% \MT@begin@catcodes \MT@set@inh@list } \def\MT@set@inh@list#1#2{% \MT@ifempty\MT@inh@feat{% \MT@map@clist@c\MT@features{{\MT@declare@char@inh{##1}{#1}{#2}}}% }{% \MT@map@clist@c\MT@inh@feat{{% \KV@@sp@def\@tempa{##1}% \MT@ifempty\@tempa\relax{% \MT@exp@one@n\MT@declare@char@inh {\csname MT@rbba@\@tempa\endcsname}{#1}{#2}% }% }}% }% \MT@end@catcodes } \MT@map@clist@c\MT@features@long{% \define@key{MT@inh@}{#1}[]{\edef\MT@inh@feat{\MT@inh@feat#1,}}} \define@key{MT@inh@}{inputenc}{\def\MT@extra@inputenc{#1}} \def\MT@declare@char@inh#1#2#3{% \MT@edef@n{MT@#1@inh@name}% {\MT@curr@file/\the\inputlineno (\@nameuse{MT@abbr@#1})}% \MT@let@cn\MT@curr@set@name{MT@#1@inh@name}% \MT@ifdefined@c@T\MT@extra@inputenc{% \MT@xdef@n{MT@#1@inh@\MT@curr@set@name @inputenc}{\MT@extra@inputenc}}% \MT@gdef@n{MT@#1@inh@\csname MT@#1@inh@name\endcsname}{#3}% \def\MT@permutelist{#1@inh}% \setkeys{MT@inh}{#2}% \MT@permute } \define@key{MT@inh}{encoding}[]{% \def\MT@val{#1}% \expandafter\MT@encoding@check\MT@val,\@nil \MT@get@highlevel{encoding}% \MT@edef@n{MT@tempencoding1}{\MT@val}% } \def\MT@encoding@check#1,#2\@nil{% \MT@ifempty{#2}\relax{% \edef\MT@val{#1}% \MT@warning{You may only specify one encoding for character\MessageBreak inheritance lists. Ignoring encoding(s) #2}% }% } \MT@define@code@key{family}{inh} \MT@define@code@key{series}{inh} \MT@define@code@key{shape}{inh} \MT@define@code@key@size{inh} \MT@define@code@key@font{inh} \def\MT@inh@do#1,{% \ifx\relax#1\@empty \else \MT@inh@split #1==\relax \expandafter\MT@inh@do \fi } \def\MT@inh@split#1=#2=#3\relax{% \def\@tempa{#1}% \ifx\@tempa\@empty \else \MT@get@slot \ifnum\MT@char > \m@ne \let\MT@val\MT@char \MT@map@clist@n{#2}{% \def\@tempa{##1}% \ifx\@tempa\@empty \else \MT@get@slot \ifnum\MT@char > \m@ne \MT@exp@cs\MT@xadd{MT@inh@\MT@listname @\MT@val @}{{\MT@char}}% \fi \fi }% \fi \fi } \def\MT@permute{% \let\MT@cnt@encoding\@ne \MT@permute@ \MT@map@tlist@n{{encoding}{family}{series}{shape}}\MT@permute@reset \MT@glet\MT@tempsize\@undefined } \def\MT@permute@{% \let\MT@cnt@family\@ne \MT@permute@@ \MT@increment\MT@cnt@encoding \MT@ifdefined@n@T{MT@tempencoding\MT@cnt@encoding}% \MT@permute@ } \def\MT@permute@@{% \let\MT@cnt@series\@ne \MT@permute@@@ \MT@increment\MT@cnt@family \MT@ifdefined@n@T{MT@tempfamily\MT@cnt@family}% \MT@permute@@ } \def\MT@permute@@@{% \let\MT@cnt@shape\@ne \MT@permute@@@@ \MT@increment\MT@cnt@series \MT@ifdefined@n@T{MT@tempseries\MT@cnt@series}% \MT@permute@@@ } \def\MT@permute@@@@{% \MT@permute@@@@@ \MT@increment\MT@cnt@shape \MT@ifdefined@n@T{MT@tempshape\MT@cnt@shape}% \MT@permute@@@@ } \def\MT@permute@@@@@{% \MT@permute@define{encoding}% \ifMT@document \ifx\MT@tempencoding\@empty \else \MT@ifdefined@n@TF{T@\MT@tempencoding}\relax {\expandafter\expandafter\expandafter\@gobble}% \fi \fi \MT@permute@@@@@@ } \def\MT@permute@@@@@@{% \MT@permute@define{family}% \MT@permute@define{series}% \MT@permute@define{shape}% \edef\@tempa{\MT@tempencoding /\MT@tempfamily /\MT@tempseries /\MT@tempshape /\MT@ifdefined@c@T\MT@tempsize *}% \MT@ifstreq\@tempa{////}\relax{% \ifx\MT@tempencoding\@empty \MT@warning{% You have to specify an encoding for\MessageBreak \@nameuse{MT@abbr@\MT@permutelist} list `\@nameuse{MT@\MT@permutelist @name}'.\MessageBreak Ignoring it}% \else \MT@ifdefined@c@TF\MT@tempsize{% \MT@ifdefined@n@T{MT@\MT@permutelist @\@tempa\MT@extra@context @sizes}{% \MT@map@tlist@c\MT@tempsize\MT@check@rlist }% \MT@exp@cs\MT@xaddb {MT@\MT@permutelist @\@tempa\MT@extra@context @sizes}% \MT@tempsize }{% \MT@ifdefined@n@T{MT@\MT@permutelist @\@tempa\MT@extra@context}{% \MT@warning{\@nameuse{MT@abbr@\MT@permutelist} list `\@nameuse{MT@\MT@permutelist @name}' will override list\MessageBreak `\@nameuse{MT@\MT@permutelist @\@tempa\MT@extra@context}' for font `\@tempa'}% }% }% \MT@xdef@n{MT@\MT@permutelist @\@tempa\MT@extra@context}% {\csname MT@\MT@permutelist @name\endcsname}% \fi }% } \def\MT@permute@define#1{% \@tempcnta=\csname MT@cnt@#1\endcsname\relax \MT@ifdefined@n@TF{MT@temp#1\the\@tempcnta}% {\MT@edef@n{MT@temp#1}{\csname MT@temp#1\the\@tempcnta\endcsname}}% {\MT@let@nc{MT@temp#1}\@empty}% } \def\MT@permute@reset#1{% \@tempcnta=\@ne \MT@loop \MT@let@nc{MT@temp#1\the\@tempcnta}\@undefined \advance\@tempcnta\@ne \MT@ifdefined@n@TF{MT@temp#1\the\@tempcnta}% \iftrue \iffalse \MT@repeat } \def\MT@check@rlist#1{\expandafter\MT@check@rlist@ #1} \def\MT@check@rlist@#1#2#3{% \def\@tempb{#1}% \def\@tempc{#2}% \MT@if@false \MT@exp@cs\MT@map@tlist@c {MT@\MT@permutelist @\@tempa\MT@extra@context @sizes}% \MT@check@range } \def\MT@check@range#1{\expandafter\MT@check@range@ #1} \def\MT@check@range@#1#2#3{% \MT@ifdim{#2}=\m@ne{% \MT@ifdim\@tempc=\m@ne{% \MT@ifdim\@tempb={#1}\MT@if@true\relax }{% \MT@ifdim\@tempb>{#1}\relax{% \MT@ifdim\@tempc>{#1}{% \MT@if@true \edef\@tempb{#1 (with range: \@tempb\space to \@tempc)}% }\relax }% }% }{% \MT@ifdim\@tempc=\m@ne{% \MT@ifdim\@tempb<{#2}{% \MT@ifdim\@tempb<{#1}\relax\MT@if@true }\relax }{% \MT@ifdim\@tempb<{#2}{% \MT@ifdim\@tempc>{#1}{% \MT@if@true \edef\@tempb{#1 to #2 (with range: \@tempb\space to \@tempc)}% }\relax }\relax }% }% \ifMT@if@ \MT@warning{\@nameuse{MT@abbr@\MT@permutelist} list `\@nameuse{MT@\MT@permutelist @name}' will override\MessageBreak list `#3' for font \@tempa,\MessageBreak size \@tempb}% \expandafter\MT@tlist@break \fi } \newif\ifMT@opt@expansion \newif\ifMT@opt@auto \newif\ifMT@opt@DVI \def\MT@optwarn@admissible#1#2{% \MT@warning@nl{`#1' is not an admissible value for option\MessageBreak `#2'. Assuming `false'}% } \def\MT@optwarn@nan#1#2{% \MT@warning@nl{Value `#1' for option `#2' is not a\MessageBreak number. Using default value of \number\@nameuse{MT@#2@default}}% } \def\MT@opt@def@set#1{% \MT@ifdefined@n@TF{MT@\@tempb @set@@\MT@val}{% \MT@xdef@n{MT@\@tempb @setname}{\MT@val}% }{% \MT@xdef@n{MT@\@tempb @setname}{\@nameuse{MT@default@\@tempb @set}}% \MT@warning@nl{The #1 set `\MT@val' is undeclared.\MessageBreak Using set `\@nameuse{MT@\@tempb @setname}' instead}% }% } \MT@map@clist@n{protrusion,expansion}{% \define@key{MT}{#1}[true]{% \csname MT@opt@#1true\endcsname \MT@map@clist@n{##1}{% \KV@@sp@def\MT@val{####1}% \MT@ifempty\MT@val\relax{% \csname MT@#1true\endcsname \edef\@tempb{\csname MT@rbba@#1\endcsname}% \MT@ifstreq\MT@val{true}\relax {% \MT@ifstreq\MT@val{false}{% \csname MT@#1false\endcsname }{% \MT@ifstreq\MT@val{compatibility}{% \MT@let@nc{MT@\@tempb @level}\@ne }{% \MT@ifstreq\MT@val{nocompatibility}{% \MT@let@nc{MT@\@tempb @level}\tw@ }{% \MT@opt@def@set{#1}% }% }% }% }% }% }% }% } \define@key{MT}{activate}[true]{% \setkeys{MT}{protrusion={#1}}% \setkeys{MT}{expansion={#1}}% } \MT@map@clist@n{spacing,kerning,tracking}{% \define@key{MT}{#1}[true]{% \MT@map@clist@n{##1}{% \KV@@sp@def\MT@val{####1}% \MT@ifempty\MT@val\relax{% \csname MT@#1true\endcsname \MT@ifstreq\MT@val{true}\relax {% \MT@ifstreq\MT@val{false}{% \csname MT@#1false\endcsname }{% \edef\@tempb{\csname MT@rbba@#1\endcsname}% \MT@opt@def@set{#1}% }% }% }% }% }% } \def\MT@def@bool@opt#1#2{% \define@key{MT}{#1}[true]{% \def\@tempa{##1}% \MT@ifstreq\@tempa{true}\relax{% \MT@ifstreq\@tempa{false}\relax{% \MT@optwarn@admissible{##1}{#1}% \def\@tempa{false}% }% }% #2% }% } \MT@map@clist@n{draft,selected,babel}{% \MT@def@bool@opt{#1}{\csname MT@#1\@tempa\endcsname}} \MT@def@bool@opt{auto}{\csname MT@auto\@tempa\endcsname \MT@opt@autotrue} \MT@def@bool@opt{DVIoutput}{% \csname if\@tempa\endcsname \ifnum\pdfoutput>\z@ \MT@opt@DVItrue \fi \pdfoutput\z@ \else \ifnum\pdfoutput<\@ne \MT@opt@DVItrue \fi \pdfoutput\@ne \fi } \MT@def@bool@opt{defersetup}{% \csname if\@tempa\endcsname \else \AtEndOfPackage{% \MT@setup@ \let\MT@setup@\@empty \let\MT@addto@setup\@firstofone }% \fi } \MT@requires@pdftex7{ \MT@def@bool@opt{copyfonts}{% \csname if\@tempa\endcsname \MT@glet\MT@copy@font\MT@copy@font@ \else \MT@glet\MT@copy@font\relax \fi } }{ \MT@def@bool@opt{copyfonts}{% \csname if\@tempa\endcsname \MT@error{The pdftex version you are using is too old\MessageBreak to use the `copyfonts' option}{Upgrade pdftex.}% \fi } } \MT@def@bool@opt{final}{% \csname if\@tempa\endcsname \MT@draftfalse \else \MT@drafttrue \fi } \define@key{MT}{verbose}[true]{% \let\MT@vinfo\MT@info@nl \def\@tempa{#1}% \MT@ifstreq\@tempa{true}\relax{% \MT@ifstreq\@tempa{errors}{% \let\MT@warning \MT@warn@err \let\MT@warning@nl\MT@warn@err }{% \let\MT@vinfo\@gobble \MT@ifstreq\@tempa{silent}{% \let\MT@warning \MT@info \let\MT@warning@nl\MT@info@nl }{% \MT@ifstreq\@tempa{false}\relax{\MT@optwarn@admissible{#1}{verbose}}% }% }% }% } \MT@map@clist@n{% stretch,shrink,step,% letterspace}{% \define@key{MT}{#1}[\csname MT@#1@default\endcsname]{% \def\@tempa{##1 }% \MT@ifint\@tempa {\MT@edef@n{MT@#1}{\@tempa}}% {\MT@optwarn@nan{##1}{#1}}% }% } \define@key{MT}{factor}[\MT@factor@default]{% \def\@tempa{#1 }% \MT@ifint\@tempa {\edef\MT@pr@factor{\@tempa}} {\MT@optwarn@nan{#1}{factor}}% } \define@key{MT}{unit}[character]{% \def\@tempa{#1}% \MT@ifstreq\@tempa{character}\relax{% \MT@ifdimen\@tempa {\let\MT@pr@unit\@tempa}% {\MT@warning@nl{`\@tempa' is not a dimension.\MessageBreak Ignoring it and setting values relative to\MessageBreak character widths}}% }% } \MT@protrusiontrue \ifnum\pdfoutput<\@ne \else \MT@requires@pdftex4{ \MT@expansiontrue \MT@autotrue }\relax \fi \define@key{MT}{config}[]{\relax} \def\MT@get@config#1config=#2,#3\@nil{% \MT@ifempty{#2}% {\def\MT@config@file{\MT@MT.cfg}}% {\def\MT@config@file{#2.cfg}}% } \expandafter\expandafter\expandafter\MT@get@config \csname opt@\@currname.\@currext\endcsname,config=,\@nil \IfFileExists{\MT@config@file}{% \MT@info@nl{Loading configuration file \MT@config@file}% \MT@begin@catcodes \let\MT@begin@catcodes\relax \let\MT@end@catcodes\relax \let\MT@curr@file\MT@config@file \input{\MT@config@file}% \endgroup }{\MT@warning@nl{% Could not find configuration file `\MT@config@file'!\MessageBreak This will almost certainly cause undesired results.\MessageBreak Please fix your installation}% } \MT@map@clist@c\MT@features{% \MT@ifdefined@n@TF{MT@default@#1@set}\relax {\MT@gdef@n{MT@default@#1@set}{all}}% } \def\MT@check@active@set#1{% \MT@ifdefined@n@TF{MT@#1@setname}{% \MT@info@nl{Using \@nameuse{MT@abbr@#1} set `\@nameuse{MT@#1@setname}'}% }{% \MT@glet@nn{MT@#1@setname}{MT@default@#1@set}% \MT@info@nl{Using default \@nameuse{MT@abbr@#1} set `\@nameuse{MT@#1@setname}'}% }% } \MT@ifdefined@c@T\MicroType@Hook{\MT@warning{% Command \string\MicroType@Hook\space is deprecated.\MessageBreak Use \string\Microtype@Hook\space instead}\MicroType@Hook} \MT@ifdefined@c@T\Microtype@Hook\Microtype@Hook \def\microtypesetup{\setkeys{MT}} \MT@addto@setup{\def\microtypesetup{\setkeys{MTX}}} \def\MT@define@optionX#1#2{% \define@key{MTX}{#1}[true]{% \edef\@tempb{\csname MT@rbba@#1\endcsname}% \MT@map@clist@n{##1}{% \KV@@sp@def\MT@val{####1}% \MT@ifempty\MT@val\relax{% \@tempcnta=\m@ne \MT@ifstreq\MT@val{true}{% \MT@checksetup{#1}{% \@tempcnta=\csname MT@\@tempb @level\endcsname \MT@info{Enabling #1 (level \number\csname MT@\@tempb @level\endcsname)}% }% }{% \MT@ifstreq\MT@val{false}{% \@tempcnta=\z@ \MT@info{Disabling #1}% }{% \MT@ifstreq\MT@val{compatibility}{% \MT@checksetup{#1}{% \@tempcnta=\@ne \MT@let@nc{MT@\@tempb @level}\@ne \MT@info{Setting #1 to level 1}% }% }{% \MT@ifstreq\MT@val{nocompatibility}{% \MT@checksetup{#1}{% \@tempcnta=\tw@ \MT@let@nc{MT@\@tempb @level}\tw@ \MT@info{Setting #1 to level 2}% }% }{\MT@error{Value `\MT@val' for key `#1' not recognised} {Use any of `true', `false', `compatibility' or `nocompatibility'.}% }% }% }% }% \ifnum\@tempcnta>\m@ne #2\@tempcnta\relax \fi }% }% }% } \def\MT@checksetup#1{% \csname ifMT@#1\endcsname \expandafter\@firstofone \else \MT@error{You cannot enable #1 if it was disabled\MessageBreak in the package options}{Load microtype with #1 enabled.}% \expandafter\@gobble \fi } \MT@define@optionX{protrusion}\pdfprotrudechars \MT@define@optionX{expansion}\pdfadjustspacing \MT@requires@pdftex6{ \def\MT@define@optionX@#1#2{% \define@key{MTX}{#1}[true]{% \MT@map@clist@n{##1}{% \KV@@sp@def\MT@val{####1}% \MT@ifempty\MT@val\relax{% \@tempcnta=\m@ne \MT@ifstreq\MT@val{true}{% \MT@checksetup{#1}{% \@tempcnta=\@ne \MT@info{Enabling #1}% }% }{% \MT@ifstreq\MT@val{false}{% \@tempcnta=\z@ \MT@info{Disabling #1}% }{\MT@error{Value `\MT@val' for key `#1' not recognised} {Use either `true' or `false'}% }% }% \ifnum\@tempcnta>\m@ne #2\relax \fi }% }% }% } \MT@define@optionX@{tracking}{\ifnum\@tempcnta=\z@ \let\MT@tracking\relax \else\let\MT@tracking\MT@tracking@\fi} \MT@define@optionX@{spacing}{\pdfadjustinterwordglue\@tempcnta} \MT@define@optionX@{kerning}{\pdfprependkern\@tempcnta \pdfappendkern \@tempcnta} \@gobble }\@firstofone {\define@key{MTX}{tracking}[true]{\MT@warning{Ignoring tracking setup}} \define@key{MTX}{kerning}[true]{\MT@warning{Ignoring kerning setup}} \define@key{MTX}{spacing}[true]{\MT@warning{Ignoring spacing setup}} } \define@key{MTX}{activate}[true]{% \setkeys{MTX}{protrusion={#1}}% \setkeys{MTX}{expansion={#1}}% } \let\MT@saved@setupfont\MT@setupfont \define@key{MTX}{disable}[]{% \MT@info{Inactivate `\MT@MT' package}% \let\MT@setupfont\relax } \define@key{MTX}{enable}[]{% \MT@info{Reactivate `\MT@MT' package}% \let\MT@setupfont\MT@saved@setupfont } \def\MT@ProcessOptionsWithKV#1{% \let\@tempc\relax \let\MT@temp\@empty \MT@map@clist@c\@classoptionslist{% \def\CurrentOption{##1}% \MT@ifdefined@n@T{KV@#1@\expandafter\MT@getkey\CurrentOption=\@nil}{% \edef\MT@temp{\MT@temp,\CurrentOption,}% \@expandtwoargs\@removeelement\CurrentOption \@unusedoptionlist\@unusedoptionlist }% }% \edef\MT@temp{\noexpand\setkeys{#1}% {\MT@temp\@ptionlist{\@currname.\@currext}}}% \MT@temp \MT@clear@options } \def\MT@getkey#1=#2\@nil{#1} \MT@ProcessOptionsWithKV{MT} \MT@addto@setup{% \ifMT@draft \MT@warning@nl{`draft' option active.\MessageBreak Disabling all micro-typographic extensions.\MessageBreak This might lead to different line and page breaks} \let\MT@setupfont\relax \renewcommand*\LoadMicrotypeFile[1]{} \renewcommand*\microtypesetup[1]{} \renewcommand*\microtypecontext[1]{} \renewcommand*\lsstyle{} \else \ifnum\pdfoutput<\@ne \ifMT@opt@expansion \else \MT@expansionfalse \fi \fi \MT@info@nl{Generating \ifnum\pdfoutput<\@ne DVI \else PDF \fi output% \ifMT@opt@DVI\space (changed by \MT@MT)\fi}% \MT@map@tlist@c\MT@font@sets\MT@fix@font@set \ifMT@protrusion \edef\MT@active@features{\MT@active@features,pr} \pdfprotrudechars\MT@pr@level \MT@info@nl{Character protrusion enabled (level \number\MT@pr@level)% \ifnum\MT@pr@factor=\MT@factor@default \else,\MessageBreak factor: \number\MT@pr@factor\fi \ifx\MT@pr@unit\@empty \else,\MessageBreak unit: \MT@pr@unit\fi} \MT@check@active@set{pr} \else \let\MT@protrusion\relax \MT@info@nl{No character protrusion} \fi \ifMT@expansion \ifnum\MT@stretch=\m@ne \let\MT@stretch\MT@stretch@default \fi \ifnum\MT@shrink=\m@ne \let\MT@shrink\MT@stretch \fi \ifnum\MT@step=\m@ne \ifnum\MT@stretch>\MT@shrink \ifnum\MT@shrink=\z@ \@tempcnta=\MT@stretch \else \@tempcnta=\MT@shrink \fi \else \ifnum\MT@stretch=\z@ \@tempcnta=\MT@shrink \else \@tempcnta=\MT@stretch \fi \fi \divide\@tempcnta 5\relax \else \@tempcnta=\MT@step \ifnum\@tempcnta=\z@ \MT@warning@nl{The expansion step cannot be set to zero.\MessageBreak Setting it to one} \fi \fi \ifnum\@tempcnta=\z@ \@tempcnta=\@ne \fi \edef\MT@step{\number\@tempcnta\space} \let\MT@auto\@empty \ifMT@auto \MT@requires@pdftex4{% \ifnum\pdfoutput<\@ne \ifMT@opt@auto \MT@error{% Automatic font expansion only works for PDF output.\MessageBreak However, you are creating a DVI file} {If you have created expanded fonts instances, remove `auto' from% \MessageBreak the package options. Otherwise, you have to switch off expansion\MessageBreak completely.} \fi \MT@autofalse \else \def\MT@auto{autoexpand} \fi }{% \MT@error{% The pdftex version you are using is too old for\MessageBreak automatic font expansion}% {If you have created expanded fonts instances, remove `auto' from\MessageBreak the package options. Otherwise, you have to switch off expansion\MessageBreak completely, or upgrade pdftex to version 1.20 or newer.} \MT@autofalse \def\MT@auto{1000 } } \else \MT@requires@pdftex4\relax{ \def\MT@auto{1000 } } \fi \ifMT@selected \let\MT@set@ex@codes\MT@set@ex@codes@s \else \let\MT@set@ex@codes\MT@set@ex@codes@n \fi \ifnum\MT@stretch=\z@ \ifnum\MT@shrink=\z@ \MT@warning@nl{% Both the stretch and shrink limit are set to zero.\MessageBreak Disabling font expansion} \MT@expansionfalse \fi \fi \fi \ifMT@expansion \edef\MT@active@features{\MT@active@features,ex}% \pdfadjustspacing\MT@ex@level \MT@info@nl{\ifMT@auto A\else Non-a\fi utomatic font expansion enabled (level \number\MT@ex@level),\MessageBreak stretch: \number\MT@stretch, shrink: \number\MT@shrink, step: \number\MT@step, \ifMT@selected\else non-\fi selected% \ifx\MT@copy@font\relax\else .\MessageBreak Using font copies for contexts\fi} \def\MT@check@step#1{% \@tempcnta=\csname MT@#1\endcsname \divide\@tempcnta \MT@step \multiply\@tempcnta \MT@step \ifnum\@tempcnta=\csname MT@#1\endcsname\else \MT@warning@nl{The #1 amount is not a multiple of step.\MessageBreak The effective maximum #1 is \the\@tempcnta\space (step \number\MT@step)} \fi } \MT@check@step{stretch} \MT@check@step{shrink} \MT@check@active@set{ex} \CheckCommand*\showhyphens[1]{\setbox0\vbox{% \color@begingroup\everypar{}\parfillskip\z@skip \hsize\maxdimen\normalfont\pretolerance\m@ne\tolerance\m@ne \hbadness\z@\showboxdepth\z@\ #1\color@endgroup}} \gdef\showhyphens#1{\setbox0\vbox{% \color@begingroup\pdfadjustspacing\z@\everypar{}\parfillskip\z@skip \hsize\maxdimen\normalfont\pretolerance\m@ne\tolerance\m@ne \hbadness\z@\showboxdepth\z@\ #1\color@endgroup}} \else \let\MT@expansion\relax \MT@info@nl{No font expansion} \fi } \MT@requires@pdftex6{ \MT@addto@setup{% \ifMT@tracking \edef\MT@active@features{\MT@active@features,tr} \MT@info@nl{Tracking enabled} \MT@check@active@set{tr} \ifMT@protrusion\else\pdfprotrudechars\@ne\fi \else \let\MT@tracking\relax \MT@info@nl{No tracking} \fi \ifMT@spacing \edef\MT@active@features{\MT@active@features,sp} \pdfadjustinterwordglue\@ne \MT@info@nl{Adjustment of interword spacing enabled} \MT@check@active@set{sp} \else \let\MT@spacing\relax \MT@info@nl{No adjustment of interword spacing} \fi \ifMT@kerning \edef\MT@active@features{\MT@active@features,kn} \pdfprependkern\@ne \pdfappendkern\@ne \MT@info@nl{Adjustment of character kerning enabled} \MT@check@active@set{kn} \else \let\MT@kerning\relax \MT@info@nl{No adjustment of character kerning} \fi \ifnum\pdfoutput<\@ne \def\MT@warn@tracking@DVI{% \MT@warning@nl{% You are using tracking/letterspacing in DVI mode.\MessageBreak This will probably not work, unless the post-\MessageBreak processing program (dvips, dvipdfm(x), ...) is\MessageBreak able to create the virtual fonts on the fly}% \MT@glet\MT@warn@tracking@DVI\relax } \else \def\MT@warn@tracking@DVI{% \ifnum\pdfprotrudechars<\@ne \global\pdfprotrudechars\@ne \fi \MT@glet\MT@warn@tracking@DVI\relax } \fi \ifnum\MT@letterspace=\m@ne \let\MT@letterspace\MT@letterspace@default \else \MT@ls@too@large\MT@letterspace \fi } }{ \MT@addto@setup{% \ifMT@tracking \MT@error{Tracking only works with pdftex version 1.40\MessageBreak or newer. Switching it off}{Upgrade pdftex.}% \else \MT@info@nl{No tracking (pdftex too old)} \fi \ifMT@spacing \MT@error{Adjustment of interword spacing only works with\MessageBreak pdftex version 1.40 or newer. Switching it off}{Upgrade pdftex.}% \else \MT@info@nl{No adjustment of interword spacing (pdftex too old)} \fi \ifMT@kerning \MT@error{Character kerning only works with\MessageBreak pdftex version 1.40 or newer. Switching it off}{Upgrade pdftex.}% \else \MT@info@nl{No adjustment of character kerning (pdftex too old)} \fi } } \MT@requires@pdftex6{ \AtBeginDocument{% \ifMT@spacing \ifMT@babel \else \ifnum\sfcode`\. > 1500 \MT@ifstreq\MT@sp@context{nonfrench}\relax{% \MT@warning@nl{% \string\nonfrenchspacing\space is active. Adjustment of\MessageBreak interword spacing will disable it. You might want\MessageBreak to add `\@backslashchar\MT@MT context{spacing=nonfrench}'\MessageBreak to your preamble}% }% \fi \fi \fi } }\relax \MT@requires@pdftex5{ \MT@addto@setup{% \ifMT@noligatures \else \let\MT@noligatures\relax \fi } }\relax \MT@addto@setup{% \ifx\MT@active@features\@empty \else \edef\MT@active@features{\expandafter\@gobble\MT@active@features} \fi \MT@documenttrue } \def\MT@set@babel@context#1{% \MT@ifdefined@n@TF{MT@babel@#1}{% \MT@vinfo{*** Changing to language context `#1'\MessageBreak\on@line}% \expandafter\MT@exp@one@n\expandafter\microtypecontext \csname MT@babel@#1\endcsname }{% \microtypecontext{protrusion=,expansion=,spacing=,kerning=}% }% } \@ifpackageloaded{babel}{ \def\MT@shorthandoff#1#2{% \MT@info@nl{Switching off #1 babel's active characters (#2)}% \shorthandoff{#2}} }{ \def\MT@shorthandoff#1#2{% \MT@error{You must load `babel' before `\MT@MT'} {Otherwise, `\MT@MT' cannot switch off #1 babel's\MessageBreak active characters.}} } \MT@addto@setup{% \ifMT@babel \@ifpackageloaded{babel}{% \MT@info@nl{Redefining babel's language switching commands} \let\MT@orig@select@language\select@language \def\select@language#1{% \MT@orig@select@language{#1}% \MT@set@babel@context{#1}% } \let\MT@orig@foreign@language\foreign@language \def\foreign@language#1{% \MT@orig@foreign@language{#1}% \MT@set@babel@context{#1}% } \ifMT@kerning \MT@if@false \MT@with@babel@and@T{french} \MT@if@true \MT@with@babel@and@T{frenchb} \MT@if@true \MT@with@babel@and@T{francais}\MT@if@true \MT@with@babel@and@T{canadien}\MT@if@true \MT@with@babel@and@T{acadian} \MT@if@true \ifMT@if@\MT@shorthandoff{French}{:;!?}\fi \MT@if@false \MT@with@babel@and@T{turkish} \MT@if@true \ifMT@if@\MT@shorthandoff{Turkish}{:!=}\fi \fi \MT@set@babel@context\languagename }{% \MT@warning@nl{You did not load the babel package.\MessageBreak The `babel' option won't have any effect} } \fi } \MT@addto@setup\fi \AtBeginDocument\selectfont \edef\MT@curr@file{\jobname.tex} \MT@restore@catcodes \endinput %% %% End of file `microtype.sty'. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/doc/Makefile.am�������������������������������������������������������������������������0000644�0001750�0001750�00000007212�12116077755�013666� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## TODO: make variable names POSIX-compliant in rivet-manual.pdf target! dist_noinst_SCRIPTS = mk-analysis-html mk-analysis-latex DOCSOURCES = compare-histos.txt heppennames.sty warning.png thinker.png cone.png \ h-physrev3.bst hepnames.sty JHEP3.cls bend.png hepnicenames.sty JHEP.bst \ make-plots.txt rivet-manual.tex preamble.tex hepparticles.sty maybemath.sty \ rivet-manual.pdf hepunits.sty underscore.sty microtype.sty ## TODO: replace readplot with lighthisto/YODA functionality EXTRA_DIST = $(DOCSOURCES) readplot.py if WITH_ASCIIDOC EXTRA_DIST += compare-histos.html make-plots.html endif DOCS = if ENABLE_PYEXT DOCS += analyses.html analyses.html: $(top_srcdir)/src/Analyses mk-analysis-html LD_LIBRARY_PATH=$(top_srcdir)/src/.libs:$(top_srcdir)/src/Tools/yaml-cpp/.libs:$(FASTJETLIBPATH):$(HEPMCLIBPATH):$(LD_LIBRARY_PATH):$(prefix)/lib \ DYLD_LIBRARY_PATH=$(top_srcdir)/src/.libs:$(top_srcdir)/src/Tools/yaml-cpp/.libs:$(FASTJETLIBPATH):$(HEPMCLIBPATH):$(DYLD_LIBRARY_PATH):$(prefix)/lib \ RIVET_INFO_PATH=$(top_srcdir)/data/anainfo \ PYTHONPATH=$(top_srcdir)/pyext:$(PYTHONPATH) \ $(PYTHON) mk-analysis-html analyses.html endif if ENABLE_PDFMANUAL if WITH_PDFLATEX DOCS += rivet-manual.pdf EXTRA_DIST += analyses.tex analyses.bib refs.bib if ENABLE_PYEXT analyses.bib analyses.tex: $(top_srcdir)/src/Analyses $(top_srcdir)/data/plotinfo $(top_srcdir)/data/anainfo mk-analysis-latex LD_LIBRARY_PATH=$(top_srcdir)/src/.libs:$(FASTJETLIBPATH):$(HEPMCLIBPATH):$(LD_LIBRARY_PATH) \ DYLD_LIBRARY_PATH=$(top_srcdir)/src/.libs:$(FASTJETLIBPATH):$(HEPMCLIBPATH):$(DYLD_LIBRARY_PATH) \ RIVET_INFO_PATH=$(top_srcdir)/data/anainfo \ $(PYTHON) mk-analysis-latex else analyses.bib analyses.tex: > analyses.tex > analyses.bib endif #LATEX = pdflatex LATEX = pdflatex --interaction=nonstopmode BIBTEX = bibtex MAKEINDEX = makeindex RERUN = "(There were undefined references|Rerun to get (cross-references|the bars) right)" RERUNBIB = "No file.*\.bbl|Citation.*undefined" MAKEIDX = "^[^%]*\\makeindex" RM = rm -f DOCNAME = rivet-manual $(DOCNAME).pdf : $(DOCNAME).tex preamble.tex analyses.tex refs.bib analyses.bib $(LATEX) $<; true egrep $(MAKEIDX) $< && ($(MAKEINDEX) $(DOCNAME) && cp $(DOCNAME).toc $(DOCNAME).toc.bak && $(LATEX) $<) > /dev/null; true egrep -c $(RERUNBIB) $(DOCNAME).log && ($(BIBTEX) $(DOCNAME) && cp $(DOCNAME).toc $(DOCNAME).toc.bak && $(LATEX) $<); true for i in `seq 5`; do if egrep $(RERUN) $(DOCNAME).log; then echo "LaTeX re-run $i"; cp $(DOCNAME).toc $(DOCNAME).toc.bak; $(LATEX) $<; else break; fi; done; true if cmp -s $(DOCNAME).toc $(DOCNAME).toc.bak; then true; else $(LATEX) $<; true; fi $(RM) $(DOCNAME).toc.bak; true endif endif if WITH_ASCIIDOC DOCS += compare-histos.html make-plots.html compare-histos.html: compare-histos.txt asciidoc -a toc compare-histos.txt make-plots.html: make-plots.txt asciidoc -a toc make-plots.txt endif ################ .PHONY = all doc upload arxivtar #all: # @echo "Default make rule does nothing: use 'make doc'" doc: $(DOCS) @true ## TODO: Put Rivet version string in PDF filename for upload? RSH=rsync DEST=login.hepforge.org:rivet/public_html/ upload: $(DOCS) $(RSH) $? $(DEST) arxivtar: $(DOCSOURCES) rivet-manual.bbl for i in *.png; do convert $$i $${i/.png/.eps}; done tar czf rivet-manual.tar.gz \ rivet-manual.tex preamble.tex analyses.tex rivetversion.sty rivet-manual.bbl \ hepnames.sty hepnicenames.sty hepparticles.sty heppennames.sty hepunits.sty maybemath.sty microtype.sty underscore.sty \ bend.eps cone.eps thinker.eps warning.eps \ h-physrev3.bst JHEP3.cls JHEP.bst mostlyclean-local: rm -rf *.aux *.log *.toc clean-local: rm -rf $(DOCS) ## Install! pkgdata_DATA = $(DOCS) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/doc/compare-histos.txt������������������������������������������������������������������0000644�0001750�0001750�00000001254�12116077755�015330� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������compare-histos ============== About ----- `compare-histos` is a small script which reads two or more AIDA XML files and creates comparison plots of the histograms in the AIDA files. The plots are saved in `.dat` files in the input format of link:make_plot.html[`make_plot.py`]. To create PostScript or PDF file from the `.dat` files, you need to run link:make-plots.html[`make-plots`]. Usage ----- To run `compare-histos` call -------------------- compare-histos [options] [REF:'Expt data'] aidafile1:'label 1' [path/to/aidafile2:label2 ...] -------------------- All available options can be listed by running -------------------- compare-histos --help -------------------- ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/doc/thinker.png�������������������������������������������������������������������������0000644�0001750�0001750�00000076405�12116077755�014016� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR������È���^\%��� pHYs���d���d�–ÅÝ���FtEXtRaw profile type APP12� APP12 15 4475636b79000100040000001e0000 æÿ(��� vpAg������È�ùFB��{¥IDATxÚíýgœçuæ?sÎazzr ƒÈ‚I IY–¼ZYeÙ^Ë.»Ö[åõz½µÖ®kË.oÙe{]vYkK+É+‰V %& Ò €Á`rèžé™Î9Ç÷ÃÏx ¦‚E `ø¿ÛX(pÐÓýœû>á:׹ޤÓéïâKüu‰äÝü½ÿßxIßëðÿ^ïàõÿ¬õAzIÞOøC~Ëÿs‰?úëÝ»[NçûÚì]œè×·–h ©T*•Jï½IÿïV½Ó—ü>¾—h˜v»%$‰D"áV …v»­R©T*• Ífû‰ÿ–~¯Èûúu?­Å ›I¥ÒN§S­VÃáðææf6›ít:ÅbQ£Ñôôô`9›Í M&¦z¯Åàu?³Œv»-‚T*m4‚ lnn^¼xñêÕ«­V«P(èõz£Ñ¨Õjív{¹\V*•FÃáplß¾½··W¡P¼×âðºoÖïG<Ïd2³³³«««sss•JE¥Réõze2™ßïo6›F£Óé¤R)—Ë•Ëå¶lÙ2<<ÜÝÝ-Þ°ÿwÕ¾ïëþxB"SµZ=wîÜ7´Zm"‘‡Ãõz]©Tv:µZ-‘HÌf³ ÍfS¯×g³Ylæv»/_¾\.—[­VOOÉÞÍG­V«)Š÷äüˆ¯ûs·ø¶_ýêWgggkµ“J¥A(‹v»½¿¿¿Õjy½^£Ñ¨P(ð™©Têüùóãããõz½ÕjõööÚíö}ûö½ûaŒßø¶Äç}øú1ï–ø@;N«Õ’Éd7nÜ( »vízùå—[­–ÇãF£étºÝnK¥R­VëñxÚív§ÓÑh4\¸¾¾¾X,æõzçççëõºL&³Ûí}}}üþû.<¾‹\~ÿs®ûû’}ö³Ÿ}Gÿ€k!~Ãv»-—˯^½úꫯvuu…Ãáõõu©TZ*•d2ÙÆÆF§ÓQ(õz]§ÓI$J®|>¯T*õz}"‘ÐëõÅbQ.—ollÄb±P(äñxÌf³äîëÝyív›»õ~™ïøäòeDw'“ɉą t:N§ …BR©T£ÑÈd²t:N§=ÕjµX,n·»ÓéÈår‹Å²sçN—ËU«Õ¶mÛÖÓÓ£R©äry0T©T ç΋F£ïòSû@T{ïìî“M´ÛíV«…O“ÉdóóóÙlÖétJ¥ÒP(¤R©°D"‘°Z­‡£Z­:Â’N§“J¥ù|~aa!N»\®v»B¡R©ôûýJ¥2—ËÍÏÏFƒÁ Ü-àô£”H$ïOøŽ?¾B¥RµÛm™L¶´´tþüyæêêªR©ôù| …Âh4êtºv»m4M&“×ë5™L‹¥P(hµÚ›7oޝ®®Þºu«V«…B!ÌÓjµ”Je©TJ§ÓJ¥R©T‚†¼ÿþ»ðzgžP„‘€*$Éääd>Ÿ/—ËV«5—Ë•ËåjµšÏçkµšR©t:‡C*•ªT*“ɤP(âñ¸D"©T*N§sçλwïîëëK$[¶lÉd2ét:‰\¾|Y©T^ºt)‹q8~"üÿo¯'nñ¥Ri«Õ*•JJ¥R„v»J¥¼^¯ d ÝÝÝ2™¬V«Y­V‰D¢ÕjËå²Åb …B"x±oß>¿ß¯P(öïßèС;wž8qB"‘œ<yR„‰‰‰ÉÉÉT*%“É~r›ñoñäPÛÿøžZ&“‹Å………H$¢R©‰D¹\6›Í¹\Îáp‚P©T´Z­F£Ñét^¯W¡Pd2µZ].—Fc4- W¯^ݹsg­V#îÛ·ïàÁƒñ‘ÏçÕjõ?ýÓ?õõõÑÑQ•Ju/ßjµ84?Ä0¢ÿÍ#þ¯{=Ä…ðÕ[KKKÙl–Üwaa¡V«I¥Òz½žÏçU*•B¡P*•¦Z­‚eÈåòB¡ V«777ÉM‰„ÍfS*•ÑhtnnN«ÕúýþB¡àóùVWWý~«ÕJ$gΜٱcÇÏýÜÏñVbÞqoHÿR¼‚¢1î5ƒøOø±{ÿð^ÛâAZK„jµZ,±V*•2›Í‹¥Ùl&“I•J•ËåÌfs:–J¥~¿?•JmnnÆv»m2™öíÛ'—ËE\#‹ —Ë%—ËK¥ÒÑ£G‰Ä7¿ùM«ÕzæÌ™N§³ººú•¯|e```ûöí¢Z­àÖ½u’˜‹7›Mb$ K©TÁh4Êd2™LFvZ­V5D"y[yï¡|¯mô[‹ï°¸¸(‘HŠÅb«Õ2™LµZ-›Íæóy­V[­Vãñ¸Z­6›Íçïÿþï———>,&Ê.—K¥Ró†Åb1333kkkƒ!NŽŽ®¬¬üæoþ¦Õjý•_ù•L&ó¥/}ÉívƒÁ}ûöY,•J¥V«­Vk©TZ]]­×ëÅbQ„l6Ûjµ’É$9j"‘(‹|«ÕªÓéè±Y­V©TZ«ÕšÍæøøøÖ­[¿o\|_ì'ª0êõºT*U(‰„¬A&“ ½^_.—q†n·{dd$ŸÏ?óÌ3«««©TÊétÎÎξùæ›r¹|×®]½½½ƒA­V»Ýn¹\žÍf———ƒÁ`2™´Z­/¼ðÂÊÊÊÄÄÄ#<rãÆ •Jµ¼¼¼¾¾^*•FOOO»Ý®Õj©TŠ\”«I;´Õj9Nâk£ÑÈd2óóó6› D§Ó­­­U«U¥R¹¶¶‡ív{OOÝncáû 3ü‘¬õ½õ)^§ÓÉårÕju÷îÝ&“iaadïêÕ«‹Åáp”ËeF‰DFGGgffd2ÙäääÅ‹óù<åÚ¾ð¹\þôÓOïÚµkppÐív‹ÅhµZ½^ÿ×ý×ápxß¾}+++gÏžÅ0V«Õëõ¦R©B¡N§³Ùl±XÄ•i4A‚Á`¡PÐét6›M*•V*›Í–H$A0›Í@`pp°Ùl...¦R)ºkz½þÊ•+V«5•JÙív—Ëåv»ÕjµðA¼["lñ¶þV¤€%8ùýþsçÎÉd2£ÑØjµ´ZíÕ«Wý~ÿÚÚZ<Ÿ››[__¯T* ¶$u±Xìÿðý~ÿààà¯ÿú¯ÆãñJ¥ræÌ™«W¯Öjµ—^ziÏž=ƒA§Ó™L¦;w&“É••“Éät:[­V£ÑP«Õáp¸Óéà ;ŽJ¥òù|¹\.—Ëi4½^o³Ù4Ùl^[[»|ùò³Ï>»mÛ6î.å`µZ]__‡ÃÁ`p``@¯×¿¯Ú¤?ªû¶.þáÖ­[ëëëÉd2ŸÏ¯¬¬H$’H$F»»»u:V«•H$@Àáp¼üòË¡P¨P(Èd²gžyœp``Àd2¥Ói’…ÅÅÅoûÛ•J%‹•Ëå?ÿó?¯V«R©Ôb±H$—ËU(A0™LÃÃËe~~þ¡‡zøá‡ Åøøx©Tª×ëg}}@dssS&“mݺµ\.‹E€’t: …<h³Ù®]»öÖ[oU*•`0È K§Ó‰D"•JÉåòv»­V« Åûä†ý¨qëÞ¢D|ƒÁV«%B¡PhµZËËËÍfS¥R`jµšV«  ë*•ªP(œ8qâ×ý×K¥Òää¤N§ët:&“irrr}}]„F£ñ¿þ×ÿ²Ûíù|þСCÇŽk6›:nee¥T*µZ-•JÅC&“u:ÙÙÙùùùÍÍMN·¹¹ÇwíÚ•H$Z­Öž={Þzë­h4Úét”Je³Ùœ™™i4¤9ÝÝÝ^¯÷[ßúV$Ù½{·Á`àlI¥Ò\.×jµŠÅb±XÉd]]]ïµ™Þ¡µ„ï©Ûíöèèh­VËçó¦Ùlv:²ÁL&C[¤ÕjMOO×ëu‡Ã¡Ñhž~úéO|âµZmsssss³X,.//[­Ö={ö´Z­¥¥%Îr6›ííí-•J¥R) .,, ...&“I“ÉD… —Ë%ÉÊÊŠÙlîêêj4N§óßøÆ+¯¼"—˵Zm£Ñ0›Íår9‘H¬¬¬Äb1™Lf³ÙÜnw<7 ¯¼òJ½^ïëëk4ëëëªÛ·oËåòb±1+‡ÃaƒÁ`2™~È£x×^︿%~ÜF£!•JÝn÷Õ«Wc±õo¡P ˜0 F£Ñï÷û|¾ýû÷ïÝ»·Z­*НýëÉd’Ô “ÉÀ�èt:Íf³ÙlZ,›Í&—ËNç›o¾ ÇEâ[4m·Û…B¡\. õ÷÷ƒå;Ür£ÑÐëõ™LÆb±h4šZ­¦ÑhpF£»»»X,æóyzÖ•JÅn· RÓµµ5±¢Ïf³2™L­V;Î÷òÇÌàÉ •JåñãÇårù_ýÕ_…B¡jµšÍf•J¥J¥Â« †íÛ·ûý~—Ë…ßÓëõ‚ Ær¹|æÌ™b±èr¹z{{ãñ8MKFÓÕÕU*•fffº»»{zz®]»f·ÛµZm>Ÿw¹\�<GªZ“ɤR©òù|___WW—L&+ ÕjÕét®¬¬Ðh·ÛÑhÔ`0$ �h…Ba6›Ýn·Ýn·ÛíÕj5N ‚P*•pŒ­VkmmÍd2ù|>‡Ãñîôn~ÈëÇ¿[€v»ÝÓÓóüóÏg³Ù©©)hJ¥Òl6Ëår“Éäv»‡‡‡‰ð …B&“™L¦ÞÞÞN§óÚk¯%“I‹ÅbµZý~ÿÍ›7- ÷Òív÷ôôx½ÞÉÉÉ™™™f³Y, E«Õ²Ûíf³¹Ùl µÛm JAäry½^F£J¥2•JÆH$BB(B.—S*•´­¡ÑÁIJÙlƒaxxØï÷ëtºH$’Íf].W2™´Ûí€ ¤9˜ü=ì[þøÕ1Ÿ˜¯­P(žxâ‰/|á Ç`0ØíöX,¦×ëc±ØÜÜœì^¹rDŠB5•J5›ÍcÇŽ•J¥f³i·Ûé~år¹ A4M4t¹\@ÆNgcc#‘HhµZNqäÈ‘ÉÉÉ••·Á`Èf³•J…JY„v»Ýh4Àêêª\.O¥R¤ˆ£££=öH´Ïç!ŽŽ:U«Õ2 ÑhôÎ;n·{ppð½ï[·tccC&“e³ÙZ­†7ÛÜÜÄù¼üòËF­V'“ÉB¡�¶Ûl6}>_0ܺuk«Õºxñ¢F£áÿ ‚P,×××ý~ÿÎ;)й=•JE¥R5›ÍL&c2™âñ¸^¯ÇÆår¹ÝnSÏñþ‚ P&s/ƒ«Õj2™t:6›­§§#uÂôô4î]«ÕFFCË­ÑhD£Ñ[·nY,³Ùü÷á“Ü›L&‰D�?==‡©®R©T>Ÿ‡Ã—/_ŽF£2™Œ@.—:tèÓŸþôêêêææ¦Íf+‹µZÈÁ¤Ói‰D¢ÑhÊå2J‘‘˜Ïç«Õj¥R!£3›ÍµZîšR©„¼gÏH>‰D¢Z­nnnÒ¼¶Ûí~¿ßjµ †J¥’ÉdŠÅb.—S«Õr¹¼\.céZ­f0H¦ŠÅâââ¢x˜Þ«öØOj->7õÍÇ?þñb±Fãñx(*—Ëù|~×®]V«U¯×ŒŒ8½^¯R©<ÏÁƒ½^¯ßïÿÌg>S,c±X4Íçóœîf³‰Ã¬V«po¨·�œ�/¨jµšÑhܲe‹Õj]YY¡`ª×ë»víR(F¬™Ø–Íf ÅŽ;ôz½Ûí¶Z­ív;ŸÏÃÅ/ œ¤N§Ãi‹F£Åb‘L5‰„ÃaAàŽÛ¿k¯ŸÔŠýÀN§óë¿þëÏ>ûìÉ“'?÷¹ÏqZ …Óéìíí=wîœN§#•Ïçó7nÜhµZçÏŸ¯×ë¥Ricc#›Ír¢Ûí¶Åb¡ÏÒl6766FGG›Í¦Ùl®×ë±X¬ÝnÛíöR©¤R©Êå²Çã¡în·Ûñx¼Ñh,//uuuMOO7›Mj‰J¥BgÇápX­ÖJ¥â÷û-K8.‹½½½ô¾[­–Ùl‡Ã¹\Îívg³ÙT*Eã»Õj={Öét¿Ë칟ÔZb.+»@ƒƒƒƒƒƒ³³³/¿ü2Œ¥ÙÙÙŸû¹Ÿ£8ݽ{·N§[\\Ìf³ÑhteeåöíÛ<A®”J¥"H`*ò—R©$—Ëív{$©×ëjµš4!4 N7>>žÉd677µZí¹s纺ºzè¡jµšËåxá.Ô)ü¬ØétVVV�S”J% ¸rétšŒŸzy}}}fffttÎëê\?¸×ùËľ-ÞàÞü°Ó錌Œˆ«T*•J¥<Ïž={ôz=¾ÅívÉý~ J¥2™ŒÇG•#z­V …är¹^¯ßÜÜ$VÅãñf³FÝn·Åb1™LXëÊ•+™LfûöíF#™LF£Q…BÁ•dQ(‡ƒÏ,“ÉÈïkµZ£Ñ(—ËÀ¡r¹\§ÓÙív,MÕˆw•J¥.\¸råŠÈy7Mõã[«sÏëÞ¿—ËåNç#ùÈŽ;òù<C�o¼ñ¶L&“Íf³··w`` ¿¿ŸVž ëV«UAZ­V­Vët:Fƒ*­X,ÎÎÎBUo6›<ßjµ:??_­Vc±ØW¿úU¨̰,--%“ÉJ¥BûX.—W*ØÁ­VK£Ñ( ʃF£Ah2™h…7›ÍD"ÇacN Ün·Ãáð©S§666à“¿ËÖú1«ã6µTú¶OÌ%3 Ç_XX˜ŸŸgÞdïÞ½?þø×¾öµgŸ}ÖjµæóyØ»Døz½ÎØ$E’J¥âÔj5‰DB’‡É8`**•J0ÀÙÙÙ‰‰ ­VÛl6F#-7®`4…/m6›•Je½^·Z­‚ ( ›ÍFš×ÕÕå÷ûÉ9 …B.—+•JËË˵Zr;N—J%§ÓY¯×S©T½^ïíí¥yý.‡®ŸË¡Õj5›Mq‘.Q«Õôzý3Ï<S­VoÞ¼©Õj#‘ ¡\.ÿë¿þëjµúüóÏ+•Êçž{î#ùˆÅbYYY&ËåÍfŒN¥R}⟠#‘H²Ùl½^§Á/—Ëe2·!•JÑc«V«:N&“ÕëuŒ´²²Òét¬V«\.ÇØ°B OqL&¸l6KžÙl6©ÞðƼ?½Ír¹Üh4¶oß>22B´~7­ußrBñ…ÙèMüöoÿv¥Ryýõ×K¥ÒW¿úUNwúôéçž{Îb±( »ÝþGôGz½ž‹ž¼¿Ñh †ŸþéŸÞØØ˜™™éêêâASx1Zi±X, ³ÙlõzÝçó%“IFÉ€‚½Ùl†Ãa—ËÅ$Y§ÓaTü×jµj4š\.—H$Òét.—c¦V«Aô BóU&0(?�|³Ù¤ä„Œ&—Ë)Eæ—ÈÑ¿¡^¯¯Õj±X,›Íîܹóøñã­V륗^²ÙlV«õÂ… †ž …-‰™×ë}ã7fggÉÊ:i½˜=·ÛmæVêõºB¡Èf³Õjµ^¯ó7„IÂ^µZ¸‘ÉdñxœA½^OD&“ ÄW"S«ÕÊçó>Ÿ‚ßÇK¥’F£SâwÇ%¾3ka*AèAprIî}ñÑ in·ã…Ãáóoþ\.ÿßø <ÔŒñññùùùH$"—ËÕjµ^¯'ä@Hâ\ÓØ›L $°©&&&Ün7‘Ì»V«áͰD$áRÿ3©‹Åèw:r¹üꫯÎÌ̈ýnX7TøyÚ]˜Ê`0,..Þ¹sgûöíx…w-z½³¸%ÒªÉýd2ÙÛH�8z1€U«Õƒ^¹råæÍ›Á`puu5 Y,–ƒ ¹\þÜsÏ1o‚ƒÏä]£Ñ¨T*ÎÀé鹀ěL&˜÷©T Ò›ùƒÖÿF£ÑÐh4ƒò®ÕjU«UÚžwîÜ©V«t8ʸëR©´P(˜L&þP­Võz=tq¥R944¤Õj…w±‡òÎîÖ÷2,ï¥.“&ЉÀ1ªÕêh4Z*•ž{î¹C‡ÍÌÌ$“I…B‘N§Fc0¼~ýú?ýÓ?Æ]»vÅãq›Í¶²²’Ëå C½^Gƒ‹S($âF£ÙlÆãqA¼^/hˆÍfƒÇÁ1êêêº}û¶L&óù|dêÔs�¾&ÓI¡ÄÎf³¦X,nnnR*ˆ]µZN§¼¡V«Éd²P(´¸¸844ÄðÙ»“nüøS ?èÿ6 ‘D"I&“ôGd³Ù´Z-lÜ-[¶ÄãñÍÍMb†^¯?vìØÖ­[½^/Ýç\.G+„V¯Åbñx<‚ Øl¶®®.§Ó©ÓéHâi¸¸\®X,Öjµ²Ù,˜/E:5‘µÕjét:šÅÀT‰D‚™pµZ õÃn·óÃÃÃÃ$år¹\.3_+•J­V+I©TÊd²\.·°°@.y^÷¾L«Õ{›Íæ·¿ýíÅÅEµZÝÝÝ}íÚµ]»vðÈd²îînÜ]µZ5ÉdR­Vëtº;w*ŠK—.™Íf.VWWW>Ÿ·ÛíGŽ©×ë‘HäôéÓðf³¹²²R©TÌf3€ºD"Q«Õ•J….s¡PH$årYô¤f³™$B«ÕV*‡Z­®V«ÕjU¥RŒŒP_; V«ÕhKjµÚN§X¸›(~À¬%¦òbÎFÛžj÷á‡þÖ·¾5==MhQ©T@p!ò…B‘Ïç‰{öìñù|N§óÚµkf³yÏž=étÚçóÆíÛ·‡Ãáååe©Tj³ÙR©”Á`@ߦ^¯Cj»™î¹dC:N„b±ˆèÈårh¿ð\.ͳZ­Ö××—N§‹Å"´FS©T8ËËËÓÓÓ»wï&ù YK¸'†‘k4 æSM&S¹\†úY*•’ɤ ÍfsxxØçóq'¢Ñ¨Ùl>wî\&“Éd2£££GŽaxáìì¬p—…A§˜™¦³…Bˆ™hW©TÄlH*•RxXtuu…B!“É422¢V«/\¸À0§Ýn—Ëåf³™)w{*•bˆÎçÄÄÄþýû…»²UÂ&cß··æè‰È¡\.?þüåË—µZm0¬T*„q07ŸÏ×ÛÛ ¯ollL­V3äp8(¶r¹\>ŸóÍ7c±X©TÊf³ÝÝÝÙl¶¿¿ÿøñãL†étºõõõh4Ê@f½^¯×ë˜Adç¬Ã`õ2ÂÄC—Ëå6›M­VÃ-0›Í^¯×jµÚív²vî.oužÜ’Y*•–––"‘eÀ»ÐC¹ŸA4•B¡X\\ü?ÿçÿh4šd2yîÜ9ZÃR©4 v:ºÉäx‰D¢Óé‰Ä;w2™ CAT*ÕÁƒ=j2™@c¥Rioo/ <ž,ùw«Õ¥ÅHFC«ÕŠ=úÑÙln”^RÙ@ ÐÕÕ¥R©�ÿ”„ÄD©T‚8sY©Ã A”Ïù. ò÷ÍZaâ Ô¥K—n‹K$ð¡¡¡L&³¾¾žÏçõz=Sív»¯¯æ/` W$“Étuu8p NG£Ñ\.‰Dd2ÙG?úQèplÓé4T*¥¸–J¥ÌèõzJ"»Ý®V«¥R©Ñhd:ˆñu•J €ÛíF4 $ÐjµB©W*•"œFs‹ßN‹nr«ÕzÐyüýÏ A¤ªÕ*£v´zÁy)xõzý‹/¾ÈèU.—«T*¡PèñÇ·ÛíhãiµÚ rkÚ"`ítc±XOOL&‹F£>Ÿ®•Á`( A·Ûíb±È<Y£Ñ( 0;U*Ö¥šÖëõhy¸ÝnzÓT&qÉ)¤T*•ÅbÉd2Ü'ª=ór¹<‰¼úê«###üðu†÷ó,�Za¤Ói°p‡Ã‘H$‰ÄØØX½^?þü±cÇ~øa—ËÚd4§§§OŸ>Ïç'&& ¹çr¹x<ñèæÍ›W¯^=wîÜÂÂɺÍf´ÛíwîÜú‚ªV¯×y¦N1þ’é P](ý3½^¯T*!Œ¨T*·Ûâ&OϽóPG‰D‚ùó[[[£™÷àìÄë~Þ-ŠG¾X<Ù€¡Phii‰0>00P­V¯^½šÉd˜†ËårF£ñµ×^[[[»~ýºF£™ŸŸ‡BÛ×׉D`Ž}ä#1›Í·oß¶ÛíŸþô§ûûû¿øÅ/Öëuê\²J|u„ÜN§ãóùÔj5I|µZmµZO.—+•JrN£Ñˆ Íårx<\"ÜP¥Rɸt£Ñðx<dð$p2™ŒÛí®Õj Š�kq¸h¹Â ƒr¤P( ®>|¸V«Åãñjµ:<<l³Ù*•Êæææúúz:žšš²ÛíkkkL‰:tH¡PÀ xá…^xáˆi===z½Þn·ŒŒìÚµëìÙ³ÀwÐxï {´žéÃ1Íg6› …B__¦T*ÝØØ`˜S&“­¯¯÷ôô0DÞ„ñ‰„Á`€*Jvã÷û9ù|þòåË.—Ëh4>8S ÷7ƒÇ½ðÈÆÇÇ777Çææ&Ô­V;??Jd4ÀîÝ»»ººFFFL&S¡P`lKÒ<†D˜÷:qâiz(Û…=844Dý„=€*àbPƒÉ� ˜XÌeæ¿]*•DÓív#ƒ³²²Bóeppq£X,æóù@°âñ¸×륛\*•ŠÅâµk×r¹Tó€µAKAvìØ±’Ö"¾™™æ…766®\¹ríÚ5ðÜX,–Ëå@Ê9ïÃÃÃJ¥’¿Ñh$+ãAÈår²ƒÁ°mÛ6ø”Éüv‚ 7 ;“ý”äÐum6)F4ÝÜܤ³X,>Ÿ/¬¯¯ÃÀðô‘×××é§X­ÖP(”H$ÞÙ†õzýÁåñ÷?ãÄ õööz½^>: é¹¹9òCzƒ$‹¥§§è¯V«¹\®¹¹9Z!Ù5\.‡Ò[¯×¡rJ¥R»ÝþÔSOŽŽZ,p&ê4ŠÅ"DR2CŸÏ×ÓÓCdbM&“U*•µµ5´Þòù<¥ÅÔµZïât:³Ùìúú:ßÅáp¤ÓéW_}5‘H<иu?ë-ñÈ|B{"ØpÞa³À/S*•o¼ñÆÒÒÒÚÚÚÎ;777q¤2™L¯×ÃÌår$ô¡Phcc• š6ü_£ÑÈÐFKà( Aš¢äåÍf³¿¿Ü9 ‚€Nl.—ã‚–Ëe>Ÿ¯ÑhPMC!E<Àf³1£®T*ƒÁ ÿjvvviiéªRÝÏ»%Ž‘ã²†‡‡Ác„»³:@¹\njjêÔ©S¡P(›Í~ãßH§ÓäЭVËb±äóy(çγX,/^¼~ýz(êïd2™˜ _]]µÛíÙlfTQÒÊ#½^ÏW*•´@Q«Ìd2F£‘òÙårÕëu£Ñèv»£Ñ(šûöíc‚7¨T*———K¥®•#¸eË·ÛG6›Íd2o;»ï_kñ"ð´Ûí‡~¸§§'—Ë wAONz£ÑˆD"KKK###ÙlöÊ•+—/_–Éd¥R)PcNMMáÊÈ;ÈÈ#‘ÈÂÂB(Êçósss±XÌh4^½zõÆ6› >Z>Ÿ/‹…B"x Jä‡:ޱ”|>_*•ÈW™à#{œ™™‘J¥;vì!C§ZS¯×].×èè(ã0n·ö*’DÓa$ñõ@ôq†6›í§ú§÷wW©T* Ì@,¹´‹…An«ÕÊ´¨B¡èêêJ§Ó_ÿú×wïÞ=55ÅXÈ/p-UœÎ………D"±}ûv”‰ ‚½* ‹ÅBøîËår<Ùd2ÉÃõù|$î\DÜ]oooww÷w¾óœj£Ñèëë£É y„¤§§Ú=‘Òëõf2üÊâÕÜÿ»ÅG‡¸ñüóÏÓeÃË\M¹\^__7 ƒƒƒâÔw§Ówøð‡?¼wïÞ›7o®¬¬¤ÓiŠëååå™™™D"ÁÀ–J¥ÚØØ¨T*à°P—`)Ñ;fJ³ÑhÄb1ŒGk"éÊÊŠZ­¦ø-•J‘H„Q~àA8÷|‹ÑÑQ§ÓÉe ¯¡¡!2UzÓdC¤‹NQïA¡<z£ÑøÛ¿ýÛ ]3Ù; ˆQ†½{÷"¹Ífåryoo¯ßïߨØ8qâįýÚ¯y½Þr¹¼²²FX^^¦Ó˜N§!2`¢×ë,Äî; ƒ'*•Êh4Âð-‹7oÞ\]]”H$«««kkkétšY#²MÚ’ …¢»»{ppðÀ�ù0òÁ<£Ñh4M$ …éEFžTø [gRi£Ñ8pàÀÏþìÏâ÷ìv;›R©¤ÓéÊåòµk×Òé4]%¾³B¡Ø²e‹L&{íµ×<Ï'>ñ‰_üÅ_ìîîÞÜÜ\\\ääÆb±ÅÅÅ©©)Ì�Áj» ÀÁ¢B3³F¢ªüµZ­ ý~£Ñ¸yóf4‘¢E‚o�¤w¹\cccDP§`0X«ÕVVV2™ 3¸kkküqá×:y°?™Å§?ýé§žz*Ãs µZ‹Å(ž …‚8_¬Õj8‡Ïž=KT{î¹ç^|ñEx€©T*™Lž9s†ÛFõ †êŠ+g pYtY„4‰Db³ÙFFF(ž¢Ñ(JÚ”eļjµjµZ!°.--ݼy3“É ·W¼DƒÁ€ XWW—ؤÂ÷ïx?Z ¨Z­þßø-[¶ÌÏÏËd2ÈÉ`ä@y©TŠ¡D¯×ëõz›Í¦ÕjEP’âêêj£ÑضmƒŽ$ŠŒñ0÷Hue0È�ÀAí‚—ê•!"j^ptZŽ …‚á ÞA„z½¾¹¹™ÏçÑa}}ñ Z­’7ÂTä‹`2ø{_äV«þôOÿtÿþýTÁ4!qV  år9‰À€Èd2hh4šP(¬V+Ä7ôZ“É$h7¦"×ÏçóNÇápPTc°+çD*8ŸÄ¤¿¿;ÁdBLŒÏ�À;wJ¥3μ3EÄFCÇU&“}/mùƒd-‘ßét‚ÁàüÁ<ýôÓ°ÃÈÄè$¡,"²ò Ø a¶¼¼ …†††èöºÝn1ëËmˆ‚däŒ[AN"àƒ3Æ*ÿ6‘H x%›CƒÂ¨ÅbÁ£’§Äãñ\. …jµšZ­æúB5DèE(Ž&àäÛ^÷qìõÁZ‹ ØO£Ñp»Ý¿÷{¿÷»¿û»6›ì‹ö+c¿ñxüöíÛ:ŽÙd³Ù ¤û•¯|evv–)àõõu‡ÃAŒ! Ø0÷ O1À¤p½^/ @ìz½> ,`DB¡ׂòœâ;s)¹Öõz½»»[”)¸Ê¢Ü냦>ð»…÷û¥Riÿþý¿ù›¿Y­VAtè„uuu¡m±¸¸˼Z­ŽK¥Ò¡¡¡—_~™(h3x¿d2™Ëåb>…ßEµ¤×ëʼn[ªZ€W—Ë…R+X3<jµZ ¿J¸+ˆM¦Îk`` ··¨SÌCÅM€Ä[~ ­ÅªÕj Ü‚ 0§V«ÆO<qâÄ x™Édree… Ĭx>ŸgŽØd2uww³^ãK_ú’Ó餥R*•€Òkµ]ê$°®r¹,:FT¼Ôj5°T*Õj5J Qûè™ßÒh4ðº$±n·›í‰ Èä#8 \Y("‘ˆðƒ·Ï¾O­uïÄ?Іp— ù>ýéOãšW…J¶¸¸Øl6 òL6ƒÁp8ìñxªÕêw¿û]»ÝN]ʼnf@7ËiÀ­ñˆùíHÈF‡Ã1<<Œ$à!—´…ŒQlñh4·ÛMuˆ:?Éù GÀ7H=¾¹¹ù@IjÄZØ µ­VËPTçžUºív{xxø‘Ga£Cpb¡å Ãjµj·Ûs¹œßï/•JápX§ÓÁ»!èÕ�ÿÐ/&ít:Ì7öôôð"Á”œEÚl±X,Nƒ%2G+î‡hµZ‡ƒô’SÔRd%©TŠ&57>?ÐÐõ <!鬨$Œ‹†äÔŒŒÀAÕÊåòòò2ª€ÈŸ={);V Ý* ô"¡ôŠ;:D™†‘˜å¢Fv@ÍAFBˆóóó¼pÜI"x8nLZâr‘7¢ö‚Ñ.ŒØ,’Ì$OÈ‹pƒ¢‡s;zô¨ÛíæЗ‚4Á¤þz¢ …Âãñ¬®®â*‰Œ2QDqeȶ,Aܾ}{"‘€©h6›M&$P¨V«åóùb±ä5ÀYÊ&l@©À‡ä=é)“‘ ›Í&£c›››‰D≠÷ {‰²~â 9A�AÊ1tÖ!A‹‘lÚí0mëõúŽ;Äd:Oœ ¢ s«H2ìr¹Çàà`0Ôh4¥R) ­¬¬`­d2™H$’É$Ùëõöõõ±BƒÁàt:¹ÍÜZ¾‚(WÈY5>„&ÛõÀ÷ƒ‘¹‰ìIqÈœ”zË–-LÞc-†éQÓ élêÄãq¢ £A×®]c‡F½U©T¶mÛæóù ,j4«ÕÊDzWWרØ7Øï÷W*•·Þzë7ÞàrƒoY­Ö±±1�ÌX,·—Ñ.ä<¨…q}N§S.—Ì4M½^…B[¶ly@ó콊¨5ÉYÁ©# ~úé§_}õU~†12ŽT*ņÂL&Ãø)R(ÕjÕb±¸\®õõõ‡z¨V«-//3™ é%¤šÅÅE¸:^¯·»»Ûåry½Þþþ~‚ „B¡7ß|saaA„'žx¢»»;3EY©TØOÊê48†t: 8ÁK4Àÿù|>‰ú?ˆ†äý·–øaœá ÅÜš`FVðçÈȣ㸸˜&ŸÏwuuMNNÒga²¸»»Õ$n~ögöïþîïàÓëõúÁÁA2r§ÓY©Tt:Ýèèèã?`!®¯¯ƒg2»Ýn4].&¾b " …¨T*xN‡Ž ÇÍ�Dò8.ìT÷ÈæÝ÷gû 2xán9 _'Æ-ˆ•`ÇŽ£ HFÎõb– •¯R©„“-ÖÕÕÕ_|Ñf³•J¥îînÖ! jµZüñ_þå_þ·ÿößöõõ|Йd(¡R©ÌÏÏÇãñååå“'OÒ¥$ ÍÌÌpMAèîî6™LÔyt�Xá ÂÚÚz¢ú :ÍŽRø`ãõØìç…øìwäÈ‘Ï}îs´µ(œ)e`Ÿ1á!3ØEb¹³k×®øÃ.\0·’†8pàSŸú4^0-ÊXAÂáðôôôôôtµZíïï_^^¦x€4Ï)A¿R©T&“Iš±XL£ÑìÞ½»^¯ÓkÆä÷˜Ÿ‘Ö{e(>HÖúÞ± 4K¯æûŒ ÍÏÏ#Ä1Ôæóù<Ï;wD(cn•J…a,üêúú:I#‹N<ÏàààÞ½{S©S@©\.ߺu+•J]¼x6õÖ­[AÐQ«¾}û6?™Éd€3šÍæêê*ÒzPE^z饫W¯nÙ²…å+++¢à/õ”h”(0kÝ»áO3Äï‹{Â% ÕU£Ñðù|$Á؃ý^`•Jê9È,Ò“ívûOÿôO|ÓétÈP÷ôô ¤æp8l6’‘·oßž™™a=MÈ«Õúæ›ojµÚC‡mllpb*• ÅS>Ÿgjý~áÆÇÇÏž=ûû¿ÿûñ¡Ñh¾üå/ÏÎÎf2©TÊ6x,--]¸páÅ_¤ðA²–ä_.üÍ#'¥ò:B¡P(,ËÚÚZ&“A(œüBY±X4F£‘¡‰D¨$Š ~¿Ÿ&>;vì0™LÉdòÂ… o-‰|>ßôôt6›ýÌg>cµZ?ÿùϳø—VÈÈÀÀÀsÏ=×l6ÿò/ÿR*•þþïÿþÖ­[oß¾ýÕ¯~•Þ)•ÉÐÐZ­^YYbuáÂ…øÃ¤Žâsø�X LA,c¹ ´n!ÒÐáÕjµ6›‰+±¼¥Zk×ëõL`0¯×ËÒ:æ…N§ÙlÖjµ+++Ífó…^صk:ü§Nòz½£££ÑhôôéÓ³³³ X"ɱ¸¸ø¡}Èh4þÃ?üÃÌÌŒ×ëE/’i>>Éw¾ó·ÛýüóÏ?÷Üs6›í÷ÿ÷oÞ¼I5:::22‚êóää$ †3µÈ˜iÉÓÚGWpˆN.Öxýõ×D'…ºÌ`r­Vc,•Û‰Dè'ÑGf\Žù‘‡z蓟ü¤Ýn‹*•Jûöí³Z­333/¿üòââ"ÝjhÑh4Ïþó“““ü®b± AÛí¶ÙlÞ»w/ª*¯½öÚÙ³goÞ¼iµZ9Âèê¹sçîܹÃàª'Õj5_¹rå±Ç»ï¡ëà"¹ZÜcÆ(€H—À=ÒŒJ¥7nÜøÙŸýY©T ›LÌø=(…¢ÑhP e·†Åbq:ì§ãj?~üÙgŸÕét˜Šp»7ß|ýj¦ZM&Óàà äµùùùV«•Édø]jµÚçó™L¦ññqǃŒáéÓ§'&&ÌfóÐÐÐáÇѠ*•JSSS´ÿIU½�iŸüä'Oœ8A•yGdzZ¨ ØFÚ}€0™A ÷Ù¶mÛ™3gìv;êM¸P8¹ÕjY~µZ­V«á]—Ëe �ú÷ÔSO3LK³ÑhܺukccãÖ­[ápØh4†Ãa¢&p×ÔÔS2™ŒžH$!ÙÓëõù|þë_ÿz8æÐ|ö³Ÿíëë“ËåñxüÊ•+Œ/p,C&ûg÷‘ /r=á¹[¢Î“˜eˆ£pâÿ˜ËtúôéŸù™ŸA÷�8ÈÇëõвL*•J«ÕŠ u‹Å244äóùŽ;è'þºåå剉‰éééd2‰²h¬F£±ÛíæÆbŸ>}¡P±Z­‰DB*•öõõ¹ÝnzWr¹|nnnaaa}}Ö â’€È!ÌÁxÒÞ½{õWjÂ}Ì  'üÞ? w;ÈÂ=ºP8L©Tú;¿ó;û·˸M ‹Å¢×ëN'£WÚó¯×Ë�roo¯Èû, §Nºví2 ÈËY1t =‘d2™Íf±b0t»Ý,“B¿š%¯ñxœÂÙ.ëA�}F·L ÈПN§ûOÿé?±wàýn­òj6›XÜ;ìÅWŠÇãÇO¥Rlñûý‡ƒÖ ÎM.—G£Ñ­[·z<0{:aV«•Ç_ýõÛ·o3mÇ%Ùa/×úúúââ"4p¤·­Óé0}Åcœ ð±©ôY?U„b±ˆK„+‡Z|ï_þå_þЇ>t­õÀ;&o{´p&" ÅIF£###‘HÄ`0¸Ýn·Ûír¹@{¡B8Î;v¸\.êV+»N6773™ k‹á’’C ¿ß¯Õjá<w:={ö,--MOOçr9¯×«Õj ?Ä'‘H˜¿c,—ˉ‚ÿ4'Á-…»£Öð|€çë´Z­©©©C‡ÆûˆB=k‰PÅ÷~J ˜ëœÖR©tòäI$ñ=OWWÔ‰®®.PTD7X‡W¯×———y¦2™ŒQ†T*HÁXDRW@àðáȃær9¶S/--Á¯‚¢DæÍg&5@èކ¸­»l6 ûƒë?@\çÉdXTÎÂLZÞïÖ{ùß÷SŠR ËËËçÏŸ¿yó&R]]]@M¤ •<òÈ#ûöí+—Ë è­ìv_^^F¯XïGñ@©P(‰ÄÌÌL,ƒÛ;;;ËCˆí7úÎè%s“HqkbíAgq ˜:޶�ͲYx¾œƒû˜>(OH^÷½Œb"|8>}úô믿¾k×.£Ñ¸ÿ~*\$Ò‰ã$Ífó¡‡zôÑGçççC¡Èåp:žœœŒF£ø=Ta¹|äÐŒ®&s¹ü'‡, S„Û`šéÓ‹¤6ìŠhY‘”ãÉݹ|Ž šj O¬­­¹\®÷{½õÏo-—ß› ‚€“ÙÜÜüó?ÿó×_}ttthh»ÝÎô£×ëõ¢Ÿ}öY—ËuåÊ• ´ú™ž›˜˜¸qãM@?Ú("+•Jä[IÉìc±L0 š¿\/ÒBœÆ }Ì¢Y°>ä„ðKœÃŠÜf>µZ-³Ì[îÝ»÷>æqÐZß{«XËóå/™nÈöíÛa¤˜L¦|>¿¹¹‰4㈠`ß¹sgrr20IÿÝï~wbbbss²°zN###h[p®©É¨ÇÓé4I?Ó(´9OÜx¾¯V«¥R)Q+Íb±P<àß GBŸ"ø1Ä9!�jp.—›ÅÆ�k½ÍTR©tuuõµ×^»sçŽ Û¶m#È3õ€ì\ooïO<qîܹÏþó«««ûöíCŒëܹs‘H„uåýýý¨Nìv;¤3Ö3ÛJZ£ÑŒÁ‹ær#¼@ÚÍ DŸy¹\'žÎ$Q–¿§Ï Û‰ÅpÜ“X…À%[ZZÊçótmîKôz7ú[œÍk×®9sfii‰!5æø6›Íô¨ Vø|¾Ïþó¯½öšJ¥zþùçµZíË/¿¼°° f§V«MOOsec±ÿÉ/±‘ÖÕÕÕÛÛ‹! $b5,“]ü3x&ÿmÖó:f–É6µ{9Ââìmn‘H$‰|`¬%*3!Š“-”»iŠSW«Uǃ²k(�¬×ë\)BºÍfÓétdƒív{mmªH¸KØæg4^¯g∈¢ä‚z ]D–M&“xKL&º4 ¥RÉl6á.ˆPSh‚ KDü³ÙlPkè€ßÇçù�­%âW¯^eK+ÌÖûÅ�Öj5V´/--MNN"îp8666®_¿NÄb4Ød2-,,lllP·ó ¢ H/‘•h½½½˜ßZ__…Bf³¹Z­’U’>ïa›F£6,y<íRN˜Ô($,‘m6{ƒ©Ì8 îÝý÷þ²G»sw§"yѾð…ÕÕÕb±ÇYßh4VVVh°„ý#ùȾ}û.]ºDqCòÆ48èT ‚°¸¸ÈÒŒ‡zè±Çs¹\©T Î%Hg¨“³<M¥R±Z<N·Z­H$ë–«fÏðV¡P ·yl3!w*DÿH›ÍFÉ!.½ÌçóZ­î77^Ôl¼/6»Ïzð"åX„P(ô—ù—ׯ_¨6N§3LOO³]V3ªVlÉbcȨ‚ Äö¡¡¡}ìcŸøÄ'<Ä#£ÑÈ¢¨L&êA³Õj---‘ Pÿ‚—óÙ …³ôtGS*•,&"ÿF‡qán‡‡÷bþß(^8Êgè÷ËN÷ÙZø=žËõë×—––¾ýío///3€ÍBa”2˜0XXX@ûá7¾ñÛ·oC#dŽtÙjµ ïÙ³gÿþýTKð ™Ï)‹«««@> …"•J% æ·óùüüü<ÔëL&#‘H, ¢Á`Àx°<¸7ð ØyN²‡“d…¸Xcál)É¡Rö‰UÔ×v»ÝçóìÞ—ªë'²–¨Á‡«×믿þú?üÃ?`¼ååeP"Š|(·ÙlÖjµF"0õ•••ååå®®.$ž)ÐÃÑ£G_xá…Â+K˜²ÛíSÓ›gLŸ _Œ½Â]bH.—C¾"†Ï ÎýãŠàHÁàÅKC ۂĨPœ¢›C…yjµ2—ï=òDÙ­‡2þܹsßøÆ7®^½j·ÛGGGoݺEˆ†ðÅ<A"‘°Ùl¤LbÒ™“NÇÖ­[æg~æÑG…@Áâ@©Têóù`d„B¡©©©P(¤Ñh¦¦¦€éV@ÔI&“’»;ïÄxxiŠ¡R©Dâ30Ô%ú]ÔpˆRŠ•J%**)™~žƒ¸Î^m4ƒƒƒ¢˜Ã{–Á‹;L÷W^yå«_ýêìì¬T*u»Ýããã×®]EÓðõpo©„»£Wù|¾··w~~8lûÉ'ŸÜ±cëHЮ…8†;wîÜíÛ·ù‰D¦‘L&c²µ?45sFЉ¼CL²X,$/$î˜G¸¢, 7FŒ[àétµ*à12uÆúËå²Ýnç K9xðà{€êÞË/ ÔEFæôéÓßþö·¤R)[²ÀÌÌ sÂÝÉx°%4R©s¢N§sïÞ½[¶l™ššºrå zj[·n…áe2™ŠÅ"Êkkk@,¿qãÆôô´H^#Ïúc^ŸydqΞàÄ0±SÔš*‹Øƒ;b”Ïç)ożZ£N§ãŽ’šsŒ s‹Arø‡>ô¡­[·¾Ö“ršRù|þïþîïÎ;¥‰Í¿­VËãñ¬¯¯ódœBR•ÃK$ ûR*•hV[­Ö©©)A†††�8 …B ¨×ëLS¡ 1´\.¯®®.--1'â@<¯d2 J"ÊÒÃLªT*lB©â[ 97È2 FïM׃…ž|M,’I<!ýL£ÑˆzƒT*ݺuëG?úQÎÇ»m-QìM"‘ÌÌÌüÁüÁÒÒR__W$ŸÏ3‡»ºº s½o: 4ÅOÜÓÓCƒÕd2¡±»¹¹ rÊĸÙl“ ÌoSØâmø` 8Xb•R©4D |/}zÆ)ÑJa ' rAõ*öºh'"Ë;0NBAW…|„˜Çw¤IFØCGB¯×?~–¸äîªÚn-’N±©F¿ùÍoÞ¹sG¥RíÙ³§R© 244UÿöíÛâÌK‡Y+(.žEe¬X,.--±Ç{qqKg³Yb@©TZXX`®›5 “““âª[Ü<$ž>Äl€p•JÇÉúr¹\&“Sƒ\.GóŒDŽÌˆ‡Ç“p(Q#³;ñpkyC’~ Þ–!N'-cñçß»%ö¿ ÅÅ‹_}õÕN§ÓÓÓ‹Åär9¹�=Ž'N¬®®þßÿûùzV«•Ô€úƒrR.—;Nœ˜R©¼té»^Øâ¨Ñh@N³Ù¬Á`Èd2‘HÄn·OLL0×MCÝï÷‹Å……âò¶Édj6›‡£Óé0èÈ8%Œ>¡8„I3E¦Tá.Š#Q¿ó¯U"4·�|Ù/Dþe±X„» O÷ñný+mMLÅæT$§¦¦Òé4ôzýŽ;†÷ƒ³@¾„‚¨6¥a “Éܾ}›^ Ï­ ÈC¨ˆ»677ÙÜH¼ ƒ:ŽýikkkY9×ét\.‹ØÐ××7<<Ìd.ÐR,¡P(6„ÀZHÞHe"j>ÑÁ=‚@¼$?i™L–J¥ ü°ÁŠ˜z¿.–ðÃ÷ã®]»öå/¹\.‡Ãaú~ènÐÏU*•_ýêWWWW!½B$‚aB̃»i2™X..‘HÀ£p.—ËV«•‘ãðð°×ë%—q8@´áp˜}vA»»» ›¢Ñ( a6›eËО={âñ8+DélÑ`dŠ'~;&pâ`Ñ"à‰ó(î%E!�€D׎ ä̧Óéááa ©·,…9ôÿ£ß¼e;u2™üüç?OH¥R0 ëõz0 ƒjµ:›Í^¼xñÆ.\@̓Iôî*Á·Ûmx¸øH$¢×ë@÷í€T ÆÅÉû‰…Baii‰[H¦ V«ƒÁ Ýn§Â˜w…ô,‘HPS3‹çp8¸OTÇ=<?n€ D8÷ Ø ž ±Ýn{<à]©TzçÎùùy¥RIiO2"òÄt_œ˜~ð÷Æ-îø7¿ùMËÜÜܽ¾}¦3gÎ,,,d³Y¦¯Ä^*Ýn·3FG¯Ñh0’(#â¿ KQëXó|Óé4$/³Ù¼¶¶†¼ ª't§X|Lgyff†)|¹\ÎÒ/£ÑÈÊÕ®®.‚ LÔàÆ°™MÜŸËåøEd؉ŸTÄ ÛX€(,R¾h›-,,$“IÛÔ9n·›O(%#¹È…ýá÷ìûsu9ﯾúê¿øETp_Éd¾ +ÙÃÕ|ÍÍMÖˆAbpš]rl'#{Ç»v¤Ñ”5 ‡kÙl6³Ù¼}ûö3gÎP´ñæÀŒ½½½}}}­VëÂ… Ê ƒÏçƒ>µ¾¾Î"O©ü Ń! J€&ÔË ÷ñc8j†*D1<Ôr¹+DæG¿ xuJ:àM§Óét:;·Ûí šår9 Bùá×ëû{B¾É¿øÅ¹¹9qoL ä{XÉGªq¹\,†aÑΊúF ÔÄ�<*©1F €0î%;P±²¸;ÂÅdß_¯×G£Q.PµZ ƒf³Yrwo;'IÌ/¸Ç ¢¢� 5¾€ŒÁdÉÔj¦Ö&¡`™k½^jµÚï÷{<>Ìfs0¤B 5Ã]Dvaaaaaauuuzzzii‰w[ZZ¢„Ào‰3Ëßk³ïo-\êÄÄÄüü<(²Íf£’§[Šy@ž…ëŒnX”®‚#Œ“%£ GÇ~ ú¥RÉáp ?Øjµ¬V+°:bNZ­V.—ëtº½{÷ŠÃRd8î:=FFÄ»ºº8°X,Tîƒ;‡‹¦£f2™ÀÆácÕ9u WÁh4B»à/éòĘäD¦FLO¨ˆ… qÈõQ8†ÃaQYñÒ¥Kׯ_G®ž_ú¶Iœ%n wWI±x½^¦ 3™ Í'›Í¦ÕjYUEŽ´šÉdØÅÚ3 ’¨Žùzøkú dº¨s¸ …‚ËåŠÅbµZécb Y(SˆKKK¹\Îçóår9îG¹\öz½ÔÎñxÜd2K\.PEooïêêª\.÷ù|7oÞt¹\‹‹‹O<ñÄîÝ»———I%Ľ @�T 3C[+•J©TŠw»7³ÅOz<ˆ‹WŽ)dZÒ¹\ŽQh¶VÑ|@UÜòæÍ›©TÊh4>÷Üs###?ª'än?~~~žVzooo"‘@OB»TIiGµ@À ‘W¥}~øðáýû÷>|¸ÓéÌÎÎ"‘JŠ•Édd2ìŒJÄ&Ú[,êV¶M²æqÇŽårÞ.Â2…›7oz½^øÏdz‰$•JY,ZŽxúé§éB¸ÀÐn·³kÏ`0°´•E°°HXó’‹,=nÊjþ¥á“„¥««K„õõu¼7©#…õ9ð“É$íº{oس(;m_"0óÏ ™œ,`=šâb œÙŠDä†v©×ëe27»«WVVHºDãjµŠ‘Ä^½+ Á™¬¯¯n–ÇãG’F£ÈC¢ßÜÜDÿ§§§Ýnonn"úŠ^y±Xìïïïêê¢ËŒd9Šx$hÔdétšM¿`»ÕjõèÑ£‡òûý{÷îííí­ÕjO?ý´Åbù…_ø…O}êSGŽY]]­ÕjÛ·oŸœœ4HªP„H$’õõõH$’H$J¥’ÕjeÌ’âO+°ïï ±'ygµZŽÀ_ó®ªYTòâÝ^ºFœH‰+‚þl£ÑX]]EL\ܾ�ð*î”@M3‹…Ê´Óéd[Åèèè;w677ñ]¡Pˆù0£ÑØÛÛ;99¹¶¶&)È‹Ûí¾qãæ$K¥Ò®®®éééõõõV«µ¶¶æ÷ûEMìT*…2âÕ &“éÃþ°ßïç;âÏ/_¾‡%I<g#N¹\C‘Óéôù|çÏŸ'ÃìïîîN&“‹‹‹GES¨î‰Öúþw çFGçÂ… ¸¨Eø´{»äÅb¡Ž(nXQÇü6™ áp˜ú"h›ˆ÷P¸0oBbFfÁð9 £ìë¤þ¥ÝœN§Q*çãp|>�<H˜N§cÄΓ�ƒ^¯···—º GJðÖh46›-—Ë™Íæ@ °ººZ*•úûû çsss7nÜðù|ƒƒƒ$¢V«•ûÍ7ßl·Û«««æ™gžiµZl$S€§V«ºººàÐãœÿYšó‡#O===o½õV2™ôz½Ü’q8b *HÉÉŸ±9Ž•îõz=Ó*D'‡¦éNÆÅ%&_ç‚Ή²¨0¦Qa¿d³Ùþþ~ÿhÝÁ0„$ªP(†‡‡ÁaÙ2$ª àˆØý´ººÚét¶mÛvüøq§Ó©ÓéèÃ=ùä“ÿøÇ·lÙ211±°°°¶¶ÆÒª‡ÃÑÕÕE›ã±MÇh4¾ôÒKóóó‡ƒê;‰œ9sFÂÓO?m4—––(‡††âñøèè(ïOØãÖ’ ü@kášL&“×ë}ýõדÉdoo/˜ÅbazWœSC4F£Ñ€d#‚ °MiLO¤C­VîÁ9tww³j‹‚qBêq¡!]ü`ŒæÓhçàc0" íX,6==?du M2£Ñ„¤ÔétBÎf³äP…B!NOOk4šÍÍM«ÕzðàAZ 2N§s||üçþ秦¦¦§§½^¯Ýn‡ï L*—˽^ïÊÊÊ­[·^yåÚ­³³³DµZJ¥æççA@~Çh4®¯¯sŽ W0*÷íÛ'~÷–ÁSç?üðßþô§?÷¹ÏMMMF…BÁ„D"bŒB¡€xL_Cìû²ßRX±X„µùó?ÿóŸúÔ§Ðñi·Û¿ök¿ÆG.—[[[›œœ<uꡎ¢Ê`0ÀZ¡#RR$ wåËÑL ~¸pá€rgvvvll $ŒQ«ÕR‚;˜ÍæD"Aš÷?ÿçÿ4ÿøÇ©™Ð•u»ÝЊårùÖ­[gff »ÿ—ÿò_¨R©ÔÄÄÄÅ‹766ÚíöØØ`›Ãᘙ™±Z­l–%!â622òÛ¿ýÛ@€"”ÙëõnÛ¶miiéÒ¥KÇ'¦ü0Oˆ‹o·Û[¶lY\\œ™™ÅÈÀ&`jgàHÛ„»"³,Ĺ(Þ–6à¹sçôzýóÏ?ïv»€Ûív:n·; nݺ1ÎW^y…u![Ü7Õ>=\ÒQŠt® 2° ļ?Ÿ°Z­ú|>ÑI2I²)Ì y¯ÉdR(o¾ùf.—{â‰'Ä.(JNËËËÓÓÓÔ…KKKÃþÙŸýÙ¿øÅ7npõá¶šL¦§žzê7Þ¸qãÿœFTªx<¾¸¸È™ƒáëv»‡‡‡áë1Sk6›QDüW0xá.ôéóùПU(ƒƒƒô&Àêõ:©#H9¦"k€gI‚ .d Ø<ˆýû÷“ˆ[aˆ+###ƒƒƒ×¯_O$.— }ÞZ­FVÆŸq°¬\‘e½^EØ^«Õúýþd2ÉuD0Aì.EÌE„ØY•FüÔ©SßùÎw–——¾ýío_¾|ôö;ßùN¹\Îår{öì9yòäW¾òJ@Fü‚Á` `<7ŸÏ¿öÚk‡£··x:¤ÓiöÀÀÀîÝ»öb¡ÇÈÈHWW×ÊÊŠÇãI$¡PhttôG²ÉˆÀ™3gèÌÂ¥ÛŒ 9¼ÔI<Ò ‡Ã!‘H(y7’{AΟ?êÔ)“É422‚æ…ÈjnµZP©m6Û™3gHܵZ-’‘ø^qïµÁ``wu.Qòv¡P€.ïr¹è!ˆ-]°.®‚"—бÈXà^,2dAŽ\.|ôÑGÇÇÇ·lÙÂþ·^xá…^ðx<‘H$ÏÍÍ Z­ÖGy„3 Š þ°"ü">VVVÄÍ:V«õõ×_ß»w¯F£ù×­Å«^¯oݺ5_¼xQ §±K™¤…BPmšËZ­vppÐh4&“I\%%:=u­V‡ÿñÿñúõë åÚV«Õ{öìyþùç{{{3™ÌÌÌŒÅbO§Ó¢% ÿN§“•v±XŒ‡f.,Oø¹€ñv»ê -ø,˧ÅEQ0¢'ØW¥R<xpyy™J¶R©tuuùý~vQBƒä~ƒcõôô<ûì³t½Ù­AêÁV‰B¡°k×.ð¹ÍÍM†£DÅú¥¥¥cÇŽ­®®nÙ²åG²©§\.óÍ7Q¬ÕjœePs W2o¾¡ØjÉf³ <\É]‘x7,ù;wî¼ôÒKÝÝÝcccb…ùÑ2Ûµk×Ç?þqÂ@±Xd' 9éeS¢Ñò?¶Ïç#”2ÙGHæ©×ëûúúÈÈž¨ÜÙ[GA~ tŠ ¿ù|~uu5NS-I¥Ò .ˆ5T†ÅÅÅp8¬P(FFF O!ð ¦ÅQq÷îÝO?ýô_üÅ_‹E ´èº»»Áù‰„Çãù‘¬%>_Nwøðá—_~܈$¢Z­:@h±ý“V'†×ëudáð`’»›àJâm¾ò•¯Äb±§žzJ¸‡`DFCU¾uëÖÇ{lëÖ­N§“õ¹äétš� C†½A…Bd€ÄWÆ ´Z-©&¼6öÙ‰Ý/~#ý{¯×K`4ˆ Í4ŸÏÃø4›Í 2#öåp8‚Á ãIxtu®^½º°°ðôÓO÷öö^½zÕívËùýþx<^«Õž{î¹S§N3^¾|ùÉ'Ÿ´ÛíçÎëëë»uëV>Ÿw8ïÌZ°”úúúIܱ öÇ-°lÒÑ‚ëÏ[Ø‹Ä<Ú(4NŸ>‰Dž~úé{÷ ‰€çîp8víÚ… 1’uücÛ8F2F¢Ìd2TüR>9i”bÜw‘°ºuhhˆª‹œn( šV«µ±±ÑÕÕ°R«ÕØŠª³x;vìðù|.^¼HßÚL&3>>~ëÖ­\.§Ñhà¤LLL”Ëå#GŽD"¹\þ£Æ­{XÿÓO?íp8®_¿.fÆt.è‰Gp„±ß g&´¾¾.êá^Óæ×ëõo½õ–Éd:tèå{›r¢{Dëî‘G;þ<ôw’ª®b±ˆa¸U }tî '2$Â[Ѳ¥‹¬i~)Èõøø8š¾W y5éE&ïÇ>ö±íÛ·›L¦þþþÁÁA³ÙÜÝÝ=44„@髯¾Z(®^½¨"h………¹¹9qͦb±‰D:ôÏœûwd-°ypñíÛ·{<žóçÏÓԇ꛼Ýn‹0øKºLˆ¹ OÚЩS§žxâ ¯×û62žä_n²i·Û}}}{öìùîw¿Ëb;QHrW{^áù–@aÓ·cr„>/­Q>3’” ¶Á` ¸¾¾Ž?À©‹E&º®]»699 …ÐiFCM©T>ôÐCõzýÏÿüÏÊVWWY‡Ÿ´X,¨À“L$€¢…B! öôô¸Ýîwf­{oµZi4—/_¦ß ž³(BÑÇxh§Ó*WR£ÑÀ‘Bi‚æ½X¤Óé'NßÓð–Ü}‰y#ØÏéÓ§¡xâå8b×ÜjµÒIáoÈH¡¿ÑC´Aì-�šPø‹ü{’‹óçϳ¥5‰X­V’RS›ÍÖÛÛ+†[B5ô•+WÆÆÆ4;}û–––æææ:ñð,‹‘`ì=9-ú9sssv»ý{Bñ‘ñ•¶nÝŠÄ&M^ü 1VJ㤈¢4•J…6¢‘Èáâ¶)•Ê7nlÛ¶mhhH,«¿ï‹5::JYØ(®ŽµFH+ SPÙ0“ Š7!w‡4�ÎIÍ\R,‘Zñûý4$YEÎÚ7Úßõz]ÜîûÆoÌÎή®®Âmq:·nÝ‚‚¡Óé CQÏqÊÙ“ :ºÿ~ÆN'w‘Á€ÓZ¢ƒR*•½½½o¾ù&ÍFŽ-©Ïº FxB`†â$¨pÏ¢]쀘Fæg~æ_%'“eètºüÇd¸A\MC¸Û’ ÝG)’Oëp8PŠâyQŠr–X±Ñh˜Íf&ïärùÚÚK(˸r¹|}}}ii‰Œ<‰èt:Äù:}&“aþ.‹­¬¬¬¯¯k4dz{÷nĺÅv+U ËmÛ¶­®®Òýùñï–ˆ"º\®žžžsçÎ9Wd†”bpù!²Q“Âîâ°"±lŒŸFƇ?üaú¼¢¶ú÷ý0Íf³¯¯oiiiffÆl6Cb �î샎 !­P( Ü ܈Ó&¶FA€]#‘Hz{{éŒ�%Se^¹r…KICÎ(9'„Ô|>?33Ãá…B0eVa ¹Á`ˆD"è€áe)—˽½½,)R©T?¦µî}U*•þþþ`0xæÌÂpW^\§Óñ :‡h *aŸ7a‡àÿ _.—Ÿ}öYnÛú�¸>Xc_øÂ@ÖIXðÆ÷ôÓáÍ! Y,ŽQ~7ä8üÜWµZ½oß>�Ijpüù}"‘ðz½(+¢… ç�õWAâñ8ÓìÄ¡R©ä÷ûù²la„c‚¶½*æeÌ ç÷ÁZ<¯¾¾¾t:Íö8_m¾?.…ì¥Óéîðçà„»Ž‘†áôôôÀÀ��ǽ—ém€°'—Ë¿þõ¯'“I¨Œ<‹\+ÞyŽ9)´ÐçöÝ•ãâ#ë#÷Æ™™¥R‰<™B¡PP«Õ(ÿ;NAúûû÷îÝ unll ­ p€B¡°eËÆ,ø0$Ä’�rl@,üÍOj-¾ ‰ÖÁƒCÇt"ÀÖxš¬s¦À$¿ Þ„çL—ëÞ)¢‚T*=uêÔã?ŽVæÿÞ,‘÷Ñéto¼ñF(!™L²IRl}‘ÈÐkÿ9›¶¯T*\™ñøv¨T*Ý¿ÿµk׉Dooo©T‚¸ðÐCÑñQ©T‡Ãçó‘î;ξ¾>A¬VëÆÆj|:ìjllŒkÄØ5£c …ÂjµŽ[­V:,ÿ¼Pï¾Ü-_«Õ:xð`±Xœšš¢,0 ó¢Uøƒ¸?•¼_¯×C²\åóù«W¯¾øâ‹o[€ò}?ÆíÛ·/_¾ ‘GgµZé¨åóyÀYºìTǬe%å!2ɇ€Íººº09•Ò:?ü0MpýÙÙYh6‰„6kkkô<ÙÝbBhïíí âSy½^ŸÏGÑB~1Òn·»Ý …Pê¾?ÖâIÙìß¿ßãñ\¹r¶—&!AXLðÐbg–D¤QÒ’Úàû(ŠåååN§süøqdúAŸ!^¹r…r•™WÊ8:Îd:€L¢<.) À§ž&5 =ž„E¡PÄãqÔþÁŸÜn·è÷*•J$ÙØØ`e3„¸@ �/Ød2 }÷»ßít:Ìœï;N:ž™™(AöÐl6ƒœ‘ZÏÏÏwuuý+½ãwú%ú‡‡‡ûúúnß¾ 3 ˜µ}w©:žS€;<³o°}!b’5Ò•JåÅ‹wìØ144$®t}Û‹C°¼¼<33*(2m…»ã§”_à™&“ Z±xe1 Н°KĽgbÒït:‘êîî~ì±Ç8Àêq÷øüü<P"±ÇãI¥R·nÝr:333—/_†zÖEâåC2 >W­Vé6ÀÑét÷ÓZÂ]—Øh4z{{}ôÑ[·n­¬¬w>å*!s ÌÁc:Qw“LZ “““ýèGI±¾7Ñà±&‰©©)¦;w%ÞÅ ¡Q¸;ÛB„°X,4\„»d¯Åeœ*’ tlàʳbÏjµ’D ôôô 0$ÀR„=ùä“ׯ_ßÜÜA$åÓùS(·nÝÂÙ’'3'ÈÌõÆÐÐÐÌÌL»Ý¾ÏÖî‰aF£ñ‰'ž€9´²²¢×ë%1ùgZˆLÆ)7XsI÷ <‚ à÷WWWóùü3Ï<Ó¾»=ù{­•Íf'&&Úív&“!•"]äfp èSZwNRAfÉJè^⸔"JBY–ÉdÂáp6›e™doo/KÛ Åüü<Ec�ËËËŸøÄ'8 1Ô4$ÑD¡ú&õ·X,™LlÞn·÷÷÷/,,üøÕñIï.a•J¥;vì8zô(ú„ …‚€,׋t€Ë$"üY\8¬ Ñh.^¼èr¹vïÞ-òD¿÷WŸ?^ÖbàUÈN)õ@ÅXOHj*Z@M¹øpˆP6›M„¡y6 ŒŠ^¹\þÖ·¾uûöm¯× —––¢ÑèÑ£GËå²Z­…B>ŸO¡Pœ<yøˆ˜sšùE$55m6Ûùóç‰gÄZâ%/0™LÇ÷ûý·nÝÛ†4Ÿã^*e®?9$¨uw“;°ú©S§Ž;ÖÝÝý6üPɺ|ùr(r:ô¸¹ ¢$"ŠR¹|�ÉÝ} v»ßH\aR†hßl6¹À7|Z­V»e˖ÇW*•W^yÅçóŒŒ0ÒñÄOäóyÔ¶)¥÷ìÙƒü¾÷¤ùG} µ f1 oÔj5„%¢Ý´–8uÉ'}òÉ'+•ÊÍ›7DŠÏ] ¡2‡MÉ$é”ëtºD"qåÊ•Ÿú©Ÿú^m|\ëòòòÔÔwà@ÌWÁ0Eåš“Še&$EÝ4•J522sT¤2ÄrVVVnÞ¼É@˜F£ÙØØà©T*XM¤³³³³³³ÜHì—Ëå ƒò”J¥#GŽT«ÕH$"*†¢D!Ü]†uªã~·Q"%Û`0<üðÃ;vìX\\\[[)Døà_ÏSPÏbB† Ãáð‰'Ä‚Z –2™lqqñÚµk¸;qî‘+ÎÌ1CmD2Ñ¢¢Ó3 .—+s“«§Ã�Š_.—].'F«ÕºÝî#GŽ8Ž3gÎÈÅb±ãÇÏÏϯ®®>|¸V«}ík_[XXÀI¬®®Âï,‹H݃ے”U«U’U\´R©\[[³ÙlÐZÂ=™›7´Ûm¿ßÿä“O2†,²hAࡃòá(×" :—/_–Éd<ò·SüEÐ+Ξ= Š#½»¬„ž:õ�zjhsò¯¨š9ÅÜ3�”Ýâñ¸Åb¥:Ѐ4C+‹±MàÈ‘#Ì]Ùíö……›ÍöÈ#ܸqclllïÞ½‚ �pˆc^°3X†‰D$ »Q²ÙìÈȈF£™˜˜èëëc†S*•>Xk}¯ñÄ9É-[¶}lnnò¸Å`&vâî‚HÓ¾»þI¥R½úê«===»ví“îY>Ÿã7¸R<‘’E¥ ò&fŒ”b`öƒ¡Ùl2×¼¶¶f0øáT*E–H[Ž -8Xr¹<‘HD"‘¾¾>ÜW|gmm g‡Ã±wïÞd2¹´´$B$AézhhÈjµÂ–AÅ G’H$úúúÐ(7›Í蝹„»é¢HÈyüñÇÆÕ«Wq›Èˆ? L �¥×ë$zùå—ÇÆÆFFF¸‹Ä­jµzñâEôKˆ"‡䂉ceLˆx,%3ƒ§N§3 "ƒ#’–ñoľˆ||„gffÖÖÖ>Lƒƒ=ÈÁ``©§§ ¼—^z‰>œæYO?== ó5ŸÏ»Ýn~/à™Óé|·­%ÜÓªç–8p  ®­­Ñ9©í|ša³D8þm±X<uêÔáÇ€¸ƒB­V¿öÚk`}’{$ É6¹"DÚÚív›L&8¦µZm``�äE«Õ"™DO[&Ñ‹KxjüX,vêÔ©z½~ðàÁÙÙÙ¡¡!Ö<€ö*Š·ÞzëÒ¥K¨.0ÞBI ÂÒÒ’¸ì’‹®¦V«Íår·oß~¬Å‹´‡? ?~üÊ•+ˆ¯bQþ Ÿ vÉ;@ Qýò—¿l·ÛwîÜIÙË.ctr-‰•ëE A±,bµÐ +• ÓT.— -½%rKQü )AP……ÇÈ>—ËÅЦÕjÀL$_úÒ—Êår¥RaA6›…F¶¾¾>??ïr¹Ìfs4íííE퇖‚Õj-‹²Ï~ö³ÿª`ÍzIᄄê=:77·¼¼L«‰;$^«ÕJK­ÏbùÅóúæ7¿©R©:D(ZXX¸sçwˆZ.&%Å/Ò)<kq0•JÑ„ci$JCsss‰DBq\Z*•b]šàxo(@¤&“éÆV«•A•ÙÙY ÂüÇ\\\äj%çóùóçÏ#®t:Ýúúz?,c½^/û¯ÿõ¿òËÞekIîy‘Gètº§Ÿ~º\.ONN"•GÏ r=3­VÛÓÓóC’¤y½Þo}ë[ù|þÀJ¥rbbbeeEœSBä‘6 '�ЄÁz7F‚XG•Êž”k×®!ÂGABW¤‹È&p¨›0ªÑh€‹ôzýèèèÎ;­VëÿþßÿYfœ·oß …jµZooïÞ½{m6ÛÚÚç©X,îØ±ãâÅ‹­V+„Ãát:-ûÏÿù?ó›Þý»õ6ãÑ„<tèÛí>sæ Î 4š{½P$"RäóyQôÔ©S—/_*•JW®\{lˆP‘€ ¢U,‚ˆ se©Ì‰¿]Ô8ç/¦ÍÇ„Ñ^¹\ŽÂÍC¿ßfƒâÅbñïÿþïÙÏ’ÏçívûØØØðð0sïìœt8‡ƒ™h4JEàÛn·e¿õ[¿…ã~M%ŒÈ422ÒßßñâEb; :"ÐcGGGQ³A• î;“[³³³_ÿú×Ýn7ÙââGä?E0Ù\•JÅà i¡N§³Ùl´ÿQò5ù13 d“ɤ×ë‘冴 ‘Éd˜&j·Û·oß…¿”JåÑ£Gõz½Åb¹xñ¢ åryaan¡ kkk ‚ @‚þçù³ÿößþ›Èú{ϯ—ȶïíí=zôè­[·Dé4�sÄCCC«««�»Ì³RQAü“Ëån·[Ìx‡>ž2=b†òÌf3€,°o___¿Ãá@¹‹).þLˆB©%›ÍnÙ²…'ñcc0F�é\óx<v»Ýb±Äãq&ÆJ¥ÒöíÛÍfóÒÒÒž={XŽ|ËØØkeysf#ÿ(•J²ÿþßÿ»ø°ÞãËuÙ(GŽ9ÂhI­Éd²Ùlããã…BÁb±ðh, ³b´k)È´Zíææ&}&ZDÑh”V57˜d²Óéô÷÷£?®R©~ï÷~¶¬ÑhÔh4älNK¥R¬´s<˜H$˜¿¦Z§7p¼Ün7,|>Šsdd„EôXÕçñxÈWc±˜×ë¥ÅÌP{¤ï7Sñað*6›íOþäO¶oßÎÌ.hccC¡P;v ùä“OR{šL&Q#‹Ì%NÏÍͱ¸„¡[QÃQ"‘ ‚�ÿY*•®¬¬¼õÖ[ñx|ÿþý´Ûí$ ´Þ1CWWåªÕjíîîÖjµ6› §'Ü•ia%uH&“éééÁ!C«Öh4>Ÿ¯««kmmmdd$›Í:NN sÀ‚ ètºP(d4=7›Ôû¶.ôþ¾8€ìÏþìÏvíÚ…[c. -ò£GÆãñ¥¥¥}ûö‰ýCaæy„B!ºïTÇX‹;¡R©Òétoo/Hoo¯Ýn‡n‘“'¢= M«ÕRÂsqéÌ»ººÄI–P(˜N§=êñxÒé´ßïjƒÁàÉ“'ÿæoþæâÅ‹ÝÝÝ^¯Õ=äøúïö.ñwj3\âýÑ}ò“Ÿ¤¸±±‘ÉdvïÞm·Û{ì1rnÔìh`ò(›ø™l6˼ºêDî"]µZ­¿¿ÿ©§žZ\\œ›››]__§ö×tqèÖÛíö••&A(€q ðh§õõõAH$hîÞ½; ÎÏϦR)vT x'B¿Ïç[XX`ÊVÔ`²Ûí===ï–ñ£¼$w×· XròäI¹™™™k×®ÍÏÏ—Ëåµµµ‹/ŠÔDúXÌâãXêõ:�(ºl$‡ ˜Ò±dhs}}.Ú©S§¨ö˜m4 ³îîîT*µmÛ6´z O ‚ ªñ Dºwjll¬··wxxØï÷߸qÃápŒŒŒÄb1dÁΜ9óä“OšL&âb:Îd2P¯l6›^¯‡.þ>õ„÷ŒºõÑG5P'ý~"‘XXX¸t鳑 °t[Ä&“ÉjµB –J¥\#8Õ”À„tžéúúúÉ“''&&B¡Ð©S§`Ã34NO*ä¼:@"ªŒ ˜Šu$©úûûY±à„þŠÓé\[[k·Ûsss[·n¥ñžZOOÏÈÈH0¬Õj¬€‹Åbñxüýn-^Ð~ê§~ Áu¹\¾mÛ6¯× fzèС'NˆK¿A³4 :>È$‚HÑ(ׇ½#‚^¯ïéé!’¡rMżÜd21‚V=+Z‘P'ÛFˆ¶œ\.§‘èñxŽ=j6›çææü~ÿöíÛá»ONNRV*•;vD"*(Šn®;ee*•r»ÝÝÝÝétÚétž8qâƒa-ÜËÖ­[é.‚Ònݺu||ü‘GÙ¾}»Èb§]D_ D_l˜A¦áBƒ R~>Ÿçž9Ž-[¶€•àr5ÍÐÐÐc=†Éá'<xpË–-(¾“X•ÂÖ‡v» ÊjµNOOONN>þøãir–J%ŸÏ‰D.\¸ P(’É$ý0†¨gffY£ áv»=O(z_gâ‹cÞÓÓƒZ ØÈÈò‹ÙlvnnŽ–<ÂdÏâÚwæØEEÉ]ñulŒ£Õ¹±±!ÜÝZ%•JÙAHâÀbÕ+IàÙ³gS©”Ãá`!›Èmu8Íf3 uìØ1¤Òé› ÔjµH$288ˆ¸ìëÕÕU`øÅbqpp…/;vì0 'Ožü`X‹'H•ƒ:$ðŒÃáÈf³.— ™V›Í$ »½sw–ä®�ÓÄ"ë–¼T*eÍ ¸t:Çãá}`ËZ,«Õ °T*-..B"#ÂÑt&l6›V«unnîù矷Ûí¨x ñº±±A.Š6ЩS§ðz½{öìùË¿üË|>ïóùü~ÿææf¿Ùl¸ªV«;vìø`xBá.¹Óét‚Ž#{éÒ%ä@r¹®ð“ &ù=+œ—¶J¥òûýÝÝÝ;wî|衇öíÛ÷K¿ôK¼:î‘GÅÂz½NÇ2™L¢=ˆí¥wµ©é‰³Y¥R ôööBbÔéth¡–zñâÅX,&ÂÌÌ 5\³ÙD Vâ£`](¸Öëõl6ûÁ°¾K&“õööð&Äb1äH——— þ]]]N§“L÷t:ˆ°ÛíFFœ·´ÙlhÛ“XR?]|>_8F«¯(®KlLï0nŒ©P‹F£ßúÖ·ÐEñ¡‰;wêõz:#Ü`­V{àÀ‰DBÏJ±XÜØØØ¿¿\.%¼>Ö_L«ét:¶úÍ'“I¸ð,777Az6ôz½@�,_G@Q€Î™Ýn‡~´cÇèolåC«xff† ¸>ÛK›Íæüü<ù¬7nsOO£º>Ÿoxx¸P(¬¬¬0ã ƒS«Õ.,,°{õóD"133C³ûÑGõz½N§3+•ʳgÏþÉŸüI$Abuuõƒg-v¾;Nj&讄 •Juûöm²>r¡¡!—ËÆì(5“áto‰p¬ ÓétL<X­ÖD"qîÜ9clá@,êöíÛׯ_'D/ ~‡L&›ŸŸܾ};ö>ŸÏëõ~ík_·¥ ôµ´´DdzÙ,úô&“éñÇg)^oo/[+˜q…úÀd"î /Š^óðð0(5Eèüü|(BéšAX‹Å‚è ƒ{hÃò¿à9±ÒfqqÑd2E"H–Ä-V|±wïÑGÅÌÌ7‚CUCöéÞ©øf³‰8šÇãAL«ÕNLLÀ@5™LçÎ;zô(€Ñhß³gÚ�ëëëxÈH$²wï^…BÁ$ÜŽ;~ë·~ës·x@¤ „q”¹.,©T*½½½Àzle@X›ÆŠ(CÉä!ü_•JF777»ºº€Eˆ|kkkHoÅãñ£GRhÇb±D"ÁAb¥R‰¶bx@ ›ÍÎÏÏ;Îp8,—ËC¡Ëå:zô(ð#d©®®.T¹vìØAËêˆZ­ÇÙòLõ­Õj{{{¯]»ö;¿ó;ﯻÕù—[Å:÷ì/âq?r¢ù´¹¹‰ìC¹\Ƈ²ŒˆN?¹8Ý¥R)0XW*•Pô—D"‘ï~÷»ì:[]]­×ë‡V©T333ô¨X@¶ ÁB+«Õ uP¡P€¡—¸²²räÈ‘¹¹¹|ìc›™™Y^^Fìòµ×^;räˆßï(:Ûíöh4Ún·÷íÛÇ;ÎøÿáâÅ‹Z­ö­·Þz¿Ü-ZàšÂ=¤(Ê&¤i³–J%ðAb±­ V|%‰={öØl6ž—Íf+‹»víJ&“…BáàÁƒ€»wïV*•“““/^ôz½_þò—'&&€tÛív¡PÈf³[·neÛ]Ál6›H$ÀjÁ;5CCC¸>xàÕjÕb±8N‡Ãáõz“Éd0<vìX"‘8zô¨ÑhŒF£ccc´RA§_cÖãñ|ô£­T*³³³¹\nhhè½¹[¹OÔŽº÷…Ò7J”Ñh”uH“““P-×ÖÖFGGyvV«•œ~}}=‹ƒÁœ<y–²Ûíöù|'Ožôz½ŸùÌgΟ?õêÕ_üÅ_<sæ ´œÿñ?þÇ­[·¾öµ¯mÙ²epp†Ì+¯¼rìØ±‡zèìÙ³mr¹œÅæ&“Éøýþv»½¼¼,R¦‡Ùlf./•J¥Ói6¶ÍÌÌlÛ¶M¤”J%�OÒýÛ·oSÁÿágZ­Ö›o¾ùÿã”H$sss¨–¿Öº×6"+Mø— k´å–—— ŠÅ"c6dt‘4f’�®Ú$XO«Õ>úè£óóóÕj•Ô|÷îÝ_ùÊWœNçÖ­[¯\¹211ñÑ~ôÌ™3CCCè`Æãñ³gÏvuumnn"9Œ /¼€.@}€cŒÌ=tuuµZ-†½¯\¹âóù¶mÛ–ÉdæççÇÆÆði0>B¡P4ýë¿þë'N(•ÊW^yE©TÞ¾}{aaA&“± óçþç¿þõ¯¯¬¬´ÛíT*uýúõÝ»wwwwËd²_ýÕ_ýã?þãûl-Øzx±­þ6¾"2©T*—ËE"XA0Ra, ‚À¹ã¡Ð‚âhÓûh6›Ùl–ŒÂúõë×s¹œËåzñŧ¦¦ÈY%sècûØúúúK/½ôä“OîÝ»÷ôéÓúЇÖ××?ûÙÏB™²Ùll9Y[[co{©Tºqã†×ëÅåÒ>&#`›‚L&s¹\n·v¦\.Ïd2pëX/8I{Ì`0\¿~Ýl6ïÛ·o~~þÀ‹‹‹‹‹‹¿ôK¿´´´tæÌ½^?99ùío»Õj  ‚pîܹþþ~V>9Žûì EóÜ+’�ŒF_±X\^^&¢2b-Ã#‚ ˆ­záîFg:ìI#¯×‰D€>ÕjõÆÆ¤ ™LöéO:‰,,, ÷222âñxE¡]I‰šËå,Ëç>÷¹‘‘‘ãÇC’F£ÔËæùçŸg‰€8iÜ ‰RÊ‘‘™Lñøãoll\¹r­BþÉ–-[D^r^±X,•JÁAF-—Ëmnn‹Åçž{ŽY¦«W¯†ÃaÄ>®_¿nµZî%2Äãq䋉r Õj•mBÌöˆ%| ß\T–e,Hö˜¼…C] äR©¤T*gff`®3ŒÅ6 Ú+Fcff&‘HØíöÁÁAÎ/`„Ïç»té’N§CPÃl6[­VöC5p8,ÜêâÃÀ·ð+“ɺºº|>~ “p8<;;ÛßßÏz©TúèG? í‚°ôòË/³ƒ=‰d³ÙK—.}êSŸâLܸq‰V«íêêŠD"¬ecŸÉdšŸŸ¿yóf±X|ÇÖSƒ·2lûï|G„|>š˜þ,eó¿h¿0÷Tt˜»/á®ö5Ç¥­V‹Æðææ¦Ùl¾qã‹„9sæL£Ñèéé![ÓétìÍf³P£ççç<È¢¬ÉÉÉ•••O~ò“ grŠ+• ëK Ü ‚�2Ûßßσöûý‚³Fñ Y2™Üµk×o¼±sçÎíÛ·#j]¯×ïܹÓÓÓ‰DnÞ¼¹mÛ¶ÍÍÍgžy¦X,Æb1@)•Je·Ûgff\.W»ÝÆö‡czzzllì™gžùÃ?üí[·ÞŸ»”)‘HºººXO5CßÚf³a' دHó‚p/ÀJ;CœÙB”†<2fO¶mÛöæ›o’#Èåò;wž?ž®y©T2›Íäñô|ý~?¼š½{÷ÎÏÏ÷ööÒ¿8}ú´ ‡V(333jµº\. >�–�CÔÉçó=ô“ÉdJI`.—¦·Ùlÿîßý»k×®½üòË»víJ$×®]cÁ_2™H&“‡r8hãèõú®®®ÉÉÉ_|quuuaaØšœUo¹\Ž_?©µÄ«†=HU‰4NÇívïܹ¢\pRŒüݘf#ÂÁsF…·‚àP,r¹#¨Óõ÷÷÷ôôFX›0&/]º¤Ñh¶lÙÂu7 ½ÑhdU#¡åСC …‚*Õj•Ê ûã?9gee…¡ååeŸÏ÷ðÃ+ ’¯×;33óðÃ' vk1 ³mÛ¶-[¶œ;w.™L–J¥ÁÁA€A¯×»¶¶vàÀF‡‘Yèéé) &“é+_ùŠÏç ¯¿þ:ÜÈááav­›L¦_|ñ _ø‚ü{Ÿ>™‚ðvïþ ž(:%\2¸ö‚  ¦ÛXGív»©ÿ`ëCÍDŸ Ž¢¶ÚúúúîÝ»oܸ!ÂîÝ»A Üq»Ý,¸ºvíZ½^÷ù|ÓÓÓ4jµÊN§ ßíÛ·™‡˜šš ‡ÃÇŽ{ê©§¦§§lfŠÙl†&%•J·mÛ¦V«§¦¦|>äÎd2©×ë§§§e䨅Ãá/}éKR©ìÊãñ(Š¿ù›¿Q©T/¼ð£"v»]©T LMM­¬¬üÕ_ý•B¡Ø¶maÂd2áFFF�kšÍæÇ?þqôy^y圷ëeˆÙ‹h§‘/ 2‰9¡ø7â?ë_‘£B ‚?tv³ÙŒ ¤ œçìì¬T*]\\DYòúõësss™Læù矯V«8À[·níܹóÒ¥Kèñ‹ðcóóó¬SÕjµO>ù¤ £££‰D"3ùC*~Èê¥p8|íڵݻwOOOïÝ»—µB.—ëôéÓ{öìaáÛž={¦§§õz}<Ïçó.—‹Ô£P(ìÞ½Ûét®¯¯Òׇ—íÚµñññ@ `2™¢ÑhOOÏÜÜÜ—¾ô¥ÉÉÉþþ~V;]¸pçö‰O|‚‰ÛJ¥²°°011aµZÿ…µ0œ¬{£È¿j'®‹˜ PZŠÊŒüzqvJB†}&tW®&, 0&T,gggÍfóòòòã?>77wóæM˜L&»sçús‹‹‹‰D %FÃzâh4 âÞßßÏÖñL&ç‹(6IﮈJ$CCC»wïŽD"ù|ž5 Õjµ§§'“ÉT*•ÑÑÑ—_~¹¿¿uuK9rd×®]@€Ý­V«¯¯=[N§szz sÿþý"… Ðvrr2 ¾øâ‹›››‹‹‹ôYd2Y0dx™Z­¶X,Ê~çw~‡ Dõî,`bf]”‚ißóâ‰èѳ Y³¦qÀýÄOÔñá/ùÀØì=Ñëõ0ôéÖÓ#¯ÕjÈy’³ NNNz<žååe&±wîÜéóù^{í5Q7»§§Q:ĵvìØ‘H$–——ÇÆÆòùüÊÊ ‘ðÕº»»!±ÙCsçΫպÿ~ØmÌ‹Å'Nœ;wnxxøðáÃäÙ@ Óe–H$ÉdR©T’ ºÝîÕÕUN·oß¾ÍÍMØùÁ`0<xpçÎÃÃÃ,…ßÜܤÜÎçóf³Ùf³1ÞÊeÍçó²_ù•_ae Iˆ@tB12Ö"@Þ‚Ù?$¹ÉÄ¡yªZ¦£ø‡% ,î^…Љç‰Î0“ب‹ªßlääÒé4‚bÔm£££xüõõu„ YÎZaP"©TºgÏžv» ÚÍ‚�¦€XGÙÕÕe2™d2™ÏçcÚÖ­[‰D0d4Ááp¤R©Ý»w»Ýn: ‡cvv–-hò/,,Ç2ãŤ÷ÌÌL4}衇FGG/_¾|éÒ%ìýì³ÏB>H§Ó2™ltt4‹ÕëuÖ}�í ‚@AÂl±Xdÿþßÿ{ØX<Aá®Ì 1�IrW²‘Y1öˆföH¤*@µ¼wÝ®èúDUH "(ªŒ Š›J¥ÖÖÖr¹…„‘*°}ûöõõõ•Ëå7ÞxC> —Ó7ÉçóétZ­VCTl6›ñx< rWü~¿Ùlž˜˜ SSSn·Ûjµ8p`zzšò€#Ïþ˜X,véÒ¥z½¾±±±°°ÀÁe×e2™µÓ4 ùÈG€ ¯¿þúøøøöíÛÁkΞ=;00àv»•Je2™<yòäÀÀÀáÇ¿ð…/( ŸÏ‡üîÔÔT,³Ûíòd2 ÜjµÂYév7ðdùbd‚ž/Ü]Š‘Ü]#"O¢ŽO $‰Â]©GqMÝa†ù†Ÿ4MWW ½[·ne³Y»ÝNX¶Ûí�w|~–óù|¹\þÛ¿ý[¹\NùŒáá\LMM~OLL .B1 Y,OŸ>½}ûvNL8æ r5q_„"æŽ�Y|>å`­V;}út6›Ý·oØñððð™3gØTAN499‰8ÊìììÚÚÚðð0ã³³³Ü?«²Ï|æ3Ü�Dó�¸Ä¥g¢T'øîmé>Ÿ)ºAQÖ‡&J¿Ó´‹M,< «»»»¿¿ŸQ_~ 4½^‚ ÜM4×ü~¿\._^^&?föT­VãµFGGQ§! B‡X‰,OFKáH ‚ðÈ#�F"‘Û·oonn²p€ŸÛ£P(Ðõ´Z­>•J¥Çãíéé±X,*•* ³Ã-—Ë-..~ä#‘ËåüÇÌå~öÙg¥Ré•+Wæææ¬VëŽ;hIÇãqÇsìØ±r¹üÿM”v‚è;b&���%tEXtcreate-date�2009-05-08T20:13:19+01:00Kš|­���tEXtjpeg:colorspace�2,uUŸ��� tEXtjpeg:sampling-factor�2x2,1x1,1x1Iú¦´���%tEXtmodify-date�2009-05-08T20:13:19+01:00+ ™����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/doc/analyses.bib������������������������������������������������������������������������0000644�0001750�0001750�00000224320�12131101204�014076� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% Aad:2010wv % (ATLAS_2010_S8817804) @Article{Aad:2010wv, author = "Aad, G. and others", collaboration = "ATLAS", title = "{Measurement of inclusive jet and dijet cross sections in proton-proton collisions at 7 TeV centre-of-mass energy with the ATLAS detector}", year = "2010", eprint = "1009.5908", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1009.5908;%%" } % Abe:1997eua % (CDF_1998_S3618439) @Article{Abe:1997eua, author = "Abe, F. and others", collaboration = "CDF", title = "{Measurement of the differential cross section for events with large total transverse energy in $p\bar{p}$ collisions at $\sqrt{s} = 1.8$ TeV}", journal = "Phys. Rev. Lett.", volume = "80", year = "1998", pages = "3461-3466", doi = "10.1103/PhysRevLett.80.3461", SLACcitation = "%%CITATION = PRLTA,80,3461;%%" } % Aamodt:2010pp % (ALICE_2010_S8625980) @article{Aamodt:2010pp, author = "Aamodt, K. and others", title = "{Charged-particle multiplicity measurement in proton-proton collisions at $\sqrt{s} = 7$ TeV with ALICE at LHC}", collaboration = "ALICE", journal = "Eur.Phys.J.", volume = "C68", pages = "345-354", doi = "10.1140/epjc/s10052-010-1350-2", year = "2010", eprint = "1004.3514", archivePrefix = "arXiv", primaryClass = "hep-ex", } % Akers:1994ez % (OPAL_1994_S2927284) @Article{Akers:1994ez, author = "Akers, R. and others", collaboration = "OPAL", title = "{Measurement of the production rates of charged hadrons in e+ e- annihilation at the Z0}", journal = "Z. Phys.", volume = "C63", year = "1994", pages = "181-196", doi = "10.1007/BF01411010", SLACcitation = "%%CITATION = ZEPYA,C63,181;%%" } % Alexander:1996qj % (OPAL_1997_S3396100) @Article{Alexander:1996qj, author = "Alexander, G. and others", collaboration = "OPAL", title = "{Strange baryon production in hadronic $Z^0$ decays}", journal = "Z. Phys.", volume = "C73", year = "1997", pages = "569-586", doi = "10.1007/s002880050349", SLACcitation = "%%CITATION = ZEPYA,C73,569;%%" } % Aad:2013ueu % (ATLAS_2013_I1217867) @article{Aad:2013ueu, author = "Aad, Georges and others", title = "{Measurement of $k_T$ splitting scales in $W\to \ell\nu$ events at $\sqrt{s}$=7 TeV with the ATLAS detector}", collaboration = " The ATLAS Collaboration", year = "2013", eprint = "1302.1415", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2013-003", SLACcitation = "%%CITATION = ARXIV:1302.1415;%%", } % Aad:2010pg % (ATLAS_2010_S8919674) @Article{Aad:2010pg, author = "Collaboration, The ATLAS", title = "{Measurement of the production cross section for W-bosons in association with jets in pp collisions at sqrt(s) = 7 TeV with the ATLAS detector}", year = "2010", eprint = "1012.5382", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1012.5382;%%" } % Albrecht:1993fs % (ARGUS_1993_S2789213) @article{Albrecht:1993fs, author = "Albrecht, H. and others", title = "{Inclusive production of $K^*(892)$, $\rho^0(770)$, and $\omega(783)$ mesons in the $\Upsilon$ energy region}", collaboration = "ARGUS Collaboration", journal = "Z.Phys.", volume = "C61", pages = "1-18", doi = "10.1007/BF01641882", year = "1994", reportNumber = "DESY-93-084", SLACcitation = "%%CITATION = ZEPYA,C61,1;%%", } % Abazov:2009av % (D0_2009_S8202443) @Article{Abazov:2009av, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurements of differential cross sections of $Z /\gamma^\ast$+jets+X events in proton anti-proton collisions at $\sqrt{s}$=1.96 TeV}", journal = "Phys. Lett.", volume = "B678", year = "2009", pages = "45-54", eprint = "0903.1748", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1016/j.physletb.2009.05.058", SLACcitation = "%%CITATION = 0903.1748;%%" } % daCosta:2011qk % (ATLAS_2011_S8983313) @Article{daCosta:2011qk, author = "da Costa, Joao Barreiro Guimaraes and others", collaboration = "ATLAS", title = "{Search for squarks and gluinos using final states with jets and missing transverse momentum with the ATLAS detector in $\sqrt{s}$ = 7 TeV proton-proton collisions}", year = "2011", eprint = "1102.5290", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1102.5290;%%" } % :2007nt % (D0_2008_S7554427) @Article{:2007nt, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the shape of the boson transverse momentum distribution in $p \bar{p} \to Z / \gamma^{*} \to e^+ e^- + X$ events produced at $\sqrt{s}$=1.96-TeV}", journal = "Phys. Rev. Lett.", volume = "100", year = "2008", pages = "102002", eprint = "0712.0803", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevLett.100.102002", SLACcitation = "%%CITATION = 0712.0803;%%" } % Adloff:1999ws % (H1_2000_S4129130) @Article{Adloff:1999ws, author = "Adloff, C. and others", collaboration = "H1", title = "{Measurements of transverse energy flow in deep inelastic- scattering at HERA}", journal = "Eur. Phys. J.", volume = "C12", year = "2000", pages = "595-607", eprint = "hep-ex/9907027", archivePrefix = "arXiv", doi = "10.1007/s100520000287", SLACcitation = "%%CITATION = HEP-EX/9907027;%%" } % Artuso:2004pj % (CLEO_2004_S5809304) @Article{Artuso:2004pj, author = "Artuso, M. and others", collaboration = "CLEO", title = "{Charm meson spectra in e+ e- annihilation at 10.5-GeV c.m.e}", journal = "Phys. Rev.", volume = "D70", year = "2004", pages = "112001", eprint = "hep-ex/0402040", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.70.112001", SLACcitation = "%%CITATION = HEP-EX/0402040;%%" } % Khachatryan:2011as % (CMS_2011_S8968497) @Article{Khachatryan:2011as, author = "Khachatryan, Vardan and others", collaboration = "CMS", title = "{Measurement of Dijet Angular Distributions and Search for Quark Compositeness in pp Collisions at 7 TeV}", journal = "Phys. Rev. Lett.", volume = "106", year = "2011", pages = "201804", eprint = "1102.2020", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevLett.106.201804", SLACcitation = "%%CITATION = 1102.2020;%%" } % :2012vc % (CMS_2012_I1184941) @article{:2012vc, author = "Chatrchyan, Serguei and others", title = "{Observation of a diffractive contribution to dijet production in proton-proton collisions at sqrt(s)=7 TeV}", collaboration = "CMS Collaboration", year = "2012", eprint = "1209.1805", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CMS-FWD-10-004, CERN-PH-EP-2012-248", SLACcitation = "%%CITATION = ARXIV:1209.1805;%%",} % Aad:2011hd % (ATLAS_2011_I944826) @article{Aad:2011hd, author = "Aad, Georges and others", title = "{Kshort and Lambda production in pp interactions at sqrt(s) = 0.9 and 7 TeV measured with the ATLAS detector at the LHC}", collaboration = "ATLAS Collaboration", journal = "Phys.Rev.", volume = "D85", pages = "012001", year = "2012", eprint = "1111.1297", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-168", SLACcitation = "%%CITATION = ARXIV:1111.1297;%%", } % Aad:2011cwa % (ATLAS_2012_I943401) @article{Aad:2011cwa, author = "Aad, Georges and others", title = "{Searches for supersymmetry with the ATLAS detector using final states with two leptons and missing transverse momentum in sqrt{s} = 7 TeV proton-proton collisions}", collaboration = "ATLAS Collaboration", journal = "Phys.Lett.", volume = "B709", pages = "137-157", doi = "10.1016/j.physletb.2012.01.076", year = "2012", eprint = "1110.6189", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-165", SLACcitation = "%%CITATION = ARXIV:1110.6189;%%", } % Abe:1989td % (CDF_1990_S2089246) @Article{Abe:1989td, author = "Abe, F. and others", collaboration = "CDF", title = "{Pseudorapidity distributions of charged particles produced in $\bar{p}p$ interactions at $\sqrt{s} = 630$ GeV and 1800 GeV}", journal = "Phys. Rev.", volume = "D41", year = "1990", pages = "2330", doi = "10.1103/PhysRevD.41.2330", SLACcitation = "%%CITATION = PHRVA,D41,2330;%%" } % Acosta:2005ix % (CDF_2005_S6217184) @Article{Acosta:2005ix, author = "Acosta, Darin E. and others", collaboration = "CDF", title = "{Study of jet shapes in inclusive jet production in $p\bar{p}$ collisions at $\sqrt{s}=1.96$ TeV}", journal = "Phys. Rev.", volume = "D71", year = "2005", pages = "112002", eprint = "hep-ex/0505013", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.71.112002", SLACcitation = "%%CITATION = HEP-EX/0505013;%%" } % MovillaFernandez:1997fr % (JADE_1998_S3612880) @Article{MovillaFernandez:1997fr, author = "Movilla Fernandez, P. A. and Biebel, O. and Bethke, S. and Kluth, S. and Pfeifenschneider, P.", collaboration = "JADE", title = "{A study of event shapes and determinations of alpha(s) using data of e+ e- annihilations at s**(1/2) = 22-GeV to 44-GeV}", journal = "Eur. Phys. J.", volume = "C1", year = "1998", pages = "461-478", eprint = "hep-ex/9708034", archivePrefix = "arXiv", doi = "10.1007/s100520050096", SLACcitation = "%%CITATION = HEP-EX/9708034;%%" } % Abazov:2007jy % (D0_2007_S7075677) @Article{Abazov:2007jy, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the shape of the boson rapidity distribution for $p \bar{p} \to Z/gamma^* \to e^{+} e^{-}$ + $X$ events produced at $\sqrt{s}$ of 1.96-TeV}", journal = "Phys. Rev.", volume = "D76", year = "2007", pages = "012003", eprint = "hep-ex/0702025", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.76.012003", SLACcitation = "%%CITATION = HEP-EX/0702025;%%" } % Acosta:2004wqa % (CDF_2004_S5839831) @Article{Acosta:2004wqa, author = "Acosta, Darin E. and others", collaboration = "CDF", title = "{The underlying event in hard interactions at the Tevatron $\bar{p}p$ collider}", journal = "Phys. Rev.", volume = "D70", year = "2004", pages = "072002", eprint = "hep-ex/0404004", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.70.072002", SLACcitation = "%%CITATION = HEP-EX/0404004;%%" } % Abelev:2006cs % (STAR_2006_S6860818) @Article{Abelev:2006cs, author = "Abelev, B. I. and others", collaboration = "STAR", title = "{Strange particle production in p + p collisions at s**(1/2) = 200-GeV}", journal = "Phys. Rev.", volume = "C75", year = "2007", pages = "064901", eprint = "nucl-ex/0607033", archivePrefix = "arXiv", doi = "10.1103/PhysRevC.75.064901", SLACcitation = "%%CITATION = NUCL-EX/0607033;%%" } % Barate:1999bg % (ALEPH_1999_S4193598) @article{Barate:1999bg, author = "Barate, R. and others", title = "{Study of charm production in Z decays}", collaboration = "ALEPH Collaboration", journal = "Eur.Phys.J.", volume = "C16", pages = "597-611", doi = "10.1007/s100520000421", year = "2000", eprint = "hep-ex/9909032", archivePrefix = "arXiv", primaryClass = "hep-ex", } % Aad:2011xm % (ATLAS_2011_S9019561) @Article{Aad:2011xm, author = "Aad, Georges and others", collaboration = "ATLAS", title = "{Search for supersymmetric particles in events with lepton pairs and large missing transverse momentum in sqrt{s} = 7 TeV proton-proton collisions with the ATLAS experiment}", year = "2011", eprint = "1103.6214", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1103.6214;%%" } % Abazov:2010fr % (D0_2010_S8566488) @Article{Abazov:2010fr, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the dijet invariant mass cross section in $p\overline{p}$ collisions at $\sqrt{s} =$ 1.96 TeV}", year = "2010", eprint = "1002.4594", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1002.4594;%%" } % Khachatryan:2011hf % (CMS_2011_S8941262) @Article{Khachatryan:2011hf, author = "Khachatryan, Vardan and others", collaboration = "CMS", title = "{Inclusive $b$-hadron production cross-section with muons in $pp$ collisions at $\sqrt{s} = 7$~TeV}", journal = "JHEP", volume = "03", year = "2011", pages = "090", eprint = "1101.3512", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1007/JHEP03(2011)090", SLACcitation = "%%CITATION = 1101.3512;%%" } % Aad:2011gj % (ATLAS_2011_S9131140) @Article{Aad:2011gj, author = "Aad, Georges and others", collaboration = "ATLAS", title = "{Measurement of the transverse momentum distribution of $Z/\gamma^*$ bosons in proton-proton collisions at $\sqrt{s} = 7$\;TeV with the ATLAS detector}", year = "2011", eprint = "1107.2381", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1107.2381;%%" } % Aaltonen:2008eq % (CDF_2008_S7828950) @Article{Aaltonen:2008eq, author = "Aaltonen, T. and others", collaboration = "CDF", title = "{Measurement of the Inclusive Jet Cross Section at the Fermilab Tevatron p-pbar Collider Using a Cone-Based Jet Algorithm}", journal = "Phys. Rev.", volume = "D78", year = "2008", pages = "052006", eprint = "0807.2204", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevD.78.052006", SLACcitation = "%%CITATION = 0807.2204;%%" } % Alexander:1995qb % (OPAL_1996_S3257789) @article{Alexander:1995qb, author = "Alexander, G. and others", title = "{$J/\psi$ and $\psi^\prime$ production in hadronic $Z^0$ decays}", collaboration = "OPAL Collaboration", journal = "Z.Phys.", volume = "C70", pages = "197-210", doi = "10.1007/s002880050096", year = "1996", reportNumber = "CERN-PPE-95-153", SLACcitation = "%%CITATION = ZEPYA,C70,197;%%", } % Abazov:2010ah % (D0_2010_S8570965) @Article{Abazov:2010ah, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of direct photon pair production cross sections in $p \bar{p}$ collisions at $\sqrt(s)=1.96$ TeV}", year = "2010", eprint = "1002.4917", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1002.4917;%%" } % Alner:1987wb % (UA5_1987_S1640666) @Article{Alner:1987wb, author = "Alner, G. J. and others", collaboration = "UA5", title = "{UA5: A general study of proton-antiproton physics at $\sqrt{s}$ = 546-GeV}", journal = "Phys. Rept.", volume = "154", year = "1987", pages = "247-383", doi = "10.1016/0370-1573(87)90130-X", SLACcitation = "%%CITATION = PRPLC,154,247;%%" } % Aaltonen:2008mt % (CDF_2008_S8095620) @Article{Aaltonen:2008mt, author = "Aaltonen, T. and others", collaboration = "CDF", title = "{Measurement of Cross Sections for $b$ Jet Production in Events with a $Z$ Boson in $p^-$ anti-p Collisions at $\sqrt{s}$ = 1.96-TeV}", journal = "Phys. Rev.", volume = "D79", year = "2009", pages = "052008", eprint = "0812.4458", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevD.79.052008", SLACcitation = "%%CITATION = 0812.4458;%%" } % Abreu:1998nn % (DELPHI_1999_S3960137) @Article{Abreu:1998nn, author = "Abreu, P. and others", collaboration = "DELPHI", title = "{Measurement of inclusive $\rho^0$, $f^0(980)$, $f_2(1270)$, $K^{*0}_2(1430)$ and $f^\prime_2(1525)$ production in $Z^0$ decays}", journal = "Phys. Lett.", volume = "B449", year = "1999", pages = "364-382", doi = "10.1016/S0370-2693(99)00105-7", SLACcitation = "%%CITATION = PHLTA,B449,364;%%" } % Abbiendi:2004qz % (OPAL_2004_S6132243) @Article{Abbiendi:2004qz, author = "Abbiendi, G. and others", collaboration = "OPAL", title = "{Measurement of event shape distributions and moments in e+ e- --> hadrons at 91-GeV - 209-GeV and a determination of alpha(s)}", journal = "Eur. Phys. J.", volume = "C40", year = "2005", pages = "287-316", eprint = "hep-ex/0503051", archivePrefix = "arXiv", doi = "10.1140/epjc/s2005-02120-6", SLACcitation = "%%CITATION = HEP-EX/0503051;%%" } % :2012fs % (ATLAS_2012_I1125575) @article{:2012fs, author = "Aad, Georges and others", title = "{Underlying event characteristics and their dependence on jet size of charged-particle jet events in $pp$ collisions at $\sqrt{s}=7$ TeV with the ATLAS detector}", collaboration = "ATLAS Collaboration", journal = "Phys.Rev.", volume = "D86", pages = "072004", doi = "10.1103/PhysRevD.86.072004", year = "2012", eprint = "1208.0563", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-148", SLACcitation = "%%CITATION = ARXIV:1208.0563;%%", } % Affolder:1999ua % (CDF_2000_S4266730) @Article{Affolder:1999ua, author = "Affolder, Anthony Allen and others", collaboration = "CDF", title = "{A measurement of the differential dijet mass cross section in $p\bar{p}$ collisions at $\sqrt{s} = 1.8$ TeV}", journal = "Phys. Rev.", volume = "D61", year = "2000", pages = "091101", eprint = "hep-ex/9912022", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.61.091101", SLACcitation = "%%CITATION = HEP-EX/9912022;%%" } % Chatrchyan:2011ci % (CMS_2011_I954992) @article{Chatrchyan:2011ci, author = "Chatrchyan, Serguei and others", title = "{Exclusive photon-photon production of muon pairs in proton-proton collisions at sqrt(s) = 7 TeV}", collaboration = "CMS Collaboration", journal = "JHEP", volume = "1201", pages = "052", doi = "10.1007/JHEP01(2012)052", year = "2012", eprint = "1111.5536", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-187, CMS-FWD-10-005", SLACcitation = "%%CITATION = ARXIV:1111.5536;%%",} % Abazov:2001nta % (D0_2001_S4674421) @Article{Abazov:2001nta, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the ratio of differential cross sections for $W$ and $Z$ boson production as a function of transverse momentum in $p\bar{p}$ collisions at $\sqrt{s} = 1.8$ TeV}", journal = "Phys. Lett.", volume = "B517", year = "2001", pages = "299-308", eprint = "hep-ex/0107012", archivePrefix = "arXiv", doi = "10.1016/S0370-2693(01)01020-6", SLACcitation = "%%CITATION = HEP-EX/0107012;%%" } % :2008hua % (D0_2008_S7662670) @Article{:2008hua, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the inclusive jet cross-section in $p \bar{p}$ collisions at $s^{91/2)}$ =1.96-TeV}", journal = "Phys. Rev. Lett.", volume = "101", year = "2008", pages = "062001", eprint = "0802.2400", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevLett.101.062001", SLACcitation = "%%CITATION = 0802.2400;%%" } % Abazov:2005wc % (D0_2006_S6438750) @Article{Abazov:2005wc, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the isolated photon cross section in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96-TeV}", journal = "Phys. Lett.", volume = "B639", year = "2006", pages = "151-158", eprint = "hep-ex/0511054", archivePrefix = "arXiv", doi = "10.1016/j.physletb.2006.04.048", SLACcitation = "%%CITATION = HEP-EX/0511054;%%" } % Ansorge:1988kn % (UA5_1989_S1926373) @Article{Ansorge:1988kn, author = "Ansorge, R. E. and others", collaboration = "UA5", title = "{Charged Particle Multiplicity Distributions at 200-GeV and 900-GeV Center-Of-Mass Energy}", journal = "Z. Phys.", volume = "C43", year = "1989", pages = "357", doi = "10.1007/BF01506531", SLACcitation = "%%CITATION = ZEPYA,C43,357;%%" } % :2012fa % (ATLAS_2012_I1091481) @article{:2012fa, author = "Aad, Georges and others", title = "{Measurement of the azimuthal ordering of charged hadrons with the ATLAS detector}", collaboration = "ATLAS Collaboration", year = "2012", eprint = "1203.0419", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-197", SLACcitation = "%%CITATION = ARXIV:1203.0419;%%", } % :2012fc % (ATLAS_2012_I1118269) @article{:2012fc, author = "Aad, Georges and others", title = "{Measurement of the b-hadron production cross section using decays to $D^{*}\mu^-X$ final states in pp collisions at sqrt(s) = 7 TeV with the ATLAS detector}", collaboration = "ATLAS Collaboration", journal = "Nucl.Phys.", volume = "B864", pages = "341-381", doi = "10.1016/j.nuclphysb.2012.07.009", year = "2012", eprint = "1206.3122", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-121", SLACcitation = "%%CITATION = ARXIV:1206.3122;%%", } % Collaboration:2011tq % (ATLAS_2011_S9128077) @Article{Collaboration:2011tq, author = "Collaboration, ATLAS", title = "{Measurement of multi-jet cross sections in proton-proton collisions at a 7 TeV center-of-mass energy}", year = "2011", eprint = "1107.2092", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1107.2092;%%" } % Aamodt:2010my % (ALICE_2010_S8706239) @Article{Aamodt:2010my, author = "Aamodt, K and others", collaboration = "ALICE", title = "{Transverse momentum spectra of charged particles in proton-proton collisions at $\sqrt{s} = 900$~GeV with ALICE at the LHC}", journal = "Phys. Lett.", volume = "B693", year = "2010", pages = "53-68", eprint = "1007.0719", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1016/j.physletb.2010.08.026", SLACcitation = "%%CITATION = 1007.0719;%%" } % CMS-PAS-QCD-10-024 % (CMS_QCD_10_024) @article{CMS-PAS-QCD-10-024, title = "Pseudorapidity distributions of charged particles in pp collisions at $\sqrt{s} = 7$~TeV with at least one central charged particle", year = "2011", } % Pfeifenschneider:1999rz % (JADE_OPAL_2000_S4300807) @Article{Pfeifenschneider:1999rz, author = "Pfeifenschneider, P. and others", collaboration = "JADE", title = "{QCD analyses and determinations of alpha(s) in e+ e- annihilation at energies between 35-GeV and 189-GeV}", journal = "Eur. Phys. J.", volume = "C17", year = "2000", pages = "19-51", eprint = "hep-ex/0001055", archivePrefix = "arXiv", doi = "10.1007/s100520000432", SLACcitation = "%%CITATION = HEP-EX/0001055;%%" } % Chatrchyan:2011wn % (CMS_2011_S9088458) @article{Chatrchyan:2011wn, author = "Chatrchyan, Serguei and others", title = "{Measurement of the Ratio of the 3-jet to 2-jet Cross Sections in pp Collisions at sqrt(s) = 7 TeV}", collaboration = "CMS Collaboration", journal = "Phys.Lett.", volume = "B702", pages = "336-354", year = "2011", note = "* Temporary entry *", eprint = "1106.0647", archivePrefix = "arXiv", primaryClass = "hep-ex",} % Chatrchyan:2011wm % (CMS_2011_S9215166) @Article{Chatrchyan:2011wm, author = "Chatrchyan, Serguei and others", collaboration = "CMS", title = "{Measurement of energy flow at large pseudorapidities in $pp$ collisions at $\sqrt{s}$ = 0.9 and 7 TeV}", journal = "JHEP", volume = "11", year = "2011", pages = "148", eprint = "1110.0211", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1007/JHEP11(2011)148", SLACcitation = "%%CITATION = 1110.0211;%%" } % Affolder:1999jh % (CDF_2000_S4155203) @Article{Affolder:1999jh, author = "Affolder, Anthony Allen and others", collaboration = "CDF", title = "{The transverse momentum and total cross section of $e^+e^- $ pairs in the $Z$ boson region from $p\bar{p}$ collisions at $\sqrt{s} = 1.8$ TeV}", journal = "Phys. Rev. Lett.", volume = "84", year = "2000", pages = "845-850", eprint = "hep-ex/0001021", archivePrefix = "arXiv", doi = "10.1103/PhysRevLett.84.845", SLACcitation = "%%CITATION = HEP-EX/0001021;%%" } % Abe:1998zs % (SLD_1999_S3743934) @Article{Abe:1998zs, author = "Abe, K. and others", collaboration = "SLD", title = "{Production of pi+, K+, K0, K*0, Phi, p and Lambda0 in hadronic Z0 decays}", journal = "Phys. Rev.", volume = "D59", year = "1999", pages = "052001", eprint = "hep-ex/9805029", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.59.052001", SLACcitation = "%%CITATION = HEP-EX/9805029;%%" } % Alner:1986xu % (UA5_1986_S1583476) @Article{Alner:1986xu, author = "Alner, G. J. and others", collaboration = "UA5", title = "{Scaling of Pseudorapidity Distributions at c.m. Energies Up to 0.9-TeV}", journal = "Z. Phys.", volume = "C33", year = "1986", pages = "1-6", doi = "10.1007/BF01410446", SLACcitation = "%%CITATION = ZEPYA,C33,1;%%" } % :2012 % (CMS_2012_I1193338) @article{:2012, author = "Chatrchyan, Serguei and others", title = "{Measurement of the inelastic proton-proton cross section at sqrt(s) = 7 TeV}", collaboration = " CMS Collaboration", year = "2012", eprint = "1210.6718", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CMS-FWD-11-001, CERN-PH-EP-2012-293", SLACcitation = "%%CITATION = ARXIV:1210.6718;%%",} % Aaltonen:2009pc % (CDF_2009_S8383952) @Article{Aaltonen:2009pc, author = "Aaltonen, T. and others", collaboration = "CDF", title = "{Measurement of $d\sigma/dy$ of Drell-Yan $e^+e^-$ pairs in the $Z$ Mass Region from $p\bar{p}$ Collisions at $\sqrt{s}=1.96$ TeV}", year = "2009", eprint = "0908.3914", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 0908.3914;%%" } % Khachatryan:2011zj % (CMS_2011_S8950903) @article{Khachatryan:2011zj, author = "Khachatryan, Vardan and others", title = "{Dijet Azimuthal Decorrelations in $pp$ Collisions at $\sqrt{s} = 7$~TeV}", collaboration = "CMS Collaboration", journal = "Phys.Rev.Lett.", volume = "106", pages = "122003", doi = "10.1103/PhysRevLett.106.122003", year = "2011", eprint = "1101.5029", archivePrefix = "arXiv", primaryClass = "hep-ex",} % Abazov:2006gs % (D0_2008_S6879055) @Article{Abazov:2006gs, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the ratios of the Z/G* + >= n jet production cross sections to the total inclusive Z/G* cross section in ppbar collisions at sqrt(s) = 1.96 TeV}", journal = "Phys. Lett.", volume = "B658", year = "2008", pages = "112-119", eprint = "hep-ex/0608052", archivePrefix = "arXiv", doi = "10.1016/j.physletb.2007.10.046", SLACcitation = "%%CITATION = HEP-EX/0608052;%%" } % Aubert:2002hc % (BABAR_2003_I593379) @article{Aubert:2002hc, author = "Aubert, Bernard and others", title = "{Study of inclusive production of charmonium mesons in $B$ decay}", collaboration = "BABAR Collaboration", journal = "Phys.Rev.", volume = "D67", pages = "032002", doi = "10.1103/PhysRevD.67.032002", year = "2003", eprint = "hep-ex/0207097", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "SLAC-PUB-9327, BABAR-PUB-02-04", SLACcitation = "%%CITATION = HEP-EX/0207097;%%", } % Abt:1994ye % (H1_1994_S2919893) @Article{Abt:1994ye, author = "Abt, I. and others", collaboration = "H1", title = "{Energy flow and charged particle spectrum in deep inelastic scattering at HERA}", journal = "Z. Phys.", volume = "C63", year = "1994", pages = "377-390", doi = "10.1007/BF01580319", SLACcitation = "%%CITATION = ZEPYA,C63,377;%%" } % Aamodt:2011zj % (ALICE_2011_S8945144) @article{Aamodt:2011zj, author = "Aamodt, K. and others", title = "{Production of pions, kaons and protons in $pp$ collisions at $\sqrt{s}= 900$ GeV with ALICE at the LHC}", collaboration = "ALICE", journal = "Eur.Phys.J.", volume = "C71", pages = "1655", doi = "10.1140/epjc/s10052-011-1655-9", year = "2011", eprint = "1101.4110", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2010-085", SLACcitation = "%%CITATION = ARXIV:1101.4110;%%", } % Aad:2011rr % (ATLAS_2011_I926145) @article{Aad:2011rr, author = "Aad, Georges and others", title = "{Measurements of the electron and muon inclusive cross-sections in proton-proton collisions at sqrt(s) = 7 TeV with the ATLAS detector}", collaboration = "ATLAS Collaboration", year = "2011", eprint = "1109.0525", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-108", SLACcitation = "%%CITATION = ARXIV:1109.0525;%%", } % Abulencia:2005yg % (CDF_2006_S6450792) @Article{Abulencia:2005yg, author = "Abulencia, A. and others", collaboration = "CDF", title = "{Measurement of the inclusive jet cross section in $p\bar{p}$ interactions at $\sqrt{s} =$ 1.96-TeV using a cone-based jet algorithm}", journal = "Phys. Rev.", volume = "D74", year = "2006", pages = "071103", eprint = "hep-ex/0512020", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.74.071103", SLACcitation = "%%CITATION = HEP-EX/0512020;%%" } % Seuster:2005tr % (BELLE_2006_S6265367) @Article{Seuster:2005tr, author = "Seuster, R. and others", collaboration = "Belle", title = "{Charm hadrons from fragmentation and B decays in e+ e- annihilation at $\sqrt{s}$ = 10.6\,GeV}", journal = "Phys. Rev.", volume = "D73", year = "2006", pages = "032002", eprint = "hep-ex/0506068", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.73.032002", SLACcitation = "%%CITATION = HEP-EX/0506068;%%" } % Heister:2001jg % (ALEPH_2001_S4656318) @Article{Heister:2001jg, author = "Heister, A. and others", collaboration = "ALEPH", title = "{Study of the fragmentation of b quarks into B mesons at the Z peak}", journal = "Phys. Lett.", volume = "B512", year = "2001", pages = "30-48", eprint = "hep-ex/0106051", archivePrefix = "arXiv", doi = "10.1016/S0370-2693(01)00690-6", SLACcitation = "%%CITATION = HEP-EX/0106051;%%" } % Heister:2003aj % (ALEPH_2004_S5765862) @Article{Heister:2003aj, author = "Heister, A. and others", collaboration = "ALEPH", title = "{Studies of QCD at e+ e- centre-of-mass energies between 91-GeV and 209-GeV}", journal = "Eur. Phys. J.", volume = "C35", year = "2004", pages = "457-486", doi = "10.1140/epjc/s2004-01891-4", SLACcitation = "%%CITATION = EPHJA,C35,457;%%" } % Aamodt:2010ft % (ALICE_2010_S8624100) @Article{Aamodt:2010ft, author = "Aamodt, K. and others", collaboration = "ALICE", title = "{Charged-particle multiplicity measurement in proton-proton collisions at $\sqrt{s} = 0.9$ and 2.36 TeV with ALICE at LHC}", journal = "Eur. Phys. J.", volume = "C68", year = "2010", pages = "89-108", eprint = "1004.3034", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1140/epjc/s10052-010-1339-x", SLACcitation = "%%CITATION = 1004.3034;%%" } % Aad:2012I1112263 % (ATLAS_2012_I1112263) @article{Aad:2012I1112263, author = "Aad, Georges and others", title = "{Search for supersymmetry in events with three leptons and missing transverse momentum in $\sqrt{s}$ = 7 TeV pp collisions with the ATLAS detector}", collaboration = "ATLAS Collaboration", year = "2012", note = "5 pages plus author list (18 pages total), 2 figures, 1 table, submitted to Physics Review Letters", eprint = "1204.5638", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-098", SLACcitation = "%%CITATION = ARXIV:1204.5638;%%", } % Abazov:2008qv % (D0_2008_S7837160) @Article{Abazov:2008qv, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the electron charge asymmetry in $p \bar{p} \to W + X \to e \nu + X$ events at $\sqrt{s}$ = 1.96-TeV}", journal = "Phys. Rev. Lett.", volume = "101", year = "2008", pages = "211801", eprint = "0807.3367", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevLett.101.211801", SLACcitation = "%%CITATION = 0807.3367;%%" } % Abe:2002iq % (SLD_2002_S4869273) @Article{Abe:2002iq, author = "Abe, Koya and others", collaboration = "SLD", title = "{Measurement of the b-quark fragmentation function in Z0 decays}", journal = "Phys. Rev.", volume = "D65", year = "2002", pages = "092006", eprint = "hep-ex/0202031", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.65.092006", note = "[Erratum-ibid.D66:079905,2002]", SLACcitation = "%%CITATION = HEP-EX/0202031;%%" } % :2012dr % (ATLAS_2012_I1183818) @article{:2012dr, author = "Aad, Georges and others", title = "{Measurements of the pseudorapidity dependence of the total transverse energy in proton-proton collisions at sqrt(s) = 7 TeV with ATLAS}", collaboration = "ATLAS Collaboration", year = "2012", eprint = "1208.6256", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-196", SLACcitation = "%%CITATION = ARXIV:1208.6256;%%", } % Acosta:2001rm % (CDF_2002_S4796047) @Article{Acosta:2001rm, author = "Acosta, Darin E. and others", collaboration = "CDF", title = "{Soft and hard interactions in $p\bar{p}$ collisions at $\sqrt{s}=$ 1800-GeV and 630-GeV}", journal = "Phys. Rev.", volume = "D65", year = "2002", pages = "072005", doi = "10.1103/PhysRevD.65.072005", SLACcitation = "%%CITATION = PHRVA,D65,072005;%%" } % Buskulic:1995au % (ALEPH_1996_S3196992) @Article{Buskulic:1995au, author = "Buskulic, D. and others", collaboration = "ALEPH", title = "{First measurement of the quark to photon fragmentation function}", journal = "Z. Phys.", volume = "C69", year = "1996", pages = "365-378", doi = "10.1007/s002880050037", SLACcitation = "%%CITATION = ZEPYA,C69,365;%%" } % Abulencia:2007ez % (CDF_2007_S7057202) @Article{Abulencia:2007ez, author = "Abulencia, A. and others", collaboration = "CDF", title = "{Measurement of the Inclusive Jet Cross Section using the {\boldmath $k_{\rm T}$} algorithmin{\boldmath $p\overline{p}$} Collisions at{\boldmath $\sqrt{s}$} = 1.96 TeV with the CDF II Detector}", journal = "Phys. Rev.", volume = "D75", year = "2007", pages = "092006", eprint = "hep-ex/0701051", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.75.092006", SLACcitation = "%%CITATION = HEP-EX/0701051;%%" } % ATLAS:2012ap % (ATLAS_2012_I1094061) @article{ATLAS:2012ap, author = "Aad, Georges and others", title = "{Measurement of inclusive two-particle angular correlations in pp collisions with the ATLAS detector at the LHC}", collaboration = "ATLAS Collaboration", journal = "JHEP", volume = "1205", pages = "157", doi = "10.1007/JHEP05(2012)157", year = "2012", eprint = "1203.3549", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-011", SLACcitation = "%%CITATION = ARXIV:1203.3549;%%", } % Abe:1988yu % (CDF_1988_S1865951) @Article{Abe:1988yu, author = "Abe, F. and others", collaboration = "CDF", title = "{Transverse momentum distributions of charged particles produced in $\bar{p}p$ interactions at $\sqrt{s} = 630$ GeV and 1800 GeV}", journal = "Phys. Rev. Lett.", volume = "61", year = "1988", pages = "1819", doi = "10.1103/PhysRevLett.61.1819", SLACcitation = "%%CITATION = PRLTA,61,1819;%%" } % Abreu:2000nt % (DELPHI_2000_S4328825) @Article{Abreu:2000nt, author = "Abreu, P. and others", collaboration = "DELPHI", title = "{Hadronization properties of b quarks compared to light quarks in e+ e- --> q anti-q from 183-GeV to 200-GeV}", journal = "Phys. Lett.", volume = "B479", year = "2000", pages = "118-128", eprint = "hep-ex/0103022", archivePrefix = "arXiv", doi = "10.1016/S0370-2693(00)00312-9", SLACcitation = "%%CITATION = HEP-EX/0103022;%%" } % Affolder:2001xt % (CDF_2001_S4751469) @Article{Affolder:2001xt, author = "Affolder, Anthony Allen and others", collaboration = "CDF", title = "{Charged jet evolution and the underlying event in $p\bar{p}$ collisions at 1.8 TeV}", journal = "Phys. Rev.", volume = "D65", year = "2002", pages = "092002", doi = "10.1103/PhysRevD.65.092002", SLACcitation = "%%CITATION = PHRVA,D65,092002;%%" } % Aad:2011qa % (ATLAS_2011_S9225137) @article{Aad:2011qa, author = "Aad, Georges and others", title = "{Search for new phenomena in final states with large jet multiplicities and missing transverse momentum using sqrt(s)=7 TeV pp collisions with the ATLAS detector.}", collaboration = "Atlas Collaboration", journal = "JHEP", volume = "1111", pages = "099", doi = "10.1007/JHEP11(2011)099", year = "2011", eprint = "1110.2299", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-155", SLACcitation = "%%CITATION = ARXIV:1110.2299;%%", } % Heister:2001kp % (ALEPH_2002_S4823664) @article{Heister:2001kp, author = "Heister, A. and others", title = "{Inclusive production of the omega and eta mesons in Z decays, and the muonic branching ratio of the omega}", collaboration = "ALEPH Collaboration", journal = "Phys.Lett.", volume = "B528", pages = "19-33", doi = "10.1016/S0370-2693(02)01220-0", year = "2002", eprint = "hep-ex/0201012", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-EP-2001-090", SLACcitation = "%%CITATION = HEP-EX/0201012;%%", } % Abazov:2004hm % (D0_2004_S5992206) @Article{Abazov:2004hm, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of dijet azimuthal decorrelations at central rapidities in $p\bar{p}$ collisions at $\sqrt{s} = 1.96$ TeV}", journal = "Phys. Rev. Lett.", volume = "94", year = "2005", pages = "221801", eprint = "hep-ex/0409040", archivePrefix = "arXiv", doi = "10.1103/PhysRevLett.94.221801", SLACcitation = "%%CITATION = HEP-EX/0409040;%%" } % Antchev:1472948 % (TOTEM_2012_002) @techreport{Antchev:1472948, author = "Antchev, G. and others", collaboration = "TOTEM", title = "Measurement of proton-proton elastic scattering and total cross-section at $\sqrt{s}$ = 7 TeV", institution = "CERN", address = "Geneva", number = "CERN-PH-EP-2012-239. TOTEM-2012-002", month = "Aug", year = "2012"} % Acosta:2004sn % (CDF_2005_S6080774) @Article{Acosta:2004sn, author = "Acosta, Darin E. and others", collaboration = "CDF", title = "{Measurement of the cross section for prompt diphoton production in $p\bar{p}$ collisions at $\sqrt{s} = 1.96$ TeV}", journal = "Phys. Rev. Lett.", volume = "95", year = "2005", pages = "022003", eprint = "hep-ex/0412050", archivePrefix = "arXiv", doi = "10.1103/PhysRevLett.95.022003", SLACcitation = "%%CITATION = HEP-EX/0412050;%%" } % Adriani:2012ap % (LHCF_2012_I1115479) @Article{Adriani:2012ap, author = "Adriani, O. and others", title = "{Measurement of forward neutral pion transverse momentum spectra for $\sqrt{s}$ = 7TeV proton-proton collisions at LHC}", collaboration = "LHCf Collaboration", year = "2012", eprint = "1205.4578", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = ARXIV:1205.4578;%%",} % Aad:2011qv % (ATLAS_2011_I945498) @article{Aad:2011qv, key = "945498", title = "{Measurement of the production cross section for Z/gamma* in association with jets in pp collisions at sqrt(s) = 7 TeV with the ATLAS detector}", collaboration = "ATLAS Collaboration", year = "2011", eprint = "1111.2690", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-162", SLACcitation = "%%CITATION = ARXIV:1111.2690;%%", } % Chatrchyan:2012tb % (CMS_2012_I1107658) @article{Chatrchyan:2012tb, author = "Chatrchyan, Serguei and others", title = "{Measurement of the underlying event in the Drell-Yan process in proton-proton collisions at sqrt(s) = 7 TeV}", collaboration = "CMS Collaboration", year = "2012", eprint = "1204.1411", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CMS-QCD-11-012, CERN-PH-EP-2012-085", SLACcitation = "%%CITATION = ARXIV:1204.1411;%%",} % Albrecht:1992nu % (ARGUS_1993_S2669951) @article{Albrecht:1992nu, author = "Albrecht, H. and others", title = "{Inclusive production of eta-prime (958) and f0 (975) mesons in the upsilon energy region}", collaboration = "ARGUS Collaboration", journal = "Z.Phys.", volume = "C58", pages = "199-206", doi = "10.1007/BF01560338", year = "1993", reportNumber = "DESY-92-174", SLACcitation = "%%CITATION = ZEPYA,C58,199;%%", } % Ansorge:1988fg % (UA5_1988_S1867512) @Article{Ansorge:1988fg, author = "Ansorge, R. E. and others", collaboration = "UA5", title = "{CHARGED PARTICLE CORRELATIONS IN ANTI-P P COLLISIONS AT C.M. ENERGIES OF 200-GEV, 546-GEV AND 900-GEV}", journal = "Z. Phys.", volume = "C37", year = "1988", pages = "191-213", doi = "10.1007/BF01579906", SLACcitation = "%%CITATION = ZEPYA,C37,191;%%" } % Chatrchyan:2011id % (CMS_2011_S9120041) @article{Chatrchyan:2011id, author = "Chatrchyan, Serguei and others", title = "{Measurement of the Underlying Event Activity at the LHC with sqrt(s)= 7 TeV and Comparison with sqrt(s) = 0.9 TeV}", collaboration = "CMS Collaboration", year = "2011", eprint = "1107.0330", archivePrefix = "arXiv", primaryClass = "hep-ex",} % Abe:2003iy % (SLD_2004_S5693039) @Article{Abe:2003iy, author = "Abe, Koya and others", collaboration = "SLD", title = "{Production of $\pi^+$, $\pi^-$, $K^+$, $K^-$, $p$ and $\bar p$ in light (uds), c and b jets from $Z^0$ decays}", journal = "Phys. Rev.", volume = "D69", year = "2004", pages = "072003", eprint = "hep-ex/0310017", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.69.072003", SLACcitation = "%%CITATION = HEP-EX/0310017;%%" } % Abazov:2011ub % (D0_2011_I895662) @article{Abazov:2011ub, author = "Abazov, Victor Mukhamedovich and others", title = "{Measurement of three-jet differential cross sections $d\sigma_{\text{3jet}} / dM_{\text{3jet}}$ in $p\bar{p}$ collisions at $\sqrt{s}=1.96$ TeV}", collaboration = "D0 Collaboration", journal = "Phys.Lett.", volume = "B704", pages = "434-441", year = "2011", eprint = "1104.1986", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "FERMILAB-PUB-11-173-E", SLACcitation = "%%CITATION = ARXIV:1104.1986;%%", } % Abbiendi:2002vn % (OPAL_2002_S5361494) @article{Abbiendi:2002vn, author = "Abbiendi, G. and others", title = "{Charged particle multiplicities in heavy and light quark initiated events above the Z0 peak}", collaboration = "OPAL Collaboration", journal = "Phys.Lett.", volume = "B550", pages = "33-46", doi = "10.1016/S0370-2693(02)02935-0", year = "2002", note = "18 pages, 5 figures Report-no: CERN-EP-2002-0079", eprint = "hep-ex/0211007", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-EP-2002-079", SLACcitation = "%%CITATION = HEP-EX/0211007;%%", } % Ackerstaff:1998hz % (OPAL_1998_S3780481) @Article{Ackerstaff:1998hz, author = "Ackerstaff, K. and others", collaboration = "OPAL", title = "{Measurements of flavour dependent fragmentation functions in Z0 --> q anti-q events}", journal = "Eur. Phys. J.", volume = "C7", year = "1999", pages = "369-381", eprint = "hep-ex/9807004", archivePrefix = "arXiv", doi = "10.1007/s100529901067", SLACcitation = "%%CITATION = HEP-EX/9807004;%%" } % Abe:1994nj % (CDF_1994_S2952106) @Article{Abe:1994nj, author = "Abe, F. and others", collaboration = "CDF", title = "{Evidence for color coherence in $p\bar{p}$ collisions at $\sqrt{s} = 1.8$ TeV}", journal = "Phys. Rev.", volume = "D50", year = "1994", pages = "5562-5579", doi = "10.1103/PhysRevD.50.5562", SLACcitation = "%%CITATION = PHRVA,D50,5562;%%" } % Abe:1996mj % (CDF_1996_S3418421) @Article{Abe:1996mj, author = "Abe, F. and others", collaboration = "CDF", title = "{Measurement of dijet angular distributions at CDF}", journal = "Phys. Rev. Lett.", volume = "77", year = "1996", pages = "5336-5341", eprint = "hep-ex/9609011", archivePrefix = "arXiv", doi = "10.1103/PhysRevLett.77.5336", SLACcitation = "%%CITATION = HEP-EX/9609011;%%" } % Abbiendi:2000cv % (OPAL_2000_S4418603) @article{Abbiendi:2000cv, author = "Abbiendi, G. and others", title = "{Multiplicities of pi0, eta, K0 and of charged particles in quark and gluon jets}", collaboration = "OPAL Collaboration", journal = "Eur.Phys.J.", volume = "C17", pages = "373-387", doi = "10.1007/s100520000505", year = "2000", eprint = "hep-ex/0007017", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-EP-2000-070", SLACcitation = "%%CITATION = HEP-EX/0007017;%%", } % Affolder:2001fa % (CDF_2001_S4563131) @Article{Affolder:2001fa, author = "Affolder, Anthony Allen and others", collaboration = "CDF", title = "{Measurement of the inclusive jet cross section in $\bar{p}p$ collisions at $\sqrt{s} = 1.8$ TeV}", journal = "Phys. Rev.", volume = "D64", year = "2001", pages = "032001", eprint = "hep-ph/0102074", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.64.032001", SLACcitation = "%%CITATION = HEP-PH/0102074;%%" } % Ackerstaff:1998ue % (OPAL_1998_S3702294) @Article{Ackerstaff:1998ue, author = "Ackerstaff, K. and others", collaboration = "OPAL", title = "{Production of f0(980), f2(1270) and Phi(1020) in hadronic Z0 decay}", journal = "Eur. Phys. J.", volume = "C4", year = "1998", pages = "19-28", eprint = "hep-ex/9802013", archivePrefix = "arXiv", doi = "10.1007/s100520050183", SLACcitation = "%%CITATION = HEP-EX/9802013;%%" } % Decamp:1991uz % (ALEPH_1991_S2435284) @Article{Decamp:1991uz, author = "Decamp, D. and others", collaboration = "ALEPH", title = "{Measurement of the charged particle multiplicity distribution in hadronic Z decays}", journal = "Phys. Lett.", volume = "B273", year = "1991", pages = "181-192", doi = "10.1016/0370-2693(91)90575-B", SLACcitation = "%%CITATION = PHLTA,B273,181;%%" } % Aaltonen:2009ne % (CDF_2009_S8233977) @Article{Aaltonen:2009ne, author = "Aaltonen, T. and others", collaboration = "CDF", title = "{Measurement of Particle Production and Inclusive Differential Cross Sections in $p\bar{p}$ Collisions at $\sqrt{s}=1.96$ TeV}", journal = "Phys. Rev.", volume = "D79", year = "2009", pages = "112005", eprint = "0904.1098", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevD.79.112005", SLACcitation = "%%CITATION = 0904.1098;%%" } % Albajar:1989an % (UA1_1990_S2044935) @Article{Albajar:1989an, author = "Albajar, C. and others", collaboration = "UA1", title = "{A Study of the General Characteristics of $p\bar{p}$ Collisions at $\sqrt{s}$ = 0.2-TeV to 0.9-TeV}", journal = "Nucl. Phys.", volume = "B335", year = "1990", pages = "261", doi = "10.1016/0550-3213(90)90493-W", SLACcitation = "%%CITATION = NUPHA,B335,261;%%" } % Khachatryan:2010xs % (CMS_2010_S8547297) @Article{Khachatryan:2010xs, author ="Khachatryan, Vardan and others", collaboration ="CMS", title ="{Transverse momentum and pseudorapidity distributions of charged hadrons in pp collisions at sqrt(s) = 0.9 and 2.36TeV}", journal ="JHEP", volume ="02", year ="2010", pages ="041", eprint ="1002.0621", archivePrefix ="arXiv", primaryClass ="hep-ex", doi ="10.1007/JHEP02(2010)041", SLACcitation ="%%CITATION = 1002.0621;%%"} % Abe:2001hj % (BELLE_2001_S4598261) @article{Abe:2001hj, author = "Abe, K. and others", title = "{Measurement of inclusive production of neutral pions from Upsilon(4S) decays}", collaboration = "Belle Collaboration", journal = "Phys.Rev.", volume = "D64", pages = "072001", doi = "10.1103/PhysRevD.64.072001", year = "2001", eprint = "hep-ex/0103041", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "KEK-PREPRINT-2001-2, BELLE-PREPRINT-2001-3", SLACcitation = "%%CITATION = HEP-EX/0103041;%%", } % Aad:2011cx % (ATLAS_2011_I954993) @article{Aad:2011cx, author = "Aad, Georges and others", title = "{Measurement of the WZ production cross section and limits on anomalous triple gauge couplings in proton-proton collisions at sqrt(s) = 7 TeV with the ATLAS detector}", collaboration = "ATLAS Collaboration", journal = "Phys.Lett.", volume = "B709", pages = "341-357", doi = "10.1016/j.physletb.2012.02.053", year = "2012", eprint = "1111.5570", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-184", SLACcitation = "%%CITATION = ARXIV:1111.5570;%%", } % :2009mh % (D0_2009_S8320160) @Article{:2009mh, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of dijet angular distributions at sqrt{s}=1.96TeV and searches for quark compositeness and extra spatial dimensions}", journal = "Phys. Rev. Lett.", volume = "103", year = "2009", pages = "191803", eprint = "0906.4819", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevLett.103.191803", SLACcitation = "%%CITATION = 0906.4819;%%" } % Abe:1996zi % (SLD_1996_S3398250) @Article{Abe:1996zi, author = "Abe, K. and others", collaboration = "SLD", title = "{Measurement of the charged multiplicities in b, c and light quark events from Z0 decays}", journal = "Phys. Lett.", volume = "B386", year = "1996", pages = "475-485", eprint = "hep-ex/9608008", archivePrefix = "arXiv", doi = "10.1016/0370-2693(96)01025-8", SLACcitation = "%%CITATION = HEP-EX/9608008;%%" } % Aad:2012meb % (ATLAS_2012_I1119557) @article{Aad:2012meb, author = "Aad, Georges and others", title = "{ATLAS measurements of the properties of jets for boosted particle searches}", collaboration = "ATLAS Collaboration", journal = "Phys.Rev.", volume = "D86", pages = "072006", doi = "10.1103/PhysRevD.86.072006", year = "2012", eprint = "1206.5369", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-149", SLACcitation = "%%CITATION = ARXIV:1206.5369;%%", } % Aubert:2007mh % (BABAR_2007_S7266081) @Article{Aubert:2007mh, author = "Aubert, Bernard and others", collaboration = "BABAR", title = "{Exclusive branching fraction measurements of semileptonic tau decays into three charged hadrons, $\tau^- \to \phi \pi^- \nu_\tau$ and $\tau^- \to \phi K^- \nu_\tau$}", journal = "Phys. Rev. Lett.", volume = "100", year = "2008", pages = "011801", eprint = "0707.2981", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevLett.100.011801", SLACcitation = "%%CITATION = 0707.2981;%%" } % Acton:1992jk % (OPAL_1993_S2692198) @Article{Acton:1992jk, author = "Acton, P. D. and others", collaboration = "OPAL", title = "{Studies of strong and electroweak interactions using final state photon emission in hadronic Z0 decays}", journal = "Z. Phys.", volume = "C58", year = "1993", pages = "405-418", doi = "10.1007/BF01557697", SLACcitation = "%%CITATION = ZEPYA,C58,405;%%" } % Ackerstaff:1997kj % (OPAL_1997_S3608263) @Article{Ackerstaff:1997kj, author = "Ackerstaff, K. and others", collaboration = "OPAL", title = "{Spin alignment of leading K*(892)0 mesons in hadronic Z0 decays}", journal = "Phys. Lett.", volume = "B412", year = "1997", pages = "210-224", eprint = "hep-ex/9708022", archivePrefix = "arXiv", doi = "10.1016/S0370-2693(97)01077-0", SLACcitation = "%%CITATION = HEP-EX/9708022;%%" } % Aubert:2006cp % (BABAR_2007_S6895344) @article{Aubert:2006cp, author = "Aubert, Bernard and others", title = "{Inclusive $\Lambda_c^+$ Production in $e^+ e^-$ Annihilations at $\sqrt{s}=10.54$ GeV and in $\Upsilon(4S)$ Decays}", collaboration = "BABAR Collaboration", journal = "Phys.Rev.", volume = "D75", pages = "012003", doi = "10.1103/PhysRevD.75.012003", year = "2007", eprint = "hep-ex/0609004", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "SLAC-PUB-12074, BABAR-PUB-06-054", SLACcitation = "%%CITATION = HEP-EX/0609004;%%", } % :2007cp % (CDF_2008_S7540469) @Article{:2007cp, author = "Aaltonen, T. and others", collaboration = "CDF", title = "{Measurement of inclusive jet cross-sections in Z/gamma*(-- -> $e^{+} e^{-)}$ + jets production in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96-TeV}", journal = "Phys. Rev. Lett.", volume = "100", year = "2008", pages = "102001", eprint = "0711.3717", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "", SLACcitation = "%%CITATION = 0711.3717;%%" } % Khachatryan:2011dx % (CMS_2011_S8957746) @Article{Khachatryan:2011dx, author = "Khachatryan, Vardan and others", collaboration = "CMS", title = "{First Measurement of Hadronic Event Shapes in pp Collisions at sqrt(s)=7 TeV}", journal = "Phys. Lett.", volume = "B699", year = "2011", pages = "48-67", eprint = "1102.0068", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1016/j.physletb.2011.03.060", SLACcitation = "%%CITATION = 1102.0068;%%" } % Aamodt:2011zza % (ALICE_2011_S8909580) @article{Aamodt:2011zza, author = "Aamodt, K. and others", title = "{Strange particle production in proton-proton collisions at sqrt(s) = 0.9 TeV with ALICE at the LHC}", collaboration = "ALICE Collaboration", journal = "Eur.Phys.J.", volume = "C71", pages = "1594", doi = "10.1140/epjc/s10052-011-1594-5", year = "2011", eprint = "1012.3257", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2010-065", SLACcitation = "%%CITATION = ARXIV:1012.3257;%%", } % Aad:2012cv % (ATLAS_2012_I1093738) @article{Aad:2012cv, author = "Aad, Georges and others", title = "{Measurement of the production cross section of an isolated photon associated with jets in proton-proton collisions at sqrt(s) = 7 TeV with the ATLAS detector}", collaboration = "ATLAS", year = "2012", eprint = "1203.3161", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-009", SLACcitation = "%%CITATION = ARXIV:1203.3161;%%", } % Alpgard:1982zx % (UA5_1982_S875503) @Article{Alpgard:1982zx, author = "Alpgard, K. and others", collaboration = "UA5", title = "{COMPARISON OF p anti-p and p p INTERACTIONS AT s**(1/2) = 53-GeV}", journal = "Phys. Lett.", volume = "B112", year = "1982", pages = "183", doi = "10.1016/0370-2693(82)90325-2", SLACcitation = "%%CITATION = PHLTA,B112,183;%%" } % Aaij:2010gn % (LHCB_2010_I867355) @article{Aaij:2010gn, author = "Aaij, R. and others", title = "{Measurement of $\sigma(pp \to b \bar{b} X)$ at $\sqrt{s}=7~\rm{TeV}$ in the forward region}", collaboration = "LHCb Collaboration", journal = "Phys.Lett.", volume = "B694", pages = "209-216", doi = "10.1016/j.physletb.2010.10.010", year = "2010", eprint = "1009.2731", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2010-029", SLACcitation = "%%CITATION = ARXIV:1009.2731;%%" } % Abazov:2010mk % (D0_2010_S8821313) @Article{Abazov:2010mk, author = "Abazov, Victor Mukhamedovich and others", collaboration = "D0", title = "{Precise study of the Z/gamma* boson transverse momentum distribution in ppbar collisions using a novel technique}", year = "2010", eprint = "1010.0262", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1010.0262;%%" } % Affolder:2000ew % (CDF_2001_S4517016) @Article{Affolder:2000ew, author = "Affolder, Anthony Allen and others", collaboration = "CDF", title = "{Measurement of the two-jet differential cross section in $p\bar{p}$ collisions at $\sqrt{s} = 1800$ GeV}", journal = "Phys. Rev.", volume = "D64", year = "2001", pages = "012001", eprint = "hep-ex/0012013", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.64.012001", SLACcitation = "%%CITATION = HEP-EX/0012013;%%" } % Ackerstaff:1998ap % (OPAL_1998_S3749908) @Article{Ackerstaff:1998ap, author = "Ackerstaff, K. and others", collaboration = "OPAL", title = "{Photon and light meson production in hadronic Z0 decays}", journal = "Eur. Phys. J.", volume = "C5", year = "1998", pages = "411-437", eprint = "hep-ex/9805011", archivePrefix = "arXiv", doi = "10.1007/s100520050286", SLACcitation = "%%CITATION = HEP-EX/9805011;%%" } % :2011me % (CMS_2011_S9086218) @article{:2011me, author = "Chatrchyan, Serguei and others", title = "{Measurement of the Inclusive Jet Cross Section in pp Collisions at sqrt(s) = 7 TeV}", collaboration = "CMS Collaboration", journal = "Phys. Rev. Lett.", volume = "107", pages = "132001", doi = "10.1103/PhysRevLett.107.132001", year = "2011", note = "Long author list - awaiting processing", eprint = "1106.0208", archivePrefix = "arXiv", primaryClass = "hep-ex", } % Barate:1996fi % (ALEPH_1996_S3486095) @Article{Barate:1996fi, author = "Barate, R. and others", collaboration = "ALEPH", title = "{Studies of quantum chromodynamics with the ALEPH detector}", journal = "Phys. Rept.", volume = "294", year = "1998", pages = "1-165", doi = "10.1016/S0370-1573(97)00045-8", SLACcitation = "%%CITATION = PRPLC,294,1;%%" } % Aad:2011fc % (ATLAS_2012_I1082936) @article{Aad:2011fc, author = "Aad, Georges and others", title = "{Measurement of inclusive jet and dijet production in pp collisions at sqrt(s) = 7 TeV using the ATLAS detector}", collaboration = "ATLAS Collaboration", year = "2011", eprint = "1112.6297", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-192", SLACcitation = "%%CITATION = ARXIV:1112.6297;%%", } % Aaltonen:2008dn % (CDF_2008_S8093652) @Article{Aaltonen:2008dn, author = "Aaltonen, T. and others", collaboration = "CDF", title = "{Search for new particles decaying into dijets in proton- antiproton collisions at sqrt(s) = 1.96 TeV}", journal = "Phys. Rev.", volume = "D79", year = "2009", pages = "112002", eprint = "0812.4036", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevD.79.112002", SLACcitation = "%%CITATION = 0812.4036;%%" } % Albrecht:1992qf % (ARGUS_1993_S2653028) @article{Albrecht:1992qf, author = "Albrecht, H. and others", title = "{Inclusive production of charged pions, kaons and protons in upsilon (4S) decays}", collaboration = "ARGUS Collaboration", journal = "Z.Phys.", volume = "C58", pages = "191-198", doi = "10.1007/BF01560337", year = "1993", reportNumber = "DESY-92-155", SLACcitation = "%%CITATION = ZEPYA,C58,191;%%", } % Abazov:2009pp % (D0_2009_S8349509) @Article{Abazov:2009pp, author = "Abazov, Victor Mukhamedovich and others", collaboration = "D0", title = "{Measurement of $Z / \gamma^\ast +jet+X$ angular distributions in $p \bar{p}$ collisions at $\sqrt{s}=1.96$ TeV}", journal = "Phys. Lett.", volume = "B682", year = "2010", pages = "370-380", eprint = "0907.4286", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1016/j.physletb.2009.11.012", SLACcitation = "%%CITATION = 0907.4286;%%" } % :2012sja % (ALICE_2012_I1181770) @article{:2012sja, author = "Abelev, Betty and others", title = "{Measurement of inelastic, single- and double-diffraction cross sections in proton--proton collisions at the LHC with ALICE}", collaboration = "ALICE Collaboration", journal = "Eur. Phys. J. C", year = "2012", eprint = "1208.4968", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2012-138", SLACcitation = "%%CITATION = ARXIV:1208.4968;%%", } % Aad:2011fp % (ATLAS_2011_I925932) @article{Aad:2011fp, author = "Aad, Georges and others", title = "Measurement of the transverse momentum distribution of $W$ bosons in $pp$ Collisions at $\sqrt{s} = 7$~TeV with the {ATLAS Detector}", collaboration = "The ATLAS", year = "2011", eprint = "1108.6308", archivePrefix = "arXiv", primaryClass = "hep-ex", } % Khachatryan:2010us % (CMS_2010_S8656010) @Article{Khachatryan:2010us, author = "Khachatryan, Vardan and others", collaboration = "CMS", title = "{Transverse-momentum and pseudorapidity distributions of charged hadrons in pp collisions at sqrt(s) = 7 TeV}", journal = "Phys. Rev. Lett.", volume = "105", year = "2010", pages = "022002", eprint = "1005.3299", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevLett.105.022002", SLACcitation = "%%CITATION = 1005.3299;%%"} % Khachatryan:2011wq % (CMS_2011_S8973270) @Article{Khachatryan:2011wq, author = "Khachatryan, Vardan and others", collaboration = "CMS", title = "{Measurement of $B \bar{B}$ angular correlations based on secondary vertex reconstruction at $\sqrt{s} = 7$~TeV}", journal = "JHEP", volume = "03", year = "2011", pages = "136", eprint = "1102.3194", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1007/JHEP03(2011)136", SLACcitation = "%%CITATION = 1102.3194;%%" } % Abazov:2008ez % (D0_2008_S7863608) @Article{Abazov:2008ez, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of differential $Z / \gamma^{*}$ + jet + $X$ cross sections in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96-TeV}", journal = "Phys. Lett.", volume = "B669", year = "2008", pages = "278-286", eprint = "0808.1296", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1016/j.physletb.2008.09.060", SLACcitation = "%%CITATION = 0808.1296;%%" } % Aad:2010rd % (ATLAS_2010_S8591806) @Article{Aad:2010rd, author = "Aad, G. and others", collaboration = "ALTAS", title = "{Charged-particle multiplicities in pp interactions at sqrt(s) = 900 GeV measured with the ATLAS detector at the LHC}", year = "2010", eprint = "1003.3124", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1016/j.physletb.2010.03.064", SLACcitation = "%%CITATION = 1003.3124;%%" } % Chatrchyan:2012gwa % (CMS_2012_I1087342) @article{Chatrchyan:2012gwa, author = "Chatrchyan, Serguei and others", title = "{Measurement of the inclusive production cross sections for forward jets and for dijet events with one forward and one central jet in pp collisions at sqrt(s) = 7 TeV}", collaboration = "CMS Collaboration", journal = "JHEP", volume = "1206", pages = "036", doi = "10.1007/JHEP06(2012)036", year = "2012", eprint = "1202.0704", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CMS-FWD-11-002, CERN-PH-EP-2011-179", SLACcitation = "%%CITATION = ARXIV:1202.0704;%%",} % Abreu:1995qx % (DELPHI_1995_S3137023) @Article{Abreu:1995qx, author = "Abreu, P. and others", collaboration = "DELPHI", title = "{Strange baryon production in Z hadronic decays}", journal = "Z. Phys.", volume = "C67", year = "1995", pages = "543-554", doi = "10.1007/BF01553980", SLACcitation = "%%CITATION = ZEPYA,C67,543;%%" } % Chatrchyan:2012pb % (CMS_2012_I1102908) @article{Chatrchyan:2012pb, author = "Chatrchyan, Serguei and others", title = "{Ratios of dijet production cross sections as a function of the absolute difference in rapidity between jets in proton-proton collisions at sqrt(s) = 7 TeV}", collaboration = "CMS Collaboration", year = "2012", eprint = "1204.0696", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CMS-FWD-10-014, CERN-PH-EP-2012-088", SLACcitation = "%%CITATION = ARXIV:1204.0696;%%",} % Aad:2011ni % (ATLAS_2011_S8971293) @Article{Aad:2011ni, author = "Collaboration, The ATLAS", title = "{Measurement of Dijet Azimuthal Decorrelations in pp Collisions at sqrt(s)=7 TeV}", year = "2011", eprint = "1102.2696", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1102.2696;%%" } % Aaltonen:2009ty % (CDF_2009_S8436959) @Article{Aaltonen:2009ty, author = "Aaltonen, T. and others", collaboration = "CDF", title = "{Measurement of the Inclusive Isolated Prompt Photon Cross Section in ppbar Collisions at sqrt{s} = 1.96 TeV using the CDF Detector}", journal = "Phys. Rev.", volume = "D80", year = "2009", pages = "111106", eprint = "0910.3623", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1103/PhysRevD.80.111106", SLACcitation = "%%CITATION = 0910.3623;%%" } % Abbiendi:2001qn % (OPAL_2001_S4553896) @Article{Abbiendi:2001qn, author = "Abbiendi, G. and others", collaboration = "OPAL", title = "{A simultaneous measurement of the QCD colour factors and the strong coupling}", journal = "Eur. Phys. J.", volume = "C20", year = "2001", pages = "601-615", eprint = "hep-ex/0101044", archivePrefix = "arXiv", doi = "10.1007/s100520100699", SLACcitation = "%%CITATION = HEP-EX/0101044;%%" } % CMS-PAS-QCD-11-010 % (CMS_2012_PAS_QCD_11_010) @article{CMS-PAS-QCD-11-010, title = "Measurement of strange particle production in underlying events in proton--proton collisions at $\sqrt{s} = 7$\;TeV", year = "2012", } % Abreu:1996na % (DELPHI_1996_S3430090) @Article{Abreu:1996na, author = "Abreu, P. and others", collaboration = "DELPHI", title = "{Tuning and test of fragmentation models based on identified particles and precision event shape data}", journal = "Z. Phys.", volume = "C73", year = "1996", pages = "11-60", doi = "10.1007/s002880050295", SLACcitation = "%%CITATION = ZEPYA,C73,11;%%" } % Abulencia:2006ce % (CDF_2006_S6653332) @Article{Abulencia:2006ce, author = "Abulencia, A. and others", collaboration = "CDF", title = "{Measurement of the $b$ jet cross-section in events with a $Z$ boson in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96- TeV}", journal = "Phys. Rev.", volume = "D74", year = "2006", pages = "032008", eprint = "hep-ex/0605099", archivePrefix = "arXiv", doi = "10.1103/PhysRevD.74.032008", SLACcitation = "%%CITATION = HEP-EX/0605099;%%" } % Braunschweig:1990yd % (TASSO_1990_S2148048) @Article{Braunschweig:1990yd, author = "Braunschweig, W. and others", collaboration = "TASSO", title = "{GLOBAL JET PROPERTIES AT 14-GeV TO 44-GeV CENTER-OF-MASS ENERGY IN e+ e- ANNIHILATION}", journal = "Z. Phys.", volume = "C47", year = "1990", pages = "187-198", doi = "10.1007/BF01552339", SLACcitation = "%%CITATION = ZEPYA,C47,187;%%" } % Aad:2011ib % (ATLAS_2011_S9212183) @article{Aad:2011ib, author = "Aad, Georges and others", title = "{Search for squarks and gluinos using final states with jets and missing transverse momentum with the ATLAS detector in $\sqrt{s}$ = 7 TeV proton-proton collisions}", collaboration = "ATLAS", year = "2011", note = "* Temporary entry *", eprint = "1109.6572", archivePrefix = "arXiv", primaryClass = "hep-ex", } % Abbott:2000xv % (D0_2000_S4480767) @Article{Abbott:2000xv, author = "Abbott, B. and others", collaboration = "D0", title = "{Differential cross section for $W$ boson production as a function of transverse momentum in $p\bar{p}$ collisions at $\sqrt{s} = 1.8$ TeV}", journal = "Phys. Lett.", volume = "B513", year = "2001", pages = "292-300", eprint = "hep-ex/0010026", archivePrefix = "arXiv", doi = "10.1016/S0370-2693(01)00628-1", SLACcitation = "%%CITATION = HEP-EX/0010026;%%" } % Aad:2011eu % (ATLAS_2011_I894867) @Article{Aad:2011eu, author = "Aad, Georges and others", title = "{Measurement of the Inelastic Proton-Proton Cross-Section at $\sqrt{s}=7$ TeV with the ATLAS Detector}", collaboration = "ATLAS Collaboration", journal = "Nature Commun.", volume = "2", pages = "463", doi = "10.1038/ncomms1472", year = "2011", eprint = "1104.0326", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "CERN-PH-EP-2011-047", SLACcitation = "%%CITATION = ARXIV:1104.0326;%%",} % Khachatryan:2011tm % (CMS_2011_S8978280) @Article{Khachatryan:2011tm, author = "Khachatryan, Vardan and others", collaboration = "CMS", title = "{Strange Particle Production in pp Collisions at sqrt(s) = 0.9 and 7 TeV}", journal = "JHEP", volume = "05", year = "2011", pages = "064", eprint = "1102.4282", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1007/JHEP05(2011)064", SLACcitation = "%%CITATION = 1102.4282;%%"} % Amsler:2008zzb % (PDG_HADRON_MULTIPLICITIES_RATIOS) @Article{Amsler:2008zzb, author = "Amsler, Claude and others", collaboration = "Particle Data Group", title = "{Review of particle physics}", journal = "Phys. Lett.", volume = "B667", year = "2008", pages = "1", doi = "10.1016/j.physletb.2008.07.018", SLACcitation = "%%CITATION = PHLTA,B667,1;%%" } % Khachatryan:2010nk % (CMS_2011_S8884919) @Article{Khachatryan:2010nk, author = "Khachatryan, Vardan and others", collaboration = "CMS", title = "{Charged particle multiplicities in pp interactions at sqrt(s) = 0.9, 2.36, and 7 TeV}", journal = "JHEP", volume = "01", year = "2011", pages = "079", eprint = "1011.5531", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1007/JHEP01(2011)079", SLACcitation = "%%CITATION = 1011.5531;%%" } % Collaboration:2010sp % (ATLAS_2010_S8914702) @Article{Collaboration:2010sp, author = "Collaboration, The ATLAS", title = "{Measurement of the inclusive isolated prompt photon cross section in pp collisions at sqrt(s) = 7 TeV with the ATLAS detector}", year = "2010", eprint = "1012.4389", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1012.4389;%%" } % Alexander:1995gq % (OPAL_1995_S3198391) @Article{Alexander:1995gq, author = "Alexander, G. and others", collaboration = "OPAL", title = "{$\Delta^{++}$ production in hadronic $Z^0$ decays}", journal = "Phys. Lett.", volume = "B358", year = "1995", pages = "162-172", doi = "10.1016/0370-2693(95)00935-E", SLACcitation = "%%CITATION = PHLTA,B358,162;%%" } % Adams:2006nd % (STAR_2006_S6500200) @Article{Adams:2006nd, author = "Adams, John and others", collaboration = "STAR", title = "{Identified hadron spectra at large transverse momentum in p + p and d + Au collisions at s(NN)**(1/2) = 200-GeV}", journal = "Phys. Lett.", volume = "B637", year = "2006", pages = "161-169", eprint = "nucl-ex/0601033", archivePrefix = "arXiv", doi = "10.1016/j.physletb.2006.04.032", SLACcitation = "%%CITATION = NUCL-EX/0601033;%%" } % Aad:2012ma % (ATLAS_2012_I1188891) @article{Aad:2012ma, author = "Aad, Georges and others", title = "{Measurement of the flavour composition of dijet events in $pp$ collisions at $\sqrt{s}=7$ TeV with the ATLAS detector}", collaboration = "ATLAS Collaboration", year = "2012", eprint = "1210.0441", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = ARXIV:1210.0441;%%", } % Abazov:2010kn % (D0_2010_S8671338) @Article{Abazov:2010kn, author = "Abazov, Victor Mukhamedovich and others", collaboration = "D0", title = "{Measurement of the normalized $Z/\gamma^*\to \mu^+\mu^-$ transverse momentum distribution in $p\bar{p}$ collisions at $\sqrt{s}=1.96$ TeV}", year = "2010", eprint = "1006.0618", archivePrefix = "arXiv", primaryClass = "hep-ex", SLACcitation = "%%CITATION = 1006.0618;%%" } % Abazov:2008er % (D0_2008_S7719523) @Article{Abazov:2008er, author = "Abazov, V. M. and others", collaboration = "D0", title = "{Measurement of the differential cross-section for the production of an isolated photon with associated jet in $p \bar{p}$ collisions at $\sqrt{s}$ = 1.96-TeV}", journal = "Phys. Lett.", volume = "B666", year = "2008", pages = "435-445", eprint = "0804.1107", archivePrefix = "arXiv", primaryClass = "hep-ex", doi = "10.1016/j.physletb.2008.06.076", SLACcitation = "%%CITATION = 0804.1107;%%" } % Abelev:2006uq % (STAR_2006_S6870392) @Article{Abelev:2006uq, author = "Abelev, B. I. and others", collaboration = "STAR", title = "{Longitudinal double-spin asymmetry and cross section for inclusive jet production in polarized proton collisions at s**(1/2) = 200-GeV}", journal = "Phys. Rev. Lett.", volume = "97", year = "2006", pages = "252001", eprint = "hep-ex/0608030", archivePrefix = "arXiv", doi = "10.1103/PhysRevLett.97.252001", SLACcitation = "%%CITATION = HEP-EX/0608030;%%" } % Aubert:2005cu % (BABAR_2005_S6181155) @article{Aubert:2005cu, author = "Aubert, Bernard and others", title = "{Production and decay of $\Xi_c^0$ at BABAR}", collaboration = "BABAR Collaboration", journal = "Phys.Rev.Lett.", volume = "95", pages = "142003", doi = "10.1103/PhysRevLett.95.142003", year = "2005", eprint = "hep-ex/0504014", archivePrefix = "arXiv", primaryClass = "hep-ex", reportNumber = "SLAC-PUB-11100, BABAR-PUB-05-008", SLACcitation = "%%CITATION = HEP-EX/0504014;%%", } % Aad:2011gn % (ATLAS_2011_I919017) @article{Aad:2011gn, author = "Aad, Georges and others", title = "{Properties of jets measured from tracks in proton--proton collisions at center-of-mass energy $\sqrt{s} = 7$\;TeV with the ATLAS detector}", collaboration = "ATLAS", year = "2011", eprint = "1107.3311", archivePrefix = "arXiv", primaryClass = "hep-ex", } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/doc/underscore.sty����������������������������������������������������������������������0000644�0001750�0001750�00000024742�12116077755�014553� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������% underscore.sty 21-Sep-2005 Donald Arseneau asnd@triumf.ca % Make the "_" character print as "\textunderscore" in text. % Copyright 1998,2001,2005,2006 Donald Arseneau; % License: LPPL version 1.2 or later. % Instructions follow after the definitions. \ProvidesPackage{underscore}[2006/09/13] \begingroup \catcode`\_=\active \gdef _{% \relax % No relax gives a small vulnerability in alignments \ifx\if@safe@actives\iftrue % must be outermost test! \string_% \else \ifx\protect\@typeset@protect \ifmmode \sb \else \BreakableUnderscore \fi \else \ifx\protect\@unexpandable@protect \noexpand_% \else \protect_% \fi\fi \fi} \global\let\ActiveUnderscore=_ \gdef\normalUnderscoreDef{\let_\ActiveUnderscore} \endgroup % At begin: set catcode; fix \long \ttdefault so I can use it in comparisons; % reapply definition of active _ in output routine (\@firstofone to strip % away braces, so avoiding deeper nesting). \AtBeginDocument{% {\immediate\write\@auxout{\catcode\number\string`\_ \string\active}}% \catcode\string`\_\string=\active \edef\ttdefault{\ttdefault}% \output=\expandafter\expandafter\expandafter {\expandafter\expandafter\expandafter\normalUnderscoreDef \expandafter\@firstofone\the\output}% } \newcommand{\BreakableUnderscore}{\leavevmode\nobreak\hskip\z@skip \ifx\f@family\ttdefault \string_\else \textunderscore\fi \usc@dischyph\nobreak\hskip\z@skip} \DeclareRobustCommand{\_}{% \ifmmode \nfss@text{\textunderscore}\else \BreakableUnderscore \fi} \let\usc@dischyph\@dischyph \DeclareOption{nohyphen}{\def\usc@dischyph{\discretionary{}{}{}}} \DeclareOption{strings}{\catcode`\_=\active} \ProcessOptions \ifnum\catcode`\_=\active\else \endinput \fi %%%%%%%% Redefine commands that use character strings %%%%%%%% \@ifundefined{UnderscoreCommands}{\let\UnderscoreCommands\@empty}{} \expandafter\def\expandafter\UnderscoreCommands\expandafter{% \UnderscoreCommands \do\include \do\includeonly \do\@input \do\@iinput \do\InputIfFileExists \do\ref \do\pageref \do\newlabel \do\bibitem \do\@bibitem \do\cite \do\nocite \do\bibcite \do\Ginclude@graphics \do\@setckpt } % Macro to redefine a macro to pre-process its string argument % with \protect -> \string. \def\do#1{% Avoid double processing if user includes command twice! \@ifundefined{US\string_\expandafter\@gobble\string#1}{% \edef\@tempb{\meaning#1}% Check if macro is just a protection shell... \def\@tempc{\protect}% \edef\@tempc{\meaning\@tempc\string#1\space\space}% \ifx\@tempb\@tempc % just a shell: hook into the protected inner command \expandafter\do \csname \expandafter\@gobble\string#1 \expandafter\endcsname \else % Check if macro takes an optional argument \def\@tempc{\@ifnextchar[}% \edef\@tempa{\def\noexpand\@tempa####1\meaning\@tempc}% \@tempa##2##3\@tempa{##2\relax}% \edef\@tempb{\meaning#1\meaning\@tempc}% \edef\@tempc{\noexpand\@tempd \csname US\string_\expandafter\@gobble\string#1\endcsname}% \if \expandafter\@tempa\@tempb \relax 12\@tempa % then no optional arg \@tempc #1\US@prot \else % There is optional arg \@tempc #1\US@protopt \fi \fi }{}} \def\@tempd#1#2#3{\let#1#2\def#2{#3#1}} \def\US@prot#1#2{\let\@@protect\protect \let\protect\string \edef\US@temp##1{##1{#2}}\restore@protect\US@temp#1} \def\US@protopt#1{\@ifnextchar[{\US@protarg#1}{\US@prot#1}} \def\US@protarg #1[#2]{\US@prot{{#1[#2]}}} \UnderscoreCommands \let\do\relax \let\@tempd\relax % un-do %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \endinput underscore.sty 13-Sep-2006 Donald Arseneau Features: ~~~~~~~~~ The "\_" command (which normally prints an underscore character or facsimile) is altered so that the hyphenation of constituent words is not affected, and hyphenation is permitted after the underscore. For example, "compound\_fracture" hyphenates as com- pound\_- frac- ture. If you prefer the underscore to break without a hyphen (but still with the same rules for explicit hyphen-breaks) then use the [nohyphen] package option. A simple "_" acts just like "\_" in text mode, but makes a subscript in math mode: activation_energy $E_a$ Both forms use an underscore character if the font encoding contains one (e.g., "\usepackage[T1]{fontenc}" or typewriter fonts in any encoding), but they use a rule if there is no proper character. Deficiencies: ~~~~~~~~~~~~~ The skips and penalties ruin any kerning with the underscore character (when a character is used). However, there doesn't seem to be much, if any, such kerning in the ec fonts, and there is never any kerning with a rule. You must avoid "_" in file names and in cite or ref tags, or you must use the babel package, with its active-character controls, or you must give the [strings] option, which attempts to redefine several commands (and may not work perfectly). Even without the [strings] option or babel, you can use occasional underscores like: "\include{file\string_name}". Option: [strings] ~~~~~~~~~~~~~~~~~ The default operation is quite simple and needs no customization; but you must avoid using "_" in any place where LaTeX uses an argument as a string of characters for some control function or as a name. These include the tags for "\cite" and "\ref", file names for "\input", "\include", and "\includegraphics", environment names, counter names, and placement parameters (like "[t]"). The problem with these contexts is that they are `moving arguments' but LaTeX does not `switch on' the "\protect" mechanism for them. If you need to use the underscore character in these places, the package option [strings] is provided to redefine commands that take such a string argument so that protection is applied (with "\protect" being "\string"). The list of commands is given in "\UnderscoreCommands", with "\do" before each; plus several others covering "\input", "\includegraphics, "\cite", "\ref", and their variants. Not included are many commands regarding font names, everything with counter names, environment names, page styles, and versions of "\ref" and "\cite" defined by external packages (e.g., "\vref" and "\citeyear"). You can add to the list of supported commands by defining "\UnderscoreCommands" before loading this package; e.g. \usepackage{chicago} \newcommand{\UnderscoreCommands}{% (\cite already done) \do\citeNP \do\citeA \do\citeANP \do\citeN \do\shortcite \do\shortciteNP \do\shortciteA \do\shortciteANP \do\shortciteN \do\citeyear \do\citeyearNP } \usepackage[strings]{underscore} Not all commands can be supported this way! Only commands that take a string argument *first* can be protected. One optional argument before the string argument is also permitted, as exemplified by "\cite": both "\cite{tags}" and "\cite[text]{tags}" are allowed. A command like "\@addtoreset" which takes two counter names as arguments could not be protected by listing it in "\UnderscoreCommands". *When you use the [strings] option, you must load this package last* (or nearly last). There are two reasons: 1) The redefinitions done for protection must come after other packages define their customized versions of those commands. 2) The [strings] option requires the "_" character to be activated immediately in order for the cite and ref tags to be read properly from the .aux file as plain strings, and this catcode setting might disrupt other packages. The babel package implements a protection mechanism for many commands, and will be a complete fix for most documents without the [strings] option. Many add-on packages are compatible with babel, so they will get the strings protection also. However, there are several commands that are not covered by babel, but can easily be supported by the [strings] and "\UnderscoreCommands" mechanism. Beware that using both [strings] and babel might lead to conflicts, but none are seen yet (load babel last). Implementation Notes: ~~~~~~~~~~~~~~~~~~~~~ The first setting of "_" to be an active character is performed in a local group so as to not interfere with other packages. The catcode setting is repeated with "\AtBeginDocument" so the definition is in effect for the text. However, the catcode setting is repeated immediately when the [strings] option is detected. The definition of the active "_" is essentially: \ifmmode \sb \else \BreakableUnderscore \fi where "\sb" retains the normal subscript meaning of "_" and where "\BreakableUnderscore" is essentially "\_". The rest of the definition handles the "\protect"ion without causing "\relax" to be inserted before the character. "\BreakableUnderscore" uses "\nobreak\hskip\z@skip" to separate the underscore from surrounding words, thus allowing TeX to hyphenate them, but preventing free breaks around the underscore. Next, it checks the current font family, and uses the underscore character from tt fonts or otherwise "\textunderscore" (which is a character or rule depending on the font encoding). After the underscore, it inserts a discretionary hyphenation point as "\usc@dischyph", which is usually just "\-" except that it still works in the tabbing environment, although it will give "\discretionary{}{}{}" under the [nohyphen] option. After that, another piece of non-breaking interword glue is inserted. Ordinarily, the comparison "\ifx\f@family\ttdefault" will always fail because "\ttdefault" is `long' whereas "\f@family" is not (boooo hisss), but "\ttdefault" is redefined to be non-long by "\AtBeginDocument". The "\_" command is then defined to use "\BreakableUnderscore". If the [strings] option is not given, then that is all! Under the [strings] option, the list of special commands is processed to: - retain the original command as "\US_"*command* (e.g., "\US_ref") - redefine the command as "\US@prot\US_command" for ordinary commands ("\US@prot\US_ref") or as "\US@protopt\US_command" when an optional argument is possible (e.g., "\US@protopt\US_bibitem"). - self-protecting commands ("\cite") retain their self-protection. Diagnosing the state of the pre-existing command is done by painful contortions involving "\meaning". "\US@prot" and "\US@protopt" read the argument, process it with "\protect" enabled, then invoke the saved "\US_command". Modifications: ~~~~~~~~~~~~~~ 13-Sep-2006 Reassert my definition in the output routine (listings). 21-Sep-2005 \includegraphics safe. 12-Oct-2001 Babel (safe@actives) compatibility and [nohyphen] option. Test file integrity: ASCII 32-57, 58-126: !"#$%&'()*+,-./0123456789 :;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ������������������������������rivet-1.8.3/NEWS������������������������������������������������������������������������������������0000644�0001750�0001750�00000000000�12116077757�011552� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/rivetenv.sh.in��������������������������������������������������������������������������0000644�0001750�0001750�00000001246�12116077757�013673� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# These variables need to exist prefix=@prefix@ exec_prefix=@exec_prefix@ datarootdir=@datarootdir@ export PATH="$exec_prefix/bin:$PATH" export @LIBPATHVARNAME@="@libdir@:@HEPMCLIBPATH@:@FASTJETLIBPATH@:$@LIBPATHVARNAME@" export PYTHONPATH="@RIVET_PYTHONPATH@:$PYTHONPATH" export TEXMFHOME="@datadir@/Rivet/texmf:$TEXMFHOME" export HOMETEXMF="@datadir@/Rivet/texmf:$HOMETEXMF" export TEXMFCNF="@datadir@/Rivet/texmf/cnf:$TEXMFCNF" export TEXINPUTS="@datadir@/Rivet/texmf/tex:$TEXINPUTS" export LATEXINPUTS="@datadir@/Rivet/texmf/tex:$LATEXINPUTS" if (complete &> /dev/null); then test -e "@datadir@/Rivet/rivet-completion" && source "@datadir@/Rivet/rivet-completion" fi ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/configure.ac����������������������������������������������������������������������������0000644�0001750�0001750�00000034234�12116420142�013335� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) AC_INIT([Rivet],[1.8.3],[rivet@projects.hepforge.org],[Rivet]) if test "$prefix" = "$PWD"; then AC_MSG_ERROR([Installation into the build directory is not supported: use a different --prefix argument]) fi AC_CONFIG_SRCDIR([src/Core/Analysis.cc]) AC_CONFIG_HEADERS([include/Rivet/Config/DummyConfig.hh include/Rivet/Config/RivetConfig.hh include/Rivet/Config/BuildOptions.hh]) AM_INIT_AUTOMAKE(dist-bzip2) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) AC_CONFIG_MACRO_DIR([m4]) AC_SUBST(LT_OBJDIR) ## Package-specific #defines AC_DEFINE_UNQUOTED(RIVET_VERSION, "$PACKAGE_VERSION", "Rivet version string") AC_DEFINE_UNQUOTED(RIVET_NAME, "$PACKAGE_NAME", "Rivet name string") AC_DEFINE_UNQUOTED(RIVET_STRING, "$PACKAGE_STRING", "Rivet name and version string") AC_DEFINE_UNQUOTED(RIVET_TARNAME, "$PACKAGE_TARNAME", "Rivet short name string") AC_DEFINE_UNQUOTED(RIVET_BUGREPORT, "$PACKAGE_BUGREPORT", "Rivet contact email address") ## Set library version info code ## Set for version 1.8.3 VERSIONINFOFLAGS="-version-info 11:1:0" AC_SUBST(VERSIONINFOFLAGS) ## OS X AC_CEDAR_OSX ## LCG platform tag AC_LCG_TAG ## Set default compiler flags if test "x$CXXFLAGS" == "x"; then CXXFLAGS="-O2"; fi ## Make compiler error messages more readable if gfilt is installed. dnl AC_CEDAR_CXXFILTER ## Checks for programs. AC_LANG(C++) AC_PROG_CXX AC_PROG_INSTALL AC_PROG_LN_S AC_DISABLE_STATIC AC_LIBTOOL_DLOPEN AC_PROG_LIBTOOL ## GNU Scientific Library AC_SEARCH_GSL AC_CEDAR_HEADERS([gsl], , , [AC_MSG_ERROR([GSL (GNU Scientific Library) is required])]) oldCPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$GSLINCPATH" AC_CHECK_HEADER([gsl/gsl_vector.h], [], [AC_MSG_ERROR([GSL vectors not found.])]) CPPFLAGS=$oldCPPFLAGS ## Boost C++ header library AC_CEDAR_HEADERS([Boost], , , [AC_MSG_ERROR([Boost is required])]) oldCPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$BOOSTINCPATH" BOOSTERRMSG="You need at least version 1.34.0 of Boost for this installation." BOOSTERRMSG="$BOOSTERRMSG If you want to use Boost from a non-standard location," BOOSTERRMSG="$BOOSTERRMSG please specify '--with-boost-incpath=/path/to/boost_1_35/include'" BOOSTERRMSG="$BOOSTERRMSG as option to the configure script or run the rivet-bootstrap script " BOOSTERRMSG="$BOOSTERRMSG with the --install-boost option, or --boost=/path/to/boost" AC_CHECK_HEADER([boost/foreach.hpp], [], [AC_MSG_ERROR([Boost foreach not found. $BOOSTERRMSG])]) AC_CHECK_HEADER([boost/smart_ptr.hpp], [], [AC_MSG_ERROR([Boost smart_ptr not found. $BOOSTERRMSG])]) AC_CHECK_HEADER([boost/lexical_cast.hpp], [], [AC_MSG_ERROR([Boost lexical_cast not found. $BOOSTERRMSG])]) AC_CHECK_HEADER([boost/assign.hpp], [], [AC_MSG_ERROR([Boost assign not found. $BOOSTERRMSG])]) AC_CHECK_HEADER([boost/random.hpp], [], [AC_MSG_ERROR([Boost random numbers not found. $BOOSTERRMSG])]) CPPFLAGS=$oldCPPFLAGS ## HepMC library AC_CEDAR_LIBRARYANDHEADERS([HepMC], , , [AC_MSG_ERROR([HepMC is required])]) oldCPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$HEPMCINCPATH" if test -e "$HEPMCINCPATH/HepMC/HepMCDefs.h"; then AC_LANG_CONFTEST([AC_LANG_SOURCE([#include <iostream> #include "HepMC/HepMCDefs.h" int main() { std::cout << HEPMC_VERSION << std::endl; return 0; }])]) else AC_LANG_CONFTEST([AC_LANG_SOURCE([#include <iostream> #include "HepMC/defs.h" int main() { std::cout << VERSION << std::endl; return 0; }])]) fi if test -f conftest.cc; then $CXX $CPPFLAGS conftest.cc -o conftest 2>&1 1>&5 elif test -f conftest.C; then $CXX $CPPFLAGS conftest.C -o conftest 2>&1 1>&5 else $CXX $CPPFLAGS conftest.cpp -o conftest 2>&1 1>&5 fi hepmc_version=`./conftest` if test x$hepmc_version != x; then let hepmc_major=`echo "$hepmc_version" | cut -d. -f1` let hepmc_minor=`echo "$hepmc_version" | cut -d. -f2` fi rm -f conftest conftest.cpp conftest.cc conftest.C HEPMC_VERSION=$hepmc_major$hepmc_minor AC_MSG_NOTICE([HepMC version is $hepmc_version -> $HEPMC_VERSION]) AC_SUBST(HEPMC_VERSION) CPPFLAGS=$oldCPPFLAGS ## FastJet library AC_CEDAR_LIBRARYANDHEADERS([fastjet], , , [AC_MSG_ERROR([FastJet is required])]) AC_PATH_PROG(FJCONFIG, fastjet-config, [], $FASTJETPATH/bin:$PATH) if test -f "$FJCONFIG"; then AC_MSG_CHECKING([FastJet version using fastjet-config]) fjversion=$($FJCONFIG --version) AC_MSG_RESULT([$fjversion]) fjmajor=$(echo $fjversion | cut -f1 -d.) fjminor=$(echo $fjversion | cut -f2 -d.) fjmicro=$(echo $fjversion | cut -f3 -d.) if test "$fjmajor" -lt 2 \ -o "$fjmajor" -eq 2 -a "$fjminor" -lt 4 \ -o "$fjmajor" -eq 2 -a "$fjminor" -eq 4 -a "$fjmicro" -lt 2; then AC_MSG_ERROR([FastJet version 2.4.2 or later is required]) fi FASTJETCONFIGLIBADD="$($FJCONFIG --plugins --shared --libs | sed 's/\-\-rpath/-rpath/g')" #FASTJETLIBPATH="$($FJCONFIG --libs | sed 's/.*\-L\([^\ ]\+\).*/\1/')" else FASTJETCONFIGLIBADD="-L$FASTJETLIBPATH -l$FASTJETLIBNAME" FASTJETCONFIGLIBADD="$FASTJETCONFIGLIBADD -lSISConePlugin -lsiscone -lsiscone_spherical" FASTJETCONFIGLIBADD="$FASTJETCONFIGLIBADD -lCDFConesPlugin -lD0RunIIConePlugin -lNestedDefsPlugin" FASTJETCONFIGLIBADD="$FASTJETCONFIGLIBADD -lTrackJetPlugin -lATLASConePlugin -lCMSIterativeConePlugin" FASTJETCONFIGLIBADD="$FASTJETCONFIGLIBADD -lEECambridgePlugin -lJadePlugin" fi; AC_MSG_NOTICE([FastJet LIBADD = $FASTJETCONFIGLIBADD]) AC_SUBST(FASTJETCONFIGLIBADD) # Check for FastJet headers that require the --enable-all(cxx)plugins option FASTJET_ERRMSG="Required FastJet plugin headers were not found: did you build FastJet with the --enable-allcxxplugins option?" oldCPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$FASTJETINCPATH" AC_CHECK_HEADER([fastjet/D0RunIIConePlugin.hh], [], [AC_MSG_ERROR([$FASTJET_ERRMSG])]) AC_CHECK_HEADER([fastjet/TrackJetPlugin.hh], [], [AC_MSG_ERROR([$FASTJET_ERRMSG])]) CPPFLAGS=$oldCPPFLAGS ## Build Doxygen if possible AC_ARG_ENABLE([doxygen], [AC_HELP_STRING(--disable-doxygen, [don't try to make Doxygen documentation])], [], [enable_doxygen=yes]) if test x$enable_doxygen = xyes; then AC_PATH_PROG(DOXYGEN, doxygen) fi AM_CONDITIONAL(WITH_DOXYGEN, [test x$DOXYGEN != x]) ## Disable build/install of standard analyses AC_ARG_ENABLE([analyses], [AC_HELP_STRING(--disable-analyses, [don't try to build or install standard analyses])], [], [enable_analyses=yes]) if test x$enable_analyses != xyes; then AC_MSG_WARN([Not building standard Rivet analyses, by request]) fi AM_CONDITIONAL(ENABLE_ANALYSES, [test x$enable_analyses = xyes]) ## Enable build/install of unvalidated analyses AC_ARG_ENABLE([unvalidated], [AC_HELP_STRING(--enable-unvalidated, [build and install unvalidated analyses])], [], [enable_unvalidated=no]) if test x$enable_unvalidated = xyes; then AC_MSG_WARN([Building unvalidated Rivet analyses, by request]) else AC_MSG_NOTICE([Not building unvalidated Rivet analyses]) fi AM_CONDITIONAL(ENABLE_UNVALIDATED, [test x$enable_unvalidated = xyes]) ## Disable build/install of validated-but-preliminary analyses AC_ARG_ENABLE([preliminary], [AC_HELP_STRING(--disable-preliminary, [build and install validated-but-preliminary analyses])], [], [enable_preliminary=yes]) if test x$enable_preliminary = xyes; then AC_MSG_NOTICE([Building preliminary Rivet analyses]) else AC_MSG_NOTICE([Not building preliminary Rivet analyses, by request]) fi AM_CONDITIONAL(ENABLE_PRELIMINARY, [test x$enable_preliminary = xyes]) ## Disable build/install of now-obsolete preliminary analyses AC_ARG_ENABLE([obsolete], [AC_HELP_STRING(--disable-obsolete, [build and install now-obsolete analyses])], [], [enable_obsolete=$enable_preliminary]) if test x$enable_obsolete = xyes; then AC_MSG_NOTICE([Building obsolete Rivet analyses]) else AC_MSG_NOTICE([Not building obsolete Rivet analyses, by request]) fi AM_CONDITIONAL(ENABLE_OBSOLETE, [test x$enable_obsolete = xyes]) ## Build LaTeX docs if possible... AC_PATH_PROG(PDFLATEX, pdflatex) AM_CONDITIONAL(WITH_PDFLATEX, [test x$PDFLATEX != x]) ## ... unless told otherwise! AC_ARG_ENABLE([pdfmanual], [AC_HELP_STRING(--disable-pdfmanual, [don't try to build or install the PDF manual])], [], [enable_pdfmanual=yes]) if test x$enable_pdfmanual != xyes; then AC_MSG_WARN([Not building Rivet PDF manual, by request]) fi AM_CONDITIONAL(ENABLE_PDFMANUAL, [test x$enable_pdfmanual = xyes]) ## Build asciidoc docs if possible AC_PATH_PROG(ASCIIDOC, asciidoc) AM_CONDITIONAL(WITH_ASCIIDOC, [test x$ASCIIDOC != x]) ## Test to see if we have to install libyaml-cpp AC_CEDAR_LIBRARYANDHEADERS([yaml-cpp], , , [AC_MSG_NOTICE([Rivet will install the yaml-cpp library])]) ## Python extension AC_ARG_ENABLE(pyext, [AC_HELP_STRING(--disable-pyext, [don't build Python module (default=build)])], [], [enable_pyext=yes]) AZ_PYTHON_DEFAULT ## Basic Python checks if test x$enable_pyext == xyes; then AZ_PYTHON_PATH AZ_PYTHON_VERSION_ENSURE([2.4]) PYTHON_VERSION=`$PYTHON -c "import sys; print '.'.join(map(str, sys.version_info@<:@:2@:>@));"` AC_SUBST(PYTHON_VERSION) RIVET_PYTHONPATH=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(prefix='$prefix', plat_specific=True);"` AC_SUBST(RIVET_PYTHONPATH) ## Test for Python header if test -x "$PYTHON"; then AC_MSG_CHECKING([for Python include path]) python_incpath=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc();"` AC_MSG_RESULT([$python_incpath]) python_header="$python_incpath/Python.h" if test -z "$python_incpath"; then AC_MSG_ERROR([Can't build Python extension since include directory cannot be determined from distutils]) enable_pyext=no elif test ! -e "$python_header"; then AC_MSG_ERROR([Can't build Python extension since header file $python_header cannot be found]) enable_pyext=no fi else AC_MSG_ERROR([Can't build Python extension since python can't be found]) enable_pyext=no fi fi ## SWIG checks if test x$enable_pyext == xyes; then AC_PROG_SWIG if test x$SWIG == x; then AC_MSG_ERROR([Can't build Python extension since swig could not be found]) enable_pyext=no else ## Test that SWIG makes a compilable source file... ## cf. g++ 4.x requires that string literal is "_const_ char*" cat > conftest.i <<EOL %module conftest %{ void foo(); %} void foo(); EOL AC_MSG_CHECKING([if $SWIG can make a Python function wrapper]) flag_ok=yes stat_string=`$SWIG -c++ -python conftest.i 2>&1 1>&5` ; test -z "$stat_string" || flag_ok=no AC_MSG_RESULT([$flag_ok]) if test x$flag_ok != xyes; then AC_MSG_ERROR([Can't build Python extension since $SWIG is not able to make a Python wrapper]) enable_pyext=no else swig_compiler=$CXX AC_CEDAR_CHECKCXXFLAG([-Wno-format], [AC_MSG_NOTICE([adding -Wno-format to swig compilation test]); swig_compiler="$swig_compiler -Wno-format"]) AC_MSG_CHECKING([if $SWIG is compatible with the $CXX compiler]) flag_ok=yes if test x$flag_ok == xyes; then stat_string=`$swig_compiler -c conftest_wrap.cxx $CPPFLAGS $CXXFLAGS -I$python_incpath 2>&1 1>&5` ; test -z "$stat_string" || flag_ok=no fi AC_MSG_RESULT([$flag_ok]) if test x$flag_ok != xyes; then AC_MSG_ERROR([Can't build Python extension since $SWIG is not compatible with $CXX. Get a newer SWIG version!]) enable_pyext=no fi fi fi rm -rf conftest* fi ## Finish if test x$enable_pyext == xyes; then AC_MSG_NOTICE([All Python build checks successful: 'rivet' Python extension will be built]) fi AM_CONDITIONAL(ENABLE_PYEXT, [test x$enable_pyext == xyes]) ## Set default build flags AM_CPPFLAGS="-I\$(top_srcdir)/include -I\$(top_builddir)/include" #AM_CPPFLAGS="$AM_CPPFLAGS -I\$(top_srcdir)/include/eigen2" AM_CPPFLAGS="$AM_CPPFLAGS \$(GSL_CPPFLAGS)" AM_CPPFLAGS="$AM_CPPFLAGS -I\$(BOOSTINCPATH) \$(BOOST_CPPFLAGS)" AM_CPPFLAGS="$AM_CPPFLAGS -I\$(HEPMCINCPATH)" AM_CPPFLAGS="$AM_CPPFLAGS -I\$(FASTJETINCPATH)" AC_CEDAR_CHECKCXXFLAG([-pedantic], [AM_CXXFLAGS="$AM_CXXFLAGS -pedantic"]) AC_CEDAR_CHECKCXXFLAG([-ansi], [AM_CXXFLAGS="$AM_CXXFLAGS -ansi"]) AC_CEDAR_CHECKCXXFLAG([-Wall], [AM_CXXFLAGS="$AM_CXXFLAGS -Wall"]) AC_CEDAR_CHECKCXXFLAG([-Wno-long-long], [AM_CXXFLAGS="$AM_CXXFLAGS -Wno-long-long"]) AC_CEDAR_CHECKCXXFLAG([-Wno-format], [AM_CXXFLAGS="$AM_CXXFLAGS -Wno-format"]) ## Debug flag (default=none) AC_ARG_ENABLE([debug], [AC_HELP_STRING(--enable-debug, [build with debugging symbols @<:@default=no@:>@])], [], [enable_debug=no]) if test x$enable_debug == xyes; then AC_CEDAR_CHECKCXXFLAG([-g], [AM_CXXFLAGS="$AM_CXXFLAGS -g "]) fi ## Extra warnings flag (default=none) AC_ARG_ENABLE([extra-warnings], [AC_HELP_STRING(--enable-extra-warnings, [build with extra compiler warnings (recommended for developers) @<:@default=no@:>@])], [], [enable_extra_warnings=no]) if test x$enable_extra_warnings == xyes; then AC_CEDAR_CHECKCXXFLAG([-Wextra], [AM_CXXFLAGS="$AM_CXXFLAGS -Wextra "]) fi AC_SUBST(AM_CPPFLAGS) AC_SUBST(AM_CXXFLAGS) AC_EMPTY_SUBST AC_CONFIG_FILES(include/Makefile include/Rivet/Makefile) AC_CONFIG_FILES(src/Makefile) AC_CONFIG_FILES(src/Core/Makefile) AC_CONFIG_FILES(src/Tools/Makefile src/Tools/yaml-cpp/Makefile) AC_CONFIG_FILES(src/Projections/Makefile) AC_CONFIG_FILES(src/Analyses/Makefile) AC_CONFIG_FILES(test/Makefile) AC_CONFIG_FILES(pyext/Makefile pyext/rivet/Makefile pyext/setup.py) AC_CONFIG_FILES(data/Makefile data/refdata/Makefile data/anainfo/Makefile data/plotinfo/Makefile data/texmf/Makefile) AC_CONFIG_FILES(doc/Makefile) AC_CONFIG_FILES(doc/rivetversion.sty) AC_CONFIG_FILES(bin/Makefile bin/rivet-config bin/rivet-buildplugin) AC_CONFIG_FILES(Makefile Doxyfile) AC_CONFIG_FILES(rivetenv.sh rivetenv.csh) AC_OUTPUT if test x$enable_pyrivet == xyes; then cat <<EOF ************************************************************ RIVET CONFIGURED! Now build and install (to the $prefix tree) with e.g. make -j2 && make -j2 install To use Rivet, we recommend reading HepMC files from a file or pipe (the latter may be made with mkfifo) using the 'rivet' executable. For a more pleasant command line experience, you can include the data/rivet-completion file into your .bashrc file, or your bash_completion.d directory if you have one. The rivetenv.*sh files will not be installed, but can help you to set up a Rivet runtime environment in future. ************************************************************ EOF fi ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/missing���������������������������������������������������������������������������������0000755�0001750�0001750�00000024152�12116415400�012445� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to <bug-automake@gnu.org>." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/INSTALL���������������������������������������������������������������������������������0000644�0001750�0001750�00000036600�12116077756�012122� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `<wchar.h>' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. ��������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/��������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�12131473213�012470� 5����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/����������������������������������������������������������������������������0000755�0001750�0001750�00000000000�12131473213�013122� 5����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/DataPointSetFactory.h�������������������������������������������������������0000644�0001750�0001750�00000101107�12116077757�017202� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_DataPointSetFactory_H #define LWH_DataPointSetFactory_H // // This is the declaration of the DataPointSetFactory class. // #include "AIDataPointSetFactory.h" #include "DataPointSet.h" #include "Histogram1D.h" #include "Histogram2D.h" #include "Profile1D.h" #include "Tree.h" #include <string> #include <stdexcept> namespace LWH { using namespace AIDA; /** * Basic user-level interface for creating a factory * of IDataPointSet. The created objects are assumed to be * managed by the tree which is associated to the factory. */ class DataPointSetFactory: public IDataPointSetFactory { public: /** * Standard constructor. */ DataPointSetFactory(Tree & t) : tree(&t) {} /** * Destructor. */ virtual ~DataPointSetFactory() {} /** * Create an empty IDataPointSet. * @param path The path of the IDataPointSet. The path can either * be a relative or full path. * ("/folder1/folder2/dataName" and "../folder/dataName" * are valid paths). All the directories in the path * must exist. The characther `/` cannot be used in * names; it is only used to delimit directories within * paths. * @param title The title of the IDataPointSet. * @param dim The dimension of the IDataPoints that can be stored * in the set. * @return The newly created IDataPointSet. */ virtual IDataPointSet * create(const std::string & path, const std::string & title, int dim) { DataPointSet * dset = new DataPointSet(dim); dset->setTitle(title); if ( !tree->insert(path, dset) ) { delete dset; dset = 0; throw std::runtime_error("LWH couldn't create DataPointSet '" + title + "'." ); } return dset; } /** * Create an empty IDataPointSet. * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). * All the directories in the path must exist. The * characther `/` cannot be used in names; it is only * used to delimit directories within paths. * @param dim The dimension of the IDataPoints that can be stored * in the set. * @return The newly created IDataPointSet. */ virtual IDataPointSet * create(const std::string & pathAndTitle, int dim) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return create(pathAndTitle, title, dim); } /** * Create a two dimensional IDataPointSet providing the data along y (the x * value is the index of the y value in the array). * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param title The title of the IDataPointSet. * @param y The array of the y values * @param ey The array with the symmetric errors on y * @return The created IDataPointSet. */ virtual IDataPointSet * createY(const std::string & path, const std::string & title, const std::vector<double> & y, const std::vector<double> & ey) { return createY(path, title, y, ey, ey); } /** * Create a two dimensional IDataPointSet providing the data along y (the x * value is the index of the y value in the array). * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param title The title of the IDataPointSet. * @param y The array of the y values * @param eyp The array with the plus errors on y * @param eym The array with the minus errors on y * @return The created IDataPointSet. */ virtual IDataPointSet * createY(const std::string & path, const std::string & title, const std::vector<double> & y, const std::vector<double> & eyp, const std::vector<double> & eym) { IDataPointSet * dset = create(path, title, 2); std::vector<double> x, ex; for ( int i = 0, N = y.size(); i < N; ++i ) { dset->addPoint(DataPoint(2)); x.push_back(i); ex.push_back(0); } if ( !dset->setCoordinate(0, x, ex, ex) || !dset->setCoordinate(1, y, eyp, eym) ) throw std::runtime_error("LWH could add points to DataPointSet '" + title + "'." ); return dset; } /** * Create a two dimensional IDataPointSet providing the data along y (the x value is the index of the y value in the array). * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the * directories in the path must exist. The characther * `/` cannot be used in names; it is only used to * delimit directories within paths. * @param y The array of the y values * @param ey The array with the symmetric errors on y * @return The created IDataPointSet. * */ virtual IDataPointSet * createY(const std::string & pathAndTitle, const std::vector<double> & y, const std::vector<double> & ey) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createY(pathAndTitle, title, y, ey); } /** * Create a two dimensional IDataPointSet providing the data along y (the x * value is the index of the y value in the array). * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the * directories in the path must exist. The characther * `/` cannot be used in names; it is only used to * delimit directories within paths. * @param y The array of the y values * @param eyp The array with the plus errors on y * @param eym The array with the minus errors on y * @return The created IDataPointSet. */ virtual IDataPointSet * createY(const std::string & pathAndTitle, const std::vector<double> & y, const std::vector<double> & eyp, const std::vector<double> & eym) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createY(pathAndTitle, title, y, eyp, eym); } /** * Create a two dimensional IDataPointSet providing the data along x (the y * value is the index of the x value in the array). * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param title The title of the IDataPointSet. * @param x The array of the x values * @param ex The array with the symmetric errors on x * @return The created IDataPointSet. */ virtual IDataPointSet * createX(const std::string & path, const std::string & title, const std::vector<double> & x, const std::vector<double> & ex) { return createX(path, title, x, ex, ex); } /** * Create a two dimensional IDataPointSet providing the data along x (the y * value is the index of the x value in the array). * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param title The title of the IDataPointSet. * @param x The array of the x values * @param exp The array with the plus errors on x * @param exm The array with the minus errors on x * @return The created IDataPointSet. */ virtual IDataPointSet * createX(const std::string & path, const std::string & title, const std::vector<double> & x, const std::vector<double> & exp, const std::vector<double> & exm) { IDataPointSet * dset = create(path, title, 2); std::vector<double> y, ey; for ( int i = 0, N = x.size(); i < N; ++i ) { dset->addPoint(DataPoint(2)); y.push_back(i); ey.push_back(0); } if ( !dset->setCoordinate(0, x, exp, exm) || !dset->setCoordinate(1, y, ey, ey) ) throw std::runtime_error("LWH could add points to DataPointSet '" + title + "'." ); return dset; } /** * Create a two dimensional IDataPointSet providing the data along x (the y * value is the index of the x value in the array). * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the * directories in the path must exist. The characther * `/` cannot be used in names; it is only used to * delimit directories within paths. * @param x The array of the x values * @param ex The array with the symmetric errors on x * @return The created IDataPointSet. */ virtual IDataPointSet * createX(const std::string & pathAndTitle, const std::vector<double> & x, const std::vector<double> & ex) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createX(pathAndTitle, title, x, ex, ex); } /** * Create a two dimensional IDataPointSet providing the data along x (the y * value is the index of the x value in the array). * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the * directories in the path must exist. The characther * `/` cannot be used in names; it is only used to * delimit directories within paths. * @param x The array of the x values * @param exp The array with the plus errors on x * @param exm The array with the minus errors on x * @return The created IDataPointSet. */ virtual IDataPointSet * createX(const std::string & pathAndTitle, const std::vector<double> & x, const std::vector<double> & exp, const std::vector<double> & exm) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createX(pathAndTitle, title, x, exp, exm); } /** * Create a two dimensional IDataPointSet providing the data. * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param title The title of the IDataPointSet. * @param x The array of the x values * @param y The array of the y values * @param exp The array with the plus errors on x * @param eyp The array with the plus errors on y * @param exm The array with the minus errors on x * @param eym The array with the minus errors on y * @return The created IDataPointSet. */ virtual IDataPointSet * createXY(const std::string & path, const std::string & title, const std::vector<double> & x, const std::vector<double> & y, const std::vector<double> & exp, const std::vector<double> & eyp, const std::vector<double> & exm, const std::vector<double> & eym) { IDataPointSet * dset = create(path, title, 2); for ( int i = 0, N = y.size(); i < N; ++i ) dset->addPoint(DataPoint(2)); if ( !dset->setCoordinate(0, x, exp, exm) || !dset->setCoordinate(1, y, eyp, eym) ) throw std::runtime_error("LWH could add points to DataPointSet '" + title + "'." ); return dset; } /** * Create a two dimensional IDataPointSet providing the data. * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param title The title of the IDataPointSet. * @param x The array of the x values * @param y The array of the y values * @param ex The array with the symmetric errors on x * @param ey The array with the symmetric errors on y * @return The created IDataPointSet. */ virtual IDataPointSet * createXY(const std::string & path, const std::string & title, const std::vector<double> & x, const std::vector<double> & y, const std::vector<double> & ex, const std::vector<double> & ey) { return createXY(path, title, x, y, ex, ey, ex, ey); } /** * Create a two dimensional IDataPointSet providing the data. * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the * directories in the path must exist. The characther * `/` cannot be used in names; it is only used to * delimit directories within paths. * @param x The array of the x values * @param y The array of the y values * @param exp The array with the plus errors on x * @param eyp The array with the plus errors on y * @param exm The array with the minus errors on x * @param eym The array with the minus errors on y * @return The created IDataPointSet. */ virtual IDataPointSet * createXY(const std::string & pathAndTitle, const std::vector<double> & x, const std::vector<double> & y, const std::vector<double> & exp, const std::vector<double> & eyp, const std::vector<double> & exm, const std::vector<double> & eym) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createXY(pathAndTitle, title, x, y, exp, eyp, exm, eym); } /** * Create a two dimensional IDataPointSet providing the data. * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the * directories in the path must exist. The characther * `/` cannot be used in names; it is only used to * delimit directories within paths. * @param x The array of the x values * @param y The array of the y values * @param ex The array with the symmetric errors on x * @param ey The array with the symmetric errors on y * @return The created IDataPointSet. */ virtual IDataPointSet * createXY(const std::string & pathAndTitle, const std::vector<double> & x, const std::vector<double> & y, const std::vector<double> & ex, const std::vector<double> & ey) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createXY(pathAndTitle, title, x, y, ex, ey, ex, ey); } /** * Create a three dimensional IDataPointSet providing the data. * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param title The title of the IDataPointSet. * @param x The array of the x values * @param y The array of the y values * @param z The array of the z values * @param exp The array with the plus errors on x * @param eyp The array with the plus errors on y * @param ezp The array with the plus errors on z * @param exm The array with the minus errors on x * @param eym The array with the minus errors on y * @param ezm The array with the minus errors on z * @return The created IDataPointSet. */ virtual IDataPointSet * createXYZ(const std::string & path, const std::string & title, const std::vector<double> & x, const std::vector<double> & y, const std::vector<double> & z, const std::vector<double> & exp, const std::vector<double> & eyp, const std::vector<double> & ezp, const std::vector<double> & exm, const std::vector<double> & eym, const std::vector<double> & ezm) { IDataPointSet * dset = create(path, title, 3); for ( int i = 0, N = z.size(); i < N; ++i ) dset->addPoint(DataPoint(3)); if ( !dset->setCoordinate(0, x, exp, exm) || !dset->setCoordinate(1, y, eyp, eym) || !dset->setCoordinate(2, z, ezp, ezm) ) throw std::runtime_error("LWH could not add points to DataPointSet '" + title + "'." ); return dset; } /** * Create a three dimensional IDataPointSet providing the data. * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param title The title of the IDataPointSet. * @param x The array of the x values * @param y The array of the y values * @param z The array of the z values * @param ex The array with the symmetric errors on x * @param ey The array with the symmetric errors on y * @param ez The array with the symmetric errors on z * @return The created IDataPointSet. */ virtual IDataPointSet * createXYZ(const std::string & path, const std::string & title, const std::vector<double> & x, const std::vector<double> & y, const std::vector<double> & z, const std::vector<double> & ex, const std::vector<double> & ey, const std::vector<double> & ez) { return createXYZ(path, title, x, y, z, ex, ey, ez, ex, ey, ez); } /** * Create a two dimensional IDataPointSet providing the data. * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the * directories in the path must exist. The characther * `/` cannot be used in names; it is only used to * delimit directories within paths. * @param x The array of the x values * @param y The array of the y values * @param z The array of the z values * @param exp The array with the plus errors on x * @param eyp The array with the plus errors on y * @param ezp The array with the plus errors on z * @param exm The array with the minus errors on x * @param eym The array with the minus errors on y * @param ezm The array with the minus errors on z * @return The created IDataPointSet. */ virtual IDataPointSet * createXYZ(const std::string & pathAndTitle, const std::vector<double> & x, const std::vector<double> & y, const std::vector<double> & z, const std::vector<double> & exp, const std::vector<double> & eyp, const std::vector<double> & ezp, const std::vector<double> & exm, const std::vector<double> & eym, const std::vector<double> & ezm) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createXYZ(pathAndTitle, title, x, y, z, exp, eyp, ezp, exm, eym, ezm); } /** * Create a two dimensional IDataPointSet providing the data. * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the * directories in the path must exist. The characther * `/` cannot be used in names; it is only used to * delimit directories within paths. * @param x The array of the x values * @param y The array of the y values * @param z The array of the z values * @param exp The array with the symmetric errors on x * @param eyp The array with the symmetric errors on y * @param ezp The array with the symmetric errors on z * @return The created IDataPointSet. */ virtual IDataPointSet * createXYZ(const std::string & pathAndTitle, const std::vector<double> & x, const std::vector<double> & y, const std::vector<double> & z, const std::vector<double> & ex, const std::vector<double> & ey, const std::vector<double> & ez) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createXYZ(pathAndTitle, title, x, y, z, ex, ey, ez, ex, ey, ez); } /** * Make a copy of a given IDataPointSet. * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param dataPointSet The IDataPointSet to be copied. * @return The copy of the given IDataPointSet. */ virtual IDataPointSet * createCopy(const std::string & path, const IDataPointSet & dataPointSet) { IDataPointSet * dset = create(path, dataPointSet.title(), dataPointSet.dimension()); for ( int i = 0, N = dataPointSet.size(); i < N; ++i ) dset->addPoint(*dataPointSet.point(i)); return dset; } /** * Destroy a given IDataPointSet. * @param dataPointSet The IDataPointSet to be destroyed. * @return false If dataPointSet cannot be destroyed. */ virtual bool destroy(IDataPointSet * dataPointSet) { IManagedObject * mo = dynamic_cast<IManagedObject *>(dataPointSet); if ( !mo ) return false; return tree->rm(tree->findPath(*mo)); } /** * Create an IDataPointSet from an IHistogram1D. * @param path The path of the IDataPointSet. The path can either * be a relative or full path. * ("/folder1/folder2/dataName" and "../folder/dataName" * are valid paths). All the directories in the path * must exist. The characther `/` cannot be used in * names; it is only used to delimit directories within * paths. * @param hist The IHistogram1D from which the data is taken. * @param options Options, currently not specified * @return The newly created IDataPointSet. */ virtual IDataPointSet * create(const std::string & path, const IHistogram1D & hist, const std::string & = "") { IDataPointSet * dset = create(path, hist.title(), 2); //std::cout << hist.xtitle() << " & " << hist.ytitle() << std::endl; dset->setXTitle(hist.xtitle()); dset->setYTitle(hist.ytitle()); std::vector<double> x, y, ex, ey; for ( int i = 2, N = hist.axis().bins() + 2; i < N; ++i ) { dset->addPoint(DataPoint(2)); //x.push_back(hist.binMean(i - 2)); // < "Dynamic" version // Shouldn't IAxis have a binCentre(size_t binId) method? (According to Java AIDA v3.3.0 API) x.push_back((hist.axis().binLowerEdge(i - 2) + hist.axis().binUpperEdge(i - 2))/2.0); ex.push_back(hist.axis().binWidth(i - 2)/2.0); /// @todo This is not really the height or error: width needs to be included... const double binwidth = hist.axis().binWidth(i - 2); y.push_back(hist.binHeight(i - 2)/binwidth); //ey.push_back(hist.binError(i - 2)/2.0/binwidth); ey.push_back(hist.binError(i - 2)/binwidth); } if ( !dset->setCoordinate(0, x, ex, ex) || !dset->setCoordinate(1, y, ey, ey) ) throw std::runtime_error("LWH could add points to DataPointSet '" + hist.title() + "'." ); return dset; } /** * Create an IDataPointSet from an IHistogram2D. * @param path The path of the IDataPointSet. The path can either * be a relative or full path. * ("/folder1/folder2/dataName" and "../folder/dataName" * are valid paths). All the directories in the path * must exist. The characther `/` cannot be used in * names; it is only used to delimit directories within * paths. * @param hist The IHistogram2D from which the data is taken. * @param options Options, currently not specified * @return The newly created IDataPointSet. */ virtual IDataPointSet * create(const std::string & path, const IHistogram2D & hist, const std::string & = "") { IDataPointSet * dset = create(path, hist.title(), 3); //std::cout << hist.xtitle() << " & " << hist.ytitle() << std::endl; dset->setXTitle(hist.xtitle()); dset->setYTitle(hist.ytitle()); std::vector<double> x, y, z, ex, ey, ez; for ( int ix = 2, Nx = hist.xAxis().bins() + 2; ix < Nx; ++ix ) for ( int iy = 2, Ny = hist.yAxis().bins() + 2; iy < Ny; ++iy ) { dset->addPoint(DataPoint(3)); //x.push_back(hist.binMean(i - 2)); // < "Dynamic" version // Shouldn't IAxis have a binCentre(size_t binId) method? (According to Java AIDA v3.3.0 API) x.push_back((hist.xAxis().binLowerEdge(ix - 2) + hist.xAxis().binUpperEdge(ix - 2))/2.0); ex.push_back(hist.xAxis().binWidth(ix - 2)/2.0); /// @todo This is not really the height or error: width needs to be included... y.push_back((hist.yAxis().binLowerEdge(iy - 2) + hist.yAxis().binUpperEdge(iy - 2))/2.0); ey.push_back(hist.yAxis().binWidth(iy - 2)/2.0); /// @todo This is not really the height or error: width needs to be included... const double binwidth = hist.xAxis().binWidth(ix - 2)* hist.yAxis().binWidth(iy - 2); z.push_back(hist.binHeight(ix - 2, iy - 2)/binwidth); //ey.push_back(hist.binError(i - 2)/2.0/binwidth); ez.push_back(hist.binError(ix - 2, iy - 2)/binwidth); } if ( !dset->setCoordinate(0, x, ex, ex) || !dset->setCoordinate(1, y, ey, ey) || !dset->setCoordinate(2, z, ez, ez) ) throw std::runtime_error("LWH could not add points to DataPointSet '" + hist.title() + "'." ); return dset; } /** * Create an IDataPointSet from an IProfile1D. * @param path The path of the IDataPointSet. The path can either * be a relative or full path. * ("/folder1/folder2/dataName" and "../folder/dataName" * are valid paths). All the directories in the path * must exist. The characther `/` cannot be used in * names; it is only used to delimit directories within * paths. * @param prof The IProfile1D from which the data is taken. * @param options Options, currently not specified * @return The newly created IDataPointSet. */ virtual IDataPointSet * create(const std::string & path, const IProfile1D & prof, const std::string & = "") { //std::cout << "########## " << prof.title() << std::endl; IDataPointSet * dset = create(path, prof.title(), 2); dset->setXTitle(prof.xtitle()); dset->setYTitle(prof.ytitle()); std::vector<double> x, y, ex, ey; for ( int i = 2, N = prof.axis().bins() + 2; i < N; ++i ) { dset->addPoint(DataPoint(2)); //x.push_back(prof.binMean(i - 2)); // < "Dynamic" version // Shouldn't IAxis have a binCentre(size_t binId) method? (According to Java AIDA v3.3.0 API) x.push_back((prof.axis().binLowerEdge(i - 2) + prof.axis().binUpperEdge(i - 2))/2.0); ex.push_back(prof.axis().binWidth(i - 2)/2.0); y.push_back(prof.binHeight(i - 2)); //ey.push_back(prof.binError(i - 2)/2.0); ey.push_back(prof.binError(i - 2)); } if ( !dset->setCoordinate(0, x, ex, ex) || !dset->setCoordinate(1, y, ey, ey) ) throw std::runtime_error("LWH could add points to DataPointSet '" + prof.title() + "'." ); return dset; } /** * LWH cannot handle a IHistogram3D. */ virtual IDataPointSet * create(const std::string &, const IHistogram3D &, const std::string & = "") { return error<IDataPointSet>("IHistogram3D"); } /** * LWH cannot handle a ICloud1. */ virtual IDataPointSet * create(const std::string &, const ICloud1D &, const std::string & = "") { return error<IDataPointSet>("ICloud1D"); } /** * LWH cannot handle a ICloud2D. */ virtual IDataPointSet * create(const std::string &, const ICloud2D &, const std::string & = "") { return error<IDataPointSet>("ICloud2D"); } /** * LWH cannot handle a ICloud3D. */ virtual IDataPointSet * create(const std::string &, const ICloud3D &, const std::string & = "") { return error<IDataPointSet>("ICloud3D"); } /** * LWH cannot handle a IProfile2D. */ virtual IDataPointSet * create(const std::string &, const IProfile2D &, const std::string & = "") { return error<IDataPointSet>("IProfile2D"); } /** * LWH cannot handle the addition of data points. */ virtual IDataPointSet * add(const std::string &, const IDataPointSet &, const IDataPointSet &) { return error<IDataPointSet>("addition of data points"); } /** * LWH cannot handle the subtraction of data points. */ virtual IDataPointSet * subtract(const std::string &, const IDataPointSet &, const IDataPointSet &) { return error<IDataPointSet>("subtraction of data points"); } /** * LWH cannot handle the multiplication of data points. */ virtual IDataPointSet * multiply(const std::string &, const IDataPointSet &, const IDataPointSet &) { return error<IDataPointSet>("multiplication of data points"); } /** * LWH cannot handle the division of data points. */ virtual IDataPointSet * divide(const std::string &, const IDataPointSet &, const IDataPointSet &) { return error<IDataPointSet>("division of data points"); } /** * LWH cannot handle the weighted mean of data points. */ virtual IDataPointSet * weightedMean(const std::string &, const IDataPointSet &, const IDataPointSet &) { return error<IDataPointSet>("weighted means of data points"); } private: /** Throw a suitable error. */ template <typename T> static T * error(std::string feature) { throw std::runtime_error("LWH cannot handle " + feature + "."); return 0; } /** The tree where the actual data sets are stored. */ Tree * tree; }; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/VariAxis.h������������������������������������������������������������������0000644�0001750�0001750�00000011344�12116077757�015044� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_VariAxis_H #define LWH_VariAxis_H // // This is the declaration of the VariAxis class representing // #include <limits> #include <cmath> #include <algorithm> #include <map> #include "AIAxis.h" namespace LWH { using namespace AIDA; /** * An VariAxis represents a binned histogram axis. A 1D Histogram would have * one VariAxis representing the X axis, while a 2D Histogram would have two * axes representing the X and Y VariAxis. */ class VariAxis: public IAxis { public: /** * Standard constructor. */ VariAxis(const std::vector<double> & edges) { for ( int i = 0, N = edges.size(); i < N; ++i ) binco[edges[i]] = 0; std::map<double,int>::iterator it = binco.begin(); for ( int i = 0, N = edges.size(); i < N; ++i ) (it++)->second = i; } /** * Copy constructor. */ VariAxis(const VariAxis & a) : IAxis(a), binco(a.binco) {} /// Destructor. virtual ~VariAxis() { } /** * Check if the IAxis has fixed binning, i.e. if all the bins have * the same width. @return <code>true</code> if the binning is * fixed, <code>false</code> otherwise. * */ bool isFixedBinning() const {return false; } /** * Get the lower edge of the IAxis. * @return The IAxis's lower edge. * */ double lowerEdge() const { if ( binco.size() ) return binco.begin()->first; return 0; } /** * Get the upper edge of the IAxis. * @return The IAxis's upper edge. * */ double upperEdge() const { if ( !binco.size() ) return 0; std::map<double,int>::const_iterator last = binco.end(); return (--last)->first; } /** * The number of bins (excluding underflow and overflow) on the IAxis. * @return The IAxis's number of bins. * */ int bins() const { return binco.size() - 1; } /** * Get the lower edge of the specified bin. * @param index The bin number: 0 to bins()-1 for the in-range bins * or OVERFLOW or UNDERFLOW. * @return The lower edge of the corresponding bin; for the * underflow bin this is <tt>Double.NEGATIVE_INFINITY</tt>. * */ std::pair<double,double> binEdges(int index) const { std::pair<double,double> edges(0.0, 0.0); if ( !binco.size() ) return edges; std::map<double,int>::const_iterator lo = binco.end(); std::map<double,int>::const_iterator up = binco.begin(); if ( index >= 0 ) while ( index-- >= 0 && up != binco.end() ) lo = up++; edges.first = ( lo == binco.end() )? -std::numeric_limits<double>::max(): lo->first; edges.second = ( up == binco.end() )? std::numeric_limits<double>::max(): up->first; return edges; } /** * Get the lower edge of the specified bin. * @param index The bin number: 0 to bins()-1 for the in-range bins * or OVERFLOW or UNDERFLOW. * @return The lower edge of the corresponding bin; for the * underflow bin this is <tt>Double.NEGATIVE_INFINITY</tt>. * */ double binLowerEdge(int index) const { return binEdges(index).first; } /** * Get the upper edge of the specified bin. * @param index The bin number: 0 to bins()-1 for the in-range bins * or OVERFLOW or UNDERFLOW. * @return The upper edge of the corresponding bin; for the overflow * bin this is <tt>Double.POSITIVE_INFINITY</tt>. * */ double binUpperEdge(int index) const { return binEdges(index).second; } /** * Get the width of the specified bin. * @param index The bin number: 0 to bins()-1) for the in-range bins * or OVERFLOW or UNDERFLOW. * @return The width of the corresponding bin. * */ double binWidth(int index) const { std::pair<double,double> edges = binEdges(index); return edges.second - edges.first; } /** * Convert a coordinate on the axis to a bin number. If the * coordinate is less than the lowerEdge UNDERFLOW is returned; if * the coordinate is greater or equal to the upperEdge OVERFLOW is * returned. * @param coord The coordinate to be converted. * @return The corresponding bin number. * */ int coordToIndex(double coord) const { std::map<double,int>::const_iterator up = binco.upper_bound(coord); if ( up == binco.begin() ) return UNDERFLOW_BIN; else if ( up == binco.end() ) return OVERFLOW_BIN; else return up->second - 1; } /** * Return the midpoint of the specified bin. No checking is * performed to ensure the argument is a valid bin. */ double binMidPoint(int index) const { std::pair<double,double> edges = binEdges(index); return (edges.second + edges.first)/2.0; } private: /** * A map relating the lower edge of a bin to the corresponding bin * number. */ std::map<double,int> binco; }; } #endif /* LWH_VariAxis_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/Histogram2D.h���������������������������������������������������������������0000644�0001750�0001750�00000066472�12116077757�015455� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_Histogram2D_H #define LWH_Histogram2D_H // // This is the declaration of the Histogram1D class. // #include "AIHistogram2D.h" #include "ManagedObject.h" #include "Axis.h" #include "VariAxis.h" #include <vector> #include <stdexcept> #include <iostream> #ifdef HAVE_ROOT #include "TH2D.h" #endif namespace LWH { using namespace AIDA; /** * User level interface to 1D Histogram. */ class Histogram2D: public IHistogram2D, public ManagedObject { public: /** HistFactory is a friend. */ friend class HistogramFactory; public: /** * Standard constructor. */ Histogram2D(int nx, double lox, double upx, int ny, double loy, double upy) : xfax(new Axis(nx, lox, upx)), xvax(0), yfax(new Axis(ny, loy, upy)), sum(nx + 2, std::vector<int>(ny + 2)), sumw(nx + 2, std::vector<double>(ny + 2)), sumw2(nx + 2, std::vector<double>(ny + 2)), sumxw(nx + 2, std::vector<double>(ny + 2)), sumx2w(nx + 2, std::vector<double>(ny + 2)), sumyw(nx + 2, std::vector<double>(ny + 2)), sumy2w(nx + 2, std::vector<double>(ny + 2)) { xax = xfax; yax = yfax; } /** * Standard constructor for variable bin width. */ Histogram2D(const std::vector<double> & xedges, const std::vector<double> & yedges) : xfax(0), xvax(new VariAxis(xedges)), yfax(0), yvax(new VariAxis(yedges)), sum(xedges.size() + 1, std::vector<int>(yedges.size() + 1)), sumw(xedges.size() + 1, std::vector<double>(yedges.size() + 1)), sumw2(xedges.size() + 1, std::vector<double>(yedges.size() + 1)), sumxw(xedges.size() + 1, std::vector<double>(yedges.size() + 1)), sumx2w(xedges.size() + 1, std::vector<double>(yedges.size() + 1)), sumyw(xedges.size() + 1, std::vector<double>(yedges.size() + 1)), sumy2w(xedges.size() + 1, std::vector<double>(yedges.size() + 1)) { xax = xvax; yax = yvax; } /** * Copy constructor. */ Histogram2D(const Histogram2D & h) : IBaseHistogram(h), IHistogram(h), IHistogram2D(h), ManagedObject(h), xfax(0), xvax(0), yfax(0), yvax(0), sum(h.sum), sumw(h.sumw), sumw2(h.sumw2), sumxw(h.sumxw), sumx2w(h.sumx2w) , sumyw(h.sumyw), sumy2w(h.sumy2w){ const VariAxis * hxvax = dynamic_cast<const VariAxis *>(h.xax); if ( hxvax ) xax = xvax = new VariAxis(*hxvax); else xax = xfax = new Axis(dynamic_cast<const Axis &>(*h.xax)); const VariAxis * hyvax = dynamic_cast<const VariAxis *>(h.yax); if ( hyvax ) yax = yvax = new VariAxis(*hyvax); else yax = yfax = new Axis(dynamic_cast<const Axis &>(*h.yax)); } /// Destructor. virtual ~Histogram2D() { delete xax; delete yax; } /** * Get the Histogram's title. * @return The Histogram's title. */ // std::string title() const { // return theTitle; // } /** * Get the Histogram's name. * @return The Histogram's name */ std::string name() const { return title(); } /** * Set the histogram title. * @param title The title. * @return false If title cannot be changed. */ // bool setTitle(const std::string & title) { // theTitle = title; // return true; // } /** * Not implemented in LWH. will throw an exception. */ IAnnotation & annotation() { throw std::runtime_error("LWH cannot handle annotations"); return *anno; } /** * Not implemented in LWH. will throw an exception. */ const IAnnotation & annotation() const { throw std::runtime_error("LWH cannot handle annotations"); return *anno; } /** * Get the Histogram's dimension. * @return The Histogram's dimension. */ int dimension() const { return 2; } /** * Reset the Histogram; as if just created. * @return false If something goes wrong. */ bool reset() { const int nx = xax->bins() + 2; const int ny = yax->bins() + 2; sum = std::vector< std::vector<int> >(nx, std::vector<int>(ny)); sumw = std::vector< std::vector<double> >(nx, std::vector<double>(ny)); sumw2 = sumw; sumxw = sumw; sumx2w = sumw; sumyw = sumw; sumy2w = sumw; return true; } /** * Get the number of in-range entries in the Histogram. * @return The number of in-range entries. * */ int entries() const { int si = 0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) si += sum[ix][iy]; return si; } /** * Sum of the entries in all the IHistogram's bins, * i.e in-range bins, UNDERFLOW and OVERFLOW. * This is equivalent to the number of times the * method fill was invoked. * @return The sum of all the entries. */ int allEntries() const { return entries() + extraEntries(); } /** * Number of entries in the UNDERFLOW and OVERFLOW bins. * @return The number of entries outside the range of the IHistogram. */ int extraEntries() const { int esum = sum[0][0] + sum[1][0] + sum[0][1] + sum[1][1]; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) esum += sum[ix][0] + sum[ix][1]; for ( int iy = 2; iy < yax->bins() + 2; ++iy ) esum += sum[0][iy] + sum[1][iy]; return esum; } /** * Number of equivalent entries, * i.e. <tt>SUM[ weight ] ^ 2 / SUM[ weight^2 ]</tt> * @return The number of equivalent entries. */ double equivalentBinEntries() const { double sw = 0.0; double sw2 = 0.0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) { sw += sumw[ix][iy]; sw2 += sumw2[ix][iy]; } return (sw*sw)/sw2; } /** * Sum of in-range bin heights in the IHistogram, * UNDERFLOW and OVERFLOW bins are excluded. * @return The sum of the in-range bins heights. * */ double sumBinHeights() const { double sw = 0.0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) sw += sumw[ix][iy]; return sw; } /** * Sum of the heights of all the IHistogram's bins, * i.e in-range bins, UNDERFLOW and OVERFLOW. * @return The sum of all the bins heights. */ double sumAllBinHeights() const { return sumBinHeights() + sumExtraBinHeights(); } /** * Sum of heights in the UNDERFLOW and OVERFLOW bins. * @return The sum of the heights of the out-of-range bins. */ double sumExtraBinHeights() const { double esum = sumw[0][0] + sumw[1][0] + sumw[0][1] + sumw[1][1]; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) esum += sumw[ix][0] + sumw[ix][1]; for ( int iy = 2; iy < yax->bins() + 2; ++iy ) esum += sumw[0][iy] + sumw[1][iy]; return esum; } /** * Minimum height of the in-range bins, * i.e. not considering the UNDERFLOW and OVERFLOW bins. * @return The minimum height among the in-range bins. */ double minBinHeight() const { double minw = sumw[2][2]; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) minw = std::min(minw, sumw[ix][iy]); return minw; } /** * Maximum height of the in-range bins, * i.e. not considering the UNDERFLOW and OVERFLOW bins. * @return The maximum height among the in-range bins. */ double maxBinHeight() const{ double maxw = sumw[2][2]; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) maxw = std::max(maxw, sumw[ix][iy]); return maxw; } /** * Fill the IHistogram1D with a value and the * corresponding weight. * @param x The value to be filled in. * @param weight The corresponding weight (by default 1). * @return false If the weight is <0 or >1 (?). */ bool fill(double x, double y, double weight = 1.) { int ix = xax->coordToIndex(x) + 2; int iy = yax->coordToIndex(y) + 2; ++sum[ix][iy]; sumw[ix][iy] += weight; sumxw[ix][iy] += x*weight; sumx2w[ix][iy] += x*x*weight; sumyw[ix][iy] += y*weight; sumy2w[ix][iy] += y*y*weight; sumw2[ix][iy] += weight*weight; return weight >= 0 && weight <= 1; } /** * The weighted mean along the x-axis of a bin. * @param xindex The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param yindex The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The mean of the corresponding bin. */ double binMeanX(int xindex, int yindex) const { int ix = xindex + 2; int iy = yindex + 2; return sumw[ix][iy] != 0.0? sumxw[ix][iy]/sumw[ix][iy]: ( xvax? xvax->binMidPoint(xindex): xfax->binMidPoint(xindex) ); }; /** * The weighted mean along the y-axis of a bin. * @param xindex The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param yindex The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The mean of the corresponding bin. */ double binMeanY(int xindex, int yindex) const { int ix = xindex + 2; int iy = yindex + 2; return sumw[ix][iy] != 0.0? sumyw[ix][iy]/sumw[ix][iy]: ( yvax? yvax->binMidPoint(yindex): xfax->binMidPoint(yindex) ); }; /** * The weighted x-RMS of a bin. * @param xindex The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param yindex The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The RMS of the corresponding bin. */ double binRmsX(int xindex, int yindex) const { int ix = xindex + 2; int iy = yindex + 2; return sumw[ix][iy] == 0.0 || sum[ix][iy] < 2? xax->binWidth(xindex): std::sqrt(std::max(sumw[ix][iy]*sumx2w[ix][iy] - sumxw[ix][iy]*sumxw[ix][iy], 0.0))/sumw[ix][iy]; }; /** * The weighted y-RMS of a bin. * @param xindex The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param yindex The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The RMS of the corresponding bin. */ double binRmsY(int xindex, int yindex) const { int ix = xindex + 2; int iy = yindex + 2; return sumw[ix][iy] == 0.0 || sum[ix][iy] < 2? yax->binWidth(yindex): std::sqrt(std::max(sumw[ix][iy]*sumy2w[ix][iy] - sumyw[ix][iy]*sumyw[ix][iy], 0.0))/sumw[ix][iy]; }; /** * Number of entries in the corresponding bin (ie the number of * times fill was called for this bin). * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The number of entries in the corresponding bin. */ int binEntries(int xindex, int yindex) const { return sum[xindex + 2][yindex + 2]; } /** * Sum of all the entries of the bins along a given x bin. * This is equivalent to <tt>projectionX().binEntries(index)</tt>. * @param index The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The number of entries in the corresponding set of bins. * */ virtual int binEntriesX(int index) const { int ret = 0; for ( int iy = 2; iy < yax->bins() + 2; ++iy ) ret += sum[index + 2][iy]; return ret; } /** * Sum of all the entries of the bins along a given y bin. * This is equivalent to <tt>projectionY().binEntries(index)</tt>. * @param index The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The number of entries in the corresponding set of bins. * */ virtual int binEntriesY(int index) const { int ret = 0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) ret += sum[ix][index + 2]; return ret; } /** * Total height of the corresponding bin (ie the sum of the weights * in this bin). * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The height of the corresponding bin. */ double binHeight(int xindex, int yindex) const { /// @todo While this is compatible with the reference AIDA /// implementation, it is not the bin height! return sumw[xindex + 2][yindex + 2]; } /** * Sum of all the heights of the bins along a given x bin. * This is equivalent to <tt>projectionX().binHeight(index)</tt>. * @param index The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The sum of the heights in the corresponding set of bins. * */ virtual double binHeightX(int index) const { double ret = 0; for ( int iy = 2; iy < yax->bins() + 2; ++iy ) ret += sumw[index + 2][iy]; return ret; } /** * Sum of all the heights of the bins along a given y bin. * This is equivalent to <tt>projectionY().binHeight(index)</tt>. * @param index The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The sum of the heights in the corresponding set of bins. * */ virtual double binHeightY(int index) const { double ret = 0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) ret += sumw[ix][index + 2]; return ret; } /** * The error of a given bin. * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The error on the corresponding bin. * */ double binError(int xindex, int yindex) const { return std::sqrt(sumw2[xindex + 2][yindex + 2]); } /** * The mean of the IHistogram2D along the x axis. * @return The mean of the IHistogram2D along the x axis. * */ double meanX() const { double s = 0.0; double sx = 0.0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) { s += sumw[ix][iy]; sx += sumxw[ix][iy]; } return s != 0.0? sx/s: 0.0; } /** * The mean of the IHistogram2D along the y axis. * @return The mean of the IHistogram2D along the y axis. * */ double meanY() const { double s = 0.0; double sy = 0.0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) { s += sumw[ix][iy]; sy += sumyw[ix][iy]; } return s != 0.0? sy/s: 0.0; } /** * The RMS of the IHistogram2D along the x axis. * @return The RMS if the IHistogram2D along the x axis. * */ double rmsX() const { double s = 0.0; double sx = 0.0; double sx2 = 0.0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) { s += sumw[ix][iy]; sx += sumxw[ix][iy]; sx2 += sumx2w[ix][iy]; } return s != 0.0? std::sqrt(std::max(s*sx2 - sx*sx, 0.0))/s: xax->upperEdge() - xax->lowerEdge(); } /** * The RMS of the IHistogram2D along the x axis. * @return The RMS if the IHistogram2D along the x axis. * */ double rmsY() const { double s = 0.0; double sy = 0.0; double sy2 = 0.0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) { s += sumw[ix][iy]; sy += sumyw[ix][iy]; sy2 += sumy2w[ix][iy]; } return s != 0.0? std::sqrt(std::max(s*sy2 - sy*sy, 0.0))/s: yax->upperEdge() - yax->lowerEdge(); } /** The weights. */ double getSumW(int xindex, int yindex) const { return sumw[xindex + 2][yindex + 2]; } /** The squared weights. */ double getSumW2(int xindex, int yindex) const { return sumw2[xindex + 2][yindex + 2]; } /** The weighted x-values. */ double getSumXW(int xindex, int yindex) const { return sumxw[xindex + 2][yindex + 2]; } /** The weighted x-square-values. */ double getSumX2W(int xindex, int yindex) const { return sumx2w[xindex + 2][yindex + 2]; } /** The weighted x-values. */ double getSumYW(int xindex, int yindex) const { return sumyw[xindex + 2][yindex + 2]; } /** The weighted x-square-values. */ double getSumY2W(int xindex, int yindex) const { return sumy2w[xindex + 2][yindex + 2]; } /** * Get the x axis of the IHistogram2D. * @return The x coordinate IAxis. */ const IAxis & xAxis() const { return *xax; } /** * Get the y axis of the IHistogram2D. * @return The y coordinate IAxis. */ const IAxis & yAxis() const { return *yax; } /** * Get the bin number corresponding to a given coordinate along the * x axis. This is a convenience method, equivalent to * <tt>axis().coordToIndex(coord)</tt>. * @param coord The coordinalte along the x axis. * @return The corresponding bin number. */ int coordToIndexX(double coord) const { return xax->coordToIndex(coord); } /** * Get the bin number corresponding to a given coordinate along the * y axis. This is a convenience method, equivalent to * <tt>axis().coordToIndex(coord)</tt>. * @param coord The coordinalte along the y axis. * @return The corresponding bin number. */ int coordToIndexY(double coord) const { return yax->coordToIndex(coord); } /** * Add to this Histogram2D the contents of another IHistogram2D. * @param h The Histogram2D to be added to this IHistogram2D. * @return false If the IHistogram1Ds binnings are incompatible. */ bool add(const Histogram2D & h) { if ( xax->upperEdge() != h.xax->upperEdge() || xax->lowerEdge() != h.xax->lowerEdge() || xax->bins() != h.xax->bins() ) return false; if ( yax->upperEdge() != h.yax->upperEdge() || yax->lowerEdge() != h.yax->lowerEdge() || yax->bins() != h.yax->bins() ) return false; for ( int ix = 0; ix < xax->bins() + 2; ++ix ) for ( int iy = 0; iy < yax->bins() + 2; ++iy ) { sum[ix][iy] += h.sum[ix][iy]; sumw[ix][iy] += h.sumw[ix][iy]; sumxw[ix][iy] += h.sumxw[ix][iy]; sumx2w[ix][iy] += h.sumx2w[ix][iy]; sumyw[ix][iy] += h.sumyw[ix][iy]; sumy2w[ix][iy] += h.sumy2w[ix][iy]; sumw2[ix][iy] += h.sumw2[ix][iy]; } return true; } /** * Add to this IHistogram1D the contents of another IHistogram1D. * @param hist The IHistogram1D to be added to this IHistogram1D. * @return false If the IHistogram1Ds binnings are incompatible. */ bool add(const IHistogram2D & hist) { return add(dynamic_cast<const Histogram2D &>(hist)); } /** * Scale the contents of this histogram with the given factor. * @param s the scaling factor to use. */ bool scale(double s) { for ( int ix = 0; ix < xax->bins() + 2; ++ix ) for ( int iy = 0; iy < yax->bins() + 2; ++iy ) { sumw[ix][iy] *= s; sumxw[ix][iy] *= s; sumx2w[ix][iy] *= s; sumyw[ix][iy] *= s; sumy2w[ix][iy] *= s; sumw2[ix][iy] *= s*s; } return true; } /** * Scale the given histogram so that the integral over all bins * (including overflow) gives \a intg. This function also corrects * for the bin-widths, which means that it should only be run once * for each histogram. Further rescaling must be done with the * scale(double) function. */ void normalize(double intg) { double oldintg = sumAllBinHeights(); if ( oldintg == 0.0 ) return; for ( int ix = 0; ix < xax->bins() + 2; ++ix ) for ( int iy = 0; iy < yax->bins() + 2; ++iy ) { double fac = intg/oldintg; if ( ix >= 2 && iy >= 2 ) fac /= (xax->binUpperEdge(ix - 2) - xax->binLowerEdge(ix - 2))* (yax->binUpperEdge(iy - 2) - yax->binLowerEdge(iy - 2)); sumw[ix][iy] *= fac; sumxw[ix][iy] *= fac; sumx2w[ix][iy] *= fac; sumyw[ix][iy] *= fac; sumy2w[ix][iy] *= fac; sumw2[ix][iy] *= fac*fac; } } /** * Return the integral over the histogram bins assuming it has been * normalize()d. */ // double integral() const { // double intg = sumw[0] + sumw[1]; // for ( int i = 2; i < ax->bins() + 2; ++i ) // is this right? Leave out bin width factor? // intg += sumw[ix][iy]*(ax->binUpperEdge(i - 2) - ax->binLowerEdge(i - 2)); // return intg; // } /** * Not implemented in LWH. * @return null pointer always. */ void * cast(const std::string &) const { return 0; } /** * Write out the histogram in the AIDA xml format. */ bool writeXML(std::ostream & os, std::string path, std::string name) { //std::cout << "Writing out histogram " << name << " in AIDA file format!" << std::endl; os << " <histogram2d name=\"" << encodeForXML(name) << "\"\n title=\"" << encodeForXML(title()) << "\" path=\"" << path << "\">\n <axis max=\"" << xax->upperEdge() << "\" numberOfBins=\"" << xax->bins() << "\" min=\"" << xax->lowerEdge() << "\" direction=\"x\""; if ( xvax ) { os << ">\n"; for ( int i = 0, N = xax->bins() - 1; i < N; ++i ) os << " <binBorder value=\"" << xax->binUpperEdge(i) << "\"/>\n"; os << " </axis>\n"; } else { os << "/>\n"; } os << " <axis max=\"" << yax->upperEdge() << "\" numberOfBins=\"" << yax->bins() << "\" min=\"" << yax->lowerEdge() << "\" direction=\"y\""; if ( yvax ) { os << ">\n"; for ( int i = 0, N = yax->bins() - 1; i < N; ++i ) os << " <binBorder value=\"" << yax->binUpperEdge(i) << "\"/>\n"; os << " </axis>\n"; } else { os << "/>\n"; } os << " <statistics entries=\"" << entries() << "\">\n <statistic mean=\"" << meanX() << "\" direction=\"x\"\n rms=\"" << rmsX() << "\"/>\n </statistics>\n" << " <statistics entries=\"" << entries() << "\">\n <statistic mean=\"" << meanY() << "\" direction=\"y\"\n rms=\"" << rmsY() << "\"/>\n </statistics>\n <data2d>\n"; for ( int ix = 0; ix < xax->bins() + 2; ++ix ) for ( int iy = 0; iy < yax->bins() + 2; ++iy ) if ( sum[ix][iy] ) { os << " <bin2d binNumX=\""; if ( ix == 0 ) os << "UNDERFLOW"; else if ( ix == 1 ) os << "OVERFLOW"; else os << ix - 2; os << "\" binNumY=\""; if ( iy == 0 ) os << "UNDERFLOW"; else if ( iy == 1 ) os << "OVERFLOW"; else os << iy - 2; os << "\" entries=\"" << sum[ix][iy] << "\" height=\"" << sumw[ix][iy] << "\"\n error=\"" << std::sqrt(sumw2[ix][iy]) << "\" error2=\"" << sumw2[ix][iy] << "\"\n weightedMeanX=\"" << binMeanX(ix - 2, iy - 2) << "\" weightedRmsX=\"" << binRmsX(ix - 2, iy - 2) << "\"\n weightedMeanY=\"" << binMeanY(ix - 2, iy - 2) << "\" weightedRmsY=\"" << binRmsY(ix - 2, iy - 2) << "\"/>\n"; } os << " </data2d>\n </histogram2d>" << std::endl; return true; } /** * Write out the histogram in a flat text file suitable for * eg. gnuplot to read. The coloums are layed out as 'x w w2 n'. */ bool writeFLAT(std::ostream & os, std::string path, std::string name) { os << "#2D " << path << "/" << name << " " << xax->lowerEdge() << " " << xax->bins() << " " << xax->upperEdge() << " " << yax->lowerEdge() << " " << yax->bins() << " " << yax->upperEdge() << " \"" << title() << "\"" << std::endl; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) { for ( int iy = 2; iy < yax->bins() + 2; ++iy ) os << 0.5*(xax->binLowerEdge(ix - 2)+xax->binUpperEdge(ix - 2)) << " " << 0.5*(yax->binLowerEdge(iy - 2)+yax->binUpperEdge(iy - 2)) << " " << sumw[ix][iy] << " " << sqrt(sumw2[ix][iy]) << " " << sum[ix][iy] << std::endl; os << std::endl; } os << std::endl; return true; } #ifdef HAVE_ROOT /** * Write out the histogram in Root file format. */ //bool writeROOT(std::ostream & os, std::string path, std::string name) { bool writeROOT(TFile* file, std::string path, std::string name) { //std::cout << "Writing out histogram " << name.c_str() << " in ROOT file format" << std::endl; TH1D* hist1d; int nbins; if (!vax || vax->isFixedBinning() ) {//equidistant binning (easier case) nbins = ax->bins(); hist1d = new TH1D(name.c_str(), title().c_str(), nbins, ax->lowerEdge(), ax->upperEdge()); } else { nbins = vax->bins(); double* bins = new double[nbins+1]; for (int i=0; i<nbins; ++i) { bins[ix][iy] = vax->binEdges(i).first; } bins[nbins] = vax->binEdges(nbins-1).second; //take last bin right border hist1d = new TH1D(name.c_str(), title().c_str(), nbins, bins); delete bins; } double entries = 0; for ( int i = 0; i < nbins + 2; ++i ) { if ( sum[ix][iy] ) { //i==0: underflow->RootBin(0), i==1: overflow->RootBin(NBins+1) entries = entries + sum[ix][iy]; int j=i; if (i==0) j=0; //underflow else if (i==1) j=nbins+1; //overflow if (i>=2) j=i-1; //normal bin entries hist1d->SetBinContent(j, sumw[ix][iy]); hist1d->SetBinError(j, sqrt(sumw2[ix][iy])); //hist1d->Fill(binMean(i), sumw[ix][iy]); } } hist1d->Sumw2(); hist1d->SetEntries(entries); std::string DirName; //remove preceding slash from directory name, else ROOT error for (unsigned int i=1; i<path.size(); ++i) DirName += path[i]; if (!file->Get(DirName.c_str())) file->mkdir(DirName.c_str()); file->cd(DirName.c_str()); hist1d->Write(); delete hist1d; return true; } #endif private: /** The title */ // std::string theTitle; /** The axis. */ IAxis * xax; /** Pointer (possibly null) to a axis with fixed bin width. */ Axis * xfax; /** Pointer (possibly null) to a axis with fixed bin width. */ VariAxis * xvax; /** The axis. */ IAxis * yax; /** Pointer (possibly null) to a axis with fixed bin width. */ Axis * yfax; /** Pointer (possibly null) to a axis with fixed bin width. */ VariAxis * yvax; /** The counts. */ std::vector< std::vector<int> > sum; /** The weights. */ std::vector< std::vector<double> > sumw; /** The squared weights. */ std::vector< std::vector<double> > sumw2; /** The weighted x-values. */ std::vector< std::vector<double> > sumxw; /** The weighted x-square-values. */ std::vector< std::vector<double> > sumx2w; /** The weighted y-values. */ std::vector< std::vector<double> > sumyw; /** The weighted y-square-values. */ std::vector< std::vector<double> > sumy2w; /** dummy pointer to non-existen annotation. */ IAnnotation * anno; }; } #endif /* LWH_Histogram1D_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/AIAnalysisFactory.h���������������������������������������������������������0000644�0001750�0001750�00000002050�12116077757�016635� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_AIAnalysisFactory_H #define LWH_AIAnalysisFactory_H #ifndef LWH_USING_AIDA #include <string> /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class IDataPointSetFactory; class IFitFactory; class IFunctionFactory; class IPlotterFactory; class ITupleFactory; class ITreeFactory; class ITree; class IHistogramFactory; class IAnalysisFactory { public: virtual ~IAnalysisFactory() {}; virtual ITreeFactory * createTreeFactory() = 0; virtual IHistogramFactory * createHistogramFactory(ITree & tree) = 0; virtual IDataPointSetFactory * createDataPointSetFactory(ITree &) = 0; virtual ITupleFactory * createTupleFactory(ITree &) = 0; virtual IFunctionFactory * createFunctionFactory(ITree &) = 0; virtual IFitFactory * createFitFactory() = 0; virtual IPlotterFactory * createPlotterFactory(int = 0, char * * = 0, const std::string & = "", const std::string & = "") = 0; }; } /** @endcond */ #else #include "AIDA/IAnalysisFactory.h" #endif #endif /* LWH_AIAnalysisFactory_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/DataPointSet.h��������������������������������������������������������������0000644�0001750�0001750�00000032664�12116077757�015665� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_DataPointSet_H #define LWH_DataPointSet_H // // This is the declaration of the DataPointSet class representing // #include <vector> #include <limits> #include <cmath> #include <algorithm> #include "AIDataPointSet.h" #include "ManagedObject.h" #include "DataPoint.h" #ifdef HAVE_ROOT #include "TGraphAsymmErrors.h" #endif namespace LWH { using namespace AIDA; using namespace std; /** * An DataPointSet represents a binned histogram axis. A 1D Histogram would have * one DataPointSet representing the X axis, while a 2D Histogram would have two * axes representing the X and Y DataPointSet. */ class DataPointSet: public IDataPointSet, public ManagedObject { public: /** * Standard constructor takes the dimension, \a D, of the data * points as argument. */ DataPointSet(int D): dim(D) {} /** * Destructor. */ virtual ~DataPointSet() {} /** * Not implemented in LWH. will throw an exception. */ IAnnotation & annotation() { throw std::runtime_error("LWH cannot handle annotations"); return *anno; } /** * Not implemented in LWH. will throw an exception. */ const IAnnotation & annotation() const { throw std::runtime_error("LWH cannot handle annotations"); return *anno; } /** * Get the data set's title. * @return The data set's title. */ // std::string title() const { // return theTitle; // } /** * Get the data set's title. * @return The data set's title. */ std::string name() const { return theTitle; } /** * Set the data set's title. * @param title The title. * @return false If title cannot be changed. */ // bool setTitle(const std::string & title) { // theTitle = title; // return true; // } /** * Get the dimension of the IDataPoints that can be stored in the set. * @return The dimension of the IDataPoints storable in the set. * */ int dimension() const { return dim; } /** * Remove all the IDataPoints in the set. * After this the IDataPointSet is as just created. */ void clear() { dset.clear(); } /** * Get the current size of the IDataPointSet, i.e. the number * of IDataPoints contained in the set. * @return The size of the IDataPointSet. */ int size() const { return dset.size(); } /** * Get the IDataPoint at a give index in the set. * @param index The IDataPoint index. * @return The corresponding IDataPoint. */ IDataPoint * point(int index) { return &(dset[index]); } /** * Set the values and errors of a given coordinate all at once. If * this method is called on an empty IDataPointSet, a number of * points equal to the size of the arrays provided is created; if * the IDataPointSet is not empty the dimension of the array must * match with the size of the IDataPointSet. * @param coord The coordinate's index * @param val The array of the values for the given coordinate * @param err The array with the symmetric errors. * @return false if an illegal coordinate is provided or if there is * a mismatch between the size of the array and the size of the * IDataPointSet. */ bool setCoordinate(int coord, const std::vector<double> & val, const std::vector<double> & err) { return setCoordinate(coord, val, err, err); } /** * Set the values and errors of a given coordinate all at once. If * this method is called on an empty IDataPointSet, a number of * points equal to the size of the arrays provided is created; if * the IDataPointSet is not empty the dimension of the array must * match with the size of the IDataPointSet. * @param coord The coordinate's index * @param val The array of the values for the given coordinate * @param errp The array with the plus errors. * @param errm The array with the minus errors. * @return false if an illegal coordinate is provided or if there is * a mismatch between the size of the array and the size of the * IDataPointSet. * */ bool setCoordinate(int coord, const std::vector<double> & val, const std::vector<double> & errp, const std::vector<double> & errm) { if ( coord < 0 || coord >= dimension() ) return false; if ( dset.empty() ) dset.resize(val.size(), DataPoint(dimension())); if ( val.size() != dset.size() || errp.size() != dset.size() || errm.size() != dset.size() ) return false; for ( int i = 0, N = val.size(); i < N; ++i ) { dset[i].coordinate(coord)->setValue(val[i]); dset[i].coordinate(coord)->setErrorPlus(errp[i]); dset[i].coordinate(coord)->setErrorMinus(errm[i]); } return true; } /** * Return the data point at the given index. * @return 0 if index is out of range. */ const IDataPoint * point(int index) const { if ( index < 0 || unsigned(index) >= dset.size() ) return 0; return &(dset[index]); } /** * Add a new empty IDataPoint at the end of the set. * @return The newly added point. */ IDataPoint * addPoint() { dset.push_back(DataPoint(dimension())); return &(dset.back()); } /** * Add a copy of an IDataPoint at the end of the set. * @param point The IDataPoint to be added. * @return false If the point has the wrong dimension or * if the point cannot be added. */ bool addPoint(const IDataPoint & point) { if ( dimension() && dimension() != point.dimension() ) return false; dset.push_back(DataPoint(point)); return true; } /** * Remove the IDataPoint at a given index. * @param index The index of the IDataPoint to be removed. * @return false If the index is < 0 or >= size(). */ bool removePoint(int index) { if ( index < 0 || unsigned(index) >= dset.size() ) return false; dset.erase(dset.begin() + index); return true; } /** * Get the lower value for a give axis. * @param coord The coordinate of the axis. * @return The lower edge of the corresponding axis. * If coord < 0 or coord >= dimension(), or if the * set is empty NaN is returned. */ double lowerExtent(int coord) const { if ( dset.empty() ) return std::numeric_limits<double>::quiet_NaN(); if ( coord < 0 || coord >= dimension() ) return std::numeric_limits<double>::quiet_NaN(); double low = dset[0].coordinate(coord)->value(); for ( int i = 1, N = dset.size(); i < N; ++i ) low = std::min(low, dset[i].coordinate(coord)->value()); return low; } /** * Get the upper value for a give axis. * @param coord The coordinate of the axis. * @return The upper edge of the corresponding axis. * If coord < 0 or coord >= dimension(), or if the set * is empty NaN is returned. */ double upperExtent(int coord) const { if ( dset.empty() ) return std::numeric_limits<double>::quiet_NaN(); if ( coord < 0 || coord >= dimension() ) return std::numeric_limits<double>::quiet_NaN(); double upp = dset[0].coordinate(coord)->value(); for ( int i = 1, N = dset.size(); i < N; ++i ) upp = std::max(upp, dset[i].coordinate(coord)->value()); return upp; } /** * Scales the values and the errors of all the measurements * of each point by a given factor. * @param scale The scale factor. * @return false If an illegal scaleFactor is provided. */ bool scale(double scale) { for ( int i = 0, N = dset.size(); i < N; ++i ) for ( int j = 0, M = dset[i].dimension(); j < M; ++j ) { IMeasurement * m = dset[i].coordinate(j); m->setValue(m->value()*scale); m->setErrorPlus(m->errorPlus()*scale); m->setErrorMinus(m->errorMinus()*scale); } return true; } /** * Scales the values and the errors of the measurements in a given * coordinate of each point by a given factor. * @param scale The scale factor. * @param coord The coordinate * @return false If an illegal scaleFactor is provided. */ bool scale(double scale, int coord) { for ( int i = 0, N = dset.size(); i < N; ++i ) { if ( coord >= dset[i].dimension() ) { throw std::runtime_error("Trying to scale non-existent dimension."); } IMeasurement * m = dset[i].coordinate(coord); m->setValue(m->value()*scale); m->setErrorPlus(m->errorPlus()*scale); m->setErrorMinus(m->errorMinus()*scale); } return true; } /** * Scales the values of all the measurements * of each point by a given factor. * @param scale The scale factor. * @return false If an illegal scaleFactor is provided. */ bool scaleValues(double scale) { for ( int i = 0, N = dset.size(); i < N; ++i ) for ( int j = 0, M = dset[i].dimension(); j < M; ++j ) { IMeasurement * m = dset[i].coordinate(j); m->setValue(m->value()*scale); } return true; } /** * Scales the errors of all the measurements * of each point by a given factor. * @param scale The scale factor. * @return false If an illegal scaleFactor is provided. */ bool scaleErrors(double scale) { for ( int i = 0, N = dset.size(); i < N; ++i ) for ( int j = 0, M = dset[i].dimension(); j < M; ++j ) { IMeasurement * m = dset[i].coordinate(j); m->setErrorPlus(m->errorPlus()*scale); m->setErrorMinus(m->errorMinus()*scale); } return true; } /** * Not implemented in LWH. * @return null pointer always. */ void * cast(const std::string &) const { return 0; } /** * Write out the data set in the AIDA XML format. */ bool writeXML(std::ostream & os, std::string path, std::string name) { //std::cout << "Writing out data point set " << name << " in AIDA file format!" << std::endl; os << scientific << setprecision(8); os << " <dataPointSet name=\"" << encodeForXML(name) << "\"\n title=\"" << encodeForXML(title()) << "\" path=\"" << path << "\" dimension=\"" << dimension() << "\">\n"; for ( int d = 0; d < dimension(); ++d ) os << " <dimension dim=\"" << d << "\" title=\"" << encodeForXML(title(d)) << "\" />\n"; for ( int i = 0, N = size(); i < N; ++i ) { os << " <dataPoint>\n"; for ( int j = 0, M = dimension(); j < M; ++j ) os << " <measurement value=\"" << point(i)->coordinate(j)->value() << "\" errorPlus=\"" << point(i)->coordinate(j)->errorPlus() << "\" errorMinus=\"" << point(i)->coordinate(j)->errorMinus() << "\"/>\n"; os << " </dataPoint>\n"; } os << " </dataPointSet>" << std::endl; return true; } /** * Write out the data set in a flat text file suitable for * eg. gnuplot to read. The coloums are layed out as 'x1 x2 ... xn * dx1+ dx2+ ... dxn+ dx1- dx2- ... dxn-'. */ bool writeFLAT(std::ostream & os, std::string path, std::string name) { os << "# " << path << "/" << name << " " << size() << " \"" << title() << " \" dimension " << dimension() << std::endl; for ( int i = 0, N = size(); i < N; ++i ) { for ( int j = 0, M = dimension(); j < M; ++j ) os << point(i)->coordinate(j)->value() << " "; for ( int j = 0, M = dimension(); j < M; ++j ) os << point(i)->coordinate(j)->errorPlus() << " "; for ( int j = 0, M = dimension(); j < M; ++j ) os << point(i)->coordinate(j)->errorMinus() << " "; os << std::endl; } os << std::endl; return true; } #ifdef HAVE_ROOT /** * Write out the histogram in Root file format. */ //bool writeROOT(std::ostream & os, std::string path, std::string name) { bool writeROOT(TFile* file, std::string path, std::string name) { if (dimension()!=2) { cerr << "DataPointSet.h: writeROOT: dimension != 2, can't write TGraph, " << "choose different file format!" << endl; return false; } //Replace "-" by "_" because cint interprets - as a minus. for(std::string::iterator c = name.begin(); c != name.end(); ++c){ if(*c == *"-"){ std::string::iterator cEnd=c; ++cEnd; name.replace(c, cEnd, "_"); } } //cout << "Writing out TGraph " << name.c_str() << " in ROOT file format" << endl; int N = size(); vector<double> x, y, exl, exh, eyl, eyh; for ( int i = 0; i < N; ++i ) { x.push_back(point(i)->coordinate(0)->value()); exl.push_back(point(i)->coordinate(0)->errorMinus()); exh.push_back(point(i)->coordinate(0)->errorPlus()); y.push_back(point(i)->coordinate(1)->value()); eyl.push_back(point(i)->coordinate(1)->errorMinus()); eyh.push_back(point(i)->coordinate(1)->errorPlus()); } TGraphAsymmErrors* graph = new TGraphAsymmErrors(N, &(x[0]), &(y[0]), &(exl[0]), &(exh[0]), &(eyl[0]), &(eyh[0]) ); graph->SetTitle(title().c_str()); graph->SetName(name.c_str()); std::string DirName; //remove preceding slash from directory name, else ROOT error for (unsigned int i=1; i<path.size(); ++i) DirName += path[i]; if (!file->Get(DirName.c_str())) file->mkdir(DirName.c_str()); file->cd(DirName.c_str()); graph->Write(); delete graph; return true; } #endif private: /** The title */ // std::string theTitle; /** * The included data points. */ std::vector<DataPoint> dset; /** * The dimension of the points in this set. */ unsigned int dim; /** dummy pointer to non-existen annotation. */ IAnnotation * anno; }; } #endif /* LWH_DataPointSet_H */ ����������������������������������������������������������������������������rivet-1.8.3/include/LWH/AIDataPoint.h���������������������������������������������������������������0000644�0001750�0001750�00000001232�12116077757�015406� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_AIDataPoint_H #define LWH_AIDataPoint_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class IMeasurement; /** * Basic user-level interface class for holding and managing * a single set of "measurements". * * @author The AIDA team (http://aida.freehep.org/) * */ class IDataPoint { public: virtual ~IDataPoint() {} virtual int dimension() const = 0; virtual IMeasurement * coordinate(int coord) = 0; virtual const IMeasurement * coordinate(int coord) const = 0; }; } /** @endcond */ #else #include "AIDA/IDataPoint.h" #endif #endif /* LWH_AIDataPoint_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/Histogram1D.h���������������������������������������������������������������0000644�0001750�0001750�00000041777�12116077757�015455� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_Histogram1D_H #define LWH_Histogram1D_H // // This is the declaration of the Histogram1D class. // #include "AIHistogram1D.h" #include "ManagedObject.h" #include "Axis.h" #include "VariAxis.h" #include <vector> #include <stdexcept> #include <iostream> #ifdef HAVE_ROOT #include "TH1D.h" #endif namespace LWH { using namespace AIDA; /** * User level interface to 1D Histogram. */ class Histogram1D: public IHistogram1D, public ManagedObject { public: /** HistFactory is a friend. */ friend class HistogramFactory; public: /** * Standard constructor. */ Histogram1D(int n, double lo, double up) : fax(new Axis(n, lo, up)), vax(0), sum(n + 2), sumw(n + 2), sumw2(n + 2), sumxw(n + 2), sumx2w(n + 2) { ax = fax; } /** * Standard constructor for variable bin width. */ Histogram1D(const std::vector<double> & edges) : fax(0), vax(new VariAxis(edges)), sum(edges.size() + 1), sumw(edges.size() + 1), sumw2(edges.size() + 1), sumxw(edges.size() + 1), sumx2w(edges.size() + 1) { ax = vax; } /** * Copy constructor. */ Histogram1D(const Histogram1D & h) : IBaseHistogram(h), IHistogram(h), IHistogram1D(h), ManagedObject(h), fax(0), vax(0), sum(h.sum), sumw(h.sumw), sumw2(h.sumw2), sumxw(h.sumxw), sumx2w(h.sumx2w) { const VariAxis * hvax = dynamic_cast<const VariAxis *>(h.ax); if ( hvax ) ax = vax = new VariAxis(*hvax); else ax = fax = new Axis(dynamic_cast<const Axis &>(*h.ax)); } /// Destructor. virtual ~Histogram1D() { delete ax; } /** * Get the Histogram's title. * @return The Histogram's title. */ // std::string title() const { // return theTitle; // } /** * Get the Histogram's name. * @return The Histogram's name */ std::string name() const { return title(); } /** * Set the histogram title. * @param title The title. * @return false If title cannot be changed. */ // bool setTitle(const std::string & title) { // theTitle = title; // return true; // } /** * Not implemented in LWH. will throw an exception. */ IAnnotation & annotation() { throw std::runtime_error("LWH cannot handle annotations"); return *anno; } /** * Not implemented in LWH. will throw an exception. */ const IAnnotation & annotation() const { throw std::runtime_error("LWH cannot handle annotations"); return *anno; } /** * Get the Histogram's dimension. * @return The Histogram's dimension. */ int dimension() const { return 1; } /** * Reset the Histogram; as if just created. * @return false If something goes wrong. */ bool reset() { sum = std::vector<int>(ax->bins() + 2); sumw = std::vector<double>(ax->bins() + 2); sumxw = std::vector<double>(ax->bins() + 2); sumx2w = std::vector<double>(ax->bins() + 2); sumw2 = std::vector<double>(ax->bins() + 2); return true; } /** * Get the number of in-range entries in the Histogram. * @return The number of in-range entries. * */ int entries() const { int si = 0; for ( int i = 2; i < ax->bins() + 2; ++i ) si += sum[i]; return si; } /** * Sum of the entries in all the IHistogram's bins, * i.e in-range bins, UNDERFLOW and OVERFLOW. * This is equivalent to the number of times the * method fill was invoked. * @return The sum of all the entries. */ int allEntries() const { return entries() + extraEntries(); } /** * Number of entries in the UNDERFLOW and OVERFLOW bins. * @return The number of entries outside the range of the IHistogram. */ int extraEntries() const { return sum[0] + sum[1]; } /** * Number of equivalent entries, * i.e. <tt>SUM[ weight ] ^ 2 / SUM[ weight^2 ]</tt> * @return The number of equivalent entries. */ double equivalentBinEntries() const { double sw = 0.0; double sw2 = 0.0; for ( int i = 2; i < ax->bins() + 2; ++i ) { sw += sumw[i]; sw2 += sumw2[i]; } return (sw*sw)/sw2; } /** * Sum of in-range bin heights in the IHistogram, * UNDERFLOW and OVERFLOW bins are excluded. * @return The sum of the in-range bins heights. * */ double sumBinHeights() const { double sw = 0.0; for ( int i = 2; i < ax->bins() + 2; ++i ) sw += sumw[i]; return sw; } /** * Sum of the heights of all the IHistogram's bins, * i.e in-range bins, UNDERFLOW and OVERFLOW. * @return The sum of all the bins heights. */ double sumAllBinHeights() const { return sumBinHeights() + sumExtraBinHeights(); } /** * Sum of heights in the UNDERFLOW and OVERFLOW bins. * @return The sum of the heights of the out-of-range bins. */ double sumExtraBinHeights() const { return sumw[0] + sumw[1]; } /** * Minimum height of the in-range bins, * i.e. not considering the UNDERFLOW and OVERFLOW bins. * @return The minimum height among the in-range bins. */ double minBinHeight() const { double minw = sumw[2]; for ( int i = 3; i < ax->bins() + 2; ++i ) minw = std::min(minw, sumw[i]); return minw; } /** * Maximum height of the in-range bins, * i.e. not considering the UNDERFLOW and OVERFLOW bins. * @return The maximum height among the in-range bins. */ double maxBinHeight() const{ double maxw = sumw[2]; for ( int i = 3; i < ax->bins() + 2; ++i ) maxw = std::max(maxw, sumw[i]); return maxw; } /** * Fill the IHistogram1D with a value and the * corresponding weight. * @param x The value to be filled in. * @param weight The corresponding weight (by default 1). * @return false If the weight is <0 or >1 (?). */ bool fill(double x, double weight = 1.) { int i = ax->coordToIndex(x) + 2; ++sum[i]; sumw[i] += weight; sumxw[i] += x*weight; sumx2w[i] += x*x*weight; sumw2[i] += weight*weight; return weight >= 0 && weight <= 1; } /** * The weighted mean of a bin. * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The mean of the corresponding bin. */ double binMean(int index) const { int i = index + 2; return sumw[i] != 0.0? sumxw[i]/sumw[i]: ( vax? vax->binMidPoint(index): fax->binMidPoint(index) ); }; /** * The weighted RMS of a bin. * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The RMS of the corresponding bin. */ double binRms(int index) const { int i = index + 2; return sumw[i] == 0.0 || sum[i] < 2? ax->binWidth(index): std::sqrt(std::max(sumw[i]*sumx2w[i] - sumxw[i]*sumxw[i], 0.0))/sumw[i]; }; /** * Number of entries in the corresponding bin (ie the number of * times fill was called for this bin). * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The number of entries in the corresponding bin. */ int binEntries(int index) const { return sum[index + 2]; } /** * Total height of the corresponding bin (ie the sum of the weights * in this bin). * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The height of the corresponding bin. */ double binHeight(int index) const { /// @todo While this is compatible with the reference AIDA implementation, it is not the bin height! return sumw[index + 2]; } /** * The error of a given bin. * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The error on the corresponding bin. * */ double binError(int index) const { return std::sqrt(sumw2[index + 2]); } /** * The mean of the whole IHistogram1D. * @return The mean of the IHistogram1D. */ double mean() const { double s = 0.0; double sx = 0.0; for ( int i = 2; i < ax->bins() + 2; ++i ) { s += sumw[i]; sx += sumxw[i]; } return s != 0.0? sx/s: 0.0; } /** * The RMS of the whole IHistogram1D. * @return The RMS if the IHistogram1D. */ double rms() const { double s = 0.0; double sx = 0.0; double sx2 = 0.0; for ( int i = 2; i < ax->bins() + 2; ++i ) { s += sumw[i]; sx += sumxw[i]; sx2 += sumx2w[i]; } return s != 0.0? std::sqrt(std::max(s*sx2 - sx*sx, 0.0))/s: ax->upperEdge() - ax->lowerEdge(); } /** The weights. */ double getSumW(int index) const { return sumw[index + 2]; } /** The squared weights. */ double getSumW2(int index) const { return sumw2[index + 2]; } /** The weighted x-values. */ double getSumXW(int index) const { return sumxw[index + 2]; } /** The weighted x-square-values. */ double getSumX2W(int index) const { return sumx2w[index + 2]; } /** * Get the x axis of the IHistogram1D. * @return The x coordinate IAxis. */ const IAxis & axis() const { return *ax; } /** * Get the bin number corresponding to a given coordinate along the * x axis. This is a convenience method, equivalent to * <tt>axis().coordToIndex(coord)</tt>. * @param coord The coordinalte along the x axis. * @return The corresponding bin number. */ int coordToIndex(double coord) const { return ax->coordToIndex(coord); } /** * Add to this Histogram1D the contents of another IHistogram1D. * @param h The Histogram1D to be added to this IHistogram1D. * @return false If the IHistogram1Ds binnings are incompatible. */ bool add(const Histogram1D & h) { if ( ax->upperEdge() != h.ax->upperEdge() || ax->lowerEdge() != h.ax->lowerEdge() || ax->bins() != h.ax->bins() ) return false; for ( int i = 0; i < ax->bins() + 2; ++i ) { sum[i] += h.sum[i]; sumw[i] += h.sumw[i]; sumxw[i] += h.sumxw[i]; sumx2w[i] += h.sumx2w[i]; sumw2[i] += h.sumw2[i]; } return true; } /** * Add to this IHistogram1D the contents of another IHistogram1D. * @param hist The IHistogram1D to be added to this IHistogram1D. * @return false If the IHistogram1Ds binnings are incompatible. */ bool add(const IHistogram1D & hist) { return add(dynamic_cast<const Histogram1D &>(hist)); } /** * Scale the contents of this histogram with the given factor. * @param s the scaling factor to use. */ bool scale(double s) { for ( int i = 0; i < ax->bins() + 2; ++i ) { sumw[i] *= s; sumxw[i] *= s; sumx2w[i] *= s; sumw2[i] *= s*s; } return true; } /** * Scale the given histogram so that the integral over all bins * (including overflow) gives \a intg. This function also corrects * for the bin-widths, which means that it should only be run once * for each histogram. Further rescaling must be done with the * scale(double) function. */ void normalize(double intg) { double oldintg = sumAllBinHeights(); if ( oldintg == 0.0 ) return; for ( int i = 0; i < ax->bins() + 2; ++i ) { double fac = intg/oldintg; if ( i >= 2 ) fac /= (ax->binUpperEdge(i - 2) - ax->binLowerEdge(i - 2)); sumw[i] *= fac; sumxw[i] *= fac; sumx2w[i] *= fac; sumw2[i] *= fac*fac; } } /** * Return the integral over the histogram bins assuming it has been * normalize()d. */ // double integral() const { // double intg = sumw[0] + sumw[1]; // for ( int i = 2; i < ax->bins() + 2; ++i ) // is this right? Leave out bin width factor? // intg += sumw[i]*(ax->binUpperEdge(i - 2) - ax->binLowerEdge(i - 2)); // return intg; // } /** * Not implemented in LWH. * @return null pointer always. */ void * cast(const std::string &) const { return 0; } /** * Write out the histogram in the AIDA xml format. */ bool writeXML(std::ostream & os, std::string path, std::string name) { //std::cout << "Writing out histogram " << name << " in AIDA file format!" << std::endl; os << " <histogram1d name=\"" << encodeForXML(name) << "\"\n title=\"" << encodeForXML(title()) << "\" path=\"" << path << "\">\n <axis max=\"" << ax->upperEdge() << "\" numberOfBins=\"" << ax->bins() << "\" min=\"" << ax->lowerEdge() << "\" direction=\"x\""; if ( vax ) { os << ">\n"; for ( int i = 0, N = ax->bins() - 1; i < N; ++i ) os << " <binBorder value=\"" << ax->binUpperEdge(i) << "\"/>\n"; os << " </axis>\n"; } else { os << "/>\n"; } os << " <statistics entries=\"" << entries() << "\">\n <statistic mean=\"" << mean() << "\" direction=\"x\"\n rms=\"" << rms() << "\"/>\n </statistics>\n <data1d>\n"; for ( int i = 0; i < ax->bins() + 2; ++i ) if ( sum[i] ) { os << " <bin1d binNum=\""; if ( i == 0 ) os << "UNDERFLOW"; else if ( i == 1 ) os << "OVERFLOW"; else os << i - 2; os << "\" entries=\"" << sum[i] << "\" height=\"" << sumw[i] << "\"\n error=\"" << std::sqrt(sumw2[i]) << "\" error2=\"" << sumw2[i] << "\"\n weightedMean=\"" << binMean(i - 2) << "\" weightedRms=\"" << binRms(i - 2) << "\"/>\n"; } os << " </data1d>\n </histogram1d>" << std::endl; return true; } /** * Write out the histogram in a flat text file suitable for * eg. gnuplot to read. The coloums are layed out as 'x w w2 n'. */ bool writeFLAT(std::ostream & os, std::string path, std::string name) { os << "# " << path << "/" << name << " " << ax->lowerEdge() << " " << ax->bins() << " " << ax->upperEdge() << " \"" << title() << " \"" << std::endl; for ( int i = 2; i < ax->bins() + 2; ++i ) os << binMean(i - 2) << " " << sumw[i] << " " << sqrt(sumw2[i]) << " " << sum[i] << std::endl; os << std::endl; return true; } #ifdef HAVE_ROOT /** * Write out the histogram in Root file format. */ //bool writeROOT(std::ostream & os, std::string path, std::string name) { bool writeROOT(TFile* file, std::string path, std::string name) { //std::cout << "Writing out histogram " << name.c_str() << " in ROOT file format" << std::endl; TH1D* hist1d; int nbins; if (!vax || vax->isFixedBinning() ) {//equidistant binning (easier case) nbins = ax->bins(); hist1d = new TH1D(name.c_str(), title().c_str(), nbins, ax->lowerEdge(), ax->upperEdge()); } else { nbins = vax->bins(); double* bins = new double[nbins+1]; for (int i=0; i<nbins; ++i) { bins[i] = vax->binEdges(i).first; } bins[nbins] = vax->binEdges(nbins-1).second; //take last bin right border hist1d = new TH1D(name.c_str(), title().c_str(), nbins, bins); delete bins; } double entries = 0; for ( int i = 0; i < nbins + 2; ++i ) { if ( sum[i] ) { //i==0: underflow->RootBin(0), i==1: overflow->RootBin(NBins+1) entries = entries + sum[i]; int j=i; if (i==0) j=0; //underflow else if (i==1) j=nbins+1; //overflow if (i>=2) j=i-1; //normal bin entries hist1d->SetBinContent(j, sumw[i]); hist1d->SetBinError(j, sqrt(sumw2[i])); //hist1d->Fill(binMean(i), sumw[i]); } } hist1d->Sumw2(); hist1d->SetEntries(entries); std::string DirName; //remove preceding slash from directory name, else ROOT error for (unsigned int i=1; i<path.size(); ++i) DirName += path[i]; if (!file->Get(DirName.c_str())) file->mkdir(DirName.c_str()); file->cd(DirName.c_str()); hist1d->Write(); delete hist1d; return true; } #endif private: /** The title */ // std::string theTitle; /** The axis. */ IAxis * ax; /** Pointer (possibly null) to a axis with fixed bin width. */ Axis * fax; /** Pointer (possibly null) to a axis with fixed bin width. */ VariAxis * vax; /** The counts. */ std::vector<int> sum; /** The weights. */ std::vector<double> sumw; /** The squared weights. */ std::vector<double> sumw2; /** The weighted x-values. */ std::vector<double> sumxw; /** The weighted x-square-values. */ std::vector<double> sumx2w; /** dummy pointer to non-existen annotation. */ IAnnotation * anno; }; } #endif /* LWH_Histogram1D_H */ �rivet-1.8.3/include/LWH/AITreeFactory.h�������������������������������������������������������������0000644�0001750�0001750�00000001035�12116077757�015753� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_AITreeFactory_H #define LWH_AITreeFactory_H #ifndef LWH_USING_AIDA #include <string> /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class ITree; class ITreeFactory { public: virtual ~ITreeFactory() {} virtual ITree * create(const std::string &, const std::string & = "", bool = false, bool = false, const std::string & = "") = 0; virtual ITree * create() = 0; }; } /** @endcond */ #else #include "AIDA/ITreeFactory.h" #endif #endif /* LWH_AITreeFactory_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/Axis.h����������������������������������������������������������������������0000644�0001750�0001750�00000007012�12116077757�014217� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_Axis_H #define LWH_Axis_H // // This is the declaration of the Axis class representing // #include <limits> #include <cmath> #include <algorithm> #include "AIAxis.h" namespace LWH { using namespace AIDA; /** * An Axis represents a binned histogram axis. A 1D Histogram would have * one Axis representing the X axis, while a 2D Histogram would have two * axes representing the X and Y Axis. */ class Axis: public IAxis { public: /** * Standard constructor. */ Axis(int n, double lo, double up) : lower(lo), upper(up), nbins(n) {} /** * Copy constructor. */ Axis(const Axis & a) : IAxis(a), lower(a.lower), upper(a.upper), nbins(a.nbins) {} /// Destructor. virtual ~Axis() { } /** * Check if the IAxis has fixed binning, i.e. if all the bins have * the same width. @return <code>true</code> if the binning is * fixed, <code>false</code> otherwise. * */ bool isFixedBinning() const {return true; } /** * Get the lower edge of the IAxis. * @return The IAxis's lower edge. * */ double lowerEdge() const { return lower; } /** * Get the upper edge of the IAxis. * @return The IAxis's upper edge. * */ double upperEdge() const { return upper; } /** * The number of bins (excluding underflow and overflow) on the IAxis. * @return The IAxis's number of bins. * */ int bins() const { return nbins; } /** * Get the lower edge of the specified bin. * @param index The bin number: 0 to bins()-1 for the in-range bins * or OVERFLOW or UNDERFLOW. * @return The lower edge of the corresponding bin; for the * underflow bin this is <tt>Double.NEGATIVE_INFINITY</tt>. * */ double binLowerEdge(int index) const { return index < 0? -std::numeric_limits<double>::max(): lower + double(std::min(index, nbins))*binWidth(0); } /** * Get the upper edge of the specified bin. * @param index The bin number: 0 to bins()-1 for the in-range bins * or OVERFLOW or UNDERFLOW. * @return The upper edge of the corresponding bin; for the overflow * bin this is <tt>Double.POSITIVE_INFINITY</tt>. * */ double binUpperEdge(int index) const { return index >= nbins? std::numeric_limits<double>::max(): lower + double(std::max(index, -1) + 1)*binWidth(0); } /** * Get the width of the specified bin. * The argument gives the bin number: 0 to bins()-1) for the in-range bins * or OVERFLOW or UNDERFLOW. * @return The width of the corresponding bin. * */ double binWidth(int) const { return (upper - lower)/double(nbins); } /** * Convert a coordinate on the axis to a bin number. If the * coordinate is less than the lowerEdge UNDERFLOW is returned; if * the coordinate is greater or equal to the upperEdge OVERFLOW is * returned. * @param coord The coordinate to be converted. * @return The corresponding bin number. * */ int coordToIndex(double coord) const { assert( ! std::isnan(coord) ); if ( coord >= upper ) return OVERFLOW_BIN; else if ( coord < lower ) return UNDERFLOW_BIN; else return int((coord - lower)/binWidth(0)); } /** * Return the midpoint of the specified bin. No checking is * performed to ensure the argument is a valid bin. */ double binMidPoint(int index) const { return lower + (double(index) + 0.5)*binWidth(0); } private: /** The lower edge. */ double lower; /** The upper edge. */ double upper; /** The number of bins. */ int nbins; }; } #endif /* LWH_Axis_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/TreeFactory.h���������������������������������������������������������������0000644�0001750�0001750�00000005122�12116077757�015542� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_TreeFactory_H #define LWH_TreeFactory_H // // This is the declaration of the TreeFactory class. // #include "AITreeFactory.h" #include <string> #include <stdexcept> #include "Tree.h" namespace LWH { using namespace AIDA; /** * The creator of trees. */ class TreeFactory: public ITreeFactory { public: /// Destructor. virtual ~TreeFactory() { clear(); } /** * Creates a new tree that is not associated with a store. */ ITree * create() { Tree * tree = new Tree; trees.insert(tree); return tree; } /** * Creates a new Tree and associates it with a store. * The store is assumed to be write-only. * The store will be created. * @param storeName The name of the store, if empty (""), the tree is * created in memory and therefore will not be associated * with a file. */ Tree * createTree(const std::string & storeName) { return new Tree(storeName); } /** * Creates a new Tree and associates it with a store. * The store is assumed to be write-only. * The store will be created. * @param storeName The name of the store, if empty (""), the tree is * created in memory and therefore will not be associated * with a file. * @param storeType must be "xml". * @param readOnly must be false since we cannot read in trees. * @param createNew must be true indicating that the file will be created */ ITree * create(const std::string & storeName, const std::string & storeType = "", bool readOnly = false, bool createNew = false, const std::string & = "") { #ifndef HAVE_ROOT if ( storeType != "xml" && storeType != "" && storeType != "flat" ) throw std::runtime_error("Can only store trees in flat and xml format."); #endif #ifdef HAVE_ROOT if ( storeType != "xml" && storeType != "" && storeType != "flat" && storeType !="root") throw std::runtime_error("Can only store trees in flat, xml or root format."); #endif if ( readOnly || !createNew ) throw std::runtime_error("Cannot read in trees."); fileformat fchoice=xml; if (storeType=="flat") fchoice=flat; #ifdef HAVE_ROOT else if (storeType=="root") fchoice=root; #endif //return new Tree(storeName, storeType != "flat"); return new Tree(storeName, fchoice); } private: /** Delete all trees. */ void clear() { for ( std::set<Tree *>::iterator it = trees.begin(); it != trees.end(); ++it ) delete *it; trees.clear(); } /** The created trees. */ std::set<Tree *> trees; }; } #endif /* LWH_TreeFactory_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/AIAxis.h��������������������������������������������������������������������0000644�0001750�0001750�00000001272�12116077757�014433� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_AIAxis_H #define LWH_AIAxis_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class IAxis { public: virtual ~IAxis() {} virtual bool isFixedBinning() const = 0; virtual double lowerEdge() const = 0; virtual double upperEdge() const = 0; virtual int bins() const = 0; virtual double binLowerEdge(int index) const = 0; virtual double binUpperEdge(int index) const = 0; virtual double binWidth(int) const = 0; virtual int coordToIndex(double coord) const = 0; enum { UNDERFLOW_BIN = -2, OVERFLOW_BIN = -1 }; }; } /** @endcond */ #else #include "AIDA/IAxis.h" #endif #endif /* LWH_AIAxis_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/DataPoint.h�����������������������������������������������������������������0000644�0001750�0001750�00000003675�12116077757�015211� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_DataPoint_H #define LWH_DataPoint_H // // This is the declaration of the DataPoint class representing // #include <limits> #include <cmath> #include <algorithm> #include "AIDataPoint.h" #include "Measurement.h" namespace LWH { using namespace AIDA; /** * An DataPoint represents a binned histogram axis. A 1D Histogram would have * one DataPoint representing the X axis, while a 2D Histogram would have two * axes representing the X and Y DataPoint. */ class DataPoint: public IDataPoint { public: /** * Construct a data point with a given number of dimensions. */ DataPoint(int dim = 2) : m(dim) {} /** * Constructor taking a vector of measurements as argument. */ DataPoint(const std::vector<Measurement> & vm) : m(vm) {} /** * Copy constructor. */ DataPoint(const DataPoint & d) : IDataPoint(d), m(d.m) {} /** * Copy from any IDataPoint. */ DataPoint(const IDataPoint & id) : m(id.dimension()) { for ( int i = 0, N = m.size(); i < N; ++i ) m[i] = Measurement(id.coordinate(i)->value(), id.coordinate(i)->errorPlus(), id.coordinate(i)->errorMinus()); } /** * Destructor. */ virtual ~DataPoint() {} /** * Get the dimension of the IDataPoint, i.e. the number * of coordinates the point has. * @return The dimension. */ int dimension() const { return m.size(); } /** * Get the IMeasurement for a given coordinate. * @param coord The coordinate. * @return The corresponding IMeasurement. */ IMeasurement * coordinate(int coord) { return &(m[coord]); } /** * Get the IMeasurement for a given coordinate. * @param coord The coordinate. * @return The corresponding IMeasurement. */ const IMeasurement * coordinate(int coord) const { return &(m[coord]); } private: /** * The included measurements. */ std::vector<Measurement> m; }; } #endif /* LWH_DataPoint_H */ �������������������������������������������������������������������rivet-1.8.3/include/LWH/AIMeasurement.h�������������������������������������������������������������0000644�0001750�0001750�00000001143�12116077757�016011� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_AIMeasurement_H #define LWH_AIMeasurement_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class IMeasurement { public: virtual ~IMeasurement() {} virtual double value() const = 0; virtual double errorPlus() const = 0; virtual double errorMinus() const = 0; virtual bool setValue(double value) = 0; virtual bool setErrorPlus(double errorPlus) = 0; virtual bool setErrorMinus(double errorMinus) = 0; }; } /** @endcond */ #else #include "AIDA/IMeasurement.h" #endif #endif /* LWH_AIMeasurement_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/AIBaseHistogram.h�����������������������������������������������������������0000644�0001750�0001750�00000004177�12116077757�016266� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_AIBaseHistogram_H #define LWH_AIBaseHistogram_H // #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class IBaseHistogram { public: virtual ~IBaseHistogram() {} virtual int dimension() const = 0; virtual bool reset() = 0; virtual int entries() const = 0; /////////////////////////////////// /** * Get the main title. * @return The title. * */ std::string title() const { return theTitle; } /** * Set the main title. * @param title The new title. * @return false If the title cannot be set. * */ bool setTitle(const std::string & title) { theTitle = title; return true; } /** * Get the x-axis title. * @return The title. * */ std::string xtitle() const { return theXTitle; } /** * Set the x-axis title. * @param title The new title. * @return false If the title cannot be set. * */ bool setXTitle(const std::string & xtitle) { theXTitle = xtitle; return true; } /** * Get the y-axis title. * @return The title. * */ std::string ytitle() const { return theYTitle; } /** * Set the y-axis title. * @param title The new title. * @return false If the title cannot be set. * */ bool setYTitle(const std::string & ytitle) { theYTitle = ytitle; return true; } /** * Get the z-axis title. * @return The title. * */ std::string ztitle() const { return theZTitle; } /** * Set the z-axis title. * @param title The new title. * @return false If the title cannot be set. * */ bool setZTitle(const std::string & ztitle) { theZTitle = ztitle; return true; } protected: std::string theTitle; std::string theXTitle; std::string theYTitle; std::string theZTitle; }; } // namespace AIDA /** @endcond */ #else #include "AIDA/IBaseHistogram.h" #endif #endif /* LWH_AIBaseHistogram_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/AIManagedObject.h�����������������������������������������������������������0000644�0001750�0001750�00000000745�12116077757�016216� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_AIManagedObject_H #define LWH_AIManagedObject_H #ifndef LWH_USING_AIDA #include <string> /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class ITree; class IManagedObject { public: virtual ~IManagedObject() {} virtual std::string name() const = 0; virtual void * cast(const std::string & className) const = 0; }; } /** @endcond */ #else #include "AIDA/IManagedObject.h" #endif #endif /* LWH_AIManagedObject_H */ ���������������������������rivet-1.8.3/include/LWH/AIDataPointSetFactory.h�����������������������������������������������������0000644�0001750�0001750�00000010771�12116077757�017422� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_AIDataPointSetFactory_H #define LWH_AIDataPointSetFactory_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class IDataPointSet; class IHistogram1D; class IHistogram2D; class IProfile1D; class IDataPointSetFactory { public: virtual ~IDataPointSetFactory() { /* nop */; } virtual IDataPointSet * create(const std::string &, const std::string &, int ) = 0; virtual IDataPointSet * create(const std::string &, int) = 0; virtual IDataPointSet * createY(const std::string &, const std::string &, const std::vector<double> &, const std::vector<double> &) = 0; virtual IDataPointSet * createY(const std::string &, const std::string &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &) = 0; virtual IDataPointSet * createY(const std::string &, const std::vector<double> &, const std::vector<double> &) = 0; virtual IDataPointSet * createY(const std::string &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &) = 0; virtual IDataPointSet * createX(const std::string &, const std::string &, const std::vector<double> &, const std::vector<double> &) = 0; virtual IDataPointSet * createX(const std::string &, const std::string &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &) = 0; virtual IDataPointSet * createX(const std::string &, const std::vector<double> &, const std::vector<double> &) = 0; virtual IDataPointSet * createX(const std::string &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &) = 0; virtual IDataPointSet * createXY(const std::string &, const std::string &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &) = 0; virtual IDataPointSet * createXY(const std::string &, const std::string &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &) = 0; virtual IDataPointSet * createXY(const std::string &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &) = 0; virtual IDataPointSet * createXY(const std::string &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &) = 0; virtual IDataPointSet * createXYZ(const std::string &, const std::string &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &) = 0; virtual IDataPointSet * createXYZ(const std::string &, const std::string &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &) = 0; virtual IDataPointSet * createXYZ(const std::string &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &) = 0; virtual IDataPointSet * createXYZ(const std::string &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &) = 0; virtual IDataPointSet * createCopy(const std::string &, const IDataPointSet &) = 0; virtual bool destroy(IDataPointSet *) = 0; virtual IDataPointSet * create(const std::string &, const IHistogram1D &, const std::string & = "") = 0; virtual IDataPointSet * create(const std::string &, const IHistogram2D &, const std::string & = "") = 0; virtual IDataPointSet * create(const std::string &, const IProfile1D &, const std::string & = "") = 0; }; } /** @endcond */ #else #include "AIDA/IDataPointSetFactory.h" #endif #endif /* LWH_AIDataPointSetFactory_H */ �������rivet-1.8.3/include/LWH/AnalysisFactory.h�����������������������������������������������������������0000644�0001750�0001750�00000007061�12116077757�016432� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_AnalysisFactory_H #define LWH_AnalysisFactory_H // // This is the declaration of the AnalysisFactory class. // #include "AIAnalysisFactory.h" #include "TreeFactory.h" #include "HistogramFactory.h" #include "DataPointSetFactory.h" #include <set> /** * The LWH namespace contains a Light-Weight Histogram package which * implements the most rudimentary histogramming facilities according * to the <a href="http://aida.freehep.org">AIDA</a> interface * specifications. Currently the only thing that is supported is * simple, equally binned, one dimensional histograms and data * points. It is mainly intended to be used in applications where one * needs to fill simple histograms and output them. With LWH it is * then possible to do this without the overhead of a full AIDA * implementation, but still having the option to use a full * implementation later on with minimal changes. Note also that since * LWH consists only of header files, the installation is trivial - * just put the header files where they can be found by your compiler. */ namespace LWH { using namespace AIDA; /** * The "master" factory from which other factories are obtained. * Typically accessed by: * <pre>IAnalysisFactory* af = AIDA_createAnalysisFactory();</pre> */ class AnalysisFactory: public IAnalysisFactory { public: /// Destructor. virtual ~AnalysisFactory() { clear(); } /** * Create an ITreeFactory. * @return The ITreeFactory. */ ITreeFactory * createTreeFactory() { return new TreeFactory; } /** * Create an HistogramFactory. * @param tree The ITree which created histograms will be associated to. * @return The IHistogramFactory. * */ IHistogramFactory * createHistogramFactory(ITree & tree) { Tree & tr = dynamic_cast<Tree &>(tree); HistogramFactory * hf = new HistogramFactory(tr); histfacs.insert(hf); return hf; } /** * Not implemented in LWH. * @return null pointer always. * */ IDataPointSetFactory * createDataPointSetFactory(ITree & tree) { Tree & tr = dynamic_cast<Tree &>(tree); DataPointSetFactory * df = new DataPointSetFactory(tr); datafacs.insert(df); return df; } /** * Not implemented in LWH. * @return null pointer always. */ ITupleFactory * createTupleFactory(ITree &) { return 0; } /** * Not implemented in LWH. * @return null pointer always. */ IFunctionFactory * createFunctionFactory(ITree &) { return 0; } /** * Not implemented in LWH. * @return null pointer always. */ IPlotterFactory * createPlotterFactory(int = 0, char * * = 0, const std::string & = "", const std::string & = "") { return 0; } /** * Not implemented in LWH. * @return null pointer always. */ IFitFactory * createFitFactory() { return 0; } private: /** Delete all produced factories. */ void clear() { for ( std::set<HistogramFactory *>::iterator it = histfacs.begin(); it != histfacs.end(); ++it ) delete *it; for ( std::set<DataPointSetFactory *>::iterator it = datafacs.begin(); it != datafacs.end(); ++it ) delete *it; for ( std::set<TreeFactory *>::iterator it = treefacs.begin(); it != treefacs.end(); ++it ) delete *it; histfacs.clear(); datafacs.clear(); treefacs.clear(); } /** The histogram factories. */ std::set<HistogramFactory *> histfacs; /** The dataset factories. */ std::set<DataPointSetFactory *> datafacs; /** The tree factories. */ std::set<TreeFactory *> treefacs; }; } #endif /* LWH_AnalysisFactory_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/AITree.h��������������������������������������������������������������������0000644�0001750�0001750�00000002465�12116077757�014433� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_AITree_H #define LWH_AITree_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ #include <vector> #include <iostream> namespace AIDA { class IManagedObject; class ITree { public: virtual ~ITree() {} virtual std::string storeName() const = 0; virtual IManagedObject * find(const std::string & name) = 0; virtual std::string pwd() const = 0; virtual bool commit() = 0; virtual bool commit(std::string storename) = 0; virtual bool close() = 0; virtual bool mkdir(const std::string &) = 0; virtual bool mkdirs(const std::string &) = 0; virtual bool cd(const std::string &) = 0; virtual bool rmdir(const std::string & str) = 0; virtual bool rm(const std::string & str) = 0; virtual std::string findPath(const IManagedObject & o) const = 0; virtual bool mv(const std::string & oldo, const std::string & newo) = 0; virtual void setOverwrite(bool o = true) = 0; virtual bool cp(const std::string &, const std::string &, bool = false) = 0; virtual bool ls(const std::string & = ".", bool = false, std::ostream & = std::cout) const = 0; virtual std::vector<std::string> listObjectNames(const std::string & = ".", bool = false) const = 0; }; } /** @endcond */ #else #include "AIDA/ITree.h" #endif #endif /* LWH_AITree_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/AIProfile1D.h���������������������������������������������������������������0000644�0001750�0001750�00000002522�12116077757�015313� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_AIProfile1D_H #define LWH_AIProfile1D_H // #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ #include "AIBaseHistogram.h" namespace AIDA { class IAnnotation; class IProfile : virtual public IBaseHistogram { virtual int allEntries() const = 0; virtual int extraEntries() const = 0; virtual double sumBinHeights() const = 0; virtual double sumAllBinHeights() const = 0; virtual double sumExtraBinHeights() const = 0; virtual double minBinHeight() const = 0; virtual double maxBinHeight() const = 0; }; class IAxis; class IProfile1D : virtual public IProfile { public: virtual ~IProfile1D() {} virtual bool fill(double x, double y, double weight = 1.) = 0; virtual double binMean(int index) const = 0; virtual int binEntries(int index) const = 0; virtual double binHeight(int index) const = 0; virtual double binError(int index) const = 0; virtual double binRms(int index) const = 0; virtual double mean() const = 0; virtual double rms() const = 0; virtual const IAxis & axis() const = 0; virtual int coordToIndex(double coord) const = 0; virtual bool add(const IProfile1D & profile) = 0; }; // class } // namespace AIDA /** @endcond */ #else #include "AIDA/IProfile1D.h" #endif #endif /* LWH_AIProfile1D_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/AIDataPointSet.h������������������������������������������������������������0000644�0001750�0001750�00000007772�12116077757�016101� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_AIDataPointSet_H #define LWH_AIDataPointSet_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class IAnnotation; class IDataPoint; /** * Basic user-level interface class for holding and managing * a single set of "data points". * * @author The AIDA team (http://aida.freehep.org/) * */ class IDataPointSet { public: virtual ~IDataPointSet() { /* nop */; } virtual IAnnotation & annotation() = 0; virtual const IAnnotation & annotation() const = 0; //virtual std::string title() const = 0; // virtual bool setTitle(const std::string & title) = 0; virtual int dimension() const = 0; virtual void clear() = 0; virtual int size() const = 0; virtual IDataPoint * point(int index) = 0; virtual bool setCoordinate(int coord, const std::vector<double> & val, const std::vector<double> & err) = 0; virtual bool setCoordinate(int coord, const std::vector<double> & val, const std::vector<double> & errp, const std::vector<double> & errm) = 0; virtual const IDataPoint * point(int index) const = 0; virtual IDataPoint * addPoint() = 0; virtual bool addPoint(const IDataPoint & point) = 0; virtual bool removePoint(int index) = 0; virtual double lowerExtent(int coord) const = 0; virtual double upperExtent(int coord) const = 0; virtual bool scale(double scaleFactor) = 0; virtual bool scale(double scaleFactor, int coord) = 0; virtual bool scaleValues(double scaleFactor) = 0; virtual bool scaleErrors(double scaleFactor) = 0; virtual void * cast(const std::string & className) const = 0; /////////////////////////////////// /** * Get the main title. * @return The title. * */ std::string title() const { return theTitle; } /** * Set the main title. * @param title The new title. * @return false If the title cannot be set. * */ bool setTitle(const std::string & title) { theTitle = title; return true; } /** * Get the x-axis title. * @return The title. * */ std::string xtitle() const { return theXTitle; } /** * Set the x-axis title. * @param title The new title. * @return false If the title cannot be set. * */ bool setXTitle(const std::string & xtitle) { theXTitle = xtitle; return true; } /** * Get the y-axis title. * @return The title. * */ std::string ytitle() const { return theYTitle; } /** * Set the y-axis title. * @param title The new title. * @return false If the title cannot be set. * */ bool setYTitle(const std::string & ytitle) { theYTitle = ytitle; return true; } /** * Get the z-axis title. * @return The title. * */ std::string ztitle() const { return theZTitle; } /** * Set the z-axis title. * @param title The new title. * @return false If the title cannot be set. * */ bool setZTitle(const std::string & ztitle) { theZTitle = ztitle; return true; } /** * Get the z-axis title. * @return The title. * */ std::string title(int i) const { switch ( i ) { case 0: return theXTitle; case 1: return theYTitle; case 2: return theZTitle; default: return ""; } } /** * Set the <i>-axis title. * @param title The new title. * @return false If the title cannot be set. * */ bool setTitle(int i, const std::string & title) { if ( i == 0 ) theXTitle = title; else if ( i == 1 ) theYTitle = title; else if ( i == 2 ) theZTitle = title; else return false; return true; } protected: std::string theTitle; std::string theXTitle; std::string theYTitle; std::string theZTitle; }; } /** @endcond */ #else #include "AIDA/IDataPointSet.h" #endif #endif /* LWH_AIDataPointSet_H */ ������rivet-1.8.3/include/LWH/AIHistogram1D.h�������������������������������������������������������������0000644�0001750�0001750�00000002547�12116077757�015657� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_AIHistogram1D_H #define LWH_AIHistogram1D_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ #include "AIBaseHistogram.h" namespace AIDA { class IAnnotation; class IHistogram : virtual public IBaseHistogram { public: virtual ~IHistogram() {} virtual int allEntries() const = 0; virtual int extraEntries() const = 0; virtual double equivalentBinEntries() const = 0; virtual double sumBinHeights() const = 0; virtual double sumAllBinHeights() const = 0; virtual double sumExtraBinHeights() const = 0; virtual double minBinHeight() const = 0; virtual double maxBinHeight() const = 0; }; class IAxis; class IHistogram1D: virtual public IHistogram { public: virtual ~IHistogram1D() {} virtual bool fill(double x, double weight = 1.) = 0; virtual double binMean(int index) const = 0; virtual int binEntries(int index) const = 0; virtual double binHeight(int index) const = 0; virtual double binError(int index) const = 0; virtual double mean() const = 0; virtual double rms() const = 0; virtual const IAxis & axis() const = 0; virtual int coordToIndex(double coord) const = 0; virtual bool add(const IHistogram1D & hist) = 0; virtual bool scale(double scaleFactor) = 0; }; } /** @endcond */ #else #include "AIDA/IHistogram1D.h" #endif #endif /* LWH_AIHistogram1D_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/Tree.h����������������������������������������������������������������������0000644�0001750�0001750�00000037642�12116077757�014226� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_Tree_H #define LWH_Tree_H // // This is the declaration of the Tree class. // #include "AITree.h" #include "ManagedObject.h" #include <fstream> #include <iostream> #include <vector> #include <set> #include <map> #include <string> namespace LWH { using namespace AIDA; enum fileformat { flat, xml #ifdef HAVE_ROOT , root #endif }; /** * The Tree class is a simple implementation of the AIDA::ITree * interface. */ class Tree: public ITree { public: /** The AnalysisFactory is a friend. */ friend class AnalysisFactory; /** A path is a vector of directory names. */ typedef std::vector<std::string> Path; /** A set of paths */ typedef std::set<Path> PathSet; /** Map of paths to objects. */ typedef std::map<std::string, IManagedObject *> ObjMap; public: /** * The standard constructor. */ // Tree(std::string storename, bool xml = true) Tree(std::string storename, fileformat fchoice = xml) : name(storename), fform(fchoice), cwd(""), overwrite(true) { dirs.insert(Path()); //: name(storename), flat(!xml), cwd("/"), overwrite(true) { } /** * The default constructor. */ //Tree(): name(""), flat(false), cwd("/") { Tree(): name(""), fform(xml), cwd("") { dirs.insert(Path()); } /** * The copy constructor. */ Tree(const Tree & dt) //: ITree(dt), name(dt.name), flat(dt.flat), dirs(dt.dirs), : ITree(dt), name(dt.name), fform(dt.fform), dirs(dt.dirs), objs(dt.objs), cwd(dt.cwd), overwrite(true) {} /// Destructor. virtual ~Tree() { for ( ObjMap::iterator it = objs.begin(); it != objs.end(); ++it ) delete it->second; } /** * Get the name of the store. * @return The store's name. */ std::string storeName() const { return name; } /** * Get the IManagedObject at a given path in the ITree. The path can either be * absolute or relative to the current working directory. * @param path The path. * @return The corresponding IManagedObject. */ IManagedObject * find(const std::string & path) { ObjMap::const_iterator it = objs.find(path); return it == objs.end()? (IManagedObject *)0: it->second; } /** * LWH cannot get a mounted ITree at a given path in the current ITree. * @return 0 always. */ ITree * findTree(const std::string &) { return 0; } /** * Change to a given directory. * @param dir The absolute or relative path of the directory we are * changing to. * @return false If the path does not exist. */ bool cd(const std::string & dir) { PathSet::iterator it = dirs.find(purgepath(str2pth(fullpath(sts(dir))))); if ( it == dirs.end() ) return false; cwd = pth2str(*it); return true; } /** * Insert the ManagedObject \a o in the tree with the path \a str. */ bool insert(std::string str, IManagedObject * o) { Path path = purgepath(str2pth(fullpath(str))); //PathSet::iterator theIterator; //for( theIterator = dirs.begin(); theIterator != dirs.end(); theIterator++ ) { //std::cout << "1:" << pth2str(*theIterator); //} //std::cout << std::endl; if ( dirs.find(path) == dirs.end() ) { std::string fullname = pth2str(path); path.pop_back(); if ( dirs.find(path) != dirs.end() ) { ObjMap::iterator old = objs.find(fullname); if ( old == objs.end() || overwrite ) { if ( old != objs.end() ) { delete old->second; objs.erase(old); } objs[fullname] = o; return true; } } } return false; } /** * Get the path of the current working directory. * @return The path of the current working directory. */ std::string pwd() const { return cwd; } /** * List, into a given output stream, all the IManagedObjects, including * directories (but not "." and ".."), in a given path. Directories end * with "/". The list can be recursive. * @param path The path where the list has to be performed * (by default the current directory "."). * @param recursive If <code>true</code> the list is extended recursively * in all the directories under path (the default is * <code>false</code>. * @param os The output stream into which the list is dumped * (by default the standard output). * @return false If the path does not exist. * */ bool ls(const std::string & path = ".", bool recursive = false, std::ostream & os = std::cout) const { std::vector<std::string> names = listObjectNames(path, recursive); if ( names.empty() ) return false; for ( int i = 0, N = names.size(); i < N; ++i ) os << names[i] << std::endl; return true; } /** * Get the list of names of the IManagedObjects under a given path, * including directories (but not "." and ".."). Directories end with "/". * The returned names are appended to the given path unless the latter is ".". * @param path The path where the list has to be performed * (by default the current directory "."). * @param recursive If <code>true</code> the list is extended recursively * in all the directories under path (the default is * <code>false</code>. */ std::vector<std::string> listObjectNames(const std::string & path = ".", bool recursive = false) const { std::vector<std::string> ret; PathSet::iterator it = dirs.find(purgepath(str2pth(fullpath(sts(path))))); if ( it == dirs.end() ) return ret; std::string dir = pth2str(*it) + "/"; if ( path == "/" ) dir = "/"; if ( recursive ) { for ( ObjMap::const_iterator oi = objs.begin(); oi != objs.end(); ++oi ) if ( oi->first.substr(0, dir.length()) == dir ) ret.push_back(oi->first); } else { for ( ObjMap::const_iterator oi = objs.begin(); oi != objs.end(); ++oi ) if ( stn(oi->first) + "/" == dir ) ret.push_back(oi->first); for ( PathSet::iterator pit = dirs.begin(); pit != dirs.end(); ++pit) { std::string pth = pth2str(*pit); if (stn(pth) + "/" == dir && pth + "/" != dir ) ret.push_back(pth + "/"); } } if ( path == "." ) for ( int i = 0, N = ret.size(); i < N; ++i ) ret[i] = ret[i].substr(dir.size()); return ret; } /** * Not implemented in LWH. */ std::vector<std::string> listObjectTypes(const std::string & = ".", bool = false) const { return std::vector<std::string>(); } /** * Create a new directory. Given a path only the last directory * in it is created if all the intermediate subdirectories already exist. * @param dir The absolute or relative path of the new directory. * @return false If a subdirectory within the path does * not exist or it is not a directory. Also if the directory already exists. */ bool mkdir(const std::string & dir) { Path p = purgepath(str2pth(fullpath(sts(dir)))); Path base = p; base.pop_back(); if ( dirs.find(base) == dirs.end() ) return false; dirs.insert(p); return true; } /** * Create a directory recursively. Given a path the last directory * and all the intermediate non-existing subdirectories are created. * @param dir The absolute or relative path of the new directory. * @return false If an intermediate subdirectory * is not a directory, or if the directory already exists. */ bool mkdirs(const std::string & dir) { return mkdirs(purgepath(str2pth(fullpath(sts(dir))))); } /** * Create a directory recursively. Given a Path the last directory * and all the intermediate non-existing subdirectories are created. * @param p The full Path of the new directory. * @return false If an intermediate subdirectory * is not a directory, or if the directory already exists. */ bool mkdirs(Path p) { if ( dirs.find(p) != dirs.end() ) return true; dirs.insert(p); p.pop_back(); return mkdirs(p); } /** * Remove a directory and all the contents underneeth. * @param dir The absolute or relative path of the directory to be removed. * @return false If path does not exist or if it is not * a directory or if the directory is not empty. */ bool rmdir(const std::string & dir) { Path path = purgepath(str2pth(fullpath(sts(dir)))); if ( dirs.find(path) == dirs.end() ) return false; for ( ObjMap::const_iterator it = objs.begin(); it != objs.end(); ++it ) if ( it->first.substr(0, dir.length()) == dir ) return false; dirs.erase(path); return true; } /** * Remove and delete an IManagedObject by specifying its path. * @param path The absolute or relative path of the IManagedObject to be * removed. * @return false If path does not exist. */ bool rm(const std::string & path) { ObjMap::iterator it = objs.find(fullpath(path)); if ( it == objs.end() ) return false; delete it->second; objs.erase(it); return true; } /** * Get the full path of an IManagedObject. * @param o The IManagedObject whose path is to be returned. * @return The object's absolute path. * If the object does not exist, an empty string is returned. */ std::string findPath(const IManagedObject & o) const { for ( ObjMap::const_iterator it = objs.begin(); it != objs.end(); ++it ) if ( it->second == &o ) return it->first; return ""; } /** * Move an IManagedObject or a directory from one directory to another. * @param oldp The path of the IManagedObject [not direcoty] to be moved. * @param newp The path of the diretory in which the object has to be * moved to. * @return false If either path does not exist. */ bool mv(const std::string & oldp, const std::string & newp) { Path newpath = purgepath(str2pth(fullpath(sts(newp)))); std::string foldp = fullpath(oldp); Path oldpath = purgepath(str2pth(foldp)); ObjMap::iterator it = objs.find(foldp); //std::cout << 1 << std::endl; if ( it == objs.end() ) return false; //std::cout << 2 << std::endl; // Changed from != by AB: surely the directory you're copying to must // exist? Why can't we just change the name in the same directory? if ( dirs.find(newpath) == dirs.end() ) return false; newpath.push_back(oldpath.back()); //std::cout << 3 << std::endl; if ( !insert(pth2str(newpath), it->second) ) return false; //std::cout << 4 << std::endl; objs.erase(foldp); return true; } /** * Print all histograms to the supplied filename, in the supplied format. * @return false if something went wrong. */ bool commit(std::string storename) { // Back up state const std::string oldname = name; // Set up temporary state name = storename; // Do the do const bool rtn = commit(); // Reset! name = oldname; return rtn; } /** * Print all histograms to the current filename. * @return false if something went wrong. */ bool commit() { std::ofstream of(name.c_str()); if ( !of ) return false; if (fform==xml) { of << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE aida SYSTEM " << "\"http://aida.freehep.org/schemas/3.0/aida.dtd\">\n" << "<aida version=\"3.0\">\n" << "<implementation version=\"1.0\" package=\"LWH\"/>" << std::endl; } #ifdef HAVE_ROOT #include "TFile.h" TFile* file = 0; if (fform==root) { file = new TFile(name.c_str(),"RECREATE"); } #endif for ( ObjMap::const_iterator it = objs.begin(); it != objs.end(); ++it ) { ManagedObject * o = dynamic_cast<ManagedObject *>(it->second); if (!o) continue; std::string path = it->first.substr(0, it->first.rfind('/')); std::string name = it->first.substr(it->first.rfind('/') + 1); switch(fform) { case flat: o->writeFLAT(of, path, name); break; case xml: o->writeXML(of, path, name); break; #ifdef HAVE_ROOT case root: o->writeROOT(file, path, name); break; #endif } } if (fform==xml) of << "</aida>" << std::endl; #ifdef HAVE_ROOT if(fform==root) file->Close(); #endif return of.good(); } /** * Not implemented in LWH. */ void setOverwrite(bool o = true) { overwrite = o; } /** * Not implemented in LWH. * @return false always. */ bool cp(const std::string &, const std::string &, bool = false) { return false; } /** * Not implemented in LWH. * @return false always. */ bool symlink(const std::string &, const std::string &) { return false; } /** * Not implemented in LWH. * @return false always. */ bool mount(const std::string &, ITree &, const std::string &) { return false; } /** * Not implemented in LWH. * @return false always. */ bool unmount(const std::string &) { return false; } /** * Calls commit(). */ bool close() { return commit(); } /** * Not implemented in LWH. * @return null pointer always. */ void * cast(const std::string &) const { return 0; } protected: /** Strip trailing slash. */ std::string sts(std::string s) const { if ( s[s.length() - 1] == '/' ) s = s.substr(0, s.length() - 1); if ( s[s.length() - 1] == '/' ) return ""; return s; } /** Strip trailing name */ std::string stn(std::string s) const { std::string::size_type slash = s.rfind('/'); return s.substr(0, slash); } /** Get proper full path from possibly relative path. */ std::string fullpath(std::string d) const { if ( d.empty() ) d = cwd; else if ( d[0] != '/' ) d = cwd + "/" + d; return pth2str(purgepath(str2pth(d))); } /** Convert a string containing a path to a Path object. */ Path str2pth(std::string s) const { Path pth; std::string::size_type i = s.find_first_not_of("/"); while ( i != std::string::npos ) { s = s.substr(i); i = s.find_first_of("/"); pth.push_back(s.substr(0, i)); if ( i == std::string::npos ) return pth; s = s.substr(i); i = s.find_first_not_of("/"); } return pth; } /** Convert a Path object to a corresponding string. */ std::string pth2str(const Path & pth) const { std::string str; for ( int i = 0, N = pth.size(); i < N; ++i ) str += "/" + pth[i]; return str; } /** Remove '..' and '.' components of the given Path object. */ Path purgepath(const Path & pth) const { Path p; for ( int i = 0, N = pth.size(); i < N; ++i ) { if ( pth[i] == ".." ) p.pop_back(); else if ( pth[i] != "." ) p.push_back(pth[i]); } return p; } private: /** The filename to print histograms to. */ std::string name; /** Format to write out in: AIDA XML, "flat" or ROOT. */ fileformat fform; /** The set of defined directories. */ PathSet dirs; /** The set of defined objects. */ ObjMap objs; /** The current working directory. */ std::string cwd; /** Overwrite strategy. */ bool overwrite; }; } #endif /* LWH_Tree_H */ ����������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/AIHistogram2D.h�������������������������������������������������������������0000644�0001750�0001750�00000014052�12116077757�015652� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_AIHistogram2D_H #define LWH_AIHistogram2D_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ #include "AIHistogram1D.h" namespace AIDA { class IAxis; class IHistogram2D : virtual public IHistogram { public: virtual ~IHistogram2D() { /* nop */; } /** * Fill the IHistogram2D with a couple of values and the * corresponding weight. * @param x The x value to be filled in. * @param y The y value to be filled in. * @param weight The corresponding weight (by default 1). * @return false If the weight is <0 or >1 (?). * */ virtual bool fill(double x, double y, double weight = 1.) = 0; /** * The weighted mean along the x axis of a given bin. * @param indexX The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param indexY The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The mean of the corresponding bin along the x axis. * */ virtual double binMeanX(int indexX, int indexY) const = 0; /** * The weighted mean along the y axis of a given bin. * @param indexX The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param indexY The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The mean of the corresponding bin along the y axis. * */ virtual double binMeanY(int indexX, int indexY) const = 0; /** * Number of entries in the corresponding bin (ie the number of times fill was called for this bin). * @param indexX The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param indexY The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The number of entries in the corresponding bin. * */ virtual int binEntries(int indexX, int indexY) const = 0; /** * Sum of all the entries of the bins along a given x bin. * This is equivalent to <tt>projectionX().binEntries(index)</tt>. * @param index The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The number of entries in the corresponding set of bins. * */ virtual int binEntriesX(int index) const = 0; /** * Sum of all the entries of the bins along a given y bin. * This is equivalent to <tt>projectionY().binEntries(index)</tt>. * @param index The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The number of entries in the corresponding set of bins. * */ virtual int binEntriesY(int index) const = 0; /** * Total height of a give bin (ie the sum of the weights in this bin). * @param indexX The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param indexY The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The height of the corresponding bin. * */ virtual double binHeight(int indexX, int indexY) const = 0; /** * Sum of all the heights of the bins along a given x bin. * This is equivalent to <tt>projectionX().binHeight(index)</tt>. * @param index The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The sum of the heights in the corresponding set of bins. * */ virtual double binHeightX(int index) const = 0; /** * Sum of all the heights of the bins along a given y bin. * This is equivalent to <tt>projectionY().binHeight(index)</tt>. * @param index The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The sum of the heights in the corresponding set of bins. * */ virtual double binHeightY(int index) const = 0; /** * The error of a given bin. * @param indexX The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param indexY The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The error on the corresponding bin. * */ virtual double binError(int indexX, int indexY) const = 0; /** * The mean of the IHistogram2D along the x axis. * @return The mean of the IHistogram2D along the x axis. * */ virtual double meanX() const = 0; /** * The mean of the IHistogram2D along the y axis. * @return The mean of the IHistogram2D along the y axis. * */ virtual double meanY() const = 0; /** * The RMS of the IHistogram2D along the x axis. * @return The RMS if the IHistogram2D along the x axis. * */ virtual double rmsX() const = 0; /** * The RMS of the IHistogram2D along the y axis. * @return The RMS if the IHistogram2D along the y axis. * */ virtual double rmsY() const = 0; /** * Get the x axis of the IHistogram2D. * @return The x coordinate IAxis. * */ virtual const IAxis & xAxis() const = 0; /** * Get the y axis of the IHistogram2D. * @return The y coordinate IAxis. * */ virtual const IAxis & yAxis() const = 0; /** * Get the bin number corresponding to a given coordinate along the x axis. * This is a convenience method, equivalent to <tt>xAxis().coordToIndex(coord)</tt>. * @see IAxis#coordToIndex(double) * @param coord The coordinalte along the x axis. * @return The corresponding bin number. * */ virtual int coordToIndexX(double coord) const = 0; /** * Get the bin number corresponding to a given coordinate along the y axis. * This is a convenience method, equivalent to <tt>yAxis().coordToIndex(coord)</tt>. * @see IAxis#coordToIndex(double) * @param coord The coordinalte along the y axis. * @return The corresponding bin number. * */ virtual int coordToIndexY(double coord) const = 0; /** * Add to this IHistogram2D the contents of another IHistogram2D. * @param hist The IHistogram2D to be added to this IHistogram2D. * @return false If the IHistogram2Ds binnings are incompatible. * */ virtual bool add(const IHistogram2D & hist) = 0; }; // class } // namespace AIDA /** @endcond */ #else #include "AIDA/IHistogram2D.h" #endif #endif /* LWH_AIHistogram2D_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/Profile1D.h�����������������������������������������������������������������0000644�0001750�0001750�00000043214�12116077757�015104� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_Profile1D_H #define LWH_Profile1D_H // // This is the declaration of the Profile1D class. // #include "AIProfile1D.h" #include "ManagedObject.h" #include "Axis.h" #include "VariAxis.h" #include <vector> #include <stdexcept> #include <cassert> #include <iostream> #ifdef HAVE_ROOT #include "TProfile.h" #endif namespace LWH { using namespace AIDA; /** * User level interface to 1D Profile. */ class Profile1D: public IProfile1D, public ManagedObject { public: /** HistFactory is a friend. */ friend class HistogramFactory; public: /** * Standard constructor. */ Profile1D(int n, double lo, double up) : fax(new Axis(n, lo, up)), vax(0), sum(n + 2), sumw(n + 2), sumw2(n + 2), sumxw(n + 2), sumx2w(n + 2), sumyw(n + 2), sumy2w(n + 2), sumy2w2(n + 2) { ax = fax; } /** * Standard constructor for variable bin width. */ Profile1D(const std::vector<double> & edges) : fax(0), vax(new VariAxis(edges)), sum(edges.size() + 1), sumw(edges.size() + 1), sumw2(edges.size() + 1), sumxw(edges.size() + 1), sumx2w(edges.size() + 1), sumyw(edges.size() + 1), sumy2w(edges.size() + 1), sumy2w2(edges.size() + 1) { ax = vax; } /** * Copy constructor. */ Profile1D(const Profile1D & h) : IBaseHistogram(h), IProfile(h), IProfile1D(h), ManagedObject(h), fax(0), vax(0), sum(h.sum), sumw(h.sumw), sumw2(h.sumw2), sumxw(h.sumxw), sumx2w(h.sumx2w), sumyw(h.sumyw), sumy2w(h.sumy2w), sumy2w2(h.sumy2w2) { const VariAxis * hvax = dynamic_cast<const VariAxis *>(h.ax); if ( hvax ) ax = vax = new VariAxis(*hvax); else ax = fax = new Axis(dynamic_cast<const Axis &>(*h.ax)); } /// Destructor. virtual ~Profile1D() { delete ax; } /** * Get the Profile's title. * @return The Profile's title. */ // std::string title() const { // return theTitle; // } /** * Get the Profile's name. * @return The Profile's name */ std::string name() const { return theTitle; } /** * Set the profile title. * @param title The title. * @return false If title cannot be changed. */ // bool setTitle(const std::string & title) { // theTitle = title; // return true; // } /** * Not implemented in LWH. will throw an exception. */ IAnnotation & annotation() { throw std::runtime_error("LWH cannot handle annotations"); return *anno; } /** * Not implemented in LWH. will throw an exception. */ const IAnnotation & annotation() const { throw std::runtime_error("LWH cannot handle annotations"); return *anno; } /** * Get the Profile's dimension. * @return The Profile's dimension. */ int dimension() const { return 1; } /** * Reset the Histogram; as if just created. * @return false If something goes wrong. */ bool reset() { sum = std::vector<int>(ax->bins() + 2); sumw = std::vector<double>(ax->bins() + 2); sumxw = std::vector<double>(ax->bins() + 2); sumx2w = std::vector<double>(ax->bins() + 2); sumyw = std::vector<double>(ax->bins() + 2); sumy2w = std::vector<double>(ax->bins() + 2); sumy2w2 = std::vector<double>(ax->bins() + 2); sumw2 = std::vector<double>(ax->bins() + 2); return true; } /** * Get the number of in-range entries in the Histogram. * @return The number of in-range entries. * */ int entries() const { int si = 0; for ( int i = 2; i < ax->bins() + 2; ++i ) si += sum[i]; return si; } /** * Sum of the entries in all the IHistogram's bins, * i.e in-range bins, UNDERFLOW and OVERFLOW. * This is equivalent to the number of times the * method fill was invoked. * @return The sum of all the entries. */ int allEntries() const { return entries() + extraEntries(); } /** * Number of entries in the UNDERFLOW and OVERFLOW bins. * @return The number of entries outside the range of the IHistogram. */ int extraEntries() const { return sum[0] + sum[1]; } /** * Number of equivalent entries, * i.e. <tt>SUM[ weight ] ^ 2 / SUM[ weight^2 ]</tt> * @return The number of equivalent entries. */ double equivalentBinEntries() const { double sw = 0.0; double sw2 = 0.0; for ( int i = 2; i < ax->bins() + 2; ++i ) { sw += sumw[i]; sw2 += sumw2[i]; } return (sw*sw)/sw2; } /** * Sum of weighted in-range bin profile heights in the IProfile, * UNDERFLOW and OVERFLOW bins are excluded. * @return The sum of the in-range bins heights. * */ double sumBinHeights() const { double sw = 0.; double syw = 0.; for ( int i = 2; i < ax->bins() + 2; ++i ) { syw += sumyw[i]; sw += sumw[i]; } double sBH = 0.; if (sw > 0.) sBH = syw/sw; return sBH; } /** * Sum of the heights of all the IHistogram's bins, * i.e in-range bins, UNDERFLOW and OVERFLOW. * @return The sum of all the bins heights. */ double sumAllBinHeights() const { double sw = 0.; double syw = 0.; for ( int i = 0; i < ax->bins() + 2; ++i ) { syw += sumyw[i]; sw += sumw[i]; } double sABH = 0.; if (sw > 0.) sABH = syw/sw; return sABH; } /** * Sum of heights in the UNDERFLOW and OVERFLOW bins. * @return The sum of the heights of the out-of-range bins. */ double sumExtraBinHeights() const { double sw = sumw[0] + sumw[1]; double syw = sumyw[0] + sumyw[1]; double sEBH = 0.; if (sw > 0.) sEBH = syw/sw; return sEBH; } /** * Minimum height of the in-range bins, * i.e. not considering the UNDERFLOW and OVERFLOW bins. * @return The minimum height among the in-range bins. */ double minBinHeight() const { double minw = 0.; bool first = true; for ( int i = 3; i < ax->bins() + 2; ++i ) { if (sumw[i] > 0.) { double yw = sumyw[i]/sumw[i]; if (first) { minw = yw; first = false; } else if (yw < minw) minw = yw; } } return minw; } /** * Maximum height of the in-range bins, * i.e. not considering the UNDERFLOW and OVERFLOW bins. * @return The maximum height among the in-range bins. */ double maxBinHeight() const{ double maxw = 0.; bool first = true; for ( int i = 3; i < ax->bins() + 2; ++i ) { if (sumw[i] > 0.) { double yw = sumyw[i]/sumw[i]; if (first) { maxw = yw; first = false; } else if (yw > maxw) maxw = yw; } } return maxw; } /** * Fill the IProfile1D with a value and the * corresponding weight. * @param x The x value to be filled in. * @param y The y value to be filled in. * @param weight The corresponding weight (by default 1). * @return false If the weight is <0 or >1 (?). */ bool fill(double x, double y, double weight = 1.) { int i = ax->coordToIndex(x) + 2; ++sum[i]; sumw[i] += weight; sumxw[i] += x*weight; sumx2w[i] += x*x*weight; sumyw[i] += y*weight; sumy2w[i] += y*y*weight; sumy2w2[i] += y*y*weight*weight; sumw2[i] += weight*weight; return weight >= 0 && weight <= 1; } /** * The weighted mean of a bin. * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The mean in x of the corresponding bin. */ double binMean(int index) const { int i = index + 2; return sumw[i] != 0.0? sumxw[i]/sumw[i]: ( vax? vax->binMidPoint(index): fax->binMidPoint(index) ); }; /** * The weighted RMS of a bin. * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The RMS in x of the corresponding bin. */ double binRms(int index) const { int i = index + 2; return sumw[i] == 0.0 || sum[i] < 2? ax->binWidth(index): std::sqrt(std::max(sumw[i]*sumx2w[i] - sumxw[i]*sumxw[i], 0.0))/sumw[i]; }; /** * Number of entries in the corresponding bin (ie the number of * times fill was called for this bin). * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The number of entries in the corresponding bin. */ int binEntries(int index) const { return sum[index + 2]; } /** * Total height of the corresponding bin (ie sumyw/sumw = mean in y * in this bin). * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The weight of the corresponding bin. */ double binHeight(int index) const { double bH = 0.; if (sumw[index+2] != 0. && sumyw[index+2] != 0.) bH = sumyw[index+2]/sumw[index+2]; return bH; } /** * The correctly weighted error of a given bin. * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The error on the corresponding bin. * */ double binError(int index) const { const size_t i = index + 2; if (sumw[i] > 0.0) { const double n_eff = sumw[i]*sumw[i] / sumw2[i]; if (n_eff <= 1.0) { return sumyw[i]/n_eff; } const double denom = sumw[i]*sumw[i] - sumw2[i]; const double numer = sumy2w[i]*sumw[i] - sumyw[i]*sumyw[i]; assert(denom > 0); const double variance = numer/denom; /// @todo Is this biasing again? I.e. do we actually need a 1 / (n_eff - 1)? const double std_var = variance / n_eff; if (std_var > 0.0) { const double std_err = sqrt(std_var); // std::cout << "@@ " << index << " " << std_err << " " << sumyw[i]/sumw[i] << std::endl; return std_err; } } return 0.0; } /** * The mean in x of the whole IProfile1D. * @return The mean in x of the IProfile1D. */ double mean() const { double s = 0.0; double sx = 0.0; for ( int i = 2; i < ax->bins() + 2; ++i ) { s += sumw[i]; sx += sumxw[i]; } return s != 0.0? sx/s: 0.0; } /** * The RMS in x of the whole IProfile1D. * @return The RMS in x if the IProfile1D. */ double rms() const { double s = 0.0; double sx = 0.0; double sx2 = 0.0; for ( int i = 2; i < ax->bins() + 2; ++i ) { s += sumw[i]; sx += sumxw[i]; sx2 += sumx2w[i]; } return s != 0.0? std::sqrt(std::max(s*sx2 - sx*sx, 0.0))/s: ax->upperEdge() - ax->lowerEdge(); } /** The weights. */ double getSumW(int index) const { return sumw[index + 2]; } /** The squared weights. */ double getSumW2(int index) const { return sumw2[index + 2]; } /** The weighted x-values. */ double getSumXW(int index) const { return sumxw[index + 2]; } /** The weighted x-square-values. */ double getSumX2W(int index) const { return sumx2w[index + 2]; } /** The weighted y-values. */ double getSumYW(int index) const { return sumyw[index + 2]; } /** The weighted y-square-values. */ double getSumY2W(int index) const { return sumy2w[index + 2]; } /** The squared weighted y-square-values. */ double getSumY2W2(int index) const { return sumy2w2[index + 2]; } /** * Get the x axis of the IHistogram1D. * @return The x coordinate IAxis. */ const IAxis & axis() const { return *ax; } /** * Get the bin number corresponding to a given coordinate along the * x axis. This is a convenience method, equivalent to * <tt>axis().coordToIndex(coord)</tt>. * @param coord The coordinalte along the x axis. * @return The corresponding bin number. */ int coordToIndex(double coord) const { return ax->coordToIndex(coord); } /** * Add to this Profile1D the contents of another IProfile1D. * @param h The Profile1D to be added to this IProfile1D. * @return false If the IProfile1Ds binnings are incompatible. */ bool add(const Profile1D & h) { if ( ax->upperEdge() != h.ax->upperEdge() || ax->lowerEdge() != h.ax->lowerEdge() || ax->bins() != h.ax->bins() ) return false; for ( int i = 0; i < ax->bins() + 2; ++i ) { sum[i] += h.sum[i]; sumw[i] += h.sumw[i]; sumxw[i] += h.sumxw[i]; sumx2w[i] += h.sumx2w[i]; sumyw[i] += h.sumxw[i]; sumy2w[i] += h.sumx2w[i]; sumy2w2[i] += h.sumxw[i]; sumw2[i] += h.sumw2[i]; } return true; } /** * Add to this IProfile1D the contents of another IProfile1D. * @param hist The IProfile1D to be added to this IProfile1D. * @return false If the IProfile1Ds binnings are incompatible. */ bool add(const IProfile1D & hist) { return add(dynamic_cast<const Profile1D &>(hist)); } /** * Scale the contents of this profile histogram with the given factor. * @param s the scaling factor to use. */ bool scale(double s) { for ( int i = 0; i < ax->bins() + 2; ++i ) { sumw[i] *= s; sumxw[i] *= s; sumx2w[i] *= s; sumyw[i] *= s; sumy2w[i] *= s; sumy2w2[i] *= s*s; sumw2[i] *= s*s; } return true; } /** * Not implemented in LWH. * @return null pointer always. */ void * cast(const std::string &) const { return 0; } /** * Write out the histogram in the AIDA xml format. */ bool writeXML(std::ostream & os, std::string path, std::string name) { //std::cout << "Writing out profile histogram " << name << " in AIDA file format!" <<std::endl; os << " <profile1d name=\"" << encodeForXML(name) << "\"\n title=\"" << encodeForXML(title()) << "\" path=\"" << path << "\">\n <axis max=\"" << ax->upperEdge() << "\" numberOfBins=\"" << ax->bins() << "\" min=\"" << ax->lowerEdge() << "\" direction=\"x\""; if ( vax ) { os << ">\n"; for ( int i = 0, N = ax->bins() - 1; i < N; ++i ) os << " <binBorder value=\"" << ax->binUpperEdge(i) << "\"/>\n"; os << " </axis>\n"; } else { os << "/>\n"; } os << " <statistics entries=\"" << entries() << "\">\n <statistic mean=\"" << mean() << "\" direction=\"x\"\n rms=\"" << rms() << "\"/>\n </statistics>\n <data1d>\n"; for ( int i = 0; i < ax->bins() + 2; ++i ) if ( sum[i] && binError(i)>0.) { os << " <bin1d binNum=\""; if ( i == 0 ) os << "UNDERFLOW"; else if ( i == 1 ) os << "OVERFLOW"; else os << i - 2; os << "\" entries=\"" << sum[i] << "\" height=\"" << binHeight(i) << "\"\n error=\"" << binError(i) << "\" error2=\"" << binError(i)*binError(i) << "\"\n weightedMean=\"" << binMean(i - 2) << "\" weightedRms=\"" << binRms(i - 2) << "\"/>\n"; } os << " </data1d>\n </profile1d>" << std::endl; return true; } /** * Write out the histogram in a flat text file suitable for * eg. gnuplot to read. The coloums are layed out as 'x w w2 n'. */ bool writeFLAT(std::ostream & os, std::string path, std::string name) { os << "# " << path << "/" << name << " " << ax->lowerEdge() << " " << ax->bins() << " " << ax->upperEdge() << " \"" << title() << " \"" << std::endl; for ( int i = 2; i < ax->bins() + 2; ++i ) if ( sum[i] && binError(i)>0.) os << binMean(i - 2) << " " << binHeight(i) << " " << binError(i) << " " << sum[i] << std::endl; os << std::endl; return true; } #ifdef HAVE_ROOT /** * Write out the histogram in Root file format. */ //bool writeROOT(std::ostream & os, std::string path, std::string name) { bool writeROOT(TFile* file, std::string path, std::string name) { //std::cout << "Writing out profile histogram " << name.c_str() << " in ROOT file format" << std::endl; TProfile* prof1d; int nbins; if (!vax || vax->isFixedBinning() ) {//equidistant binning (easier case) nbins = ax->bins(); prof1d = new TProfile(name.c_str(), title().c_str(), nbins, ax->lowerEdge(), ax->upperEdge()); } else { nbins = vax->bins(); double* bins = new double[nbins+1]; for (int i=0; i<nbins; ++i) { bins[i] = vax->binEdges(i).first; } bins[nbins] = vax->binEdges(nbins-1).second; //take last bin right border prof1d = new TProfile(name.c_str(), title().c_str(), nbins, bins); delete bins; } double entries = 0; for ( int i = 0; i < nbins + 2; ++i ) { if ( sum[i] && binError(i)>0.) { //i==0: underflow->RootBin(0), i==1: overflow->RootBin(NBins+1) entries = entries + sum[i]; int j=i; if (i==0) j=0; //underflow else if (i==1) j=nbins+1; //overflow if (i>=2) j=i-1; //normal bin entries prof1d->SetBinContent(j, binHeight(i)); prof1d->SetBinError(j, binError(i)); } } prof1d->Sumw2(); prof1d->SetEntries(entries); std::string DirName; //remove preceding slash from directory name, else ROOT error for (unsigned int i=1; i<path.size(); ++i) DirName += path[i]; if (!file->Get(DirName.c_str())) file->mkdir(DirName.c_str()); file->cd(DirName.c_str()); prof1d->Write(); delete prof1d; return true; } #endif private: /** The title */ // std::string theTitle; /** The axis. */ IAxis * ax; /** Pointer (possibly null) to a axis with fixed bin width. */ Axis * fax; /** Pointer (possibly null) to a axis with fixed bin width. */ VariAxis * vax; /** The counts. */ std::vector<int> sum; /** The weights. */ std::vector<double> sumw; /** The squared weights. */ std::vector<double> sumw2; /** The weighted x-values. */ std::vector<double> sumxw; /** The weighted x-square-values. */ std::vector<double> sumx2w; /** The weighted y-values. */ std::vector<double> sumyw; /** The weighted y-square-values. */ std::vector<double> sumy2w; /** The squared weighted y-square-values. */ std::vector<double> sumy2w2; /** dummy pointer to non-existen annotation. */ IAnnotation * anno; }; } #endif /* LWH_Profile1D_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/HistogramFactory.h����������������������������������������������������������0000644�0001750�0001750�00000126660�12116077757�016613� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_HistogramFactory_H #define LWH_HistogramFactory_H // // This is the declaration of the HistogramFactory class. // #include "AIHistogramFactory.h" #include "Histogram1D.h" #include "Histogram2D.h" #include "DataPointSet.h" #include "Profile1D.h" #include "Tree.h" #include <string> #include <stdexcept> namespace LWH { using namespace AIDA; /** * User level interface for factory classes of Histograms (binned, * unbinned, and profile). The created objects are assumed to be * managed by the tree which is associated to the factory. So far only * one-dimensional histograms are implemented in LWH. */ class HistogramFactory: public IHistogramFactory { public: /** * Standard constructor. */ HistogramFactory(Tree & t) : tree(&t) {} /** * Destructor. */ virtual ~HistogramFactory() {} /** * Destroy an IBaseHistogram object. * @param hist The IBaseHistogram to be destroyed. * @return false If the histogram cannot be destroyed. */ bool destroy(IBaseHistogram * hist) { IManagedObject * mo = dynamic_cast<IManagedObject *>(hist); if ( !mo ) return false; return tree->rm(tree->findPath(*mo)); } /** * LWH cannot create a ICloud1D, an unbinned 1-dimensional histogram. */ ICloud1D * createCloud1D(const std::string &, const std::string &, int = -1, const std::string & = "") { return error<ICloud1D>("ICloud1D"); } /** * LWH cannot create a ICloud1D, an unbinned 1-dimensional histogram. */ ICloud1D * createCloud1D(const std::string &) { return error<ICloud1D>("ICloud1D"); } /** * LWH cannot create a copy of an ICloud1D. */ ICloud1D * createCopy(const std::string &, const ICloud1D &) { return error<ICloud1D>("ICloud1D"); } /** * LWH cannot create a ICloud2D, an unbinned 2-dimensional histogram. */ ICloud2D * createCloud2D(const std::string &, const std::string &, int = -1, const std::string & = "") { return error<ICloud2D>("ICloud2D"); } /** * LWH cannot create a ICloud2D, an unbinned 2-dimensional histogram. */ ICloud2D * createCloud2D(const std::string &) { return error<ICloud2D>("ICloud2D"); } /** * LWH cannot create a copy of an ICloud2D. */ ICloud2D * createCopy(const std::string &, const ICloud2D &) { return error<ICloud2D>("ICloud2D"); } /** * LWH cannot create a ICloud3D, an unbinned 3-dimensional histogram. */ ICloud3D * createCloud3D(const std::string &, const std::string &, int = -1, const std::string & = "") { return error<ICloud3D>("ICloud3D"); } /** * LWH cannot create a ICloud3D, an unbinned 3-dimensional histogram. */ ICloud3D * createCloud3D(const std::string &) { return error<ICloud3D>("ICloud3D"); } /** * LWH cannot create a copy of an ICloud3D. */ ICloud3D * createCopy(const std::string &, const ICloud3D &) { return error<ICloud3D>("ICloud3D"); } /** * Create a IHistogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid path). * The characther `/` cannot be used in names; it is only * used to delimit directories within paths. * @param title The title of the IHistogram1D. * @param nBins The number of bins of the x axis. * @param lowerEdge The lower edge of the x axis. * @param upperEdge The upper edge of the x axis. * @return The newly created IHistogram1D ot the null pointer * if something went wrong, such as a non existing * directrory in the path or that an object with the * given path already existed. * @throws std::runtime_error if histogram could not be created. */ IHistogram1D * createHistogram1D(const std::string & path, const std::string & title, int nBins, double lowerEdge, double upperEdge, const std::string & = "") { Histogram1D * hist = new Histogram1D(nBins, lowerEdge, upperEdge); hist->setTitle(title); if ( !tree->insert(path, hist) ) { delete hist; hist = 0; throw std::runtime_error("LWH could not create histogram '" + title + "'." ); } return hist; } /** * Create a IHistogram1D. * @param pathAndTitle The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param nBins The number of bins of the x axis. * @param lowerEdge The lower edge of the x axis. * @param upperEdge The upper edge of the x axis. * @return The newly created IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ IHistogram1D * createHistogram1D(const std::string & pathAndTitle, int nBins, double lowerEdge, double upperEdge) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createHistogram1D(pathAndTitle, title, nBins, lowerEdge, upperEdge); } /** * Create a IHistogram1D. * @param path The path of the created IHistogram. The path can either * be a relative or full path. * ("/folder1/folder2/dataName" and "../folder/dataName" * are valid paths). All the directories in the path must * exist. The characther `/` cannot be used in names; * it is only used to delimit directories within paths. * @param title The title of the IHistogram1D. * @param binEdges The array of the bin edges for the x axis. */ IHistogram1D * createHistogram1D(const std::string & path, const std::string & title, const std::vector<double> & binEdges, const std::string & = "") { Histogram1D * hist = new Histogram1D(binEdges); hist->setTitle(title); if ( !tree->insert(path, hist) ) { delete hist; hist = 0; throw std::runtime_error("LWH could not create histogram '" + title + "'." ); } return hist; } /** * Create a copy of an IHistogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param hist The IHistogram1D to be copied. * @return The copy of the IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ IHistogram1D * createCopy(const std::string & path, const IHistogram1D & hist) { Histogram1D * h = new Histogram1D(dynamic_cast<const Histogram1D &>(hist)); h->setTitle(path.substr(path.rfind('/') + 1)); if ( !tree->insert(path, h) ) { delete h; h = 0; throw std::runtime_error("LWH could not create a copy of histogram '" + hist.title() + "'." ); } return h; } /** * LWH cannot create a IHistogram2D. */ IHistogram2D * createHistogram2D(const std::string & path, const std::string & title, int nx, double xlo, double xup, int ny, double ylo, double yup, const std::string & = "") { Histogram2D * hist = new Histogram2D(nx, xlo, xup, ny, ylo, yup); hist->setTitle(title); if ( !tree->insert(path, hist) ) { delete hist; hist = 0; throw std::runtime_error("LWH could not create histogram '" + title + "'." ); } return hist; } /** * LWH cannot create a IHistogram2D. */ IHistogram2D * createHistogram2D(const std::string & pathAndTitle, int nx, double xlo, double xup, int ny, double ylo, double yup) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createHistogram2D(pathAndTitle, title, nx, xlo, xup, ny, ylo, yup); } /** * LWH cannot create a IHistogram2D. */ IHistogram2D * createHistogram2D(const std::string & path, const std::string & title, const std::vector<double> & xedges, const std::vector<double> & yedges, const std::string & = "") { Histogram2D * hist = new Histogram2D(xedges, yedges); hist->setTitle(title); if ( !tree->insert(path, hist) ) { delete hist; hist = 0; throw std::runtime_error("LWH could not create histogram '" + title + "'." ); } return hist; } /** * LWH cannot create a copy of an IHistogram2D. */ IHistogram2D * createCopy(const std::string & path, const IHistogram2D & hist) { Histogram2D * h = new Histogram2D(dynamic_cast<const Histogram2D &>(hist)); h->setTitle(path.substr(path.rfind('/') + 1)); if ( !tree->insert(path, h) ) { delete h; h = 0; throw std::runtime_error("LWH could not create a copy of histogram '" + hist.title() + "'." ); } return h; } /** * LWH cannot create a IHistogram3D. */ IHistogram3D * createHistogram3D(const std::string &, const std::string &, int, double, double, int, double, double, int, double, double, const std::string & = "") { return error<IHistogram3D>("IHistogram3D"); } /** * LWH cannot create a IHistogram3D. */ IHistogram3D * createHistogram3D(const std::string &, int, double, double, int, double, double, int, double, double) { return error<IHistogram3D>("IHistogram3D"); } /** * LWH cannot create a IHistogram3D. */ IHistogram3D * createHistogram3D(const std::string &, const std::string &, const std::vector<double> &, const std::vector<double> &, const std::vector<double> &, const std::string & = "") { return error<IHistogram3D>("IHistogram3D"); } /** * LWH cannot create a copy of an IHistogram3D. */ IHistogram3D * createCopy(const std::string &, const IHistogram3D &) { return error<IHistogram3D>("IHistogram3D"); } /** * Create a IProfile1D. * @param path The path of the created IProfile. The path must be a * full path. ("/folder1/folder2/dataName" is a valid path). * The character `/` cannot be used in names; it is only * used to delimit directories within paths. * @param title The title of the IProfile1D. * @param nBins The number of bins of the x axis. * @param lowerEdge The lower edge of the x axis. * @param upperEdge The upper edge of the x axis. * @return The newly created IProfile1D ot the null pointer * if something went wrong, such as a non existing * directrory in the path or that an object with the * given path already existed. * @throws std::runtime_error if profile histogram could not be created. */ IProfile1D * createProfile1D(const std::string & path, const std::string & title, int nBins, double lowerEdge, double upperEdge, const std::string & = "") { Profile1D * prof = new Profile1D(nBins, lowerEdge, upperEdge); prof->setTitle(title); if ( !tree->insert(path, prof) ) { delete prof; prof = 0; throw std::runtime_error("LWH could not create profile histogram '" + title + "'." ); } return prof; } /** * Create a IProfile1D. * @param pathAndTitle The path of the created IProfile. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The character `/` cannot be used in names; it * is only used to delimit directories within paths. * @param nBins The number of bins of the x axis. * @param lowerEdge The lower edge of the x axis. * @param upperEdge The upper edge of the x axis. * @return The newly created IProfile1D. * @throws std::runtime_error if profile histogram could not be created. */ IProfile1D * createProfile1D(const std::string & pathAndTitle, int nBins, double lowerEdge, double upperEdge) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createProfile1D(pathAndTitle, title, nBins, lowerEdge, upperEdge); } /** * Create a IProfile1D. * @param path The path of the created IProfile. The path can either * be a relative or full path. * ("/folder1/folder2/dataName" and "../folder/dataName" * are valid paths). All the directories in the path must * exist. The characther `/` cannot be used in names; * it is only used to delimit directories within paths. * @param title The title of the IProfile1D. * @param binEdges The array of the bin edges for the x axis. */ IProfile1D * createProfile1D(const std::string & path, const std::string & title, const std::vector<double> & binEdges, const std::string & = "") { Profile1D * prof = new Profile1D(binEdges); prof->setTitle(title); if ( !tree->insert(path, prof) ) { delete prof; prof = 0; throw std::runtime_error("LWH could not create profile histogram '" + title + "'." ); } return prof; } /** * Create a copy of an IProfile1D. * @param path The path of the created IProfile. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The character `/` cannot be used in names; it * is only used to delimit directories within paths. * @param hist The IProfile1D to be copied. * @return The copy of the IProfile1D. * @throws std::runtime_error if profile histogram could not be created. */ IProfile1D * createCopy(const std::string & path, const IProfile1D & prof) { Profile1D * p = new Profile1D(dynamic_cast<const Profile1D &>(prof)); p->setTitle(path.substr(path.rfind('/') + 1)); if ( !tree->insert(path, p) ) { delete p; p = 0; throw std::runtime_error("LWH could not create a copy of profile histogram '" + p->title() + "'." ); } return p; } /** * LWH cannot create a IProfile1D. */ IProfile1D * createProfile1D(const std::string &, const std::string &, int, double, double, double, double, const std::string & = "") { return error<IProfile1D>("IProfile1D"); } /** * LWH cannot create a IProfile1D. */ IProfile1D * createProfile1D(const std::string &, const std::string &, const std::vector<double> &, double, double, const std::string & = "") { return error<IProfile1D>("IProfile1D"); } /** * LWH cannot create a IProfile1D. */ IProfile1D * createProfile1D(const std::string &, int, double, double, double, double) { return error<IProfile1D>("IProfile1D"); } /** * LWH cannot create a IProfile2D. */ IProfile2D * createProfile2D(const std::string &, const std::string &, int, double, double, int, double, double, const std::string & = "") { return error<IProfile2D>("IProfile2D"); } /** * LWH cannot create a IProfile2D. */ IProfile2D * createProfile2D(const std::string &, const std::string &, int, double, double, int, double, double, double, double, const std::string & = "") { return error<IProfile2D>("IProfile2D"); } /** * LWH cannot create a IProfile2D. */ IProfile2D * createProfile2D(const std::string &, const std::string &, const std::vector<double> &, const std::vector<double> &, const std::string & = "") { return error<IProfile2D>("IProfile2D"); } /** * LWH cannot create a IProfile2D. */ IProfile2D * createProfile2D(const std::string &, const std::string &, const std::vector<double> &, const std::vector<double> &, double, double, const std::string & = "") { return error<IProfile2D>("IProfile2D"); } /** * LWH cannot create a IProfile2D. */ IProfile2D * createProfile2D(const std::string &, int, double, double, int, double, double) { return error<IProfile2D>("IProfile2D"); } /** * LWH cannot create a IProfile2D. */ IProfile2D * createProfile2D(const std::string &, int, double, double, int, double, double, double, double) { return error<IProfile2D>("IProfile2D"); } /** * LWH cannot create a copy of an IProfile2D. */ IProfile2D * createCopy(const std::string &, const IProfile2D &) { return error<IProfile2D>("IProfile2D"); } /** * Create a Histogram1D by adding two Histogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param hist1 The first member of the addition. * @param hist2 The second member of the addition. * @return The sum of the two IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ Histogram1D * add(const std::string & path, const Histogram1D & hist1, const Histogram1D & hist2) { if ( !checkBins(hist1, hist2) ) return 0; Histogram1D * h = new Histogram1D(hist1); h->setTitle(path.substr(path.rfind('/') + 1)); h->add(hist2); if ( !tree->insert(path, h) ) return 0; return h; } /** * Create an IHistogram1D by adding two IHistogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param hist1 The first member of the addition. * @param hist2 The second member of the addition. * @return The sum of the two IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ IHistogram1D * add(const std::string & path, const IHistogram1D & hist1, const IHistogram1D & hist2) { return add(path, dynamic_cast<const Histogram1D &>(hist1), dynamic_cast<const Histogram1D &>(hist2)); } /** * Create a Histogram1D by subtracting two Histogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param h1 The first member of the subtraction. * @param h2 The second member of the subtraction. * @return The difference of the two IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ Histogram1D * subtract(const std::string & path, const Histogram1D & h1, const Histogram1D & h2) { if ( !checkBins(h1, h2) ) { //std::cout << "!!!!!!!" << std::endl; return 0; } Histogram1D * h = new Histogram1D(h1); h->setTitle(path.substr(path.rfind('/') + 1)); for ( int i = 0; i < h->ax->bins() + 2; ++i ) { h->sum[i] += h2.sum[i]; h->sumw[i] -= h2.sumw[i]; h->sumw2[i] += h2.sumw2[i]; } if ( !tree->insert(path, h) ) { //std::cout << "&&&&&&&" << std::endl; return 0; } return h; } /** * Create an IHistogram1D by subtracting two IHistogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param hist1 The first member of the subtraction. * @param hist2 The second member of the subtraction. * @return The difference of the two IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ IHistogram1D * subtract(const std::string & path, const IHistogram1D & hist1, const IHistogram1D & hist2) { return subtract(path, dynamic_cast<const Histogram1D &>(hist1), dynamic_cast<const Histogram1D &>(hist2)); } /** * Create a Histogram1D by multiplying two Histogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param h1 The first member of the multiplication. * @param h2 The second member of the multiplication. * @return The product of the two IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ Histogram1D * multiply(const std::string & path, const Histogram1D & h1, const Histogram1D & h2) { if ( !checkBins(h1, h2) ) return 0; Histogram1D * h = new Histogram1D(h1); h->setTitle(path.substr(path.rfind('/') + 1)); for ( int i = 0; i < h->ax->bins() + 2; ++i ) { h->sumw[i] *= h2.sumw[i]; h->sumw2[i] += h1.sumw[i]*h1.sumw[i]*h2.sumw2[i] + h2.sumw[i]*h2.sumw[i]*h1.sumw2[i]; } if ( !tree->insert(path, h) ) return 0; return h; } /** * Create an IHistogram1D by multiplying two IHistogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param hist1 The first member of the multiplication. * @param hist2 The second member of the multiplication. * @return The product of the two IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ IHistogram1D * multiply(const std::string & path, const IHistogram1D & hist1, const IHistogram1D & hist2) { return multiply(path, dynamic_cast<const Histogram1D &>(hist1), dynamic_cast<const Histogram1D &>(hist2)); } /** * Create n DataPointSet by dividing two Histogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param h1 The first member of the division. * @param h2 The second member of the division. * @return The ration of the two IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ IDataPointSet * divide(const std::string & path, const Histogram1D & h1, const Histogram1D & h2) { // std::cout << "!!!!!!!!!!!!" << path << std::endl; DataPointSet * h = new DataPointSet(2); h->setTitle(path.substr(path.rfind('/') + 1)); for (int i = 0; i < h1.ax->bins(); ++i) { for (int j = 0; j < h2.ax->bins(); ++j) { if (!fuzzyEquals(h1.ax->binWidth(i), h2.ax->binWidth(j)) || !fuzzyEquals(h1.ax->binLowerEdge(i), h2.ax->binLowerEdge(j)) || !fuzzyEquals(h1.ax->binUpperEdge(i), h2.ax->binUpperEdge(j))) { continue; } const double binwidth = h1.ax->binWidth(i); const double bincentre = ( h1.ax->binLowerEdge(i) + h1.ax->binUpperEdge(i) ) / 2.0; IDataPoint* point = h->addPoint(); IMeasurement* x = point->coordinate(0); x->setValue(bincentre); x->setErrorPlus(binwidth/2.0); x->setErrorMinus(binwidth/2.0); double yval(0), yerr(0); if ( h1.binHeight(i) == 0 || h2.binHeight(j) == 0 ) { /// @todo Bad way of handling div by zero! yval = 0.0; yerr = 0.0; } else { yval = h1.binHeight(i) / h2.binHeight(j); double y1relerr = h1.binError(i)/h1.binHeight(i); double y2relerr = h2.binError(j)/h2.binHeight(j); yerr = yval * sqrt(pow(y1relerr, 2) + pow(y2relerr, 2)); } IMeasurement* y = point->coordinate(1); y->setValue(yval); y->setErrorPlus(yerr); y->setErrorMinus(yerr); } } if ( !tree->insert(path, h) ) return 0; return h; } #include <typeinfo> /** * Create an IHistogram1D by dividing two IHistogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param hist1 The first member of the division. * @param hist2 The second member of the division. * @return The ration of the two IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ IDataPointSet * divide(const std::string & path, const IHistogram1D & hist1, const IHistogram1D & hist2) { //std::cout << "&&&& " << path << std::endl; //std::cout << typeid(hist1).name() << std::endl; const Histogram1D& h1 = dynamic_cast<const Histogram1D &>(hist1); //std::cout << "&&&&a " << path << std::endl; const Histogram1D& h2 = dynamic_cast<const Histogram1D &>(hist2); //std::cout << "&&&&b " << path << std::endl; IDataPointSet* rtn = divide(path, h1, h2); //std::cout << "@@@@ " << path << std::endl; return rtn; } // /** // * Create n Histogram1D by dividing two Histogram1D. // * @param path The path of the created IHistogram. The path must be a // * full path. ("/folder1/folder2/dataName" is a valid // * path). The characther `/` cannot be used in names; it // * is only used to delimit directories within paths. // * @param h1 The first member of the division. // * @param h2 The second member of the division. // * @return The ration of the two IHistogram1D. // * @throws std::runtime_error if histogram could not be created. // */ // Histogram1D * divide(const std::string & path, // const Histogram1D & h1, const Histogram1D & h2) { // //std::cout << "!!!!!!!!!!!!" << path << std::endl; // if ( !checkBins(h1, h2) ) return 0; // Histogram1D * h = new Histogram1D(h1); // h->setTitle(path.substr(path.rfind('/') + 1)); // for ( int i = 0; i < h->ax->bins() + 2; ++i ) { // if ( h2.sum[i] == 0 || h2.sumw[i] == 0.0 ) { // /// @todo Bad way of handling div by zero! // h->sum[i] = 0; // h->sumw[i] = h->sumw2[i] = 0.0; // continue; // } // h->sum[i] /= h2.sum[i]; // h->sumw[i] /= h2.sumw[i]; // h->sumw2[i] = h1.sumw2[i]/(h2.sumw[i]*h2.sumw[i]) + // h1.sumw[i]*h1.sumw[i]*h2.sumw2[i]/ // (h2.sumw[i]*h2.sumw[i]*h2.sumw[i]*h2.sumw[i]); // } // //std::cout << "Inserting div histo at path: " << path << std::endl; // if ( !tree->insert(path, h) ) return 0; // //std::cout << "** OK!" << std::endl; // return h; // } // /** // * Create an IHistogram1D by dividing two IHistogram1D. // * @param path The path of the created IHistogram. The path must be a // * full path. ("/folder1/folder2/dataName" is a valid // * path). The characther `/` cannot be used in names; it // * is only used to delimit directories within paths. // * @param hist1 The first member of the division. // * @param hist2 The second member of the division. // * @return The ration of the two IHistogram1D. // * @throws std::runtime_error if histogram could not be created. // */ // IHistogram1D * divide(const std::string & path, const IHistogram1D & hist1, // const IHistogram1D & hist2) { // //std::cout << "&&&&&&&&&&&&" << path << std::endl; // return divide(path, dynamic_cast<const Histogram1D &>(hist1), // dynamic_cast<const Histogram1D &>(hist2)); // } inline bool _neq(double a, double b, double eps = 1e-5) const { if ( a == 0 && b == 0 ) return false; if ( fabs(a - b) < eps*(fabs(a) + fabs(b)) ) return false; return true; } /** * Check if two histograms have the same bins. */ bool checkBins(const Histogram1D & h1, const Histogram1D & h2) const { if (_neq( h1.ax->upperEdge(), h2.ax->upperEdge()) || _neq( h1.ax->lowerEdge(), h2.ax->lowerEdge()) || h1.ax->bins() != h2.ax->bins() ) return false; for ( int i = 0; i < h1.ax->bins(); ++i ) { if ( _neq(h1.ax->binUpperEdge(i), h2.ax->binUpperEdge(i)) || _neq(h1.ax->binLowerEdge(i), h2.ax->binLowerEdge(i)) ) return false; } return true; } /** * Check if two histograms have the same bins. */ bool checkBins(const Histogram2D & h1, const Histogram2D & h2) const { if (_neq( h1.xax->upperEdge(), h2.xax->upperEdge()) || _neq( h1.xax->lowerEdge(), h2.xax->lowerEdge()) || h1.xax->bins() != h2.xax->bins() ) return false; if (_neq( h1.yax->upperEdge(), h2.yax->upperEdge()) || _neq( h1.yax->lowerEdge(), h2.yax->lowerEdge()) || h1.yax->bins() != h2.yax->bins() ) return false; for ( int i = 0; i < h1.xax->bins(); ++i ) { if ( _neq(h1.xax->binUpperEdge(i), h2.xax->binUpperEdge(i)) || _neq(h1.xax->binLowerEdge(i), h2.xax->binLowerEdge(i)) ) return false; } for ( int i = 0; i < h1.yax->bins(); ++i ) { if ( _neq(h1.yax->binUpperEdge(i), h2.yax->binUpperEdge(i)) || _neq(h1.yax->binLowerEdge(i), h2.yax->binLowerEdge(i)) ) return false; } return true; } /** * LWH cannot create an IHistogram2D by adding two IHistogram2D. */ IHistogram2D * add(const std::string & path, const IHistogram2D & hist1, const IHistogram2D & hist2) { return add(path, dynamic_cast<const Histogram2D &>(hist1), dynamic_cast<const Histogram2D &>(hist2)); } /** * LWH cannot create an IHistogram2D by adding two IHistogram2D. */ Histogram2D * add(const std::string & path, const Histogram2D & h1, const Histogram2D & h2) { if ( !checkBins(h1, h2) ) return 0; Histogram2D * h = new Histogram2D(h1); h->setTitle(path.substr(path.rfind('/') + 1)); h->add(h2); if ( !tree->insert(path, h) ) { delete h; return 0; } return h; } /** * LWH cannot create an IHistogram2D by subtracting two IHistogram2D. */ Histogram2D * subtract(const std::string & path, const Histogram2D & h1, const Histogram2D & h2) { if ( !checkBins(h1, h2) ) { //std::cout << "!!!!!!!" << std::endl; return 0; } Histogram2D * h = new Histogram2D(h1); h->setTitle(path.substr(path.rfind('/') + 1)); for ( int ix = 0; ix < h->xax->bins() + 2; ++ix ) for ( int iy = 0; iy < h->yax->bins() + 2; ++iy ) { h->sum[ix][iy] += h2.sum[ix][iy]; h->sumw[ix][iy] -= h2.sumw[ix][iy]; h->sumw2[ix][iy] += h2.sumw2[ix][iy]; h->sumxw[ix][iy] -= h2.sumxw[ix][iy]; h->sumx2w[ix][iy] -= h2.sumx2w[ix][iy]; h->sumyw[ix][iy] -= h2.sumyw[ix][iy]; h->sumy2w[ix][iy] -= h2.sumy2w[ix][iy]; } if ( !tree->insert(path, h) ) { //std::cout << "&&&&&&&" << std::endl; delete h; return 0; } return h; } /** * LWH cannot create an IHistogram2D by subtracting two IHistogram2D. */ IHistogram2D * subtract(const std::string & path, const IHistogram2D & h1, const IHistogram2D & h2) { return subtract(path, dynamic_cast<const Histogram2D &>(h1), dynamic_cast<const Histogram2D &>(h2)); } /** * LWH cannot create an IHistogram2D by multiplying two IHistogram2D. */ IHistogram2D * multiply(const std::string & path, const IHistogram2D & h1, const IHistogram2D & h2) { return multiply(path, dynamic_cast<const Histogram2D &>(h1), dynamic_cast<const Histogram2D &>(h2)); } /** * LWH cannot create an IHistogram2D by multiplying two IHistogram2D. */ Histogram2D * multiply(const std::string & path, const Histogram2D & h1, const Histogram2D & h2) { if ( !checkBins(h1, h2) ) return 0; Histogram2D * h = new Histogram2D(h1); h->setTitle(path.substr(path.rfind('/') + 1)); for ( int ix = 0; ix < h->xax->bins() + 2; ++ix ) for ( int iy = 0; iy < h->yax->bins() + 2; ++iy ) { h->sumw[ix][iy] *= h2.sumw[ix][iy]; h->sumw2[ix][iy] += h1.sumw[ix][iy]*h1.sumw[ix][iy]*h2.sumw2[ix][iy] + h2.sumw[ix][iy]*h2.sumw[ix][iy]*h1.sumw2[ix][iy]; } if ( !tree->insert(path, h) ) { delete h; return 0; } return h; } /** * LWH cannot create an IHistogram2D by dividing two IHistogram2D. */ DataPointSet * divide(const std::string & path, const Histogram2D & h1, const Histogram2D & h2) { if ( !checkBins(h1,h2) ) return 0; DataPointSet * h = new DataPointSet(3); h->setTitle(path.substr(path.rfind('/') + 1)); for (int ix = 0; ix < h1.xax->bins(); ++ix) { const double xbinwidth = h1.xax->binWidth(ix); const double xbincentre = ( h1.xax->binLowerEdge(ix) + h1.xax->binUpperEdge(ix) ) / 2.0; for (int iy = 0; iy < h1.yax->bins(); ++iy) { const double ybinwidth = h1.yax->binWidth(iy); const double ybincentre = ( h1.yax->binLowerEdge(iy) + h1.yax->binUpperEdge(iy) ) / 2.0; IDataPoint* point = h->addPoint(); IMeasurement* x = point->coordinate(0); x->setValue(xbincentre); x->setErrorPlus(xbinwidth/2.0); x->setErrorMinus(xbinwidth/2.0); IMeasurement* y = point->coordinate(1); y->setValue(ybincentre); y->setErrorPlus(ybinwidth/2.0); y->setErrorMinus(ybinwidth/2.0); double zval(0), zerr(0); if ( h1.binHeight(ix, iy) == 0 || h2.binHeight(ix, iy) == 0 ) { /// @todo Bad way of handling div by zero! zval = 0.0; zerr = 0.0; } else { zval = h1.binHeight(ix, iy) / h2.binHeight(ix, iy); double z1relerr = h1.binError(ix, iy)/h1.binHeight(ix,iy); double z2relerr = h2.binError(ix, iy)/h2.binHeight(ix,iy); zerr = zval * sqrt(pow(z1relerr, 2) + pow(z2relerr, 2)); } IMeasurement* z = point->coordinate(2); z->setValue(zval); z->setErrorPlus(zerr); z->setErrorMinus(zerr); } } if ( !tree->insert(path, h) ) { delete h; return 0; } return h; } /** * LWH cannot create an IHistogram2D by dividing two IHistogram2D. */ IDataPointSet * divide(const std::string & path, const IHistogram2D & h1, const IHistogram2D & h2) { return divide(path, dynamic_cast<const Histogram1D &>(h1), dynamic_cast<const Histogram1D &>(h2)); } /** * LWH cannot create an IHistogram3D by adding two IHistogram3D. */ IHistogram3D * add(const std::string &, const IHistogram3D &, const IHistogram3D &) { return error<IHistogram3D>("3D histograms"); } /** * LWH cannot create an IHistogram3D by subtracting two IHistogram3D. */ IHistogram3D * subtract(const std::string &, const IHistogram3D &, const IHistogram3D &) { return error<IHistogram3D>("3D histograms"); } /** * LWH cannot create an IHistogram3D by multiplying two IHistogram3D. */ IHistogram3D * multiply(const std::string &, const IHistogram3D &, const IHistogram3D &) { return error<IHistogram3D>("3D histograms"); } /** * LWH cannot create an IHistogram3D by dividing two IHistogram3D. */ IHistogram3D * divide(const std::string &, const IHistogram3D &, const IHistogram3D &) { return error<IHistogram3D>("3D histograms"); } /** * LWH cannot create an IHistogram1D by projecting an IHistogram2D * along its x axis. */ IHistogram1D * projectionX(const std::string & path, const IHistogram2D & h) { return projectionX(path, dynamic_cast<const Histogram2D &>(h)); } /** * LWH cannot create an IHistogram1D by projecting an IHistogram2D * along its x axis. */ Histogram1D * projectionX(const std::string & path, const Histogram2D & h) { return sliceX(path, h, 0, h.yax->bins() - 1); } /** * LWH cannot create an IHistogram1D by projecting an IHistogram2D * along its y axis. */ IHistogram1D * projectionY(const std::string & path, const IHistogram2D & h) { return projectionY(path, dynamic_cast<const Histogram2D &>(h)); } /** * LWH cannot create an IHistogram1D by projecting an IHistogram2D * along its y axis. */ Histogram1D * projectionY(const std::string & path, const Histogram2D & h) { return sliceY(path, h, 0, h.xax->bins() - 1); } /** * LWH cannot create an IHistogram1D by slicing an IHistogram2D * parallel to the y axis at a given bin. */ IHistogram1D * sliceX(const std::string & path, const IHistogram2D & h, int i) { return sliceX(path, dynamic_cast<const Histogram2D &>(h), i, i); } /** * LWH cannot create an IHistogram1D by slicing an IHistogram2D * parallel to the y axis at a given bin. */ Histogram1D * sliceX(const std::string & path, const Histogram2D & h, int i) { return sliceX(path, h, i, i); } /** * LWH cannot create an IHistogram1D by slicing an IHistogram2D * parallel to the x axis at a given bin. */ IHistogram1D * sliceY(const std::string & path, const IHistogram2D & h, int i) { return sliceY(path, dynamic_cast<const Histogram2D &>(h), i, i); } /** * LWH cannot create an IHistogram1D by slicing an IHistogram2D * parallel to the x axis at a given bin. */ Histogram1D * sliceY(const std::string & path, const Histogram2D & h, int i) { return sliceY(path, h, i, i); } /** * LWH cannot create an IHistogram1D by slicing an IHistogram2D * parallel to the y axis between two bins (inclusive). */ IHistogram1D * sliceX(const std::string & path, const IHistogram2D & h, int il, int iu) { return sliceX(path, dynamic_cast<const Histogram2D &>(h), il, iu); } /** * LWH cannot create an IHistogram1D by slicing an IHistogram2D * parallel to the y axis between two bins (inclusive). */ Histogram1D * sliceX(const std::string & path, const Histogram2D & h2, int il, int iu) { Histogram1D * h1; if ( h2.xfax ) h1 = new Histogram1D(h2.xfax->bins(), h2.xfax->lowerEdge(), h2.xfax->upperEdge()); else { std::vector<double> edges(h2.xax->bins() + 1); edges.push_back(h2.xax->lowerEdge()); for ( int i = 0; i < h2.xax->bins(); ++i ) edges.push_back(h2.xax->binLowerEdge(i)); h1 = new Histogram1D(edges); } for ( int ix = 0; ix < h2.xax->bins() + 2; ++ix ) for ( int iy = il + 2; iy <= iu + 2; ++iy ) { h1->sum[ix] += h2.sum[ix][iy]; h1->sumw[ix] += h2.sumw[ix][iy]; h1->sumw2[ix] += h2.sumw2[ix][iy]; h1->sumxw[ix] += h2.sumxw[ix][iy]; h1->sumx2w[ix] += h2.sumx2w[ix][iy]; } if ( !tree->insert(path, h1) ) { delete h1; return 0; } return h1; } /** * LWH cannot create an IHistogram1D by slicing an IHistogram2D * parallel to the x axis between two bins (inclusive). */ IHistogram1D * sliceY(const std::string & path, const IHistogram2D & h, int il, int iu) { return sliceY(path, dynamic_cast<const Histogram2D &>(h), il, iu); } Histogram1D * sliceY(const std::string & path, const Histogram2D & h2, int il, int iu) { Histogram1D * h1; if ( h2.yfax ) h1 = new Histogram1D(h2.yfax->bins(), h2.yfax->lowerEdge(), h2.yfax->upperEdge()); else { std::vector<double> edges(h2.yax->bins() + 1); edges.push_back(h2.yax->lowerEdge()); for ( int i = 0; i < h2.yax->bins(); ++i ) edges.push_back(h2.yax->binLowerEdge(i)); h1 = new Histogram1D(edges); } for ( int iy = 0; iy < h2.yax->bins() + 2; ++iy ) for ( int ix = il + 2; ix <= iu + 2; ++ix ) { h1->sum[iy] += h2.sum[ix][iy]; h1->sumw[iy] += h2.sumw[ix][iy]; h1->sumw2[iy] += h2.sumw2[ix][iy]; h1->sumxw[iy] += h2.sumyw[ix][iy]; h1->sumx2w[iy] += h2.sumy2w[ix][iy]; } if ( !tree->insert(path, h1) ) { delete h1; return 0; } return h1; } /** * LWH cannot create an IHistogram2D by projecting an IHistogram3D * on the x-y plane. */ IHistogram2D * projectionXY(const std::string &, const IHistogram3D &) { return error<IHistogram2D>("2D histograms"); } /** * LWH cannot create an IHistogram2D by projecting an IHistogram3D * on the x-z plane. */ IHistogram2D * projectionXZ(const std::string &, const IHistogram3D &) { return error<IHistogram2D>("2D histograms"); } /** * LWH cannot create an IHistogram2D by projecting an IHistogram3D * on the y-z plane. */ IHistogram2D * projectionYZ(const std::string &, const IHistogram3D &) { return error<IHistogram2D>("2D histograms"); } /** * LWH cannot create an IHistogram2D by slicing an IHistogram3D * perpendicular to the Z axis, between "index1" and "index2" * (inclusive). */ IHistogram2D * sliceXY(const std::string &, const IHistogram3D &, int, int) { return error<IHistogram2D>("2D histograms"); } /** * LWH cannot create an IHistogram2D by slicing an IHistogram3D * perpendicular to the Y axis, between "index1" and "index2" * (inclusive). */ IHistogram2D * sliceXZ(const std::string &, const IHistogram3D &, int, int) { return error<IHistogram2D>("2D histograms"); } /** * LWH cannot create an IHistogram2D by slicing an IHistogram3D * perpendicular to the X axis, between "index1" and "index2" * (inclusive). */ IHistogram2D * sliceYZ(const std::string &, const IHistogram3D &, int, int) { return error<IHistogram2D>("2D histograms"); } private: /// Compare two floating point numbers with a degree of fuzziness /// expressed by the fractional @a tolerance parameter. inline bool fuzzyEquals(double a, double b, double tolerance=1E-5) { const double absavg = fabs(a + b)/2.0; const double absdiff = fabs(a - b); const bool rtn = (absavg == 0.0 && absdiff == 0.0) || absdiff/absavg < tolerance; return rtn; } /** Throw a suitable error. */ template <typename T> static T * error(std::string feature) { throw std::runtime_error("LWH cannot handle " + feature + "."); return 0; } /** The tree where the actual histograms are stored. */ Tree * tree; }; } #endif /* LWH_HistogramFactory_H */ ��������������������������������������������������������������������������������rivet-1.8.3/include/LWH/Measurement.h���������������������������������������������������������������0000644�0001750�0001750�00000004220�12116077757�015576� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_Measurement_H #define LWH_Measurement_H // // This is the declaration of the Measurement class representing // #include <limits> #include <cmath> #include <algorithm> #include "AIMeasurement.h" namespace LWH { using namespace AIDA; /** * Basic user-level interface class for holding a single "measurement" * with positive and negative errors (to allow for asymmetric errors). * "IMeasurement" = "value" + "errorPlus" - "errorMinus" */ class Measurement: public IMeasurement { public: /** * Standard constructor. */ Measurement(double v = 0.0, double ep = 0.0, double em = 0.0) : val(v), errp(ep), errm(em) {} /** * Copy constructor. */ Measurement(const Measurement & m) :IMeasurement(m), val(m.val), errp(m.errp), errm(m.errm) {} /** * Destructor. */ virtual ~Measurement() { /* nop */; } /** * Get the value of the Measurement. * @return The value of the Measurement. */ double value() const { return val; } /** * Get the plus error of the IMeasurement. * @return The plus error. */ double errorPlus() const { return errp; } /** * Get the minus error of the IMeasurement. * @return The minus error. */ double errorMinus() const { return errm; } /** * Set the value of the IMeasurement. * @param v The new value of the IMeasurement. * @return false If the value cannot be set. */ bool setValue(double v) { val = v; return true; } /** * Set the plus error of the IMeasurement. * @param ep The new plus error of the IMeasurement. * @return false If the error cannot be set or it is negative. */ bool setErrorPlus(double ep) { errp = ep; return ep < 0.0; } /** * Set the minus error of the IMeasurement. * @param em The new minus error of the IMeasurement. * @return false If the error cannot be set or it is negative. */ bool setErrorMinus(double em) { errm = em; return em < 0.0; } private: /** * The value. */ double val; /** * The plus error. */ double errp; /** * The minus error. */ double errm; }; } #endif /* LWH_Measurement_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/ManagedObject.h�������������������������������������������������������������0000644�0001750�0001750�00000003455�12116077757�016005� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_ManagedObject_H #define LWH_ManagedObject_H // // This is the declaration of the ManagedObject class. // #include "AIManagedObject.h" #include <iostream> #ifdef HAVE_ROOT #include "TFile.h" #endif namespace LWH { using namespace AIDA; /** * The creator of trees. */ class ManagedObject: public IManagedObject { public: /// Destructor. virtual ~ManagedObject() {} /** * Encode sensitive characters as XML entities. */ std::string encodeForXML(const std::string& in) { std::string out = in; typedef std::pair<std::string, std::string> CharsToEntities; std::vector<CharsToEntities> cs2es; // Ampersand has to be first! cs2es.push_back(std::make_pair("&", "&")); cs2es.push_back(std::make_pair("\"", """)); cs2es.push_back(std::make_pair("<", "<")); cs2es.push_back(std::make_pair(">", ">")); for (std::vector<CharsToEntities>::const_iterator c2e = cs2es.begin(); c2e != cs2es.end(); ++c2e) { size_t pos = 0; while (true) { if (pos != 0) ++pos; pos = out.find(c2e->first, pos); if (pos != std::string::npos) { out.replace(pos, 1, c2e->second); } else { break; } } } return out; } /** * Write out the object to the given stream in XML format. */ virtual bool writeXML(std::ostream & os, std::string path, std::string name) = 0; /** * Write out the object to the given stream in simple table format. */ virtual bool writeFLAT(std::ostream & os, std::string path, std::string name) = 0; #ifdef HAVE_ROOT /** * Write out the object to the given TFile in Root format. */ virtual bool writeROOT(TFile* file, std::string path, std::string name) = 0; #endif }; } #endif /* LWH_ManagedObject_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/LWH/AIHistogramFactory.h��������������������������������������������������������0000644�0001750�0001750�00000006707�12116077757�017024� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef LWH_AIHistogramFactory_H #define LWH_AIHistogramFactory_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class ICloud1D; class ICloud2D; class ICloud3D; class IBaseHistogram; class IHistogram1D; class IHistogram2D; class IHistogram3D; class IProfile1D; class IProfile2D; class IDataPointSet; class IHistogramFactory { public: virtual ~IHistogramFactory() {} virtual bool destroy(IBaseHistogram * hist) = 0; virtual IHistogram1D * createHistogram1D(const std::string &, const std::string &, int, double, double, const std::string & = "") = 0; virtual IHistogram1D * createHistogram1D(const std::string &, int, double, double) = 0; virtual IHistogram1D * createHistogram1D(const std::string &, const std::string & , const std::vector<double> &, const std::string & = "") = 0; virtual IHistogram1D * createCopy(const std::string &, const IHistogram1D &) = 0; virtual IHistogram1D * add(const std::string &, const IHistogram1D &, const IHistogram1D &) = 0; virtual IHistogram1D * subtract(const std::string &, const IHistogram1D &, const IHistogram1D &) = 0; virtual IHistogram1D * multiply(const std::string &, const IHistogram1D &, const IHistogram1D &) = 0; virtual IDataPointSet * divide(const std::string &, const IHistogram1D &, const IHistogram1D &) = 0; virtual IProfile1D * createProfile1D(const std::string &, const std::string &, int, double, double, const std::string & = "") = 0; virtual IProfile1D * createProfile1D(const std::string &, int, double, double) = 0; virtual IProfile1D * createProfile1D(const std::string &, const std::string & , const std::vector<double> &, const std::string & = "") = 0; virtual IProfile1D * createCopy(const std::string &, const IProfile1D &) = 0; // virtual IProfile1D * add(const std::string &, // const IProfile1D &, const IProfile1D &) = 0; // virtual IProfile1D * subtract(const std::string &, const IProfile1D &, // const IProfile1D &) = 0; // virtual IProfile1D * multiply(const std::string &, const IProfile1D &, // const IProfile1D &) = 0; // virtual IDataPointSet * divide(const std::string &, const IProfile1D &, // const IProfile1D &) = 0; virtual IHistogram2D * createHistogram2D(const std::string & path, const std::string & title, int nx, double xlo, double xup, int ny, double ylo, double yup, const std::string & = "") = 0; virtual IHistogram2D * createHistogram2D(const std::string & pathAndTitle, int nx, double xlo, double xup, int ny, double ylo, double yup) = 0; virtual IHistogram2D * createHistogram2D(const std::string & path, const std::string & title, const std::vector<double> & xedges, const std::vector<double> & yedges, const std::string & = "") = 0; virtual IHistogram2D * createCopy(const std::string & path, const IHistogram2D & hist) = 0; }; } /** @endcond */ #else #include "AIDA/IHistogramFactory.h" #endif #endif /* LWH_AIHistogramFactory_H */ ���������������������������������������������������������rivet-1.8.3/include/Rivet/��������������������������������������������������������������������������0000755�0001750�0001750�00000000000�12131473213�013561� 5����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Tools/��������������������������������������������������������������������0000755�0001750�0001750�00000000000�12131473213�014661� 5����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Tools/Utils.hh������������������������������������������������������������0000644�0001750�0001750�00000010323�12116077757�016321� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Utils_HH #define RIVET_Utils_HH #include <Rivet/Math/Math.hh> #include <cctype> #include <algorithm> #include <cerrno> namespace Rivet { inline int nocase_cmp(const string& s1, const string& s2) { string::const_iterator it1 = s1.begin(); string::const_iterator it2 = s2.begin(); while ( (it1 != s1.end()) && (it2 != s2.end()) ) { if(::toupper(*it1) != ::toupper(*it2)) { // < Letters differ? // Return -1 to indicate smaller than, 1 otherwise return (::toupper(*it1) < ::toupper(*it2)) ? -1 : 1; } // Proceed to the next character in each string ++it1; ++it2; } size_t size1 = s1.size(), size2 = s2.size(); // Cache lengths // Return -1,0 or 1 according to strings' lengths if (size1 == size2) return 0; return (size1 < size2) ? -1 : 1; } inline string toLower(const string& s) { string out = s; transform(out.begin(), out.end(), out.begin(), (int(*)(int)) tolower); return out; } inline string toUpper(const string& s) { string out = s; std::transform(out.begin(), out.end(), out.begin(), (int(*)(int)) toupper); return out; } inline bool startsWith(const string& s, const string& start) { if (s.length() < start.length()) return false; return s.substr(0, start.length()) == start; } /// Check whether a string @a end is found at the end of @a s inline bool endsWith(const string& s, const string& end) { if (s.length() < end.length()) return false; return s.substr(s.length() - end.length()) == end; } /// @brief Split a path string with colon delimiters. /// Ignores zero-length substrings. Designed for getting elements of filesystem paths, naturally. inline vector<string> pathsplit(const string& path) { const string delim = ":"; vector<string> dirs; string tmppath = path; while (true) { const size_t delim_pos = tmppath.find(delim); if (delim_pos == string::npos) break; const string dir = tmppath.substr(0, delim_pos); if (dir.length()) dirs.push_back(dir); // Don't insert "empties" tmppath.replace(0, delim_pos+1, ""); } if (tmppath.length()) dirs.push_back(tmppath); // Don't forget the trailing component! return dirs; } /// @deprecated Use @c pathsplit instead. inline vector<string> split(const string& path, const string& UNUSED(delim) = ":") { return pathsplit(path); } /// @brief Join several filesystem paths together with a delimiter character. /// Note that this does NOT join path elements together with a platform-portable /// directory delimiter, cf. the Python @c {os.path.join}! inline string pathjoin(const vector<string>& paths) { const string delim = ":"; string rtn; for (vector<string>::const_iterator is = paths.begin(); is != paths.end(); ++is) { if (rtn.size() > 0) rtn += delim; rtn += *is; } return rtn; } } #endif #ifndef CEDARSTD #define CEDARSTD namespace std { template <typename T> inline void operator+=(set<T>& s1, const set<T>& s2) { for (typename set<T>::const_iterator s = s2.begin(); s != s2.end(); ++s) { s1.insert(*s); } } template <typename T> inline set<T> operator+(const set<T>& s1, const set<T>& s2) { set<T> rtn(s1); rtn += s2; return rtn; } template <typename T> inline string join(const set<T>& s, const string& sep = " ") { stringstream out; bool first = false; for (typename set<T>::const_iterator it = s.begin(); it != s.end(); ++it) { if (first) { first = false; } else { out << sep; } out << *it; } return out.str(); } template <typename T> inline void operator+=(vector<T>& v1, const vector<T>& v2) { for (typename vector<T>::const_iterator s = v2.begin(); s != v2.end(); ++s) { v1.push_back(*s); } } template <typename T> inline vector<T> operator+(const vector<T>& v1, const vector<T>& v2) { vector<T> rtn(v1); rtn += v2; return rtn; } template <typename T> inline string join(const vector<T>& v, const string& sep = " ") { stringstream out; for (size_t i = 0; i < v.size(); ++i) { if (i != 0) out << sep; out << v[i]; } return out.str(); } } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Tools/TypeTraits.hh�������������������������������������������������������0000644�0001750�0001750�00000001465�12116077757�017340� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_TypeTraits_HH #define RIVET_TypeTraits_HH namespace Rivet { /// Mechanisms to allow references and pointers to templated types /// to be distinguished from one another (since C++ doesn't allow /// partial template specialisation for functions. /// Traits methods use specialisation of class/struct templates, and /// some trickery with typedefs and static const integral types (or /// enums) to implement partial function specialisation as a work-around. /// @cond INTERNAL struct RefType { }; struct PtrType { }; template <typename T> struct TypeTraits; template <typename U> struct TypeTraits<const U&> { typedef RefType ArgType; }; template <typename U> struct TypeTraits<const U*> { typedef PtrType ArgType; }; /// @endcond } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Tools/Logging.hh����������������������������������������������������������0000644�0001750�0001750�00000011160�12116077757�016607� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_LOGGING_HH #define RIVET_LOGGING_HH #include "Rivet/Rivet.hh" namespace Rivet { class Log { public: /// Log priority levels. enum Level { TRACE = 0, DEBUG = 10, INFO = 20, WARN = 30, WARNING = 30, ERROR = 40, CRITICAL = 50, ALWAYS = 50 }; /// Typedef for a collection of named logs. typedef std::map<std::string, Log*> LogMap; /// Typedef for a collection of named log levels. typedef std::map<std::string, int> LevelMap; /// Typedef for a collection of shell color codes, accessed by log level. typedef std::map<int, std::string> ColorCodes; private: /// A static map of existing logs: we don't make more loggers than necessary. static LogMap existingLogs; /// A static map of default log levels. static LevelMap defaultLevels; /// A static map of shell color codes for the log levels. static ColorCodes colorCodes; /// Shell color code for the end of the log levels. static std::string endColorCode; /// Show timestamp? static bool showTimestamp; /// Show log level? static bool showLogLevel; /// Show logger name? static bool showLoggerName; /// Use shell colour escape codes? static bool useShellColors; public: /// Set the log levels static void setLevel(const std::string& name, int level); static void setLevels(const LevelMap& logLevels); static void setShowTimestamp(bool showTime=true) { showTimestamp = showTime; } static void setShowLevel(bool showLevel=true) { showLogLevel = showLevel; } static void setShowLoggerName(bool showName=true) { showLoggerName = showName; } static void setUseColors(bool useColors=true) { useShellColors = useColors; } protected: /// @name Hidden constructors etc. //@{ /// Constructor 1 Log(const std::string& name); /// Constructor 2 Log(const std::string& name, int level); //@} static std::string getColorCode(int level); public: /// Get a logger with the given name. The level will be taken from the /// "requestedLevels" static map or will be INFO by default. static Log& getLog(const std::string& name); public: /// Get the priority level of this logger. int getLevel() const { return _level; } /// Set the priority level of this logger. Log& setLevel(int level) { _level = level; return *this; } /// Get a log level enum from a string. static Level getLevelFromName(const std::string& level); /// Get the std::string representation of a log level. static std::string getLevelName(int level); /// Get the name of this logger. std::string getName() const { return _name; } /// Set the name of this logger. Log& setName(const std::string& name) { _name = name; return *this; } /// Will this log level produce output on this logger at the moment? bool isActive(int level) const { return (level >= _level); } /// @name Explicit log methods //@{ void trace(const std::string& message) { log(TRACE, message); } void debug(const std::string& message) { log(DEBUG, message); } void info(const std::string& message) { log(INFO, message); } void warn(const std::string& message) { log(WARN, message); } void error(const std::string& message) { log(ERROR, message); } //@} private: /// This logger's name std::string _name; /// Threshold level for this logger. int _level; protected: /// Write a message at a particular level. void log(int level, const std::string& message); /// Turn a message string into the current log format. std::string formatMessage(int level, const std::string& message); public: /// A null output stream, used for piping discarded output to nowhere. /// @todo Hide this... std::ostream* const _nostream; /// The streaming operator can use Log's internals. friend std::ostream& operator<<(Log& log, int level); }; /// Streaming output to a logger must have a Log::Level/int as its first argument. std::ostream& operator<<(Log& log, int level); } // Neat CPU-conserving logging macros. Use by preference! // NB. Only usable in classes where a getLog() method is provided #define MSG_LVL(lvl, x) \ do { \ if (getLog().isActive(lvl)) { \ getLog() << lvl << x << endl; \ } \ } while (0) #define MSG_TRACE(x) MSG_LVL(Log::TRACE, x) #define MSG_DEBUG(x) MSG_LVL(Log::DEBUG, x) #define MSG_INFO(x) MSG_LVL(Log::INFO, x) #define MSG_WARNING(x) MSG_LVL(Log::WARNING, x) #define MSG_ERROR(x) MSG_LVL(Log::ERROR, x) #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Tools/ParticleIdUtils.hh��������������������������������������������������0000644�0001750�0001750�00000014113�12116077757�020263� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// ---------------------------------------------------------------------- // // ParticleIDMethods.hh // Author: Lynn Garren, Andy Buckley // // various utilities to extract information from the particle ID // // In the standard numbering scheme, the PID digits (base 10) are: // +/- n nr nl nq1 nq2 nq3 nj // It is expected that any 7 digit number used as a PID will adhere to // the Monte Carlo numbering scheme documented by the PDG. // Note that many "new" particles not explicitly defined already // can be expressed within this numbering scheme. // // These are the same methods that can be found in HepPDT::ParticleID // ---------------------------------------------------------------------- #ifndef RIVET_PARTICLE_ID_METHODS_HH #define RIVET_PARTICLE_ID_METHODS_HH #include "Rivet/Particle.hh" namespace Rivet { namespace PID { /// @name PID operations on Rivet::Particle wrapper //@{ // /// if this is a nucleus (ion), get A // /// Ion numbers are +/- 10LZZZAAAI. // int A(const int & pid ); // /// if this is a nucleus (ion), get Z // /// Ion numbers are +/- 10LZZZAAAI. // int Z(const int & pid ); // /// if this is a nucleus (ion), get nLambda // /// Ion numbers are +/- 10LZZZAAAI. // int lambda( const int & pid ); /// absolute value of particle ID int abspid( const int & pid ); /// is this a valid ID? bool isValid( const int & pid ); /// is this a valid meson ID? bool isMeson( const int & pid ); /// is this a valid baryon ID? bool isBaryon( const int & pid ); /// is this a valid diquark ID? bool isDiQuark( const int & pid ); /// is this a valid hadron ID? bool isHadron( const int & pid ); /// is this a valid lepton ID? bool isLepton( const int & pid ); /// is this a valid ion ID? bool isNucleus( const int & pid ); /// is this a valid pentaquark ID? bool isPentaquark( const int & pid ); /// is this a valid SUSY ID? bool isSUSY( const int & pid ); /// is this a valid R-hadron ID? bool isRhadron( const int & pid ); /// does this particle contain an up quark? bool hasUp( const int & pid ); /// does this particle contain a down quark? bool hasDown( const int & pid ); /// does this particle contain a strange quark? bool hasStrange( const int & pid ); /// does this particle contain a charm quark? bool hasCharm( const int & pid ); /// does this particle contain a bottom quark? bool hasBottom( const int & pid ); /// does this particle contain a top quark? bool hasTop( const int & pid ); /// jSpin returns 2J+1, where J is the total spin int jSpin( const int & pid ); /// sSpin returns 2S+1, where S is the spin int sSpin( const int & pid ); /// lSpin returns 2L+1, where L is the orbital angular momentum int lSpin( const int & pid ); /// return 3 times the charge (3 x quark charge is an int) int threeCharge( const int & pid ); /// return the charge inline double charge( const int & pid ) { return threeCharge(pid)/3.0; } //@} ///////////////////////// /// @name PID operations on Rivet::Particle wrapper //@{ /// if this is a nucleus (ion), get A /// Ion numbers are +/- 10LZZZAAAI. // int A(const Particle& p) { return A(p.pdgId()); } /// if this is a nucleus (ion), get Z /// Ion numbers are +/- 10LZZZAAAI. // int Z(const Particle& p) { return Z(p.pdgId()); } /// if this is a nucleus (ion), get nLambda /// Ion numbers are +/- 10LZZZAAAI. // int lambda( const Particle& p) { return lambda(p.pdgId()); } /// absolute value of particle ID inline int abspid( const Particle& p) { return abspid(p.pdgId()); } /// is this a valid meson ID? inline bool isMeson( const Particle& p ) { return isMeson(p.pdgId()); } /// is this a valid baryon ID? inline bool isBaryon( const Particle& p ) { return isBaryon(p.pdgId()); } /// is this a valid diquark ID? inline bool isDiQuark( const Particle& p ) { return isDiQuark(p.pdgId()); } /// is this a valid hadron ID? inline bool isHadron( const Particle& p ) { return isHadron(p.pdgId()); } /// is this a valid lepton ID? inline bool isLepton( const Particle& p ) { return isLepton(p.pdgId()); } /// is this a valid ion ID? inline bool isNucleus( const Particle& p ) { return isNucleus(p.pdgId()); } /// is this a valid pentaquark ID? inline bool isPentaquark( const Particle& p ) { return isPentaquark(p.pdgId()); } /// is this a valid SUSY ID? inline bool isSUSY( const Particle& p ) { return isSUSY(p.pdgId()); } /// is this a valid R-hadron ID? inline bool isRhadron( const Particle& p ) { return isRhadron(p.pdgId()); } /// does this particle contain an up quark? inline bool hasUp( const Particle& p ) { return hasUp(p.pdgId()); } /// does this particle contain a down quark? inline bool hasDown( const Particle& p ) { return hasDown(p.pdgId()); } /// does this particle contain a strange quark? inline bool hasStrange( const Particle& p ) { return hasStrange(p.pdgId()); } /// does this particle contain a charm quark? inline bool hasCharm( const Particle& p ) { return hasCharm(p.pdgId()); } /// does this particle contain a bottom quark? inline bool hasBottom( const Particle& p ) { return hasBottom(p.pdgId()); } /// does this particle contain a top quark? inline bool hasTop( const Particle& p ) { return hasTop(p.pdgId()); } /// jSpin returns 2J+1, where J is the total spin inline int jSpin( const Particle& p ) { return jSpin(p.pdgId()); } /// sSpin returns 2S+1, where S is the spin inline int sSpin( const Particle& p ) { return sSpin(p.pdgId()); } /// lSpin returns 2L+1, where L is the orbital angular momentum inline int lSpin( const Particle& p ) { return lSpin(p.pdgId()); } /// return 3 times the charge (3 x quark charge is an int) inline int threeCharge( const Particle& p ) { return threeCharge(p.pdgId()); } /// return the charge inline double charge( const Particle& p ) { return threeCharge(p)/3.0; } //@} } } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Tools/RivetMT2.hh���������������������������������������������������������0000644�0001750�0001750�00000000633�12116077757�016640� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_MT2_HH #define RIVET_MT2_HH // Convenience wrapper for the m_T2 calculator of Cheng/Han // (arXiv:0810.5178). Could be adapted for other backends in future namespace Rivet { class FourMomentum; namespace mT2 { double mT2(const FourMomentum & a, const FourMomentum & b, const FourMomentum & pTmiss, double invisiblesMass); } } #endif �����������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Tools/Logging.fhh���������������������������������������������������������0000644�0001750�0001750�00000000153�12116077757�016755� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// $Id: $ #ifndef RIVET_LOGGING_FHH #define RIVET_LOGGING_FHH 1 namespace Rivet { class Log; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Tools/BinnedHistogram.hh��������������������������������������������������0000644�0001750�0001750�00000003176�12116077757�020306� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_BINNEDHISTOGRAM_HH #define RIVET_BINNEDHISTOGRAM_HH #include "Rivet/Rivet.hh" namespace Rivet { class Analysis; /** * BinnedHistogram contains a series of histograms of the same quantity * each in a different region of a second quantity. For example, a * BinnedHistogram may contain histograms of the cross section differential * in \f$ p_T \f$ in different \f$ \eta \f$ regions. **/ template<typename T> class BinnedHistogram { public: /// Create a new empty BinnedHistogram BinnedHistogram() { return; } /// Add a histogram in the region between @a binMin and @a binMax to this /// set of BinnedHistograms. const BinnedHistogram<T>& addHistogram(const T& binMin, const T& binMax, AIDA::IHistogram1D* histo); /// Fill the histogram that lies in the same region as @a bin with the value /// @a val of weight @a weight. AIDA::IHistogram1D* fill(const T& bin, const T& val, double weight); /// Scale histograms taking into account its "external" binwidth, i.e. by /// scale/binWidth void scale(const T& scale, Analysis* ana); const vector<AIDA::IHistogram1D*>& getHistograms() const { return _histos; } vector<AIDA::IHistogram1D*>& getHistograms() { return _histos; } private: map<T, AIDA::IHistogram1D*> _histosByUpperBound; map<T, AIDA::IHistogram1D*> _histosByLowerBound; vector<AIDA::IHistogram1D*> _histos; map<AIDA::IHistogram1D*, T> _binWidths; }; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Tools/osdir.hh������������������������������������������������������������0000644�0001750�0001750�00000011543�12116077757�016346� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * Copyright (C) 2002 Bart Vanhauwaert * * Permission to use, copy, modify, distribute and sell this software * for any purpose is hereby granted without fee. This license * includes (but is not limited to) standalone compilation or as part * of a larger project. * * This software is provided "as is" without express or implied warranty. * * For a full statement on warranty and terms and conditions for * copying, distribution and modification, please see the comment block * at the end of this file. * * Version 1 * */ #ifndef OSLINK_OSDIR_HEADER_H_ #define OSLINK_OSDIR_HEADER_H_ /// @cond OSDIR #if defined(unix) || defined(__unix) || defined(__unix__) #define OSLINK_OSDIR_POSIX #elif defined(_WIN32) #define OSLINK_OSDIR_WINDOWS #else #define OSLINK_OSDIR_NOTSUPPORTED #endif #include <string> #if defined(OSLINK_OSDIR_NOTSUPPORTED) namespace oslink { class directory { public: directory(const std::string&) { } operator void*() const { return (void*)0; } std::string next() { return ""; } }; } #elif defined(OSLINK_OSDIR_POSIX) #include <sys/types.h> #include <dirent.h> namespace oslink { class directory { public: directory(const std::string& aName) : handle(opendir(aName.c_str())), willfail(false) { if (!handle) willfail = true; else { dirent* entry = readdir(handle); if (entry) current = entry->d_name; else willfail = true; } } ~directory() { if (handle) closedir(handle); } operator void*() const { return willfail ? (void*)0:(void*)(-1); } std::string next() { std::string prev(current); dirent* entry = readdir(handle); if (entry) current = entry->d_name; else willfail = true; return prev; } private: DIR* handle; bool willfail; std::string current; }; } #elif defined(OSLINK_OSDIR_WINDOWS) #include <windows.h> #include <winbase.h> namespace oslink { class directory { public: directory(const std::string& aName) : handle(INVALID_HANDLE_VALUE), willfail(false) { // First check the attributes trying to access a non-directory with // FindFirstFile takes ages DWORD attrs = GetFileAttributes(aName.c_str()); if ( (attrs == 0xFFFFFFFF) || ((attrs && FILE_ATTRIBUTE_DIRECTORY) == 0) ) { willfail = true; return; } std::string Full(aName); // Circumvent a problem in FindFirstFile with c:\\* as parameter if ( (Full.length() > 0) && (Full[Full.length()-1] != '\\') ) Full += "\\"; WIN32_FIND_DATA entry; handle = FindFirstFile( (Full+"*").c_str(), &entry); if (handle == INVALID_HANDLE_VALUE) willfail = true; else current = entry.cFileName; } ~directory() { if (handle != INVALID_HANDLE_VALUE) FindClose(handle); } operator void*() const { return willfail ? (void*)0:(void*)(-1); } std::string next() { std::string prev = current; WIN32_FIND_DATA entry; int ok = FindNextFile(handle, &entry); if (!ok) willfail = true; else current = entry.cFileName; return current; } private: HANDLE handle; bool willfail; std::string current; }; } #endif /// @endcond #endif /** * * The "library", below, refers to the collection of software functions * and/or data contained in this file, prepared so as to be conveniently * compiled and linked with application programs (which use some of those * functions and data) to form executables. * * NO WARRANTY * * 1. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO * WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. * EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR * OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY * KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE * LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME * THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. * * 2. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN * WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY * AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU * FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR * CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE * LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING * RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A * FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF * SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH * DAMAGES. * * END OF TERMS AND CONDITIONS * */ �������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Tools/RivetPaths.hh�������������������������������������������������������0000644�0001750�0001750�00000005036�12116077757�017317� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_RivetPaths_HH #define RIVET_RivetPaths_HH namespace Rivet { /// @name Installation directory paths //@{ /// Get library install path std::string getLibPath(); /// Get data install path std::string getDataPath(); /// Get Rivet data install path std::string getRivetDataPath(); //@} /// @name Analysis library search paths //@{ /// Get Rivet analysis plugin library search paths std::vector<std::string> getAnalysisLibPaths(); /// Set the Rivet analysis plugin library search paths void setAnalysisLibPaths(const std::vector<std::string>& paths); /// Set the Rivet analysis plugin library search paths void addAnalysisLibPath(const std::string& extrapath); /// @brief Find the first file of the given name in the analysis library search dirs /// @note If none found, returns an empty string std::string findAnalysisLibFile(const std::string& filename); //@} /// @name Analysis data/metadata paths and search functions //@{ /// Get Rivet analysis reference data search paths std::vector<std::string> getAnalysisRefPaths(); /// @brief Find the first file of the given name in the ref data file search dirs /// @note If none found, returns an empty string std::string findAnalysisRefFile(const std::string& filename, const std::vector<std::string>& pathprepend=std::vector<std::string>(), const std::vector<std::string>& pathappend=std::vector<std::string>()); /// Get Rivet analysis info metadata search paths std::vector<std::string> getAnalysisInfoPaths(); /// @brief Find the first file of the given name in the analysis info file search dirs /// @note If none found, returns an empty string std::string findAnalysisInfoFile(const std::string& filename, const std::vector<std::string>& pathprepend=std::vector<std::string>(), const std::vector<std::string>& pathappend=std::vector<std::string>()); /// Get Rivet analysis plot style search paths std::vector<std::string> getAnalysisPlotPaths(); /// @brief Find the first file of the given name in the analysis plot file search dirs /// @note If none found, returns an empty string std::string findAnalysisPlotFile(const std::string& filename, const std::vector<std::string>& pathprepend=std::vector<std::string>(), const std::vector<std::string>& pathappend=std::vector<std::string>()); //@} } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Cmp.fhh�������������������������������������������������������������������0000644�0001750�0001750�00000001334�12116077757�015010� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Cmp_FHH #define RIVET_Cmp_FHH namespace Rivet { // Forward-declare the Cmp template class template <typename T> class Cmp; /// Enumerate the possible states of a Cmp object. enum CmpState { UNDEFINED = -2, //< Undefined state. ASC = -1, //< The two corresponding objects are in ascending order. ORDERED = -1, //< The two corresponding objects are ordered. EQUIVALENT = 0, //< The two corresponding objects are equivalent. DESC = 1, //< The two corresponding objects are in descending order. UNORDERED = 1, //< The two corresponding objects are anti-ordered. ANTIORDERED = 1 //< The two corresponding objects are anti-ordered. }; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/HistoFormat.hh������������������������������������������������������������0000644�0001750�0001750�00000004000�12116077757�016353� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_HistoFormat_HH #define RIVET_HistoFormat_HH #include "Rivet/Rivet.hh" namespace Rivet { /// Enumeration of available histogram output formats. enum HistoFormat { AIDAML, FLAT, ROOT }; /// Typedef for a map of histogram format enums to strings. typedef std::map<HistoFormat, std::string> HistoFormatMap; /// Typedef for a map of histogram format name strings to enums. typedef std::map<std::string, HistoFormat> HistoFormatMapR; /// Function which returns a map from histogram format enums to the corresponding name strings. inline HistoFormatMap getKnownHistoFormats() { HistoFormatMap hfmap; hfmap[AIDAML] = "AIDA"; hfmap[FLAT] = "FLAT"; #ifdef HAVE_ROOT hfmap[ROOT] = "ROOT"; #endif return hfmap; } /// Function which returns a map from histogram format name strings to the corresponding enums. inline HistoFormatMapR getKnownHistoFormatsR() { HistoFormatMap hfmap = getKnownHistoFormats(); HistoFormatMapR hfmapr; for (HistoFormatMap::const_iterator hf = hfmap.begin(); hf != hfmap.end(); ++hf) { hfmapr[hf->second] = hf->first; } return hfmapr; } /// Typedef for a collection of histogram format name enums. typedef std::vector<HistoFormat> HistoFormatList; /// Function which returns a vector of all the histogram format /// values in the HistoFormat enum. inline HistoFormatList getKnownHistoFormatEnums() { HistoFormatList names; HistoFormatMap hfmap = getKnownHistoFormats(); for (HistoFormatMap::const_iterator hf = hfmap.begin(); hf != hfmap.end(); ++hf) { names.push_back(hf->first); } return names; } /// Function which returns a vector of all the histogram format name strings. inline std::vector<std::string> getKnownHistoFormatNames() { vector<string> names; HistoFormatMap hfmap = getKnownHistoFormats(); for (HistoFormatMap::const_iterator hf = hfmap.begin(); hf != hfmap.end(); ++hf) { names.push_back(hf->second); } return names; } } #endif rivet-1.8.3/include/Rivet/ProjectionApplier.hh������������������������������������������������������0000644�0001750�0001750�00000010425�12116077757�017555� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_ProjectionApplier_HH #define RIVET_ProjectionApplier_HH #include "Rivet/Rivet.hh" #include "Rivet/Event.fhh" #include "Rivet/Projection.fhh" #include "Rivet/ProjectionHandler.hh" #include "Rivet/Tools/Logging.hh" namespace Rivet { /// @brief Common base class for Projection and Analysis, used for internal polymorphism /// /// Empty interface used for storing Projection and Analysis pointers in the /// same container (used by the ProjectionHandler) class ProjectionApplier { public: // The proj handler needs access to reset the _allowProjReg flag before calling a.init() // friend class ProjectionHandler; /// Constructor ProjectionApplier(); // Virtual destructor: ensure that inheritance is possible. virtual ~ProjectionApplier(); public: /// @name Metadata functions //@{ /// Get the name of this Projection or Analysis class virtual std::string name() const = 0; //@} /// @name Projection "getting" functions //@{ /// Get the contained projections, including recursion. std::set<ConstProjectionPtr> getProjections() const { return getProjHandler().getChildProjections(*this, ProjectionHandler::DEEP); } /// Get the named projection, specifying return type via a template argument. template <typename PROJ> const PROJ& getProjection(const std::string& name) const { const Projection& p = getProjHandler().getProjection(*this, name); return pcast<PROJ>(p); } /// Get the named projection (non-templated, so returns as a reference to a /// Projection base class). const Projection& getProjection(const std::string& name) const { return getProjHandler().getProjection(*this, name); } //@} /// @name Projection applying functions //@{ /// Apply the supplied projection on @a event. template <typename PROJ> const PROJ& applyProjection(const Event& evt, const PROJ& proj) const { return pcast<PROJ>(_applyProjection(evt, proj)); } /// Apply the supplied projection on @a event. template <typename PROJ> const PROJ& applyProjection(const Event& evt, const Projection& proj) const { return pcast<PROJ>(_applyProjection(evt, proj)); } /// Apply the named projection on @a event. template <typename PROJ> const PROJ& applyProjection(const Event& evt, const std::string& name) const { return pcast<PROJ>(_applyProjection(evt, name)); } //@} protected: Log& getLog() const { return Log::getLog("Rivet.ProjectionHandler"); } /// Get a reference to the ProjectionHandler for this thread. ProjectionHandler& getProjHandler() const { return _projhandler; } protected: /// @name Projection registration functions //@{ /// Register a contained projection. The type of the argument is used to /// instantiate a new projection internally: this new object is applied to /// events rather than the argument object. Hence you are advised to only use /// locally-scoped Projection objects in your Projection and Analysis /// constructors, and to avoid polymorphism (e.g. handling @c ConcreteProjection /// via a pointer or reference to type @c Projection) since this will screw /// up the internal type management. template <typename PROJ> const PROJ& addProjection(const PROJ& proj, const std::string& name) { const Projection& reg = _addProjection(proj, name); const PROJ& rtn = dynamic_cast<const PROJ&>(reg); return rtn; } /// Untemplated function to do the work... const Projection& _addProjection(const Projection& proj, const std::string& name); //@} private: /// Non-templated version of string-based applyProjection, to work around /// header dependency issue. const Projection& _applyProjection(const Event& evt, const std::string& name) const; /// Non-templated version of proj-based applyProjection, to work around /// header dependency issue. const Projection& _applyProjection(const Event& evt, const Projection& proj) const; protected: /// Flag to forbid projection registration in analyses until the init phase bool _allowProjReg; private: /// Pointer to projection handler. ProjectionHandler& _projhandler; }; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/HistoHandler.hh�����������������������������������������������������������0000644�0001750�0001750�00000006571�12116077757�016517� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_HistoHandler_HH #define RIVET_HistoHandler_HH #include "Rivet/Rivet.hh" #include "Rivet/Tools/Logging.fhh" #include "Rivet/Analysis.fhh" namespace Rivet { /// Forward declaration of Histo base class. class AnalysisObject; /// @brief The projection handler is a central repository for histograms (and /// other analysis stats objects) to be used in a Rivet analysis run. This /// eliminates the need for analysis classes to contain large numbers of /// histogram pointer members, and allows histograms to be accessed via more /// user-friendly names than C++ variable names allow. /// /// The core of the HistoHandler design is that it is a singleton class, /// essentially a wrapper around a map of @c AnalysisObject*, indexed by a /// hash of the registering object and its local name for the registered /// projection. /// class HistoHandler { private: /// @name Construction. */ //@{ /// The standard constructor. HistoHandler() { } /// Private destructor means no inheritance from this class. ~HistoHandler(); /// The assignment operator is hidden. HistoHandler& operator=(const HistoHandler&); /// The copy constructor is hidden. HistoHandler(const HistoHandler&); //@} public: /// Singleton getter function static HistoHandler& getInstance() { static HistoHandler _instance; return _instance; } //////////////////////////////////////////////////////// public: /// @name Histo registration. */ //@{ /// Copy an analysis object into a central collection and return the copy. const AnalysisObject* registerAnalysisObject(const Analysis& parent, const AnalysisObject& histo, const string& name); /// @name Histo retrieval. */ //@{ /// Retrieve a named histo for the given Analysis parent (const version). const AnalysisObject* getAnalysisObject(const Analysis& parent, const string& name) const { return _getAnalysisObject(parent, name); } /// Retrieve a named histo for the given Analysis parent (non-const version). AnalysisObject* getAnalysisObject(const Analysis& parent, const string& name) { return _getAnalysisObject(parent, name); } //@} /// Histo clearing method: deletes all known histos and empties the /// reference collections. void clear(); private: AnalysisObject* _getAnalysisObject(const Analysis& parent, const string& name) const; /// Get a logger. Log& getLog() const; private: /// Typedef for histo pointer, to allow conversion to a smart pointer in this context. typedef const AnalysisObject* HistoHandle; /// Typedef for a vector of histo pointers. typedef vector<HistoHandle> HistoHandles; /// @brief Typedef for the structure used to contain named histos for a /// particular containing Analysis. typedef map<const string, HistoHandle> NamedHistos; /// Structure used to map a containing Analysis to its set of histos. typedef map<const Analysis*, NamedHistos> NamedHistosMap; /// Core data member, associating a given Analysis to its histos. NamedHistosMap _namedhistos; }; } #endif ���������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Cmp.hh��������������������������������������������������������������������0000644�0001750�0001750�00000022621�12116077757�014644� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Cmp_HH #define RIVET_Cmp_HH #include "Rivet/Rivet.hh" #include "Rivet/Projection.hh" #include "Cmp.fhh" #include <typeinfo> namespace Rivet { /// Helper class when checking the ordering of two objects. /// /// Cmp is a helper class to be used when checking the ordering of two /// objects. When implicitly converted to an integer the value will be /// negative if the two objects used in the constructor are ordered and /// positive if they are not. Zero will be returned if they are equal. /// /// The main usage of the Cmp class is if several variables should be /// checked for ordering in which case several Cmp objects can be /// combined as follows: <code>cmp(a1, a2) || cmp(b1, b2) || cmp(c1, /// c2)</code> where cmp is a global function for easy creation of Cmp /// objects. template <typename T> class Cmp { public: /// @name Standard constructors etc. //@{ /// The default constructor. Cmp(const T& t1, const T& t2) : _value(UNDEFINED), _objects(&t1, &t2) { } /// The copy constructor. template <typename U> Cmp(const Cmp<U>& x) : _value(x), _objects(0, 0) { } /// The destructor is not virtual since this is not intended to be a base class. ~Cmp() { }; /// The assignment operator. template <typename U> const Cmp<T>& operator=(const Cmp<U>& x) { _value = x; return *this; } //@} public: /// Automatically convert to an enum. operator CmpState() const { _compare(); return _value; } /// Automatically convert to an integer. operator int() const { _compare(); return _value; } /// If this state is equivalent, set this state to the state of \a c. template <typename U> const Cmp<T>& operator||(const Cmp<U>& c) const { _compare(); if (_value == EQUIVALENT) _value = c; return *this; } private: /// Perform the actual comparison if necessary. void _compare() const { if (_value == UNDEFINED) { less<T> l; if ( l(*_objects.first, *_objects.second) ) _value = ORDERED; else if ( l(*_objects.second, *_objects.first) ) _value = UNORDERED; else _value = EQUIVALENT; } } /// The state of this object. mutable CmpState _value; /// The objects to be compared. pair<const T*, const T*> _objects; }; /// @brief Specialization of Cmp for checking the ordering of two @a {Projection}s. /// /// Specialization of the Cmp helper class to be used when checking the /// ordering of two Projection objects. When implicitly converted to an /// integer the value will be negative if the two objects used in the /// constructor are ordered and positive if they are not. Zero will be /// returned if they are equal. This specialization uses directly the /// virtual compare() function in the Projection class. /// /// The main usage of the Cmp class is if several variables should be /// checked for ordering in which case several Cmp objects can be /// combined as follows: <code>cmp(a1, a2) || cmp(b1, b2) || cmp(c1, /// c2)</code> where cmp is a global function for easy creation of Cmp /// objects. template <> class Cmp<Projection> { public: /// @name Standard constructors and destructors. //@{ /// The default constructor. Cmp(const Projection& p1, const Projection& p2) : _value(UNDEFINED), _objects(&p1, &p2) { } /// The copy constructor. template <typename U> Cmp(const Cmp<U>& x) : _value(x), _objects(0, 0) { } /// The destructor is not virtual since this is not intended to be a base class. ~Cmp() { }; /// The assignment operator. template <typename U> const Cmp<Projection>& operator=(const Cmp<U>& x) { _value = x; return *this; } //@} public: /// Automatically convert to an enum. operator CmpState() const { _compare(); return _value; } /// Automatically convert to an integer. operator int() const { _compare(); return _value; } /// If this state is equivalent, set this state to the state of \a c. template <typename U> const Cmp<Projection>& operator||(const Cmp<U>& c) const { _compare(); if (_value == EQUIVALENT) _value = c; return *this; } private: /// Perform the actual comparison if necessary. void _compare() const { if (_value == UNDEFINED) { const std::type_info& id1 = typeid(*_objects.first); const std::type_info& id2 = typeid(*_objects.second); if (id1.before(id2)) _value = ORDERED; else if (id2.before(id1)) _value = UNORDERED; else { int c = _objects.first->compare(*_objects.second); if (c < 0) _value = ORDERED; else if (c > 0) _value = UNORDERED; else _value = EQUIVALENT; } } } private: /// The state of this object. mutable CmpState _value; /// The objects to be compared. pair<const Projection*, const Projection*> _objects; }; /// @brief Specialization of Cmp for checking the ordering of two floating point numbers. /// /// When implicitly converted to an integer the value will be negative if the /// two objects used in the constructor are ordered and positive if they are /// not. Zero will be returned if they are equal. This specialization uses the /// Rivet fuzzyEquals function to indicate equivalence protected from /// numerical precision effects. /// /// The main usage of the Cmp class is if several variables should be /// checked for ordering in which case several Cmp objects can be /// combined as follows: <code>cmp(a1, a2) || cmp(b1, b2) || cmp(c1, /// c2)</code> where cmp is a global function for easy creation of Cmp /// objects. template <> class Cmp<double> { public: /// @name Standard constructors and destructors. //@{ /// The default constructor. Cmp(const double p1, const double p2) : _value(UNDEFINED), _numA(p1), _numB(p2) { } /// The copy constructor. template <typename U> Cmp(const Cmp<U>& x) : _value(x), _numA(0.0), _numB(0.0) { } /// The destructor is not virtual since this is not intended to be a base class. ~Cmp() { } /// The assignment operator. template <typename U> const Cmp<double>& operator=(const Cmp<U>& x) { _value = x; return *this; } //@} public: /// Automatically convert to an enum. operator CmpState() const { _compare(); return _value; } /// Automatically convert to an integer. operator int() const { _compare(); return _value; } /// If this state is equivalent, set this state to the state of \a c. template <typename U> const Cmp<double>& operator||(const Cmp<U>& c) const { _compare(); if (_value == EQUIVALENT) _value = c; return *this; } private: /// Perform the actual comparison if necessary. void _compare() const { if (_value == UNDEFINED) { if (fuzzyEquals(_numA,_numB)) _value = EQUIVALENT; else if (_numA < _numB) _value = ORDERED; else _value = UNORDERED; } } private: /// The state of this object. mutable CmpState _value; /// The objects to be compared. double _numA, _numB; }; /////////////////////////////////////////////////////////////////// /// Global helper function for easy creation of Cmp objects. template <typename T> inline Cmp<T> cmp(const T& t1, const T& t2) { return Cmp<T>(t1, t2); } /// Typedef for Cmp<Projection> typedef Cmp<Projection> PCmp; /// Global helper function for easy creation of Cmp<Projection> objects. inline Cmp<Projection> pcmp(const Projection& p1, const Projection& p2) { return Cmp<Projection>(p1, p2); } /// Global helper function for easy creation of Cmp<Projection> objects from /// two parent projections and their common name for the projection to be compared. inline Cmp<Projection> pcmp(const Projection& parent1, const Projection& parent2, const string& pname) { return Cmp<Projection>(parent1.getProjection(pname), parent2.getProjection(pname)); } /// Global helper function for easy creation of Cmp<Projection> objects from /// two parent projections and their common name for the projection to be compared. /// This version takes one parent as a pointer. inline Cmp<Projection> pcmp(const Projection* parent1, const Projection& parent2, const string& pname) { assert(parent1); return Cmp<Projection>(parent1->getProjection(pname), parent2.getProjection(pname)); } /// Global helper function for easy creation of Cmp<Projection> objects from /// two parent projections and their common name for the projection to be compared. /// This version takes one parent as a pointer. inline Cmp<Projection> pcmp(const Projection& parent1, const Projection* parent2, const string& pname) { assert(parent2); return Cmp<Projection>(parent1.getProjection(pname), parent2->getProjection(pname)); } /// Global helper function for easy creation of Cmp<Projection> objects from /// two parent projections and their common name for the projection to be compared. inline Cmp<Projection> pcmp(const Projection* parent1, const Projection* parent2, const string& pname) { assert(parent1); assert(parent2); return Cmp<Projection>(parent1->getProjection(pname), parent2->getProjection(pname)); } } #endif ���������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/ParticleBase.hh�����������������������������������������������������������0000644�0001750�0001750�00000005501�12116077757�016461� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_ParticleBase_HH #define RIVET_ParticleBase_HH #include "Rivet/Rivet.hh" #include "Rivet/Math/Vectors.hh" namespace Rivet { /// @brief Base class for particle-like things like Particle and Jet class ParticleBase { public: ParticleBase() { } virtual ~ParticleBase() { } // virtual FourMomentum& momentum() = 0; virtual const FourMomentum& momentum() const = 0; /// Struct for sorting by increasing transverse momentum in STL set, sort, etc. struct byPTAscending { bool operator()(const ParticleBase& left, const ParticleBase& right) const { double pt2left = left.momentum().pT2(); double pt2right = right.momentum().pT2(); return pt2left < pt2right; } bool operator()(const ParticleBase* left, const ParticleBase* right) const { return (*this)(*left, *right); } }; /// Struct for sorting by decreasing transverse momentum in STL set, sort etc. struct byPTDescending { bool operator()(const ParticleBase& left, const ParticleBase& right) const { return byPTAscending()(right, left); } bool operator()(const ParticleBase* left, const ParticleBase* right) const { return (*this)(*left, *right); } }; /// Struct for sorting by increasing transverse energy struct byETAscending { bool operator()(const ParticleBase& left, const ParticleBase& right) const { double pt2left = left.momentum().Et2(); double pt2right = right.momentum().Et2(); return pt2left < pt2right; } bool operator()(const ParticleBase* left, const ParticleBase* right) const { return (*this)(*left, *right); } }; /// Struct for sorting by decreasing transverse energy struct byETDescending { bool operator()(const ParticleBase& left, const ParticleBase& right) const { return byETAscending()(right, left); } bool operator()(const ParticleBase* left, const ParticleBase* right) const { return (*this)(*left, *right); } }; /// Struct for sorting by increasing energy struct byEAscending { bool operator()(const ParticleBase& left, const ParticleBase& right) const { double pt2left = left.momentum().E(); double pt2right = right.momentum().E(); return pt2left < pt2right; } bool operator()(const ParticleBase* left, const ParticleBase* right) const { return (*this)(*left, *right); } }; /// Struct for sorting by decreasing energy struct byEDescending { bool operator()(const ParticleBase& left, const ParticleBase& right) const { return byEAscending()(right, left); } bool operator()(const ParticleBase* left, const ParticleBase* right) const { return (*this)(*left, *right); } }; }; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/��������������������������������������������������������������0000755�0001750�0001750�00000000000�12131473213�016060� 5����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/UnstableFinalState.hh�����������������������������������������0000644�0001750�0001750�00000003442�12116077757�022154� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_UnstableFinalState_HH #define RIVET_UnstableFinalState_HH #include "Rivet/Projections/FinalState.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" namespace Rivet { /// @brief Project out all physical-but-decayed particles in an event. /// /// The particles returned by the UFS are unique unstable particles, such as /// hadrons which are decayed by the generator. If, for example, you set Ks /// and Lambda particles stable in the generator, they will not be returned by /// the UFS. Also, you should be aware that all unstable particles in a decay /// chain are returned: if you are looking for something like the number of B /// hadrons in an event and there is a decay chain from e.g. B** -> B, you /// will count both B mesons unless you are careful to check for /// ancestor/descendent relations between the particles. Duplicate particles /// in the event record, i.e. those which differ only in bookkeeping details /// or photon emissions, are stripped from the returned particles collection. class UnstableFinalState : public FinalState { public: /// @name Standard constructors and destructors. //@{ /// The default constructor. May specify the minimum and maximum /// pseudorapidity \f$ \eta \f$ and the min \f$ p_T \f$ (in GeV). UnstableFinalState(double mineta = -MAXRAPIDITY, double maxeta = MAXRAPIDITY, double minpt = 0.0*GeV) : FinalState(mineta,maxeta,minpt) { setName("UnstableFinalState"); } /// Clone on the heap. virtual const Projection* clone() const { return new UnstableFinalState(*this); } //@} protected: /// Apply the projection to the event. virtual void project(const Event& e); }; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/ChargedFinalState.hh������������������������������������������0000644�0001750�0001750�00000002315�12116077757�021732� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_ChargedFinalState_HH #define RIVET_ChargedFinalState_HH #include "Rivet/Tools/Logging.hh" #include "Rivet/Rivet.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { /// @brief Project only charged final state particles. class ChargedFinalState : public FinalState { public: /// @name Constructors //@{ ChargedFinalState(const FinalState& fsp); /// Single eta-range constructor. ChargedFinalState(double mineta = -MAXRAPIDITY, double maxeta = MAXRAPIDITY, double minpt = 0.0*GeV); /// A constructor which allows to specify multiple eta ranges /// and the min \f$ p_T \f$. ChargedFinalState(const vector<pair<double, double> >& etaRanges, double minpt = 0.0*GeV); /// Clone on the heap. virtual const Projection* clone() const { return new ChargedFinalState(*this); } //@} protected: /// Apply the projection on the supplied event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; }; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/FastJets.hh���������������������������������������������������0000644�0001750�0001750�00000017074�12116077757�020155� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_FastJets_HH #define RIVET_FastJets_HH #include "Rivet/Projection.hh" #include "Rivet/Projections/JetAlg.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Particle.hh" #include "Rivet/Jet.hh" #include "fastjet/JetDefinition.hh" #include "fastjet/AreaDefinition.hh" #include "fastjet/ClusterSequence.hh" #include "fastjet/ClusterSequenceArea.hh" #include "fastjet/PseudoJet.hh" #include "fastjet/SISConePlugin.hh" #include "fastjet/ATLASConePlugin.hh" #include "fastjet/CMSIterativeConePlugin.hh" #include "fastjet/CDFJetCluPlugin.hh" #include "fastjet/CDFMidPointPlugin.hh" #include "fastjet/D0RunIIConePlugin.hh" #include "fastjet/TrackJetPlugin.hh" #include "fastjet/JadePlugin.hh" //#include "fastjet/PxConePlugin.hh" namespace Rivet { /// Make a 3-momentum vector from a FastJet pseudo-jet inline Vector3 momentum3(const fastjet::PseudoJet& pj) { return Vector3(pj.px(), pj.py(), pj.pz()); } /// Make a 4-momentum vector from a FastJet pseudo-jet inline FourMomentum momentum(const fastjet::PseudoJet& pj) { return FourMomentum(pj.E(), pj.px(), pj.py(), pj.pz()); } /// Typedef for a collection of PseudoJets. typedef vector<fastjet::PseudoJet> PseudoJets; ///////////////////////// /// Project out jets found using the FastJet package jet algorithms. class FastJets : public JetAlg { public: /// Wrapper enum for selected Fastjet jet algorithms. enum JetAlgName { KT, CAM, SISCONE, ANTIKT, PXCONE, ATLASCONE, CMSCONE, CDFJETCLU, CDFMIDPOINT, D0ILCONE, JADE, DURHAM, TRACKJET }; /// @name Constructors etc. //@{ /// "Wrapped" argument constructor using Rivet enums for most common /// jet alg choices (including some plugins). For the built-in algs, /// E-scheme recombination is used. For full control of /// FastJet built-in jet algs, use the native arg constructor. FastJets(const FinalState& fsp, JetAlgName alg, double rparameter, double seed_threshold=1.0) : JetAlg(fsp), _adef(0) { _init1(alg, rparameter, seed_threshold); } /// Native argument constructor, using FastJet alg/scheme enums. FastJets(const FinalState& fsp, fastjet::JetAlgorithm type, fastjet::RecombinationScheme recom, double rparameter) : JetAlg(fsp), _adef(0) { _init2(type, recom, rparameter); } /// Explicitly pass in an externally-constructed plugin (must be heap-allocated, Rivet will delete) FastJets(const FinalState& fsp, fastjet::JetDefinition::Plugin* plugin) : JetAlg(fsp), _adef(0) { _init3(plugin); } /// Explicitly pass in an externally-constructed plugin (must be heap-allocated, Rivet will delete) FastJets(const FinalState& fsp, fastjet::JetDefinition::Plugin& plugin) : JetAlg(fsp), _adef(0) { _init3(&plugin); } /// Same thing as above, but without an FS (for when we want to pass the particles directly to the calc method) FastJets(JetAlgName alg, double rparameter, double seed_threshold=1.0) : _adef(0) { _init1(alg, rparameter, seed_threshold); } /// Same thing as above, but without an FS (for when we want to pass the particles directly to the calc method) FastJets(fastjet::JetAlgorithm type, fastjet::RecombinationScheme recom, double rparameter) : _adef(0) { _init2(type, recom, rparameter); } /// Same thing as above, but without an FS (for when we want to pass the particles directly to the calc method) FastJets(fastjet::JetDefinition::Plugin* plugin) : _adef(0) { _init3(plugin); } /// Same thing as above, but without an FS (for when we want to pass the particles directly to the calc method) FastJets(fastjet::JetDefinition::Plugin& plugin) : _adef(0) { _init3(&plugin); } /// Clone on the heap. virtual const Projection* clone() const { return new FastJets(*this); } //@} public: /// Reset the projection. Jet def, etc. are unchanged. void reset(); /// @brief Use provided jet area definition /// @warning adef is NOT copied, the user must ensure that it remains valid! /// Provide an adef null pointer to re-disable jet area calculation void useJetArea(fastjet::AreaDefinition* adef) { _adef = adef; } /// Number of jets above the \f$ p_\perp \f$ cut. size_t numJets(double ptmin = 0.0) const; /// Number of jets. size_t size() const { return numJets(); } /// Get the jets (unordered). Jets _jets(double ptmin = 0.0) const; /// Get the pseudo jets (unordered). PseudoJets pseudoJets(double ptmin = 0.0) const; /// Get the pseudo jets, ordered by \f$ p_T \f$. PseudoJets pseudoJetsByPt(double ptmin = 0.0) const { return sorted_by_pt(pseudoJets(ptmin)); } /// Get the pseudo jets, ordered by \f$ E \f$. PseudoJets pseudoJetsByE(double ptmin = 0.0) const { return sorted_by_E(pseudoJets(ptmin)); } /// Get the pseudo jets, ordered by rapidity. PseudoJets pseudoJetsByRapidity(double ptmin = 0.0) const { return sorted_by_rapidity(pseudoJets(ptmin)); } /// Return the cluster sequence (FastJet-specific). const fastjet::ClusterSequence* clusterSeq() const { return _cseq.get(); } /// Return the cluster sequence (FastJet-specific). const fastjet::ClusterSequenceArea* clusterSeqArea() const { /// @todo Throw error if no area def? Or just blindly call dynamic_cast? if (_adef == 0) return (fastjet::ClusterSequenceArea*) 0; return dynamic_cast<fastjet::ClusterSequenceArea*>(_cseq.get()); } /// Return the jet definition (FastJet-specific). const fastjet::JetDefinition& jetDef() const { return _jdef; } /// Return the area definition (FastJet-specific). May be null. const fastjet::AreaDefinition* areaDef() const { return _adef; } /// Get the subjet splitting variables for the given jet. vector<double> ySubJet(const fastjet::PseudoJet& jet) const; /// @brief Split a jet a la PRL100,242001(2008). /// Based on code from G.Salam, A.Davison. fastjet::PseudoJet splitJet(fastjet::PseudoJet jet, double& last_R) const; /// @brief Filter a jet a la PRL100,242001(2008). /// Based on code from G.Salam, A.Davison. fastjet::PseudoJet filterJet(fastjet::PseudoJet jet, double& stingy_R, const double def_R) const; private: Jets _pseudojetsToJets(const PseudoJets& pjets) const; /// Shared utility functions to implement constructor behaviour void _init1(JetAlgName alg, double rparameter, double seed_threshold); void _init2(fastjet::JetAlgorithm type, fastjet::RecombinationScheme recom, double rparameter); void _init3(fastjet::JetDefinition::Plugin* plugin); protected: /// Perform the projection on the Event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; public: /// Do the calculation locally (no caching). void calc(const ParticleVector& ps); private: /// Jet definition fastjet::JetDefinition _jdef; /// Pointer to user-handled area definition fastjet::AreaDefinition* _adef; /// Cluster sequence shared_ptr<fastjet::ClusterSequence> _cseq; /// FastJet external plugin shared_ptr<fastjet::JetDefinition::Plugin> _plugin; /// Map of vectors of y scales. This is mutable so we can use caching/lazy evaluation. mutable map<int, vector<double> > _yscales; /// set of particles sorted by their PT2 //set<Particle, ParticleBase::byPTAscending> _particles; map<int, Particle> _particles; }; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/DISKinematics.hh����������������������������������������������0000644�0001750�0001750�00000004444�12116077757�021056� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_DISKinematics_HH #define RIVET_DISKinematics_HH #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/DISLepton.hh" #include "Rivet/Projections/Beam.hh" namespace Rivet { /// @brief Get the DIS kinematic variables and relevant boosts for an event. class DISKinematics : public Projection { public: /// The default constructor. DISKinematics() : _theQ2(-1.0), _theW2(-1.0), _theX(-1.0), _theY(-1.0), _theS(-1.0) { setName("DISKinematics"); //addPdgIdPair(ANY, hadid); addProjection(Beam(), "Beam"); addProjection(DISLepton(), "Lepton"); } /// Clone on the heap. virtual const Projection* clone() const { return new DISKinematics(*this); } protected: /// Perform the projection operation on the supplied event. virtual void project(const Event& e); /// Compare with other projections. virtual int compare(const Projection& p) const; public: /// The \f$Q^2\f$. double Q2() const { return _theQ2; } /// The \f$W^2\f$. double W2() const { return _theW2; } /// The Bjorken \f$x\f$. double x() const { return _theX; } /// The Inelasticity \f$y\f$ double y() const { return _theY; } /// The centre of mass energy \f$s\f$ double s() const { return _theS; } /// The LorentzRotation needed to boost a particle to the hadronic CM frame. const LorentzTransform& boostHCM() const { return _hcm; } /// The LorentzRotation needed to boost a particle to the hadronic Breit frame. const LorentzTransform& boostBreit() const { return _breit; } /// The incoming Hadron beam particle const Particle& beamHadron() const { return _inHadron; } private: /// The \f$Q^2\f$. double _theQ2; /// The \f$W^2\f$. double _theW2; /// The Bjorken \f$x\f$. double _theX; /// The Inelasticity \f$y\f$ double _theY; /// The centre of mass energy \f$s\f$ double _theS; Particle _inHadron; /// The LorentzRotation needed to boost a particle to the hadronic CM frame. LorentzTransform _hcm; /// The LorentzRotation needed to boost a particle to the hadronic Breit frame. LorentzTransform _breit; }; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/ZFinder.hh����������������������������������������������������0000644�0001750�0001750�00000011731�12116077757�017765� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_ZFinder_HH #define RIVET_ZFinder_HH #include "Rivet/Tools/Logging.hh" #include "Rivet/Rivet.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/LeptonClusters.hh" namespace Rivet { /// @brief Convenience finder of leptonically decaying Zs /// /// Chain together different projections as convenience for finding Z's /// from two leptons in the final state, including photon clustering. class ZFinder : public FinalState { public: /// @name Constructors //@{ /// Constructor taking single eta/pT bounds /// @param inputfs Input final state /// @param etaMin,etaMax,pTmin lepton cuts /// @param pid type of the leptons /// @param minmass,maxmass mass window /// @param dRmax maximum dR of photons around leptons to take into account /// for Z reconstruction (only relevant if one of the following are true) /// @param clusterPhotons whether such photons are supposed to be /// clustered to the lepton objects and thus Z mom /// @param trackPhotons whether such photons should be added to _theParticles /// (cf. _trackPhotons) ZFinder(const FinalState& inputfs, double etaMin, double etaMax, double pTmin, PdgId pid, double minmass, double maxmass, double dRmax, bool clusterPhotons, bool trackPhotons, double masstarget=91.2*GeV); /// Constructor taking multiple eta/pT bounds /// @param inputfs Input final state /// @param etaRanges,pTmin lepton cuts /// @param pid type of the leptons /// @param minmass,maxmass mass window /// @param dRmax maximum dR of photons around leptons to take into account /// for Z reconstruction (only relevant if one of the following are true) /// @param clusterPhotons whether such photons are supposed to be /// clustered to the lepton objects and thus Z mom /// @param trackPhotons whether such photons should be added to _theParticles /// (cf. _trackPhotons) ZFinder(const FinalState& inputfs, const std::vector<std::pair<double, double> >& etaRanges, double pTmin, PdgId pid, double minmass, const double maxmass, double dRmax, bool clusterPhotons, bool trackPhotons, double masstarget=91.2*GeV); /// @deprecated Constructors without inputfs -- only for backwards compatibility ZFinder(double, double, double, PdgId, double, double, double, bool, bool, double masstarget=91.2*GeV); /// @deprecated Constructors without inputfs -- only for backwards compatibility ZFinder(const std::vector<std::pair<double, double> >&, double, PdgId, double, double, double, bool, bool, double masstarget=91.2*GeV); /// Clone on the heap. virtual const Projection* clone() const { return new ZFinder(*this); } //@} /// Access to the found bosons (currently either 0 or 1) const ParticleVector& bosons() const { return _bosons; } /// Access to the Z constituent clustered leptons /// (e.g. for more fine-grained cuts on the clustered leptons) /// The order is going to be: positive charge constituent 1st, negative 2nd const vector<Particle>& constituents() const { return _constituents; } /// Access to the remaining particles, after the Z and clustered photons /// have been removed from the full final state /// (e.g. for running a jet finder on it) const FinalState& remainingFinalState() const; protected: /// Apply the projection on the supplied event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; public: /// Clear the projection void clear() { _theParticles.clear(); _bosons.clear(); _constituents.clear(); } private: /// Common implementation of constructor operation, taking FS params. void _init(const FinalState& inputfs, const std::vector<std::pair<double, double> >& etaRanges, double pTmin, PdgId pid, double minmass, double maxmass, double dRmax, bool clusterPhotons, bool trackPhotons, double masstarget); /// Mass cuts to apply to clustered leptons (cf. InvMassFinalState) double _minmass, _maxmass, _masstarget; /// Switch for tracking of photons (whether to add them to _theParticles) /// This is relevant when the ZFinder::_theParticles are to be excluded /// from e.g. the input to a jet finder, to specify whether the clustered /// photons are to be excluded as well. /// (Yes, some experiments make a difference between clusterPhotons and /// trackPhotons!) bool _trackPhotons; /// Lepton flavour PdgId _pid; /// list of found bosons (currently either 0 or 1) ParticleVector _bosons; /// Clustered leptons vector<Particle> _constituents; }; } #endif ���������������������������������������rivet-1.8.3/include/Rivet/Projections/InitialQuarks.hh����������������������������������������������0000644�0001750�0001750�00000002727�12116077757�021211� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_InitialQuarks_HH #define RIVET_InitialQuarks_HH #include "Rivet/Projection.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" namespace Rivet { /// @brief Project out quarks from the hard process in \f$ e^+ e^- \to Z^0 \f$ events /// /// @warning This is a very dangerous and specific projection! Use /// e.g. PID::hasBottom and friends instead whenever possible class InitialQuarks : public Projection { public: /// @name Standard constructors and destructors. //@{ /// The default constructor. May specify the minimum and maximum /// pseudorapidity \f$ \eta \f$ and the min \f$ p_T \f$ (in GeV). InitialQuarks() { setName("InitialQuarks"); } /// Clone on the heap. virtual const Projection* clone() const { return new InitialQuarks(*this); } //@} /// Access the projected final-state particles. virtual const ParticleVector& particles() const { return _theParticles; } /// Is this final state empty? virtual bool empty() const { return _theParticles.empty(); } /// @deprecated Is this final state empty? virtual bool isEmpty() const { return _theParticles.empty(); } protected: /// Apply the projection to the event. virtual void project(const Event& e); /// Compare projections. virtual int compare(const Projection& p) const; protected: /// The final-state particles. ParticleVector _theParticles; }; } #endif �����������������������������������������rivet-1.8.3/include/Rivet/Projections/Hemispheres.hh������������������������������������������������0000644�0001750�0001750�00000011267�12116077757�020704� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Hemispheres_HH #define RIVET_Hemispheres_HH #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/AxesDefinition.hh" #include "Rivet/Event.hh" namespace Rivet { /// @brief Calculate the hemisphere masses and broadenings. /// /// Calculate the hemisphere masses and broadenings, with event hemispheres /// defined by the plane normal to the thrust vector, \f$ \vec{n}_\mathrm{T} \f$. /// /// The "high" hemisphere mass, /// \f$ M^2_\mathrm{high} / E^2_\mathrm{vis} \f$, is defined as /// \f[ /// \frac{M^2_\mathrm{high}}{E^2_\mathrm{vis}} = /// \frac{1}{E^2_\mathrm{vis}} \max /// \left( /// \left| \sum_{\vec{p}_k \cdot \vec{n}_\mathrm{T} > 0} p_k \right|^2 , /// \left| \sum_{\vec{p}_k \cdot \vec{n}_\mathrm{T} < 0} p_k \right|^2 /// \right) /// \f] /// and the corresponding "low" hemisphere mass, /// \f$ M^2_\mathrm{low} / E^2_\mathrm{vis} \f$, /// is the sum of momentum vectors in the opposite hemisphere, i.e. /// \f$ \max \rightarrow \min \f$ in the formula above. /// /// Finally, we define a hemisphere mass difference: /// \f[ /// \frac{M^2_\mathrm{diff} }{ E^2_\mathrm{vis}} = /// \frac{ M^2_\mathrm{high} - M^2_\mathrm{low} }{ E^2_\mathrm{vis}} . /// \f] /// /// Similarly to the masses, we also define hemisphere broadenings, using the /// momenta transverse to the thrust axis: /// \f[ /// B_\pm = /// \frac{ /// \sum{\pm \vec{p}_i \cdot \vec{n}_\mathrm{T} > 0} /// |\vec{p}_i \times \vec{n}_\mathrm{T} | /// }{ /// 2 \sum_i | \vec{p}_i | /// } /// \f] /// and then a set of the broadening maximum, minimum, sum and difference as follows: /// \f[ B_\mathrm{max} = \max(B_+, B_-) \f] /// \f[ B_\mathrm{min} = \min(B_+, B_-) \f] /// \f[ B_\mathrm{sum} = B_+ + B_- \f] /// \f[ B_\mathrm{diff} = |B_+ - B_-| \f] /// /// Internally, this projection uses a Thrust or Sphericity projection to /// determine the hemisphere orientation. class Hemispheres : public Projection { public: /// Constructor. Hemispheres(const AxesDefinition& ax) { setName("Hemispheres"); addProjection(ax, "Axes"); clear(); } /// Clone on the heap. virtual const Projection* clone() const { return new Hemispheres(*this); } // Reset the projection void clear() { _E2vis = -1; _M2high = -1; _M2low = -1; _Bmax = -1; _Bmin = -1; _highMassEqMaxBroad = true; } protected: /// Perform the projection on the Event. void project(const Event& e); /// Compare with other projections. int compare(const Projection& p) const { return mkNamedPCmp(p, "Axes"); } public: /// @name Hemisphere masses (scaled by \f$ 1 / E^2_\mathrm{vis} \f$). //@{ double E2vis() const { return _E2vis; } double Evis() const { return sqrt(_E2vis); } double M2high() const { return _M2high; } double Mhigh() const { return sqrt(M2high()); } double M2low() const { return _M2low; } double Mlow() const { return sqrt(M2low()); } double M2diff() const { return _M2high -_M2low; } double Mdiff() const { return sqrt(M2diff()); } double scaledM2high() const { if (isZero(_M2high)) return 0.0; if (!isZero(_E2vis)) return _M2high/_E2vis; else return std::numeric_limits<double>::max(); } double scaledMhigh() const { return sqrt(scaledM2high()); } double scaledM2low() const { if (isZero(_M2low)) return 0.0; if (!isZero(_E2vis)) return _M2low/_E2vis; else return std::numeric_limits<double>::max(); } double scaledMlow() const { return sqrt(scaledM2low()); } double scaledM2diff() const { if (M2diff() == 0.0) return 0.0; if (_E2vis != 0.0) return M2diff()/_E2vis; else return std::numeric_limits<double>::max(); } double scaledMdiff() const { return sqrt(scaledM2diff()); } //@} /// @name Hemisphere broadenings. //@{ double Bmax() const { return _Bmax; } double Bmin() const { return _Bmin; } double Bsum() const { return _Bmax + _Bmin; } double Bdiff() const { return fabs(_Bmax - _Bmin); } // <- fabs(), just in case... //@} /// Is the hemisphere with the max mass the same as the one with the max broadening? bool massMatchesBroadening() { return _highMassEqMaxBroad; } private: /// Visible energy-squared, \f$ E^2_\mathrm{vis} \f$. double _E2vis; /// Hemisphere mass variables. double _M2high, _M2low; /// Hemisphere broadening variables. double _Bmax, _Bmin; /// Is the hemisphere with the max mass the same as the one with the max broadening? bool _highMassEqMaxBroad; }; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/CentralEtHCM.hh�����������������������������������������������0000644�0001750�0001750�00000002363�12116077757�020636� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_CentralEtHCM_HH #define RIVET_CentralEtHCM_HH #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include "Rivet/Projections/DISFinalState.hh" namespace Rivet { /// @brief Summed \f$ E_\perp \f$ of central particles in HCM system. /// /// Sum up \f$ E_\perp \f$ of all particles in the hadronic final state in the /// central rapidity bin of the HCM system. class CentralEtHCM : public Projection { public: /// The default constructor. Must specify a FinalStateHCM projection /// object which is guaranteed to live throughout the run. CentralEtHCM(const DISFinalState& fs) { setName("CentralEtHCM"); addProjection(fs, "FS"); } /// Clone on the heap. virtual const Projection* clone() const { return new CentralEtHCM(*this); } protected: /// Apply the projection on to the Event. void project(const Event& e); /// Compare with other projections int compare(const Projection& p) const { return mkNamedPCmp(p, "FS"); } public: /// The sum of the Et in the central rapidity bin. double sumEt() const { return _sumet; } private: /// The sum of the Et in the central rapidity bin. double _sumet; }; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/IdentifiedFinalState.hh���������������������������������������0000644�0001750�0001750�00000005442�12116077757�022445� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_IdentifiedFinalState_HH #define RIVET_IdentifiedFinalState_HH #include "Rivet/Tools/Logging.hh" #include "Rivet/Rivet.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { /// @brief Produce a final state which only contains specified particle IDs. class IdentifiedFinalState : public FinalState { public: /// @name Constructors //@{ /// Constructor with specific FinalState. IdentifiedFinalState(const FinalState& fsp); /// Constructor with a single eta range argument. IdentifiedFinalState(double etamin=-MAXRAPIDITY, double etamax=MAXRAPIDITY, double ptMin=0.0*GeV); /// Constructor which allows to specify multiple eta ranges /// and the min \f$ p_T \f$. IdentifiedFinalState(const vector<pair<double, double> >& etaRanges, double ptMin=0.0*GeV); /// Clone on the heap. virtual const Projection* clone() const { return new IdentifiedFinalState(*this); } //@} public: /// Get the list of particle IDs to accept. const set<PdgId>& acceptedIds() const { return _pids; } /// Add an accepted particle ID. IdentifiedFinalState& acceptId(PdgId pid) { _pids.insert(pid); return *this; } /// Add a set of accepted particle IDs. IdentifiedFinalState& acceptIds(const vector<PdgId>& pids) { foreach (const PdgId pid, pids) { _pids.insert(pid); } return *this; } /// Add an accepted particle ID and its antiparticle. IdentifiedFinalState& acceptIdPair(PdgId pid) { _pids.insert(pid); _pids.insert(-pid); return *this; } /// Add a set of accepted particle IDs and their antiparticles. IdentifiedFinalState& acceptIdPairs(const vector<PdgId>& pids) { foreach (const PdgId pid, pids) { _pids.insert(pid); _pids.insert(-pid); } return *this; } /// Accept all neutrinos (convenience method). IdentifiedFinalState& acceptNeutrinos() { acceptIdPair(NU_E); acceptIdPair(NU_MU); acceptIdPair(NU_TAU); return *this; } /// Accept all charged leptons (convenience method). IdentifiedFinalState& acceptChLeptons() { acceptIdPair(ELECTRON); acceptIdPair(MUON); acceptIdPair(TAU); return *this; } /// Reset the list of particle IDs to accept. void reset() { _pids.clear(); } protected: /// Apply the projection on the supplied event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; private: /// The final-state particles. set<PdgId> _pids; }; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/DISLepton.hh��������������������������������������������������0000644�0001750�0001750�00000002410�12116077757�020217� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_DISLepton_HH #define RIVET_DISLepton_HH #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" namespace Rivet { /// @brief Get the incoming and outgoing leptons in a DIS event. class DISLepton : public Projection { public: /// @name Constructors. //@{ DISLepton(){ setName("DISLepton"); addProjection(Beam(), "Beam"); addProjection(FinalState(), "FS"); } /// Clone on the heap. virtual const Projection* clone() const { return new DISLepton(*this); } //@} protected: /// Perform the projection operation on the supplied event. virtual void project(const Event& e); /// Compare with other projections. virtual int compare(const Projection& p) const; public: /// The incoming lepton. const Particle& in() const { return _incoming; } /// The outgoing lepton. const Particle& out() const { return _outgoing; } const double &pzSign() const { return _sign; } private: /// The incoming lepton. Particle _incoming; /// The outgoing lepton. Particle _outgoing; /// The sign of the PZ of the incoming lepton double _sign; }; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/TriggerUA5.hh�������������������������������������������������0000644�0001750�0001750�00000003213�12116077757�020336� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_TriggerUA5_HH #define RIVET_TriggerUA5_HH #include "Rivet/Projection.hh" #include "Rivet/Event.hh" #include "Rivet/Particle.hh" #include "Rivet/Projections/Beam.hh" namespace Rivet { /// @brief Access to the min bias triggers used by UA5 class TriggerUA5 : public Projection { public: /// Default constructor. TriggerUA5(); /// Clone on the heap. virtual const Projection* clone() const { return new TriggerUA5(*this); } public: /// The trigger result for non-single diffractive (2 arm) trigger bool sdDecision() const { return _decision_sd; } /// The trigger result for non-single diffractive (2 arm) trigger bool nsdDecision() const { return _decision_nsd_1; } /// The trigger result for non-single diffractive (2 arm) trigger /// with special ">= 2" trigger for ppbar bg rejection bool nsd2Decision() const { return _decision_nsd_2; } /// The trigger result bool samebeams() const { return _samebeams; } /// Number of hits in <-,+> eta hodoscopes pair<unsigned int, unsigned int> numHits() { return make_pair(_n_plus, _n_minus); } /// Project on to the event void project(const Event& evt); protected: /// Compare with other projections. virtual int compare(const Projection& UNUSED(p)) const { return EQUIVALENT; } private: /// The min bias trigger decisions bool _decision_sd, _decision_nsd_1, _decision_nsd_2; /// Is it a pp collision? bool _samebeams; /// Number of hits in hodoscopes unsigned int _n_plus, _n_minus; }; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/JetAlg.hh�����������������������������������������������������0000644�0001750�0001750�00000017104�12116077757�017572� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_JetAlg_HH #define RIVET_JetAlg_HH #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Particle.hh" #include "Rivet/Jet.hh" namespace Rivet { inline bool cmpMomByPt(const FourMomentum& a, const FourMomentum& b) { return a.pT() > b.pT(); } inline bool cmpMomByAscPt(const FourMomentum& a, const FourMomentum& b) { return a.pT() < b.pT(); } inline bool cmpMomByP(const FourMomentum& a, const FourMomentum& b) { return a.vector3().mod() > b.vector3().mod(); } inline bool cmpMomByAscP(const FourMomentum& a, const FourMomentum& b) { return a.vector3().mod() < b.vector3().mod(); } inline bool cmpMomByEt(const FourMomentum& a, const FourMomentum& b) { return a.Et() > b.Et(); } inline bool cmpMomByAscEt(const FourMomentum& a, const FourMomentum& b) { return a.Et() < b.Et(); } inline bool cmpMomByE(const FourMomentum& a, const FourMomentum& b) { return a.E() > b.E(); } inline bool cmpMomByAscE(const FourMomentum& a, const FourMomentum& b) { return a.E() < b.E(); } inline bool cmpMomByDescPseudorapidity(const FourMomentum& a, const FourMomentum& b) { return a.pseudorapidity() > b.pseudorapidity(); } inline bool cmpMomByAscPseudorapidity(const FourMomentum& a, const FourMomentum& b) { return a.pseudorapidity() < b.pseudorapidity(); } inline bool cmpMomByDescAbsPseudorapidity(const FourMomentum& a, const FourMomentum& b) { return fabs(a.pseudorapidity()) > fabs(b.pseudorapidity()); } inline bool cmpMomByAscAbsPseudorapidity(const FourMomentum& a, const FourMomentum& b) { return fabs(a.pseudorapidity()) < fabs(b.pseudorapidity()); } inline bool cmpMomByDescRapidity(const FourMomentum& a, const FourMomentum& b) { return a.rapidity() > b.rapidity(); } inline bool cmpMomByAscRapidity(const FourMomentum& a, const FourMomentum& b) { return a.rapidity() < b.rapidity(); } inline bool cmpMomByDescAbsRapidity(const FourMomentum& a, const FourMomentum& b) { return fabs(a.rapidity()) > fabs(b.rapidity()); } inline bool cmpMomByAscAbsRapidity(const FourMomentum& a, const FourMomentum& b) { return fabs(a.rapidity()) < fabs(b.rapidity()); } /// Abstract base class for projections which can return a set of {@link Jet}s. class JetAlg : public Projection { public: /// Constructor JetAlg(const FinalState& fs); JetAlg() {}; /// Clone on the heap. virtual const Projection* clone() const = 0; /// Destructor virtual ~JetAlg() { } /// @brief Include invisible particles in jet construction. /// The default behaviour is that jets are only constructed from visible /// (i.e. charged under an SM gauge group) particles. Some jet studies, /// including those from ATLAS, use a definition in which neutrinos from hadron /// decays are included (via MC correction) in the experimental jet definition. /// Setting this flag to true avoids the automatic restriction to a VisibleFinalState. void useInvisibles(bool useinvis=true) { _useInvisibles = useinvis; } /// Get jets in no guaranteed order, with optional cuts on \f$ p_\perp \f$ and rapidity. /// @todo Introduce MomentumFilter objects for pT, ET, eta, y, etc. filtering, to avoid double-arg ambiguities virtual Jets jets(double ptmin=0.0, double ptmax=MAXDOUBLE, double rapmin=-MAXDOUBLE, double rapmax=MAXDOUBLE, RapScheme rapscheme=PSEUDORAPIDITY) const { const Jets rawjets = _jets(ptmin); Jets rtn; MSG_DEBUG("Raw jet size (with pTmin cut = " << ptmin/GeV << "GeV) = " << rawjets.size()); foreach (const Jet& j, rawjets) { const FourMomentum pj = j.momentum(); if (!inRange(pj.pT(), ptmin, ptmax)) continue; if (rapscheme == PSEUDORAPIDITY && !inRange(pj.eta(), rapmin, rapmax)) continue; if (rapscheme == RAPIDITY && !inRange(pj.rapidity(), rapmin, rapmax)) continue; rtn += j; } return rtn; } /// Get the jets, ordered by supplied sorting function object, with optional cuts on \f$ p_\perp \f$ and rapidity. /// @todo Introduce MomentumFilter objects for pT, ET, eta, y, etc. filtering, to avoid double-arg ambiguities template <typename F> Jets jets(F sorter, double ptmin, double ptmax, double rapmin, double rapmax, RapScheme rapscheme) const { Jets js = jets(ptmin, ptmax, rapmin, rapmax, rapscheme); if (sorter != 0) { std::sort(js.begin(), js.end(), sorter); } return js; } /// Get the jets, ordered by \f$ p_T \f$, with optional cuts on \f$ p_\perp \f$ and rapidity. /// @todo Introduce MomentumFilter objects for pT, ET, eta, y, etc. filtering, to avoid double-arg ambiguities Jets jetsByPt(double ptmin=0.0, double ptmax=MAXDOUBLE, double rapmin=-MAXDOUBLE, double rapmax=MAXDOUBLE, RapScheme rapscheme=PSEUDORAPIDITY) const { return jets(cmpJetsByPt, ptmin, ptmax, rapmin, rapmax, rapscheme); } /// Get the jets, ordered by \f$ |p| \f$, with optional cuts on \f$ p_\perp \f$ and rapidity. /// @todo Introduce MomentumFilter objects for pT, ET, eta, y, etc. filtering, to avoid double-arg ambiguities Jets jetsByP(double ptmin=0.0, double ptmax=MAXDOUBLE, double rapmin=-MAXDOUBLE, double rapmax=MAXDOUBLE, RapScheme rapscheme=PSEUDORAPIDITY) const { return jets(cmpJetsByP, ptmin, ptmax, rapmin, rapmax, rapscheme); } /// Get the jets, ordered by \f$ E \f$, with optional cuts on \f$ p_\perp \f$ and rapidity. /// @todo Introduce MomentumFilter objects for pT, ET, eta, y, etc. filtering, to avoid double-arg ambiguities Jets jetsByE(double ptmin=0.0, double ptmax=MAXDOUBLE, double rapmin=-MAXDOUBLE, double rapmax=MAXDOUBLE, RapScheme rapscheme=PSEUDORAPIDITY) const { return jets(cmpJetsByE, ptmin, ptmax, rapmin, rapmax, rapscheme); } /// Get the jets, ordered by \f$ E_T \f$, with optional cuts on \f$ p_\perp \f$ and rapidity. /// @todo Introduce MomentumFilter objects for pT, ET, eta, y, etc. filtering, to avoid double-arg ambiguities Jets jetsByEt(double ptmin=0.0, double ptmax=MAXDOUBLE, double rapmin=-MAXDOUBLE, double rapmax=MAXDOUBLE, RapScheme rapscheme=PSEUDORAPIDITY) const { return jets(cmpJetsByEt, ptmin, ptmax, rapmin, rapmax, rapscheme); } protected: /// @brief Internal pure virtual method for getting jets in no guaranteed order. /// An optional cut on min \f$ p_\perp \f$ is applied in this function, since that is /// directly supported by FastJet and it seems a shame to not make use of that. But /// all other jet cuts are applied at the @c ::jets() function level. virtual Jets _jets(double ptmin) const = 0; public: /// Number of jets. virtual size_t size() const = 0; /// Clear the projection virtual void reset() = 0; typedef Jet entity_type; typedef Jets collection_type; /// Template-usable interface common to FinalState. collection_type entities() const { return jets(); } /// Do the calculation locally (no caching). virtual void calc(const ParticleVector& ps) = 0; protected: /// Perform the projection on the Event. virtual void project(const Event& e) = 0; /// Compare projections. virtual int compare(const Projection& p) const = 0; protected: /// Flag to determine whether or not the VFS wrapper is to be used. bool _useInvisibles; }; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/TriggerCDFRun0Run1.hh�����������������������������������������0000644�0001750�0001750�00000002054�12116077757�021655� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_TriggerCDFRun0Run1_HH #define RIVET_TriggerCDFRun0Run1_HH #include "Rivet/Projection.hh" #include "Rivet/Event.hh" #include "Rivet/Particle.hh" #include "Rivet/Projections/Beam.hh" namespace Rivet { /// @brief Access to the min bias triggers used by CDF in Run 0 and Run 1 class TriggerCDFRun0Run1 : public Projection { public: /// Default constructor. TriggerCDFRun0Run1() { setName("TriggerCDFRun0Run1"); addProjection(ChargedFinalState(-5.9, 5.9), "CFS"); } /// Clone on the heap. virtual const Projection* clone() const { return new TriggerCDFRun0Run1(*this); } public: /// The trigger result bool minBiasDecision() const { return _decision_mb; } /// Project on to the Event void project(const Event& evt); protected: /// Compare with other projections. virtual int compare(const Projection& UNUSED(p)) const { return EQUIVALENT; } private: /// The min bias trigger decision bool _decision_mb; }; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/TriggerCDFRun2.hh���������������������������������������������0000644�0001750�0001750�00000002024�12116077757�021106� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_TriggerCDFRun2_HH #define RIVET_TriggerCDFRun2_HH #include "Rivet/Projection.hh" #include "Rivet/Event.hh" #include "Rivet/Particle.hh" #include "Rivet/Projections/Beam.hh" namespace Rivet { /// @brief Access to the min bias triggers used by CDF in Run 0 and Run 1 class TriggerCDFRun2 : public Projection { public: /// Default constructor. TriggerCDFRun2() { setName("TriggerCDFRun2"); addProjection(ChargedFinalState(-4.7, 4.7), "CFS"); } /// Clone on the heap. virtual const Projection* clone() const { return new TriggerCDFRun2(*this); } public: /// The trigger result bool minBiasDecision() const { return _decision_mb; } /// Project on to the Event void project(const Event& evt); protected: /// Compare with other projections. virtual int compare(const Projection& UNUSED(p)) const { return EQUIVALENT; } private: /// The min bias trigger decision bool _decision_mb; }; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/BeamThrust.hh�������������������������������������������������0000644�0001750�0001750�00000003147�12116077757�020504� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_BeamThrust_HH #define RIVET_BeamThrust_HH #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Event.hh" namespace Rivet { class BeamThrust : public Projection { public: /// Constructor. BeamThrust() {} BeamThrust(const FinalState& fsp) { setName("BeamThrust"); addProjection(fsp, "FS"); } /// Clone on the heap. virtual const Projection* clone() const { return new BeamThrust(*this); } protected: /// Perform the projection on the Event void project(const Event& e) { const vector<Particle> ps = applyProjection<FinalState>(e, "FS").particles(); calc(ps); } /// Compare projections int compare(const Projection& p) const { return mkNamedPCmp(p, "FS"); } public: double beamthrust() const { return _beamthrust; } public: /// @name Direct methods /// Ways to do the calculation directly, without engaging the caching system //@{ /// Manually calculate the beamthrust, without engaging the caching system void calc(const FinalState& fs); /// Manually calculate the beamthrust, without engaging the caching system void calc(const vector<Particle>& fsparticles); /// Manually calculate the beamthrust, without engaging the caching system void calc(const vector<FourMomentum>& fsmomenta); //@} private: /// The beamthrust scalar. double _beamthrust; private: /// Explicitly calculate the beamthrust values. void _calcBeamThrust(const vector<FourMomentum>& fsmomenta); }; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/Sphericity.hh�������������������������������������������������0000644�0001750�0001750�00000011263�12116077757�020547� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Sphericity_HH #define RIVET_Sphericity_HH #include "Rivet/Projection.hh" #include "Rivet/Projections/AxesDefinition.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Event.hh" namespace Rivet { /** @brief Calculate the sphericity event shape. The sphericity tensor (or quadratic momentum tensor) is defined as \f[ S^{\alpha \beta} = \frac{\sum_i p_i^\alpha p_i^\beta}{\sum_i |\mathbf{p}_i|^2} \f], where the Greek indices are spatial components and the Latin indices are used for sums over particles. From this, the sphericity, aplanarity and planarity can be calculated by combinations of eigenvalues. Defining the three eigenvalues \f$ \lambda_1 \ge \lambda_2 \ge \lambda_3 \f$, with \f$ \lambda_1 + \lambda_2 + \lambda_3 = 1 \f$, the sphericity is \f[ S = \frac{3}{2} (\lambda_2 + \lambda_3) \f] The aplanarity is \f$ A = \frac{3}{2}\lambda_3 \f$ and the planarity is \f$ P = \frac{2}{3}(S-2A) = \lambda_2 - \lambda_3 \f$. The eigenvectors define a set of spatial axes comparable with the thrust axes, but more sensitive to high momentum particles due to the quadratic sensitivity of the tensor to the particle momenta. Since the sphericity is quadratic in the particle momenta, it is not an infrared safe observable in perturbative QCD. This can be fixed by adding a regularizing power of \f$r\f$ to the definition: \f[ S^{\alpha \beta} = \frac{\sum_i |\mathbf{p}_i|^{r-2} p_i^\alpha p_i^\beta} {\sum_i |\mathbf{p}_i|^r} \f] \f$r\f$ is available as a constructor argument on this class and will be taken into account by the Cmp<Projection> operation, so a single analysis can use several sphericity projections with different \f$r\f$ values without fear of a clash. */ class Sphericity : public AxesDefinition { public: /// @name Constructors etc. //@{ /// Constructor Sphericity(double rparam=2.0): _regparam(rparam){} Sphericity(const FinalState& fsp, double rparam=2.0); /// Clone on the heap. virtual const Projection* clone() const { return new Sphericity(*this); } //@} protected: /// Perform the projection on the Event void project(const Event& e); /// Compare with other projections int compare(const Projection& p) const; public: /// Reset the projection void clear(); /// @name Access the event shapes by name /// @{ /// Sphericity double sphericity() const { return 3.0 / 2.0 * (lambda2() + lambda3()); } /// Transverse Sphericity double transSphericity() const { return 2.0 * lambda2() / ( lambda1() + lambda2() ); } /// Planarity double planarity() const { return 2 * (sphericity() - 2 * aplanarity()) / 3.0; } /// Aplanarity double aplanarity() const { return 3 / 2.0 * lambda3(); } /// @} /// @name Access the sphericity basis vectors /// @{ /// Sphericity axis const Vector3& sphericityAxis() const { return _sphAxes[0]; } /// Sphericity major axis const Vector3& sphericityMajorAxis() const { return _sphAxes[1]; } /// Sphericity minor axis const Vector3& sphericityMinorAxis() const { return _sphAxes[2]; } /// @} ///@{ AxesDefinition axis accessors. const Vector3& axis1() const { return sphericityAxis(); } const Vector3& axis2() const { return sphericityMajorAxis(); } const Vector3& axis3() const { return sphericityMinorAxis(); } ///@} /// @name Access the momentum tensor eigenvalues /// @{ double lambda1() const { return _lambdas[0]; } double lambda2() const { return _lambdas[1]; } double lambda3() const { return _lambdas[2]; } /// @} /// @name Direct methods /// Ways to do the calculation directly, without engaging the caching system //@{ /// Manually calculate the sphericity, without engaging the caching system void calc(const FinalState& fs); /// Manually calculate the sphericity, without engaging the caching system void calc(const vector<Particle>& fsparticles); /// Manually calculate the sphericity, without engaging the caching system void calc(const vector<FourMomentum>& fsmomenta); /// Manually calculate the sphericity, without engaging the caching system void calc(const vector<Vector3>& fsmomenta); //@} private: /// Eigenvalues. vector<double> _lambdas; /// Sphericity axes. vector<Vector3> _sphAxes; /// Regularizing parameter, used to force infra-red safety. const double _regparam; private: /// Actually do the calculation void _calcSphericity(const vector<Vector3>& fsmomenta); }; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/Spherocity.hh�������������������������������������������������0000644�0001750�0001750�00000007356�12116077757�020565� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Spherocity_HH #define RIVET_Spherocity_HH #include "Rivet/Projection.hh" #include "Rivet/Projections/AxesDefinition.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Event.hh" namespace Rivet { /** @brief Get the transverse spherocity scalars for hadron-colliders. @author Holger Schulz The scalar (maximum) transverse spherocity is defined as \f[ T = \mathrm{max}_{\vec{n_\perp}} \frac{\sum_i \left|\vec{p}_{\perp,i} \cdot \vec{n} \right|}{\sum_i |\vec{p}_{\perp,i}|} \f], with the direction of the unit vector \f$ \vec{n_\perp} \f$ which maximises \f$ T \f$ being identified as the spherocity axis. The unit vector which maximises the spherocity scalar in the plane perpendicular to \f$ \vec{n} \f$ is the "spherocity major" direction, and the vector perpendicular to both the spherocity and spherocity major directions is the spherocity minor. Both the major and minor directions have associated spherocity scalars. Care must be taken in the case of Drell-Yan processes - there we should use the newly proposed observable \f$ a_T \f$. */ class Spherocity : public AxesDefinition { public: // Default Constructor Spherocity() {} /// Constructor. Spherocity(const FinalState& fsp) : _calculatedSpherocity(false) { setName("Spherocity"); addProjection(fsp, "FS"); } /// Clone on the heap. virtual const Projection* clone() const { return new Spherocity(*this); } protected: /// Perform the projection on the Event void project(const Event& e) { const vector<Particle> ps = applyProjection<FinalState>(e, "FS").particles(); calc(ps); } /// Compare projections int compare(const Projection& p) const { return mkNamedPCmp(p, "FS"); } public: ///@{ Spherocity scalar accessors /// The spherocity scalar, \f$ S \f$, (minimum spherocity). double spherocity() const { return _spherocities[0]; } ///@} ///@{ Spherocity axis accessors /// The spherocity axis. const Vector3& spherocityAxis() const { return _spherocityAxes[0]; } /// The spherocity major axis (axis of max spherocity perpendicular to spherocity axis). const Vector3& spherocityMajorAxis() const { return _spherocityAxes[1]; } /// The spherocity minor axis (axis perpendicular to spherocity and spherocity major). const Vector3& spherocityMinorAxis() const { return _spherocityAxes[2]; } ///@} ///@{ AxesDefinition axis accessors. const Vector3& axis1() const { return spherocityAxis(); } const Vector3& axis2() const { return spherocityMajorAxis(); } const Vector3& axis3() const { return spherocityMinorAxis(); } ///@} public: /// @name Direct methods /// Ways to do the calculation directly, without engaging the caching system //@{ /// Manually calculate the spherocity, without engaging the caching system void calc(const FinalState& fs); /// Manually calculate the spherocity, without engaging the caching system void calc(const vector<Particle>& fsparticles); /// Manually calculate the spherocity, without engaging the caching system void calc(const vector<FourMomentum>& fsmomenta); /// Manually calculate the spherocity, without engaging the caching system void calc(const vector<Vector3>& threeMomenta); //@} private: /// The spherocity scalars. vector<double> _spherocities; /// The spherocity axes. vector<Vector3> _spherocityAxes; /// Caching flag to avoid costly recalculations. bool _calculatedSpherocity; private: /// Explicitly calculate the spherocity values. void _calcSpherocity(const vector<Vector3>& fsmomenta); }; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/WFinder.hh����������������������������������������������������0000644�0001750�0001750�00000014252�12116077757�017763� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_WFinder_HH #define RIVET_WFinder_HH #include "Rivet/Tools/Logging.hh" #include "Rivet/Rivet.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/LeptonClusters.hh" namespace Rivet { /// @brief Convenience finder of leptonically decaying Ws /// /// Chain together different projections as convenience for finding W's /// from two leptons in the final state, including photon clustering. class WFinder : public FinalState { public: /// @name Constructors //@{ /// Constructor taking single eta/pT bounds /// @param inputfs Input final state /// @param etaMin,etaMax,pTmin charged lepton cuts /// @param pid type of the charged lepton /// @param minmass,maxmass (transverse) mass window /// @param missingET minimal amount of missing ET (neutrinos) required /// @param dRmax maximum dR of photons around charged lepton to take into account /// for W reconstruction (only relevant if one of the following are true) /// @param clusterPhotons whether such photons are supposed to be /// clustered to the lepton object and thus W mom /// @param trackPhotons whether such photons should be added to _theParticles /// (cf. _trackPhotons) /// @param useTransverseMass whether mass window should be applied using mT WFinder(const FinalState& inputfs, double etaMin, double etaMax, double pTmin, PdgId pid, double minmass, double maxmass, double missingET, double dRmax, bool clusterPhotons=true, bool trackPhotons=false, double masstarget=80.4, bool useTransverseMass=false); /// Constructor taking multiple eta/pT bounds /// @param inputfs Input final state /// @param etaRanges,pTmin charged lepton cuts /// @param pid type of the charged lepton /// @param minmass,maxmass (transverse) mass window /// @param missingET minimal amount of missing ET (neutrinos) required /// @param dRmax maximum dR of photons around charged lepton to take into account /// for W reconstruction (only relevant if one of the following are true) /// @param clusterPhotons whether such photons are supposed to be /// clustered to the lepton object and thus W mom /// @param trackPhotons whether such photons should be added to _theParticles /// (cf. _trackPhotons) /// @param useTransverseMass whether mass window should be applied using mT WFinder(const FinalState& inputfs, const std::vector<std::pair<double, double> >& etaRanges, double pTmin, PdgId pid, double minmass, const double maxmass, double missingET, double dRmax, bool clusterPhotons=true, bool trackPhotons=false, double masstarget=80.4, bool useTransverseMass=false); /// @deprecated Constructors without inputfs -- only for backwards compatibility WFinder(double, double, double, PdgId, double, double, double, double, bool clusterPhotons=true, bool trackPhotons=false, double masstarget=80.4, bool useTransverseMass=false); /// @deprecated Constructors without inputfs -- only for backwards compatibility WFinder(const std::vector<std::pair<double, double> >&, double, PdgId, double, double, double, double, bool clusterPhotons=true, bool trackPhotons=false, double masstarget=80.4, bool useTransverseMass=false); /// Clone on the heap. virtual const Projection* clone() const { return new WFinder(*this); } //@} /// Access to the found bosons (currently either 0 or 1) const ParticleVector& bosons() const { return _bosons; } /// Access to the W constituent clustered leptons (currently either of /// size 0 if no boson was found or 1 if one boson was found) const vector<Particle>& constituentLeptons() const { return _constituentLeptons; } /// Access to the W constituent neutrinos (currently either of size 0 if no /// boson was found or 1 if one boson was found) const vector<Particle>& constituentNeutrinos() const { return _constituentNeutrinos; } /// Access to the remaining particles, after the W and clustered photons /// have been removed from the full final state /// (e.g. for running a jet finder on it) const FinalState& remainingFinalState() const; protected: /// Apply the projection on the supplied event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; public: /// Clear the projection void clear() { _theParticles.clear(); _bosons.clear(); _constituentLeptons.clear(); _constituentNeutrinos.clear(); } private: /// Common implementation of constructor operation, taking FS params. void _init(const FinalState& inputfs, const std::vector<std::pair<double, double> >& etaRanges, double pTmin, PdgId pid, double minmass, double maxmass, double missingET, double dRmax, bool clusterPhotons, bool trackPhotons, double masstarget, bool useTransverseMass); private: /// Transverse mass cuts double _minmass, _maxmass, _masstarget; bool _useTransverseMass; /// Missing ET cut double _etMiss; /// Switch for tracking of photons (whether to add them to _theParticles) /// This is relevant when the ZFinder::_theParticles are to be excluded /// from e.g. the input to a jet finder, to specify whether the clustered /// photons are to be excluded as well. /// (Yes, some experiments make a difference between clusterPhotons and /// trackPhotons!) bool _trackPhotons; /// Lepton flavour PdgId _pid; /// Neutrino flavour PdgId _nu_pid; /// list of found bosons (currently either 0 or 1) ParticleVector _bosons; /// Constituent leptons (currently either 0 or 1) ParticleVector _constituentLeptons; /// Constituent neutrinos (currently either 0 or 1) ParticleVector _constituentNeutrinos; }; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/JetShape.hh���������������������������������������������������0000644�0001750�0001750�00000012377�12116077757�020136� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_JetShape_HH #define RIVET_JetShape_HH #include "Rivet/Rivet.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/JetAlg.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include "Rivet/Tools/Utils.hh" namespace Rivet { /** @brief Calculate the jet shape. Calculate the differential and integral jet shapes in \f$P_{\perp}\f$ for a given set of jets. This particular jet shape projection calculates jet shapes relative to jet centroids, using only the particles associated to each jet, for the hardest \f$ n \f$ jets. The rapidity scheme (\f$ \eta \f$ or \f$ y \f$) has to be specified when invoking the constructor. The differential jet shape around a given jet axis at distance interval \f$ r \pm \delta{r}/2 \f$ is defined as \f[ \rho(r) = \frac{1}{\delta r} \frac{1}{N_\mathrm{jets}} \sum_\mathrm{jets} \frac{P_\perp(r - \delta r/2, r+\delta r/2)}{p_\perp(0, R)} \f] with \f$ 0 \le r \le R \f$ and \f$ P_\perp(r_1, r_2) = \sum_{\in [r_1, r_2)} p_\perp \f$. The integral jet shape around a given jet axes until distance \f$ r \f$ is defined as \f[ \Psi(r) = \frac{1}{N_\mathrm{jets}} \sum_\mathrm{jets} \frac{P_\perp(0, r)}{p_\perp(0, R)} \f] with \f$ 0 \le r \le R \f$ and \f$ P_\perp(r_1, r_2) = \sum_{\in [r_1, r_2)} p_\perp \f$. The constructor expects also the binning in radius \f$ r \f$ to be supplied. */ class JetShape : public Projection { public: /// @name Constructors etc. //@{ /// Constructor from histo range and number of bins. JetShape(const JetAlg& jetalg, double rmin, double rmax, size_t nbins, double ptmin=0, double ptmax=MAXDOUBLE, double absrapmin=-MAXDOUBLE, double absrapmax=-MAXDOUBLE, RapScheme rapscheme=RAPIDITY); /// Constructor from vector of bin edges. JetShape(const JetAlg& jetalg, vector<double> binedges, double ptmin=0, double ptmax=MAXDOUBLE, double absrapmin=-MAXDOUBLE, double absrapmax=-MAXDOUBLE, RapScheme rapscheme=RAPIDITY); /// Clone on the heap. virtual const Projection* clone() const { return new JetShape(*this); } //@} /// Reset projection between events. void clear(); /// Do the calculation directly on a supplied collection of Jet objects. void calc(const Jets& jets); public: /// Number of equidistant radius bins. size_t numBins() const { return _binedges.size() - 1; } /// Number of jets which passed cuts. size_t numJets() const { return _diffjetshapes.size(); } /// \f$ r_\text{min} \f$ value. double rMin() const { return _binedges.front(); } /// \f$ r_\text{max} \f$ value. double rMax() const { return _binedges.back(); } /// \f$ p_\perp^\text{min} \f$ value. double ptMin() const { return _ptcuts.first; } /// \f$ p_\perp^\text{max} \f$ value. double ptMax() const { return _ptcuts.second; } /// Central \f$ r \f$ value for bin @a rbin. double rBinMin(size_t rbin) const { assert(inRange(rbin, 0, numBins())); return _binedges[rbin]; } /// Central \f$ r \f$ value for bin @a rbin. double rBinMax(size_t rbin) const { assert(inRange(rbin, 0, numBins())); return _binedges[rbin+1]; } /// Central \f$ r \f$ value for bin @a rbin. double rBinMid(size_t rbin) const { assert(inRange(rbin, 0, numBins())); //cout << _binedges << endl; return (_binedges[rbin] + _binedges[rbin+1])/2.0; } /// Return value of differential jet shape profile histo bin. double diffJetShape(size_t ijet, size_t rbin) const { assert(inRange(ijet, 0, numJets())); assert(inRange(rbin, 0, numBins())); return _diffjetshapes[ijet][rbin]; } /// Return value of integrated jet shape profile histo bin. double intJetShape(size_t ijet, size_t rbin) const { assert(inRange(ijet, 0, numJets())); assert(inRange(rbin, 0, numBins())); double rtn = 0; for (size_t i = 0; i <= rbin; ++i) { rtn += _diffjetshapes[ijet][i]; } return rtn; } /// @todo Provide int and diff jet shapes with some sort of area normalisation? // /// Return value of \f$ \Psi \f$ (integrated jet shape) at given radius for a \f$ p_T \f$ bin. // /// @todo Remove this external indexing thing // double psi(size_t pTbin) const { // return _PsiSlot[pTbin]; // } protected: /// Apply the projection to the event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; private: /// @name Jet shape parameters //@{ /// Vector of radius bin edges vector<double> _binedges; /// Lower and upper cuts on contributing jet \f$ p_\perp \f$. pair<double, double> _ptcuts; /// Lower and upper cuts on contributing jet (pseudo)rapidity. pair<double, double> _rapcuts; /// Rapidity scheme RapScheme _rapscheme; //@} /// @name The projected jet shapes //@{ /// Jet shape histo -- first index is jet number, second is r bin vector< vector<double> > _diffjetshapes; //@} }; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/FoxWolframMoments.hh������������������������������������������0000644�0001750�0001750�00000002745�12116077757�022060� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_FoxWolframMoments_HH #define RIVET_FoxWolframMoments_HH #include "Rivet/Rivet.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include <gsl/gsl_sf_legendre.h> #define MAXMOMENT 5 namespace Rivet { /// @brief Calculate Fox-Wolfram moments class FoxWolframMoments : public Projection { public: /// Constructor. FoxWolframMoments(const FinalState& fsp) { setName("FoxWolframMoments"); addProjection(fsp, "FS"); /// @todo Let the user supply any projection they like? VisibleFinalState vfs(fsp); addProjection(vfs, "VFS"); // Initialize moments vector for (int i = 0; i < MAXMOMENT ; ++i) { _fwmoments.push_back(0.0); } } /// Clone on the heap. virtual const Projection* clone() const { return new FoxWolframMoments(*this); } public: /// The projected Fox-Wolfram Moment of order l double getFoxWolframMoment(unsigned int l) const { if (l < MAXMOMENT) { return _fwmoments[l]; } /// @todo What?!? return -666.0; } protected: /// Apply the projection to the event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; private: vector<double> _fwmoments; }; } #endif ���������������������������rivet-1.8.3/include/Rivet/Projections/SVertex.hh����������������������������������������������������0000644�0001750�0001750�00000006512�12116077757�020025� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_SVertex_HH #define RIVET_SVertex_HH #include "Rivet/Rivet.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/PVertex.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Event.hh" namespace Rivet { /** @brief Determine secondary vertices. Makes use of PVertex projection. @todo Replace function with a functor to improve equality comparisons. Complex cuts on tracks and vertices to validate them have to be provided by an external function bool f(SVertex&, ParticleVector&, const HepMC::GenVertex&, FourMomentum); which can be embedded in the analysis code. An example can be found in the S6653332 analysis. A pointer to this function has to be given to the constructor of the SVertex projection. Its arguments are as follows: in: reference to instance of SVertex projection, ParticleVector of vertex to be analyzed, primary (Gen)Vertex out: FourMomentum = visible Momentum of vertex (selected tracks), return bool: cuts passed? 1 : 0 In this way the SVertex projection can be kept as universal/flexible as possible. The constructor expects also a list of (pre-selected) jets. Associated tracks and vertices to a jet are checked for displacement. A list of tagged jets can be obtained via the getTaggedJets() function */ class SVertex : public Projection { public: /// @name Standard constructors and destructors. //@{ /// The default constructor. Must specify a PVertex /// projection object which is assumed to live through the run. SVertex(const ChargedFinalState& chfs, const vector<FourMomentum>& jetaxes, double deltaR, double detEta, double IPres, double DLS, double DLSres=0.0) : _jetaxes(jetaxes), _deltaR(deltaR), _detEta(detEta), _IPres(IPres), _DLS(DLS), _DLSres(DLSres) { setName("SVertex"); addProjection(PVertex(), "PV"); addProjection(chfs, "FS"); if (_DLSres == 0.0) { _DLSres = _IPres; } } /// Clone on the heap. virtual const Projection* clone() const { return new SVertex(*this); } //@} public: /// Return vector of tagged jets (FourMomentum's) const vector<FourMomentum>& getTaggedJets() const { return _taggedjets; } protected: /// Apply the projection to the event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; private: /// The jet axes of the jet algorithm projection const vector<FourMomentum>& _jetaxes; /// Max distance between vis. momentum of vertex and jet to be probed double _deltaR; /// Analysis dependent cuts to be specified in analysis function /// @todo Replace with inheritance-based cut method. //bool (*_applyVtxTrackCuts) (const ParticleVector&, const Vector3&, FourMomentum); bool _applyVtxTrackCuts(const ParticleVector&, const Vector3&, FourMomentum); /// Geometrical acceptance of tracker double _detEta; /// Impact parameter resolution, (including beam size) double _IPres; /// Decay length significance (cut value) double _DLS; /// Decay length significance uncertainty double _DLSres; /// Jets which have been tagged vector<FourMomentum> _taggedjets; }; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/VetoedFinalState.hh�������������������������������������������0000644�0001750�0001750�00000013101�12116077757�021616� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_VetoedFinalState_HH #define RIVET_VetoedFinalState_HH #include "Rivet/Tools/Logging.hh" #include "Rivet/Rivet.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { /// @brief FS modifier to exclude classes of particles from the final state. class VetoedFinalState : public FinalState { public: /// Typedef for a pair of back-to-back cuts. typedef pair<double, double> BinaryCut; /// Typedef for a vetoing entry. typedef map<long, BinaryCut> VetoDetails; /// Typedef for a veto on a composite particle mass. typedef multimap<int, BinaryCut> CompositeVeto; /// @name Constructors //@{ /// Default constructor. VetoedFinalState() { setName("VetoedFinalState"); addProjection(FinalState(), "FS"); } /// Constructor with specific FinalState. VetoedFinalState(const FinalState& fsp) { setName("VetoedFinalState"); addProjection(fsp, "FS"); } /// You can add a map of ID plus a pair containing \f$ p_{Tmin} \f$ and /// \f$ p_{Tmax} \f$ - these define the range of particles to be vetoed. VetoedFinalState(const VetoDetails& vetocodes) : _vetoCodes(vetocodes) { setName("VetoedFinalState"); addProjection(FinalState(), "FS"); } /// You can add a map of ID plus a pair containing \f$ p_{Tmin} \f$ and /// \f$ p_{Tmax} \f$ - these define the range of particles to be vetoed. /// This version also supplies a specifi FinalState to be used. VetoedFinalState(const FinalState& fsp, const VetoDetails& vetocodes) : _vetoCodes(vetocodes) { setName("VetoedFinalState"); addProjection(fsp, "FS"); } /// Clone on the heap. virtual const Projection* clone() const { return new VetoedFinalState(*this); } //@} public: /// Get the list of particle IDs and \f$ p_T \f$ ranges to veto. const VetoDetails& vetoDetails() const { return _vetoCodes; } /// Add a particle ID and \f$ p_T \f$ range to veto. Particles with \f$ p_T \f$ /// IN the given range will be rejected. VetoedFinalState& addVetoDetail(const long id, const double ptmin, const double ptmax) { BinaryCut ptrange(ptmin, ptmax); _vetoCodes.insert(make_pair(id, ptrange)); return *this; } /// Add a particle/antiparticle pair to veto in a given \f$ p_T \f$ range. Given a single ID, both /// the particle and its conjugate antiparticle will be rejected if their \f$ p_T \f$ is IN the given range. VetoedFinalState& addVetoPairDetail(const long id, const double ptmin, const double ptmax) { addVetoDetail(id, ptmin, ptmax); addVetoDetail(-id, ptmin, ptmax); return *this; } /// Add a particle/antiparticle pair to veto. Given a single ID, both the particle and its corresponding /// antiparticle (for all \f$ p_T \f$ values) will be vetoed. VetoedFinalState& addVetoPairId(const long id) { addVetoId(id); addVetoId(-id); return *this; } /// Add a particle ID to veto (all \f$ p_T \f$ range will be vetoed). VetoedFinalState& addVetoId(const long id) { BinaryCut ptrange(0.0, numeric_limits<double>::max()); _vetoCodes.insert(make_pair(id, ptrange)); return *this; } /// Veto all neutrinos (convenience method) VetoedFinalState& vetoNeutrinos() { addVetoPairId(NU_E); addVetoPairId(NU_MU); addVetoPairId(NU_TAU); return *this; } /// Add a veto on composite masses within a given width. /// The composite mass is composed of nProducts decay products /// @ todo might we want to specify a range of pdg ids for the decay products? VetoedFinalState& addCompositeMassVeto(const double &mass, const double &width, int nProducts=2){ double halfWidth = 0.5*width; BinaryCut massRange(mass - halfWidth, mass + halfWidth); _compositeVetoes.insert(make_pair(nProducts, massRange)); _nCompositeDecays.insert(nProducts); return *this; } /// Veto the decay products of particle with pdg id /// @todo Need HepMC to sort themselves out and keep vector bosons from /// the hard vtx in the event record before this will work reliably for all pdg ids VetoedFinalState& addDecayProductsVeto(const long id){ _parentVetoes.insert(id); return *this; } /// Set the list of particle IDs and \f$ p_T \f$ ranges to veto. VetoedFinalState& setVetoDetails(const VetoDetails& ids) { _vetoCodes = ids; return *this; } /// Clear the list of particle IDs and ranges to veto. VetoedFinalState& reset() { _vetoCodes.clear(); return *this; } /// Veto particles from a supplied final state. VetoedFinalState& addVetoOnThisFinalState(const FinalState& fs) { stringstream st_name; st_name << "FS_" << _vetofsnames.size(); string name = st_name.str(); addProjection(fs, name); _vetofsnames.insert(name); return *this; } protected: /// Apply the projection on the supplied event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; private: /// The final-state particles. VetoDetails _vetoCodes; /// Composite particle masses to veto CompositeVeto _compositeVetoes; set<int> _nCompositeDecays; typedef set<long> ParentVetos; /// Set of decaying particle IDs to veto ParentVetos _parentVetoes; /// Set of finalstate to be vetoed set<string> _vetofsnames; }; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/Thrust.hh�����������������������������������������������������0000644�0001750�0001750�00000011046�12116077757�017714� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Thrust_HH #define RIVET_Thrust_HH #include "Rivet/Projection.hh" #include "Rivet/Projections/AxesDefinition.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Event.hh" namespace Rivet { /** @brief Get the e+ e- thrust basis and the thrust, thrust major and thrust minor scalars. @author Andy Buckley The scalar (maximum) thrust is defined as \f[ T = \mathrm{max}_{\vec{n}} \frac{\sum_i \left|\vec{p}_i \cdot \vec{n} \right|}{\sum_i |\vec{p}_i|} \f], with the direction of the unit vector \f$ \vec{n} \f$ which maximises \f$ T \f$ being identified as the thrust axis. The unit vector which maximises the thrust scalar in the plane perpendicular to \f$ \vec{n} \f$ is the "thrust major" direction, and the vector perpendicular to both the thrust and thrust major directions is the thrust minor. Both the major and minor directions have associated thrust scalars. Thrust calculations have particularly simple forms for less than 4 particles, and in those cases this projection is computationally minimal. For 4 or more particles, a more general calculation must be carried out, based on the Brandt/Dahmen method from Z. Phys. C1 (1978). While a polynomial improvement on the exponential scaling of the naive method, this algorithm scales asymptotically as \f$ \mathcal{O}\left( n^3 \right) \f$. Be aware that the thrust may easily be the most computationally demanding projection in Rivet for large events! The Rivet implementation of thrust is based heavily on Stefan Gieseke's Herwig++ re-coding of the 'tasso' code from HERWIG. NB. special case with >= 4 coplanar particles will still fail. NB. Thrust assumes all momenta are in the CoM system: no explicit boost is performed. This can be dealt with by appropriate choice of the supplied FinalState. */ class Thrust : public AxesDefinition { public: /// Constructor. Thrust() {} Thrust(const FinalState& fsp) { setName("Thrust"); addProjection(fsp, "FS"); } /// Clone on the heap. virtual const Projection* clone() const { return new Thrust(*this); } protected: /// Perform the projection on the Event void project(const Event& e) { const vector<Particle> ps = applyProjection<FinalState>(e, "FS").particles(); calc(ps); } /// Compare projections int compare(const Projection& p) const { return mkNamedPCmp(p, "FS"); } public: ///@{ Thrust scalar accessors /// The thrust scalar, \f$ T \f$, (maximum thrust). double thrust() const { return _thrusts[0]; } /// The thrust major scalar, \f$ M \f$, (thrust along thrust major axis). double thrustMajor() const { return _thrusts[1]; } /// The thrust minor scalar, \f$ m \f$, (thrust along thrust minor axis). double thrustMinor() const { return _thrusts[2]; } /// The oblateness, \f$ O = M - m \f$ . double oblateness() const { return _thrusts[1] - _thrusts[2]; } ///@} ///@{ Thrust axis accessors /// The thrust axis. const Vector3& thrustAxis() const { return _thrustAxes[0]; } /// The thrust major axis (axis of max thrust perpendicular to thrust axis). const Vector3& thrustMajorAxis() const { return _thrustAxes[1]; } /// The thrust minor axis (axis perpendicular to thrust and thrust major). const Vector3& thrustMinorAxis() const { return _thrustAxes[2]; } ///@} ///@{ AxesDefinition axis accessors. const Vector3& axis1() const { return thrustAxis(); } const Vector3& axis2() const { return thrustMajorAxis(); } const Vector3& axis3() const { return thrustMinorAxis(); } ///@} public: /// @name Direct methods /// Ways to do the calculation directly, without engaging the caching system //@{ /// Manually calculate the thrust, without engaging the caching system void calc(const FinalState& fs); /// Manually calculate the thrust, without engaging the caching system void calc(const vector<Particle>& fsparticles); /// Manually calculate the thrust, without engaging the caching system void calc(const vector<FourMomentum>& fsmomenta); /// Manually calculate the thrust, without engaging the caching system void calc(const vector<Vector3>& threeMomenta); //@} private: /// The thrust scalars. vector<double> _thrusts; /// The thrust axes. vector<Vector3> _thrustAxes; private: /// Explicitly calculate the thrust values. void _calcThrust(const vector<Vector3>& fsmomenta); }; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/FParameter.hh�������������������������������������������������0000644�0001750�0001750�00000003774�12116077757�020462� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Sphericity_HH #define RIVET_FParameter_HH #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Event.hh" namespace Rivet { class FParameter : public Projection { public: /// @name Constructors etc. //@{ /// Constructor FParameter(const FinalState& fsp); /// Clone on the heap. virtual const Projection* clone() const { return new FParameter(*this); } //@} protected: /// Perform the projection on the Event void project(const Event& e); /// Compare with other projections //int compare(const Projection& p) const; // Taken from Thrust.hh int compare(const Projection& p) const { return mkNamedPCmp(p, "FS"); } public: /// Reset the projection void clear(); /// @name Access the event shapes by name /// @{ /// F-Parametr double F() const { return lambda1() >= lambda2() ? lambda2()/lambda1() : lambda1()/lambda2(); } /// @} /// @name Access the linearised transverse momentum tensor eigenvalues /// @{ double lambda1() const { return _lambdas[0]; } double lambda2() const { return _lambdas[1]; } /// @} /// @name Direct methods /// Ways to do the calculation directly, without engaging the caching system //@{ /// Manually calculate the sphericity, without engaging the caching system void calc(const FinalState& fs); /// Manually calculate the sphericity, without engaging the caching system void calc(const vector<Particle>& fsparticles); /// Manually calculate the sphericity, without engaging the caching system void calc(const vector<FourMomentum>& fsmomenta); /// Manually calculate the sphericity, without engaging the caching system void calc(const vector<Vector3>& fsmomenta); //@} private: /// Eigenvalues. vector<double> _lambdas; private: /// Actually do the calculation void _calcFParameter(const vector<Vector3>& fsmomenta); }; } #endif ����rivet-1.8.3/include/Rivet/Projections/FinalState.hh�������������������������������������������������0000644�0001750�0001750�00000007733�12116077757�020465� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_FinalState_HH #define RIVET_FinalState_HH #include "Rivet/Projection.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" namespace Rivet { /// @brief Project out all final-state particles in an event. /// Probably the most important projection in Rivet! class FinalState : public Projection { public: /// @name Standard constructors and destructors. //@{ /// The default constructor. May specify the minimum and maximum /// pseudorapidity \f$ \eta \f$ and the min \f$ p_T \f$ (in GeV). FinalState(double mineta = -MAXRAPIDITY, double maxeta = MAXRAPIDITY, double minpt = 0.0*GeV); /// A constructor which allows to specify multiple eta ranges /// and the min \f$ p_T \f$ (in GeV). FinalState(const vector<pair<double, double> >& etaRanges, double minpt = 0.0*GeV); /// Clone on the heap. virtual const Projection* clone() const { return new FinalState(*this); } //@} /// Get the final-state particles. virtual const ParticleVector& particles() const { return _theParticles; } /// Get the final-state particles, ordered by supplied sorting function object. template <typename F> const ParticleVector& particles(F sorter) const { std::sort(_theParticles.begin(), _theParticles.end(), sorter); return _theParticles; } /// Get the final-state particles, ordered by decreasing \f$ p_T \f$. const ParticleVector& particlesByPt() const { return particles(cmpParticleByPt); } /// Get the final-state particles, ordered by decreasing \f$ p \f$. const ParticleVector& particlesByP() const { return particles(cmpParticleByP); } /// Get the final-state particles, ordered by decreasing \f$ E \f$. const ParticleVector& particlesByE() const { return particles(cmpParticleByE); } /// Get the final-state particles, ordered by decreasing \f$ E_T \f$. const ParticleVector& particlesByEt() const { return particles(cmpParticleByEt); } /// Get the final-state particles, ordered by increasing \f$ \eta \f$. const ParticleVector& particlesByEta() const { return particles(cmpParticleByAscPseudorapidity); } /// Get the final-state particles, ordered by increasing \f$ |\eta| \f$. const ParticleVector& particlesByModEta() const { return particles(cmpParticleByAscAbsPseudorapidity); } /// Get the final-state particles, ordered by increasing \f$ y \f$. const ParticleVector& particlesByRapidity() const { return particles(cmpParticleByAscRapidity); } /// Get the final-state particles, ordered by increasing \f$ |y| \f$. const ParticleVector& particlesByModRapidity() const { return particles(cmpParticleByAscAbsRapidity); } /// Access the projected final-state particles. virtual size_t size() const { return _theParticles.size(); } /// Is this final state empty? virtual bool empty() const { return _theParticles.empty(); } /// @deprecated Is this final state empty? virtual bool isEmpty() const { return _theParticles.empty(); } /// Minimum-\f$ p_\perp \f$ requirement. virtual double ptMin() const { return _ptmin; } public: typedef Particle entity_type; typedef ParticleVector collection_type; /// Template-usable interface common to JetAlg. const collection_type& entities() const { return particles(); } protected: /// Apply the projection to the event. virtual void project(const Event& e); /// Compare projections. virtual int compare(const Projection& p) const; /// Decide if a particle is to be accepted or not. bool accept(const Particle& p) const; protected: /// The ranges allowed for pseudorapidity. vector<pair<double,double> > _etaRanges; /// The minimum allowed transverse momentum. double _ptmin; /// The final-state particles. mutable ParticleVector _theParticles; }; } #endif �������������������������������������rivet-1.8.3/include/Rivet/Projections/LeptonClusters.hh���������������������������������������������0000644�0001750�0001750�00000004155�12116077757�021414� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_LeptonClusters_HH #define RIVET_LeptonClusters_HH #include "Rivet/Tools/Logging.hh" #include "Rivet/Rivet.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" namespace Rivet { class ClusteredLepton : public Particle { public: ClusteredLepton(Particle lepton) : Particle(lepton.pdgId(), lepton.momentum()), _constituentLepton(lepton) {} void addPhoton(const Particle& p, bool cluster) { _constituentPhotons.push_back(p); if (cluster) setMomentum(momentum() + p.momentum()); } const Particle& constituentLepton() const { return _constituentLepton; } const ParticleVector& constituentPhotons() const { return _constituentPhotons; } private: ParticleVector _constituentPhotons; Particle _constituentLepton; }; /// @brief Cluster photons from a given FS to all charged particles (typically /// leptons) from signal and store the original charged particles and photons /// as particles() while the newly created clustered lepton objects are /// accessible as clusteredLeptons() class LeptonClusters : public FinalState { public: LeptonClusters(const FinalState& photons, const FinalState& signal, double dRmax, bool cluster, const std::vector<std::pair<double, double> >& etaRanges, double pTmin); virtual const Projection* clone() const { return new LeptonClusters(*this); } const vector<ClusteredLepton>& clusteredLeptons() const { return _clusteredLeptons; } protected: /// Apply the projection on the supplied event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; private: /// Maximum cone radius to find photons in double _dRmax; /// Whether to actually add the photon momenta to clusteredLeptons bool _cluster; /// Container which stores the clustered lepton objects vector<ClusteredLepton> _clusteredLeptons; }; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/ParisiTensor.hh�����������������������������������������������0000644�0001750�0001750�00000004517�12116077757�021052� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_ParisiTensor_HH #define RIVET_ParisiTensor_HH #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/Sphericity.hh" #include "Rivet/Event.hh" namespace Rivet { /** @brief Calculate the Parisi event shape tensor (or linear momentum tensor). The Parisi event shape C and D variables are derived from the eigenvalues of the linear momentum tensor \f[ \theta^{\alpha \beta} = \frac{\sum_i \frac{p_i^\alpha p_i^\beta}{|\mathbf{p}_i|}} {\sum_i |\mathbf{p}_i|} \f] which is actually a linearized (and hence infra-red safe) version of the {@link Sphericity} tensor. Defining the three eigenvalues of \f$\theta\f$ \f$ \lambda_1 \ge \lambda_2 \ge \lambda_3 \f$, with \f$ \lambda_1 + \lambda_2 + \lambda_3 = 1 \f$, the C and D parameters are defined as \f[ C = 3(\lambda_1\lambda_2 + \lambda_1\lambda_3 + \lambda_2\lambda_3) \f] and \f[ D = 27 \lambda_1\lambda_2\lambda_3 \f] Internally, this Projection uses the Sphericity projection with the generalising \f$r\f$ parameter set to 1. */ class ParisiTensor : public Projection { public: /// Constructor. The provided FinalState projection must live throughout the run. ParisiTensor(const FinalState& fsp) { setName("ParisiTensor"); addProjection(fsp, "FS"); addProjection(Sphericity(fsp, 1.0), "Sphericity"); clear(); } /// Clone on the heap. virtual const Projection* clone() const { return new ParisiTensor(*this); } protected: /// Perform the projection on the Event. void project(const Event& e); /// Compare with other projections. int compare(const Projection& p) const; public: /// Clear the projection. void clear(); public: /// @name Access the C and D params. ///@{ double C() const { return _C; } double D() const { return _D; } ///@} /// @name Access the eigenvalues of \f$\theta\f$. ///@{ double lambda1() const { return _lambda[0]; } double lambda2() const { return _lambda[1]; } double lambda3() const { return _lambda[2]; } ///@} private: /// The Parisi event shape variables. double _C, _D; /// Eigenvalues. double _lambda[3]; }; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/MissingMomentum.hh��������������������������������������������0000644�0001750�0001750�00000003614�12116077757�021560� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_MissingMomentum_HH #define RIVET_MissingMomentum_HH #include "Rivet/Rivet.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" namespace Rivet { /// @brief Calculate missing \f$ E \f$, \f$ E_\perp \f$ etc. /// /// Project out the total visible energy vector, allowing missing /// \f$ E \f$, \f$ E_\perp \f$ etc. to be calculated. Final state /// visibility restrictions are automatic. class MissingMomentum : public Projection { public: /// Default constructor with uncritical FS. MissingMomentum() { setName("MissingMomentum"); FinalState fs; addProjection(fs, "FS"); addProjection(VisibleFinalState(fs), "VisibleFS"); } /// Constructor. MissingMomentum(const FinalState& fs) { setName("MissingMomentum"); addProjection(fs, "FS"); addProjection(VisibleFinalState(fs), "VisibleFS"); } /// Clone on the heap. virtual const Projection* clone() const { return new MissingMomentum(*this); } public: /// The vector-summed visible four-momentum in the event. const FourMomentum& visibleMomentum() const { return _momentum; } /// The vector-summed (in)visible transverse energy in the event const Vector3& vectorEt() const { return _vet; } /// The scalar-summed visible transverse energy in the event. double scalarEt() const { return _set; } protected: /// Apply the projection to the event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; public: /// Clear the projection results. void clear(); private: /// The total visible momentum FourMomentum _momentum; /// Scalar transverse energy double _set; /// Vector transverse energy Vector3 _vet; }; } #endif ��������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/ChargedLeptons.hh���������������������������������������������0000644�0001750�0001750�00000001775�12116077757�021335� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_ChargedLeptons_HH #define RIVET_ChargedLeptons_HH #include "Rivet/Projection.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" namespace Rivet { /// @brief Get charged final-state leptons /// /// NB. This is just electrons and muons, unless you set taus stable! class ChargedLeptons : public FinalState { public: /// Constructor ChargedLeptons(const FinalState& fsp) { setName("ChargedLeptons"); addProjection(ChargedFinalState(fsp), "ChFS"); } /// Clone on the heap. virtual const Projection* clone() const { return new ChargedLeptons(*this); } protected: /// Apply the projection to the event. void project(const Event& evt); /// Compare projections. int compare(const Projection& other) const; public: /// Access the projected leptons. const ParticleVector& chargedLeptons() const { return _theParticles; } }; } #endif ���rivet-1.8.3/include/Rivet/Projections/PVertex.hh����������������������������������������������������0000644�0001750�0001750�00000003165�12116077757�020023� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_PVertex_HH #define RIVET_PVertex_HH #include "Rivet/Projection.hh" #include "Rivet/Event.hh" #include "Rivet/Particle.hh" namespace Rivet { /// @brief Get the position of the primary vertex of an event. /// /// HepMC doesn't reliably return the signal process vertex, so /// we have to use the "decay vertex" of the beam particles. /// This gives the right position, within experimental resolution, /// but ISR effects can mean that the actual vertex is not right. /// Hence, we don't expose the HepMC GenVertex directly - if it were /// available, people might try to e.g. look at the \f$ p_T \f$ /// of the vertex children, which would be extremely unreliable. /// /// @deprecated This should hardly ever be required for MC studies, and is not necessarily reliable! class PVertex : public Projection { public: /// @name Standard constructors and destructors. //@{ /// The default constructor. PVertex() : _thePVertex(0) { setName("PVertex"); } /// Clone on the heap. virtual const Projection* clone() const { return new PVertex(*this); } //@} /// Get the primary vertex position. const Vector3 position() const { if (_thePVertex != 0) return Vector3(_thePVertex->position()); return Vector3(0,0,0); } protected: /// Do the projection. void project(const Event& e); /// Compare projections. int compare(const Projection& UNUSED(p)) const { return EQUIVALENT; } private: /// The Primary Vertex in the current collision. GenVertex* _thePVertex; }; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/InvMassFinalState.hh������������������������������������������0000644�0001750�0001750�00000005736�12116077757�021767� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_InvMassFinalState_HH #define RIVET_InvMassFinalState_HH #include "Rivet/Projections/FinalState.hh" namespace Rivet { /// @brief Identify particles which can be paired to fit within a given invariant mass window class InvMassFinalState : public FinalState { public: /// Constructor for a single inv-mass pair. InvMassFinalState(const FinalState& fsp, const std::pair<PdgId, PdgId>& idpair, // pair of decay products double minmass, // min inv mass double maxmass, // max inv mass double masstarget=-1.0); /// Constructor for multiple inv-mass pairs. InvMassFinalState(const FinalState& fsp, const std::vector<std::pair<PdgId, PdgId> >& idpairs, // vector of pairs of decay products double minmass, // min inv mass double maxmass, // max inv mass double masstarget=-1.0); /// Same thing as above, but we want to pass the particles directly to the calc method InvMassFinalState(const std::pair<PdgId, PdgId>& idpair, // pair of decay products double minmass, // min inv mass double maxmass, // max inv mass double masstarget=-1.0); InvMassFinalState(const std::vector<std::pair<PdgId, PdgId> >& idpairs, // vector of pairs of decay products double minmass, // min inv mass double maxmass, // max inv mass double masstarget=-1.0); /// Clone on the heap. virtual const Projection* clone() const { return new InvMassFinalState(*this); } public: /// Constituent pairs. const std::vector<std::pair<Particle, Particle> >& particlePairs() const; /// Choose whether to use the full inv mass or just the transverse mass. void useTransverseMass(bool usetrans=true) { _useTransverseMass = usetrans; } /// Operate on a given particle vector directly instead of through project (no caching) void calc(const ParticleVector& inparticles); private: /// Transverse Mass inline double massT( FourMomentum v1, FourMomentum v2) { return sqrt( (v1.Et() + v2.Et())*(v1.Et() + v2.Et()) - (v1+v2).perp()*(v1+v2).perp() ); } protected: /// Apply the projection on the supplied event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; private: /// IDs of the decay products. std::vector<PdgIdPair> _decayids; /// Constituent pairs. std::vector<std::pair<Particle, Particle> > _particlePairs; /// Min inv mass. double _minmass; /// Max inv mass. double _maxmass; /// Target mass if only one pair should be returned. double _masstarget; /// Flag to decide whether to use the full inv mass or just the transverse mass. bool _useTransverseMass; }; } #endif ����������������������������������rivet-1.8.3/include/Rivet/Projections/AxesDefinition.hh���������������������������������������������0000644�0001750�0001750�00000002020�12116077757�021324� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_AxesDefinition_HH #define RIVET_AxesDefinition_HH #include "Rivet/Projection.hh" #include "Rivet/Event.hh" namespace Rivet { /** @brief Base class for projections which define a spatial basis. A pure virtual interface for projections which define a set of 3 basis vectors. This allows e.g. Thrust and Sphericity to be used interchangeably as defining bases for e.g. hemisphere mass and broadening calculations. @author Andy Buckley */ class AxesDefinition : public Projection { public: /// Virtual destructor. virtual ~AxesDefinition() { } /// Clone on the heap. virtual const Projection* clone() const = 0; ///@{ Axis accessors, in decreasing order of significance. /// The main axis. virtual const Vector3& axis1() const = 0; /// The 2nd most significant ("major") axis. virtual const Vector3& axis2() const = 0; /// The least significant ("minor") axis. virtual const Vector3& axis3() const = 0; ///@} }; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/IsolationProjection.hh����������������������������������������0000644�0001750�0001750�00000010423�12116077757�022417� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_IsolationProjection_HH #define RIVET_IsolationProjection_HH #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/Math/Units.hh" #include "Rivet/Projections/IsolationEstimators.hh" #include <boost/shared_ptr.hpp> namespace Rivet{ /// PROJ1 can be either FinalState projections or JetAlg projections /// PROJ1::entity_type and PROJ2::entity_type can be either Particle of Jet template <typename PROJ1, typename PROJ2, typename EST = typename isohelper<typename PROJ1::entity_type, typename PROJ2::collection_type>::estimatorhelper> class IsolationProjection : public Projection { public: /// Constructor IsolationProjection(PROJ1& iso, PROJ2& ctrl, EST* estimator, double ptmin = 0*GeV) : _estimator(estimator), _ptmin(ptmin) { setName("IsolationProjection"); addProjection(iso, "ToBeIsolated"); addProjection(ctrl, "Control"); } /// Get the isolation values for the isofinalstate const vector<pair<const typename PROJ1::entity_type*, double> > isolatedParticles(double maxiso = numeric_limits<double>::max()) const; virtual const Projection* clone() const { return new IsolationProjection(*this); } protected: /// Apply the projection to the event. virtual void project(const Event& e); /// Compare projections. virtual int compare(const Projection& p) const; private: /// the estimator boost::shared_ptr<EST> _estimator; /// The isolation cone radius //double _coneRadius; /// The minimum pt to trigger isolation calculation double _ptmin; /// the isolation parameter value for each particle in _isofsp /// the _isofsp MUST live, these particle pointers are potentially dangerous, let's try.... vector<pair<const typename PROJ1::entity_type*, double> > _isovalues; }; template<typename PROJ1, typename PROJ2, typename EST> inline const vector<pair<const typename PROJ1::entity_type*, double> > IsolationProjection<PROJ1, PROJ2, EST> ::isolatedParticles(double maxiso) const { vector<pair<const typename PROJ1::entity_type*, double> > out; for (typename vector<pair<const typename PROJ1::entity_type*, double> >::const_iterator i = _isovalues.begin(); i != _isovalues.end(); ++i){ if (i->second < maxiso) out.push_back(*i); } return out; } template<typename PROJ1, typename PROJ2, typename EST> inline void IsolationProjection<PROJ1, PROJ2, EST>::project(const Event& e){ Log& log = getLog(); _isovalues.clear(); /// projetc the final states const PROJ1& isofs = applyProjection<PROJ1>(e, "ToBeIsolated"); /// copy of particles is suboptimal, but FinalState returns /// particles by referencem while JetAlg returns jets by value const typename PROJ1::collection_type isopart = isofs.entities(); const PROJ2& ctrlfs = applyProjection<PROJ2>(e, "Control"); const typename PROJ2::collection_type ctrlpart = ctrlfs.entities(); for (typename PROJ1::collection_type::const_iterator iiso = isopart.begin(); iiso != isopart.end(); ++iiso){ if (iiso->getMomentum().pT() < _ptmin) continue; double isolation = _estimator->estimate(*iiso, ctrlpart); log << Log::DEBUG << "Isolation for particle with momentum " << iiso->getMomentum() << " is " << isolation << endl; _isovalues.push_back(make_pair(&(*iiso), isolation)); } } template<typename PROJ1, typename PROJ2, typename EST> inline int IsolationProjection<PROJ1, PROJ2, EST>::compare(const Projection& p) const{ const IsolationProjection & other = dynamic_cast<const IsolationProjection &>(p); //first check the final states int isofscmp = mkNamedPCmp(other, "ToBeIsolated"); if (isofscmp != EQUIVALENT) return isofscmp; int isoctrlcmp = mkNamedPCmp(other, "Control"); if (isoctrlcmp != EQUIVALENT) return isoctrlcmp; // compare the ptmin of the isolated colection int ptmincmp = cmp(_ptmin, other._ptmin); if (ptmincmp != EQUIVALENT) return ptmincmp; // compare the estimators //if (cmp(*(_estimator.get()),*(other._estimator.get())) == EQUIVALENT) cout << "Estimatori uguali!" << endl; return cmp(*(_estimator.get()),*(other._estimator.get())); } } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/DISFinalState.hh����������������������������������������������0000644�0001750�0001750�00000002353�12116077757�021016� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_DISFinalState_HH #define RIVET_DISFinalState_HH #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/DISKinematics.hh" namespace Rivet { /// @brief Final state particles boosted to the hadronic center of mass system. /// /// NB. The DIS scattered lepton is not included in the final state particles. class DISFinalState: public FinalState { public: /// Type of DIS boost to apply enum BoostType { HCM, BREIT }; /// @name Constructors //@{ /// Constructor DISFinalState(const DISKinematics& kinematicsp, BoostType boosttype) : _boosttype(boosttype) { setName("DISFinalState"); addProjection(kinematicsp, "Kinematics"); } /// Clone on the heap. virtual const Projection* clone() const { return new DISFinalState(*this); } //@} protected: /// Apply the projection on the supplied event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const { const DISFinalState& other = dynamic_cast<const DISFinalState&>(p); return mkNamedPCmp(p, "Kinematics") || cmp(_boosttype, other._boosttype); } private: BoostType _boosttype; }; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/ClusteredPhotons.hh�������������������������������������������0000644�0001750�0001750�00000002542�12116077757�021731� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_ClusteredPhotons_HH #define RIVET_ClusteredPhotons_HH #include "Rivet/Tools/Logging.hh" #include "Rivet/Rivet.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" namespace Rivet { /// @brief Find final state photons which in a cone around any particle in the "signal" final state class ClusteredPhotons : public FinalState { public: /// @name Constructors //@{ /// Constructor with the two final states, and the maximum separation in dR /// for clustered photons ClusteredPhotons(const FinalState& fs, const FinalState& signal, double dRmax) : _dRmax(dRmax) { setName("ClusteredPhotons"); IdentifiedFinalState photonfs(fs); photonfs.acceptId(PHOTON); addProjection(photonfs, "Photons"); addProjection(signal, "Signal"); } /// Clone on the heap. virtual const Projection* clone() const { return new ClusteredPhotons(*this); } //@} public: protected: /// Apply the projection on the supplied event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; private: /// maximum cone radius to find photons in double _dRmax; }; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/NeutralFinalState.hh������������������������������������������0000644�0001750�0001750�00000002356�12116077757�022014� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_NeutralFinalState_HH #define RIVET_NeutralFinalState_HH #include "Rivet/Tools/Logging.hh" #include "Rivet/Rivet.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { /// @brief Project only neutral final state particles. class NeutralFinalState : public FinalState { public: /// @name Constructors //@{ NeutralFinalState(const FinalState& fsp) : _Etmin(0.0*GeV) { setName("NeutralFinalState"); addProjection(fsp, "FS"); } NeutralFinalState(double mineta = -MAXRAPIDITY, double maxeta = MAXRAPIDITY, double minEt = 0.0*GeV) : _Etmin(minEt) { setName("NeutralFinalState"); addProjection(FinalState(mineta, maxeta, 0.0*GeV), "FS"); } /// Clone on the heap. virtual const Projection* clone() const { return new NeutralFinalState(*this); } //@} protected: /// Apply the projection on the supplied event. void project(const Event& e); /// The minimum allowed transverse energy. double _Etmin; /// Compare projections. int compare(const Projection& p) const; }; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/NonHadronicFinalState.hh��������������������������������������0000644�0001750�0001750�00000002260�12116077757�022576� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_NonHadronicFinalState_HH #define RIVET_NonHadronicFinalState_HH #include "Rivet/Tools/Logging.hh" #include "Rivet/Rivet.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { /// @brief Project only hadronic final state particles. class NonHadronicFinalState : public FinalState { public: /// Constructor: the supplied FinalState projection is assumed to live through the run. NonHadronicFinalState(FinalState& fsp) { setName("NonHadronicFinalState"); addProjection(fsp, "FS"); } NonHadronicFinalState(double mineta = -MAXRAPIDITY, double maxeta = MAXRAPIDITY, double minpt = 0.0*GeV) { setName("NonHadronicFinalState"); addProjection(FinalState(mineta, maxeta, minpt), "FS"); } /// Clone on the heap. virtual const Projection* clone() const { return new NonHadronicFinalState(*this); } protected: /// Apply the projection on the supplied event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; }; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/HadronicFinalState.hh�����������������������������������������0000644�0001750�0001750�00000002302�12116077757�022120� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_HadronicFinalState_HH #define RIVET_HadronicFinalState_HH #include "Rivet/Tools/Logging.hh" #include "Rivet/Rivet.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { /// @brief Project only hadronic final state particles. class HadronicFinalState : public FinalState { public: /// Constructor: the supplied FinalState projection is assumed to live through the run. HadronicFinalState(const FinalState& fsp) { setName("HadronicFinalState"); addProjection(fsp, "FS"); } HadronicFinalState(double mineta = -MAXRAPIDITY, double maxeta = MAXRAPIDITY, double minpt = 0.0*GeV) { setName("HadronicFinalState"); addProjection(FinalState(mineta, maxeta, minpt), "FS"); } /// Clone on the heap. virtual const Projection* clone() const { return new HadronicFinalState(*this); } protected: /// Apply the projection on the supplied event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; }; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/IsolationEstimators.hh����������������������������������������0000644�0001750�0001750�00000010325�12116077757�022436� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_IsolationEstimators_HH #define RIVET_IsolationEstimators_HH #include "Rivet/Math/MathUtils.hh" #include "Rivet/Particle.hh" #include "Rivet/Jet.hh" #include <vector> #include <typeinfo> namespace Rivet { /// @cond ISOLATION_DETAILS template < typename T, typename C > class IsolationEstimator { public: virtual ~IsolationEstimator(){}; virtual double estimate(const T & t, const C & c) const = 0; virtual int compare(const IsolationEstimator < T, C > *other) const = 0; virtual bool before(const IsolationEstimator * other) const { const std::type_info & thisid = typeid(*this); const std::type_info & otherid = typeid(*other); if (thisid == otherid) { return compare(other) < 0; } else { return thisid.before(otherid); } } bool operator < (const IsolationEstimator& other) const{ return this->before(&other); } }; // An estimator for the sum of the pt of the particles in collection C // being within radius from t template < class T, class C > class PtInConeEstimator : public IsolationEstimator < T, C > { public: PtInConeEstimator(double radius, double ptmin = 0.0) : _radius(radius), _ptmin(ptmin) { } virtual double estimate(const T & t, const C & c) const { double ptsum = 0; for (typename C::const_iterator ic = c.begin(); ic != c.end(); ++ic) { if (ic->momentum().pT() < _ptmin) continue; if (deltaR(t.momentum(), ic->momentum()) < _radius) { ptsum += ic->momentum().pT(); } } return ptsum / t.momentum().pT(); } virtual int compare(const IsolationEstimator < T, C > *other) const { const PtInConeEstimator *concreteother = dynamic_cast<const PtInConeEstimator*>(other); int ptmincmp = cmp(_ptmin, concreteother->getPtMin()); if (ptmincmp != 0) return ptmincmp; int radcmp = cmp(_radius, concreteother->getRadius()); if (radcmp != 0) return radcmp; return 0; } double radius() const { return _radius; } double ptMin() const { return _ptmin; } private: double _radius; double _ptmin; }; // An estimator for the number of particles in collection C // being within radius from t template < class T, class C > class MultiplicityInConeEstimator : public IsolationEstimator < T, C > { public: MultiplicityInConeEstimator(double radius, double ptmin = 0.0) : _radius(radius), _ptmin(ptmin) { } virtual double estimate(const T & t, const C & c) const { double npart = 0; for (typename C::const_iterator ic = c.begin(); ic != c.end(); ++ic) { if (ic->momentum().pT() < _ptmin) continue; if (deltaR(t.momentum(), ic->momentum()) < _radius) { npart++; } } return npart; } virtual int compare(const IsolationEstimator < T, C > *other) const { const MultiplicityInConeEstimator *concreteother = dynamic_cast < const MultiplicityInConeEstimator * >(other); int ptmincmp = cmp(_ptmin, concreteother->getPtMin()); if (ptmincmp != 0) return ptmincmp; int radcmp = cmp(_radius, concreteother->getRadius()); if (radcmp != 0) return radcmp; return 0; } double radius() const { return _radius; } double ptMin() const { return _ptmin; } private: double _radius; double _ptmin; }; /// Typedefs typedef MultiplicityInConeEstimator < Jet, std::vector < Jet > >JetIsoEstimatorByMultiplicity; typedef MultiplicityInConeEstimator < Particle, std::vector < Jet > >ParticleFromJetIsoEstimatorByMultiplicity; typedef MultiplicityInConeEstimator < Particle, std::vector < Particle > >ParticleIsoEstimatorByMultiplicity; typedef PtInConeEstimator < Jet, std::vector < Jet > >JetIsoEstimatorByPt; typedef PtInConeEstimator < Particle, std::vector < Jet > >ParticleFromJetIsoEstimatorByPt; typedef PtInConeEstimator < Particle, std::vector < Particle > >ParticleIsoEstimatorByPt; template <typename TYPE1, typename TYPE2> struct isohelper { typedef IsolationEstimator<TYPE1, TYPE2> estimatorhelper; }; /// @endcond } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/IsolationTools.hh���������������������������������������������0000644�0001750�0001750�00000000675�12116077757�021413� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_IsolationTools_HH #define RIVET_IsolationTools_HH #include "Rivet/Projections/IsolationProjection.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/JetAlg.hh" namespace Rivet { typedef IsolationProjection<JetAlg, JetAlg> AllJetsIso; typedef IsolationProjection<FinalState, FinalState> AllParticleIso; typedef IsolationProjection<FinalState, JetAlg> ParticleFromJetIso; } #endif �������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/LeadingParticlesFinalState.hh���������������������������������0000644�0001750�0001750�00000004064�12116077757�023612� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_LeadingParticlesFinalState_HH #define RIVET_LeadingParticlesFinalState_HH #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { class Particle; /// @brief Get the highest-pT occurrences of FS particles with the specified PDG IDs. class LeadingParticlesFinalState : public FinalState { public: /// Constructor: the supplied FinalState projection is assumed to live through the run. LeadingParticlesFinalState(const FinalState& fsp) : FinalState(), _leading_only(false) { setName("LeadingParticlesFinalState"); addProjection(fsp, "FS"); } /// Clone on the heap. virtual const Projection *clone() const { return new LeadingParticlesFinalState(*this); } /// Add a particle ID to the list of leading particles selected LeadingParticlesFinalState& addParticleId(long id) { _ids.insert(id); return *this; } /// Add a particle ID to the list of leading particles selected LeadingParticlesFinalState& addParticleIdPair(long id) { _ids.insert(id); _ids.insert(-id); return *this; } /// Toggle whether to keep track only of the leading particle of any ID, /// or the leading particle of all IDs separately /// Default is the latter (=false) void setLeadingOnly(const bool& leadingonly) { _leading_only = leadingonly; } // /// Check if a particle of a particular ID was found in the current event // bool hasParticleId(const PdgId pid) const; // /// Get a particle of a particular ID (check it exists first) // bool get(const PdgId pid) const; protected: /// Apply the projection on the supplied event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; /// Check if the particle's ID is in the list bool inList(const Particle& particle) const; private: /// IDs of the leading particles to be selected std::set<long>_ids; bool _leading_only; }; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/MergedFinalState.hh�������������������������������������������0000644�0001750�0001750�00000001714�12116077757�021602� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_MergedFinalState_HH #define RIVET_MergedFinalState_HH #include "Rivet/Tools/Logging.hh" #include "Rivet/Rivet.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { /// @brief Get final state particles merged from two FinalState projections. class MergedFinalState : public FinalState { public: /// @name Constructors //@{ MergedFinalState(const FinalState& fspa, const FinalState& fspb) { setName("MergedFinalState"); addProjection(fspa, "FSA"); addProjection(fspb, "FSB"); } /// Clone on the heap. virtual const Projection* clone() const { return new MergedFinalState(*this); } //@} protected: /// Apply the projection on the supplied event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; }; } #endif ����������������������������������������������������rivet-1.8.3/include/Rivet/Projections/Beam.hh�������������������������������������������������������0000644�0001750�0001750�00000003517�12116077757�017273� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Beam_HH #define RIVET_Beam_HH #include "Rivet/Projection.hh" #include "Rivet/Event.hh" #include "Rivet/Particle.hh" namespace Rivet { /// @name Stand-alone functions //@{ /// Function to get beam particles from an event ParticlePair beams(const Event& e); /// Function to get beam particle IDs from an event PdgIdPair beamIds(const Event& e); /// Function to get beam particle IDs from a pair of particles PdgIdPair beamIds(const ParticlePair& beams); /// Function to get beam centre of mass energy from an event double sqrtS(const Event& e); /// Function to get beam centre of mass energy from a pair of particles double sqrtS(const ParticlePair& beams); /// Function to get beam centre of mass energy from a pair of beam momenta double sqrtS(const FourMomentum& pa, const FourMomentum& pb); //@} /// @brief Project out the incoming beams class Beam : public Projection { public: /// The default constructor. Beam() { setName("Beam"); } /// Clone on the heap. virtual const Projection* clone() const { return new Beam(*this); } public: /// The pair of beam particles in the current collision. const ParticlePair& beams() const { return _theBeams; } /// The pair of beam particle PDG codes in the current collision. const PdgIdPair beamIds() const { return Rivet::beamIds(beams()); } /// Get centre of mass energy, \f$ \sqrt{s} \f$. double sqrtS() const; public: /// Project on to the Event virtual void project(const Event& e); protected: /// Compare with other projections. virtual int compare(const Projection& UNUSED(p)) const { return EQUIVALENT; } private: /// The beam particles in the current collision ParticlePair _theBeams; }; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/VisibleFinalState.hh������������������������������������������0000644�0001750�0001750�00000002473�12116077757�021777� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_VisibleFinalState_HH #define RIVET_VisibleFinalState_HH #include "Rivet/Tools/Logging.hh" #include "Rivet/Rivet.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { /// @brief Final state modifier excluding particles which are not experimentally visible class VisibleFinalState : public FinalState { public: /// @name Constructors //@{ /// Constructor with min and max pseudorapidity \f$ \eta \f$ and min \f$ p_T \f$ (in GeV). VisibleFinalState(double mineta = -MAXRAPIDITY, double maxeta = MAXRAPIDITY, double minpt = 0.0*GeV) { setName("VisibleFinalState"); addProjection(FinalState(mineta, maxeta, minpt), "FS"); } /// Constructor with specific FinalState. VisibleFinalState(const FinalState& fsp) { setName("VisibleFinalState"); addProjection(fsp, "FS"); } /// Clone on the heap. virtual const Projection* clone() const { return new VisibleFinalState(*this); } //@} protected: /// Apply the projection on the supplied event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; }; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/Multiplicity.hh�����������������������������������������������0000644�0001750�0001750�00000002375�12116077757�021120� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Multiplicity_HH #define RIVET_Multiplicity_HH #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" namespace Rivet { /// @brief Count the final-state particles in an event. class Multiplicity : public Projection { public: /// Constructor. The provided FinalState projection must live throughout the run. Multiplicity(const FinalState& fsp) : _totalMult(0), _hadMult(0) { setName("Multiplicity"); addProjection(fsp, "FS"); } /// Clone on the heap. virtual const Projection* clone() const { return new Multiplicity(*this); } protected: /// Perform the projection on the Event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; public: /// @name Access the projected multiplicities. //@ { /// Total multiplicity unsigned int totalMultiplicity() const { return _totalMult; } /// Hadron multiplicity unsigned int hadronMultiplicity() const { return _hadMult; } //@ } private: /// Total multiplicity. unsigned int _totalMult; /// Hadronic multiplicity. unsigned int _hadMult; }; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/LossyFinalState.hh��������������������������������������������0000644�0001750�0001750�00000004365�12116077757�021515� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_LossyFinalState_HH #define RIVET_LossyFinalState_HH #include "Rivet/Tools/Logging.hh" #include "Rivet/Rivet.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { /// @brief Templated FS projection which can lose some of the supplied particles. template <typename FILTER> class LossyFinalState : public FinalState { public: /// @name Constructors //@{ /// Constructor from FinalState. LossyFinalState(const FinalState& fsp, FILTER filter) : _filter(filter) { setName("LossyFinalState"); addProjection(fsp, "FS"); } /// Stand-alone constructor. Initialises the base FinalState projection. LossyFinalState(FILTER filter, double mineta = -MAXRAPIDITY, double maxeta = MAXRAPIDITY, double minpt = 0.0) : _filter(filter) { setName("LossyFinalState"); addProjection(FinalState(mineta, maxeta, minpt), "FS"); } /// Virtual destructor, to allow subclassing virtual ~LossyFinalState() { } /// Clone on the heap. virtual const Projection* clone() const { return new LossyFinalState<FILTER>(*this); } //@} protected: /// Apply the projection on the supplied event. void project(const Event& e) { const FinalState& fs = applyProjection<FinalState>(e, "FS"); getLog() << Log::DEBUG << "Pre-loss number of FS particles = " << fs.particles().size() << endl; _theParticles.clear(); std::remove_copy_if(fs.particles().begin(), fs.particles().end(), std::back_inserter(_theParticles), _filter); getLog() << Log::DEBUG << "Filtered number of FS particles = " << _theParticles.size() << endl; } /// Compare projections. int compare(const Projection& p) const { const LossyFinalState<FILTER>& other = pcast< LossyFinalState<FILTER> >(p); const int fscmp = mkNamedPCmp(other, "FS"); if (fscmp) return fscmp; return _filter.compare(other._filter); } protected: /// Filtering object: must support operator(const Particle&) and compare(const Filter&) FILTER _filter; }; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/ConstLossyFinalState.hh���������������������������������������0000644�0001750�0001750�00000003644�12116077757�022523� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_ConstLossyFinalState_HH #define RIVET_ConstLossyFinalState_HH #include "Rivet/Tools/Logging.hh" #include "Rivet/Rivet.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/LossyFinalState.hh" namespace Rivet { /// Functor used to implement constant random lossiness. class ConstRandomFilter { public: ConstRandomFilter(double lossFraction) : _lossFraction(lossFraction) { assert(_lossFraction >= 0); } // If operator() returns true, particle is deleted ("lost") bool operator()(const Particle&) { /// @todo Use a better RNG return (rand()/static_cast<double>(RAND_MAX) < _lossFraction); } int compare(const ConstRandomFilter& other) const { return cmp(_lossFraction, other._lossFraction); } private: double _lossFraction; }; /// @brief Randomly lose a constant fraction of particles. class ConstLossyFinalState : public LossyFinalState<ConstRandomFilter> { public: /// @name Constructors //@{ /// Constructor from a FinalState. ConstLossyFinalState(const FinalState& fsp, double lossfraction) : LossyFinalState<ConstRandomFilter>(fsp, ConstRandomFilter(lossfraction)) { setName("ConstLossyFinalState"); } /// Stand-alone constructor. Initialises the base FinalState projection. ConstLossyFinalState(double lossfraction, double mineta = -MAXRAPIDITY, double maxeta = MAXRAPIDITY, double minpt = 0.0) : LossyFinalState<ConstRandomFilter>(ConstRandomFilter(lossfraction), mineta, maxeta, minpt) { setName("ConstLossyFinalState"); } /// Clone on the heap. virtual const Projection* clone() const { return new ConstLossyFinalState(*this); } //@} }; } #endif ��������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projections/TotalVisibleMomentum.hh���������������������������������������0000644�0001750�0001750�00000003150�12116077757�022543� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_TotalVisibleMomentum_HH #define RIVET_TotalVisibleMomentum_HH #include "Rivet/Rivet.hh" #include "Rivet/Projection.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Particle.hh" #include "Rivet/Event.hh" namespace Rivet { /// @brief Get the total energy vector, allowing missing \f$ E_T \f$ etc. to be calculated. /// @deprecated This is confusing because the visibility is not automatic. Use MissingMomentum instead. class TotalVisibleMomentum : public Projection { public: /// Constructor. Make sure you supply an appropriately vetoed FS! TotalVisibleMomentum(const FinalState& fsp) { setName("TotalVisibleMomentum"); addProjection(fsp, "FS"); getLog() << Log::WARNING << "TotalVisibleMomentum projection is deprecated: " << "please use the MissingMomentum projection instead." << endl; } /// Clone on the heap. virtual const Projection* clone() const { return new TotalVisibleMomentum(*this); } public: /// The projected four-momentum vector FourMomentum& momentum() { return _momentum; } /// The projected four-momentum vector const FourMomentum& momentum() const { return _momentum; } /// The projected scalar transverse energy double scalarET() const { return _set; } protected: /// Apply the projection to the event. void project(const Event& e); /// Compare projections. int compare(const Projection& p) const; private: /// The total visible momentum FourMomentum _momentum; /// Scalar transverse energy double _set; }; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/AnalysisHandler.hh��������������������������������������������������������0000644�0001750�0001750�00000021661�12116077757�017211� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_RivetHandler_HH #define RIVET_RivetHandler_HH #include "Rivet/Rivet.hh" #include "Rivet/RivetBoost.hh" #include "Rivet/Tools/Logging.fhh" #include "Rivet/AnalysisHandler.fhh" #include "Rivet/Analysis.fhh" #include "Rivet/Event.fhh" #include "Rivet/AnalysisLoader.hh" namespace Rivet { /// Typedef for Analysis (smart) pointer typedef shared_ptr<Analysis> AnaHandle; // Needed to make smart pointers compare equivalent in the STL set struct AnaHandleLess { bool operator()(const AnaHandle& a, const AnaHandle& b) { return a.get() < b.get(); } }; /// A class which handles a number of analysis objects to be applied to /// generated events. An {@link Analysis}' AnalysisHandler is also responsible /// for handling the final writing-out of histograms. class AnalysisHandler { public: /// @name Constructors and destructors. */ //@{ /// Preferred constructor, with optional run name. AnalysisHandler(const string& runname=""); /// @brief Make a Rivet handler with a set base filename and store type. /// /// An AnalysisHandler built with this constructor sets the output histo format /// and filename when the handler is created rather than when it is written. /// This is not the preferred behaviour, to allow for more flexible histogramming /// in future, use the writeData() method to supply the filename and format at /// the point of file-writing. /// /// Note that the run name is now a compulsory argument: this is to avoid /// conflict with the preferred one-argument constructor. /// /// @deprecated Prefer to specify output files and formats explicitly. AnalysisHandler(const string& basefilename, const string& runname, HistoFormat storetype=AIDAML); /// @brief Destructor /// The destructor is not virtual, as this class should not be inherited from. ~AnalysisHandler(); //@} private: /// Do the initialisation of the AIDA analysis factories. /// @deprecated When AIDA goes, this goes... void _setupFactories(const string& basefilename, HistoFormat storetype); /// Do the initialisation of the AIDA analysis factories with no store. /// @deprecated When AIDA goes, this goes... void _setupFactories(); /// Convert any IHistogram1D objects in the AIDA tree to IDataPointSet objects. /// @deprecated When AIDA goes, this goes... void _normalizeTree(AIDA::ITree& tree); /// Get a logger object. Log& getLog() const; public: /// @name Run properties //@{ /// Get the name of this run. string runName() const; /// Get the number of events seen. Should only really be used by external /// steering code or analyses in the finalize phase. size_t numEvents() const; /// Get the sum of the event weights seen - the weighted equivalent of the /// number of events. Should only really be used by external steering code /// or analyses in the finalize phase. double sumOfWeights() const; /// Set sum of weights. This is useful if Rivet is steered externally and /// the analyses are run for a sub-contribution of the events /// (but of course have to be normalised to the total sum of weights) void setSumOfWeights(const double& sum); /// Is cross-section information required by at least one child analysis? bool needCrossSection() const; /// Set the cross-section for the process being generated. AnalysisHandler& setCrossSection(double xs); /// Get the cross-section known to the handler. double crossSection() const { return _xs; } /// Whether the handler knows about a cross-section. bool hasCrossSection() const; /// Set beams for this run AnalysisHandler& setRunBeams(const ParticlePair& beams) { _beams = beams; MSG_DEBUG("Setting run beams = " << beams << " @ " << sqrtS()/GeV << " GeV"); return *this; } /// Get beam IDs for this run, usually determined from the first event. const ParticlePair& beams() const { return _beams; } /// Get beam IDs for this run, usually determined from the first event. PdgIdPair beamIds() const; /// Get energy for this run, usually determined from the first event. double sqrtS() const; /// Setter for _ignoreBeams void setIgnoreBeams(bool ignore=true); //@} /// @name Handle analyses //@{ /// Get a list of the currently registered analyses' names. std::vector<std::string> analysisNames() const; /// Get the collection of currently registered analyses. const std::set<AnaHandle, AnaHandleLess>& analyses() const { return _analyses; } /// Add an analysis to the run list using its name. The actual Analysis /// to be used will be obtained via AnalysisHandler::getAnalysis(string). /// If no matching analysis is found, no analysis is added (i.e. the /// null pointer is checked and discarded. AnalysisHandler& addAnalysis(const std::string& analysisname); /// Remove an analysis from the run list using its name. AnalysisHandler& removeAnalysis(const std::string& analysisname); /// Add analyses to the run list using their names. The actual {@link /// Analysis}' to be used will be obtained via /// AnalysisHandler::addAnalysis(string), which in turn uses /// AnalysisHandler::getAnalysis(string). If no matching analysis is found /// for a given name, no analysis is added, but also no error is thrown. AnalysisHandler& addAnalyses(const std::vector<std::string>& analysisnames); /// Remove analyses from the run list using their names. AnalysisHandler& removeAnalyses(const std::vector<std::string>& analysisnames); /// Add an analysis to the run list by object AnalysisHandler& addAnalysis(Analysis* analysis); //@} /// @name Main init/execute/finalise //@{ /// @deprecated Obsolete method, kept only for backwards compatibility void init() {} /// Initialize a run, with the run beams taken from the example event. void init(const GenEvent& event); /// Analyze the given \a event. This function will call the /// AnalysisBase::analyze() function of all included analysis objects. void analyze(const GenEvent& event); /// Finalize a run. This function first calls the AnalysisBase::finalize() /// functions of all included analysis objects and converts all histograms /// to AIDA DataPointSet objects in the AIDA tree. Using the histogram tree /// for further analysis or writing to file is left to the API user. void finalize(); //@} /// @name AIDA factories etc. /// @deprecated All this will be removed when histogramming is overhauled //@{ /// The AIDA analysis factory. /// @deprecated When AIDA goes, this goes... AIDA::IAnalysisFactory& analysisFactory(); /// Commit the AIDA tree to file. /// @deprecated When AIDA goes, this goes... void commitData(); /// Write the AIDA tree to the named file. /// @deprecated When AIDA goes, this goes... void writeData(const std::string& filename); /// The AIDA tree object. /// @deprecated When AIDA goes, this goes... AIDA::ITree& tree(); /// The AIDA histogram factory. /// @deprecated When AIDA goes, this goes... AIDA::IHistogramFactory& histogramFactory(); /// The AIDA histogram factory. /// @deprecated When AIDA goes, this goes... AIDA::IDataPointSetFactory& datapointsetFactory(); //@} private: /// The collection of Analysis objects to be used. set<AnaHandle, AnaHandleLess> _analyses; /// @name Run properties //@{ /// Run name std::string _runname; /// Number of events seen. size_t _numEvents; /// Sum of event weights seen. double _sumOfWeights; /// Cross-section known to AH double _xs; /// Beams used by this run. ParticlePair _beams; /// Flag to check if init has been called bool _initialised; /// Flag whether input event beams should be ignored in compatibility check bool _ignoreBeams; //@} /// @name AIDA factory handles /// Note that only the analysis factory can be a shared_ptr, since it deletes all the others. //@{ /// The AIDA analysis factory. shared_ptr<AIDA::IAnalysisFactory> _theAnalysisFactory; /// The AIDA tree factory. AIDA::ITreeFactory* _theTreeFactory; /// The AIDA tree object. AIDA::ITree* _theTree; /// The AIDA histogram factory. AIDA::IHistogramFactory* _theHistogramFactory; /// The AIDA data point set factory. AIDA::IDataPointSetFactory* _theDataPointSetFactory; //@} private: /// The assignment operator is private and must never be called. /// In fact, it should not even be implemented. AnalysisHandler& operator=(const AnalysisHandler&); /// The copy constructor is private and must never be called. In /// fact, it should not even be implemented. AnalysisHandler(const AnalysisHandler&); }; } #endif �������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Particle.fhh��������������������������������������������������������������0000644�0001750�0001750�00000001151�12116077757�016031� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Particle_FHH #define RIVET_Particle_FHH #include "Rivet/RivetSTL.hh" namespace Rivet { /// @name Particle declarations //@{ // Forward declaration class Particle; /// Typedef for a vector of Particle objects. typedef std::vector<Particle> ParticleVector; /// Typedef for a pair of Particle objects. typedef std::pair<Particle, Particle> ParticlePair; //@} /// @name PdgId declarations //@{ /// Typedef for a PDG ID code. typedef int PdgId; /// Typedef for a pair of particle names. typedef std::pair<PdgId, PdgId> PdgIdPair; //@} } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Event.fhh�����������������������������������������������������������������0000644�0001750�0001750�00000000155�12116077757�015352� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Event_FHH #define RIVET_Event_FHH namespace Rivet { class Event; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/AnalysisBuilder.hh��������������������������������������������������������0000644�0001750�0001750�00000001734�12116077757�017221� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_AnalysisBuilder_HH #define RIVET_AnalysisBuilder_HH #include "Rivet/Rivet.hh" #include "Rivet/Analysis.fhh" #include "Rivet/AnalysisLoader.hh" #include "Rivet/Tools/Logging.fhh" namespace Rivet { /// @cond ANALYSIS_PLUGIN_DETAILS /// @brief Interface for analysis builders class AnalysisBuilderBase { public: AnalysisBuilderBase() { } virtual ~AnalysisBuilderBase() { } virtual Analysis* mkAnalysis() const = 0; const string name() const { Analysis* a = mkAnalysis(); string rtn = a->name(); delete a; return rtn; } protected: void _register() { AnalysisLoader::_registerBuilder(this); } }; /// @brief Self-registering analysis plugin builder template <typename T> class AnalysisBuilder : public AnalysisBuilderBase { public: AnalysisBuilder() { _register(); } Analysis* mkAnalysis() const { return new T(); } }; /// @endcond } #endif ������������������������������������rivet-1.8.3/include/Rivet/Math/���������������������������������������������������������������������0000755�0001750�0001750�00000000000�12131473213�014452� 5����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/Matrix3.hh�����������������������������������������������������������0000644�0001750�0001750�00000002511�12116077757�016341� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_MATH_MATRIX3 #define RIVET_MATH_MATRIX3 #include "Rivet/Math/MathHeader.hh" #include "Rivet/Math/MathUtils.hh" #include "Rivet/Math/MatrixN.hh" #include "Rivet/Math/Vector3.hh" namespace Rivet { /// @brief Specialisation of MatrixN to aid 3 dimensional rotations. class Matrix3 : public Matrix<3> { public: Matrix3() { } Matrix3(const Matrix<3>& m3) : Matrix<3>::Matrix(m3) { } Matrix3(const Vector3& axis, const double angle) { const Vector3 normaxis = axis.unit(); _matrix.loadRotation3(angle, normaxis._vec); } Matrix3(const Vector3& from, const Vector3& to) { setAsRotation(from, to); } public: static Matrix3 mkXRotation(const double angle) { return Matrix3(Vector3(1,0,0), angle); } static Matrix3 mkYRotation(const double angle) { return Matrix3(Vector3(0,1,0), angle); } static Matrix3 mkZRotation(const double angle) { return Matrix3(Vector3(0,0,1), angle); } public: Matrix3& setAsRotation(const Vector3& from, const Vector3& to) { const double theta = angle(from, to); if (Rivet::isZero(theta)) { _matrix.loadIdentity(); } else { const Vector3 normaxis = cross(from, to).unit(); _matrix.loadRotation3(theta, normaxis._vec); } return *this; } }; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/Constants.hh���������������������������������������������������������0000644�0001750�0001750�00000005457�12116077757�017002� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_MATH_CONSTANTS #define RIVET_MATH_CONSTANTS #include "Rivet/Math/MathHeader.hh" #include "Rivet/Math/Units.hh" namespace Rivet { // // // static const double pi = 3.14159265358979323846; static const double twopi = 2*pi; static const double halfpi = pi/2; static const double pi2 = pi*pi; // // // static const double Avogadro = 6.0221367e+23/mole; // // c = 299.792458 mm/ns // c^2 = 898.7404 (mm/ns)^2 // static const double c_light = 2.99792458e+8 * m/s; static const double c_squared = c_light * c_light; // // h = 4.13566e-12 MeV*ns // hbar = 6.58212e-13 MeV*ns // hbarc = 197.32705e-12 MeV*mm // static const double h_Planck = 6.6260755e-34 * joule*s; static const double hbar_Planck = h_Planck/twopi; static const double hbarc = hbar_Planck * c_light; static const double hbarc_squared = hbarc * hbarc; // // // static const double electron_charge = - eplus; // see SystemOfUnits.h static const double e_squared = eplus * eplus; // // amu_c2 - atomic equivalent mass unit // amu - atomic mass unit // static const double electron_mass_c2 = 0.51099906 * MeV; static const double proton_mass_c2 = 938.27231 * MeV; static const double neutron_mass_c2 = 939.56563 * MeV; static const double amu_c2 = 931.49432 * MeV; static const double amu = amu_c2/c_squared; // // permeability of free space mu0 = 2.01334e-16 Mev*(ns*eplus)^2/mm // permittivity of free space epsil0 = 5.52636e+10 eplus^2/(MeV*mm) // static const double mu0 = 4*pi*1.e-7 * henry/m; static const double epsilon0 = 1./(c_squared*mu0); // // electromagnetic coupling = 1.43996e-12 MeV*mm/(eplus^2) // static const double elm_coupling = e_squared/(4*pi*epsilon0); static const double fine_structure_const = elm_coupling/hbarc; static const double classic_electr_radius = elm_coupling/electron_mass_c2; static const double electron_Compton_length = hbarc/electron_mass_c2; static const double Bohr_radius = electron_Compton_length/fine_structure_const; static const double alpha_rcl2 = fine_structure_const *classic_electr_radius *classic_electr_radius; static const double twopi_mc2_rcl2 = twopi*electron_mass_c2 *classic_electr_radius *classic_electr_radius; // // // static const double k_Boltzmann = 8.617385e-11 * MeV/kelvin; // // // static const double STP_Temperature = 273.15*kelvin; static const double STP_Pressure = 1.*atmosphere; static const double kGasThreshold = 10.*mg/cm3; // // // static const double universe_mean_density = 1.e-25*g/cm3; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/MatrixN.hh�����������������������������������������������������������0000644�0001750�0001750�00000022645�12116077757�016406� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_MATH_MATRIXN #define RIVET_MATH_MATRIXN #include "Rivet/Math/MathHeader.hh" #include "Rivet/Math/MathUtils.hh" #include "Rivet/Math/Vectors.hh" #include "Rivet/Math/eigen/matrix.h" namespace Rivet { template <size_t N> class Matrix; typedef Matrix<4> Matrix4; template <size_t N> Matrix<N> multiply(const Matrix<N>& a, const Matrix<N>& b); template <size_t N> Matrix<N> divide(const Matrix<N>&, const double); template <size_t N> Matrix<N> operator*(const Matrix<N>& a, const Matrix<N>& b); /////////////////////////////////// /// @brief General \f$ N \f$-dimensional mathematical matrix object. template <size_t N> class Matrix { template <size_t M> friend Matrix<M> add(const Matrix<M>&, const Matrix<M>&); template <size_t M> friend Matrix<M> multiply(const double, const Matrix<M>&); template <size_t M> friend Matrix<M> multiply(const Matrix<M>&, const Matrix<M>&); template <size_t M> friend Vector<M> multiply(const Matrix<M>&, const Vector<M>&); template <size_t M> friend Matrix<M> divide(const Matrix<M>&, const double); public: static Matrix<N> mkZero() { Matrix<N> rtn; return rtn; } static Matrix<N> mkDiag(Vector<N> diag) { Matrix<N> rtn; for (size_t i = 0; i < N; ++i) { rtn.set(i, i, diag[i]); } return rtn; } static Matrix<N> mkIdentity() { Matrix<N> rtn; for (size_t i = 0; i < N; ++i) { rtn.set(i, i, 1); } return rtn; } public: Matrix() { _matrix.loadZero(); } Matrix(const Matrix<N>& other) { _matrix = other._matrix; } Matrix& set(const size_t i, const size_t j, const double value) { if (i < N && j < N) { _matrix(i, j) = value; } else { throw std::runtime_error("Attempted set access outside matrix bounds."); } return *this; } double get(const size_t i, const size_t j) const { if (i < N && j < N) { return _matrix(i, j); } else { throw std::runtime_error("Attempted get access outside matrix bounds."); } } Vector<N> getRow(const size_t row) const { Vector<N> rtn; for (size_t i = 0; i < N; ++i) { rtn.set(i, _matrix(row,i)); } return rtn; } Matrix<N>& setRow(const size_t row, const Vector<N>& r) { for (size_t i = 0; i < N; ++i) { _matrix(row,i) = r.get(i); } return *this; } Vector<N> getColumn(const size_t col) const { Vector<N> rtn; for (size_t i = 0; i < N; ++i) { rtn.set(i, _matrix(i,col)); } return rtn; } Matrix<N>& setColumn(const size_t col, const Vector<N>& c) { for (size_t i = 0; i < N; ++i) { _matrix(i,col) = c.get(i); } return *this; } Matrix<N> transpose() const { Matrix<N> tmp = *this; tmp._matrix.replaceWithAdjoint(); return tmp; } // Matrix<N>& transposeInPlace() { // _matrix.replaceWithAdjoint(); // return *this; // } /// Calculate inverse Matrix<N> inverse() const { Matrix<N> tmp; tmp._matrix = _matrix.inverse(); return tmp; } /// Calculate determinant double det() const { return _matrix.determinant(); } /// Calculate trace double trace() const { double tr = 0.0; for (size_t i = 0; i < N; ++i) { tr += _matrix(i,i); } return tr; // return _matrix.trace(); } /// Negate Matrix<N> operator-() const { Matrix<N> rtn; rtn._matrix = -_matrix; return rtn; } /// Get dimensionality size_t size() const { return N; } /// Index-wise check for nullness, allowing for numerical precision bool isZero(double tolerance=1E-5) const { for (size_t i=0; i < N; ++i) { for (size_t j=0; j < N; ++j) { if (! Rivet::isZero(_matrix(i,j), tolerance) ) return false; } } return true; } /// Check for index-wise equality, allowing for numerical precision bool isEqual(Matrix<N> other) const { for (size_t i=0; i < N; ++i) { for (size_t j=i; j < N; ++j) { if (! Rivet::isZero(_matrix(i,j) - other._matrix(i,j)) ) return false; } } return true; } /// Check for symmetry under transposition bool isSymm() const { return isEqual(this->transpose()); } /// Check that all off-diagonal elements are zero, allowing for numerical precision bool isDiag() const { for (size_t i=0; i < N; ++i) { for (size_t j=0; j < N; ++j) { if (i == j) continue; if (! Rivet::isZero(_matrix(i,j)) ) return false; } } return true; } bool operator==(const Matrix<N>& a) const { return _matrix == a._matrix; } bool operator!=(const Matrix<N>& a) const { return _matrix != a._matrix; } bool operator<(const Matrix<N>& a) const { return _matrix < a._matrix; } bool operator<=(const Matrix<N>& a) const { return _matrix <= a._matrix; } bool operator>(const Matrix<N>& a) const { return _matrix > a._matrix; } bool operator>=(const Matrix<N>& a) const { return _matrix >= a._matrix; } Matrix<N>& operator*=(const Matrix<N>& m) { _matrix = _matrix * m._matrix; return *this; } Matrix<N>& operator*=(const double a) { _matrix *= a; return *this; } Matrix<N>& operator/=(const double a) { _matrix /= a; return *this; } Matrix<N>& operator+=(const Matrix<N>& m) { _matrix += m._matrix; return *this; } Matrix<N>& operator-=(const Matrix<N>& m) { _matrix -= m._matrix; return *this; } protected: typedef Eigen::Matrix<double,N> EMatrix; EMatrix _matrix; }; ///////////////////////////////// template <size_t N> inline Matrix<N> add(const Matrix<N>& a, const Matrix<N>& b) { Matrix<N> result; result._matrix = a._matrix + b._matrix; return result; } template <size_t N> inline Matrix<N> subtract(const Matrix<N>& a, const Matrix<N>& b) { return add(a, -b); } template <size_t N> inline Matrix<N> operator+(const Matrix<N> a, const Matrix<N>& b) { return add(a, b); } template <size_t N> inline Matrix<N> operator-(const Matrix<N> a, const Matrix<N>& b) { return subtract(a, b); } template <size_t N> inline Matrix<N> multiply(const double a, const Matrix<N>& m) { Matrix<N> rtn; rtn._matrix = a * m._matrix; return rtn; } template <size_t N> inline Matrix<N> multiply(const Matrix<N>& m, const double a) { return multiply(a, m); } template <size_t N> inline Matrix<N> divide(const Matrix<N>& m, const double a) { return multiply(1/a, m); } template <size_t N> inline Matrix<N> operator*(const double a, const Matrix<N>& m) { return multiply(a, m); } template <size_t N> inline Matrix<N> operator*(const Matrix<N>& m, const double a) { return multiply(a, m); } template <size_t N> inline Matrix<N> multiply(const Matrix<N>& a, const Matrix<N>& b) { Matrix<N> tmp; tmp._matrix = a._matrix * b._matrix; return tmp; } template <size_t N> inline Matrix<N> operator*(const Matrix<N>& a, const Matrix<N>& b) { return multiply(a, b); } template <size_t N> inline Vector<N> multiply(const Matrix<N>& a, const Vector<N>& b) { Vector<N> tmp; tmp._vec = a._matrix * b._vec; return tmp; } template <size_t N> inline Vector<N> operator*(const Matrix<N>& a, const Vector<N>& b) { return multiply(a, b); } template <size_t N> inline Matrix<N> transpose(const Matrix<N>& m) { // Matrix<N> tmp; // for (size_t i = 0; i < N; ++i) { // for (size_t j = 0; j < N; ++j) { // tmp.set(i, j, m.get(j, i)); // } // } // return tmp; return m.transpose(); } template <size_t N> inline Matrix<N> inverse(const Matrix<N>& m) { return m.inverse(); } template <size_t N> inline double det(const Matrix<N>& m) { return m.determinant(); } template <size_t N> inline double trace(const Matrix<N>& m) { return m.trace(); } ///////////////////////////////// /// Make string representation template <size_t N> inline string toString(const Matrix<N>& m) { ostringstream ss; ss << "[ "; for (size_t i = 0; i < m.size(); ++i) { ss << "( "; for (size_t j = 0; j < m.size(); ++j) { const double e = m.get(i, j); ss << (Rivet::isZero(e) ? 0.0 : e) << " "; } ss << ") "; } ss << "]"; return ss.str(); } /// Stream out string representation template <size_t N> inline ostream& operator<<(std::ostream& out, const Matrix<N>& m) { out << toString(m); return out; } ///////////////////////////////////////////////// /// Compare two matrices by index, allowing for numerical precision template <size_t N> inline bool fuzzyEquals(const Matrix<N>& ma, const Matrix<N>& mb, double tolerance=1E-5) { for (size_t i = 0; i < N; ++i) { for (size_t j = 0; j < N; ++j) { const double a = ma.get(i, j); const double b = mb.get(i, j); if (!Rivet::fuzzyEquals(a, b, tolerance)) return false; } } return true; } /// External form of numerically safe nullness check template <size_t N> inline bool isZero(const Matrix<N>& m, double tolerance=1E-5) { return m.isZero(tolerance); } } #endif �������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/LorentzTrans.hh������������������������������������������������������0000644�0001750�0001750�00000010503�12116077757�017457� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_MATH_LORENTZTRANS #define RIVET_MATH_LORENTZTRANS #include <iostream> #include "Rivet/Math/MathHeader.hh" #include "Rivet/Math/MathUtils.hh" #include "Rivet/Math/MatrixN.hh" #include "Rivet/Math/Matrix3.hh" #include "Rivet/Math/Vector4.hh" namespace Rivet { inline double lorentzGamma(const double beta) { return 1.0 / sqrt(1 - beta*beta); } /// @brief Object implementing Lorentz transform calculations and boosts. class LorentzTransform { friend string toString(const LorentzTransform& lt); public: LorentzTransform() { _boostMatrix = Matrix<4>::mkIdentity(); } LorentzTransform(const Vector3& boost) { setBoost(boost); } LorentzTransform(const double betaX, const double betaY, const double betaZ) { setBoost(betaX, betaY, betaZ); } LorentzTransform& setBoost(const Vector3& boost) { assert(boost.mod2() < 1); const double beta = boost.mod(); const double gamma = lorentzGamma(beta); _boostMatrix = Matrix<4>::mkIdentity(); _boostMatrix.set(0, 0, gamma); _boostMatrix.set(1, 1, gamma); // Positive coeff since these are active boosts _boostMatrix.set(0, 1, +beta*gamma); _boostMatrix.set(1, 0, +beta*gamma); _boostMatrix = rotate(Vector3::mkX(), boost)._boostMatrix; return *this; } // LorentzTransform& setBoost(const Vector3& boostdirection, const double beta) { // const Vector3 boost = boostdirection.unit() * beta; // return setBoost(boost); // } LorentzTransform& setBoost(const double betaX, const double betaY, const double betaZ) { return setBoost(Vector3(betaX, betaY, betaZ)); } Vector3 boost() const { FourMomentum boost(_boostMatrix.getColumn(0)); //cout << "!!!" << boost << endl; if (boost.isZero()) return boost; assert(boost.E() > 0); const double beta = boost.p().mod() / boost.E(); return boost.p().unit() * beta; } double beta() const { return boost().mod(); } double gamma() const { return lorentzGamma(beta()); } LorentzTransform rotate(const Vector3& from, const Vector3& to) const { return rotate(Matrix3(from, to)); } LorentzTransform rotate(const Vector3& axis, const double angle) const { return rotate(Matrix3(axis, angle)); } LorentzTransform rotate(const Matrix3& rot) const { LorentzTransform lt = *this; const Matrix4 rot4 = mkMatrix4(rot); const Matrix4 newlt = rot4 * _boostMatrix * rot4.inverse(); lt._boostMatrix = newlt; return lt; } FourVector transform(const FourVector& v4) const { return multiply(_boostMatrix, v4); } LorentzTransform inverse() const { LorentzTransform rtn; rtn._boostMatrix = _boostMatrix.inverse(); return rtn; } /// Combine LTs, treating @a this as the LH matrix. LorentzTransform combine(const LorentzTransform& lt) const { LorentzTransform rtn; rtn._boostMatrix = _boostMatrix * lt._boostMatrix; return rtn; } Matrix4 toMatrix() const { return _boostMatrix; } LorentzTransform operator*(const LorentzTransform& lt) const { return combine(lt); } LorentzTransform preMult(const Matrix3 & m3) { _boostMatrix = multiply(mkMatrix4(m3),_boostMatrix); return *this; } LorentzTransform postMult(const Matrix3 & m3) { _boostMatrix *= mkMatrix4(m3); return *this; } private: Matrix4 mkMatrix4(const Matrix3& m3) const { Matrix4 m4 = Matrix4::mkIdentity(); for (size_t i = 0; i < 3; ++i) { for (size_t j = 0; j < 3; ++j) { m4.set(i+1, j+1, m3.get(i, j)); } } return m4; } private: Matrix4 _boostMatrix; }; inline LorentzTransform inverse(const LorentzTransform& lt) { return lt.inverse(); } inline LorentzTransform combine(const LorentzTransform& a, const LorentzTransform& b) { return a.combine(b); } inline FourVector transform(const LorentzTransform& lt, const FourVector& v4) { return lt.transform(v4); } ////////////////////////// inline string toString(const LorentzTransform& lt) { return toString(lt._boostMatrix); } inline ostream& operator<<(std::ostream& out, const LorentzTransform& lt) { out << toString(lt); return out; } } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/MatrixDiag.hh��������������������������������������������������������0000644�0001750�0001750�00000011113�12116077757�017041� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_MATH_MATRIXDIAG #define RIVET_MATH_MATRIXDIAG #include "Rivet/Math/MathHeader.hh" #include "Rivet/Math/MatrixN.hh" #include "gsl/gsl_vector.h" #include "gsl/gsl_matrix.h" #include "gsl/gsl_eigen.h" namespace Rivet { // // GSL forward declarations (avoids need for GSL header files) // extern "C" { // struct gsl_vector; // gsl_vector* gsl_vector_alloc(size_t); // double gsl_vector_get(gsl_vector*, size_t); // void gsl_vector_set(gsl_vector*, size_t, double); // void gsl_vector_free(gsl_vector*); // struct gsl_matrix; // gsl_matrix* gsl_matrix_alloc(size_t, size_t); // double gsl_matrix_get(gsl_matrix*, size_t, size_t); // void gsl_matrix_set(gsl_matrix*, size_t, size_t, double); // void gsl_matrix_free(gsl_matrix*); // struct gsl_eigen_symmv_workspace; // gsl_eigen_symmv_workspace* gsl_eigen_symmv_alloc(size_t); // void gsl_eigen_symmv(gsl_matrix*, gsl_vector*, gsl_matrix*, gsl_eigen_symmv_workspace*); // void gsl_eigen_symmv_free(gsl_eigen_symmv_workspace*); // typedef enum { // GSL_EIGEN_SORT_VAL_ASC, // GSL_EIGEN_SORT_VAL_DESC, // GSL_EIGEN_SORT_ABS_ASC, // GSL_EIGEN_SORT_ABS_DESC // } // gsl_eigen_sort_t; // int gsl_eigen_symmv_sort(gsl_vector * eval, gsl_matrix * evec, gsl_eigen_sort_t sort_type); // } template <size_t N> class EigenSystem; template <size_t N> EigenSystem<N> diagonalize(const Matrix<N>& m); /// Handy object containing results of a diagonalization. template <size_t N> class EigenSystem { template <size_t M> friend EigenSystem<M> diagonalize(const Matrix<M>&); public: typedef pair<double, Vector<N> > EigenPair; typedef vector<EigenPair> EigenPairs; Vector<N> getDiagVector() const { assert(_eigenPairs.size() == N); Vector<N> ret; for (size_t i = 0; i < N; ++i) { ret.set(i, _eigenPairs[i].first); } return ret; } Matrix<N> getDiagMatrix() const { return Matrix<N>::mkDiag(getDiagVector()); } EigenPairs getEigenPairs() const { return _eigenPairs; } vector<double> getEigenValues() const { assert(_eigenPairs.size() == N); vector<double> ret; for (size_t i = 0; i < N; ++i) { ret.push_back(_eigenPairs[i].first); } return ret; } vector<Vector<N> > getEigenVectors() const { assert(_eigenPairs.size() == N); vector<Vector<N> > ret; for (size_t i = 0; i < N; ++i) { ret.push_back(_eigenPairs[i].second); } return ret; } private: EigenPairs _eigenPairs; }; /// Comparison functor for "eigen-pairs". template <size_t N> struct EigenPairCmp : public std::binary_function<const typename EigenSystem<N>::EigenPair&, const typename EigenSystem<N>::EigenPair&, bool> { bool operator()(const typename EigenSystem<N>::EigenPair& a, const typename EigenSystem<N>::EigenPair& b) { return a.first < b.first; } }; /// Diagonalize an NxN matrix, returning a collection of pairs of /// eigenvalues and eigenvectors, ordered decreasing in eigenvalue. template <size_t N> EigenSystem<N> diagonalize(const Matrix<N>& m) { EigenSystem<N> esys; // Make a GSL matrix. gsl_matrix* A = gsl_matrix_alloc(N, N); for (size_t i = 0; i < N; ++i) { for (size_t j = 0; j < N; ++j) { gsl_matrix_set(A, i, j, m.get(i, j)); } } // Use GSL diagonalization. gsl_matrix* vecs = gsl_matrix_alloc(N, N); gsl_vector* vals = gsl_vector_alloc(N); gsl_eigen_symmv_workspace* workspace = gsl_eigen_symmv_alloc(N); gsl_eigen_symmv(A, vals, vecs, workspace); gsl_eigen_symmv_sort(vals, vecs, GSL_EIGEN_SORT_VAL_DESC); // Build the vector of "eigen-pairs". typename EigenSystem<N>::EigenPairs eigensolns; for (size_t i = 0; i < N; ++i) { typename EigenSystem<N>::EigenPair ep; ep.first = gsl_vector_get(vals, i); Vector<N> ev; for (size_t j = 0; j < N; ++j) { ev.set(j, gsl_matrix_get(vecs, j, i)); } ep.second = ev; eigensolns.push_back(ep); } // Free GSL memory. gsl_eigen_symmv_free(workspace); gsl_matrix_free(A); gsl_matrix_free(vecs); gsl_vector_free(vals); // Populate the returned object. esys._eigenPairs = eigensolns; return esys; } template <size_t N> inline const string toString(const typename EigenSystem<N>::EigenPair& e) { ostringstream ss; //for (typename EigenSystem<N>::EigenPairs::const_iterator i = e.begin(); i != e.end(); ++i) { ss << e->first << " -> " << e->second; // if (i+1 != e.end()) ss << endl; //} return ss.str(); } template <size_t N> inline ostream& operator<<(std::ostream& out, const typename EigenSystem<N>::EigenPair& e) { out << toString(e); return out; } } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/Vectors.hh�����������������������������������������������������������0000644�0001750�0001750�00000000306�12116077757�016437� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_MATH_VECTORS #define RIVET_MATH_VECTORS #include "Rivet/Math/MathHeader.hh" #include "Rivet/Math/VectorN.hh" #include "Rivet/Math/Vector3.hh" #include "Rivet/Math/Vector4.hh" #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/VectorN.hh�����������������������������������������������������������0000644�0001750�0001750�00000011162�12116077757�016374� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_MATH_VECTORN #define RIVET_MATH_VECTORN #include "Rivet/Math/MathHeader.hh" #include "Rivet/Math/MathUtils.hh" #include "Rivet/Math/eigen/vector.h" namespace Rivet { template <size_t N> class Vector; template <size_t N> class Matrix; template <size_t N> Vector<N> multiply(const Matrix<N>& a, const Vector<N>& b); /// A minimal base class for \f$ N \f$-dimensional vectors. template <size_t N> class Vector { template <size_t M> friend Vector<M> multiply(const Matrix<M>& a, const Vector<M>& b); public: Vector() { _vec.loadZero(); } Vector(const Vector<N>& other) : _vec(other._vec) { } const double& get(const size_t index) const { if (index >= N) { throw std::runtime_error("Tried to access an invalid vector index."); } else { return _vec(index); } } /// Direct access to vector elements by index. const double& operator[](const size_t index) const { return get(index); } /// Direct access to vector elements by index. double& operator[](const size_t index) { return get(index); } /// Set indexed value Vector<N>& set(const size_t index, const double value) { if (index >= N) { throw std::runtime_error("Tried to access an invalid vector index."); } else { _vec[index] = value; } return *this; } /// Vector dimensionality size_t size() const { return N; } /// Check for nullness, allowing for numerical precision bool isZero(double tolerance=1E-5) const { for (size_t i=0; i < N; ++i) { if (! Rivet::isZero(_vec[i], tolerance) ) return false; } return true; } /// @brief Calculate the modulus-squared of a vector. /// \f$ \sum_{i=1}^N x_i^2 \f$. double mod2() const { double mod2 = 0.0; for (size_t i = 0; i < size(); ++i) { const double element = get(i); mod2 += element*element; } return mod2; } /// @brief Calculate the modulus of a vector. /// \f$ \sqrt{\sum_{i=1}^N x_i^2} \f$. double mod() const { const double norm = mod2(); assert(norm >= 0); return sqrt(norm); } /// Invert the vector Vector<N> operator-() const { Vector<N> rtn; rtn._vec = -_vec; return rtn; } bool operator==(const Vector<N>& a) const { return _vec == a._vec; } bool operator!=(const Vector<N>& a) const { return _vec != a._vec; } bool operator<(const Vector<N>& a) const { return _vec < a._vec; } bool operator<=(const Vector<N>& a) const { return _vec <= a._vec; } bool operator>(const Vector<N>& a) const { return _vec > a._vec; } bool operator>=(const Vector<N>& a) const { return _vec >= a._vec; } protected: double& get(const size_t index) { if (index >= N) { throw std::runtime_error("Tried to access an invalid vector index."); } else { return _vec(index); } } /// Vector Eigen::Vector<double,N> _vec; }; /// Calculate the modulus-squared of a vector. /// \f$ \sum_{i=1}^N x_i^2 \f$. template <size_t N> inline double mod2(const Vector<N>& v) { return v.mod2(); } /// Calculate the modulus of a vector. /// \f$ \sqrt{\sum_{i=1}^N x_i^2} \f$. template <size_t N> inline double mod(const Vector<N>& v) { return v.mod(); } ///////////////////////////////////////////////// /// @name String representations of vectors //@{ /// Make string representation template <size_t N> inline const string toString(const Vector<N>& v) { ostringstream out; out << "("; for (size_t i = 0; i < v.size(); ++i) { out << (fabs(v[i]) < 1E-30 ? 0.0 : v[i]); if (i < v.size()-1) out << ", "; } out << ")"; return out.str(); } /// Stream out string representation template <size_t N> inline std::ostream& operator<<(std::ostream& out, const Vector<N>& v) { out << toString(v); return out; } //@} ///////////////////////////////////////////////// /// Compare two vectors by index, allowing for numerical precision template <size_t N> inline bool fuzzyEquals(const Vector<N>& va, const Vector<N>& vb, double tolerance=1E-5) { for (size_t i = 0; i < N; ++i) { const double a = va.get(i); const double b = vb.get(i); if (!Rivet::fuzzyEquals(a, b, tolerance)) return false; } return true; } /// External form of numerically safe nullness check template <size_t N> inline bool isZero(const Vector<N>& v, double tolerance=1E-5) { return v.isZero(tolerance); } } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/Vector4.hh�����������������������������������������������������������0000644�0001750�0001750�00000073122�12116077757�016346� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_MATH_VECTOR4 #define RIVET_MATH_VECTOR4 #include "Rivet/Math/MathHeader.hh" #include "Rivet/Math/MathUtils.hh" #include "Rivet/Math/VectorN.hh" #include "Rivet/Math/Vector3.hh" namespace Rivet { class FourVector; class FourMomentum; class LorentzTransform; typedef FourVector Vector4; FourVector transform(const LorentzTransform& lt, const FourVector& v4); /// @brief Specialisation of VectorN to a general (non-momentum) Lorentz 4-vector. class FourVector : public Vector<4> { friend FourVector multiply(const double a, const FourVector& v); friend FourVector multiply(const FourVector& v, const double a); friend FourVector add(const FourVector& a, const FourVector& b); friend FourVector transform(const LorentzTransform& lt, const FourVector& v4); public: FourVector() : Vector<4>() { } template<typename V4> FourVector(const V4& other) { this->setT(other.t()); this->setX(other.x()); this->setY(other.y()); this->setZ(other.z()); } FourVector(const Vector<4>& other) : Vector<4>(other) { } FourVector(const double t, const double x, const double y, const double z) { this->setT(t); this->setX(x); this->setY(y); this->setZ(z); } virtual ~FourVector() { } public: double t() const { return get(0); } double x() const { return get(1); } double y() const { return get(2); } double z() const { return get(3); } FourVector& setT(const double t) { set(0, t); return *this; } FourVector& setX(const double x) { set(1, x); return *this; } FourVector& setY(const double y) { set(2, y); return *this; } FourVector& setZ(const double z) { set(3, z); return *this; } double invariant() const { // Done this way for numerical precision return (t() + z())*(t() - z()) - x()*x() - y()*y(); } /// Angle between this vector and another double angle(const FourVector& v) const { return vector3().angle( v.vector3() ); } /// Angle between this vector and another (3-vector) double angle(const Vector3& v3) const { return vector3().angle(v3); } /// @brief Square of the projection of the 3-vector on to the \f$ x-y \f$ plane /// This is a more efficient function than @c polarRadius, as it avoids the square root. /// Use it if you only need the squared value, or e.g. an ordering by magnitude. double polarRadius2() const { return vector3().polarRadius2(); } /// Synonym for polarRadius2 double perp2() const { return vector3().perp2(); } /// Synonym for polarRadius2 double rho2() const { return vector3().rho2(); } /// Projection of 3-vector on to the \f$ x-y \f$ plane double polarRadius() const { return vector3().polarRadius(); } /// Synonym for polarRadius double perp() const { return vector3().perp(); } /// Synonym for polarRadius double rho() const { return vector3().rho(); } /// Angle subtended by the 3-vector's projection in x-y and the x-axis. double azimuthalAngle(const PhiMapping mapping = ZERO_2PI) const { return vector3().azimuthalAngle(mapping); } /// Synonym for azimuthalAngle. double phi(const PhiMapping mapping = ZERO_2PI) const { return vector3().phi(mapping); } /// Angle subtended by the 3-vector and the z-axis. double polarAngle() const { return vector3().polarAngle(); } /// Synonym for polarAngle. double theta() const { return vector3().theta(); } /// Pseudorapidity (defined purely by the 3-vector components) double pseudorapidity() const { return vector3().pseudorapidity(); } /// Synonym for pseudorapidity. double eta() const { return vector3().eta(); } /// Get the spatial part of the 4-vector as a 3-vector. Vector3 vector3() const { return Vector3(get(1), get(2), get(3)); } public: /// Contract two 4-vectors, with metric signature (+ - - -). double contract(const FourVector& v) const { const double result = t()*v.t() - x()*v.x() - y()*v.y() - z()*v.z(); return result; } /// Contract two 4-vectors, with metric signature (+ - - -). double dot(const FourVector& v) const { return contract(v); } /// Contract two 4-vectors, with metric signature (+ - - -). double operator*(const FourVector& v) const { return contract(v); } /// Multiply by a scalar. FourVector& operator*=(double a) { _vec = multiply(a, *this)._vec; return *this; } /// Divide by a scalar. FourVector& operator/=(double a) { _vec = multiply(1.0/a, *this)._vec; return *this; } /// Add to this 4-vector. FourVector& operator+=(const FourVector& v) { _vec = add(*this, v)._vec; return *this; } /// Subtract from this 4-vector. NB time as well as space components are subtracted. FourVector& operator-=(const FourVector& v) { _vec = add(*this, -v)._vec; return *this; } /// Multiply all components (space and time) by -1. FourVector operator-() const { FourVector result; result._vec = -_vec; return result; } }; /// Contract two 4-vectors, with metric signature (+ - - -). inline double contract(const FourVector& a, const FourVector& b) { return a.contract(b); } /// Contract two 4-vectors, with metric signature (+ - - -). inline double dot(const FourVector& a, const FourVector& b) { return contract(a, b); } inline FourVector multiply(const double a, const FourVector& v) { FourVector result; result._vec = a * v._vec; return result; } inline FourVector multiply(const FourVector& v, const double a) { return multiply(a, v); } inline FourVector operator*(const double a, const FourVector& v) { return multiply(a, v); } inline FourVector operator*(const FourVector& v, const double a) { return multiply(a, v); } inline FourVector operator/(const FourVector& v, const double a) { return multiply(1.0/a, v); } inline FourVector add(const FourVector& a, const FourVector& b) { FourVector result; result._vec = a._vec + b._vec; return result; } inline FourVector operator+(const FourVector& a, const FourVector& b) { return add(a, b); } inline FourVector operator-(const FourVector& a, const FourVector& b) { return add(a, -b); } /// Calculate the Lorentz self-invariant of a 4-vector. /// \f$ v_\mu v^\mu = g_{\mu\nu} x^\mu x^\nu \f$. inline double invariant(const FourVector& lv) { return lv.invariant(); } /// Angle (in radians) between spatial parts of two Lorentz vectors. inline double angle(const FourVector& a, const FourVector& b) { return a.angle(b); } /// Angle (in radians) between spatial parts of two Lorentz vectors. inline double angle(const Vector3& a, const FourVector& b) { return angle( a, b.vector3() ); } /// Angle (in radians) between spatial parts of two Lorentz vectors. inline double angle(const FourVector& a, const Vector3& b) { return a.angle(b); } /// Calculate transverse length sq. \f$ \rho^2 \f$ of a Lorentz vector. inline double polarRadius2(const FourVector& v) { return v.polarRadius2(); } /// Synonym for polarRadius2. inline double perp2(const FourVector& v) { return v.perp2(); } /// Synonym for polarRadius2. inline double rho2(const FourVector& v) { return v.rho2(); } /// Calculate transverse length \f$ \rho \f$ of a Lorentz vector. inline double polarRadius(const FourVector& v) { return v.polarRadius(); } /// Synonym for polarRadius. inline double perp(const FourVector& v) { return v.perp(); } /// Synonym for polarRadius. inline double rho(const FourVector& v) { return v.rho(); } /// Calculate azimuthal angle of a Lorentz vector. inline double azimuthalAngle(const FourVector& v, const PhiMapping mapping = ZERO_2PI) { return v.azimuthalAngle(mapping); } /// Synonym for azimuthalAngle. inline double phi(const FourVector& v, const PhiMapping mapping = ZERO_2PI) { return v.phi(mapping); } /// Calculate polar angle of a Lorentz vector. inline double polarAngle(const FourVector& v) { return v.polarAngle(); } /// Synonym for polarAngle. inline double theta(const FourVector& v) { return v.theta(); } /// Calculate pseudorapidity of a Lorentz vector. inline double pseudorapidity(const FourVector& v) { return v.pseudorapidity(); } /// Synonym for pseudorapidity. inline double eta(const FourVector& v) { return v.eta(); } //////////////////////////////////////////////// /// Specialized version of the FourVector with momentum/energy functionality. class FourMomentum : public FourVector { friend FourMomentum multiply(const double a, const FourMomentum& v); friend FourMomentum multiply(const FourMomentum& v, const double a); friend FourMomentum add(const FourMomentum& a, const FourMomentum& b); friend FourMomentum transform(const LorentzTransform& lt, const FourMomentum& v4); public: FourMomentum() { } template<typename V4> FourMomentum(const V4& other) { this->setE(other.t()); this->setPx(other.x()); this->setPy(other.y()); this->setPz(other.z()); } FourMomentum(const Vector<4>& other) : FourVector(other) { } FourMomentum(const double E, const double px, const double py, const double pz) { this->setE(E); this->setPx(px); this->setPy(py); this->setPz(pz); } ~FourMomentum() {} public: /// Get energy \f$ E \f$ (time component of momentum). double E() const { return t(); } /// Get 3-momentum part, \f$ p \f$. Vector3 p() const { return vector3(); } /// Get x-component of momentum \f$ p_x \f$. double px() const { return x(); } /// Get y-component of momentum \f$ p_y \f$. double py() const { return y(); } /// Get z-component of momentum \f$ p_z \f$. double pz() const { return z(); } /// Set energy \f$ E \f$ (time component of momentum). FourMomentum& setE(double E) { setT(E); return *this; } /// Set x-component of momentum \f$ p_x \f$. FourMomentum& setPx(double px) { setX(px); return *this; } /// Set y-component of momentum \f$ p_y \f$. FourMomentum& setPy(double py) { setY(py); return *this; } /// Set z-component of momentum \f$ p_z \f$. FourMomentum& setPz(double pz) { setZ(pz); return *this; } /// @brief Get the mass \f$ m = \sqrt{E^2 - p^2} \f$ (the Lorentz self-invariant). /// /// For spacelike momenta, the mass will be -sqrt(|mass2|). double mass() const { // assert(Rivet::isZero(mass2()) || mass2() > 0); // if (Rivet::isZero(mass2())) { // return 0.0; // } else { // return sqrt(mass2()); // } return sign(mass2()) * sqrt(fabs(mass2())); } /// Get the squared mass \f$ m^2 = E^2 - p^2 \f$ (the Lorentz self-invariant). double mass2() const { return invariant(); } /// Calculate the rapidity. double rapidity() const { return 0.5 * std::log( (E() + pz()) / (E() - pz()) ); } /// Calculate the squared transverse momentum \f$ p_T^2 \f$. double pT2() const { return vector3().polarRadius2(); } /// Calculate the transverse momentum \f$ p_T \f$. double pT() const { return sqrt(pT2()); } /// Calculate the transverse energy \f$ E_T^2 = E^2 \sin^2{\theta} \f$. double Et2() const { return Et() * Et(); } /// Calculate the transverse energy \f$ E_T = E \sin{\theta} \f$. double Et() const { return E() * sin(polarAngle()); } /// Calculate the boost vector (in units of \f$ \beta \f$). Vector3 boostVector() const { // const Vector3 p3 = vector3(); // const double m2 = mass2(); // if (Rivet::isZero(m2)) return p3.unit(); // else { // // Could also do this via beta = tanh(rapidity), but that's // // probably more messy from a numerical hygiene point of view. // const double p2 = p3.mod2(); // const double beta = sqrt( p2 / (m2 + p2) ); // return beta * p3.unit(); // } /// @todo Be careful about c=1 convention... return Vector3(px()/E(), py()/E(), pz()/E()); } /// Struct for sorting by increasing energy struct byEAscending { bool operator()(const FourMomentum& left, const FourMomentum& right) const{ double pt2left = left.E(); double pt2right = right.E(); return pt2left < pt2right; } bool operator()(const FourMomentum* left, const FourMomentum* right) const{ return (*this)(left, right); } }; /// Struct for sorting by decreasing energy struct byEDescending { bool operator()(const FourMomentum& left, const FourMomentum& right) const{ return byEAscending()(right, left); } bool operator()(const FourMomentum* left, const FourVector* right) const{ return (*this)(left, right); } }; /// Multiply by a scalar FourMomentum& operator*=(double a) { _vec = multiply(a, *this)._vec; return *this; } /// Divide by a scalar FourMomentum& operator/=(double a) { _vec = multiply(1.0/a, *this)._vec; return *this; } /// Subtract from this 4-vector. NB time as well as space components are subtracted. FourMomentum& operator+=(const FourMomentum& v) { _vec = add(*this, v)._vec; return *this; } /// Subtract from this 4-vector. NB time as well as space components are subtracted. FourMomentum& operator-=(const FourMomentum& v) { _vec = add(*this, -v)._vec; return *this; } /// Multiply all components (time and space) by -1. FourMomentum operator-() const { FourMomentum result; result._vec = -_vec; return result; } }; inline FourMomentum multiply(const double a, const FourMomentum& v) { FourMomentum result; result._vec = a * v._vec; return result; } inline FourMomentum multiply(const FourMomentum& v, const double a) { return multiply(a, v); } inline FourMomentum operator*(const double a, const FourMomentum& v) { return multiply(a, v); } inline FourMomentum operator*(const FourMomentum& v, const double a) { return multiply(a, v); } inline FourMomentum operator/(const FourMomentum& v, const double a) { return multiply(1.0/a, v); } inline FourMomentum add(const FourMomentum& a, const FourMomentum& b) { FourMomentum result; result._vec = a._vec + b._vec; return result; } inline FourMomentum operator+(const FourMomentum& a, const FourMomentum& b) { return add(a, b); } inline FourMomentum operator-(const FourMomentum& a, const FourMomentum& b) { return add(a, -b); } /// Get the mass \f$ m = \sqrt{E^2 - p^2} \f$ (the Lorentz self-invariant) of a momentum 4-vector. inline double mass(const FourMomentum& v) { return v.mass(); } /// Get the squared mass \f$ m^2 = E^2 - p^2 \f$ (the Lorentz self-invariant) of a momentum 4-vector. inline double mass2(const FourMomentum& v) { return v.mass2(); } /// Calculate the rapidity of a momentum 4-vector. inline double rapidity(const FourMomentum& v) { return v.rapidity(); } /// Calculate the squared transverse momentum \f$ p_T^2 \f$ of a momentum 4-vector. inline double pT2(const FourMomentum& v) { return v.pT2(); } /// Calculate the transverse momentum \f$ p_T \f$ of a momentum 4-vector. inline double pT(const FourMomentum& v) { return v.pT(); } /// Calculate the transverse energy squared, \f$ E_T^2 = E^2 \sin^2{\theta} \f$ of a momentum 4-vector. inline double Et2(const FourMomentum& v) { return v.Et2();} /// Calculate the transverse energy \f$ E_T = E \sin{\theta} \f$ of a momentum 4-vector. inline double Et(const FourMomentum& v) { return v.Et(); } /// Calculate the velocity boost vector of a momentum 4-vector. inline Vector3 boostVector(const FourMomentum& v) { return v.boostVector(); } ////////////////////////////////////////////////////// /// @name \f$ \Delta R \f$ calculations from 4-vectors //@{ /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two four-vectors. /// There is a scheme ambiguity for momentum-type four vectors as to whether /// the pseudorapidity (a purely geometric concept) or the rapidity (a /// relativistic energy-momentum quantity) is to be used: this can be chosen /// via the optional scheme parameter. Use of this scheme option is /// discouraged in this case since @c RAPIDITY is only a valid option for /// vectors whose type is really the FourMomentum derived class. inline double deltaR(const FourVector& a, const FourVector& b, RapScheme scheme = PSEUDORAPIDITY) { switch (scheme) { case PSEUDORAPIDITY : return deltaR(a.vector3(), b.vector3()); case RAPIDITY: { const FourMomentum* ma = dynamic_cast<const FourMomentum*>(&a); const FourMomentum* mb = dynamic_cast<const FourMomentum*>(&b); if (!ma || !mb) { string err = "deltaR with scheme RAPIDITY can only be called with FourMomentum objects, not FourVectors"; throw std::runtime_error(err); } return deltaR(*ma, *mb, scheme); } default: throw std::runtime_error("The specified deltaR scheme is not yet implemented"); } } /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two four-vectors. /// There is a scheme ambiguity for momentum-type four vectors /// as to whether the pseudorapidity (a purely geometric concept) or the /// rapidity (a relativistic energy-momentum quantity) is to be used: this can /// be chosen via the optional scheme parameter. inline double deltaR(const FourVector& v, double eta2, double phi2, RapScheme scheme = PSEUDORAPIDITY) { switch (scheme) { case PSEUDORAPIDITY : return deltaR(v.vector3(), eta2, phi2); case RAPIDITY: { const FourMomentum* mv = dynamic_cast<const FourMomentum*>(&v); if (!mv) { string err = "deltaR with scheme RAPIDITY can only be called with FourMomentum objects, not FourVectors"; throw std::runtime_error(err); } return deltaR(*mv, eta2, phi2, scheme); } default: throw std::runtime_error("The specified deltaR scheme is not yet implemented"); } } /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two four-vectors. /// There is a scheme ambiguity for momentum-type four vectors /// as to whether the pseudorapidity (a purely geometric concept) or the /// rapidity (a relativistic energy-momentum quantity) is to be used: this can /// be chosen via the optional scheme parameter. inline double deltaR(double eta1, double phi1, const FourVector& v, RapScheme scheme = PSEUDORAPIDITY) { switch (scheme) { case PSEUDORAPIDITY : return deltaR(eta1, phi1, v.vector3()); case RAPIDITY: { const FourMomentum* mv = dynamic_cast<const FourMomentum*>(&v); if (!mv) { string err = "deltaR with scheme RAPIDITY can only be called with FourMomentum objects, not FourVectors"; throw std::runtime_error(err); } return deltaR(eta1, phi1, *mv, scheme); } default: throw std::runtime_error("The specified deltaR scheme is not yet implemented"); } } /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two four-vectors. /// There is a scheme ambiguity for momentum-type four vectors /// as to whether the pseudorapidity (a purely geometric concept) or the /// rapidity (a relativistic energy-momentum quantity) is to be used: this can /// be chosen via the optional scheme parameter. inline double deltaR(const FourMomentum& a, const FourMomentum& b, RapScheme scheme = PSEUDORAPIDITY) { switch (scheme) { case PSEUDORAPIDITY: return deltaR(a.vector3(), b.vector3()); case RAPIDITY: return deltaR(a.rapidity(), a.azimuthalAngle(), b.rapidity(), b.azimuthalAngle()); default: throw std::runtime_error("The specified deltaR scheme is not yet implemented"); } } /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two four-vectors. /// There is a scheme ambiguity for momentum-type four vectors /// as to whether the pseudorapidity (a purely geometric concept) or the /// rapidity (a relativistic energy-momentum quantity) is to be used: this can /// be chosen via the optional scheme parameter. inline double deltaR(const FourMomentum& v, double eta2, double phi2, RapScheme scheme = PSEUDORAPIDITY) { switch (scheme) { case PSEUDORAPIDITY: return deltaR(v.vector3(), eta2, phi2); case RAPIDITY: return deltaR(v.rapidity(), v.azimuthalAngle(), eta2, phi2); default: throw std::runtime_error("The specified deltaR scheme is not yet implemented"); } } /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two four-vectors. /// There is a scheme ambiguity for momentum-type four vectors /// as to whether the pseudorapidity (a purely geometric concept) or the /// rapidity (a relativistic energy-momentum quantity) is to be used: this can /// be chosen via the optional scheme parameter. inline double deltaR(double eta1, double phi1, const FourMomentum& v, RapScheme scheme = PSEUDORAPIDITY) { switch (scheme) { case PSEUDORAPIDITY: return deltaR(eta1, phi1, v.vector3()); case RAPIDITY: return deltaR(eta1, phi1, v.rapidity(), v.azimuthalAngle()); default: throw std::runtime_error("The specified deltaR scheme is not yet implemented"); } } /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two four-vectors. /// There is a scheme ambiguity for momentum-type four vectors /// as to whether the pseudorapidity (a purely geometric concept) or the /// rapidity (a relativistic energy-momentum quantity) is to be used: this can /// be chosen via the optional scheme parameter. inline double deltaR(const FourMomentum& a, const FourVector& b, RapScheme scheme = PSEUDORAPIDITY) { switch (scheme) { case PSEUDORAPIDITY: return deltaR(a.vector3(), b.vector3()); case RAPIDITY: return deltaR(a.rapidity(), a.azimuthalAngle(), FourMomentum(b).rapidity(), b.azimuthalAngle()); default: throw std::runtime_error("The specified deltaR scheme is not yet implemented"); } } /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two four-vectors. /// There is a scheme ambiguity for momentum-type four vectors /// as to whether the pseudorapidity (a purely geometric concept) or the /// rapidity (a relativistic energy-momentum quantity) is to be used: this can /// be chosen via the optional scheme parameter. inline double deltaR(const FourVector& a, const FourMomentum& b, RapScheme scheme = PSEUDORAPIDITY) { switch (scheme) { case PSEUDORAPIDITY: return deltaR(a.vector3(), b.vector3()); case RAPIDITY: return deltaR(FourMomentum(a).rapidity(), a.azimuthalAngle(), b.rapidity(), b.azimuthalAngle()); default: throw std::runtime_error("The specified deltaR scheme is not yet implemented"); } } /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between a /// three-vector and a four-vector. inline double deltaR(const FourMomentum& a, const Vector3& b) { return deltaR(a.vector3(), b); } /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between a /// three-vector and a four-vector. inline double deltaR(const Vector3& a, const FourMomentum& b) { return deltaR(a, b.vector3()); } /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between a /// three-vector and a four-vector. inline double deltaR(const FourVector& a, const Vector3& b) { return deltaR(a.vector3(), b); } /// @brief Calculate the 2D rapidity-azimuthal ("eta-phi") distance between a /// three-vector and a four-vector. inline double deltaR(const Vector3& a, const FourVector& b) { return deltaR(a, b.vector3()); } //@} /// @name \f$ \Delta phi \f$ calculations from 4-vectors //@{ /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaPhi(const FourMomentum& a, const FourMomentum& b) { return deltaPhi(a.vector3(), b.vector3()); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaPhi(const FourMomentum& v, double phi2) { return deltaPhi(v.vector3(), phi2); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaPhi(double phi1, const FourMomentum& v) { return deltaPhi(phi1, v.vector3()); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaPhi(const FourVector& a, const FourVector& b) { return deltaPhi(a.vector3(), b.vector3()); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaPhi(const FourVector& v, double phi2) { return deltaPhi(v.vector3(), phi2); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaPhi(double phi1, const FourVector& v) { return deltaPhi(phi1, v.vector3()); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaPhi(const FourVector& a, const FourMomentum& b) { return deltaPhi(a.vector3(), b.vector3()); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaPhi(const FourMomentum& a, const FourVector& b) { return deltaPhi(a.vector3(), b.vector3()); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaPhi(const FourVector& a, const Vector3& b) { return deltaPhi(a.vector3(), b); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaPhi(const Vector3& a, const FourVector& b) { return deltaPhi(a, b.vector3()); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaPhi(const FourMomentum& a, const Vector3& b) { return deltaPhi(a.vector3(), b); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaPhi(const Vector3& a, const FourMomentum& b) { return deltaPhi(a, b.vector3()); } //@} /// @name \f$ |\Delta eta| \f$ calculations from 4-vectors //@{ /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaEta(const FourMomentum& a, const FourMomentum& b) { return deltaEta(a.vector3(), b.vector3()); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaEta(const FourMomentum& v, double eta2) { return deltaEta(v.vector3(), eta2); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaEta(double eta1, const FourMomentum& v) { return deltaEta(eta1, v.vector3()); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaEta(const FourVector& a, const FourVector& b) { return deltaEta(a.vector3(), b.vector3()); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaEta(const FourVector& v, double eta2) { return deltaEta(v.vector3(), eta2); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaEta(double eta1, const FourVector& v) { return deltaEta(eta1, v.vector3()); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaEta(const FourVector& a, const FourMomentum& b) { return deltaEta(a.vector3(), b.vector3()); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaEta(const FourMomentum& a, const FourVector& b) { return deltaEta(a.vector3(), b.vector3()); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaEta(const FourVector& a, const Vector3& b) { return deltaEta(a.vector3(), b); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaEta(const Vector3& a, const FourVector& b) { return deltaEta(a, b.vector3()); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaEta(const FourMomentum& a, const Vector3& b) { return deltaEta(a.vector3(), b); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaEta(const Vector3& a, const FourMomentum& b) { return deltaEta(a, b.vector3()); } //@} ////////////////////////////////////////////////////// /// @name 4-vector string representations //@{ /// Render a 4-vector as a string. inline std::string toString(const FourVector& lv) { ostringstream out; out << "(" << (fabs(lv.t()) < 1E-30 ? 0.0 : lv.t()) << "; " << (fabs(lv.x()) < 1E-30 ? 0.0 : lv.x()) << ", " << (fabs(lv.y()) < 1E-30 ? 0.0 : lv.y()) << ", " << (fabs(lv.z()) < 1E-30 ? 0.0 : lv.z()) << ")"; return out.str(); } /// Write a 4-vector to an ostream. inline std::ostream& operator<<(std::ostream& out, const FourVector& lv) { out << toString(lv); return out; } //@} } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/Math.hh��������������������������������������������������������������0000644�0001750�0001750�00000000345�12116077757�015706� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_MATH_MATH #define RIVET_MATH_MATH /// This is just a convenience header. #include "Rivet/Math/MathUtils.hh" #include "Rivet/Math/Vectors.hh" #include "Rivet/Math/Matrices.hh" #include "Rivet/Math/Units.hh" #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/Matrices.hh����������������������������������������������������������0000644�0001750�0001750�00000000361�12116077757�016562� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_MATH_MATRICES #define RIVET_MATH_MATRICES #include "Rivet/Math/MathHeader.hh" #include "Rivet/Math/MatrixN.hh" #include "Rivet/Math/Matrix3.hh" #include "Rivet/Math/LorentzTrans.hh" #include "Rivet/Math/MatrixDiag.hh" #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/MathHeader.hh��������������������������������������������������������0000644�0001750�0001750�00000002772�12116077757�017025� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_Math_MathHeader #define RIVET_Math_MathHeader #include "Rivet/Exceptions.hh" #include <stdexcept> #include <string> #include <ostream> #include <sstream> #include <iostream> #include <limits> #include <cmath> #include <map> #include <vector> #include <algorithm> // Macro to help with overzealous compiler warnings #ifdef UNUSED #elif defined(__GNUC__) # define UNUSED(x) UNUSED_ ## x __attribute__((unused)) #elif defined(__LCLINT__) # define UNUSED(x) /*@unused@*/ x #else # define UNUSED(x) x #endif namespace Rivet { using std::string; using std::ostream; using std::ostringstream; using std::cout; using std::endl; using std::pair; using std::vector; using std::transform; using std::min; using std::max; using std::abs; using std::isnan; using std::isinf; const double MAXDOUBLE = std::numeric_limits<double>::max(); const double MAXINT = std::numeric_limits<int>::max(); /// A pre-defined value of \f$ \pi \f$. const double PI = M_PI; /// A pre-defined value of \f$ 2\pi \f$. const double TWOPI = 2*M_PI; /// A pre-defined value of \f$ \pi/2 \f$. const double HALFPI = M_PI_2; /// Enum for signs of numbers. enum Sign { MINUS = -1, ZERO = 0, PLUS = 1 }; /// Enum for rapidity variable to be used in calculating \f$ R \f$, applying rapidity cuts, etc. enum RapScheme { PSEUDORAPIDITY = 0, ETA = 0, RAPIDITY = 1, YRAP = 1 }; /// Enum for range of \f$ \phi \f$ to be mapped into enum PhiMapping { MINUSPI_PLUSPI, ZERO_2PI, ZERO_PI }; } #endif ������rivet-1.8.3/include/Rivet/Math/Units.hh�������������������������������������������������������������0000644�0001750�0001750�00000016354�12116077757�016126� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_MATH_UNITS #define RIVET_MATH_UNITS #include "Rivet/Math/MathHeader.hh" namespace Rivet { // // Length [L] // static const double millimeter = 1.; static const double millimeter2 = millimeter*millimeter; static const double millimeter3 = millimeter*millimeter*millimeter; static const double centimeter = 10.*millimeter; static const double centimeter2 = centimeter*centimeter; static const double centimeter3 = centimeter*centimeter*centimeter; static const double meter = 1000.*millimeter; static const double meter2 = meter*meter; static const double meter3 = meter*meter*meter; static const double kilometer = 1000.*meter; static const double kilometer2 = kilometer*kilometer; static const double kilometer3 = kilometer*kilometer*kilometer; static const double parsec = 3.0856775807e+16*meter; static const double micrometer = 1.e-6 *meter; static const double nanometer = 1.e-9 *meter; static const double angstrom = 1.e-10*meter; static const double picometer = 1.e-12*meter; static const double femtometer = 1.e-15*meter; static const double attometer = 1.e-18*meter; static const double fermi = femtometer; // symbols static const double mm = millimeter; static const double mm2 = millimeter2; static const double mm3 = millimeter3; static const double cm = centimeter; static const double cm2 = centimeter2; static const double cm3 = centimeter3; static const double m = meter; static const double m2 = meter2; static const double m3 = meter3; static const double km = kilometer; static const double km2 = kilometer2; static const double km3 = kilometer3; static const double pc = parsec; // static const double barn = 1.e-28*meter2; // Barn-units in terms of the pb returned by AGILe static const double picobarn = 1.0; static const double barn = 1.0e+12* picobarn; static const double millibarn = 1.0e-3 * barn; static const double microbarn = 1.0e-6 * barn; static const double nanobarn = 1.0e-9 * barn; static const double femtobarn = 1.0e-15 * barn; static const double attobarn = 1.0e-18 * barn; // // Angle // static const double radian = 1.; static const double milliradian = 1.e-3*radian; static const double degree = (3.14159265358979323846/180.0)*radian; static const double steradian = 1.; // symbols static const double rad = radian; static const double mrad = milliradian; static const double sr = steradian; static const double deg = degree; // // Time [T] // static const double nanosecond = 1.0; static const double second = 1.e+9 *nanosecond; static const double millisecond = 1.e-3 *second; static const double microsecond = 1.e-6 *second; static const double picosecond = 1.e-12*second; static const double hertz = 1.0/second; static const double kilohertz = 1.e+3*hertz; static const double megahertz = 1.e+6*hertz; // symbols static const double ns = nanosecond; static const double s = second; static const double ms = millisecond; // // Electric charge [Q] // static const double eplus = 1.0; // positron charge static const double e_SI = 1.60217733e-19; // positron charge in coulomb static const double coulomb = eplus/e_SI; // coulomb = 6.24150 e+18 * eplus // // Energy [E] // static const double gigaelectronvolt = 1.; static const double electronvolt = 1.e-9*gigaelectronvolt; static const double kiloelectronvolt = 1.e-6*gigaelectronvolt; static const double megaelectronvolt = 1.e-3*gigaelectronvolt; static const double teraelectronvolt = 1.e+3*gigaelectronvolt; static const double petaelectronvolt = 1.e+6*gigaelectronvolt; static const double joule = electronvolt/e_SI; // joule = 6.24150 e+12 * MeV // symbols static const double eV = electronvolt; static const double keV = kiloelectronvolt; static const double MeV = megaelectronvolt; static const double GeV = gigaelectronvolt; static const double TeV = teraelectronvolt; static const double PeV = petaelectronvolt; static const double eV2 = eV*eV; static const double keV2 = keV*keV; static const double MeV2 = MeV*MeV; static const double GeV2 = GeV*GeV; static const double TeV2 = TeV*TeV; static const double PeV2 = PeV*PeV; // // Mass [E][T^2][L^-2] // static const double kilogram = joule*second*second/(meter*meter); static const double gram = 1.e-3*kilogram; static const double milligram = 1.e-3*gram; // symbols static const double kg = kilogram; static const double g = gram; static const double mg = milligram; // // Power [E][T^-1] // static const double watt = joule/second; // watt = 6.24150 e+3 * MeV/ns // // Force [E][L^-1] // static const double newton = joule/meter; // newton = 6.24150 e+9 * MeV/mm // // Pressure [E][L^-3] // #define pascal hep_pascal // a trick to avoid warnings static const double hep_pascal = newton/m2; // pascal = 6.24150 e+3 * MeV/mm3 static const double bar = 100000*pascal; // bar = 6.24150 e+8 * MeV/mm3 static const double atmosphere = 101325*pascal; // atm = 6.32420 e+8 * MeV/mm3 // // Electric current [Q][T^-1] // static const double ampere = coulomb/second; // ampere = 6.24150 e+9 * eplus/ns static const double milliampere = 1.e-3*ampere; static const double microampere = 1.e-6*ampere; static const double nanoampere = 1.e-9*ampere; // // Electric potential [E][Q^-1] // static const double megavolt = megaelectronvolt/eplus; static const double kilovolt = 1.e-3*megavolt; static const double volt = 1.e-6*megavolt; // // Electric resistance [E][T][Q^-2] // static const double ohm = volt/ampere; // ohm = 1.60217e-16*(MeV/eplus)/(eplus/ns) // // Electric capacitance [Q^2][E^-1] // static const double farad = coulomb/volt; // farad = 6.24150e+24 * eplus/Megavolt static const double millifarad = 1.e-3*farad; static const double microfarad = 1.e-6*farad; static const double nanofarad = 1.e-9*farad; static const double picofarad = 1.e-12*farad; // // Magnetic Flux [T][E][Q^-1] // static const double weber = volt*second; // weber = 1000*megavolt*ns // // Magnetic Field [T][E][Q^-1][L^-2] // static const double tesla = volt*second/meter2; // tesla =0.001*megavolt*ns/mm2 static const double gauss = 1.e-4*tesla; static const double kilogauss = 1.e-1*tesla; // // Inductance [T^2][E][Q^-2] // static const double henry = weber/ampere; // henry = 1.60217e-7*MeV*(ns/eplus)**2 // // Temperature // static const double kelvin = 1.; // // Amount of substance // static const double mole = 1.; // // Activity [T^-1] // static const double becquerel = 1./second ; static const double curie = 3.7e+10 * becquerel; // // Absorbed dose [L^2][T^-2] // static const double gray = joule/kilogram ; // // Luminous intensity [I] // static const double candela = 1.; // // Luminous flux [I] // static const double lumen = candela*steradian; // // Illuminance [I][L^-2] // static const double lux = lumen/meter2; // // Miscellaneous // static const double perCent = 0.01 ; static const double perThousand = 0.001; static const double perMillion = 0.000001; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/MathUtils.hh���������������������������������������������������������0000644�0001750�0001750�00000041160�12116077757�016727� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_MathUtils_HH #define RIVET_MathUtils_HH #include "Rivet/Math/MathHeader.hh" #include "Rivet/RivetBoost.hh" #include <cassert> namespace Rivet { /// @name Comparison functions for safe floating point equality tests //@{ /// Compare a floating point number to zero with a degree /// of fuzziness expressed by the absolute @a tolerance parameter. inline bool isZero(double val, double tolerance=1E-8) { return (fabs(val) < tolerance); } /// Compare an integral-type number to zero. /// /// Since there is no risk of floating point error, this function just exists /// in case @c isZero is accidentally used on an integer type, to avoid /// implicit type conversion. The @a tolerance parameter is ignored. inline bool isZero(long val, double UNUSED(tolerance)=1E-8) { return val == 0; } /// @brief Compare two floating point numbers for equality with a degree of fuzziness /// /// The @a tolerance parameter is fractional, based on absolute values of the args. inline bool fuzzyEquals(double a, double b, double tolerance=1E-5) { const double absavg = (fabs(a) + fabs(b))/2.0; const double absdiff = fabs(a - b); const bool rtn = (isZero(a) && isZero(b)) || absdiff < tolerance*absavg; // cout << a << " == " << b << "? " << rtn << endl; return rtn; } /// @brief Compare two integral-type numbers for equality with a degree of fuzziness. /// /// Since there is no risk of floating point error with integral types, /// this function just exists in case @c fuzzyEquals is accidentally /// used on an integer type, to avoid implicit type conversion. The @a /// tolerance parameter is ignored, even if it would have an /// absolute magnitude greater than 1. inline bool fuzzyEquals(long a, long b, double UNUSED(tolerance)=1E-5) { return a == b; } /// @brief Compare two floating point numbers for >= with a degree of fuzziness /// /// The @a tolerance parameter on the equality test is as for @c fuzzyEquals. inline bool fuzzyGtrEquals(double a, double b, double tolerance=1E-5) { return a > b || fuzzyEquals(a, b, tolerance); } /// @brief Compare two integral-type numbers for >= with a degree of fuzziness. /// /// Since there is no risk of floating point error with integral types, /// this function just exists in case @c fuzzyGtrEquals is accidentally /// used on an integer type, to avoid implicit type conversion. The @a /// tolerance parameter is ignored, even if it would have an /// absolute magnitude greater than 1. inline bool fuzzyGtrEquals(long a, long b, double UNUSED(tolerance)=1E-5) { return a >= b; } /// @brief Compare two floating point numbers for <= with a degree of fuzziness /// /// The @a tolerance parameter on the equality test is as for @c fuzzyEquals. inline bool fuzzyLessEquals(double a, double b, double tolerance=1E-5) { return a < b || fuzzyEquals(a, b, tolerance); } /// @brief Compare two integral-type numbers for <= with a degree of fuzziness. /// /// Since there is no risk of floating point error with integral types, /// this function just exists in case @c fuzzyLessEquals is accidentally /// used on an integer type, to avoid implicit type conversion. The @a /// tolerance parameter is ignored, even if it would have an /// absolute magnitude greater than 1. inline bool fuzzyLessEquals(long a, long b, double UNUSED(tolerance)=1E-5) { return a <= b; } //@} /// @name Ranges and intervals //@{ /// Represents whether an interval is open (non-inclusive) or closed (inclusive). /// /// For example, the interval \f$ [0, \pi) \f$ is closed (an inclusive /// boundary) at 0, and open (a non-inclusive boundary) at \f$ \pi \f$. enum RangeBoundary { OPEN=0, SOFT=0, CLOSED=1, HARD=1 }; /// @brief Determine if @a value is in the range @a low to @a high, for floating point numbers /// /// Interval boundary types are defined by @a lowbound and @a highbound. /// @todo Optimise to one-line at compile time? template<typename NUM> inline bool inRange(NUM value, NUM low, NUM high, RangeBoundary lowbound=CLOSED, RangeBoundary highbound=OPEN) { if (lowbound == OPEN && highbound == OPEN) { return (value > low && value < high); } else if (lowbound == OPEN && highbound == CLOSED) { return (value > low && fuzzyLessEquals(value, high)); } else if (lowbound == CLOSED && highbound == OPEN) { return (fuzzyGtrEquals(value, low) && value < high); } else { // if (lowbound == CLOSED && highbound == CLOSED) { return (fuzzyGtrEquals(value, low) && fuzzyLessEquals(value, high)); } } /// Alternative version of inRange for doubles, which accepts a pair for the range arguments. template<typename NUM> inline bool inRange(NUM value, pair<NUM, NUM> lowhigh, RangeBoundary lowbound=CLOSED, RangeBoundary highbound=OPEN) { return inRange(value, lowhigh.first, lowhigh.second, lowbound, highbound); } /// @brief Determine if @a value is in the range @a low to @a high, for integer types /// /// Interval boundary types are defined by @a lowbound and @a highbound. /// @todo Optimise to one-line at compile time? inline bool inRange(int value, int low, int high, RangeBoundary lowbound=CLOSED, RangeBoundary highbound=CLOSED) { if (lowbound == OPEN && highbound == OPEN) { return (value > low && value < high); } else if (lowbound == OPEN && highbound == CLOSED) { return (value > low && value <= high); } else if (lowbound == CLOSED && highbound == OPEN) { return (value >= low && value < high); } else { // if (lowbound == CLOSED && highbound == CLOSED) { return (value >= low && value <= high); } } /// Alternative version of @c inRange for ints, which accepts a pair for the range arguments. inline bool inRange(int value, pair<int, int> lowhigh, RangeBoundary lowbound=CLOSED, RangeBoundary highbound=OPEN) { return inRange(value, lowhigh.first, lowhigh.second, lowbound, highbound); } //@} /// @name Miscellaneous numerical helpers //@{ /// Named number-type squaring operation. template <typename NUM> inline NUM sqr(NUM a) { return a*a; } /// Named number-type addition in quadrature operation. template <typename Num> inline Num add_quad(Num a, Num b) { return sqrt(a*a + b*b); } /// Named number-type addition in quadrature operation. template <typename Num> inline Num add_quad(Num a, Num b, Num c) { return sqrt(a*a + b*b + c*c); } /// A more efficient version of pow for raising numbers to integer powers. template <typename Num> inline Num intpow(Num val, unsigned int exp) { assert(exp >= 0); if (exp == 0) return (Num) 1; else if (exp == 1) return val; return val * intpow(val, exp-1); } /// Find the sign of a number inline int sign(double val) { if (isZero(val)) return ZERO; const int valsign = (val > 0) ? PLUS : MINUS; return valsign; } /// Find the sign of a number inline int sign(int val) { if (val == 0) return ZERO; return (val > 0) ? PLUS : MINUS; } /// Find the sign of a number inline int sign(long val) { if (val == 0) return ZERO; return (val > 0) ? PLUS : MINUS; } //@} /// @name Binning helper functions //@{ /// @brief Make a list of @a nbins + 1 values equally spaced between @a start and @a end inclusive. /// /// NB. The arg ordering and the meaning of the nbins variable is "histogram-like", /// as opposed to the Numpy/Matlab version. inline vector<double> linspace(size_t nbins, double start, double end) { assert(end >= start); assert(nbins > 0); vector<double> rtn; const double interval = (end-start)/static_cast<double>(nbins); double edge = start; while (inRange(edge, start, end, CLOSED, CLOSED)) { rtn.push_back(edge); edge += interval; } assert(rtn.size() == nbins+1); return rtn; } /// @brief Make a list of @a nbins + 1 values exponentially spaced between @a start and @a end inclusive. /// /// NB. The arg ordering and the meaning of the nbins variable is "histogram-like", /// as opposed to the Numpy/Matlab version, and the start and end arguments are expressed /// in "normal" space, rather than as the logarithms of the start/end values as in Numpy/Matlab. inline vector<double> logspace(size_t nbins, double start, double end) { assert(end >= start); assert(start > 0); assert(nbins > 0); const double logstart = std::log(start); const double logend = std::log(end); const vector<double> logvals = linspace(nbins, logstart, logend); assert(logvals.size() == nbins+1); vector<double> rtn; foreach (double logval, logvals) { rtn.push_back(std::exp(logval)); } assert(rtn.size() == nbins+1); return rtn; } namespace BWHelpers { /// @brief CDF for the Breit-Wigner distribution inline double CDF(double x, double mu, double gamma) { // normalize to (0;1) distribution const double xn = (x - mu)/gamma; return std::atan(xn)/M_PI + 0.5; } /// @brief inverse CDF for the Breit-Wigner distribution inline double antiCDF(double p, double mu, double gamma) { const double xn = std::tan(M_PI*(p-0.5)); return gamma*xn + mu; } } /// @brief Make a list of @a nbins + 1 values spaced for equal area /// Breit-Wigner binning between @a start and @a end inclusive. @a /// mu and @a gamma are the Breit-Wigner parameters. /// /// NB. The arg ordering and the meaning of the nbins variable is "histogram-like", /// as opposed to the Numpy/Matlab version, and the start and end arguments are expressed /// in "normal" space. inline vector<double> BWspace(size_t nbins, double start, double end, double mu, double gamma) { assert(end >= start); assert(nbins > 0); const double pmin = BWHelpers::CDF(start,mu,gamma); const double pmax = BWHelpers::CDF(end, mu,gamma); const vector<double> edges = linspace(nbins, pmin, pmax); assert(edges.size() == nbins+1); vector<double> rtn; foreach (double edge, edges) { rtn.push_back(BWHelpers::antiCDF(edge,mu,gamma)); } assert(rtn.size() == nbins+1); return rtn; } /// @brief Return the bin index of the given value, @a val, given a vector of bin edges /// /// NB. The @a binedges vector must be sorted template <typename NUM> inline int index_between(const NUM& val, const vector<NUM>& binedges) { if (!inRange(val, binedges.front(), binedges.back())) return -1; //< Out of histo range int index = -1; for (size_t i = 1; i < binedges.size(); ++i) { if (val < binedges[i]) { index = i-1; break; } } assert(inRange(index, -1, binedges.size()-1)); return index; } //@} /// @name Statistics functions //@{ /// Calculate the mean of a sample inline double mean(const vector<int>& sample) { double mean = 0.0; for (size_t i=0; i<sample.size(); ++i) { mean += sample[i]; } return mean/sample.size(); } // Calculate the error on the mean, assuming poissonian errors inline double mean_err(const vector<int>& sample) { double mean_e = 0.0; for (size_t i=0; i<sample.size(); ++i) { mean_e += sqrt(sample[i]); } return mean_e/sample.size(); } /// Calculate the covariance (variance) between two samples inline double covariance(const vector<int>& sample1, const vector<int>& sample2) { const double mean1 = mean(sample1); const double mean2 = mean(sample2); const size_t N = sample1.size(); double cov = 0.0; for (size_t i = 0; i < N; i++) { const double cov_i = (sample1[i] - mean1)*(sample2[i] - mean2); cov += cov_i; } if (N > 1) return cov/(N-1); else return 0.0; } /// Calculate the error on the covariance (variance) of two samples, assuming poissonian errors inline double covariance_err(const vector<int>& sample1, const vector<int>& sample2) { const double mean1 = mean(sample1); const double mean2 = mean(sample2); const double mean1_e = mean_err(sample1); const double mean2_e = mean_err(sample2); const size_t N = sample1.size(); double cov_e = 0.0; for (size_t i = 0; i < N; i++) { const double cov_i = (sqrt(sample1[i]) - mean1_e)*(sample2[i] - mean2) + (sample1[i] - mean1)*(sqrt(sample2[i]) - mean2_e); cov_e += cov_i; } if (N > 1) return cov_e/(N-1); else return 0.0; } /// Calculate the correlation strength between two samples inline double correlation(const vector<int>& sample1, const vector<int>& sample2) { const double cov = covariance(sample1, sample2); const double var1 = covariance(sample1, sample1); const double var2 = covariance(sample2, sample2); const double correlation = cov/sqrt(var1*var2); const double corr_strength = correlation*sqrt(var2/var1); return corr_strength; } /// Calculate the error of the correlation strength between two samples assuming Poissonian errors inline double correlation_err(const vector<int>& sample1, const vector<int>& sample2) { const double cov = covariance(sample1, sample2); const double var1 = covariance(sample1, sample1); const double var2 = covariance(sample2, sample2); const double cov_e = covariance_err(sample1, sample2); const double var1_e = covariance_err(sample1, sample1); const double var2_e = covariance_err(sample2, sample2); // Calculate the correlation const double correlation = cov/sqrt(var1*var2); // Calculate the error on the correlation const double correlation_err = cov_e/sqrt(var1*var2) - cov/(2*pow(3./2., var1*var2)) * (var1_e * var2 + var1 * var2_e); // Calculate the error on the correlation strength const double corr_strength_err = correlation_err*sqrt(var2/var1) + correlation/(2*sqrt(var2/var1)) * (var2_e/var1 - var2*var1_e/pow(2, var2)); return corr_strength_err; } //@} /// @name Angle range mappings //@{ /// @brief Reduce any number to the range [-2PI, 2PI] /// /// Achieved by repeated addition or subtraction of 2PI as required. Used to /// normalise angular measures. inline double _mapAngleM2PITo2Pi(double angle) { double rtn = fmod(angle, TWOPI); if (isZero(rtn)) return 0; assert(rtn >= -TWOPI && rtn <= TWOPI); return rtn; } /// Map an angle into the range (-PI, PI]. inline double mapAngleMPiToPi(double angle) { double rtn = _mapAngleM2PITo2Pi(angle); if (isZero(rtn)) return 0; rtn = (rtn > PI ? rtn-TWOPI : rtn <= -PI ? rtn+TWOPI : rtn); assert(rtn > -PI && rtn <= PI); return rtn; } /// Map an angle into the range [0, 2PI). inline double mapAngle0To2Pi(double angle) { double rtn = _mapAngleM2PITo2Pi(angle); if (isZero(rtn)) return 0; if (rtn < 0) rtn += TWOPI; if (rtn == TWOPI) rtn = 0; assert(rtn >= 0 && rtn < TWOPI); return rtn; } /// Map an angle into the range [0, PI]. inline double mapAngle0ToPi(double angle) { double rtn = fabs(mapAngleMPiToPi(angle)); if (isZero(rtn)) return 0; assert(rtn > 0 && rtn <= PI); return rtn; } /// Map an angle into the enum-specified range. inline double mapAngle(double angle, PhiMapping mapping) { switch (mapping) { case MINUSPI_PLUSPI: return mapAngleMPiToPi(angle); case ZERO_2PI: return mapAngle0To2Pi(angle); case ZERO_PI: return mapAngle0To2Pi(angle); default: throw Rivet::UserError("The specified phi mapping scheme is not implemented"); } } //@} /// @name Phase space measure helpers //@{ /// @brief Calculate the difference between two angles in radians /// /// Returns in the range [0, PI]. inline double deltaPhi(double phi1, double phi2) { return mapAngle0ToPi(phi1 - phi2); } /// Calculate the difference between two pseudorapidities, /// returning the unsigned value. inline double deltaEta(double eta1, double eta2) { return fabs(eta1 - eta2); } /// Calculate the distance between two points in 2D rapidity-azimuthal /// ("\f$ \eta-\phi \f$") space. The phi values are given in radians. inline double deltaR(double rap1, double phi1, double rap2, double phi2) { const double dphi = deltaPhi(phi1, phi2); return sqrt( sqr(rap1-rap2) + sqr(dphi) ); } /// Calculate a rapidity value from the supplied energy @a E and longitudinal momentum @a pz. inline double rapidity(double E, double pz) { if (isZero(E - pz)) { throw std::runtime_error("Divergent positive rapidity"); return MAXDOUBLE; } if (isZero(E + pz)) { throw std::runtime_error("Divergent negative rapidity"); return -MAXDOUBLE; } return 0.5*log((E+pz)/(E-pz)); } //@} } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/Vector3.hh�����������������������������������������������������������0000644�0001750�0001750�00000023344�12116077757�016346� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_MATH_VECTOR3 #define RIVET_MATH_VECTOR3 #include "Rivet/Math/MathHeader.hh" #include "Rivet/Math/MathUtils.hh" #include "Rivet/Math/VectorN.hh" namespace Rivet { class Vector3; typedef Vector3 ThreeVector; class Matrix3; Vector3 multiply(const double, const Vector3&); Vector3 multiply(const Vector3&, const double); Vector3 add(const Vector3&, const Vector3&); Vector3 operator*(const double, const Vector3&); Vector3 operator*(const Vector3&, const double); Vector3 operator/(const Vector3&, const double); Vector3 operator+(const Vector3&, const Vector3&); Vector3 operator-(const Vector3&, const Vector3&); /// @brief Three-dimensional specialisation of Vector. class Vector3 : public Vector<3> { friend class Matrix3; friend Vector3 multiply(const double, const Vector3&); friend Vector3 multiply(const Vector3&, const double); friend Vector3 add(const Vector3&, const Vector3&); friend Vector3 subtract(const Vector3&, const Vector3&); public: Vector3() : Vector<3>() { } template<typename V3> Vector3(const V3& other) { this->setX(other.x()); this->setY(other.y()); this->setZ(other.z()); } Vector3(const Vector<3>& other) { this->setX(other.get(0)); this->setY(other.get(1)); this->setZ(other.get(2)); } Vector3(double x, double y, double z) { this->setX(x); this->setY(y); this->setZ(z); } ~Vector3() { } public: static Vector3 mkX() { return Vector3(1,0,0); } static Vector3 mkY() { return Vector3(0,1,0); } static Vector3 mkZ() { return Vector3(0,0,1); } public: double x() const { return get(0); } double y() const { return get(1); } double z() const { return get(2); } Vector3& setX(double x) { set(0, x); return *this; } Vector3& setY(double y) { set(1, y); return *this; } Vector3& setZ(double z) { set(2, z); return *this; } double dot(const Vector3& v) const { return _vec.dot(v._vec); } Vector3 cross(const Vector3& v) const { Vector3 result; result._vec = _vec.cross(v._vec); return result; } double angle(const Vector3& v) const { const double localDotOther = unit().dot(v.unit()); if (fuzzyEquals(localDotOther, 1.0)) return 0.0; else if (fuzzyEquals(localDotOther, -1.0)) return M_PI; return acos(localDotOther); } Vector3 unit() const { /// @todo What to do in this situation? if (isZero()) return *this; else return *this * 1.0/this->mod(); } double polarRadius2() const { return x()*x() + y()*y(); } /// Synonym for polarRadius2 double perp2() const { return polarRadius2(); } /// Synonym for polarRadius2 double rho2() const { return polarRadius2(); } double polarRadius() const { return sqrt(polarRadius2()); } /// Synonym for polarRadius double perp() const { return polarRadius(); } /// Synonym for polarRadius double rho() const { return polarRadius(); } /// Angle subtended by the vector's projection in x-y and the x-axis. double azimuthalAngle(const PhiMapping mapping = ZERO_2PI) const { // If this is a null vector, return zero rather than let atan2 set an error state if (Rivet::isZero(mod2())) return 0.0; // Calculate the arctan and return in the requested range const double value = atan2( y(), x() ); return mapAngle(value, mapping); } /// Synonym for azimuthalAngle. double phi(const PhiMapping mapping = ZERO_2PI) const { return azimuthalAngle(mapping); } /// Angle subtended by the vector and the z-axis. double polarAngle() const { // Get number beween [0,PI] const double polarangle = atan2(polarRadius(), z()); return mapAngle0ToPi(polarangle); } /// Synonym for polarAngle double theta() const { return polarAngle(); } /// Purely geometric approximation to rapidity; exact for massless particles /// and in the central region. double pseudorapidity() const { return -std::log(tan( 0.5 * polarAngle() )); } /// Synonym for pseudorapidity. double eta() const { return pseudorapidity(); } public: Vector3& operator*=(const double a) { _vec = multiply(a, *this)._vec; return *this; } Vector3& operator/=(const double a) { _vec = multiply(1.0/a, *this)._vec; return *this; } Vector3& operator+=(const Vector3& v) { _vec = add(*this, v)._vec; return *this; } Vector3& operator-=(const Vector3& v) { _vec = subtract(*this, v)._vec; return *this; } Vector3 operator-() const { Vector3 rtn; rtn._vec = -_vec; return rtn; } }; inline double dot(const Vector3& a, const Vector3& b) { return a.dot(b); } inline Vector3 cross(const Vector3& a, const Vector3& b) { return a.cross(b); } inline Vector3 multiply(const double a, const Vector3& v) { Vector3 result; result._vec = a * v._vec; return result; } inline Vector3 multiply(const Vector3& v, const double a) { return multiply(a, v); } inline Vector3 operator*(const double a, const Vector3& v) { return multiply(a, v); } inline Vector3 operator*(const Vector3& v, const double a) { return multiply(a, v); } inline Vector3 operator/(const Vector3& v, const double a) { return multiply(1.0/a, v); } inline Vector3 add(const Vector3& a, const Vector3& b) { Vector3 result; result._vec = a._vec + b._vec; return result; } inline Vector3 subtract(const Vector3& a, const Vector3& b) { Vector3 result; result._vec = a._vec - b._vec; return result; } inline Vector3 operator+(const Vector3& a, const Vector3& b) { return add(a, b); } inline Vector3 operator-(const Vector3& a, const Vector3& b) { return subtract(a, b); } // More physicsy coordinates etc. /// Angle (in radians) between two 3-vectors. inline double angle(const Vector3& a, const Vector3& b) { return a.angle(b); } /// Calculate transverse length sq. \f$ \rho^2 \f$ of a 3-vector. inline double polarRadius2(const Vector3& v) { return v.polarRadius2(); } /// Synonym for polarRadius2. inline double perp2(const Vector3& v) { return v.perp2(); } /// Synonym for polarRadius2. inline double rho2(const Vector3& v) { return v.rho2(); } /// Calculate transverse length \f$ \rho \f$ of a 3-vector. inline double polarRadius(const Vector3& v) { return v.polarRadius(); } /// Synonym for polarRadius. inline double perp(const Vector3& v) { return v.perp(); } /// Synonym for polarRadius. inline double rho(const Vector3& v) { return v.rho(); } /// @brief Calculate azimuthal angle of a 3-vector. /// Returns a number in (-pi, pi] or in [0, 2pi) according to the mapping scheme selected inline double azimuthalAngle(const Vector3& v, const PhiMapping mapping = ZERO_2PI) { return v.azimuthalAngle(mapping); } /// Synonym for azimuthalAngle. inline double phi(const Vector3& v, const PhiMapping mapping = ZERO_2PI) { return v.phi(mapping); } /// Calculate polar angle of a 3-vector. inline double polarAngle(const Vector3& v) { return v.polarAngle(); } /// Synonym for polarAngle. inline double theta(const Vector3& v) { return v.theta(); } /// Calculate pseudorapidity of a 3-vector. inline double pseudorapidity(const Vector3& v) { return v.pseudorapidity(); } /// Synonym for pseudorapidity. inline double eta(const Vector3& v) { return v.eta(); } ///////////////////////////////////////////////////// /// @name \f$ |\Delta eta| \f$ calculations from 3-vectors //@{ /// Calculate the difference in pseudorapidity between two spatial vectors. inline double deltaEta(const Vector3& a, const Vector3& b) { return deltaEta(a.pseudorapidity(), b.pseudorapidity()); } /// Calculate the difference in pseudorapidity between two spatial vectors. inline double deltaEta(const Vector3& v, double eta2) { return deltaEta(v.pseudorapidity(), eta2); } /// Calculate the difference in pseudorapidity between two spatial vectors. inline double deltaEta(double eta1, const Vector3& v) { return deltaEta(eta1, v.pseudorapidity()); } //@} /// @name \f$ \Delta phi \f$ calculations from 3-vectors //@{ /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaPhi(const Vector3& a, const Vector3& b) { return deltaPhi(a.azimuthalAngle(), b.azimuthalAngle()); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaPhi(const Vector3& v, double phi2) { return deltaPhi(v.azimuthalAngle(), phi2); } /// Calculate the difference in azimuthal angle between two spatial vectors. inline double deltaPhi(double phi1, const Vector3& v) { return deltaPhi(phi1, v.azimuthalAngle()); } //@} /// @name \f$ \Delta R \f$ calculations from 3-vectors //@{ /// Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two spatial vectors. inline double deltaR(const Vector3& a, const Vector3& b) { return deltaR(a.pseudorapidity(), a.azimuthalAngle(), b.pseudorapidity(), b.azimuthalAngle()); } /// Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two spatial vectors. inline double deltaR(const Vector3& v, double eta2, double phi2) { return deltaR(v.pseudorapidity(), v.azimuthalAngle(), eta2, phi2); } /// Calculate the 2D rapidity-azimuthal ("eta-phi") distance between two spatial vectors. inline double deltaR(double eta1, double phi1, const Vector3& v) { return deltaR(eta1, phi1, v.pseudorapidity(), v.azimuthalAngle()); } //@} } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/eigen/���������������������������������������������������������������0000755�0001750�0001750�00000000000�12131473213�015541� 5����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/eigen/linearsolverbase.h���������������������������������������������0000644�0001750�0001750�00000013576�12116077757�021306� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// This file is part of Eigen, a lightweight C++ template library // for linear algebra. Eigen itself is part of the KDE project. // // Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr> // // Eigen is free software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the Free Software // Foundation; either version 2 or (at your option) any later version. // // Eigen is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more // details. // // You should have received a copy of the GNU General Public License along // with Eigen; if not, write to the Free Software Foundation, Inc., 51 // Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. // // As a special exception, if other files instantiate templates or use macros // or inline functions from this file, or you compile this file and link it // with other works to produce a work based on this file, this file does not // by itself cause the resulting work to be covered by the GNU General Public // License. This exception does not invalidate any other reasons why a work // based on this file might be covered by the GNU General Public License. /** \file linearsolverbase.h * \brief Internal file */ #ifndef EIGEN_LINEARSOLVERBASE_H #define EIGEN_LINEARSOLVERBASE_H #include "util.h" namespace Eigen { /** \ingroup internalbases * * \ingroup solving * * \brief internal base class * * This class template is only internally used in Eigen. */ template<typename T, typename MatrixType, typename VectorType, typename LUDecompositionType> class LinearSolverBase { public: ~LinearSolverBase() {} /** * Returns a reference to a vector (kept alive by this class) * that is a solution of the system of * equations, if any solution exists. If there exist no solutions, the * return value is undefined. */ const VectorType & someSolution() { return m_someSolution; } /** * In short, this method returns a reference to a solution vector * (kept alive by this class) of the system, corresponding * to a given parameter. The parameter must be an array of size equal to * dimSolutions(). Any such parameter array will give a solution, and * each solution corresponds to a unique parameter. Thus this function * gives a complete description of the space of solutions. * * @param parameter An array with size equal to dimSolutions(). * @returns A pointer to the solution associated to this parameter * vector. If no such solution exists (that is, if dimSolutions()==0), * the return value is undefined. */ const VectorType & genericSolution( const T * parameter ); /** * Assuming that there exist solutions (which can be checked with * thereExistSolutions()), this function returns the dimension of the * space of solutions. Thus, 0 means that there exists exactly one * solution, and a positive value means that there exist infinitely * many solutions, forming a space of the given dimension. */ int dimSolutions() { return m_luDecomposition.dimKer(); } /** * This function returns true if there exists at least one solution. * It returns false if there are no solutions. */ bool thereExistSolutions() { return( m_thereExistSolutions ); } protected: /** helper for the constructors */ void init( const MatrixType & leftHandSide, const VectorType & rightHandSide ); /** Equals true if at least one solution exists */ bool m_thereExistSolutions; /** Stores the LU decomposition that is used for computations. */ LUDecompositionType m_luDecomposition; /** Stores some solution of the system, or 0 if there are * no solutions. Used as a base point of the space of solutions. * Returned by someSolution(). */ VectorType m_someSolution; /** Stores the vector that was last returned by genericSolution(). */ VectorType m_genericSolution; /** The right hand side vector. */ VectorType m_rightHandSide; /** A matrix whose column vectors form a basis of the kernel of the left hand side. */ MatrixType m_basisKer; /** Equals true if m_basisKer has already been computed */ bool m_computedBasisKer; }; template<typename T, typename MatrixType, typename VectorType, typename LUDecompositionType> void LinearSolverBase<T, MatrixType, VectorType, LUDecompositionType> ::init( const MatrixType & leftHandSide, const VectorType & rightHandSide ) { m_computedBasisKer = false; m_luDecomposition.perform( leftHandSide ); m_rightHandSide = rightHandSide ; m_someSolution.resize( m_rightHandSide.size() ); m_thereExistSolutions = m_luDecomposition.computeSomeAntecedent ( m_rightHandSide, &m_someSolution ); } template<typename T, typename MatrixType, typename VectorType, typename LUDecompositionType> const VectorType & LinearSolverBase<T, MatrixType, VectorType, LUDecompositionType> ::genericSolution( const T * parameter ) { if( ! m_computedBasisKer ) { m_basisKer.resize( m_luDecomposition.dim() ); m_genericSolution.resize( m_luDecomposition.dim() ); m_luDecomposition.computeBasisKer( & m_basisKer ); m_computedBasisKer = true; } for( int i = 0; i < m_genericSolution.size(); i++ ) { T & coord = m_genericSolution[i]; coord = m_someSolution[i]; for( int j = 0; j < dimSolutions(); j++ ) coord += parameter[j] * m_basisKer( i, j ); } return m_genericSolution; } } // namespace Eigen #endif // EIGEN_LINEARSOLVERBASE_H ����������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/eigen/matrixbase.h���������������������������������������������������0000644�0001750�0001750�00000215324�12116077757�020100� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// This file is part of Eigen, a lightweight C++ template library // for linear algebra. Eigen itself is part of the KDE project. // // Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr> // Some portions Copyright (C) 2007 Franz Keferboeck // <franz.keferboeck@gmail.com> // // Eigen is free software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the Free Software // Foundation; either version 2 or (at your option) any later version. // // Eigen is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more // details. // // You should have received a copy of the GNU General Public License along // with Eigen; if not, write to the Free Software Foundation, Inc., 51 // Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. // // As a special exception, if other files instantiate templates or use macros // or inline functions from this file, or you compile this file and link it // with other works to produce a work based on this file, this file does not // by itself cause the resulting work to be covered by the GNU General Public // License. This exception does not invalidate any other reasons why a work // based on this file might be covered by the GNU General Public License. /** \file matrixbase.h * \brief Internal file */ #ifndef EIGEN_MATRIXBASE_H #define EIGEN_MATRIXBASE_H #include "util.h" #undef _T namespace Eigen { /** \ingroup internalbases * * \ingroup matrices * * \brief internal base class * * This class template is only internally used in Eigen. * This provides the base that the Matrix and MatrixX * class templates inherit. * * Note that one template parameter is Derived: this is a * C++ trick knows as Curiously Recursive Template Pattern. * Here, it allows us to implement in MatrixBase the code * of both Matrix and MatrixX, which are very different * (Matrix has the size as a template argument, * while MatrixX stores it as member data, thus storing the * array itself on the heap). */ template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > class MatrixBase { public: typedef VectorType VecType; typedef T ScalType; private: /** \internal * Helper method, computes *this + other and stores the result in *res. * Doesn't attempt to resize *res. Doesn't check that the sizes match. */ void addition_helper ( const Derived & other, Derived * res ) const; /** \internal * Helper method, computes *this - other and stores the result in *res. * Doesn't attempt to resize *res. Doesn't check that the sizes match. */ void substraction_helper ( const Derived & other, Derived * res ) const; /** \internal * Helper method, computes *this * factor and stores the result in *res. * Doesn't attempt to resize *res. Doesn't check that the sizes match. */ void scalar_multiplication_helper ( const T & factor, Derived * res ) const; /** \internal * Helper method, computes *this / factor and stores the result in *res. * Doesn't attempt to resize *res. Doesn't check that the sizes match. */ void scalar_division_helper ( const T & factor, Derived * res ) const { scalar_multiplication_helper( static_cast<const T>(1) / factor, res ); } /** \internal * Helper method, computes *this * other and stores the result in *res. * Doesn't attempt to resize *res. Doesn't check that the sizes match. */ void matrix_multiplication_helper ( const Derived & other, Derived * res ) const; /** \internal * Helper method, computes *this * vector and stores the result in *res. * Doesn't attempt to resize *res. Doesn't check that the sizes match. */ void vector_multiplication_helper ( const VectorType & vector, VectorType * res ) const; /** \internal * Helper method, computes vector * *this and stores the result in *res. * Doesn't attempt to resize *res. Doesn't check that the sizes match. */ void vector_leftmultiplication_helper ( const VectorType & vector, VectorType * res ) const; template< typename _T, typename _Derived, typename _VectorType, typename _LUDecompositionType > friend _VectorType operator * ( const _VectorType & v, const MatrixBase<_T, _Derived, _VectorType, _LUDecompositionType> & m ); template< typename _T, typename _Derived, typename _VectorType, typename _LUDecompositionType > friend _VectorType & operator *= ( _VectorType & v, const MatrixBase<_T, _Derived, _VectorType, _LUDecompositionType> & m ); public: /** * Computes the matrix product *this * other and stores the * result into *res. * * For dynamic-size matrices, this method resizes *res if necessary. * For fixed-size matrices, it is required that *res already has the * right size, that is: res->size() == this->size(). * * This method is faster than operator* and operator*=. * * Note for dynamic-size matrices: * For optimal performance, the matrix res should be * initialized with the correct size before calling this method, * otherwise it will have to be resized, which is costly. * * Note that for the product to make sense, it is required * that this->size() == other.size(). * * \sa operator*(const Derived &) const, * operator*=(const Derived &) */ void multiply( const Derived & other, Derived * res ) const { assert( this->size() == other.size() ); res->resize( this->size() ); matrix_multiplication_helper( other, res ); } /** Entry-wise multiplication of matrices. This is NOT the standard matrix-matrix * product. * * *res becomes the matrix such that (*res)(i,j) = (*this)(i,j) * other(i,j). * * \sa multiply(const Derived &, Derived *) const */ void multiplyEntries( const Derived & other, Derived * res ) const { assert( this->size() == other.size() ); res->resize( this->size() ); for( int i = 0; i < size() * size(); i++ ) (*res)[i] = (*this)[i] * other[i]; } /** * Returns the matrix product *this * other. * * Note that for the product to make sense, it is required * that this->size() == other.size(). * * \return_by_value \perf_use * multiply(const Derived &, Derived *) const. * * \sa multiply(const Derived &, Derived *) const, * operator*=(const Derived &) */ Derived operator * ( const Derived & other ) const { assert( this->size() == other.size() ); Derived res( this->size() ); matrix_multiplication_helper( other, & res ); return res; } /** * Matrix multiplication on the right: does *this = (*this) * other. * * This only makes sense if this->size() == other.size(). * * \sa multiply(const Derived &, Derived *) const, * operator*(const Derived &) const */ Derived & operator *=( const Derived & other ) { assert( this->size() == other.size() ); Derived res( this->size() ); matrix_multiplication_helper( other, & res ); return( *this = res ); } /** * @returns true if the matrix has dynamic size (i.e. is an * object of class MatrixX), false if the matrix has fixed size * (i.e. is an object of class Matrix). * * \sa size(), resize() */ static bool hasDynamicSize() { return Derived::_hasDynamicSize(); } /** * @returns the size (number of rows, or equivalently number of * columns) of the matrix. * * \sa hasDynamicSize(), resize() */ int size() const { return static_cast<const Derived*>(this)->_size(); } /** * Resizes the matrix. That is only possible if the matrix * has dynamic size, i.e. is an object of class MatrixX. * * Resizing a fixed-size matrix is not possible, and attempting * to do so will only generate a debug message (unless the new size * equals the old one). * * The matrix entries are not kept, they * are left with undefined values after resizing. * * \sa hasDynamicSize(), size() */ void resize( int newsize ) { static_cast<Derived*>(this)->_resize( newsize ); } /** * @returns the array of the matrix, as constant. * * \sa operator()(int,int) const, operator[](int) const */ const T * array() const { return static_cast<const Derived*>(this)->m_array; } /** * @returns the array of the matrix, as non-constant. * * \sa operator()(int,int), operator[](int) */ T * array() { return static_cast<Derived*>(this)->m_array; } /** * @returns a constant reference to the entry of the matrix at * given row and column. * * \sa array() const, operator[](int) const */ const T & operator () ( int row, int col ) const { assert( row >= 0 && col >= 0 && row < size() && col < size() ); return array() [ row + col * size() ]; } /** * @returns a non-constant reference to the entry of the matrix at * given row and column. * * \sa array(int), operator[](int,int) */ T & operator () ( int row, int col ) { assert( row >= 0 && col >= 0 && row < size() && col < size() ); return array() [ row + col * size() ]; } /** * @returns a constant reference to the i-th entry of the array * of the matrix (which stores the matrix entries in column-major order). * * \sa array() const, operator()(int,int) const */ const T & operator [] ( int i ) const { assert( i >= 0 && i < size() * size() ); return array() [i]; } /** * @returns a non-constant reference to the i-th entry of the array * of the matrix (which stores the matrix entries in column-major order). * * \sa array(), operator()(int,int) */ T & operator [] ( int i ) { assert( i >= 0 && i < size() * size() ); return array() [i]; } /** * Copies other into *this. If *this has dynamic size, * it will get resized if necessary. If *this has static size, * it is required that other has the same size. * * \sa readArray(), readRows() */ Derived & operator = ( const Derived & other ); /** * Stores *this + other into *this (entry-wise addition). * * *this and other must have the same size. * * \sa operator+() */ Derived & operator += ( const Derived & other ) { assert( other.size() == this->size() ); addition_helper( other, static_cast<Derived*>(this) ); return *static_cast<Derived*>(this); } /** * Stores *this - other into *this (entry-wise substraction). * * *this and other must have the same size. * * \sa operator-(const Derived &) const */ Derived & operator -= ( const Derived & other ) { assert( other.size() == this->size() ); substraction_helper( other, static_cast<Derived*>(this) ); return *static_cast<Derived*>(this); } /** * Stores *this * factor into *this (multiplication of each entry). * * \sa operator*(const T&) const */ Derived & operator *= ( const T & factor ) { scalar_multiplication_helper( factor, static_cast<Derived*>(this) ); return *static_cast<Derived*>(this); } /** * Stores *this / factor into *this (division of each entry). * * \sa operator*=(const T&) */ Derived & operator /= ( const T & factor ) { scalar_division_helper( factor, static_cast<Derived*>(this) ); return *static_cast<Derived*>(this); } /** * Reads the entries of *this from an array. The number of entries * read from the array is equal to size()*size(). * * \sa operator=(), readRows() */ void readArray( const T * src ); /** * @returns the array data of a column of the matrix, as constant * * \sa columnPtr(int), column(), getColumn(int,T*) const, * getColumn(int, VectorType *) const */ const T *columnPtr( int col ) const { return array() + col * size(); } /** * Returns the array data of a column of the matrix, as non-constant * * \sa columnPtr(int) const, column(), setColumn(int, const T*), * setColumn(int, const VectorType &) */ T *columnPtr( int col ) { return array() + col * size(); } /** Copies a row of the matrix into the array \a ret * * \sa getRow(int, VectorType *) const, row() */ void getRow( int row, T * ret ) const; /** Copies a column of the matrix into the array \a ret * * \sa getColumn(int, VectorType *) const, column(), columnPtr(int) const */ void getColumn( int column, T * ret ) const; /** Copies a row of the matrix into the vector \a ret * * \sa getRow(int, T *) const, row() */ void getRow( int row, VectorType * ret ) const { ret->resize( size() ); getRow( row, ret->array() ); } /** Copies a column of the matrix into the vector \a ret * * \sa getColumn(int, T *) const, column(), columnPtr(int) const */ void getColumn( int column, VectorType * ret ) const { ret->resize( size() ); getColumn( column, ret->array() ); } /** Copies the array \a src into a row of the matrix * * \sa setRow( int, const VectorType &) */ void setRow( int row, const T * src ); /** Copies the array \a src into a column of the matrix * * \sa setColumn( int, const VectorType &) */ void setColumn( int column, const T * src ); /** Copies the vector \a src into a row of the matrix * * \sa setRow( int, const T *) */ void setRow( int row, const VectorType & src ) { setRow( row, src.array() ); } /** Copies the vector \a src into a column of the matrix * * \sa setColumn( int, const T *) */ void setColumn( int column, const VectorType & src ) { setColumn( column, src.array() ); } /** * Returns a column of the matrix. * * \return_by_value \perf_use another method. * * \sa columnPtr(int) const, getColumn(int,T*) const, * getColumn(int, VectorType *) const */ VectorType column( int col ) const { VectorType res( size() ); getColumn( col, res.array() ); return res; } /** * Returns a row of the matrix. * * \return_by_value \perf_use another method. * * \sa getRow(int,T*) const, * getRow(int, VectorType *) const */ VectorType row( int row ) const { VectorType res( size() ); getRow( row, res.array() ); return res; } /** * Reads the rows of the matrix from a row-dominant array. * For instance, C/C++ two-dimensional arrays are stored * in row-dominant order. * * \perf_use readArray() * * \sa operator=(), readArray() */ void readRows( const T * rows ); /** * Sets *this to be \a coeff times the identity matrix. * In other words, the diagonal entries are set to \a coeff * and the non-diagonal entries are set to zero. * * \sa loadScaling(const T&), loadDiagonal(const VectorType &) */ Derived & loadDiagonal( const T & coeff ); /** * Other name for loadDiagonal( const T & coeff ). * * \sa loadDiagonal(const T&), loadScaling(const VectorType &) */ Derived & loadScaling( const T & coeff ) { return loadDiagonal( coeff ); } /** * Sets *this to be the diagonal matrix with diagonal entries * given by the coords of the vector \a coeffs. If *this doesn't * have the same size as \a coeffs, it gets resized (if it has * dynamic size). * * \sa loadScaling(const VectorType &), loadDiagonal(const T &) */ Derived & loadDiagonal( const VectorType & coeffs ); /** * Other name for loadDiagonal( const VectorType & coeff ). * * \sa loadDiagonal(const VectorType &), loadScaling(const T&) */ Derived & loadScaling( const VectorType & coeffs ) { return loadDiagonal( coeffs ); } /** Multiplies *this on the right by the scaling matrix * with given vector of scaling coefficients. * * \sa loadScaling(const VectorType &), prescale(const VectorType &) */ Derived & scale( const VectorType & coeffs ) { Derived m( size() ); return *this *= m.loadScaling( coeffs ); } /** Multiplies *this on the left by the scaling matrix * with given vector of scaling coefficients. * * \sa loadScaling(const VectorType &), scale(const VectorType &) */ Derived & prescale( const VectorType & coeffs ) { Derived m( size() ); return( *this = m.loadScaling( coeffs ) * (*static_cast<Derived*>(this) ) ); } /** * Sets *this to be the identity matrix. * * \sa loadZero(), loadRandom() */ Derived & loadIdentity() { return loadDiagonal( static_cast<T>(1) ); } /** * Sets *this to be the zero matrix. * * \sa loadIdentity(), loadRandom() */ Derived & loadZero(); /** * Sets *this to be a 2-dimensional rotation of given angle. * @param angle the angle expressed in radians, counter-clockwise * * \sa rotate2(), prerotate2(), loadRotation3() */ Derived & loadRotation2( const T & angle ); /** Multiplies *this on the right by the rotation matrix of given angle * in radians. The template parameter Size must equal 2. * * \sa loadRotation2(), prerotate2() */ Derived & rotate2( const T & angle ) { Derived m( size() ); return *this *= m.loadRotation2( angle ); } /** Multiplies *this on the left by the rotation matrix of given angle * in radians. The template parameter Size must equal 2. * * \sa loadRotation2(), rotate2() */ Derived & prerotate2( const T & angle ) { Derived m( size() ); return( *this = m.loadRotation2( angle ) * (*static_cast<Derived*>(this)) ); } /** * Sets *this to be a 3-dimensional rotation of given angle in radians. * @param angle the angle expressed in radians, counter-clockwise if the * axis vector it oriented towards the observer. * @param axis the axis vector around which to rotate. Must be a unit * vector, i.e. it is required that axis.norm() == 1. * \note if axis.norm() is different from 1, the result is undefined, and * certainly won't be a rotation matrix. * * \sa rotate3(), prerotate3(), loadRotation2() */ Derived & loadRotation3( const T & angle, const VectorType & axis ); /** Multiplies *this on the right by the rotation matrix of given angle * in radians around given axis vector. Only applicable to matrices of * size 3. * * \sa prerotate3(), loadRotation3() */ Derived & rotate3( const T & angle, const VectorType & axis ) { Derived m( size() ); return *this *= m.loadRotation3( angle, axis ); } /** Multiplies *this on the left by the rotation matrix of given angle * in radians around given axis vector. Only applicable to matrices of * size 3. * * \sa rotate3(), loadRotation3() */ Derived & prerotate3( const T & angle, const VectorType & axis ) { Derived m( size() ); return( *this = m.loadRotation3( angle, axis ) * (*static_cast<Derived*>(this)) ); } /** * Returns *this + other (entry-wise addition). * The matrices *this and other must have * the same size. * * \return_by_value * * \sa operator+=() */ Derived operator + ( const Derived & other ) const { assert( other.size() == size() ); Derived res( size() ); addition_helper( other, & res ); return res; } /** * Returns *this - other (entry-wise substraction). * The matrices *this and other must have * the same size. * * \return_by_value * * \sa operator-=(), operator-(void) const */ Derived operator - ( const Derived & other ) const { assert( other.size() == size() ); Derived res( size() ); substraction_helper( other, & res ); return res; } /** * Returns (-(*this)). * * \return_by_value * * \sa replaceWithOpposite(), operator-(const Derived &) const */ Derived operator - () const { Derived res( size() ); for( int i = 0; i < size() * size(); i++ ) res[i] = -( (*this)[i] ); return res; } /** Replaces *this with (-(*this)). * * \sa operator-(void) const */ void replaceWithOpposite() { for( int i = 0; i < size() * size(); i++ ) (*this)[i] = -( (*this)[i] ); } /** * Returns true if *this and other are approximately equal. * * The optional parameter precision allows to control the number * of significant digits of precision. For instance, setting precision * to 1e-5 results in a precision of 5 decimal digits. * * This test is for nonzero matrices. If either of the two matrices * being compared is zero, then it returns true if, and only if the other * one is also zero -- which is not what one typically wants. * * To compare a matrix with the zero matrix, i.e. to check whether a * matrix is approximately zero, use isZero() instead. * * \sa operator==(), operator!=(), isZero() */ bool isApprox( const Derived & other, const T & precision = Util::epsilon<T>() ) const { VectorType v1(size()), v2(size()); for( int i = 0; i < size(); i++ ) { getColumn(i, &v1); other.getColumn(i, &v2); if( ! v1.isApprox(v2, precision) ) return false; } return true; } /** * Returns true if all entries of *this are smaller (in absolute value) * than other*precision. In other words, returns true if all entries are * much smaller than \a other. For the meaning of \a precision, see isApprox(). * * \sa isApprox(), isZero() */ bool isNegligible( const T & other, const T & precision = Util::epsilon<T>() ) const { bool ret = true; for( int i = 0; i < size(); i++ ) if( std::abs((*this)(i)) > std::abs(other*precision) ) ret = false; return ret; } /** Tests whether *this is approximately equal to the zero matrix. * * Equivalent to isNegligible(1). In other words, returns true if * all entries of *this are approximately zero, in the sense that * they have absolute value smaller than epsilon. * * \sa isNegligible(), isApprox() */ bool isZero( const T & precision = Util::epsilon<T>() ) const { return isNegligible( static_cast<T>(1), precision ); } /** * Equivalent to isApprox() with the default precision. * * \note Despite the name, this operator does a fuzzy compare! * It is not equivalent to operator== on each entry. * * \sa isApprox(),operator!=(),isZero() */ bool operator==( const Derived & other ) const { return isApprox(other); } /** * Equivalent to !isApprox() with the default precision. * * \note Despite the name, this operator does a fuzzy compare! * It is not equivalent to operator!= on each entry. * * \sa isApprox(),operator==(),isZero() */ bool operator!=( const Derived & other ) const { return !isApprox(other); } /** * Returns *this * factor (multiplication of each coord). * * \return_by_value * * \sa operator*=(const T &) */ Derived operator * ( const T & factor ) const { Derived res( size() ); scalar_multiplication_helper( factor, & res ); return res; } /** * Returns *this / factor (division of each coord). * * \return_by_value * * \sa operator*(const T&) const, operator/=(const T&) */ Derived operator / ( const T & factor ) const { Derived res( size() ); scalar_division_helper( factor, & res ); return res; } /** * Returns *this * vector (multiplication of vector by matrix). * The size of *this must equal the size of vector. * * \return_by_value \perf_use * multiply( const VectorType &, VectorType *) const * * \sa multiply( const VectorType &, VectorType *) const */ VectorType operator * ( const VectorType & vector ) const { assert( vector.size() == size() ); VectorType res( size() ); vector_multiplication_helper( vector, & res ); return res; } /** * Computes the product *this * vector and stores the * result into *res. * * For dynamic-size classes, this method resizes *res if necessary. * For fixed-size classes, it is required that *res already has the * right size, that is: res->size() == this->size(). * * This method is faster than operator*. * * Note for dynamic-size classes: * For optimal performance, the vector *res should be * initialized with the correct size before calling this method, * otherwise it will have to be resized, which is costly. * * Note that for the product to make sense, it is required * that this->size() == vector.size(). * * \sa operator*(const VectorType &) const, * leftmultiply() */ void multiply( const VectorType & vector, VectorType * res ) const { assert( this->size() == vector.size() ); res->resize( this->size() ); vector_multiplication_helper( vector, res ); } /** * Computes the product vector * *this and stores the * result into *res. Here, \a vector is regarded * as a row vector. * * For dynamic-size classes, this method resizes *res if necessary. * For fixed-size classes, it is required that *res already has the * right size, that is: res->size() == this->size(). * * This method is faster than operator*. * * Note for dynamic-size classes: * For optimal performance, the vector *res should be * initialized with the correct size before calling this method, * otherwise it will have to be resized, which is costly. * * Note that for the product to make sense, it is required * that this->size() == vector.size(). * * \sa multiply( const VectorType &, VectorType *) const */ void leftmultiply( const VectorType & vector, VectorType * res ) const { assert( this->size() == vector.size() ); res->resize( this->size() ); vector_leftmultiplication_helper( vector, res ); } /** * Gram-Schmidt algorithm. * * Assuming that the \a n first columns of *this are mutually orthogonal * unit vectors, this method fills the remaining columns with unit vectors * such that all the columns are mutually orthogonal. Thus, after this * method has returned, the columns of *this form an orthonormal basis. * In other words, after this function has returned, if we let \f$A\f$ denote * the matrix *this, then \f[ AA^* = \mathrm{Id}, \f] which is to say * that \f$A\f$ is an orthogonal matrix. Note that there is an inconsistency * in the mathematical language: an orthogonal matrix is a matrix whose * columns form an orthonormal basis, not just an orthogonal basis. * * \note this method assumes that the \a n first column vectors are unit * vectors. Otherwise, it doesn't work. * * \sa loadOrthoBasis() */ void recursiveGramSchmidt( int n ); /** * This method loads \a vector into the first column of *this, * and fills the other columns with unit vectors such that * all the columns of *this together form an orthogonal basis. * This is an orthonormal basis if, and only if \a vector is a * unit vector. * * If *this has dynamic size, it gets resized to match the size of * \a vector. If it has fixed size, then it is required that its size * equals the size of \a vector. * * \note this method assumes that \a vector is nonzero. * * \sa recursiveGramSchmidt(), VectorBase::makeOrthoVector() */ Derived & loadOrthoBasis( const VectorType & vector ); /** * @returns the determinant of the matrix (must be a square matrix). * * If the matrix has size <= 3, the determinant is obtained by * direct computation. If the matrix has size >= 4, a LU * decomposition is computed, and the determinant is obtained from it. * * \ludecomp_remark * * \sa LUDecompositionBase::determinant() */ T determinant() const; /** * @returns true if the matrix is invertible, false if it is singular. * * If the matrix haS size <= 3. If the matrix has size >= 4, a LU * decomposition is computed, and the invertibility is obtained from it. * * \ludecomp_remark * * \sa rank(), dimKer(), LUDecompositionBase::isInvertible(), * computeInverseSafely() */ bool isInvertible() const; /** * @returns the dimension of the kernel of the matrix. * * This function always performs a LU decomposition, even for small * matrices. \ludecomp_remark * * \sa rank(), isInvertible(), LUDecompositionBase::dimKer() */ int dimKer() const { return LUDecompositionType( *static_cast<const Derived*>(this) ) .dimKer(); } /** * @returns the rank of the matrix. * * This function always performs a LU decomposition, even for small * matrices. \ludecomp_remark * * \sa dimKer(), isInvertible(), LUDecompositionBase::rank() */ int rank() const { return LUDecompositionType( *static_cast<const Derived*>(this) ) .rank(); } /** * This method computes a basis of the kernel of the matrix *this. * * The \a result argument is a pointer to the matrix in which the result * will be stored. After calling this method, the \a dimKer() first * columns of \a result form a basis of the kernel of *this. If *this * is invertible, then dimKer()==0 and this method does nothing. * * @returns true if the matrix is non-invertible, hence has a nonzero * kernel; false if the matrix is invertible. * * This function always performs a LU decomposition, even for small * matrices. \ludecomp_remark * * \sa dimKer(), LUDecompositionBase::computeBasisKer() */ bool computeBasisKer( Derived * result ) const { return LUDecompositionType( *static_cast<const Derived*>(this) ) .computeBasisKer(result); } /** * Computes an antecedent of v by *this, that is, a vector u * such that Au=v, where A is the matrix *this. * If such an antecedent doesn't exist, this method does nothing. * * @returns true if an antecedent exists, false if no antecedent exists. * * Notes: * * 1. The returned vector u is only one solution of the equation Au=v, * which can have more than one solution if A is non-invertible. To get * a basis of the whole (affine) space of solutions, use computeBasisKer(). * * 2. This function always performs a LU decomposition, even for small * matrices. \ludecomp_remark * * \sa computeBasisKer(), LUDecompositionBase::computeSomeAntecedent() */ bool computeSomeAntecedent ( const VectorType & v, VectorType * result ) const { return LUDecompositionType( *static_cast<const Derived*>(this) ) .computeSomeAntecedent(v, result); } /** * Computes the inverse matrix of *this, and * stores it in *result. * * If *this is non-invertible, the *result matrix is left with * an undefined value. Therefore, only call this methods on matrices * that you know are invertible. You can check by calling isInvertible(). * * If the matrix has fixed size <= 3, the inverse is obtained by * direct computation. If the matrix has size >= 4 and/or has dynamic * size, a LU * decomposition is computed, and the inverse is obtained from it. * \ludecomp_remark * * \sa inverse(), computeInverseSafely() */ void computeInverse( Derived * result ) const; /** * Safely computes the inverse matrix of *this. * * If *this is invertible, its inverse is computed and stored in * *result. Moreover, *invertible is set to true. * * If *this is non-invertible, the *result matrix is left unchanged * and *invertible is set to false. * * If the matrix has size <= 3, the inverse is obtained by * direct computation. If the matrix has size >= 4, a LU * decomposition is computed, and the inverse is obtained from it. * \ludecomp_remark * * \sa inverse(), computeInverse() */ void computeInverseSafely( Derived * result, bool * invertible ) const; /** * This methods returns the inverse matrix of *this. If *this is * non-invertible, the returned value is undefined. * * This method calls computeInverse(), so the same remarks as for * computeInverse() apply here. \ludecomp_remark * * \return_by_value * * \sa computeInverse(), computeInverseSafely() */ Derived inverse() const { Derived m( size() ); computeInverse( &m ); return m; } /** * Stores in *res_row and *res_col the position of the entry of the * matrix that has biggest absolute value. Skips the \a skip first rows * and columns (default value for \a skip is 0). * * This method is not very fast currently, because it has a nested for * loop that doesn't get unrolled and for which we don't provide an * unrolled version. */ void findBiggestEntry( int * res_row, int * res_col, int skip = 0 ) const; /** * Computes the adjoint (conjugate transpose, equals transpose unless * T is complex numbers) of *this and stores it in *result. * * Don't try to pass \a this as \a result , this won't work. To replace * *this by its adjoint, use replaceWithAdjoint() instead. * * \sa adjoint(), replaceWithAdjoint() */ void computeAdjoint( Derived * result ) const; /** * Returns the adjoint (conjugate transpose, equals transpose unless * T is complex numbers) of *this. * * \return_by_value \perf_use computeAdjoint() or replaceWithAdjoint() * * \sa computeAdjoint(), replaceWithAdjoint() */ Derived adjoint() const { Derived res( size() ); computeAdjoint( & res ); return res; }; /** * Replaces *this with its adjoint (conjugate transpose, equals * transpose unless T is complex numbers). * * \sa adjoint(), computeAdjoint() */ void replaceWithAdjoint(); /** * Sets all entries to random values between -1.0 and 1.0. For complex * numbers, both the real and imaginary parts can range from -1.0 to 1.0. * * \sa loadIdentity(), loadZero() */ Derived & loadRandom() { for (int i = 0; i < size() * size(); i++) Util::pickRandom( (*this)[i] ); return *static_cast<Derived *>(this); } }; template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType > ::readArray( const T * src ) { for (int i = 0; i < size() * size(); i++) (*this)[i] = src[i]; } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType > ::addition_helper ( const Derived & other, Derived * res ) const { for( int i = 0; i < res->size() * res->size(); i++ ) (*res)[i] = (*this)[i] + other[i]; } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType > ::substraction_helper ( const Derived & other, Derived * res ) const { for( int i = 0; i < res->size() * res->size(); i++ ) (*res)[i] = (*this)[i] - other[i]; } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType > ::scalar_multiplication_helper ( const T & factor, Derived * res ) const { for( int i = 0; i < res->size() * res->size(); i++ ) (*res)[i] = (*this)[i] * factor; } /** * Returns factor * v (multiplication of each entry of v by factor). * * \return_by_value \perf_use MatrixBase::operator*=( const T & ) */ template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > Derived operator * ( const T & factor, const MatrixBase<T, Derived, VectorType, LUDecompositionType> & v ) { return v * factor; } /** * Multiplication of a vector by a matrix * on the right: returns v * m. Here, the vector v is regarded * as a row vector. * * \return_by_value \perf_use MatrixBase::leftmultiply() * * \sa MatrixBase::leftmultiply() */ template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > VectorType operator * ( const VectorType & v, const MatrixBase<T, Derived, VectorType, LUDecompositionType> & m ) { VectorType res(m.size()); m.vector_leftmultiplication_helper(v, & res); return res; } /** * Multiplication of a vector by a matrix * on the right: does v = v * m. Here, the vector v is regarded * as a row vector. * * This only makes sense if v.size() == m.size(). * * \sa MatrixBase::leftmultiply() */ template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > VectorType & operator *= ( VectorType & v, const MatrixBase<T, Derived, VectorType, LUDecompositionType> & m ) { assert( v.size() == m.size() ); VectorType vtmp(v); m.vector_leftmultiplication_helper(vtmp, & v); return v; } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > Derived & MatrixBase<T, Derived, VectorType, LUDecompositionType> ::loadDiagonal( const T & coeff ) { if( hasDynamicSize() || size() > 4 ) for( int i = 0; i < size(); i++ ) { (*this)( i, i ) = coeff; for( int j = 0; j < i; j++ ) { (*this)( j, i ) = static_cast<T>(0); (*this)( i, j ) = static_cast<T>(0); } } else { (*this)( 0, 0 ) = coeff; if( size() >= 2 ) (*this)( 1, 1 ) = coeff; if( size() >= 3 ) (*this)( 2, 2 ) = coeff; if( size() == 4 ) (*this)( 3, 3 ) = coeff; if( size() >= 2 ) { (*this)( 1, 0 ) = static_cast<T>(0); (*this)( 0, 1 ) = static_cast<T>(0); } if( size() >= 3 ) { (*this)( 2, 0 ) = static_cast<T>(0); (*this)( 2, 1 ) = static_cast<T>(0); (*this)( 0, 2 ) = static_cast<T>(0); (*this)( 1, 2 ) = static_cast<T>(0); } if( size() == 4 ) { (*this)( 3, 0 ) = static_cast<T>(0); (*this)( 3, 1 ) = static_cast<T>(0); (*this)( 3, 2 ) = static_cast<T>(0); (*this)( 0, 3 ) = static_cast<T>(0); (*this)( 1, 3 ) = static_cast<T>(0); (*this)( 2, 3 ) = static_cast<T>(0); } } return *static_cast<Derived*>(this); } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > Derived & MatrixBase<T, Derived, VectorType, LUDecompositionType> ::loadDiagonal( const VectorType & coeffs ) { resize( coeffs.size() ); if( hasDynamicSize() || size() > 4 ) for( int i = 0; i < size(); i++ ) { (*this)( i, i ) = coeffs(i); for( int j = 0; j < i; j++ ) { (*this)( j, i ) = static_cast<T>(0); (*this)( i, j ) = static_cast<T>(0); } } else { (*this)( 0, 0 ) = coeffs(0); if( size() >= 2 ) (*this)( 1, 1 ) = coeffs(1); if( size() >= 3 ) (*this)( 2, 2 ) = coeffs(2); if( size() == 4 ) (*this)( 3, 3 ) = coeffs(3); if( size() >= 2 ) { (*this)( 1, 0 ) = static_cast<T>(0); (*this)( 0, 1 ) = static_cast<T>(0); } if( size() >= 3 ) { (*this)( 2, 0 ) = static_cast<T>(0); (*this)( 2, 1 ) = static_cast<T>(0); (*this)( 0, 2 ) = static_cast<T>(0); (*this)( 1, 2 ) = static_cast<T>(0); } if( size() == 4 ) { (*this)( 3, 0 ) = static_cast<T>(0); (*this)( 3, 1 ) = static_cast<T>(0); (*this)( 3, 2 ) = static_cast<T>(0); (*this)( 0, 3 ) = static_cast<T>(0); (*this)( 1, 3 ) = static_cast<T>(0); (*this)( 2, 3 ) = static_cast<T>(0); } } return *static_cast<Derived*>(this); } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > Derived & MatrixBase<T, Derived, VectorType, LUDecompositionType> ::loadZero() { for( int i = 0; i < size() * size(); i++ ) (*this)[i] = static_cast<T>(0); return *static_cast<Derived*>(this); } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > Derived & MatrixBase<T, Derived, VectorType, LUDecompositionType> ::operator = ( const Derived & other ) { if( hasDynamicSize() ) if( static_cast<Derived*>(this) == &other ) return *static_cast<Derived*>(this); resize( other.size() ); readArray( other.array() ); return *static_cast<Derived*>(this); } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType> ::getRow( int row, T * ret ) const { assert( row >= 0 && row < size() ); const T *rowptr = array() + row; for( int i = 0; i < size(); i++ ) { ret[i] = *rowptr; rowptr += size(); } } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType> ::setRow( int row, const T * src ) { assert( row >= 0 && row < size() ); T *rowptr = array() + row; for( int i = 0; i < size(); i++ ) { *rowptr = src[i]; rowptr += size(); } } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType> ::getColumn( int column, T * ret ) const { assert( column >= 0 && column < size() ); const T *colptr = columnPtr(column); for( int i = 0; i < size(); i++ ) { ret[i] = *colptr; colptr++; } } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType> ::setColumn( int column, const T * src ) { assert( column >= 0 && column < size() ); T *colptr = columnPtr(column); for( int i = 0; i < size(); i++ ) { *colptr = src[i]; colptr++; } } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType> ::readRows( const T * rows ) { if( hasDynamicSize() || size() > 4 ) { const T * ptr = rows; for( int i = 0; i < size(); i++ ) { setRow( i, ptr ); ptr += size(); } } else { setRow( 0, rows ); if( size() >= 2 ) setRow( 1, rows + size() ); if( size() >= 3 ) setRow( 2, rows + 2 * size() ); if( size() == 4 ) setRow( 3, rows + 3 * size() ); } } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType> ::matrix_multiplication_helper ( const Derived & other, Derived * res ) const { if( hasDynamicSize() || size() > 4 ) { T *destptr = res->array(); const T *colptr = other.array(); for (int col = 0; col < res->size(); col++) { const T *rowptr = array(); for (int row = 0; row < res->size(); row++) { *destptr = static_cast<T>(0); const T *entry1ptr = colptr; const T *entry2ptr = rowptr; for (int entry = 0; entry < size(); entry++) { *destptr += (*entry1ptr) * (*entry2ptr); entry1ptr++; entry2ptr += size(); } destptr++; rowptr++; } colptr += other.size(); } } else { if( size() == 1 ) (*res)[0] = (*this)[0] * other[0]; else if( size() == 2 ) { (*res)(0, 0) = (*this)(0, 0) * other(0, 0) + (*this)(0, 1) * other(1, 0); (*res)(1, 0) = (*this)(1, 0) * other(0, 0) + (*this)(1, 1) * other(1, 0); (*res)(0, 1) = (*this)(0, 0) * other(0, 1) + (*this)(0, 1) * other(1, 1); (*res)(1, 1) = (*this)(1, 0) * other(0, 1) + (*this)(1, 1) * other(1, 1); } else if( size() == 3 ) { (*res)(0, 0) = (*this)(0, 0) * other(0, 0) + (*this)(0, 1) * other(1, 0) + (*this)(0, 2) * other(2, 0); (*res)(1, 0) = (*this)(1, 0) * other(0, 0) + (*this)(1, 1) * other(1, 0) + (*this)(1, 2) * other(2, 0); (*res)(2, 0) = (*this)(2, 0) * other(0, 0) + (*this)(2, 1) * other(1, 0) + (*this)(2, 2) * other(2, 0); (*res)(0, 1) = (*this)(0, 0) * other(0, 1) + (*this)(0, 1) * other(1, 1) + (*this)(0, 2) * other(2, 1); (*res)(1, 1) = (*this)(1, 0) * other(0, 1) + (*this)(1, 1) * other(1, 1) + (*this)(1, 2) * other(2, 1); (*res)(2, 1) = (*this)(2, 0) * other(0, 1) + (*this)(2, 1) * other(1, 1) + (*this)(2, 2) * other(2, 1); (*res)(0, 2) = (*this)(0, 0) * other(0, 2) + (*this)(0, 1) * other(1, 2) + (*this)(0, 2) * other(2, 2); (*res)(1, 2) = (*this)(1, 0) * other(0, 2) + (*this)(1, 1) * other(1, 2) + (*this)(1, 2) * other(2, 2); (*res)(2, 2) = (*this)(2, 0) * other(0, 2) + (*this)(2, 1) * other(1, 2) + (*this)(2, 2) * other(2, 2); } else // size() == 4 { (*res)(0, 0) = (*this)(0, 0) * other(0, 0) + (*this)(0, 1) * other(1, 0) + (*this)(0, 2) * other(2, 0) + (*this)(0, 3) * other(3, 0); (*res)(1, 0) = (*this)(1, 0) * other(0, 0) + (*this)(1, 1) * other(1, 0) + (*this)(1, 2) * other(2, 0) + (*this)(1, 3) * other(3, 0); (*res)(2, 0) = (*this)(2, 0) * other(0, 0) + (*this)(2, 1) * other(1, 0) + (*this)(2, 2) * other(2, 0) + (*this)(2, 3) * other(3, 0); (*res)(3, 0) = (*this)(3, 0) * other(0, 0) + (*this)(3, 1) * other(1, 0) + (*this)(3, 2) * other(2, 0) + (*this)(3, 3) * other(3, 0); (*res)(0, 1) = (*this)(0, 0) * other(0, 1) + (*this)(0, 1) * other(1, 1) + (*this)(0, 2) * other(2, 1) + (*this)(0, 3) * other(3, 1); (*res)(1, 1) = (*this)(1, 0) * other(0, 1) + (*this)(1, 1) * other(1, 1) + (*this)(1, 2) * other(2, 1) + (*this)(1, 3) * other(3, 1); (*res)(2, 1) = (*this)(2, 0) * other(0, 1) + (*this)(2, 1) * other(1, 1) + (*this)(2, 2) * other(2, 1) + (*this)(2, 3) * other(3, 1); (*res)(3, 1) = (*this)(3, 0) * other(0, 1) + (*this)(3, 1) * other(1, 1) + (*this)(3, 2) * other(2, 1) + (*this)(3, 3) * other(3, 1); (*res)(0, 2) = (*this)(0, 0) * other(0, 2) + (*this)(0, 1) * other(1, 2) + (*this)(0, 2) * other(2, 2) + (*this)(0, 3) * other(3, 2); (*res)(1, 2) = (*this)(1, 0) * other(0, 2) + (*this)(1, 1) * other(1, 2) + (*this)(1, 2) * other(2, 2) + (*this)(1, 3) * other(3, 2); (*res)(2, 2) = (*this)(2, 0) * other(0, 2) + (*this)(2, 1) * other(1, 2) + (*this)(2, 2) * other(2, 2) + (*this)(2, 3) * other(3, 2); (*res)(3, 2) = (*this)(3, 0) * other(0, 2) + (*this)(3, 1) * other(1, 2) + (*this)(3, 2) * other(2, 2) + (*this)(3, 3) * other(3, 2); (*res)(0, 3) = (*this)(0, 0) * other(0, 3) + (*this)(0, 1) * other(1, 3) + (*this)(0, 2) * other(2, 3) + (*this)(0, 3) * other(3, 3); (*res)(1, 3) = (*this)(1, 0) * other(0, 3) + (*this)(1, 1) * other(1, 3) + (*this)(1, 2) * other(2, 3) + (*this)(1, 3) * other(3, 3); (*res)(2, 3) = (*this)(2, 0) * other(0, 3) + (*this)(2, 1) * other(1, 3) + (*this)(2, 2) * other(2, 3) + (*this)(2, 3) * other(3, 3); (*res)(3, 3) = (*this)(3, 0) * other(0, 3) + (*this)(3, 1) * other(1, 3) + (*this)(3, 2) * other(2, 3) + (*this)(3, 3) * other(3, 3); } } } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType> ::vector_multiplication_helper ( const VectorType & vector, VectorType * res ) const { if( hasDynamicSize() || size() > 4 ) { T *destptr = res->array(); for( int i = 0; i < size(); i++) { const T *entryptr = array() + i; *destptr = static_cast<T>(0); for( int j = 0; j < size(); j++) { *destptr += (*entryptr) * vector[j]; entryptr += size(); } destptr++; } } else { if( size() == 1 ) (*res)[0] = (*this)[0] * vector[0]; else if( size() == 2 ) { (*res)[0] = (*this)(0, 0) * vector[0] + (*this)(0, 1) * vector[1]; (*res)[1] = (*this)(1, 0) * vector[0] + (*this)(1, 1) * vector[1]; } else if( size() == 3 ) { (*res)[0] = (*this)(0, 0) * vector[0] + (*this)(0, 1) * vector[1] + (*this)(0, 2) * vector[2]; (*res)[1] = (*this)(1, 0) * vector[0] + (*this)(1, 1) * vector[1] + (*this)(1, 2) * vector[2]; (*res)[2] = (*this)(2, 0) * vector[0] + (*this)(2, 1) * vector[1] + (*this)(2, 2) * vector[2]; } else // size() == 4 { (*res)[0] = (*this)(0, 0) * vector[0] + (*this)(0, 1) * vector[1] + (*this)(0, 2) * vector[2] + (*this)(0, 3) * vector[3]; (*res)[1] = (*this)(1, 0) * vector[0] + (*this)(1, 1) * vector[1] + (*this)(1, 2) * vector[2] + (*this)(1, 3) * vector[3]; (*res)[2] = (*this)(2, 0) * vector[0] + (*this)(2, 1) * vector[1] + (*this)(2, 2) * vector[2] + (*this)(2, 3) * vector[3]; (*res)[3] = (*this)(3, 0) * vector[0] + (*this)(3, 1) * vector[1] + (*this)(3, 2) * vector[2] + (*this)(3, 3) * vector[3]; } } } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType> ::vector_leftmultiplication_helper ( const VectorType & vector, VectorType * res ) const { if( hasDynamicSize() || size() > 4 ) { T *destptr = res->array(); for( int i = 0; i < size(); i++) { const T *entryptr = array() + i * size(); *destptr = static_cast<T>(0); for( int j = 0; j < size(); j++) { *destptr += vector[j] * (*entryptr); entryptr++; } destptr++; } } else { if( size() == 1 ) (*res)[0] = vector[0] * (*this)[0]; else if( size() == 2 ) { (*res)[0] = vector[0] * (*this)(0, 0) + vector[1] * (*this)(1, 0); (*res)[1] = vector[0] * (*this)(0, 1) + vector[1] * (*this)(1, 1); } else if( size() == 3 ) { (*res)[0] = vector[0] * (*this)(0, 0) + vector[1] * (*this)(1, 0) + vector[2] * (*this)(2, 0); (*res)[1] = vector[0] * (*this)(0, 1) + vector[1] * (*this)(1, 1) + vector[2] * (*this)(2, 1); (*res)[2] = vector[0] * (*this)(0, 2) + vector[1] * (*this)(1, 2) + vector[2] * (*this)(2, 2); } else // size() == 4 { (*res)[0] = vector[0] * (*this)(0, 0) + vector[1] * (*this)(1, 0) + vector[2] * (*this)(2, 0) + vector[3] * (*this)(3, 0); (*res)[1] = vector[0] * (*this)(0, 1) + vector[1] * (*this)(1, 1) + vector[2] * (*this)(2, 1) + vector[3] * (*this)(3, 1); (*res)[2] = vector[0] * (*this)(0, 2) + vector[1] * (*this)(1, 2) + vector[2] * (*this)(2, 2) + vector[3] * (*this)(3, 2); (*res)[3] = vector[0] * (*this)(0, 3) + vector[1] * (*this)(1, 3) + vector[2] * (*this)(2, 3) + vector[3] * (*this)(3, 3); } } } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > T MatrixBase<T, Derived, VectorType, LUDecompositionType> ::determinant() const { if( size() == 1 ) return (*this)[0]; else if( size() == 2 ) return (*this)[0] * (*this)[3] - (*this)[1] * (*this)[2]; else if( size() == 3 ) return (*this)[0] * ( (*this)[4] * (*this)[8] - (*this)[5] * (*this)[7] ) - (*this)[1] * ( (*this)[3] * (*this)[8] - (*this)[5] * (*this)[6] ) + (*this)[2] * ( (*this)[3] * (*this)[7] - (*this)[4] * (*this)[6] ); else return LUDecompositionType( *static_cast<const Derived*>(this) ).determinant(); } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType> ::computeInverse( Derived * result ) const { result->resize( size() ); if( size() == 1 ) { (*result)[0] = static_cast<T>(1) / (*this)[0]; } else if( size() == 2 ) { T det = (*this)[0] * (*this)[3] - (*this)[1] * (*this)[2]; (*result)(0, 0) = (*this)(1,1); (*result)(1, 0) = - (*this)(1,0); (*result)(0, 1) = - (*this)(0,1); (*result)(1, 1) = (*this)(0,0); (*result) /= det; } else if( size() == 3 ) { T det = (*this)[0] * ( (*this)[4] * (*this)[8] - (*this)[5] * (*this)[7] ) - (*this)[1] * ( (*this)[3] * (*this)[8] - (*this)[5] * (*this)[6] ) + (*this)[2] * ( (*this)[3] * (*this)[7] - (*this)[4] * (*this)[6] ); (*result)(0, 0) = (*this)(1,1) * (*this)(2,2) - (*this)(1,2) * (*this)(2,1); (*result)(0, 1) = - (*this)(0,1) * (*this)(2,2) + (*this)(0,2) * (*this)(2,1); (*result)(0, 2) = (*this)(0,1) * (*this)(1,2) - (*this)(1,1) * (*this)(0,2); (*result)(1, 0) = - (*this)(1,0) * (*this)(2,2) + (*this)(1,2) * (*this)(2,0); (*result)(1, 1) = (*this)(0,0) * (*this)(2,2) - (*this)(0,2) * (*this)(2,0); (*result)(1, 2) = - (*this)(0,0) * (*this)(1,2) + (*this)(1,0) * (*this)(0,2); (*result)(2, 0) = (*this)(1,0) * (*this)(2,1) - (*this)(1,1) * (*this)(2,0); (*result)(2, 1) = - (*this)(0,0) * (*this)(2,1) + (*this)(0,1) * (*this)(2,0); (*result)(2, 2) = (*this)(0,0) * (*this)(1,1) - (*this)(1,0) * (*this)(0,1); (*result) /= det; } else { LUDecompositionType( *static_cast<const Derived*>(this) ) .computeInverse(result); } } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType> ::computeInverseSafely( Derived * result, bool * invertible ) const { if( size() == 1 ) { if( (*this)[0] == static_cast<T>(0) ) { *invertible = false; } else { *invertible = true; result->resize(1); (*result)[0] = static_cast<T>(1) / (*this)[0]; } } else if( size() == 2 ) { T det = (*this)[0] * (*this)[3] - (*this)[1] * (*this)[2]; if( det == static_cast<T>(0) ) { *invertible = false; } else { *invertible = true; result->resize(2); (*result)(0, 0) = (*this)(1,1); (*result)(1, 0) = - (*this)(1,0); (*result)(0, 1) = - (*this)(0,1); (*result)(1, 1) = (*this)(0,0); (*result) /= det; } } else if( size() == 3 ) { T det = (*this)[0] * ( (*this)[4] * (*this)[8] - (*this)[5] * (*this)[7] ) - (*this)[1] * ( (*this)[3] * (*this)[8] - (*this)[5] * (*this)[6] ) + (*this)[2] * ( (*this)[3] * (*this)[7] - (*this)[4] * (*this)[6] ); if( det == static_cast<T>(0) ) { *invertible = false; } else { *invertible = true; result->resize(3); (*result)(0, 0) = (*this)(1,1) * (*this)(2,2) - (*this)(1,2) * (*this)(2,1); (*result)(0, 1) = - (*this)(0,1) * (*this)(2,2) + (*this)(0,2) * (*this)(2,1); (*result)(0, 2) = (*this)(0,1) * (*this)(1,2) - (*this)(1,1) * (*this)(0,2); (*result)(1, 0) = - (*this)(1,0) * (*this)(2,2) + (*this)(1,2) * (*this)(2,0); (*result)(1, 1) = (*this)(0,0) * (*this)(2,2) - (*this)(0,2) * (*this)(2,0); (*result)(1, 2) = - (*this)(0,0) * (*this)(1,2) + (*this)(1,0) * (*this)(0,2); (*result)(2, 0) = (*this)(1,0) * (*this)(2,1) - (*this)(1,1) * (*this)(2,0); (*result)(2, 1) = - (*this)(0,0) * (*this)(2,1) + (*this)(0,1) * (*this)(2,0); (*result)(2, 2) = (*this)(0,0) * (*this)(1,1) - (*this)(1,0) * (*this)(0,1); (*result) /= det; } } else { LUDecompositionType luDecomp( *static_cast<const Derived*>(this) ); *invertible = luDecomp.isInvertible(); if(*invertible) luDecomp.computeInverse(result); } } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > bool MatrixBase<T, Derived, VectorType, LUDecompositionType> ::isInvertible() const { if( size() <= 3 ) { int row_max_abs, col_max_abs; findBiggestEntry( &row_max_abs, &col_max_abs ); return( ! Util::isNegligible( determinant(), (*this)( row_max_abs, col_max_abs ) ) ); } else return LUDecompositionType( *static_cast<const Derived*>(this) ).isInvertible(); } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType> ::findBiggestEntry( int * res_row, int * res_col, int skip ) const { int row_max_abs = skip, col_max_abs = skip; const T *entry_ptr = &( (*this)(skip, skip) ); const T *entry_max_abs_ptr = entry_ptr; for( int col = skip; col < size(); col++) { for( int row = skip; row < size(); row++) { if( std::abs( *entry_ptr ) > std::abs( *entry_max_abs_ptr ) ) { row_max_abs = row; col_max_abs = col; entry_max_abs_ptr = entry_ptr; } entry_ptr++; } entry_ptr += skip; } *res_row = row_max_abs; *res_col = col_max_abs; } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType> ::computeAdjoint( Derived * result ) const { result->resize( size() ); if( hasDynamicSize() || size() > 4 ) { for( int row = 0; row < size(); row++ ) for( int col = 0; col < size(); col++ ) (*result)( col, row ) = Util::conj( (*this)( row, col ) ); } else { (*result)( 0, 0 ) = Util::conj( (*this)( 0, 0 ) ); if( size() >= 2 ) { (*result)( 1, 0 ) = Util::conj( (*this)( 0, 1 ) ); (*result)( 0, 1 ) = Util::conj( (*this)( 1, 0 ) ); (*result)( 1, 1 ) = Util::conj( (*this)( 1, 1 ) ); } if( size() >= 3 ) { (*result)( 2, 0 ) = Util::conj( (*this)( 0, 2 ) ); (*result)( 2, 1 ) = Util::conj( (*this)( 1, 2 ) ); (*result)( 0, 2 ) = Util::conj( (*this)( 2, 0 ) ); (*result)( 1, 2 ) = Util::conj( (*this)( 2, 1 ) ); (*result)( 2, 2 ) = Util::conj( (*this)( 2, 2 ) ); } if( size() == 4 ) { (*result)( 3, 0 ) = Util::conj( (*this)( 0, 3 ) ); (*result)( 3, 1 ) = Util::conj( (*this)( 1, 3 ) ); (*result)( 3, 2 ) = Util::conj( (*this)( 2, 3 ) ); (*result)( 0, 3 ) = Util::conj( (*this)( 3, 0 ) ); (*result)( 1, 3 ) = Util::conj( (*this)( 3, 1 ) ); (*result)( 2, 3 ) = Util::conj( (*this)( 3, 2 ) ); (*result)( 3, 3 ) = Util::conj( (*this)( 3, 3 ) ); } } } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType> ::replaceWithAdjoint() { if( hasDynamicSize() || size() > 4 ) { for( int row = 0; row < size(); row++ ) { (*this)( row, row ) = Util::conj( (*this)( row, row ) ); for( int col = row+1; col < size(); col++ ) { T tmp = (*this)( row, col ); (*this)( row, col ) = Util::conj( (*this)( col, row ) ); (*this)( col, row ) = Util::conj( tmp ); } } } else { if( size() == 1 ) (*this)( 0, 0 ) = Util::conj( (*this)( 0, 0 ) ); T tmp; if( size() >= 2 ) { tmp = Util::conj( (*this)( 1, 0 ) ); (*this)( 1, 0 ) = Util::conj( (*this)( 0, 1 ) ); (*this)( 0, 1 ) = tmp; (*this)( 1, 1 ) = Util::conj( (*this)( 1, 1 ) ); } if( size() >= 3 ) { tmp = Util::conj( (*this)( 2, 0 ) ); (*this)( 2, 0 ) = Util::conj( (*this)( 0, 2 ) ); (*this)( 0, 2 ) = tmp; tmp = Util::conj( (*this)( 2, 1 ) ); (*this)( 2, 1 ) = Util::conj( (*this)( 1, 2 ) ); (*this)( 1, 2 ) = tmp; (*this)( 2, 2 ) = Util::conj( (*this)( 2, 2 ) ); } if( size() == 4 ) { tmp = Util::conj( (*this)( 3, 0 ) ); (*this)( 3, 0 ) = Util::conj( (*this)( 0, 3 ) ); (*this)( 0, 3 ) = tmp; tmp = Util::conj( (*this)( 3, 1 ) ); (*this)( 3, 1 ) = Util::conj( (*this)( 1, 3 ) ); (*this)( 1, 3 ) = tmp; tmp = Util::conj( (*this)( 3, 2 ) ); (*this)( 3, 2 ) = Util::conj( (*this)( 2, 3 ) ); (*this)( 2, 3 ) = tmp; (*this)( 3, 3 ) = Util::conj( (*this)( 3, 3 ) ); } } } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > Derived & MatrixBase<T, Derived, VectorType, LUDecompositionType> ::loadRotation2( const T & angle ) { resize(2); T _cos = cos( angle ), _sin = sin( angle ); (*this)(0, 0) = _cos; (*this)(1, 1) = _cos; (*this)(1, 0) = _sin; (*this)(0, 1) = -_sin; return *static_cast<Derived*>(this); } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > Derived & MatrixBase<T, Derived, VectorType, LUDecompositionType> ::loadRotation3( const T & angle, const VectorType & axis ) { resize(3); T _cos = cos( angle ), _sin = sin( angle ); T one_minus_cos = static_cast<T>(1) - _cos; T coord_times_one_minus_cos = axis.x() * one_minus_cos; (*this)( 0, 0 ) = axis.x() * coord_times_one_minus_cos + _cos; T coord_times_coord_times_one_minus_cos = axis.y() * coord_times_one_minus_cos; T other_coord_times_sin = axis.z() * _sin; (*this)( 1, 0 ) = coord_times_coord_times_one_minus_cos + other_coord_times_sin; (*this)( 0, 1 ) = coord_times_coord_times_one_minus_cos - other_coord_times_sin; coord_times_coord_times_one_minus_cos = axis.z() * coord_times_one_minus_cos; other_coord_times_sin = axis.y() * _sin; (*this)( 2, 0 ) = coord_times_coord_times_one_minus_cos - other_coord_times_sin; (*this)( 0, 2 ) = coord_times_coord_times_one_minus_cos + other_coord_times_sin; coord_times_one_minus_cos = axis.y() * one_minus_cos; (*this)( 1, 1 ) = axis.y() * coord_times_one_minus_cos + _cos; coord_times_coord_times_one_minus_cos = axis.z() * coord_times_one_minus_cos; other_coord_times_sin = axis.x() * _sin; (*this)( 2, 1 ) = coord_times_coord_times_one_minus_cos + other_coord_times_sin; (*this)( 1, 2 ) = coord_times_coord_times_one_minus_cos - other_coord_times_sin; (*this)( 2, 2 ) = axis.z() * axis.z() * one_minus_cos + _cos; return *static_cast<Derived*>(this); } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > void MatrixBase<T, Derived, VectorType, LUDecompositionType> ::recursiveGramSchmidt( int n ) { assert( n >= 1 && n < size() ); VectorType v0( size() ); VectorType v( size() ); do { v0.loadRandomUnit(); v = v0; for( int i = 0; i < n; i++ ) { T d = static_cast<T>(0); const T * colptr = columnPtr( i ); for( int j = 0; j < size(); j++ ) d += Util::conj( colptr[j] ) * v0(j); for( int j = 0; j < size(); j++ ) v(j) -= d * colptr[j]; } } while( std::abs(v.norm2()) < 1e-3 ); v.normalize(); setColumn( n, v ); if( n < size() - 1 ) recursiveGramSchmidt( n + 1 ); } template< typename T, typename Derived, typename VectorType, typename LUDecompositionType > Derived & MatrixBase<T, Derived, VectorType, LUDecompositionType> ::loadOrthoBasis( const VectorType & vector ) { resize( vector.size() ); if( size() <= 3 ) { setColumn( 0, vector ); if( size() == 1 ) return *static_cast<Derived*>(this); T norm = vector.norm(); if( size() == 2 ) { (*this)(0,1) = -( vector(1) / norm ); (*this)(1,1) = vector(0) / norm; } else { VectorType v( size() ); vector.makeOrthoVector( & v ); setColumn( 1, v ); setColumn( 2, cross( vector, v ) / norm ); } } else { VectorType v( vector ); v.normalize(); setColumn( 0, v ); recursiveGramSchmidt( 1 ); setColumn( 0, vector ); } return *static_cast<Derived*>(this); } /** * Allows to print a matrix by simply doing * @code cout << mymatrix << endl; * @endcode */ template<typename T, typename Derived, typename VectorType, typename LUDecompositionType> std::ostream & operator << ( std::ostream & s, const MatrixBase<T, Derived, VectorType, LUDecompositionType> & m ) { for( int i = 0; i < m.size(); i++ ) { s << m( i, 0 ); for (int j = 1; j < m.size(); j++ ) s << " " << m( i, j ); if( i < m.size() - 1) s << std::endl; } return s; } } // namespace Eigen #endif // EIGEN_MATRIXBASE_H ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/eigen/vector.h�������������������������������������������������������0000644�0001750�0001750�00000025435�12116077757�017245� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// This file is part of Eigen, a lightweight C++ template library // for linear algebra. Eigen itself is part of the KDE project. // // Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr> // // Eigen is free software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the Free Software // Foundation; either version 2 or (at your option) any later version. // // Eigen is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more // details. // // You should have received a copy of the GNU General Public License along // with Eigen; if not, write to the Free Software Foundation, Inc., 51 // Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. // // As a special exception, if other files instantiate templates or use macros // or inline functions from this file, or you compile this file and link it // with other works to produce a work based on this file, this file does not // by itself cause the resulting work to be covered by the GNU General Public // License. This exception does not invalidate any other reasons why a work // based on this file might be covered by the GNU General Public License. /** \file vector.h * \brief Vector and VectorX class templates */ #ifndef EIGEN_VECTOR_H #define EIGEN_VECTOR_H #include "vectorbase.h" namespace Eigen { /** \ingroup fixedsize * * \ingroup vectors * * \brief Fixed-size vector. * * A class for fixed-size vectors (for linear algebra). * Thus, a Vector<T,Size> is the same * as a T[Size] array, except that it has convenient operators and methods * for basic vector math. * * The template parameter T is the type of the coords of the vector. * It can be any type representing either real or complex numbers. * The template parameter Size is the size of the vector (number of coords). * The following typedefs are provided to cover the usual cases: * @code typedef Vector<double, 2> Vector2d; typedef Vector<double, 3> Vector3d; typedef Vector<double, 4> Vector4d; typedef Vector<float, 2> Vector2f; typedef Vector<float, 3> Vector3f; typedef Vector<float, 4> Vector4f; typedef Vector<std::complex<double>, 2> Vector2cd; typedef Vector<std::complex<double>, 3> Vector3cd; typedef Vector<std::complex<double>, 4> Vector4cd; typedef Vector<std::complex<float>, 2> Vector2cf; typedef Vector<std::complex<float>, 3> Vector3cf; typedef Vector<std::complex<float>, 4> Vector4cf; * @endcode * * If you prefer dynamic-size vectors (they are slower), see the VectorX * class template, which provides exactly the same functionality and API * in dynamic-size version. * * The Vector class template provides all the usual operators and methods * to manipulate vectors. * * Here are some examples of usage of Vector: * @code using namespace Eigen; using namespace std; // we'll use cout for outputting vectors Vector3d vec1( -1.1, 2.9, 4.3 ); // construct vector vec1 with given coords double array[3] = { 2.4, 3.1, -0.7 }; Vector3d vec2( array ); // reads the coords of vec2 from array2 vec1 += vec2; // computes the coord-wise sum vec1 + vec2, stores it in vec1 vec1 = vec1 - vec2; // there are also non-assignment operators vec1 = 0.9 * vec1 + vec2 / 2.6; // you can also multiply/divide by numbers vec1.x() = vec2.y() // read-write access to the x,y,z,w coords vec1(2) = -1.4; // Stores the value -1.4 in coord 2 of vec1. vec1.z() = -1.4; // equivalent to the previous line cout << vec1 << endl; // outputs vec1 cout << "norm of vec1: " << vec1.norm() << endl; cout << cross( vec1, vec2 ) << endl; // cross-product * @endcode */ template< typename T, int Size > class Vector : public VectorBase< T, Vector<T, Size> > { friend class VectorBase< T, Vector<T, Size> >; typedef class VectorBase< T, Vector<T, Size> > Base; private: /** \internal * Returns false. A Vector<T,Size> doesn't have dynamic size. */ bool _hasDynamicSize() const { return false; } /** \internal * Returns the size of the vector. */ int _size() const { return Size; } /** \internal * Does nothing. A Vector<T,Size> can't be resized. * * if newsize != size(), a debug message is generated. */ void _resize( int size ) const { assert( size == this->size() ); } public: /** * Default constructor. Constructs a vector with uninitialized coords. */ Vector() {} /** * Convenience constructor provided for API homogeneity with VectorX. * The unused_size argument is not used. */ explicit Vector( int unused_size ) { assert( unused_size == this->size() ); } /** * Copy constructor. */ Vector( const Vector &v ) { this->readArray( v.array() ); } /** * Constructor reading the coords from an array. */ Vector( const T *array ) { this->readArray( array ); } /** * Convenience constructor provided for API homogeneity with VectorX. * Constructor reading the coords from an array. * The unused_size argument is not used. */ Vector( int unused_size, const T *array ) { assert( unused_size == this->size() ); this->readArray( array ); } /** * Convenience constructor for vectors of size 2. */ Vector( T x, T y ) { assert( this->size() == 2 ); this->x() = x; this->y() = y; } /** * Convenience constructor for vectors of size 3. */ Vector( T x, T y, T z ) { assert( this->size() == 3 ); this->x() = x; this->y() = y; this->z() = z; } /** * Convenience constructor for vectors of size 4. */ Vector( T x, T y, T z, T w ) { assert( this->size() == 4 ); this->x() = x; this->y() = y; this->z() = z; this->w() = w; } Vector & operator = ( const Vector & other ) { return Base::operator = ( other ); } Vector & operator += ( const Vector & other ) { return Base::operator += ( other ); } Vector & operator -= ( const Vector & other ) { return Base::operator -= ( other ); } Vector & operator *=( const T & factor ) { return Base::operator *= ( factor ); } Vector & operator /=( const T & factor ) { return Base::operator /= ( factor ); } protected: /** * The vector's array of coordinates. */ T m_array[Size]; }; /** \ingroup dynamicsize * * \ingroup vectors * * \brief Dynamic-size vector * * A class for dynamic-size vectors (for linear algebra). * * The template parameter T is the type of the coords of the vector. * It can be any type representing either real or complex numbers. * The following typedefs are provided to cover the usual cases: * @code typedef VectorX<double> VectorXd; typedef VectorX<float> VectorXf; typedef VectorX< std::complex<double> > VectorXcd; typedef VectorX< std::complex<float> > VectorXcf; * @endcode * * If you prefer fixed-size vectors (they are faster), see the Vector * class template, which provides exactly the same functionality and API * in fixed-size version. * * The VectorX class template provides all the usual operators and methods * to manipulate vectors. * * Here are some examples of usage of VectorX: * @code using namespace Eigen; using namespace std; // we'll use cout for outputting vectors double array1[3] = { -1.1, 2.9, 4.3 }; VectorXd vec1( 3, array1 ); // construct vector vec1 from array array1 VectorXd vec2( 3 ); // construct a new uninitialized vector of size 3 double array2[3] = { 2.4, 3.1, -0.7 }; vec2.readArray( array2); // reads the coords of vec2 from array2 vec1 += vec2; // computes the coord-wise sum vec1 + vec2, stores it in vec1 vec1 = vec1 - vec2; // there are also non-assignment operators vec1 = 0.9 * vec1 + vec2 / 2.6; // you can also multiply/divide by numbers VectorXd vec3(5); // construct a new uninitialized vector of size 5 vec3 = vec1; // Resizes vec3 to size 3, copies vec1 into vec3 vec1(2) = -1.4; // Stores the value -1.4 in coord 2 of vec1. cout << vec1 << endl; cout << "norm of vec1: " << vec1.norm() << endl; * @endcode */ template <typename T> class VectorX : public VectorBase< T, VectorX<T> > { friend class VectorBase< T, VectorX<T> >; typedef class VectorBase< T, VectorX<T> > Base; private: /** \internal * Small helper function for the constructors and the _resize method */ void init( int size ) { assert( size >= 1 ); m_size = size; m_array = new T[_size()]; } /** \internal * Returns true. A VectorX has dynamic size. */ bool _hasDynamicSize() const { return true; } /** \internal * Returns the size of the vector. */ int _size() const { return m_size; } /** \internal * Resizes the vector. */ void _resize( int size ); public: /** * Copy constructor */ VectorX( const VectorX & other ) { init( other._size() ); this->readArray( other.array() ); } /** * Constructs a vector with given size and uninitialized coords. * The default value sor size is 1. */ explicit VectorX( int size = 1 ) { init( size ); } /** * Constructs a vector with given size and reads its coord from the array. */ VectorX( int size, const T * array ) { init( size ); this->readArray( array ); } ~VectorX() { delete[] m_array; } VectorX & operator = ( const VectorX & other ) { return Base::operator = ( other ); } VectorX & operator += ( const VectorX & other ) { return Base::operator += ( other ); } VectorX & operator -= ( const VectorX & other ) { return Base::operator -= ( other ); } VectorX & operator *=( const T & factor ) { return Base::operator *= ( factor ); } VectorX & operator /=( const T & factor ) { return Base::operator /= ( factor ); } protected: /** * The size (dimension) of the vector */ int m_size; /** * The vector's array of coordinates. */ T *m_array; }; template<typename T> void VectorX<T>::_resize( int size ) { assert( size >= 1 ); if( size == _size() ) return; if( size > _size() ) { delete[] m_array; m_array = new T[size]; } m_size = size; } EIGEN_MAKE_FIXEDSIZE_TYPEDEFS(Vector) EIGEN_MAKE_DYNAMICSIZE_TYPEDEFS(VectorX) } #endif // EIGEN_VECTOR_H �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/eigen/projective.h���������������������������������������������������0000644�0001750�0001750�00000064024�12116077757�020112� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// This file is part of Eigen, a lightweight C++ template library // for linear algebra. Eigen itself is part of the KDE project. // // Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr> // // Eigen is free software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the Free Software // Foundation; either version 2 or (at your option) any later version. // // Eigen is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more // details. // // You should have received a copy of the GNU General Public License along // with Eigen; if not, write to the Free Software Foundation, Inc., 51 // Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. // // As a special exception, if other files instantiate templates or use macros // or inline functions from this file, or you compile this file and link it // with other works to produce a work based on this file, this file does not // by itself cause the resulting work to be covered by the GNU General Public // License. This exception does not invalidate any other reasons why a work // based on this file might be covered by the GNU General Public License. /** \file projective.h * \brief Projective geometry */ #ifndef EIGEN_MATRIXP_H #define EIGEN_MATRIXP_H #include "matrix.h" namespace Eigen { /** \ingroup projective * * Converts an "affine" vector into the equivalent "projective" vector. * Thus, if the input affine vector is \f$(x_1,\ldots,x_n)\f$, then the * output projective vector is \f$(x_1,\ldots,x_n,1)\f$. * * \sa projToAff() */ template< typename T, int Size> Vector<T, Size+1> & affToProj( const Vector<T, Size> & vector, Vector<T, Size+1> * ret ) { for( int i = 0; i < Size; i++ ) (*ret)(i) = vector(i); (*ret)(Size) = static_cast<T>(1); return *ret; } /** \ingroup projective * * Converts a "projective" vector into the equivalent "affine" vector. * Thus, if the input projective vector is \f$(x_1,\ldots,x_{n+1})\f$, * then the output affine vector is * \f[(\frac{x_1}{x_{n+1}},\ldots,\frac{x_n}{x_{n+1}}).\f] * * \sa affToProj() */ template< typename T, int Size> Vector<T, Size> & projToAff( const Vector<T, Size+1> & vector, Vector<T, Size> * ret ) { for( int i = 0; i < Size; i++ ) (*ret)(i) = vector(i) / vector(Size); return *ret; } /** \ingroup projective * * \ingroup matrices * * \ingroup fixedsize * * \brief Matrix in projective geometry, fixed-size only * * It's sometimes useful to add one dimension to the space you're working in. * For instance, that allows to represent translations as matrices, which is * otherwise impossible. * * Internally, a MatrixP<T, n> is just a Matrix<T, n+1>. The difference is * that it's regarded as a homography acting on the n-dimensional projective * space, instead of being regarded as a linear map acting on the n-dimensional * vector space. * * The correspondence between "ordinary" vectors of size n and * "projective" vectors of size n+1 is as follows. Given an ordinary vector * \f$(x_1,\ldots,x_n)\f$, the corresponding projective vector is * \f$(x_1,\ldots,x_n,1)\f$. Conversely, given a projective vector * \f$(x_1,\ldots,x_n,x_{n+1})\f$, the corresponding ordinary vector is * \f$(\frac{x_1}{x_{n+1}},\ldots,\frac{x_n}{x_{n+1}})\f$. If \f$x_{n+1}=0\f$, * then the projective vector doesn't correspond to any ordinary one, and * is called a "direction at infinity". * * The following typedefs are provided to cover the usual cases: * @code typedef MatrixP<double, 2> MatrixP2d; typedef MatrixP<double, 3> MatrixP3d; typedef MatrixP<double, 4> MatrixP4d; typedef MatrixP<float, 2> MatrixP2f; typedef MatrixP<float, 3> MatrixP3f; typedef MatrixP<float, 4> MatrixP4f; typedef MatrixP<std::complex<double>, 2> MatrixP2cd; typedef MatrixP<std::complex<double>, 3> MatrixP3cd; typedef MatrixP<std::complex<double>, 4> MatrixP4cd; typedef MatrixP<std::complex<float>, 2> MatrixP2cf; typedef MatrixP<std::complex<float>, 3> MatrixP3cf; typedef MatrixP<std::complex<float>, 4> MatrixP4cf; * @endcode * * For example, in an OpenGL application, the Modelview and Projection matrices * can be represented as objects of MatrixP3d or MatrixP3f according to whether * one prefers to work over doubles or over floats. * * Another example is Qt's QMatrix class: it is equivalent to Eigen's MatrixP2d. * * Tthe meaning of the entries in a MatrixP is as follows: * \f[\left(\begin{array}{ccc|c} & & & \\ & L & & T \\ & & & \\ \hline 0 & \cdots & 0 & 1 \end{array}\right).\f] * Here, * - \f$L\f$, the topleft (Size x Size) block, is called the "linear component". It is a Matrix<T,Size>. * - \f$T\f$, the last column vector without the last entry, is called the "translation vector". It is a Vector<T,Size>. * * Note that the last row is supposed to always be equal to 0,...,0,1. Don't alter it unless you know what you're doing. * However keeping it is still useful for instance for OpenGL compatibility. * * When multiplying another Vector<T, Size> V by such a MatrixP, the linear component is first applied, and then the result * is translated by the translation vector. Thus, the result is \f[LV+T.\f] */ template< typename T, int Size > class MatrixP { protected: /// The matrix itself. Matrix<T, Size+1> m_mat; public: /// Returns a reference to the matrix as a Matrix<T, Size+1> const Matrix<T, Size+1> & matrix() const { return m_mat; } /// Returns a reference to the matrix as a Matrix<T, Size+1> Matrix<T, Size+1> & matrix() { return m_mat; } /// Has the same meaning as in class Matrix<T, Size+1>. const T * array() const { return m_mat.array(); } /// Has the same meaning as in class Matrix<T, Size+1>. T * array() { return m_mat.array(); } /// Has the same meaning as in class Matrix<T, Size+1>. const T & operator() ( int row, int col ) const { return m_mat(row,col); } /// Has the same meaning as in class Matrix<T, Size+1>. T & operator() ( int row, int col ) { return m_mat(row,col); } /// Has the same meaning as in class Matrix<T, Size+1>. const T & operator[] ( int i) const { return m_mat[i]; } /// Has the same meaning as in class Matrix<T, Size+1>. T & operator[] ( int i) { return m_mat[i]; } /** Sets the last row to be 0,...,0,1. */ void resetLastRow(); /** Sets the last column entries to 0, except for the last row which is * left unmodified. * * \sa setTranslationVector(), translationVector(), getTranslationVector() */ void resetTranslationVector(); /** * Copies into *res the Size first entries of the * last column of the matrix. * * \sa setTranslationVector(), translationVector(), resetTranslationVector() */ void getTranslationVector( Vector<T, Size> * res ) const; /** * Copies v into the Size first entries of the * last column of the matrix. * * \sa getTranslationVector(), translationVector(), resetTranslationVector() */ void setTranslationVector( const Vector<T, Size> & v ); /** * Returns a vector whose coords are the Size first entries of the * last column of the matrix. * * \sa getTranslationVector(), setTranslationVector(), resetTranslationVector() */ Vector<T, Size> translationVector() const { Vector<T, Size> res; getTranslationVector( & res ); return res; } /** Loads into *this a MatrixP constructed from a Matrix<T, Size>, by * calling setLinearComponent(), and then resetLastRow() and resetTranslationVector(). * The last row and last column are filled with 0's, except for the * bottom-right corner entry which is set to 1. The resulting MatrixP * has the same action on vectors as the original Matrix had. * * \sa setLinearComponent() */ MatrixP & loadMatrix( const Matrix<T, Size> & matrix ); /** Constructs an uninitialized MatrixP. */ MatrixP() : m_mat() {} /** Copy constructor. */ MatrixP( const MatrixP & other ) : m_mat( other.m_mat ) {} /** Constructs a MatrixP from a Matrix<T, Size+1>. Simply copies the * entries. */ MatrixP( const Matrix<T, Size+1> & other ) : m_mat( other ) {} /** Constructs a MatrixP from a Matrix<T, Size> by calling loadMatrix(). */ MatrixP( const Matrix<T, Size> & other ) { loadMatrix( other ); } /** Calls Matrix::operator=(). */ MatrixP & operator = ( const MatrixP & other ) { m_mat = other.m_mat; return *this; } /** Matrix-matrix product. Calls Matrix::multiply(). This stores in *res * the product (*this) * other. This method is faster than operator*= * and operator* because it doesn't perform useless copies. * * \sa linearMultiply() */ void multiply( const MatrixP & other, MatrixP * res ) const { m_mat.multiply( other.m_mat, &( res->m_mat ) ); } /** Matrix-matrix product. Calls Matrix::operator*=(). */ MatrixP & operator *= ( const MatrixP & other ) { m_mat *= other.m_mat; return *this; } /** Matrix-matrix product. Calls Matrix::operator*(). For better performance use * multiply(const MatrixP &, MatrixP *) const instead. * * \sa multiply(const MatrixP &, MatrixP *) const */ MatrixP operator * ( const MatrixP & other ) const { return MatrixP( m_mat * other.m_mat ); } /** Applies the homography represented by *this to \a vector, * and stores the result in *res. Thus the linear component of * *this is applied to \a vector, and then \a vector is translated * by the translation coefficients of *this. This method is faster than * operator* because it doesn't perform useless copies.*/ void multiply( const Vector<T, Size> & vector, Vector<T, Size> * res ) const; /** Returns the product of \a vector by *this, as computed by * multiply( const Vector<T, Size> &, Vector<T, Size> * ). * * \sa multiply(const Vector<T, Size> &, Vector<T, Size> *) const */ Vector<T, Size> operator * ( const Vector<T, Size> & vector ) const { Vector<T, Size> res; multiply( vector, & res ); return res; } /** Calls Matrix::multiply(). Thus, for vectors of size \a Size+1, * the multiplication is done as if *this were an ordinary matrix. This method is faster than * operator* because it doesn't perform useless copies.*/ void multiply( const Vector<T, Size+1> & vector, Vector<T, Size+1> * res ) const { m_mat.multiply( vector, res ); } /** Calls Matrix::operator*(). Thus, for vectors of size \a Size+1, * the multiplication is done as if *this were an ordinary matrix. * * \sa multiply(const Vector<T, Size+1> &, Vector<T, Size+1> *) const */ Vector<T, Size+1> operator * ( const Vector<T, Size+1> & vector ) const { return m_mat * vector; } /** Applies the linear component of the homography represented by *this * to \a vector, * and stores the result in *res. This is the same thing as * multiply( const Vector<T,Size> &, Vector<T, Size> *) const, * except that the translation coefficients of *this are ignored. * In other words the last column of *this is ignored and the * computation is done as if it were 0,...0,1. * * \sa multiply(const MatrixP &, MatrixP *) const */ void linearMultiply( const Vector<T, Size> & vector, Vector<T, Size> * res ) const; /** * Stores into *res the linear component, i.e. the (Size x Size) topleft block. * * \sa setLinearComponent(), linearComponent() */ void getLinearComponent( Matrix<T, Size> * res ) const; /** * Sets the linear component of *this, i.e. the (Size x Size) topleft block. * The last row and column are unaffected * * \sa loadMatrix(), getLinearComponent(), linearComponent() */ void setLinearComponent( const Matrix<T, Size> & matrix ); /** * Returns the linear component, i.e. the (Size x Size) topleft block. * * \sa setLinearComponent(), getLinearComponent() */ Matrix<T, Size> linearComponent() const { Matrix<T, Size> res; getLinearComponent( & res ); return res; } /** Calls Matrix::loadZero(). */ MatrixP & loadZero() { m_mat.loadZero(); return *this;} /** Calls Matrix::loadIdentity(). */ MatrixP & loadIdentity() { m_mat.loadIdentity(); return *this;} /** Sets *this to be a translation matrix, with translation vector given * by \a v. * * \sa translate(), pretranslate(), setTranslationVector() */ MatrixP & loadTranslation( const Vector<T, Size> & v ); /** Multiplies *this on the right by the translation matrix * with translation vector given by \a v. * * \sa pretranslate(), loadTranslation(), setTranslationVector() */ MatrixP & translate( const Vector<T, Size> & v ); /** Multiplies *this on the left by the translation matrix * with translation vector given by \a v. * * \sa translate(), loadTranslation(), setTranslationVector() */ MatrixP & pretranslate( const Vector<T, Size> & v ); /** Sets *this to be the scaling matrix with given homogeneous * scaling coefficient. * * \sa loadScaling(const Vector<T,Size>&), scale(const T &), prescale(const T &) */ MatrixP & loadScaling( const T & coeff ) { Matrix<T, Size> m; return loadMatrix( m.loadScaling( coeff ) ); } /** Multiplies *this on the right by the scaling matrix * with given homogeneous scaling coefficient. * * \sa scale(const Vector<T,Size>&), prescale(const T &), loadScaling(const T &) */ MatrixP & scale( const T & coeff ) { MatrixP<T, Size> m; return *this *= m.loadScaling( coeff ); } /** Multiplies *this on the left by the scaling matrix * with given homogeneous scaling coefficient. * * \sa prescale(const Vector<T,Size>&), scale(const T &), loadScaling(const T &) */ MatrixP & prescale( const T & coeff ) { MatrixP<T, Size> m; return( *this = m.loadScaling( coeff ) * (*this) ); } /** Sets *this to be the scaling matrix with given vector of * scaling coefficients. * * \sa loadScaling(const T&), scale(const Vector<T, Size> &), prescale(const Vector<T, Size> &) */ MatrixP & loadScaling( const Vector<T, Size> & coeffs ) { Matrix<T, Size> m; return loadMatrix( m.loadScaling( coeffs ) ); } /** Multiplies *this on the right by the scaling matrix * with given vector of scaling coefficients. * * \sa scale(const T&), prescale(const Vector<T, Size> &), loadScaling(const Vector<T, Size> &) */ MatrixP & scale( const Vector<T, Size> & coeffs ) { MatrixP<T, Size> m; return *this *= m.loadScaling( coeffs ); } /** Multiplies *this on the left by the scaling matrix * with given vector of scaling coefficients. * * \sa prescale( const T&), scale(const Vector<T, Size> &), loadScaling(const Vector<T, Size> &) */ MatrixP & prescale( const Vector<T, Size> & coeffs ) { MatrixP<T, Size> m; return( *this = m.loadScaling( coeffs ) * (*this) ); } /** Sets *this to be the rotation matrix of given angle in radians. * See Matrix::loadRotation2(). The template parameter Size must equal 2. * * \sa rotate2(), prerotate2() */ MatrixP & loadRotation2( const T & angle ) { Matrix<T, Size> m; return loadMatrix( m.loadRotation2( angle ) ); } /** Multiplies *this on the right by the rotation matrix of given angle * in radians. * See Matrix::loadRotation2(). The template parameter Size must equal 2. * * \sa prerotate2(), loadRotation2() */ MatrixP & rotate2( const T & angle ) { MatrixP<T, Size> m; return *this *= m.loadRotation2( angle ); } /** Multiplies *this on the left by the rotation matrix of given angle * in radians. * See Matrix::loadRotation2(). The template parameter Size must equal 2. * * \sa rotate2(), loadRotation2() */ MatrixP & prerotate2( const T & angle ) { MatrixP<T, Size> m; return( *this = m.loadRotation2( angle ) * (*this) ); } /** Sets *this to be the rotation matrix of given angle in radians * around given axis vector. See Matrix::loadRotation3(). The * template parameter Size must equal 3. * * \sa rotate3(), prerotate3() */ MatrixP & loadRotation3( const T & angle, const Vector<T, Size> & axis ) { Matrix<T, Size> m; return loadMatrix( m.loadRotation3( angle, axis ) ); } /** Multiplies *this on the right by the rotation matrix of given angle * in radians around given axis vector. See Matrix::loadRotation3(). The * template parameter Size must equal 3. * * \sa prerotate3(), loadRotation3() */ MatrixP & rotate3( const T & angle, const Vector<T, Size> & axis ) { MatrixP<T, Size> m; return *this *= m.loadRotation3( angle, axis ); } /** Multiplies *this on the left by the rotation matrix of given angle * in radians around given axis vector. See Matrix::loadRotation3(). The * template parameter Size must equal 3. * * \sa rotate3(), loadRotation3() */ MatrixP & prerotate3( const T & angle, const Vector<T, Size> & axis ) { MatrixP<T, Size> m; return( *this = m.loadRotation3( angle, axis ) * (*this) ); } }; template< typename T, int Size > void MatrixP<T, Size>::getLinearComponent( Matrix<T, Size> * res ) const { if( Size > 3 ) for( int i = 0; i < Size; i++ ) for( int j = 0; j < Size; j++ ) (*res)( j, i ) = m_mat( j, i ); else { (*res)(0, 0) = m_mat(0, 0); if( Size >= 2 ) { (*res)(1, 0) = m_mat(1, 0); (*res)(0, 1) = m_mat(0, 1); (*res)(1, 1) = m_mat(1, 1); } if( Size == 3 ) { (*res)(2, 0) = m_mat(2, 0); (*res)(2, 1) = m_mat(2, 1); (*res)(0, 2) = m_mat(0, 2); (*res)(1, 2) = m_mat(1, 2); (*res)(2, 2) = m_mat(2, 2); } } } template< typename T, int Size > void MatrixP<T, Size>::setLinearComponent( const Matrix<T, Size> & matrix ) { if( Size > 3 ) for( int i = 0; i < Size; i++ ) for( int j = 0; j < Size; j++ ) m_mat( j, i ) = matrix( j, i ); else { m_mat(0, 0) = matrix(0, 0); if( Size >= 2 ) { m_mat(1, 0) = matrix(1, 0); m_mat(0, 1) = matrix(0, 1); m_mat(1, 1) = matrix(1, 1); } if( Size == 3 ) { m_mat(2, 0) = matrix(2, 0); m_mat(2, 1) = matrix(2, 1); m_mat(0, 2) = matrix(0, 2); m_mat(1, 2) = matrix(1, 2); m_mat(2, 2) = matrix(2, 2); } } } template< typename T, int Size > void MatrixP<T, Size>::resetLastRow() { for( int i = 0; i < Size; i++ ) m_mat( Size, i ) = static_cast<T>(0); m_mat( Size, Size ) = static_cast<T>(1); } template< typename T, int Size > void MatrixP<T, Size>::resetTranslationVector() { for( int i = 0; i < Size; i++ ) m_mat( i, Size ) = static_cast<T>(0); } template< typename T, int Size > void MatrixP<T, Size>::setTranslationVector( const Vector<T, Size> & v ) { for( int i = 0; i < Size; i++ ) m_mat( i, Size ) = v(i); } template< typename T, int Size > void MatrixP<T, Size>::getTranslationVector( Vector<T, Size> * res ) const { for( int i = 0; i < Size; i++ ) (*res)(i) = m_mat( i, Size ); } template< typename T, int Size > MatrixP<T, Size> & MatrixP<T, Size>::loadMatrix( const Matrix<T, Size> & matrix ) { setLinearComponent(matrix); resetTranslationVector(); resetLastRow(); return *this; } template< typename T, int Size > void MatrixP<T, Size>::multiply( const Vector<T, Size> & vector, Vector<T, Size> * res ) const { if( Size > 3 ) for( int i = 0; i < Size; i++ ) { (*res)[i] = static_cast<T>(0); for( int j = 0; j < Size; j++ ) (*res)[i] += m_mat(i, j) * vector(j); (*res)[i] += m_mat( i, Size ); } else { if( Size == 1 ) (*res)(0) = m_mat(0, 0) * vector(0) + m_mat(0, 1); else if( Size == 2 ) { (*res)(0) = m_mat(0, 0) * vector(0) + m_mat(0, 1) * vector(1) + m_mat(0, 2); (*res)(1) = m_mat(1, 0) * vector(0) + m_mat(1, 1) * vector(1) + m_mat(1, 2); } else // Size == 3 { (*res)(0) = m_mat(0, 0) * vector(0) + m_mat(0, 1) * vector(1) + m_mat(0, 2) * vector(2) + m_mat(0, 3); (*res)(1) = m_mat(1, 0) * vector(0) + m_mat(1, 1) * vector(1) + m_mat(1, 2) * vector(2) + m_mat(1, 3); (*res)(2) = m_mat(2, 0) * vector(0) + m_mat(2, 1) * vector(1) + m_mat(2, 2) * vector(2) + m_mat(2, 3); } } } template< typename T, int Size > void MatrixP<T, Size>::linearMultiply( const Vector<T, Size> & vector, Vector<T, Size> * res ) const { if( Size > 3 ) for( int i = 0; i < Size; i++ ) { (*res)[i] = static_cast<T>(0); for( int j = 0; j < Size; j++ ) (*res)[i] += m_mat(i, j) * vector(j); } else { if( Size == 1 ) (*res)(0) = m_mat(0, 0) * vector(0); else if( Size == 2 ) { (*res)(0) = m_mat(0, 0) * vector(0) + m_mat(0, 1) * vector(1); (*res)(1) = m_mat(1, 0) * vector(0) + m_mat(1, 1) * vector(1); } else // Size == 3 { (*res)(0) = m_mat(0, 0) * vector(0) + m_mat(0, 1) * vector(1) + m_mat(0, 2) * vector(2); (*res)(1) = m_mat(1, 0) * vector(0) + m_mat(1, 1) * vector(1) + m_mat(1, 2) * vector(2); (*res)(2) = m_mat(2, 0) * vector(0) + m_mat(2, 1) * vector(1) + m_mat(2, 2) * vector(2); } } } template< typename T, int Size > MatrixP<T, Size> & MatrixP<T, Size>::loadTranslation( const Vector<T, Size> & v ) { resetLastRow(); if( Size > 3 ) { for( int i = 0; i < Size; i++ ) { m_mat( i, i ) = static_cast<T>(1); m_mat( i, Size ) = v(i); for( int j = 0; j < i; j++ ) { m_mat( j, i ) = static_cast<T>(0); m_mat( i, j ) = static_cast<T>(0); } } } else { if( Size == 1 ) { m_mat( 0, 0 ) = static_cast<T>(1); m_mat( 0, 1 ) = v(0); } else if( Size == 2 ) { m_mat( 0, 0 ) = static_cast<T>(1); m_mat( 1, 1 ) = static_cast<T>(1); m_mat( 1, 0 ) = static_cast<T>(0); m_mat( 0, 1 ) = static_cast<T>(0); m_mat( 0, 2 ) = v(0); m_mat( 1, 2 ) = v(1); } else // Size == 3 { m_mat( 0, 0 ) = static_cast<T>(1); m_mat( 1, 1 ) = static_cast<T>(1); m_mat( 2, 2 ) = static_cast<T>(1); m_mat( 1, 0 ) = static_cast<T>(0); m_mat( 2, 0 ) = static_cast<T>(0); m_mat( 0, 1 ) = static_cast<T>(0); m_mat( 2, 1 ) = static_cast<T>(0); m_mat( 0, 2 ) = static_cast<T>(0); m_mat( 1, 2 ) = static_cast<T>(0); m_mat( 0, 3 ) = v(0); m_mat( 1, 3 ) = v(1); m_mat( 2, 3 ) = v(2); } } return *this; } template< typename T, int Size > MatrixP<T, Size> & MatrixP<T, Size>::translate( const Vector<T, Size> & v ) { if( Size > 3 ) { MatrixP<T, Size> m; return *this *= m.loadTranslation(v); } else { if( Size == 1 ) m_mat( 0, 1 ) += m_mat( 0, 0 ) * v(0); else if( Size == 2 ) { m_mat( 0, 2 ) += m_mat( 0, 0 ) * v(0) + m_mat( 0, 1 ) * v(1); m_mat( 1, 2 ) += m_mat( 1, 0 ) * v(0) + m_mat( 1, 1 ) * v(1); } else // Size == 3 { m_mat( 0, 3 ) += m_mat( 0, 0 ) * v(0) + m_mat( 0, 1 ) * v(1) + m_mat( 0, 2 ) * v(2); m_mat( 1, 3 ) += m_mat( 1, 0 ) * v(0) + m_mat( 1, 1 ) * v(1) + m_mat( 1, 2 ) * v(2); m_mat( 2, 3 ) += m_mat( 2, 0 ) * v(0) + m_mat( 2, 1 ) * v(1) + m_mat( 2, 2 ) * v(2); } } return *this; } template< typename T, int Size > MatrixP<T, Size> & MatrixP<T, Size>::pretranslate( const Vector<T, Size> & v ) { if( Size > 3 ) { MatrixP<T, Size> m; return( *this = m.loadTranslation(v) * (*this) ); } else { if( Size == 1 ) m_mat( 0, 1 ) += v(0); else if( Size == 2 ) { m_mat( 0, 2 ) += v(0); m_mat( 1, 2 ) += v(1); } else // Size == 3 { m_mat( 0, 3 ) += v(0); m_mat( 1, 3 ) += v(1); m_mat( 2, 3 ) += v(2); } } return *this; } EIGEN_MAKE_FIXEDSIZE_TYPEDEFS(MatrixP) } // namespace Eigen #endif // EIGEN_MATRIXP_H ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/eigen/ludecomposition.h����������������������������������������������0000644�0001750�0001750�00000012416�12116077757�021153� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// This file is part of Eigen, a lightweight C++ template library // for linear algebra. Eigen itself is part of the KDE project. // // Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr> // // Eigen is free software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the Free Software // Foundation; either version 2 or (at your option) any later version. // // Eigen is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more // details. // // You should have received a copy of the GNU General Public License along // with Eigen; if not, write to the Free Software Foundation, Inc., 51 // Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. // // As a special exception, if other files instantiate templates or use macros // or inline functions from this file, or you compile this file and link it // with other works to produce a work based on this file, this file does not // by itself cause the resulting work to be covered by the GNU General Public // License. This exception does not invalidate any other reasons why a work // based on this file might be covered by the GNU General Public License. /** \file ludecomposition.h * \brief LU decompositions and related computations */ #ifndef EIGEN_LUDECOMPOSITION_H #define EIGEN_LUDECOMPOSITION_H #include "ludecompositionbase.h" namespace Eigen { template<typename T, typename MatrixType, typename VectorType, typename LUDecompositionType> class LinearSolverBase; template<typename T, int Size> class Matrix; template<typename T, int Size> class Vector; /** \ingroup fixedsize * * \ingroup ludecomp * * \brief LU decomposition of a fixed-size matrix * * The template parameter T is the type of the entries of the matrix to be * decomposed. * It can be any type representing either real or complex numbers. * The template parameter Size is the size of the matrix (both height and * width, as Eigen only allows square matrices). * The following typedefs are provided to cover the usual cases: * @code typedef LUDecomposition<double, 2> LUDecomposition2d; typedef LUDecomposition<double, 3> LUDecomposition3d; typedef LUDecomposition<double, 4> LUDecomposition4d; typedef LUDecomposition<float, 2> LUDecomposition2f; typedef LUDecomposition<float, 3> LUDecomposition3f; typedef LUDecomposition<float, 4> LUDecomposition4f; typedef LUDecomposition<std::complex<double>, 2> LUDecomposition2cd; typedef LUDecomposition<std::complex<double>, 3> LUDecomposition3cd; typedef LUDecomposition<std::complex<double>, 4> LUDecomposition4cd; typedef LUDecomposition<std::complex<float>, 2> LUDecomposition2cf; typedef LUDecomposition<std::complex<float>, 3> LUDecomposition3cf; typedef LUDecomposition<std::complex<float>, 4> LUDecomposition4cf; * @endcode */ template<typename T, int Size> class LUDecomposition : public LUDecompositionBase< T, Matrix<T, Size>, Vector<T, Size>, Vector<int, Size> > { friend class LinearSolverBase< T, Matrix<T, Size>, Vector<T, Size>, LUDecomposition<T, Size> >; public: /** Performs the LU Decomposition of mat. Use this constructor. */ LUDecomposition( const Matrix<T, Size> & mat ) { this->perform( mat ); } protected: /** Default constructor. Does nothing. \internal */ LUDecomposition() {} }; template<typename T> class MatrixX; template<typename T> class VectorX; /** \ingroup dynamicsize * * \ingroup ludecomp * * \brief LU decomposition of a dynamic-size matrix * * The template parameter T is the type of the entries of the matrix to be * decomposed. * It can be any type representing either real or complex numbers. * The following typedefs are provided to cover the usual cases: * @code typedef LUDecompositionX<double> LUDecompositionXd; typedef LUDecompositionX<float> LUDecompositionXf; typedef LUDecompositionX< std::complex<double> > LUDecompositionXcd; typedef LUDecompositionX< std::complex<float> > LUDecompositionXcf; * @endcode */ template<typename T> class LUDecompositionX : public LUDecompositionBase< T, MatrixX<T>, VectorX<T>, VectorX<int> > { friend class LinearSolverBase< T, MatrixX<T>, VectorX<T>, LUDecompositionX<T> >; public: /** Performs the LU Decomposition of mat. Use this constructor. */ LUDecompositionX( const MatrixX<T> & mat ) { this->perform( mat ); } protected: /** Default constructor. Does nothing. \internal */ LUDecompositionX() {} }; EIGEN_MAKE_FIXEDSIZE_TYPEDEFS(LUDecomposition) EIGEN_MAKE_DYNAMICSIZE_TYPEDEFS(LUDecompositionX) } // namespace Eigen #endif // EIGEN_LUDECOMPOSITION_H ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/eigen/vectorbase.h���������������������������������������������������0000644�0001750�0001750�00000060100�12116077757�020064� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// This file is part of Eigen, a lightweight C++ template library // for linear algebra. Eigen itself is part of the KDE project. // // Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr> // // Eigen is free software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the Free Software // Foundation; either version 2 or (at your option) any later version. // // Eigen is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more // details. // // You should have received a copy of the GNU General Public License along // with Eigen; if not, write to the Free Software Foundation, Inc., 51 // Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. // // As a special exception, if other files instantiate templates or use macros // or inline functions from this file, or you compile this file and link it // with other works to produce a work based on this file, this file does not // by itself cause the resulting work to be covered by the GNU General Public // License. This exception does not invalidate any other reasons why a work // based on this file might be covered by the GNU General Public License. /** \file vectorbase.h * \brief Internal file */ #ifndef EIGEN_VECTORBASE_H #define EIGEN_VECTORBASE_H #include "util.h" namespace Eigen { /** \ingroup internalbases * * \ingroup vectors * * \brief internal base class * * This class template is only internally used in Eigen. * It provides the base that the Vector and VectorX * class templates inherit. * * Note that one template parameter is Derived: this is a * C++ trick knows as Curiously Recursive Template Pattern. * Here, it allows us to implement in VectorBase the code * of both Vector and VectorX, which are very different * (Vector stores the size of the vector as template argument, * while VectorX stores it as member data, thus storing the * array itself on the heap). */ template<typename T, typename Derived> class VectorBase { public: typedef T ScalType; private: /** \internal * Helper method, computes *this + other and stores the result in *res. * Doesn't attempt to resize *res. Doesn't check that the sizes match. */ void addition_helper ( const Derived & other, Derived * res ) const; /** \internal * Helper method, computes *this - other and stores the result in *res. * Doesn't attempt to resize *res. Doesn't check that the sizes match. */ void substraction_helper ( const Derived & other, Derived * res ) const; /** \internal * Helper method, computes *this * factor and stores the result in *res. * Doesn't attempt to resize *res. Doesn't check that the sizes match. */ void multiplication_helper ( const T & factor, Derived * res ) const; /** \internal * Helper method, computes *this / factor and stores the result in res. * Doesn't attempt to resize res. Doesn't check that the sizes match. */ void division_helper ( const T & factor, Derived * res ) const { multiplication_helper( static_cast<const T>(1) / factor, res ); } /** \internal * Helper method, computes the cross product of *this and factor * and stores the result in res_array (an array, not a vector). * Doesn't check the sizes (must be 3). */ void crossproduct_helper ( const Derived & other, T * res_array ) const { res_array[0] = (*this)[1] * other[2] - (*this)[2] * other[1]; res_array[1] = (*this)[2] * other[0] - (*this)[0] * other[2]; res_array[2] = (*this)[0] * other[1] - (*this)[1] * other[0]; } public: /** * @returns true if the vector has dynamic size (i.e. is an * object of class VectorX), false if the vector has fixed size * (i.e. is an object of class Vector). * * \sa size(), resize() */ bool hasDynamicSize() const { return static_cast<const Derived*>(this)->_hasDynamicSize(); } /** * Returns the size (dimension) of the vector. * * \sa hasDynamicSize(), resize() */ int size() const { return static_cast<const Derived*>(this)->_size(); } /** * Tries to resize the vector. That is only possible if the vector * has dynamic size, i.e. is an object of class VectorX. Otherwise, * nothing is done. * * The vector coords are not kept, they * are left with undefined values after resizing. * * \sa size(), hasDynamicSize() */ void resize( int newsize ) { static_cast<Derived*>(this)->_resize(newsize); } /** * Returns the array of the vector, as constant. * * \sa array(), operator()(int) const, operator[](int) const */ const T * array() const { return static_cast<const Derived*>(this)->m_array; } /** * @returns the array of the vector, as non-constant. * * \sa array() const, operator()(int), operator[](int) */ T * array() { return static_cast<Derived*>(this)->m_array; } /** * @returns a constant reference to the i-th coord of the vector. * * Same as operator[]. * * \sa operator()(int), operator[](int) const */ const T & operator () ( int i ) const { assert( i >= 0 && i < size() ); return array() [i]; } /** * @returns a non-constant reference to the i-th coord of the vector. * * Same as operator[]. * * \sa operator()(int) const, operator[](int) */ T & operator () ( int i ) { assert( i >= 0 && i < size() ); return array() [i]; } /** * @returns a constant reference to the i-th coord of the vector. * * Same as operator(). * * \sa operator[](int), operator()(int) const */ const T & operator [] ( int i ) const { assert( i >= 0 && i < size() ); return array() [i]; } /** * @returns a non-constant reference to the i-th coord of the vector. * * Same as operator(). * * \sa operator[](int) const, operator()(int) */ T & operator [] ( int i ) { assert( i >= 0 && i < size() ); return array() [i]; } /** * Returns the dot product of *this by other. * * *this and other must have the same size (the compiler will check that * for fixed-size vectors, but not for dynamic-size vectors). * * If T is std::complex, the dot product is hermitian, i.e. * the coords of *this get complex-conjugated in the formula. * * \sa norm(), norm2() */ T dot( const Derived & other ) const; /** * Returns the cross product of *this by other. * *this and other must have size exactly 3. * * \return_by_value \perf_use cross(const Derived &, Derived *) const * * \sa cross(const Derived &, Derived *) const */ Derived cross( const Derived & other ) const { assert( other.size() == 3 && size() == 3 ); Derived res(3); crossproduct_helper( other, res.array() ); return res; } /** * Sets *res to be the cross product of *this by other. * *this and other must have size exactly 3. * * In fixed-size, *res must also have size 3. In dynamic-size, * *res gets resized to size 3 if necessary. * * \sa cross(const Derived &) const */ void cross( const Derived & other, Derived * res ) const { assert( other.size() == 3 && size() == 3 ); res->resize(3); crossproduct_helper( other, res->array() ); } /** * Returns the squared norm of *this, that is, the dot product * of *this with itself. * * \sa norm(), dot() */ T norm2() const { return dot( *static_cast<const Derived*>(this) ); } /** * Returns the norm of *this, obtained as the square root of norm2(). * * \sa norm2(), dot(), normalize() */ T norm() const { return sqrt( norm2() ); } /** * Normalizes *this, that is, divides *this by norm(). * * \sa norm(), normalized() */ Derived & normalize() { (*this) /= norm(); return *static_cast<Derived *>(this); } /** * Returns a normalized copy of *this. In other words, * returns (*this) / norm(). * * \return_by_value * * \sa normalize() */ Derived normalized() { Derived ret( *static_cast<Derived *>(this) ); return(ret.normalize()); } /** * Loads into *this a unit vector that is orthogonal to \a other. * * The size of \a other must be at least 2. * *this gets resized to have the same size, if it has dynamic size. * * If the size is exactly 2, then other points toward the left, \ie * other.x() = -y() and other.y() = x(). For dimensions at least 3, it * is of course impossible to speak of "pointing toward the left". * * @returns a reference to *this. * * \sa ortho(), MatrixBase::loadOrthoBasis() */ Derived & loadOrtho( const Derived & other ); /** * Constructs a unit vector that is orthogonal to *this, * and stores it into *res. * * *res and *this must have the same size, and that size must * be at least 2. * * @returns a reference to *res. * * \deprecated use loadOrtho() or ortho() instead. * * \sa loadOrtho(), ortho(), MatrixBase::loadOrthoBasis() */ Derived & makeOrthoVector( Derived * res ) const { return res->loadOrtho( *static_cast<const Derived*>(this) ); } /** * Returns a unit vector that is orthogonal to *this. * * \return_by_value \perf_use loadOrtho() instead. * * \sa loadOrtho(), makeOrthoVectorMatrixBase::loadOrthoBasis() */ Derived ortho() const { Derived res( size() ); return res.loadOrtho( *static_cast<const Derived*>(this) ); } /** * Sets all coords of *this to zero. * * \sa loadRandom() */ Derived & loadZero(); /** * Sets all coords to random values between -1.0 and 1.0. For complex * numbers, both the real and imaginary parts can range from -1.0 to 1.0. * The resulting vector can be zero (though that's not going to * happen often!) * * \sa loadRandomUnit(), loadZero() */ Derived & loadRandom(); /** * Loads into *this a random unit vector. * * \sa loadRandom(), normalize() */ Derived & loadRandomUnit() { T x; do x = loadRandom().norm(); while( x == static_cast<T>(0) ); (*this) /= x; return *static_cast<Derived *>(this); } /** * Reads the coords of *this from an array. The number of entries * read from the array is equal to size(). * * \sa operator=() */ void readArray( const T * src ); /** * Copies other into *this. * * *this gets resized if it didn't already have the same size as other. * * \sa readArray() */ Derived & operator = ( const Derived & other ) { if( hasDynamicSize() ) if( &other == static_cast<Derived*>(this) ) return *static_cast<Derived*>(this); resize( other.size() ); readArray( other.array() ); return *static_cast<Derived*>(this); } /** * Stores *this + other into *this (coordinate-wise addition). * * *this and other must have the same size. * * \sa operator+() */ Derived & operator += ( const Derived & other ) { assert( other.size() == this->size() ); addition_helper( other, static_cast<Derived*>(this) ); return *static_cast<Derived*>(this); } /** * Stores *this - other into *this (coordinate-wise substraction). * * *this and other must have the same size. * * \sa operator-(const Derived &) const */ Derived & operator -= ( const Derived & other ) { assert( other.size() == this->size() ); substraction_helper( other, static_cast<Derived*>(this) ); return *static_cast<Derived*>(this); } /** * Stores *this * factor into *this (multiplication of each coord). * * \sa operator*(const T&) const */ Derived & operator *= ( const T & factor ) { multiplication_helper( factor, static_cast<Derived*>(this) ); return *static_cast<Derived*>(this); } /** * Stores *this / factor into *this (division of each coord). * * \sa operator*=(const T&), operator/(const T&) const */ Derived & operator /= ( const T & factor ) { division_helper( factor, static_cast<Derived*>(this) ); return *static_cast<Derived*>(this); } /** * Returns *this + other (coordinate-wise addition). * The vectors *this and other must have * the same size. * * \return_by_value * * \sa operator+=() */ Derived operator + ( const Derived & other ) const { assert( other.size() == size() ); Derived res( size() ); addition_helper( other, &res ); return res; } /** * Returns *this - other (coordinate-wise substraction). * The vectors *this and other must have * the same size. * * \return_by_value * * \sa operator-=(const Derived &), operator-(void) const */ Derived operator - ( const Derived & other ) const { assert( other.size() == size() ); Derived res( size() ); substraction_helper( other, &res ); return res; } /** * Returns (-(*this)). * * \return_by_value * * \sa replaceWithOpposite(), operator-(const Derived &) const */ Derived operator - () const { Derived res( size() ); for( int i = 0; i < size(); i++ ) res[i] = -( (*this)[i] ); return res; } /** Replaces *this with (-(*this)). * * \sa operator-(void) const */ void replaceWithOpposite() { for( int i = 0; i < size(); i++ ) (*this)[i] = -( (*this)[i] ); } /** * Returns true if *this and other are approximately equal. * * The optional parameter precision allows to control the number * of significant digits of precision. For instance, setting precision * to 1e-5 results in a precision of 5 decimal digits. * * This test is for nonzero vectors. If either of the two vectors * being compared is zero, then it returns true if, and only if the other * one is also zero -- which is not what one typically wants. * * To compare a vector with the zero vector, i.e. to check whether a * vector is approximately zero, use isZero() instead. * * \sa operator==(), operator!=(), isZero() */ bool isApprox( const Derived & other, const T & precision = Util::epsilon<T>() ) const { return( std::abs( (*this - other).norm2() ) <= std::min( std::abs(norm2()), std::abs(other.norm2()) ) * Util::abs2(precision) ); } /** * Equivalent to isApprox() with the default precision. * * \note Despite the name, this operator does a fuzzy compare! * It is not equivalent to operator== on each entry. * * \sa isApprox(),operator!=(),isZero() */ bool operator==( const Derived & other ) const { return isApprox(other); } /** * Equivalent to !isApprox() with the default precision. * * \note Despite the name, this operator does a fuzzy compare! * It is not equivalent to operator!= on each entry. * * \sa isApprox(),operator==(),isZero() */ bool operator!=( const Derived & other ) const { return !isApprox(other); } /** * Returns true if all coeffs of *this are smaller (in absolute value) * than other*precision. In other words, returns true if all coeffs are * much smaller than \a other. For the meaning of \a precision, see isApprox(). * * \sa isNegligible( const Derived &, const T & ) const, isApprox(), isZero() */ bool isNegligible( const T & other, const T & precision = Util::epsilon<T>() ) const { bool ret = true; for( int i = 0; i < size(); i++ ) if( std::abs((*this)(i)) > std::abs(other*precision) ) ret = false; return ret; } /** * Checks whether the vector *this is much smaller than \a other. * * Equivalent to isNegligible( other.norm(), precision ). * * \sa isNegligible( const T &, const T & ) const */ bool isNegligible( const Derived & other, const T & precision = Util::epsilon<T>() ) const { return isNegligible( other.norm(), precision ); } /** Tests whether *this is approximately equal to the zero matrix. * * Equivalent to isNegligible(1). In other words, returns true if * all entries of *this are approximately zero, in the sense that * they have absolute value smaller than epsilon. * * \sa isNegligible( const T &, const T & ) const, isApprox() */ bool isZero( const T & precision = Util::epsilon<T>() ) const { return isNegligible( static_cast<T>(1), precision ); } /** * Returns *this * factor (multiplication of each coord). * * \return_by_value * * \sa operator*=(const T&) */ Derived operator * ( const T & factor ) const { Derived res( size() ); multiplication_helper( factor, &res ); return res; } /** * Returns *this / factor (division of each coord). * * \return_by_value * * \sa operator/=(const T&), operator*(const T&) const */ Derived operator / ( const T & factor ) const { Derived res( size() ); division_helper( factor, &res ); return res; } /** * Returns a reference to the first coord of *this. * * \sa x() const */ T & x() { return (*this)[0]; } /** * Returns a constant reference to the first coord of *this. * * \sa x() */ const T & x() const { return (*this)[0]; } /** * Returns a reference to the second coord of *this. * * The size of *this must be at least 2. * * \sa y() const */ T & y() { assert( size() >= 2 ); return (*this)[1]; } /** * Returns a constant reference to the second coord of *this. * * The size of *this must be at least 2. * * \sa y() */ const T & y() const { assert( size() >= 2 ); return (*this)[1]; } /** * Returns a reference to the third coord of *this. * * The size of *this must be at least 3. * * \sa z() const */ T & z() { assert( size() >= 3 ); return (*this)[2]; } /** * Returns a constant reference to the third coord of *this. * * The size of *this must be at least 3. * * \sa z() */ const T & z() const { assert( size() >= 3 ); return (*this)[2]; } /** * Returns a reference to the fourth coord of *this. * * The size of *this must be at least 4. * * \sa w() const */ T & w() { assert( size() >= 4 ); return (*this)[3]; } /** * Returns a constant reference to the fourth coord of *this. * * The size of *this must be at least 4. * * \sa w() */ const T & w() const { assert( size() >= 4 ); return (*this)[3]; } }; template<typename T, typename Derived> void VectorBase<T, Derived>::readArray( const T * src ) { for( int i = 0; i < size(); i++ ) (*this)[i] = src[i]; } template<typename T, typename Derived> Derived & VectorBase<T, Derived>::loadZero() { for( int i = 0; i < size(); i++ ) (*this)[i] = static_cast<T>(0); return *static_cast<Derived *>(this); } template<typename T, typename Derived> Derived & VectorBase<T, Derived>::loadRandom() { for( int i = 0; i < size(); i++ ) Util::pickRandom( (*this)[i] ); return *static_cast<Derived *>(this); } template<typename T, typename Derived> void VectorBase<T, Derived>::addition_helper ( const Derived & other, Derived * res ) const { for( int i = 0; i < res->size(); i++ ) (*res)[i] = (*this)[i] + other[i]; } template<typename T, typename Derived> void VectorBase<T, Derived>::substraction_helper ( const Derived & other, Derived * res ) const { for( int i = 0; i < res->size(); i++ ) (*res)[i] = (*this)[i] - other[i]; } template<typename T, typename Derived> void VectorBase<T, Derived>::multiplication_helper ( const T & factor, Derived * res ) const { for( int i = 0; i < res->size(); i++ ) (*res)[i] = (*this)[i] * factor; } template<typename T, typename Derived> T VectorBase<T, Derived>::dot( const Derived & other ) const { assert( size() == other.size() ); T ret = Util::conj((*this)[0]) * other[0]; for( int i = 1; i < size(); i++ ) ret += Util::conj((*this)[i]) * other[i]; return ret; } template<typename T, typename Derived> Derived & VectorBase<T, Derived>::loadOrtho( const Derived & other ) { assert( other.size() >= 2 ); resize( other.size() ); if( size() == 2 ) { x() = - Util::conj( other.y() ); y() = Util::conj( other.x() ); normalize(); } else { /* Let us compute the crossed product of *this with a vector that is not too close to being colinear to *this. */ /* unless the x and y coords are both close to zero, we can * simply take ( -y, x, 0 ) and normalize it. */ if( ! Util::isNegligible( other.x(), other.z() ) || ! Util::isNegligible( other.y(), other.z() ) ) { T nm = sqrt( Util::abs2( other.x() ) + Util::abs2( other.y() ) ); x() = - Util::conj(other.y()) / nm; y() = Util::conj(other.x()) / nm; z() = static_cast<T>(0); } /* if both x and y are close to zero, then the vector is close * to the z-axis, so it's far from colinear to the x-axis for instance. * So we take the crossed product with (1,0,0) and normalize it. */ else { T nm = sqrt( Util::abs2( other.y() ) + Util::abs2( other.z() ) ); x() = static_cast<T>(0); y() = - Util::conj(other.z()) / nm; z() = Util::conj(other.y()) / nm; } for( int i = 3; i < size(); i++ ) (*this)(i) = static_cast<T>(0); } return *static_cast<Derived*>(this); } /** * Returns factor * v (multiplication of each coord of v by factor). */ template<typename T, typename Derived> Derived operator * ( const T & factor, const VectorBase<T, Derived> & v ) { return v * factor; } /** * Dot product * * If T is std::complex, the dot product is hermitian, i.e. * the coords of \a v1 get complex-conjugated in the formula. */ template<typename T, typename Derived> T dot ( const VectorBase<T, Derived> & v1, const Derived & v2 ) { return v1.dot(v2); } /** * Cross product. * * Of course, \a v1 and \a v2 must have size exactly 3. */ template<typename T, typename Derived> Derived cross ( const VectorBase<T, Derived> & v1, const Derived & v2 ) { return v1.cross(v2); } /** * Allows to print a vector by simply doing * @code cout << myvector << endl; * @endcode */ template<typename T, typename Derived> std::ostream & operator << ( std::ostream & s, const VectorBase<T, Derived> & v ) { s << "(" << v(0); for( int i = 1; i < v.size(); i++ ) s << ", " << v( i ); s << ")"; return s; } } // namespace Eigen #endif // EIGEN_VECTORBASE_H ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/eigen/regressioninternal.h�������������������������������������������0000644�0001750�0001750�00000013004�12116077757�021645� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// This file is part of Eigen, a lightweight C++ template library // for linear algebra. Eigen itself is part of the KDE project. // // Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr> // // Eigen is free software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the Free Software // Foundation; either version 2 or (at your option) any later version. // // Eigen is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more // details. // // You should have received a copy of the GNU General Public License along // with Eigen; if not, write to the Free Software Foundation, Inc., 51 // Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. // // As a special exception, if other files instantiate templates or use macros // or inline functions from this file, or you compile this file and link it // with other works to produce a work based on this file, this file does not // by itself cause the resulting work to be covered by the GNU General Public // License. This exception does not invalidate any other reasons why a work // based on this file might be covered by the GNU General Public License. /** \file regressioninternal.h * \brief Internal file */ #ifndef EIGEN_REGRESSIONINTERNAL_H #define EIGEN_REGRESSIONINTERNAL_H #include "util.h" namespace Eigen { /** \internal * * \ingroup internalbases * * Internal function for linearRegression() and linearRegressionX(). * * See the documentation of linearRegression() for details. */ template< typename T, typename VectorType, typename MatrixType > void linearRegression_internal( int numPoints, const VectorType * points, VectorType * retCoefficients, int funcOfOthers ) { assert( numPoints >= 1 ); int i, size = points[0].size(); assert( funcOfOthers >= 0 && funcOfOthers < size ); assert( size == retCoefficients->size() ); MatrixType matrix( size ); matrix.loadZero(); VectorType vector( size ); vector.loadZero(); for( i = 0; i < numPoints; i++) { assert( size == points[i].size() ); VectorType cur_vec( size ); T coord_funcOfOthers = points[i]( funcOfOthers ); for( int j = 0; j < funcOfOthers; j++) cur_vec(j) = points[i](j); for( int j = funcOfOthers; j < size - 1; j++ ) cur_vec(j) = points[i]( j + 1 ); cur_vec( size - 1 ) = static_cast<T>(1); for( int row = 0; row < size; row++ ) { T cur_vec_row = cur_vec(row); vector(row) += Util::conj( cur_vec_row ) * coord_funcOfOthers; matrix( row, row ) += Util::conj( cur_vec_row ) * cur_vec_row; for( int col = 0; col < row; col++ ) { T product = Util::conj( cur_vec_row ) * cur_vec(col); matrix( row, col ) += product; matrix( col, row ) += Util::conj( product ); } } } matrix.computeSomeAntecedent( vector, retCoefficients ); } /** \internal * * \ingroup internalbases * * Base function for computeFittingHyperplane() and * computeFittingHyperplaneX(). * * See the documentation of computeFittingHyperplane() and * linearRegression() for details. */ template< typename T, typename VectorType, typename BigVecType, typename MatrixType > void computeFittingHyperplane_internal( int numPoints, const VectorType * points, BigVecType * retCoefficients ) { assert( numPoints >= 1 ); int i, size = points[0].size(); assert( ( size + 1 ) == retCoefficients->size() ); // let's compute roughly, for each coord, how much it varies // across points. Since a rough estimate is enough, a linear algorithm // fixing a base point will do. VectorType amplitude( size ); amplitude.loadZero(); for( i = 1; i < numPoints; i++ ) { VectorType diff( points[i] - points[0] ); for( int j = 0; j < size; j++ ) { if( std::abs(diff(j)) > std::abs(amplitude(j)) ) amplitude(j) = diff(j); } } // now let's find out which coord varies the least. Again, this is // approximative. All that matters is that we don't pick a coordinate // that varies orders of magnitude more than another one. T min_amplitude = amplitude(0); int index_min_amplitude = 0; for( i = 1; i < size; i++ ) { if( std::abs(amplitude(i)) < std::abs(min_amplitude) ) { min_amplitude = amplitude(i); index_min_amplitude = i; } } // let's now perform a linear regression with respect to that // not-too-much-varying coord VectorType affineCoefficients( size ); linearRegression_internal< T, VectorType, MatrixType > ( numPoints, points, & affineCoefficients, index_min_amplitude ); // let's now contruct retCoefficients for( i = 0; i < index_min_amplitude; i++ ) (*retCoefficients)(i) = affineCoefficients(i); (*retCoefficients)(index_min_amplitude) = static_cast<T>(-1); for( i = index_min_amplitude + 1; i < size + 1; i++ ) (*retCoefficients)(i) = affineCoefficients( i - 1 ); } } // namespace Eigen #endif // EIGEN_REGRESSIONINTERNAL_H ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/eigen/regression.h���������������������������������������������������0000644�0001750�0001750�00000017205�12116077757�020117� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// This file is part of Eigen, a lightweight C++ template library // for linear algebra. Eigen itself is part of the KDE project. // // Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr> // // Eigen is free software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the Free Software // Foundation; either version 2 or (at your option) any later version. // // Eigen is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more // details. // // You should have received a copy of the GNU General Public License along // with Eigen; if not, write to the Free Software Foundation, Inc., 51 // Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. // // As a special exception, if other files instantiate templates or use macros // or inline functions from this file, or you compile this file and link it // with other works to produce a work based on this file, this file does not // by itself cause the resulting work to be covered by the GNU General Public // License. This exception does not invalidate any other reasons why a work // based on this file might be covered by the GNU General Public License. /** \file regression.h * \brief Linear regression analysis */ #ifndef EIGEN_REGRESSION_H #define EIGEN_REGRESSION_H #include "matrix.h" #include "regressioninternal.h" namespace Eigen { /** \ingroup regression * * Performs a multiple linear regression on a set of points, as explained * here: * * http://en.wikipedia.org/wiki/Linear_regression#Multiple_linear_regression * * In other words, for a set of points, this function tries to express * one of the coords as a linear (affine) function of the other coords. * * This is best explained by an example. This function works in full * generality, for points in a space of arbitrary dimension, and also over * the complex numbers, but for this example we will work in dimension 3 * over the real numbers (doubles). * * So let us work with the following set of 5 points given by their * \f$(x,y,z)\f$ coordinates: * @code Vector3d points[5]; points[0] = Vector3d( 3.02, 6.89, -4.32 ); points[1] = Vector3d( 2.01, 5.39, -3.79 ); points[2] = Vector3d( 2.41, 6.01, -4.01 ); points[3] = Vector3d( 2.09, 5.55, -3.86 ); points[4] = Vector3d( 2.58, 6.32, -4.10 ); * @endcode * Suppose that we want to express the second coordinate (\f$y\f$) as a linear * expression in \f$x\f$ and \f$z\f$, that is, * \f[ y=ax+bz+c \f] * for some constants \f$a,b,c\f$. Thus, we want to find the best possible * constants \f$a,b,c\f$ so that the plane of equation \f$y=ax+bz+c\f$ fits * best the five above points. To do that, call this function as follows: * @code Vector3d coeffs; // will store the coefficients a, b, c linearRegression< double, 3 >( 5, points, & coeffs, 1 // the coord to express as a function of // the other ones. 0 means x, 1 means y, 2 means z. ); * @endcode * Now the vector \a coeffs is approximately * \f$( 0.495 , -1.927 , -2.906 )\f$. * Thus, we get \f$a=0.495, b = -1.927, c = -2.906\f$. Let us check for * instance how near points[0] is from the plane of equation \f$y=ax+bz+c\f$. * Looking at the coords of points[0], we see that: * \f[ax+bz+c = 0.495 * 3.02 + (-1.927) * (-4.32) + (-2.906) = 6.91.\f] * On the other hand, we have \f$y=6.89\f$. We see that the values * \f$6.91\f$ and \f$6.89\f$ * are near, so points[0] is very near the plane of equation \f$y=ax+bz+c\f$. * * Let's now describe precisely the parameters: * @param numPoints the number of points to read from the array * @param points the array of points on which to perform the linear regression * @param retCoefficients pointer to the vector in which to store the result. This vector must be of the same type and size as the data points. The meaning of its coords is as follows. For brevity, let \f$n=Size\f$, \f$r_i=retCoefficients[i]\f$, and \f$f=funcOfOthers\f$. Denote by \f$x_0,\ldots,x_{n-1}\f$ the n coordinates in the n-dimensional space. Then the result equation is: \f[ x_f = r_0 x_0 + \cdots + r_{f-1}x_{f-1} + r_{f+1}x_{f+1} + \cdots + r_{n-1}x_{n-1} + r_n. \f] * @param funcOfOthers Determines which coord to express as a function of the others. Coords are numbered starting from 0, so that a value of 0 means \f$x\f$, 1 means \f$y\f$, 2 means \f$z\f$, ... * * \sa computeFittingHyperplane() */ template< typename T, int Size > inline void linearRegression( int numPoints, const Vector<T,Size> * points, Vector<T,Size> * retCoefficients, int funcOfOthers ) { linearRegression_internal< T, Vector<T,Size>, Matrix<T,Size> > ( numPoints, points, retCoefficients, funcOfOthers ); } /** \ingroup regression * * This function is quite similar to linearRegression(), so we refer to the * documentation of this function and only list here the differences. * * The main difference from linearRegression() is that this function doesn't * take a \a funcOfOthers argument. Instead, it finds a general equation * of the form * \f[ r_0 x_0 + \cdots + r_{n-1}x_{n-1} + r_n = 0, \f] * where \f$n=Size\f$, \f$r_i=retCoefficients[i]\f$, and we denote by * \f$x_0,\ldots,x_{n-1}\f$ the n coordinates in the n-dimensional space. * * Thus, the vector \a retCoefficients has size \f$n+1\f$, which is another * difference from linearRegression(). * * \sa linearRegression() */ template< typename T, int Size > inline void computeFittingHyperplane( int numPoints, const Vector<T,Size> * points, Vector<T,Size+1> * retCoefficients ) { computeFittingHyperplane_internal< T, Vector<T,Size>, Vector<T,Size+1>, Matrix<T,Size> > ( numPoints, points, retCoefficients ); } /** \ingroup regression * * This function is the dynamic-size counterpart to linearRegression() * and, aside from working with VectorX instead of Vector, is exactly the * same thing. * * \sa computeFittingHyperplaneX() */ template< typename T > inline void linearRegressionX( int numPoints, const VectorX<T> * points, VectorX<T> * retCoefficients, int funcOfOthers ) { linearRegression_internal< T, VectorX<T>, MatrixX<T> > ( numPoints, points, retCoefficients, funcOfOthers ); } /** \ingroup regression * * This function is the dynamic-size counterpart to computeFittingHyperplane() * and, aside from working with VectorX instead of Vector, is exactly the * same thing. * * \sa linearRegressionX() */ template< typename T > inline void computeFittingHyperplaneX( int numPoints, const VectorX<T> * points, VectorX<T> * retCoefficients ) { computeFittingHyperplane_internal< T, VectorX<T>, VectorX<T>, MatrixX<T> > ( numPoints, points, retCoefficients ); } } // namespace Eigen #endif // EIGEN_REGRESSION_H �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/eigen/matrix.h�������������������������������������������������������0000644�0001750�0001750�00000033045�12116077757�017243� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// This file is part of Eigen, a lightweight C++ template library // for linear algebra. Eigen itself is part of the KDE project. // // Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr> // // Eigen is free software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the Free Software // Foundation; either version 2 or (at your option) any later version. // // Eigen is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more // details. // // You should have received a copy of the GNU General Public License along // with Eigen; if not, write to the Free Software Foundation, Inc., 51 // Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. // // As a special exception, if other files instantiate templates or use macros // or inline functions from this file, or you compile this file and link it // with other works to produce a work based on this file, this file does not // by itself cause the resulting work to be covered by the GNU General Public // License. This exception does not invalidate any other reasons why a work // based on this file might be covered by the GNU General Public License. /** \file matrix.h * \brief Matrix and MatrixX class templates */ #ifndef EIGEN_MATRIX_H #define EIGEN_MATRIX_H #include "ludecomposition.h" #include "matrixbase.h" #include "vector.h" namespace Eigen { /** \ingroup fixedsize * * \ingroup matrices * * \brief Fixed-size matrix * * A class for fixed-size square matrices. Thus, a Matrix<T,Size> is the * same as a T[Size*Size] array, except that it has convenient * operators and methods for basic matrix math. This class is intended to * be zero-overhead, as opposed to the slower dynamic-size class MatrixX. * * The template parameter T is the type of the entries of the matrix. * It can be any type representing either real or complex numbers. * The template parameter Size is the size of the matrix (both height and * width, as Eigen only allows square matrices). * The following typedefs are provided to cover the usual cases: * @code typedef Matrix<double, 2> Matrix2d; typedef Matrix<double, 3> Matrix3d; typedef Matrix<double, 4> Matrix4d; typedef Matrix<float, 2> Matrix2f; typedef Matrix<float, 3> Matrix3f; typedef Matrix<float, 4> Matrix4f; typedef Matrix<std::complex<double>, 2> Matrix2cd; typedef Matrix<std::complex<double>, 3> Matrix3cd; typedef Matrix<std::complex<double>, 4> Matrix4cd; typedef Matrix<std::complex<float>, 2> Matrix2cf; typedef Matrix<std::complex<float>, 3> Matrix3cf; typedef Matrix<std::complex<float>, 4> Matrix4cf; * @endcode * * If you prefer dynamic-size matrices (they are slower), see the MatrixX * class template, which provides exactly the same functionality and API * in dynamic-size version. * * The Matrix class template provides all the usual operators and methods * to manipulate square matrices, and can do some more advanced stuff using * involving a LU decomposition, like invert a matrix. * * Here are some examples of usage of Matrix: * @code using namespace Eigen; using namespace std; // we'll use cout for outputting matrices Matrix3d mat1, mat2; // constructs two new uninitialized 3x3 matrices double array[] = { 2.4, 3.1, -0.7, -1.1, 2.9, 4.3, 6.7, -3.7, 2.7 }; mat1.readArray(array); // now mat1 is the following matrix: // ( 2.4 -1.1 6.7 ) // ( 3.1 2.9 -3.7 ) // ( -0.7 4.3 2.7 ) mat2.readRows(array); // now mat2 is the following matrix: // ( 2.4 3.1 -0.7 ) // ( -1.1 2.9 4.3 ) // ( 6.7 -3.7 2.7 ) mat1 *= mat2; // computes the matrix product mat1 * mat2, stores it in mat1 mat1 = mat2 + mat1 * mat2; // there are also non-assignment operators mat1 = 0.9 * mat1 + mat2 / 2.6; // you can also multiply/divide by numbers Matrix<double,5> mat3; // construct a new uninitialized 5x5 matrix mat3.loadIdentity(); // loads the identity matrix of size 5 into mat3 mat1(2,3) = -1.4; // Stores the value -1.4 at row 2, column 3 of mat1. cout << mat1 << endl; double vec_coords[3] = {1.1, -2.5, 0.8}; Vector3d vec( vec_coords ); // construct a vector of size 3. vec = mat1 * vec; // multiply vec by mat1 cout << "determinant of mat1: " << mat1.determinant() << endl; // as mat1 has size 3, the determinant is computed by brute force. // For larger matrices, this would use a LU decomposition. * @endcode */ template <typename T, int Size> class Matrix: public MatrixBase< T, Matrix<T, Size>, Vector<T, Size>, LUDecomposition<T, Size> > { friend class MatrixBase< T, Matrix<T, Size>, Vector<T, Size>, LUDecomposition<T, Size> >; typedef class MatrixBase< T, Matrix<T, Size>, Vector<T, Size>, LUDecomposition<T, Size> > Base; private: /** * Returns false. A Matrix<T,Size,Size> doesn't have dynamic size. */ static bool _hasDynamicSize() { return false; } /** * Returns the size of the matrix. */ int _size() const { return Size; } /** * Does nothing. A Matrix<T,Size> can't be resized. * * if size != size(), * a debug message is generated. */ void _resize( int size ) const { assert( size == this->size() ); } public: /** * Constructs an uninitialized matrix. Really does nothing. */ Matrix() {} /** * Copy constructor. */ Matrix( const Matrix & other ) { this->readArray( other.array() ); } /** * Constructs a matrix from an array. The matrix entries are read * in column-dominant order in the array. */ Matrix( const T * array ) { this->readArray( array ); } /** * Constructs an uninitialized matrix. Really does nothing. * This constructor is provided only for compatibility reasons. * Of course the size must match the template parameter. */ explicit Matrix( int unused_size ) { assert( unused_size == Size ); } /** \internal \latexonly */ Matrix & operator = ( const Matrix & other ) { return Base::operator = ( other ); } /** \internal \latexonly */ Matrix & operator += ( const Matrix & other ) { return Base::operator += ( other ); } /** \internal \latexonly */ Matrix & operator -= ( const Matrix & other ) { return Base::operator -= ( other ); } /** \internal \latexonly */ Matrix& operator *=( const T & factor ) { return Base::operator *= ( factor ); } /** \internal \latexonly */ Matrix& operator /=( const T & factor ) { return Base::operator /= ( factor ); } /** \internal \latexonly */ Matrix& operator *=( const Matrix & other ) { return Base::operator *= ( other ); } protected: /** This array stores the size*size entries of the matrix. * Currently, we are storing them in column-major order. */ T m_array[ Size * Size ]; }; /** \ingroup dynamicsize * * \ingroup matrices * * \brief Dynamic-size matrix * * A class for dynamic-size square matrices. * * The template parameter, T, is the type of the entries of the matrix. * It can be any type representing either real or complex numbers. * The following typedefs are provided to cover the usual cases: * @code typedef MatrixX<double> MatrixXd; typedef MatrixX<float> MatrixXf; typedef MatrixX< std::complex<double> > MatrixXcd; typedef MatrixX< std::complex<float> > MatrixXcf; * @endcode * * If you prefer fixed-size matrices (they are faster), see the Matrix * class template, which provides exactly the same functionality and API * in fixed-size version. * * The MatrixX class template provides all the usual operators and methods * to manipulate square matrices, and can do some more advanced stuff using * involving a LU decomposition, like invert a matrix. * * Here are some examples of usage of MatrixX: * @code using namespace Eigen; using namespace std; // we'll use cout for outputting matrices MatrixXd mat1(3), mat2(3); // constructs two new uninitialized 3x3 matrices double array[] = { 2.4, 3.1, -0.7, -1.1, 2.9, 4.3, 6.7, -3.7, 2.7 }; mat1.readArray(array); // now mat1 is the following matrix: // ( 2.4 -1.1 6.7 ) // ( 3.1 2.9 -3.7 ) // ( -0.7 4.3 2.7 ) mat2.readRows(array); // now mat2 is the following matrix: // ( 2.4 3.1 -0.7 ) // ( -1.1 2.9 4.3 ) // ( 6.7 -3.7 2.7 ) mat1 *= mat2; // computes the matrix product mat1 * mat2, stores it in mat1 mat1 = mat2 + mat1 * mat2; // there are also non-assignment operators mat1 = 0.9 * mat1 + mat2 / 2.6; // you can also multiply/divide by numbers MatrixXd mat3(5); // construct a new uninitialized 5x5 matrix mat3.loadIdentity(); // loads the identity matrix of size 5 into mat3 mat1(2,3) = -1.4; // Stores the value -1.4 at row 2, column 3 of mat1. cout << mat1 << endl; double vec_coords[] = {1.1, -2.5, 0.8}; VectorXd vec( 3, vec_coords ); // construct a vector of size 3. vec = mat1 * vec; // multiply vec by mat1 cout << "determinant of mat1: " << mat1.determinant() << endl; // as mat1 has size 3, the determinant is computed by brute force. // For larger matrices, this would use a LU decomposition. * @endcode */ template<typename T> class MatrixX : public MatrixBase< T, MatrixX<T>, VectorX<T>, LUDecompositionX<T> > { friend class MatrixBase< T, MatrixX<T>, VectorX<T>, LUDecompositionX<T> >; typedef class MatrixBase< T, MatrixX<T>, VectorX<T>, LUDecompositionX<T> > Base; public: /** * Constructs an uninitialized square matrix with given size (dimension). * The default value for size is 1. */ explicit MatrixX(int size = 1) { init(size); } /** * Copy constructor. */ MatrixX( const MatrixX & other ) { init( other.size() ); this->readArray( other.array() ); } /** * Constructs a matrix with given size from an array. * The matrix entries must be stored in column-dominant order in the array. * @param array the array. It must have dimension * at least size*size. * @param size the size of the matrix (number of rows, or equivalently * number of columns). */ MatrixX( int size, const T * array ) { init( size ); this->readArray( array ); } /** * Destructor, frees the memory allocated for the matrix's array */ ~MatrixX() { delete[] m_array; } /** \internal \latexonly */ MatrixX & operator = ( const MatrixX & other ) { return Base::operator = ( other ); } /** \internal \latexonly */ MatrixX & operator += ( const MatrixX & other ) { return Base::operator += ( other ); } /** \internal \latexonly */ MatrixX & operator -= ( const MatrixX & other ) { return Base::operator -= ( other ); } /** \internal \latexonly */ MatrixX& operator *=( const T & factor ) { return Base::operator *= ( factor ); } /** \internal \latexonly */ MatrixX& operator /=( const T & factor ) { return Base::operator /= ( factor ); } /** \internal \latexonly */ MatrixX& operator *=( const MatrixX & other ) { return Base::operator *= ( other ); } protected: /** The size (number of rows, or equivalently number of columns) * of the matrix. */ int m_size; /** This array stores the size*size entries of the matrix. * Currently, we are storing them in column-major order. */ T *m_array; /** * Small helper function for the constructors */ void init( int size ) { m_size = size; m_array = new T[m_size * m_size]; } private: /** \internal \latexonly * @returns the matrix size (number of rows) */ int _size() const { return m_size; } /** \internal \latexonly * Returns true. A MatrixX has dynamic size. */ static bool _hasDynamicSize() { return true; } /** * Resizes the matrix. The matrix entries are not kept, they're left * with undefined values after resizing. * * @param size the new matrix size */ void _resize( int size ); }; template<typename T> void MatrixX<T>::_resize( int size ) { if( size == m_size ) return; if( size > m_size ) { delete[] m_array; m_array = new T[size * size]; } m_size = size; } EIGEN_MAKE_FIXEDSIZE_TYPEDEFS(Matrix) EIGEN_MAKE_DYNAMICSIZE_TYPEDEFS(MatrixX) } #endif // EIGEN_MATRIX_H �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/eigen/ludecompositionbase.h������������������������������������������0000644�0001750�0001750�00000045675�12116077757�022023� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// This file is part of Eigen, a lightweight C++ template library // for linear algebra. Eigen itself is part of the KDE project. // // Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr> // // Eigen is free software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the Free Software // Foundation; either version 2 or (at your option) any later version. // // Eigen is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more // details. // // You should have received a copy of the GNU General Public License along // with Eigen; if not, write to the Free Software Foundation, Inc., 51 // Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. // // As a special exception, if other files instantiate templates or use macros // or inline functions from this file, or you compile this file and link it // with other works to produce a work based on this file, this file does not // by itself cause the resulting work to be covered by the GNU General Public // License. This exception does not invalidate any other reasons why a work // based on this file might be covered by the GNU General Public License. /** \file ludecompositionbase.h * \brief Internal file */ #ifndef EIGEN_LUDECOMPOSITIONBASE_H #define EIGEN_LUDECOMPOSITIONBASE_H #include "util.h" namespace Eigen { /** \ingroup internalbases * * \ingroup ludecomp * * \brief internal base class * * This class template is only internally used in Eigen. */ template<typename T, typename MatrixType, typename VectorType, typename IntVecType> class LUDecompositionBase { public: ~LUDecompositionBase() {} /** * This method returns the determinant of the square matrix A of which * *this is the LU decomposition. It has only linear complexity * (that is, O(n) where n is the dimension of the square matrix) * as the LU decomposition has already been computed. * * Warning: a determinant can be very big or small, so for matrices * of large dimension (like a 50-by-50 matrix) there can be a risk of * overflow/underflow. */ T determinant() const; /** * Returns the dimension (size) of square matrix A * of which *this is the LU decomposition -- just in case you forgot it! */ int dim() const { return m_dim; } /** * Returns the dimension of the kernel of the square matrix A * of which *this is the LU decomposition. It is very fast because the * computation has already been done during the LU decomposition. */ int dimKer() const { return m_dimKer; } /** * Returns the rank of the square matrix A of which *this is * the LU decomposition. It is very fast because the * computation has already been done during the LU decomposition. */ int rank() const { return( m_dim - m_dimKer ); } /** * Returns true if the square matrix A, of which *this is * the LU decomposition, is invertible. It returns false if it is singular. * It is very fast because the computation has already been done during * the LU decomposition. */ bool isInvertible() const { return( m_dimKer == 0 ); } /** * This method computes a basis of the kernel of the matrix A of which * *this is the LU decomposition. * * The \a result argument is a pointer to the matrix in which the result * will be stored. After calling this method, the \a dimKer() first * columns of \a result form a basis of the kernel of A. If A * is invertible, then dimKer()==0 and this method does nothing. * * @returns true is the matrix is non-invertible, hence has a nonzero * kernel; false if the matrix is invertible. */ bool computeBasisKer( MatrixType * result) const; /** * Computes an antecedent of \a v by the matrix \a A of which *this is a * LU decomposition. In other words, this method computes a vector \a u * such that \a A \a u = \a v. * If such an antecedent \a u doesn't exist, this method does nothing. * * @returns true if an antecedent exists, false if no antecedent exists. * * Notes: * * 1. The returned vector u is only one solution of the equation Au=v, * which can have more than one solution if A is non-invertible. To get * a basis of the whole (affine) space of solutions, use computeBasisKer(). * * \sa computeBasisKer() */ bool computeSomeAntecedent ( const VectorType & v, VectorType * result ) const; /** * Computes the inverse matrix of A, where A * is the matrix of which *this is the LU decomposition, and * stores it in *result. * * If A is non-invertible, this method does nothing. * * \returns true if A is invertible, false otherwise. * */ bool computeInverse( MatrixType * result ) const; /** * This methods returns the inverse matrix of A, where A * is the matrix of which *this is the LU decomposition. If A is * non-invertible, the returned value is undefined. * * This method calls computeInverse(), so the same remarks as for * computeInverse() apply here. * * \return_by_value * * \sa computeInverse() */ MatrixType inverse() const { MatrixType m( m_LU.size() ); computeInverse( &m ); return m; } /** * Returns the member m_LU, which stores the matrices L and U. * See member m_LU and the class's comment. */ MatrixType & LU() { return m_LU; } const MatrixType & LU() const { return m_LU; } /** * Returns the member m_P, which stores the permutation P. * See member m_P and the class's comment. */ IntVecType & P() { return m_P; } const IntVecType & P() const { return m_P; } /** * Returns the member m_Q, which stores the permutation Q. * See member m_Q and the class's comment. */ IntVecType & Q() { return m_Q; } const IntVecType & Q() const { return m_Q; } protected: /** * The helper method actually computing the LU decomposition. * Called by the constructor. * * For internal reasons it is public, but you should never call it. */ void perform ( const MatrixType & A ); /** * The dimension of the matrix A of which *this is the LU decomposition */ int m_dim; /** * The permutation matrices P and Q are stored in these permutations p, q. * They are understood as follows: the permutation p maps k to p[k]. * Same for q. So, in terms of matrices, P moves the k-th row to the * p[k]-th row, and Q moves the k-th column to the q[k]-th column. */ IntVecType m_P, m_Q; /** * This is equal to the determinant of the product matrix PQ, or * equivalently, to the signature of the permutation pq. * This is used by the determinant() method. */ int m_detPQ; /** * This matrix holds the data of the L and U matrices of the LU * decomposition, as follows. The part above the diagonal (including * the diagonal) is U. The part strictly below the diagonal is L. * As U is upper triangular, L is lower triangular, and L has its diagonal * entries all equal to 1, this holds all the data of the matrices L and U. * Also note that the Eigenvalues of U are stored in decreasing order of * absolute value. */ MatrixType m_LU; /** * The dimension of the kernel of the square matrix A * of which *this is the LU decomposition. */ int m_dimKer; /** * The Eigenvalue of U that has biggest absolute value. */ T m_biggestEigenValueU; }; template<typename T, typename MatrixType, typename VectorType, typename IntVecType> void LUDecompositionBase<T, MatrixType, VectorType, IntVecType>::perform ( const MatrixType & A ) { m_dim = A.size(); m_P.resize( m_dim ); m_Q.resize( m_dim ); //initially set m_LU to be a copy of A m_LU = A; // initially set P and Q to be the identity permutation for( int k = 0; k < dim(); k++ ) { P()[k] = k; Q()[k] = k; } // if dim() == 1, then we're already almost done! if( dim() == 1 ) { m_detPQ = 1; m_biggestEigenValueU = LU().array()[0]; m_dimKer = ( std::abs(m_biggestEigenValueU) == static_cast<T>(0) ); // there's nothing to compare m_biggestEigenValueU to, so we have // to content ourselves with that test. abs() is here because // in some implementations, std::complex has no operator==. return; } // temporary arrays used to store the lists of transpositions whose products // will be P and Q respectively IntVecType transpositionsP( dim() ); IntVecType transpositionsQ( dim() ); // the number of transpositions stored in transpositionsP // and transpositionsQ. This will be used to compute m_detPQ. int number_of_transpos = 0; // Let's now perform the LU decomposition with complete pivoting // following Algorithm 3.4.2 in the book Matrix Computations (3rd ed.) // by Golub & van Loan for( int k = 0; k <= dim() - 2; k++) { // Determine row_max_abs and col_max_abs greater or equal to k // maximizing abs(LU()(row_max_abs, col_max_abs)) int row_max_abs, col_max_abs, row, col; LU().findBiggestEntry( &row_max_abs, &col_max_abs, k ); T biggestEntry = LU()( row_max_abs, col_max_abs ); // swap the k-th and the row_max_abs-th rows T *row_k_ptr = LU().array() + k; T *row_max_abs_ptr = LU().array() + row_max_abs; for( col = 0; col < dim(); col++ ) { T tmp = *row_k_ptr; *row_k_ptr = *row_max_abs_ptr; *row_max_abs_ptr = tmp; row_k_ptr += dim(); row_max_abs_ptr += dim(); } // swap the k-th and the col_max_abs-th columns T *col_k_ptr = LU().array() + k * dim(); T *col_max_abs_ptr = LU().array() + col_max_abs * dim(); for( row = 0; row < dim(); row++ ) { T tmp = *col_k_ptr; *col_k_ptr = *col_max_abs_ptr; *col_max_abs_ptr = tmp; col_k_ptr++; col_max_abs_ptr++; } // store the transpositions transpositionsP[k] = row_max_abs; transpositionsQ[k] = col_max_abs; number_of_transpos += ( k != row_max_abs ) + ( k != col_max_abs ); // test if the diagonal entry LU()(k, k) is nonzero T lu_k_k = LU()(k, k); if( ! Util::isNegligible( lu_k_k, biggestEntry ) ) { // divide entries (k+1...n) in column k by lu_k_k T *entry_ptr = &(LU()( k + 1, k )); for( row = k + 1; row < dim(); row++ ) { *entry_ptr /= lu_k_k; entry_ptr++; } // for row and col greater or equal to k+1, perform // LU()(row,col) -= LU()(row,k) * LU()(k,col) entry_ptr = &(LU()( k + 1, k + 1 )); row_k_ptr = &(LU()( k, k + 1)); col_k_ptr = &(LU()( k + 1, k )); for( col = k + 1; col < dim(); col++ ) { for( row = k + 1; row < dim(); row++ ) { *entry_ptr -= (*row_k_ptr) * (*col_k_ptr); col_k_ptr++; entry_ptr++; } col_k_ptr -= dim() - k - 1; row_k_ptr += dim(); entry_ptr += k + 1; } } } // end of algorithm 3.4.2 in the book by Golub & van Loan. // it now remains to compute the permutations P, Q, the determinant // m_detPQ, the biggest Eigenvalue m_biggestEigenValueU of U, // and the dimension m_dimKer of the kernel of A. // let's first compute P and Q. They are the products of the transpositions // in transpositionsP and transpositionsQ, but not in the same order // (and order does matter here). for( int k = 0; k <= dim() - 2; k++) { int tmp; tmp = Q()[k]; Q()[k] = Q()[ transpositionsQ[k] ]; Q()[ transpositionsQ[k] ] = tmp; int i = dim() - 2 - k; tmp = P()[i]; P()[i] = P()[ transpositionsP[i] ]; P()[ transpositionsP[i] ] = tmp; } // let's now compute m_detPQ if( number_of_transpos % 2 ) // if number_of_transpos is odd m_detPQ = -1; else m_detPQ = 1; // let's now compute m_biggestEigenValueU // the diagonal entries in LU() are the Eigenvalues of U m_biggestEigenValueU = static_cast<T>(0); for( int k = 0; k <= dim() - 1; k++) if( std::abs( LU()( k, k ) ) > std::abs( m_biggestEigenValueU ) ) m_biggestEigenValueU = LU()( k, k ); // at last, let's compute the dimension m_dimKer of the kernel of A // it suffices to count how many Eigenvalues of U are zero // (as P, L and Q are invertible). m_dimKer = 0; for( int k = 0; k <= dim() - 1; k++) m_dimKer += Util::isNegligible( LU()( k, k ), m_biggestEigenValueU ); } template<typename T, typename MatrixType, typename VectorType, typename IntVecType> T LUDecompositionBase<T, MatrixType, VectorType, IntVecType>::determinant() const { if( ! isInvertible() ) return static_cast<T>(0); T ret = m_detPQ; for (int i = 0; i < dim() * dim(); i += (dim()+1) ) ret *= LU().array()[i]; return ret; } template<typename T, typename MatrixType, typename VectorType, typename IntVecType> bool LUDecompositionBase<T, MatrixType, VectorType, IntVecType>::computeBasisKer ( MatrixType * result) const { if( isInvertible() ) return false; result->resize( dim() ); /* Let us use the following lemma: * * Lemma: If the matrix A has the LU decomposition PAQ = LU, * then Ker A = Q( Ker U ). * * Proof: trivial: just keep in mind that P, Q, L are invertible. */ /* Thus, all we need to do is to compute Ker U, and then apply Q. * * U is upper triangular, with Eigenvalues sorted in decreasing order of * absolute value. Thus, the diagonal of U ends with exactly * m_dimKer zero's. Let us use that to construct m_dimKer linearly * independent vectors in Ker U. */ VectorType tmpvector(dim()); for( int k = 0; k < m_dimKer; k++ ) { // let tmpvector end with 0,...,0,1,0,...,0 where the 1 occurs at // position k counting from the last one. for( int i = 0; i < m_dimKer; i++ ) { tmpvector[ dim() - 1 - i ] = static_cast<T>( i == k ); } /* now comes the part that's difficult to explain in a comment... * We've just set the m_dimKer last coords of tmpvector. * Now we want to compute the (dim()-m_dimKer) first coords. * As U has rank dim()-m_dimKer, these are uniquely determined. * We just have to solve the equation VX=Y where V is the square * matrix formed of the (dim()-m_dimKer) first rows and columns * of U, X is what we're looking for, and Y is minus the * (dim() - 1 - k)-th column of U. */ const T *colptr = LU().array() + (dim() - 1 - k) * dim(); int maxrow = dim() - m_dimKer - 1; for( int i = maxrow; i >= 0; i-- ) // i must be signed! { T *tmpvecptr = &(tmpvector[i]); *tmpvecptr = - colptr[i]; const T *rowptr = &( LU()( i, i ) ); const T *denomptr = rowptr; for( int j = i + 1; j <= maxrow; j++ ) { rowptr += dim(); *tmpvecptr -= tmpvector[j] * (*rowptr); } *tmpvecptr /= *denomptr; } //now tmpvector is really a vector in Ker U, so it only remains to //apply Q to it and store the result as the k-th column of *ret. for( int i = 0; i < dim(); i++) (*result)(Q()[i], k) = tmpvector[i]; } return true; } template<typename T, typename MatrixType, typename VectorType, typename IntVecType> bool LUDecompositionBase<T, MatrixType, VectorType, IntVecType>::computeSomeAntecedent ( const VectorType & v, VectorType * result ) const { /* The decomposition PAQ = LU can be rewritten as A = P^{-1} L U Q^{-1}. * So we proceed as follows: * Step 1: compute b = Pv. * Step 2: compute a such that La = b. Exists because L is invertible. * Step 3: compute b such that Ub = a. Check if such b really exists. * Step 4: return Qb; */ VectorType a(dim()); VectorType b(dim()); // Step 1 for( int i = 0; i < dim(); i++) b[ P()[i] ] = v[i]; // Step 2 for( int i = 0; i < dim(); i++) { a[i] = b[i]; const T *rowptr = &( LU()( i, 0 ) ); for( int j = 0; j < i; j++ ) { a[i] -= a[j] * (*rowptr); rowptr += dim(); } } // Step 3 for( int i = dim() - 1; i >= 0; i--) // i must be signed! { const T *rowptr = &( LU()( i, i ) ); const T *denomptr = rowptr; // if the current Eigenvalue of U is zero if( Util::isNegligible( *denomptr, m_biggestEigenValueU ) ) { // if the current vector coord is also zero if( Util::isNegligible( a[i], m_biggestEigenValueU ) ) { // we can choose whatever value for b[i], so let's take // a nonzero value, so that b will be a nonzero vector b[i] = static_cast<T>(1); } else { // the equation has no solution (try solving 0*x = 1) return false; } } else // the current Eigenvalue of U is nonzero { b[i] = a[i]; for( int j = i + 1; j <= dim() - 1; j++ ) { rowptr += dim(); b[i] -= b[j] * (*rowptr); } b[i] /= *denomptr; } } // Step 4 for( int i = 0; i < dim(); i++) (*result)[ Q()[i] ] = b[i]; return true; } template<typename T, typename MatrixType, typename VectorType, typename IntVecType> bool LUDecompositionBase<T, MatrixType, VectorType, IntVecType> ::computeInverse( MatrixType * result ) const { result->resize( dim() ); if( ! isInvertible() ) return false; VectorType basis_vector(dim()); VectorType antecedent(dim()); for( int i = 0; i < dim(); i++ ) basis_vector(i) = static_cast<T>(0); for( int col = 0; col < dim(); col++ ) { basis_vector(col) = static_cast<T>(1); computeSomeAntecedent( basis_vector, &antecedent ); result->setColumn( col, antecedent ); basis_vector(col) = static_cast<T>(0); } return true; } } // namespace Eigen #endif // EIGEN_LUDECOMPOSITIONBASE_H �������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/eigen/linearsolver.h�������������������������������������������������0000644�0001750�0001750�00000024566�12116077757�020454� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// This file is part of Eigen, a lightweight C++ template library // for linear algebra. Eigen itself is part of the KDE project. // // Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr> // // Eigen is free software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the Free Software // Foundation; either version 2 or (at your option) any later version. // // Eigen is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more // details. // // You should have received a copy of the GNU General Public License along // with Eigen; if not, write to the Free Software Foundation, Inc., 51 // Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. // // As a special exception, if other files instantiate templates or use macros // or inline functions from this file, or you compile this file and link it // with other works to produce a work based on this file, this file does not // by itself cause the resulting work to be covered by the GNU General Public // License. This exception does not invalidate any other reasons why a work // based on this file might be covered by the GNU General Public License. /** \file linearsolver.h * \brief Solving systems of linear equations */ #ifndef EIGEN_LINEARSOLVER_H #define EIGEN_LINEARSOLVER_H #include "matrix.h" #include "ludecomposition.h" #include "linearsolverbase.h" namespace Eigen { /** \ingroup fixedsize * * \ingroup solving * * \brief Solver for systems of linear equations (fixed-size) * * This class provides an easy way to solve systems of linear equations. * * The template parameter T is the type of the numbers over which the * equations are to be solved. * It can be any type representing either real or complex numbers. * The template parameter Size is the number of equations, or * equivalently the number of indeterminates, as Eigen only allows square * matrices. * The following typedefs are provided to cover the usual cases: * @code typedef LinearSolver<double, 2> LinearSolver2d; typedef LinearSolver<double, 3> LinearSolver3d; typedef LinearSolver<double, 4> LinearSolver4d; typedef LinearSolver<float, 2> LinearSolver2f; typedef LinearSolver<float, 3> LinearSolver3f; typedef LinearSolver<float, 4> LinearSolver4f; typedef LinearSolver<std::complex<double>, 2> LinearSolver2cd; typedef LinearSolver<std::complex<double>, 3> LinearSolver3cd; typedef LinearSolver<std::complex<double>, 4> LinearSolver4cd; typedef LinearSolver<std::complex<float>, 2> LinearSolver2cf; typedef LinearSolver<std::complex<float>, 3> LinearSolver3cf; typedef LinearSolver<std::complex<float>, 4> LinearSolver4cf; * @endcode * * For instance, suppose that you want to solve the system of equations: * @code 2x + 3y - z = 1 4x - y + 7z = -6 -x + 2y + 5z = 2 * @endcode * First, store the left hand side of this system in a matrix: * @code double lhs_rows[3][3] = { { 2, 3, -1 }, { 4, -1, 7 }, { -1, 2, 5 } }; Matrix3d lhs; lhs.readRows( &lhs_rows[0][0] ); * @endcode * Next, store the right hand side of this system in a vector: * @code double rhs_coords[3] = { 1, -6, 2 }; Vector3d rhs( rhs_coords ); * @endcode * Next, construct a LinearSolver: * @code LinearSolver3d solver( lhs, rhs ); * @endcode * Now, you can use the methods of LinearSolver to compute the solutions. * If all you need is to know whether there exist solutions and to compute * a solution if any exists, then just do: * @code if( solver.thereExistSolutions() ) { cout << "There are solutions! Here's one:" << endl; cout << solver.someSolution() << endl; } else cout << "There are no solutions." << endl; * @endcode * * If you want a complete analysis of the space of solutions, * you need to use the methods genericSolution() and dimSolutions(). * The following example shows how to use them: * @code if( solver.thereExistSolutions() ) { cout << "There are solutions! Here's one:" << endl; cout << solver.someSolution() << endl; if( solver.dimSolutions() == 0 ) cout << "And this is the only solution." << endl; else { cout << "The space of solutions is of dimension " << solver.dimSolutions() << endl; cout << "Here's another solution:" << endl; // let's construct a random parameter vector. This vector needs // to have size equal to dimSolutions(), but as this can't be // larger than 3, it's simpler to allocate an array of size 3. double param [3]; for( int i = 0; i < solver.dimSolutions(); i++ ) param[i] = -10.0 + 20.0 * rand() / RAND_MAX; cout << solver.genericSolution( param ) << endl; } } else cout << "There are no solutions." << endl; * @endcode * * NOTE: As Eigen only handles square matrices, the number of equations * must be equal to the number of variables. * If you need to solve systems with more variables than equations, you * can simply add trivial equations like 0x+0y+0z=0 to the system, in order * to have as many equations as you have variables. */ template<typename T, int Size> class LinearSolver : public LinearSolverBase< T, Matrix<T, Size>, Vector<T, Size>, LUDecomposition<T, Size> > { public: /** * Constructor recommended for convenient usage of this class: * directly sets both sides of the system of equations. */ LinearSolver( const Matrix<T, Size> & leftHandSide, const Vector<T, Size> & rightHandSide ) { init( leftHandSide, rightHandSide ); } }; /** \ingroup dynamicsize * * \ingroup solving * * \brief Solver for systems of linear equations (dynamic-size) * * This class provides an easy way to solve systems of linear equations. * * The template parameter T is the type of the numbers over which the * equations are to be solved. * It can be any type representing either real or complex numbers. * The following typedefs are provided to cover the usual cases: * @code typedef LinearSolverX<double> LinearSolverXd; typedef LinearSolverX<float> LinearSolverXf; typedef LinearSolverX< std::complex<double> > LinearSolverXcd; typedef LinearSolverX< std::complex<float> > LinearSolverXcf; * @endcode * * For instance, suppose that you want to solve the system of equations: * @code 2x + 3y - z = 1 4x - y + 7z = -6 -x + 2y + 5z = 2 * @endcode * First, store the left hand side of this system in a matrix: * @code double lhs_rows[3][3] = { { 2, 3, -1 }, { 4, -1, 7 }, { -1, 2, 5 } }; MatrixXd lhs( 3 ); lhs.readRows( &lhs_rows[0][0] ); * @endcode * Next, store the right hand side of this system in a vector: * @code double rhs_coords[3] = { 1, -6, 2 }; VectorXd rhs( 3, rhs_coords ); * @endcode * Next, construct a LinearSolverX: * @code LinearSolverXd solver( lhs, rhs ); * @endcode * Now, you can use the methods of LinearSolverX to compute the solutions. * If all you need is to know whether there exist solutions and to compute * a solution if any exists, then just do: * @code if( solver.thereExistSolutions() ) { cout << "There are solutions! Here's one:" << endl; cout << solver.someSolution() << endl; } else cout << "There are no solutions." << endl; * @endcode * * If you want a complete analysis of the space of solutions, * you need to use the methods genericSolution() and dimSolutions(). * The following example shows how to use them: * @code if( solver.thereExistSolutions() ) { cout << "There are solutions! Here's one:" << endl; cout << solver.someSolution() << endl; if( solver.dimSolutions() == 0 ) cout << "And this is the only solution." << endl; else { cout << "The space of solutions is of dimension " << solver.dimSolutions() << endl; cout << "Here's another solution:" << endl; // let's construct a random parameter vector. This vector needs // to have size equal to dimSolutions(), but as this can't be // larger than 3, it's simpler to allocate an array of size 3. double param [3]; for( int i = 0; i < solver.dimSolutions(); i++ ) param[i] = -10.0 + 20.0 * rand() / RAND_MAX; cout << solver.genericSolution( param ) << endl; } } else cout << "There are no solutions." << endl; * @endcode * * NOTE: As Eigen only handles square matrices, the number of equations * must be equal to the number of variables. * If you need to solve systems with more variables than equations, you * can simply add trivial equations like 0x+0y+0z=0 to the system, in order * to have as many equations as you have variables. */ template<typename T> class LinearSolverX : public LinearSolverBase< T, MatrixX<T>, VectorX<T>, LUDecompositionX<T> > { public: /** * Default constructor. */ LinearSolverX() { this->init(); } /** * Constructor recommended for convenient usage of this class: * directly sets both sides of the system of equations. */ LinearSolverX( const MatrixX<T> & leftHandSide, const VectorX<T> & rightHandSide ) { init( leftHandSide, rightHandSide); } }; EIGEN_MAKE_FIXEDSIZE_TYPEDEFS(LinearSolver) EIGEN_MAKE_DYNAMICSIZE_TYPEDEFS(LinearSolverX) } // namespace Eigen #endif // EIGEN_LINEARSOLVERX_H ������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Math/eigen/util.h���������������������������������������������������������0000644�0001750�0001750�00000013670�12116077757�016716� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// This file is part of Eigen, a lightweight C++ template library // for linear algebra. Eigen itself is part of the KDE project. // // Copyright (C) 2006-2007 Benoit Jacob <jacob@math.jussieu.fr> // // Eigen is free software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the Free Software // Foundation; either version 2 or (at your option) any later version. // // Eigen is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more // details. // // You should have received a copy of the GNU General Public License along // with Eigen; if not, write to the Free Software Foundation, Inc., 51 // Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. // // As a special exception, if other files instantiate templates or use macros // or inline functions from this file, or you compile this file and link it // with other works to produce a work based on this file, this file does not // by itself cause the resulting work to be covered by the GNU General Public // License. This exception does not invalidate any other reasons why a work // based on this file might be covered by the GNU General Public License. /** \file util.h * \brief Internal file */ #ifndef EIGEN_UTIL_H #define EIGEN_UTIL_H #include <cstdlib> #include <cmath> #include <complex> #include <iostream> #include <cassert> #ifdef __GNUC__ # if __GNUC__>=4 # define EIGEN_WITH_GCC_4_OR_LATER # endif #endif namespace Eigen { namespace Util { /** Stores in x a random float between -1.0 and 1.0 */ inline void pickRandom( float & x ) { x = 2.0f * rand() / RAND_MAX - 1.0f; } /** Stores in x a random double between -1.0 and 1.0 */ inline void pickRandom( double & x ) { x = 2.0 * rand() / RAND_MAX - 1.0; } /** Stores in the real and imaginary parts of x * random values between -1.0 and 1.0 */ template<typename T> void pickRandom( std::complex<T> & x ) { #ifdef EIGEN_WITH_GCC_4_OR_LATER pickRandom( x.real() ); pickRandom( x.imag() ); #else // workaround by David Faure for MacOS 10.3 and GCC 3.3, commit 630812 T r = x.real(); T i = x.imag(); pickRandom( r ); pickRandom( i ); x = std::complex<T>(r,i); #endif } template<typename T> inline T epsilon() { return static_cast<T>(0); } template<> inline float epsilon<float>() { return 1e-5f; } template<> inline double epsilon<double>() { return 1e-11; } template<> inline std::complex<float> epsilon<std::complex<float> >() { return static_cast<std::complex<float> >(1e-5f); } template<> inline std::complex<double> epsilon<std::complex<double> >() { return static_cast<std::complex<double> >(1e-11); } inline float abs2( const float& x ) { return x * x; } inline double abs2( const double& x ) { return x * x; } inline float abs2( const std::complex<float>& x ) { return norm(x); } inline double abs2( const std::complex<double>& x ) { return norm(x); } /** * overloaded function that returns the complex conjugate of a float x. * Of course, as floats are reals, this is just the trivial function * returning x. But that'll become useful to handle matrices of complex * numbers. */ inline float conj( const float& x ) { return x; } /** * overloaded function that returns the complex conjugate of a double x. * Of course, as doubles are reals, this is just the trivial function * returning x. But that'll become useful to handle matrices of complex * numbers. */ inline double conj( const double& x ) { return x; } /** * overloaded function that returns the complex conjugate of a complex x. */ template<typename T> std::complex<T> conj( const std::complex<T> & x ) { return std::conj(x); } /** * Short version: returns true if the absolute value of \a a is much smaller * than that of \a b, false otherwise. * * Long version: returns ( abs(a) <= abs(b) * epsilon(b) ). * * This function uses the epsilon overloaded function * to determine what's "small". */ template<typename T> bool isNegligible( const T& a, const T& b ) { return( std::abs(a) <= std::abs(b) * std::abs(epsilon<T>()) ); } /** * Returns true if a is very close to b, false otherwise. * * In other words: returns abs( a - b ) <= min( abs(a), abs(b) ) * epsilon(b). * * @param a,b can be real or complex numbers (std::complex). */ template<typename T> bool isApprox( const T& a, const T& b ) { return( std::abs( a - b ) <= std::min( std::abs(a), std::abs(b) ) * epsilon<T>() ); } #define EIGEN_MAKE_FIXEDSIZE_TYPEDEFS(Class) \ typedef Class<double, 2> Class##2d;\ typedef Class<double, 3> Class##3d;\ typedef Class<double, 4> Class##4d;\ typedef Class<float, 2> Class##2f;\ typedef Class<float, 3> Class##3f;\ typedef Class<float, 4> Class##4f;\ typedef Class<std::complex<double>, 2> Class##2cd;\ typedef Class<std::complex<double>, 3> Class##3cd;\ typedef Class<std::complex<double>, 4> Class##4cd;\ typedef Class<std::complex<float>, 2> Class##2cf;\ typedef Class<std::complex<float>, 3> Class##3cf;\ typedef Class<std::complex<float>, 4> Class##4cf; #define EIGEN_MAKE_DYNAMICSIZE_TYPEDEFS(Class) \ typedef Class<double> Class##d;\ typedef Class<float> Class##f;\ typedef Class< std::complex<double> > Class##cd;\ typedef Class< std::complex<float> > Class##cf; } // namespace Util } // namespace Eigen #endif // EIGEN_UTIL_H /** @defgroup vectors Vectors*/ /** @defgroup matrices Matrices*/ /** @defgroup fixedsize Fixed-size classes*/ /** @defgroup dynamicsize Dynamic-size classes*/ /** @defgroup solving Solving systems of equations*/ /** @defgroup regression Linear regression analysis*/ /** @defgroup ludecomp LU Decomposition*/ /** @defgroup projective Projective geometry*/ /** @defgroup internalbases Internal stuff*/ ������������������������������������������������������������������������rivet-1.8.3/include/Rivet/RivetAIDA.hh��������������������������������������������������������������0000644�0001750�0001750�00000003243�12116077757�015634� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_RIVETAIDA_HH #define RIVET_RIVETAIDA_HH /// @author Andy Buckley /// @date 2009-01-30 // Include files #include "Rivet/Rivet.hh" #include "Rivet/RivetAIDA.fhh" #include "LWH/AIAnalysisFactory.h" #include "LWH/AIHistogramFactory.h" #include "LWH/AIHistogram1D.h" #include "LWH/AIHistogram2D.h" #include "LWH/AIProfile1D.h" #include "LWH/AITreeFactory.h" #include "LWH/AIDataPointSetFactory.h" #include "LWH/AIDataPointSet.h" #include "LWH/AIDataPoint.h" #include "LWH/AIMeasurement.h" #include "LWH/AITree.h" #include "LWH/AIAxis.h" namespace Rivet { AIDA::IAnalysisFactory* createAnalysisFactory(); /// Function to get a map of all the bin edge vectors in a paper with the /// given @a papername. map<string, BinEdges> getBinEdges(string papername); map<string, BinEdges> getBinEdges(const map<string, vector<DPSXPoint> >& xpoints); map<string, vector<DPSXPoint> > getDPSXValsErrs(string papername); map<string, vector<DPSXYPoint> > getDPSXYValsErrs(string papername); /// Get the file system path to the AIDA reference file for this paper. string getDatafilePath(string papername); /// Return the integral over the histogram bins inline double integral(AIDA::IHistogram1D* histo) { double intg = 0.; for ( int i = 0; i < histo->axis().bins(); ++i ) { // Don't multiply with binWidth -- it's already included in binHeight intg += histo->binHeight(i); // * histo->axis().binWidth(i); } return intg; } using AIDA::IHistogram1D; using AIDA::IHistogram2D; using AIDA::IDataPointSet; using AIDA::IDataPoint; using AIDA::IMeasurement; using AIDA::ITree; using AIDA::IAxis; using AIDA::IProfile1D; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projection.hh�������������������������������������������������������������0000644�0001750�0001750�00000012466�12116077757�016247� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Projection_HH #define RIVET_Projection_HH #include "Rivet/Rivet.hh" #include "Rivet/Projection.fhh" #include "Rivet/ProjectionApplier.hh" #include "Rivet/ProjectionHandler.hh" #include "Rivet/Constraints.hh" #include "Rivet/ParticleName.hh" #include "Rivet/Event.fhh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Cmp.fhh" namespace Rivet { /// @brief Base class for all Rivet projections. /// /// Projection is the base class of all Projections to be used by /// Rivet. A Projection object can be assigned to an Event object and /// will then define a processed part of the information available in /// the Event, which then can be used by other Projection objects /// and/or Analysis objects. /// /// The main virtual functions to be overridden by concrete sub-classes /// are project(const Event &) and compare(const Projection &). class Projection : public ProjectionApplier { public: /// Event is a friend. friend class Event; /// The Cmp specialization for Projection is a friend. friend class Cmp<Projection>; public: /// @name Standard constructors and destructors. //@{ /// The default constructor. Projection(); /// Clone on the heap. virtual const Projection* clone() const = 0; /// The destructor. virtual ~Projection(); //@} public: /// Take the information available in the Event and make the /// calculations necessary to obtain the projection. Note that this /// function must never be called except inside the /// Event::applyProjection(Projection *) function. virtual void project(const Event& e) = 0; protected: /// This function is used to define a unique ordering between /// different Projection objects of the same class. If this is /// considered to be equivalent to the Projector object, \a p, in the /// argument the function should return 0. If this object should be /// ordered before \a p a negative value should be returned, /// otherwise a positive value should be returned. This function must /// never be called explicitly, but should only be called from the /// operator<(const Projection &). When implementing the function in /// concrete sub-classes, it is then guaranteed that the Projection /// object \a p in the argument is of the same class as the sub-class /// and can be safely dynamically casted to that class. /// /// When implementing this function in a sub-class, the immediate /// base class version of the function should be called first. If the /// base class function returns a non-zero value, that value should /// be returned immediately. Only if zero is returned should this /// function check the member variables of the sub-class to determine /// whether this should be ordered before or after \a p, or if it is /// equivalent with \a p. virtual int compare(const Projection& p) const = 0; public: /// Determine whether this object should be ordered before the object /// \a p given as argument. If \a p is of a different class than /// this, the before() function of the corresponding type_info /// objects is used. Otherwise, if the objects are of the same class, /// the virtual compare(const Projection &) will be returned. bool before(const Projection& p) const; /// Return the BeamConstraints for this projection, not including /// recursion. Derived classes should ensure that all contained projections /// are registered in the @a _projections set for the beam constraint /// chaining to work. virtual const std::set<PdgIdPair> beamPairs() const; /// Get the name of the projection. virtual std::string name() const { return _name; } /// Add a colliding beam pair. Projection& addPdgIdPair(PdgId beam1, PdgId beam2) { _beamPairs.insert(PdgIdPair(beam1, beam2)); return *this; } /// Get a Log object based on the getName() property of the calling projection object. Log& getLog() const { string logname = "Rivet.Projection." + name(); return Log::getLog(logname); } /// Used by derived classes to set their name. void setName(const std::string& name) { _name = name; } protected: /// Shortcut to make a named Cmp<Projection> comparison with the @c *this /// object automatically passed as one of the parent projections. Cmp<Projection> mkNamedPCmp(const Projection& otherparent, const std::string& pname) const; /// Shortcut to make a named Cmp<Projection> comparison with the @c *this /// object automatically passed as one of the parent projections. Cmp<Projection> mkPCmp(const Projection& otherparent, const std::string& pname) const; private: /// Name variable is used by the base class messages to identify /// which derived class is being handled. string _name; /// Beam-type constraint. set<PdgIdPair> _beamPairs; }; } /// Define "less" operator for Projection* containers in terms of the Projection::before virtual method. inline bool std::less<const Rivet::Projection *>::operator()(const Rivet::Projection* x, const Rivet::Projection* y) const { return x->before(*y); } // Definition of the comparison objects and functions #include "Rivet/Cmp.hh" #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Config/�������������������������������������������������������������������0000755�0001750�0001750�00000000000�12131473213�014766� 5����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Config/BuildOptions.hh.in�������������������������������������������������0000644�0001750�0001750�00000002061�12116077757�020346� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_CONFIG_BUILDOPTIONS_HH #define RIVET_CONFIG_BUILDOPTIONS_HH /* Define to 1 if you have the <dlfcn.h> header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the <inttypes.h> header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the <memory.h> header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the <stdint.h> header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the <stdlib.h> header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the <strings.h> header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the <string.h> header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the <sys/stat.h> header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the <sys/types.h> header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Config/RivetConfig.hh�����������������������������������������������������0000644�0001750�0001750�00000001204�12116616116�017527� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* include/Rivet/Config/RivetConfig.hh. Generated from RivetConfig.hh.in by configure. */ #ifndef RIVET_CONFIG_RIVETCONFIG_HH #define RIVET_CONFIG_RIVETCONFIG_HH /* Define to the address where bug reports for this package should be sent. */ #define RIVET_BUGREPORT "rivet@projects.hepforge.org" /* Define to the full name of this package. */ #define RIVET_NAME "Rivet" /* Define to the full name and version of this package. */ #define RIVET_STRING "Rivet 1.8.3" /* Define to the one symbol short name of this package. */ #define RIVET_TARNAME "Rivet" /* Define to the version of this package. */ #define RIVET_VERSION "1.8.3" #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Config/BuildOptions.hh����������������������������������������������������0000644�0001750�0001750�00000002272�12116416352�017731� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* include/Rivet/Config/BuildOptions.hh. Generated from BuildOptions.hh.in by configure. */ #ifndef RIVET_CONFIG_BUILDOPTIONS_HH #define RIVET_CONFIG_BUILDOPTIONS_HH /* Define to 1 if you have the <dlfcn.h> header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the <inttypes.h> header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the <memory.h> header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the <stdint.h> header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the <stdlib.h> header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the <strings.h> header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the <string.h> header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the <sys/stat.h> header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the <sys/types.h> header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the <unistd.h> header file. */ #define HAVE_UNISTD_H 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Config/DummyConfig.hh.in��������������������������������������������������0000644�0001750�0001750�00000003571�12123312127�020140� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* include/Rivet/Config/DummyConfig.hh.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the <dlfcn.h> header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the <inttypes.h> header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the <memory.h> header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the <stdint.h> header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the <stdlib.h> header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the <strings.h> header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the <string.h> header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the <sys/stat.h> header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the <sys/types.h> header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* "Rivet contact email address" */ #undef RIVET_BUGREPORT /* "Rivet name string" */ #undef RIVET_NAME /* "Rivet name and version string" */ #undef RIVET_STRING /* "Rivet short name string" */ #undef RIVET_TARNAME /* "Rivet version string" */ #undef RIVET_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION ���������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Config/RivetConfig.hh.in��������������������������������������������������0000644�0001750�0001750�00000000737�12116077757�020162� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_CONFIG_RIVETCONFIG_HH #define RIVET_CONFIG_RIVETCONFIG_HH /* Define to the address where bug reports for this package should be sent. */ #undef RIVET_BUGREPORT /* Define to the full name of this package. */ #undef RIVET_NAME /* Define to the full name and version of this package. */ #undef RIVET_STRING /* Define to the one symbol short name of this package. */ #undef RIVET_TARNAME /* Define to the version of this package. */ #undef RIVET_VERSION #endif ���������������������������������rivet-1.8.3/include/Rivet/ProjectionHandler.hh������������������������������������������������������0000644�0001750�0001750�00000015731�12116077757�017543� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_ProjectionHandler_HH #define RIVET_ProjectionHandler_HH #include "Rivet/Rivet.hh" #include "Rivet/RivetBoost.hh" #include "Rivet/Tools/Logging.fhh" #include "Rivet/Projection.fhh" namespace Rivet { /// Typedef for Projection (smart) pointer typedef shared_ptr<const Projection> ProjHandle; // Forward declaration. class ProjectionApplier; /// @brief The projection handler is a central repository for projections to be used /// in a Rivet analysis run. /// /// Without centralised projections, it can be hard to know which of an /// equivalent set of projections will be run on a particular event. In turn, /// this may mean that certain projections in the chain can go out of scope /// unexpectedly. There were originally also the issues that projections may /// need to be held as member pointers to an abstract base class, since /// post-construction setup is needed; that projections contained pointers to /// their own dependency chain, which could go out of scope; and that /// projection members could be modified after being applied to an event /// which, due to the caching model, would have unpredictable consequences. /// /// By centralising all the projections, these issues are eliminated, as well /// as allowing analysis classes to contain fewer data members (since /// projections are now better accessed by name than by storing a data member /// reference or pointer). /// /// The core of the ProjectionHandler design is that it is a singleton class, /// essentially a wrapper around a map of @c Projection*, indexed by a hash of /// the registering object and its local name for the registered projection. /// class ProjectionHandler { public: /// ProjectionApplier's destructor needs to trigger cleaning up the proj handler repo friend class ProjectionApplier; /// Typedef for a vector of Projection pointers. typedef set<ProjHandle> ProjHandles; /// @brief Typedef for the structure used to contain named projections for a /// particular containing Analysis or Projection. typedef map<const string, ProjHandle> NamedProjs; /// Enum to specify depth of projection search. enum ProjDepth { SHALLOW, DEEP }; private: /// Structure used to map a containing Analysis or Projection to its set of /// contained projections. typedef map<const ProjectionApplier*, NamedProjs> NamedProjsMap; /// Core data member, associating a given containing class (via a /// ProjectionApplier pointer) to its contained projections. NamedProjsMap _namedprojs; /// Cache of {@link Projection}s for reverse lookup, to speed up registering /// new projections as @c _namedprojs gets large. ProjHandles _projs; private: /// @name Construction. */ //@{ /// Private destructor means no inheritance from this class. ~ProjectionHandler(); /// The assignment operator is hidden. ProjectionHandler& operator=(const ProjectionHandler&); /// The copy constructor is hidden. ProjectionHandler(const ProjectionHandler&); /// The standard constructor. ProjectionHandler() { } /// @todo Remove in favour of the static singleton function static ProjectionHandler* _instance; //@} public: /// Singleton creation function static ProjectionHandler& getInstance(); // { /// @todo This is a better form of singleton, which cleans up properly... but it can't /// yet be used as it highlights a projection memory problem. Please fix so we can use this! // static ProjectionHandler _instance; // return _instance; // } public: /// @name Projection registration //@{ /// Attach and retrieve a projection as a reference. const Projection& registerProjection(const ProjectionApplier& parent, const Projection& proj, const string& name); /// Attach and retrieve a projection as a pointer. const Projection* registerProjection(const ProjectionApplier& parent, const Projection* proj, const string& name); //@} private: /// @name Projection registration internal helpers //@{ /// Try to get an equivalent projection from the system /// @returns 0 if no equivalent projection found const Projection* _getEquiv(const Projection& proj) const; /// Make a clone of proj, copying across child references from the original const Projection* _clone(const Projection& proj); /// Internal function to do the registering const Projection* _register(const ProjectionApplier& parent, const Projection& proj, const string& name); /// Get a string dump of the current ProjHandler structure string _getStatus() const; /// Check that this parent projection doesn't already use this name bool _checkDuplicate(const ProjectionApplier& parent, const Projection& proj, const string& name) const; //@} public: /// @name Projection retrieval. */ //@{ /// Retrieve a named projection for the given parent. Returning as a /// reference is partly to discourage ProjectionApplier classes from storing /// pointer members to the registered projections, since that can lead to /// problems and there is no need to do so. const Projection& getProjection(const ProjectionApplier& parent, const string& name) const; /// Get child projections for the given parent. By default this will just /// return the projections directly contained by the @a parent, but the @a /// depth argument can be changed to do a deep retrieval, which will recurse /// through the whole projection chain. In this case, there is no protection /// against getting stuck in a circular projection dependency loop. set<const Projection*> getChildProjections(const ProjectionApplier& parent, ProjDepth depth=SHALLOW) const; //@} /// Projection clearing method: deletes all known projections and empties /// the reference collections. void clear(); private: /// Remove a ProjectionApplier: designed to only be called by ~ProjectionApplier (as a friend) void removeProjectionApplier(ProjectionApplier& parent); private: /// Get a logger. Log& getLog() const; // /// Get map of named projections belonging to @a parent. // /// Throws an exception if @a parent has not got any registered projections. // const NamedProjs& namedProjs(const ProjectionApplier* parent) const { // NamedProjsMap::const_iterator nps = _namedprojs.find(parent); // if (nps == _namedprojs.end()) { // stringstream ss; // ss << "No NamedProjs registered for parent " << parent; // throw Error(ss.str()); // } // return *nps; // } }; } #endif ���������������������������������������rivet-1.8.3/include/Rivet/RivetAIDA.fhh�������������������������������������������������������������0000644�0001750�0001750�00000002341�12116077757�016000� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef ANALYSIS_RIVETAIDA_FHH #define ANALYSIS_RIVETAIDA_FHH /// @author Andy Buckley /// @date 2009-01-30 /// @brief Forward declarations of AIDA interfaces namespace AIDA { class IAnalysisFactory; class IHistogramFactory; class IHistogram1D; class IHistogram2D; class IProfile1D; class IDataPointSetFactory; class IDataPointSet; class IDataPoint; class IMeasurement; class ITreeFactory; class ITree; class IAxis; } #include <vector> namespace Rivet { /// Typedef for a collection of bin edges. typedef std::vector<double> BinEdges; /// Container for x-axis point details struct DPSXPoint { DPSXPoint(double xval, double xerrminus, double xerrplus) : val(xval), errminus(xerrminus), errplus(xerrplus) { } double val; double errminus; double errplus; }; /// Container for x-axis point details struct DPSXYPoint { DPSXYPoint(double xval, double xerrminus, double xerrplus, double yval, double yerrminus, double yerrplus) : xval(xval), xerrminus(xerrminus), xerrplus(xerrplus), yval(yval), yerrminus(yerrminus), yerrplus(yerrplus) { } double xval; double xerrminus; double xerrplus; double yval; double yerrminus; double yerrplus; }; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/RivetHepMC.hh�������������������������������������������������������������0000644�0001750�0001750�00000005246�12116077757�016077� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_RivetHepMC_HH #define RIVET_RivetHepMC_HH #include "HepMC/GenEvent.h" #include "HepMC/GenParticle.h" #include "HepMC/GenVertex.h" #include <vector> namespace Rivet { using HepMC::GenEvent; using HepMC::GenParticle; using HepMC::GenVertex; inline vector<GenParticle*> particles(const GenEvent& ge) { vector<GenParticle*> rtn; for (GenEvent::particle_const_iterator pi = ge.particles_begin(); pi != ge.particles_end(); ++pi) { rtn.push_back(*pi); } return rtn; } inline vector<GenParticle*> particles(const GenEvent* ge) { assert(ge); return particles(*ge); } // inline std::pair<GenEvent::particle_const_iterator, GenEvent::particle_const_iterator> particles(const GenEvent& ge) { // return make_pair(ge.particles_begin(), ge.particles_end()); // } // inline std::pair<GenEvent::particle_const_iterator, GenEvent::particle_const_iterator> particles(const GenEvent* ge) { // assert(ge); // return particles(*ge); // } inline vector<GenVertex*> vertices(const GenEvent& ge) { vector<GenVertex*> rtn; for (GenEvent::vertex_const_iterator vi = ge.vertices_begin(); vi != ge.vertices_end(); ++vi) { rtn.push_back(*vi); } return rtn; } inline vector<GenVertex*> vertices(const GenEvent* ge) { assert(ge); return vertices(*ge); } // inline std::pair<GenEvent::vertex_const_iterator, GenEvent::vertex_const_iterator> vertices(const GenEvent& ge) { // return make_pair(ge.vertices_begin(), ge.vertices_end()); // } // inline std::pair<GenEvent::vertex_const_iterator, GenEvent::vertex_const_iterator> vertices(const GenEvent* ge) { // assert(ge); // return vertices(*ge); // } inline const std::pair<GenVertex::particles_in_const_iterator, GenVertex::particles_in_const_iterator> particles_in(const GenVertex* gv) { return make_pair(gv->particles_in_const_begin(), gv->particles_in_const_end()); } inline const std::pair<GenVertex::particles_out_const_iterator, GenVertex::particles_out_const_iterator> particles_out(const GenVertex* gv) { return make_pair(gv->particles_out_const_begin(), gv->particles_out_const_end()); } inline vector<GenParticle*> particles(GenVertex* gv, HepMC::IteratorRange range=HepMC::relatives) { vector<GenParticle*> rtn; for (GenVertex::particle_iterator pi = gv->particles_begin(range); pi != gv->particles_end(range); ++pi) { rtn.push_back(*pi); } return rtn; } // inline std::pair<GenVertex::particle_iterator, GenVertex::particle_iterator> particles(GenVertex* gv, HepMC::IteratorRange range=HepMC::relatives) { // return make_pair(gv->particles_begin(range), gv->particles_end(range)); // } } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Analysis.hh���������������������������������������������������������������0000644�0001750�0001750�00000056221�12116077757�015713� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Analysis_HH #define RIVET_Analysis_HH #include "Rivet/Rivet.hh" #include "Rivet/Analysis.fhh" #include "Rivet/AnalysisInfo.hh" #include "Rivet/Event.hh" #include "Rivet/Projection.hh" #include "Rivet/ProjectionApplier.hh" #include "Rivet/ProjectionHandler.hh" #include "Rivet/Constraints.hh" #include "Rivet/AnalysisHandler.fhh" #include "Rivet/AnalysisLoader.hh" #include "Rivet/Tools/Logging.fhh" #include "Rivet/RivetAIDA.fhh" /// @def vetoEvent /// Preprocessor define for vetoing events, including the log message and return. #define vetoEvent \ do { MSG_DEBUG("Vetoing event on line " << __LINE__ << " of " << __FILE__); return; } while(0) /// @def DECLARE_RIVET_PLUGIN /// Preprocessor define to prettify the global-object plugin hook mechanism. #define DECLARE_RIVET_PLUGIN(clsname) Rivet::AnalysisBuilder<clsname> plugin_ ## clsname namespace Rivet { /// @brief This is the base class of all analysis classes in Rivet. /// /// There are /// three virtual functions which should be implemented in base classes: /// /// void init() is called by Rivet before a run is started. Here the /// analysis class should book necessary histograms. The needed /// projections should probably rather be constructed in the /// constructor. /// /// void analyze(const Event&) is called once for each event. Here the /// analysis class should apply the necessary Projections and fill the /// histograms. /// /// void finalize() is called after a run is finished. Here the analysis /// class should do whatever manipulations are necessary on the /// histograms. Writing the histograms to a file is, however, done by /// the Rivet class. class Analysis : public ProjectionApplier { /// The AnalysisHandler is a friend. friend class AnalysisHandler; public: /// @name Standard constructors and destructors. //@{ // /// The default constructor. // Analysis(); /// Constructor Analysis(const std::string& name); /// The destructor. virtual ~Analysis() {} //@} public: /// @name Main analysis methods //@{ /// Initialize this analysis object. A concrete class should here /// book all necessary histograms. An overridden function must make /// sure it first calls the base class function. virtual void init() { } /// Analyze one event. A concrete class should here apply the /// necessary projections on the \a event and fill the relevant /// histograms. An overridden function must make sure it first calls /// the base class function. virtual void analyze(const Event& event) = 0; /// Finalize this analysis object. A concrete class should here make /// all necessary operations on the histograms. Writing the /// histograms to a file is, however, done by the Rivet class. An /// overridden function must make sure it first calls the base class /// function. virtual void finalize() { } //@} public: /// @name Metadata /// Metadata is used for querying from the command line and also for /// building web pages and the analysis pages in the Rivet manual. //@{ /// Get the actual AnalysisInfo object in which all this metadata is stored. const AnalysisInfo& info() const { assert(_info.get() != 0 && "No AnalysisInfo object :O"); return *_info; } /// @brief Get the name of the analysis. /// /// By default this is computed by combining the results of the experiment, /// year and Spires ID metadata methods and you should only override it if /// there's a good reason why those won't work. virtual std::string name() const { return (info().name().empty()) ? _defaultname : info().name(); } /// Get the Inspire ID code for this analysis. virtual std::string inspireId() const { return info().inspireId(); } /// Get the SPIRES ID code for this analysis (~deprecated). virtual std::string spiresId() const { return info().spiresId(); } /// @brief Names & emails of paper/analysis authors. /// /// Names and email of authors in 'NAME \<EMAIL\>' format. The first /// name in the list should be the primary contact person. virtual std::vector<std::string> authors() const { return info().authors(); } /// @brief Get a short description of the analysis. /// /// Short (one sentence) description used as an index entry. /// Use @a description() to provide full descriptive paragraphs /// of analysis details. virtual std::string summary() const { return info().summary(); } /// @brief Get a full description of the analysis. /// /// Full textual description of this analysis, what it is useful for, /// what experimental techniques are applied, etc. Should be treated /// as a chunk of restructuredText (http://docutils.sourceforge.net/rst.html), /// with equations to be rendered as LaTeX with amsmath operators. virtual std::string description() const { return info().description(); } /// @brief Information about the events needed as input for this analysis. /// /// Event types, energies, kinematic cuts, particles to be considered /// stable, etc. etc. Should be treated as a restructuredText bullet list /// (http://docutils.sourceforge.net/rst.html) virtual std::string runInfo() const { return info().runInfo(); } /// Experiment which performed and published this analysis. virtual std::string experiment() const { return info().experiment(); } /// Collider on which the experiment ran. virtual std::string collider() const { return info().collider(); } /// When the original experimental analysis was published. virtual std::string year() const { return info().year(); } /// Journal, and preprint references. virtual std::vector<std::string> references() const { return info().references(); } /// BibTeX citation key for this article. virtual std::string bibKey() const { return info().bibKey(); } /// BibTeX citation entry for this article. virtual std::string bibTeX() const { return info().bibTeX(); } /// Whether this analysis is trusted (in any way!) virtual std::string status() const { return (info().status().empty()) ? "UNVALIDATED" : info().status(); } /// Any work to be done on this analysis. virtual std::vector<std::string> todos() const { return info().todos(); } /// Return the allowed pairs of incoming beams required by this analysis. virtual const std::vector<PdgIdPair>& requiredBeams() const { return info().beams(); } /// Declare the allowed pairs of incoming beams required by this analysis. virtual Analysis& setRequiredBeams(const std::vector<PdgIdPair>& requiredBeams) { info().setBeams(requiredBeams); return *this; } /// Sets of valid beam energy pairs, in GeV virtual const std::vector<std::pair<double, double> >& requiredEnergies() const { return info().energies(); } /// Declare the list of valid beam energy pairs, in GeV virtual Analysis& setRequiredEnergies(const std::vector<std::pair<double, double> >& requiredEnergies) { info().setEnergies(requiredEnergies); return *this; } /// Return true if this analysis needs to know the process cross-section. bool needsCrossSection() const { return info().needsCrossSection(); } /// Declare whether this analysis needs to know the process cross-section from the generator. Analysis& setNeedsCrossSection(bool needed=true) { info().setNeedsCrossSection(needed); return *this; } //@} /// @name Internal metadata modifiying methods //@{ /// Get the actual AnalysisInfo object in which all this metadata is stored (non-const). AnalysisInfo& info() { assert(_info.get() != 0 && "No AnalysisInfo object :O"); return *_info; } /// Set the required beams /// @deprecated To be removed in 2.0.0. Use .info file and AnalysisInfo class instead virtual Analysis& setBeams(PdgId beam1, PdgId beam2) { /// @todo Print out a warning to use setRequiredBeams() instead (and really to use .info files) return setRequiredBeams(std::vector<PdgIdPair>(1, make_pair(beam1, beam2))); } //@} /// @name Run conditions //@{ /// Incoming beams for this run const ParticlePair& beams() const; /// Incoming beam IDs for this run const PdgIdPair beamIds() const; /// Centre of mass energy for this run double sqrtS() const; //@} /// @name Analysis / beam compatibility testing //@{ /// Check if analysis is compatible with the provided beam particle IDs and energies bool isCompatible(const ParticlePair& beams) const; /// Check if analysis is compatible with the provided beam particle IDs and energies bool isCompatible(PdgId beam1, PdgId beam2, double e1, double e2) const; /// Check if analysis is compatible with the provided beam particle IDs and energies bool isCompatible(const PdgIdPair& beams, const std::pair<double,double>& energies) const; //@} public: /// Access the controlling AnalysisHandler object. AnalysisHandler& handler() const { return *_analysishandler; } /// Normalize the given histogram, @a histo. After this call the /// histogram will have been transformed to a DataPointSet with the /// same name and path. It has the same effect as /// @c scale(histo, norm/sumOfWeights). /// @param histo The histogram to be normalised. /// @param norm The new area of the histogram. /// @warning The old histogram will be deleted, and its pointer set to zero. void normalize(AIDA::IHistogram1D*& histo, double norm=1.0, bool includeoverflows=true); /// Multiplicatively scale the given histogram, @a histo. After this call the /// histogram will have been transformed to a DataPointSet with the same name and path. /// @param histo The histogram to be scaled. /// @param scale The factor used to multiply the histogram bin heights. /// @warning The old histogram will be deleted, and its pointer set to zero. void scale(AIDA::IHistogram1D*& histo, double scale); /// Normalize the given histogram, @a histo. After this call the /// histogram will have been transformed to a DataPointSet with the /// same name and path. It has the same effect as /// @c scale(histo, norm/sumOfWeights). /// @param histo The histogram to be normalised. /// @param norm The new area of the histogram. /// @warning The old histogram will be deleted, and its pointer set to zero. void normalize(AIDA::IHistogram2D*& histo, double norm=1.0); /// Multiplicatively scale the given histogram, @a histo. After this call the /// histogram will have been transformed to a DataPointSet with the same name and path. /// @param histo The histogram to be scaled. /// @param scale The factor used to multiply the histogram bin heights. /// @warning The old histogram will be deleted, and its pointer set to zero. void scale(AIDA::IHistogram2D*& histo, double scale); /// Set the cross section from the generator Analysis& setCrossSection(double xs); protected: /// Get a Log object based on the name() property of the calling analysis object. Log& getLog() const; /// Get the process cross-section in pb. Throws if this hasn't been set. double crossSection() const; /// Get the process cross-section per generated event in pb. Throws if this /// hasn't been set. double crossSectionPerEvent() const; /// Get the number of events seen (via the analysis handler). Use in the /// finalize phase only. size_t numEvents() const; /// Get the sum of event weights seen (via the analysis handler). Use in the /// finalize phase only. double sumOfWeights() const; protected: /// @name AIDA analysis infrastructure. //@{ /// Access the AIDA analysis factory of the controlling AnalysisHandler object. AIDA::IAnalysisFactory& analysisFactory(); /// Access the AIDA tree of the controlling AnalysisHandler object. AIDA::ITree& tree(); /// Access the AIDA histogram factory of the controlling AnalysisHandler object. AIDA::IHistogramFactory& histogramFactory(); /// Access the AIDA histogram factory of the controlling AnalysisHandler object. AIDA::IDataPointSetFactory& datapointsetFactory(); /// Get the canonical histogram "directory" path for this analysis. const std::string histoDir() const; /// Get the canonical histogram path for the named histogram in this analysis. const std::string histoPath(const std::string& hname) const; /// Get the canonical histogram path for the numbered histogram in this analysis. const std::string histoPath(size_t datasetId, size_t xAxisId, size_t yAxisId) const; /// Get the internal histogram name for given d, x and y (cf. HepData) const std::string makeAxisCode(size_t datasetId, size_t xAxisId, size_t yAxisId) const; //@} /// @name Internal histogram booking (for use by Analysis sub-classes). //@{ /// Get bin edges for a named histo (using ref AIDA caching) const BinEdges& binEdges(const std::string& hname) const; /// Get bin edges for a numbered histo (using ref AIDA caching) const BinEdges& binEdges(size_t datasetId, size_t xAxisId, size_t yAxisId) const; /// @brief Get bin edges with logarithmic widths /// /// @deprecated Prefer logspace. This will disappear in Rivet 2.0.0 BinEdges logBinEdges(size_t nbins, double lower, double upper); /// Book a 1D histogram with @a nbins uniformly distributed across the range @a lower - @a upper . /// (NB. this returns a pointer rather than a reference since it will /// have to be stored in the analysis class - there's no point in forcing users to explicitly /// get the pointer from a reference before they can use it!) AIDA::IHistogram1D* bookHistogram1D(const std::string& name, size_t nbins, double lower, double upper, const std::string& title="", const std::string& xtitle="", const std::string& ytitle=""); /// Book a 1D histogram with non-uniform bins defined by the vector of bin edges @a binedges . /// (NB. this returns a pointer rather than a reference since it will /// have to be stored in the analysis class - there's no point in forcing users to explicitly /// get the pointer from a reference before they can use it!) AIDA::IHistogram1D* bookHistogram1D(const std::string& name, const std::vector<double>& binedges, const std::string& title="", const std::string& xtitle="", const std::string& ytitle=""); /// Book a 2D histogram with @a nxbins and @a nybins uniformly /// distributed across the ranges @a xlower - @a xupper and @a /// ylower - @a yupper respectively along the x- and y-axis. /// (NB. this returns a pointer rather than a reference since it /// will have to be stored in the analysis class - there's no /// point in forcing users to explicitly get the pointer from a /// reference before they can use it!) AIDA::IHistogram2D* bookHistogram2D(const std::string& name, size_t nxbins, double xlower, double xupper, size_t nybins, double ylower, double yupper, const std::string& title="", const std::string& xtitle="", const std::string& ytitle="", const std::string& ztitle=""); /// Book a 2D histogram with non-uniform bins defined by the /// vectorx of bin edges @a xbinedges and @a ybinedges. /// (NB. this returns a pointer rather than a reference since it /// will have to be stored in the analysis class - there's no /// point in forcing users to explicitly get the pointer from a /// reference before they can use it!) AIDA::IHistogram2D* bookHistogram2D(const std::string& name, const std::vector<double>& xbinedges, const std::vector<double>& ybinedges, const std::string& title="", const std::string& xtitle="", const std::string& ytitle="", const std::string& ztitle=""); /// Book a 1D histogram based on the name in the corresponding AIDA /// file. The binnings will be obtained by reading the bundled AIDA data /// record file with the same filename as the analysis' name() property. AIDA::IHistogram1D* bookHistogram1D(const std::string& name, const std::string& title="", const std::string& xtitle="", const std::string& ytitle=""); /// Book a 1D histogram based on the paper, dataset and x/y-axis IDs in the corresponding /// HepData record. The binnings will be obtained by reading the bundled AIDA data record file /// of the same filename as the analysis' name() property. AIDA::IHistogram1D* bookHistogram1D(size_t datasetId, size_t xAxisId, size_t yAxisId, const std::string& title="", const std::string& xtitle="", const std::string& ytitle=""); //@} /// @name Internal profile histogram booking (for use by Analysis sub-classes). //@{ /// Book a 1D profile histogram with @a nbins uniformly distributed across the range @a lower - @a upper . /// (NB. this returns a pointer rather than a reference since it will /// have to be stored in the analysis class - there's no point in forcing users to explicitly /// get the pointer from a reference before they can use it!) AIDA::IProfile1D* bookProfile1D(const std::string& name, size_t nbins, double lower, double upper, const std::string& title="", const std::string& xtitle="", const std::string& ytitle=""); /// Book a 1D profile histogram with non-uniform bins defined by the vector of bin edges @a binedges . /// (NB. this returns a pointer rather than a reference since it will /// have to be stored in the analysis class - there's no point in forcing users to explicitly /// get the pointer from a reference before they can use it!) AIDA::IProfile1D* bookProfile1D(const std::string& name, const std::vector<double>& binedges, const std::string& title="", const std::string& xtitle="", const std::string& ytitle=""); /// Book a 1D profile histogram based on the name in the corresponding AIDA /// file. The binnings will be obtained by reading the bundled AIDA data /// record file with the same filename as the analysis' name() property. AIDA::IProfile1D* bookProfile1D(const std::string& name, const std::string& title="", const std::string& xtitle="", const std::string& ytitle=""); /// Book a 1D profile histogram based on the paper, dataset and x/y-axis IDs in the corresponding /// HepData record. The binnings will be obtained by reading the bundled AIDA data record file /// of the same filename as the analysis' name() property. AIDA::IProfile1D* bookProfile1D(size_t datasetId, size_t xAxisId, size_t yAxisId, const std::string& title="", const std::string& xtitle="", const std::string& ytitle=""); //@} /// @name Internal data point set booking (for use by Analysis sub-classes). //@{ /// Book a 2-dimensional data point set. /// (NB. this returns a pointer rather than a reference since it will /// have to be stored in the analysis class - there's no point in forcing users to explicitly /// get the pointer from a reference before they can use it!) AIDA::IDataPointSet* bookDataPointSet(const std::string& name, const std::string& title="", const std::string& xtitle="", const std::string& ytitle=""); /// Book a 2-dimensional data point set with equally spaced points in a range. /// (NB. this returns a pointer rather than a reference since it will /// have to be stored in the analysis class - there's no point in forcing users to explicitly /// get the pointer from a reference before they can use it!) AIDA::IDataPointSet* bookDataPointSet(const std::string& name, size_t npts, double lower, double upper, const std::string& title="", const std::string& xtitle="", const std::string& ytitle=""); /// Book a 2-dimensional data point set based on the corresponding AIDA data /// file. The binnings (x-errors) will be obtained by reading the bundled /// AIDA data record file of the same filename as the analysis' name() /// property. //AIDA::IDataPointSet* bookDataPointSet(const std::string& name, const std::string& title); /// Book a 2-dimensional data point set based on the paper, dataset and x/y-axis IDs in the corresponding /// HepData record. The binnings (x-errors) will be obtained by reading the bundled AIDA data record file /// of the same filename as the analysis' name() property. AIDA::IDataPointSet* bookDataPointSet(size_t datasetId, size_t xAxisId, size_t yAxisId, const std::string& title="", const std::string& xtitle="", const std::string& ytitle=""); //@} private: /// @name Utility functions //@{ /// Make the histogram directory. void _makeHistoDir(); /// Get the bin edges for this paper from the reference AIDA file, and cache them. void _cacheBinEdges() const; /// Get the x-axis points for this paper from the reference AIDA file, and cache them. void _cacheXAxisData() const; //@} protected: /// Name passed to constructor (used to find .info analysis data file, and as a fallback) string _defaultname; /// Pointer to analysis metadata object shared_ptr<AnalysisInfo> _info; private: /// @name Cross-section variables //@{ double _crossSection; bool _gotCrossSection; //@} /// The controlling AnalysisHandler object. AnalysisHandler* _analysishandler; /// Flag to indicate whether the histogram directory is present mutable bool _madeHistoDir; /// Collection of x-axis point data to speed up many autobookings: the /// reference data file should only be read once. /// @todo Reduce memory occupancy, or clear after initialisation? mutable map<string, vector<DPSXPoint> > _dpsData; /// Collection of cached bin edges to speed up many autobookings: the /// reference data file should only be read once. /// @todo Reduce memory occupancy, or clear after initialisation? mutable map<string, BinEdges> _histBinEdges; private: /// The assignment operator is private and must never be called. /// In fact, it should not even be implemented. Analysis& operator=(const Analysis&); }; } // Include definition of analysis plugin system so that analyses automatically see it when including Analysis.hh #include "Rivet/AnalysisBuilder.hh" #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Projection.fhh������������������������������������������������������������0000644�0001750�0001750�00000001742�12116077757�016410� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef Rivet_Projection_FHH #define Rivet_Projection_FHH #include "Rivet/Cmp.fhh" namespace Rivet { class Projection; typedef Projection* ProjectionPtr; typedef const Projection* ConstProjectionPtr; } namespace std { /// This is the function called when comparing two (const) pointers to Rivet::Projection. template <> struct less<const Rivet::Projection*> : public binary_function<const Rivet::Projection*, const Rivet::Projection*, bool> { bool operator()(const Rivet::Projection* x, const Rivet::Projection* y) const; }; } namespace Rivet { /// Convenience method for casting to a const Projection reference. template <typename PROJ> inline const PROJ& pcast(const Projection& p) { return dynamic_cast<const PROJ&>(p); } /// Convenience method for casting to a const Projection pointer. template <typename PROJ> inline const PROJ* pcast(const Projection* p) { return dynamic_cast<const PROJ*>(p); } } #endif ������������������������������rivet-1.8.3/include/Rivet/RivetBoost.hh�������������������������������������������������������������0000644�0001750�0001750�00000001546�12116077757�016230� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_RIVETBOOST_HH #define RIVET_RIVETBOOST_HH #include "boost/smart_ptr.hpp" #include "boost/lexical_cast.hpp" #include "boost/assign.hpp" #include "boost/foreach.hpp" #define foreach BOOST_FOREACH //#include <boost/random.hpp> #include <boost/algorithm/string.hpp> namespace Rivet { // Smart pointers using boost::shared_ptr; // Clever casts using boost::lexical_cast; using boost::bad_lexical_cast; // Clever assignment shortcuts using namespace boost::assign; // Strings using namespace boost; // Random numbers // typedef boost::minstd_rand RngBase; // typedef boost::uniform_real<> UniformRealDist; // typedef boost::variate_generator<RngBase&, UniformRealDist> UniformRealRNG; // typedef boost::uniform_int<> UniformIntDist; // typedef boost::variate_generator<RngBase&, UniformIntDist> UniformIntRNG; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Exceptions.hh�������������������������������������������������������������0000644�0001750�0001750�00000002601�12116077757�016242� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_EXCEPTIONS_HH #define RIVET_EXCEPTIONS_HH #include <string> #include <exception> #include <stdexcept> namespace Rivet { /// @brief Generic runtime Rivet error. class Error : public std::runtime_error { public: Error(const std::string& what) : std::runtime_error(what) {} }; /// @brief Rivet::Exception is a synonym for Rivet::Error. typedef Error Exception; /// @brief Error for e.g. use of invalid bin ranges. class RangeError : public Error { public: RangeError(const std::string& what) : Error(what) {} }; /// @brief Error specialisation for places where alg logic has failed. class LogicError : public Error { public: LogicError(const std::string& what) : Error(what) {} }; /// @brief Error specialisation for failures relating to particle ID codes. class PidError : public Error { public: PidError(const std::string& what) : Error(what) {} }; /// @brief Errors relating to event/bin weights /// /// Arises in computing statistical quantities because e.g. the bin /// weight is zero or negative. class WeightError : public Error { public: WeightError(const std::string& what) : Error(what) {} }; /// @brief Error specialisation for where the problem is between the chair and computer. class UserError : public Error { public: UserError(const std::string& what) : Error(what) {} }; } #endif �������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Event.hh������������������������������������������������������������������0000644�0001750�0001750�00000005566�12116077757�015217� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Event_HH #define RIVET_Event_HH #include "Rivet/Rivet.hh" #include "Rivet/Projection.hh" namespace Rivet { /// Rivet wrapper for HepMC event and Projection references. /// /// Event is a concrete class representing an generated event in /// Rivet. It is constructed given a HepMC::GenEvent, a pointer to /// which is kept by the Event object throughout its lifetime. The user /// must therefore make sure that the corresponding HepMC::GenEvent /// will persist at least as long as the Event object. /// /// In addition to the HepMC::GenEvent object the Event also keeps /// track of all Projections object which have been applied to the /// Event so far. class Event { public: /// @name Standard constructors and destructors. //@{ /// The default constructor. Event(const GenEvent& ge); /// The copy constructor. Event(const Event& e); /// The destructor ~Event(); //@} public: /// Return the generated event obtained from an external event generator. const GenEvent& genEvent() const; /// The weight associated with the event. double weight() const { return _weight; } public: /// Add a projection \a p to this Event. If an equivalent Projection /// has been applied before, the Projection::project(const Event &) /// of \a p is not called and a reference to the previous equivalent /// projection is returned. If no previous Projection was found, the /// Projection::project(const Event &) of \a p is called and a /// reference to p is returned. template <typename PROJ> const PROJ& applyProjection(PROJ& p) const { const Projection* cpp(&p); std::set<const Projection*>::const_iterator old = _projections.find(cpp); if (old != _projections.end()) { const Projection& pRef = **old; return pcast<PROJ>(pRef); } // Add the projection via the Projection base class (only // possible because Event is a friend of Projection) Projection* pp = const_cast<Projection*>(cpp); pp->project(*this); _projections.insert(pp); return p; } template <typename PROJ> const PROJ& applyProjection(PROJ* pp) const { if (!pp) throw Error("Event::applyProjection(PROJ*): Projection pointer is null."); return applyProjection(*pp); } private: void _geNormAlignment(); /// @brief The generated event, obtained from an external generator. /// Note that it is only externally accessible via a const reference. GenEvent const& _genEvent; GenEvent* _modGenEvent; /// The set of Projection objects applied so far. mutable std::set<ConstProjectionPtr> _projections; /// @brief The generation weight associated with the event. /// Usually 1.0. Only copied from the HepMC event once, at construction time. double _weight; }; } #endif ������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Jet.hh��������������������������������������������������������������������0000644�0001750�0001750�00000031762�12116077757�014655� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Jet_HH #define RIVET_Jet_HH #include "Rivet/Rivet.hh" #include <numeric> namespace Rivet { /// @brief Representation of a clustered jet of particles. class Jet : public ParticleBase { public: /// @name Constructors //@{ Jet() : ParticleBase() { clear(); } /// Set all the jet data, with full particle information. Jet(const vector<Particle>& particles, const FourMomentum& pjet) : ParticleBase() { setState(particles, pjet); } // /// Set all the jet data, without particle ID information. // Jet(const vector<FourMomentum>& momenta, const FourMomentum& pjet) // : ParticleBase() { // setState(momenta, pjet); // } //@} /// @name Access jet constituents //@{ /// Number of particles in this jet. size_t size() const { return _particles.size(); } // /// Define a Jet::iterator via a typedef. // typedef vector<FourMomentum>::iterator iterator; // /// Define a Jet::const_iterator via a typedef. // typedef vector<FourMomentum>::const_iterator const_iterator; // /// Get a begin iterator over the particle/track four-momenta in this jet. // iterator begin() { // return _momenta.begin(); // } // /// Get an end iterator over the particle/track four-momenta in this jet. // iterator end() { // return _momenta.end(); // } // /// Get a const begin iterator over the particle/track four-momenta in this jet. // const_iterator begin() const { // return _momenta.begin(); // } // /// Get a const end iterator over the particle/track four-momenta in this jet. // const_iterator end() const { // return _momenta.end(); // } // /// Get the track momenta in this jet. // vector<FourMomentum>& momenta() { // return _momenta; // } // /// Get the track momenta in this jet (const version). // const vector<FourMomentum>& momenta() const { // return _momenta; // } /// Get the particles in this jet. vector<Particle>& particles() { return _particles; } /// Get the particles in this jet (const version) const vector<Particle>& particles() const { return _particles; } /// Check whether this jet contains a particular particle. bool containsParticle(const Particle& particle) const; /// Check whether this jet contains a certain particle type. bool containsParticleId(PdgId pid) const; /// Check whether this jet contains at least one of certain particle types. bool containsParticleId(const vector<PdgId>& pids) const; /// Check whether this jet contains a charm-flavoured hadron (or decay products from one). bool containsCharm() const; /// Check whether this jet contains a bottom-flavoured hadron (or decay products from one). bool containsBottom() const; //@} /// @name Access the effective jet 4-vector properties //@{ /// Get equivalent single momentum four-vector. const FourMomentum& momentum() const { return _momentum; } /// Get the unweighted average \f$ \eta \f$ for this jet. (caches) double eta() const { return momentum().eta(); } /// Get the unweighted average \f$ \phi \f$ for this jet. (caches) double phi() const { return momentum().phi(); } /// Get the total energy of this jet. double totalEnergy() const { return momentum().E(); } /// Get the energy carried in this jet by neutral particles. double neutralEnergy() const; /// Get the energy carried in this jet by hadrons. double hadronicEnergy() const; /// Get the sum of the \f$ p_T \f$ values of the constituent tracks. (caches) double ptSum() const { return momentum().pT(); } /// Get the sum of the \f$ E_T \f$ values of the constituent tracks. (caches) double EtSum() const { return momentum().Et(); } //@} /// @name Set the jet constituents and properties //@{ /// Set all the jet data, with full particle information. Jet& setState(const vector<Particle>& particles, const FourMomentum& pjet); // /// Set all the jet data, without particle ID information. // Jet& setState(const vector<FourMomentum>& momenta, const FourMomentum& pjet); /// Set the effective 4-momentum of the jet. Jet& setMomentum(const FourMomentum& momentum); /// Set the particles collection with full particle information. Jet& setParticles(const vector<Particle>& particles); // /// Set the particles collection with momentum information only. // Jet& setParticles(const vector<FourMomentum>& momenta); // /// Add a particle/track to this jet. // Jet& addParticle(const FourMomentum& particle); // /// Add a particle/track to this jet. // Jet& addParticle(const Particle& particle); /// Reset this jet as empty. Jet& clear(); //@} private: /// Full particle information including tracks, ID etc ParticleVector _particles; // /// The particle momenta. // /// @todo Eliminate this to ensure consistency. // std::vector<FourMomentum> _momenta; /// Effective jet 4-vector FourMomentum _momentum; }; /// Typedef for a collection of Jet objects. typedef std::vector<Jet> Jets; /// @name Jet comparison functions for STL sorting //@{ /// @brief Compare jets by \f$ p_\perp \f$ (descending - usual sorting for HEP) /// Use this so that highest \f$ p_\perp \f$ is at the front of the list inline bool cmpJetsByPt(const Jet& a, const Jet& b) { return a.ptSum() > b.ptSum(); } /// @brief Compare jets by \f$ p_\perp \f$ (ascending) /// Use this so that lowest \f$ p_\perp \f$ is at the front of the list inline bool cmpJetsByAscPt(const Jet& a, const Jet& b) { return a.ptSum() < b.ptSum(); } /// @brief Compare jets by descending momentum, \f$ p \f$ inline bool cmpJetsByP(const Jet& a, const Jet& b) { return a.momentum().vector3().mod() > b.momentum().vector3().mod(); } /// @brief Compare jets by ascending momentum, \f$ p \f$ inline bool cmpJetsByAscP(const Jet& a, const Jet& b) { return a.momentum().vector3().mod() < b.momentum().vector3().mod(); } // @brief Compare jets by \f$ E_\perp \f$ (descending - usual sorting for HEP) /// Use this so that highest \f$ E_\perp \f$ is at the front of the list inline bool cmpJetsByEt(const Jet& a, const Jet& b) { return a.EtSum() > b.EtSum(); } // @brief Compare jets by \f$ E_\perp \f$ (ascending) /// Use this so that lowest \f$ E_\perp \f$ is at the front of the list inline bool cmpJetsByEtDesc(const Jet& a, const Jet& b) { return a.EtSum() < b.EtSum(); } /// @brief Compare jets by \f$ E \f$ (descending - usual sorting for HEP) /// Use this so that highest \f$ E \f$ is at the front of the list inline bool cmpJetsByE(const Jet& a, const Jet& b) { return a.momentum().E() > b.momentum().E(); } /// @brief Compare jets by \f$ E \f$ (ascending) /// Use this so that lowest \f$ E \f$ is at the front of the list inline bool cmpJetsByAscE(const Jet& a, const Jet& b) { return a.momentum().E() < b.momentum().E(); } /// @brief Compare jets by \f$ \eta \f$ (descending) /// Use this so that highest \f$ \eta \f$ is at the front of the list inline bool cmpJetsByDescPseudorapidity(const Jet& a, const Jet& b) { return a.momentum().pseudorapidity() > b.momentum().pseudorapidity(); } /// @brief Compare jets by \f$ \eta \f$ (ascending) /// Use this so that lowest \f$ \eta \f$ is at the front of the list inline bool cmpJetsByAscPseudorapidity(const Jet& a, const Jet& b) { return a.momentum().pseudorapidity() < b.momentum().pseudorapidity(); } /// @brief Compare jets by \f$ |\eta| \f$ (descending) /// Use this so that highest \f$ |\eta| \f$ is at the front of the list inline bool cmpJetsByDescAbsPseudorapidity(const Jet& a, const Jet& b) { return fabs(a.momentum().pseudorapidity()) > fabs(b.momentum().pseudorapidity()); } /// @brief Compare jets by \f$ |\eta| \f$ (ascending) /// Use this so that lowest \f$ |\eta| \f$ is at the front of the list inline bool cmpJetsByAscAbsPseudorapidity(const Jet& a, const Jet& b) { return fabs(a.momentum().pseudorapidity()) < fabs(b.momentum().pseudorapidity()); } /// @brief Compare jets by \f$ y \f$ (descending) /// Use this so that highest \f$ y \f$ is at the front of the list inline bool cmpJetsByDescRapidity(const Jet& a, const Jet& b) { return a.momentum().rapidity() > b.momentum().rapidity(); } /// @brief Compare jets by \f$ y \f$ (ascending) /// Use this so that lowest \f$ y \f$ is at the front of the list inline bool cmpJetsByAscRapidity(const Jet& a, const Jet& b) { return a.momentum().rapidity() < b.momentum().rapidity(); } /// @brief Compare jets by \f$ |y| \f$ (descending) /// Use this so that highest \f$ |y| \f$ is at the front of the list inline bool cmpJetsByDescAbsRapidity(const Jet& a, const Jet& b) { return fabs(a.momentum().rapidity()) > fabs(b.momentum().rapidity()); } /// @brief Compare jets by \f$ |y| \f$ (ascending) /// Use this so that lowest \f$ |y| \f$ is at the front of the list inline bool cmpJetsByAscAbsRapidity(const Jet& a, const Jet& b) { return fabs(a.momentum().rapidity()) < fabs(b.momentum().rapidity()); } //@} inline double deltaR(const Jet& j1, const Jet& j2, RapScheme scheme = PSEUDORAPIDITY) { return deltaR(j1.momentum(), j2.momentum(), scheme); } inline double deltaR(const Jet& j, const Particle& p, RapScheme scheme = PSEUDORAPIDITY) { return deltaR(j.momentum(), p.momentum(), scheme); } inline double deltaR(const Particle& p, const Jet& j, RapScheme scheme = PSEUDORAPIDITY) { return deltaR(p.momentum(), j.momentum(), scheme); } inline double deltaR(const Jet& j, const FourMomentum& v, RapScheme scheme = PSEUDORAPIDITY) { return deltaR(j.momentum(), v, scheme); } inline double deltaR(const Jet& j, const FourVector& v, RapScheme scheme = PSEUDORAPIDITY) { return deltaR(j.momentum(), v, scheme); } inline double deltaR(const Jet& j, const Vector3& v) { return deltaR(j.momentum(), v); } inline double deltaR(const Jet& j, double eta, double phi) { return deltaR(j.momentum(), eta, phi); } inline double deltaR(const FourMomentum& v, const Jet& j, RapScheme scheme = PSEUDORAPIDITY) { return deltaR(v, j.momentum(), scheme); } inline double deltaR(const FourVector& v, const Jet& j, RapScheme scheme = PSEUDORAPIDITY) { return deltaR(v, j.momentum(), scheme); } inline double deltaR(const Vector3& v, const Jet& j) { return deltaR(v, j.momentum()); } inline double deltaR(double eta, double phi, const Jet& j) { return deltaR(eta, phi, j.momentum()); } inline double deltaPhi(const Jet& j1, const Jet& j2) { return deltaPhi(j1.momentum(), j2.momentum()); } inline double deltaPhi(const Jet& j, const Particle& p) { return deltaPhi(j.momentum(), p.momentum()); } inline double deltaPhi(const Particle& p, const Jet& j) { return deltaPhi(p.momentum(), j.momentum()); } inline double deltaPhi(const Jet& j, const FourMomentum& v) { return deltaPhi(j.momentum(), v); } inline double deltaPhi(const Jet& j, const FourVector& v) { return deltaPhi(j.momentum(), v); } inline double deltaPhi(const Jet& j, const Vector3& v) { return deltaPhi(j.momentum(), v); } inline double deltaPhi(const Jet& j, double phi) { return deltaPhi(j.momentum(), phi); } inline double deltaPhi(const FourMomentum& v, const Jet& j) { return deltaPhi(v, j.momentum()); } inline double deltaPhi(const FourVector& v, const Jet& j) { return deltaPhi(v, j.momentum()); } inline double deltaPhi(const Vector3& v, const Jet& j) { return deltaPhi(v, j.momentum()); } inline double deltaPhi(double phi, const Jet& j) { return deltaPhi(phi, j.momentum()); } inline double deltaEta(const Jet& j1, const Jet& j2) { return deltaEta(j1.momentum(), j2.momentum()); } inline double deltaEta(const Jet& j, const Particle& p) { return deltaEta(j.momentum(), p.momentum()); } inline double deltaEta(const Particle& p, const Jet& j) { return deltaEta(p.momentum(), j.momentum()); } inline double deltaEta(const Jet& j, const FourMomentum& v) { return deltaEta(j.momentum(), v); } inline double deltaEta(const Jet& j, const FourVector& v) { return deltaEta(j.momentum(), v); } inline double deltaEta(const Jet& j, const Vector3& v) { return deltaEta(j.momentum(), v); } inline double deltaEta(const Jet& j, double eta) { return deltaEta(j.momentum(), eta); } inline double deltaEta(const FourMomentum& v, const Jet& j) { return deltaEta(v, j.momentum()); } inline double deltaEta(const FourVector& v, const Jet& j) { return deltaEta(v, j.momentum()); } inline double deltaEta(const Vector3& v, const Jet& j) { return deltaEta(v, j.momentum()); } inline double deltaEta(double eta, const Jet& j) { return deltaEta(eta, j.momentum()); } } #endif ��������������rivet-1.8.3/include/Rivet/Run.hh��������������������������������������������������������������������0000644�0001750�0001750�00000003777�12116077757�014704� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Run_HH #define RIVET_Run_HH #include "Rivet/AnalysisHandler.fhh" #include "Rivet/RivetBoost.hh" namespace HepMC { class IO_GenEvent; } namespace Rivet { /// @brief Interface to handle a run of events read from a HepMC stream or file. class Run { public: /// @name Standard constructors and destructors. */ //@{ /// The standard constructor. Run(AnalysisHandler& ah); /// The destructor ~Run(); //@} public: /// @name Set run properties //@{ /// Get the cross-section for this run. Run& setCrossSection(const double xs); /// Get the current cross-section from the analysis handler in pb. double crossSection() const; /// Declare whether to list available analyses Run& setListAnalyses(const bool dolist); //@} /// @name File processing stages //@{ /// Set up HepMC file readers (using the appropriate file weight for the first file) bool init(const std::string& evtfile, double weight=1.0); /// Open a HepMC GenEvent file (using the appropriate file weight for the first file) bool openFile(const std::string& evtfile, double weight=1.0); /// Read the next HepMC event bool readEvent(); /// Handle next event bool processEvent(); /// Close up HepMC I/O bool finalize(); //@} private: /// AnalysisHandler object AnalysisHandler& _ah; /// @name Run variables obtained from events or command line //@{ /// @brief An extra event weight scaling per event file. /// Useful for e.g. AlpGen n-parton event file combination. double _fileweight; /// Cross-section from command line. double _xs; //@} /// Flag to show list of analyses bool _listAnalyses; /// @name HepMC I/O members //@{ /// Current event shared_ptr<GenEvent> _evt; /// Output stream for HepMC writer shared_ptr<std::istream> _istr; /// HepMC I/O writer shared_ptr<HepMC::IO_GenEvent> _io; //@} }; } #endif �rivet-1.8.3/include/Rivet/ParticleName.hh�����������������������������������������������������������0000644�0001750�0001750�00000012003�12116077757�016462� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_PARTICLENAME_HH #define RIVET_PARTICLENAME_HH #include "Rivet/Particle.fhh" #include "Rivet/Exceptions.hh" namespace Rivet { /// @name Static const convenience particle ID names //@{ static const PdgId ELECTRON = 11; static const PdgId POSITRON = -11; static const PdgId PROTON = 2212; static const PdgId ANTIPROTON = -2212; static const PdgId PHOTON = 22; static const PdgId NEUTRON = 2112; static const PdgId ANTINEUTRON = -2112; static const PdgId MUON = 13; static const PdgId ANTIMUON = -13; static const PdgId NU_E = 12; static const PdgId NU_EBAR = -12; static const PdgId NU_MU = 14; static const PdgId NU_MUBAR = -14; static const PdgId NU_TAU = 16; static const PdgId NU_TAUBAR = -16; static const PdgId PIPLUS = 211; static const PdgId PIMINUS = -211; static const PdgId PI0 = 111; static const PdgId K0L = 130; static const PdgId K0S = 310; static const PdgId KPLUS = 321; static const PdgId KMINUS = -321; static const PdgId LAMBDA = 3122; static const PdgId LAMBDABAR = -3122; static const PdgId XIMINUS = 3312; static const PdgId XIPLUS = -3312; static const PdgId OMEGAMINUS = 3334; static const PdgId OMEGAPLUS = -3334; static const PdgId TAU = 15; static const PdgId ANTITAU = -15; static const PdgId EMINUS = 11; static const PdgId EPLUS = -11; static const PdgId P = 2212; static const PdgId PBAR = -2212; static const PdgId GLUON = 21; static const PdgId GAMMA = 22; static const PdgId WPLUSBOSON = 24; static const PdgId WMINUSBOSON = -24; static const PdgId ZBOSON = 23; static const PdgId HIGGS = 25; static const PdgId DQUARK = 1; static const PdgId UQUARK = 2; static const PdgId SQUARK = 3; static const PdgId CQUARK = 4; static const PdgId BQUARK = 5; static const PdgId TQUARK = 6; static const PdgId ANY = 10000; // static const PdgId PHOTOELECTRON; // static const PdgId PHOTOPOSITRON; // static const PdgId PHOTOMUON; // static const PdgId PHOTOANTIMUON; // static const PdgId PHOTOTAU; // static const PdgId PHOTOANTITAU; //@} class ParticleNames { public: static const std::string& particleName(PdgId pid) { if (!_instance) _instance = new ParticleNames(); return _instance->_particleName(pid); } static PdgId particleId(const std::string& pname) { if (!_instance) _instance = new ParticleNames(); return _instance->_particleId(pname); } public: const std::string& _particleName(PdgId pid); PdgId _particleId(const std::string& pname); private: ParticleNames() { _add_pid_name(ELECTRON, "ELECTRON"); _add_pid_name(POSITRON, "POSITRON"); _add_pid_name(PROTON, "PROTON"); _add_pid_name(ANTIPROTON, "ANTIPROTON"); _add_pid_name(PHOTON, "PHOTON"); _add_pid_name(NEUTRON, "NEUTRON"); _add_pid_name(ANTINEUTRON, "ANTINEUTRON"); _add_pid_name(MUON, "MUON"); _add_pid_name(ANTIMUON, "ANTIMUON"); _add_pid_name(NU_E, "NU_E"); _add_pid_name(NU_EBAR, "NU_EBAR"); _add_pid_name(NU_MU, "NU_MU"); _add_pid_name(NU_MUBAR, "NU_MUBAR"); _add_pid_name(NU_TAU, "NU_TAU"); _add_pid_name(NU_TAUBAR, "NU_TAUBAR"); _add_pid_name(PIPLUS, "PIPLUS"); _add_pid_name(PIMINUS, "PIMINUS"); _add_pid_name(TAU, "TAU"); _add_pid_name(WPLUSBOSON, "WPLUSBOSON"); _add_pid_name(WMINUSBOSON, "WMINUSBOSON"); _add_pid_name(ZBOSON, "ZBOSON"); _add_pid_name(HIGGS, "HIGGS"); _add_pid_name(ANTITAU, "ANTITAU"); // _add_pid_name(PHOTOELECTRON, "PHOTOELECTRON"); // _add_pid_name(PHOTOPOSITRON, "PHOTOPOSITRON"); // _add_pid_name(PHOTOMUON, "PHOTOMUON"); // _add_pid_name(PHOTOANTIMUON, "PHOTOANTIMUON"); // _add_pid_name(PHOTOTAU, "PHOTOTAU"); // _add_pid_name(PHOTOANTITAU, "PHOTOANTITAU"); _add_pid_name(ANY, "*"); } void _add_pid_name(PdgId pid, const std::string& pname) { _ids_names[pid] = pname; _names_ids[pname] = pid; } static ParticleNames* _instance; std::map<PdgId, std::string> _ids_names; std::map<std::string, PdgId> _names_ids; }; /// Print a PdgId as a named string. inline const std::string& toParticleName(PdgId p) { return ParticleNames::particleName(p); } /// Print a PdgId as a named string. inline PdgId toParticleId(const std::string& pname) { return ParticleNames::particleId(pname); } /// Convenience maker of particle ID pairs from PdgIds. inline std::pair<PdgId,PdgId> make_pdgid_pair(PdgId a, PdgId b) { return make_pair(a, b); } /// Convenience maker of particle ID pairs from particle names. inline std::pair<PdgId,PdgId> make_pdgid_pair(const std::string& a, const std::string& b) { const PdgId pa = toParticleId(a); const PdgId pb = toParticleId(b); return make_pair(pa, pb); } /// Print a PdgIdPair as a string. inline std::string toBeamsString(const PdgIdPair& pair) { string out = "[" + toParticleName(pair.first) + ", " + toParticleName(pair.second) + "]"; return out; } } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/BeamConstraint.hh���������������������������������������������������������0000644�0001750�0001750�00000004510�12116077757�017033� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_BeamConstraint_HH #define RIVET_BeamConstraint_HH #include "Rivet/Rivet.hh" #include "Rivet/ParticleName.hh" #include "Rivet/Particle.hh" #include <iostream> namespace Rivet { /// Find whether ParticleName @a p is compatible with the /// template ParticleName @a allowed. Effectively this is /// asking whether @a p is a subset of @a allowed. inline bool compatible(PdgId p, PdgId allowed) { //assert(p != ANY); return (allowed == ANY || p == allowed); } /// Find whether PdgIdPair @a pair is compatible with the template /// PdgIdPair @a allowedpair. This assesses whether either of the /// two possible pairings of @a pair's constituents is compatible. inline bool compatible(const PdgIdPair& pair, const PdgIdPair& allowedpair) { bool oneToOne = compatible(pair.first, allowedpair.first); bool twoToTwo = compatible(pair.second, allowedpair.second); bool oneToTwo = compatible(pair.first, allowedpair.second); bool twoToOne = compatible(pair.second, allowedpair.first); return (oneToOne && twoToTwo) || (oneToTwo && twoToOne); } /// Check particle compatibility of Particle pairs inline bool compatible(const ParticlePair& ppair, const PdgIdPair& allowedpair) { return compatible(make_pdgid_pair(ppair.first.pdgId(), ppair.second.pdgId()), allowedpair); } /// Check particle compatibility of Particle pairs (for symmetric completeness) inline bool compatible(const PdgIdPair& allowedpair, const ParticlePair& ppair) { return compatible(ppair, allowedpair); } /// Find whether a PdgIdPair @a pair is compatible with at least one template /// beam pair in a set @a allowedpairs. inline bool compatible(const PdgIdPair& pair, const set<PdgIdPair>& allowedpairs) { for (set<PdgIdPair>::const_iterator bp = allowedpairs.begin(); bp != allowedpairs.end(); ++bp) { if (compatible(pair, *bp)) return true; } return false; } /// Return the intersection of two sets of {PdgIdPair}s. inline set<PdgIdPair> intersection(const set<PdgIdPair>& a, const set<PdgIdPair>& b) { set<PdgIdPair> ret; for (set<PdgIdPair>::const_iterator bp = a.begin(); bp != a.end(); ++bp) { if (compatible(*bp, b)) ret.insert(*bp); } return ret; } } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Analyses/�����������������������������������������������������������������0000755�0001750�0001750�00000000000�12131473213�015340� 5����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Analyses/MC_JetAnalysis.hh������������������������������������������������0000644�0001750�0001750�00000003531�12116077757�020510� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_MC_JetAnalysis_HH #define RIVET_MC_JetAnalysis_HH #include "Rivet/Analysis.hh" #include "Rivet/Projections/FinalState.hh" #include "LWH/Histogram1D.h" namespace Rivet { /// @brief Base class providing common functionality for MC jet validation analyses class MC_JetAnalysis : public Analysis { public: /// Default constructor. MC_JetAnalysis(const string& name, size_t njet, const string& jetpro_name, double jetptcut=20*GeV); /// @name Analysis methods //@{ virtual void init(); virtual void analyze(const Event& event); virtual void finalize(); //@} protected: /// The number of jets for which histograms are to be initialised size_t m_njet; /// The name of the jet projection to be used for this analysis /// (this projection has to be registered by the derived analysis!) const std::string m_jetpro_name; /// Jet pT cutoff double m_jetptcut; /// @todo Add jet masses and d(rap) /// @name Histograms //@{ std::vector<AIDA::IHistogram1D *> _h_pT_jet; std::vector<AIDA::IHistogram1D *> _h_eta_jet; std::vector<shared_ptr<LWH::Histogram1D> > _h_eta_jet_plus, _h_eta_jet_minus; std::vector<AIDA::IHistogram1D *> _h_rap_jet; std::vector<shared_ptr<LWH::Histogram1D> > _h_rap_jet_plus, _h_rap_jet_minus; std::vector<AIDA::IHistogram1D *> _h_mass_jet; std::map<std::pair<size_t, size_t>, AIDA::IHistogram1D*> _h_deta_jets; std::map<std::pair<size_t, size_t>, AIDA::IHistogram1D*> _h_dphi_jets; std::map<std::pair<size_t, size_t>, AIDA::IHistogram1D*> _h_dR_jets; AIDA::IHistogram1D * _h_jet_multi_exclusive; AIDA::IHistogram1D * _h_jet_multi_inclusive; AIDA::IDataPointSet * _h_jet_multi_ratio; AIDA::IHistogram1D * _h_jet_HT; //@} }; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Analyses/MC_JetSplittings.hh����������������������������������������������0000644�0001750�0001750�00000002105�12116077757�021061� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_MC_JetSplittings_HH #define RIVET_MC_JetSplittings_HH #include "Rivet/Analysis.hh" #include "Rivet/Projections/FinalState.hh" #include "LWH/Histogram1D.h" namespace Rivet { /// @brief Base class providing common functionality for MC jet validation analyses class MC_JetSplittings : public Analysis { public: /// Default constructor. MC_JetSplittings(const string& name, size_t njet, const string& jetpro_name); /// @name Analysis methods //@{ virtual void init(); virtual void analyze(const Event& event); virtual void finalize(); //@} protected: /// The number of jets for which histograms are to be initialised size_t m_njet; /// The name of the jet projection to be used for this analysis /// (this projection has to be registered by the derived analysis!) const std::string m_jetpro_name; /// @name Histograms //@{ std::vector<AIDA::IHistogram1D *> _h_log10_d; std::vector<AIDA::IDataPointSet *> _h_log10_R; //@} }; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Makefile.in���������������������������������������������������������������0000644�0001750�0001750�00000047131�12116616065�015643� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include/Rivet DIST_COMMON = $(nobase_dist_noinst_HEADERS) \ $(nobase_pkginclude_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(nobase_dist_noinst_HEADERS) $(nobase_pkginclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ nobase_dist_noinst_HEADERS = Tools/osdir.hh nobase_pkginclude_HEADERS = Rivet.hh Exceptions.hh RivetBoost.hh \ RivetHepMC.hh RivetSTL.hh Constraints.hh BeamConstraint.hh \ Event.hh Event.fhh ParticleBase.hh Jet.hh Particle.hh \ Particle.fhh RivetAIDA.hh RivetAIDA.fhh Analysis.hh \ Analysis.fhh AnalysisBuilder.hh AnalysisHandler.hh \ AnalysisHandler.fhh AnalysisInfo.hh ProjectionHandler.hh \ ProjectionApplier.hh Projection.hh Projection.fhh Cmp.hh \ Cmp.fhh ParticleName.hh AnalysisLoader.hh HistoHandler.hh \ HistoFormat.hh Run.hh Config/RivetConfig.hh \ Config/BuildOptions.hh Projections/AxesDefinition.hh \ Projections/Beam.hh Projections/BeamThrust.hh \ Projections/CentralEtHCM.hh Projections/ChargedFinalState.hh \ Projections/ChargedLeptons.hh Projections/ClusteredPhotons.hh \ Projections/ConstLossyFinalState.hh \ Projections/DISFinalState.hh Projections/DISKinematics.hh \ Projections/DISLepton.hh Projections/FastJets.hh \ Projections/FinalState.hh Projections/FoxWolframMoments.hh \ Projections/FParameter.hh Projections/HadronicFinalState.hh \ Projections/Hemispheres.hh Projections/IdentifiedFinalState.hh \ Projections/InitialQuarks.hh Projections/InvMassFinalState.hh \ Projections/IsolationEstimators.hh \ Projections/IsolationProjection.hh \ Projections/IsolationTools.hh Projections/JetAlg.hh \ Projections/JetShape.hh \ Projections/LeadingParticlesFinalState.hh \ Projections/LeptonClusters.hh Projections/LossyFinalState.hh \ Projections/MergedFinalState.hh Projections/MissingMomentum.hh \ Projections/Multiplicity.hh Projections/NeutralFinalState.hh \ Projections/NonHadronicFinalState.hh \ Projections/ParisiTensor.hh Projections/PVertex.hh \ Projections/Sphericity.hh Projections/Spherocity.hh \ Projections/SVertex.hh Projections/Thrust.hh \ Projections/TotalVisibleMomentum.hh \ Projections/TriggerCDFRun0Run1.hh \ Projections/TriggerCDFRun2.hh Projections/TriggerUA5.hh \ Projections/UnstableFinalState.hh \ Projections/VetoedFinalState.hh \ Projections/VisibleFinalState.hh Projections/WFinder.hh \ Projections/ZFinder.hh Analyses/MC_JetAnalysis.hh \ Analyses/MC_JetSplittings.hh Tools/Logging.hh \ Tools/Logging.fhh Tools/Utils.hh Tools/RivetPaths.hh \ Tools/BinnedHistogram.hh Tools/ParticleIdUtils.hh \ Tools/TypeTraits.hh Tools/RivetMT2.hh Math/Matrices.hh \ Math/Vector3.hh Math/VectorN.hh Math/MatrixN.hh \ Math/MatrixDiag.hh Math/MathHeader.hh Math/Vectors.hh \ Math/LorentzTrans.hh Math/Matrix3.hh Math/MathUtils.hh \ Math/Vector4.hh Math/Math.hh Math/Units.hh Math/Constants.hh \ Math/eigen/util.h Math/eigen/regressioninternal.h \ Math/eigen/regression.h Math/eigen/vector.h \ Math/eigen/ludecompositionbase.h Math/eigen/ludecomposition.h \ Math/eigen/linearsolver.h Math/eigen/linearsolverbase.h \ Math/eigen/matrix.h Math/eigen/vectorbase.h \ Math/eigen/projective.h Math/eigen/matrixbase.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Rivet/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/Rivet/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-nobase_pkgincludeHEADERS: $(nobase_pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(nobase_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ $(am__nobase_list) | while read dir files; do \ xfiles=; for file in $$files; do \ if test -f "$$file"; then xfiles="$$xfiles $$file"; \ else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ test -z "$$xfiles" || { \ test "x$$dir" = x. || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)/$$dir'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)/$$dir"; }; \ echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(pkgincludedir)/$$dir'"; \ $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(pkgincludedir)/$$dir" || exit $$?; }; \ done uninstall-nobase_pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(nobase_pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-nobase_pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-nobase_pkgincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-nobase_pkgincludeHEADERS \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-nobase_pkgincludeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Analysis.fhh��������������������������������������������������������������0000644�0001750�0001750�00000000507�12116077757�016055� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef Rivet_Analysis_FHH #define Rivet_Analysis_FHH #include "Rivet/Cmp.fhh" //#include <boost/shared_ptr.hpp> namespace Rivet { class Analysis; /// Smart (shared) pointer for handling projections. //typedef boost::shared_ptr<Analysis> AnalysisPtr; typedef Analysis* AnalysisPtr; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/RivetSTL.hh���������������������������������������������������������������0000644�0001750�0001750�00000001627�12116077757�015604� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_RivetSTL_HH #define RIVET_RivetSTL_HH #include <typeinfo> #include <set> #include <list> #include <map> #include <utility> #include <string> #include <sstream> #include <vector> #include <stdexcept> #include <iostream> #include <iomanip> #include <cmath> #include <limits> #include <cassert> #include <fstream> namespace Rivet { // Convenient imports of common STL classes and functions. using std::set; using std::map; using std::multimap; using std::type_info; using std::string; using std::stringstream; using std::less; using std::list; using std::vector; using std::pair; using std::make_pair; using std::runtime_error; using std::min; using std::max; using std::abs; using std::numeric_limits; using std::ostream; using std::istream; using std::cout; using std::cin; using std::cerr; using std::setw; using std::pow; using std::endl; } #endif ���������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Rivet.hh������������������������������������������������������������������0000644�0001750�0001750�00000003445�12116077757�015221� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef RIVET_Rivet_HH #define RIVET_Rivet_HH #include "Rivet/Config/RivetConfig.hh" #include "Rivet/Config/BuildOptions.hh" // Bring selected STL classes into the Rivet namespace #include "Rivet/RivetSTL.hh" // Macro to help with overzealous compiler warnings #ifdef UNUSED #elif defined(__GNUC__) # define UNUSED(x) UNUSED_ ## x __attribute__((unused)) #elif defined(__LCLINT__) # define UNUSED(x) /*@unused@*/ x #else # define UNUSED(x) x #endif namespace Rivet { /// A sensible default maximum value of rapidity for Rivet analyses to use. static const double MAXRAPIDITY = 100000.0; /// @deprecated static const double MaxRapidity = 100000.0; /// A function to get the Rivet version string string version(); } // AIDA headers #include "Rivet/RivetAIDA.fhh" // HepMC headers and helper functions #include "Rivet/RivetHepMC.hh" // Now import some Rivet classes #include "Rivet/Exceptions.hh" #include "Rivet/Math/MathUtils.hh" #include "Rivet/Math/Vectors.hh" #include "Rivet/Math/Matrices.hh" #include "Rivet/Math/Units.hh" #include "Rivet/Tools/Utils.hh" #include "Rivet/Tools/RivetPaths.hh" #include "Rivet/ParticleName.hh" #include "Rivet/Particle.hh" namespace Rivet { /// Convenient function for streaming out vectors of any streamable object. template<typename T> inline std::ostream& operator<<(std::ostream& os, const std::vector<T>& vec) { os << "[ "; for (size_t i=0; i<vec.size(); ++i) { os << vec[i] << " "; } os << "]"; return os; } /// Convenient function for streaming out lists of any streamable object. template<typename T> inline std::ostream& operator<<(std::ostream& os, const std::list<T>& vec) { os << "[ "; for (size_t i=0; i<vec.size(); ++i) { os << vec[i] << " "; } os << "]"; return os; } } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/AnalysisInfo.hh�����������������������������������������������������������0000644�0001750�0001750�00000017332�12116077757�016527� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_AnalysisInfo_HH #define RIVET_AnalysisInfo_HH #include "Rivet/Rivet.hh" #include <ostream> namespace Rivet { class AnalysisInfo { public: /// Static factory method: returns null pointer if no metadata found static AnalysisInfo* make(const std::string& name); /// @name Standard constructors and destructors. //@{ /// The default constructor. AnalysisInfo() { clear(); } /// The destructor. ~AnalysisInfo() { } //@} public: /// @name Metadata /// Metadata is used for querying from the command line and also for /// building web pages and the analysis pages in the Rivet manual. //@{ /// Get the name of the analysis. By default this is computed using the /// experiment, year and Inspire/Spires ID metadata methods. std::string name() const { if (!_name.empty()) return _name; if (!experiment().empty() && !year().empty()) { if (!inspireId().empty()) { return experiment() + "_" + year() + "_I" + inspireId(); } else if (!spiresId().empty()) { return experiment() + "_" + year() + "_S" + spiresId(); } } return ""; } /// Set the name of the analysis. void setName(const std::string& name) { _name = name; } /// Get the Inspire (SPIRES replacement) ID code for this analysis. const std::string& inspireId() const { return _inspireId; } /// Set the Inspire (SPIRES replacement) ID code for this analysis. void setInspireId(const std::string& inspireId) { _inspireId = inspireId; } /// Get the SPIRES ID code for this analysis. const std::string& spiresId() const { return _spiresId; } /// Set the SPIRES ID code for this analysis. void setSpiresId(const std::string& spiresId) { _spiresId = spiresId; } /// @brief Names & emails of paper/analysis authors. /// Names and email of authors in 'NAME \<EMAIL\>' format. The first /// name in the list should be the primary contact person. const std::vector<std::string>& authors() const { return _authors; } /// Set the author list. void setAuthors(const std::vector<std::string>& authors) { _authors = authors; } /// @brief Get a short description of the analysis. /// Short (one sentence) description used as an index entry. /// Use @a description() to provide full descriptive paragraphs /// of analysis details. const std::string& summary() const { return _summary; } /// Set the short description for this analysis. void setSummary(const std::string& summary) { _summary = summary; } /// @brief Get a full description of the analysis. /// Full textual description of this analysis, what it is useful for, /// what experimental techniques are applied, etc. Should be treated /// as a chunk of restructuredText (http://docutils.sourceforge.net/rst.html), /// with equations to be rendered as LaTeX with amsmath operators. const std::string& description() const { return _description; } /// Set the full description for this analysis. void setDescription(const std::string& description) { _description = description; } /// @brief Information about the events needed as input for this analysis. /// Event types, energies, kinematic cuts, particles to be considered /// stable, etc. etc. Should be treated as a restructuredText bullet list /// (http://docutils.sourceforge.net/rst.html) const std::string& runInfo() const { return _runInfo; } /// Set the full description for this analysis. void setRunInfo(const std::string& runInfo) { _runInfo = runInfo; } /// Beam particle types const std::vector<PdgIdPair>& beams() const { return _beams; } /// Set beam particle types void setBeams(const std::vector<PdgIdPair>& beams) { _beams = beams; } /// Sets of valid beam energies const std::vector<std::pair<double,double> >& energies() const { return _energies; } /// Set the valid beam energies void setEnergies(const std::vector<std::pair<double, double> >& energies) { _energies = energies; } /// Experiment which performed and published this analysis. const std::string& experiment() const { return _experiment; } /// Set the experiment which performed and published this analysis. void setExperiment(const std::string& experiment) { _experiment = experiment; } /// Collider on which the experiment ran. const std::string& collider() const { return _collider; } /// Set the collider on which the experiment ran. void setCollider(const std::string& collider) { _collider = collider; } /// @brief When the original experimental analysis was published. /// When the refereed paper on which this is based was published, /// according to SPIRES. const std::string& year() const { return _year; } /// Set the year in which the original experimental analysis was published. void setYear(const std::string& year) { _year = year; } /// Journal and preprint references. const std::vector<std::string>& references() const { return _references; } /// Set the journal and preprint reference list. void setReferences(const std::vector<std::string>& references) { _references = references; } /// BibTeX citation key for this article. const std::string& bibKey() const { return _bibKey;} /// Set the BibTeX citation key for this article. void setBibKey(const std::string& bibKey) { _bibKey = bibKey; } /// BibTeX citation entry for this article. const std::string& bibTeX() const { return _bibTeX; } /// Set the BibTeX citation entry for this article. void setBibTeX(const std::string& bibTeX) { _bibTeX = bibTeX; } /// Whether this analysis is trusted (in any way!) const std::string& status() const { return _status; } /// Set the analysis code status. void setStatus(const std::string& status) { _status = status; } /// Any work to be done on this analysis. const std::vector<std::string>& todos() const { return _todos; } /// Set the to-do list. void setTodos(const std::vector<std::string>& todos) { _todos = todos; } /// Return true if this analysis needs to know the process cross-section. bool needsCrossSection() const { return _needsCrossSection; } /// Return true if this analysis needs to know the process cross-section. void setNeedsCrossSection(bool needXsec) { _needsCrossSection = needXsec; } //@} private: std::string _name; std::string _spiresId, _inspireId; std::vector<std::string> _authors; std::string _summary; std::string _description; std::string _runInfo; std::string _experiment; std::string _collider; std::vector<std::pair<PdgId, PdgId> > _beams; std::vector<std::pair<double, double> > _energies; std::string _year; std::vector<std::string> _references; std::string _bibKey; std::string _bibTeX; //std::string _bibTeXBody; //< Was thinking of avoiding duplication of BibKey... std::string _status; std::vector<std::string> _todos; bool _needsCrossSection; void clear() { _name = ""; _spiresId = ""; _inspireId = ""; _authors.clear(); _summary = ""; _description = ""; _runInfo = ""; _experiment = ""; _collider = ""; _beams.clear(); _energies.clear(); _year = ""; _references.clear(); _bibKey = ""; _bibTeX = ""; //_bibTeXBody = ""; _status = ""; _todos.clear(); _needsCrossSection = false; } }; /// String representation std::string toString(const AnalysisInfo& ai); /// Stream an AnalysisInfo as a text description inline std::ostream& operator<<(std::ostream& os, const AnalysisInfo& ai) { os << toString(ai); return os; } } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Makefile.am���������������������������������������������������������������0000644�0001750�0001750�00000007206�12116077757�015642� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Internal headers - not to be installed nobase_dist_noinst_HEADERS = ## Public headers - to be installed nobase_pkginclude_HEADERS = ## Rivet interface nobase_pkginclude_HEADERS += \ Rivet.hh Exceptions.hh \ RivetBoost.hh RivetHepMC.hh RivetSTL.hh \ Constraints.hh BeamConstraint.hh \ Event.hh Event.fhh \ ParticleBase.hh Jet.hh \ Particle.hh Particle.fhh \ RivetAIDA.hh RivetAIDA.fhh \ Analysis.hh Analysis.fhh AnalysisBuilder.hh \ AnalysisHandler.hh AnalysisHandler.fhh \ AnalysisInfo.hh ProjectionHandler.hh \ ProjectionApplier.hh \ Projection.hh Projection.fhh \ Cmp.hh Cmp.fhh \ ParticleName.hh AnalysisLoader.hh \ HistoHandler.hh HistoFormat.hh \ Run.hh nobase_pkginclude_HEADERS += \ Config/RivetConfig.hh \ Config/BuildOptions.hh ## Projections nobase_pkginclude_HEADERS += \ Projections/AxesDefinition.hh \ Projections/Beam.hh \ Projections/BeamThrust.hh \ Projections/CentralEtHCM.hh \ Projections/ChargedFinalState.hh \ Projections/ChargedLeptons.hh \ Projections/ClusteredPhotons.hh \ Projections/ConstLossyFinalState.hh \ Projections/DISFinalState.hh \ Projections/DISKinematics.hh \ Projections/DISLepton.hh \ Projections/FastJets.hh \ Projections/FinalState.hh \ Projections/FoxWolframMoments.hh \ Projections/FParameter.hh \ Projections/HadronicFinalState.hh \ Projections/Hemispheres.hh \ Projections/IdentifiedFinalState.hh \ Projections/InitialQuarks.hh \ Projections/InvMassFinalState.hh \ Projections/IsolationEstimators.hh \ Projections/IsolationProjection.hh \ Projections/IsolationTools.hh \ Projections/JetAlg.hh \ Projections/JetShape.hh \ Projections/LeadingParticlesFinalState.hh \ Projections/LeptonClusters.hh \ Projections/LossyFinalState.hh \ Projections/MergedFinalState.hh \ Projections/MissingMomentum.hh \ Projections/Multiplicity.hh \ Projections/NeutralFinalState.hh \ Projections/NonHadronicFinalState.hh \ Projections/ParisiTensor.hh \ Projections/PVertex.hh \ Projections/Sphericity.hh \ Projections/Spherocity.hh \ Projections/SVertex.hh \ Projections/Thrust.hh \ Projections/TotalVisibleMomentum.hh \ Projections/TriggerCDFRun0Run1.hh \ Projections/TriggerCDFRun2.hh \ Projections/TriggerUA5.hh \ Projections/UnstableFinalState.hh \ Projections/VetoedFinalState.hh \ Projections/VisibleFinalState.hh \ Projections/WFinder.hh \ Projections/ZFinder.hh ## Analysis base class headers nobase_pkginclude_HEADERS += \ Analyses/MC_JetAnalysis.hh \ Analyses/MC_JetSplittings.hh ## Tools nobase_pkginclude_HEADERS += \ Tools/Logging.hh \ Tools/Logging.fhh \ Tools/Utils.hh \ Tools/RivetPaths.hh \ Tools/BinnedHistogram.hh \ Tools/ParticleIdUtils.hh \ Tools/TypeTraits.hh \ Tools/RivetMT2.hh nobase_dist_noinst_HEADERS += \ Tools/osdir.hh ## Maths nobase_pkginclude_HEADERS += \ Math/Matrices.hh \ Math/Vector3.hh \ Math/VectorN.hh \ Math/MatrixN.hh \ Math/MatrixDiag.hh \ Math/MathHeader.hh \ Math/Vectors.hh \ Math/LorentzTrans.hh \ Math/Matrix3.hh \ Math/MathUtils.hh \ Math/Vector4.hh \ Math/Math.hh \ Math/Units.hh \ Math/Constants.hh \ Math/eigen/util.h \ Math/eigen/regressioninternal.h \ Math/eigen/regression.h \ Math/eigen/vector.h \ Math/eigen/ludecompositionbase.h \ Math/eigen/ludecomposition.h \ Math/eigen/linearsolver.h \ Math/eigen/linearsolverbase.h \ Math/eigen/matrix.h \ Math/eigen/vectorbase.h \ Math/eigen/projective.h \ Math/eigen/matrixbase.h ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/AnalysisLoader.hh���������������������������������������������������������0000644�0001750�0001750�00000002426�12116077757�017040� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_AnalysisLoader_HH #define RIVET_AnalysisLoader_HH #include "Rivet/Rivet.hh" #include "Rivet/Tools/Logging.fhh" #include <map> #include <string> namespace Rivet { // Forward declarations class Analysis; class AnalysisBuilderBase; /// @brief Internal class which loads and registers analyses from plugin libs class AnalysisLoader { public: /// Get all the available analyses' names. static vector<string> analysisNames(); static set<string> getAllAnalysisNames(); /// Get an analysis by name. /// Warning: a name arg which matches no known analysis will return a null /// pointer. Check your return values before using them! static Analysis* getAnalysis(const string& analysisname); /// Get all the available analyses. static vector<Analysis*> getAllAnalyses(); private: /// Allow the analysis builders to call the private _registerBuilder function friend class AnalysisBuilderBase; /// Register a new analysis builder static void _registerBuilder(const AnalysisBuilderBase* a); /// Load the available analyses at runtime. static void _loadAnalysisPlugins(); typedef map<string, const AnalysisBuilderBase*> AnalysisBuilderMap; static AnalysisBuilderMap _ptrs; }; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Particle.hh���������������������������������������������������������������0000644�0001750�0001750�00000024217�12123100615�015645� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_Particle_HH #define RIVET_Particle_HH #include "Rivet/Rivet.hh" #include "Rivet/Particle.fhh" #include "Rivet/ParticleBase.hh" #include "Rivet/ParticleName.hh" #include "Rivet/Math/Vectors.hh" #include "Rivet/Tools/Logging.hh" namespace Rivet { /// Representation of particles from a HepMC::GenEvent. class Particle : public ParticleBase { public: /// Default constructor. /// @deprecated A particle without info is useless. This only exists to keep STL containers happy. Particle() : ParticleBase(), _original(0), _id(0), _momentum() { } /// Constructor without GenParticle. Particle(PdgId pid, const FourMomentum& mom) : ParticleBase(), _original(0), _id(pid), _momentum(mom) { } /// Constructor from a HepMC GenParticle. Particle(const GenParticle& gp) : ParticleBase(), _original(&gp), _id(gp.pdg_id()), _momentum(gp.momentum()) { } public: /// Get a const reference to the original GenParticle. const GenParticle& genParticle() const { assert(_original); return *_original; } /// Check if the particle corresponds to a GenParticle. bool hasGenParticle() const { return bool(_original); } /// The PDG ID code for this Particle. PdgId pdgId() const { return _id; } /// Set the momentum of this Particle. Particle& setMomentum(const FourMomentum& momentum) { _momentum = momentum; return *this; } /// The momentum of this Particle. const FourMomentum& momentum() const { return _momentum; } /// The energy of this Particle. double energy() const { return momentum().E(); } /// The mass of this Particle. double mass() const { return momentum().mass(); } /// @todo Re-enable // /// The charge of this Particle. // double charge() const { // return PID::charge(*this); // } /// @todo Re-enable // /// Three times the charge of this Particle (i.e. integer multiple of smallest quark charge). // int threeCharge() const { // return PID::threeCharge(*this); // } /// Check whether a given PID is found in the GenParticle's ancestor list /// /// @note This question is valid in MC, but may not be answerable /// experimentally -- use this function with care when replicating /// experimental analyses! bool hasAncestor(PdgId pdg_id) const; /// @brief Determine whether the particle is from a hadron or tau decay /// /// Specifically, walk up the ancestor chain until a status 2 hadron or /// tau is found, if at all. /// /// @note This question is valid in MC, but may not be answerable /// experimentally -- use this function with care when replicating /// experimental analyses! bool fromDecay() const; /// @todo Add methods like fromS/C/BHadron(), fromTau()? private: /// A pointer to the original GenParticle from which this Particle is projected. const GenParticle* _original; /// The PDG ID code for this Particle. PdgId _id; /// The momentum of this projection of the Particle. FourMomentum _momentum; }; /// @name String representation //@{ /// Print a ParticlePair as a string. inline std::string toString(const ParticlePair& pair) { stringstream out; out << "[" << toParticleName(pair.first.pdgId()) << " @ " << pair.first.momentum().E()/GeV << " GeV, " << toParticleName(pair.second.pdgId()) << " @ " << pair.second.momentum().E()/GeV << " GeV]"; return out.str(); } /// Allow ParticlePair to be passed to an ostream. inline std::ostream& operator<<(std::ostream& os, const ParticlePair& pp) { os << toString(pp); return os; } //@} /// @name Comparison functors //@{ /// Sort by descending transverse momentum, \f$ p_\perp \f$ inline bool cmpParticleByPt(const Particle& a, const Particle& b) { return a.momentum().pT() > b.momentum().pT(); } /// Sort by ascending transverse momentum, \f$ p_\perp \f$ inline bool cmpParticleByAscPt(const Particle& a, const Particle& b) { return a.momentum().pT() < b.momentum().pT(); } /// Sort by descending momentum, \f$ p \f$ inline bool cmpParticleByP(const Particle& a, const Particle& b) { return a.momentum().vector3().mod() > b.momentum().vector3().mod(); } /// Sort by ascending momentum, \f$ p \f$ inline bool cmpParticleByAscP(const Particle& a, const Particle& b) { return a.momentum().vector3().mod() < b.momentum().vector3().mod(); } /// Sort by descending transverse energy, \f$ E_\perp \f$ inline bool cmpParticleByEt(const Particle& a, const Particle& b) { return a.momentum().Et() > b.momentum().Et(); } /// Sort by ascending transverse energy, \f$ E_\perp \f$ inline bool cmpParticleByAscEt(const Particle& a, const Particle& b) { return a.momentum().Et() < b.momentum().Et(); } /// Sort by descending energy, \f$ E \f$ inline bool cmpParticleByE(const Particle& a, const Particle& b) { return a.momentum().E() > b.momentum().E(); } /// Sort by ascending energy, \f$ E \f$ inline bool cmpParticleByAscE(const Particle& a, const Particle& b) { return a.momentum().E() < b.momentum().E(); } /// Sort by descending pseudorapidity, \f$ \eta \f$ inline bool cmpParticleByDescPseudorapidity(const Particle& a, const Particle& b) { return a.momentum().pseudorapidity() > b.momentum().pseudorapidity(); } /// Sort by ascending pseudorapidity, \f$ \eta \f$ inline bool cmpParticleByAscPseudorapidity(const Particle& a, const Particle& b) { return a.momentum().pseudorapidity() < b.momentum().pseudorapidity(); } /// Sort by descending absolute pseudorapidity, \f$ |\eta| \f$ inline bool cmpParticleByDescAbsPseudorapidity(const Particle& a, const Particle& b) { return fabs(a.momentum().pseudorapidity()) > fabs(b.momentum().pseudorapidity()); } /// Sort by ascending absolute pseudorapidity, \f$ |\eta| \f$ inline bool cmpParticleByAscAbsPseudorapidity(const Particle& a, const Particle& b) { return fabs(a.momentum().pseudorapidity()) < fabs(b.momentum().pseudorapidity()); } /// Sort by descending rapidity, \f$ y \f$ inline bool cmpParticleByDescRapidity(const Particle& a, const Particle& b) { return a.momentum().rapidity() > b.momentum().rapidity(); } /// Sort by ascending rapidity, \f$ y \f$ inline bool cmpParticleByAscRapidity(const Particle& a, const Particle& b) { return a.momentum().rapidity() < b.momentum().rapidity(); } /// Sort by descending absolute rapidity, \f$ |y| \f$ inline bool cmpParticleByDescAbsRapidity(const Particle& a, const Particle& b) { return fabs(a.momentum().rapidity()) > fabs(b.momentum().rapidity()); } /// Sort by ascending absolute rapidity, \f$ |y| \f$ inline bool cmpParticleByAscAbsRapidity(const Particle& a, const Particle& b) { return fabs(a.momentum().rapidity()) < fabs(b.momentum().rapidity()); } //@} inline double deltaR(const Particle& p1, const Particle& p2, RapScheme scheme = PSEUDORAPIDITY) { return deltaR(p1.momentum(), p2.momentum(), scheme); } inline double deltaR(const Particle& p, const FourMomentum& v, RapScheme scheme = PSEUDORAPIDITY) { return deltaR(p.momentum(), v, scheme); } inline double deltaR(const Particle& p, const FourVector& v, RapScheme scheme = PSEUDORAPIDITY) { return deltaR(p.momentum(), v, scheme); } inline double deltaR(const Particle& p, const Vector3& v) { return deltaR(p.momentum(), v); } inline double deltaR(const Particle& p, double eta, double phi) { return deltaR(p.momentum(), eta, phi); } inline double deltaR(const FourMomentum& v, const Particle& p, RapScheme scheme = PSEUDORAPIDITY) { return deltaR(v, p.momentum(), scheme); } inline double deltaR(const FourVector& v, const Particle& p, RapScheme scheme = PSEUDORAPIDITY) { return deltaR(v, p.momentum(), scheme); } inline double deltaR(const Vector3& v, const Particle& p) { return deltaR(v, p.momentum()); } inline double deltaR(double eta, double phi, const Particle& p) { return deltaR(eta, phi, p.momentum()); } inline double deltaPhi(const Particle& p1, const Particle& p2) { return deltaPhi(p1.momentum(), p2.momentum()); } inline double deltaPhi(const Particle& p, const FourMomentum& v) { return deltaPhi(p.momentum(), v); } inline double deltaPhi(const Particle& p, const FourVector& v) { return deltaPhi(p.momentum(), v); } inline double deltaPhi(const Particle& p, const Vector3& v) { return deltaPhi(p.momentum(), v); } inline double deltaPhi(const Particle& p, double phi) { return deltaPhi(p.momentum(), phi); } inline double deltaPhi(const FourMomentum& v, const Particle& p) { return deltaPhi(v, p.momentum()); } inline double deltaPhi(const FourVector& v, const Particle& p) { return deltaPhi(v, p.momentum()); } inline double deltaPhi(const Vector3& v, const Particle& p) { return deltaPhi(v, p.momentum()); } inline double deltaPhi(double phi, const Particle& p) { return deltaPhi(phi, p.momentum()); } inline double deltaEta(const Particle& p1, const Particle& p2) { return deltaEta(p1.momentum(), p2.momentum()); } inline double deltaEta(const Particle& p, const FourMomentum& v) { return deltaEta(p.momentum(), v); } inline double deltaEta(const Particle& p, const FourVector& v) { return deltaEta(p.momentum(), v); } inline double deltaEta(const Particle& p, const Vector3& v) { return deltaEta(p.momentum(), v); } inline double deltaEta(const Particle& p, double eta) { return deltaEta(p.momentum(), eta); } inline double deltaEta(const FourMomentum& v, const Particle& p) { return deltaEta(v, p.momentum()); } inline double deltaEta(const FourVector& v, const Particle& p) { return deltaEta(v, p.momentum()); } inline double deltaEta(const Vector3& v, const Particle& p) { return deltaEta(v, p.momentum()); } inline double deltaEta(double eta, const Particle& p) { return deltaEta(eta, p.momentum()); } } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/Constraints.hh������������������������������������������������������������0000644�0001750�0001750�00000000167�12116077757�016435� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_CONSTRAINTS_HH #define RIVET_CONSTRAINTS_HH 1 #include "Rivet/BeamConstraint.hh" #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Rivet/AnalysisHandler.fhh�������������������������������������������������������0000644�0001750�0001750�00000000334�12116077757�017351� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// -*- C++ -*- #ifndef RIVET_AnalysisHandler_FH #define RIVET_AnalysisHandler_FH #include "Rivet/HistoFormat.hh" namespace Rivet { // Forward declaration of AnalysisHandler class class AnalysisHandler; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/TinyXML/������������������������������������������������������������������������0000755�0001750�0001750�00000000000�12116077757�014014� 5����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/TinyXML/tinyxml.h���������������������������������������������������������������0000644�0001750�0001750�00000172171�12116077757�015702� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* www.sourceforge.net/projects/tinyxml Original code (2.0 and earlier )copyright (c) 2000-2006 Lee Thomason (www.grinninglizard.com) This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef TINYXML_INCLUDED #define TINYXML_INCLUDED #ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable : 4530 ) #pragma warning( disable : 4786 ) #endif #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> // Help out windows: #if defined( _DEBUG ) && !defined( DEBUG ) #define DEBUG #endif #include <string> #include <iostream> #include <sstream> #define TIXML_STRING std::string // Deprecated library function hell. Compilers want to use the // new safe versions. This probably doesn't fully address the problem, // but it gets closer. There are too many compilers for me to fully // test. If you get compilation troubles, undefine TIXML_SAFE #define TIXML_SAFE #ifdef TIXML_SAFE #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) // Microsoft visual studio, version 2005 and higher. #define TIXML_SNPRINTF _snprintf_s #define TIXML_SNSCANF _snscanf_s #elif defined(_MSC_VER) && (_MSC_VER >= 1200 ) // Microsoft visual studio, version 6 and higher. //#pragma message( "Using _sn* functions." ) #define TIXML_SNPRINTF _snprintf #define TIXML_SNSCANF _snscanf #elif defined(__GNUC__) && (__GNUC__ >= 3 ) // GCC version 3 and higher.s //#warning( "Using sn* functions." ) #define TIXML_SNPRINTF snprintf #define TIXML_SNSCANF snscanf #endif #endif class TiXmlDocument; class TiXmlElement; class TiXmlComment; class TiXmlUnknown; class TiXmlAttribute; class TiXmlText; class TiXmlDeclaration; class TiXmlParsingData; const int TIXML_MAJOR_VERSION = 2; const int TIXML_MINOR_VERSION = 5; const int TIXML_PATCH_VERSION = 2; /* Internal structure for tracking location of items in the XML file. */ struct TiXmlCursor { TiXmlCursor() { Clear(); } void Clear() { row = col = -1; } int row; // 0 based. int col; // 0 based. }; /** If you call the Accept() method, it requires being passed a TiXmlVisitor class to handle callbacks. For nodes that contain other nodes (Document, Element) you will get called with a VisitEnter/VisitExit pair. Nodes that are always leaves are simple called with Visit(). If you return 'true' from a Visit method, recursive parsing will continue. If you return false, <b>no children of this node or its sibilings</b> will be Visited. All flavors of Visit methods have a default implementation that returns 'true' (continue visiting). You need to only override methods that are interesting to you. Generally Accept() is called on the TiXmlDocument, although all nodes suppert Visiting. You should never change the document from a callback. @sa TiXmlNode::Accept() */ class TiXmlVisitor { public: virtual ~TiXmlVisitor() {} /// Visit a document. virtual bool VisitEnter( const TiXmlDocument& doc ) { return true; } /// Visit a document. virtual bool VisitExit( const TiXmlDocument& doc ) { return true; } /// Visit an element. virtual bool VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute ) { return true; } /// Visit an element. virtual bool VisitExit( const TiXmlElement& element ) { return true; } /// Visit a declaration virtual bool Visit( const TiXmlDeclaration& declaration ) { return true; } /// Visit a text node virtual bool Visit( const TiXmlText& text ) { return true; } /// Visit a comment node virtual bool Visit( const TiXmlComment& comment ) { return true; } /// Visit an unknow node virtual bool Visit( const TiXmlUnknown& unknown ) { return true; } }; // Only used by Attribute::Query functions enum { TIXML_SUCCESS, TIXML_NO_ATTRIBUTE, TIXML_WRONG_TYPE }; // Used by the parsing routines. enum TiXmlEncoding { TIXML_ENCODING_UNKNOWN, TIXML_ENCODING_UTF8, TIXML_ENCODING_LEGACY }; const TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN; /** TiXmlBase is a base class for every class in TinyXml. It does little except to establish that TinyXml classes can be printed and provide some utility functions. In XML, the document and elements can contain other elements and other types of nodes. @verbatim A Document can contain: Element (container or leaf) Comment (leaf) Unknown (leaf) Declaration( leaf ) An Element can contain: Element (container or leaf) Text (leaf) Attributes (not on tree) Comment (leaf) Unknown (leaf) A Decleration contains: Attributes (not on tree) @endverbatim */ class TiXmlBase { friend class TiXmlNode; friend class TiXmlElement; friend class TiXmlDocument; public: TiXmlBase() : userData(0) {} virtual ~TiXmlBase() {} /** All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode.) Either or both cfile and str can be null. This is a formatted print, and will insert tabs and newlines. (For an unformatted stream, use the << operator.) */ virtual void Print( FILE* cfile, int depth ) const = 0; /** The world does not agree on whether white space should be kept or not. In order to make everyone happy, these global, static functions are provided to set whether or not TinyXml will condense all white space into a single space or not. The default is to condense. Note changing this value is not thread safe. */ static void SetCondenseWhiteSpace( bool condense ) { condenseWhiteSpace = condense; } /// Return the current white space setting. static bool IsWhiteSpaceCondensed() { return condenseWhiteSpace; } /** Return the position, in the original source file, of this node or attribute. The row and column are 1-based. (That is the first row and first column is 1,1). If the returns values are 0 or less, then the parser does not have a row and column value. Generally, the row and column value will be set when the TiXmlDocument::Load(), TiXmlDocument::LoadFile(), or any TiXmlNode::Parse() is called. It will NOT be set when the DOM was created from operator>>. The values reflect the initial load. Once the DOM is modified programmatically (by adding or changing nodes and attributes) the new values will NOT update to reflect changes in the document. There is a minor performance cost to computing the row and column. Computation can be disabled if TiXmlDocument::SetTabSize() is called with 0 as the value. @sa TiXmlDocument::SetTabSize() */ int Row() const { return location.row + 1; } int Column() const { return location.col + 1; } ///< See Row() void SetUserData( void* user ) { userData = user; } ///< Set a pointer to arbitrary user data. void* GetUserData() { return userData; } ///< Get a pointer to arbitrary user data. const void* GetUserData() const { return userData; } ///< Get a pointer to arbitrary user data. // Table that returs, for a given lead byte, the total number of bytes // in the UTF-8 sequence. static const int utf8ByteTable[256]; virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding /*= TIXML_ENCODING_UNKNOWN */ ) = 0; enum { TIXML_NO_ERROR = 0, TIXML_ERROR, TIXML_ERROR_OPENING_FILE, TIXML_ERROR_OUT_OF_MEMORY, TIXML_ERROR_PARSING_ELEMENT, TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME, TIXML_ERROR_READING_ELEMENT_VALUE, TIXML_ERROR_READING_ATTRIBUTES, TIXML_ERROR_PARSING_EMPTY, TIXML_ERROR_READING_END_TAG, TIXML_ERROR_PARSING_UNKNOWN, TIXML_ERROR_PARSING_COMMENT, TIXML_ERROR_PARSING_DECLARATION, TIXML_ERROR_DOCUMENT_EMPTY, TIXML_ERROR_EMBEDDED_NULL, TIXML_ERROR_PARSING_CDATA, TIXML_ERROR_DOCUMENT_TOP_ONLY, TIXML_ERROR_STRING_COUNT }; protected: static const char* SkipWhiteSpace( const char*, TiXmlEncoding encoding ); inline static bool IsWhiteSpace( char c ) { return ( isspace( (unsigned char) c ) || c == '\n' || c == '\r' ); } inline static bool IsWhiteSpace( int c ) { if ( c < 256 ) return IsWhiteSpace( (char) c ); return false; // Again, only truly correct for English/Latin...but usually works. } static bool StreamWhiteSpace( std::istream * in, TIXML_STRING * tag ); static bool StreamTo( std::istream * in, int character, TIXML_STRING * tag ); /* Reads an XML name into the string provided. Returns a pointer just past the last character of the name, or 0 if the function has an error. */ static const char* ReadName( const char* p, TIXML_STRING* name, TiXmlEncoding encoding ); /* Reads text. Returns a pointer past the given end tag. Wickedly complex options, but it keeps the (sensitive) code in one place. */ static const char* ReadText( const char* in, // where to start TIXML_STRING* text, // the string read bool ignoreWhiteSpace, // whether to keep the white space const char* endTag, // what ends this text bool ignoreCase, // whether to ignore case in the end tag TiXmlEncoding encoding ); // the current encoding // If an entity has been found, transform it into a character. static const char* GetEntity( const char* in, char* value, int* length, TiXmlEncoding encoding ); // Get a character, while interpreting entities. // The length can be from 0 to 4 bytes. inline static const char* GetChar( const char* p, char* _value, int* length, TiXmlEncoding encoding ) { assert( p ); if ( encoding == TIXML_ENCODING_UTF8 ) { *length = utf8ByteTable[ *((const unsigned char*)p) ]; assert( *length >= 0 && *length < 5 ); } else { *length = 1; } if ( *length == 1 ) { if ( *p == '&' ) return GetEntity( p, _value, length, encoding ); *_value = *p; return p+1; } else if ( *length ) { //strncpy( _value, p, *length ); // lots of compilers don't like this function (unsafe), // and the null terminator isn't needed for( int i=0; p[i] && i<*length; ++i ) { _value[i] = p[i]; } return p + (*length); } else { // Not valid text. return 0; } } // Puts a string to a stream, expanding entities as it goes. // Note this should not contian the '<', '>', etc, or they will be transformed into entities! static void PutString( const TIXML_STRING& str, TIXML_STRING* out ); // Return true if the next characters in the stream are any of the endTag sequences. // Ignore case only works for english, and should only be relied on when comparing // to English words: StringEqual( p, "version", true ) is fine. static bool StringEqual( const char* p, const char* endTag, bool ignoreCase, TiXmlEncoding encoding ); static const char* errorString[ TIXML_ERROR_STRING_COUNT ]; TiXmlCursor location; /// Field containing a generic user pointer void* userData; // None of these methods are reliable for any language except English. // Good for approximation, not great for accuracy. static int IsAlpha( unsigned char anyByte, TiXmlEncoding encoding ); static int IsAlphaNum( unsigned char anyByte, TiXmlEncoding encoding ); inline static int ToLower( int v, TiXmlEncoding encoding ) { if ( encoding == TIXML_ENCODING_UTF8 ) { if ( v < 128 ) return tolower( v ); return v; } else { return tolower( v ); } } static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ); private: TiXmlBase( const TiXmlBase& ); // not implemented. void operator=( const TiXmlBase& base ); // not allowed. struct Entity { const char* str; unsigned int strLength; char chr; }; enum { NUM_ENTITY = 5, MAX_ENTITY_LENGTH = 6 }; static Entity entity[ NUM_ENTITY ]; static bool condenseWhiteSpace; }; /** The parent class for everything in the Document Object Model. (Except for attributes). Nodes have siblings, a parent, and children. A node can be in a document, or stand on its own. The type of a TiXmlNode can be queried, and it can be cast to its more defined type. */ class TiXmlNode : public TiXmlBase { friend class TiXmlDocument; friend class TiXmlElement; public: /** An input stream operator, for every class. Tolerant of newlines and formatting, but doesn't expect them. */ friend std::istream& operator >> (std::istream& in, TiXmlNode& base); /** An output stream operator, for every class. Note that this outputs without any newlines or formatting, as opposed to Print(), which includes tabs and new lines. The operator<< and operator>> are not completely symmetric. Writing a node to a stream is very well defined. You'll get a nice stream of output, without any extra whitespace or newlines. But reading is not as well defined. (As it always is.) If you create a TiXmlElement (for example) and read that from an input stream, the text needs to define an element or junk will result. This is true of all input streams, but it's worth keeping in mind. A TiXmlDocument will read nodes until it reads a root element, and all the children of that root element. */ friend std::ostream& operator<< (std::ostream& out, const TiXmlNode& base); /// Appends the XML node or attribute to a std::string. friend std::string& operator<< (std::string& out, const TiXmlNode& base ); /** The types of XML nodes supported by TinyXml. (All the unsupported types are picked up by UNKNOWN.) */ enum NodeType { DOCUMENT, ELEMENT, COMMENT, UNKNOWN, TEXT, DECLARATION, TYPECOUNT }; virtual ~TiXmlNode(); /** The meaning of 'value' changes for the specific type of TiXmlNode. @verbatim Document: filename of the xml file Element: name of the element Comment: the comment text Unknown: the tag contents Text: the text string @endverbatim The subclasses will wrap this function. */ const char *Value() const { return value.c_str (); } /** Return Value() as a std::string. If you only use STL, this is more efficient than calling Value(). Only available in STL mode. */ const std::string& ValueStr() const { return value; } /** Changes the value of the node. Defined as: @verbatim Document: filename of the xml file Element: name of the element Comment: the comment text Unknown: the tag contents Text: the text string @endverbatim */ void SetValue(const char * _value) { value = _value;} /// STL std::string form. void SetValue( const std::string& _value ) { value = _value; } /// Delete all the children of this node. Does not affect 'this'. void Clear(); /// One step up the DOM. TiXmlNode* Parent() { return parent; } const TiXmlNode* Parent() const { return parent; } const TiXmlNode* FirstChild() const { return firstChild; } ///< The first child of this node. Will be null if there are no children. TiXmlNode* FirstChild() { return firstChild; } const TiXmlNode* FirstChild( const char * value ) const; ///< The first child of this node with the matching 'value'. Will be null if none found. /// The first child of this node with the matching 'value'. Will be null if none found. TiXmlNode* FirstChild( const char * _value ) { // Call through to the const version - safe since nothing is changed. Exiting syntax: cast this to a const (always safe) // call the method, cast the return back to non-const. return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->FirstChild( _value )); } const TiXmlNode* LastChild() const { return lastChild; } /// The last child of this node. Will be null if there are no children. TiXmlNode* LastChild() { return lastChild; } const TiXmlNode* LastChild( const char * value ) const; /// The last child of this node matching 'value'. Will be null if there are no children. TiXmlNode* LastChild( const char * _value ) { return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->LastChild( _value )); } const TiXmlNode* FirstChild( const std::string& _value ) const { return FirstChild (_value.c_str ()); } ///< STL std::string form. TiXmlNode* FirstChild( const std::string& _value ) { return FirstChild (_value.c_str ()); } ///< STL std::string form. const TiXmlNode* LastChild( const std::string& _value ) const { return LastChild (_value.c_str ()); } ///< STL std::string form. TiXmlNode* LastChild( const std::string& _value ) { return LastChild (_value.c_str ()); } ///< STL std::string form. /** An alternate way to walk the children of a node. One way to iterate over nodes is: @verbatim for( child = parent->FirstChild(); child; child = child->NextSibling() ) @endverbatim IterateChildren does the same thing with the syntax: @verbatim child = 0; while( child = parent->IterateChildren( child ) ) @endverbatim IterateChildren takes the previous child as input and finds the next one. If the previous child is null, it returns the first. IterateChildren will return null when done. */ const TiXmlNode* IterateChildren( const TiXmlNode* previous ) const; TiXmlNode* IterateChildren( const TiXmlNode* previous ) { return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( previous ) ); } /// This flavor of IterateChildren searches for children with a particular 'value' const TiXmlNode* IterateChildren( const char * value, const TiXmlNode* previous ) const; TiXmlNode* IterateChildren( const char * _value, const TiXmlNode* previous ) { return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( _value, previous ) ); } const TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) const { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. /** Add a new node related to this. Adds a child past the LastChild. Returns a pointer to the new object or NULL if an error occured. */ TiXmlNode* InsertEndChild( const TiXmlNode& addThis ); /** Add a new node related to this. Adds a child past the LastChild. NOTE: the node to be added is passed by pointer, and will be henceforth owned (and deleted) by tinyXml. This method is efficient and avoids an extra copy, but should be used with care as it uses a different memory model than the other insert functions. @sa InsertEndChild */ TiXmlNode* LinkEndChild( TiXmlNode* addThis ); /** Add a new node related to this. Adds a child before the specified child. Returns a pointer to the new object or NULL if an error occured. */ TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ); /** Add a new node related to this. Adds a child after the specified child. Returns a pointer to the new object or NULL if an error occured. */ TiXmlNode* InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ); /** Replace a child of this node. Returns a pointer to the new object or NULL if an error occured. */ TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ); /// Delete a child of this node. bool RemoveChild( TiXmlNode* removeThis ); /// Navigate to a sibling node. const TiXmlNode* PreviousSibling() const { return prev; } TiXmlNode* PreviousSibling() { return prev; } /// Navigate to a sibling node. const TiXmlNode* PreviousSibling( const char * ) const; TiXmlNode* PreviousSibling( const char *_prev ) { return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->PreviousSibling( _prev ) ); } const TiXmlNode* PreviousSibling( const std::string& _value ) const { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. TiXmlNode* PreviousSibling( const std::string& _value ) { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. const TiXmlNode* NextSibling( const std::string& _value) const { return NextSibling (_value.c_str ()); } ///< STL std::string form. TiXmlNode* NextSibling( const std::string& _value) { return NextSibling (_value.c_str ()); } ///< STL std::string form. /// Navigate to a sibling node. const TiXmlNode* NextSibling() const { return next; } TiXmlNode* NextSibling() { return next; } /// Navigate to a sibling node with the given 'value'. const TiXmlNode* NextSibling( const char * ) const; TiXmlNode* NextSibling( const char* _next ) { return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->NextSibling( _next ) ); } /** Convenience function to get through elements. Calls NextSibling and ToElement. Will skip all non-Element nodes. Returns 0 if there is not another element. */ const TiXmlElement* NextSiblingElement() const; TiXmlElement* NextSiblingElement() { return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement() ); } /** Convenience function to get through elements. Calls NextSibling and ToElement. Will skip all non-Element nodes. Returns 0 if there is not another element. */ const TiXmlElement* NextSiblingElement( const char * ) const; TiXmlElement* NextSiblingElement( const char *_next ) { return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement( _next ) ); } const TiXmlElement* NextSiblingElement( const std::string& _value) const { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. TiXmlElement* NextSiblingElement( const std::string& _value) { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. /// Convenience function to get through elements. const TiXmlElement* FirstChildElement() const; TiXmlElement* FirstChildElement() { return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement() ); } /// Convenience function to get through elements. const TiXmlElement* FirstChildElement( const char * _value ) const; TiXmlElement* FirstChildElement( const char * _value ) { return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement( _value ) ); } const TiXmlElement* FirstChildElement( const std::string& _value ) const { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. TiXmlElement* FirstChildElement( const std::string& _value ) { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. /** Query the type (as an enumerated value, above) of this node. The possible types are: DOCUMENT, ELEMENT, COMMENT, UNKNOWN, TEXT, and DECLARATION. */ int Type() const { return type; } /** Return a pointer to the Document this node lives in. Returns null if not in a document. */ const TiXmlDocument* GetDocument() const; TiXmlDocument* GetDocument() { return const_cast< TiXmlDocument* >( (const_cast< const TiXmlNode* >(this))->GetDocument() ); } /// Returns true if this node has no children. bool NoChildren() const { return !firstChild; } virtual const TiXmlDocument* ToDocument() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual const TiXmlElement* ToElement() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual const TiXmlComment* ToComment() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual const TiXmlUnknown* ToUnknown() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual const TiXmlText* ToText() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual const TiXmlDeclaration* ToDeclaration() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlDocument* ToDocument() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlElement* ToElement() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlComment* ToComment() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlUnknown* ToUnknown() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlText* ToText() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlDeclaration* ToDeclaration() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. /** Create an exact duplicate of this node and return it. The memory must be deleted by the caller. */ virtual TiXmlNode* Clone() const = 0; /** Accept a hierchical visit the nodes in the TinyXML DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the TiXmlVisitor interface. This is essentially a SAX interface for TinyXML. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML is unchanged by using this interface versus any other.) The interface has been based on ideas from: - http://www.saxproject.org/ - http://c2.com/cgi/wiki?HierarchicalVisitorPattern Which are both good references for "visiting". An example of using Accept(): @verbatim TiXmlPrinter printer; tinyxmlDoc.Accept( &printer ); const char* xmlcstr = printer.CStr(); @endverbatim */ virtual bool Accept( TiXmlVisitor* visitor ) const = 0; protected: TiXmlNode( NodeType _type ); // Copy to the allocated object. Shared functionality between Clone, Copy constructor, // and the assignment operator. void CopyTo( TiXmlNode* target ) const; // The real work of the input operator. virtual void StreamIn( std::istream* in, TIXML_STRING* tag ) = 0; // Figure out what is at *p, and parse it. Returns null if it is not an xml node. TiXmlNode* Identify( const char* start, TiXmlEncoding encoding ); TiXmlNode* parent; NodeType type; TiXmlNode* firstChild; TiXmlNode* lastChild; TIXML_STRING value; TiXmlNode* prev; TiXmlNode* next; private: TiXmlNode( const TiXmlNode& ); // not implemented. void operator=( const TiXmlNode& base ); // not allowed. }; /** An attribute is a name-value pair. Elements have an arbitrary number of attributes, each with a unique name. @note The attributes are not TiXmlNodes, since they are not part of the tinyXML document object model. There are other suggested ways to look at this problem. */ class TiXmlAttribute : public TiXmlBase { friend class TiXmlAttributeSet; public: /// Construct an empty attribute. TiXmlAttribute() : TiXmlBase() { document = 0; prev = next = 0; } /// std::string constructor. TiXmlAttribute( const std::string& _name, const std::string& _value ) { name = _name; value = _value; document = 0; prev = next = 0; } /// Construct an attribute with a name and value. TiXmlAttribute( const char * _name, const char * _value ) { name = _name; value = _value; document = 0; prev = next = 0; } const char* Name() const { return name.c_str(); } ///< Return the name of this attribute. const char* Value() const { return value.c_str(); } ///< Return the value of this attribute. const std::string& ValueStr() const { return value; } ///< Return the value of this attribute. int IntValue() const; ///< Return the value of this attribute, converted to an integer. double DoubleValue() const; ///< Return the value of this attribute, converted to a double. // Get the tinyxml string representation const TIXML_STRING& NameTStr() const { return name; } /** QueryIntValue examines the value string. It is an alternative to the IntValue() method with richer error checking. If the value is an integer, it is stored in 'value' and the call returns TIXML_SUCCESS. If it is not an integer, it returns TIXML_WRONG_TYPE. A specialized but useful call. Note that for success it returns 0, which is the opposite of almost all other TinyXml calls. */ int QueryIntValue( int* _value ) const; /// QueryDoubleValue examines the value string. See QueryIntValue(). int QueryDoubleValue( double* _value ) const; void SetName( const char* _name ) { name = _name; } ///< Set the name of this attribute. void SetValue( const char* _value ) { value = _value; } ///< Set the value. void SetIntValue( int _value ); ///< Set the value from an integer. void SetDoubleValue( double _value ); ///< Set the value from a double. /// STL std::string form. void SetName( const std::string& _name ) { name = _name; } /// STL std::string form. void SetValue( const std::string& _value ) { value = _value; } /// Get the next sibling attribute in the DOM. Returns null at end. const TiXmlAttribute* Next() const; TiXmlAttribute* Next() { return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Next() ); } /// Get the previous sibling attribute in the DOM. Returns null at beginning. const TiXmlAttribute* Previous() const; TiXmlAttribute* Previous() { return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Previous() ); } bool operator==( const TiXmlAttribute& rhs ) const { return rhs.name == name; } bool operator<( const TiXmlAttribute& rhs ) const { return name < rhs.name; } bool operator>( const TiXmlAttribute& rhs ) const { return name > rhs.name; } /* Attribute parsing starts: first letter of the name returns: the next char after the value end quote */ virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); // Prints this Attribute to a FILE stream. virtual void Print( FILE* cfile, int depth ) const { Print( cfile, depth, 0 ); } void Print( FILE* cfile, int depth, TIXML_STRING* str ) const; // [internal use] // Set the document pointer so the attribute can report errors. void SetDocument( TiXmlDocument* doc ) { document = doc; } private: TiXmlAttribute( const TiXmlAttribute& ); // not implemented. void operator=( const TiXmlAttribute& base ); // not allowed. TiXmlDocument* document; // A pointer back to a document, for error reporting. TIXML_STRING name; TIXML_STRING value; TiXmlAttribute* prev; TiXmlAttribute* next; }; /* A class used to manage a group of attributes. It is only used internally, both by the ELEMENT and the DECLARATION. The set can be changed transparent to the Element and Declaration classes that use it, but NOT transparent to the Attribute which has to implement a next() and previous() method. Which makes it a bit problematic and prevents the use of STL. This version is implemented with circular lists because: - I like circular lists - it demonstrates some independence from the (typical) doubly linked list. */ class TiXmlAttributeSet { public: TiXmlAttributeSet(); ~TiXmlAttributeSet(); void Add( TiXmlAttribute* attribute ); void Remove( TiXmlAttribute* attribute ); const TiXmlAttribute* First() const { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } TiXmlAttribute* First() { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } const TiXmlAttribute* Last() const { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } TiXmlAttribute* Last() { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } const TiXmlAttribute* Find( const char* _name ) const; TiXmlAttribute* Find( const char* _name ) { return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttributeSet* >(this))->Find( _name ) ); } const TiXmlAttribute* Find( const std::string& _name ) const; TiXmlAttribute* Find( const std::string& _name ) { return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttributeSet* >(this))->Find( _name ) ); } private: //*ME: Because of hidden/disabled copy-construktor in TiXmlAttribute (sentinel-element), //*ME: this class must be also use a hidden/disabled copy-constructor !!! TiXmlAttributeSet( const TiXmlAttributeSet& ); // not allowed void operator=( const TiXmlAttributeSet& ); // not allowed (as TiXmlAttribute) TiXmlAttribute sentinel; }; /** The element is a container class. It has a value, the element name, and can contain other elements, text, comments, and unknowns. Elements also contain an arbitrary number of attributes. */ class TiXmlElement : public TiXmlNode { public: /// Construct an element. TiXmlElement (const char * in_value); /// std::string constructor. TiXmlElement( const std::string& _value ); TiXmlElement( const TiXmlElement& ); void operator=( const TiXmlElement& base ); virtual ~TiXmlElement(); /** Given an attribute name, Attribute() returns the value for the attribute of that name, or null if none exists. */ const char* Attribute( const char* name ) const; /** Given an attribute name, Attribute() returns the value for the attribute of that name, or null if none exists. If the attribute exists and can be converted to an integer, the integer value will be put in the return 'i', if 'i' is non-null. */ const char* Attribute( const char* name, int* i ) const; /** Given an attribute name, Attribute() returns the value for the attribute of that name, or null if none exists. If the attribute exists and can be converted to an double, the double value will be put in the return 'd', if 'd' is non-null. */ const char* Attribute( const char* name, double* d ) const; /** QueryIntAttribute examines the attribute - it is an alternative to the Attribute() method with richer error checking. If the attribute is an integer, it is stored in 'value' and the call returns TIXML_SUCCESS. If it is not an integer, it returns TIXML_WRONG_TYPE. If the attribute does not exist, then TIXML_NO_ATTRIBUTE is returned. */ int QueryIntAttribute( const char* name, int* _value ) const; /// QueryDoubleAttribute examines the attribute - see QueryIntAttribute(). int QueryDoubleAttribute( const char* name, double* _value ) const; /// QueryFloatAttribute examines the attribute - see QueryIntAttribute(). int QueryFloatAttribute( const char* name, float* _value ) const { double d; int result = QueryDoubleAttribute( name, &d ); if ( result == TIXML_SUCCESS ) { *_value = (float)d; } return result; } /** Template form of the attribute query which will try to read the attribute into the specified type. Very easy, very powerful, but be careful to make sure to call this with the correct type. @return TIXML_SUCCESS, TIXML_WRONG_TYPE, or TIXML_NO_ATTRIBUTE */ template< typename T > int QueryValueAttribute( const std::string& name, T* outValue ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( !node ) return TIXML_NO_ATTRIBUTE; std::stringstream sstream( node->ValueStr() ); sstream >> *outValue; if ( !sstream.fail() ) return TIXML_SUCCESS; return TIXML_WRONG_TYPE; } /** Sets an attribute of name to a given value. The attribute will be created if it does not exist, or changed if it does. */ void SetAttribute( const char* name, const char * _value ); const std::string* Attribute( const std::string& name ) const; const std::string* Attribute( const std::string& name, int* i ) const; const std::string* Attribute( const std::string& name, double* d ) const; int QueryIntAttribute( const std::string& name, int* _value ) const; int QueryDoubleAttribute( const std::string& name, double* _value ) const; /// STL std::string form. void SetAttribute( const std::string& name, const std::string& _value ); ///< STL std::string form. void SetAttribute( const std::string& name, int _value ); /** Sets an attribute of name to a given value. The attribute will be created if it does not exist, or changed if it does. */ void SetAttribute( const char * name, int value ); /** Sets an attribute of name to a given value. The attribute will be created if it does not exist, or changed if it does. */ void SetDoubleAttribute( const char * name, double value ); /** Deletes an attribute with the given name. */ void RemoveAttribute( const char * name ); void RemoveAttribute( const std::string& name ) { RemoveAttribute (name.c_str ()); } ///< STL std::string form. const TiXmlAttribute* FirstAttribute() const { return attributeSet.First(); } ///< Access the first attribute in this element. TiXmlAttribute* FirstAttribute() { return attributeSet.First(); } const TiXmlAttribute* LastAttribute() const { return attributeSet.Last(); } ///< Access the last attribute in this element. TiXmlAttribute* LastAttribute() { return attributeSet.Last(); } /** Convenience function for easy access to the text inside an element. Although easy and concise, GetText() is limited compared to getting the TiXmlText child and accessing it directly. If the first child of 'this' is a TiXmlText, the GetText() returns the character string of the Text node, else null is returned. This is a convenient method for getting the text of simple contained text: @verbatim <foo>This is text</foo> const char* str = fooElement->GetText(); @endverbatim 'str' will be a pointer to "This is text". Note that this function can be misleading. If the element foo was created from this XML: @verbatim <foo><b>This is text</b></foo> @endverbatim then the value of str would be null. The first child node isn't a text node, it is another element. From this XML: @verbatim <foo>This is <b>text</b></foo> @endverbatim GetText() will return "This is ". WARNING: GetText() accesses a child node - don't become confused with the similarly named TiXmlHandle::Text() and TiXmlNode::ToText() which are safe type casts on the referenced node. */ const char* GetText() const; /// Creates a new Element and returns it - the returned element is a copy. virtual TiXmlNode* Clone() const; // Print the Element to a FILE stream. virtual void Print( FILE* cfile, int depth ) const; /* Attribtue parsing starts: next char past '<' returns: next char past '>' */ virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); virtual const TiXmlElement* ToElement() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlElement* ToElement() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* visitor ) const; protected: void CopyTo( TiXmlElement* target ) const; void ClearThis(); // like clear, but initializes 'this' object as well // Used to be public [internal use] virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); /* [internal use] Reads the "value" of the element -- another element, or text. This should terminate with the current end tag. */ const char* ReadValue( const char* in, TiXmlParsingData* prevData, TiXmlEncoding encoding ); private: TiXmlAttributeSet attributeSet; }; /** An XML comment. */ class TiXmlComment : public TiXmlNode { public: /// Constructs an empty comment. TiXmlComment() : TiXmlNode( TiXmlNode::COMMENT ) {} /// Construct a comment from text. TiXmlComment( const char* _value ) : TiXmlNode( TiXmlNode::COMMENT ) { SetValue( _value ); } TiXmlComment( const TiXmlComment& ); void operator=( const TiXmlComment& base ); virtual ~TiXmlComment() {} /// Returns a copy of this Comment. virtual TiXmlNode* Clone() const; // Write this Comment to a FILE stream. virtual void Print( FILE* cfile, int depth ) const; /* Attribtue parsing starts: at the ! of the !-- returns: next char past '>' */ virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); virtual const TiXmlComment* ToComment() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlComment* ToComment() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* visitor ) const; protected: void CopyTo( TiXmlComment* target ) const; // used to be public virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); // virtual void StreamOut( TIXML_OSTREAM * out ) const; private: }; /** XML text. A text node can have 2 ways to output the next. "normal" output and CDATA. It will default to the mode it was parsed from the XML file and you generally want to leave it alone, but you can change the output mode with SetCDATA() and query it with CDATA(). */ class TiXmlText : public TiXmlNode { friend class TiXmlElement; public: /** Constructor for text element. By default, it is treated as normal, encoded text. If you want it be output as a CDATA text element, set the parameter _cdata to 'true' */ TiXmlText (const char * initValue ) : TiXmlNode (TiXmlNode::TEXT) { SetValue( initValue ); cdata = false; } virtual ~TiXmlText() {} /// Constructor. TiXmlText( const std::string& initValue ) : TiXmlNode (TiXmlNode::TEXT) { SetValue( initValue ); cdata = false; } TiXmlText( const TiXmlText& copy ) : TiXmlNode( TiXmlNode::TEXT ) { copy.CopyTo( this ); } void operator=( const TiXmlText& base ) { base.CopyTo( this ); } // Write this text object to a FILE stream. virtual void Print( FILE* cfile, int depth ) const; /// Queries whether this represents text using a CDATA section. bool CDATA() const { return cdata; } /// Turns on or off a CDATA representation of text. void SetCDATA( bool _cdata ) { cdata = _cdata; } virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); virtual const TiXmlText* ToText() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlText* ToText() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* content ) const; protected : /// [internal use] Creates a new Element and returns it. virtual TiXmlNode* Clone() const; void CopyTo( TiXmlText* target ) const; bool Blank() const; // returns true if all white space and new lines // [internal use] virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); private: bool cdata; // true if this should be input and output as a CDATA style text element }; /** In correct XML the declaration is the first entry in the file. @verbatim <?xml version="1.0" standalone="yes"?> @endverbatim TinyXml will happily read or write files without a declaration, however. There are 3 possible attributes to the declaration: version, encoding, and standalone. Note: In this version of the code, the attributes are handled as special cases, not generic attributes, simply because there can only be at most 3 and they are always the same. */ class TiXmlDeclaration : public TiXmlNode { public: /// Construct an empty declaration. TiXmlDeclaration() : TiXmlNode( TiXmlNode::DECLARATION ) {} /// Constructor. TiXmlDeclaration( const std::string& _version, const std::string& _encoding, const std::string& _standalone ); /// Construct. TiXmlDeclaration( const char* _version, const char* _encoding, const char* _standalone ); TiXmlDeclaration( const TiXmlDeclaration& copy ); void operator=( const TiXmlDeclaration& copy ); virtual ~TiXmlDeclaration() {} /// Version. Will return an empty string if none was found. const char *Version() const { return version.c_str (); } /// Encoding. Will return an empty string if none was found. const char *Encoding() const { return encoding.c_str (); } /// Is this a standalone document? const char *Standalone() const { return standalone.c_str (); } /// Creates a copy of this Declaration and returns it. virtual TiXmlNode* Clone() const; // Print this declaration to a FILE stream. virtual void Print( FILE* cfile, int depth, TIXML_STRING* str ) const; virtual void Print( FILE* cfile, int depth ) const { Print( cfile, depth, 0 ); } virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); virtual const TiXmlDeclaration* ToDeclaration() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlDeclaration* ToDeclaration() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* visitor ) const; protected: void CopyTo( TiXmlDeclaration* target ) const; // used to be public virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); private: TIXML_STRING version; TIXML_STRING encoding; TIXML_STRING standalone; }; /** Any tag that tinyXml doesn't recognize is saved as an unknown. It is a tag of text, but should not be modified. It will be written back to the XML, unchanged, when the file is saved. DTD tags get thrown into TiXmlUnknowns. */ class TiXmlUnknown : public TiXmlNode { public: TiXmlUnknown() : TiXmlNode( TiXmlNode::UNKNOWN ) {} virtual ~TiXmlUnknown() {} TiXmlUnknown( const TiXmlUnknown& copy ) : TiXmlNode( TiXmlNode::UNKNOWN ) { copy.CopyTo( this ); } void operator=( const TiXmlUnknown& copy ) { copy.CopyTo( this ); } /// Creates a copy of this Unknown and returns it. virtual TiXmlNode* Clone() const; // Print this Unknown to a FILE stream. virtual void Print( FILE* cfile, int depth ) const; virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); virtual const TiXmlUnknown* ToUnknown() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlUnknown* ToUnknown() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* content ) const; protected: void CopyTo( TiXmlUnknown* target ) const; virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); private: }; /** Always the top level node. A document binds together all the XML pieces. It can be saved, loaded, and printed to the screen. The 'value' of a document node is the xml file name. */ class TiXmlDocument : public TiXmlNode { public: /// Create an empty document, that has no name. TiXmlDocument(); /// Create a document with a name. The name of the document is also the filename of the xml. TiXmlDocument( const char * documentName ); /// Constructor. TiXmlDocument( const std::string& documentName ); TiXmlDocument( const TiXmlDocument& copy ); void operator=( const TiXmlDocument& copy ); virtual ~TiXmlDocument() {} /** Load a file using the current document value. Returns true if successful. Will delete any existing document data before loading. */ bool LoadFile( TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); /// Save a file using the current document value. Returns true if successful. bool SaveFile() const; /// Load a file using the given filename. Returns true if successful. bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); /// Save a file using the given filename. Returns true if successful. bool SaveFile( const char * filename ) const; /** Load a file using the given FILE*. Returns true if successful. Note that this method doesn't stream - the entire object pointed at by the FILE* will be interpreted as an XML file. TinyXML doesn't stream in XML from the current file location. Streaming may be added in the future. */ bool LoadFile( FILE*, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); /// Save a file using the given FILE*. Returns true if successful. bool SaveFile( FILE* ) const; bool LoadFile( const std::string& filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ) ///< STL std::string version. { // StringToBuffer f( filename ); // return ( f.buffer && LoadFile( f.buffer, encoding )); return LoadFile( filename.c_str(), encoding ); } bool SaveFile( const std::string& filename ) const ///< STL std::string version. { // StringToBuffer f( filename ); // return ( f.buffer && SaveFile( f.buffer )); return SaveFile( filename.c_str() ); } /** Parse the given null terminated block of xml data. Passing in an encoding to this method (either TIXML_ENCODING_LEGACY or TIXML_ENCODING_UTF8 will force TinyXml to use that encoding, regardless of what TinyXml might otherwise try to detect. */ virtual const char* Parse( const char* p, TiXmlParsingData* data = 0, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); /** Get the root element -- the only top level element -- of the document. In well formed XML, there should only be one. TinyXml is tolerant of multiple elements at the document level. */ const TiXmlElement* RootElement() const { return FirstChildElement(); } TiXmlElement* RootElement() { return FirstChildElement(); } /** If an error occurs, Error will be set to true. Also, - The ErrorId() will contain the integer identifier of the error (not generally useful) - The ErrorDesc() method will return the name of the error. (very useful) - The ErrorRow() and ErrorCol() will return the location of the error (if known) */ bool Error() const { return error; } /// Contains a textual (english) description of the error if one occurs. const char * ErrorDesc() const { return errorDesc.c_str (); } /** Generally, you probably want the error string ( ErrorDesc() ). But if you prefer the ErrorId, this function will fetch it. */ int ErrorId() const { return errorId; } /** Returns the location (if known) of the error. The first column is column 1, and the first row is row 1. A value of 0 means the row and column wasn't applicable (memory errors, for example, have no row/column) or the parser lost the error. (An error in the error reporting, in that case.) @sa SetTabSize, Row, Column */ int ErrorRow() const { return errorLocation.row+1; } int ErrorCol() const { return errorLocation.col+1; } ///< The column where the error occured. See ErrorRow() /** SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) to report the correct values for row and column. It does not change the output or input in any way. By calling this method, with a tab size greater than 0, the row and column of each node and attribute is stored when the file is loaded. Very useful for tracking the DOM back in to the source file. The tab size is required for calculating the location of nodes. If not set, the default of 4 is used. The tabsize is set per document. Setting the tabsize to 0 disables row/column tracking. Note that row and column tracking is not supported when using operator>>. The tab size needs to be enabled before the parse or load. Correct usage: @verbatim TiXmlDocument doc; doc.SetTabSize( 8 ); doc.Load( "myfile.xml" ); @endverbatim @sa Row, Column */ void SetTabSize( int _tabsize ) { tabsize = _tabsize; } int TabSize() const { return tabsize; } /** If you have handled the error, it can be reset with this call. The error state is automatically cleared if you Parse a new XML block. */ void ClearError() { error = false; errorId = 0; errorDesc = ""; errorLocation.row = errorLocation.col = 0; //errorLocation.last = 0; } /** Write the document to standard out using formatted printing ("pretty print"). */ void Print() const { Print( stdout, 0 ); } /* Write the document to a string using formatted printing ("pretty print"). This will allocate a character array (new char[]) and return it as a pointer. The calling code pust call delete[] on the return char* to avoid a memory leak. */ //char* PrintToMemory() const; /// Print this Document to a FILE stream. virtual void Print( FILE* cfile, int depth = 0 ) const; // [internal use] void SetError( int err, const char* errorLocation, TiXmlParsingData* prevData, TiXmlEncoding encoding ); virtual const TiXmlDocument* ToDocument() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlDocument* ToDocument() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* content ) const; protected : // [internal use] virtual TiXmlNode* Clone() const; virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); private: void CopyTo( TiXmlDocument* target ) const; bool error; int errorId; TIXML_STRING errorDesc; int tabsize; TiXmlCursor errorLocation; bool useMicrosoftBOM; // the UTF-8 BOM were found when read. Note this, and try to write. }; /** A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly useful thing. Note that TiXmlHandle is not part of the TinyXml DOM structure. It is a separate utility class. Take an example: @verbatim <Document> <Element attributeA = "valueA"> <Child attributeB = "value1" /> <Child attributeB = "value2" /> </Element> <Document> @endverbatim Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very easy to write a *lot* of code that looks like: @verbatim TiXmlElement* root = document.FirstChildElement( "Document" ); if ( root ) { TiXmlElement* element = root->FirstChildElement( "Element" ); if ( element ) { TiXmlElement* child = element->FirstChildElement( "Child" ); if ( child ) { TiXmlElement* child2 = child->NextSiblingElement( "Child" ); if ( child2 ) { // Finally do something useful. @endverbatim And that doesn't even cover "else" cases. TiXmlHandle addresses the verbosity of such code. A TiXmlHandle checks for null pointers so it is perfectly safe and correct to use: @verbatim TiXmlHandle docHandle( &document ); TiXmlElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", 1 ).ToElement(); if ( child2 ) { // do something useful @endverbatim Which is MUCH more concise and useful. It is also safe to copy handles - internally they are nothing more than node pointers. @verbatim TiXmlHandle handleCopy = handle; @endverbatim What they should not be used for is iteration: @verbatim int i=0; while ( true ) { TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", i ).ToElement(); if ( !child ) break; // do something ++i; } @endverbatim It seems reasonable, but it is in fact two embedded while loops. The Child method is a linear walk to find the element, so this code would iterate much more than it needs to. Instead, prefer: @verbatim TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).FirstChild( "Child" ).ToElement(); for( child; child; child=child->NextSiblingElement() ) { // do something } @endverbatim */ class TiXmlHandle { public: /// Create a handle from any node (at any depth of the tree.) This can be a null pointer. TiXmlHandle( TiXmlNode* _node ) { this->node = _node; } /// Copy constructor TiXmlHandle( const TiXmlHandle& ref ) { this->node = ref.node; } TiXmlHandle operator=( const TiXmlHandle& ref ) { this->node = ref.node; return *this; } /// Return a handle to the first child node. TiXmlHandle FirstChild() const; /// Return a handle to the first child node with the given name. TiXmlHandle FirstChild( const char * value ) const; /// Return a handle to the first child element. TiXmlHandle FirstChildElement() const; /// Return a handle to the first child element with the given name. TiXmlHandle FirstChildElement( const char * value ) const; /** Return a handle to the "index" child with the given name. The first child is 0, the second 1, etc. */ TiXmlHandle Child( const char* value, int index ) const; /** Return a handle to the "index" child. The first child is 0, the second 1, etc. */ TiXmlHandle Child( int index ) const; /** Return a handle to the "index" child element with the given name. The first child element is 0, the second 1, etc. Note that only TiXmlElements are indexed: other types are not counted. */ TiXmlHandle ChildElement( const char* value, int index ) const; /** Return a handle to the "index" child element. The first child element is 0, the second 1, etc. Note that only TiXmlElements are indexed: other types are not counted. */ TiXmlHandle ChildElement( int index ) const; TiXmlHandle FirstChild( const std::string& _value ) const { return FirstChild( _value.c_str() ); } TiXmlHandle FirstChildElement( const std::string& _value ) const { return FirstChildElement( _value.c_str() ); } TiXmlHandle Child( const std::string& _value, int index ) const { return Child( _value.c_str(), index ); } TiXmlHandle ChildElement( const std::string& _value, int index ) const { return ChildElement( _value.c_str(), index ); } /** Return the handle as a TiXmlNode. This may return null. */ TiXmlNode* ToNode() const { return node; } /** Return the handle as a TiXmlElement. This may return null. */ TiXmlElement* ToElement() const { return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); } /** Return the handle as a TiXmlText. This may return null. */ TiXmlText* ToText() const { return ( ( node && node->ToText() ) ? node->ToText() : 0 ); } /** Return the handle as a TiXmlUnknown. This may return null. */ TiXmlUnknown* ToUnknown() const { return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); } /** @deprecated use ToNode. Return the handle as a TiXmlNode. This may return null. */ TiXmlNode* Node() const { return ToNode(); } /** @deprecated use ToElement. Return the handle as a TiXmlElement. This may return null. */ TiXmlElement* Element() const { return ToElement(); } /** @deprecated use ToText() Return the handle as a TiXmlText. This may return null. */ TiXmlText* Text() const { return ToText(); } /** @deprecated use ToUnknown() Return the handle as a TiXmlUnknown. This may return null. */ TiXmlUnknown* Unknown() const { return ToUnknown(); } private: TiXmlNode* node; }; /** Print to memory functionality. The TiXmlPrinter is useful when you need to: -# Print to memory (especially in non-STL mode) -# Control formatting (line endings, etc.) When constructed, the TiXmlPrinter is in its default "pretty printing" mode. Before calling Accept() you can call methods to control the printing of the XML document. After TiXmlNode::Accept() is called, the printed document can be accessed via the CStr(), Str(), and Size() methods. TiXmlPrinter uses the Visitor API. @verbatim TiXmlPrinter printer; printer.SetIndent( "\t" ); doc.Accept( &printer ); fprintf( stdout, "%s", printer.CStr() ); @endverbatim */ class TiXmlPrinter : public TiXmlVisitor { public: TiXmlPrinter() : depth( 0 ), simpleTextPrint( false ), buffer(), indent( " " ), lineBreak( "\n" ) {} virtual bool VisitEnter( const TiXmlDocument& doc ); virtual bool VisitExit( const TiXmlDocument& doc ); virtual bool VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute ); virtual bool VisitExit( const TiXmlElement& element ); virtual bool Visit( const TiXmlDeclaration& declaration ); virtual bool Visit( const TiXmlText& text ); virtual bool Visit( const TiXmlComment& comment ); virtual bool Visit( const TiXmlUnknown& unknown ); /** Set the indent characters for printing. By default 4 spaces but tab (\t) is also useful, or null/empty string for no indentation. */ void SetIndent( const char* _indent ) { indent = _indent ? _indent : "" ; } /// Query the indention string. const char* Indent() { return indent.c_str(); } /** Set the line breaking string. By default set to newline (\n). Some operating systems prefer other characters, or can be set to the null/empty string for no indenation. */ void SetLineBreak( const char* _lineBreak ) { lineBreak = _lineBreak ? _lineBreak : ""; } /// Query the current line breaking string. const char* LineBreak() { return lineBreak.c_str(); } /** Switch over to "stream printing" which is the most dense formatting without linebreaks. Common when the XML is needed for network transmission. */ void SetStreamPrinting() { indent = ""; lineBreak = ""; } /// Return the result. const char* CStr() { return buffer.c_str(); } /// Return the length of the result string. size_t Size() { return buffer.size(); } /// Return the result. const std::string& Str() { return buffer; } private: void DoIndent() { for( int i=0; i<depth; ++i ) buffer += indent; } void DoLineBreak() { buffer += lineBreak; } int depth; bool simpleTextPrint; TIXML_STRING buffer; TIXML_STRING indent; TIXML_STRING lineBreak; }; #ifdef _MSC_VER #pragma warning( pop ) #endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Makefile.in���������������������������������������������������������������������0000644�0001750�0001750�00000055146�12116616065�014557� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include DIST_COMMON = $(nobase_include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(includedir)" HEADERS = $(nobase_include_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = Rivet EXTRA_DIST = TinyXML nobase_include_HEADERS = \ LWH/AIAnalysisFactory.h \ LWH/AITreeFactory.h \ LWH/AIHistogramFactory.h \ LWH/AIDataPointSetFactory.h \ LWH/AIManagedObject.h \ LWH/AIBaseHistogram.h \ LWH/AIHistogram1D.h \ LWH/AIHistogram2D.h \ LWH/AIProfile1D.h \ LWH/AIDataPointSet.h \ LWH/AIMeasurement.h \ LWH/AIDataPoint.h \ LWH/AITree.h \ LWH/AIAxis.h \ LWH/AnalysisFactory.h \ LWH/TreeFactory.h \ LWH/HistogramFactory.h \ LWH/DataPointSetFactory.h \ LWH/ManagedObject.h \ LWH/Histogram1D.h \ LWH/Histogram2D.h \ LWH/Profile1D.h \ LWH/DataPointSet.h \ LWH/DataPoint.h \ LWH/Measurement.h \ LWH/Tree.h \ LWH/Axis.h \ LWH/VariAxis.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-nobase_includeHEADERS: $(nobase_include_HEADERS) @$(NORMAL_INSTALL) @list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ $(am__nobase_list) | while read dir files; do \ xfiles=; for file in $$files; do \ if test -f "$$file"; then xfiles="$$xfiles $$file"; \ else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ test -z "$$xfiles" || { \ test "x$$dir" = x. || { \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)/$$dir'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)/$$dir"; }; \ echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(includedir)/$$dir'"; \ $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(includedir)/$$dir" || exit $$?; }; \ done uninstall-nobase_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \ $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-nobase_includeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-nobase_includeHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-nobase_includeHEADERS \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-nobase_includeHEADERS #EXTRA_DIST += eigen2 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/include/Makefile.am���������������������������������������������������������������������0000644�0001750�0001750�00000001407�12116077757�014546� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SUBDIRS = Rivet ## Remove these when YODA is available... EXTRA_DIST = TinyXML nobase_include_HEADERS = \ LWH/AIAnalysisFactory.h \ LWH/AITreeFactory.h \ LWH/AIHistogramFactory.h \ LWH/AIDataPointSetFactory.h \ LWH/AIManagedObject.h \ LWH/AIBaseHistogram.h \ LWH/AIHistogram1D.h \ LWH/AIHistogram2D.h \ LWH/AIProfile1D.h \ LWH/AIDataPointSet.h \ LWH/AIMeasurement.h \ LWH/AIDataPoint.h \ LWH/AITree.h \ LWH/AIAxis.h \ LWH/AnalysisFactory.h \ LWH/TreeFactory.h \ LWH/HistogramFactory.h \ LWH/DataPointSetFactory.h \ LWH/ManagedObject.h \ LWH/Histogram1D.h \ LWH/Histogram2D.h \ LWH/Profile1D.h \ LWH/DataPointSet.h \ LWH/DataPoint.h \ LWH/Measurement.h \ LWH/Tree.h \ LWH/Axis.h \ LWH/VariAxis.h #EXTRA_DIST += eigen2 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/rivetenv.csh.in�������������������������������������������������������������������������0000644�0001750�0001750�00000002156�12116077757�014037� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# These variables need to exist set prefix=@prefix@ set exec_prefix=@exec_prefix@ set datarootdir=@datarootdir@ setenv PATH "$exec_prefix/bin:$PATH" if ($?@LIBPATHVARNAME@) then setenv @LIBPATHVARNAME@ "@libdir@:@HEPMCLIBPATH@:@FASTJETLIBPATH@:$@LIBPATHVARNAME@" else setenv @LIBPATHVARNAME@ "@libdir@:@HEPMCLIBPATH@:@FASTJETLIBPATH@" endif if ($?PYTHONPATH) then setenv PYTHONPATH "@RIVET_PYTHONPATH@:$PYTHONPATH" else setenv PYTHONPATH "@RIVET_PYTHONPATH@" endif if ($?TEXMFHOME) then setenv TEXMFHOME "@datadir@/Rivet/texmf:$TEXMFHOME" else setenv TEXMFHOME "@datadir@/Rivet/texmf" endif if ($?HOMETEXMF) then setenv HOMETEXMF "@datadir@/Rivet/texmf:$HOMETEXMF" else setenv HOMETEXMF "@datadir@/Rivet/texmf" endif if ($?TEXMFCNF) then setenv TEXMFCNF "@datadir@/Rivet/texmf/cnf:$TEXMFCNF" else setenv TEXMFCNF "@datadir@/Rivet/texmf/cnf:" endif if ($?TEXINPUTS) then setenv TEXINPUTS "@datadir@/Rivet/texmf/tex:$TEXINPUTS" else setenv TEXINPUTS "@datadir@/Rivet/texmf/tex:" endif if ($?LATEXINPUTS) then setenv LATEXINPUTS "@datadir@/Rivet/texmf/tex:$LATEXINPUTS" else setenv LATEXINPUTS "@datadir@/Rivet/texmf/tex:" endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/ltmain.sh�������������������������������������������������������������������������������0000644�0001750�0001750�00001052040�12116415374�012676� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to <bug-libtool@gnu.org>. # GNU libtool home page: <http://www.gnu.org/software/libtool/>. # General help using GNU software: <http://www.gnu.org/gethelp/>. PROGRAM=libtool PACKAGE=libtool VERSION="2.4.2 Debian-2.4.2-1ubuntu2" TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T <<EOF # $write_libobj - a libtool object file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # Name of the PIC object. pic_object=$write_lobj # Name of the non-PIC object non_pic_object=$write_oldobj EOF $MV "${write_libobj}T" "${write_libobj}" } } ################################################## # FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # ################################################## # func_convert_core_file_wine_to_w32 ARG # Helper function used by file name conversion functions when $build is *nix, # and $host is mingw, cygwin, or some other w32 environment. Relies on a # correctly configured wine environment available, with the winepath program # in $build's $PATH. # # ARG is the $build file name to be converted to w32 format. # Result is available in $func_convert_core_file_wine_to_w32_result, and will # be empty on error (or when ARG is empty) func_convert_core_file_wine_to_w32 () { $opt_debug func_convert_core_file_wine_to_w32_result="$1" if test -n "$1"; then # Unfortunately, winepath does not exit with a non-zero error code, so we # are forced to check the contents of stdout. On the other hand, if the # command is not found, the shell will set an exit code of 127 and print # *an error message* to stdout. So we must check for both error code of # zero AND non-empty stdout, which explains the odd construction: func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen <import library>. $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 </dev/null >/dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat <<EOF /* $cwrappersource - temporary wrapper executable for $objdir/$outputname Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION The $output program cannot be directly executed until all the libtool libraries that it depends on are installed. This wrapper executable should never be moved out of the build directory. If it is, it will not operate correctly. */ EOF cat <<"EOF" #ifdef _MSC_VER # define _CRT_SECURE_NO_DEPRECATE 1 #endif #include <stdio.h> #include <stdlib.h> #ifdef _MSC_VER # include <direct.h> # include <process.h> # include <io.h> #else # include <unistd.h> # include <stdint.h> # ifdef __CYGWIN__ # include <io.h> # endif #endif #include <malloc.h> #include <stdarg.h> #include <assert.h> #include <string.h> #include <ctype.h> #include <errno.h> #include <fcntl.h> #include <sys/stat.h> /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <<EOF volatile const char * MAGIC_EXE = "$magic_exe"; const char * LIB_PATH_VARNAME = "$shlibpath_var"; EOF if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then func_to_host_path "$temp_rpath" cat <<EOF const char * LIB_PATH_VALUE = "$func_to_host_path_result"; EOF else cat <<"EOF" const char * LIB_PATH_VALUE = ""; EOF fi if test -n "$dllsearchpath"; then func_to_host_path "$dllsearchpath:" cat <<EOF const char * EXE_PATH_VARNAME = "PATH"; const char * EXE_PATH_VALUE = "$func_to_host_path_result"; EOF else cat <<"EOF" const char * EXE_PATH_VARNAME = ""; const char * EXE_PATH_VALUE = ""; EOF fi if test "$fast_install" = yes; then cat <<EOF const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ EOF else cat <<EOF const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ EOF fi cat <<"EOF" #define LTWRAPPER_OPTION_PREFIX "--lt-" static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; int main (int argc, char *argv[]) { char **newargz; int newargc; char *tmp_pathspec; char *actual_cwrapper_path; char *actual_cwrapper_name; char *target_name; char *lt_argv_zero; intptr_t rval = 127; int i; program_name = (char *) xstrdup (base_name (argv[0])); newargz = XMALLOC (char *, argc + 1); /* very simple arg parsing; don't want to rely on getopt * also, copy all non cwrapper options to newargz, except * argz[0], which is handled differently */ newargc=0; for (i = 1; i < argc; i++) { if (strcmp (argv[i], dumpscript_opt) == 0) { EOF case "$host" in *mingw* | *cygwin* ) # make stdout use "unix" line endings echo " setmode(1,_O_BINARY);" ;; esac cat <<"EOF" lt_dump_script (stdout); return 0; } if (strcmp (argv[i], debug_opt) == 0) { lt_debug = 1; continue; } if (strcmp (argv[i], ltwrapper_option_prefix) == 0) { /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX namespace, but it is not one of the ones we know about and have already dealt with, above (inluding dump-script), then report an error. Otherwise, targets might begin to believe they are allowed to use options in the LTWRAPPER_OPTION_PREFIX namespace. The first time any user complains about this, we'll need to make LTWRAPPER_OPTION_PREFIX a configure-time option or a configure.ac-settable value. */ lt_fatal (__FILE__, __LINE__, "unrecognized %s option: '%s'", ltwrapper_option_prefix, argv[i]); } /* otherwise ... */ newargz[++newargc] = xstrdup (argv[i]); } newargz[++newargc] = NULL; EOF cat <<EOF /* The GNU banner must be the first non-error debug message */ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); EOF cat <<"EOF" lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); tmp_pathspec = find_executable (argv[0]); if (tmp_pathspec == NULL) lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); lt_debugprintf (__FILE__, __LINE__, "(main) found exe (before symlink chase) at: %s\n", tmp_pathspec); actual_cwrapper_path = chase_symlinks (tmp_pathspec); lt_debugprintf (__FILE__, __LINE__, "(main) found exe (after symlink chase) at: %s\n", actual_cwrapper_path); XFREE (tmp_pathspec); actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); strendzap (actual_cwrapper_path, actual_cwrapper_name); /* wrapper name transforms */ strendzap (actual_cwrapper_name, ".exe"); tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); XFREE (actual_cwrapper_name); actual_cwrapper_name = tmp_pathspec; tmp_pathspec = 0; /* target_name transforms -- use actual target program name; might have lt- prefix */ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); strendzap (target_name, ".exe"); tmp_pathspec = lt_extend_str (target_name, ".exe", 1); XFREE (target_name); target_name = tmp_pathspec; tmp_pathspec = 0; lt_debugprintf (__FILE__, __LINE__, "(main) libtool target name: %s\n", target_name); EOF cat <<EOF newargz[0] = XMALLOC (char, (strlen (actual_cwrapper_path) + strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); strcpy (newargz[0], actual_cwrapper_path); strcat (newargz[0], "$objdir"); strcat (newargz[0], "/"); EOF cat <<"EOF" /* stop here, and copy so we don't have to do this twice */ tmp_pathspec = xstrdup (newargz[0]); /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ strcat (newargz[0], actual_cwrapper_name); /* DO want the lt- prefix here if it exists, so use target_name */ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); XFREE (tmp_pathspec); tmp_pathspec = NULL; EOF case $host_os in mingw*) cat <<"EOF" { char* p; while ((p = strchr (newargz[0], '\\')) != NULL) { *p = '/'; } while ((p = strchr (lt_argv_zero, '\\')) != NULL) { *p = '/'; } } EOF ;; esac cat <<"EOF" XFREE (target_name); XFREE (actual_cwrapper_path); XFREE (actual_cwrapper_name); lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ lt_setenv ("DUALCASE", "1"); /* for MSK sh */ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) because on Windows, both *_VARNAMEs are PATH but uninstalled libraries must come first. */ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", nonnull (lt_argv_zero)); for (i = 0; i < newargc; i++) { lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", i, nonnull (newargz[i])); } EOF case $host_os in mingw*) cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ newargz = prepare_spawn (newargz); rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); if (rval == -1) { /* failed to start process */ lt_debugprintf (__FILE__, __LINE__, "(main) failed to launch target \"%s\": %s\n", lt_argv_zero, nonnull (strerror (errno))); return 127; } return rval; EOF ;; *) cat <<"EOF" execv (lt_argv_zero, newargz); return rval; /* =127, but avoids unused variable warning */ EOF ;; esac cat <<"EOF" } void * xmalloc (size_t num) { void *p = (void *) malloc (num); if (!p) lt_fatal (__FILE__, __LINE__, "memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char) name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable (const char *path) { struct stat st; lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type \`$version_type'" ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c <<EOF int main() { return 0; } EOF $opt_dry_run || $RM conftest if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then ldd_output=`ldd conftest` for i in $deplibs; do case $i in -l*) func_stripname -l '' "$i" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" i="" ;; esac fi if test -n "$i" ; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then func_append newdeplibs " $i" else droppeddeps=yes echo $ECHO "*** Warning: dynamic linker does not accept needed library $i." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which I believe you do not have" echo "*** because a test_compile did reveal that the linker did not use it for" echo "*** its dynamic dependency list that programs get resolved with at runtime." fi fi ;; *) func_append newdeplibs " $i" ;; esac done else # Error occurred in the first compile. Let's try to salvage # the situation: Compile a separate program for each library. for i in $deplibs; do case $i in -l*) func_stripname -l '' "$i" name=$func_stripname_result $opt_dry_run || $RM conftest if $LTCC $LTCFLAGS -o conftest conftest.c $i; then ldd_output=`ldd conftest` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" i="" ;; esac fi if test -n "$i" ; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then func_append newdeplibs " $i" else droppeddeps=yes echo $ECHO "*** Warning: dynamic linker does not accept needed library $i." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because a test_compile did reveal that the linker did not use this one" echo "*** as a dynamic dependency that programs can get resolved with at runtime." fi fi else droppeddeps=yes echo $ECHO "*** Warning! Library $i is needed by this library but I was not able to" echo "*** make it link in! You will probably need to install it or some" echo "*** library that it depends on before this library will be fully" echo "*** functional. Installing it before continuing would be even better." fi ;; *) func_append newdeplibs " $i" ;; esac done fi ;; file_magic*) set dummy $deplibs_check_method; shift file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` if test -n "$file_magic_glob"; then libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` else libnameglob=$libname fi test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do if test "$want_nocaseglob" = yes; then shopt -s nocaseglob potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/depcomp���������������������������������������������������������������������������������0000755�0001750�0001750�00000050643�12116415400�012427� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-03-27.16; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # A tabulation character. tab=' ' # A newline character. nl=' ' if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependent.h'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. # However on # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\': # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... # tcc 0.9.26 (FIXME still under development at the moment of writing) # will emit a similar output, but also prepend the continuation lines # with horizontal tabulation characters. "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form 'foo.o: dependent.h', # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ < "$tmpdepfile" > "$depfile" sed ' s/[ '"$tab"'][ '"$tab"']*/ /g s/^ *// s/ *\\*$// s/^[^:]*: *// /^$/d /:$/d s/$/ :/ ' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' "$nl" < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ���������������������������������������������������������������������������������������������rivet-1.8.3/install-sh������������������������������������������������������������������������������0000755�0001750�0001750�00000033256�12116415374�013071� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/m4/�������������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�12131473203�011364� 5����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/m4/osx.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000001133�12116077760�012450� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#AC_CEDAR_OSX() #---------------------------------------- AC_DEFUN([AC_CEDAR_OSX], [ LIBPATHVARNAME="LD_LIBRARY_PATH" AC_CHECK_TOOL(SWVERS, sw_vers) if test x$SWVERS != x; then PROD_NAME=$($SWVERS -productName | cut -f 2 -d:) fi AM_CONDITIONAL(WITH_OSX, [test "$PROD_NAME" = "Mac OS X"]) if test "$PROD_NAME" = "Mac OS X"; then MACOSX_DEPLOYMENT_TARGET=$($SWVERS -productVersion | cut -f 1,2 -d.) AC_MSG_NOTICE([MACOSX_DEPLOYMENT_TARGET = $MACOSX_DEPLOYMENT_TARGET]) AM_CXXFLAGS="$AM_CXXFLAGS -Dunix" LIBPATHVARNAME="DYLD_LIBRARY_PATH" fi AC_SUBST(LIBPATHVARNAME) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/m4/libtool.m4���������������������������������������������������������������������������0000644�0001750�0001750�00001060434�12116415374�013312� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to <bug-libtool@gnu.org>." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include <dlfcn.h> #endif #include <stdio.h> #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib<name>.so # instead of lib<name>.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$lt_save_ifs" else lt_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$lt_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) _LT_PATH_LD_GNU AC_SUBST([LD]) _LT_TAGDECL([], [LD], [1], [The linker used to build libraries]) ])# LT_PATH_LD # Old names: AU_ALIAS([AM_PROG_LD], [LT_PATH_LD]) AU_ALIAS([AC_PROG_LD], [LT_PATH_LD]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_LD], []) dnl AC_DEFUN([AC_PROG_LD], []) # _LT_PATH_LD_GNU #- -------------- m4_defun([_LT_PATH_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes ;; *) lt_cv_prog_gnu_ld=no ;; esac]) with_gnu_ld=$lt_cv_prog_gnu_ld ])# _LT_PATH_LD_GNU # _LT_CMD_RELOAD # -------------- # find reload flag for linker # -- PORTME Some linkers may need a different reload flag. m4_defun([_LT_CMD_RELOAD], [AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag, [lt_cv_ld_reload_flag='-r']) reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac _LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl _LT_TAGDECL([], [reload_cmds], [2])dnl ])# _LT_CMD_RELOAD # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi _LT_TAGVAR(link_all_deplibs, $1)=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/m4/lcg.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000006720�12116077760�012413� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Get the LCG platform tag (e.g. i686-slc5-gcc43-opt) for the # current platform and set it to the $LCG_TAG variable. # Based on the Genser platform detection script. #AC_LCG_TAG() #---------------------------------------- AC_DEFUN([AC_LCG_TAG], [ AC_ARG_WITH([lcgtag], [AC_HELP_STRING([--with-lcgtag], [LCG platform tag, e.g. i686-slc5-gcc43-opt. Calculated automatically for Linux SLC and Mac OS X])]) LCG_TAG="$with_lcgtag" if test "x$LCG_TAG" = x; then AC_MSG_NOTICE([Calculating LCG platform tag from system properties]) AC_MSG_CHECKING([for OS type]) os=UNKNOWN distribution=`uname` if `echo $distribution | grep -i "Linux" &> /dev/null`; then os=LINUX; fi if test -e "/etc/redhat-release"; then distribution="redhat" sltest=`cat /etc/redhat-release | grep "Scientific Linux" 2> /dev/null` if test -n "$sltest"; then os=SLC sl_version=`cat /etc/redhat-release | cut -f5 -d" "` sl_major=`echo $sl_version | cut -f1 -d.` distribution="slc${sl_major}" fi fi ## Test for Mac OS X SW_VERS="" #AC_PATH_PROG([SWVERS], [sw_vers]) if test -x "$SWVERS"; then os=OSX osx_version=`sw_vers -productVersion | cut -f1,2 -d.` osx_major=`echo $osx_version | cut -f1 -d.` osx_minor=`echo $osx_version | cut -f2 -d.` distribution="mac$osx_major$osx_minor" fi ## TODO: deal with Windows ;( AC_MSG_RESULT([$distribution]) ## Get architecture AC_MSG_CHECKING([for architecture type]) machine=`uname -m` AC_MSG_RESULT([$machine]) ## Get compiler and version if test "$os" != "WINDOWS"; then if test -z "$CXX"; then AC_PATH_PROG(CXX, [g++]) fi if test -x "$CXX"; then AC_MSG_CHECKING([for gcc/g++ version]) gcc_version=`$CXX --version | head -1 | cut -d" " -f3` gcc_major=`echo $gcc_version | cut -d. -f1` gcc_minor=`echo $gcc_version | cut -d. -f2` gcc_micro=`echo $gcc_version | cut -d. -f3` gcc_code="gcc${gcc_major}${gcc_minor}" AC_MSG_RESULT([$gcc_code]) compiler_code="$gcc_code" else AC_MSG_WARN([Could not find $CXX to check for version!]) compiler_code="gccXX" fi else ## Try to find VC version... somehow! #import distutils.msvccompiler as msvc #vcversions = sorted(msvc.get_devstudio_versions()) #vcversion = vcversions[0] compiler_code="vc" #%s" % vcversion fi ## The "future-proof" platform tag LCGPLATFORM="${machine}-${distribution}-${compiler_code}-opt" ## Historical exceptions (confirmed as future LCG practice by Stefan Roiser) if test "$os" = "SLC"; then if test "$sl_major" -lt 5; then historical=yes fi fi if test "$os" = "OSX"; then if test "$osx_minor" -lt 6; then historical=yes distribution="osx$osx_major$osx_minor" fi fi if test "$historical" = "yes"; then AC_MSG_NOTICE([Using old style LCG platform tags]) ## Different arch codes machine="ia32" if test `echo $machine | grep 64 &> /dev/null`; then machine="amd64"; fi ## Historical exceptions for GCC version if test "$compiler_code" = "gcc32" -a "$compiler_code" = "gcc40"; then compiler_code="$compiler_code$gcc_micro" fi LCGPLATFORM="${distribution}_${machine}_${compiler_code}" fi LCG_TAG="$LCGPLATFORM" fi AC_SUBST(LCG_TAG) AC_MSG_NOTICE([LCG platform tag is '${LCG_TAG}']) ]) ������������������������������������������������rivet-1.8.3/m4/swig.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000007655�12116077760�012627� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# From http://autoconf-archive.cryp.to/ AC_DEFUN([AC_PROG_SWIG],[ AC_PATH_PROG([SWIG],[swig]) if test -z "$SWIG" ; then AC_MSG_WARN([cannot find 'swig' program. You should look at http://www.swig.org]) SWIG='echo "Error: SWIG is not installed. You should look at http://www.swig.org" ; false' elif test -n "$1" ; then AC_MSG_CHECKING([for SWIG version]) [swig_version=`$SWIG -version 2>&1 | grep 'SWIG Version' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`] AC_MSG_RESULT([$swig_version]) if test -n "$swig_version" ; then # Calculate the required version number components [required=$1] [required_major=`echo $required | sed 's/[^0-9].*//'`] if test -z "$required_major" ; then [required_major=0] fi [required=`echo $required | sed 's/[0-9]*[^0-9]//'`] [required_minor=`echo $required | sed 's/[^0-9].*//'`] if test -z "$required_minor" ; then [required_minor=0] fi [required=`echo $required | sed 's/[0-9]*[^0-9]//'`] [required_patch=`echo $required | sed 's/[^0-9].*//'`] if test -z "$required_patch" ; then [required_patch=0] fi # Calculate the available version number components [available=$swig_version] [available_major=`echo $available | sed 's/[^0-9].*//'`] if test -z "$available_major" ; then [available_major=0] fi [available=`echo $available | sed 's/[0-9]*[^0-9]//'`] [available_minor=`echo $available | sed 's/[^0-9].*//'`] if test -z "$available_minor" ; then [available_minor=0] fi [available=`echo $available | sed 's/[0-9]*[^0-9]//'`] [available_patch=`echo $available | sed 's/[^0-9].*//'`] if test -z "$available_patch" ; then [available_patch=0] fi if test $available_major -ne $required_major \ -o $available_minor -ne $required_minor \ -o $available_patch -lt $required_patch ; then AC_MSG_WARN([SWIG version >= $1 is required. You have $swig_version. You should look at http://www.swig.org]) SWIG='echo "Error: SWIG version >= $1 is required. You have '"$swig_version"'. You should look at http://www.swig.org" ; false' else AC_MSG_NOTICE([SWIG executable is '$SWIG']) SWIG_LIB=`$SWIG -swiglib` AC_MSG_NOTICE([SWIG library directory is '$SWIG_LIB']) fi else AC_MSG_WARN([cannot determine SWIG version]) SWIG='echo "Error: Cannot determine SWIG version. You should look at http://www.swig.org" ; false' fi fi AC_SUBST([SWIG_LIB]) ]) AC_DEFUN([SWIG_ENABLE_CXX],[ AC_REQUIRE([AC_PROG_SWIG]) AC_REQUIRE([AC_PROG_CXX]) SWIG="$SWIG -c++" ]) AC_DEFUN([SWIG_PYTHON],[ AC_REQUIRE([AC_PROG_SWIG]) AC_REQUIRE([AC_PYTHON_DEVEL]) test "x$1" != "xno" || swig_shadow=" -noproxy" AC_SUBST([SWIG_PYTHON_OPT],[-python$swig_shadow]) AC_SUBST([SWIG_PYTHON_CPPFLAGS],[$PYTHON_CPPFLAGS]) ]) �����������������������������������������������������������������������������������rivet-1.8.3/m4/ltsugar.m4���������������������������������������������������������������������������0000644�0001750�0001750�00000010424�12116415374�013320� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/m4/cxx.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000002505�12116077760�012445� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Produce more comprehensible error messages if possible. ## Must be called BEFORE AC_LANG(C++) or it will have no effect. ## See: http://www.bdsoft.com/tools/stlfilt.html #AC_CEDAR_CXXFILTER() #---------------------------------------- AC_DEFUN([AC_CEDAR_CXXFILTER], [ if test "x$CXX" = "x"; then AC_PATH_PROG(GFILT, gfilt, $CXX, $PATH:$HOME/bin:$HOME/local/bin) if test "x$GFILT" != "x"; then CXX="$GFILT -banner:N"; fi fi ]) ## Try to find an "output colorizing" variant on the compiler. ## Haven't decided yet how this should interact with the normal ## AC_PROG_CXX etc. #AC_CEDAR_CXXCOLOR() #---------------------------------------- AC_DEFUN([AC_CEDAR_CXXCOLOR], [ AC_PATH_PROG(COLORCXX, $CXX-color, $CXX, $PATH:$HOME/bin:$HOME/local/bin) CXX=$COLORCXX ]) ## Determine whether a compiler flag is accepted #AC_CEDAR_CHECKCXXFLAG(flag, action-if-true, action-if-false) AC_DEFUN([AC_CEDAR_CHECKCXXFLAG], [ AC_LANG_PUSH(C++) AC_MSG_CHECKING([if the $CXX compiler accepts the $1 flag]) AC_LANG_CONFTEST([AC_LANG_PROGRAM([],[return 0;])]) flag_ok=no #$CXX $1 conftest.cpp >&5 2>/dev/null && flag_ok=yes stat_string=`$CXX $1 conftest.cpp 2>&1 1>&5` ; test -z "$stat_string" && flag_ok=yes AC_MSG_RESULT([$flag_ok]) if test x$flag_ok = xyes; then true $2 else true $3 fi AC_LANG_POP(C++) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/m4/python.m4����������������������������������������������������������������������������0000644�0001750�0001750�00000063162�12116077760�013172� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# =========================================================================== # http://autoconf-archive.cryp.to/az_python.html # =========================================================================== # # SYNOPSIS # # AZ_PYTHON_DEFAULT # AZ_PYTHON_ENABLE # AZ_PYTHON_WITH # AZ_PYTHON_PATH # AZ_PYTHON_VERSION_ENSURE( [2.2] ) # AZ_PYTHON_CSPEC # AZ_PYTHON_LSPEC # # DESCRIPTION # # This file provides autoconf support for those applications that want to # embed python. It supports all pythons >= 2.2 which is the first official # release containing distutils. Version 2.2 of python was released # December 21, 2001. Since it actually executes the python, cross platform # configuration will probably not work. Also, most of the platforms # supported are consistent until you look into MacOSX. The python included # with it is installed as a framework which is a very different # environment to set up the normal tools such as gcc and libtool to deal # with. Therefore, once we establish which python that we are going to # use, we use its distutils to actually compile and link our modules or # applications. # # At this time, it does NOT support linking with Python statically. It # does support dynamic linking. # # This set of macros help define $PYTHON, $PYTHON_USE, $PYTHON_CSPEC and # $PYTHON_LSPEC. $PYTHON defines the full executable path for the Python # being linked to and is used within these macros to determine if that has # been specified or found. These macros do execute this python version so # it must be present on the system at configure time. # # $PYTHON_USE is an automake variable that defines whether Python support # should be included or not in your application. $PYTHON_CSPEC is a # variable that supplies additional CFLAGS for the compilation of the # application/shared library. $PYTHON_LSPEC is a variable that supplies # additional LDFLAGS for linking the application/shared library. # # The following is an example of how to set up for python usage within # your application in your configure.in: # # AZ_PYTHON_DEFAULT( ) # AZ_PYTHON_ENABLE( ) # Optional # AZ_PYTHON_WITH( ) # Optional # AZ_PYTHON_PATH( ) # or AZ_PYTHON_INSIST( ) # # if $PYTHON is not defined, then the following do nothing. # AZ_PYTHON_VERSION_ENSURE( [2.2] ) # AZ_PYTHON_CSPEC # AZ_PYTHON_LSPEC # # The AZ_PYTHON_DEFAULT sets the $PYTHON_USE to false. Thereby, excluding # it if it was optional. # # The AZ_PYTHON_ENABLE looks for the optional configure parameters of # --enable-python/--disable-python and establishes the $PYTHON and # $PYTHON_USE variables accordingly. # # The AZ_PYTHON_WITH looks for the optional configure parameters of # --with-python/--without-python and establishes the $PYTHON and # $PYTHON_USE variables accordingly. # # The AZ_PYTHON_PATH looks for python assuming that none has been # previously found or defined and issues an error if it does not find it. # If it does find it, it establishes the $PYTHON and $PYTHON_USE variables # accordingly. AZ_PYTHON_INSIST could be used here instead if you want to # insist that Python support be included using the --enable-python or # --with-python checks previously done. # # The AZ_PYTHON_VERSION_ENSURE issues an error if the Python previously # found is not of version 2.2 or greater. # # Once that these macros have be run, we can use PYTHON_USE within the # makefile.am file to conditionally add the Python support such as: # # Makefile.am example showing optional inclusion of directories: # # if PYTHON_USE # plugins = plugins # src = src # else # plugins = # src = # endif # # SUBDIRS = . $(plugins) $(src) # # Makefile.am example showing optional shared library build: # # if PYTHON_USE # lib_LTLIBRARIES = libElemList.la # libElemList_la_SOURCES = libElemList.c # libElemList_la_CFLAGS = @PYTHON_CSPEC@ # libElemList_la_LDFLAGS = @PYTHON_LSPEC@ # endif # # Makefile.am example showing optional program build: # # if PYTHON_USE # bin_PROGRAMS = runFunc # runFunc_SOURCES = runFunc.c # runFunc_CFLAGS = @PYTHON_CSPEC@ # runFunc_LDFLAGS = @PYTHON_LSPEC@ # endif # # The above compiles the modules only if PYTHON_USE was specified as true. # Also, the else portion of the if was optional. # # LAST MODIFICATION # # 2008-04-12 # # COPYLEFT # # Copyright (c) 2008 Robert White <kranki@mac.com> # Copyright (c) 2008 Dustin J. Mitchell <dustin@cs.uchicago.edu> # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. # AZ_PYTHON_DEFAULT( ) # ----------------- # Sets the default to not include Python support. AC_DEFUN([AZ_PYTHON_DEFAULT], [ az_python_use=false AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") ]) # AZ_PYTHON_ENABLE( [path] ) # ----------------------------------------------------------------- # Handles the various --enable-python commands. # Input: # $1 is the optional search path for the python executable if needed # Ouput: # PYTHON_USE (AM_CONDITIONAL) is true if python executable found # and --enable-python was requested; otherwise false. # $PYTHON contains the full executable path to python if PYTHON_ENABLE_USE # is true. # # Example: # AZ_PYTHON_ENABLE( ) # or # AZ_PYTHON_ENABLE( "/usr/bin" ) AC_DEFUN([AZ_PYTHON_ENABLE], [ AC_ARG_VAR([PYTHON],[Python Executable Path]) # unless PYTHON was supplied to us (as a precious variable), # see if --enable-python[=PythonExecutablePath], --enable-python, # --disable-python or --enable-python=no was given. if test -z "$PYTHON" then AC_MSG_CHECKING(for --enable-python) AC_ARG_ENABLE( python, AC_HELP_STRING([--enable-python@<:@=PYTHON@:>@], [absolute path name of Python executable] ), [ if test "$enableval" = "yes" then # "yes" was specified, but we don't have a path # for the executable. # So, let's searth the PATH Environment Variable. AC_MSG_RESULT(yes) AC_PATH_PROG( [PYTHON], python, [], $1 ) if test -z "$PYTHON" then AC_MSG_ERROR(no path to python found) fi az_python_use=true AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") AZ_PYTHON_PREFIX( ) elif test "$enableval" = "no" then AC_MSG_RESULT(no) az_python_use=false AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") else # $enableval must be the executable path then. AC_SUBST([PYTHON], ["${enableval}"]) AC_MSG_RESULT($withval) az_python_use=true AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") AZ_PYTHON_PREFIX( ) fi ], [ # --with-python was not specified. AC_MSG_RESULT(no) az_python_use=false AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") ] ) fi ]) # AZ_PYTHON_CSPEC( ) # ----------------- # Set up the c compiler options to compile Python # embedded programs/libraries in $PYTHON_CSPEC if # $PYTHON has been defined. AC_DEFUN([AZ_PYTHON_CSPEC], [ AC_ARG_VAR( [PYTHON], [Python Executable Path] ) if test -n "$PYTHON" then az_python_prefix=`${PYTHON} -c "import sys; print sys.prefix"` if test -z "$az_python_prefix" then AC_MSG_ERROR([Python Prefix is not known]) fi az_python_execprefix=`${PYTHON} -c "import sys; print sys.exec_prefix"` az_python_version=`$PYTHON -c "import sys; print sys.version[[:3]]"` az_python_includespec="-I${az_python_prefix}/include/python${az_python_version}" if test x"$python_prefix" != x"$python_execprefix"; then az_python_execspec="-I${az_python_execprefix}/include/python${az_python_version}" az_python_includespec="${az_python_includespec} $az_python_execspec" fi az_python_ccshared=`${PYTHON} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('CFLAGSFORSHARED')"` az_python_cspec="${az_python_ccshared} ${az_python_includespec}" AC_SUBST([PYTHON_CSPEC], [${az_python_cspec}]) AC_MSG_NOTICE([PYTHON_CSPEC=${az_python_cspec}]) fi ]) # AZ_PYTHON_INSIST( ) # ----------------- # Look for Python and set the output variable 'PYTHON' # to 'python' if found, empty otherwise. AC_DEFUN([AZ_PYTHON_PATH], [ AC_ARG_VAR( [PYTHON], [Python Executable Path] ) if test -z "$PYTHON" then AC_MSG_ERROR([Python Executable not found]) fi ]) # AZ_PYTHON_LSPEC( ) # ----------------- # Set up the linker options to link Python embedded # programs/libraries in $PYTHON_LSPEC if $PYTHON # has been defined. AC_DEFUN([AZ_PYTHON_LSPEC], [ AC_ARG_VAR( [PYTHON], [Python Executable Path] ) if test -n "$PYTHON" then AZ_PYTHON_RUN([ import sys import distutils.sysconfig strUseFrameWork = "--enable-framework" dictConfig = distutils.sysconfig.get_config_vars( ) strConfigArgs = dictConfig.get("CONFIG_ARGS") strLinkSpec = dictConfig.get('LDFLAGS') if -1 == strConfigArgs.find(strUseFrameWork): strLibPL = dictConfig.get("LIBPL") if strLibPL and (strLibPL != ""): strLinkSpec += " -L%s" % (strLibPL) strSys = dictConfig.get("SYSLIBS") if strSys and (strSys != ""): strLinkSpec += " %s" % (strSys) strSHL = dictConfig.get("SHLIBS") if strSHL and (strSHL != ""): strLinkSpec += " %s" % (strSHL) # Construct the Python Library Name. strTmplte = " -lpython%d.%d" if (sys.platform == "win32") or (sys.platform == "os2emx"): strTmplte = " -lpython%d%d" strWrk = strTmplte % ( (sys.hexversion >> 24), ((sys.hexversion >> 16) & 0xff)) strLinkSpec += strWrk else: # This is not ideal since it changes the search path # for Frameworks which could have side-effects on # other included Frameworks. However, it is necessary # where someone has installed more than one frameworked # Python. Frameworks are really only used in MacOSX. strLibFW = dictConfig.get("PYTHONFRAMEWORKPREFIX") if strLibFW and (strLibFW != ""): strLinkSpec += " -F%s" % (strLibFW) strLinkSpec += " %s" % (dictConfig.get('LINKFORSHARED')) print strLinkSpec ]) AC_SUBST([PYTHON_LSPEC], [${az_python_output}]) AC_MSG_NOTICE([PYTHON_LSPEC=${az_python_output}]) fi ]) # AZ_PYTHON_PATH( ) # ----------------- # Look for Python and set the output variable 'PYTHON' # to 'python' if found, empty otherwise. AC_DEFUN([AZ_PYTHON_PATH], [ AC_ARG_VAR( [PYTHON], [Python Executable Path] ) AC_PATH_PROG( PYTHON, python, [], $1 ) if test -z "$PYTHON" then AC_MSG_ERROR([Python Executable not found]) else az_python_use=true fi AM_CONDITIONAL(PYTHON_USE, test "$az_python_use" = "true") ]) # AZ_PYTHON_PREFIX( ) # ------------------- # Use the values of $prefix and $exec_prefix for the corresponding # values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. AC_DEFUN([AZ_PYTHON_PREFIX], [ if test -z "$PYTHON" then AC_MSG_ERROR([Python Executable Path is not known]) fi ax_python_prefix=`${PYTHON} -c "import sys; print sys.prefix"` ax_python_execprefix=`${PYTHON} -c "import sys; print sys.exec_prefix"` AC_SUBST([PYTHON_PREFIX], ["${ax_python_prefix}"]) AC_SUBST([PYTHON_EXECPREFIX], ["${ax_python_execprefix}"]) ]) # AZ_PYTHON_RUN( PYTHON_PROGRAM ) # ----------------- # Run a Python Test Program saving its output # in az_python_output and its condition code # in az_python_cc. AC_DEFUN([AZ_PYTHON_RUN], [ AC_ARG_VAR( [PYTHON], [Python Executable Path] ) if test -z "$PYTHON" then AC_MSG_ERROR([Python Executable not found]) else cat >conftest.py <<_ACEOF $1 _ACEOF az_python_output=`$PYTHON conftest.py` az_python_cc=$? rm conftest.py if test -f "conftest.pyc" then rm conftest.pyc fi fi ]) # AZ_PYTHON_VERSION_CHECK( VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE] ) # ----------------------------------------------------------------------------- # Run ACTION-IF-TRUE if the Python interpreter has version >= VERSION. # Run ACTION-IF-FALSE otherwise. # This test uses sys.hexversion instead of the string equivalant (first # word of sys.version), in order to cope with versions such as 2.2c1. # hexversion has been introduced in Python 1.5.2; it's probably not # worth to support older versions (1.5.1 was released on October 31, 1998). AC_DEFUN([AZ_PYTHON_VERSION_CHECK], [ AC_ARG_VAR( [PYTHON], [Python Executable Path] ) if test -n "$PYTHON" then AC_MSG_CHECKING([whether $PYTHON version >= $1]) AZ_PYTHON_RUN([ import sys, string # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. minver = map(int, string.split('$1', '.')) + [[0, 0, 0]] minverhex = 0 for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[[i]] if sys.hexversion >= minverhex: sys.exit( 0 ) else: sys.exit( 1 ) ]) if test $az_python_cc -eq 0 then $2 m4_ifvaln( [$3], [else $3] ) fi fi ]) # AZ_PYTHON_VERSION_ENSURE( VERSION ) # ----------------- # Insure that the Python Interpreter Version # is greater than or equal to the VERSION # parameter. AC_DEFUN([AZ_PYTHON_VERSION_ENSURE], [ AZ_PYTHON_VERSION_CHECK( [$1], [AC_MSG_RESULT(yes)], [AC_MSG_ERROR(too old)] ) ]) # AZ_PYTHON_WITH( [path] ) # ----------------------------------------------------------------- # Handles the various --with-python commands. # Input: # $1 is the optional search path for the python executable if needed # Ouput: # PYTHON_USE (AM_CONDITIONAL) is true if python executable found # and --with-python was requested; otherwise false. # $PYTHON contains the full executable path to python if PYTHON_USE # is true. # # Example: # AZ_PYTHON_WITH( ) # or # AZ_PYTHON_WITH("/usr/bin") AC_DEFUN([AZ_PYTHON_WITH], [ AC_ARG_VAR([PYTHON],[Python Executable Path]) # unless PYTHON was supplied to us (as a precious variable), # see if --with-python[=PythonExecutablePath], --with-python, # --without-python or --with-python=no was given. if test -z "$PYTHON" then AC_MSG_CHECKING(for --with-python) AC_ARG_WITH( python, AC_HELP_STRING([--with-python@<:@=PYTHON@:>@], [absolute path name of Python executable] ), [ if test "$withval" = "yes" then # "yes" was specified, but we don't have a path # for the executable. # So, let's searth the PATH Environment Variable. AC_MSG_RESULT(yes) AC_PATH_PROG( [PYTHON], python, [], $1 ) if test -z "$PYTHON" then AC_MSG_ERROR(no path to python found) fi az_python_use=true AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") AZ_PYTHON_PREFIX( ) elif test "$withval" = "no" then AC_MSG_RESULT(no) az_python_use=false AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") else # $withval must be the executable path then. AC_SUBST([PYTHON], ["${withval}"]) AC_MSG_RESULT($withval) az_python_use=true AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") AZ_PYTHON_PREFIX( ) fi ], [ # --with-python was not specified. AC_MSG_RESULT(no) az_python_use=false AM_CONDITIONAL(PYTHON_USE, test x"$az_python_use" = x"true") ] ) fi ]) # =========================================================================== # http://autoconf-archive.cryp.to/ac_python_devel.html # =========================================================================== # # SYNOPSIS # # AC_PYTHON_DEVEL([version]) # # DESCRIPTION # # Note: Defines as a precious variable "PYTHON_VERSION". Don't override it # in your configure.ac. # # This macro checks for Python and tries to get the include path to # 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS) # output variables. It also exports $(PYTHON_EXTRA_LIBS) and # $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code. # # You can search for some particular version of Python by passing a # parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please # note that you *have* to pass also an operator along with the version to # match, and pay special attention to the single quotes surrounding the # version number. Don't use "PYTHON_VERSION" for this: that environment # variable is declared as precious and thus reserved for the end-user. # # This macro should work for all versions of Python >= 2.1.0. As an end # user, you can disable the check for the python version by setting the # PYTHON_NOVERSIONCHECK environment variable to something else than the # empty string. # # If you need to use this macro for an older Python version, please # contact the authors. We're always open for feedback. # # LAST MODIFICATION # # 2008-04-12 # # COPYLEFT # # Copyright (c) 2008 Sebastian Huber <sebastian-huber@web.de> # Copyright (c) 2008 Alan W. Irwin <irwin@beluga.phys.uvic.ca> # Copyright (c) 2008 Rafael Laboissiere <rafael@laboissiere.net> # Copyright (c) 2008 Andrew Collier <colliera@ukzn.ac.za> # Copyright (c) 2008 Matteo Settenvini <matteo@member.fsf.org> # Copyright (c) 2008 Horst Knorr <hk_classes@knoda.org> # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see <http://www.gnu.org/licenses/>. # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Macro Archive. When you make and # distribute a modified version of the Autoconf Macro, you may extend this # special exception to the GPL to apply to your modified version as well. AC_DEFUN([AC_PYTHON_DEVEL],[ # # Allow the use of a (user set) custom python version # AC_ARG_VAR([PYTHON_VERSION],[The installed Python version to use, for example '2.3'. This string will be appended to the Python interpreter canonical name.]) AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]]) if test -z "$PYTHON"; then AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path]) PYTHON_VERSION="" fi # # Check for a version of Python >= 2.1.0 # AC_MSG_CHECKING([for a version of Python >= '2.1.0']) ac_supports_python_ver=`$PYTHON -c "import sys, string; \ ver = string.split(sys.version)[[0]]; \ print ver >= '2.1.0'"` if test "$ac_supports_python_ver" != "True"; then if test -z "$PYTHON_NOVERSIONCHECK"; then AC_MSG_RESULT([no]) AC_MSG_FAILURE([ This version of the AC@&t@_PYTHON_DEVEL macro doesn't work properly with versions of Python before 2.1.0. You may need to re-run configure, setting the variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG, PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand. Moreover, to disable this check, set PYTHON_NOVERSIONCHECK to something else than an empty string. ]) else AC_MSG_RESULT([skip at user request]) fi else AC_MSG_RESULT([yes]) fi # # if the macro parameter ``version'' is set, honour it # if test -n "$1"; then AC_MSG_CHECKING([for a version of Python $1]) ac_supports_python_ver=`$PYTHON -c "import sys, string; \ ver = string.split(sys.version)[[0]]; \ print ver $1"` if test "$ac_supports_python_ver" = "True"; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) AC_MSG_ERROR([this package requires Python $1. If you have it installed, but it isn't the default Python interpreter in your system path, please pass the PYTHON_VERSION variable to configure. See ``configure --help'' for reference. ]) PYTHON_VERSION="" fi fi # # Check if you have distutils, else fail # AC_MSG_CHECKING([for the distutils Python package]) ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` if test -z "$ac_distutils_result"; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) AC_MSG_ERROR([cannot import Python module "distutils". Please check your Python installation. The error was: $ac_distutils_result]) PYTHON_VERSION="" fi # # Check for Python include path # AC_MSG_CHECKING([for Python include path]) if test -z "$PYTHON_CPPFLAGS"; then python_path=`$PYTHON -c "import distutils.sysconfig; \ print distutils.sysconfig.get_python_inc();"` if test -n "${python_path}"; then python_path="-I$python_path" fi PYTHON_CPPFLAGS=$python_path fi AC_MSG_RESULT([$PYTHON_CPPFLAGS]) AC_SUBST([PYTHON_CPPFLAGS]) # # Check for Python library path # AC_MSG_CHECKING([for Python library path]) if test -z "$PYTHON_LDFLAGS"; then # (makes two attempts to ensure we've got a version number # from the interpreter) py_version=`$PYTHON -c "from distutils.sysconfig import *; \ from string import join; \ print join(get_config_vars('VERSION'))"` if test "$py_version" == "[None]"; then if test -n "$PYTHON_VERSION"; then py_version=$PYTHON_VERSION else py_version=`$PYTHON -c "import sys; \ print sys.version[[:3]]"` fi fi PYTHON_LDFLAGS=`$PYTHON -c "from distutils.sysconfig import *; \ from string import join; \ print '-L' + get_python_lib(0,1), \ '-lpython';"`$py_version fi AC_MSG_RESULT([$PYTHON_LDFLAGS]) AC_SUBST([PYTHON_LDFLAGS]) # # Check for site packages # AC_MSG_CHECKING([for Python site-packages path]) if test -z "$PYTHON_SITE_PKG"; then PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \ print distutils.sysconfig.get_python_lib(0,0);"` fi AC_MSG_RESULT([$PYTHON_SITE_PKG]) AC_SUBST([PYTHON_SITE_PKG]) # # libraries which must be linked in when embedding # AC_MSG_CHECKING(python extra libraries) if test -z "$PYTHON_EXTRA_LIBS"; then PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \ conf = distutils.sysconfig.get_config_var; \ print conf('LOCALMODLIBS'), conf('LIBS')"` fi AC_MSG_RESULT([$PYTHON_EXTRA_LIBS]) AC_SUBST(PYTHON_EXTRA_LIBS) # # linking flags needed when embedding # AC_MSG_CHECKING(python extra linking flags) if test -z "$PYTHON_EXTRA_LDFLAGS"; then PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \ conf = distutils.sysconfig.get_config_var; \ print conf('LINKFORSHARED')"` fi AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS]) AC_SUBST(PYTHON_EXTRA_LDFLAGS) # # final check to see if everything compiles alright # AC_MSG_CHECKING([consistency of all components of python development environment]) AC_LANG_PUSH([C]) # save current global flags LIBS="$ac_save_LIBS $PYTHON_LDFLAGS" CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS" AC_TRY_LINK([ #include <Python.h> ],[ Py_Initialize(); ],[pythonexists=yes],[pythonexists=no]) AC_MSG_RESULT([$pythonexists]) if test ! "$pythonexists" = "yes"; then AC_MSG_ERROR([ Could not link test program to Python. Maybe the main Python library has been installed in some non-standard library path. If so, pass it to configure, via the LDFLAGS environment variable. Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib" ============================================================================ ERROR! You probably have to install the development version of the Python package for your distribution. The exact name of this package varies among them. ============================================================================ ]) PYTHON_VERSION="" fi AC_LANG_POP # turn back to default flags CPPFLAGS="$ac_save_CPPFLAGS" LIBS="$ac_save_LIBS" # # all done! # ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/m4/gsl.m4�������������������������������������������������������������������������������0000644�0001750�0001750�00000003545�12116077760�012435� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#AC_SEARCH_GSL(actionIfFound, actionIfNotFound) AC_DEFUN([AC_SEARCH_GSL],[ AC_ARG_WITH([gsl], AC_HELP_STRING(--with-gsl, [path to GSL library and header files])) ## Use a specified --with-gsl arg to set basic paths, if provided GSLCONFIG_PATH=$PATH if test -e "$with_gsl"; then GSLCONFIG_PATH=$with_gsl/bin:$GSLCONFIG_PATH GSLPATH="$with_gsl" GSLINCPATH="$GSLPATH/include" GSL_CPPFLAGS="-I$GSLINCPATH" GSL_CXXFLAGS="" GSL_LDFLAGS="-L$GSLPATH/lib -lgsl -lgslcblas -lm" fi ## Try to do better, using the gsl-config script AC_PATH_PROG(GSLCONFIG, gsl-config, [], [$GSLCONFIG_PATH]) if test -x "$GSLCONFIG"; then AC_MSG_NOTICE(Using $GSLCONFIG to find GSL flags) GSLPATH=`$GSLCONFIG --prefix` GSLINCPATH="$GSLPATH/include" GSL_CPPFLAGS=`$GSLCONFIG --cflags` GSL_CXXFLAGS=`$GSLCONFIG --cflags` GSL_LDFLAGS=`$GSLCONFIG --libs` fi ## If it's worked, propagate the variables and execute success arg if test -e "$GSLPATH"; then ## Otherwise execute the fail arg AC_SUBST([GSLPATH]) AC_SUBST([GSLINCPATH]) AC_SUBST([GSL_CPPFLAGS]) AC_SUBST([GSL_CXXFLAGS]) AC_SUBST([GSL_LDFLAGS]) AM_CONDITIONAL([WITH_GSL], true) AM_CONDITIONAL([WITH_GSLLIB], true) AM_CONDITIONAL([WITH_GSLINC], true) AM_CONDITIONAL([WITHOUT_GSL], false) AM_CONDITIONAL([WITHOUT_GSLLIB], false) AM_CONDITIONAL([WITHOUT_GSLINC], false) AC_MSG_NOTICE([GSL include path is $GSLINCPATH]) AC_MSG_NOTICE([GSL CPPFLAGS is $GSL_CPPFLAGS]) AC_MSG_NOTICE([GSL CXXFLAGS is $GSL_CXXFLAGS]) AC_MSG_NOTICE([GSL LDFLAGS is $GSL_LDFLAGS]) $1 else AM_CONDITIONAL([WITH_GSL], false) AM_CONDITIONAL([WITH_GSLLIB], false) AM_CONDITIONAL([WITH_GSLINC], false) AM_CONDITIONAL([WITHOUT_GSL], true) AM_CONDITIONAL([WITHOUT_GSLLIB], true) AM_CONDITIONAL([WITHOUT_GSLINC], true) $2 fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/m4/ltoptions.m4�������������������������������������������������������������������������0000644�0001750�0001750�00000030073�12116415374�013674� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/m4/pkgchecks.m4�������������������������������������������������������������������������0000644�0001750�0001750�00000040471�12116077760�013611� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Convert argument to an absolute path AC_DEFUN([AC_CEDAR_ABSPATH], [ inpath=${$1} abspath="" if test -d "$inpath"; then abspath=`cd $inpath && pwd` elif test -f "$inpath"; then dirpart=`dirname $inpath` localpart=`basename $inpath` abspath="`cd $dirpart && pwd`/$localpart" fi if test -z "$abspath"; then AC_MSG_ERROR(Could not make absolute path $1 from ${$1}) fi $1=$abspath ]) # A version of AC_SUBST which ensures that paths are absolute AC_DEFUN([AC_CEDAR_PATH_SUBST], [ AC_CEDAR_ABSPATH($1) AC_SUBST($1) ]) # Declares an external package to be used. This macro will declare appropriate # command line switches for ./configure and corresponding environment variables # to define the package's prefix path, library path and include path. The # configure command line option switches override the corresponding environment # variables. Various permutations of capitalisation, version number appendage # and include/lib path will be attempted. Omit the version number if it isn't # relevant. The third and fourth options will be executed respectively if the # package is or isn't found: this is an ideal place to place ERROR/WARNING # messages as appropriate for mandatory/optional packages and to run tests of # the library if it appears to be there. # #AC_CEDAR_LIBRARYANDHEADERS(PrettyName, ReleaseNumber, action-if-true, action-if-false) #---------------------------------------- AC_DEFUN([AC_CEDAR_LIBRARYANDHEADERS], [ ## Define a bunch of case permutations m4_define([cedar_PkgName], [$1])dnl m4_define([cedar_PKGNAME], [translit([translit([$1], [a-z], [A-Z])], [.])])dnl m4_define([cedar_pkgname], [translit([translit([$1], [A-Z], [a-z])], [.])])dnl m4_define([cedar_SAFEPKGNAME], [translit(cedar_PKGNAME, [-], [_])])dnl m4_define([cedar_safepkgname], [translit(cedar_pkgname, [-], [_])])dnl m4_define([cedar_pkgversion], [$2])dnl pkgpath="" pkglib=no; pkginc=no; pkggood=no ## Don't know why this isn't working by default: test x${prefix} = xNONE && prefix=${ac_default_prefix} ## Environment variables for specifying paths AC_ARG_VAR(@&t@cedar_SAFEPKGNAME@&t@PATH, path to cedar_PkgName @<:@$prefix and various standard locations@:>@) pkgpath=${cedar_SAFEPKGNAME@&t@PATH} ## "configure" option switches for specifying paths AC_ARG_WITH([cedar_safepkgname], [AC_HELP_STRING(--with-@&t@cedar_safepkgname, path to cedar_PkgName @<:@$prefix and various standard locations@:>@)], [pkgpath=$with_@&t@cedar_safepkgname], []) dnl echo "DEBUG: withval=$withval, with_@&t@cedar_safepkgname=$with_@&t@cedar_safepkgname -> pkgpath=$pkgpath" if test "$pkgpath"; then cedar_SAFEPKGNAME@&t@PATH="$pkgpath"; fi ## Has this lib been disabled? #echo "DEBUG: pkgpath = $pkgpath" if test x$pkgpath = xno; then AC_MSG_NOTICE(Not building against cedar_PkgName) AM_CONDITIONAL(WITH_@&t@cedar_SAFEPKGNAME@&t@INC, false) AM_CONDITIONAL(WITH_@&t@cedar_SAFEPKGNAME@&t@LIB, false) AM_CONDITIONAL(WITHOUT_@&t@cedar_SAFEPKGNAME@&t@INC, true) AM_CONDITIONAL(WITHOUT_@&t@cedar_SAFEPKGNAME@&t@LIB, true) $4 else ## Check library and header AC_CEDAR_LIBRARY(cedar_PkgName, cedar_pkgversion, , pkglib=no) AC_CEDAR_HEADERS(cedar_PkgName, cedar_pkgversion, , pkginc=no) ## Execute pass/fail shell code if test "x$pkglib" = "xyes" && test "x$pkginc" = "xyes"; then #AC_MSG_NOTICE([cedar_PkgName paths verified]) pkggood="yes" $3 else pkggood="no" $4 fi fi ## Export variables to automake have_@&t@cedar_safepkgname=no test x$pkggood != xno && have_@&t@cedar_safepkgname=yes AM_CONDITIONAL(WITH_@&t@cedar_SAFEPKGNAME, [test x$pkggood != xno]) AM_CONDITIONAL(WITHOUT_@&t@cedar_SAFEPKGNAME, [test x$pkggood = xno]) ]) #AC_CEDAR_HEADERS(PrettyName, ReleaseNumber, action-if-true, action-if-false) AC_DEFUN([AC_CEDAR_HEADERS], [ ## Define a bunch of case permutations m4_define([cedar_PkgName], [$1])dnl m4_define([cedar_PKGNAME], [translit([translit([$1], [a-z], [A-Z])], [.])])dnl m4_define([cedar_pkgname], [translit([translit([$1], [A-Z], [a-z])], [.])])dnl m4_define([cedar_SAFEPKGNAME], [translit(cedar_PKGNAME, [-], [_])])dnl m4_define([cedar_safepkgname], [translit(cedar_pkgname, [-], [_])])dnl m4_define([cedar_IncName], [cedar_PkgName])dnl m4_define([cedar_INCNAME], [cedar_PKGNAME])dnl m4_define([cedar_incname], [cedar_pkgname])dnl m4_define([cedar_IncName1], [translit(cedar_PkgName, [-], [_])])dnl m4_define([cedar_INCNAME1], [translit(cedar_PKGNAME, [-], [_])])dnl m4_define([cedar_incname1], [translit(cedar_pkgname, [-], [_])])dnl m4_define([cedar_IncName2], [translit(cedar_PkgName, [-], [])])dnl m4_define([cedar_INCNAME2], [translit(cedar_PKGNAME, [-], [])])dnl m4_define([cedar_incname2], [translit(cedar_pkgname, [-], [])])dnl m4_define([cedar_pkgversion], [$2])dnl ## We have a set of user-set variables: pkgpath=""; pkgincpath="" ## Also need some status variables: pkginc=no ## Don't know why this isn't working by default: test x${prefix} = xNONE && prefix=${ac_default_prefix} ## Environment variables for specifying paths AC_ARG_VAR(@&t@cedar_SAFEPKGNAME@&t@PATH, path to cedar_PkgName @<:@$prefix and various standard locations@:>@) AC_ARG_VAR(@&t@cedar_SAFEPKGNAME@&t@INCPATH, path to the directory containing the cedar_PkgName header files @<:@cedar_SAFEPKGNAME@&t@PATH/include@:>@) ## "configure" option switches for specifying paths pkgpath=${cedar_SAFEPKGNAME@&t@PATH} AC_ARG_WITH(cedar_safepkgname, AC_HELP_STRING(--with-@&t@cedar_safepkgname@&t@, path to cedar_PkgName @<:@$prefix and various standard locations@:>@), [pkgpath=$with_@&t@cedar_safepkgname], []) dnl echo "DEBUG: withval=$withval, with_@&t@cedar_safepkgname=$with_@&t@cedar_safepkgname -> pkgpath=$pkgpath" if test "$pkgpath"; then cedar_SAFEPKGNAME@&t@PATH="$pkgpath"; fi pkgincpath=${cedar_SAFEPKGNAME@&t@INCPATH} AC_ARG_WITH(cedar_safepkgname@&t@-incpath, AC_HELP_STRING(--with-@&t@cedar_safepkgname@&t@-incpath, path to directory containing cedar_PkgName headers @<:@cedar_SAFEPKGNAME@&t@PATH/include@:>@), [pkgincpath=$with_@&t@cedar_safepkgname@&t@_incpath], []) ## Has this header been disabled? if test x$pkgpath = xno; then AC_MSG_NOTICE(Not building against cedar_PkgName) $4 else ## Base paths pkgbases="$prefix $ac_default_prefix /usr /" if test "$pkgpath"; then pkgbases="$pkgpath"; fi ## Look for include files: first build the search list... incpaths="" if test "$pkgincpath"; then incpath=`echo $pkgincpath | sed -e 's://*:/:g' -e 's:/$::'` incpaths="$incpath" else for base in $pkgbases; do incpath=`echo "$base/include" | sed -e 's://*:/:g' -e 's:/$::'` incpaths="$incpaths $incpath" done fi if test "x$CEDAR_M4_DEBUG" != "x"; then echo "DEBUG: inc paths = $incpaths" fi ## Build package names incnames="cedar_IncName cedar_INCNAME cedar_incname" if test "cedar_IncName" != "cedar_IncName1"; then incnames="$incnames cedar_IncName1 cedar_INCNAME1 cedar_incname1" fi if test "cedar_IncName" != "cedar_IncName2"; then incnames="$incnames cedar_IncName2 cedar_INCNAME2 cedar_incname2" fi ## .. and then do the search: for incpath in $incpaths; do for incname in $incnames; do fullincpath="$incpath/$incname" if test "x$CEDAR_M4_DEBUG" != "x"; then echo "Testing cedar_PkgName inc path: $fullincpath" fi if test -d $fullincpath; then pkginc=yes break else pkginc=no; fi if test x$pkginc != xno; then break; fi done if test x$pkginc != xno; then break; fi done if test x$pkginc != xno; then cedar_SAFEPKGNAME@&t@INCPATH="$incpath" AC_CEDAR_ABSPATH(cedar_SAFEPKGNAME@&t@INCPATH) cedar_SAFEPKGNAME@&t@INCNAME="$incname" cedar_SAFEPKGNAME@&t@CPPFLAGS="-I$cedar_SAFEPKGNAME@&t@INCPATH" #echo cedar_SAFEPKGNAME@&t@INCPATH : $cedar_SAFEPKGNAME@&t@INCPATH AC_MSG_NOTICE([Found cedar_PkgName header directory at $incpath]) else ## Last resort --- only tried if $pkgpath was specified if test x$pkgpath != x; then incpath="$pkgpath/include" if test -d "$incpath"; then cedar_SAFEPKGNAME@&t@INCPATH=`echo $incpath | sed -e s:'/$':'':` AC_CEDAR_ABSPATH(cedar_SAFEPKGNAME@&t@INCPATH) cedar_SAFEPKGNAME@&t@INCNAME="" cedar_SAFEPKGNAME@&t@CPPFLAGS="-I$cedar_SAFEPKGNAME@&t@INCPATH" pkginc=yes #AC_MSG_NOTICE([Found cedar_PkgName header directory at $incpath]) fi else AC_MSG_WARN(cedar_PkgName header directory was not found) fi fi ## Execute pass/fail shell code if test "x$pkginc" = "xyes"; then true $3 else true $4 fi fi ## Export variables to automake AC_SUBST(cedar_SAFEPKGNAME@&t@INCPATH) AC_SUBST(cedar_SAFEPKGNAME@&t@INCNAME) AC_SUBST(cedar_SAFEPKGNAME@&t@CPPFLAGS) AM_CONDITIONAL(WITH_@&t@cedar_SAFEPKGNAME@&t@INC, [test x$pkgginc != xno]) AM_CONDITIONAL(WITHOUT_@&t@cedar_SAFEPKGNAME@&t@INC, [test x$pkgginc = xno]) ]) #AC_CEDAR_LIBRARY(PrettyName, ReleaseNumber, action-if-true, action-if-false) AC_DEFUN([AC_CEDAR_LIBRARY], [ ## Define a bunch of case permutations m4_define([cedar_PkgName], [$1])dnl m4_define([cedar_PKGNAME], [translit([translit([$1], [a-z], [A-Z])], [.])])dnl m4_define([cedar_pkgname], [translit([translit([$1], [A-Z], [a-z])], [.])])dnl m4_define([cedar_SAFEPKGNAME], [translit(cedar_PKGNAME, [-], [_])])dnl m4_define([cedar_safepkgname], [translit(cedar_pkgname, [-], [_])])dnl m4_define([cedar_LibName], [cedar_PkgName])dnl m4_define([cedar_LIBNAME], [cedar_PKGNAME])dnl m4_define([cedar_libname], [cedar_pkgname])dnl m4_define([cedar_LibName1], [translit(cedar_PkgName, [-], [_])])dnl m4_define([cedar_LIBNAME1], [translit(cedar_PKGNAME, [-], [_])])dnl m4_define([cedar_libname1], [translit(cedar_pkgname, [-], [_])])dnl m4_define([cedar_LibName2], [translit(cedar_PkgName, [-], [])])dnl m4_define([cedar_LIBNAME2], [translit(cedar_PKGNAME, [-], [])])dnl m4_define([cedar_libname2], [translit(cedar_pkgname, [-], [])])dnl m4_define([cedar_libversion], [$2])dnl ## We have a set of user-set variables: pkgpath=""; pkglibpath=""; pkglibname="" ## Also need some status variables: pkglib=no ## Don't know why this isn't working by default: test x${prefix} = xNONE && prefix=${ac_default_prefix} ## Environment variables for specifying paths AC_ARG_VAR(@&t@cedar_SAFEPKGNAME@&t@PATH, path to cedar_PkgName @<:@$prefix and various standard locations@:>@) AC_ARG_VAR(@&t@cedar_SAFEPKGNAME@&t@LIBPATH, path to the directory containing the cedar_PkgName library @<:@cedar_SAFEPKGNAME@&t@PATH/lib or cedar_SAFEPKGNAME@&t@PATH/lib/cedar_PkgName@:>@) AC_ARG_VAR(@&t@cedar_SAFEPKGNAME@&t@LIBNAME, name to be used when linking the cedar_PkgName library @<:@cedar_PkgName@:>@) pkgpath=${cedar_SAFEPKGNAME@&t@PATH} ## "configure" option switches for specifying paths AC_ARG_WITH([cedar_safepkgname], [AC_HELP_STRING(--with-@&t@cedar_safepkgname, path to cedar_PkgName @<:@$prefix and various standard locations@:>@)], [pkgpath=$with_@&t@cedar_safepkgname], []) dnl echo "DEBUG: withval=$withval, with_@&t@cedar_safepkgname=$with_@&t@cedar_safepkgname -> pkgpath=$pkgpath" if test "$pkgpath"; then cedar_SAFEPKGNAME@&t@PATH="$pkgpath"; fi pkglibpath=${cedar_SAFEPKGNAME@&t@LIBPATH} pkglibname=${cedar_SAFEPKGNAME@&t@LIBFLAG} AC_ARG_WITH(cedar_safepkgname@&t@-libpath, AC_HELP_STRING(--with-@&t@cedar_safepkgname@&t@-libpath, path to directory containing cedar_PkgName library @<:@cedar_SAFEPKGNAME@&t@PATH/lib or cedar_SAFEPKGNAME@&t@PATH/lib/cedar_PkgName@:>@), [pkglibpath=$with_@&t@cedar_safepkgname@&t@_libpath], []) AC_ARG_WITH(cedar_safepkgname@&t@-libname, AC_HELP_STRING(--with-@&t@cedar_safepkgname@&t@-libname, name to be used when linking the cedar_PkgName library @<:@cedar_PkgName@:>@), [pkglibname=$with_@&t@cedar_safepkgname@&t@_libname], []) ## Has this lib been disabled? if test x$pkgpath = xno; then AC_MSG_NOTICE(Not building against cedar_PkgName) $4 else ## Base paths pkgbases="$prefix $ac_default_prefix /usr /" if test "$pkgpath"; then pkgbases="$pkgpath"; fi if test "x$CEDAR_M4_DEBUG" != "x"; then echo "DEBUG: $pkgpath -> $pkgbases" fi ## Build a list of library search locations, unless specified libdirnames="lib" ## Test for 64-bit mode and add lib64 as first choice ## library dir name if appropriate if test -z "$UNAME"; then AC_PATH_PROG(UNAME, [uname], [no]) fi if test x$UNAME != xno; then if test -n `$UNAME -m | grep 64`; then libdirnames="lib64 $libdirnames" fi fi libpaths="" if test "$pkglibpath"; then libpath=`echo $pkglibpath | sed -e 's://*:/:g' -e 's:/$::'` libpaths="$libpath" else ## Outer loop over lib / lib64 part for libdirname in $libdirnames; do ## Inner loop over base path for base in $pkgbases; do libpath=`echo "$base/$libdirname" | sed -e 's://*:/:g' -e 's:/$::'` libpaths="$libpaths $libpath" done done libpaths="$libpaths ./src" fi ## Use case permuatations on the package name (mixed, all-upper and ## all-lower), plus punctuation replacements. libnames="cedar_LibName cedar_LIBNAME cedar_libname" if test "cedar_LibName" != "cedar_LibName1"; then libnames="$libnames cedar_LibName1 cedar_LIBNAME1 cedar_libname1" fi if test "cedar_LibName" != "cedar_LibName2"; then libnames="$libnames cedar_LibName2 cedar_LIBNAME2 cedar_libname2" fi if test "$pkglibname"; then libnames=$pkglibname; fi ## Define library versions libversions="" if test x"cedar_libversion" != x; then libversions="-cedar_libversion cedar_libversion" fi ## Look for library with various name permutations for libpath in $libpaths; do for libversion in $libversions ""; do for libname in $libnames; do for libextn in la so dylib dll a; do testpath="${libpath}/lib${libname}${libversion}.${libextn}" testpath=`echo $testpath | sed -e 's://*:/:g' -e 's:/$::'` if test "x$CEDAR_M4_DEBUG" != "x"; then echo "DEBUG: Testing $testpath" fi if test -e $testpath; then pkglib=yes break else pkglib=no fi done if test x$pkglib != xno; then break; fi done if test x$pkglib != xno; then break; fi done if test x$pkglib != xno; then break; fi done ## Announce success/failure and set variables if test x$pkglib != xno; then ## TODO: Can we just use $testpath here? libfullpath=`echo ${libpath}/lib${libname}${libversion}.${libextn}` libfullpath=`echo $libfullpath | sed -e 's://*:/:g' -e 's:/$::'` AC_CEDAR_ABSPATH(libfullpath) cedar_SAFEPKGNAME@&t@LIB="$libfullpath" cedar_SAFEPKGNAME@&t@LIBPATH=`dirname $libfullpath` ## TODO: Can we just use $libname here? cedar_SAFEPKGNAME@&t@LIBNAME=`basename $libfullpath | sed -e s/'^lib'// -e s/'\.@<:@a-zA-Z@:>@*$'//` cedar_SAFEPKGNAME@&t@LDFLAGS="-L$cedar_SAFEPKGNAME@&t@LIBPATH" cedar_SAFEPKGNAME@&t@LDLIBS="-l$cedar_SAFEPKGNAME@&t@LIBNAME" AC_MSG_NOTICE([Found cedar_PkgName library at ${libfullpath}]) else AC_MSG_WARN(cedar_PkgName library was not found) fi ## Execute pass/fail shell code if test "x$pkglib" = "xyes"; then true $3 else true $4 fi fi ## Export variables to automake AC_SUBST(cedar_SAFEPKGNAME@&t@LIB) AC_SUBST(cedar_SAFEPKGNAME@&t@LIBPATH) AC_SUBST(cedar_SAFEPKGNAME@&t@LIBNAME) AC_SUBST(cedar_SAFEPKGNAME@&t@LDFLAGS) AC_SUBST(cedar_SAFEPKGNAME@&t@LDLIBS) AM_CONDITIONAL(WITH_@&t@cedar_SAFEPKGNAME@&t@LIB, [test x$pkglib != xno]) AM_CONDITIONAL(WITHOUT_@&t@cedar_SAFEPKGNAME@&t@LIB, [test x$pkglib = xno]) ]) # Create a variable called EMPTY with appropriate content #AC_EMPTY_SUBST AC_DEFUN([AC_EMPTY_SUBST], [EMPTY="" AC_SUBST(EMPTY) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/m4/lt~obsolete.m4�����������������������������������������������������������������������0000644�0001750�0001750�00000013756�12116415374�014224� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) ������������������rivet-1.8.3/m4/ltversion.m4�������������������������������������������������������������������������0000644�0001750�0001750�00000001262�12116415374�013664� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/aclocal.m4������������������������������������������������������������������������������0000644�0001750�0001750�00000110304�12116616063�012711� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# generated automatically by aclocal 1.11.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, # Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.6], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.6])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, # 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2009, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [ --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0')]) case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few `make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using `$V' instead of `$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar <conftest.tar]) grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/cxx.m4]) m4_include([m4/gsl.m4]) m4_include([m4/lcg.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) m4_include([m4/osx.m4]) m4_include([m4/pkgchecks.m4]) m4_include([m4/python.m4]) m4_include([m4/swig.m4]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/bin/������������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�12131473214�011616� 5����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/bin/make-plots��������������������������������������������������������������������������0000755�0001750�0001750�00000336543�12123033122�013625� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env python """\ Usage: %prog [options] file.dat [file2.dat ...] TODO * Optimise output for e.g. lots of same-height bins in a row * Add a RatioFullRange directive to show the full range of error bars + MC envelope in the ratio * Tidy LaTeX-writing code -- faster to compile one doc only, then split it? * Handle boolean values flexibly (yes, no, true, false, etc. as well as 1, 0) """ ## ## This program is copyright by Hendrik Hoeth <hoeth@linta.de>. It may be used ## for scientific and private purposes. Patches are welcome, but please don't ## redistribute changed versions yourself. ## ## $Date: 2013-03-18 15:49:01 +0100 (Mon, 18 Mar 2013) $ ## $Revision: 4227 $ ## import sys if sys.version_info[:3] < (2,4,0): print "rivet scripts require Python version >= 2.4.0... exiting" sys.exit(1) import os, logging, re import tempfile import getopt import string from math import * ## Regex patterns pat_begin_block = re.compile(r'^#+\s*BEGIN ([A-Z0-9_]+) ?(\S+)?') pat_end_block = re.compile('^#+\s*END ([A-Z0-9_]+)') pat_comment = re.compile('^#|^\s*$') pat_property = re.compile('^(\w+?)=(.*)$') pat_path_property = re.compile('^(\S+?)::(\w+?)=(.*)$') def fuzzyeq(a, b, tolerance=1e-6): "Fuzzy equality comparison function for floats, with given fractional tolerance" if a == 0 and b == 0: return True return 2.0*abs(a-b)/abs(a+b) < tolerance def is_end_marker(line, blockname): m = pat_end_block.match(line) return m and m.group(1) == blockname def is_comment(line): return pat_comment.match(line) is not None class Inputdata: def __init__(self, filename): self.filename=filename+".dat" self.histos = {} self.special = {} self.functions = {} self.description = {} self.pathdescriptions = [] self.description['is2dim'] = False f = open(filename+'.dat') for line in f: m = pat_begin_block.match(line) if m: name, path = m.group(1,2) if path is None and name != 'PLOT': raise Exception('BEGIN sections need a path name.') if name == 'PLOT': self.read_input(f); elif name == 'SPECIAL': self.special[path] = Special(f) elif name == 'HISTOGRAM': self.histos[path] = Histogram(f) self.description['is2dim'] = self.histos[path].is2dimensional() elif name == 'HISTO1D': self.histos[path] = Histo1D(f) elif name == 'FUNCTION': self.functions[path] = Function(f) # elif is_comment(line): # continue # else: # self.read_path_based_input(line) f.close() self.apply_config_files(opts.CONFIGFILES) self.description['PlotSizeX'] = 10. if self.description['is2dim']: self.description['PlotSizeX'] -= 1.5 self.description['PlotSizeY'] = 6. if self.description.has_key('PlotSize') and self.description['PlotSize']!='': plotsizex,plotsizey = self.description['PlotSize'].split(',') self.description['PlotSizeX'] = float(plotsizex) self.description['PlotSizeY'] = float(plotsizey) del self.description['PlotSize'] self.description['RatioPlotSizeY'] = 0. if self.description.has_key('MainPlot') and self.description['MainPlot']=='0': self.description['RatioPlot'] = '1' self.description['PlotSizeY'] = 0. if self.description.has_key('RatioPlot') and self.description['RatioPlot']=='1': if self.description.has_key('RatioPlotYSize') and self.description['RatioPlotYSize']!='': self.description['RatioPlotSizeY'] = float(self.description['RatioPlotYSize']) else: if self.description.has_key('MainPlot') and self.description['MainPlot']=='0': self.description['RatioPlotSizeY'] = 6. else: self.description['RatioPlotSizeY'] = 3. self.description['LogX'] = self.description.has_key('LogX') and self.description['LogX']=='1' self.description['LogY'] = self.description.has_key('LogY') and self.description['LogY']=='1' self.description['LogZ'] = self.description.has_key('LogZ') and self.description['LogZ']=='1' if self.description.has_key('Rebin'): for i in self.histos: self.histos[i].description['Rebin'] = self.description['Rebin'] histoordermap = {} histolist = self.histos.keys() if self.description.has_key('DrawOnly'): histolist = filter(self.histos.keys().count, self.description['DrawOnly'].strip().split()) for histo in histolist: order = 0 if self.histos[histo].description.has_key('PlotOrder'): order = int(self.histos[histo].description['PlotOrder']) if not order in histoordermap: histoordermap[order] = [] histoordermap[order].append(histo) sortedhistolist = [] for i in sorted(histoordermap.keys()): sortedhistolist.extend(histoordermap[i]) self.description['DrawOnly']=sortedhistolist def read_input(self, f): for line in f: if is_end_marker(line, 'PLOT'): break elif is_comment(line): continue m = pat_property.match(line) if m: prop, value = m.group(1,2) if prop in self.description: logging.debug("Overwriting property %s = %s -> %s" % (prop, self.description[prop], value)) ## Use strip here to deal with DOS newlines containing \r self.description[prop.strip()] = value.strip() def apply_config_files(self, conffiles): if conffiles is not None: for filename in conffiles: cf = open(filename,'r') lines = cf.readlines() for i in range(0, len(lines)): ## First evaluate PLOT sections m = pat_begin_block.match(lines[i]) if m and m.group(1) == 'PLOT' and re.match(m.group(2),self.filename): while i<len(lines)-1: i = i+1 if is_end_marker(lines[i], 'PLOT'): break elif is_comment(lines[i]): continue m = pat_property.match(lines[i]) if m: prop, value = m.group(1,2) if prop in self.description: logging.debug("Overwriting from conffile property %s = %s -> %s" % (prop, self.description[prop], value)) ## Use strip here to deal with DOS newlines containing \r self.description[prop.strip()] = value.strip() elif is_comment(lines[i]): continue else: ## Then evaluate path-based settings, e.g. for HISTOGRAMs m = pat_path_property.match(lines[i]) if m: regex, prop, value=m.group(1,2,3) for obj_dict in [self.special, self.histos, self.functions]: for path, obj in obj_dict.iteritems(): if re.match(regex, path): ## Use strip here to deal with DOS newlines containing \r obj.description.update({prop.strip() : value.strip()}) cf.close() class Plot: def __init__(self,inputdata): pass def set_normalization(self,inputdata): for method in ['NormalizeToIntegral', 'NormalizeToSum']: if inputdata.description.has_key(method): for i in inputdata.description['DrawOnly']: if not inputdata.histos[i].description.has_key(method): inputdata.histos[i].description[method] = inputdata.description[method] if inputdata.description.has_key('Scale'): for i in inputdata.description['DrawOnly']: inputdata.histos[i].description['Scale'] = float(inputdata.description['Scale']) for i in inputdata.description['DrawOnly']: inputdata.histos[i].mangle_input() def stack_histograms(self,inputdata): if inputdata.description.has_key('Stack'): foo=[] for i in inputdata.description['Stack'].strip().split(): if i in inputdata.histos.keys(): foo.append(i) previous='' for i in foo: if previous!='': inputdata.histos[i].add(inputdata.histos[previous]) previous=i def set_histo_options(self,inputdata): if inputdata.description.has_key('ConnectGaps'): for i in inputdata.histos.keys(): if not inputdata.histos[i].description.has_key('ConnectGaps'): inputdata.histos[i].description['ConnectGaps']=inputdata.description['ConnectGaps'] def set_borders(self,inputdata): self.set_xmax(inputdata) self.set_xmin(inputdata) self.set_ymax(inputdata) self.set_ymin(inputdata) self.set_zmax(inputdata) self.set_zmin(inputdata) inputdata.description['Borders']=(self.xmin, self.xmax, self.ymin, self.ymax, self.zmin, self.zmax) def set_xmin(self,inputdata): if inputdata.description.has_key('XMin'): self.xmin = float(inputdata.description['XMin']) else: self.xmin = min(inputdata.histos[i].getXMin() for i in inputdata.description['DrawOnly']) def set_xmax(self,inputdata): #print inputdata.description if inputdata.description.has_key('XMax'): self.xmax = float(inputdata.description['XMax']) else: #print inputdata.description['DrawOnly'] self.xmax = max(inputdata.histos[i].getXMax() for i in inputdata.description['DrawOnly']) def set_ymin(self,inputdata): if inputdata.description.has_key('YMin'): self.ymin = float(inputdata.description['YMin']) else: foo=[] for i in inputdata.description['DrawOnly']: foo.append(inputdata.histos[i].getYMin(self.xmin, self.xmax, inputdata.description['LogY'])) if inputdata.description['is2dim']: self.ymin=min(foo) else: showzero = True if inputdata.description.has_key('ShowZero'): if inputdata.description['ShowZero']=='0': showzero = False if showzero: if min(foo) > -1e-4: self.ymin = 0 else: self.ymin = 1.1*min(foo) else: if min(foo) < -1e-4: self.ymin = 1.1*min(foo) elif min(foo) < 1e-4: self.ymin = 0 else: self.ymin = 0.9*min(foo) if inputdata.description['LogY']: foo=[item for item in foo if item>0.0] if len(foo)==0: if self.ymax==0: self.ymax=1 foo.append(2e-7*self.ymax) fullrange = opts.FULL_RANGE if inputdata.description.has_key('FullRange'): if inputdata.description['FullRange']=='1': fullrange = True else: fullrange = False if fullrange: self.ymin = min(foo)/1.7 else: self.ymin = max(min(foo)/1.7, 2e-7*self.ymax) if self.ymin==self.ymax: self.ymin-=1 self.ymax+=1 def set_ymax(self,inputdata): if inputdata.description.has_key('YMax'): self.ymax = float(inputdata.description['YMax']) else: foo=[] for i in inputdata.description['DrawOnly']: foo.append(inputdata.histos[i].getYMax(self.xmin, self.xmax)) if inputdata.description['is2dim']: self.ymax=max(foo) else: if inputdata.description['LogY']: self.ymax=1.7*max(foo) else: self.ymax=1.1*max(foo) def set_zmin(self,inputdata): if inputdata.description.has_key('ZMin'): self.zmin = float(inputdata.description['ZMin']) else: foo=[] for i in inputdata.description['DrawOnly']: foo.append(inputdata.histos[i].getZMin(self.xmin, self.xmax, self.ymin, self.ymax)) if not foo: self.zmin = min(foo) else: showzero = True if inputdata.description.has_key('ShowZero'): if inputdata.description['ShowZero']=='0': showzero = False if showzero: if min(foo) > -1e-4: self.zmin = 0 else: self.zmin = 1.1*min(foo) else: if min(foo) < -1e-4: self.zmin = 1.1*min(foo) elif min(foo) < 1e-4: self.zmin = 0 else: self.zmin = 0.9*min(foo) if inputdata.description['LogZ']: foo=[item for item in foo if item>0.0] if len(foo)==0: if self.zmax==0: self.zmax=1 foo.append(2e-7*self.zmax) fullrange = opts.FULL_RANGE if inputdata.description.has_key('FullRange'): if inputdata.description['FullRange']=='1': fullrange = True else: fullrange = False if fullrange: self.zmin = min(foo)/1.7 else: self.zmin = max(min(foo)/1.7, 2e-7*self.zmax) if self.zmin==self.zmax: self.zmin-=1 self.zmax+=1 def set_zmax(self,inputdata): if inputdata.description.has_key('ZMax'): self.zmax = float(inputdata.description['ZMax']) else: foo=[] for i in inputdata.description['DrawOnly']: foo.append(inputdata.histos[i].getZMax(self.xmin, self.xmax, self.ymin, self.ymax)) if foo: self.zmax = max(foo) else: self.zmax = 1 def draw(self): pass def write_header(self,inputdata): if inputdata.description.has_key('LeftMargin') and inputdata.description['LeftMargin']!='': inputdata.description['LeftMargin'] = float(inputdata.description['LeftMargin']) else: inputdata.description['LeftMargin'] = 1.4 if inputdata.description.has_key('RightMargin') and inputdata.description['RightMargin']!='': inputdata.description['RightMargin'] = float(inputdata.description['RightMargin']) else: inputdata.description['RightMargin'] = 0.35 if inputdata.description.has_key('TopMargin') and inputdata.description['TopMargin']!='': inputdata.description['TopMargin'] = float(inputdata.description['TopMargin']) else: inputdata.description['TopMargin'] = 0.65 if inputdata.description.has_key('BottomMargin') and inputdata.description['BottomMargin']!='': inputdata.description['BottomMargin'] = float(inputdata.description['BottomMargin']) else: inputdata.description['BottomMargin'] = 0.95 if inputdata.description['is2dim']: inputdata.description['RightMargin'] += 1.5 papersizex = inputdata.description['PlotSizeX'] + 0.1 + \ inputdata.description['LeftMargin'] + inputdata.description['RightMargin'] papersizey = inputdata.description['PlotSizeY'] + inputdata.description['RatioPlotSizeY'] + 0.1 + \ inputdata.description['TopMargin'] + inputdata.description['BottomMargin'] # out = "" out += '\\documentclass{article}\n' if opts.OUTPUT_FONT == "MINION": out += ('\\usepackage{minion}\n') elif opts.OUTPUT_FONT == "PALATINO_OSF": out += ('\\usepackage[osf,sc]{mathpazo}\n') elif opts.OUTPUT_FONT == "PALATINO": out += ('\\usepackage{mathpazo}\n') elif opts.OUTPUT_FONT == "TIMES": out += ('\\usepackage{mathptmx}\n') elif opts.OUTPUT_FONT == "HELVETICA": out += ('\\renewcommand{\\familydefault}{\\sfdefault}\n') out += ('\\usepackage{sfmath}\n') out += ('\\usepackage{helvet}\n') out += ('\\usepackage[symbolgreek]{mathastext}\n') for pkg in opts.LATEXPKGS: out += ('\\usepackage{%s}\n' % pkg) out += ('\\usepackage{pst-all}\n') out += ('\\selectcolormodel{rgb}\n') out += ('\\usepackage{amsmath}\n') out += ('\\usepackage{amssymb}\n') out += ('\\usepackage{relsize}\n') out += ('\\usepackage[dvips,\n') out += (' left=%4.3fcm, right=0cm,\n' %(inputdata.description['LeftMargin']-0.45,)) out += (' top=%4.3fcm, bottom=0cm,\n' %(inputdata.description['TopMargin']-0.30,)) out += (' paperwidth=%scm,paperheight=%scm\n' %(papersizex,papersizey)) out += (']{geometry}\n') out += ('\\begin{document}\n') out += ('\\pagestyle{empty}\n') out += ('\\SpecialCoor\n') out += ('\\begin{pspicture}(0,0)(0,0)\n') out += ('\\psset{xunit=%scm}\n' %(inputdata.description['PlotSizeX'])) if inputdata.description['is2dim']: if inputdata.description.has_key('ColorSeries') and inputdata.description['ColorSeries']!='': colorseries = inputdata.description['ColorSeries'] else: colorseries = '{hsb}{grad}[rgb]{0,0,1}{-.700,0,0}' out += ('\\definecolorseries{gradientcolors}%s\n' %colorseries) out += ('\\resetcolorseries[130]{gradientcolors}\n') return out def write_footer(self): out = "" out += ('\\end{pspicture}\n') out += ('\\end{document}\n') return out class MainPlot(Plot): def __init__(self, inputdata): self.set_normalization(inputdata) self.stack_histograms(inputdata) if (inputdata.description.has_key('GofLegend') and inputdata.description['GofLegend']=='1') or \ (inputdata.description.has_key('GofFrame') and inputdata.description['GofFrame']!='') and not \ (inputdata.description.has_key('TaylorPlot') and inputdata.description['TaylorPlot']=='1'): self.calculate_gof(inputdata) self.set_histo_options(inputdata) self.set_borders(inputdata) self.yoffset = inputdata.description['PlotSizeY'] self.coors = Coordinates(inputdata) def draw(self, inputdata): out = "" out += ('\n%\n% MainPlot\n%\n') out += ('\\psset{yunit=%scm}\n' %(self.yoffset)) out += ('\\rput(0,-1){%\n') out += ('\\psset{yunit=%scm}\n' %(inputdata.description['PlotSizeY'])) out += self._draw(inputdata) out += ('}\n') return out def _draw(self, inputdata): out = "" if inputdata.description.has_key('DrawSpecialFirst') and inputdata.description['DrawSpecialFirst']=='1': for i in inputdata.special.keys(): out += inputdata.special[i].draw(self.coors) if inputdata.description.has_key('DrawFunctionFirst') and inputdata.description['DrawFunctionFirst']=='1': for i in inputdata.functions.keys(): out += inputdata.functions[i].draw(self.coors) for i in inputdata.description['DrawOnly']: out += inputdata.histos[i].draw(self.coors) else: for i in inputdata.description['DrawOnly']: out += inputdata.histos[i].draw(self.coors) for i in inputdata.functions.keys(): out += inputdata.functions[i].draw(self.coors) else: if inputdata.description.has_key('DrawFunctionFirst') and inputdata.description['DrawFunctionFirst']=='1': for i in inputdata.functions.keys(): out += inputdata.functions[i].draw(self.coors) for i in inputdata.description['DrawOnly']: out += inputdata.histos[i].draw(self.coors) else: for i in inputdata.description['DrawOnly']: out += inputdata.histos[i].draw(self.coors) for i in inputdata.functions.keys(): out += inputdata.functions[i].draw(self.coors) for i in inputdata.special.keys(): out += inputdata.special[i].draw(self.coors) if inputdata.description.has_key('Legend') and inputdata.description['Legend']=='1': legend = Legend(inputdata.description,inputdata.histos,inputdata.functions) out += legend.draw() if inputdata.description['is2dim']: colorscale = Colorscale(inputdata.description,self.coors) out += colorscale.draw() frame = Frame() out += frame.draw(inputdata) if inputdata.description.has_key('XMajorTickMarks') and inputdata.description['XMajorTickMarks']!='': xcustommajortickmarks=int(inputdata.description['XMajorTickMarks']) else: xcustommajortickmarks=-1 if inputdata.description.has_key('XMinorTickMarks') and inputdata.description['XMinorTickMarks']!='': xcustomminortickmarks=int(inputdata.description['XMinorTickMarks']) else: xcustomminortickmarks=-1 xcustommajorticks=[] xcustomminorticks=[] # TODO: remove XCustomTicks after 2011-12-31: if inputdata.description.has_key('XCustomTicks') and inputdata.description['XCustomTicks']!='': logging.warning('Warning: XCustomTicks is deprecated. Use XCustomMajorTicks instead.') inputdata.description['XCustomMajorTicks']=inputdata.description['XCustomTicks'] if inputdata.description.has_key('XCustomMajorTicks') and inputdata.description['XCustomMajorTicks']!='': FOO=inputdata.description['XCustomMajorTicks'].strip().split('\t') if not len(FOO)%2: for i in range(0,len(FOO),2): xcustommajorticks.append({'Value': float(FOO[i]), 'Label': FOO[i+1]}) if inputdata.description.has_key('XCustomMinorTicks') and inputdata.description['XCustomMinorTicks']!='': FOO=inputdata.description['XCustomMinorTicks'].strip().split('\t') for i in range(len(FOO)): xcustomminorticks.append({'Value': float(FOO[i])}) xticks = XTicks(inputdata.description, self.coors) if (inputdata.description.has_key('RatioPlot') and inputdata.description['RatioPlot']=='1') or (inputdata.description.has_key('PlotTickLabels') and inputdata.description['PlotTickLabels']=='0'): drawlabels=False else: drawlabels=True out += xticks.draw(custommajortickmarks=xcustommajortickmarks,\ customminortickmarks=xcustomminortickmarks,\ custommajorticks=xcustommajorticks,\ customminorticks=xcustomminorticks,\ drawlabels=drawlabels) if inputdata.description.has_key('YMajorTickMarks') and inputdata.description['YMajorTickMarks']!='': ycustommajortickmarks=int(inputdata.description['YMajorTickMarks']) else: ycustommajortickmarks=-1 if inputdata.description.has_key('YMinorTickMarks') and inputdata.description['YMinorTickMarks']!='': ycustomminortickmarks=int(inputdata.description['YMinorTickMarks']) else: ycustomminortickmarks=-1 ycustommajorticks=[] ycustomminorticks=[] # TODO: remove YCustomTicks after 2011-12-31: if inputdata.description.has_key('YCustomTicks') and inputdata.description['YCustomTicks']!='': logging.warning('Warning: YCustomTicks is deprecated. Use YCustomMajorTicks instead.') inputdata.description['YCustomMajorTicks']=inputdata.description['YCustomTicks'] if inputdata.description.has_key('YCustomMajorTicks') and inputdata.description['YCustomMajorTicks']!='': FOO=inputdata.description['YCustomMajorTicks'].strip().split('\t') if not len(FOO)%2: for i in range(0,len(FOO),2): ycustommajorticks.append({'Value': float(FOO[i]), 'Label': FOO[i+1]}) if inputdata.description.has_key('YCustomMinorTicks') and inputdata.description['YCustomMinorTicks']!='': FOO=inputdata.description['YCustomMinorTicks'].strip().split('\t') for i in range(len(FOO)): ycustomminorticks.append({'Value': float(FOO[i])}) yticks = YTicks(inputdata.description, self.coors) out += yticks.draw(custommajortickmarks=ycustommajortickmarks,\ customminortickmarks=ycustomminortickmarks,\ custommajorticks=ycustommajorticks,\ customminorticks=ycustomminorticks) labels = Labels(inputdata.description) if inputdata.description.has_key('RatioPlot') and inputdata.description['RatioPlot']=='1': out += labels.draw(['Title','YLabel']) else: if not inputdata.description['is2dim']: out += labels.draw(['Title','XLabel','YLabel']) else: out += labels.draw(['Title','XLabel','YLabel','ZLabel']) return out def calculate_gof(self, inputdata): refdata = None if inputdata.description.has_key('GofReference') and inputdata.description['GofReference']!='': refdata = inputdata.description['GofReference'] elif inputdata.description.has_key('RatioPlotReference') and inputdata.description['RatioPlotReference']!='': refdata = inputdata.description['RatioPlotReference'] if refdata==None: inputdata.description['GofLegend'] = '0' inputdata.description['GofFrame'] = '' return def pickcolor(gof): color=None colordefs = {} for i in inputdata.description.setdefault('GofFrameColor', '0:green 3:yellow 6:red!70').strip().split(): foo = i.split(':') if len(foo)!=2: continue colordefs[float(foo[0])] = foo[1] for i in sorted(colordefs.keys()): if gof>=i: color=colordefs[i] return color inputdata.description.setdefault('GofLegend','0') inputdata.description.setdefault('GofFrame','') inputdata.description.setdefault('FrameColor',None) for i in inputdata.description['DrawOnly']: if i==refdata: continue if inputdata.description['GofLegend']!='1' and i!=inputdata.description['GofFrame']: continue if inputdata.description.has_key('GofType') and inputdata.description['GofType']!='chi2': return gof = inputdata.histos[i].getChi2(inputdata.histos[refdata]) if i==inputdata.description['GofFrame'] and inputdata.description['FrameColor']==None: inputdata.description['FrameColor']=pickcolor(gof) if inputdata.histos[i].description.setdefault('Title', '')!='': inputdata.histos[i].description['Title'] += ', ' inputdata.histos[i].description['Title'] += '$\\chi^2/n={}$%1.2f' %gof class TaylorPlot(Plot): def __init__(self, inputdata): self.refdata = inputdata.description['TaylorPlotReference'] self.calculate_taylorcoordinates(inputdata) def calculate_taylorcoordinates(self,inputdata): foo=inputdata.description['DrawOnly'].pop(inputdata.description['DrawOnly'].index(self.refdata)) inputdata.description['DrawOnly'].append(foo) for i in inputdata.description['DrawOnly']: print i print 'meanbinval = ', inputdata.histos[i].getMeanBinValue() print 'sigmabinval = ', inputdata.histos[i].getSigmaBinValue() print 'chi2/nbins = ', inputdata.histos[i].getChi2(inputdata.histos[self.refdata]) print 'correlation = ', inputdata.histos[i].getCorrelation(inputdata.histos[self.refdata]) print 'distance = ', inputdata.histos[i].getRMSdistance(inputdata.histos[self.refdata]) class RatioPlot(Plot): def __init__(self, inputdata): self.refdata = inputdata.description['RatioPlotReference'] self.yoffset = inputdata.description['PlotSizeY'] + inputdata.description['RatioPlotSizeY'] inputdata.description['RatioPlotStage'] = True inputdata.description['PlotSizeY'] = inputdata.description['RatioPlotSizeY'] inputdata.description['LogY'] = False if inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode']=='deviation': inputdata.description['YLabel']='$(\\text{MC}-\\text{data})$' inputdata.description['YMin']=-3.5 inputdata.description['YMax']=3.5 elif inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode']=='datamc': inputdata.description['YLabel']='Data/MC' inputdata.description['YMin']=0.5 inputdata.description['YMax']=1.5 else: inputdata.description['YLabel']='MC/Data' inputdata.description['YMin']=0.5 inputdata.description['YMax']=1.5 if inputdata.description.has_key('RatioPlotYLabel'): inputdata.description['YLabel']=inputdata.description['RatioPlotYLabel'] inputdata.description['YLabel']='\\rput(-%s,0){%s}'%(0.5*inputdata.description['PlotSizeY']/inputdata.description['PlotSizeX'],inputdata.description['YLabel']) if inputdata.description.has_key('RatioPlotYMin'): inputdata.description['YMin']=inputdata.description['RatioPlotYMin'] if inputdata.description.has_key('RatioPlotYMax'): inputdata.description['YMax']=inputdata.description['RatioPlotYMax'] if not inputdata.description.has_key('RatioPlotErrorBandColor'): inputdata.description['RatioPlotErrorBandColor']='yellow' if not inputdata.description.has_key('RatioPlotSameStyle') or inputdata.description['RatioPlotSameStyle']=='0': inputdata.histos[self.refdata].description['ErrorBandColor']=inputdata.description['RatioPlotErrorBandColor'] inputdata.histos[self.refdata].description['ErrorBands']='1' inputdata.histos[self.refdata].description['ErrorBars']='0' inputdata.histos[self.refdata].description['LineStyle']='solid' inputdata.histos[self.refdata].description['LineColor']='black' inputdata.histos[self.refdata].description['LineWidth']='0.3pt' inputdata.histos[self.refdata].description['PolyMarker']='' inputdata.histos[self.refdata].description['ConnectGaps']='1' self.calculate_ratios(inputdata) self.set_borders(inputdata) self.coors = Coordinates(inputdata) def draw(self, inputdata): out = "" out += ('\n%\n% RatioPlot\n%\n') out += ('\\psset{yunit=%scm}\n' %(self.yoffset)) out += ('\\rput(0,-1){%\n') out += ('\\psset{yunit=%scm}\n' %(inputdata.description['PlotSizeY'])) out += self._draw(inputdata) out += ('}\n') return out def calculate_ratios(self,inputdata): foo=inputdata.description['DrawOnly'].pop(inputdata.description['DrawOnly'].index(self.refdata)) if inputdata.histos[self.refdata].description.has_key('ErrorBands') and inputdata.histos[self.refdata].description['ErrorBands']=='1': inputdata.description['DrawOnly'].insert(0,foo) else: inputdata.description['DrawOnly'].append(foo) for i in inputdata.description['DrawOnly']: if i!=self.refdata: if inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode']=='deviation': inputdata.histos[i].deviation(inputdata.histos[self.refdata]) elif inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode']=='datamc': inputdata.histos[i].dividereverse(inputdata.histos[self.refdata]) inputdata.histos[i].description['ErrorBars']='1' else: inputdata.histos[i].divide(inputdata.histos[self.refdata]) if inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode']=='deviation': inputdata.histos[self.refdata].deviation(inputdata.histos[self.refdata]) elif inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode']=='datamc': inputdata.histos[self.refdata].dividereverse(inputdata.histos[self.refdata]) else: inputdata.histos[self.refdata].divide(inputdata.histos[self.refdata]) def _draw(self, inputdata): out = "" for i in inputdata.description['DrawOnly']: if inputdata.description.has_key('RatioPlotMode') and inputdata.description['RatioPlotMode']=='datamc': if i!=self.refdata: out += inputdata.histos[i].draw(self.coors) else: out += inputdata.histos[i].draw(self.coors) frame = Frame() out += frame.draw(inputdata) if inputdata.description.has_key('XMajorTickMarks') and inputdata.description['XMajorTickMarks']!='': xcustommajortickmarks=int(inputdata.description['XMajorTickMarks']) else: xcustommajortickmarks=-1 if inputdata.description.has_key('XMinorTickMarks') and inputdata.description['XMinorTickMarks']!='': xcustomminortickmarks=int(inputdata.description['XMinorTickMarks']) else: xcustomminortickmarks=-1 xcustommajorticks=[] xcustomminorticks=[] # TODO: remove XCustomTicks after 2011-12-31: if inputdata.description.has_key('XCustomTicks') and inputdata.description['XCustomTicks']!='': logging.warning('Warning: XCustomTicks is deprecated. Use XCustomMajorTicks instead.') inputdata.description['XCustomMajorTicks']=inputdata.description['XCustomTicks'] if inputdata.description.has_key('XCustomMajorTicks') and inputdata.description['XCustomMajorTicks']!='': FOO=inputdata.description['XCustomMajorTicks'].strip().split('\t') if not len(FOO)%2: for i in range(0,len(FOO),2): xcustommajorticks.append({'Value': float(FOO[i]), 'Label': FOO[i+1]}) if inputdata.description.has_key('XCustomMinorTicks') and inputdata.description['XCustomMinorTicks']!='': FOO=inputdata.description['XCustomMinorTicks'].strip().split('\t') for i in range(len(FOO)): xcustomminorticks.append({'Value': float(FOO[i])}) xticks = XTicks(inputdata.description, self.coors) if inputdata.description.has_key('RatioPlotTickLabels') and inputdata.description['RatioPlotTickLabels']=='0': drawlabels=False else: drawlabels=True out += xticks.draw(custommajortickmarks=xcustommajortickmarks,\ customminortickmarks=xcustomminortickmarks,\ custommajorticks=xcustommajorticks,\ customminorticks=xcustomminorticks, drawlabels=drawlabels) if inputdata.description.has_key('YMajorTickMarks') and inputdata.description['YMajorTickMarks']!='': ycustommajortickmarks=int(inputdata.description['YMajorTickMarks']) else: ycustommajortickmarks=-1 if inputdata.description.has_key('YMinorTickMarks') and inputdata.description['YMinorTickMarks']!='': ycustomminortickmarks=int(inputdata.description['YMinorTickMarks']) else: ycustomminortickmarks=-1 ycustommajorticks=[] ycustomminorticks=[] # TODO: remove YCustomTicks after 2011-12-31: if inputdata.description.has_key('YCustomTicks') and inputdata.description['YCustomTicks']!='': logging.warning('Warning: YCustomTicks is deprecated. Use YCustomMajorTicks instead.') inputdata.description['YCustomMajorTicks']=inputdata.description['YCustomTicks'] if inputdata.description.has_key('YCustomMajorTicks') and inputdata.description['YCustomMajorTicks']!='': FOO=inputdata.description['YCustomMajorTicks'].strip().split('\t') if not len(FOO)%2: for i in range(0,len(FOO),2): ycustommajorticks.append({'Value': float(FOO[i]), 'Label': FOO[i+1]}) if inputdata.description.has_key('YCustomMinorTicks') and inputdata.description['YCustomMinorTicks']!='': FOO=inputdata.description['YCustomMinorTicks'].strip().split('\t') for i in range(len(FOO)): ycustomminorticks.append({'Value': float(FOO[i])}) yticks = YTicks(inputdata.description, self.coors) out += yticks.draw(custommajortickmarks=ycustommajortickmarks,\ customminortickmarks=ycustomminortickmarks,\ custommajorticks=ycustommajorticks,\ customminorticks=ycustomminorticks) if inputdata.description.has_key('MainPlot') and inputdata.description['MainPlot']=='0': if inputdata.description.has_key('Legend') and inputdata.description['Legend']=='1': legend = Legend(inputdata.description,inputdata.histos,inputdata.functions) out += legend.draw() labels = Labels(inputdata.description) if inputdata.description.has_key('MainPlot') and inputdata.description['MainPlot']=='0': out += labels.draw(['Title','XLabel','YLabel']) else: out += labels.draw(['XLabel','YLabel']) return out class Legend: def __init__(self, description, histos, functions): self.histos = histos self.functions = functions self.description = description def draw(self): out = "" out += '\n%\n% Legend\n%\n' out += '\\rput[tr](%s,%s){%%\n' % (self.getLegendXPos(), self.getLegendYPos()) ypos = -0.05*6/self.description['PlotSizeY'] legendordermap = {} legendlist = self.description['DrawOnly']+self.functions.keys() if self.description.has_key('LegendOnly'): legendlist = [] for legend in self.description['LegendOnly'].strip().split(): if legend in self.histos.keys() or legend in self.functions.keys(): legendlist.append(legend) for legend in legendlist: order = 0 if self.histos.has_key(legend) and self.histos[legend].description.has_key('LegendOrder'): order = int(self.histos[legend].description['LegendOrder']) if self.functions.has_key(legend) and self.functions[legend].description.has_key('LegendOrder'): order = int(self.functions[legend].description['LegendOrder']) if not order in legendordermap: legendordermap[order] = [] legendordermap[order].append(legend) foo=[] for i in sorted(legendordermap.keys()): foo.extend(legendordermap[i]) rel_xpos_sign = 1.0 if self.getLegendAlign()=='r': rel_xpos_sign = -1.0 xpos1 = -0.10*rel_xpos_sign xpos2 = -0.02*rel_xpos_sign for i in foo: if self.histos.has_key(i): drawobject=self.histos[i] elif self.functions.has_key(i): drawobject=self.functions[i] else: continue title = drawobject.getTitle() if title == '': continue else: out += ('\\rput[B%s](%s,%s){%s}\n' %(self.getLegendAlign(),rel_xpos_sign*0.1,ypos,title)) out += ('\\rput[B%s](%s,%s){%s\n' %(self.getLegendAlign(),rel_xpos_sign*0.1,ypos,'%')) if drawobject.getErrorBands(): out += ('\\psframe[linewidth=0pt,linestyle=none,fillstyle=solid,fillcolor=%s,opacity=%s]' %(drawobject.getErrorBandColor(),drawobject.getErrorBandOpacity())) out += ('(%s, 0.033)(%s, 0.001)\n' %(xpos1, xpos2)) out += ('\\psline[linestyle=' + drawobject.getLineStyle() \ + ', linecolor=' + drawobject.getLineColor() \ + ', linewidth=' + drawobject.getLineWidth() \ + ', strokeopacity=' + drawobject.getLineOpacity() \ + ', opacity=' + drawobject.getFillOpacity()) if drawobject.getLineDash()!='': out += (', dash=' + drawobject.getLineDash()) if drawobject.getFillStyle()!='none': out += (', fillstyle=' + drawobject.getFillStyle() \ + ', fillcolor=' + drawobject.getFillColor() \ + ', hatchcolor=' + drawobject.getHatchColor() \ + ']{C-C}(%s, 0.030)(%s, 0.030)(%s, 0.004)(%s, 0.004)(%s, 0.030)\n' \ %(xpos1, xpos2, xpos2, xpos1, xpos1)) else: out += ('](%s, 0.016)(%s, 0.016)\n' %(xpos1, xpos2)) if drawobject.getPolyMarker() != '': out += (' \\psdot[dotstyle=' + drawobject.getPolyMarker() \ + ', dotsize=' + drawobject.getDotSize() \ + ', dotscale=' + drawobject.getDotScale() \ + ', linecolor=' + drawobject.getLineColor() \ + ', linewidth=' + drawobject.getLineWidth() \ + ', linestyle=' + drawobject.getLineStyle() \ + ', fillstyle=' + drawobject.getFillStyle() \ + ', fillcolor=' + drawobject.getFillColor() \ + ', strokeopacity=' + drawobject.getLineOpacity() \ + ', opacity=' + drawobject.getFillOpacity() \ + ', hatchcolor=' + drawobject.getHatchColor()) if drawobject.getFillStyle()!='none': out += ('](%s, 0.028)\n' % (rel_xpos_sign*-0.06)) else: out += ('](%s, 0.016)\n' % (rel_xpos_sign*-0.06)) out += ('}\n') ypos -= 0.075*6/self.description['PlotSizeY'] if self.description.has_key('CustomLegend'): for i in self.description['CustomLegend'].strip().split('\\\\'): out += ('\\rput[B%s](%s,%s){%s}\n' %(self.getLegendAlign(),rel_xpos_sign*0.1,ypos,i)) ypos -= 0.075*6/self.description['PlotSizeY'] out += ('}\n') return out def getLegendXPos(self): if self.description.has_key('LegendXPos'): return self.description['LegendXPos'] else: if self.getLegendAlign()=='r': return '0.95' else: return '0.53' def getLegendYPos(self): if self.description.has_key('LegendYPos'): return self.description['LegendYPos'] else: return '0.93' def getLegendAlign(self): if self.description.has_key('LegendAlign'): return self.description['LegendAlign'] else: return 'l' class Colorscale: def __init__(self, description, coors): self.description = description self.coors = coors def draw(self): out = '' out += '\n%\n% Colorscale\n%\n' out += '\\rput(1,0){\n' out += ' \\psset{xunit=4mm}\n' out += ' \\rput(0.5,0){\n' out += ' \\psset{yunit=0.0076923, linestyle=none, fillstyle=solid}\n' out += ' \\multido{\\ic=0+1,\\id=1+1}{130}{\n' out += ' \\psframe[fillcolor={gradientcolors!![\\ic]},dimen=inner,linewidth=0.1pt](0, \\ic)(1, \\id)\n' out += ' }\n' out += ' }\n' out += ' \\rput(0.5,0){\n' out += ' \\psframe[linewidth=0.3pt,dimen=middle](0,0)(1,1)\n' if self.description.has_key('ZMajorTickMarks') and self.description['ZMajorTickMarks']!='': zcustommajortickmarks=int(self.description['ZMajorTickMarks']) else: zcustommajortickmarks=-1 if self.description.has_key('ZMinorTickMarks') and self.description['ZMinorTickMarks']!='': zcustomminortickmarks=int(self.description['ZMinorTickMarks']) else: zcustomminortickmarks=-1 zcustommajorticks=[] zcustomminorticks=[] # TODO: remove ZCustomTicks after 2011-12-31: if self.description.has_key('ZCustomTicks') and self.description['ZCustomTicks']!='': logging.warning('Warning: ZCustomTicks is deprecated. Use ZCustomMajorTicks instead.') self.description['ZCustomMajorTicks']=self.description['ZCustomTicks'] if self.description.has_key('ZCustomMajorTicks') and self.description['ZCustomMajorTicks']!='': FOO=self.description['ZCustomMajorTicks'].strip().split('\t') if not len(FOO)%2: for i in range(0,len(FOO),2): zcustommajorticks.append({'Value': float(FOO[i]), 'Label': FOO[i+1]}) if self.description.has_key('ZCustomMinorTicks') and self.description['ZCustomMinorTicks']!='': FOO=self.description['ZCustomMinorTicks'].strip().split('\t') for i in range(len(FOO)): zcustomminorticks.append({'Value': float(FOO[i])}) zticks = ZTicks(self.description, self.coors) out += zticks.draw(custommajortickmarks=zcustommajortickmarks,\ customminortickmarks=zcustomminortickmarks,\ custommajorticks=zcustommajorticks,\ customminorticks=zcustomminorticks) out += ' }\n' out += '}\n' return out class Labels: def __init__(self, description): self.description = description def draw(self, axis=[]): out = "" out += ('\n%\n% Labels\n%\n') if self.description.has_key('Title') and (axis.count('Title') or axis==[]): out += ('\\rput(0,1){\\rput[lB](0, 1.7\\labelsep){\\normalsize '+self.description['Title']+'}}\n') if self.description.has_key('XLabel') and (axis.count('XLabel') or axis==[]): xlabelsep=4.7 if self.description.has_key('XLabelSep'): xlabelsep=float(self.description['XLabelSep']) out += ('\\rput(1,0){\\rput[rB](0,-%4.3f\\labelsep){\\normalsize '%(xlabelsep) +self.description['XLabel']+'}}\n') if self.description.has_key('YLabel') and (axis.count('YLabel') or axis==[]): ylabelsep=6.5 if self.description.has_key('YLabelSep'): ylabelsep=float(self.description['YLabelSep']) out += ('\\rput(0,1){\\rput[rB]{90}(-%4.3f\\labelsep,0){\\normalsize '%(ylabelsep) +self.description['YLabel']+'}}\n') if self.description.has_key('ZLabel') and (axis.count('ZLabel') or axis==[]): zlabelsep=5.3 if self.description.has_key('ZLabelSep'): zlabelsep=float(self.description['ZLabelSep']) out += ('\\rput(1,1){\\rput(%4.3f\\labelsep,0){\\psset{xunit=4mm}\\rput[lB]{270}(1.5,0){\\normalsize '%(zlabelsep) +self.description['ZLabel']+'}}}\n') return out class Special: def __init__(self, f): self.description = {} self.data = [] self.read_input(f) def read_input(self, f): for line in f: if is_end_marker(line, 'SPECIAL'): break elif is_comment(line): continue else: self.data.append(line) def draw(self,coors): out = "" out += ('\n%\n% Special\n%\n') import re regex = re.compile(r'^(.*?)(\\physics[xy]?coor)\(\s?([0-9\.eE+-]+)\s?,\s?([0-9\.eE+-]+)\s?\)(.*)') # TODO: More precise number string matching, something like this: # num = r"-?[0-9]*(?:\.[0-9]*)(?:[eE][+-]?\d+]" # regex = re.compile(r'^(.*?)(\\physics[xy]?coor)\(\s?(' + num + ')\s?,\s?(' + num + ')\s?\)(.*)') for i in xrange(len(self.data)): while regex.search(self.data[i]): match = regex.search(self.data[i]) xcoor, ycoor = float(match.group(3)), float(match.group(4)) if match.group(2)[1:] in ["physicscoor", "physicsxcoor"]: xcoor = coors.phys2frameX(xcoor) if match.group(2)[1:] in ["physicscoor", "physicsycoor"]: ycoor = coors.phys2frameY(ycoor) line = "%s(%f, %f)%s" % (match.group(1), xcoor, ycoor, match.group(5)) self.data[i] = line out += self.data[i]+'\n' return out class DrawableObject: def __init__(self, f): pass def getTitle(self): if self.description.has_key('Title'): return self.description['Title'] else: return '' def getLineStyle(self): if self.description.has_key('LineStyle'): ## I normally like there to be "only one way to do it", but providing ## this dashdotted/dotdashed synonym just seems humane ;-) if self.description['LineStyle'] in ('dashdotted', 'dotdashed'): self.description['LineStyle']='dashed' self.description['LineDash']='3pt 3pt .8pt 3pt' return self.description['LineStyle'] else: return 'solid' def getLineDash(self): if self.description.has_key('LineDash'): # Check if LineStyle=='dashdotted' before returning something self.getLineStyle() return self.description['LineDash'] else: return '' def getLineWidth(self): if self.description.has_key('LineWidth'): return self.description['LineWidth'] else: return '0.8pt' def getLineColor(self): if self.description.has_key('LineColor'): return self.description['LineColor'] else: return 'black' def getLineOpacity(self): if self.description.has_key('LineOpacity'): return self.description['LineOpacity'] else: return '1.0' def getFillColor(self): if self.description.has_key('FillColor'): return self.description['FillColor'] else: return 'white' def getFillOpacity(self): if self.description.has_key('FillOpacity'): return self.description['FillOpacity'] else: return '1.0' def getHatchColor(self): if self.description.has_key('HatchColor'): return self.description['HatchColor'] else: return 'black' def getFillStyle(self): if self.description.has_key('FillStyle'): return self.description['FillStyle'] else: return 'none' def getPolyMarker(self): if self.description.has_key('PolyMarker'): return self.description['PolyMarker'] else: return '' def getDotSize(self): if self.description.has_key('DotSize'): return self.description['DotSize'] else: return '2pt 2' def getDotScale(self): if self.description.has_key('DotScale'): return self.description['DotScale'] else: return '1' def getErrorBars(self): if self.description.has_key('ErrorBars'): return bool(int(self.description['ErrorBars'])) else: return False def getErrorBands(self): if self.description.has_key('ErrorBands'): return bool(int(self.description['ErrorBands'])) else: return False def getErrorBandColor(self): if self.description.has_key('ErrorBandColor'): return self.description['ErrorBandColor'] else: return 'yellow' def getErrorBandOpacity(self): if self.description.has_key('ErrorBandOpacity'): return self.description['ErrorBandOpacity'] else: return '1.0' def getSmoothLine(self): if self.description.has_key('SmoothLine'): return bool(int(self.description['SmoothLine'])) else: return False def startclip(self): return '\\psclip{\\psframe[linewidth=0, linestyle=none](0,0)(1,1)}\n' def stopclip(self): return '\\endpsclip\n' def startpsset(self): out = "" out += ('\\psset{linecolor='+self.getLineColor()+'}\n') out += ('\\psset{linewidth='+self.getLineWidth()+'}\n') out += ('\\psset{linestyle='+self.getLineStyle()+'}\n') out += ('\\psset{fillstyle='+self.getFillStyle()+'}\n') out += ('\\psset{fillcolor='+self.getFillColor()+'}\n') out += ('\\psset{hatchcolor='+self.getHatchColor()+'}\n') out += ('\\psset{strokeopacity='+self.getLineOpacity()+'}\n') out += ('\\psset{opacity='+self.getFillOpacity()+'}\n') if self.getLineDash()!='': out += ('\\psset{dash='+self.getLineDash()+'}\n') return out def stoppsset(self): out = "" out += ('\\psset{linecolor=black}\n') out += ('\\psset{linewidth=0.8pt}\n') out += ('\\psset{linestyle=solid}\n') out += ('\\psset{fillstyle=none}\n') out += ('\\psset{fillcolor=white}\n') out += ('\\psset{hatchcolor=black}\n') out += ('\\psset{strokeopacity=1.0}\n') out += ('\\psset{opacity=1.0}\n') return out class Function(DrawableObject): def __init__(self, f): self.description = {} self.read_input(f) def read_input(self, f): self.code='def plotfunction(x):\n' iscode=False for line in f: if is_end_marker(line, 'FUNCTION'): break elif is_comment(line): continue else: m = pat_property.match(line) if iscode: self.code+=' '+line elif m: prop, value = m.group(1,2) if prop=='Code': iscode=True else: self.description[prop] = value if not iscode: print '++++++++++ ERROR: No code in function' else: foo = compile(self.code, '<string>', 'exec') exec(foo) self.plotfunction = plotfunction def draw(self,coors): out = "" out += self.startclip() out += self.startpsset() xmin = coors.xmin() if self.description.has_key('XMin') and self.description['XMin']: xmin = float(self.description['XMin']) xmax=coors.xmax() if self.description.has_key('XMax') and self.description['XMax']: xmax=float(self.description['XMax']) # TODO: Space sample points logarithmically if LogX=1 dx = (xmax-xmin)/500. x = xmin-dx out += '\\pscurve' if self.description.has_key('FillStyle') and self.description['FillStyle']!='none': out += '(%s,%s)\n' % (coors.strphys2frameX(xmin),coors.strphys2frameY(coors.ymin())) while x < (xmax+2*dx): y = self.plotfunction(x) out += ('(%s,%s)\n' % (coors.strphys2frameX(x), coors.strphys2frameY(y))) x += dx if self.description.has_key('FillStyle') and self.description['FillStyle']!='none': out += '(%s,%s)\n' % (coors.strphys2frameX(xmax),coors.strphys2frameY(coors.ymin())) out += self.stoppsset() out += self.stopclip() return out class Histogram(DrawableObject): def __init__(self, f): self.description = {} self.is2dim = False self.data = [] self.read_input_data(f) self.sigmabinvalue = None self.meanbinvalue = None def read_input_data(self, f): for line in f: if is_end_marker(line, 'HISTOGRAM'): break elif is_comment(line): continue else: line = line.rstrip() m = pat_property.match(line) if m: prop, value = m.group(1,2) self.description[prop] = value else: linearray = line.split() if len(linearray)==4: self.data.append({'LowEdge': float(linearray[0]), 'UpEdge': float(linearray[1]), 'Content': float(linearray[2]), 'Error': [float(linearray[3]),float(linearray[3])]}) elif len(linearray)==5: self.data.append({'LowEdge': float(linearray[0]), 'UpEdge': float(linearray[1]), 'Content': float(linearray[2]), 'Error': [float(linearray[3]),float(linearray[4])]}) else: self.is2dim = True self.data.append({'LowEdge': [float(linearray[0]), float(linearray[2])], 'UpEdge': [float(linearray[1]), float(linearray[3])], 'Content': float(linearray[4]), 'Error': float(linearray[5])}) def mangle_input(self): if (self.description.has_key('NormalizeToIntegral') and self.description['NormalizeToIntegral']=='1') or \ (self.description.has_key('NormalizeToSum') and self.description['NormalizeToSum']=='1'): if (self.description.has_key('NormalizeToIntegral') and self.description['NormalizeToIntegral']=='1') and \ (self.description.has_key('NormalizeToSum') and self.description['NormalizeToSum']=='1'): print 'Can\'t normalize to Integral and to Sum at the same time. Will normalize to the Sum.' foo = 0 for i in range(len(self.data)): if self.description.has_key('NormalizeToSum') and self.description['NormalizeToSum']=='1': foo += self.data[i]['Content'] else: foo += self.data[i]['Content']*(self.data[i]['UpEdge']-self.data[i]['LowEdge']) for i in range(len(self.data)): self.data[i]['Content'] /= foo self.data[i]['Error'][0] /= foo self.data[i]['Error'][1] /= foo if self.description.has_key('Scale') and self.description['Scale']!='': scale = float(self.description['Scale']) for i in range(len(self.data)): self.data[i]['Content'] *= scale self.data[i]['Error'][0] *= scale self.data[i]['Error'][1] *= scale if self.description.has_key('Rebin') and self.description['Rebin']!='': rebin=int(self.description['Rebin']) errortype = "stat" if self.description.has_key('ErrorType') and self.description['ErrorType']!='': errortype = self.description['ErrorType'] newdata=[] if rebin>=2: for i in range(0,(len(self.data)/rebin)*rebin,rebin): foo=0. barl=0. baru=0. for j in range(rebin): binwidth=self.data[i+j]['UpEdge']-self.data[i+j]['LowEdge'] foo +=self.data[i+j]['Content']*binwidth if errortype=="stat": barl+=(binwidth*self.data[i+j]['Error'][0])**2 baru+=(binwidth*self.data[i+j]['Error'][1])**2 elif errortype=="env": barl+=(self.data[i+j]['Content']-self.data[i+j]['Error'][0])*binwidth baru+=(self.data[i+j]['Content']+self.data[i+j]['Error'][1])*binwidth else: logging.error("Rebinning for ErrorType not implemented.") sys.exit(1) newbinwidth=self.data[i+rebin-1]['UpEdge']-self.data[i]['LowEdge'] newcentral=foo/newbinwidth if errortype=="stat": newerror=[sqrt(barl)/newbinwidth,sqrt(baru)/newbinwidth] elif errortype=="env": newerror=[(foo-barl)/newbinwidth,(baru-foo)/newbinwidth] newdata.append({'LowEdge': self.data[i]['LowEdge'], 'UpEdge': self.data[i+rebin-1]['UpEdge'], 'Content': newcentral, 'Error': newerror}) self.data=newdata def add(self,name): if len(self.data)!=len(name.data): print '+++ Error in Histogram.add(): Binning of histograms differs' for i in range(len(self.data)): if fuzzyeq(self.data[i]['LowEdge'], name.data[i]['LowEdge']) and \ fuzzyeq(self.data[i]['UpEdge'], name.data[i]['UpEdge']): self.data[i]['Content'] += name.data[i]['Content'] self.data[i]['Error'][0] = sqrt(self.data[i]['Error'][0]**2 + name.data[i]['Error'][0]**2) self.data[i]['Error'][1] = sqrt(self.data[i]['Error'][1]**2 + name.data[i]['Error'][1]**2) else: print '+++ Error in Histogram.add(): Binning of histograms differs' def divide(self,name): if len(self.data)!=len(name.data): print '+++ Error in Histogram.divide(): Binning of histograms differs' for i in range(len(self.data)): if fuzzyeq(self.data[i]['LowEdge'], name.data[i]['LowEdge']) and \ fuzzyeq(self.data[i]['UpEdge'], name.data[i]['UpEdge']): try: self.data[i]['Error'][0] /= name.data[i]['Content'] except ZeroDivisionError: self.data[i]['Error'][0]=0. try: self.data[i]['Error'][1] /= name.data[i]['Content'] except ZeroDivisionError: self.data[i]['Error'][1]=0. try: self.data[i]['Content'] /= name.data[i]['Content'] except ZeroDivisionError: self.data[i]['Content']=1. # self.data[i]['Error'][0] = sqrt(self.data[i]['Error'][0]**2 + name.data[i]['Error'][0]**2) # self.data[i]['Error'][1] = sqrt(self.data[i]['Error'][1]**2 + name.data[i]['Error'][1]**2) else: print '+++ Error in Histogram.divide(): Binning of histograms differs' def dividereverse(self,name): if len(self.data)!=len(name.data): print '+++ Error in Histogram.divide(): Binning of histograms differs' for i in range(len(self.data)): if fuzzyeq(self.data[i]['LowEdge'], name.data[i]['LowEdge']) and \ fuzzyeq(self.data[i]['UpEdge'], name.data[i]['UpEdge']): try: self.data[i]['Error'][0] = name.data[i]['Error'][0]/self.data[i]['Content'] except ZeroDivisionError: self.data[i]['Error'][0]=0. try: self.data[i]['Error'][1] = name.data[i]['Error'][1]/self.data[i]['Content'] except ZeroDivisionError: self.data[i]['Error'][1]=0. try: self.data[i]['Content'] = name.data[i]['Content']/self.data[i]['Content'] except ZeroDivisionError: self.data[i]['Content']=1. else: print '+++ Error in Histogram.divide(): Binning of histograms differs' def deviation(self,name): if len(self.data)!=len(name.data): print '+++ Error in Histogram.deviation(): Binning of histograms differs' for i in range(len(self.data)): if fuzzyeq(self.data[i]['LowEdge'], name.data[i]['LowEdge']) and \ fuzzyeq(self.data[i]['UpEdge'], name.data[i]['UpEdge']): self.data[i]['Content'] -= name.data[i]['Content'] try: self.data[i]['Content'] /= 0.5*sqrt((name.data[i]['Error'][0] + name.data[i]['Error'][1])**2 + \ (self.data[i]['Error'][0] + self.data[i]['Error'][1])**2) except ZeroDivisionError: self.data[i]['Content'] = 0.0 try: self.data[i]['Error'][0] /= name.data[i]['Error'][0] except ZeroDivisionError: self.data[i]['Error'][0] = 0.0 try: self.data[i]['Error'][1] /= name.data[i]['Error'][1] except ZeroDivisionError: self.data[i]['Error'][1] = 0.0 else: print '+++ Error in Histogram.deviation(): Binning of histograms differs' def getChi2(self,name): chi2 = 0. for i in range(len(self.data)): if fuzzyeq(self.data[i]['LowEdge'], name.data[i]['LowEdge']) and \ fuzzyeq(self.data[i]['UpEdge'], name.data[i]['UpEdge']): try: chi2 += (self.data[i]['Content']-name.data[i]['Content'])**2/((0.5*self.data[i]['Error'][0]+0.5*self.data[i]['Error'][1])**2 + (0.5*name.data[i]['Error'][0]+0.5*name.data[i]['Error'][1])**2) except ZeroDivisionError: pass else: print '+++ Error in Histogram.divide(): Binning of histograms differs' return chi2/len(self.data) def getSigmaBinValue(self): if self.sigmabinvalue==None: self.sigmabinvalue = 0. sumofweights = 0. for i in range(len(self.data)): if self.is2dim: binwidth = abs( (self.data[i]['UpEdge'][0] - self.data[i]['LowEdge'][0]) *(self.data[i]['UpEdge'][1] - self.data[i]['LowEdge'][1])) else: binwidth = abs(self.data[i]['UpEdge'] - self.data[i]['LowEdge']) self.sigmabinvalue += binwidth*(self.data[i]['Content']-self.getMeanBinValue())**2 sumofweights += binwidth self.sigmabinvalue = sqrt(self.sigmabinvalue/sumofweights) return self.sigmabinvalue def getMeanBinValue(self): if self.meanbinvalue==None: self.meanbinvalue = 0. sumofweights = 0. for i in range(len(self.data)): if self.is2dim: binwidth = abs( (self.data[i]['UpEdge'][0] - self.data[i]['LowEdge'][0]) *(self.data[i]['UpEdge'][1] - self.data[i]['LowEdge'][1])) else: binwidth = abs(self.data[i]['UpEdge'] - self.data[i]['LowEdge']) self.meanbinvalue += binwidth*self.data[i]['Content'] sumofweights += binwidth self.meanbinvalue /= sumofweights return self.meanbinvalue def getCorrelation(self,name): correlation = 0. sumofweights = 0. for i in range(len(self.data)): if fuzzyeq(self.data[i]['LowEdge'], name.data[i]['LowEdge']) and \ fuzzyeq(self.data[i]['UpEdge'], name.data[i]['UpEdge']): if self.is2dim: binwidth = abs( (self.data[i]['UpEdge'][0] - self.data[i]['LowEdge'][0]) * (self.data[i]['UpEdge'][1] - self.data[i]['LowEdge'][1]) ) else: binwidth = abs(self.data[i]['UpEdge'] - self.data[i]['LowEdge']) correlation += binwidth * ( self.data[i]['Content'] - self.getMeanBinValue() ) \ * ( name.data[i]['Content'] - name.getMeanBinValue() ) sumofweights += binwidth else: print '+++ Error in Histogram.divide(): Binning of histograms differs' correlation /= sumofweights try: correlation /= self.getSigmaBinValue()*name.getSigmaBinValue() except ZeroDivisionError: correlation = 0 return correlation def getRMSdistance(self,name): distance = 0. sumofweights = 0. for i in range(len(self.data)): if fuzzyeq(self.data[i]['LowEdge'], name.data[i]['LowEdge']) and \ fuzzyeq(self.data[i]['UpEdge'], name.data[i]['UpEdge']): if self.is2dim: binwidth = abs( (self.data[i]['UpEdge'][0] - self.data[i]['LowEdge'][0]) * (self.data[i]['UpEdge'][1] - self.data[i]['LowEdge'][1]) ) else: binwidth = abs(self.data[i]['UpEdge'] - self.data[i]['LowEdge']) distance += binwidth * ( (self.data[i]['Content'] - self.getMeanBinValue()) -(name.data[i]['Content'] - name.getMeanBinValue()))**2 sumofweights += binwidth else: print '+++ Error in Histogram.divide(): Binning of histograms differs' distance = sqrt(distance/sumofweights) return distance def draw(self,coors): out = "" out += self.startclip() out += self.startpsset() # if self.is2dim: for i in range(len(self.data)): out += ('\\psframe') color=int(129*coors.phys2frameZ(self.data[i]['Content'])) if self.data[i]['Content']>coors.zmax(): color=129 if self.data[i]['Content']<coors.zmin(): color=0 out += ('[linewidth=0pt, fillstyle=solid, fillcolor={gradientcolors!!['+str(color)+']}]') out += ('(' + coors.strphys2frameX(self.data[i]['LowEdge'][0]) + ', ' \ + coors.strphys2frameY(self.data[i]['LowEdge'][1]) + ')(' \ + coors.strphys2frameX(self.data[i]['UpEdge'][0]) + ', ' \ + coors.strphys2frameY(self.data[i]['UpEdge'][1]) + ')\n') else: if self.getErrorBands(): self.description['SmoothLine']=0 for i in range(len(self.data)): out += ('\\psframe[dimen=inner,linewidth=0pt,linestyle=none,fillstyle=solid,fillcolor=%s,opacity=%s]' %(self.getErrorBandColor(),self.getErrorBandOpacity())) out += ('(' + coors.strphys2frameX(self.data[i]['LowEdge']) + ', ' \ + coors.strphys2frameY(self.data[i]['Content']-self.data[i]['Error'][0]) + ')(' \ + coors.strphys2frameX(self.data[i]['UpEdge']) + ', ' \ + coors.strphys2frameY(self.data[i]['Content']+self.data[i]['Error'][1]) + ')\n') if self.getErrorBars(): for i in range(len(self.data)): if self.data[i]['Content']==0. and self.data[i]['Error']==[0.,0.]: continue out += ('\psline') out += ('(' + coors.strphys2frameX(self.data[i]['LowEdge']) + ', ' \ + coors.strphys2frameY(self.data[i]['Content']) + ')(' \ + coors.strphys2frameX(self.data[i]['UpEdge']) + ', ' \ + coors.strphys2frameY(self.data[i]['Content']) + ')\n') out += ('\psline') bincenter = coors.strphys2frameX(.5*(self.data[i]['LowEdge']+self.data[i]['UpEdge'])) out += ('(' + bincenter + ', ' \ + coors.strphys2frameY(self.data[i]['Content']-self.data[i]['Error'][0]) + ')(' \ + bincenter + ', ' \ + coors.strphys2frameY(self.data[i]['Content']+self.data[i]['Error'][1]) + ')\n') if self.getSmoothLine(): out += ('\psbezier') else: out += ('\psline') if (self.getFillStyle() != 'none'): # make sure that filled areas go all the way down to the x-axis if (coors.phys2frameX(self.data[0]['LowEdge']) > 1e-4): out += '(' + coors.strphys2frameX(self.data[0]['LowEdge']) + ', -0.1)\n' else: out += '(-0.1, -0.1)\n' for i in range(len(self.data)): if self.getSmoothLine(): out += ('(' + coors.strphys2frameX(0.5*(self.data[i]['LowEdge']+self.data[i]['UpEdge'])) + ', ' \ + coors.strphys2frameY(self.data[i]['Content']) + ')\n') else: out += ('(' + coors.strphys2frameX(self.data[i]['LowEdge']) + ', ' \ + coors.strphys2frameY(self.data[i]['Content']) + ')(' \ + coors.strphys2frameX(self.data[i]['UpEdge']) + ', ' \ + coors.strphys2frameY(self.data[i]['Content']) + ')\n') if not (self.description.has_key('ConnectGaps') and self.description['ConnectGaps']=='1'): if (i+1 < len(self.data)) and (abs(coors.phys2frameX(self.data[i]['UpEdge']) - coors.phys2frameX(self.data[i+1]['LowEdge'])) > 1e-4): out += ('\\psline') if (self.getFillStyle() != 'none'): # make sure that filled areas go all the way down to the x-axis if (coors.phys2frameX(self.data[-1]['UpEdge']) < 1-1e-4): out += '(' + coors.strphys2frameX(self.data[-1]['UpEdge']) + ', -0.1)\n' else: out += '(1.1, -0.1)\n' # if self.getPolyMarker() != '': for i in range(len(self.data)): if self.data[i]['Content']==0. and self.data[i]['Error']==[0.,0.]: continue out += ('\\psdot[dotstyle=%s,dotsize=%s,dotscale=%s](' %(self.getPolyMarker(),self.getDotSize(),self.getDotScale()) \ + coors.strphys2frameX(.5*(self.data[i]['LowEdge']+self.data[i]['UpEdge'])) + ', ' \ + coors.strphys2frameY(self.data[i]['Content']) + ')\n') out += self.stoppsset() out += self.stopclip() return out def is2dimensional(self): return self.is2dim def getXMin(self): if self.is2dim: return min([self.data[i]['LowEdge'][0] for i in range(len(self.data))]) else: return min([self.data[i]['LowEdge'] for i in range(len(self.data))]) def getXMax(self): if self.is2dim: return max([self.data[i]['UpEdge'][0] for i in range(len(self.data))]) else: return max([self.data[i]['UpEdge'] for i in range(len(self.data))]) def getYMin(self, xmin, xmax, logy): if self.is2dim: return min([self.data[i]['LowEdge'][1] for i in range(len(self.data))]) else: yvalues = [] for i in range(len(self.data)): if ((self.data[i]['UpEdge'] > xmin or self.data[i]['LowEdge'] >= xmin) and \ (self.data[i]['LowEdge'] < xmax or self.data[i]['UpEdge'] <= xmax)): foo = 0 if self.getErrorBars() or self.getErrorBands(): foo = self.data[i]['Content']-self.data[i]['Error'][0] else: foo = self.data[i]['Content'] if logy: if foo>0: yvalues.append(foo) else: yvalues.append(foo) if len(yvalues) > 0: return min(yvalues) else: return self.data[0]['Content'] def getYMax(self, xmin, xmax): if self.is2dim: return max([self.data[i]['UpEdge'][1] for i in range(len(self.data))]) else: yvalues = [] for i in range(len(self.data)): if ((self.data[i]['UpEdge'] > xmin or self.data[i]['LowEdge'] >= xmin) and \ (self.data[i]['LowEdge'] < xmax or self.data[i]['UpEdge'] <= xmax)): if self.getErrorBars() or self.getErrorBands(): yvalues.append(self.data[i]['Content']+self.data[i]['Error'][1]) else: yvalues.append(self.data[i]['Content']) if len(yvalues) > 0: return max(yvalues) else: return self.data[0]['Content'] def getZMin(self, xmin, xmax, ymin, ymax): if not self.is2dim: return 0 zvalues = [] for i in range(len(self.data)): if (self.data[i]['UpEdge'][0] > xmin and self.data[i]['LowEdge'][0] < xmax) and \ (self.data[i]['UpEdge'][1] > ymin and self.data[i]['LowEdge'][1] < ymax): zvalues.append(self.data[i]['Content']) return min(zvalues) def getZMax(self, xmin, xmax, ymin, ymax): if not self.is2dim: return 0 zvalues = [] for i in range(len(self.data)): if (self.data[i]['UpEdge'][0] > xmin and self.data[i]['LowEdge'][0] < xmax) and \ (self.data[i]['UpEdge'][1] > ymin and self.data[i]['LowEdge'][1] < ymax): zvalues.append(self.data[i]['Content']) return max(zvalues) class Histo1D(Histogram): def read_input_data(self, f): for line in f: if is_end_marker(line, 'HISTO1D'): break elif is_comment(line): continue else: line = line.rstrip() m = pat_property.match(line) if m: prop, value = m.group(1,2) self.description[prop] = value else: linearray = line.split('\t') if len(linearray)==8: self.data.append({'LowEdge': float(linearray[0]), 'UpEdge': float(linearray[1]), 'Content': float(linearray[2]), 'Error': [float(linearray[3]),float(linearray[3])]}) else: raise Exception('Histo1D does not have 8 columns.'+line) class Frame: def __init__(self): self.framelinewidth = '0.3pt' def draw(self,inputdata): out = ('\n%\n% Frame\n%\n') if inputdata.description.has_key('FrameColor') and inputdata.description['FrameColor']!=None: color = inputdata.description['FrameColor'] # We want to draw this frame only once, so set it to False for next time: inputdata.description['FrameColor']=None # Calculate how high and wide the overall plot is height = [0,0] width = inputdata.description['PlotSizeX'] if inputdata.description.has_key('RatioPlot') and inputdata.description['RatioPlot']=='1': height[1] = -inputdata.description['RatioPlotSizeY'] if not (inputdata.description.has_key('MainPlot') and inputdata.description['MainPlot']=='0'): height[0] = inputdata.description['PlotSizeY'] else: height[0] = -height[1] height[1] = 0 # Get the margin widths left = inputdata.description['LeftMargin']+0.1 right = inputdata.description['RightMargin']+0.1 top = inputdata.description['TopMargin']+0.1 bottom = inputdata.description['BottomMargin']+0.1 # out += ('\\rput(0,1){\\psline[linewidth=%scm,linecolor=%s](%scm,%scm)(%scm,%scm)}\n' %(top, color, -left, top/2, width+right, top/2)) out += ('\\rput(0,%scm){\\psline[linewidth=%scm,linecolor=%s](%scm,%scm)(%scm,%scm)}\n' %(height[1], bottom, color, -left, -bottom/2, width+right, -bottom/2)) out += ('\\rput(0,0){\\psline[linewidth=%scm,linecolor=%s](%scm,%scm)(%scm,%scm)}\n' %(left, color, -left/2, height[1]-0.05, -left/2, height[0]+0.05)) out += ('\\rput(1,0){\\psline[linewidth=%scm,linecolor=%s](%scm,%scm)(%scm,%scm)}\n' %(right, color, right/2, height[1]-0.05, right/2, height[0]+0.05)) out += ('\\psframe[linewidth='+self.framelinewidth+',dimen=middle](0,0)(1,1)\n') return out class Ticks: def __init__(self, description, coors): self.majorticklinewidth = '0.3pt' self.minorticklinewidth = '0.3pt' self.majorticklength = '9pt' self.minorticklength = '4pt' self.description = description self.coors = coors def draw_ticks(self, min, max, plotlog=False, custommajorticks=[], customminorticks=[], custommajortickmarks=-1, customminortickmarks=-1, drawlabels=True, twosided=False): out = "" if plotlog: x=int(log10(min)) while (x<log10(max)+1): if 10**x>=min: ticklabel=10**x if ticklabel>min and ticklabel<max: out += self.draw_majortick(ticklabel,twosided) if drawlabels: out += self.draw_majorticklabel(ticklabel) if ticklabel==min or ticklabel==max: if drawlabels: out += self.draw_majorticklabel(ticklabel) for i in range(2,10): ticklabel=i*10**(x-1) if ticklabel>min and ticklabel<max: out += self.draw_minortick(ticklabel,twosided) x+=1 elif (custommajorticks!=[] or customminorticks!=[]): for i in range(len(custommajorticks)): value=custommajorticks[i]['Value'] label=custommajorticks[i]['Label'] if value>=min and value<=max: out += self.draw_majortick(value,twosided) if drawlabels: out += self.draw_majorticklabel(value, label=label) for i in range(len(customminorticks)): value=customminorticks[i]['Value'] if value>=min and value<=max: out += self.draw_minortick(value,twosided) else: xrange = max-min digits = int(log10(xrange))+1 if (xrange < 1): digits -= 1 foo = int(xrange/(10**(digits-1))) if (foo/9. > 0.5): tickmarks = 10 elif (foo/9. > 0.2): tickmarks = 5 elif (foo/9. > 0.1): tickmarks = 2 if (custommajortickmarks>-1): if custommajortickmarks not in [1, 2, 5, 10, 20]: print '+++ Error in Ticks.draw_ticks(): MajorTickMarks must be in [1, 2, 5, 10, 20]' else: #if custommajortickmarks==1: custommajortickmarks=10 tickmarks = custommajortickmarks if (tickmarks == 2 or tickmarks == 20): minortickmarks = 3 else: minortickmarks = 4 if (customminortickmarks>-1): minortickmarks = customminortickmarks # x = 0 while (x > min*10**digits): x -= tickmarks*100**(digits-1) while (x <= max*10**digits): if (x >= min*10**digits-tickmarks*100**(digits-1)): ticklabel = 1.*x/10**digits if (int(ticklabel) == ticklabel): ticklabel = int(ticklabel) if (float(ticklabel-min)/xrange >= -1e-5): if (fabs(ticklabel-min)/xrange > 1e-5 and fabs(ticklabel-max)/xrange > 1e-5): out += self.draw_majortick(ticklabel,twosided) if drawlabels: out += self.draw_majorticklabel(ticklabel) xminor = x for i in range(minortickmarks): xminor += 1.*tickmarks*100**(digits-1)/(minortickmarks+1) ticklabel = 1.*xminor/10**digits if (ticklabel > min and ticklabel < max): if (fabs(ticklabel-min)/xrange > 1e-5 and fabs(ticklabel-max)/xrange > 1e-5): out += self.draw_minortick(ticklabel,twosided) x += tickmarks*100**(digits-1) return out def draw(self): pass def draw_minortick(self, ticklabel, twosided): pass def draw_majortick(self, ticklabel, twosided): pass def draw_majorticklabel(self, ticklabel): pass def get_ticklabel(self, value, plotlog=False): label='' if plotlog: bar = int(log10(value)) if bar<0: sign='-' else: sign='\\,' if bar==0: label = '1' else: label = '10$^{'+sign+'\\text{'+str(abs(int(log10(value))))+'}}$' else: if fabs(value) < 1e-10: value=0 label=str(value) return label class XTicks(Ticks): def draw(self, custommajorticks=[], customminorticks=[], custommajortickmarks=-1, customminortickmarks=-1,drawlabels=True): twosided = False if self.description.has_key('XTwosidedTicks') and self.description['XTwosidedTicks']=='1': twosided = True out = "" out += ('\n%\n% X-Ticks\n%\n') out += ('\\def\\majortickmarkx{\\psline[linewidth='+self.majorticklinewidth+'](0,0)(0,'+self.majorticklength+')}%\n') out += ('\\def\\minortickmarkx{\\psline[linewidth='+self.minorticklinewidth+'](0,0)(0,'+self.minorticklength+')}%\n') out += self.draw_ticks(self.coors.xmin(), self.coors.xmax(),\ plotlog=self.description['LogX'],\ custommajorticks=custommajorticks,\ customminorticks=customminorticks,\ custommajortickmarks=custommajortickmarks,\ customminortickmarks=customminortickmarks,\ drawlabels=drawlabels,\ twosided=twosided) return out def draw_minortick(self, ticklabel, twosided): out = '' out += '\\rput('+self.coors.strphys2frameX(ticklabel)+', 0){\\minortickmarkx}\n' if twosided: out += '\\rput{180}('+self.coors.strphys2frameX(ticklabel)+', 1){\\minortickmarkx}\n' return out def draw_majortick(self, ticklabel, twosided): out = '' out += '\\rput('+self.coors.strphys2frameX(ticklabel)+', 0){\\majortickmarkx}\n' if twosided: out += '\\rput{180}('+self.coors.strphys2frameX(ticklabel)+', 1){\\majortickmarkx}\n' return out def draw_majorticklabel(self, value, label=''): if label=='': label=self.get_ticklabel(value,self.description['LogX']) return ('\\rput('+self.coors.strphys2frameX(value)+', 0){\\rput[B](0,-2.3\\labelsep){\\strut{}'+label+'}}\n') class YTicks(Ticks): def draw(self, custommajorticks=[], customminorticks=[], custommajortickmarks=-1, customminortickmarks=-1): twosided = False if self.description.has_key('YTwosidedTicks') and self.description['YTwosidedTicks']=='1': twosided = True out = "" out += ('\n%\n% Y-Ticks\n%\n') out += ('\\def\\majortickmarky{\\psline[linewidth='+self.majorticklinewidth+'](0,0)('+self.majorticklength+',0)}%\n') out += ('\\def\\minortickmarky{\\psline[linewidth='+self.minorticklinewidth+'](0,0)('+self.minorticklength+',0)}%\n') out += self.draw_ticks(self.coors.ymin(), self.coors.ymax(),\ plotlog=self.description['LogY'],\ custommajorticks=custommajorticks,\ customminorticks=customminorticks,\ custommajortickmarks=custommajortickmarks,\ customminortickmarks=customminortickmarks,\ twosided=twosided) return out def draw_minortick(self, ticklabel, twosided): out = '' out += '\\rput(0, '+self.coors.strphys2frameY(ticklabel)+'){\\minortickmarky}\n' if twosided: out += '\\rput{180}(1, '+self.coors.strphys2frameY(ticklabel)+'){\\minortickmarky}\n' return out def draw_majortick(self, ticklabel, twosided): out = '' out += '\\rput(0, '+self.coors.strphys2frameY(ticklabel)+'){\\majortickmarky}\n' if twosided: out += '\\rput{180}(1, '+self.coors.strphys2frameY(ticklabel)+'){\\majortickmarky}\n' return out def draw_majorticklabel(self, value, label=''): if label=='': label=self.get_ticklabel(value,self.description['LogY']) if self.description.has_key('RatioPlotMode') and self.description['RatioPlotMode']=='deviation' \ and self.description.has_key('RatioPlotStage') and self.description['RatioPlotStage']: return ('\\uput[180]{0}(0, '+self.coors.strphys2frameY(value)+'){\\strut{}'+label+'\\,$\\sigma$}\n') else: return ('\\uput[180]{0}(0, '+self.coors.strphys2frameY(value)+'){\\strut{}'+label+'}\n') class ZTicks(Ticks): def __init__(self, description, coors): self.majorticklinewidth = '0.3pt' self.minorticklinewidth = '0.3pt' self.majorticklength = '6pt' self.minorticklength = '2.6pt' self.description = description self.coors = coors def draw(self, custommajorticks=[], customminorticks=[], custommajortickmarks=-1, customminortickmarks=-1): out = "" out += ('\n%\n% Z-Ticks\n%\n') out += ('\\def\\majortickmarkz{\\psline[linewidth='+self.majorticklinewidth+'](0,0)('+self.majorticklength+',0)}%\n') out += ('\\def\\minortickmarkz{\\psline[linewidth='+self.minorticklinewidth+'](0,0)('+self.minorticklength+',0)}%\n') out += self.draw_ticks(self.coors.zmin(), self.coors.zmax(),\ plotlog=self.description['LogZ'],\ custommajorticks=custommajorticks,\ customminorticks=customminorticks,\ custommajortickmarks=custommajortickmarks,\ customminortickmarks=customminortickmarks,\ twosided=False) return out def draw_minortick(self, ticklabel, twosided): return '\\rput{180}(1, '+self.coors.strphys2frameZ(ticklabel)+'){\\minortickmarkz}\n' def draw_majortick(self, ticklabel, twosided): return '\\rput{180}(1, '+self.coors.strphys2frameZ(ticklabel)+'){\\majortickmarkz}\n' def draw_majorticklabel(self, value, label=''): if label=='': label=self.get_ticklabel(value,self.description['LogZ']) if self.description.has_key('RatioPlotMode') and self.description['RatioPlotMode']=='deviation' \ and self.description.has_key('RatioPlotStage') and self.description['RatioPlotStage']: return ('\\uput[0]{0}(1, '+self.coors.strphys2frameZ(value)+'){\\strut{}'+label+'\\,$\\sigma$}\n') else: return ('\\uput[0]{0}(1, '+self.coors.strphys2frameZ(value)+'){\\strut{}'+label+'}\n') class Coordinates: def __init__(self, inputdata): self.description = inputdata.description def phys2frameX(self, x): if self.description['LogX']: if x>0: result = 1.*(log10(x)-log10(self.xmin()))/(log10(self.xmax())-log10(self.xmin())) else: return -10 else: result = 1.*(x-self.xmin())/(self.xmax()-self.xmin()) if (fabs(result) < 1e-4): return 0 else: return min(max(result,-10),10) def phys2frameY(self, y): if self.description['LogY']: if y>0: result = 1.*(log10(y)-log10(self.ymin()))/(log10(self.ymax())-log10(self.ymin())) else: return -10 else: result = 1.*(y-self.ymin())/(self.ymax()-self.ymin()) if (fabs(result) < 1e-4): return 0 else: return min(max(result,-10),10) def phys2frameZ(self, z): if self.description['LogZ']: if z>0: result = 1.*(log10(z)-log10(self.zmin()))/(log10(self.zmax())-log10(self.zmin())) else: return -10 else: result = 1.*(z-self.zmin())/(self.zmax()-self.zmin()) if (fabs(result) < 1e-4): return 0 else: return min(max(result,-10),10) # TODO: Add frame2phys functions (to allow linear function sampling in the frame space rather than the physical space) def strphys2frameX(self, x): return str(self.phys2frameX(x)) def strphys2frameY(self, y): return str(self.phys2frameY(y)) def strphys2frameZ(self, z): return str(self.phys2frameZ(z)) def xmin(self): return self.description['Borders'][0] def xmax(self): return self.description['Borders'][1] def ymin(self): return self.description['Borders'][2] def ymax(self): return self.description['Borders'][3] def zmin(self): return self.description['Borders'][4] def zmax(self): return self.description['Borders'][5] #################### import shutil def process_datfile(datfile): global opts if not os.access(datfile, os.R_OK): raise Exception("Could not read data file '%s'" % datfile) dirname = os.path.dirname(datfile) datfile = os.path.basename(datfile) filename = datfile.replace('.dat','') ## Create a temporary directory cwd = os.getcwd() datpath = os.path.join(cwd, dirname, datfile) tempdir = tempfile.mkdtemp('.make-plots') tempdatpath = os.path.join(tempdir, datfile) shutil.copy(datpath, tempdir) ## Make TeX file inputdata = Inputdata(os.path.join(dirname,filename)) texpath = os.path.join(tempdir, '%s.tex' % filename) texfile = open(texpath, 'w') p = Plot(inputdata) texfile.write(p.write_header(inputdata)) if not (inputdata.description.has_key('MainPlot') and inputdata.description['MainPlot']=='0'): mp = MainPlot(inputdata) texfile.write(mp.draw(inputdata)) if inputdata.description.has_key('RatioPlot') and inputdata.description['RatioPlot']=='1': rp = RatioPlot(inputdata) texfile.write(rp.draw(inputdata)) texfile.write(p.write_footer()) texfile.close() if opts.OUTPUT_FORMAT != "TEX": import subprocess ## Run LaTeX (in no-stop mode) logging.debug(os.listdir(tempdir)) texcmd = ["latex", "\scrollmode\input", texpath] logging.debug("TeX command: " + " ".join(texcmd)) texproc = subprocess.Popen(texcmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=tempdir) logging.debug(texproc.communicate()[0]) logging.debug(os.listdir(tempdir)) ## Run dvips dvcmd = ["dvips", filename] if not logging.getLogger().isEnabledFor(logging.DEBUG): dvcmd.append("-q") ## Handle Minion Font if opts.OUTPUT_FONT == "MINION": dvcmd.append('-Pminion') ## Choose format # TODO: Rationalise this monstrosity! # TODO: Use a multi-format string and object handler cf. slhaplot (see, SUSY *is* useful...) if opts.OUTPUT_FORMAT == "PS": dvcmd += ["-o", "%s.ps" % filename] logging.debug(" ".join(dvcmd)) dvproc = subprocess.Popen(dvcmd, stdout=subprocess.PIPE, cwd=tempdir) dvproc.wait() elif opts.OUTPUT_FORMAT == "PDF": dvcmd.append("-f") logging.debug(" ".join(dvcmd)) dvproc = subprocess.Popen(dvcmd, stdout=subprocess.PIPE, cwd=tempdir) cnvproc = subprocess.Popen(["ps2pdf", "-"], stdin=dvproc.stdout, stdout=subprocess.PIPE, cwd=tempdir) f = open(os.path.join(tempdir, "%s.pdf" % filename), "w") f.write(cnvproc.communicate()[0]) f.close() elif opts.OUTPUT_FORMAT == "EPS": dvcmd.append("-f") logging.debug(" ".join(dvcmd)) dvproc = subprocess.Popen(dvcmd, stdout=subprocess.PIPE, cwd=tempdir) cnvproc = subprocess.Popen(["ps2eps"], stdin=dvproc.stdout, stderr=subprocess.PIPE, stdout=subprocess.PIPE, cwd=tempdir) f = open(os.path.join(tempdir, "%s.eps" % filename), "w") f.write(cnvproc.communicate()[0]) f.close() elif opts.OUTPUT_FORMAT == "PNG": dvcmd.append("-f") logging.debug(" ".join(dvcmd)) dvproc = subprocess.Popen(dvcmd, stdout=subprocess.PIPE, cwd=tempdir) pngcmd = ["convert", "-density", "200", "-", "%s.png" % filename] logging.debug(" ".join(pngcmd)) pngproc = subprocess.Popen(pngcmd, stdin=dvproc.stdout, stdout=subprocess.PIPE, cwd=tempdir) pngproc.wait() elif opts.OUTPUT_FORMAT == "PSPNG": dvcmd += ["-o", "%s.ps" % filename] logging.debug(" ".join(dvcmd)) dvproc = subprocess.Popen(dvcmd, stdout=subprocess.PIPE, cwd=tempdir) dvproc.wait() convertavailable = True testconvert = subprocess.Popen(["which", "convert"], stdout=open("/dev/null", "w"), stderr=subprocess.STDOUT) if testconvert.wait() != 0: convertavailable = False if convertavailable: pngcmd = ["convert", "-density", "85", "%s.ps" % filename, "%s.png" % filename] logging.debug(" ".join(pngcmd)) pngproc = subprocess.Popen(pngcmd, stdout=subprocess.PIPE, cwd=tempdir) pngproc.wait() else: pstopnm = "pstopnm -stdout -xsize=461 -ysize=422 -xborder=0.01 -yborder=0.01 -portrait %s.ps" % filename p1 = subprocess.Popen(pstopnm.split(" "), stdout=subprocess.PIPE, stderr=open("/dev/null", "w"), cwd=tempdir) p2 = subprocess.Popen(["pnmtopng"], stdin=p1.stdout, stdout=open("%s/%s.png" % (tempdir, filename), "w"), stderr=open("/dev/null", "w"), cwd=tempdir) p2.wait() elif opts.OUTPUT_FORMAT == "PDFPNG": dvcmd.append("-f") logging.debug(" ".join(dvcmd)) dvproc = subprocess.Popen(dvcmd, stdout=subprocess.PIPE, cwd=tempdir) cnvproc = subprocess.Popen(["ps2pdf", "-"], stdin=dvproc.stdout, stdout=subprocess.PIPE, cwd=tempdir) f = open(os.path.join(tempdir, "%s.pdf" % filename), "w") f.write(cnvproc.communicate()[0]) f.close() logging.debug(os.listdir(tempdir)) pngcmd = ["convert", "-density", "85", "%s.pdf" % filename, "%s.png" % filename] logging.debug(" ".join(pngcmd)) pngproc = subprocess.Popen(pngcmd, stdout=subprocess.PIPE, cwd=tempdir) pngproc.wait() elif opts.OUTPUT_FORMAT == "EPSPNG": dvcmd.append("-f") logging.debug(" ".join(dvcmd)) dvproc = subprocess.Popen(dvcmd, stdout=subprocess.PIPE, cwd=tempdir) cnvproc = subprocess.Popen(["ps2eps"], stdin=dvproc.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=tempdir) f = open(os.path.join(tempdir, "%s.eps" % filename), "w") f.write(cnvproc.communicate()[0]) f.close() pngcmd = ["convert", "-density", "85", "%s.eps" % filename, "%s.png" % filename] logging.debug(" ".join(pngcmd)) pngproc = subprocess.Popen(pngcmd, stdout=subprocess.PIPE, cwd=tempdir) pngproc.wait() else: logging.error("Unknown format: %s" % opts.OUTPUT_FORMAT) sys.exit(1) logging.debug(os.listdir(tempdir)) ## Copy results back to main dir outbasename = filename outname = outbasename + "." + opts.OUTPUT_FORMAT.lower() ## TODO: Make this neater: if "PNG" in opts.OUTPUT_FORMAT: ... if opts.OUTPUT_FORMAT == "PSPNG": outpath = os.path.join(tempdir, outbasename+".ps") shutil.copy(outpath, os.path.join(cwd,dirname)) outpath = os.path.join(tempdir, outbasename+".png") shutil.copy(outpath, os.path.join(cwd,dirname)) elif opts.OUTPUT_FORMAT == "PDFPNG": outpath = os.path.join(tempdir, outbasename+".pdf") shutil.copy(outpath, os.path.join(cwd,dirname)) outpath = os.path.join(tempdir, outbasename+".png") shutil.copy(outpath, os.path.join(cwd,dirname)) elif opts.OUTPUT_FORMAT == "EPSPNG": outpath = os.path.join(tempdir, outbasename+".eps") shutil.copy(outpath, os.path.join(cwd,dirname)) outpath = os.path.join(tempdir, outbasename+".png") shutil.copy(outpath, os.path.join(cwd,dirname)) else: outpath = os.path.join(tempdir, outname) if os.path.exists(outpath): shutil.copy(outpath, os.path.join(cwd,dirname)) else: logging.error("No output file '%s' from processing %s" % (outname, datfile)) ## Clean up if opts.NO_CLEANUP: logging.info('Keeping temp-files in %s' % tempdir) else: shutil.rmtree(tempdir, ignore_errors=True) ## Wrapper for a process thread which attempts to process datfiles until empty import threading, Queue class MkPlotThread( threading.Thread ): def run(self): global opts global datfiles global RECVD_KILL_SIGNAL while True: if RECVD_KILL_SIGNAL is not None: ## Empty the queue while not datfiles.empty(): dummy = datfiles.get_nowait() break try: datfile = datfiles.get_nowait() rem = datfiles.qsize() logging.info("Plotting %s (%d remaining)" % (datfile, rem)) process_datfile(datfile) except Queue.Empty, e: #print "%s ending." % self.getName() break except Exception, e: print "Error: %s" % str(e) import traceback logging.debug(traceback.format_exc()) #exit(1) #################### if __name__ == '__main__': ## Try to rename the process on Linux try: import ctypes libc = ctypes.cdll.LoadLibrary('libc.so.6') libc.prctl(15, 'make-plots', 0, 0, 0) except Exception: pass ## Try to use Psyco optimiser try: import psyco psyco.full() except ImportError: pass ## Find number of (virtual) processing units numcores = os.sysconf('SC_NPROCESSORS_ONLN') if numcores is None: numcores = 1 ## Parse command line options from optparse import OptionParser, OptionGroup parser = OptionParser(usage=__doc__) parser.add_option("-n", "-j", "--num-threads", dest="NUM_THREADS", type="int", default=numcores, help="max number of threads to be used [%s]" % numcores) parser.add_option("--palatino", dest="OUTPUT_FONT", action="store_const", const="PALATINO", default="PALATINO", help="Use Palatino as font (default).") parser.add_option("--cm", dest="OUTPUT_FONT", action="store_const", const="CM", default="PALATINO", help="Use Computer Modern as font.") parser.add_option("--times", dest="OUTPUT_FONT", action="store_const", const="TIMES", default="PALATINO", help="Use Times as font.") parser.add_option("--minion", dest="OUTPUT_FONT", action="store_const", const="MINION", default="PALATINO", help="Use Adobe Minion Pro as font. Note: You need to set TEXMFHOME first.") parser.add_option("--helvetica", dest="OUTPUT_FONT", action="store_const", const="HELVETICA", default="PALATINO", help="Use Helvetica as font.") parser.add_option("--ps", dest="OUTPUT_FORMAT", action="store_const", const="PS", default="PDF", help="Create PostScript output (default).") parser.add_option("--pdf", dest="OUTPUT_FORMAT", action="store_const", const="PDF", default="PDF", help="Create PDF output.") parser.add_option("--eps", dest="OUTPUT_FORMAT", action="store_const", const="EPS", default="PDF", help="Create Encapsulated PostScript output.") parser.add_option("--png", dest="OUTPUT_FORMAT", action="store_const", const="PNG", default="PDF", help="Create PNG output.") parser.add_option("--pspng", dest="OUTPUT_FORMAT", action="store_const", const="PSPNG", default="PDF", help="Create PS and PNG output.") parser.add_option("--pdfpng", dest="OUTPUT_FORMAT", action="store_const", const="PDFPNG", default="PDF", help="Create PDF and PNG output.") parser.add_option("--epspng", dest="OUTPUT_FORMAT", action="store_const", const="EPSPNG", default="PDF", help="Create EPS and PNG output.") parser.add_option("--tex", dest="OUTPUT_FORMAT", action="store_const", const="TEX", default="PDF", help="Create TeX/LaTeX output.") parser.add_option("--no-cleanup", dest="NO_CLEANUP", action="store_true", default=False, help="Keep temporary directory and print its filename.") parser.add_option("--full-range", dest="FULL_RANGE", action="store_true", default=False, help="Plot full y range in LogY plots.") parser.add_option("-c", "--config", dest="CONFIGFILES", action="append", default=None, help="Plot config file to be used. Overrides internal config blocks.") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option_group(verbgroup) opts, args = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Check for no args if len(args) == 0: logging.error(parser.get_usage()) sys.exit(2) ## Test for external programs (kpsewhich, latex, dvips, ps2pdf/ps2eps, and convert) opts.LATEXPKGS = [] if opts.OUTPUT_FORMAT != "TEX": try: import subprocess ## latex p = subprocess.Popen(["which", "latex"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) rtn = p.wait() if rtn != 0: logging.error("ERROR: required program 'latex' could not be found. Exiting...") sys.exit(1) ## dvips p = subprocess.Popen(["which", "dvips"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) rtn = p.wait() if rtn != 0: logging.error("ERROR: required program 'dvips' could not be found. Exiting...") sys.exit(1) ## ps2pdf / ps2eps if "PDF" in opts.OUTPUT_FORMAT: p = subprocess.Popen(["which", "ps2pdf"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) rtn = p.wait() if rtn != 0: logging.error("ERROR: required program 'ps2pdf' (for PDF output) could not be found. Exiting...") sys.exit(1) elif "EPS" in opts.OUTPUT_FORMAT: p = subprocess.Popen(["which", "ps2eps"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) rtn = p.wait() if rtn != 0: logging.error("ERROR: required program 'ps2eps' (for EPS output) could not be found. Exiting...") sys.exit(1) ## PNG output converter if "PNG" in opts.OUTPUT_FORMAT: p = subprocess.Popen(["which", "convert"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) rtn = p.wait() if rtn != 0: logging.error("ERROR: required program 'convert' (for PNG output) could not be found. Exiting...") sys.exit(1) ## kpsewhich: required for LaTeX package testing p = subprocess.Popen(["which", "kpsewhich"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) rtn = p.wait() if rtn != 0: logging.warning("WARNING: required program 'kpsewhich' (for LaTeX package checks) could not be found") else: ## Check minion font if opts.OUTPUT_FONT == "MINION": p = subprocess.Popen(["kpsewhich", "minion.sty"], stdout=subprocess.PIPE) p.wait() if p.returncode != 0: logging.warning('Warning: Using "--minion" requires minion.sty to be installed. Ignoring it.') opts.OUTPUT_FONT = "PALATINO" ## Check for HEP LaTeX packages for pkg in ["hepnicenames", "hepunits", "underscore"]: p = subprocess.Popen(["kpsewhich", "%s.sty" % pkg], stdout=subprocess.PIPE) p.wait() if p.returncode == 0: opts.LATEXPKGS.append(pkg) ## Check for Palatino old style figures and small caps if opts.OUTPUT_FONT == "PALATINO": p = subprocess.Popen(["kpsewhich", "ot1pplx.fd"], stdout=subprocess.PIPE) p.wait() if p.returncode == 0: opts.OUTPUT_FONT = "PALATINO_OSF" except Exception, e: logging.warning("Problem while testing for external packages. I'm going to try and continue without testing, but don't hold your breath...") ## Fill queue datfiles = Queue.Queue(maxsize=-1) plotword = "plot" if len(args) > 1: plotword = "plots" logging.info("Making %d %s" % (len(args), plotword)) for d in args: datfiles.put(d) ## Set up signal handling import signal RECVD_KILL_SIGNAL = None def handleKillSignal(signum, frame): "Declare us as having been signalled, and return to default handling behaviour" global RECVD_KILL_SIGNAL logging.critical("Signal handler called with signal " + str(signum)) RECVD_KILL_SIGNAL = signum signal.signal(signum, signal.SIG_DFL) ## Signals to handle signal.signal(signal.SIGINT, handleKillSignal) signal.signal(signal.SIGTERM, handleKillSignal) signal.signal(signal.SIGHUP, handleKillSignal) signal.signal(signal.SIGUSR2, handleKillSignal) ## Run threads for threadnum in range(opts.NUM_THREADS): procthread = MkPlotThread() #procthread.daemon = True procthread.start() import time while not datfiles.empty() and not RECVD_KILL_SIGNAL: time.sleep(0.25) �������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/bin/aida2flat���������������������������������������������������������������������������0000755�0001750�0001750�00000020346�12116077756�013416� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env python """\ %prog [options] aidafile [aidafile2 ...] Convert AIDA data files to a flat format which is more human-readable then the XML (and by default also plottable directly using make-plots). The output is by default written out to standard output unless the --split, --smart-output, --gnuplot, or --output options are specified. When specifying either input or output filenames, a '-' is used to refer to stdin or stdout as appropriate. Histograms can also be filtered by AIDA path, using the -m or -M options for a positive or negative regex pattern patch respectively. """ import sys if sys.version_info[:3] < (2,4,0): print "rivet scripts require Python version >= 2.4.0... exiting" sys.exit(1) import os, logging import lighthisto ## Try to load faster but non-standard cElementTree module try: import xml.etree.cElementTree as ET except ImportError: try: import cElementTree as ET except ImportError: try: import xml.etree.ElementTree as ET except: sys.stderr.write("Can't load the ElementTree XML parser: please install it!\n") sys.exit(1) ########################################################## if __name__ == "__main__": ## Default plot file search paths default_plotdirs = ["."] try: import rivet default_plotdirs += rivet.getAnalysisPlotPaths() except: pass ## Parse command line options from optparse import OptionParser, OptionGroup parser = OptionParser(usage=__doc__) parser.add_option("-o", "--output", default=None, help="Write all histos to a single output file, rather than the default writing to stdout. " "stdout can be explicitly specified by setting '-' as the output filename. This option will " "be disregarded if --split, --smart-output, or --gnuplot is specified.", dest="OUTPUT") parser.add_option("-s", "--split", action="store_true", default=False, help="Write each histo to a separate output file, with names based on the histo path", dest="SPLITOUTPUT") parser.add_option("-S", "--smart-output", action="store_true", default=False, help="Write to output files with names based on the corresponding input filename. " "This option will be disregarded if --split is specified.", dest="SMARTOUTPUT") parser.add_option("-g", "--gnuplot", action="store_true", default=False, help="Provide output suitable for Gnuplot's 'plot \"foo.dat\" with xye'. " "This option implies --split and will override --output or --smart-output", dest="GNUPLOT") parser.add_option("--plotinfodir", dest="PLOTINFODIR", action="append", default=default_plotdirs, help="directory which may contain plot header information") parser.add_option("-m", "--match", action="append", help="Only write out histograms whose $path/$name string matches these regexes", dest="PATHPATTERNS") parser.add_option("-M", "--unmatch", action="append", help="Exclude histograms whose $path/$name string matches these regexes", dest="PATHUNPATTERNS") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") opts, args = parser.parse_args() ## Configure logging logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Initialise steering variables which need a bit more care import re if opts.PATHPATTERNS is None: opts.PATHPATTERNS = [] opts.PATHPATTERNS = [re.compile(r) for r in opts.PATHPATTERNS] if opts.PATHUNPATTERNS is None: opts.PATHUNPATTERNS = [] opts.PATHUNPATTERNS = [re.compile(r) for r in opts.PATHUNPATTERNS] if opts.GNUPLOT: opts.SPLITOUTPUT = True ## Check that at least one file has been supplied if len(args) < 1: sys.stderr.write("Must specify at least one AIDA histogram file (or '-' for stdin)\n") sys.exit(1) ## Add AIDA file directories to the plotinfo path for aidafile in args: if aidafile != "-": aidadir = os.path.dirname(aidafile) if aidadir not in opts.PLOTINFODIR: opts.PLOTINFODIR.append(aidadir) ## Remove empty path entries opts.PLOTINFODIR = filter(lambda s: len(s) > 0, opts.PLOTINFODIR) ## Create plot file parser plotparser = lighthisto.PlotParser(opts.PLOTINFODIR) ## Run over the files and build histo objects selected by the pattern filtering histos = {} for aidafile in args: try: if aidafile == "-": tree = ET.parse(sys.stdin) else: if not os.access(aidafile, os.R_OK): logging.error("%s can not be read" % aidafile) sys.exit(1) tree = ET.parse(aidafile) except: logging.error("%s can not be parsed as XML" % aidafile) sys.exit(1) for dps in tree.findall("dataPointSet"): useThis = True ## Check dataPointSet contains at least one measurement try: if dps.find('dataPoint').find('measurement') is None: useThis = False except AttributeError, err: logging.debug(err) dpspath = os.path.join(dps.get("path"), dps.get("name")) ## If regexes have been provided, only add analyses which match and don't unmatch if opts.PATHPATTERNS: useThis = False for regex in opts.PATHPATTERNS: if regex.search(dpspath): useThis = True break if useThis and opts.PATHUNPATTERNS: for regex in opts.PATHUNPATTERNS: if regex.search(dpspath): useThis = False break if useThis: hist = lighthisto.Histo.fromDPS(dps) try: plotparser.updateHistoHeaders(hist) except ValueError, err: logging.debug(err) histos.setdefault(aidafile, []).append(hist) ## Write output if histos: ## Split output per-histogram if opts.SPLITOUTPUT: for f, hs in sorted(histos.iteritems()): for h in sorted(hs): histo = h.fullPath()[1:].replace("/", "_") outfile = "%s.dat" % histo #print "Writing to", outfile out = open(outfile, "w") if not opts.GNUPLOT: out.write(h.header() + "\n") if opts.GNUPLOT: out.write(h.asGnuplot() + "\n") else: out.write(h.asFlat() + "\n") out.close() ## Split output per-infile elif opts.SMARTOUTPUT: for f, hs in sorted(histos.iteritems()): outfile = os.path.basename(f).replace(".aida", ".dat") if f == "-": outfile = "out.dat" out = open(outfile, "w") #out.write(h.header() + "\n") out.write("\n\n".join(h.asFlat() for h in sorted(hs))) out.write("\n") out.close() ## Write all output to a single file (stdout by default) else: outfile = opts.OUTPUT or "-" if outfile == "-": out = sys.stdout else: out = open(outfile, "w") for f, hs in sorted(histos.iteritems()): out.write("\n\n".join([h.asFlat() for h in sorted(hs)])) out.write("\n") if outfile != "-": out.close() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/bin/rivet-mkanalysis��������������������������������������������������������������������0000755�0001750�0001750�00000024173�12116077756�015073� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env python """\ %prog: make templates of analysis source files for Rivet" Usage: %prog [--help|-h] [--srcroot=<srcrootdir>] <analysisname> Without the --srcroot flag, the analysis files will be created in the current directory. """ import sys if sys.version_info[:3] < (2,4,0): print "rivet scripts require Python version >= 2.4.0... exiting" sys.exit(1) import logging, os ## Handle command line from optparse import OptionParser parser = OptionParser(usage=__doc__) parser.add_option("--srcroot", metavar="DIR", dest="SRCROOT", default=None, help="install the templates into the Rivet source tree (rooted " + "at directory DIR) rather than just creating all in the current dir") parser.add_option("-q", "--quiet", dest="LOGLEVEL", default=logging.INFO, action="store_const", const=logging.WARNING, help="only write out warning and error messages") parser.add_option("-v", "--verbose", dest="LOGLEVEL", default=logging.INFO, action="store_const", const=logging.DEBUG, help="provide extra debugging messages") parser.add_option("-i", "--inline-info", dest="INLINE", action="store_true", default=False, help="Put analysis info into source file instead of separate data file.") opts, args = parser.parse_args() logging.basicConfig(format="%(msg)s", level=opts.LOGLEVEL) ANANAMES = args ## Work out installation paths ANAROOT = os.path.abspath(opts.SRCROOT or os.getcwd()) if not os.access(ANAROOT, os.W_OK): logging.error("Can't write to source root directory %s" % ANAROOT) sys.exit(1) ANASRCDIR = os.getcwd() ANAINFODIR = os.getcwd() ANAPLOTDIR = os.getcwd() if opts.SRCROOT: ANASRCDIR = os.path.join(ANAROOT, "src/Analyses") ANAINFODIR = os.path.join(ANAROOT, "data/anainfo") ANAPLOTDIR = os.path.join(ANAROOT, "data/plotinfo") if not (os.path.exists(ANASRCDIR) and os.path.exists(ANAINFODIR) and os.path.exists(ANAPLOTDIR)): logging.error("Rivet analysis dirs do not exist under %s" % ANAROOT) sys.exit(1) if not (os.access(ANASRCDIR, os.W_OK) and os.access(ANAINFODIR, os.W_OK) and os.access(ANAPLOTDIR, os.W_OK)): logging.error("Can't write to Rivet analysis dirs under %s" % ANAROOT) sys.exit(1) ## Check for disallowed characters in analysis names import string allowedchars = string.letters + string.digits + "_" all_ok = True for ananame in ANANAMES: for c in ananame: if c not in allowedchars: logging.error("Analysis name '%s' contains disallowed character '%s'!" % (ananame, c)) all_ok = False break if not all_ok: logging.error("Exiting... please ensure that all analysis names are valid") sys.exit(1) ## Now make each analysis for ANANAME in ANANAMES: logging.info("Writing templates for %s to %s" % (ANANAME, ANAROOT)) ## Extract some metadata from the name if it matches the standard pattern import re re_stdana = re.compile(r"^(\w+)_(\d{4})_(I|S)(\d+)$") match = re_stdana.match(ANANAME) STDANA = False ANAEXPT = "<Insert the experiment name>" ANAYEAR = "<Insert year of publication>" INSPIRE_SPIRES = None ANAINSPIREID = "<Insert the Inspire ID>" if match: STDANA = True ANAEXPT = match.group(1) ANAYEAR = match.group(2) INSPIRE_SPIRES = match.group(3) ANAINSPIREID = match.group(4) if INSPIRE_SPIRES == "S": ANAREFREPO = "Spires" else: ANAREFREPO = "Inspire" KEYWORDS = { "ANANAME" : ANANAME, "ANAEXPT" : ANAEXPT, "ANAYEAR" : ANAYEAR, "ANAREFREPO" : ANAREFREPO, "ANAINSPIREID" : ANAINSPIREID } ## Try to get bib info from SPIRES ANABIBKEY = "" ANABIBTEX = "" bibkey, bibtex = None, None if STDANA: try: import spiresbib logging.debug("Getting Inspire/SPIRES biblio data for '%s'" % ANANAME) bibkey, bibtex = spiresbib.get_bibtex_from_repo(INSPIRE_SPIRES, ANAINSPIREID) except Exception, e: logging.error("Inspire/SPIRES oops: %s" % e) if bibkey and bibtex: ANABIBKEY = bibkey ANABIBTEX = bibtex KEYWORDS["ANABIBKEY"] = ANABIBKEY KEYWORDS["ANABIBTEX"] = ANABIBTEX ## Try do download AIDA data file from hepdata if STDANA: try: import urllib hdurl = "http://hepdata.cedar.ac.uk/view/irn%s/aida" % ANAINSPIREID logging.debug("Getting data file from HepData at %s" % hdurl) httpstream = urllib.urlopen(hdurl) aidastr = httpstream.read() if "<html>" in aidastr: logging.warning("Problem encountered when getting data from HepData (%s). No reference data file written." % hdurl) else: f = open("%s.aida" % ANANAME, "w") f.write(aidastr) f.close() httpstream.close() except Exception, e: logging.error("HepData oops: %s" % e) if opts.INLINE: KEYWORDS["ANAREFREPO_LOWER"] = KEYWORDS["ANAREFREPO"].lower() INLINEMETHODS=""" public: string experiment() const { return "%(ANAEXPT)s"; } string year() const { return "%(ANAYEAR)s"; } string %(ANAREFREPO_LOWER)sId() const { return "%(ANAINSPIREID)s"; } string spiresId() const { return "%(ANASPIRESID)s"; } string collider() const { return ""; } string summary() const { return ""; } string description() const { return ""; } string runInfo() const { return ""; } string bibKey() const { return "%(ANABIBKEY)s"; } string bibTeX() const { return "%(ANABIBTEX)s"; } string status() const { return "UNVALIDATED"; } vector<string> authors() const { return vector<string>(); } vector<string> references() const { return vector<string>(); } vector<std::string> todos() const { return vector<string>(); } """ % KEYWORDS del KEYWORDS["ANAREFREPO_LOWER"] else: INLINEMETHODS="" KEYWORDS["INLINEMETHODS"] = INLINEMETHODS ANASRCFILE = os.path.join(ANASRCDIR, ANANAME+".cc") logging.debug("Writing implementation template to %s" % ANASRCFILE) f = open(ANASRCFILE, "w") src = """\ // -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" /// @todo Include more projections as required, e.g. ChargedFinalState, FastJets, ZFinder... namespace Rivet { class %(ANANAME)s : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor %(ANANAME)s() : Analysis("%(ANANAME)s") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { /// @todo Initialise and register projections here /// @todo Book histograms here, e.g.: // _h_XXXX = bookProfile1D(1, 1, 1); // _h_YYYY = bookHistogram1D(2, 1, 1); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); /// @todo Do the event by event analysis here } /// Normalise histograms etc., after the run void finalize() { /// @todo Normalise, scale and otherwise manipulate histograms here // scale(_h_YYYY, crossSection()/sumOfWeights()); # norm to cross section // normalize(_h_YYYY); # normalize to unity } //@} private: // Data members like post-cuts event weight counters go here private: /// @name Histograms //@{ AIDA::IProfile1D *_h_XXXX; AIDA::IHistogram1D *_h_YYYY; //@} %(INLINEMETHODS)s }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(%(ANANAME)s); } """ % KEYWORDS f.write(src) f.close() ANAPLOTFILE = os.path.join(ANAPLOTDIR, ANANAME+".plot") logging.debug("Writing plot template to %s" % ANAPLOTFILE) f = open(ANAPLOTFILE, "w") src = """\ # BEGIN PLOT /%(ANANAME)s/d01-x01-y01 #Title=[Uncomment and insert title for histogram d01-x01-y01 here] #XLabel=[Uncomment and insert x-axis label for histogram d01-x01-y01 here] #YLabel=[Uncomment and insert y-axis label for histogram d01-x01-y01 here] # + any additional plot settings you might like, see make-plots documentation # END PLOT # ... add more histograms as you need them ... """ % KEYWORDS f.write(src) f.close() if opts.INLINE: sys.exit(0) ANAINFOFILE = os.path.join(ANAINFODIR, ANANAME+".info") logging.debug("Writing info template to %s" % ANAINFOFILE) f = open(ANAINFOFILE, "w") src = """\ Name: %(ANANAME)s Year: %(ANAYEAR)s Summary: <Insert short %(ANANAME)s description> Experiment: %(ANAEXPT)s Collider: <Insert %(ANANAME)s collider> %(ANAREFREPO)sID: %(ANAINSPIREID)s Status: UNVALIDATED Authors: - Your Name <your@email.address> #References: # - <Example: Phys.Lett.B639:151-158,2006, Erratum-ibid.B658:285-289,2008> # - <Example: doi:10.1016/j.physletb.2006.04.048> # - <Example: arXiv:hep-ex/0511054 (plus erratum)> RunInfo: <Insert event types (not gen-specific), energy, any kinematic efficiency cut(s) that may be needed; essentially any details needed to set up a generator to reproduce the data.> NumEvents: 1000000 NeedCrossSection: no #Beams: <Insert beam pair(s), e.g. [p-, p+] or [[p-, e-], [p-, e+]]> #Energies: <Insert list of run energies or beam energy pairs in GeV, # e.g. [1960] or [[8.0, 3.5]] or [630, 1800]. Order pairs to match "Beams"> #PtCuts: <Insert list of kinematic pT cuts in GeV, e.g. [0, 20]> #NeedCrossSection: True Description: '<Insert a fairly long description, including what is measured and if possible what it is useful for in terms of MC validation and tuning. Use \LaTeX for maths like $\pT > \unit{50}{\GeV}$. Use single quotes around the block if required (see YAML 1.2 manual)>' BibKey: %(ANABIBKEY)s BibTeX: '%(ANABIBTEX)s' ToDo: - Implement the analysis, test it, remove this ToDo, and mark as VALIDATED :-) """ % KEYWORDS f.write(src) f.close() logging.info("Use e.g. 'rivet-buildplugin Rivet%s.so %s.cc' to compile the plugin" % (ANANAME, ANANAME)) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rivet-1.8.3/bin/rivet-mkhtml������������������������������������������������������������������������0000755�0001750�0001750�00000034206�12116077756�014212� 0����������������������������������������������������������������������������������������������������ustar �sun�����������������������������sun��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env python """\ %prog [options] <aidafile1> [<aidafile2> <aidafile3>...] Make web pages from histogram files written out by Rivet. You can specify multiple Monte Carlo AIDA files to be compared in the same syntax as for compare-histos, i.e. including plotting options. Reference data, analysis metadata, and plot style information should be found automatically (if not, set the RIVET_ANALYSIS_PATH or similar variables appropriately). You can overwrite an existing output directory. """ import sys, os if sys.version_info[:3] < (2,4,0): sys.stderr.write("rivet scripts require Python version >= 2.4.0... exiting\n") sys.exit(1) import traceback try: import rivet except ImportError: traceback.print_exc(file=sys.stderr) sys.stderr.write("rivet is broken... exiting\n") sys.exit(1) import sys, os, glob, shutil from subprocess import Popen, PIPE from optparse import OptionParser parser = OptionParser(usage=__doc__) parser.add_option("-o", "--outputdir", dest="OUTPUTDIR", default="./plots", help="directory for webpage output") parser.add_option("-t", "--title", dest="TITLE", default="Plots from Rivet analyses", help="title to be displayed on the main web page") parser.add_option("-c", "--config", dest="CONFIGFILES", action="append", default=["~/.make-plots"], help="plot config file(s) to be used with compare-histos.") parser.add_option("-s", "--single", dest="SINGLE", action="store_true", default=False, help="display plots on single webpage.") parser.add_option("--no-ratio", dest="SHOW_RATIO", action="store_false", default=True, help="don't draw a ratio plot under each main plot.") parser.add_option("--mc-errs", dest="MC_ERRS", action="store_true", default=False, help="plot error bars.") parser.add_option("--refid", dest="REF_ID", default=None, help="ID of reference data set (file path for non-REF data)") parser.add_option("-n", "--num-threads", metavar="NUMTHREADS", dest="NUMTHREADS", type=int, default=None, help="request make-plots to use a specific number of threads.") parser.add_option("--pdf", dest="VECTORFORMAT", action="store_const", const="PDF", default="PDF", help="use PDF as the vector plot format.") parser.add_option("--ps", dest="VECTORFORMAT", action="store_const", const="PS", default="PDF", help="use PostScript as the vector plot format.") parser.add_option("--booklet", dest="BOOKLET", action="store_true", default=False, help="create booklet (currently only available for PDF with pdftk).") parser.add_option("-i", "--ignore-unvalidated", dest="IGNORE_UNVALIDATED", action="store_true", default=False, help="ignore unvalidated analyses.") parser.add_option("--ignore-missing", dest="IGNORE_MISSING", action="store_true", default=False, help="ignore missing AIDA files.") parser.add_option("-m", "--match", action="append", dest="PATHPATTERNS", help="only write out histograms from analyses whose name matches any of these regexes") parser.add_option("-M", "--unmatch", action="append", dest="PATHUNPATTERNS", help="Exclude histograms whose $path/$name string matches these regexes") parser.add_option("--palatino", dest="OUTPUT_FONT", action="store_const", const="PALATINO", default="PALATINO", help="Use Palatino as font (default).") parser.add_option("--cm", dest="OUTPUT_FONT", action="store_const", const="CM", default="PALATINO", help="Use Computer Modern as font.") parser.add_option("--times", dest="OUTPUT_FONT", action="store_const", const="TIMES", default="PALATINO", help="Use Times as font.") parser.add_option("--minion", dest="OUTPUT_FONT", action="store_const", const="MINION", default="PALATINO", help="Use Adobe Minion Pro as font. Note: You need to set TEXMFHOME first.") parser.add_option("-v", "--verbose", help="Add extra debug messages", dest="VERBOSE", action="store_true", default=False) opts, aidafiles = parser.parse_args() ## Check that there are some arguments! if not aidafiles: print "Error: You need to specify some .aida files to be plotted!" sys.exit(1) ## Make output directory if os.path.exists(opts.OUTPUTDIR) and not os.path.realpath(opts.OUTPUTDIR)==os.getcwd(): import shutil shutil.rmtree(opts.OUTPUTDIR) try: os.makedirs(opts.OUTPUTDIR) except: print "Error: failed to make new directory '%s'" % opts.OUTPUTDIR sys.exit(1) ## Try to load faster but non-standard cElementTree module try: import xml.etree.cElementTree as ET except ImportError: try: import cElementTree as ET except ImportError: try: import xml.etree.ElementTree as ET except: sys.stderr.write("Can't load the ElementTree XML parser: please install it!\n") sys.exit(1) ## Get set of analyses/reffiles involved in the runs analyses = set() blocked_analyses = set() reffiles = list() labels = [] for aidafile in aidafiles: aidafilepath = os.path.abspath(aidafile.split(":")[0]) if not os.access(aidafilepath, os.R_OK): print "Error: cannot read from %s" % aidafilepath if opts.IGNORE_MISSING: continue else: sys.exit(2) try: tree = ET.parse(aidafilepath) except Exception, e: print "Problem parsing AIDA XML file '%s': %s. Skipping this file" % (aidafilepath, e) continue for dps in tree.findall("dataPointSet"): path = dps.get("path") analysis = path[path.rfind("/")+1:] if analysis in analyses.union(blocked_analyses): continue ## If regexes have been provided, only add analyses which match and don't unmatch if opts.PATHPATTERNS: import re matched = False for patt in opts.PATHPATTERNS: if re.search(patt, analysis) is not None: matched = True break if matched and opts.PATHUNPATTERNS: for patt in opts.PATHUNPATTERNS: if re.search(patt, analysis): matched = False break if not matched: blocked_analyses.add(analysis) continue analyses.add(analysis) reffile = rivet.findAnalysisRefFile(analysis+".aida") if reffile and reffile not in reffiles: reffiles.append(reffile) def anasort(name): if name.startswith("MC"): return "0"+name else: return name analyses = sorted(analyses, key=anasort, reverse=True) ## Run compare-histos to get plain .dat files from .aida ## We do this here since it also makes the necessary directories ch_cmd = ["compare-histos"] if opts.MC_ERRS: ch_cmd.append("--mc-errs") if not opts.SHOW_RATIO: ch_cmd.append("--no-ratio") if opts.REF_ID is not None: ch_cmd.append("--refid=%s" % os.path.abspath(opts.REF_ID)) ch_cmd.append("--hier-out") # TODO: Need to be able to override this: provide a --plotinfodir cmd line option? ch_cmd.append("--plotinfodir=../") for af in aidafiles: aidafilepath = os.path.abspath(af.split(":")[0]) if not os.access(aidafilepath, os.R_OK): continue newarg = aidafilepath if ":" in af: for opt in af.split(":")[1:]: newarg += ":%s" % opt # print newarg ch_cmd.append(newarg) for configfile in opts.CONFIGFILES: configfile = os.path.abspath(os.path.expanduser(configfile)) if os.access(configfile, os.R_OK): ch_cmd.append("-c") ch_cmd.append(configfile) # TODO: Pass rivet-mkhtml -m and -M args to compare-histos if opts.VERBOSE: ch_cmd.append("--verbose") print "Calling compare-histos with the following command:" print " ".join(ch_cmd) ## Run compare-histos in a subdir, after fixing any relative paths in Rivet env vars for var in ("RIVET_ANALYSIS_PATH", "RIVET_REF_PATH", "RIVET_INFO_PATH", "RIVET_PLOT_PATH"): if var in os.environ: abspaths = map(os.path.abspath, os.environ[var].split(":")) os.environ[var] = ":".join(abspaths) Popen(ch_cmd, cwd=opts.OUTPUTDIR, stderr=PIPE).wait() ## Write web page containing all (matched) plots ## Make web pages first so that we can load it locally in ## a browser to view the output before all plots are made style = """<style> html { font-family: sans-serif; } img { border: 0; } a { text-decoration: none; font-weight: bold; } </style>""" ## A timestamp HTML fragment to be used on each page: import datetime timestamp = '<p>Generated at %s</p>\n' % datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p") def _htmlify(s): return s.replace("<","<").replace(">",">") index = open(os.path.join(opts.OUTPUTDIR, "index.html"), "w") index.write('<html>\n<head>\n<title>%s\n%s\n' % (opts.TITLE, style)) if opts.BOOKLET and opts.VECTORFORMAT == "PDF": index.write('

%s

\n\n' % opts.TITLE) else: index.write('

%s

\n\n' % opts.TITLE) if opts.SINGLE: ## Write table of contents index.write('
    \n') for analysis in analyses: summary = analysis ana = rivet.AnalysisLoader.getAnalysis(analysis) if ana: summary = "%s (%s)" % (ana.summary(), analysis) if opts.IGNORE_UNVALIDATED and ana.status() != "VALIDATED": continue index.write('
  • %s\n' % (analysis, _htmlify(summary)) ) index.write('
\n') for analysis in analyses: references = [] summary = analysis description = "NONE" if analysis.find("_S")>0: spiresid = analysis[analysis.rfind('_S')+2:len(analysis)] inspireid = "NONE" elif analysis.find("_I")>0: inspireid = analysis[analysis.rfind('_I')+2:len(analysis)] else: inspireid = "NONE" spiresid = "NONE" ana = rivet.AnalysisLoader.getAnalysis(analysis) if ana: if ana.summary() and ana.summary() != "NONE": summary = "%s (%s)" % (ana.summary(), analysis) references = ana.references() description = ana.description() spiresid = ana.spiresId() if opts.IGNORE_UNVALIDATED and ana.status().upper() != "VALIDATED": continue if opts.SINGLE: index.write('\n

%s

\n' % (analysis, _htmlify(summary)) ) else: index.write('\n

%s

\n' % (analysis, _htmlify(summary))) reflist = [] if inspireid and inspireid !="NONE": reflist.append('Spires' % inspireid) elif spiresid and spiresid != "NONE": reflist.append('Spires' % spiresid) reflist += references index.write('

%s

\n' % " | ".join(reflist)) index.write('

%s

\n' % _htmlify(description)) anapath = os.path.join(opts.OUTPUTDIR, analysis) if not opts.SINGLE: if not os.path.exists(anapath): try: os.makedirs(anapath) except: print "Error: failed to make new directory '%s'. Skipping analysis %s" % (anapath, analysis) continue anaindex = open(os.path.join(anapath, "index.html"), 'w') anaindex.write('\n\n%s - %s\n%s\n\n' % (opts.OUTPUTDIR, analysis, style)) anaindex.write('

%s

\n' % analysis) anaindex.write('

Back to index

\n') anaindex.write('

\n %s\n

\n' % _htmlify(description)) else: anaindex = index datfiles = glob.glob("%s/*.dat" % anapath) anaindex.write('
\n') for datfile in sorted(datfiles): obsname = os.path.basename(datfile).replace(".dat", "") pngfile = obsname+".png" vecfile = obsname+"."+opts.VECTORFORMAT.lower() srcfile = obsname+".dat" if opts.SINGLE: pngfile = os.path.join(analysis, pngfile) vecfile = os.path.join(analysis, vecfile) srcfile = os.path.join(analysis, srcfile) anaindex.write('
\n') anaindex.write(' %s:
\n' % (analysis, obsname, srcfile, vecfile) ) anaindex.write(' \n' % (analysis, obsname, vecfile) ) anaindex.write(' \n' % pngfile ) anaindex.write(' \n') anaindex.write('
\n') anaindex.write('
\n') if not opts.SINGLE: anaindex.write('
%s\n
\n' % timestamp) anaindex.close() index.write('
%s\n' % timestamp) index.close() ## Run make-plots on all generated .dat files # sys.exit(0) mp_cmd = ["make-plots"] if opts.NUMTHREADS: mp_cmd.append("--num-threads=%d" % opts.NUMTHREADS) if opts.VECTORFORMAT == "PDF": mp_cmd.append("--pdfpng") elif opts.VECTORFORMAT == "PS": mp_cmd.append("--pspng") if opts.OUTPUT_FONT == "CM": mp_cmd.append("--cm") elif opts.OUTPUT_FONT == "TIMES": mp_cmd.append("--times") elif opts.OUTPUT_FONT == "minion": mp_cmd.append("--minion") datfiles = [] for analysis in analyses: anapath = os.path.join(opts.OUTPUTDIR, analysis) #print anapath anadatfiles = glob.glob("%s/*.dat" % anapath) datfiles += sorted(anadatfiles) if datfiles: mp_cmd += datfiles if opts.VERBOSE: mp_cmd.append("--verbose") print "Calling make-plots with the following options:" print mp_cmd Popen(mp_cmd).wait() if opts.BOOKLET and opts.VECTORFORMAT=="PDF": bookletcmd = ["pdftk"] for analysis in analyses: anapath = os.path.join(opts.OUTPUTDIR, analysis) bookletcmd += sorted(glob.glob("%s/*.pdf" % anapath)) bookletcmd += ["cat", "output", "%s/booklet.pdf" % opts.OUTPUTDIR] print bookletcmd Popen(bookletcmd).wait() rivet-1.8.3/bin/rivet0000755000175000017500000004667712116077756012737 0ustar sunsun#! /usr/bin/env python """\ Run Rivet analyses on inputted events from file or Unix pipe Examples: %prog [options] [ ...] my_generator -o myfifo & \ %prog [options] myfifo agile-runmc -n 100k -o- | %prog [options] ENVIRONMENT: * RIVET_ANALYSIS_PATH: list of paths to be searched for plugin analysis libraries at runtime * RIVET_REF_PATH: list of paths to be searched for reference data files * RIVET_INFO_PATH: list of paths to be searched for analysis metadata files """ import sys if sys.version_info[:3] < (2, 4, 0): print "rivet scripts require Python version >= 2.4.0... exiting" sys.exit(1) import os, time import logging, signal ## Try to rename the process on Linux try: import ctypes libc = ctypes.cdll.LoadLibrary('libc.so.6') libc.prctl(15, 'rivet', 0, 0, 0) except Exception: pass ## Try to use Psyco optimiser try: import psyco psyco.full() except ImportError: pass PROGPATH = sys.argv[0] PROGNAME = os.path.basename(PROGPATH) ## Try to bootstrap the Python path import commands try: modname = sys.modules[__name__].__file__ binpath = os.path.dirname(modname) rivetconfigpath = os.path.join(binpath, "rivet-config") rivetpypath = commands.getoutput(rivetconfigpath + " --pythonpath") sys.path.append(rivetpypath) except: pass ## Try importing rivet try: import rivet rivet.check_python_version() except Exception, e: sys.stderr.write(PROGNAME + " requires the 'rivet' Python module but it cannot be loaded:\n") sys.stderr.write(str(e)+'\n') sys.stderr.write("Try re-running with the -v switch to enable more debugging output \n") sys.exit(1) ## Parse command line options from optparse import OptionParser, OptionGroup parser = OptionParser(usage=__doc__, version="rivet v%s" % rivet.version()) anagroup = OptionGroup(parser, "Analysis handling") anagroup.add_option("-a", "--analysis", dest="ANALYSES", action="append", default=[], metavar="ANA", help="add an analysis to the processing list.") # anagroup.add_option("-A", "--all-analyses", dest="ALL_ANALYSES", action="store_true", # default=False, help="add all analyses to the processing list.") anagroup.add_option("--list-analyses", dest="LIST_ANALYSES", action="store_true", default=False, help="show the list of available analyses' names. With -v, it shows the descriptions, too") anagroup.add_option("--list-used-analyses", action="store_true", dest="LIST_USED_ANALYSES", default=False, help="list the analyses used by this command (after subtraction of inappropriate ones)") anagroup.add_option("--show-analysis", "--show-analyses", dest="SHOW_ANALYSES", action="append", default=[], help="show the details of an analysis") anagroup.add_option("--analysis-path", dest="ANALYSIS_PATH", metavar="PATH", default=None, help="specify the analysis search path (cf. $RIVET_ANALYSIS_PATH).") anagroup.add_option("--analysis-path-append", dest="ANALYSIS_PATH_APPEND", metavar="PATH", default=None, help="append to the analysis search path (cf. $RIVET_ANALYSIS_PATH).") anagroup.add_option("--pwd", dest="ANALYSIS_PATH_PWD", action="store_true", default=False, help="append the current directory (pwd) to the analysis search path (cf. $RIVET_ANALYSIS_PATH).") parser.add_option_group(anagroup) extragroup = OptionGroup(parser, "Extra run settings") extragroup.add_option("-H", "--histo-file", dest="HISTOFILE", default="Rivet.aida", help="specify the output histo file path (default = %default)") extragroup.add_option("-x", "--cross-section", dest="CROSS_SECTION", default=None, metavar="XS", help="specify the signal process cross-section in pb") extragroup.add_option("-n", "--nevts", dest="MAXEVTNUM", type="int", default=None, metavar="NUM", help="restrict the max number of events to read.") extragroup.add_option("--runname", dest="RUN_NAME", default=None, metavar="NAME", help="give an optional run name, to be prepended as a 'top level directory' in histo paths") extragroup.add_option("--ignore-beams", dest="IGNORE_BEAMS", action="store_true", default=False, help="Ignore input event beams when checking analysis compatibility.") parser.add_option_group(extragroup) timinggroup = OptionGroup(parser, "Timeouts and periodic operations") timinggroup.add_option("--event-timeout", dest="EVENT_TIMEOUT", type="int", default=21600, metavar="NSECS", help="max time in whole seconds to wait for an event to be generated from the specified source (default = %default)") timinggroup.add_option("--run-timeout", dest="RUN_TIMEOUT", type="int", default=None, metavar="NSECS", help="max time in whole seconds to wait for the run to finish. This can be useful on batch systems such " "as the LCG Grid where tokens expire on a fixed wall-clock and can render long Rivet runs unable to write " "out the final histogram file (default = unlimited)") timinggroup.add_option("--histo-interval", dest="HISTO_WRITE_INTERVAL", type=int, default=None, help="[experimental!] specify the number of events between histogram file updates. " "Default is to only write out at the end of the run. Note that intermediate histograms will be those " "from the analyze step only: analysis finalizing is currently not executed until the end of the run.") parser.add_option_group(timinggroup) verbgroup = OptionGroup(parser, "Verbosity control") parser.add_option("-l", dest="NATIVE_LOG_STRS", action="append", default=[], help="set a log level in the Rivet library") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option_group(verbgroup) opts, args = parser.parse_args() ## Configure logging logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Control native Rivet library logger for l in opts.NATIVE_LOG_STRS: name, level = None, None try: name, level = l.split("=") except: name = "Rivet" level = l ## Fix name if name != "Rivet" and not name.startswith("Rivet."): name = "Rivet." + name try: ## Get right error type LEVEL = level.upper() if LEVEL == "TRACE": level = rivet.Log.TRACE elif LEVEL == "DEBUG": level = rivet.Log.DEBUG elif LEVEL == "INFO": level = rivet.Log.INFO elif LEVEL == "WARNING" or LEVEL == "WARN": level = rivet.Log.WARN elif LEVEL == "ERROR": level = rivet.Log.ERROR else: level = int(level) logging.debug("Setting log level: %s %d" % (name, level)) rivet.Log.setLogLevel(name, level) except: logging.warning("Couldn't process logging string '%s'" % l) ## Parse supplied cross-section if opts.CROSS_SECTION is not None: xsstr = opts.CROSS_SECTION try: opts.CROSS_SECTION = float(xsstr) except: import re suffmatch = re.search(r"[^\d.]", xsstr) if not suffmatch: raise ValueError("Bad cross-section string: %s" % xsstr) factor = base = None suffstart = suffmatch.start() if suffstart != -1: base = xsstr[:suffstart] suffix = xsstr[suffstart:].lower() if suffix == "mb": factor = 1e+9 elif suffix == "mub": factor = 1e+6 elif suffix == "nb": factor = 1e+3 elif suffix == "pb": factor = 1 elif suffix == "fb": factor = 1e-3 elif suffix == "ab": factor = 1e-6 if factor is None or base is None: raise ValueError("Bad cross-section string: %s" % xsstr) xs = float(base) * factor opts.CROSS_SECTION = xs ## Print the available CLI options! #if opts.LIST_OPTIONS: # for o in parser.option_list: # print o.get_opt_string() # sys.exit(0) ## Set up signal handling RECVD_KILL_SIGNAL = None def handleKillSignal(signum, frame): "Declare us as having been signalled, and return to default handling behaviour" global RECVD_KILL_SIGNAL logging.critical("Signal handler called with signal " + str(signum)) RECVD_KILL_SIGNAL = signum signal.signal(signum, signal.SIG_DFL) ## Signals to handle signal.signal(signal.SIGTERM, handleKillSignal); signal.signal(signal.SIGHUP, handleKillSignal); signal.signal(signal.SIGINT, handleKillSignal); signal.signal(signal.SIGUSR1, handleKillSignal); signal.signal(signal.SIGUSR2, handleKillSignal); try: signal.signal(signal.SIGXCPU, handleKillSignal); except: pass ## Override/modify analysis search path if opts.ANALYSIS_PATH: rivet.setAnalysisLibPaths(opts.ANALYSIS_PATH.split(":")) if opts.ANALYSIS_PATH_APPEND: for ap in opts.ANALYSIS_PATH_APPEND.split(":"): rivet.addAnalysisLibPath(ap) if opts.ANALYSIS_PATH_PWD: rivet.addAnalysisLibPath(".") ## List of analyses all_analyses = rivet.AnalysisLoader.analysisNames() if opts.LIST_ANALYSES: ## Treat args as case-insensitive regexes if present regexes = None if args: import re regexes = [re.compile(arg, re.I) for arg in args] for aname in all_analyses: if not regexes: toshow = True else: toshow = False for regex in regexes: if regex.search(aname): toshow = True break if toshow: msg = aname if opts.LOGLEVEL <= logging.INFO: a = rivet.AnalysisLoader.getAnalysis(aname) msg = "%-25s %s" % (aname, a.summary()) print msg sys.exit(0) ## Show analyses' details if len(opts.SHOW_ANALYSES) > 0: toshow = [] for i, a in enumerate(opts.SHOW_ANALYSES): a_up = a.upper() if a_up in all_analyses and a_up not in toshow: toshow.append(a_up) else: ## Treat as a case-insensitive regex import re regex = re.compile(a, re.I) for ana in all_analyses: if regex.search(ana) and a_up not in toshow: toshow.append(ana) ## Show the matching analyses' details import textwrap for i, name in enumerate(sorted(toshow)): ana = rivet.AnalysisLoader.getAnalysis(name) print "" print name print len(name) * "=" print "" print ana.summary() print "" print "Status: %s" % ana.status() print "" if ana.inspireId(): print "Inspire ID: %s" % ana.inspireId() print "Inspire URL: http://inspire-hep.net/record/%s" % ana.inspireId() # TODO: Need a way to get to HepData from an Inspire record elif ana.spiresId(): print "Spires ID: %s" % ana.spiresId() print "Inspire URL: http://inspire-hep.net/search?p=find+key+%s" % ana.spiresId() print "HepData URL: http://hepdata.cedar.ac.uk/view/irn%s" % ana.spiresId() if ana.experiment(): print "Experiment: %s" % ana.experiment(), if ana.collider(): print "(%s)" % ana.collider() if ana.year(): print "Year of publication: %s" % ana.year() print "Authors:" for a in ana.authors(): print " " + a print "" print "Description:" twrap = textwrap.TextWrapper(width=75, initial_indent=2*" ", subsequent_indent=2*" ") print twrap.fill(ana.description()) print "" if ana.requiredBeams(): def pid_to_str(pid): if pid == 11: return "e-" elif pid == -11: return "e+" elif pid == 2212: return "p+" elif pid == -2212: return "p-" elif pid == 10000: return "*" else: return str(pid) beamstrs = [] for bp in ana.requiredBeams(): beamstrs.append(pid_to_str(bp[0]) + " " + pid_to_str(bp[1])) print "Beams:", ", ".join(beamstrs) if ana.requiredEnergies(): print "Beam energies:", "; ".join(["(%0.1f, %0.1f)" % (epair[0], epair[1]) for epair in ana.requiredEnergies()]), "GeV" else: print "Beam energies: ANY" if ana.runInfo(): print "Run details:" twrap = textwrap.TextWrapper(width=75, initial_indent=2*" ", subsequent_indent=4*" ") for l in ana.runInfo().split("\n"): print twrap.fill(l) if ana.references(): print "" print "References:" for r in ana.references(): url = None if r.startswith("arXiv:"): code = r.split()[0].replace("arXiv:", "") url = "http://arxiv.org/abs/" + code elif r.startswith("doi:"): code = r.replace("doi:", "") url = "http://dx.doi.org/" + code if url is not None: r += " - " + url print " %s" % r if i+1 < len(toshow): print "\n" sys.exit(0) ## Identify HepMC files/streams ## TODO: check readability, deal with stdin if len(args) > 0: HEPMCFILES = args else: HEPMCFILES = ["-"] ## Event number logging def logNEvt(n, starttime, maxevtnum): nevtloglevel = logging.DEBUG if n % 10 == 0: nevtloglevel = logging.DEBUG + 5 if n % 100 == 0: nevtloglevel = logging.INFO if n % 200 == 0: nevtloglevel = logging.INFO + 5 if n % 500 == 0: nevtloglevel = logging.WARNING if n % 1000 == 0: nevtloglevel = logging.WARNING + 5 if n % 10000 == 0: nevtloglevel = logging.CRITICAL timecurrent = time.time() timeelapsed = timecurrent - starttime if maxevtnum is None: logging.log(nevtloglevel, "Event %d (%d s elapsed)" % (n, timeelapsed)) else: timeleft = (maxevtnum-n)*timeelapsed/n eta = time.strftime("%a %b %d %H:%M", time.localtime(timecurrent + timeleft)) logging.log(nevtloglevel, "Event %d (%d s elapsed / %d s left) -> ETA: %s" % (n, timeelapsed, timeleft, eta)) ## Set up analysis handler RUNNAME = opts.RUN_NAME or "" ah = rivet.AnalysisHandler(RUNNAME) ah.setIgnoreBeams(opts.IGNORE_BEAMS) # if opts.ALL_ANALYSES: # opts.ANALYSES = all_analyses for a in opts.ANALYSES: #a_up = a.upper() ## Print warning message and exit if not a valid analysis name if not a in all_analyses: logging.warning("'%s' is not a valid analysis. Available analyses are:" % a) for aa in all_analyses: logging.warning(" %s" % aa) logging.warning("Exiting...") sys.exit(1) logging.debug("Adding analysis '%s'" % a) ah.addAnalysis(a) ## Read and process events run = rivet.Run(ah) if opts.CROSS_SECTION is not None: logging.info("User-supplied cross-section = %e pb" % opts.CROSS_SECTION) run.setCrossSection(opts.CROSS_SECTION) if opts.LIST_USED_ANALYSES is not None: run.setListAnalyses(opts.LIST_USED_ANALYSES) ## Print platform type import platform logging.info("Rivet %s running on machine %s (%s)" % (rivet.version(), platform.node(), platform.machine())) def min_nonnull(a, b): "A version of min which considers None to always be greater than a real number" rtn = min(a, b) if rtn is not None: return rtn if a is not None: return a return b ## Set up an event timeout handler class TimeoutException(Exception): pass if opts.EVENT_TIMEOUT or opts.RUN_TIMEOUT: def evttimeouthandler(signum, frame): logging.warn("It has taken more than %d secs to get an event! Is the input event stream working?" % min_nonnull(opts.EVENT_TIMEOUT, opts.RUN_TIMEOUT)) raise TimeoutException("Event timeout") signal.signal(signal.SIGALRM, evttimeouthandler) ## Init run based on one event hepmcfile = HEPMCFILES[0] ## Apply a file-level weight derived from the filename hepmcfileweight = 1.0 if ":" in hepmcfile: hepmcfile, hepmcfileweight = hepmcfile.rsplit(":", 1) hepmcfileweight = float(hepmcfileweight) try: if opts.EVENT_TIMEOUT or opts.RUN_TIMEOUT: signal.alarm(min_nonnull(opts.EVENT_TIMEOUT, opts.RUN_TIMEOUT)) init_ok = run.init(hepmcfile, hepmcfileweight) signal.alarm(0) if not init_ok: logging.error("Failed to initialise using event file '%s'... exiting" % hepmcfile) sys.exit(2) except TimeoutException, te: logging.error("Timeout in initialisation from event file '%s'... exiting" % hepmcfile) sys.exit(3) ## Event loop evtnum = 0 starttime = time.time() for fileidx, hepmcfile in enumerate(HEPMCFILES): ## Apply a file-level weight derived from the filename hepmcfileweight = 1.0 if ":" in hepmcfile: hepmcfile, hepmcfileweight = hepmcfile.rsplit(":", 1) hepmcfileweight = float(hepmcfileweight) ## Open next HepMC file (NB. this doesn't apply to the first file: it was already used for the run init) if fileidx > 0: run.openFile(hepmcfile, hepmcfileweight) if not run.readEvent(): logging.warning("Could not read events from '%s'" % hepmcfile) continue msg = "Reading events from '%s'" % hepmcfile if hepmcfileweight != 1.0: msg += " (file weight = %e)" % hepmcfileweight logging.info(msg) while opts.MAXEVTNUM is None or evtnum < opts.MAXEVTNUM: evtnum += 1 logNEvt(evtnum, starttime, opts.MAXEVTNUM) ## Process this event processed_ok = run.processEvent() if not processed_ok: logging.warn("Event processing failed for evt #%i!" % evtnum) break ## Set flag to exit event loop if run timeout exceeded if opts.RUN_TIMEOUT and (time.time() - starttime) > opts.RUN_TIMEOUT: logging.warning("Run timeout of %d secs exceeded... exiting gracefully" % opts.RUN_TIMEOUT) RECVD_KILL_SIGNAL = True ## Exit the loop if signalled if RECVD_KILL_SIGNAL is not None: break ## Read next event (with timeout handling if requested) try: if opts.EVENT_TIMEOUT: signal.alarm(opts.EVENT_TIMEOUT) read_ok = run.readEvent() signal.alarm(0) if not read_ok: break except TimeoutException, te: logging.error("Timeout in reading event from '%s'... exiting" % hepmcfile) sys.exit(3) ## Write a histo file snapshot if appropriate if opts.HISTO_WRITE_INTERVAL is not None: if evtnum % opts.HISTO_WRITE_INTERVAL == 0: ah.writeData(opts.HISTOFILE) logging.info("Finished event loop") run.finalize() ## Finalize and write out data file print "Cross-section = %e pb" % ah.crossSection() ah.finalize() ah.writeData(opts.HISTOFILE) rivet-1.8.3/bin/root2flat0000755000175000017500000002001012116077756013467 0ustar sunsun#! /usr/bin/env python """%prog Read in .root files and write out the histograms in FLAT format suitable for make-plots. Use e.g. 'root2flat file1.root -o flathistos' to produce the flat histogram files which need to be converted to AIDA files using Rivet's flat2aida tool Usage: %prog [options] file1.root Use --help to get information for all options. """ import sys if sys.version_info[:3] < (2,4,0): print "rivet scripts require Python version >= 2.4.0... exiting" sys.exit(1) import os, optparse, logging, ROOT ## Parse options parser = optparse.OptionParser(usage = __doc__) parser.add_option("-a", dest="ANALYSIS", default=None, help = "Optionally add analysis name to histogram keys") parser.add_option("-e", dest="ENUM", default=False, action='store_true', help = "Enumerate histos hepdata style") parser.add_option("-f", dest="FILENAME", default=None, help = "Force output of all histos in single file") parser.add_option("-x", dest="XCLUDE", default=None, help = "Exclude histos from conversion based on string pattern") parser.add_option("-o", dest="OUTDIR", default=".", help = "specify directory in which to write out converted files") (opts, args) = parser.parse_args() def readROOT(rootfile): """ This is the main function that opens a ROOT file, browses its contents for histograms and tries to write the converted histos to files. """ global nobs # Open the ROOT file f = ROOT.TFile(rootfile) # Initial browse to see the structure subdirs, histonames, tgraphnames, tcanvases = browse(f) # Keep browsing if there are subdirectories TODO: Make this work for # arbitrarily deep directory structures if len(subdirs) > 0: for sd in subdirs: t_s, t_h = browse(f, sd) histonames.extend(t_h) # This will convert and write the histos for num, histoname in enumerate(histonames): writeHisto(histoname, f.Get(histoname), num+nobs) for num, tgraphname in enumerate(tgraphnames): writeHisto(tgraphname, f.Get(tgraphname), num + len(histonames)+nobs, True) # TCanvas items for num, tc in enumerate(tcanvases): writeHisto(tc[0], tc[-1], num + len(histonames) + len(tgraphnames) + nobs, tc[1]) nobs += len(histonames) nobs += len(tgraphnames) def browse(f, branch=None): """ This function browses a file/branch, trying to find objects that either inherit from TH1 or from TProfile. """ # Prepare return values histos = [] tgraphs = [] subdirs = [] tcanvases = [] # Get Iterator if branch: f.Cd(branch) primary_keys = ROOT.gDirectory.GetListOfKeys() iter_primaries = ROOT.TListIter(primary_keys) if branch: f.Cd('..') # Iterate over iterator for i in xrange(len(primary_keys)): if branch: t_n = branch + '/' + iter_primaries.Next().GetName() else: t_n = iter_primaries.Next().GetName() # Make sure we don't have a NoneType object here if f.Get(t_n): if opts.XCLUDE is not None and opts.XCLUDE in t_n: continue # Check if the curent object is a directory if type(f.Get(t_n)) == ROOT.TDirectoryFile: subdirs.append(t_n) # Check if the curent object is a histogram elif f.Get(t_n).InheritsFrom("TH1") or f.Get(t_n).InheritsFrom("TProfile"): histos.append(t_n) elif f.Get(t_n).InheritsFrom("TGraphAsymmErrors") or f.Get(t_n).InheritsFrom("TGraphErrors"): tgraphs.append(t_n) # Also support graphs, histos stored in TCanvases elif f.Get(t_n).InheritsFrom("TCanvas"): for ci in f.Get(t_n).GetListOfPrimitives(): if ci.InheritsFrom("TH1") or ci.InheritsFrom("TProfile"): tcanvases.append((t_n,False,ci)) elif ci.InheritsFrom("TGraphAsymmErrors") or ci.InheritsFrom("TGraphErrors"): tcanvases.append((t_n,True,ci)) return subdirs, histos, tgraphs, tcanvases def convertHisto(R_histo): """ This function reads a single ROOT histo and converts it into the FLAT format suitable for plotting with make-plots. """ title = R_histo.GetTitle().replace("#","\\") xtitle= R_histo.GetXaxis().GetTitle().replace("#","\\") ytitle= R_histo.GetYaxis().GetTitle().replace("#","\\") bins = getBinsFromTH1F(R_histo) for bin in bins: try: binstr = "" for key in ["xlow", "xhigh", "y", "y_err_low", "y_err_high"]: binstr += "%s: %e " % (key, bin[key]) logging.info(binstr) except: pass return title, xtitle, ytitle, bins def convertTGraph(TGraph): title = TGraph.GetTitle().replace("#","\\") xtitle= TGraph.GetXaxis().GetTitle().replace("#","\\") ytitle= TGraph.GetYaxis().GetTitle().replace("#","\\") bins = getBinsFromTGraph(TGraph) return title, xtitle, ytitle, bins def getBinsFromTH1F(R_histo): """ A little helper function that returns a list of bin-dictionaries). """ allbins=[] for ii in xrange(R_histo.GetNbinsX()): i = ii + 1 xlow = R_histo.GetBinLowEdge(i) xhigh = xlow + R_histo.GetBinWidth(i) y = R_histo.GetBinContent(i) y_err = R_histo.GetBinError(i) bin = {"xlow":xlow, "xhigh":xhigh, "y":y, "y_err_low":y_err, "y_err_high":y_err} allbins.append(bin) return allbins def getBinsFromTGraph(TGraph): allbins=[] X = TGraph.GetX() Y = TGraph.GetY() for ii in xrange(TGraph.GetN()): i = ii #+ 1 xlow = X[i] - TGraph.GetErrorXlow(i) xhigh = X[i] + TGraph.GetErrorXhigh(i) y = Y[i] y_err_low = TGraph.GetErrorYlow(i) y_err_high = TGraph.GetErrorYhigh(i) bin = {"xlow":xlow, "xhigh":xhigh, "y":y, "y_err_low":y_err_low, "y_err_high":y_err_high} allbins.append(bin) return allbins def writeHisto(name, R_histo, rivetid, tgraph=False): """ This writes the histogram into a single file, ready to plot with make-plots. """ if tgraph: title, xlabel, ylabel, bins = convertTGraph(R_histo) else: title, xlabel, ylabel, bins = convertHisto(R_histo) head = "# BEGIN PLOT\nTitle=%s\nLegend=1\nLogY=1\nDrawOnly=%s\n" % (title, name) head += "XLabel=%s\nYLabel=%s\n# END PLOT\n" % (xlabel, ylabel) if opts.ANALYSIS and opts.ENUM: name = os.path.join(opts.ANALYSIS, "d"+str(rivetid).zfill(2)+"-x01-y01") elif opts.ANALYSIS and not opts.ENUM: name = os.path.join(opts.ANALYSIS, name) histo = getFlatHisto(bins, name, title) flatname = name.replace("/","_") + ".dat" if flatname.startswith("_"): flatname = flatname[1:] flatfile = os.path.join(opts.OUTDIR, flatname) if not opts.FILENAME: f = open(flatfile, "w") else: global nobs if os.path.exists(opts.FILENAME) and rivetid == 1: print "Error, outputfile '%s' exists! Exiting..."%opts.FILENAME sys.exit(1) else: f = open(opts.FILENAME, "a") f.write(head) f.write("\n") f.write(histo) f.close() def getFlatHisto(bins, name, title): """ This returns a histo in the FLAT format. """ histo= "# BEGIN HISTOGRAM %s\n" % name histo += "LineColor=black\n" histo += "ErrorBars=1\n" histo += "PolyMarker=*\n" histo += "Title=%s\n" % title for bin in bins: histo += "%.8e\t%.8e\t%.8e\t%.8e\t%.8e\n" % (bin["xlow"], bin["xhigh"], bin["y"], bin["y_err_low"], bin["y_err_high"]) histo += "# END HISTOGRAM\n\n" return histo if __name__ == "__main__": nobs = 1 for infile in args: if not os.path.exists(opts.OUTDIR): os.mkdir(opts.OUTDIR) readROOT(infile) dest = opts.OUTDIR if opts.FILENAME: dest=opts.FILENAME print "Done. Written all converted histos to %s" % dest rivet-1.8.3/bin/compare-histos0000755000175000017500000006000112116077756014514 0ustar sunsun#! /usr/bin/env python """\ %prog - generate comparison plots USAGE: %prog [options] aidafile1[:'PlotOption1=Value':'PlotOption2=Value'] [path/to/aidafile2 ...] where the plot options are described in the make-plots manual in the HISTOGRAM section. TODO: * two ref datas shouldn't be possible... but it does happen! * regex selector * ask/force overwrite modes """ import sys if sys.version_info[:3] < (2, 4, 0): print "rivet scripts require Python version >= 2.4.0... exiting" sys.exit(1) def sanitiseString(s): #s = s.replace('_','\\_') #s = s.replace('^','\\^{}') #s = s.replace('$','\\$') s = s.replace('#','\\#') s = s.replace('%','\\%') return s from lighthisto import Histo, PlotParser ## Try to load faster but non-standard cElementTree module try: import xml.etree.cElementTree as ET except ImportError: try: import cElementTree as ET except ImportError: try: import xml.etree.ElementTree as ET except: sys.stderr.write("Can't load the ElementTree XML parser: please install it!\n") sys.exit(1) ## Function to make output dirs def mkoutdir(outdir): if not os.path.exists(outdir): try: os.makedirs(outdir) except: msg = "Can't make output directory '%s'" % outdir logging.error(msg) raise Exception(msg) if not os.access(outdir, os.W_OK): msg = "Can't write to output directory '%s'" % outdir logging.error(msg) raise Exception(msg) class AIDAreadException(Exception): pass def getHistos(aidafile): '''Get a dictionary of histograms indexed by name.''' if not re.match(r'.*\.aida$', aidafile): logging.error("Error: input file '%s' is not an AIDA file" % aidafile) raise AIDAreadException aidafilepath = os.path.abspath(aidafile) if not os.access(aidafilepath, os.R_OK): logging.error("Error: cannot read from %s" % aidafile) raise AIDAreadException histos, titles, xlabels, ylabels = {}, {}, {}, {} try: tree = ET.parse(aidafilepath) except: logging.error("Error: Cannot parse input file '%s' as AIDA file" % aidafile) raise AIDAreadException for dps in tree.findall("dataPointSet"): ## Get this histogram's path name dpsname = os.path.join(dps.get("path"), dps.get("name")) h = Histo.fromDPS(dps) ## Is it a data histo? h.isdata = dpsname.upper().startswith("/REF") if h.isdata: dpsname = dpsname.replace("/REF", "") if not titles.has_key(dpsname): titles[dpsname] = h.title xlabels[dpsname] = h.xlabel ylabels[dpsname] = h.ylabel else: if dpsname.count('/') > 2: dpsname = '/' + dpsname.split('/', 2)[-1] titles[dpsname] = h.title xlabels[dpsname] = h.xlabel ylabels[dpsname] = h.ylabel h.expt = dpsname.split("_")[0][1:] ## Hard-coded cosmetic handling for the D0 experiment name! if h.expt == "D0": h.expt = "D\O{}" histos[dpsname] = h return histos, titles, xlabels, ylabels def getCommandLineOptions(): ## Parse command line options from optparse import OptionParser, OptionGroup parser = OptionParser(usage=__doc__) parser.add_option("-R", "--rivet-refs", dest="RIVETREFS", action="store_true", default=True, help="use Rivet reference data files (default)") parser.add_option("--no-rivet-refs", dest="RIVETREFS", action="store_false", default=True, help="don't use Rivet reference data files") parser.add_option("-o", "--outdir", dest="OUTDIR", default=".", help="write data files into this directory") parser.add_option("--hier-out", action="store_true", dest="HIER_OUTPUT", default=False, help="write output dat files into a directory hierarchy which matches the analysis paths") parser.add_option("--plotinfodir", dest="PLOTINFODIR", action="append", default=["."], help="directory which may contain plot header information (in addition " "to standard Rivet search paths)") parser.add_option("--no-rmgapbins", dest="RMBINS", action="store_false", default=True, help="disable attempting to remove 'gap' bins from MC histos when they " "don't appear in the ref file") stygroup = OptionGroup(parser, "Plot style") stygroup.add_option("--refid", dest="REF_ID", default="REF", help="ID of reference data set (file path for non-REF data)") stygroup.add_option("--linear", action="store_true", dest="LINEAR", default=False, help="plot with linear scale") stygroup.add_option("--logarithmic", action="store_false", dest="LINEAR", default=False, help="plot with logarithmic scale (default behaviour)") stygroup.add_option("--mc-errs", action="store_true", dest="MC_ERRS", default=False, help="show vertical error bars on the MC lines") stygroup.add_option("--no-ratio", action="store_true", dest="NORATIO", default=False, help="disable the ratio plot") stygroup.add_option("--rel-ratio", action="store_true", dest="RATIO_DEVIATION", default=False, help="show the ratio plots scaled to the ref error") stygroup.add_option("--abs-ratio", action="store_false", dest="RATIO_DEVIATION", default=False, help="show the ratio plots with an absolute scale") stygroup.add_option("--no-plottitle", action="store_true", dest="NOPLOTTITLE", default=False, help="don't show the plot title on the plot " "(useful when the plot description should only be given in a caption)") stygroup.add_option("--style", dest="STYLE", default="default", help="change plotting style: default|bw|talk") stygroup.add_option("-c", "--config", dest="CONFIGFILES", action="append", default=["~/.make-plots"], help="additional plot config file(s). Settings will be included in the output configuration.") parser.add_option_group(stygroup) selgroup = OptionGroup(parser, "Selective plotting") selgroup.add_option("--show-single", dest="SHOW_SINGLE", choices=("no", "ref", "mc", "all"), default="mc", help="control if a plot file is made if there is only one dataset to be plotted " "[default=%default]. If the value is 'no', single plots are always skipped, for 'ref' and 'mc', " "the plot will be written only if the single plot is a reference plot or an MC " "plot respectively, and 'all' will always create single plot files.\n The 'ref' and 'all' values " "should be used with great care, as they will also write out plot files for all reference " "histograms without MC traces: combined with the -R/--rivet-refs flag, this is a great way to " "write out several thousand irrelevant reference data histograms!") selgroup.add_option("--show-mc-only", "--all", action="store_true", dest="SHOW_IF_MC_ONLY", default=False, help="make a plot file even if there is only one dataset to be plotted and " "it is an MC one. Deprecated and will be removed: use --show-single instead, which overrides this.") # selgroup.add_option("-l", "--histogram-list", dest="HISTOGRAMLIST", # default=None, help="specify a file containing a list of histograms to plot, in the format " # "/ANALYSIS_ID/histoname, one per line, e.g. '/DELPHI_1996_S3430090/d01-x01-y01'.") selgroup.add_option("-m", "--match", action="append", help="Only write out histograms whose $path/$name string matches these regexes. The argument " "may also be a text file.", dest="PATHPATTERNS") selgroup.add_option("-M", "--unmatch", action="append", help="Exclude histograms whose $path/$name string matches these regexes", dest="PATHUNPATTERNS") parser.add_option_group(selgroup) verbgrp = OptionGroup(parser, "Verbosity control") verbgrp.add_option("-q", "--quiet", help="Suppress normal messages", dest="LOGLEVEL", action="store_const", default=logging.INFO, const=logging.WARNING) verbgrp.add_option("-v", "--verbose", help="Add extra debug messages", dest="LOGLEVEL", action="store_const", default=logging.INFO, const=logging.DEBUG) parser.add_option_group(verbgrp) return parser ################################################################## if __name__ == "__main__": import os, re, logging PROGPATH = sys.argv[0] PROGNAME = os.path.basename(PROGPATH) ## Try to rename the process on Linux try: import ctypes libc = ctypes.cdll.LoadLibrary('libc.so.6') libc.prctl(15, 'compare-histos', 0, 0, 0) except Exception: pass ## Try to use Psyco optimiser try: import psyco psyco.full() except ImportError: pass ## Get Rivet data dir rivet_data_dirs = None try: import rivet rivet_data_dirs = rivet.getAnalysisRefPaths() except Exception, e: sys.stderr.write(PROGNAME + " requires the 'rivet' Python module\n") logging.debug(str(e)) sys.exit(1) parser = getCommandLineOptions() opts, args = parser.parse_args() ## Initialise regex list variables import re if opts.PATHPATTERNS is None: opts.PATHPATTERNS = [] # See if a pattern option is an observable file and append its contents to # the pattern list import os for m in opts.PATHPATTERNS: if os.path.exists(m): f=open(m, "r") opts.PATHPATTERNS.extend([line.strip() for line in f if not line.startswith("#")]) f.close() opts.PATHPATTERNS = [re.compile(r) for r in opts.PATHPATTERNS] if opts.PATHUNPATTERNS is None: opts.PATHUNPATTERNS = [] opts.PATHUNPATTERNS = [re.compile(r) for r in opts.PATHUNPATTERNS] ## Work out the implications of the SHOW_SINGLE option opts.SHOW_IF_MC_ONLY = False opts.SHOW_IF_REF_ONLY = False if opts.SHOW_SINGLE in ("all", "mc"): opts.SHOW_IF_MC_ONLY = True if opts.SHOW_SINGLE in ("all", "ref"): opts.SHOW_IF_REF_ONLY = True ## Add standard locations and the input files' dirs to the PLOTINFO search paths opts.PLOTINFODIR += rivet.getAnalysisPlotPaths() for a in args: adir = os.path.abspath(os.path.split(a)[0]) if not adir in opts.PLOTINFODIR: opts.PLOTINFODIR.append(adir) ## Configure logging logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Line styles HISTSTYLES = '' PLOTSTYLES = '' COLORS = ('red', 'blue', '{[rgb]{0.12,0.57,0.14}}', 'magenta') LINESTYLES = ('solid', 'dashed', 'dashdotted', 'dotted') if opts.MC_ERRS: ## If using MC errors, dashed lines often aren't visible, so we put them ## to the back of the style list LINESTYLES = ('solid', 'dotted', 'dashdotted', 'dashed') STYLES = [] for ls in LINESTYLES: for c in COLORS: STYLES.append( (c, ls) ) if opts.STYLE == 'talk': PLOTSTYLES += 'PlotSize=8,6\n' HISTSTYLES += 'LineWidth=1pt\n' elif opts.STYLE == 'bw': PLOTSTYLES += 'RatioPlotErrorBandColor=black!10\n' COLORS = ('black!90', 'black!50', 'black!30') STYLES = [] for c in COLORS: for ls in LINESTYLES: STYLES.append( (c, ls) ) ## Get file names and labels FILES = [] REFFILES = [] FILEOPTIONS = {} if opts.RIVETREFS and rivet_data_dirs: for d in rivet_data_dirs: import glob REFFILES += glob.glob(os.path.join(d, "*.aida")) for a in args: asplit = a.split(":") path = asplit[0] FILES.append(path) if len(asplit)>1: FILEOPTIONS[path] = [] for i in xrange(1, len(asplit)): ## Add "Title" if there is no = sign before math mode if not "=" in asplit[i] or ("$" in asplit[i] and asplit[i].index("$") < asplit[i].index("=")): asplit[i] = "Title=%s" % asplit[i] FILEOPTIONS[path].append(asplit[i]) ## Ignore duplicates REFFILES = list(set(REFFILES)) ## Check that the requested files are sensible if (len(FILES) < 1): logging.error(parser.get_usage()) exit(2) ## Handle a request for a reference dataset other than REF if opts.REF_ID != "REF": if not os.access(os.path.abspath(opts.REF_ID), os.R_OK): logging.error("Error: cannot read reference file %s" % opts.REF_ID) sys.exit(2) ## Read histo data from files into data structures HISTOS = {} TITLES = {} XLABELS = {} YLABELS = {} LABELS = {} NAMES = set() MCNAMES = set() for f in FILES+REFFILES: HISTOS[f] = {} LABELS[f] = {} for f in FILES+REFFILES: try: histos, titles, xlabels, ylabels = getHistos(f) except AIDAreadException: continue for n, h in histos.iteritems(): if h.isdata: l = "data" if h.expt: l = "%s data" % h.expt LABELS[f][n] = l else: tmp = os.path.basename(f) tmp = re.sub(r'(.*)\.aida$', r'\1', tmp) LABELS[f][n] = "MC (%s)" % tmp HISTOS[f][n] = h NAMES.add(n) if not h.isdata: MCNAMES.add(n) for n, t in titles.iteritems(): TITLES[n] = t for n, t in xlabels.iteritems(): XLABELS[n] = t for n, t in ylabels.iteritems(): YLABELS[n] = t # ## Choose histos - use all histos with MC data, or restrict with a list read from file # if opts.HISTOGRAMLIST is not None: # newnames = [] # try: # f = open(opts.HISTOGRAMLIST, 'r') # except: # logging.error("Cannot open histo list file %s" % opts.HISTOGRAMLIST) # exit(2) # hnames = set() # for line in f: # stripped = line.strip() # if len(stripped) == 0 or stripped.startswith("#"): # continue # hnames.add(stripped.split()[0]) # f.close() # NAMES = NAMES.intersection(hnames) # MCNAMES = MCNAMES.intersection(hnames) ## Use regex matching to reduce the number of histos acceptednames = set() for path in NAMES.union(MCNAMES): useThis = True if opts.PATHPATTERNS: useThis = False for regex in opts.PATHPATTERNS: if regex.search(path): useThis = True break if useThis and opts.PATHUNPATTERNS: for regex in opts.PATHUNPATTERNS: if regex.search(path): useThis = False break if useThis: acceptednames.add(path) NAMES = NAMES.intersection(acceptednames) MCNAMES = MCNAMES.intersection(acceptednames) ## Pre-emptively reduce number of files to iterate through ## (assuming, reasonably, that there is only one ref file per histo) activenames = NAMES if not opts.SHOW_IF_REF_ONLY: activenames = MCNAMES ## Write out histos num_written = 0 plotparser = PlotParser(opts.PLOTINFODIR, opts.CONFIGFILES) for name in sorted(activenames): logging.debug("Writing histos for plot '%s'" % name) ## Determine the title try: title = TITLES[name] except: title = name title = sanitiseString(title) xlabel = XLABELS[name] ylabel = YLABELS[name] ## Identify contributing data files for this histo activemcfiles = [] activereffiles = [] for f in REFFILES: if HISTOS.has_key(f): d = HISTOS[f] if d.has_key(name): if d[name].isdata: activereffiles.append(f) for f in FILES: if HISTOS.has_key(f): d = HISTOS[f] if d.has_key(name): if d[name].isdata: activereffiles.append(f) else: activemcfiles.append(f) activefiles = activereffiles + activemcfiles #print activereffiles #print activemcfiles #print activefiles if len(activefiles) == 0: logging.warning("Something's wrong... somehow there's no data for histogram '%s'!" % name) continue if len(activefiles) < 2: if len(activereffiles) == 0 and not opts.SHOW_IF_MC_ONLY: if not opts.RIVETREFS: logging.warning("Skipping histo '%s' since only one (MC) plot is present" % name) continue if len(activemcfiles) == 0 and not opts.SHOW_IF_REF_ONLY: if not opts.RIVETREFS: logging.warning("Skipping histo '%s' since only one (reference) plot is present" % name) continue ## Identify reference file for this histo ref = opts.REF_ID if ref == "REF" and activereffiles: ref = activereffiles[0] if not ref in activefiles: ref = activefiles[0] ## Header try: headers = plotparser.getHeaders(name) except ValueError, err: logging.debug("Could not get plot headers: %s" % err) headers = {} is2dim = False if HISTOS[activefiles[0]][name].is2dim(): is2dim = True if is2dim and len(activefiles)>1: logging.warning("More than one histogram file for 2-dim histogram '%s', only using first file" % name) activefiles = [activefiles[0]] drawonlystr = "" for hfile in activefiles: drawonlystr += hfile.replace(' ','_') + HISTOS[hfile][name].fullPath().replace(' ','_') + " " paramdefaults = {} if not is2dim: paramdefaults = {"Title" : title, "XLabel" : xlabel, "YLabel" : ylabel, "Legend" : "1", "LogY" : "%d" % int((len(HISTOS[ref][name].getBins()) > 1) and not opts.LINEAR), "DrawOnly" : drawonlystr, "RatioPlot" : "%d" % int(not opts.NORATIO), "XTwosidedTicks" : "1", "YTwosidedTicks" : "1", "RatioPlotReference" : "%s%s" % (ref.replace(' ','_'), HISTOS[ref][name].fullPath().replace(' ','_'))} else: paramdefaults = {"Title" : title, "XLabel" : xlabel, "YLabel" : ylabel, "Legend" : "1", "XTwosidedTicks" : "1", "YTwosidedTicks" : "1"} if opts.RATIO_DEVIATION: paramdefaults["RatioPlotMode"] = "deviation" ## Behaviour changes if "ref" data is just another MC file if not HISTOS[ref][name].isdata: ## Don't attempt to remove "gap" bins opts.RMBINS = False ## Different ratio plot label (not MC/Data) paramdefaults["RatioPlotYLabel"] = "Ratio" if opts.RATIO_DEVIATION: paramdefaults["RatioPlotYLabel"] = "Deviation" headstr = "# BEGIN PLOT\n" headstr += PLOTSTYLES for param, default in paramdefaults.iteritems(): if param not in headers: headers[param] = default for key, val in headers.iteritems(): if key != "Title" or not opts.NOPLOTTITLE: directive = "%s=%s\n" % (key, val) headstr += directive headstr += "# END PLOT\n" ## Special try: special = plotparser.getSpecial(name) except ValueError, err: logging.error("Could not get histo specials: %s" % err) special = {} if special: headstr += "\n" headstr += "# BEGIN SPECIAL %s\n" % name headstr += special headstr += "# END SPECIAL\n" ## Write histos try: histopts = plotparser.getHistogramOptions(name) except ValueError, err: logging.error("Could not get histo options: %s" % err) histopts = {} histstrs = [] i = 0 # logging.debug("Active files: %s" % activefiles) for hfile in activefiles: histstr = '# BEGIN HISTOGRAM %s%s\n' % (hfile.replace(' ','_'), HISTOS[hfile][name].fullPath().replace(' ','_')) if HISTOS[hfile][name].isdata: histstr += HISTSTYLES histstr += "ErrorBars=1\n" histstr += "PolyMarker=*\n" histstr += "Title=%s\n" % LABELS[hfile][name] else: histstr += HISTSTYLES color, style = STYLES[i % len(STYLES)] if opts.MC_ERRS: histstr += "ErrorBars=1\n" if not is2dim: histstr += 'LineColor=%s\n' % color histstr += 'LineStyle=%s\n' % style else: histstr += 'LineStyle=none\n' histstr += 'LineWidth=0pt\n' histstr += 'Title=%s\n' % LABELS[hfile][name] for key, val in histopts.iteritems(): #if key == 'ErrorBars' and opts.MC_ERRS: # continue histstr += "%s=%s\n" % (key, val) i += 1 if hfile in FILEOPTIONS: for option in FILEOPTIONS[hfile]: histstr += '%s\n' % option def eq(a, b): if a == 0 and b == 0: return True return abs((b-a)/(b+a)) < 10e-3 numskipped = 0 #print hfile, name, HISTOS[hfile][name].numBins(), HISTOS[ref][name].numBins() for ibin, bin in enumerate(HISTOS[hfile][name].getBins()): ## Skip writing this MC bin if the bin edges don't match, and the MC histo has too many bins if opts.RMBINS: xmin, xmax = bin.getXRange() #print HISTOS[hfile][name].numBins(), HISTOS[ref][name].numBins() if hfile != ref and HISTOS[hfile][name].numBins() > HISTOS[ref][name].numBins(): rxmin, rxmax = HISTOS[ref][name].getBin(ibin-numskipped).getXRange() if not eq(rxmin, xmin) or not eq(rxmax, xmax): numskipped += 1 #print numskipped, (HISTOS[hfile][name].numBins() - HISTOS[ref][name].numBins()) assert(numskipped <= abs(HISTOS[hfile][name].numBins() - HISTOS[ref][name].numBins())) continue histstr += '%s\n' % (bin.asFlat()) histstr += "# END HISTOGRAM\n" histstrs.append(histstr) ## Choose output file name and dir if opts.HIER_OUTPUT: outdir = os.path.dirname(os.path.join(opts.OUTDIR, name[1:])) outfilename = '%s.dat' % os.path.basename(name) else: outdir = opts.OUTDIR outfilename = '%s.dat' % name.replace('/', "_")[1:] ## Write file mkoutdir(outdir) outfilepath = os.path.join(outdir, outfilename) logging.debug("Writing histo '%s' to %s" % (name, outfilepath)) f = open(outfilepath, 'w') f.write(headstr + "\n" + "\n".join(histstrs)) f.close() num_written += 1 logging.info("Wrote %d histo files" % num_written) rivet-1.8.3/bin/rivet-buildplugin.in0000644000175000017500000000717212116077756015640 0ustar sunsun#!/usr/bin/env bash ## -*- sh -*- ## @configure_input@ ## Print help PROG=$(basename $0) tmp=$(echo $* | egrep -- '--\|-\') if test $# -lt 1 || test -n "$tmp"; then echo "$PROG: compilation helper for Rivet analysis plugins" echo echo "Usage: $PROG [] [ [compiler_flags] ...]" echo echo " can be a path, provided the filename is of the form 'Rivet*.so'" echo "If is not specified, the default name is 'RivetAnalysis.so'." echo echo "To make special build variations you can add appropriate compiler flags" echo "to the arguments and these will be passed directly to the compiler. For" echo "example, for a debug build of your plugin library, add '-g', and for a" echo "32 bit build on a 64 bit system add '-m32'." echo echo "Options:" echo " -h | --help: display this help message" echo " --with-root: add ROOT link options (requires root-config on system)" echo echo "TODO:" echo " * is there a GCC option to parallelise the single-command compilation?" test -n "$tmp" exit $? fi ## Work out shared library build flags by platform shared_flags= SWVERS=$(which sw_vers 2> /dev/null) if test "$SWVERS" && test -x "$SWVERS"; then ## Mac OS X shared_flags="-undefined dynamic_lookup -bundle" else ## Unix shared_flags="-shared -fPIC" fi ## Get Rivet system C++ compiler (fall back to $CXX and then g++ if needed) mycxx=g++ rivetcxx=$(which "@CXX@" 2> /dev/null) abscxx=$(which "$CXX" 2> /dev/null) if [[ -x "$rivetcxx" ]]; then mycxx="@CXX@" elif [[ -x "$abscxx" ]]; then mycxx=$CXX fi ## Get Rivet system C++ compiler flags mycxxflags="" if [[ -n "@AM_CXXFLAGS@" ]]; then mycxxflags="@AM_CXXFLAGS@" fi if [[ -n "@CXXFLAGS@" ]]; then mycxxflags="$mycxxflags @CXXFLAGS@" fi ## Get Rivet system C preprocessor flags (duplicating that in rivet-config.in) mycppflags="" prefix="@prefix@" irivet="@includedir@" test -n "$irivet" && mycppflags="$mycppflags -I${irivet}" ihepmc="@HEPMCINCPATH@" test -n "$ihepmc" && mycppflags="$mycppflags -I${ihepmc}" ifastjet="@FASTJETINCPATH@" test -n "$ifastjet" && mycppflags="$mycppflags -I${ifastjet}" igsl="@GSLINCPATH@" test -n "$igsl" && mycppflags="$mycppflags -I${igsl}" iboost="@BOOSTINCPATH@" test -n "$iboost" && mycppflags="$mycppflags -I${iboost}" ## Get Rivet system linker flags (duplicating that in rivet-config.in) myldflags="" lrivet="@libdir@" test -n "$lrivet" && myldflags="$mycppflags -L${lrivet}" lhepmc="@HEPMCLIBPATH@" test -n "$lhepmc" && myldflags="$mycppflags -L${lhepmc}" lfastjet="@FASTJETLIBPATH@" test -n "$lfastjet" && myldflags="$mycppflags -L${lfastjet}" ## Link against ROOT if requested with_root=$(echo $* | egrep -- '--\') # echo $with_root tmp=${@//--with-root/} set $tmp ## Get and check the library name libname=$1 match1=$(basename "$libname" | egrep '^.*\.so') match2=$(basename "$libname" | egrep '^Rivet.*\.so') if test -n "$match1"; then if test -z "$match2"; then echo "Library name '$libname' does not have the required 'Rivet*.so' name pattern" 1>&2 exit 1 fi ## If we're using the first arg as the library name, shift it off the positional list shift else echo "Using default library name 'RivetAnalysis.so'" libname="RivetAnalysis.so" fi ## Get the source files (and more flags) sources_and_flags="$@" if [[ -n $with_root ]]; then root_flags=$(root-config --libs --cflags 2> /dev/null) # echo $root_flags sources_and_flags="$root_flags $sources_and_flags" fi ## Build cmd="$mycxx -o \"$libname\" $shared_flags $mycppflags $mycxxflags $myldflags $sources_and_flags" echo $cmd eval $cmd rivet-1.8.3/bin/rivet-mergeruns0000755000175000017500000010337012116077756014724 0ustar sunsun#! /usr/bin/env python """%prog Script for merging parts of multiple histo files made with different run params (kinematic pT cuts and energies) into one histo file for plotting or further analysis. TODO: * take merge specs from a conf file instead of hard-coding * generalise to more generic merge ranges (i.e. not just sqrts & pT) * improve cmd line interface * rationalise all histogramming formats... remove AIDA! * use lighthisto (then YODA) Usage example: $ uemerge hwpp/hpp-1800-{030.aida:1800:30,090.aida:1800:90} > hpp-hists.dat $ flat2aida hpp-hists.dat $ mkdir plots && cd plots $ compare_histos.py ../ref04.aida ../hpp-hists.aida $ make_plot.py --pdf *.dat """ import sys if sys.version_info[:3] < (2,4,0): print "rivet scripts require Python version >= 2.4.0... exiting" sys.exit(1) import os, copy, re from math import sqrt def mean(*args): total, num = 0, 0 for a in args: if a is not None: total += a num += 1 return total / float(num) ## TODO: replace with lighthisto class Histo: def __init__(self): self.clear() def clear(self): self._bins = [] self.path = None self.name = None self.title = None self.xtitle = None self.ytitle = None def __cmp__(self, other): """Sort by $path/$name string""" return self.fullPath() > other.fullPath() def __str__(self): out = "Histogram '%s' with %d bins\n" % (self.fullPath(), self.numBins()) if self.title: out += "Title: %s\n" % self.title if self.xtitle: out += "XLabel: %s\n" % self.xtitle if self.ytitle: out += "YLabel: %s\n" % self.ytitle out += "\n".join([str(b) for b in self.getBins()]) return out def fullPath(self): return os.path.join(self.path, self.name) def asFlat(self): #global headerprefix headerprefix = "" global opts out = "# BEGIN HISTOGRAM %s\n" % self.fullPath() out += headerprefix + "AidaPath=%s\n" % self.fullPath() if self.title: out += headerprefix + "Title=%s\n" % self.title if self.xtitle: out += headerprefix + "XLabel=%s\n" % self.xtitle if self.ytitle: out += headerprefix + "YLabel=%s\n" % self.ytitle try: out += "## Area: %s\n" % self.area() except: out += "## Area: UNKNOWN (invalid bin details)" out += "## Num bins: %d\n" % self.numBins() # if opts.GNUPLOT: # out += "## xval \tyval \txlow \txhigh \tylow \tyhigh\n" # else: #out += "## xlow \txhigh \tyval \tyerrminus\tyerrplus\n" out += "\n".join([b.asFlat() for b in self.getBins()]) out += "\n# END HISTOGRAM" return out def numBins(self): return len(self._bins) def getBins(self): return sorted(self._bins) def setBins(self, bins): self._bins = bins return self def setBin(self, index, bin): self._bins[index] = bin return self def addBin(self, bin): self._bins.append(bin) return self def getBin(self, index): self._bins.sort() return self.getBins()[index] bins = property(getBins, setBins) def area(self): return sum([bin.area() for bin in self.bins]) def __iter__(self): return iter(self.getBins()) def __len__(self): return len(self._bins) def __getitem__(self, index): return self.getBin(index) ## TODO: replace with lighthisto class Bin: """A simple container for a binned value with an error.""" def __init__(self, xlow=None, xhigh=None, yval=0, yerrplus=0, yerrminus=0, focus=None): self.xlow = xlow self.xhigh= xhigh self.yval = yval self.yerrplus = yerrplus self.yerrminus = yerrminus self.focus= focus def clear(self): #self.xlow = None #self.xhigh= None self.yval = 0 self.yerrplus = 0 self.yerrminus = 0 self.focus= None def __str__(self): meanyerr = None try: meanyerr = mean(self.yerrplus, self.yerrminus) except: pass out = "%s to %s: %s +- %s" % (str(self.xlow), str(self.xhigh), str(self.yval), str(meanyerr)) return out def asFlat(self): global opts # if opts.GNUPLOT: # out = "%e\t%e\t%e\t%e\t%e\t%e" % (self.getBinCenter(), self.yval, # self.xlow, self.xhigh, # self.yval-self.yerrminus, self.yval+self.yerrplus) # else: out = "%e\t%e\t%e\t%e" % (self.xlow, self.xhigh, self.yval, 0.5*(self.yerrminus+self.yerrplus)) return out def __cmp__(self, other): """Sort by mean x value (yeah, I know...)""" rtn = True lhnone = (self.xlow is None or self.xhigh is None) rhnone = (other.xlow is None or other.xhigh is None) somenones = lhnone or rhnone if somenones: if lhnone == rhnone: return 0 elif lhnone: return -1 else: return 1; else: return cmp(self.xlow + self.xhigh, other.xlow + other.xhigh) def getXRange(self): return (self.xlow, self.xhigh) def setXRange(self, xlow, xhigh): self.xlow = xlow self.xhigh = xhigh return self def getBinCenter(self): """Geometric middle of the bin range.""" return self.xlow + .5*(self.xhigh - self.xlow) def getFocus(self): """Mean x-value of the bin.""" if self.focus is not None: return (self.xlow + self.xhigh)/2.0 else: return self.focus def area(self): return self.yval * (self.xhigh - self.xlow) def getYErr(self): """Get mean of +ve and -ve y-errors.""" return (self.yerrplus + self.yerrminus)/2.0 def setYErr(self, yerr): """Set both +ve and -ve y-errors simultaneously.""" self.yerrplus = yerr self.yerrminus = yerr return self ## Try to load faster but non-standard cElementTree module try: import xml.etree.cElementTree as ET except ImportError: try: import cElementTree as ET except ImportError: try: import xml.etree.ElementTree as ET except: sys.stderr.write("Can't load the ElementTree XML parser: please install it!\n") sys.exit(1) ## TODO: replace with lighthisto def mkHistoFromDPS(dps): """Make a mini histo representation from an AIDA dataPointSet tag.""" myhist = Histo() myhist.name = dps.get("name") myhist.title = dps.get("title") myhist.path = dps.get("path") dims = dps.findall("dimension") for d in dims: if d.get("dim") == "0": myhist.xtitle = d.get("title") elif d.get("dim") == "1": myhist.ytitle = d.get("title") points = dps.findall("dataPoint") numbins = len(points) for binnum, point in enumerate(points): bin = Bin() for d, m in enumerate(point.findall("measurement")): val = float(m.get("value")) down = float(m.get("errorMinus")) up = float(m.get("errorPlus")) if d == 0: low = val - down high = val + up bin.setXRange(low, high) elif d == 1: bin.yval = val bin.yerrplus = up bin.yerrminus = down myhist.addBin(bin) return myhist ############################################# def fillAbove(desthisto, sourcehistosbyptmin): for i, b in enumerate(desthisto.getBins()): ## Fill bins with pT-ordered histos (so that 'highest always wins') for ptmin, h in sorted(sourcehistosbyptmin.iteritems()): newb = h.getBin(i) if newb.xlow >= float(ptmin): desthisto.setBin(i, newb) ##### This logging line breaks the output!!!!!!! ####logging.debug("Copied: %s / %s" % (str(b), str(histosS[hpath][sqrts].getBin(i))) ) def mergeByPt(hpath, sqrts): global inhistos global outhistos try: fillAbove(outhistos[hpath], inhistos[hpath][sqrts]) except: pass def useOnePt(hpath, sqrts, ptmin): global inhistos global outhistos try: ## Find best pT_min match ptmins = inhistos[hpath][sqrts].keys() closest_ptmin = None for ptm in ptmins: if closest_ptmin is None or \ abs(float(ptm)-float(ptmin)) < abs(closest_ptmin-float(ptmin)): closest_ptmin = float(ptm) if closest_ptmin != float(ptmin): logging.warning("Inexact match for requested pTmin=%s: " % ptmin + \ "using pTmin=%e instead" % closest_ptmin) outhistos[hpath] = inhistos[hpath][sqrts][closest_ptmin] except: pass ####################################### if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog aidafile:sqrts:minpt aidafile2:sqrts:minpt [...]") parser.add_option("-o", "--out", dest="OUTFILE", default="-") parser.add_option("--append", dest="APPEND_OUTPUT", action="store_true", default=False) verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option_group(verbgroup) (opts, args) = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Prefix used in dat file headers headerprefix = "# " ## Check args if len(args) < 1: logging.error("Must specify at least one AIDA histogram file") sys.exit(1) ## Get histos inhistos = {} weights = {} try: for aidafile_ptmin in args: aidafile, sqrts, ptmin = None, None, None try: aidafile, sqrts, ptmin = aidafile_ptmin.rsplit(":", 2) except ValueError, v: raise Exception("Did you supply the file arguments in the 'name:sqrts:ptmin' format?") ## Parse this AIDA file as XML if not os.access(aidafile, os.R_OK): logging.error("%s can not be read" % aidafile) break try: tree = ET.parse(aidafile) except: logging.error("%s can not be parsed as XML" % aidafile) break tree = ET.parse(aidafile) ## Get histos from this AIDA file for dps in tree.findall("dataPointSet"): h = mkHistoFromDPS(dps) if not inhistos.has_key(h.fullPath()): inhistos[h.fullPath()] = {} tmpE = inhistos[h.fullPath()] if not tmpE.has_key(sqrts): tmpE[sqrts] = {} tmpP = tmpE[sqrts] if not tmpP.has_key(float(ptmin)): tmpP[float(ptmin)] = h else: raise Exception("A set with sqrt(s) = %s, and ptmin = %s already exists" % (sqrts, ptmin)) except Exception, e: logging.error("Danger, Will Robinson!") logging.error(str(e)) sys.exit(1) ## Make empty output histos outhistos = {} for hpath, hsets in sorted(inhistos.iteritems()): logging.debug(hpath + " " + str(dict([(sqrts, hsets[sqrts].keys()) for sqrts in hsets.keys()]))) workhisto = copy.deepcopy(hsets.values()[0].values()[0]) logging.debug(workhisto) outhistos[hpath] = workhisto ## There's no reason to merge reference histos if re.match(r'^/REF.*', hpath): continue ## Empty the bin set for histos which we're going to merge for b in outhistos[hpath]: b.clear() logging.debug(outhistos[hpath]) ###### ## ATLAS dijet azimuthal decorrelation useOnePt("/ATLAS_2011_S8971293/d01-x01-y01", "7000", "110") useOnePt("/ATLAS_2011_S8971293/d01-x01-y02", "7000", "160") useOnePt("/ATLAS_2011_S8971293/d01-x01-y03", "7000", "210") useOnePt("/ATLAS_2011_S8971293/d01-x01-y04", "7000", "260") useOnePt("/ATLAS_2011_S8971293/d01-x01-y05", "7000", "310") useOnePt("/ATLAS_2011_S8971293/d01-x01-y06", "7000", "400") useOnePt("/ATLAS_2011_S8971293/d01-x01-y07", "7000", "500") useOnePt("/ATLAS_2011_S8971293/d01-x01-y08", "7000", "600") useOnePt("/ATLAS_2011_S8971293/d01-x01-y09", "7000", "800") ## ATLAS jet shapes useOnePt("/ATLAS_2011_S8924791/d01-x01-y01", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d01-x01-y02", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d01-x02-y01", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d01-x02-y02", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d01-x03-y01", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d01-x03-y02", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d01-x04-y01", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d01-x04-y02", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d01-x05-y01", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d01-x05-y02", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d01-x06-y01", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d01-x06-y02", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d02-x01-y01", "7000", "40") useOnePt("/ATLAS_2011_S8924791/d02-x01-y02", "7000", "40") useOnePt("/ATLAS_2011_S8924791/d02-x02-y01", "7000", "40") useOnePt("/ATLAS_2011_S8924791/d02-x02-y02", "7000", "40") useOnePt("/ATLAS_2011_S8924791/d02-x03-y01", "7000", "40") useOnePt("/ATLAS_2011_S8924791/d02-x03-y02", "7000", "40") useOnePt("/ATLAS_2011_S8924791/d02-x04-y01", "7000", "40") useOnePt("/ATLAS_2011_S8924791/d02-x04-y02", "7000", "40") useOnePt("/ATLAS_2011_S8924791/d02-x05-y01", "7000", "40") useOnePt("/ATLAS_2011_S8924791/d02-x05-y02", "7000", "40") useOnePt("/ATLAS_2011_S8924791/d02-x06-y01", "7000", "40") useOnePt("/ATLAS_2011_S8924791/d02-x06-y02", "7000", "40") useOnePt("/ATLAS_2011_S8924791/d03-x01-y01", "7000", "60") useOnePt("/ATLAS_2011_S8924791/d03-x01-y02", "7000", "60") useOnePt("/ATLAS_2011_S8924791/d03-x02-y01", "7000", "60") useOnePt("/ATLAS_2011_S8924791/d03-x02-y02", "7000", "60") useOnePt("/ATLAS_2011_S8924791/d03-x03-y01", "7000", "60") useOnePt("/ATLAS_2011_S8924791/d03-x03-y02", "7000", "60") useOnePt("/ATLAS_2011_S8924791/d03-x04-y01", "7000", "60") useOnePt("/ATLAS_2011_S8924791/d03-x04-y02", "7000", "60") useOnePt("/ATLAS_2011_S8924791/d03-x05-y01", "7000", "60") useOnePt("/ATLAS_2011_S8924791/d03-x05-y02", "7000", "60") useOnePt("/ATLAS_2011_S8924791/d03-x06-y01", "7000", "60") useOnePt("/ATLAS_2011_S8924791/d03-x06-y02", "7000", "60") useOnePt("/ATLAS_2011_S8924791/d04-x01-y01", "7000", "80") useOnePt("/ATLAS_2011_S8924791/d04-x01-y02", "7000", "80") useOnePt("/ATLAS_2011_S8924791/d04-x02-y01", "7000", "80") useOnePt("/ATLAS_2011_S8924791/d04-x02-y02", "7000", "80") useOnePt("/ATLAS_2011_S8924791/d04-x03-y01", "7000", "80") useOnePt("/ATLAS_2011_S8924791/d04-x03-y02", "7000", "80") useOnePt("/ATLAS_2011_S8924791/d04-x04-y01", "7000", "80") useOnePt("/ATLAS_2011_S8924791/d04-x04-y02", "7000", "80") useOnePt("/ATLAS_2011_S8924791/d04-x05-y01", "7000", "80") useOnePt("/ATLAS_2011_S8924791/d04-x05-y02", "7000", "80") useOnePt("/ATLAS_2011_S8924791/d04-x06-y01", "7000", "80") useOnePt("/ATLAS_2011_S8924791/d04-x06-y02", "7000", "80") useOnePt("/ATLAS_2011_S8924791/d05-x01-y01", "7000", "110") useOnePt("/ATLAS_2011_S8924791/d05-x01-y02", "7000", "110") useOnePt("/ATLAS_2011_S8924791/d05-x02-y01", "7000", "110") useOnePt("/ATLAS_2011_S8924791/d05-x02-y02", "7000", "110") useOnePt("/ATLAS_2011_S8924791/d05-x03-y01", "7000", "110") useOnePt("/ATLAS_2011_S8924791/d05-x03-y02", "7000", "110") useOnePt("/ATLAS_2011_S8924791/d05-x04-y01", "7000", "110") useOnePt("/ATLAS_2011_S8924791/d05-x04-y02", "7000", "110") useOnePt("/ATLAS_2011_S8924791/d05-x05-y01", "7000", "110") useOnePt("/ATLAS_2011_S8924791/d05-x05-y02", "7000", "110") useOnePt("/ATLAS_2011_S8924791/d05-x06-y01", "7000", "110") useOnePt("/ATLAS_2011_S8924791/d05-x06-y02", "7000", "110") useOnePt("/ATLAS_2011_S8924791/d06-x01-y01", "7000", "160") useOnePt("/ATLAS_2011_S8924791/d06-x01-y02", "7000", "160") useOnePt("/ATLAS_2011_S8924791/d06-x02-y01", "7000", "160") useOnePt("/ATLAS_2011_S8924791/d06-x02-y02", "7000", "160") useOnePt("/ATLAS_2011_S8924791/d06-x03-y01", "7000", "160") useOnePt("/ATLAS_2011_S8924791/d06-x03-y02", "7000", "160") useOnePt("/ATLAS_2011_S8924791/d06-x04-y01", "7000", "160") useOnePt("/ATLAS_2011_S8924791/d06-x04-y02", "7000", "160") useOnePt("/ATLAS_2011_S8924791/d06-x05-y01", "7000", "160") useOnePt("/ATLAS_2011_S8924791/d06-x05-y02", "7000", "160") useOnePt("/ATLAS_2011_S8924791/d06-x06-y01", "7000", "160") useOnePt("/ATLAS_2011_S8924791/d06-x06-y02", "7000", "160") useOnePt("/ATLAS_2011_S8924791/d07-x01-y01", "7000", "210") useOnePt("/ATLAS_2011_S8924791/d07-x01-y02", "7000", "210") useOnePt("/ATLAS_2011_S8924791/d07-x02-y01", "7000", "210") useOnePt("/ATLAS_2011_S8924791/d07-x02-y02", "7000", "210") useOnePt("/ATLAS_2011_S8924791/d07-x03-y01", "7000", "210") useOnePt("/ATLAS_2011_S8924791/d07-x03-y02", "7000", "210") useOnePt("/ATLAS_2011_S8924791/d07-x04-y01", "7000", "210") useOnePt("/ATLAS_2011_S8924791/d07-x04-y02", "7000", "210") useOnePt("/ATLAS_2011_S8924791/d07-x05-y01", "7000", "210") useOnePt("/ATLAS_2011_S8924791/d07-x05-y02", "7000", "210") useOnePt("/ATLAS_2011_S8924791/d07-x06-y01", "7000", "210") useOnePt("/ATLAS_2011_S8924791/d07-x06-y02", "7000", "210") useOnePt("/ATLAS_2011_S8924791/d08-x01-y01", "7000", "260") useOnePt("/ATLAS_2011_S8924791/d08-x01-y02", "7000", "260") useOnePt("/ATLAS_2011_S8924791/d08-x02-y01", "7000", "260") useOnePt("/ATLAS_2011_S8924791/d08-x02-y02", "7000", "260") useOnePt("/ATLAS_2011_S8924791/d08-x03-y01", "7000", "260") useOnePt("/ATLAS_2011_S8924791/d08-x03-y02", "7000", "260") useOnePt("/ATLAS_2011_S8924791/d08-x04-y01", "7000", "260") useOnePt("/ATLAS_2011_S8924791/d08-x04-y02", "7000", "260") useOnePt("/ATLAS_2011_S8924791/d08-x05-y01", "7000", "260") useOnePt("/ATLAS_2011_S8924791/d08-x05-y02", "7000", "260") useOnePt("/ATLAS_2011_S8924791/d08-x06-y01", "7000", "260") useOnePt("/ATLAS_2011_S8924791/d08-x06-y02", "7000", "260") useOnePt("/ATLAS_2011_S8924791/d09-x01-y01", "7000", "310") useOnePt("/ATLAS_2011_S8924791/d09-x01-y02", "7000", "310") useOnePt("/ATLAS_2011_S8924791/d09-x02-y01", "7000", "310") useOnePt("/ATLAS_2011_S8924791/d09-x02-y02", "7000", "310") useOnePt("/ATLAS_2011_S8924791/d09-x03-y01", "7000", "310") useOnePt("/ATLAS_2011_S8924791/d09-x03-y02", "7000", "310") useOnePt("/ATLAS_2011_S8924791/d09-x04-y01", "7000", "310") useOnePt("/ATLAS_2011_S8924791/d09-x04-y02", "7000", "310") useOnePt("/ATLAS_2011_S8924791/d09-x05-y01", "7000", "310") useOnePt("/ATLAS_2011_S8924791/d09-x05-y02", "7000", "310") useOnePt("/ATLAS_2011_S8924791/d09-x06-y01", "7000", "310") useOnePt("/ATLAS_2011_S8924791/d09-x06-y02", "7000", "310") useOnePt("/ATLAS_2011_S8924791/d10-x01-y01", "7000", "400") useOnePt("/ATLAS_2011_S8924791/d10-x01-y02", "7000", "400") useOnePt("/ATLAS_2011_S8924791/d10-x02-y01", "7000", "400") useOnePt("/ATLAS_2011_S8924791/d10-x02-y02", "7000", "400") useOnePt("/ATLAS_2011_S8924791/d10-x03-y01", "7000", "400") useOnePt("/ATLAS_2011_S8924791/d10-x03-y02", "7000", "400") useOnePt("/ATLAS_2011_S8924791/d10-x04-y01", "7000", "400") useOnePt("/ATLAS_2011_S8924791/d10-x04-y02", "7000", "400") useOnePt("/ATLAS_2011_S8924791/d10-x05-y01", "7000", "400") useOnePt("/ATLAS_2011_S8924791/d10-x05-y02", "7000", "400") useOnePt("/ATLAS_2011_S8924791/d10-x06-y01", "7000", "400") useOnePt("/ATLAS_2011_S8924791/d10-x06-y02", "7000", "400") useOnePt("/ATLAS_2011_S8924791/d11-x01-y01", "7000", "500") useOnePt("/ATLAS_2011_S8924791/d11-x01-y02", "7000", "500") useOnePt("/ATLAS_2011_S8924791/d11-x02-y01", "7000", "500") useOnePt("/ATLAS_2011_S8924791/d11-x02-y02", "7000", "500") useOnePt("/ATLAS_2011_S8924791/d11-x03-y01", "7000", "500") useOnePt("/ATLAS_2011_S8924791/d11-x03-y02", "7000", "500") useOnePt("/ATLAS_2011_S8924791/d11-x04-y01", "7000", "500") useOnePt("/ATLAS_2011_S8924791/d11-x04-y02", "7000", "500") useOnePt("/ATLAS_2011_S8924791/d11-x05-y01", "7000", "500") useOnePt("/ATLAS_2011_S8924791/d11-x05-y02", "7000", "500") useOnePt("/ATLAS_2011_S8924791/d11-x06-y01", "7000", "500") useOnePt("/ATLAS_2011_S8924791/d11-x06-y02", "7000", "500") useOnePt("/ATLAS_2011_S8924791/d12-x01-y01", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d12-x01-y02", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d12-x02-y01", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d12-x02-y02", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d12-x03-y01", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d12-x03-y02", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d12-x04-y01", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d12-x04-y02", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d12-x05-y01", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d12-x05-y02", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d12-x06-y01", "7000", "30") useOnePt("/ATLAS_2011_S8924791/d12-x06-y02", "7000", "30") ## Field analysis logging.info("Processing CDF_2001_S4751469") ## Angular distributions in different pT bins useOnePt("/CDF_2001_S4751469/d01-x01-y01", "1800", "0") useOnePt("/CDF_2001_S4751469/d01-x01-y02", "1800", "0") useOnePt("/CDF_2001_S4751469/d01-x01-y03", "1800", "30") useOnePt("/CDF_2001_S4751469/d02-x01-y01", "1800", "0") useOnePt("/CDF_2001_S4751469/d02-x01-y02", "1800", "0") useOnePt("/CDF_2001_S4751469/d02-x01-y03", "1800", "30") ## Number, profile in pT_lead (True?) useOnePt("/CDF_2001_S4751469/d03-x01-y01", "1800", "0") useOnePt("/CDF_2001_S4751469/d03-x01-y02", "1800", "0") useOnePt("/CDF_2001_S4751469/d03-x01-y03", "1800", "0") mergeByPt("/CDF_2001_S4751469/d04-x01-y01", "1800") mergeByPt("/CDF_2001_S4751469/d04-x01-y02", "1800") mergeByPt("/CDF_2001_S4751469/d04-x01-y03", "1800") ## pT sums, profile in pT_lead (True?) useOnePt("/CDF_2001_S4751469/d05-x01-y01", "1800", "0") useOnePt("/CDF_2001_S4751469/d05-x01-y02", "1800", "0") useOnePt("/CDF_2001_S4751469/d05-x01-y03", "1800", "0") mergeByPt("/CDF_2001_S4751469/d06-x01-y01", "1800") mergeByPt("/CDF_2001_S4751469/d06-x01-y02", "1800") mergeByPt("/CDF_2001_S4751469/d06-x01-y03", "1800") ## pT distributions (use a specific pT cut run?) useOnePt("/CDF_2001_S4751469/d07-x01-y01", "1800", "0") useOnePt("/CDF_2001_S4751469/d07-x01-y02", "1800", "0") useOnePt("/CDF_2001_S4751469/d07-x01-y03", "1800", "30") ## Acosta analysis logging.info("Processing CDF_2004_S5839831") ## Mean pT, profile in ET_lead mergeByPt("/CDF_2004_S5839831/d01-x01-y01", "1800") mergeByPt("/CDF_2004_S5839831/d01-x01-y02", "1800") ## pT_max,min, profiles in ET_lead mergeByPt("/CDF_2004_S5839831/d02-x01-y01", "1800") mergeByPt("/CDF_2004_S5839831/d02-x01-y02", "1800") mergeByPt("/CDF_2004_S5839831/d02-x01-y03", "1800") ## pT distributions (want to use a specific pT cut run) useOnePt("/CDF_2004_S5839831/d03-x01-y01", "1800", "40") useOnePt("/CDF_2004_S5839831/d03-x01-y02", "1800", "80") useOnePt("/CDF_2004_S5839831/d03-x01-y03", "1800", "120") useOnePt("/CDF_2004_S5839831/d03-x01-y04", "1800", "160") useOnePt("/CDF_2004_S5839831/d03-x01-y05", "1800", "200") ## N_max,min, profiles in ET_lead mergeByPt("/CDF_2004_S5839831/d04-x01-y01", "1800") mergeByPt("/CDF_2004_S5839831/d04-x01-y02", "1800") ## Min bias dbs (want to use min bias pT cut) useOnePt("/CDF_2004_S5839831/d05-x01-y01", "1800", "0") useOnePt("/CDF_2004_S5839831/d06-x01-y01", "1800", "0") ## Swiss Cheese, profile in ET_lead mergeByPt("/CDF_2004_S5839831/d07-x01-y01", "1800") mergeByPt("/CDF_2004_S5839831/d07-x01-y02", "1800") ## pT_max,min, profiles in ET_lead mergeByPt("/CDF_2004_S5839831/d08-x01-y01", "630") mergeByPt("/CDF_2004_S5839831/d08-x01-y02", "630") mergeByPt("/CDF_2004_S5839831/d08-x01-y03", "630") ## Swiss Cheese, profile in ET_lead mergeByPt("/CDF_2004_S5839831/d09-x01-y01", "630") mergeByPt("/CDF_2004_S5839831/d09-x01-y02", "630") ## Min bias dbs (want to use min bias pT cut) useOnePt("/CDF_2004_S5839831/d10-x01-y01", "630", "0") useOnePt("/CDF_2004_S5839831/d11-x01-y01", "630", "0") ## CDF jet shape analysis logging.info("Processing CDF_2005_S6217184") useOnePt("/CDF_2005_S6217184/d01-x01-y01", "1960", "37") useOnePt("/CDF_2005_S6217184/d01-x01-y02", "1960", "37") useOnePt("/CDF_2005_S6217184/d01-x01-y03", "1960", "37") useOnePt("/CDF_2005_S6217184/d02-x01-y01", "1960", "63") useOnePt("/CDF_2005_S6217184/d02-x01-y02", "1960", "63") useOnePt("/CDF_2005_S6217184/d02-x01-y03", "1960", "63") useOnePt("/CDF_2005_S6217184/d03-x01-y01", "1960", "63") useOnePt("/CDF_2005_S6217184/d03-x01-y02", "1960", "112") useOnePt("/CDF_2005_S6217184/d03-x01-y03", "1960", "112") useOnePt("/CDF_2005_S6217184/d04-x01-y01", "1960", "112") useOnePt("/CDF_2005_S6217184/d04-x01-y02", "1960", "166") useOnePt("/CDF_2005_S6217184/d04-x01-y03", "1960", "166") useOnePt("/CDF_2005_S6217184/d05-x01-y01", "1960", "166") useOnePt("/CDF_2005_S6217184/d05-x01-y02", "1960", "166") useOnePt("/CDF_2005_S6217184/d05-x01-y03", "1960", "166") useOnePt("/CDF_2005_S6217184/d06-x01-y01", "1960", "166") useOnePt("/CDF_2005_S6217184/d06-x01-y02", "1960", "166") useOnePt("/CDF_2005_S6217184/d06-x01-y03", "1960", "166") useOnePt("/CDF_2005_S6217184/d07-x01-y01", "1960", "37") useOnePt("/CDF_2005_S6217184/d07-x01-y02", "1960", "37") useOnePt("/CDF_2005_S6217184/d07-x01-y03", "1960", "37") useOnePt("/CDF_2005_S6217184/d08-x01-y01", "1960", "63") useOnePt("/CDF_2005_S6217184/d08-x01-y02", "1960", "63") useOnePt("/CDF_2005_S6217184/d08-x01-y03", "1960", "63") useOnePt("/CDF_2005_S6217184/d09-x01-y01", "1960", "63") useOnePt("/CDF_2005_S6217184/d09-x01-y02", "1960", "112") useOnePt("/CDF_2005_S6217184/d09-x01-y03", "1960", "112") useOnePt("/CDF_2005_S6217184/d10-x01-y01", "1960", "112") useOnePt("/CDF_2005_S6217184/d10-x01-y02", "1960", "166") useOnePt("/CDF_2005_S6217184/d10-x01-y03", "1960", "166") useOnePt("/CDF_2005_S6217184/d11-x01-y01", "1960", "166") useOnePt("/CDF_2005_S6217184/d11-x01-y02", "1960", "166") useOnePt("/CDF_2005_S6217184/d11-x01-y03", "1960", "166") useOnePt("/CDF_2005_S6217184/d12-x01-y01", "1960", "166") useOnePt("/CDF_2005_S6217184/d12-x01-y02", "1960", "166") useOnePt("/CDF_2005_S6217184/d12-x01-y03", "1960", "166") mergeByPt("/CDF_2005_S6217184/d13-x01-y01", "1960") ## CDF dijet mass spectrum mergeByPt("/CDF_2008_S8093652/d01-x01-y01", "1960") ## Rick Field Run-II Leading Jets UE analysis logging.info("Processing CDF_2010_S8591881_QCD") ## charged particle density mergeByPt("/CDF_2010_S8591881_QCD/d10-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d10-x01-y02", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d10-x01-y03", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d11-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d11-x01-y02", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d11-x01-y03", "1960") ## pT sum density mergeByPt("/CDF_2010_S8591881_QCD/d12-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d12-x01-y02", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d12-x01-y03", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d13-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d13-x01-y02", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d13-x01-y03", "1960") ## mean pT mergeByPt("/CDF_2010_S8591881_QCD/d14-x01-y01", "1960") ## pT max mergeByPt("/CDF_2010_S8591881_QCD/d15-x01-y01", "1960") ## ## And again, with the deprecated name: ## logging.info("Processing CDF_2008_LEADINGJETS") ## charged particle density mergeByPt("/CDF_2008_LEADINGJETS/d01-x01-y01", "1960") mergeByPt("/CDF_2008_LEADINGJETS/d02-x01-y01", "1960") mergeByPt("/CDF_2008_LEADINGJETS/d03-x01-y01", "1960") mergeByPt("/CDF_2008_LEADINGJETS/d04-x01-y01", "1960") ## pT sum density mergeByPt("/CDF_2008_LEADINGJETS/d05-x01-y01", "1960") mergeByPt("/CDF_2008_LEADINGJETS/d06-x01-y01", "1960") mergeByPt("/CDF_2008_LEADINGJETS/d07-x01-y01", "1960") mergeByPt("/CDF_2008_LEADINGJETS/d08-x01-y01", "1960") ## mean pT mergeByPt("/CDF_2008_LEADINGJETS/d09-x01-y01", "1960") ## Rick Field / Deepak Kar Run-II Drell-Yan UE analysis logging.info("Processing CDF_2010_S8591881_DY") ## charged particle density mergeByPt("/CDF_2010_S8591881_DY/d01-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_DY/d01-x01-y02", "1960") mergeByPt("/CDF_2010_S8591881_DY/d01-x01-y03", "1960") mergeByPt("/CDF_2010_S8591881_DY/d02-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_DY/d02-x01-y02", "1960") mergeByPt("/CDF_2010_S8591881_DY/d02-x01-y03", "1960") ## pT sum density mergeByPt("/CDF_2010_S8591881_DY/d03-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_DY/d03-x01-y02", "1960") mergeByPt("/CDF_2010_S8591881_DY/d03-x01-y03", "1960") mergeByPt("/CDF_2010_S8591881_DY/d04-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_DY/d04-x01-y02", "1960") mergeByPt("/CDF_2010_S8591881_DY/d04-x01-y03", "1960") ## mean pT mergeByPt("/CDF_2010_S8591881_DY/d05-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_DY/d05-x01-y02", "1960") ## max pT mergeByPt("/CDF_2010_S8591881_DY/d06-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_DY/d06-x01-y02", "1960") ## #useOnePt("/CDF_2010_S8591881_DY/d07-x01-y01", "1960", "10") #useOnePt("/CDF_2010_S8591881_DY/d08-x01-y01", "1960", "10") #useOnePt("/CDF_2010_S8591881_DY/d09-x01-y01", "1960", "10") ## ## And again, with the deprecated name: ## logging.info("Processing CDF_2008_NOTE_9351") ## charged particle density mergeByPt("/CDF_2008_NOTE_9351/d01-x01-y01", "1960") mergeByPt("/CDF_2008_NOTE_9351/d02-x01-y01", "1960") mergeByPt("/CDF_2008_NOTE_9351/d03-x01-y01", "1960") mergeByPt("/CDF_2008_NOTE_9351/d04-x01-y01", "1960") mergeByPt("/CDF_2008_NOTE_9351/d05-x01-y01", "1960") mergeByPt("/CDF_2008_NOTE_9351/d06-x01-y01", "1960") ## pT sum density mergeByPt("/CDF_2008_NOTE_9351/d07-x01-y01", "1960") mergeByPt("/CDF_2008_NOTE_9351/d08-x01-y01", "1960") mergeByPt("/CDF_2008_NOTE_9351/d09-x01-y01", "1960") mergeByPt("/CDF_2008_NOTE_9351/d10-x01-y01", "1960") mergeByPt("/CDF_2008_NOTE_9351/d11-x01-y01", "1960") mergeByPt("/CDF_2008_NOTE_9351/d12-x01-y01", "1960") ## mean pT mergeByPt("/CDF_2008_NOTE_9351/d13-x01-y01", "1960") mergeByPt("/CDF_2008_NOTE_9351/d14-x01-y01", "1960") mergeByPt("/CDF_2008_NOTE_9351/d15-x01-y01", "1960") ## max pT mergeByPt("/CDF_2008_NOTE_9351/d16-x01-y01", "1960") mergeByPt("/CDF_2008_NOTE_9351/d17-x01-y01", "1960") mergeByPt("/CDF_2008_NOTE_9351/d18-x01-y01", "1960") ## #useOnePt("/CDF_2008_NOTE_9351/d19-x01-y01", "1960", "10") #useOnePt("/CDF_2008_NOTE_9351/d20-x01-y01", "1960", "10") #useOnePt("/CDF_2008_NOTE_9351/d21-x01-y01", "1960", "10") ## D0 dijet correlation analysis logging.info("Processing D0_2004_S5992206") useOnePt("/D0_2004_S5992206/d01-x02-y01", "1960", "50") useOnePt("/D0_2004_S5992206/d02-x02-y01", "1960", "75") useOnePt("/D0_2004_S5992206/d03-x02-y01", "1960", "100") useOnePt("/D0_2004_S5992206/d04-x02-y01", "1960", "150") ## D0 incl jet cross-section analysis logging.info("Processing D0_2008_S7662670") mergeByPt("/D0_2008_S7662670/d01-x01-y01", "1960") mergeByPt("/D0_2008_S7662670/d02-x01-y01", "1960") mergeByPt("/D0_2008_S7662670/d03-x01-y01", "1960") mergeByPt("/D0_2008_S7662670/d04-x01-y01", "1960") mergeByPt("/D0_2008_S7662670/d05-x01-y01", "1960") mergeByPt("/D0_2008_S7662670/d06-x01-y01", "1960") ## STAR inclusive jet cross-section logging.info("Processing STAR_2006_S6870392") useOnePt("/STAR_2006_S6870392/d01-x01-y01", "200", "0") mergeByPt("/STAR_2006_S6870392/d02-x01-y01", "200") ## STAR underlying event (Helen Caines) logging.info("Processing STAR_2009_UE_HELEN") mergeByPt("/STAR_2009_UE_HELEN/d01-x01-y01", "200") mergeByPt("/STAR_2009_UE_HELEN/d02-x01-y01", "200") mergeByPt("/STAR_2009_UE_HELEN/d03-x01-y01", "200") ## Choose output file out = None if opts.OUTFILE == "-": out = sys.stdout else: if opts.APPEND_OUTPUT: out = open(opts.OUTFILE, "a") else: out = open(opts.OUTFILE, "w") ## Write out merged histos for hpath, h in sorted(outhistos.iteritems()): logging.debug("hpath = %s" % hpath) out.write(h.asFlat() + "\n\n") sys.exit(0) ## Write to multiple auto-named dat files for hpath, h in sorted(outhistos.iteritems()): logging.debug("hpath = %s" % hpath) safename = hpath.replace("/", "_") + ".dat" if safename[0] == "_": safename = safename[1:] logging.info("Writing histo to %s" % safename) f = open(safename, "w") f.write(h.asFlat() + "\n") f.close() rivet-1.8.3/bin/rivet-buildplugin0000644000175000017500000000747212116616115015222 0ustar sunsun#!/usr/bin/env bash ## -*- sh -*- ## bin/rivet-buildplugin. Generated from rivet-buildplugin.in by configure. ## Print help PROG=$(basename $0) tmp=$(echo $* | egrep -- '--\|-\') if test $# -lt 1 || test -n "$tmp"; then echo "$PROG: compilation helper for Rivet analysis plugins" echo echo "Usage: $PROG [] [ [compiler_flags] ...]" echo echo " can be a path, provided the filename is of the form 'Rivet*.so'" echo "If is not specified, the default name is 'RivetAnalysis.so'." echo echo "To make special build variations you can add appropriate compiler flags" echo "to the arguments and these will be passed directly to the compiler. For" echo "example, for a debug build of your plugin library, add '-g', and for a" echo "32 bit build on a 64 bit system add '-m32'." echo echo "Options:" echo " -h | --help: display this help message" echo " --with-root: add ROOT link options (requires root-config on system)" echo echo "TODO:" echo " * is there a GCC option to parallelise the single-command compilation?" test -n "$tmp" exit $? fi ## Work out shared library build flags by platform shared_flags= SWVERS=$(which sw_vers 2> /dev/null) if test "$SWVERS" && test -x "$SWVERS"; then ## Mac OS X shared_flags="-undefined dynamic_lookup -bundle" else ## Unix shared_flags="-shared -fPIC" fi ## Get Rivet system C++ compiler (fall back to $CXX and then g++ if needed) mycxx=g++ rivetcxx=$(which "/usr/bin/g++" 2> /dev/null) abscxx=$(which "$CXX" 2> /dev/null) if [[ -x "$rivetcxx" ]]; then mycxx="/usr/bin/g++" elif [[ -x "$abscxx" ]]; then mycxx=$CXX fi ## Get Rivet system C++ compiler flags mycxxflags="" if [[ -n " -pedantic -ansi -Wall -Wno-long-long -Wno-format" ]]; then mycxxflags=" -pedantic -ansi -Wall -Wno-long-long -Wno-format" fi if [[ -n "-O2" ]]; then mycxxflags="$mycxxflags -O2" fi ## Get Rivet system C preprocessor flags (duplicating that in rivet-config.in) mycppflags="" prefix="/home/andy/heplocal" irivet="${prefix}/include" test -n "$irivet" && mycppflags="$mycppflags -I${irivet}" ihepmc="/home/andy/heplocal/include" test -n "$ihepmc" && mycppflags="$mycppflags -I${ihepmc}" ifastjet="/home/andy/heplocal/include" test -n "$ifastjet" && mycppflags="$mycppflags -I${ifastjet}" igsl="/usr/include" test -n "$igsl" && mycppflags="$mycppflags -I${igsl}" iboost="/usr/include" test -n "$iboost" && mycppflags="$mycppflags -I${iboost}" ## Get Rivet system linker flags (duplicating that in rivet-config.in) myldflags="" lrivet="${exec_prefix}/lib" test -n "$lrivet" && myldflags="$mycppflags -L${lrivet}" lhepmc="/home/andy/heplocal/lib" test -n "$lhepmc" && myldflags="$mycppflags -L${lhepmc}" lfastjet="/home/andy/heplocal/lib" test -n "$lfastjet" && myldflags="$mycppflags -L${lfastjet}" ## Link against ROOT if requested with_root=$(echo $* | egrep -- '--\') # echo $with_root tmp=${@//--with-root/} set $tmp ## Get and check the library name libname=$1 match1=$(basename "$libname" | egrep '^.*\.so') match2=$(basename "$libname" | egrep '^Rivet.*\.so') if test -n "$match1"; then if test -z "$match2"; then echo "Library name '$libname' does not have the required 'Rivet*.so' name pattern" 1>&2 exit 1 fi ## If we're using the first arg as the library name, shift it off the positional list shift else echo "Using default library name 'RivetAnalysis.so'" libname="RivetAnalysis.so" fi ## Get the source files (and more flags) sources_and_flags="$@" if [[ -n $with_root ]]; then root_flags=$(root-config --libs --cflags 2> /dev/null) # echo $root_flags sources_and_flags="$root_flags $sources_and_flags" fi ## Build cmd="$mycxx -o \"$libname\" $shared_flags $mycppflags $mycxxflags $myldflags $sources_and_flags" echo $cmd eval $cmd rivet-1.8.3/bin/rivet-nopy.cc0000644000175000017500000000126412116077756014262 0ustar sunsun#include "Rivet/AnalysisHandler.hh" #include "HepMC/IO_GenEvent.h" using namespace std; int main(int argc, char** argv) { if (argc < 2) { cerr << "Usage: " << argv[0] << " [ ...]" << endl; return 1; } Rivet::AnalysisHandler ah; for (int i = 2; i < argc; ++i) { ah.addAnalysis(argv[i]); } std::istream* file = new std::fstream(argv[1], std::ios::in); HepMC::IO_GenEvent hepmcio(*file); HepMC::GenEvent* evt = hepmcio.read_next_event(); while (evt) { ah.analyze(*evt); delete evt; evt = 0; hepmcio >> evt; } delete file; file = 0; ah.setCrossSection(1.0); ah.finalize(); ah.writeData("out.aida"); return 0; } rivet-1.8.3/bin/flat2aida0000755000175000017500000001575212116077756013423 0ustar sunsun#! /usr/bin/env python """\ %prog [options] flatfile [flatfile2 ...] Convert make-plots data files to AIDA XML format. The output is by default written out to a file with the same name as the input (out.aida in the case of stdin) unless the --output option is specified. When specifying either input or output filenames, a '-' is used to refer to stdin or stdout as appropriate. Histograms can also be filtered by histo path, using the -m or -M options for a positive or negative regex pattern patch respectively. """ import sys if sys.version_info[:3] < (2,4,0): print "rivet scripts require Python version >= 2.4.0... exiting" sys.exit(1) import os, logging import lighthisto ########################################################## if __name__ == "__main__": ## Default plot file search paths default_plotdirs = ["."] try: import rivet default_plotdirs += rivet.getAnalysisPlotPaths() except: pass ## Parse command line options from optparse import OptionParser, OptionGroup parser = OptionParser(usage=__doc__) parser.add_option("-o", "--output", default=None, help="Write all histos to a single output file. " "stdout can be explicitly specified by setting '-' as the output filename. This option will " "be disregarded if --split is specified.", dest="OUTPUT") parser.add_option("-s", "--split", action="store_true", default=False, help="Split histograms into individual files", dest="SPLITOUTPUT") parser.add_option("--plotinfodir", dest="PLOTINFODIR", action="append", default=default_plotdirs, help="directory which may contain plot header information") parser.add_option("-m", "--match", action="append", help="Only write out histograms whose $path/$name string matches these regexes", dest="PATHPATTERNS") parser.add_option("-M", "--unmatch", action="append", help="Exclude histograms whose $path/$name string matches these regexes", dest="PATHUNPATTERNS") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") opts, args = parser.parse_args() ## Configure logging logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Initialise steering variables which need a bit more care import re if opts.PATHPATTERNS is None: opts.PATHPATTERNS = [] opts.PATHPATTERNS = [re.compile(r) for r in opts.PATHPATTERNS] if opts.PATHUNPATTERNS is None: opts.PATHUNPATTERNS = [] opts.PATHUNPATTERNS = [re.compile(r) for r in opts.PATHUNPATTERNS] ## Check that at least one file has been supplied if len(args) < 1: sys.stderr.write("Must specity at least one histogram file (or stdin)\n") sys.exit(1) ## Add directories to the plotinfo path for flatfile in args: if flatfile != "-": flatdir = os.path.dirname(flatfile) if flatdir not in opts.PLOTINFODIR: opts.PLOTINFODIR.append(flatdir) ## Remove empty path entries opts.PLOTINFODIR = filter(lambda s: len(s) > 0, opts.PLOTINFODIR) ## Create plot file parser plotparser = lighthisto.PlotParser(opts.PLOTINFODIR) ## Run over the files and build histo objects selected by the pattern filtering histos = [] for flatfile in args: if flatfile != "-" and not os.access(flatfile, os.R_OK): logging.error("%s can not be read" % flatfile) sys.exit(1) try: allhistos = lighthisto.Histo.fromFlat(flatfile) except Exception, e: logging.error("%s can not be parsed" % flatfile) print e sys.exit(1) for hist in allhistos: histpath = hist.fullPath() useThis = True if opts.PATHPATTERNS: useThis = False for regex in opts.PATHPATTERNS: if regex.search(histpath): useThis = True break if useThis and opts.PATHUNPATTERNS: for regex in opts.PATHUNPATTERNS: if regex.search(histpath): useThis = False break if useThis: try: plotparser.updateHistoHeaders(hist) except ValueError, err: logging.debug(err) histos.append((flatfile, hist)) ## Write output if histos: ## Split output per-histogram if opts.SPLITOUTPUT: for f, h in histos: histo = h.fullPath()[1:].replace("/", "_") outfile = "%s.aida" % histo out = open(outfile, "w") out.write('\n') out.write('\n') out.write('\n') out.write(' \n') out.write(h.asAIDA()) out.write('\n') out.close() ## Write all output to a single file (stdout by default) elif opts.OUTPUT: outfile = opts.OUTPUT if outfile == "-": out = sys.stdout else: out = open(outfile, "w") out.write('\n') out.write('\n') out.write('\n') out.write(' \n') for f, h in histos: out.write(h.asAIDA()) out.write('\n') if outfile != "-": out.close() ## Split output per-infile else: histodict = dict() for f, h in histos: histodict.setdefault(f, []) histodict[f].append(h) for f, hs in histodict.iteritems(): outfile = os.path.basename(f).replace(".dat", ".aida") if f == "-": outfile = "out.dat" out = open(outfile, "w") out.write('\n') out.write('\n') out.write('\n') out.write(' \n') for h in hs: out.write(h.asAIDA()) out.write('\n') out.close() rivet-1.8.3/bin/rivet-rmgaps0000755000175000017500000002376212116077756014214 0ustar sunsun#! /usr/bin/env python """ %prog mcfile.aida [outputfile.aida] %prog --no-rivet-refs datafile.aida mcfile.aida [outputfile.aida] Remove bins in Rivet-generated MC AIDA files which are actually binning gaps in the reference histogram. Rivet's histogramming system currently has no way to leave gaps between bins, hence this clean-up script. If the output file is not specified, the input MC file will be overwritten. """ import sys if sys.version_info[:3] < (2,4,0): print "rivet scripts require Python version >= 2.4.0... exiting" sys.exit(1) import os, tempfile class Inputdata: def __init__(self, filenames): self.histos = {} self.description = {} self.description['DrawOnly'] = [] if not hasattr(filenames, "__iter__"): filenames = [filenames] for filename in filenames: f = open(filename+'.dat', 'r') for line in f: if (line.count('#',0,1)): if (line.count('BEGIN HISTOGRAM')): title = line.split('BEGIN HISTOGRAM', 1)[1].strip() self.description['DrawOnly'].append(title) self.histos[title] = Histogram(f) f.close() class Histogram: def __init__(self, f): self.read_input(f) def read_input(self, f): self.description = {} self.data = [] for line in f: if (line.count('#',0,1)): if (line.count('END HISTOGRAM')): break else: line = line.rstrip() if line.count('='): linearray = line.split('=', 1) self.description[linearray[0]] = linearray[1] else: linearray = line.split('\t') if len(linearray) == 4: self.data.append({'LowEdge': float(linearray[0]), 'UpEdge': float(linearray[1]), 'Content': float(linearray[2]), 'Error': [float(linearray[3]),float(linearray[3])]}) elif len(linearray) == 5: self.data.append({'LowEdge': float(linearray[0]), 'UpEdge': float(linearray[1]), 'Content': float(linearray[2]), 'Error': [float(linearray[3]),float(linearray[4])]}) def write_datapoint(self, f, xval, xerr, yval, yerr): f.write(' \n') f.write(' \n' %(xerr, xval, xerr)) f.write(' \n' %(yerr[1], yval, yerr[0])) f.write(' \n') def write_datapointset_header(self, f): title = self.description.setdefault('Title', '') xlabel = self.description.setdefault('XLabel', '') ylabel = self.description.setdefault('YLabel', '') path = self.description.setdefault('AidaPath', None) if path is not None: path = path.replace('>', '>').replace('<', '<').replace('"', '"') f.write(' \n' % (os.path.abspath(path.replace(path.split('/')[-1], '')), title.replace('>', '>').replace('<', '<').replace('"', '"'))) f.write(' \n') f.write(' \n' % title.replace('>', '>').replace('<', '<').replace('"', '"')) f.write(' \n' % xlabel.replace('>', '>').replace('<', '<').replace('"', '"')) f.write(' \n' % ylabel.replace('>', '>').replace('<', '<').replace('"', '"')) f.write(' \n' % path) f.write(' \n' % (filename.split('/')[-1], path)) f.write(' \n') f.write(' \n' % xlabel.replace('>', '>').replace('<', '<').replace('"', '"')) f.write(' \n' % ylabel.replace('>', '>').replace('<', '<').replace('"', '"')) def write_datapointset_footer(self, f): f.write(' \n') def write_datapointset(self, f): self.write_datapointset_header(f) for bin, bindata in enumerate(self.data): xval = 0.5*(bindata['UpEdge'] + bindata['LowEdge']) #if bindata['UpEdge'] == bindata['LowEdge']: # xerr = 0.5 #else: # xerr = 0.5*(bindata['UpEdge'] - bindata['LowEdge']) xerr = 0.5*(bindata['UpEdge'] - bindata['LowEdge']) yval = bindata['Content'] yerr = bindata['Error'] self.write_datapoint(f, xval, xerr, yval, yerr) self.write_datapointset_footer(f) def remove_gaps(self): ## Only look at histograms which are present in the reference file: try: refhist = refdata.histos['/REF%s' % self.description['AidaPath']] except: return ## Check for differences in the binning and remove superfluous MC bins: if len(refhist.data) != len(self.data): numrm = abs(len(self.data) - len(refhist.data)) if numrm != 1: plural = "s" else: plural = "" logging.info("Stripping %d bin%s from %s" % (numrm, plural, self.description['AidaPath'])) newdata = [] for i in xrange(len(self.data)): if (len(refhist.data) == i): ## MC has additional bins above the upper edge of the refdata break if self.data[i]['LowEdge'] == refhist.data[i]['LowEdge'] and \ self.data[i]['UpEdge'] == refhist.data[i]['UpEdge']: newdata.append(self.data[i]) else: logging.debug('Deleted bin %d' % i) refhist.data.insert(i, self.data[i]) self.data = newdata ## Command line parsing import logging from optparse import OptionParser parser = OptionParser(usage=__doc__) parser.add_option("-R", "--rivet-refs", dest="USE_RIVETREFS", action="store_true", default=True, help="use the Rivet reference data files for comparison (default)") parser.add_option("--no-rivet-refs", dest="USE_RIVETREFS", action="store_false", default=True, help="don't use the Rivet reference data files for comparison") parser.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") parser.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") opts, args = parser.parse_args() ## Configure logging logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") if opts.USE_RIVETREFS: try: import rivet rivet.getAnalysisRefPaths() except: logging.error("Could not find the Rivet ref paths because the 'rivet' Python module could not be loaded") sys.exit(1) if opts.USE_RIVETREFS: if len(args) < 1: logging.error("Must specify at least the MC input file") sys.exit(1) if len(args) >= 1: REFFILES = [] INFILE = args[0] OUTFILE = args[0] if len(args) == 2: OUTFILE = args[1] if len(args) > 2: logging.error("Maximum of two arguments with the -R argument flag!") sys.exit(1) else: if len(args) < 2: logging.error("Must specify at least the reference file and the MC input file (or use the -R option)") sys.exit(1) if len(args) >= 2: REFFILES = [args[0]] INFILE = args[1] OUTFILE = args[1] if len(args) == 3: OUTFILE = args[2] if len(args) > 3: logging.error("Maximum of three arguments with the -R argument flag!") sys.exit(1) ## Convert the aida input files to flat files we can parse: tempdir = tempfile.mkdtemp('.gap_removal') filename = INFILE.replace(".aida", "") os.system("%s/aida2flat %s.aida > %s/%s.dat" % \ (os.path.dirname(os.path.realpath(sys.argv[0])), filename, tempdir, os.path.basename(filename))) mcdata = Inputdata(os.path.join(tempdir, os.path.basename(filename))) ## Build list of Rivet ref files if opts.USE_RIVETREFS: anas = set() for hpath in mcdata.description['DrawOnly']: ana = hpath[1:].split("/")[0] anas.add(ana) #print anas for a in anas: apath = rivet.findAnalysisRefFile(a+".aida") if apath: REFFILES.append(apath) break #print REFFILES ## Run over ref files refdatfiles = [] for rf in REFFILES: filename = rf.replace(".aida", "") os.system("%s/aida2flat %s.aida > %s/%s.dat" % \ (os.path.dirname(os.path.realpath(sys.argv[0])), filename, tempdir, os.path.basename(filename))) refdatfiles.append( os.path.join(tempdir, os.path.basename(filename)) ) refdata = Inputdata(refdatfiles) ## Clean up for i in os.listdir(tempdir): os.unlink('%s/%s' %(tempdir, i)) os.rmdir(tempdir) ## Remove gap bins for i in mcdata.description['DrawOnly']: mcdata.histos[i].remove_gaps() ## Write the new aida file with removed gap bins: f = open(OUTFILE, 'w') f.write('\n') f.write('\n') f.write('\n') f.write(' \n') for i in mcdata.description['DrawOnly']: mcdata.histos[i].write_datapointset(f) f.write('\n') f.close rivet-1.8.3/bin/rivet-rescale0000755000175000017500000003173012116077756014333 0ustar sunsun#!/usr/bin/env python """\ %prog [-r ] [-O ] [-b [-b ...]] [] Rescale histos in observable-file of AIDAFILE to the area of the corresponding histos in REFDATAPATH. REFDATAPATH can either be a single AIDA-file or a directory containing AIDA-files. By default the standard Rivet reference files are used. Observable definitions of the form /CDF_2000_S4155203/d01-x01-y01 1.0 can be used to specify an absolute normalisation (1.0, here) for a histogram rather than using the reference histo. If the --multiply switch is used, the ref histo area will be scaled by the given factor to give the target normalisation. You can also define bins to chop out in the observable-file in the same way as in chop_bins: /CDF_2000_S4155203/d01-x01-y01:0:35 1.0 This will chop the bins with Z-pT > 35 GeV and obtain a rescaling factor from that restricted bin range: note that the output histograms will be rescaled but *unchopped*. Only one bin definition can be used for each histogram, so the last bindef specified for that histo path will be the one which is applied. The bindefs are constructed in order from those in the obsfile, and then those given on the command line with the -b flag, like this: -b "/CDF_2000_S4155203/d01-x01-y01:5:135 2.0" Examples: * %prog out.aida This will return the histos in out.aida, scaled to match the overall normalisations of the Rivet ref data. * %prog -O observables.obs out.aida This will return the histos in out.aida, scaled by the bin definitions specified in observables.obs (and using the Rivet ref data again) * %prog -r path/to/CDF_2000_S4155203.aida \ -b "/CDF_2000_S4155203/d01-x01-y01:2:5" out.aida For this Z-boson pT-distribution, the normalisation to the provided ref data file is only applied between 2 < x < 5 GeV. """ import sys if sys.version_info[:3] < (2,4,0): print "rivet scripts require Python version >= 2.4.0... exiting" sys.exit(1) import os, re, logging from lighthisto import Histo # try: # from IPython.Shell import IPShellEmbed # ipshell = IPShellEmbed([]) # except: # logging.info("Ipython shell not available.") ## Try to load faster but non-standard cElementTree module try: import xml.etree.cElementTree as ET except ImportError: try: import cElementTree as ET except ImportError: try: import xml.etree.ElementTree as ET except: sys.stderr.write("Can't load the ElementTree XML parser: please install it!\n") sys.exit(1) def getHistosFromAIDA(aidafile): '''Get a dictionary of histograms indexed by name.''' if not re.match(r'.*\.aida$', aidafile): logging.debug("Error: input file '%s' is not an AIDA file" % aidafile) aidafilepath = os.path.abspath(aidafile) if not os.access(aidafilepath, os.R_OK): logging.debug("Error: cannot read from %s" % aidafile) histos = {} tree = ET.parse(aidafilepath) for dps in tree.findall("dataPointSet"): ## Get this histogram's path name dpsname = os.path.join(dps.get("path"), dps.get("name")) ## Is it a data histo? h = Histo.fromDPS(dps) h.isdata = dpsname.upper().startswith("/REF") if h.isdata: dpsname = dpsname.replace("/REF", "") histos[dpsname] = h return histos def getRefHistos(refpaths, analyses): """ Return dictionary of reference histos {name: histo}. refpaths can either be a single file or a directory. """ refhistos = {} if refpaths: for refpath in refpaths: if os.path.isfile(refpath): logging.debug("Reading ref histos from file %s" % refpath) refhistos = getHistosFromAIDA(refpath) elif os.path.isdir(refpath): if opts.fast: logging.debug("Fast mode - not loading all data-files") for ana in analyses: refaida = os.path.join(refpath, ana+".aida") if os.path.isfile(refaida): temp = getHistosFromAIDA(refaida) for k, v in temp.iteritems(): if not k in refhistos.keys(): refhistos[k] = v else: for aida in os.listdir(refpath): if aida.endswith(".aida"): temp = getHistosFromAIDA(os.path.join(refpath, aida)) for k, v in temp.iteritems(): if not k in refhistos.keys(): refhistos[k] = v logging.debug("Read ref histos from folder %s" % refpath) return refhistos def readObservableFile(obsfile): """ Read observables to normalise from file obsfile. Return-values are a list of the histo-names to normalise and a dictionary with name:newarea entries. """ obslist = set() obsnorms = {} bindefs = {} if obsfile is not None: try: f = open(obsfile, 'r') except: logging.error("Cannot open histo list file %s" % opts.OBSFILE) sys.exit(2) for line in f: stripped = line.strip() # Skip empty or commented lines if len(stripped) == 0 or stripped.startswith("#"): continue # Split the line to find out whether newarea is given in obsfile path, low, high, area = getBindef(line) bindefs[path] = (low, high) if area: obsnorms[path] = float(area) obslist.add(path) f.close() return obslist, obsnorms, bindefs def getBindef(line): """ Try to read bin definitions (xlow, xhigh, newarea) from single string. """ area = None # Try to read bin specs for chopping # Remove possible comments at the end of the line splitline = line.strip().rsplit("#")[0].split() try: path, low, high = splitline[0].split(":") except: path = splitline[0].split(":")[0] low = "" high = "" logging.debug("No bin range supplied for %s" % path) low = float(low) if low else None high = float(high) if high else None # Try to get area to normalise to logging.debug("Trying to read area to rescale to from bindef...") if len(splitline) == 2: try: area = float(splitline[1]) logging.debug("Success: %e" % area) except: logging.debug("Failed: %s" % splitline[1]) pass return (path, low, high, area) if __name__ == "__main__": from optparse import OptionParser, OptionGroup parser = OptionParser(usage=__doc__) parser.add_option("-O", "--obsfile", dest="OBSFILE", default=None, help="Specify a file with histograms (and bin ranges) that are to be normalised.") parser.add_option("-b", "--bins", dest="BINRANGES", action="append", default=[], help="Specify a histogram and bin range that is to be used. The format is `AIDAPATH:start:stop'.") parser.add_option("-r", "--refdir", dest="REFDIR", default=None, help="File of folder with reference histos") parser.add_option("-a", dest="AIDA", default=True, action="store_true", help="Produce AIDA output rather than FLAT") parser.add_option("-f", dest="AIDA", default=True, action="store_false", help="Produce FLAT output rather than AIDA") parser.add_option("--multiply", dest="MULTIPLY", default=False, action="store_true", help="Rescale histos using weight given as factor rather than new area") parser.add_option("-i", "--in-place", dest="IN_PLACE", default=False, action="store_true", help="Overwrite input file rather than making input-rescaled.aida") parser.add_option("--fast", default=False, action="store_true", help="Try loading only reference files from refpath that match analyses in input-file" ) verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") opts, args = parser.parse_args() ## Configure logging logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Check number of args if len(args) not in (1, 2): print "Usage: %s" % __doc__.splitlines()[0] sys.exit(1) ## Get MC histos histos = getHistosFromAIDA(args[0]) # Get unique analyses identifiers to speed up ref-data loading analyses = set([obs.split("/")[1] for obs in histos.keys()]) # Read in reference histos to get reference areas to normalise to refdirs = [] if opts.REFDIR: refdirs.append(opts.REFDIR) else: import rivet refdirs += rivet.getAnalysisRefPaths() refhistos = getRefHistos(refdirs, analyses) if len(refhistos) == 0 and not opts.MULTIPLY: logging.warning("You haven't specified any reference histograms. You'd better know what you're doing!") # Read in observables, if no bindefinitions are given in the file or the # command line, all observables will be renormalised if possible to the # corresponding refhisto area obslist, obsnorms, bindefs = readObservableFile(opts.OBSFILE) if opts.BINRANGES: for b in opts.BINRANGES: name = b.strip().split(":")[0] path, low, high, area = getBindef(b) obslist.add(name) bindefs[name] = (low, high) if area: obsnorms[name] = area if len(obslist) == 0 and not opts.BINRANGES: logging.info("No bin-definitions given: all histos will be rescaled to match the data") obslist = histos.keys() ## Create output filename base = args[0].split(".aida")[0] if len(args) > 1: outfile = args[1] else: if not opts.IN_PLACE: base += "-rescaled" if opts.AIDA: outfile = base + ".aida" else: outfile = base + ".dat" aidaheader = """ """ # Open file for output f = open(outfile, "w") if opts.AIDA: f.write(aidaheader) # Iterate over all histos for name, histo in histos.iteritems(): # Don't normalise all histos found if name in obslist: # Find out whether ref-histo is given if name in refhistos.keys(): logging.debug("Rescaling to ref-histo for %s" % name) tempref = refhistos[name] else: logging.debug("Not using refhisto for rescaling of %s" % name) tempref = histos[name] # Try to chop bins if name in bindefs.keys(): logging.debug("Using bindefs for rescaling of %s" % name) tempref = tempref.chop(bindefs[name]) tempold = histos[name].chop(bindefs[name]) else: logging.debug("Not using bindefs for rescaling of %s" % name) #tempref = refhistos[name] tempold = histos[name] # Get old and new histogram areas oldarea = tempold.getArea() if name in obsnorms.keys(): # Check if we want to scale histos by a factor if opts.MULTIPLY: newarea = oldarea*obsnorms[name] else: # Rescale to manually given new area newarea = obsnorms[name] # Rescale this histo to ref-histo area else: newarea = tempref.getArea() if not oldarea == 0.0: scalefactor = newarea/oldarea else: scalefactor= 0.0 if scalefactor != 1.0 and scalefactor > 0.0: oldarea = histos[name].getArea() newarea = histos[name].getArea() * scalefactor # Scale histo logging.info("Rescaling %s by factor %.3e (area %.3e -> %.3e)" % (name, scalefactor, oldarea, newarea)) renormed = histos[name].renormalise(newarea) # Write to file if opts.AIDA: f.write(renormed.asAIDA()) else: f.write(renormed.asFlat()) continue ## Fallback to no rescaling if loop is not escaped early if opts.AIDA: f.write(histos[name].asAIDA()) else: f.write(histos[name].asFlat()) if opts.AIDA: f.write("") logging.debug("Output written to %s" % outfile) rivet-1.8.3/bin/rivet-config.in0000644000175000017500000000601312116077756014560 0ustar sunsun#! /usr/bin/env bash ## -*- sh -*- ## @configure_input@ ## These variables need to exist ## Note no use of $DESTDIR... we ignore it so that destdir can be used ## for temp installs later copied to / prefix=@prefix@ exec_prefix=@exec_prefix@ datarootdir=@datarootdir@ tmp=$(echo $* | egrep -- '--\|-\') if test $# -eq 0 || test -n "$tmp"; then echo "rivet-config: configuration tool for the Rivet generator validation system" echo " http://projects.hepforge.org/rivet/" echo echo "Usage: $( basename $0 ) [--help|-h] | " echo " [--{prefix,datadir,libdir,includedir}] | " echo " [--{cppflags,ldflags,ldlibs}] | " echo " [--version]" echo "Options:" echo " --help | -h : show this help message" echo echo " --prefix : show the installation prefix (cf. autoconf)" echo " --includedir : show the path to the directory containing the Rivet headers" echo " --libdir : show the path to the directory containing the Rivet libraries" echo " --datadir : show the path to the directory containing Rivet data" echo echo " --pythonpath : show the path(s) to the directory containing Rivet Python modules" echo " --cppflags : returns a Rivet '-I' string for insertion into CPPFLAGS" echo " --ldflags : returns a Rivet '-L' string for insertion into LDFLAGS" echo " --libs : returns a Rivet '-l' string for insertion into LIBS or LIBADD" echo echo " --version : returns Rivet release version number" fi OUT="" ## "Atomic" build info, for "roll your own build" obsessives tmp=$( echo "$*" | egrep -- '--\') test -n "$tmp" && OUT="$OUT @prefix@" tmp=$( echo "$*" | egrep -- '--\') test -n "$tmp" && OUT="$OUT @includedir@" tmp=$( echo "$*" | egrep -- '--\') test -n "$tmp" && OUT="$OUT @libdir@" tmp=$( echo "$*" | egrep -- '--\') test -n "$tmp" && OUT="$OUT @datadir@/@PACKAGE_TARNAME@" tmp=$( echo "$*" | egrep -- '--\') test -n "$tmp" && OUT="$OUT @RIVET_PYTHONPATH@" ## "Pre-rolled" build info tmp=$( echo "$*" | egrep -- '--\') if test -n "$tmp"; then irivet="@includedir@" test -n "$irivet" && OUT="$OUT -I${irivet}" ihepmc="@HEPMCINCPATH@" test -n "$ihepmc" && OUT="$OUT -I${ihepmc}" ifastjet="@FASTJETINCPATH@" test -n "$ifastjet" && OUT="$OUT -I${ifastjet}" igsl="@GSLINCPATH@" test -n "$igsl" && OUT="$OUT -I${igsl}" iboost="@BOOSTINCPATH@" test -n "$iboost" && OUT="$OUT -I${iboost}" fi tmp=$( echo "$*" | egrep -- '--\') if test -n "$tmp"; then lrivet="@libdir@" test -n "$lrivet" && OUT="$OUT -L${lrivet}" lhepmc="@HEPMCLIBPATH@" test -n "$lhepmc" && OUT="$OUT -L${lhepmc}" lfastjet="@FASTJETLIBPATH@" test -n "$lfastjet" && OUT="$OUT -L${lfastjet}" fi tmp=$( echo "$*" | egrep -- '--\|--\') test -n "$tmp" && OUT="$OUT -lRivet" ## Version tmp=$( echo "$*" | egrep -- '--\') test -n "$tmp" && echo @PACKAGE_VERSION@ echo $OUT rivet-1.8.3/bin/aida2root0000755000175000017500000002614412116077756013455 0ustar sunsun#! /usr/bin/env python """\ %prog aidafile [aidafile2 ...] Verify in the ROOT user manual what needs to be setup for use of ROOT with python For example, additional setup steps such as this may be required: setup setenv PYTHONDIR /usr setenv PATH $ROOTSYS/bin:$PYTHONDIR/bin:$PATH setenv LD_LIBRARY_PATH $ROOTSYS/lib:$PYTHONDIR/lib/python2.6:$LD_LIBRARY_PATH setenv PYTHONPATH $ROOTSYS/lib:$PYTHONDIR/lib/python2.6 """ import ROOT ROOT.PyConfig.IgnoreCommandLineOptions = True import sys if sys.version_info[:3] < (2,4,0): print "rivet scripts require Python version >= 2.4.0... exiting" sys.exit(1) import os, array try: from ROOT import ROOT, TGraphAsymmErrors, TGraph2DErrors, TH1F, TH2F, TFile except: sys.stderr.write("Couldn't find PyROOT module. If ROOT is installed, PyROOT probably is too, but it's not currently accessible\n") foundpyroot = False if os.environ.has_key("ROOTSYS"): ROOTSYS = os.environ["ROOTSYS"] ROOTLIBDIR = os.path.join("ROOTSYS", "lib") if os.path.exists(ROOTLIBDIR): from glob import glob if glob(os.path.join(ROOTLIBDIR, "libPyROOT.*")) and glob(os.path.join(ROOTLIBDIR, "ROOT.py")): foundpyroot = True if foundpyroot: sys.stderr.write("It looks like you want to put %s in your LD_LIBRARY_PATH and PYTHONPATH shell variables.\n" % ROOTLIBDIR) else: sys.stderr.write("You should make sure that the directory containing libPyROOT and ROOT.py is in your LD_LIBRARY_PATH and PYTHONPATH shell variables.\n") sys.stderr.write("You can test if PyROOT is properly set up by calling 'import ROOT' at the interactive Python shell\n") sys.exit(1) ## Try to load faster but non-standard cElementTree module try: import xml.etree.cElementTree as ET except ImportError: try: import cElementTree as ET except ImportError: try: import xml.etree.ElementTree as ET except: sys.stderr.write("Can't load the ElementTree XML parser: please install it!\n") sys.exit(1) class Histo: def __init__(self, nDim): self._points = [] self.name = "" self.title = "" self._nDim = nDim def addPoint(self, dp): if dp.dimensionality() != self._nDim: er = "Tried to add a datapoint of dimensionality " + str(dp.dimensionality()) + " to a histogram of dimensionality " + str(self._nDim) sys.stderr.write(er) sys.exit(1) self._points.append(dp) def numPts(self): return len(self._points) def asTGraph(self): tg = TGraph() tg.SetName(self.name) tg.SetTitle(self.title) return tg def asHisto(self): tg = self.asTGraph() histo = tg.Histogram().Clone() return histo @staticmethod def equalFloats(left, right, precision=1.e-6): try: test = abs((left - right) / (left + right)) return test < precision except ZeroDivisionError: if left * right < 0.: return False else: return True return False class Histo2D(Histo): def __init__(self): Histo.__init__(self,3) def asTGraph(self): xs = array.array("d", []) ex = array.array("d", []) ys = array.array("d", []) ey = array.array("d", []) zs = array.array("d", []) ez = array.array("d", []) for pt in self._points: x = pt.mean(0) erx = pt.er(0) y = pt.mean(1) ery = pt.er(1) z = pt.mean(2) erz = pt.er(2) xs.append(x) ex.append(erx) ys.append(y) ey.append(ery) zs.append(z) ez.append(erz) if self.numPts() == 0: tg = TGraph2DErrors() er = "Tried to create TGraph2DErrors called " + self.name + " with zero datapoints" else: tg = TGraph2DErrors(self.numPts(), xs, ys, zs, ex, ey, ez) tg.SetTitle(self.title) tg.SetName(self.name.replace("-", "_")) return tg def asTHisto(self): if self.numPts() == 0: histo = TH2F() histo.SetName(self.name) return histo tmpXEdges = [] tmpYEdges = [] for pt in self._points: tmpXEdges.append(pt.lowEdge(0)) tmpXEdges.append(pt.highEdge(0)) tmpYEdges.append(pt.lowEdge(1)) tmpYEdges.append(pt.highEdge(1)) sortedX = sorted(tmpXEdges) sortedY = sorted(tmpYEdges) xBinEdges = array.array("d", [sortedX[0]]) yBinEdges = array.array("d", [sortedY[0]]) for edge in sortedX: if not Histo.equalFloats(edge, xBinEdges[-1]): xBinEdges.append(edge) for edge in sortedY: if not Histo.equalFloats(edge, yBinEdges[-1]): yBinEdges.append(edge) histo = TH2F(self.name, self.title, len(xBinEdges)-1, xBinEdges, len(yBinEdges)-1, yBinEdges) histo.Sumw2() for pt in self._points: bin = histo.FindBin(pt.value(0), pt.value(1)) histo.SetBinContent(bin, pt.value(2)) histo.SetBinError(bin, pt.er(2)) return histo class Histo1D(Histo): def __init__(self): Histo.__init__(self,2) def asTGraph(self): xerrminus = array.array("d", []) xerrplus = array.array("d", []) xval = array.array("d", []) yval = array.array("d", []) yerrminus = array.array("d", []) yerrplus = array.array("d", []) for pt in self._points: x = pt.value(0) xplus = pt.erUp(0) xminus = pt.erDn(0) y = pt.value(1) yplus = pt.erUp(1) yminus = pt.erDn(1) xval.append(x) xerrminus.append(xminus) xerrplus.append(xplus) yval.append(y) yerrminus.append(yminus) yerrplus.append(yplus) tg = TGraphAsymmErrors(self.numPts(), xval, yval, xerrminus, xerrplus, yerrminus, yerrplus) tg.SetTitle(self.title) tg.SetName(self.name.replace("-", "_")) return tg def asTHisto(self): if self.numPts() == 0: histo = TH1F() histo.SetName(self.name) return histo binEdges = array.array("d", []) binEdges.append(self._points[0].lowEdge(0)) bin = 0 binNumbers = [] for pt in self._points: lowEdge = pt.lowEdge(0) highEdge = pt.highEdge(0) if not Histo1D.equalFloats(lowEdge, binEdges[-1]): binEdges.append(lowEdge) bin = bin + 1 bin = bin + 1 binEdges.append(highEdge) binNumbers.append(bin) histo = TH1F(self.name, self.title, self.numPts(), binEdges) histo.Sumw2() for i, pt in enumerate(self._points): histo.SetBinContent(binNumbers[i], pt.value(1)) histo.SetBinError(binNumbers[i], pt.er(1)) return histo class DataPoint: def __init__(self): self._dims = 0 self._coords = [] self._erUps = [] self._erDns = [] def setCoord(self, val, up, down): self._dims = self._dims + 1 self._coords.append(val) self._erUps.append(up) self._erDns.append(down) def dimensionality(self): return self._dims def th(self, dim): th = "th" if dim == 1: th = "st" elif dim == 2: th = "nd" elif dim == 3: th = "rd" return th def checkDimensionality(self, dim): if dim >= self.dimensionality(): er = "Tried to obtain the " + str(dim) + self.th(dim) + " dimension of a " + str(self.dimensionality()) + " dimension DataPoint" sys.stderr.write(er) sys.exit(1) def value(self, dim): self.checkDimensionality(dim) return self._coords[dim] def erUp(self, dim): self.checkDimensionality(dim) return self._erUps[dim] def erDn(self, dim): self.checkDimensionality(dim) return self._erDns[dim] def mean(self, dim): val = self.value(dim) + 0.5 * (self.erUp(dim) - self.erDn(dim)) return val def er(self, dim): ee = 0.5 * (self.erUp(dim) + self.erDn(dim)) return ee def lowEdge(self, dim): return self.value(dim) - self.erDn(dim) def highEdge(self, dim): return self.value(dim) + self.erUp(dim) def mkHistoFromDPS(dps): dim = dps.get("dimension") is3D = False if dim == "3": myhist = Histo2D() is3D = True else: myhist = Histo1D() myhist.name = dps.get("name") myhist.title = dps.get("title") myhist.path = dps.get("path") points = dps.findall("dataPoint") numbins = len(points) for ptNum, point in enumerate(points): dp = DataPoint() for d, m in enumerate(point.findall("measurement")): val = float(m.get("value")) down = float(m.get("errorMinus")) up = float(m.get("errorPlus")) dp.setCoord(val, up, down) myhist.addPoint(dp) return myhist ################################## from optparse import OptionParser parser = OptionParser(usage=__doc__) parser.add_option("-s", "--smart-output", action="store_true", default=True, help="Write to output files with names based on the corresponding input filename", dest="SMARTOUTPUT") parser.add_option("-m", "--match", action="append", help="Only write out histograms whose $path/$name string matches these regexes", dest="PATHPATTERNS") parser.add_option("-g", "--tgraph", action="store_true", default=False, help="Store output as ROOT TGraphAsymmErrors or TGraph2DErrors", dest="TGRAPH") parser.add_option("-t", "--thisto", action="store_false", help="Store output as ROOT TH1 or TH2", dest="TGRAPH") opts, args = parser.parse_args() if opts.PATHPATTERNS is None: opts.PATHPATTERNS = [] if len(args) < 1: sys.stderr.write("Must specify at least one AIDA histogram file\n") sys.exit(1) for aidafile in args: tree = ET.parse(aidafile) histos = [] for dps in tree.findall("dataPointSet"): useThisDps = True if len(opts.PATHPATTERNS) > 0: useThisDps = False dpspath = os.path.join(dps.get("path"), dps.get("name")) for regex in opts.PATHPATTERNS: if re.compile(regex).search(dpspath): useThisDps = True break if useThisDps: histos.append(mkHistoFromDPS(dps)) if len(histos) > 0: if opts.SMARTOUTPUT: outfile = os.path.basename(aidafile).replace(".aida", ".root") out = TFile(outfile,"RECREATE") for h in sorted(histos): if opts.TGRAPH: h.asTGraph().Write() else: h.asTHisto().Write() out.Close() else: sys.stderr.write("ROOT objects must be written to a file") rivet-1.8.3/bin/rivet-chopbins0000755000175000017500000001414412116077756014522 0ustar sunsun#! /usr/bin/env python """%prog -b [ -b ... ] [...] Strip specified bins from data sets. Histograms not specified will be passed through without any chopping. Bins to be kept can be specified on command line via `-b' options. The format is -b AIDAPATH:start:stop where start and stop are x values contained in the first and last bins, respectively, that should be kept. They need not to be the bin-center but must only lie somewhere in the bin's x-range. To chop bins from different observables can be achieved by using the `-b' option multiple times. Example: %prog -b /ALEPH_1996_S3486095/d03-x01-y01:0.095:0.27 out.aida This will give you the all bins of the ALEPH 1-T distribution that are between the bins that contain the x-values 0.095 and 0.27 . TODO: * what if the same observable is mentioned multiple times? """ import sys if sys.version_info[:3] < (2,4,0): print "rivet scripts require Python version >= 2.4.0... exiting" sys.exit(1) import os, logging import lighthisto ## Try to load faster but non-standard cElementTree module try: import xml.etree.cElementTree as ET except ImportError: try: import cElementTree as ET except ImportError: try: import xml.etree.ElementTree as ET except: sys.stderr.write("Can't load the ElementTree XML parser: please install it!\n") sys.exit(1) def getBindef(line): """ Try to read bin definitions (xlow, xhigh) from single string. """ splitline = line.strip().split() try: path, low, high = splitline[0].split(":") except: logging.error("No bin-definition given for %s" % (line.strip())) sys.exit(1) if low == "": low = None else: low = float(low) if high == "": high = None else: high = float(high) return (path, low, high) def readObservableFile(obsfile): """ Read observables to normalise from file obsfile. Return-values are a list of the histo-names to normalise and a dictionary with name:newarea entries. """ bindefs = {} if obsfile is not None: try: f = open(obsfile, 'r') except: logging.error("Cannot open histo list file %s" % opts.OBSFILE) sys.exit(2) for line in f: stripped = line.strip() # Skip empty or commented lines if len(stripped) == 0 or stripped.startswith("#"): continue # Split the line to find out whether newarea is given in obsfile path, low, high = getBindef(line) bindefs[path] = (low, high) f.close() return bindefs if __name__ == "__main__": from optparse import OptionParser, OptionGroup parser = OptionParser(usage=__doc__) parser.add_option("-b", "--bins", action="append", help="Specify a histogram and bin range that is to be" " kept. The format is `AIDAPATH:start:stop'.") parser.add_option("-O", "--obsfile", default=None, help="Specify a file with bin-definitions to chop") parser.add_option("-o", "--out", dest="outdir", help="output directory (default: %default)") parser.add_option("-i", "--in-place", dest="IN_PLACE", default=False, action="store_true", help="Overwrite input file rather than making input-chop.aida") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", help="be very quiet") parser.set_defaults(bins=[], outdir=".", LOGLEVEL=logging.INFO) opts, args = parser.parse_args() ## Configure logging logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") if len(args) == 0: sys.stderr.write("Must specify at least one AIDA histogram file!\n") sys.exit(1) if len(opts.bins) == 0 and not opts.obsfile: sys.stderr.write("No bins specified, so I'm doing nothing!\n") sys.exit(1) # Read in bin-definitions from file if opts.obsfile: bindefs = readObservableFile(opts.obsfile) # If no file is given, try reading bin-definitions from CLOptions else: bindefs = {} for bd in opts.bins: try: path, low, high = getBindef(bd) bindefs[path] = (low, high) except: sys.stderr.write("Problem parsing bin definition `%s'" % (bd)) sys.exit(1) for aidafile in args: if not os.access(aidafile, os.R_OK): logging.error("%s can not be read" % aidafile) break base, ext = os.path.splitext(os.path.basename(aidafile)) ## Create output filename base = args[0].split(".aida")[0] if len(args) > 1: outfile = args[1] else: if not opts.IN_PLACE: base += "-chop" outfile = base + ".aida" chopfile = os.path.join(opts.outdir, outfile) outhistos = [] tree = ET.parse(aidafile) for dps in tree.findall("dataPointSet"): thishist = lighthisto.Histo.fromDPS(dps) if thishist.histopath in bindefs.keys(): outhistos.append(thishist.chop(bindefs[thishist.histopath])) else: outhistos.append(thishist) out = open(chopfile, "w") out.write('\n') out.write('\n') out.write('\n') out.write(' \n') out.write("\n\n".join([h.asAIDA() for h in sorted(outhistos)]) + "\n") out.write("\n") out.close() rivet-1.8.3/bin/rivet-merge-CDF_2012_NOTE108740000755000175000017500000000716612116077756016311 0ustar sunsun#! /usr/bin/env python """\ %prog Combine runs at different energies into a single .aida file containing the energy ratio plots in the CDF_2012_NOTE10874 analysis. """ import sys if sys.version_info[:3] < (2,4,0): print "rivet scripts require Python version >= 2.4.0... exiting" sys.exit(1) import os, logging from lighthisto import * ## Try to load faster but non-standard cElementTree module try: import xml.etree.cElementTree as ET except ImportError: try: import cElementTree as ET except ImportError: try: import xml.etree.ElementTree as ET except: sys.stderr.write("Can't load the ElementTree XML parser: please install it!\n") sys.exit(1) ########################################################## def CreateHistoList(histolist1, histolist2, EnergyRatioIndex): newHistoList = [] for m in range(3): histo1= histolist1[m] histo2= histolist2[m] VarIndex = m+1 histo3 = newHisto(histo1, histo2, VarIndex, EnergyRatioIndex) newHistoList.append(histo3) return newHistoList def newHisto(h1, h2, vIndex, eIndex): h3 = Histo() for binNum1, bin1 in enumerate(h1.getBins()): #getBins ensures bins are sorted for binNum2, bin2 in enumerate(h2.getBins()): if (binNum1 == binNum2) and (bin1.xlow == bin2.xlow) and (bin2.xhigh == bin2.xhigh): ratio = bin1.val / bin2.val newBin = Bin (xlow = bin1.xlow, xhigh = bin1.xhigh, val=ratio) err = FindError(bin1.val, bin2.val, bin1.getErr(), bin2.getErr() ) newBin.setErr(err) h3.addBin(newBin) h3.name = "d0%d-x01-y0%d"%(vIndex, eIndex) h3.path = "/CDF_2012_NOTE10874/" print ("Histogram %s created" %h3.title) return h3 #function to find error deltaF for F(X,Y) = X/Y def FindError(X, Y, deltaX, deltaY): error = abs(deltaX)/Y - abs(deltaY)*X/(Y**2) return error ######################################################## if __name__ == "__main__": plotparser = PlotParser() #will this work? Check. histos = {} from optparse import OptionParser parser = OptionParser(usage=__doc__) opts, aidafiles = parser.parse_args() keys = ['300', '900', '1960'] for counter in range(3): aidafile = aidafiles[counter] try: tree = ET.parse(aidafile) except: logging.error("%s can not be parsed as XML" % aidafile) sys.exit(1) for dps in tree.findall("dataPointSet"): useThis = True ## Check dataPointSet contains at least one measurement try: if dps.find('dataPoint').find('measurement') is None: useThis = False except AttributeError, err: logging.debug(err) if useThis: hist = Histo.fromDPS(dps) try: plotparser.updateHistoHeaders(hist) except ValueError, err: logging.debug(err) histos.setdefault(keys[counter], []).append(hist) for energy, hs in histos.items(): sorted(hs, key=lambda hist: hist.name) MyNewHistoList = CreateHistoList(histos['1960'], histos['300'], 4) MyNewHistoList += CreateHistoList(histos['900'], histos['300'], 5) MyNewHistoList += CreateHistoList(histos['1960'], histos['900'], 6) outfile = "RatioPlots.dat" out = open(outfile, "w") out.write("\n\n".join([h.asFlat() for h in sorted(MyNewHistoList)])) out.write("\n") out.close() print ("Successfully created new file %s" % outfile) ##################################################################### rivet-1.8.3/bin/Makefile.in0000644000175000017500000006233712116616064013703 0ustar sunsun# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ENABLE_PYEXT_TRUE@am__append_1 = $(RIVETPROGS) @ENABLE_PYEXT_FALSE@am__append_2 = $(RIVETPROGS) noinst_PROGRAMS = rivet-nopy$(EXEEXT) subdir = bin DIST_COMMON = $(am__dist_bin_SCRIPTS_DIST) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/rivet-buildplugin.in \ $(srcdir)/rivet-config.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = rivet-config rivet-buildplugin CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_rivet_nopy_OBJECTS = rivet_nopy-rivet-nopy.$(OBJEXT) rivet_nopy_OBJECTS = $(am_rivet_nopy_OBJECTS) rivet_nopy_DEPENDENCIES = $(top_builddir)/src/libRivet.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent rivet_nopy_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(rivet_nopy_LDFLAGS) $(LDFLAGS) -o $@ am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" am__dist_bin_SCRIPTS_DIST = aida2flat aida2root flat2aida root2flat \ compare-histos make-plots rivet rivet-mkanalysis \ rivet-buildplugin rivet-chopbins rivet-rmgaps rivet-rescale \ rivet-mergeruns rivet-mkhtml rivet-findid \ rivet-merge-CDF_2012_NOTE10874 SCRIPTS = $(bin_SCRIPTS) $(dist_bin_SCRIPTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/Rivet/Config depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(rivet_nopy_SOURCES) DIST_SOURCES = $(rivet_nopy_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ bin_SCRIPTS = rivet-config dist_bin_SCRIPTS = aida2flat aida2root flat2aida root2flat \ compare-histos make-plots $(am__append_1) EXTRA_DIST = $(am__append_2) RIVETPROGS = \ rivet \ rivet-mkanalysis rivet-buildplugin \ rivet-chopbins rivet-rmgaps rivet-rescale \ rivet-mergeruns rivet-mkhtml rivet-findid \ rivet-merge-CDF_2012_NOTE10874 rivet_nopy_SOURCES = rivet-nopy.cc rivet_nopy_CPPFLAGS = -I$(top_srcdir)/include $(AM_CPPFLAGS) rivet_nopy_LDADD = $(top_builddir)/src/libRivet.la -lHepMC rivet_nopy_LDFLAGS = -L$(HEPMCLIBPATH) all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): rivet-config: $(top_builddir)/config.status $(srcdir)/rivet-config.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ rivet-buildplugin: $(top_builddir)/config.status $(srcdir)/rivet-buildplugin.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list rivet-nopy$(EXEEXT): $(rivet_nopy_OBJECTS) $(rivet_nopy_DEPENDENCIES) $(EXTRA_rivet_nopy_DEPENDENCIES) @rm -f rivet-nopy$(EXEEXT) $(AM_V_CXXLD)$(rivet_nopy_LINK) $(rivet_nopy_OBJECTS) $(rivet_nopy_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) install-dist_binSCRIPTS: $(dist_bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(dist_bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-dist_binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(dist_bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rivet_nopy-rivet-nopy.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< rivet_nopy-rivet-nopy.o: rivet-nopy.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rivet_nopy_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT rivet_nopy-rivet-nopy.o -MD -MP -MF $(DEPDIR)/rivet_nopy-rivet-nopy.Tpo -c -o rivet_nopy-rivet-nopy.o `test -f 'rivet-nopy.cc' || echo '$(srcdir)/'`rivet-nopy.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/rivet_nopy-rivet-nopy.Tpo $(DEPDIR)/rivet_nopy-rivet-nopy.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rivet-nopy.cc' object='rivet_nopy-rivet-nopy.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rivet_nopy_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o rivet_nopy-rivet-nopy.o `test -f 'rivet-nopy.cc' || echo '$(srcdir)/'`rivet-nopy.cc rivet_nopy-rivet-nopy.obj: rivet-nopy.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rivet_nopy_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT rivet_nopy-rivet-nopy.obj -MD -MP -MF $(DEPDIR)/rivet_nopy-rivet-nopy.Tpo -c -o rivet_nopy-rivet-nopy.obj `if test -f 'rivet-nopy.cc'; then $(CYGPATH_W) 'rivet-nopy.cc'; else $(CYGPATH_W) '$(srcdir)/rivet-nopy.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/rivet_nopy-rivet-nopy.Tpo $(DEPDIR)/rivet_nopy-rivet-nopy.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rivet-nopy.cc' object='rivet_nopy-rivet-nopy.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(rivet_nopy_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o rivet_nopy-rivet-nopy.obj `if test -f 'rivet-nopy.cc'; then $(CYGPATH_W) 'rivet-nopy.cc'; else $(CYGPATH_W) '$(srcdir)/rivet-nopy.cc'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(SCRIPTS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binSCRIPTS install-dist_binSCRIPTS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binSCRIPTS uninstall-dist_binSCRIPTS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-binSCRIPTS install-data \ install-data-am install-dist_binSCRIPTS install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-binSCRIPTS uninstall-dist_binSCRIPTS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: rivet-1.8.3/bin/Makefile.am0000644000175000017500000000120612116077756013667 0ustar sunsunbin_SCRIPTS = rivet-config dist_bin_SCRIPTS = \ aida2flat aida2root flat2aida root2flat \ compare-histos make-plots EXTRA_DIST = RIVETPROGS = \ rivet \ rivet-mkanalysis rivet-buildplugin \ rivet-chopbins rivet-rmgaps rivet-rescale \ rivet-mergeruns rivet-mkhtml rivet-findid \ rivet-merge-CDF_2012_NOTE10874 if ENABLE_PYEXT dist_bin_SCRIPTS += $(RIVETPROGS) else EXTRA_DIST += $(RIVETPROGS) endif noinst_PROGRAMS = rivet-nopy rivet_nopy_SOURCES = rivet-nopy.cc rivet_nopy_CPPFLAGS = -I$(top_srcdir)/include $(AM_CPPFLAGS) rivet_nopy_LDADD = $(top_builddir)/src/libRivet.la -lHepMC rivet_nopy_LDFLAGS = -L$(HEPMCLIBPATH) rivet-1.8.3/bin/rivet-findid0000755000175000017500000001163712116077756014156 0ustar sunsun#! /usr/bin/env python """%prog ID [ID ...] %prog -- ID lookup helper for Rivet Looks up the Rivet analysis and other ID formats matching the given ID. Arguments: ID A paper ID in one of the following formats - arXiv: yymm.nnnn - arXiv: foo-bar/yymmnnn - SPIRES: [S]nnnnnnn - Inspire: [I]nnnnnn[n]""" import sys,re try: import xml.etree.cElementTree as ET except ImportError: try: import cElementTree as ET except ImportError: try: import xml.etree.ElementTree as ET except: sys.stderr.write("Can't load the ElementTree XML parser\n") sys.exit(1) def main(): ## Handle command line args import optparse op = optparse.OptionParser(usage=__doc__) opts, args = op.parse_args() if not args: op.print_help() exit(1) ## Set up some variables before the loop over args arxiv_pattern = re.compile('^\d\d[01]\d\.\d{4}$|^(hep-(ex|ph|th)|nucl-ex)/\d\d[01]\d{4}$') spires_pattern = re.compile('^(S|I)?(\d{6}\d?)$') ## Loop over requested IDs for N, id in enumerate(args): a_match = arxiv_pattern.match(id) s_match = spires_pattern.match(id) RESULT = {} if a_match: RESULT = try_arxiv(id) elif s_match: prefix = s_match.group(1) number = s_match.group(2) if prefix == 'S' and len(number) == 7: RESULT = try_spires(number) elif prefix == 'I': RESULT = try_inspire(number) else: if len(number) == 7: RESULT = try_spires(number) RESULT.update( try_inspire(number) ) else: sys.stderr.write('error Pattern %s does not match any known ID pattern.\n' % id) continue rivet_candidates = [] if 'inspire' in RESULT: rivet_candidates += try_rivet('I'+RESULT['inspire']) if not rivet_candidates and 'spires' in RESULT: rivet_candidates += try_rivet('S'+RESULT['spires']) if rivet_candidates: RESULT['rivet'] = rivet_candidates[0] if N > 0: print "" output(RESULT) def output(result): if not result.get('title'): return print 'title %s' % result['title'] ar = result.get('arxiv') if ar: print 'arxiv %s' % ar print 'arxiv_url http://arxiv.org/abs/%s' % ar sp = result.get('spires') if sp: print 'spires %s' % sp insp = result.get('inspire') if insp: print 'inspire %s' % insp print 'inspire_url http://inspirehep.net/record/%s' % insp tex = result.get('bibtex') if tex: print 'bibtex %s' % tex riv = result.get('rivet') if riv: print 'rivet %s' % riv def try_arxiv(id): url = 'http://inspirehep.net/search?p=eprint+%s&of=xm' % id ret = _search_inspire(url) if ret.get('arxiv') == id: return ret else: return {} def try_spires(id): url = 'http://inspirehep.net/search?p=key+%s&of=xm' % id ret = _search_inspire(url) if ret.get('spires') == id: return ret else: return {} def try_inspire(id): url = 'http://inspirehep.net/record/%s/export/xm' % id ret = _search_inspire(url) if ret.get('inspire') == id: return ret else: return {} def try_rivet(id): id = re.compile(id) import rivet ALL_ANALYSES = rivet.AnalysisLoader.analysisNames() return filter(id.search, ALL_ANALYSES) def _search_inspire(url): result = {} import urllib2 urlstream = urllib2.urlopen(url) tree = ET.parse(urlstream) for i in tree.getiterator('{http://www.loc.gov/MARC21/slim}controlfield'): if i.get('tag') == '001': result['inspire'] = i.text for i in tree.getiterator('{http://www.loc.gov/MARC21/slim}datafield'): if i.get('tag') == '035': entries = {} for c in i.getchildren(): for k,v in c.items(): if k=='code': entries[v] = c.text if entries.get('9') == 'SPIRESTeX': result['bibtex'] = entries['z'] if i.get('tag') == '037': entries = {} for c in i.getchildren(): for k,v in c.items(): if k=='code': entries[v] = c.text if entries.get('9') == 'arXiv': result['arxiv'] = entries['a'].replace('arXiv:','') elif i.get('tag') == '970': for c in i.getchildren(): if c.text[:7] == 'SPIRES-': result['spires'] = c.text[7:] elif i.get('tag') == '245': for c in i.getchildren(): result['title'] = c.text return result if __name__ == "__main__": main() rivet-1.8.3/configure0000755000175000017500000243516312116616066013002 0ustar sunsun#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for Rivet 1.8.3. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: rivet@projects.hepforge.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Rivet' PACKAGE_TARNAME='Rivet' PACKAGE_VERSION='1.8.3' PACKAGE_STRING='Rivet 1.8.3' PACKAGE_BUGREPORT='rivet@projects.hepforge.org' PACKAGE_URL='' ac_unique_file="src/Core/Analysis.cc" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS EMPTY AM_CXXFLAGS AM_CPPFLAGS ENABLE_PYEXT_FALSE ENABLE_PYEXT_TRUE SWIG_LIB SWIG RIVET_PYTHONPATH PYTHON_VERSION PYTHON PYTHON_USE_FALSE PYTHON_USE_TRUE WITHOUT_YAML_CPP_FALSE WITHOUT_YAML_CPP_TRUE WITH_YAML_CPP_FALSE WITH_YAML_CPP_TRUE YAML_CPPCPPFLAGS YAML_CPPINCNAME YAML_CPPINCPATH YAML_CPPINCPATH YAML_CPPLDLIBS YAML_CPPLDFLAGS YAML_CPPLIBNAME YAML_CPPLIBPATH YAML_CPPLIB YAML_CPPLIBNAME YAML_CPPLIBPATH WITHOUT_YAML_CPPLIB_FALSE WITHOUT_YAML_CPPLIB_TRUE WITHOUT_YAML_CPPINC_FALSE WITHOUT_YAML_CPPINC_TRUE WITH_YAML_CPPLIB_FALSE WITH_YAML_CPPLIB_TRUE WITH_YAML_CPPINC_FALSE WITH_YAML_CPPINC_TRUE YAML_CPPPATH WITH_ASCIIDOC_FALSE WITH_ASCIIDOC_TRUE ASCIIDOC ENABLE_PDFMANUAL_FALSE ENABLE_PDFMANUAL_TRUE WITH_PDFLATEX_FALSE WITH_PDFLATEX_TRUE PDFLATEX ENABLE_OBSOLETE_FALSE ENABLE_OBSOLETE_TRUE ENABLE_PRELIMINARY_FALSE ENABLE_PRELIMINARY_TRUE ENABLE_UNVALIDATED_FALSE ENABLE_UNVALIDATED_TRUE ENABLE_ANALYSES_FALSE ENABLE_ANALYSES_TRUE WITH_DOXYGEN_FALSE WITH_DOXYGEN_TRUE DOXYGEN FASTJETCONFIGLIBADD FJCONFIG WITHOUT_FASTJET_FALSE WITHOUT_FASTJET_TRUE WITH_FASTJET_FALSE WITH_FASTJET_TRUE FASTJETCPPFLAGS FASTJETINCNAME FASTJETINCPATH FASTJETINCPATH FASTJETLDLIBS FASTJETLDFLAGS FASTJETLIBNAME FASTJETLIBPATH FASTJETLIB FASTJETLIBNAME FASTJETLIBPATH WITHOUT_FASTJETLIB_FALSE WITHOUT_FASTJETLIB_TRUE WITHOUT_FASTJETINC_FALSE WITHOUT_FASTJETINC_TRUE WITH_FASTJETLIB_FALSE WITH_FASTJETLIB_TRUE WITH_FASTJETINC_FALSE WITH_FASTJETINC_TRUE FASTJETPATH HEPMC_VERSION WITHOUT_HEPMC_FALSE WITHOUT_HEPMC_TRUE WITH_HEPMC_FALSE WITH_HEPMC_TRUE HEPMCCPPFLAGS HEPMCINCNAME HEPMCINCPATH HEPMCINCPATH HEPMCLDLIBS HEPMCLDFLAGS HEPMCLIBNAME HEPMCLIBPATH HEPMCLIB UNAME HEPMCLIBNAME HEPMCLIBPATH WITHOUT_HEPMCLIB_FALSE WITHOUT_HEPMCLIB_TRUE WITHOUT_HEPMCINC_FALSE WITHOUT_HEPMCINC_TRUE WITH_HEPMCLIB_FALSE WITH_HEPMCLIB_TRUE WITH_HEPMCINC_FALSE WITH_HEPMCINC_TRUE HEPMCPATH WITHOUT_BOOSTINC_FALSE WITHOUT_BOOSTINC_TRUE WITH_BOOSTINC_FALSE WITH_BOOSTINC_TRUE BOOSTCPPFLAGS BOOSTINCNAME BOOSTINCPATH BOOSTINCPATH BOOSTPATH WITHOUT_GSLINC_FALSE WITHOUT_GSLINC_TRUE WITH_GSLINC_FALSE WITH_GSLINC_TRUE GSLCPPFLAGS GSLINCNAME GSLINCPATH GSLINCPATH GSLPATH WITHOUT_GSLINC_FALSE WITHOUT_GSLINC_TRUE WITHOUT_GSLLIB_FALSE WITHOUT_GSLLIB_TRUE WITHOUT_GSL_FALSE WITHOUT_GSL_TRUE WITH_GSLINC_FALSE WITH_GSLINC_TRUE WITH_GSLLIB_FALSE WITH_GSLLIB_TRUE WITH_GSL_FALSE WITH_GSL_TRUE GSL_LDFLAGS GSL_CXXFLAGS GSL_CPPFLAGS GSLINCPATH GSLPATH GSLCONFIG CXXCPP CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE ac_ct_CC CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL LN_S am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS LCG_TAG CXX LIBPATHVARNAME WITH_OSX_FALSE WITH_OSX_TRUE SWVERS VERSIONINFOFLAGS LT_OBJDIR AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules with_lcgtag enable_dependency_tracking enable_static enable_shared with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock with_gsl with_gsl_incpath with_boost with_boost_incpath with_hepmc with_hepmc_libpath with_hepmc_libname with_hepmc_incpath with_fastjet with_fastjet_libpath with_fastjet_libname with_fastjet_incpath enable_doxygen enable_analyses enable_unvalidated enable_preliminary enable_obsolete enable_pdfmanual with_yaml_cpp with_yaml_cpp_libpath with_yaml_cpp_libname with_yaml_cpp_incpath enable_pyext enable_debug enable_extra_warnings ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CC CFLAGS CPP CXXCPP GSLPATH GSLINCPATH BOOSTPATH BOOSTINCPATH HEPMCPATH HEPMCLIBPATH HEPMCLIBNAME HEPMCINCPATH FASTJETPATH FASTJETLIBPATH FASTJETLIBNAME FASTJETINCPATH YAML_CPPPATH YAML_CPPLIBPATH YAML_CPPLIBNAME YAML_CPPINCPATH PYTHON' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Rivet 1.8.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/Rivet] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Rivet 1.8.3:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0') --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-static[=PKGS] build static libraries [default=no] --enable-shared[=PKGS] build shared libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-doxygen don't try to make Doxygen documentation --disable-analyses don't try to build or install standard analyses --enable-unvalidated build and install unvalidated analyses --disable-preliminary build and install validated-but-preliminary analyses --disable-obsolete build and install now-obsolete analyses --disable-pdfmanual don't try to build or install the PDF manual --disable-pyext don't build Python module (default=build) --enable-debug build with debugging symbols [default=no] --enable-extra-warnings build with extra compiler warnings (recommended for developers) [default=no] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-lcgtag LCG platform tag, e.g. i686-slc5-gcc43-opt. Calculated automatically for Linux SLC and Mac OS X --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-gsl path to GSL library and header files --with-gsl path to gsl [$prefix and various standard locations] --with-gsl-incpath path to directory containing gsl headers [GSLPATH/include] --with-boost path to Boost [$prefix and various standard locations] --with-boost-incpath path to directory containing Boost headers [BOOSTPATH/include] --with-hepmc path to HepMC [$prefix and various standard locations] --with-hepmc-libpath path to directory containing HepMC library [HEPMCPATH/lib or HEPMCPATH/lib/HepMC] --with-hepmc-libname name to be used when linking the HepMC library [HepMC] --with-hepmc path to HepMC [$prefix and various standard locations] --with-hepmc-incpath path to directory containing HepMC headers [HEPMCPATH/include] --with-fastjet-libpath path to directory containing fastjet library [FASTJETPATH/lib or FASTJETPATH/lib/fastjet] --with-fastjet-libname name to be used when linking the fastjet library [fastjet] --with-fastjet path to fastjet [$prefix and various standard locations] --with-fastjet-incpath path to directory containing fastjet headers [FASTJETPATH/include] --with-yaml_cpp-libpath path to directory containing yaml-cpp library [YAML_CPPPATH/lib or YAML_CPPPATH/lib/yaml-cpp] --with-yaml_cpp-libname name to be used when linking the yaml-cpp library [yaml-cpp] --with-yaml_cpp path to yaml-cpp [$prefix and various standard locations] --with-yaml_cpp-incpath path to directory containing yaml-cpp headers [YAML_CPPPATH/include] Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CC C compiler command CFLAGS C compiler flags CPP C preprocessor CXXCPP C++ preprocessor GSLPATH path to gsl [$prefix and various standard locations] GSLINCPATH path to the directory containing the gsl header files [GSLPATH/include] BOOSTPATH path to Boost [$prefix and various standard locations] BOOSTINCPATH path to the directory containing the Boost header files [BOOSTPATH/include] HEPMCPATH path to HepMC [$prefix and various standard locations] HEPMCLIBPATH path to the directory containing the HepMC library [HEPMCPATH/lib or HEPMCPATH/lib/HepMC] HEPMCLIBNAME name to be used when linking the HepMC library [HepMC] HEPMCINCPATH path to the directory containing the HepMC header files [HEPMCPATH/include] FASTJETPATH path to fastjet [$prefix and various standard locations] FASTJETLIBPATH path to the directory containing the fastjet library [FASTJETPATH/lib or FASTJETPATH/lib/fastjet] FASTJETLIBNAME name to be used when linking the fastjet library [fastjet] FASTJETINCPATH path to the directory containing the fastjet header files [FASTJETPATH/include] YAML_CPPPATH path to yaml-cpp [$prefix and various standard locations] YAML_CPPLIBPATH path to the directory containing the yaml-cpp library [YAML_CPPPATH/lib or YAML_CPPPATH/lib/yaml-cpp] YAML_CPPLIBNAME name to be used when linking the yaml-cpp library [yaml-cpp] YAML_CPPINCPATH path to the directory containing the yaml-cpp header files [YAML_CPPPATH/include] PYTHON Python Executable Path Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Rivet configure 1.8.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_cxx_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------------ ## ## Report this to rivet@projects.hepforge.org ## ## ------------------------------------------ ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Rivet $as_me 1.8.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "$prefix" = "$PWD"; then as_fn_error $? "Installation into the build directory is not supported: use a different --prefix argument" "$LINENO" 5 fi ac_config_headers="$ac_config_headers include/Rivet/Config/DummyConfig.hh include/Rivet/Config/RivetConfig.hh include/Rivet/Config/BuildOptions.hh" am__api_version='1.11' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='Rivet' VERSION='1.8.3' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' ## Package-specific #defines cat >>confdefs.h <<_ACEOF #define RIVET_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define RIVET_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define RIVET_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define RIVET_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define RIVET_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF ## Set library version info code ## Set for version 1.8.3 VERSIONINFOFLAGS="-version-info 11:1:0" ## OS X LIBPATHVARNAME="LD_LIBRARY_PATH" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}sw_vers", so it can be a program name with args. set dummy ${ac_tool_prefix}sw_vers; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_SWVERS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$SWVERS"; then ac_cv_prog_SWVERS="$SWVERS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_SWVERS="${ac_tool_prefix}sw_vers" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi SWVERS=$ac_cv_prog_SWVERS if test -n "$SWVERS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SWVERS" >&5 $as_echo "$SWVERS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_SWVERS"; then ac_ct_SWVERS=$SWVERS # Extract the first word of "sw_vers", so it can be a program name with args. set dummy sw_vers; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_SWVERS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_SWVERS"; then ac_cv_prog_ac_ct_SWVERS="$ac_ct_SWVERS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_SWVERS="sw_vers" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_SWVERS=$ac_cv_prog_ac_ct_SWVERS if test -n "$ac_ct_SWVERS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_SWVERS" >&5 $as_echo "$ac_ct_SWVERS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_SWVERS" = x; then SWVERS="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac SWVERS=$ac_ct_SWVERS fi else SWVERS="$ac_cv_prog_SWVERS" fi if test x$SWVERS != x; then PROD_NAME=$($SWVERS -productName | cut -f 2 -d:) fi if test "$PROD_NAME" = "Mac OS X"; then WITH_OSX_TRUE= WITH_OSX_FALSE='#' else WITH_OSX_TRUE='#' WITH_OSX_FALSE= fi if test "$PROD_NAME" = "Mac OS X"; then MACOSX_DEPLOYMENT_TARGET=$($SWVERS -productVersion | cut -f 1,2 -d.) { $as_echo "$as_me:${as_lineno-$LINENO}: MACOSX_DEPLOYMENT_TARGET = $MACOSX_DEPLOYMENT_TARGET" >&5 $as_echo "$as_me: MACOSX_DEPLOYMENT_TARGET = $MACOSX_DEPLOYMENT_TARGET" >&6;} AM_CXXFLAGS="$AM_CXXFLAGS -Dunix" LIBPATHVARNAME="DYLD_LIBRARY_PATH" fi ## LCG platform tag # Check whether --with-lcgtag was given. if test "${with_lcgtag+set}" = set; then : withval=$with_lcgtag; fi LCG_TAG="$with_lcgtag" if test "x$LCG_TAG" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: Calculating LCG platform tag from system properties" >&5 $as_echo "$as_me: Calculating LCG platform tag from system properties" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OS type" >&5 $as_echo_n "checking for OS type... " >&6; } os=UNKNOWN distribution=`uname` if `echo $distribution | grep -i "Linux" &> /dev/null`; then os=LINUX; fi if test -e "/etc/redhat-release"; then distribution="redhat" sltest=`cat /etc/redhat-release | grep "Scientific Linux" 2> /dev/null` if test -n "$sltest"; then os=SLC sl_version=`cat /etc/redhat-release | cut -f5 -d" "` sl_major=`echo $sl_version | cut -f1 -d.` distribution="slc${sl_major}" fi fi ## Test for Mac OS X SW_VERS="" #AC_PATH_PROG([SWVERS], [sw_vers]) if test -x "$SWVERS"; then os=OSX osx_version=`sw_vers -productVersion | cut -f1,2 -d.` osx_major=`echo $osx_version | cut -f1 -d.` osx_minor=`echo $osx_version | cut -f2 -d.` distribution="mac$osx_major$osx_minor" fi ## TODO: deal with Windows ;( { $as_echo "$as_me:${as_lineno-$LINENO}: result: $distribution" >&5 $as_echo "$distribution" >&6; } ## Get architecture { $as_echo "$as_me:${as_lineno-$LINENO}: checking for architecture type" >&5 $as_echo_n "checking for architecture type... " >&6; } machine=`uname -m` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $machine" >&5 $as_echo "$machine" >&6; } ## Get compiler and version if test "$os" != "WINDOWS"; then if test -z "$CXX"; then # Extract the first word of "g++", so it can be a program name with args. set dummy g++; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_CXX+:} false; then : $as_echo_n "(cached) " >&6 else case $CXX in [\\/]* | ?:[\\/]*) ac_cv_path_CXX="$CXX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CXX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi CXX=$ac_cv_path_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -x "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc/g++ version" >&5 $as_echo_n "checking for gcc/g++ version... " >&6; } gcc_version=`$CXX --version | head -1 | cut -d" " -f3` gcc_major=`echo $gcc_version | cut -d. -f1` gcc_minor=`echo $gcc_version | cut -d. -f2` gcc_micro=`echo $gcc_version | cut -d. -f3` gcc_code="gcc${gcc_major}${gcc_minor}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_code" >&5 $as_echo "$gcc_code" >&6; } compiler_code="$gcc_code" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find $CXX to check for version!" >&5 $as_echo "$as_me: WARNING: Could not find $CXX to check for version!" >&2;} compiler_code="gccXX" fi else ## Try to find VC version... somehow! #import distutils.msvccompiler as msvc #vcversions = sorted(msvc.get_devstudio_versions()) #vcversion = vcversions[0] compiler_code="vc" #%s" % vcversion fi ## The "future-proof" platform tag LCGPLATFORM="${machine}-${distribution}-${compiler_code}-opt" ## Historical exceptions (confirmed as future LCG practice by Stefan Roiser) if test "$os" = "SLC"; then if test "$sl_major" -lt 5; then historical=yes fi fi if test "$os" = "OSX"; then if test "$osx_minor" -lt 6; then historical=yes distribution="osx$osx_major$osx_minor" fi fi if test "$historical" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: Using old style LCG platform tags" >&5 $as_echo "$as_me: Using old style LCG platform tags" >&6;} ## Different arch codes machine="ia32" if test `echo $machine | grep 64 &> /dev/null`; then machine="amd64"; fi ## Historical exceptions for GCC version if test "$compiler_code" = "gcc32" -a "$compiler_code" = "gcc40"; then compiler_code="$compiler_code$gcc_micro" fi LCGPLATFORM="${distribution}_${machine}_${compiler_code}" fi LCG_TAG="$LCGPLATFORM" fi { $as_echo "$as_me:${as_lineno-$LINENO}: LCG platform tag is '${LCG_TAG}'" >&5 $as_echo "$as_me: LCG platform tag is '${LCG_TAG}'" >&6;} ## Set default compiler flags if test "x$CXXFLAGS" == "x"; then CXXFLAGS="-O2"; fi ## Make compiler error messages more readable if gfilt is installed. ## Checks for programs. ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 $as_echo_n "checking whether the C++ compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C++ compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 $as_echo_n "checking for C++ compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=no fi enable_dlopen=yes case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf # Set options enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi link_all_deplibs=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu CC="$lt_save_CC" if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs_CXX=no ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: ## GNU Scientific Library # Check whether --with-gsl was given. if test "${with_gsl+set}" = set; then : withval=$with_gsl; fi ## Use a specified --with-gsl arg to set basic paths, if provided GSLCONFIG_PATH=$PATH if test -e "$with_gsl"; then GSLCONFIG_PATH=$with_gsl/bin:$GSLCONFIG_PATH GSLPATH="$with_gsl" GSLINCPATH="$GSLPATH/include" GSL_CPPFLAGS="-I$GSLINCPATH" GSL_CXXFLAGS="" GSL_LDFLAGS="-L$GSLPATH/lib -lgsl -lgslcblas -lm" fi ## Try to do better, using the gsl-config script # Extract the first word of "gsl-config", so it can be a program name with args. set dummy gsl-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GSLCONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $GSLCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GSLCONFIG="$GSLCONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $GSLCONFIG_PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GSLCONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GSLCONFIG=$ac_cv_path_GSLCONFIG if test -n "$GSLCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GSLCONFIG" >&5 $as_echo "$GSLCONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -x "$GSLCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: Using $GSLCONFIG to find GSL flags" >&5 $as_echo "$as_me: Using $GSLCONFIG to find GSL flags" >&6;} GSLPATH=`$GSLCONFIG --prefix` GSLINCPATH="$GSLPATH/include" GSL_CPPFLAGS=`$GSLCONFIG --cflags` GSL_CXXFLAGS=`$GSLCONFIG --cflags` GSL_LDFLAGS=`$GSLCONFIG --libs` fi ## If it's worked, propagate the variables and execute success arg if test -e "$GSLPATH"; then ## Otherwise execute the fail arg if true; then WITH_GSL_TRUE= WITH_GSL_FALSE='#' else WITH_GSL_TRUE='#' WITH_GSL_FALSE= fi if true; then WITH_GSLLIB_TRUE= WITH_GSLLIB_FALSE='#' else WITH_GSLLIB_TRUE='#' WITH_GSLLIB_FALSE= fi if true; then WITH_GSLINC_TRUE= WITH_GSLINC_FALSE='#' else WITH_GSLINC_TRUE='#' WITH_GSLINC_FALSE= fi if false; then WITHOUT_GSL_TRUE= WITHOUT_GSL_FALSE='#' else WITHOUT_GSL_TRUE='#' WITHOUT_GSL_FALSE= fi if false; then WITHOUT_GSLLIB_TRUE= WITHOUT_GSLLIB_FALSE='#' else WITHOUT_GSLLIB_TRUE='#' WITHOUT_GSLLIB_FALSE= fi if false; then WITHOUT_GSLINC_TRUE= WITHOUT_GSLINC_FALSE='#' else WITHOUT_GSLINC_TRUE='#' WITHOUT_GSLINC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: GSL include path is $GSLINCPATH" >&5 $as_echo "$as_me: GSL include path is $GSLINCPATH" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GSL CPPFLAGS is $GSL_CPPFLAGS" >&5 $as_echo "$as_me: GSL CPPFLAGS is $GSL_CPPFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GSL CXXFLAGS is $GSL_CXXFLAGS" >&5 $as_echo "$as_me: GSL CXXFLAGS is $GSL_CXXFLAGS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: GSL LDFLAGS is $GSL_LDFLAGS" >&5 $as_echo "$as_me: GSL LDFLAGS is $GSL_LDFLAGS" >&6;} else if false; then WITH_GSL_TRUE= WITH_GSL_FALSE='#' else WITH_GSL_TRUE='#' WITH_GSL_FALSE= fi if false; then WITH_GSLLIB_TRUE= WITH_GSLLIB_FALSE='#' else WITH_GSLLIB_TRUE='#' WITH_GSLLIB_FALSE= fi if false; then WITH_GSLINC_TRUE= WITH_GSLINC_FALSE='#' else WITH_GSLINC_TRUE='#' WITH_GSLINC_FALSE= fi if true; then WITHOUT_GSL_TRUE= WITHOUT_GSL_FALSE='#' else WITHOUT_GSL_TRUE='#' WITHOUT_GSL_FALSE= fi if true; then WITHOUT_GSLLIB_TRUE= WITHOUT_GSLLIB_FALSE='#' else WITHOUT_GSLLIB_TRUE='#' WITHOUT_GSLLIB_FALSE= fi if true; then WITHOUT_GSLINC_TRUE= WITHOUT_GSLINC_FALSE='#' else WITHOUT_GSLINC_TRUE='#' WITHOUT_GSLINC_FALSE= fi fi ## Define a bunch of case permutations ## We have a set of user-set variables: pkgpath=""; pkgincpath="" ## Also need some status variables: pkginc=no ## Don't know why this isn't working by default: test x${prefix} = xNONE && prefix=${ac_default_prefix} ## Environment variables for specifying paths ## "configure" option switches for specifying paths pkgpath=${GSLPATH} # Check whether --with-gsl was given. if test "${with_gsl+set}" = set; then : withval=$with_gsl; pkgpath=$with_gsl fi if test "$pkgpath"; then GSLPATH="$pkgpath"; fi pkgincpath=${GSLINCPATH} # Check whether --with-gsl-incpath was given. if test "${with_gsl_incpath+set}" = set; then : withval=$with_gsl_incpath; pkgincpath=$with_gsl_incpath fi ## Has this header been disabled? if test x$pkgpath = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: Not building against gsl" >&5 $as_echo "$as_me: Not building against gsl" >&6;} as_fn_error $? "GSL (GNU Scientific Library) is required" "$LINENO" 5 else ## Base paths pkgbases="$prefix $ac_default_prefix /usr /" if test "$pkgpath"; then pkgbases="$pkgpath"; fi ## Look for include files: first build the search list... incpaths="" if test "$pkgincpath"; then incpath=`echo $pkgincpath | sed -e 's://*:/:g' -e 's:/$::'` incpaths="$incpath" else for base in $pkgbases; do incpath=`echo "$base/include" | sed -e 's://*:/:g' -e 's:/$::'` incpaths="$incpaths $incpath" done fi if test "x$CEDAR_M4_DEBUG" != "x"; then echo "DEBUG: inc paths = $incpaths" fi ## Build package names incnames="gsl GSL gsl" if test "gsl" != "gsl"; then incnames="$incnames gsl GSL gsl" fi if test "gsl" != "gsl"; then incnames="$incnames gsl GSL gsl" fi ## .. and then do the search: for incpath in $incpaths; do for incname in $incnames; do fullincpath="$incpath/$incname" if test "x$CEDAR_M4_DEBUG" != "x"; then echo "Testing gsl inc path: $fullincpath" fi if test -d $fullincpath; then pkginc=yes break else pkginc=no; fi if test x$pkginc != xno; then break; fi done if test x$pkginc != xno; then break; fi done if test x$pkginc != xno; then GSLINCPATH="$incpath" inpath=${GSLINCPATH} abspath="" if test -d "$inpath"; then abspath=`cd $inpath && pwd` elif test -f "$inpath"; then dirpart=`dirname $inpath` localpart=`basename $inpath` abspath="`cd $dirpart && pwd`/$localpart" fi if test -z "$abspath"; then as_fn_error $? "Could not make absolute path GSLINCPATH from ${GSLINCPATH}" "$LINENO" 5 fi GSLINCPATH=$abspath GSLINCNAME="$incname" GSLCPPFLAGS="-I$GSLINCPATH" #echo cedar_SAFEPKGNAMEINCPATH : $cedar_SAFEPKGNAMEINCPATH { $as_echo "$as_me:${as_lineno-$LINENO}: Found gsl header directory at $incpath" >&5 $as_echo "$as_me: Found gsl header directory at $incpath" >&6;} else ## Last resort --- only tried if $pkgpath was specified if test x$pkgpath != x; then incpath="$pkgpath/include" if test -d "$incpath"; then GSLINCPATH=`echo $incpath | sed -e s:'/$':'':` inpath=${GSLINCPATH} abspath="" if test -d "$inpath"; then abspath=`cd $inpath && pwd` elif test -f "$inpath"; then dirpart=`dirname $inpath` localpart=`basename $inpath` abspath="`cd $dirpart && pwd`/$localpart" fi if test -z "$abspath"; then as_fn_error $? "Could not make absolute path GSLINCPATH from ${GSLINCPATH}" "$LINENO" 5 fi GSLINCPATH=$abspath GSLINCNAME="" GSLCPPFLAGS="-I$GSLINCPATH" pkginc=yes #AC_MSG_NOTICE([Found cedar_PkgName header directory at $incpath]) fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: gsl header directory was not found" >&5 $as_echo "$as_me: WARNING: gsl header directory was not found" >&2;} fi fi ## Execute pass/fail shell code if test "x$pkginc" = "xyes"; then true else true as_fn_error $? "GSL (GNU Scientific Library) is required" "$LINENO" 5 fi fi ## Export variables to automake if test x$pkgginc != xno; then WITH_GSLINC_TRUE= WITH_GSLINC_FALSE='#' else WITH_GSLINC_TRUE='#' WITH_GSLINC_FALSE= fi if test x$pkgginc = xno; then WITHOUT_GSLINC_TRUE= WITHOUT_GSLINC_FALSE='#' else WITHOUT_GSLINC_TRUE='#' WITHOUT_GSLINC_FALSE= fi oldCPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$GSLINCPATH" ac_fn_cxx_check_header_mongrel "$LINENO" "gsl/gsl_vector.h" "ac_cv_header_gsl_gsl_vector_h" "$ac_includes_default" if test "x$ac_cv_header_gsl_gsl_vector_h" = xyes; then : else as_fn_error $? "GSL vectors not found." "$LINENO" 5 fi CPPFLAGS=$oldCPPFLAGS ## Boost C++ header library ## Define a bunch of case permutations ## We have a set of user-set variables: pkgpath=""; pkgincpath="" ## Also need some status variables: pkginc=no ## Don't know why this isn't working by default: test x${prefix} = xNONE && prefix=${ac_default_prefix} ## Environment variables for specifying paths ## "configure" option switches for specifying paths pkgpath=${BOOSTPATH} # Check whether --with-boost was given. if test "${with_boost+set}" = set; then : withval=$with_boost; pkgpath=$with_boost fi if test "$pkgpath"; then BOOSTPATH="$pkgpath"; fi pkgincpath=${BOOSTINCPATH} # Check whether --with-boost-incpath was given. if test "${with_boost_incpath+set}" = set; then : withval=$with_boost_incpath; pkgincpath=$with_boost_incpath fi ## Has this header been disabled? if test x$pkgpath = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: Not building against Boost" >&5 $as_echo "$as_me: Not building against Boost" >&6;} as_fn_error $? "Boost is required" "$LINENO" 5 else ## Base paths pkgbases="$prefix $ac_default_prefix /usr /" if test "$pkgpath"; then pkgbases="$pkgpath"; fi ## Look for include files: first build the search list... incpaths="" if test "$pkgincpath"; then incpath=`echo $pkgincpath | sed -e 's://*:/:g' -e 's:/$::'` incpaths="$incpath" else for base in $pkgbases; do incpath=`echo "$base/include" | sed -e 's://*:/:g' -e 's:/$::'` incpaths="$incpaths $incpath" done fi if test "x$CEDAR_M4_DEBUG" != "x"; then echo "DEBUG: inc paths = $incpaths" fi ## Build package names incnames="Boost BOOST boost" if test "Boost" != "Boost"; then incnames="$incnames Boost BOOST boost" fi if test "Boost" != "Boost"; then incnames="$incnames Boost BOOST boost" fi ## .. and then do the search: for incpath in $incpaths; do for incname in $incnames; do fullincpath="$incpath/$incname" if test "x$CEDAR_M4_DEBUG" != "x"; then echo "Testing Boost inc path: $fullincpath" fi if test -d $fullincpath; then pkginc=yes break else pkginc=no; fi if test x$pkginc != xno; then break; fi done if test x$pkginc != xno; then break; fi done if test x$pkginc != xno; then BOOSTINCPATH="$incpath" inpath=${BOOSTINCPATH} abspath="" if test -d "$inpath"; then abspath=`cd $inpath && pwd` elif test -f "$inpath"; then dirpart=`dirname $inpath` localpart=`basename $inpath` abspath="`cd $dirpart && pwd`/$localpart" fi if test -z "$abspath"; then as_fn_error $? "Could not make absolute path BOOSTINCPATH from ${BOOSTINCPATH}" "$LINENO" 5 fi BOOSTINCPATH=$abspath BOOSTINCNAME="$incname" BOOSTCPPFLAGS="-I$BOOSTINCPATH" #echo cedar_SAFEPKGNAMEINCPATH : $cedar_SAFEPKGNAMEINCPATH { $as_echo "$as_me:${as_lineno-$LINENO}: Found Boost header directory at $incpath" >&5 $as_echo "$as_me: Found Boost header directory at $incpath" >&6;} else ## Last resort --- only tried if $pkgpath was specified if test x$pkgpath != x; then incpath="$pkgpath/include" if test -d "$incpath"; then BOOSTINCPATH=`echo $incpath | sed -e s:'/$':'':` inpath=${BOOSTINCPATH} abspath="" if test -d "$inpath"; then abspath=`cd $inpath && pwd` elif test -f "$inpath"; then dirpart=`dirname $inpath` localpart=`basename $inpath` abspath="`cd $dirpart && pwd`/$localpart" fi if test -z "$abspath"; then as_fn_error $? "Could not make absolute path BOOSTINCPATH from ${BOOSTINCPATH}" "$LINENO" 5 fi BOOSTINCPATH=$abspath BOOSTINCNAME="" BOOSTCPPFLAGS="-I$BOOSTINCPATH" pkginc=yes #AC_MSG_NOTICE([Found cedar_PkgName header directory at $incpath]) fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Boost header directory was not found" >&5 $as_echo "$as_me: WARNING: Boost header directory was not found" >&2;} fi fi ## Execute pass/fail shell code if test "x$pkginc" = "xyes"; then true else true as_fn_error $? "Boost is required" "$LINENO" 5 fi fi ## Export variables to automake if test x$pkgginc != xno; then WITH_BOOSTINC_TRUE= WITH_BOOSTINC_FALSE='#' else WITH_BOOSTINC_TRUE='#' WITH_BOOSTINC_FALSE= fi if test x$pkgginc = xno; then WITHOUT_BOOSTINC_TRUE= WITHOUT_BOOSTINC_FALSE='#' else WITHOUT_BOOSTINC_TRUE='#' WITHOUT_BOOSTINC_FALSE= fi oldCPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$BOOSTINCPATH" BOOSTERRMSG="You need at least version 1.34.0 of Boost for this installation." BOOSTERRMSG="$BOOSTERRMSG If you want to use Boost from a non-standard location," BOOSTERRMSG="$BOOSTERRMSG please specify '--with-boost-incpath=/path/to/boost_1_35/include'" BOOSTERRMSG="$BOOSTERRMSG as option to the configure script or run the rivet-bootstrap script " BOOSTERRMSG="$BOOSTERRMSG with the --install-boost option, or --boost=/path/to/boost" ac_fn_cxx_check_header_mongrel "$LINENO" "boost/foreach.hpp" "ac_cv_header_boost_foreach_hpp" "$ac_includes_default" if test "x$ac_cv_header_boost_foreach_hpp" = xyes; then : else as_fn_error $? "Boost foreach not found. $BOOSTERRMSG" "$LINENO" 5 fi ac_fn_cxx_check_header_mongrel "$LINENO" "boost/smart_ptr.hpp" "ac_cv_header_boost_smart_ptr_hpp" "$ac_includes_default" if test "x$ac_cv_header_boost_smart_ptr_hpp" = xyes; then : else as_fn_error $? "Boost smart_ptr not found. $BOOSTERRMSG" "$LINENO" 5 fi ac_fn_cxx_check_header_mongrel "$LINENO" "boost/lexical_cast.hpp" "ac_cv_header_boost_lexical_cast_hpp" "$ac_includes_default" if test "x$ac_cv_header_boost_lexical_cast_hpp" = xyes; then : else as_fn_error $? "Boost lexical_cast not found. $BOOSTERRMSG" "$LINENO" 5 fi ac_fn_cxx_check_header_mongrel "$LINENO" "boost/assign.hpp" "ac_cv_header_boost_assign_hpp" "$ac_includes_default" if test "x$ac_cv_header_boost_assign_hpp" = xyes; then : else as_fn_error $? "Boost assign not found. $BOOSTERRMSG" "$LINENO" 5 fi ac_fn_cxx_check_header_mongrel "$LINENO" "boost/random.hpp" "ac_cv_header_boost_random_hpp" "$ac_includes_default" if test "x$ac_cv_header_boost_random_hpp" = xyes; then : else as_fn_error $? "Boost random numbers not found. $BOOSTERRMSG" "$LINENO" 5 fi CPPFLAGS=$oldCPPFLAGS ## HepMC library ## Define a bunch of case permutations pkgpath="" pkglib=no; pkginc=no; pkggood=no ## Don't know why this isn't working by default: test x${prefix} = xNONE && prefix=${ac_default_prefix} ## Environment variables for specifying paths pkgpath=${HEPMCPATH} ## "configure" option switches for specifying paths # Check whether --with-hepmc was given. if test "${with_hepmc+set}" = set; then : withval=$with_hepmc; pkgpath=$with_hepmc fi if test "$pkgpath"; then HEPMCPATH="$pkgpath"; fi ## Has this lib been disabled? #echo "DEBUG: pkgpath = $pkgpath" if test x$pkgpath = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: Not building against HepMC" >&5 $as_echo "$as_me: Not building against HepMC" >&6;} if false; then WITH_HEPMCINC_TRUE= WITH_HEPMCINC_FALSE='#' else WITH_HEPMCINC_TRUE='#' WITH_HEPMCINC_FALSE= fi if false; then WITH_HEPMCLIB_TRUE= WITH_HEPMCLIB_FALSE='#' else WITH_HEPMCLIB_TRUE='#' WITH_HEPMCLIB_FALSE= fi if true; then WITHOUT_HEPMCINC_TRUE= WITHOUT_HEPMCINC_FALSE='#' else WITHOUT_HEPMCINC_TRUE='#' WITHOUT_HEPMCINC_FALSE= fi if true; then WITHOUT_HEPMCLIB_TRUE= WITHOUT_HEPMCLIB_FALSE='#' else WITHOUT_HEPMCLIB_TRUE='#' WITHOUT_HEPMCLIB_FALSE= fi as_fn_error $? "HepMC is required" "$LINENO" 5 else ## Check library and header ## Define a bunch of case permutations ## We have a set of user-set variables: pkgpath=""; pkglibpath=""; pkglibname="" ## Also need some status variables: pkglib=no ## Don't know why this isn't working by default: test x${prefix} = xNONE && prefix=${ac_default_prefix} ## Environment variables for specifying paths pkgpath=${HEPMCPATH} ## "configure" option switches for specifying paths # Check whether --with-hepmc was given. if test "${with_hepmc+set}" = set; then : withval=$with_hepmc; pkgpath=$with_hepmc fi if test "$pkgpath"; then HEPMCPATH="$pkgpath"; fi pkglibpath=${HEPMCLIBPATH} pkglibname=${HEPMCLIBFLAG} # Check whether --with-hepmc-libpath was given. if test "${with_hepmc_libpath+set}" = set; then : withval=$with_hepmc_libpath; pkglibpath=$with_hepmc_libpath fi # Check whether --with-hepmc-libname was given. if test "${with_hepmc_libname+set}" = set; then : withval=$with_hepmc_libname; pkglibname=$with_hepmc_libname fi ## Has this lib been disabled? if test x$pkgpath = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: Not building against HepMC" >&5 $as_echo "$as_me: Not building against HepMC" >&6;} pkglib=no else ## Base paths pkgbases="$prefix $ac_default_prefix /usr /" if test "$pkgpath"; then pkgbases="$pkgpath"; fi if test "x$CEDAR_M4_DEBUG" != "x"; then echo "DEBUG: $pkgpath -> $pkgbases" fi ## Build a list of library search locations, unless specified libdirnames="lib" ## Test for 64-bit mode and add lib64 as first choice ## library dir name if appropriate if test -z "$UNAME"; then # Extract the first word of "uname", so it can be a program name with args. set dummy uname; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_UNAME+:} false; then : $as_echo_n "(cached) " >&6 else case $UNAME in [\\/]* | ?:[\\/]*) ac_cv_path_UNAME="$UNAME" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_UNAME="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_UNAME" && ac_cv_path_UNAME="no" ;; esac fi UNAME=$ac_cv_path_UNAME if test -n "$UNAME"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNAME" >&5 $as_echo "$UNAME" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test x$UNAME != xno; then if test -n `$UNAME -m | grep 64`; then libdirnames="lib64 $libdirnames" fi fi libpaths="" if test "$pkglibpath"; then libpath=`echo $pkglibpath | sed -e 's://*:/:g' -e 's:/$::'` libpaths="$libpath" else ## Outer loop over lib / lib64 part for libdirname in $libdirnames; do ## Inner loop over base path for base in $pkgbases; do libpath=`echo "$base/$libdirname" | sed -e 's://*:/:g' -e 's:/$::'` libpaths="$libpaths $libpath" done done libpaths="$libpaths ./src" fi ## Use case permuatations on the package name (mixed, all-upper and ## all-lower), plus punctuation replacements. libnames="HepMC HEPMC hepmc" if test "HepMC" != "HepMC"; then libnames="$libnames HepMC HEPMC hepmc" fi if test "HepMC" != "HepMC"; then libnames="$libnames HepMC HEPMC hepmc" fi if test "$pkglibname"; then libnames=$pkglibname; fi ## Define library versions libversions="" if test x"" != x; then libversions="- " fi ## Look for library with various name permutations for libpath in $libpaths; do for libversion in $libversions ""; do for libname in $libnames; do for libextn in la so dylib dll a; do testpath="${libpath}/lib${libname}${libversion}.${libextn}" testpath=`echo $testpath | sed -e 's://*:/:g' -e 's:/$::'` if test "x$CEDAR_M4_DEBUG" != "x"; then echo "DEBUG: Testing $testpath" fi if test -e $testpath; then pkglib=yes break else pkglib=no fi done if test x$pkglib != xno; then break; fi done if test x$pkglib != xno; then break; fi done if test x$pkglib != xno; then break; fi done ## Announce success/failure and set variables if test x$pkglib != xno; then ## TODO: Can we just use $testpath here? libfullpath=`echo ${libpath}/lib${libname}${libversion}.${libextn}` libfullpath=`echo $libfullpath | sed -e 's://*:/:g' -e 's:/$::'` inpath=${libfullpath} abspath="" if test -d "$inpath"; then abspath=`cd $inpath && pwd` elif test -f "$inpath"; then dirpart=`dirname $inpath` localpart=`basename $inpath` abspath="`cd $dirpart && pwd`/$localpart" fi if test -z "$abspath"; then as_fn_error $? "Could not make absolute path libfullpath from ${libfullpath}" "$LINENO" 5 fi libfullpath=$abspath HEPMCLIB="$libfullpath" HEPMCLIBPATH=`dirname $libfullpath` ## TODO: Can we just use $libname here? HEPMCLIBNAME=`basename $libfullpath | sed -e s/'^lib'// -e s/'\.[a-zA-Z]*$'//` HEPMCLDFLAGS="-L$HEPMCLIBPATH" HEPMCLDLIBS="-l$HEPMCLIBNAME" { $as_echo "$as_me:${as_lineno-$LINENO}: Found HepMC library at ${libfullpath}" >&5 $as_echo "$as_me: Found HepMC library at ${libfullpath}" >&6;} else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: HepMC library was not found" >&5 $as_echo "$as_me: WARNING: HepMC library was not found" >&2;} fi ## Execute pass/fail shell code if test "x$pkglib" = "xyes"; then true else true pkglib=no fi fi ## Export variables to automake if test x$pkglib != xno; then WITH_HEPMCLIB_TRUE= WITH_HEPMCLIB_FALSE='#' else WITH_HEPMCLIB_TRUE='#' WITH_HEPMCLIB_FALSE= fi if test x$pkglib = xno; then WITHOUT_HEPMCLIB_TRUE= WITHOUT_HEPMCLIB_FALSE='#' else WITHOUT_HEPMCLIB_TRUE='#' WITHOUT_HEPMCLIB_FALSE= fi ## Define a bunch of case permutations ## We have a set of user-set variables: pkgpath=""; pkgincpath="" ## Also need some status variables: pkginc=no ## Don't know why this isn't working by default: test x${prefix} = xNONE && prefix=${ac_default_prefix} ## Environment variables for specifying paths ## "configure" option switches for specifying paths pkgpath=${HEPMCPATH} # Check whether --with-hepmc was given. if test "${with_hepmc+set}" = set; then : withval=$with_hepmc; pkgpath=$with_hepmc fi if test "$pkgpath"; then HEPMCPATH="$pkgpath"; fi pkgincpath=${HEPMCINCPATH} # Check whether --with-hepmc-incpath was given. if test "${with_hepmc_incpath+set}" = set; then : withval=$with_hepmc_incpath; pkgincpath=$with_hepmc_incpath fi ## Has this header been disabled? if test x$pkgpath = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: Not building against HepMC" >&5 $as_echo "$as_me: Not building against HepMC" >&6;} pkginc=no else ## Base paths pkgbases="$prefix $ac_default_prefix /usr /" if test "$pkgpath"; then pkgbases="$pkgpath"; fi ## Look for include files: first build the search list... incpaths="" if test "$pkgincpath"; then incpath=`echo $pkgincpath | sed -e 's://*:/:g' -e 's:/$::'` incpaths="$incpath" else for base in $pkgbases; do incpath=`echo "$base/include" | sed -e 's://*:/:g' -e 's:/$::'` incpaths="$incpaths $incpath" done fi if test "x$CEDAR_M4_DEBUG" != "x"; then echo "DEBUG: inc paths = $incpaths" fi ## Build package names incnames="HepMC HEPMC hepmc" if test "HepMC" != "HepMC"; then incnames="$incnames HepMC HEPMC hepmc" fi if test "HepMC" != "HepMC"; then incnames="$incnames HepMC HEPMC hepmc" fi ## .. and then do the search: for incpath in $incpaths; do for incname in $incnames; do fullincpath="$incpath/$incname" if test "x$CEDAR_M4_DEBUG" != "x"; then echo "Testing HepMC inc path: $fullincpath" fi if test -d $fullincpath; then pkginc=yes break else pkginc=no; fi if test x$pkginc != xno; then break; fi done if test x$pkginc != xno; then break; fi done if test x$pkginc != xno; then HEPMCINCPATH="$incpath" inpath=${HEPMCINCPATH} abspath="" if test -d "$inpath"; then abspath=`cd $inpath && pwd` elif test -f "$inpath"; then dirpart=`dirname $inpath` localpart=`basename $inpath` abspath="`cd $dirpart && pwd`/$localpart" fi if test -z "$abspath"; then as_fn_error $? "Could not make absolute path HEPMCINCPATH from ${HEPMCINCPATH}" "$LINENO" 5 fi HEPMCINCPATH=$abspath HEPMCINCNAME="$incname" HEPMCCPPFLAGS="-I$HEPMCINCPATH" #echo cedar_SAFEPKGNAMEINCPATH : $cedar_SAFEPKGNAMEINCPATH { $as_echo "$as_me:${as_lineno-$LINENO}: Found HepMC header directory at $incpath" >&5 $as_echo "$as_me: Found HepMC header directory at $incpath" >&6;} else ## Last resort --- only tried if $pkgpath was specified if test x$pkgpath != x; then incpath="$pkgpath/include" if test -d "$incpath"; then HEPMCINCPATH=`echo $incpath | sed -e s:'/$':'':` inpath=${HEPMCINCPATH} abspath="" if test -d "$inpath"; then abspath=`cd $inpath && pwd` elif test -f "$inpath"; then dirpart=`dirname $inpath` localpart=`basename $inpath` abspath="`cd $dirpart && pwd`/$localpart" fi if test -z "$abspath"; then as_fn_error $? "Could not make absolute path HEPMCINCPATH from ${HEPMCINCPATH}" "$LINENO" 5 fi HEPMCINCPATH=$abspath HEPMCINCNAME="" HEPMCCPPFLAGS="-I$HEPMCINCPATH" pkginc=yes #AC_MSG_NOTICE([Found cedar_PkgName header directory at $incpath]) fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: HepMC header directory was not found" >&5 $as_echo "$as_me: WARNING: HepMC header directory was not found" >&2;} fi fi ## Execute pass/fail shell code if test "x$pkginc" = "xyes"; then true else true pkginc=no fi fi ## Export variables to automake if test x$pkgginc != xno; then WITH_HEPMCINC_TRUE= WITH_HEPMCINC_FALSE='#' else WITH_HEPMCINC_TRUE='#' WITH_HEPMCINC_FALSE= fi if test x$pkgginc = xno; then WITHOUT_HEPMCINC_TRUE= WITHOUT_HEPMCINC_FALSE='#' else WITHOUT_HEPMCINC_TRUE='#' WITHOUT_HEPMCINC_FALSE= fi ## Execute pass/fail shell code if test "x$pkglib" = "xyes" && test "x$pkginc" = "xyes"; then #AC_MSG_NOTICE([cedar_PkgName paths verified]) pkggood="yes" else pkggood="no" as_fn_error $? "HepMC is required" "$LINENO" 5 fi fi ## Export variables to automake have_hepmc=no test x$pkggood != xno && have_hepmc=yes if test x$pkggood != xno; then WITH_HEPMC_TRUE= WITH_HEPMC_FALSE='#' else WITH_HEPMC_TRUE='#' WITH_HEPMC_FALSE= fi if test x$pkggood = xno; then WITHOUT_HEPMC_TRUE= WITHOUT_HEPMC_FALSE='#' else WITHOUT_HEPMC_TRUE='#' WITHOUT_HEPMC_FALSE= fi oldCPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$HEPMCINCPATH" if test -e "$HEPMCINCPATH/HepMC/HepMCDefs.h"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include "HepMC/HepMCDefs.h" int main() { std::cout << HEPMC_VERSION << std::endl; return 0; } _ACEOF else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include "HepMC/defs.h" int main() { std::cout << VERSION << std::endl; return 0; } _ACEOF fi if test -f conftest.cc; then $CXX $CPPFLAGS conftest.cc -o conftest 2>&1 1>&5 elif test -f conftest.C; then $CXX $CPPFLAGS conftest.C -o conftest 2>&1 1>&5 else $CXX $CPPFLAGS conftest.cpp -o conftest 2>&1 1>&5 fi hepmc_version=`./conftest` if test x$hepmc_version != x; then let hepmc_major=`echo "$hepmc_version" | cut -d. -f1` let hepmc_minor=`echo "$hepmc_version" | cut -d. -f2` fi rm -f conftest conftest.cpp conftest.cc conftest.C HEPMC_VERSION=$hepmc_major$hepmc_minor { $as_echo "$as_me:${as_lineno-$LINENO}: HepMC version is $hepmc_version -> $HEPMC_VERSION" >&5 $as_echo "$as_me: HepMC version is $hepmc_version -> $HEPMC_VERSION" >&6;} CPPFLAGS=$oldCPPFLAGS ## FastJet library ## Define a bunch of case permutations pkgpath="" pkglib=no; pkginc=no; pkggood=no ## Don't know why this isn't working by default: test x${prefix} = xNONE && prefix=${ac_default_prefix} ## Environment variables for specifying paths pkgpath=${FASTJETPATH} ## "configure" option switches for specifying paths # Check whether --with-fastjet was given. if test "${with_fastjet+set}" = set; then : withval=$with_fastjet; pkgpath=$with_fastjet fi if test "$pkgpath"; then FASTJETPATH="$pkgpath"; fi ## Has this lib been disabled? #echo "DEBUG: pkgpath = $pkgpath" if test x$pkgpath = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: Not building against fastjet" >&5 $as_echo "$as_me: Not building against fastjet" >&6;} if false; then WITH_FASTJETINC_TRUE= WITH_FASTJETINC_FALSE='#' else WITH_FASTJETINC_TRUE='#' WITH_FASTJETINC_FALSE= fi if false; then WITH_FASTJETLIB_TRUE= WITH_FASTJETLIB_FALSE='#' else WITH_FASTJETLIB_TRUE='#' WITH_FASTJETLIB_FALSE= fi if true; then WITHOUT_FASTJETINC_TRUE= WITHOUT_FASTJETINC_FALSE='#' else WITHOUT_FASTJETINC_TRUE='#' WITHOUT_FASTJETINC_FALSE= fi if true; then WITHOUT_FASTJETLIB_TRUE= WITHOUT_FASTJETLIB_FALSE='#' else WITHOUT_FASTJETLIB_TRUE='#' WITHOUT_FASTJETLIB_FALSE= fi as_fn_error $? "FastJet is required" "$LINENO" 5 else ## Check library and header ## Define a bunch of case permutations ## We have a set of user-set variables: pkgpath=""; pkglibpath=""; pkglibname="" ## Also need some status variables: pkglib=no ## Don't know why this isn't working by default: test x${prefix} = xNONE && prefix=${ac_default_prefix} ## Environment variables for specifying paths pkgpath=${FASTJETPATH} ## "configure" option switches for specifying paths # Check whether --with-fastjet was given. if test "${with_fastjet+set}" = set; then : withval=$with_fastjet; pkgpath=$with_fastjet fi if test "$pkgpath"; then FASTJETPATH="$pkgpath"; fi pkglibpath=${FASTJETLIBPATH} pkglibname=${FASTJETLIBFLAG} # Check whether --with-fastjet-libpath was given. if test "${with_fastjet_libpath+set}" = set; then : withval=$with_fastjet_libpath; pkglibpath=$with_fastjet_libpath fi # Check whether --with-fastjet-libname was given. if test "${with_fastjet_libname+set}" = set; then : withval=$with_fastjet_libname; pkglibname=$with_fastjet_libname fi ## Has this lib been disabled? if test x$pkgpath = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: Not building against fastjet" >&5 $as_echo "$as_me: Not building against fastjet" >&6;} pkglib=no else ## Base paths pkgbases="$prefix $ac_default_prefix /usr /" if test "$pkgpath"; then pkgbases="$pkgpath"; fi if test "x$CEDAR_M4_DEBUG" != "x"; then echo "DEBUG: $pkgpath -> $pkgbases" fi ## Build a list of library search locations, unless specified libdirnames="lib" ## Test for 64-bit mode and add lib64 as first choice ## library dir name if appropriate if test -z "$UNAME"; then # Extract the first word of "uname", so it can be a program name with args. set dummy uname; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_UNAME+:} false; then : $as_echo_n "(cached) " >&6 else case $UNAME in [\\/]* | ?:[\\/]*) ac_cv_path_UNAME="$UNAME" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_UNAME="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_UNAME" && ac_cv_path_UNAME="no" ;; esac fi UNAME=$ac_cv_path_UNAME if test -n "$UNAME"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNAME" >&5 $as_echo "$UNAME" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test x$UNAME != xno; then if test -n `$UNAME -m | grep 64`; then libdirnames="lib64 $libdirnames" fi fi libpaths="" if test "$pkglibpath"; then libpath=`echo $pkglibpath | sed -e 's://*:/:g' -e 's:/$::'` libpaths="$libpath" else ## Outer loop over lib / lib64 part for libdirname in $libdirnames; do ## Inner loop over base path for base in $pkgbases; do libpath=`echo "$base/$libdirname" | sed -e 's://*:/:g' -e 's:/$::'` libpaths="$libpaths $libpath" done done libpaths="$libpaths ./src" fi ## Use case permuatations on the package name (mixed, all-upper and ## all-lower), plus punctuation replacements. libnames="fastjet FASTJET fastjet" if test "fastjet" != "fastjet"; then libnames="$libnames fastjet FASTJET fastjet" fi if test "fastjet" != "fastjet"; then libnames="$libnames fastjet FASTJET fastjet" fi if test "$pkglibname"; then libnames=$pkglibname; fi ## Define library versions libversions="" if test x"" != x; then libversions="- " fi ## Look for library with various name permutations for libpath in $libpaths; do for libversion in $libversions ""; do for libname in $libnames; do for libextn in la so dylib dll a; do testpath="${libpath}/lib${libname}${libversion}.${libextn}" testpath=`echo $testpath | sed -e 's://*:/:g' -e 's:/$::'` if test "x$CEDAR_M4_DEBUG" != "x"; then echo "DEBUG: Testing $testpath" fi if test -e $testpath; then pkglib=yes break else pkglib=no fi done if test x$pkglib != xno; then break; fi done if test x$pkglib != xno; then break; fi done if test x$pkglib != xno; then break; fi done ## Announce success/failure and set variables if test x$pkglib != xno; then ## TODO: Can we just use $testpath here? libfullpath=`echo ${libpath}/lib${libname}${libversion}.${libextn}` libfullpath=`echo $libfullpath | sed -e 's://*:/:g' -e 's:/$::'` inpath=${libfullpath} abspath="" if test -d "$inpath"; then abspath=`cd $inpath && pwd` elif test -f "$inpath"; then dirpart=`dirname $inpath` localpart=`basename $inpath` abspath="`cd $dirpart && pwd`/$localpart" fi if test -z "$abspath"; then as_fn_error $? "Could not make absolute path libfullpath from ${libfullpath}" "$LINENO" 5 fi libfullpath=$abspath FASTJETLIB="$libfullpath" FASTJETLIBPATH=`dirname $libfullpath` ## TODO: Can we just use $libname here? FASTJETLIBNAME=`basename $libfullpath | sed -e s/'^lib'// -e s/'\.[a-zA-Z]*$'//` FASTJETLDFLAGS="-L$FASTJETLIBPATH" FASTJETLDLIBS="-l$FASTJETLIBNAME" { $as_echo "$as_me:${as_lineno-$LINENO}: Found fastjet library at ${libfullpath}" >&5 $as_echo "$as_me: Found fastjet library at ${libfullpath}" >&6;} else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: fastjet library was not found" >&5 $as_echo "$as_me: WARNING: fastjet library was not found" >&2;} fi ## Execute pass/fail shell code if test "x$pkglib" = "xyes"; then true else true pkglib=no fi fi ## Export variables to automake if test x$pkglib != xno; then WITH_FASTJETLIB_TRUE= WITH_FASTJETLIB_FALSE='#' else WITH_FASTJETLIB_TRUE='#' WITH_FASTJETLIB_FALSE= fi if test x$pkglib = xno; then WITHOUT_FASTJETLIB_TRUE= WITHOUT_FASTJETLIB_FALSE='#' else WITHOUT_FASTJETLIB_TRUE='#' WITHOUT_FASTJETLIB_FALSE= fi ## Define a bunch of case permutations ## We have a set of user-set variables: pkgpath=""; pkgincpath="" ## Also need some status variables: pkginc=no ## Don't know why this isn't working by default: test x${prefix} = xNONE && prefix=${ac_default_prefix} ## Environment variables for specifying paths ## "configure" option switches for specifying paths pkgpath=${FASTJETPATH} # Check whether --with-fastjet was given. if test "${with_fastjet+set}" = set; then : withval=$with_fastjet; pkgpath=$with_fastjet fi if test "$pkgpath"; then FASTJETPATH="$pkgpath"; fi pkgincpath=${FASTJETINCPATH} # Check whether --with-fastjet-incpath was given. if test "${with_fastjet_incpath+set}" = set; then : withval=$with_fastjet_incpath; pkgincpath=$with_fastjet_incpath fi ## Has this header been disabled? if test x$pkgpath = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: Not building against fastjet" >&5 $as_echo "$as_me: Not building against fastjet" >&6;} pkginc=no else ## Base paths pkgbases="$prefix $ac_default_prefix /usr /" if test "$pkgpath"; then pkgbases="$pkgpath"; fi ## Look for include files: first build the search list... incpaths="" if test "$pkgincpath"; then incpath=`echo $pkgincpath | sed -e 's://*:/:g' -e 's:/$::'` incpaths="$incpath" else for base in $pkgbases; do incpath=`echo "$base/include" | sed -e 's://*:/:g' -e 's:/$::'` incpaths="$incpaths $incpath" done fi if test "x$CEDAR_M4_DEBUG" != "x"; then echo "DEBUG: inc paths = $incpaths" fi ## Build package names incnames="fastjet FASTJET fastjet" if test "fastjet" != "fastjet"; then incnames="$incnames fastjet FASTJET fastjet" fi if test "fastjet" != "fastjet"; then incnames="$incnames fastjet FASTJET fastjet" fi ## .. and then do the search: for incpath in $incpaths; do for incname in $incnames; do fullincpath="$incpath/$incname" if test "x$CEDAR_M4_DEBUG" != "x"; then echo "Testing fastjet inc path: $fullincpath" fi if test -d $fullincpath; then pkginc=yes break else pkginc=no; fi if test x$pkginc != xno; then break; fi done if test x$pkginc != xno; then break; fi done if test x$pkginc != xno; then FASTJETINCPATH="$incpath" inpath=${FASTJETINCPATH} abspath="" if test -d "$inpath"; then abspath=`cd $inpath && pwd` elif test -f "$inpath"; then dirpart=`dirname $inpath` localpart=`basename $inpath` abspath="`cd $dirpart && pwd`/$localpart" fi if test -z "$abspath"; then as_fn_error $? "Could not make absolute path FASTJETINCPATH from ${FASTJETINCPATH}" "$LINENO" 5 fi FASTJETINCPATH=$abspath FASTJETINCNAME="$incname" FASTJETCPPFLAGS="-I$FASTJETINCPATH" #echo cedar_SAFEPKGNAMEINCPATH : $cedar_SAFEPKGNAMEINCPATH { $as_echo "$as_me:${as_lineno-$LINENO}: Found fastjet header directory at $incpath" >&5 $as_echo "$as_me: Found fastjet header directory at $incpath" >&6;} else ## Last resort --- only tried if $pkgpath was specified if test x$pkgpath != x; then incpath="$pkgpath/include" if test -d "$incpath"; then FASTJETINCPATH=`echo $incpath | sed -e s:'/$':'':` inpath=${FASTJETINCPATH} abspath="" if test -d "$inpath"; then abspath=`cd $inpath && pwd` elif test -f "$inpath"; then dirpart=`dirname $inpath` localpart=`basename $inpath` abspath="`cd $dirpart && pwd`/$localpart" fi if test -z "$abspath"; then as_fn_error $? "Could not make absolute path FASTJETINCPATH from ${FASTJETINCPATH}" "$LINENO" 5 fi FASTJETINCPATH=$abspath FASTJETINCNAME="" FASTJETCPPFLAGS="-I$FASTJETINCPATH" pkginc=yes #AC_MSG_NOTICE([Found cedar_PkgName header directory at $incpath]) fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: fastjet header directory was not found" >&5 $as_echo "$as_me: WARNING: fastjet header directory was not found" >&2;} fi fi ## Execute pass/fail shell code if test "x$pkginc" = "xyes"; then true else true pkginc=no fi fi ## Export variables to automake if test x$pkgginc != xno; then WITH_FASTJETINC_TRUE= WITH_FASTJETINC_FALSE='#' else WITH_FASTJETINC_TRUE='#' WITH_FASTJETINC_FALSE= fi if test x$pkgginc = xno; then WITHOUT_FASTJETINC_TRUE= WITHOUT_FASTJETINC_FALSE='#' else WITHOUT_FASTJETINC_TRUE='#' WITHOUT_FASTJETINC_FALSE= fi ## Execute pass/fail shell code if test "x$pkglib" = "xyes" && test "x$pkginc" = "xyes"; then #AC_MSG_NOTICE([cedar_PkgName paths verified]) pkggood="yes" else pkggood="no" as_fn_error $? "FastJet is required" "$LINENO" 5 fi fi ## Export variables to automake have_fastjet=no test x$pkggood != xno && have_fastjet=yes if test x$pkggood != xno; then WITH_FASTJET_TRUE= WITH_FASTJET_FALSE='#' else WITH_FASTJET_TRUE='#' WITH_FASTJET_FALSE= fi if test x$pkggood = xno; then WITHOUT_FASTJET_TRUE= WITHOUT_FASTJET_FALSE='#' else WITHOUT_FASTJET_TRUE='#' WITHOUT_FASTJET_FALSE= fi # Extract the first word of "fastjet-config", so it can be a program name with args. set dummy fastjet-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_FJCONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $FJCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_FJCONFIG="$FJCONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$FASTJETPATH/bin:$PATH" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_FJCONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi FJCONFIG=$ac_cv_path_FJCONFIG if test -n "$FJCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FJCONFIG" >&5 $as_echo "$FJCONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -f "$FJCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking FastJet version using fastjet-config" >&5 $as_echo_n "checking FastJet version using fastjet-config... " >&6; } fjversion=$($FJCONFIG --version) { $as_echo "$as_me:${as_lineno-$LINENO}: result: $fjversion" >&5 $as_echo "$fjversion" >&6; } fjmajor=$(echo $fjversion | cut -f1 -d.) fjminor=$(echo $fjversion | cut -f2 -d.) fjmicro=$(echo $fjversion | cut -f3 -d.) if test "$fjmajor" -lt 2 \ -o "$fjmajor" -eq 2 -a "$fjminor" -lt 4 \ -o "$fjmajor" -eq 2 -a "$fjminor" -eq 4 -a "$fjmicro" -lt 2; then as_fn_error $? "FastJet version 2.4.2 or later is required" "$LINENO" 5 fi FASTJETCONFIGLIBADD="$($FJCONFIG --plugins --shared --libs | sed 's/\-\-rpath/-rpath/g')" #FASTJETLIBPATH="$($FJCONFIG --libs | sed 's/.*\-L\([^\ ]\+\).*/\1/')" else FASTJETCONFIGLIBADD="-L$FASTJETLIBPATH -l$FASTJETLIBNAME" FASTJETCONFIGLIBADD="$FASTJETCONFIGLIBADD -lSISConePlugin -lsiscone -lsiscone_spherical" FASTJETCONFIGLIBADD="$FASTJETCONFIGLIBADD -lCDFConesPlugin -lD0RunIIConePlugin -lNestedDefsPlugin" FASTJETCONFIGLIBADD="$FASTJETCONFIGLIBADD -lTrackJetPlugin -lATLASConePlugin -lCMSIterativeConePlugin" FASTJETCONFIGLIBADD="$FASTJETCONFIGLIBADD -lEECambridgePlugin -lJadePlugin" fi; { $as_echo "$as_me:${as_lineno-$LINENO}: FastJet LIBADD = $FASTJETCONFIGLIBADD" >&5 $as_echo "$as_me: FastJet LIBADD = $FASTJETCONFIGLIBADD" >&6;} # Check for FastJet headers that require the --enable-all(cxx)plugins option FASTJET_ERRMSG="Required FastJet plugin headers were not found: did you build FastJet with the --enable-allcxxplugins option?" oldCPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -I$FASTJETINCPATH" ac_fn_cxx_check_header_mongrel "$LINENO" "fastjet/D0RunIIConePlugin.hh" "ac_cv_header_fastjet_D0RunIIConePlugin_hh" "$ac_includes_default" if test "x$ac_cv_header_fastjet_D0RunIIConePlugin_hh" = xyes; then : else as_fn_error $? "$FASTJET_ERRMSG" "$LINENO" 5 fi ac_fn_cxx_check_header_mongrel "$LINENO" "fastjet/TrackJetPlugin.hh" "ac_cv_header_fastjet_TrackJetPlugin_hh" "$ac_includes_default" if test "x$ac_cv_header_fastjet_TrackJetPlugin_hh" = xyes; then : else as_fn_error $? "$FASTJET_ERRMSG" "$LINENO" 5 fi CPPFLAGS=$oldCPPFLAGS ## Build Doxygen if possible # Check whether --enable-doxygen was given. if test "${enable_doxygen+set}" = set; then : enableval=$enable_doxygen; else enable_doxygen=yes fi if test x$enable_doxygen = xyes; then # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_DOXYGEN+:} false; then : $as_echo_n "(cached) " >&6 else case $DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DOXYGEN=$ac_cv_path_DOXYGEN if test -n "$DOXYGEN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5 $as_echo "$DOXYGEN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test x$DOXYGEN != x; then WITH_DOXYGEN_TRUE= WITH_DOXYGEN_FALSE='#' else WITH_DOXYGEN_TRUE='#' WITH_DOXYGEN_FALSE= fi ## Disable build/install of standard analyses # Check whether --enable-analyses was given. if test "${enable_analyses+set}" = set; then : enableval=$enable_analyses; else enable_analyses=yes fi if test x$enable_analyses != xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Not building standard Rivet analyses, by request" >&5 $as_echo "$as_me: WARNING: Not building standard Rivet analyses, by request" >&2;} fi if test x$enable_analyses = xyes; then ENABLE_ANALYSES_TRUE= ENABLE_ANALYSES_FALSE='#' else ENABLE_ANALYSES_TRUE='#' ENABLE_ANALYSES_FALSE= fi ## Enable build/install of unvalidated analyses # Check whether --enable-unvalidated was given. if test "${enable_unvalidated+set}" = set; then : enableval=$enable_unvalidated; else enable_unvalidated=no fi if test x$enable_unvalidated = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Building unvalidated Rivet analyses, by request" >&5 $as_echo "$as_me: WARNING: Building unvalidated Rivet analyses, by request" >&2;} else { $as_echo "$as_me:${as_lineno-$LINENO}: Not building unvalidated Rivet analyses" >&5 $as_echo "$as_me: Not building unvalidated Rivet analyses" >&6;} fi if test x$enable_unvalidated = xyes; then ENABLE_UNVALIDATED_TRUE= ENABLE_UNVALIDATED_FALSE='#' else ENABLE_UNVALIDATED_TRUE='#' ENABLE_UNVALIDATED_FALSE= fi ## Disable build/install of validated-but-preliminary analyses # Check whether --enable-preliminary was given. if test "${enable_preliminary+set}" = set; then : enableval=$enable_preliminary; else enable_preliminary=yes fi if test x$enable_preliminary = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: Building preliminary Rivet analyses" >&5 $as_echo "$as_me: Building preliminary Rivet analyses" >&6;} else { $as_echo "$as_me:${as_lineno-$LINENO}: Not building preliminary Rivet analyses, by request" >&5 $as_echo "$as_me: Not building preliminary Rivet analyses, by request" >&6;} fi if test x$enable_preliminary = xyes; then ENABLE_PRELIMINARY_TRUE= ENABLE_PRELIMINARY_FALSE='#' else ENABLE_PRELIMINARY_TRUE='#' ENABLE_PRELIMINARY_FALSE= fi ## Disable build/install of now-obsolete preliminary analyses # Check whether --enable-obsolete was given. if test "${enable_obsolete+set}" = set; then : enableval=$enable_obsolete; else enable_obsolete=$enable_preliminary fi if test x$enable_obsolete = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: Building obsolete Rivet analyses" >&5 $as_echo "$as_me: Building obsolete Rivet analyses" >&6;} else { $as_echo "$as_me:${as_lineno-$LINENO}: Not building obsolete Rivet analyses, by request" >&5 $as_echo "$as_me: Not building obsolete Rivet analyses, by request" >&6;} fi if test x$enable_obsolete = xyes; then ENABLE_OBSOLETE_TRUE= ENABLE_OBSOLETE_FALSE='#' else ENABLE_OBSOLETE_TRUE='#' ENABLE_OBSOLETE_FALSE= fi ## Build LaTeX docs if possible... # Extract the first word of "pdflatex", so it can be a program name with args. set dummy pdflatex; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PDFLATEX+:} false; then : $as_echo_n "(cached) " >&6 else case $PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_PDFLATEX="$PDFLATEX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PDFLATEX=$ac_cv_path_PDFLATEX if test -n "$PDFLATEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PDFLATEX" >&5 $as_echo "$PDFLATEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$PDFLATEX != x; then WITH_PDFLATEX_TRUE= WITH_PDFLATEX_FALSE='#' else WITH_PDFLATEX_TRUE='#' WITH_PDFLATEX_FALSE= fi ## ... unless told otherwise! # Check whether --enable-pdfmanual was given. if test "${enable_pdfmanual+set}" = set; then : enableval=$enable_pdfmanual; else enable_pdfmanual=yes fi if test x$enable_pdfmanual != xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Not building Rivet PDF manual, by request" >&5 $as_echo "$as_me: WARNING: Not building Rivet PDF manual, by request" >&2;} fi if test x$enable_pdfmanual = xyes; then ENABLE_PDFMANUAL_TRUE= ENABLE_PDFMANUAL_FALSE='#' else ENABLE_PDFMANUAL_TRUE='#' ENABLE_PDFMANUAL_FALSE= fi ## Build asciidoc docs if possible # Extract the first word of "asciidoc", so it can be a program name with args. set dummy asciidoc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ASCIIDOC+:} false; then : $as_echo_n "(cached) " >&6 else case $ASCIIDOC in [\\/]* | ?:[\\/]*) ac_cv_path_ASCIIDOC="$ASCIIDOC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ASCIIDOC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ASCIIDOC=$ac_cv_path_ASCIIDOC if test -n "$ASCIIDOC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ASCIIDOC" >&5 $as_echo "$ASCIIDOC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$ASCIIDOC != x; then WITH_ASCIIDOC_TRUE= WITH_ASCIIDOC_FALSE='#' else WITH_ASCIIDOC_TRUE='#' WITH_ASCIIDOC_FALSE= fi ## Test to see if we have to install libyaml-cpp ## Define a bunch of case permutations pkgpath="" pkglib=no; pkginc=no; pkggood=no ## Don't know why this isn't working by default: test x${prefix} = xNONE && prefix=${ac_default_prefix} ## Environment variables for specifying paths pkgpath=${YAML_CPPPATH} ## "configure" option switches for specifying paths # Check whether --with-yaml_cpp was given. if test "${with_yaml_cpp+set}" = set; then : withval=$with_yaml_cpp; pkgpath=$with_yaml_cpp fi if test "$pkgpath"; then YAML_CPPPATH="$pkgpath"; fi ## Has this lib been disabled? #echo "DEBUG: pkgpath = $pkgpath" if test x$pkgpath = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: Not building against yaml-cpp" >&5 $as_echo "$as_me: Not building against yaml-cpp" >&6;} if false; then WITH_YAML_CPPINC_TRUE= WITH_YAML_CPPINC_FALSE='#' else WITH_YAML_CPPINC_TRUE='#' WITH_YAML_CPPINC_FALSE= fi if false; then WITH_YAML_CPPLIB_TRUE= WITH_YAML_CPPLIB_FALSE='#' else WITH_YAML_CPPLIB_TRUE='#' WITH_YAML_CPPLIB_FALSE= fi if true; then WITHOUT_YAML_CPPINC_TRUE= WITHOUT_YAML_CPPINC_FALSE='#' else WITHOUT_YAML_CPPINC_TRUE='#' WITHOUT_YAML_CPPINC_FALSE= fi if true; then WITHOUT_YAML_CPPLIB_TRUE= WITHOUT_YAML_CPPLIB_FALSE='#' else WITHOUT_YAML_CPPLIB_TRUE='#' WITHOUT_YAML_CPPLIB_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: Rivet will install the yaml-cpp library" >&5 $as_echo "$as_me: Rivet will install the yaml-cpp library" >&6;} else ## Check library and header ## Define a bunch of case permutations ## We have a set of user-set variables: pkgpath=""; pkglibpath=""; pkglibname="" ## Also need some status variables: pkglib=no ## Don't know why this isn't working by default: test x${prefix} = xNONE && prefix=${ac_default_prefix} ## Environment variables for specifying paths pkgpath=${YAML_CPPPATH} ## "configure" option switches for specifying paths # Check whether --with-yaml_cpp was given. if test "${with_yaml_cpp+set}" = set; then : withval=$with_yaml_cpp; pkgpath=$with_yaml_cpp fi if test "$pkgpath"; then YAML_CPPPATH="$pkgpath"; fi pkglibpath=${YAML_CPPLIBPATH} pkglibname=${YAML_CPPLIBFLAG} # Check whether --with-yaml_cpp-libpath was given. if test "${with_yaml_cpp_libpath+set}" = set; then : withval=$with_yaml_cpp_libpath; pkglibpath=$with_yaml_cpp_libpath fi # Check whether --with-yaml_cpp-libname was given. if test "${with_yaml_cpp_libname+set}" = set; then : withval=$with_yaml_cpp_libname; pkglibname=$with_yaml_cpp_libname fi ## Has this lib been disabled? if test x$pkgpath = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: Not building against yaml-cpp" >&5 $as_echo "$as_me: Not building against yaml-cpp" >&6;} pkglib=no else ## Base paths pkgbases="$prefix $ac_default_prefix /usr /" if test "$pkgpath"; then pkgbases="$pkgpath"; fi if test "x$CEDAR_M4_DEBUG" != "x"; then echo "DEBUG: $pkgpath -> $pkgbases" fi ## Build a list of library search locations, unless specified libdirnames="lib" ## Test for 64-bit mode and add lib64 as first choice ## library dir name if appropriate if test -z "$UNAME"; then # Extract the first word of "uname", so it can be a program name with args. set dummy uname; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_UNAME+:} false; then : $as_echo_n "(cached) " >&6 else case $UNAME in [\\/]* | ?:[\\/]*) ac_cv_path_UNAME="$UNAME" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_UNAME="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_UNAME" && ac_cv_path_UNAME="no" ;; esac fi UNAME=$ac_cv_path_UNAME if test -n "$UNAME"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNAME" >&5 $as_echo "$UNAME" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test x$UNAME != xno; then if test -n `$UNAME -m | grep 64`; then libdirnames="lib64 $libdirnames" fi fi libpaths="" if test "$pkglibpath"; then libpath=`echo $pkglibpath | sed -e 's://*:/:g' -e 's:/$::'` libpaths="$libpath" else ## Outer loop over lib / lib64 part for libdirname in $libdirnames; do ## Inner loop over base path for base in $pkgbases; do libpath=`echo "$base/$libdirname" | sed -e 's://*:/:g' -e 's:/$::'` libpaths="$libpaths $libpath" done done libpaths="$libpaths ./src" fi ## Use case permuatations on the package name (mixed, all-upper and ## all-lower), plus punctuation replacements. libnames="yaml-cpp YAML-CPP yaml-cpp" if test "yaml-cpp" != "yaml_cpp"; then libnames="$libnames yaml_cpp YAML_CPP yaml_cpp" fi if test "yaml-cpp" != "yamlcpp"; then libnames="$libnames yamlcpp YAMLCPP yamlcpp" fi if test "$pkglibname"; then libnames=$pkglibname; fi ## Define library versions libversions="" if test x"" != x; then libversions="- " fi ## Look for library with various name permutations for libpath in $libpaths; do for libversion in $libversions ""; do for libname in $libnames; do for libextn in la so dylib dll a; do testpath="${libpath}/lib${libname}${libversion}.${libextn}" testpath=`echo $testpath | sed -e 's://*:/:g' -e 's:/$::'` if test "x$CEDAR_M4_DEBUG" != "x"; then echo "DEBUG: Testing $testpath" fi if test -e $testpath; then pkglib=yes break else pkglib=no fi done if test x$pkglib != xno; then break; fi done if test x$pkglib != xno; then break; fi done if test x$pkglib != xno; then break; fi done ## Announce success/failure and set variables if test x$pkglib != xno; then ## TODO: Can we just use $testpath here? libfullpath=`echo ${libpath}/lib${libname}${libversion}.${libextn}` libfullpath=`echo $libfullpath | sed -e 's://*:/:g' -e 's:/$::'` inpath=${libfullpath} abspath="" if test -d "$inpath"; then abspath=`cd $inpath && pwd` elif test -f "$inpath"; then dirpart=`dirname $inpath` localpart=`basename $inpath` abspath="`cd $dirpart && pwd`/$localpart" fi if test -z "$abspath"; then as_fn_error $? "Could not make absolute path libfullpath from ${libfullpath}" "$LINENO" 5 fi libfullpath=$abspath YAML_CPPLIB="$libfullpath" YAML_CPPLIBPATH=`dirname $libfullpath` ## TODO: Can we just use $libname here? YAML_CPPLIBNAME=`basename $libfullpath | sed -e s/'^lib'// -e s/'\.[a-zA-Z]*$'//` YAML_CPPLDFLAGS="-L$YAML_CPPLIBPATH" YAML_CPPLDLIBS="-l$YAML_CPPLIBNAME" { $as_echo "$as_me:${as_lineno-$LINENO}: Found yaml-cpp library at ${libfullpath}" >&5 $as_echo "$as_me: Found yaml-cpp library at ${libfullpath}" >&6;} else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: yaml-cpp library was not found" >&5 $as_echo "$as_me: WARNING: yaml-cpp library was not found" >&2;} fi ## Execute pass/fail shell code if test "x$pkglib" = "xyes"; then true else true pkglib=no fi fi ## Export variables to automake if test x$pkglib != xno; then WITH_YAML_CPPLIB_TRUE= WITH_YAML_CPPLIB_FALSE='#' else WITH_YAML_CPPLIB_TRUE='#' WITH_YAML_CPPLIB_FALSE= fi if test x$pkglib = xno; then WITHOUT_YAML_CPPLIB_TRUE= WITHOUT_YAML_CPPLIB_FALSE='#' else WITHOUT_YAML_CPPLIB_TRUE='#' WITHOUT_YAML_CPPLIB_FALSE= fi ## Define a bunch of case permutations ## We have a set of user-set variables: pkgpath=""; pkgincpath="" ## Also need some status variables: pkginc=no ## Don't know why this isn't working by default: test x${prefix} = xNONE && prefix=${ac_default_prefix} ## Environment variables for specifying paths ## "configure" option switches for specifying paths pkgpath=${YAML_CPPPATH} # Check whether --with-yaml_cpp was given. if test "${with_yaml_cpp+set}" = set; then : withval=$with_yaml_cpp; pkgpath=$with_yaml_cpp fi if test "$pkgpath"; then YAML_CPPPATH="$pkgpath"; fi pkgincpath=${YAML_CPPINCPATH} # Check whether --with-yaml_cpp-incpath was given. if test "${with_yaml_cpp_incpath+set}" = set; then : withval=$with_yaml_cpp_incpath; pkgincpath=$with_yaml_cpp_incpath fi ## Has this header been disabled? if test x$pkgpath = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: Not building against yaml-cpp" >&5 $as_echo "$as_me: Not building against yaml-cpp" >&6;} pkginc=no else ## Base paths pkgbases="$prefix $ac_default_prefix /usr /" if test "$pkgpath"; then pkgbases="$pkgpath"; fi ## Look for include files: first build the search list... incpaths="" if test "$pkgincpath"; then incpath=`echo $pkgincpath | sed -e 's://*:/:g' -e 's:/$::'` incpaths="$incpath" else for base in $pkgbases; do incpath=`echo "$base/include" | sed -e 's://*:/:g' -e 's:/$::'` incpaths="$incpaths $incpath" done fi if test "x$CEDAR_M4_DEBUG" != "x"; then echo "DEBUG: inc paths = $incpaths" fi ## Build package names incnames="yaml-cpp YAML-CPP yaml-cpp" if test "yaml-cpp" != "yaml_cpp"; then incnames="$incnames yaml_cpp YAML_CPP yaml_cpp" fi if test "yaml-cpp" != "yamlcpp"; then incnames="$incnames yamlcpp YAMLCPP yamlcpp" fi ## .. and then do the search: for incpath in $incpaths; do for incname in $incnames; do fullincpath="$incpath/$incname" if test "x$CEDAR_M4_DEBUG" != "x"; then echo "Testing yaml-cpp inc path: $fullincpath" fi if test -d $fullincpath; then pkginc=yes break else pkginc=no; fi if test x$pkginc != xno; then break; fi done if test x$pkginc != xno; then break; fi done if test x$pkginc != xno; then YAML_CPPINCPATH="$incpath" inpath=${YAML_CPPINCPATH} abspath="" if test -d "$inpath"; then abspath=`cd $inpath && pwd` elif test -f "$inpath"; then dirpart=`dirname $inpath` localpart=`basename $inpath` abspath="`cd $dirpart && pwd`/$localpart" fi if test -z "$abspath"; then as_fn_error $? "Could not make absolute path YAML_CPPINCPATH from ${YAML_CPPINCPATH}" "$LINENO" 5 fi YAML_CPPINCPATH=$abspath YAML_CPPINCNAME="$incname" YAML_CPPCPPFLAGS="-I$YAML_CPPINCPATH" #echo cedar_SAFEPKGNAMEINCPATH : $cedar_SAFEPKGNAMEINCPATH { $as_echo "$as_me:${as_lineno-$LINENO}: Found yaml-cpp header directory at $incpath" >&5 $as_echo "$as_me: Found yaml-cpp header directory at $incpath" >&6;} else ## Last resort --- only tried if $pkgpath was specified if test x$pkgpath != x; then incpath="$pkgpath/include" if test -d "$incpath"; then YAML_CPPINCPATH=`echo $incpath | sed -e s:'/$':'':` inpath=${YAML_CPPINCPATH} abspath="" if test -d "$inpath"; then abspath=`cd $inpath && pwd` elif test -f "$inpath"; then dirpart=`dirname $inpath` localpart=`basename $inpath` abspath="`cd $dirpart && pwd`/$localpart" fi if test -z "$abspath"; then as_fn_error $? "Could not make absolute path YAML_CPPINCPATH from ${YAML_CPPINCPATH}" "$LINENO" 5 fi YAML_CPPINCPATH=$abspath YAML_CPPINCNAME="" YAML_CPPCPPFLAGS="-I$YAML_CPPINCPATH" pkginc=yes #AC_MSG_NOTICE([Found cedar_PkgName header directory at $incpath]) fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: yaml-cpp header directory was not found" >&5 $as_echo "$as_me: WARNING: yaml-cpp header directory was not found" >&2;} fi fi ## Execute pass/fail shell code if test "x$pkginc" = "xyes"; then true else true pkginc=no fi fi ## Export variables to automake if test x$pkgginc != xno; then WITH_YAML_CPPINC_TRUE= WITH_YAML_CPPINC_FALSE='#' else WITH_YAML_CPPINC_TRUE='#' WITH_YAML_CPPINC_FALSE= fi if test x$pkgginc = xno; then WITHOUT_YAML_CPPINC_TRUE= WITHOUT_YAML_CPPINC_FALSE='#' else WITHOUT_YAML_CPPINC_TRUE='#' WITHOUT_YAML_CPPINC_FALSE= fi ## Execute pass/fail shell code if test "x$pkglib" = "xyes" && test "x$pkginc" = "xyes"; then #AC_MSG_NOTICE([cedar_PkgName paths verified]) pkggood="yes" else pkggood="no" { $as_echo "$as_me:${as_lineno-$LINENO}: Rivet will install the yaml-cpp library" >&5 $as_echo "$as_me: Rivet will install the yaml-cpp library" >&6;} fi fi ## Export variables to automake have_yaml_cpp=no test x$pkggood != xno && have_yaml_cpp=yes if test x$pkggood != xno; then WITH_YAML_CPP_TRUE= WITH_YAML_CPP_FALSE='#' else WITH_YAML_CPP_TRUE='#' WITH_YAML_CPP_FALSE= fi if test x$pkggood = xno; then WITHOUT_YAML_CPP_TRUE= WITHOUT_YAML_CPP_FALSE='#' else WITHOUT_YAML_CPP_TRUE='#' WITHOUT_YAML_CPP_FALSE= fi ## Python extension # Check whether --enable-pyext was given. if test "${enable_pyext+set}" = set; then : enableval=$enable_pyext; else enable_pyext=yes fi az_python_use=false if test x"$az_python_use" = x"true"; then PYTHON_USE_TRUE= PYTHON_USE_FALSE='#' else PYTHON_USE_TRUE='#' PYTHON_USE_FALSE= fi ## Basic Python checks if test x$enable_pyext == xyes; then # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 $as_echo "$PYTHON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$PYTHON" then as_fn_error $? "Python Executable not found" "$LINENO" 5 else az_python_use=true fi if test "$az_python_use" = "true"; then PYTHON_USE_TRUE= PYTHON_USE_FALSE='#' else PYTHON_USE_TRUE='#' PYTHON_USE_FALSE= fi if test -n "$PYTHON" then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version >= 2.4" >&5 $as_echo_n "checking whether $PYTHON version >= 2.4... " >&6; } if test -z "$PYTHON" then as_fn_error $? "Python Executable not found" "$LINENO" 5 else cat >conftest.py <<_ACEOF import sys, string # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. minver = map(int, string.split('2.4', '.')) + [0, 0, 0] minverhex = 0 for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[i] if sys.hexversion >= minverhex: sys.exit( 0 ) else: sys.exit( 1 ) _ACEOF az_python_output=`$PYTHON conftest.py` az_python_cc=$? rm conftest.py if test -f "conftest.pyc" then rm conftest.pyc fi fi if test $az_python_cc -eq 0 then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else as_fn_error $? "too old" "$LINENO" 5 fi fi PYTHON_VERSION=`$PYTHON -c "import sys; print '.'.join(map(str, sys.version_info[:2]));"` RIVET_PYTHONPATH=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(prefix='$prefix', plat_specific=True);"` ## Test for Python header if test -x "$PYTHON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python include path" >&5 $as_echo_n "checking for Python include path... " >&6; } python_incpath=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc();"` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_incpath" >&5 $as_echo "$python_incpath" >&6; } python_header="$python_incpath/Python.h" if test -z "$python_incpath"; then as_fn_error $? "Can't build Python extension since include directory cannot be determined from distutils" "$LINENO" 5 enable_pyext=no elif test ! -e "$python_header"; then as_fn_error $? "Can't build Python extension since header file $python_header cannot be found" "$LINENO" 5 enable_pyext=no fi else as_fn_error $? "Can't build Python extension since python can't be found" "$LINENO" 5 enable_pyext=no fi fi ## SWIG checks if test x$enable_pyext == xyes; then # Extract the first word of "swig", so it can be a program name with args. set dummy swig; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SWIG+:} false; then : $as_echo_n "(cached) " >&6 else case $SWIG in [\\/]* | ?:[\\/]*) ac_cv_path_SWIG="$SWIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SWIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi SWIG=$ac_cv_path_SWIG if test -n "$SWIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SWIG" >&5 $as_echo "$SWIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$SWIG" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find 'swig' program. You should look at http://www.swig.org" >&5 $as_echo "$as_me: WARNING: cannot find 'swig' program. You should look at http://www.swig.org" >&2;} SWIG='echo "Error: SWIG is not installed. You should look at http://www.swig.org" ; false' elif test -n "" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SWIG version" >&5 $as_echo_n "checking for SWIG version... " >&6; } swig_version=`$SWIG -version 2>&1 | grep 'SWIG Version' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $swig_version" >&5 $as_echo "$swig_version" >&6; } if test -n "$swig_version" ; then # Calculate the required version number components required= required_major=`echo $required | sed 's/[^0-9].*//'` if test -z "$required_major" ; then required_major=0 fi required=`echo $required | sed 's/[0-9]*[^0-9]//'` required_minor=`echo $required | sed 's/[^0-9].*//'` if test -z "$required_minor" ; then required_minor=0 fi required=`echo $required | sed 's/[0-9]*[^0-9]//'` required_patch=`echo $required | sed 's/[^0-9].*//'` if test -z "$required_patch" ; then required_patch=0 fi # Calculate the available version number components available=$swig_version available_major=`echo $available | sed 's/[^0-9].*//'` if test -z "$available_major" ; then available_major=0 fi available=`echo $available | sed 's/[0-9]*[^0-9]//'` available_minor=`echo $available | sed 's/[^0-9].*//'` if test -z "$available_minor" ; then available_minor=0 fi available=`echo $available | sed 's/[0-9]*[^0-9]//'` available_patch=`echo $available | sed 's/[^0-9].*//'` if test -z "$available_patch" ; then available_patch=0 fi if test $available_major -ne $required_major \ -o $available_minor -ne $required_minor \ -o $available_patch -lt $required_patch ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SWIG version >= is required. You have $swig_version. You should look at http://www.swig.org" >&5 $as_echo "$as_me: WARNING: SWIG version >= is required. You have $swig_version. You should look at http://www.swig.org" >&2;} SWIG='echo "Error: SWIG version >= is required. You have '"$swig_version"'. You should look at http://www.swig.org" ; false' else { $as_echo "$as_me:${as_lineno-$LINENO}: SWIG executable is '$SWIG'" >&5 $as_echo "$as_me: SWIG executable is '$SWIG'" >&6;} SWIG_LIB=`$SWIG -swiglib` { $as_echo "$as_me:${as_lineno-$LINENO}: SWIG library directory is '$SWIG_LIB'" >&5 $as_echo "$as_me: SWIG library directory is '$SWIG_LIB'" >&6;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine SWIG version" >&5 $as_echo "$as_me: WARNING: cannot determine SWIG version" >&2;} SWIG='echo "Error: Cannot determine SWIG version. You should look at http://www.swig.org" ; false' fi fi if test x$SWIG == x; then as_fn_error $? "Can't build Python extension since swig could not be found" "$LINENO" 5 enable_pyext=no else ## Test that SWIG makes a compilable source file... ## cf. g++ 4.x requires that string literal is "_const_ char*" cat > conftest.i <&5 $as_echo_n "checking if $SWIG can make a Python function wrapper... " >&6; } flag_ok=yes stat_string=`$SWIG -c++ -python conftest.i 2>&1 1>&5` ; test -z "$stat_string" || flag_ok=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } if test x$flag_ok != xyes; then as_fn_error $? "Can't build Python extension since $SWIG is not able to make a Python wrapper" "$LINENO" 5 enable_pyext=no else swig_compiler=$CXX ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the $CXX compiler accepts the -Wno-format flag" >&5 $as_echo_n "checking if the $CXX compiler accepts the -Wno-format flag... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return 0; ; return 0; } _ACEOF flag_ok=no #$CXX -Wno-format conftest.cpp >&5 2>/dev/null && flag_ok=yes stat_string=`$CXX -Wno-format conftest.cpp 2>&1 1>&5` ; test -z "$stat_string" && flag_ok=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } if test x$flag_ok = xyes; then true { $as_echo "$as_me:${as_lineno-$LINENO}: adding -Wno-format to swig compilation test" >&5 $as_echo "$as_me: adding -Wno-format to swig compilation test" >&6;}; swig_compiler="$swig_compiler -Wno-format" else true fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $SWIG is compatible with the $CXX compiler" >&5 $as_echo_n "checking if $SWIG is compatible with the $CXX compiler... " >&6; } flag_ok=yes if test x$flag_ok == xyes; then stat_string=`$swig_compiler -c conftest_wrap.cxx $CPPFLAGS $CXXFLAGS -I$python_incpath 2>&1 1>&5` ; test -z "$stat_string" || flag_ok=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } if test x$flag_ok != xyes; then as_fn_error $? "Can't build Python extension since $SWIG is not compatible with $CXX. Get a newer SWIG version!" "$LINENO" 5 enable_pyext=no fi fi fi rm -rf conftest* fi ## Finish if test x$enable_pyext == xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: All Python build checks successful: 'rivet' Python extension will be built" >&5 $as_echo "$as_me: All Python build checks successful: 'rivet' Python extension will be built" >&6;} fi if test x$enable_pyext == xyes; then ENABLE_PYEXT_TRUE= ENABLE_PYEXT_FALSE='#' else ENABLE_PYEXT_TRUE='#' ENABLE_PYEXT_FALSE= fi ## Set default build flags AM_CPPFLAGS="-I\$(top_srcdir)/include -I\$(top_builddir)/include" #AM_CPPFLAGS="$AM_CPPFLAGS -I\$(top_srcdir)/include/eigen2" AM_CPPFLAGS="$AM_CPPFLAGS \$(GSL_CPPFLAGS)" AM_CPPFLAGS="$AM_CPPFLAGS -I\$(BOOSTINCPATH) \$(BOOST_CPPFLAGS)" AM_CPPFLAGS="$AM_CPPFLAGS -I\$(HEPMCINCPATH)" AM_CPPFLAGS="$AM_CPPFLAGS -I\$(FASTJETINCPATH)" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the $CXX compiler accepts the -pedantic flag" >&5 $as_echo_n "checking if the $CXX compiler accepts the -pedantic flag... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return 0; ; return 0; } _ACEOF flag_ok=no #$CXX -pedantic conftest.cpp >&5 2>/dev/null && flag_ok=yes stat_string=`$CXX -pedantic conftest.cpp 2>&1 1>&5` ; test -z "$stat_string" && flag_ok=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } if test x$flag_ok = xyes; then true AM_CXXFLAGS="$AM_CXXFLAGS -pedantic" else true fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the $CXX compiler accepts the -ansi flag" >&5 $as_echo_n "checking if the $CXX compiler accepts the -ansi flag... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return 0; ; return 0; } _ACEOF flag_ok=no #$CXX -ansi conftest.cpp >&5 2>/dev/null && flag_ok=yes stat_string=`$CXX -ansi conftest.cpp 2>&1 1>&5` ; test -z "$stat_string" && flag_ok=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } if test x$flag_ok = xyes; then true AM_CXXFLAGS="$AM_CXXFLAGS -ansi" else true fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the $CXX compiler accepts the -Wall flag" >&5 $as_echo_n "checking if the $CXX compiler accepts the -Wall flag... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return 0; ; return 0; } _ACEOF flag_ok=no #$CXX -Wall conftest.cpp >&5 2>/dev/null && flag_ok=yes stat_string=`$CXX -Wall conftest.cpp 2>&1 1>&5` ; test -z "$stat_string" && flag_ok=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } if test x$flag_ok = xyes; then true AM_CXXFLAGS="$AM_CXXFLAGS -Wall" else true fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the $CXX compiler accepts the -Wno-long-long flag" >&5 $as_echo_n "checking if the $CXX compiler accepts the -Wno-long-long flag... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return 0; ; return 0; } _ACEOF flag_ok=no #$CXX -Wno-long-long conftest.cpp >&5 2>/dev/null && flag_ok=yes stat_string=`$CXX -Wno-long-long conftest.cpp 2>&1 1>&5` ; test -z "$stat_string" && flag_ok=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } if test x$flag_ok = xyes; then true AM_CXXFLAGS="$AM_CXXFLAGS -Wno-long-long" else true fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the $CXX compiler accepts the -Wno-format flag" >&5 $as_echo_n "checking if the $CXX compiler accepts the -Wno-format flag... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return 0; ; return 0; } _ACEOF flag_ok=no #$CXX -Wno-format conftest.cpp >&5 2>/dev/null && flag_ok=yes stat_string=`$CXX -Wno-format conftest.cpp 2>&1 1>&5` ; test -z "$stat_string" && flag_ok=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } if test x$flag_ok = xyes; then true AM_CXXFLAGS="$AM_CXXFLAGS -Wno-format" else true fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ## Debug flag (default=none) # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; else enable_debug=no fi if test x$enable_debug == xyes; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the $CXX compiler accepts the -g flag" >&5 $as_echo_n "checking if the $CXX compiler accepts the -g flag... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return 0; ; return 0; } _ACEOF flag_ok=no #$CXX -g conftest.cpp >&5 2>/dev/null && flag_ok=yes stat_string=`$CXX -g conftest.cpp 2>&1 1>&5` ; test -z "$stat_string" && flag_ok=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } if test x$flag_ok = xyes; then true AM_CXXFLAGS="$AM_CXXFLAGS -g " else true fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi ## Extra warnings flag (default=none) # Check whether --enable-extra-warnings was given. if test "${enable_extra_warnings+set}" = set; then : enableval=$enable_extra_warnings; else enable_extra_warnings=no fi if test x$enable_extra_warnings == xyes; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the $CXX compiler accepts the -Wextra flag" >&5 $as_echo_n "checking if the $CXX compiler accepts the -Wextra flag... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return 0; ; return 0; } _ACEOF flag_ok=no #$CXX -Wextra conftest.cpp >&5 2>/dev/null && flag_ok=yes stat_string=`$CXX -Wextra conftest.cpp 2>&1 1>&5` ; test -z "$stat_string" && flag_ok=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5 $as_echo "$flag_ok" >&6; } if test x$flag_ok = xyes; then true AM_CXXFLAGS="$AM_CXXFLAGS -Wextra " else true fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi EMPTY="" ac_config_files="$ac_config_files include/Makefile include/Rivet/Makefile" ac_config_files="$ac_config_files src/Makefile" ac_config_files="$ac_config_files src/Core/Makefile" ac_config_files="$ac_config_files src/Tools/Makefile src/Tools/yaml-cpp/Makefile" ac_config_files="$ac_config_files src/Projections/Makefile" ac_config_files="$ac_config_files src/Analyses/Makefile" ac_config_files="$ac_config_files test/Makefile" ac_config_files="$ac_config_files pyext/Makefile pyext/rivet/Makefile pyext/setup.py" ac_config_files="$ac_config_files data/Makefile data/refdata/Makefile data/anainfo/Makefile data/plotinfo/Makefile data/texmf/Makefile" ac_config_files="$ac_config_files doc/Makefile" ac_config_files="$ac_config_files doc/rivetversion.sty" ac_config_files="$ac_config_files bin/Makefile bin/rivet-config bin/rivet-buildplugin" ac_config_files="$ac_config_files Makefile Doxyfile" ac_config_files="$ac_config_files rivetenv.sh rivetenv.csh" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${WITH_OSX_TRUE}" && test -z "${WITH_OSX_FALSE}"; then as_fn_error $? "conditional \"WITH_OSX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_GSL_TRUE}" && test -z "${WITH_GSL_FALSE}"; then as_fn_error $? "conditional \"WITH_GSL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_GSLLIB_TRUE}" && test -z "${WITH_GSLLIB_FALSE}"; then as_fn_error $? "conditional \"WITH_GSLLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_GSLINC_TRUE}" && test -z "${WITH_GSLINC_FALSE}"; then as_fn_error $? "conditional \"WITH_GSLINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_GSL_TRUE}" && test -z "${WITHOUT_GSL_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_GSL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_GSLLIB_TRUE}" && test -z "${WITHOUT_GSLLIB_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_GSLLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_GSLINC_TRUE}" && test -z "${WITHOUT_GSLINC_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_GSLINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_GSL_TRUE}" && test -z "${WITH_GSL_FALSE}"; then as_fn_error $? "conditional \"WITH_GSL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_GSLLIB_TRUE}" && test -z "${WITH_GSLLIB_FALSE}"; then as_fn_error $? "conditional \"WITH_GSLLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_GSLINC_TRUE}" && test -z "${WITH_GSLINC_FALSE}"; then as_fn_error $? "conditional \"WITH_GSLINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_GSL_TRUE}" && test -z "${WITHOUT_GSL_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_GSL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_GSLLIB_TRUE}" && test -z "${WITHOUT_GSLLIB_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_GSLLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_GSLINC_TRUE}" && test -z "${WITHOUT_GSLINC_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_GSLINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_GSLINC_TRUE}" && test -z "${WITH_GSLINC_FALSE}"; then as_fn_error $? "conditional \"WITH_GSLINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_GSLINC_TRUE}" && test -z "${WITHOUT_GSLINC_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_GSLINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_BOOSTINC_TRUE}" && test -z "${WITH_BOOSTINC_FALSE}"; then as_fn_error $? "conditional \"WITH_BOOSTINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_BOOSTINC_TRUE}" && test -z "${WITHOUT_BOOSTINC_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_BOOSTINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_HEPMCINC_TRUE}" && test -z "${WITH_HEPMCINC_FALSE}"; then as_fn_error $? "conditional \"WITH_HEPMCINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_HEPMCLIB_TRUE}" && test -z "${WITH_HEPMCLIB_FALSE}"; then as_fn_error $? "conditional \"WITH_HEPMCLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_HEPMCINC_TRUE}" && test -z "${WITHOUT_HEPMCINC_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_HEPMCINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_HEPMCLIB_TRUE}" && test -z "${WITHOUT_HEPMCLIB_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_HEPMCLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_HEPMCLIB_TRUE}" && test -z "${WITH_HEPMCLIB_FALSE}"; then as_fn_error $? "conditional \"WITH_HEPMCLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_HEPMCLIB_TRUE}" && test -z "${WITHOUT_HEPMCLIB_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_HEPMCLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_HEPMCINC_TRUE}" && test -z "${WITH_HEPMCINC_FALSE}"; then as_fn_error $? "conditional \"WITH_HEPMCINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_HEPMCINC_TRUE}" && test -z "${WITHOUT_HEPMCINC_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_HEPMCINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_HEPMC_TRUE}" && test -z "${WITH_HEPMC_FALSE}"; then as_fn_error $? "conditional \"WITH_HEPMC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_HEPMC_TRUE}" && test -z "${WITHOUT_HEPMC_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_HEPMC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_FASTJETINC_TRUE}" && test -z "${WITH_FASTJETINC_FALSE}"; then as_fn_error $? "conditional \"WITH_FASTJETINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_FASTJETLIB_TRUE}" && test -z "${WITH_FASTJETLIB_FALSE}"; then as_fn_error $? "conditional \"WITH_FASTJETLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_FASTJETINC_TRUE}" && test -z "${WITHOUT_FASTJETINC_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_FASTJETINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_FASTJETLIB_TRUE}" && test -z "${WITHOUT_FASTJETLIB_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_FASTJETLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_FASTJETLIB_TRUE}" && test -z "${WITH_FASTJETLIB_FALSE}"; then as_fn_error $? "conditional \"WITH_FASTJETLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_FASTJETLIB_TRUE}" && test -z "${WITHOUT_FASTJETLIB_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_FASTJETLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_FASTJETINC_TRUE}" && test -z "${WITH_FASTJETINC_FALSE}"; then as_fn_error $? "conditional \"WITH_FASTJETINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_FASTJETINC_TRUE}" && test -z "${WITHOUT_FASTJETINC_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_FASTJETINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_FASTJET_TRUE}" && test -z "${WITH_FASTJET_FALSE}"; then as_fn_error $? "conditional \"WITH_FASTJET\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_FASTJET_TRUE}" && test -z "${WITHOUT_FASTJET_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_FASTJET\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_DOXYGEN_TRUE}" && test -z "${WITH_DOXYGEN_FALSE}"; then as_fn_error $? "conditional \"WITH_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_ANALYSES_TRUE}" && test -z "${ENABLE_ANALYSES_FALSE}"; then as_fn_error $? "conditional \"ENABLE_ANALYSES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_UNVALIDATED_TRUE}" && test -z "${ENABLE_UNVALIDATED_FALSE}"; then as_fn_error $? "conditional \"ENABLE_UNVALIDATED\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_PRELIMINARY_TRUE}" && test -z "${ENABLE_PRELIMINARY_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PRELIMINARY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_OBSOLETE_TRUE}" && test -z "${ENABLE_OBSOLETE_FALSE}"; then as_fn_error $? "conditional \"ENABLE_OBSOLETE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_PDFLATEX_TRUE}" && test -z "${WITH_PDFLATEX_FALSE}"; then as_fn_error $? "conditional \"WITH_PDFLATEX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_PDFMANUAL_TRUE}" && test -z "${ENABLE_PDFMANUAL_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PDFMANUAL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_ASCIIDOC_TRUE}" && test -z "${WITH_ASCIIDOC_FALSE}"; then as_fn_error $? "conditional \"WITH_ASCIIDOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_YAML_CPPINC_TRUE}" && test -z "${WITH_YAML_CPPINC_FALSE}"; then as_fn_error $? "conditional \"WITH_YAML_CPPINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_YAML_CPPLIB_TRUE}" && test -z "${WITH_YAML_CPPLIB_FALSE}"; then as_fn_error $? "conditional \"WITH_YAML_CPPLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_YAML_CPPINC_TRUE}" && test -z "${WITHOUT_YAML_CPPINC_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_YAML_CPPINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_YAML_CPPLIB_TRUE}" && test -z "${WITHOUT_YAML_CPPLIB_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_YAML_CPPLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_YAML_CPPLIB_TRUE}" && test -z "${WITH_YAML_CPPLIB_FALSE}"; then as_fn_error $? "conditional \"WITH_YAML_CPPLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_YAML_CPPLIB_TRUE}" && test -z "${WITHOUT_YAML_CPPLIB_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_YAML_CPPLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_YAML_CPPINC_TRUE}" && test -z "${WITH_YAML_CPPINC_FALSE}"; then as_fn_error $? "conditional \"WITH_YAML_CPPINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_YAML_CPPINC_TRUE}" && test -z "${WITHOUT_YAML_CPPINC_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_YAML_CPPINC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_YAML_CPP_TRUE}" && test -z "${WITH_YAML_CPP_FALSE}"; then as_fn_error $? "conditional \"WITH_YAML_CPP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITHOUT_YAML_CPP_TRUE}" && test -z "${WITHOUT_YAML_CPP_FALSE}"; then as_fn_error $? "conditional \"WITHOUT_YAML_CPP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PYTHON_USE_TRUE}" && test -z "${PYTHON_USE_FALSE}"; then as_fn_error $? "conditional \"PYTHON_USE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PYTHON_USE_TRUE}" && test -z "${PYTHON_USE_FALSE}"; then as_fn_error $? "conditional \"PYTHON_USE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_PYEXT_TRUE}" && test -z "${ENABLE_PYEXT_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PYEXT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by Rivet $as_me 1.8.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ Rivet config.status 1.8.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "include/Rivet/Config/DummyConfig.hh") CONFIG_HEADERS="$CONFIG_HEADERS include/Rivet/Config/DummyConfig.hh" ;; "include/Rivet/Config/RivetConfig.hh") CONFIG_HEADERS="$CONFIG_HEADERS include/Rivet/Config/RivetConfig.hh" ;; "include/Rivet/Config/BuildOptions.hh") CONFIG_HEADERS="$CONFIG_HEADERS include/Rivet/Config/BuildOptions.hh" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/Rivet/Makefile") CONFIG_FILES="$CONFIG_FILES include/Rivet/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/Core/Makefile") CONFIG_FILES="$CONFIG_FILES src/Core/Makefile" ;; "src/Tools/Makefile") CONFIG_FILES="$CONFIG_FILES src/Tools/Makefile" ;; "src/Tools/yaml-cpp/Makefile") CONFIG_FILES="$CONFIG_FILES src/Tools/yaml-cpp/Makefile" ;; "src/Projections/Makefile") CONFIG_FILES="$CONFIG_FILES src/Projections/Makefile" ;; "src/Analyses/Makefile") CONFIG_FILES="$CONFIG_FILES src/Analyses/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "pyext/Makefile") CONFIG_FILES="$CONFIG_FILES pyext/Makefile" ;; "pyext/rivet/Makefile") CONFIG_FILES="$CONFIG_FILES pyext/rivet/Makefile" ;; "pyext/setup.py") CONFIG_FILES="$CONFIG_FILES pyext/setup.py" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "data/refdata/Makefile") CONFIG_FILES="$CONFIG_FILES data/refdata/Makefile" ;; "data/anainfo/Makefile") CONFIG_FILES="$CONFIG_FILES data/anainfo/Makefile" ;; "data/plotinfo/Makefile") CONFIG_FILES="$CONFIG_FILES data/plotinfo/Makefile" ;; "data/texmf/Makefile") CONFIG_FILES="$CONFIG_FILES data/texmf/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/rivetversion.sty") CONFIG_FILES="$CONFIG_FILES doc/rivetversion.sty" ;; "bin/Makefile") CONFIG_FILES="$CONFIG_FILES bin/Makefile" ;; "bin/rivet-config") CONFIG_FILES="$CONFIG_FILES bin/rivet-config" ;; "bin/rivet-buildplugin") CONFIG_FILES="$CONFIG_FILES bin/rivet-buildplugin" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "Doxyfile") CONFIG_FILES="$CONFIG_FILES Doxyfile" ;; "rivetenv.sh") CONFIG_FILES="$CONFIG_FILES rivetenv.sh" ;; "rivetenv.csh") CONFIG_FILES="$CONFIG_FILES rivetenv.csh" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Whether or not to build static libraries. build_old_libs=$enable_static # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi if test x$enable_pyrivet == xyes; then cat <. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: rivet-1.8.3/test/0000755000175000017500000000000012131473214012025 5ustar sunsunrivet-1.8.3/test/testNaN.cc0000644000175000017500000000223512116077757013731 0ustar sunsun#include "Rivet/AnalysisHandler.hh" #include "HepMC/GenEvent.h" #include "HepMC/IO_GenEvent.h" #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" using namespace std; class Test : public Rivet::Analysis { public: Test() : Analysis("Test") {} void init() { _h_test = bookHistogram1D("test", 50, 66.0, 116.0); } void analyze(const Rivet::Event & e) { _h_test->fill(90.,1.); _h_test->fill(1./0.,1.); _h_test->fill(sqrt(-1.),1.); _h_test->fill(30.,1.); _h_test->fill(130.,1.); } private: AIDA::IHistogram1D * _h_test; }; DECLARE_RIVET_PLUGIN(Test); int main() { Rivet::AnalysisHandler rivet; rivet.addAnalysis("Test"); std::istream* file = new std::fstream("testApi.hepmc", std::ios::in); HepMC::IO_GenEvent hepmcio(*file); HepMC::GenEvent* evt = hepmcio.read_next_event(); double sum_of_weights = 0.0; while (evt) { // Analyse current event rivet.analyze(*evt); sum_of_weights += evt->weights()[0]; // Clean up and get next event delete evt; evt = 0; hepmcio >> evt; } delete file; file = 0; rivet.setCrossSection(1.0); rivet.finalize(); rivet.writeData("NaN.aida"); return 0; } rivet-1.8.3/test/testMatVec.cc0000644000175000017500000001177612116077757014446 0ustar sunsun#include #include #include #include "Rivet/Math/MathUtils.hh" #include "Rivet/Math/Vectors.hh" #include "Rivet/Math/Matrices.hh" using namespace std; using namespace Rivet; int main() { FourVector a(1,0,0,0); cout << a << ": interval = " << a.invariant() << endl; assert(fuzzyEquals(a.invariant(), 1)); a.setZ(1); assert(isZero(a.invariant())); cout << a << ": interval = " << a.invariant() << endl; a.setY(2).setZ(3); cout << a << ": interval = " << a.invariant() << endl; assert(fuzzyEquals(a.invariant(), -12)); cout << a << ": vector = " << a.vector3() << endl << endl; FourMomentum b(1,0,0,0); cout << b << ": mass = " << b.mass() << endl; assert(fuzzyEquals(b.mass2(), 1)); b.setPz(1); cout << b << ": mass = " << b.mass() << endl; assert(isZero(b.mass2())); b.setPy(2).setPz(3).setE(6); cout << b << ": mass = " << b.mass2() << endl; assert(fuzzyEquals(b.mass2(), 23)); cout << b << ": vector = " << b.vector3() << endl << endl; Matrix3 m; m.set(0, 0, 7/4.0); m.set(0, 1, 3 * sqrt(3)/4.0); m.set(1, 0, 3 * sqrt(3)/4.0); m.set(1, 1, 13/4.0); m.set(2, 2, 9); cout << m << endl << endl; EigenSystem<3> es = diagonalize(m); cout << "Matrices:" << endl; cout << Matrix3() << endl; cout << Matrix3::mkIdentity() << endl; const Matrix3 I3 = Matrix3::mkIdentity(); cout << Matrix3::mkIdentity() * m * I3 << endl; cout << "tr(0) & det(0): " << Matrix3().trace() << ", " << Matrix3().det() << endl; cout << "tr(I3) & det(I3): " << I3.trace() << ", " << I3.det() << endl; Matrix3 m1 = Matrix3::mkIdentity(); Matrix3 m2 = m1; m1.setRow(1, Vector3(1,2,3)); m2.setColumn(1, Vector3(3,2,1)); Matrix3 m3 = Matrix3::mkZero(); cout << m1 << " + " << m2 << " = " << m1 + m2 << endl; m3.setRow(0, Vector3(2,3,0)).setRow(1, Vector3(1,4,3)).setRow(2, Vector3(0,1,2)); cout << m1+m2 << " == " << m3 << ": " << (m1+m2 == m3 ? "true" : "false") << endl; cout << endl; Vector3 v3(1,2,3); cout << "Vector: " << v3 << endl; cout << "Invert: " << v3 << " --> " << -v3 << endl; const Matrix3 rot90(Vector3(0,0,1), PI/2.0); const Matrix3 rot90m(Vector3(0,0,1), -PI/2.0); const Matrix3 rot180(Vector3(0,0,1), PI); const Matrix3 rot180m(Vector3(0,0,1), -PI); const Vector3 v3_90 = rot90*v3; cout << "Rot 90: " << v3 << " ---> " << v3_90 << endl; const Vector3 v3_90m = rot90m*v3; cout << "Rot -90: " << v3 << " ---> " << v3_90m << endl; const Vector3 v3_180 = rot180*v3; cout << "Rot 180: " << v3 << " ---> " << v3_180 << endl; const Vector3 v3_180m = rot180m*v3; cout << "Rot -180: " << v3 << " ---> " << v3_180m << endl; assert(fuzzyEquals(v3_180, v3_180m)); const Vector3 v3_9090 = rot90*rot90*v3; cout << "Rot 2 x 90: " << v3 << " ---> " << v3_9090 << endl; assert(fuzzyEquals(v3_180, v3_9090)); const Vector3 v3_90m90m = rot90m*rot90m*v3; cout << "Rot 2 x -90: " << v3 << " ---> " << v3_90m90m << endl; assert(fuzzyEquals(v3_180, v3_90m90m)); const Vector3 v3_9090m = rot90*rot90m*v3; const Vector3 v3_90m90 = rot90m*rot90*v3; cout << "Rot 90*-90: "<< v3 << " ---> " << v3_9090m << endl; cout << "Rot -90*90: "<< v3 << " ---> " << v3_90m90 << endl; assert(fuzzyEquals(v3, v3_9090m)); assert(fuzzyEquals(v3, v3_90m90)); const Vector3 v3_90i = rot90.inverse()*v3; cout << "Rot (90)^-1: "<< v3 << " ---> " << v3_90i << endl; assert(fuzzyEquals(v3_90i, v3_90m)); const Vector3 v3_9090i = rot90*rot90.inverse()*v3; const Vector3 v3_90i90 = rot90.inverse()*rot90*v3; cout << "Rot 90*(90)^-1: "<< v3 << " ---> " << v3_9090i << endl; cout << "Rot (90)^-1*90: "<< v3 << " ---> " << v3_90i90 << endl; assert(fuzzyEquals(v3, v3_9090i)); assert(fuzzyEquals(v3, v3_90i90)); const Matrix3 rot1(Vector3(0,1,0), PI/180.0); cout << "Rot 0 x 45 x 1: " << v3 << endl; for (size_t i = 0; i < 8; ++i) { for (size_t j = 0; j < 45; ++j) { v3 = rot1*v3; } cout << "Rot " << i+1 << " x 45 x 1: " << v3 << endl; } assert(fuzzyEquals(v3, Vector3(1,2,3))); cout << endl; cout << "Boosts:" << endl; LorentzTransform ltX(0.5,0,0); cout << "LTx: " << ltX << endl; cout << "I on LTx: " << ltX.rotate(Matrix3::mkIdentity()) << endl; cout << "Rot90 on LTx: " << ltX.rotate(rot90) << endl; cout << endl; cout << "X-boosts:" << endl; const FourMomentum p1 = FourMomentum(10,0,0,1); const FourMomentum p2 = ltX.transform(p1); cout << p1 << " -> " << p2 << endl; cout << p2 << " -> " << ltX.inverse().transform(p2) << endl; //cout << p1.boostVector() << endl; const FourMomentum p3 = LorentzTransform(-p1.boostVector()).transform(p1); cout << p1 << " -> " << p3 << endl; cout << endl; LorentzTransform ltY(0,0.4,0); cout << FourMomentum(1,0,0,1) << " -> " //<< "\n " << (ltX * ltY).transform(FourMomentum(1,0,0,1)) << endl; cout << FourMomentum(1,0,0,1) << " -> " //<< "\n " << (ltY * ltX).transform(FourMomentum(1,0,0,1)) << endl; cout << (ltX * ltY).boost() << endl; cout << (ltY * ltX).boost() << endl; cout << (ltX * ltX.inverse()).boost() << endl; return EXIT_SUCCESS; } rivet-1.8.3/test/testBoost.cc0000644000175000017500000000443512116077757014347 0ustar sunsun// Boost shared_ptr_example.cpp --------------------------------------------// // Copyright Beman Dawes 2001. Distributed under the Boost // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org/libs/smart_ptr for documentation. // Revision History // 21 May 01 Initial complete version (Beman Dawes) // The original code for this example appeared in the shared_ptr documentation. // Ray Gallimore pointed out that foo_set was missing a Compare template // argument, so would not work as intended. At that point the code was // turned into an actual .cpp file so it could be compiled and tested. #include #include #include #include #include // The application will produce a series of // objects of type Foo which later must be // accessed both by occurrence (std::vector) // and by ordering relationship (std::set). struct Foo { Foo( int _x ) : x(_x) {} ~Foo() { std::cout << "Destructing a Foo with x=" << x << "\n"; } int x; /* ... */ }; typedef boost::shared_ptr FooPtr; struct FooPtrOps { bool operator()( const FooPtr & a, const FooPtr & b ) { return a->x > b->x; } void operator()( const FooPtr & a ) { std::cout << a->x << "\n"; } }; int main() { std::vector foo_vector; std::set foo_set; // NOT multiset! FooPtr foo_ptr( new Foo( 2 ) ); foo_vector.push_back( foo_ptr ); foo_set.insert( foo_ptr ); foo_ptr.reset( new Foo( 1 ) ); foo_vector.push_back( foo_ptr ); foo_set.insert( foo_ptr ); foo_ptr.reset( new Foo( 3 ) ); foo_vector.push_back( foo_ptr ); foo_set.insert( foo_ptr ); foo_ptr.reset ( new Foo( 2 ) ); foo_vector.push_back( foo_ptr ); foo_set.insert( foo_ptr ); std::cout << "foo_vector:\n"; std::for_each( foo_vector.begin(), foo_vector.end(), FooPtrOps() ); std::cout << "\nfoo_set:\n"; std::for_each( foo_set.begin(), foo_set.end(), FooPtrOps() ); std::cout << "\n"; // Expected output: // // foo_vector: // 2 // 1 // 3 // 2 // // foo_set: // 3 // 2 // 1 // // Destructing a Foo with x=2 // Destructing a Foo with x=1 // Destructing a Foo with x=3 // Destructing a Foo with x=2 return 0; } rivet-1.8.3/test/testApi.hepmc0000644000175000017500000010543712116077757014505 0ustar sunsun HepMC::Version 2.05.01 HepMC::IO_GenEvent-START_EVENT_LISTING E 1 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 -3 5 10001 10004 0 1 1.8548240916556374e+01 U GEV MM C 1.8548240916556374e+01 1.8548240916556374e+01 H 0 0 0 0 0 0 0 0 0 0 0 0 0 F 21 -2 1.5581320296011564e-01 5.9291995124331955e-02 1.1503889593260666e+02 2.2479383216560982e+00 9.6775442650348271e+00 0 0 V -1 5 0 0 0 0 1 2 1 1.0000000000000000e+00 P 10001 -2212 0 0 -9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -1 0 P 10002 -2 3.1334550209838247e-02 -1.9856655234457682e-01 -6.8485476866349174e+01 6.8485771895635253e+01 -3.4385216478958026e-06 2 0 0 -4 0 P 10003 -2103 -3.1334550209838247e-02 1.9856655234457682e-01 -9.1151434915100970e+02 9.1151437131770911e+02 0 1 0 0 0 0 V -2 4 0 0 0 0 1 2 1 1.0000000000000000e+00 P 10004 2212 0 0 9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -2 0 P 10005 2 9.9550701972045477e-02 -6.8933339761464249e-02 4.0872407942141962e+02 4.0872409735790541e+02 5.3947966093944364e-06 2 0 0 -4 0 P 10006 2103 -9.9550701972045477e-02 6.8933339761464249e-02 5.7127574659593904e+02 5.7127575942875012e+02 0 1 0 0 0 0 V -3 1 0 0 0 0 0 3 1 1.0000000000000000e+00 P 10009 11 -1.0057289437687302e+01 8.9561426790315632e+00 5.3938063575053313e+01 5.5593850961658333e+01 -9.5367431640625000e-07 3 0 0 -4 0 P 10010 -11 -5.9729693232666278e+01 -2.1223104378145713e+01 -1.4965736829763969e+01 6.5130865892999168e+01 9.5367431640625000e-07 3 0 0 -4 0 P 10011 -2 6.9786982670353581e+01 1.2266961699114150e+01 5.5618456933778681e+01 9.0078377268101136e+01 1.3486991523486091e-06 3 0 0 -4 0 V -4 2 0 0 0 0 0 17 1 1.0000000000000000e+00 P 10007 21 0 0 1.5269693890091332e+02 1.5269693890091332e+02 0 3 0 0 -3 0 P 10008 -2 0 0 -5.8106155221845313e+01 5.8106155221845313e+01 0 3 0 0 -3 0 P 10012 2 1.5660174715748463e+00 1.7151081050544477e+00 1.3411828206066216e+00 2.6819354749119961e+00 -1.7881393432617188e-07 1 0 0 0 0 P 10013 21 -5.2984491196097772e-01 1.9200019635635792e+00 1.9405843574598158e+00 2.7808291603830400e+00 -1.3978528260658472e-07 1 0 0 0 0 P 10014 21 6.3406073769031881e+00 -7.2262878532848140e-01 8.2376778478008902e+01 8.2623599090601104e+01 2.1324805998800180e-06 1 0 0 0 0 P 10015 21 -1.0669952230671000e+00 -4.5483128601492312e-01 1.6244827775536852e+01 1.6286183707721076e+01 -4.1295309247228556e-07 1 0 0 0 0 P 10016 3 7.0865166857457158e+00 -3.8562497623673253e+00 4.2180903359772913e+01 4.2945523506107271e+01 0 1 0 0 0 0 P 10017 -3 4.9120506126908374e+00 1.1220815132067843e+01 6.5002445368187395e+01 6.6146449922077181e+01 -1.3486991523486091e-06 1 0 0 0 0 P 10018 21 -1.4077071137196007e+00 6.1779801074645735e-01 6.9169614396803858e-01 1.6857512437127991e+00 -2.3084779657169682e-07 1 0 0 0 0 P 10019 21 -2.4204803013442029e+00 2.0630790209188508e+00 -2.1403161069179433e+00 3.8335327014756473e+00 -1.1151007970493857e-07 1 0 0 0 0 P 10020 1 -1.4962442600833110e+00 8.6039938396774582e-02 -1.6072688736786400e+00 2.1976039199837203e+00 1.8371385344770479e-07 1 0 0 0 0 P 10021 -1 -3.4685965825879586e+00 1.3991663929295572e+00 7.5531864670846316e-01 3.8156696798740168e+00 7.3000482999777135e-08 1 0 0 0 0 P 10022 11 -1.9176491516546683e+01 6.8041817952536086e+00 5.1117459592264822e+01 5.5018445924561256e+01 -1.7841612752790171e-06 2 0 0 -5 0 P 10023 -11 -5.6208441956116118e+01 -2.5993019253010448e+01 -2.4527847201458499e+01 6.6608117263285095e+01 -2.1324805998800180e-06 2 0 0 -5 0 P 10024 -2 9.0208684119680598e+00 2.5953802334891223e+00 4.4874468216078185e+01 4.5845719136449802e+01 -9.5367431640625000e-07 1 0 0 0 0 P 10025 21 5.5772636669486054e+01 3.6865604277933306e+00 5.9212633521719411e+01 8.1426738221739697e+01 1.9073486328125000e-06 1 0 0 0 0 P 10026 21 1.2069898892391315e+00 -1.3489018255984351e+00 2.7757364568140885e+00 3.3137703006568024e+00 -1.9314112360500873e-07 1 0 0 0 0 V -5 3 0 0 0 0 0 2 1 1.0000000000000000e+00 P 10027 11 -1.9176491517750176e+01 6.8041817941877403e+00 5.1117459589806444e+01 5.5018445924937907e+01 5.1100037754117005e-04 1 0 0 0 0 P 10028 -11 -5.6208441954912637e+01 -2.5993019251944581e+01 -2.4527847199000092e+01 6.6608117262908479e+01 5.1100393719229350e-04 1 0 0 0 0 E 2 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 -3 5 10001 10004 0 1 3.4805797479809996e+02 U GEV MM C 1.8330310785732817e+02 1.6475486694077179e+02 H 0 0 0 0 0 0 0 0 0 0 0 0 0 F 1 -1 3.7860501198092374e-02 5.7152878553433983e-02 9.1173432457479080e+01 1.1423244652484890e+01 6.9332747485548856e+00 0 0 V -1 5 0 0 0 0 1 2 1 1.0000000000000000e+00 P 10001 -2212 0 0 -9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -1 0 P 10002 -1 -8.3018614151087622e-01 -6.3576138826690019e-03 -2.4658465403869712e+02 2.4658605162667408e+02 3.8146972656250000e-06 2 0 0 -4 0 P 10003 -2203 8.3018614151087622e-01 6.3576138826690019e-03 -7.3339761778648165e+02 7.3339808768794524e+02 0 1 0 0 0 0 V -2 4 0 0 0 0 1 4 1 1.0000000000000000e+00 P 10004 2212 0 0 9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -2 0 P 10005 1 -1.4109182933927069e+00 -1.1114411232483281e+00 5.5525922383827883e+01 5.5554964210014184e+01 9.5367431640625000e-07 2 0 0 -4 0 P 10006 2103 1.7745849042660405e-01 3.5192777399557945e-01 6.6826439097805724e+02 6.6826450720799744e+02 -7.6293945312500000e-06 1 0 0 0 0 P 10007 2 1.1348115400980969e+00 5.2666728922623707e-01 2.1864448461661138e+02 2.1864806385817528e+02 0 1 0 0 0 0 P 10008 -1 9.8648262868006098e-02 2.3284606002651170e-01 3.7547473846682188e+01 3.7548325409193943e+01 -4.7683715820312500e-07 1 0 0 0 0 V -3 1 0 0 0 0 0 2 1 1.0000000000000000e+00 P 10011 11 -9.3416528031186363e+00 -3.5784791111464962e+01 -3.6672311214060187e+01 5.2083357819615287e+01 6.7434957617430455e-07 3 0 0 -4 0 P 10012 -11 9.3416528031186363e+00 3.5784791111464962e+01 1.7765781405825400e+01 4.1029754336880544e+01 4.7683715820312500e-07 3 0 0 -4 0 V -4 2 0 0 0 0 0 11 1 1.0000000000000000e+00 P 10009 1 0 0 3.7103291174130511e+01 3.7103291174130526e+01 1.0662402999400090e-06 3 0 0 -3 0 P 10010 -1 0 0 -5.6009820982365298e+01 5.6009820982365305e+01 9.5367431640625000e-07 3 0 0 -3 0 P 10013 21 -2.1982539020096108e+00 -2.5726401261436632e-02 1.0081857304896761e+01 1.0318761010010951e+01 -5.5914113042633888e-07 1 0 0 0 0 P 10014 3 2.4078395968249713e+00 -3.9726479794497527e+00 -2.3210640877645481e+01 2.3670941541132080e+01 6.7434957617430455e-07 1 0 0 0 0 P 10015 -3 2.0029824316248890e+00 -3.7811202514946052e+00 -4.3452014537013470e+00 6.0983263811400539e+00 -3.5762786865234375e-07 1 0 0 0 0 P 10016 21 1.6174751204879265e+00 -1.1793174327627759e-01 -3.9795172126495979e+00 4.2972887856466011e+00 0 1 0 0 0 0 P 10017 21 1.0900181948934192e+01 1.0515937959753843e+00 -1.7800628686632898e+00 1.1094522966220703e+01 3.7697287323097939e-07 1 0 0 0 0 P 10018 21 1.6281967316231665e+00 -3.2636807133799053e+00 -1.2312392615361608e+02 1.2317793563734072e+02 -2.6973983046972182e-06 1 0 0 0 0 P 10019 21 4.2009889442101498e+00 -4.7820926273579367e+00 -2.5880078577474819e+01 2.6651363664590946e+01 5.8400386399821708e-07 1 0 0 0 0 P 10020 11 -2.1297715489101332e+01 -2.3862874310205740e+01 -4.1857698622123571e+01 5.2679183643446009e+01 0 2 0 0 -5 0 P 10021 -11 -1.5027998174979422e+00 3.7636681493319266e+01 2.3036536806108273e+01 4.4152692207160108e+01 1.6518123698891422e-06 2 0 0 -5 0 V -5 3 0 0 0 0 0 4 1 1.0000000000000000e+00 P 10022 11 -2.1289485589941826e+01 -2.3853765827268919e+01 -4.1841463812050364e+01 5.2658830551226302e+01 5.1099993258303612e-04 1 0 0 0 0 P 10023 -11 -1.5027843755098913e+00 3.7636584455995674e+01 2.3036626151641556e+01 4.4152655583828583e+01 5.1100104497764452e-04 1 0 0 0 0 P 10024 22 -6.9874533434031941e-03 -7.6118133720330791e-03 -1.3648893050163887e-02 1.7118892736731256e-02 0 1 0 0 0 0 P 10025 22 -1.2578878041506157e-03 -1.3996322412092247e-03 -2.6752625563464696e-03 3.2708228144998405e-03 -7.1289534179469858e-11 1 0 0 0 0 E 3 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 -3 5 10001 10005 0 1 2.0224471410025740e+02 U GEV MM C 1.8961697660497126e+02 9.5330584452837584e+01 H 0 0 0 0 0 0 0 0 0 0 0 0 0 F 2 -2 1.6281666798566168e-02 1.1468646532833089e-01 8.4695743858020606e+01 3.8957743475813501e+01 4.8656126914636584e+00 0 0 V -1 5 0 0 0 0 1 3 1 1.0000000000000000e+00 P 10001 -2212 0 0 -9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -1 0 P 10002 21 -1.1365848049186726e+00 5.3032024091960361e-01 -2.9016427550611883e+02 2.9016698613827111e+02 9.3440618239714732e-06 2 0 0 -4 0 P 10003 -2203 1.1815778861104631e+00 2.6739112003123539e-01 -5.5429934519241453e+02 5.5430066904618786e+02 -7.6293945312500000e-06 1 0 0 0 0 P 10004 -1 -4.4993081191790386e-02 -7.9771136095083894e-01 -1.3552537276828696e+02 1.3552772790752408e+02 0 1 0 0 0 0 V -2 4 0 0 0 0 1 2 1 1.0000000000000000e+00 P 10005 2212 0 0 9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -2 0 P 10006 2 -6.0706174248222022e-01 1.1120786752471072e+00 5.4384369913842882e+01 5.4399126223357896e+01 1.1680077279964342e-06 2 0 0 -4 0 P 10007 2103 6.0706174248222022e-01 -1.1120786752471072e+00 9.2560462355297750e+02 9.2560549068465900e+02 1.0789593218788873e-05 1 0 0 0 0 V -3 1 0 0 0 0 0 2 1 1.0000000000000000e+00 P 10010 11 -2.1363266913693074e+01 -3.3278925383338496e+01 -2.5262706642846453e+01 4.6926329441135962e+01 9.5367431640625000e-07 3 0 0 -4 0 P 10011 -11 2.1363266913693074e+01 3.3278925383338496e+01 -7.1173995916323008e+01 8.1422440043223162e+01 1.3486991523486091e-06 3 0 0 -4 0 V -4 2 0 0 0 0 0 9 1 1.0000000000000000e+00 P 10008 2 0 0 1.5956033462594810e+01 1.5956033462594844e+01 1.0392424925662694e-06 3 0 0 -3 0 P 10009 -2 0 0 -1.1239273602176428e+02 1.1239273602176428e+02 0 3 0 0 -3 0 P 10012 21 -1.2794943858796213e+00 2.2567289276541402e-01 3.7937892230986094e+01 3.7960133048606956e+01 6.7434957617430455e-07 1 0 0 0 0 P 10013 21 9.3003550320935269e-01 -1.6254708699510849e+00 -4.2090442584636500e+00 4.6068617470026121e+00 8.5548759069486399e-07 1 0 0 0 0 P 10014 21 -1.0351494500288601e+00 1.1932455565516839e-01 -2.9186016161804860e+00 3.0990334182529931e+00 3.6010283153040923e-07 1 0 0 0 0 P 10015 21 -1.7148587463653098e+00 1.2148912865500783e+00 -5.9746238152825111e+00 6.3334691198632935e+00 2.5288109106536417e-07 1 0 0 0 0 P 10016 2 7.9530714164401894e-01 2.7337000348275984e+00 -1.6421508808147485e+02 1.6423976614369772e+02 3.3036247397782844e-06 1 0 0 0 0 P 10017 11 -2.0935914044219963e+01 -3.3286381668821129e+01 -2.3635915553163677e+01 4.5879758123879455e+01 0 2 0 0 -5 0 P 10018 -11 2.1496427434239479e+01 3.2260662685140652e+01 -7.2764524498696829e+01 8.2447090760325821e+01 1.3486991523486091e-06 2 0 0 -5 0 V -5 3 0 0 0 0 0 4 1 1.0000000000000000e+00 P 10019 11 -2.0631009656762220e+01 -3.2801745554102865e+01 -2.3290693163083002e+01 4.5211165204311236e+01 5.1099748530637366e-04 1 0 0 0 0 P 10020 -11 2.1496674133568057e+01 3.2260917547115781e+01 -7.2763221198607056e+01 8.2446104572897539e+01 5.1100037754117005e-04 1 0 0 0 0 P 10021 22 -5.4577185569473601e-02 -8.6492079144305956e-02 -6.3845231045134759e-02 1.2056434989911519e-01 -2.6341780319308772e-09 1 0 0 0 0 P 10022 22 -2.5057390121684520e-01 -3.9839889754911456e-01 -2.8268045912525336e-01 5.4901475709733272e-01 1.0536712127723509e-08 1 0 0 0 0 E 4 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 -3 5 10001 10005 0 1 6.5708938216132651e+01 U GEV MM C 1.5863996700776161e+02 7.4185815959962454e+01 H 0 0 0 0 0 0 0 0 0 0 0 0 0 F 1 21 7.7514184898517371e-02 8.6653535604307025e-02 1.0604944743514686e+02 4.7514828395967248e+00 1.1266143738329104e+01 0 0 V -1 5 0 0 0 0 1 3 1 1.0000000000000000e+00 P 10001 -2212 0 0 -9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -1 0 P 10002 21 -4.4307189263122848e-01 -2.5108872409280308e-01 -1.2309734961816730e+02 1.2309840308170828e+02 2.6973983046972182e-06 2 0 0 -4 0 P 10003 -2103 2.5417272193778423e-01 6.4613783393335056e-01 -6.2834182306718583e+02 6.2834220669414492e+02 -1.0789593218788873e-05 1 0 0 0 0 P 10004 -2 1.8889917069344428e-01 -3.9504910984054753e-01 -2.2855490179102810e+02 2.2855532126687046e+02 0 1 0 0 0 0 V -2 4 0 0 0 0 1 2 1 1.0000000000000000e+00 P 10005 2212 0 0 9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -2 0 P 10006 1 -1.1714286481935332e+00 1.1882518306804069e+00 1.6812717554486650e+02 1.6813545534534137e+02 0 2 0 0 -4 0 P 10007 2203 1.1714286481935332e+00 -1.1882518306804069e+00 8.1186689893151470e+02 8.1186861361193485e+02 -1.0789593218788873e-05 1 0 0 0 0 V -3 1 0 0 0 0 0 3 1 1.0000000000000000e+00 P 10010 11 -1.8321008961982429e+01 -1.5083887311444336e+01 -2.0895231360296624e+01 3.1619514850954218e+01 -1.0115243642614567e-06 3 0 0 -4 0 P 10011 -11 3.6116949868161107e+01 6.5697989581191393e+01 9.3379190941268497e+00 7.5550358277099221e+01 0 3 0 0 -4 0 P 10012 1 -1.7795940906178679e+01 -5.0614102269747058e+01 2.6007485744959258e+00 5.3714492964714481e+01 9.5367431640625000e-07 3 0 0 -4 0 V -4 2 0 0 0 0 0 12 1 1.0000000000000000e+00 P 10008 1 0 0 7.5963901200547056e+01 7.5963901200547028e+01 -2.1324805998800180e-06 3 0 0 -3 0 P 10009 21 0 0 -8.4920464892220906e+01 8.4920464892220878e+01 -2.3360154559928683e-06 3 0 0 -3 0 P 10013 21 3.7871613646980073e-01 8.5636367163114868e-01 2.9336786139339779e+00 3.0794893829928633e+00 -1.1151007970493857e-07 1 0 0 0 0 P 10014 21 5.3070254067219091e-01 3.6325079457528386e-02 6.2231069368271562e+01 6.2233342826950071e+01 -1.6518123698891422e-06 1 0 0 0 0 P 10015 21 -1.2312309031578797e+01 -3.0845759551934746e+00 2.3408686094697444e+01 2.6628446203121506e+01 0 1 0 0 0 0 P 10016 21 -3.1544063762628416e+00 -7.9375377969520562e+00 -2.9254131726520171e+01 3.0475547721693925e+01 -6.7434957617430455e-07 1 0 0 0 0 P 10017 21 4.9743215949089850e+00 -6.6401502813228563e-01 -4.3054692764001361e+00 6.6122505228695712e+00 1.1920928955078125e-07 1 0 0 0 0 P 10018 11 -1.8428168677857840e+01 -1.2553690317336256e+01 -1.9526055287980029e+01 2.9638815369586155e+01 8.9208063763950856e-07 2 0 0 -5 0 P 10019 -11 4.0863520977687145e+01 7.1361872633620891e+01 7.2250643567898329e+00 8.2550262067607960e+01 -2.8610229492187500e-06 2 0 0 -5 0 P 10020 1 7.7056155320433570e-02 -5.4369037677176557e+00 -5.9668192307969259e-01 5.4700904515213864e+00 3.9537248496477602e-07 1 0 0 0 0 P 10021 21 -1.0058613129986261e+01 -3.4743618354622448e+01 1.5289562038364064e+00 3.6202657658570324e+01 8.2590618494457111e-07 1 0 0 0 0 P 10022 21 -4.4853207301975671e+00 -6.8970570581677402e+00 1.3847095031499974e+00 8.3429562221358662e+00 4.2981520598697533e-07 1 0 0 0 0 V -5 3 0 0 0 0 0 2 1 1.0000000000000000e+00 P 10023 11 -1.8428168676030655e+01 -1.2553690314750247e+01 -1.9526055287155636e+01 2.9638815371216687e+01 5.1099937638482385e-04 1 0 0 0 0 P 10024 -11 4.0863520975859949e+01 7.1361872631034885e+01 7.2250643559654399e+00 8.2550262065977407e+01 5.1099414809203632e-04 1 0 0 0 0 E 5 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 -3 5 10001 10006 0 1 2.4413557236900945e+02 U GEV MM C 1.7573908808001119e+02 5.9954158448190235e+01 H 0 0 0 0 0 0 0 0 0 0 0 0 0 F -1 1 1.7952759770150828e-01 1.2725524690370898e-02 9.3682728295417192e+01 2.8399958302788392e-01 3.4367846776779949e+01 0 0 V -1 5 0 0 0 0 1 4 1 1.0000000000000000e+00 P 10001 -2212 0 0 -9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -1 0 P 10002 3 -4.2134396713850869e-01 -3.8793850936780609e-02 -3.1657994260613883e+01 3.1660821788238280e+01 2.8007841406990838e-06 2 0 0 -4 0 P 10003 -2103 3.8000696590464755e-01 6.3060997000458552e-01 -6.2395522911689420e+02 6.2395566350225909e+02 0 1 0 0 0 0 P 10004 -2 2.7148833423898716e-01 -5.4837048730574778e-01 -2.2820906370929274e+02 2.2820988404356856e+02 0 1 0 0 0 0 P 10005 -3 -2.3015133300512600e-01 -4.3445631762057152e-02 -9.6152512513348753e+01 9.6152797774108961e+01 1.3486991523486091e-06 1 0 0 0 0 V -2 4 0 0 0 0 1 4 1 1.0000000000000000e+00 P 10006 2212 0 0 9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -2 0 P 10007 -1 2.7221074009618897e+00 -2.3595499068899045e-01 1.9245826843590910e+02 1.9247766268533198e+02 -2.6973983046972182e-06 2 0 0 -4 0 P 10008 2103 2.7754173546231398e-01 -6.4802580598781390e-01 3.9204981278163410e+02 3.9205044658688308e+02 -5.3947966093944364e-06 1 0 0 0 0 P 10009 2 -3.3339697171565956e+00 9.5740906522883473e-01 3.8993363556733425e+02 3.8994906351080232e+02 0 1 0 0 0 0 P 10010 1 3.3432058073239196e-01 -7.3428268552030315e-02 5.5330828152723424e+00 5.5436601088077095e+00 5.9604644775390625e-08 1 0 0 0 0 V -3 1 0 0 0 0 0 2 1 1.0000000000000000e+00 P 10013 11 -3.9987779747911929e+01 -1.9006871161455720e+01 1.1248617929259183e+02 1.2088599675876776e+02 1.3486991523486091e-06 3 0 0 -4 0 P 10014 -11 3.9987779747911929e+01 1.9006871161455720e+01 5.0979852258322779e+01 6.7522063185273822e+01 -9.5367431640625000e-07 3 0 0 -4 0 V -4 2 0 0 0 0 0 10 1 1.0000000000000000e+00 P 10011 -1 0 0 1.7593704574747809e+02 1.7593704574747812e+02 3.3036247397782844e-06 3 0 0 -3 0 P 10012 1 0 0 -1.2471014196563473e+01 1.2471014196563480e+01 4.4604031881975428e-07 3 0 0 -3 0 P 10015 21 1.6739898951735759e+00 -1.4534038715540738e+00 3.1457699033199393e+00 3.8484403682043902e+00 -8.4293697021788069e-08 1 0 0 0 0 P 10016 3 -1.0863012088480934e+00 3.0024642786267504e+00 -1.2688149569709157e+01 1.3083729650374362e+01 2.9200193199910854e-07 1 0 0 0 0 P 10017 21 -6.3661767058823449e-01 -8.0818140726939214e-01 3.4402731123079340e+00 3.5908102613240436e+00 4.2146848510894035e-08 1 0 0 0 0 P 10018 21 -1.7798230003825772e+00 1.1713104688403124e+00 1.1365030951475119e+00 2.4148245096457059e+00 -5.1619136559035694e-08 1 0 0 0 0 P 10019 21 7.5041868888964758e-01 -4.0411157661239200e-01 2.3560108860446833e+00 2.5054384187499132e+00 4.2146848510894035e-08 1 0 0 0 0 P 10020 -1 4.7925206461535108e+00 -8.2438324371929514e+00 -7.5431438043314536e-01 9.5654596115843109e+00 2.6656007498500226e-07 1 0 0 0 0 P 10021 11 -4.0146846022994076e+01 -1.6464539179785589e+01 1.1267357696378585e+02 1.2074015587952029e+02 -2.3360154559928683e-06 2 0 0 -5 0 P 10022 -11 3.8733422106419646e+01 2.2925544883321560e+01 5.1490604164831467e+01 6.8389625774167129e+01 -2.1324805998800180e-06 2 0 0 -5 0 V -5 3 0 0 0 0 0 3 1 1.0000000000000000e+00 P 10023 11 -3.9747004587481847e+01 -1.6299473485147537e+01 1.1155306590130587e+02 1.1953904685002529e+02 5.1099681786524981e-04 1 0 0 0 0 P 10024 -11 3.8733284072073545e+01 2.2926580648279501e+01 5.1492643660763413e+01 6.8391430359844705e+01 5.1099770778655453e-04 1 0 0 0 0 P 10025 22 -3.9970340116613823e-01 -1.6610145959600608e-01 1.1184715665477714e+00 1.1993044438171354e+00 1.4901161193847656e-08 1 0 0 0 0 E 6 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 -3 5 10001 10006 0 1 2.6926974229980241e+00 U GEV MM C 1.4689802297050898e+02 5.6816732689156041e+01 H 0 0 0 0 0 0 0 0 0 0 0 0 0 F 21 1 3.8670789067178707e-01 4.9748252971482533e-02 1.2774023790133566e+02 5.7014434760047868e-02 4.0410222119689205e+00 0 0 V -1 5 0 0 0 0 1 4 1 1.0000000000000000e+00 P 10001 -2212 0 0 -9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -1 0 P 10002 1 1.3272371627216759e+00 4.3473973555493156e-01 -8.3562181642173954e+01 8.3573852118491288e+01 -1.6518123698891422e-06 2 0 0 -4 0 P 10003 -2203 -1.0450749345727490e+00 -4.3453853565404038e-01 -4.5284289729882897e+02 4.5284431170034100e+02 0 1 0 0 0 0 P 10004 -1 -8.2770669795724561e-01 -5.4495837660223012e-01 -1.3654971325521990e+02 1.3655330925353968e+02 -1.9073486328125000e-06 1 0 0 0 0 P 10005 -1 5.4554446980831872e-01 5.4475717670133894e-01 -3.0703627955244082e+02 3.0703724748074899e+02 3.8146972656250000e-06 1 0 0 0 0 V -2 4 0 0 0 0 1 2 1 1.0000000000000000e+00 P 10006 2212 0 0 9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -2 0 P 10007 2 -3.1796481678994432e-01 2.3875852318329102e-02 4.7467221948355348e+02 4.7467232658026711e+02 -7.6293945312500000e-06 2 0 0 -4 0 P 10008 2101 3.1796481678994432e-01 -2.3875852318329102e-02 5.0531885226511014e+02 5.0531895286661199e+02 0 1 0 0 0 0 V -3 1 0 0 0 0 0 3 1 1.0000000000000000e+00 P 10011 11 -4.9346516203802508e+00 -1.9057971814202045e+01 1.0327600189210169e+02 1.0513557743743472e+02 0 3 0 0 -4 0 P 10012 -11 9.3368478311390433e+01 3.6063441970529553e+01 2.0762036105222009e+02 2.3048743764552671e+02 -2.6973983046972182e-06 3 0 0 -4 0 P 10013 1 -8.8433826691010182e+01 -1.7005470156327508e+01 1.9324082001976663e+01 9.2104005687442751e+01 -1.9073486328125000e-06 3 0 0 -4 0 V -4 2 0 0 0 0 0 14 1 1.0000000000000000e+00 P 10009 21 0 0 3.7897373285835141e+02 3.7897373285835135e+02 -7.6293945312500000e-06 3 0 0 -3 0 P 10010 1 0 0 -4.8753287912052912e+01 4.8753287912052883e+01 -1.6518123698891422e-06 3 0 0 -3 0 P 10014 2 -1.3732581971231447e-01 -2.7996679483914715e+00 1.4106127544934509e+01 1.4381927315765790e+01 -2.3841857910156250e-07 1 0 0 0 0 P 10015 21 4.9382235649279078e+00 -1.7023931611255108e+00 1.0252315257567641e+01 1.1506266231615292e+01 -2.9200193199910854e-07 1 0 0 0 0 P 10016 21 -1.9462513018463039e+00 6.8173321258122832e-01 8.0299441454685976e+00 8.2905161047078462e+00 1.1920928955078125e-07 1 0 0 0 0 P 10017 21 -6.6333134018732132e+00 -3.3925998076702788e+00 4.3888363763855565e+01 4.4516278528320242e+01 6.7434957617430455e-07 1 0 0 0 0 P 10018 21 -1.2172553614868473e+00 -2.8624036554238517e+00 1.6854478359458440e+01 1.7139092918562085e+01 -4.1295309247228556e-07 1 0 0 0 0 P 10019 21 2.0510196735299857e+00 -3.0191604131568639e-01 -3.3807698689534412e+01 3.3871202011141492e+01 -1.5078914929239175e-06 1 0 0 0 0 P 10020 11 -3.9487611708444019e+00 -1.6323840724254755e+01 1.0343578060859167e+02 1.0479036788218620e+02 2.6973983046972182e-06 2 0 0 -5 0 P 10021 -11 9.5280491897944344e+01 4.1972682756575914e+01 2.0626909559894040e+02 2.3105630922635112e+02 -4.6720309119857366e-06 2 0 0 -5 0 P 10022 1 -5.5727890740505202e+01 -5.9703523511816794e+00 1.7079081128098657e+01 5.8591278581057757e+01 -2.0230487285229133e-06 1 0 0 0 0 P 10023 21 -1.0728779737379789e+01 -3.0567220090710179e+00 3.5412681682205154e+00 1.1704308793482939e+01 -3.3717478808715228e-07 1 0 0 0 0 P 10024 21 -1.8749207426252131e+01 -3.3003113231860537e+00 9.7572174169113879e-01 1.9062446507722630e+01 -4.7683715820312500e-07 1 0 0 0 0 P 10025 21 -2.1716778305703168e+00 -2.4855933596636004e+00 4.8556021408680294e-01 3.3361845978450266e+00 -1.4600096599955427e-07 1 0 0 0 0 V -5 3 0 0 0 0 0 3 1 1.0000000000000000e+00 P 10026 11 -3.9487610466485892e+00 -1.6323840825830434e+01 1.0343578081851851e+02 1.0479036810178833e+02 5.1099859770630950e-04 1 0 0 0 0 P 10027 -11 9.5270523910466423e+01 4.1968291530729708e+01 2.0624751623229446e+02 2.3103213666595124e+02 5.1100571700855651e-04 1 0 0 0 0 P 10028 22 9.9678632823489311e-03 4.3913274219462032e-03 2.1579156719912757e-02 2.4172340798625448e-02 -4.6566128730773926e-10 1 0 0 0 0 E 7 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 -3 5 10001 10004 0 1 3.1769263942471514e+02 U GEV MM C 1.7129725389253844e+02 5.3862208928313009e+01 H 0 0 0 0 0 0 0 0 0 0 0 0 0 F 2 -2 7.2820281312625815e-02 2.9462727275846937e-02 9.0785966284688726e+01 7.8422251262831226e+00 2.0077575957979018e+01 0 0 V -1 5 0 0 0 0 1 2 1 1.0000000000000000e+00 P 10001 -2212 0 0 -9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -1 0 P 10002 -2 2.2717152145353785e-02 -6.0319596190336180e-02 -1.3504679121881662e+02 1.3504680660060544e+02 -1.9073486328125000e-06 2 0 0 -4 0 P 10003 -2103 -2.2717152145353785e-02 6.0319596190336180e-02 -8.4494029588710600e+02 8.4494029834557716e+02 0 1 0 0 0 0 V -2 4 0 0 0 0 1 3 1 1.0000000000000000e+00 P 10004 2212 0 0 9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -2 0 P 10005 21 -1.1456808427564205e+00 1.8436829128830750e+00 2.0700406253706919e+02 2.0701544304260872e+02 3.8146972656250000e-06 2 0 0 -4 0 P 10006 2103 2.4419161955846134e+00 -1.8422446725891315e+00 3.8080904296290549e+02 3.8082132821372272e+02 -5.3947966093944364e-06 1 0 0 0 0 P 10007 2 -1.2962353528281934e+00 -1.4382402939434268e-03 3.9217398160594820e+02 3.9217612379748596e+02 0 1 0 0 0 0 V -3 1 0 0 0 0 0 2 1 1.0000000000000000e+00 P 10010 11 -3.3427164826310893e+01 4.8324853239897276e+00 -1.2240260138478689e+01 3.5924256860644483e+01 0 3 0 0 -4 0 P 10011 -11 3.3427164826310893e+01 -4.8324853239897276e+00 5.4730663094522008e+01 6.4313091556058822e+01 -9.5367431640625000e-07 3 0 0 -4 0 V -4 2 0 0 0 0 0 9 1 1.0000000000000000e+00 P 10008 2 0 0 7.1363875686373305e+01 7.1363875686373305e+01 0 3 0 0 -3 0 P 10009 -2 0 0 -2.8873472730329993e+01 2.8873472730329997e+01 4.7683715820312500e-07 3 0 0 -3 0 P 10012 -2 -4.8635391662736754e-01 -1.4549229749648498e+00 1.1138203803472302e+02 1.1139260180893423e+02 -3.0157829858478351e-06 1 0 0 0 0 P 10013 21 2.2476927108943241e+00 4.1533952649912562e+00 -2.2573717388287289e+00 5.2343616532602999e+00 0 1 0 0 0 0 P 10014 21 -1.2779044260648971e+00 -5.5058523942018822e-01 8.3576248879635562e-01 1.6231705904502796e+00 -9.8843121241194004e-08 1 0 0 0 0 P 10015 21 2.6103109282504722e+00 -5.6923132815295361e+00 2.0886041091551355e+01 2.1804652396110161e+01 -7.5394574646195877e-07 1 0 0 0 0 P 10016 21 4.3302401711858801e-01 -1.8748241549905076e+00 -1.0138403432767470e+02 1.0140229234078808e+02 -3.0157829858478351e-06 1 0 0 0 0 P 10017 11 -3.4414297590799158e+01 7.1895531858654671e+00 -1.3120626800925073e+01 3.7525783154114535e+01 0 2 0 0 -5 0 P 10018 -11 2.9764564586616967e+01 1.3060516741096151e-02 5.5615462570610319e+01 6.3079387699556399e+01 -6.7434957617430455e-07 2 0 0 -5 0 V -5 3 0 0 0 0 0 4 1 1.0000000000000000e+00 P 10019 11 -3.3961357673557728e+01 7.1118398207942040e+00 -1.2949808652218946e+01 3.7035788435757098e+01 5.1100104497764452e-04 1 0 0 0 0 P 10020 -11 2.9743989646267224e+01 2.9453102824681832e-02 5.5570773717837085e+01 6.3030283827876680e+01 5.1100082249891658e-04 1 0 0 0 0 P 10021 22 -4.4490990487559018e-01 8.9381926069934683e-02 -1.7079691571245262e-01 4.8487682825771822e-01 1.1780402288468106e-08 1 0 0 0 0 P 10022 22 1.2544927983908371e-02 -2.8061147082264464e-02 4.4667619779545975e-02 5.4221761779418544e-02 0 1 0 0 0 0 E 8 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 -3 5 10001 10004 0 1 3.8785191872226119e+02 U GEV MM C 1.9836658699625377e+02 5.3931456105484770e+01 H 0 0 0 0 0 0 0 0 0 0 0 0 0 F 2 -2 3.7165215527149943e-02 5.8125274746479570e-02 9.1097594355329093e+01 1.5677305873463713e+01 9.8732328821186002e+00 0 0 V -1 5 0 0 0 0 1 2 1 1.0000000000000000e+00 P 10001 -2212 0 0 -9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -1 0 P 10002 -2 7.5876336842863645e-01 -1.2526931717361576e-02 -3.3062994127197561e+02 3.3063081215198827e+02 3.8146972656250000e-06 2 0 0 -4 0 P 10003 -2101 -7.5876336842863645e-01 1.2526931717361576e-02 -6.4936169920815792e+02 6.4936214262711633e+02 -7.6293945312500000e-06 1 0 0 0 0 V -2 4 0 0 0 0 1 2 1 1.0000000000000000e+00 P 10004 2212 0 0 9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -2 0 P 10005 2 -8.0539143952530667e-01 6.6667354788132183e-01 3.6859094740997413e+01 3.6873919972198877e+01 -1.1680077279964342e-06 2 0 0 -4 0 P 10006 2101 8.0539143952530667e-01 -6.6667354788132183e-01 9.4313254573913594e+02 9.4313312524869662e+02 0 1 0 0 0 0 V -3 1 0 0 0 0 0 2 1 1.0000000000000000e+00 P 10009 11 3.2062581212849878e+01 -3.5183892314336744e+00 2.2697600291344667e+01 3.9440705315702864e+01 4.7683715820312500e-07 3 0 0 -4 0 P 10010 -11 -3.2062581212849878e+01 3.5183892314336744e+00 -4.3238458326287706e+01 5.3943975152454065e+01 9.5367431640625000e-07 3 0 0 -4 0 V -4 2 0 0 0 0 0 7 1 1.0000000000000000e+00 P 10007 2 0 0 3.6421911216606944e+01 3.6421911216606944e+01 0 3 0 0 -3 0 P 10008 -2 0 0 -5.6962769251549979e+01 5.6962769251549979e+01 0 3 0 0 -3 0 P 10011 21 1.8365169597952191e+00 2.7284249436997250e+00 -2.2044235863580343e+02 2.2046689224945590e+02 -2.6973983046972182e-06 1 0 0 0 0 P 10012 21 5.3378247408236756e-01 6.7335179656190247e-01 -2.1906969164173468e+01 2.1923814091795649e+01 -5.8400386399821708e-07 1 0 0 0 0 P 10013 21 -5.4742109359418667e-01 4.3644344602142260e+00 -3.1201582334990960e+01 3.1510104700213830e+01 6.7434957617430455e-07 1 0 0 0 0 P 10014 11 3.1227293868863903e+01 -4.1001592815670351e+00 2.3061071781864513e+01 3.9035473869736826e+01 -2.5678466830894965e-06 2 0 0 -5 0 P 10015 -11 -3.3096800280243954e+01 -3.0119053027448555e+00 -4.3281008177874682e+01 5.4568447212984857e+01 1.1680077279964342e-06 2 0 0 -5 0 V -5 3 0 0 0 0 0 2 1 1.0000000000000000e+00 P 10016 11 3.1227293866839936e+01 -4.1001592815327976e+00 2.3061071779777009e+01 3.9035473870225658e+01 5.1100282480398107e-04 1 0 0 0 0 P 10017 -11 -3.3096800278219987e+01 -3.0119053027790934e+00 -4.3281008175787214e+01 5.4568447212496096e+01 5.1100082249891658e-04 1 0 0 0 0 E 9 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 -3 5 10001 10005 0 1 1.2078270594424291e+02 U GEV MM C 1.8974615576825258e+02 4.8337954048799993e+01 H 0 0 0 0 0 0 0 0 0 0 0 0 0 F 1 -1 1.4920526517593055e-02 2.0237195627118063e-01 1.0770188657249912e+02 3.6908388858968088e+01 1.1371766047905933e+00 0 0 V -1 5 0 0 0 0 1 3 1 1.0000000000000000e+00 P 10001 -2212 0 0 -9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -1 0 P 10002 21 2.2045865389186083e+00 1.6059222664197046e+00 -2.2823199806073194e+02 2.2824829490475341e+02 -5.3947966093944364e-06 2 0 0 -4 0 P 10003 -2101 -2.9531105655168060e+00 -1.5377068635274538e+00 -4.3105151496932081e+02 4.3106437333855013e+02 5.3947966093944364e-06 1 0 0 0 0 P 10004 -2 7.4852402659819772e-01 -6.8215402892250809e-02 -3.2066941860659080e+02 3.2067029948382896e+02 0 1 0 0 0 0 V -2 4 0 0 0 0 1 3 1 1.0000000000000000e+00 P 10005 2212 0 0 9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -2 0 P 10006 21 -1.2186727380122955e+00 -9.1347379138796658e-01 2.0197986351589034e+01 2.0255326466608892e+01 1.6518123698891422e-06 2 0 0 -4 0 P 10007 2203 1.5406381676316863e-01 1.9805834467030348e+00 6.5760720897521549e+02 6.5761020957906487e+02 -7.6293945312500000e-06 1 0 0 0 0 P 10008 1 1.0646089212491268e+00 -1.0671096553150683e+00 3.0214773630983916e+02 3.0215149622719355e+02 0 1 0 0 0 0 V -3 1 0 0 0 0 0 2 1 1.0000000000000000e+00 P 10011 11 -3.0292250860657584e+00 -3.3561574104194314e+01 -1.7490167757889003e+02 1.7811836592806307e+02 0 3 0 0 -4 0 P 10012 -11 3.0292250860657584e+00 3.3561574104194314e+01 -8.8007235796257390e+00 3.4828267204935102e+01 9.5367431640625000e-07 3 0 0 -4 0 V -4 2 0 0 0 0 0 8 1 1.0000000000000000e+00 P 10009 1 0 0 1.4622115987241195e+01 1.4622115987241195e+01 0 3 0 0 -3 0 P 10010 -1 0 0 -1.9832451714575697e+02 1.9832451714575700e+02 3.8146972656250000e-06 3 0 0 -3 0 P 10013 -1 -2.4929759516914816e+00 1.0650710299787736e+00 -5.4751322483111586e-01 2.7656963184661199e+00 -1.1151007970493857e-07 1 0 0 0 0 P 10014 21 -1.0650704155695501e+00 1.9184642913867817e-01 5.8971528911968907e-01 1.2324545284579445e+00 4.6885409124351364e-07 1 0 0 0 0 P 10015 21 1.3315703752857941e+00 -6.6938196910870895e-01 3.3964030685278868e+00 3.7090033282287873e+00 -1.6323404237781945e-07 1 0 0 0 0 P 10016 1 2.7741919569030760e-01 1.9244055013751167e+00 -2.7648961521856222e+01 2.7717239602473864e+01 -8.2590618494457111e-07 1 0 0 0 0 P 10017 11 -1.6238321357126915e+00 -3.3795524645395446e+01 -1.7682161154229448e+02 1.8002959930321620e+02 -2.6973983046972182e-06 2 0 0 -5 0 P 10018 -11 4.5588027329039331e+00 3.1976032129043325e+01 -7.0020437778085238e+00 3.3049628290519266e+01 9.5367431640625000e-07 2 0 0 -5 0 V -5 3 0 0 0 0 0 4 1 1.0000000000000000e+00 P 10019 11 -1.2139636866017383e+00 -2.3841014953234328e+01 -1.2474724119701378e+02 1.2701079437732753e+02 5.1099147830487403e-04 1 0 0 0 0 P 10020 -11 4.4741480142639372e+00 3.1956018585889787e+01 -6.9871455990089473e+00 3.3015531620710647e+01 5.1099793026663858e-04 1 0 0 0 0 P 10021 22 3.2104374285040508e-03 2.3984953610173700e-02 -5.7531829012750224e-03 2.4873359677776669e-02 -1.0412502929101651e-09 1 0 0 0 0 P 10022 22 -3.2842416789946077e-01 -9.9584811026177462e+00 -5.2083515341178980e+01 5.3028028236019495e+01 -6.7434957617430455e-07 1 0 0 0 0 E 10 -1 -1.0000000000000000e+00 -1.0000000000000000e+00 -1.0000000000000000e+00 0 -3 5 10001 10004 0 1 3.4054264241358095e+02 U GEV MM C 2.0482580443278539e+02 4.5789104000240798e+01 H 0 0 0 0 0 0 0 0 0 0 0 0 0 F 1 -1 1.5965764213110648e-01 1.5645485475752705e-02 9.7959249420182189e+01 1.7344937971364247e+00 3.4557247099587784e+01 0 0 V -1 5 0 0 0 0 1 2 1 1.0000000000000000e+00 P 10001 -2212 0 0 -9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -1 0 P 10002 -1 -2.3561604761014035e-01 4.2606040354805796e-01 -4.4427310470900764e+01 4.4429978146147789e+01 -1.2615925364802316e-06 2 0 0 -4 0 P 10003 -2203 2.3561604761014035e-01 -4.2606040354805796e-01 -9.3557099122123441e+02 9.3557111790449824e+02 1.0789593218788873e-05 1 0 0 0 0 V -2 4 0 0 0 0 1 2 1 1.0000000000000000e+00 P 10004 2212 0 0 9.7999955083951647e+02 9.8000000000000000e+02 9.3827200001330713e-01 2 0 0 -2 0 P 10005 1 -3.8826958601894884e-01 -3.4776704831338329e-01 3.5198884910174672e+02 3.5198923504443087e+02 7.6293945312500000e-06 2 0 0 -4 0 P 10006 2203 3.8826958601894884e-01 3.4776704831338329e-01 6.2800945259038883e+02 6.2800966890492316e+02 7.6293945312500000e-06 1 0 0 0 0 V -3 1 0 0 0 0 0 2 1 1.0000000000000000e+00 P 10009 11 3.2802181548101402e+01 2.9188089241619430e+01 1.0863007435002008e+02 1.1716834351130099e+02 -2.6973983046972182e-06 3 0 0 -4 0 P 10010 -11 -3.2802181548101402e+01 -2.9188089241619430e+01 3.2501839172226610e+01 5.4628721543420980e+01 -9.5367431640625000e-07 3 0 0 -4 0 V -4 2 0 0 0 0 0 9 1 1.0000000000000000e+00 P 10007 1 0 0 1.5646448928848434e+02 1.5646448928848434e+02 0 3 0 0 -3 0 P 10008 -1 0 0 -1.5332575766237639e+01 1.5332575766237650e+01 5.8400386399821708e-07 3 0 0 -3 0 P 10011 21 -1.1074589868282143e+00 1.2159434538292411e+00 3.9546425132260282e+01 3.9580610463102929e+01 2.9394216551632767e-06 1 0 0 0 0 P 10012 21 -1.5852035582882984e+00 -5.6728863578861544e-01 1.5410896624393445e+02 1.5411816299025767e+02 -1.9073486328125000e-06 1 0 0 0 0 P 10013 21 -2.0456304520093189e+00 2.3975533887823389e-01 -2.6079030911973732e+01 2.6160235852843318e+01 -9.5367431640625000e-07 1 0 0 0 0 P 10014 21 -1.5977499630866129e-01 1.1223310348988709e+00 -8.9615093989720584e-01 1.4450749144668071e+00 3.6500241499888567e-08 1 0 0 0 0 P 10015 21 -1.8789364906692958e+00 -2.0981781156180976e+00 -6.3968431096412637e-01 2.8882433689911000e+00 2.2302015940987714e-07 1 0 0 0 0 P 10016 11 3.5558486492981011e+01 2.8757630714711603e+01 1.1401074852151143e+02 1.2284078339228607e+02 -3.5683225505580343e-06 2 0 0 -5 0 P 10017 -11 -2.9405367642506306e+01 -2.8591900435676560e+01 2.7510264895974728e+01 4.9386102208630469e+01 -1.6518123698891422e-06 2 0 0 -5 0 V -5 3 0 0 0 0 0 4 1 1.0000000000000000e+00 P 10018 11 3.5558521957964444e+01 2.8757641757147105e+01 1.1401063745343622e+02 1.2284069316015540e+02 5.1100393719229350e-04 1 0 0 0 0 P 10019 -11 -2.9396683184996107e+01 -2.8583479713364138e+01 2.7502063549544161e+01 4.9371487667960928e+01 5.1099904266560590e-04 1 0 0 0 0 P 10020 22 -7.5824608433582696e-03 -7.3303849194251815e-03 7.2473194872571568e-03 1.2796557945728015e-02 -2.3283064365386963e-10 1 0 0 0 0 P 10021 22 -1.1374616502718646e-03 -1.1013798284967855e-03 1.0650950186010049e-03 1.9082148545453354e-03 -4.1159031748919956e-11 1 0 0 0 0 HepMC::IO_GenEvent-END_EVENT_LISTING rivet-1.8.3/test/testMath.cc0000644000175000017500000000241612116077757014147 0ustar sunsun#include #include #include #include "Rivet/Math/MathUtils.hh" #include "Rivet/Math/Vectors.hh" using namespace std; using namespace Rivet; int main() { // Angle tests assert(fuzzyEquals(angle(FourMomentum(1,0,0,1), FourMomentum(1,0,0,1))/M_PI, 0.0)); assert(fuzzyEquals(angle(FourMomentum(1,0,0,1), FourMomentum(1,0,1,0))/M_PI, 0.5)); assert(fuzzyEquals(angle(FourMomentum(1,0,0,1), FourMomentum(1,0,0,-1))/M_PI, 1.0)); // Test with vectors of different magnitude assert(fuzzyEquals(angle(FourMomentum(3,0,0,3), FourMomentum(1,0,0,1))/M_PI, 0.0)); assert(fuzzyEquals(angle(FourMomentum(5,0,0,5), FourMomentum(1,0,1,0))/M_PI, 0.5)); assert(fuzzyEquals(angle(FourMomentum(7,0,0,7), FourMomentum(1,0,0,-1))/M_PI, 1.0)); //////////// linspace(50, 0, 10); logspace(50, 0.000001, 1.0); /// @todo Compiler warnings on SLC5... reinstate // inRange(1, 0, 2); // inRange(1, 0.0, 2); // inRange(1, 0, 2.0); // inRange(1, 0.0, 2.0); // inRange(1.0, 0, 2); // inRange(1.0, 0.0, 2); // inRange(1.0, 0, 2.0); // inRange(1.0, 0.0, 2.0); assert(isZero(1e-15)); assert(fuzzyEquals(1e-15, 0.0)); assert(fuzzyEquals(2.0, 2.0)); assert(!fuzzyEquals(1, 2.0)); assert(fuzzyGtrEquals(1.0, 1.0 - 1e-15)); return EXIT_SUCCESS; } rivet-1.8.3/test/Makefile.in0000644000175000017500000010601712116616065014105 0ustar sunsun# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = testMath$(EXEEXT) testMatVec$(EXEEXT) \ testBoost$(EXEEXT) testCmp$(EXEEXT) testApi$(EXEEXT) \ testNaN$(EXEEXT) TESTS = testMath$(EXEEXT) testMatVec$(EXEEXT) testBoost$(EXEEXT) \ testCmp$(EXEEXT) testApi$(EXEEXT) testNaN$(EXEEXT) \ testCmdLine.sh XFAIL_TESTS = testNaN$(EXEEXT) subdir = test DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am_testApi_OBJECTS = testApi-testApi.$(OBJEXT) testApi_OBJECTS = $(am_testApi_OBJECTS) am__DEPENDENCIES_1 = testApi_DEPENDENCIES = ../src/libRivet.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am_testBoost_OBJECTS = testBoost-testBoost.$(OBJEXT) testBoost_OBJECTS = $(am_testBoost_OBJECTS) testBoost_LDADD = $(LDADD) am_testCmp_OBJECTS = testCmp-testCmp.$(OBJEXT) testCmp_OBJECTS = $(am_testCmp_OBJECTS) testCmp_LDADD = $(LDADD) am_testMatVec_OBJECTS = testMatVec-testMatVec.$(OBJEXT) testMatVec_OBJECTS = $(am_testMatVec_OBJECTS) testMatVec_DEPENDENCIES = $(am__DEPENDENCIES_1) am_testMath_OBJECTS = testMath-testMath.$(OBJEXT) testMath_OBJECTS = $(am_testMath_OBJECTS) testMath_LDADD = $(LDADD) am_testNaN_OBJECTS = testNaN-testNaN.$(OBJEXT) testNaN_OBJECTS = $(am_testNaN_OBJECTS) testNaN_DEPENDENCIES = ../src/libRivet.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/Rivet/Config depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(testApi_SOURCES) $(testBoost_SOURCES) $(testCmp_SOURCES) \ $(testMatVec_SOURCES) $(testMath_SOURCES) $(testNaN_SOURCES) DIST_SOURCES = $(testApi_SOURCES) $(testBoost_SOURCES) \ $(testCmp_SOURCES) $(testMatVec_SOURCES) $(testMath_SOURCES) \ $(testNaN_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ testBoost_SOURCES = testBoost.cc testBoost_CPPFLAGS = -I$(top_srcdir)/include $(AM_CPPFLAGS) testMath_SOURCES = testMath.cc testMath_CPPFLAGS = -I$(top_srcdir)/include $(AM_CPPFLAGS) testMatVec_SOURCES = testMatVec.cc testMatVec_LDADD = -lm $(GSL_LDFLAGS) testMatVec_CPPFLAGS = -I$(top_srcdir)/include $(AM_CPPFLAGS) testCmp_SOURCES = testCmp.cc testCmp_CPPFLAGS = -I$(top_srcdir)/include $(AM_CPPFLAGS) testApi_SOURCES = testApi.cc testApi_CPPFLAGS = -I$(top_srcdir)/include $(AM_CPPFLAGS) testApi_LDADD = ../src/libRivet.la $(HEPMCLDFLAGS) $(HEPMCLDLIBS) testNaN_SOURCES = testNaN.cc testNaN_CPPFLAGS = -I$(top_srcdir)/include $(AM_CPPFLAGS) testNaN_LDADD = ../src/libRivet.la $(HEPMCLDFLAGS) $(HEPMCLDLIBS) TESTS_ENVIRONMENT = \ RIVET_REF_PATH=$(top_builddir)/data/refdata \ RIVET_INFO_PATH=$(top_builddir)/data/anainfo \ RIVET_ANALYSIS_PATH=$(top_builddir)/src/Analyses/.libs \ LD_LIBRARY_PATH=$(top_builddir)/src:$(top_builddir)/src/.libs:$(top_builddir)/src/Tools/yaml-cpp:$(top_builddir)/src/Tools/yaml-cpp/.libs:$(HEPMCLIBPATH):$(FASTJETLIBPATH):$$LD_LIBRARY_PATH \ PYTHON_BUILD_DIR=$(top_builddir)/pyext/build \ PATH=$(top_builddir)/bin:$(PATH) EXTRA_DIST = testApi.hepmc testCmdLine.sh all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list testApi$(EXEEXT): $(testApi_OBJECTS) $(testApi_DEPENDENCIES) $(EXTRA_testApi_DEPENDENCIES) @rm -f testApi$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(testApi_OBJECTS) $(testApi_LDADD) $(LIBS) testBoost$(EXEEXT): $(testBoost_OBJECTS) $(testBoost_DEPENDENCIES) $(EXTRA_testBoost_DEPENDENCIES) @rm -f testBoost$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(testBoost_OBJECTS) $(testBoost_LDADD) $(LIBS) testCmp$(EXEEXT): $(testCmp_OBJECTS) $(testCmp_DEPENDENCIES) $(EXTRA_testCmp_DEPENDENCIES) @rm -f testCmp$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(testCmp_OBJECTS) $(testCmp_LDADD) $(LIBS) testMatVec$(EXEEXT): $(testMatVec_OBJECTS) $(testMatVec_DEPENDENCIES) $(EXTRA_testMatVec_DEPENDENCIES) @rm -f testMatVec$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(testMatVec_OBJECTS) $(testMatVec_LDADD) $(LIBS) testMath$(EXEEXT): $(testMath_OBJECTS) $(testMath_DEPENDENCIES) $(EXTRA_testMath_DEPENDENCIES) @rm -f testMath$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(testMath_OBJECTS) $(testMath_LDADD) $(LIBS) testNaN$(EXEEXT): $(testNaN_OBJECTS) $(testNaN_DEPENDENCIES) $(EXTRA_testNaN_DEPENDENCIES) @rm -f testNaN$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(testNaN_OBJECTS) $(testNaN_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testApi-testApi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testBoost-testBoost.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testCmp-testCmp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testMatVec-testMatVec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testMath-testMath.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testNaN-testNaN.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< testApi-testApi.o: testApi.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testApi_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT testApi-testApi.o -MD -MP -MF $(DEPDIR)/testApi-testApi.Tpo -c -o testApi-testApi.o `test -f 'testApi.cc' || echo '$(srcdir)/'`testApi.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/testApi-testApi.Tpo $(DEPDIR)/testApi-testApi.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='testApi.cc' object='testApi-testApi.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testApi_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o testApi-testApi.o `test -f 'testApi.cc' || echo '$(srcdir)/'`testApi.cc testApi-testApi.obj: testApi.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testApi_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT testApi-testApi.obj -MD -MP -MF $(DEPDIR)/testApi-testApi.Tpo -c -o testApi-testApi.obj `if test -f 'testApi.cc'; then $(CYGPATH_W) 'testApi.cc'; else $(CYGPATH_W) '$(srcdir)/testApi.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/testApi-testApi.Tpo $(DEPDIR)/testApi-testApi.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='testApi.cc' object='testApi-testApi.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testApi_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o testApi-testApi.obj `if test -f 'testApi.cc'; then $(CYGPATH_W) 'testApi.cc'; else $(CYGPATH_W) '$(srcdir)/testApi.cc'; fi` testBoost-testBoost.o: testBoost.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testBoost_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT testBoost-testBoost.o -MD -MP -MF $(DEPDIR)/testBoost-testBoost.Tpo -c -o testBoost-testBoost.o `test -f 'testBoost.cc' || echo '$(srcdir)/'`testBoost.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/testBoost-testBoost.Tpo $(DEPDIR)/testBoost-testBoost.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='testBoost.cc' object='testBoost-testBoost.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testBoost_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o testBoost-testBoost.o `test -f 'testBoost.cc' || echo '$(srcdir)/'`testBoost.cc testBoost-testBoost.obj: testBoost.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testBoost_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT testBoost-testBoost.obj -MD -MP -MF $(DEPDIR)/testBoost-testBoost.Tpo -c -o testBoost-testBoost.obj `if test -f 'testBoost.cc'; then $(CYGPATH_W) 'testBoost.cc'; else $(CYGPATH_W) '$(srcdir)/testBoost.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/testBoost-testBoost.Tpo $(DEPDIR)/testBoost-testBoost.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='testBoost.cc' object='testBoost-testBoost.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testBoost_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o testBoost-testBoost.obj `if test -f 'testBoost.cc'; then $(CYGPATH_W) 'testBoost.cc'; else $(CYGPATH_W) '$(srcdir)/testBoost.cc'; fi` testCmp-testCmp.o: testCmp.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testCmp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT testCmp-testCmp.o -MD -MP -MF $(DEPDIR)/testCmp-testCmp.Tpo -c -o testCmp-testCmp.o `test -f 'testCmp.cc' || echo '$(srcdir)/'`testCmp.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/testCmp-testCmp.Tpo $(DEPDIR)/testCmp-testCmp.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='testCmp.cc' object='testCmp-testCmp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testCmp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o testCmp-testCmp.o `test -f 'testCmp.cc' || echo '$(srcdir)/'`testCmp.cc testCmp-testCmp.obj: testCmp.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testCmp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT testCmp-testCmp.obj -MD -MP -MF $(DEPDIR)/testCmp-testCmp.Tpo -c -o testCmp-testCmp.obj `if test -f 'testCmp.cc'; then $(CYGPATH_W) 'testCmp.cc'; else $(CYGPATH_W) '$(srcdir)/testCmp.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/testCmp-testCmp.Tpo $(DEPDIR)/testCmp-testCmp.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='testCmp.cc' object='testCmp-testCmp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testCmp_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o testCmp-testCmp.obj `if test -f 'testCmp.cc'; then $(CYGPATH_W) 'testCmp.cc'; else $(CYGPATH_W) '$(srcdir)/testCmp.cc'; fi` testMatVec-testMatVec.o: testMatVec.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testMatVec_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT testMatVec-testMatVec.o -MD -MP -MF $(DEPDIR)/testMatVec-testMatVec.Tpo -c -o testMatVec-testMatVec.o `test -f 'testMatVec.cc' || echo '$(srcdir)/'`testMatVec.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/testMatVec-testMatVec.Tpo $(DEPDIR)/testMatVec-testMatVec.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='testMatVec.cc' object='testMatVec-testMatVec.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testMatVec_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o testMatVec-testMatVec.o `test -f 'testMatVec.cc' || echo '$(srcdir)/'`testMatVec.cc testMatVec-testMatVec.obj: testMatVec.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testMatVec_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT testMatVec-testMatVec.obj -MD -MP -MF $(DEPDIR)/testMatVec-testMatVec.Tpo -c -o testMatVec-testMatVec.obj `if test -f 'testMatVec.cc'; then $(CYGPATH_W) 'testMatVec.cc'; else $(CYGPATH_W) '$(srcdir)/testMatVec.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/testMatVec-testMatVec.Tpo $(DEPDIR)/testMatVec-testMatVec.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='testMatVec.cc' object='testMatVec-testMatVec.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testMatVec_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o testMatVec-testMatVec.obj `if test -f 'testMatVec.cc'; then $(CYGPATH_W) 'testMatVec.cc'; else $(CYGPATH_W) '$(srcdir)/testMatVec.cc'; fi` testMath-testMath.o: testMath.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testMath_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT testMath-testMath.o -MD -MP -MF $(DEPDIR)/testMath-testMath.Tpo -c -o testMath-testMath.o `test -f 'testMath.cc' || echo '$(srcdir)/'`testMath.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/testMath-testMath.Tpo $(DEPDIR)/testMath-testMath.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='testMath.cc' object='testMath-testMath.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testMath_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o testMath-testMath.o `test -f 'testMath.cc' || echo '$(srcdir)/'`testMath.cc testMath-testMath.obj: testMath.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testMath_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT testMath-testMath.obj -MD -MP -MF $(DEPDIR)/testMath-testMath.Tpo -c -o testMath-testMath.obj `if test -f 'testMath.cc'; then $(CYGPATH_W) 'testMath.cc'; else $(CYGPATH_W) '$(srcdir)/testMath.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/testMath-testMath.Tpo $(DEPDIR)/testMath-testMath.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='testMath.cc' object='testMath-testMath.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testMath_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o testMath-testMath.obj `if test -f 'testMath.cc'; then $(CYGPATH_W) 'testMath.cc'; else $(CYGPATH_W) '$(srcdir)/testMath.cc'; fi` testNaN-testNaN.o: testNaN.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testNaN_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT testNaN-testNaN.o -MD -MP -MF $(DEPDIR)/testNaN-testNaN.Tpo -c -o testNaN-testNaN.o `test -f 'testNaN.cc' || echo '$(srcdir)/'`testNaN.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/testNaN-testNaN.Tpo $(DEPDIR)/testNaN-testNaN.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='testNaN.cc' object='testNaN-testNaN.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testNaN_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o testNaN-testNaN.o `test -f 'testNaN.cc' || echo '$(srcdir)/'`testNaN.cc testNaN-testNaN.obj: testNaN.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testNaN_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT testNaN-testNaN.obj -MD -MP -MF $(DEPDIR)/testNaN-testNaN.Tpo -c -o testNaN-testNaN.obj `if test -f 'testNaN.cc'; then $(CYGPATH_W) 'testNaN.cc'; else $(CYGPATH_W) '$(srcdir)/testNaN.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/testNaN-testNaN.Tpo $(DEPDIR)/testNaN-testNaN.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='testNaN.cc' object='testNaN-testNaN.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testNaN_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o testNaN-testNaN.obj `if test -f 'testNaN.cc'; then $(CYGPATH_W) 'testNaN.cc'; else $(CYGPATH_W) '$(srcdir)/testNaN.cc'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ col="$$grn"; \ else \ col="$$red"; \ fi; \ echo "$${col}$$dashes$${std}"; \ echo "$${col}$$banner$${std}"; \ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ test -z "$$report" || echo "$${col}$$report$${std}"; \ echo "$${col}$$dashes$${std}"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool clean-local \ ctags distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am clean-local: @rm -f out.aida log a.out fifo.hepmc file2.hepmc # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: rivet-1.8.3/test/testCmdLine.sh0000755000175000017500000000206712116077757014623 0ustar sunsun#! /usr/bin/env bash if [[ -z "$PYTHON_BUILD_DIR" ]]; then echo "\$PYTHON_BUILD_DIR must be defined" 1>&2 exit 1 fi export PYTHONPATH=$(ls -d $PYTHON_BUILD_DIR/lib.*):$PYTHONPATH #echo PYTHONPATH=$PYTHONPATH \ # PYTHON_BUILD_DIR=$PYTHON_BUILD_DIR \ # LD_LIBRARY_PATH=$LD_LIBRARY_PATH \ # PATH=$PATH \ # RIVET_REF_PATH=$RIVET_REF_PATH \ # RIVET_INFO_PATH=$RIVET_INFO_PATH \ # RIVET_ANALYSIS_PATH=$RIVET_ANALYSIS_PATH function _clean() { rm -f fifo.hepmc rm -f file2.hepmc } function _setup() { _clean cp testApi.hepmc file2.hepmc mkfifo fifo.hepmc } function _check() { CODE=$? if [[ $CODE -ne 0 ]]; then _clean _exit $CODE fi } _setup rivet --list-analyses > log || exit $? rivet -a D0_2008_S7554427 testApi.hepmc file2.hepmc > log || exit $? grep -q "20 events" log _check cat testApi.hepmc | rivet -a D0_2008_S7554427 > log || exit $? grep -q "10 events" log _check cat testApi.hepmc > fifo.hepmc & rivet -a D0_2008_S7554427 fifo.hepmc > log || exit $? grep -q "10 events" log _check _clean rivet-1.8.3/test/testCmp.cc0000644000175000017500000000071312116077757013773 0ustar sunsun#include #include #include "Rivet/Cmp.hh" using namespace std; int main() { using namespace Rivet; CmpState cs = UNDEFINED; cs = cmp(0.5, 0.6); cout << "cmp(0.5, 0.6) = " << cs << endl; assert(cs == ORDERED); cs = cmp(0.5, 0.5); cout << "cmp(0.5, 0.5) = " << cs << endl; assert(cs == EQUIVALENT); cs = cmp(0.6, 0.5); cout << "cmp(0.6, 0.5) = " << cs << endl; assert(cs == UNORDERED); return EXIT_SUCCESS; } rivet-1.8.3/test/testApi.cc0000644000175000017500000000234712116077757013772 0ustar sunsun#include "Rivet/AnalysisHandler.hh" #include "HepMC/GenEvent.h" #include "HepMC/IO_GenEvent.h" using namespace std; int main() { // Old type of constructor /// @deprecated Use new kind which specifies output names only when writing Rivet::AnalysisHandler rivet_old("out", "", Rivet::AIDAML); // New type Rivet::AnalysisHandler rivet; // Specify the analyses to be used rivet.addAnalysis("EXAMPLE"); // rivet.addAnalysis("D0_2008_S7554427"); //vector moreanalyses(1, "D0_2007_S7075677"); vector moreanalyses(1, "MC_JETS"); rivet.addAnalyses(moreanalyses); // Initialise: obsolete, but allowed for compatibility rivet.init(); std::istream* file = new std::fstream("testApi.hepmc", std::ios::in); HepMC::IO_GenEvent hepmcio(*file); HepMC::GenEvent* evt = hepmcio.read_next_event(); double sum_of_weights = 0.0; while (evt) { // Analyse current event rivet.analyze(*evt); sum_of_weights += evt->weights()[0]; // Clean up and get next event delete evt; evt = 0; hepmcio >> evt; } delete file; file = 0; rivet.setCrossSection(1.0); rivet.setSumOfWeights(sum_of_weights); //< Not necessary, but allowed rivet.finalize(); rivet.writeData("out.aida"); return 0; } rivet-1.8.3/test/Makefile.am0000644000175000017500000000265512116077757014110 0ustar sunsuncheck_PROGRAMS = testMath testMatVec testBoost testCmp testApi testNaN testBoost_SOURCES = testBoost.cc testBoost_CPPFLAGS = -I$(top_srcdir)/include $(AM_CPPFLAGS) testMath_SOURCES = testMath.cc testMath_CPPFLAGS = -I$(top_srcdir)/include $(AM_CPPFLAGS) testMatVec_SOURCES = testMatVec.cc testMatVec_LDADD = -lm $(GSL_LDFLAGS) testMatVec_CPPFLAGS = -I$(top_srcdir)/include $(AM_CPPFLAGS) testCmp_SOURCES = testCmp.cc testCmp_CPPFLAGS = -I$(top_srcdir)/include $(AM_CPPFLAGS) testApi_SOURCES = testApi.cc testApi_CPPFLAGS = -I$(top_srcdir)/include $(AM_CPPFLAGS) testApi_LDADD = ../src/libRivet.la $(HEPMCLDFLAGS) $(HEPMCLDLIBS) testNaN_SOURCES = testNaN.cc testNaN_CPPFLAGS = -I$(top_srcdir)/include $(AM_CPPFLAGS) testNaN_LDADD = ../src/libRivet.la $(HEPMCLDFLAGS) $(HEPMCLDLIBS) TESTS_ENVIRONMENT = \ RIVET_REF_PATH=$(top_builddir)/data/refdata \ RIVET_INFO_PATH=$(top_builddir)/data/anainfo \ RIVET_ANALYSIS_PATH=$(top_builddir)/src/Analyses/.libs \ LD_LIBRARY_PATH=$(top_builddir)/src:$(top_builddir)/src/.libs:$(top_builddir)/src/Tools/yaml-cpp:$(top_builddir)/src/Tools/yaml-cpp/.libs:$(HEPMCLIBPATH):$(FASTJETLIBPATH):$$LD_LIBRARY_PATH \ PYTHON_BUILD_DIR=$(top_builddir)/pyext/build \ PATH=$(top_builddir)/bin:$(PATH) TESTS = testMath testMatVec testBoost testCmp testApi testNaN testCmdLine.sh XFAIL_TESTS = testNaN EXTRA_DIST = testApi.hepmc testCmdLine.sh clean-local: @rm -f out.aida log a.out fifo.hepmc file2.hepmc rivet-1.8.3/src/0000755000175000017500000000000012131473205011635 5ustar sunsunrivet-1.8.3/src/Tools/0000755000175000017500000000000012131473204012734 5ustar sunsunrivet-1.8.3/src/Tools/ParticleIdUtils.cc0000644000175000017500000004104612116077757016331 0ustar sunsun// ---------------------------------------------------------------------- // // ParticleIdUtils.cc // Stolen from HepPID // // ---------------------------------------------------------------------- #include // for pow() #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { namespace PID { /// PID digits (base 10) are: n nr nl nq1 nq2 nq3 nj /// The location enum provides a convenient index into the PID. enum location { nj=1, nq3, nq2, nq1, nl, nr, n, n8, n9, n10 }; /// return the digit at a named location in the PID unsigned short digit( location loc, const int & pid ); /// extract fundamental ID (1-100) if this is a "fundamental" particle int fundamentalID( const int & pid ); /// if this is a fundamental particle, does it have a valid antiparticle? //bool hasFundamentalAnti( const int & pid ); /// returns everything beyond the 7th digit /// (e.g. outside the standard numbering scheme) int extraBits( const int & pid ); // absolute value int abspid( const int & pid ) { return (pid < 0) ? -pid : pid; } // returns everything beyond the 7th digit (e.g. outside the numbering scheme) int extraBits( const int & pid ) { return abspid(pid)/10000000; } // split the PID into constituent integers unsigned short digit( location loc, const int & pid ) { // PID digits (base 10) are: n nr nl nq1 nq2 nq3 nj // the location enum provides a convenient index into the PID int numerator = (int) std::pow(10.0,(loc-1)); return (abspid(pid)/numerator)%10; } // return the first two digits if this is a "fundamental" particle // ID = 100 is a special case (internal generator ID's are 81-100) int fundamentalID( const int & pid ) { if( extraBits(pid) > 0 ) return 0; if( digit(nq2,pid) == 0 && digit(nq1,pid) == 0) { return abspid(pid)%10000; } else if( abspid(pid) <= 100 ) { return abspid(pid); } else { return 0; } } // Ion numbers are +/- 10LZZZAAAI. int Z( const int & pid ) { // a proton can also be a Hydrogen nucleus if( abspid(pid) == 2212 ) { return 1; } if( isNucleus(pid) ) return (abspid(pid)/10000)%1000; return 0; } // Ion numbers are +/- 10LZZZAAAI. int A( const int & pid ) { // a proton can also be a Hydrogen nucleus if( abspid(pid) == 2212 ) { return 1; } if( isNucleus(pid) ) return (abspid(pid)/10)%1000; return 0; } // if this is a nucleus (ion), get nLambda // Ion numbers are +/- 10LZZZAAAI. int lambda( const int & pid ) { // a proton can also be a Hydrogen nucleus if( abspid(pid) == 2212 ) { return 0; } if( isNucleus(pid) ) return digit(n8,pid); return 0; } // --- boolean methods: // // check to see if this is a valid PID bool isValid( const int & pid ) { if( extraBits(pid) > 0 ) { if( isNucleus(pid) ) { return true; } return false; } if( isSUSY(pid) ) { return true; } if( isRhadron(pid) ) { return true; } // Meson signature if( isMeson(pid) ) { return true; } // Baryon signature if( isBaryon(pid) ) { return true; } // DiQuark signature if( isDiQuark(pid) ) { return true; } // fundamental particle if( fundamentalID(pid) > 0 ) { if(pid > 0 ) { return true; } else { // AB - disabled this to remove need for PID -> name lookup. //if( hasFundamentalAnti(pid) ) { return true; } return false; } } // pentaquark if( isPentaquark(pid) ) { return true; } // don't recognize this number return false; } // // if this is a fundamental particle, does it have a valid antiparticle? // bool hasFundamentalAnti( const int & pid ) // { // // these are defined by the generator and therefore are always valid // if( fundamentalID(pid) <= 100 && fundamentalID(pid) >= 80 ) { return true; } // // check id's from 1 to 79 // if( fundamentalID(pid) > 0 && fundamentalID(pid) < 80 ) { // if( validParticleName(-pid) ) { return true; } // } // return false; // } // check to see if this is a valid meson bool isMeson( const int & pid ) { if( extraBits(pid) > 0 ) { return false; } if( abspid(pid) <= 100 ) { return false; } if( fundamentalID(pid) <= 100 && fundamentalID(pid) > 0 ) { return false; } int aid = abspid(pid); if( aid == 130 || aid == 310 || aid == 210 ) { return true; } // EvtGen uses some odd numbers if( aid == 150 || aid == 350 || aid == 510 || aid == 530 ) { return true; } // pomeron, etc. if( pid == 110 || pid == 990 || pid == 9990 ) { return true; } if( digit(nj,pid) > 0 && digit(nq3,pid) > 0 && digit(nq2,pid) > 0 && digit(nq1,pid) == 0 ) { // check for illegal antiparticles if( digit(nq3,pid) == digit(nq2,pid) && pid < 0 ) { return false; } else { return true; } } return false; } // check to see if this is a valid baryon bool isBaryon( const int & pid ) { if( extraBits(pid) > 0 ) { return false; } if( abspid(pid) <= 100 ) { return false; } if( fundamentalID(pid) <= 100 && fundamentalID(pid) > 0 ) { return false; } if( abspid(pid) == 2110 || abspid(pid) == 2210 ) { return true; } if( digit(nj,pid) > 0 && digit(nq3,pid) > 0 && digit(nq2,pid) > 0 && digit(nq1,pid) > 0 ) { return true; } return false; } // check to see if this is a valid diquark bool isDiQuark( const int & pid ) { if( extraBits(pid) > 0 ) { return false; } if( abspid(pid) <= 100 ) { return false; } if( fundamentalID(pid) <= 100 && fundamentalID(pid) > 0 ) { return false; } if( digit(nj,pid) > 0 && digit(nq3,pid) == 0 && digit(nq2,pid) > 0 && digit(nq1,pid) > 0 ) { // diquark signature // EvtGen uses the diquarks for quark pairs, so, for instance, // 5501 is a valid "diquark" for EvtGen //if( digit(nj) == 1 && digit(nq2) == digit(nq1) ) { // illegal // return false; //} else { return true; //} } return false; } // is this a valid hadron ID? bool isHadron( const int & pid ) { if( extraBits(pid) > 0 ) { return false; } if( isMeson(pid) ) { return true; } if( isBaryon(pid) ) { return true; } if( isPentaquark(pid) ) { return true; } return false; } // is this a valid lepton ID? bool isLepton( const int & pid ) { if( extraBits(pid) > 0 ) { return false; } if( fundamentalID(pid) >= 11 && fundamentalID(pid) <= 18 ) { return true; } return false; } // // This implements the 2006 Monte Carlo nuclear code scheme. // Ion numbers are +/- 10LZZZAAAI. // AAA is A - total baryon number // ZZZ is Z - total charge // L is the total number of strange quarks. // I is the isomer number, with I=0 corresponding to the ground state. bool isNucleus( const int & pid ) { // a proton can also be a Hydrogen nucleus if( abspid(pid) == 2212 ) { return true; } // new standard: +/- 10LZZZAAAI if( ( digit(n10,pid) == 1 ) && ( digit(n9,pid) == 0 ) ) { // charge should always be less than or equal to baryon number // the following line is A >= Z if( (abspid(pid)/10)%1000 >= (abspid(pid)/10000)%1000 ) { return true; } } return false; } // check to see if this is a valid pentaquark bool isPentaquark( const int & pid ) { // a pentaquark is of the form 9abcdej, // where j is the spin and a, b, c, d, and e are quarks if( extraBits(pid) > 0 ) { return false; } if( digit(n,pid) != 9 ) { return false; } if( digit(nr,pid) == 9 || digit(nr,pid) == 0 ) { return false; } if( digit(nj,pid) == 9 || digit(nl,pid) == 0 ) { return false; } if( digit(nq1,pid) == 0 ) { return false; } if( digit(nq2,pid) == 0 ) { return false; } if( digit(nq3,pid) == 0 ) { return false; } if( digit(nj,pid) == 0 ) { return false; } // check ordering if( digit(nq2,pid) > digit(nq1,pid) ) { return false; } if( digit(nq1,pid) > digit(nl,pid) ) { return false; } if( digit(nl,pid) > digit(nr,pid) ) { return false; } return true; } // is this a SUSY? bool isSUSY( const int & pid ) { // fundamental SUSY particles have n = 1 or 2 if( extraBits(pid) > 0 ) { return false; } if( digit(n,pid) != 1 && digit(n,pid) != 2 ) { return false; } if( digit(nr,pid) != 0 ) { return false; } // check fundamental part if( fundamentalID(pid) == 0 ) { return false; } return true; } // is this an R-hadron? bool isRhadron( const int & pid ) { // an R-hadron is of the form 10abcdj, // where j is the spin and a, b, c, and d are quarks or gluons if( extraBits(pid) > 0 ) { return false; } if( digit(n,pid) != 1 ) { return false; } if( digit(nr,pid) != 0 ) { return false; } // make sure this isn't a SUSY particle if( isSUSY(pid) ) { return false; } // All R-hadrons have at least 3 core digits if( digit(nq2,pid) == 0 ) { return false; } if( digit(nq3,pid) == 0 ) { return false; } if( digit(nj,pid) == 0 ) { return false; } return true; } // does this particle contain an up quark? bool hasUp( const int & pid) { if( extraBits(pid) > 0 ) { return false; } if( fundamentalID(pid) > 0 ) { return false; } if( digit(nq3,pid) == 2 || digit(nq2,pid) == 2 || digit(nq1,pid) == 2 ) { return true; } return false; } // does this particle contain a down quark? bool hasDown( const int & pid) { if( extraBits(pid) > 0 ) { return false; } if( fundamentalID(pid) > 0 ) { return false; } if( digit(nq3,pid) == 1 || digit(nq2,pid) == 1 || digit(nq1,pid) == 1 ) { return true; } return false; } // does this particle contain a strange quark? bool hasStrange( const int & pid ) { if( extraBits(pid) > 0 ) { return false; } if( fundamentalID(pid) > 0 ) { return false; } if( digit(nq3,pid) == 3 || digit(nq2,pid) == 3 || digit(nq1,pid) == 3 ) { return true; } return false; } // does this particle contain a charm quark? bool hasCharm( const int & pid ) { if( extraBits(pid) > 0 ) { return false; } if( fundamentalID(pid) > 0 ) { return false; } if( digit(nq3,pid) == 4 || digit(nq2,pid) == 4 || digit(nq1,pid) == 4 ) { return true; } return false; } // does this particle contain a bottom quark? bool hasBottom( const int & pid ) { if( extraBits(pid) > 0 ) { return false; } if( fundamentalID(pid) > 0 ) { return false; } if( digit(nq3,pid) == 5 || digit(nq2,pid) == 5 || digit(nq1,pid) == 5 ) { return true; } return false; } // does this particle contain a top quark? bool hasTop( const int & pid ) { if( extraBits(pid) > 0 ) { return false; } if( fundamentalID(pid) > 0 ) { return false; } if( digit(nq3,pid) == 6 || digit(nq2,pid) == 6 || digit(nq1,pid) == 6 ) { return true; } return false; } // --- other information // // jSpin returns 2J+1, where J is the total spin int jSpin( const int & pid ) { if( fundamentalID(pid) > 0 ) { // some of these are known int fund = fundamentalID(pid); if( fund > 0 && fund < 7 ) return 2; if( fund == 9 ) return 3; if( fund > 10 && fund < 17 ) return 2; if( fund > 20 && fund < 25 ) return 3; return 0; } else if( extraBits(pid) > 0 ) { return 0; } return abspid(pid)%10; } // sSpin returns 2S+1, where S is the spin int sSpin( const int & pid ) { if( !isMeson(pid) ) { return 0; } int inl = digit(nl,pid); //int tent = digit(n,pid); int js = digit(nj,pid); if( digit(n,pid) == 9 ) { return 0; } // tentative ID //if( tent == 9 ) { return 0; } // tentative assignment if( inl == 0 && js >= 3 ) { return 1; } else if( inl == 0 && js == 1 ) { return 0; } else if( inl == 1 && js >= 3 ) { return 0; } else if( inl == 2 && js >= 3 ) { return 1; } else if( inl == 1 && js == 1 ) { return 1; } else if( inl == 3 && js >= 3 ) { return 1; } // default to zero return 0; } // lSpin returns 2L+1, where L is the orbital angular momentum int lSpin( const int & pid ) { if( !isMeson(pid) ) { return 0; } int inl = digit(nl,pid); //int tent = digit(n,pid); int js = digit(nj,pid); if( digit(n,pid) == 9 ) { return 0; } // tentative ID if( inl == 0 && js == 3 ) { return 0; } else if( inl == 0 && js == 5 ) { return 1; } else if( inl == 0 && js == 7 ) { return 2; } else if( inl == 0 && js == 9 ) { return 3; } else if( inl == 0 && js == 1 ) { return 0; } else if( inl == 1 && js == 3 ) { return 1; } else if( inl == 1 && js == 5 ) { return 2; } else if( inl == 1 && js == 7 ) { return 3; } else if( inl == 1 && js == 9 ) { return 4; } else if( inl == 2 && js == 3 ) { return 1; } else if( inl == 2 && js == 5 ) { return 2; } else if( inl == 2 && js == 7 ) { return 3; } else if( inl == 2 && js == 9 ) { return 4; } else if( inl == 1 && js == 1 ) { return 1; } else if( inl == 3 && js == 3 ) { return 2; } else if( inl == 3 && js == 5 ) { return 3; } else if( inl == 3 && js == 7 ) { return 4; } else if( inl == 3 && js == 9 ) { return 5; } // default to zero return 0; } // 3 times the charge int threeCharge( const int & pid ) { int charge=0; int ida, sid; unsigned short q1, q2, q3; static int ch100[100] = { -1, 2,-1, 2,-1, 2,-1, 2, 0, 0, -3, 0,-3, 0,-3, 0,-3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; q1 = digit(nq1,pid); q2 = digit(nq2,pid); q3 = digit(nq3,pid); ida = abspid(pid); sid = fundamentalID(pid); if( ida == 0 || extraBits(pid) > 0 ) { // ion or illegal return 0; } else if( sid > 0 && sid <= 100 ) { // use table charge = ch100[sid-1]; if(ida==1000017 || ida==1000018) { charge = 0; } if(ida==1000034 || ida==1000052) { charge = 0; } if(ida==1000053 || ida==1000054) { charge = 0; } if(ida==5100061 || ida==5100062) { charge = 6; } } else if( digit(nj,pid) == 0 ) { // KL, Ks, or undefined return 0; } else if( isMeson(pid) ) { // mesons if( q2 == 3 || q2 == 5 ) { charge = ch100[q3-1] - ch100[q2-1]; } else { charge = ch100[q2-1] - ch100[q3-1]; } } else if( isDiQuark(pid) ) { // diquarks charge = ch100[q2-1] + ch100[q1-1]; } else if( isBaryon(pid) ) { // baryons charge = ch100[q3-1] + ch100[q2-1] + ch100[q1-1]; } else { // unknown return 0; } if( charge == 0 ) { return 0; } else if( pid < 0 ) { charge = -charge; } return charge; } } } rivet-1.8.3/src/Tools/mt2_bisect.hh0000644000175000017500000000563412116077757015340 0ustar sunsun#ifndef MT2_BISECT_H #define MT2_BISECT_H /***********************************************************************/ /* */ /* Finding mt2 by Bisection */ /* */ /* Authors: Hsin-Chia Cheng, Zhenyu Han */ /* Dec 11, 2008, v1.01a */ /* */ /* see arXiv:0810.5178 */ /* */ /* Wrapped for Rivet by D. Grellscheid */ /* Apr 13, 2011 */ /* */ /***********************************************************************/ namespace Rivet { namespace mt2_bisect { /*The user can change the desired precision below, the larger one of the following two definitions is used. Relative precision less than 0.00001 is not guaranteed to be achievable--use with caution*/ const double RELATIVE_PRECISION = 0.00001; //defined as precision = RELATIVE_PRECISION * scale, where scale = max{Ea, Eb} const double ABSOLUTE_PRECISION = 0.0; //absolute precision for mt2, unused by default //Reserved for expert const double MIN_MASS = 0.1; //if ma namespace Rivet { inline string _findFile(const string& filename, const vector& paths) { //struct stat stFileInfo; foreach (const string& dir, paths) { const string path = dir + "/" + filename; //if (stat(path.c_str(), &stFileInfo) == 0) { if (access(path.c_str(), R_OK) == 0) { return path; } } return ""; } string getLibPath() { BrInitError error; br_init_lib(&error); char* temp = br_find_lib_dir(DEFAULTLIBDIR); const string libdir(temp); free (temp); return libdir; } string getDataPath() { BrInitError error; br_init_lib(&error); char* temp = br_find_data_dir(DEFAULTDATADIR); const string sharedir(temp); free (temp); return sharedir; } string getRivetDataPath() { return getDataPath() + "/Rivet"; } void setAnalysisLibPaths(const vector& paths) { const string pathstr = pathjoin(paths); setenv("RIVET_ANALYSIS_PATH", pathstr.c_str(), 1); } void addAnalysisLibPath(const string& extrapath) { vector paths = getAnalysisLibPaths(); paths.push_back(extrapath); setAnalysisLibPaths(paths); } vector getAnalysisLibPaths() { vector dirs; char* env = 0; env = getenv("RIVET_ANALYSIS_PATH"); if (env) { // Use the Rivet analysis path variable if set... dirs += pathsplit(env); } // ... otherwise fall back to the Rivet library install path dirs += getLibPath(); return dirs; } string findAnalysisLibFile(const string& filename) { return _findFile(filename, getAnalysisLibPaths()); } vector getAnalysisRefPaths() { vector dirs; char* env = 0; env = getenv("RIVET_REF_PATH"); if (env) { // Use the Rivet analysis path variable if set... dirs += pathsplit(env); } // Then fall back to the Rivet data install path... dirs += getRivetDataPath(); // ... and also add any analysis plugin search dirs for convenience dirs += getAnalysisLibPaths(); return dirs; } string findAnalysisRefFile(const string& filename, const vector& pathprepend, const vector& pathappend) { const vector paths = pathprepend + getAnalysisRefPaths() + pathappend; return _findFile(filename, paths); } vector getAnalysisInfoPaths() { vector dirs; char* env = 0; env = getenv("RIVET_INFO_PATH"); if (env) { // Use the Rivet analysis path variable if set... dirs += pathsplit(env); } // Then fall back to the Rivet data install path... dirs += getRivetDataPath(); // ... and also add any analysis plugin search dirs for convenience dirs += getAnalysisLibPaths(); return dirs; } string findAnalysisInfoFile(const string& filename, const vector& pathprepend, const vector& pathappend) { const vector paths = pathprepend + getAnalysisInfoPaths() + pathappend; return _findFile(filename, paths); } vector getAnalysisPlotPaths() { vector dirs; char* env = 0; env = getenv("RIVET_PLOT_PATH"); if (env) { // Use the Rivet analysis path variable if set... dirs += pathsplit(env); } // Then fall back to the Rivet data install path... dirs += getRivetDataPath(); // ... and also add any analysis plugin search dirs for convenience dirs += getAnalysisLibPaths(); return dirs; } string findAnalysisPlotFile(const string& filename, const vector& pathprepend, const vector& pathappend) { const vector paths = pathprepend + getAnalysisPlotPaths() + pathappend; return _findFile(filename, paths); } } rivet-1.8.3/src/Tools/RivetAIDA.cc0000644000175000017500000002056612116416230014763 0ustar sunsun#include "Rivet/RivetAIDA.hh" #include "Rivet/Rivet.hh" #include "Rivet/RivetBoost.hh" #include "Rivet/Tools/Utils.hh" #include "Rivet/Tools/RivetPaths.hh" #include "LWH/AnalysisFactory.h" #include "TinyXML/tinyxml.h" #include #include using namespace std; namespace Rivet { /// Get an AIDA system (LWH impl.) AIDA::IAnalysisFactory* createAnalysisFactory() { return new LWH::AnalysisFactory(); } string getDatafilePath(string papername) { const string path = findAnalysisRefFile(papername + ".aida"); if (!path.empty()) return path; throw Rivet::Error("Couldn't find ref data file '" + papername + ".aida" + " in $RIVET_REF_PATH, " + getRivetDataPath() + ", or ."); return ""; } map > getDPSXYValsErrs(string papername) { // Get filename const string xmlfile = getDatafilePath(papername); // Open AIDA XML file TiXmlDocument doc(xmlfile); doc.LoadFile(); if (doc.Error()) { string err = "Error in " + string(doc.Value()); err += ": " + string(doc.ErrorDesc()); cerr << err << endl; throw Error(err); } // Return value, to be populated map > rtn; try { // Walk down tree to get to the element const TiXmlNode* aidaN = doc.FirstChild("aida"); if (!aidaN) throw Error("Couldn't get root element"); for (const TiXmlNode* dpsN = aidaN->FirstChild("dataPointSet"); dpsN; dpsN = dpsN->NextSibling("dataPointSet")) { const TiXmlElement* dpsE = dpsN->ToElement(); if (dpsE == 0) continue; const string plotname = dpsE->Attribute("name"); const string plotpath = dpsE->Attribute("path"); /// Check path to make sure that this is a reference histogram. if (plotpath.find("/REF") != 0) { cerr << "Skipping non-reference histogram " << plotname << endl; continue; } /// @todo Check that "path" matches filename vector points; for (const TiXmlNode* dpN = dpsN->FirstChild("dataPoint"); dpN; dpN = dpN->NextSibling("dataPoint")) { const TiXmlNode* xMeasN = dpN->FirstChild("measurement"); const TiXmlNode* yMeasN = xMeasN->NextSibling("measurement"); if (xMeasN && yMeasN) { const TiXmlElement* xMeasE = xMeasN->ToElement(); const TiXmlElement* yMeasE = yMeasN->ToElement(); const string xcentreStr = xMeasE->Attribute("value"); const string xerrplusStr = xMeasE->Attribute("errorPlus"); const string xerrminusStr = xMeasE->Attribute("errorMinus"); const string ycentreStr = yMeasE->Attribute("value"); const string yerrplusStr = yMeasE->Attribute("errorPlus"); const string yerrminusStr = yMeasE->Attribute("errorMinus"); //if (!centreStr) throw Error("Couldn't get a valid bin centre"); //if (!errplusStr) throw Error("Couldn't get a valid bin err+"); //if (!errminusStr) throw Error("Couldn't get a valid bin err-"); istringstream xssC(xcentreStr); istringstream xssP(xerrplusStr); istringstream xssM(xerrminusStr); istringstream yssC(ycentreStr); istringstream yssP(yerrplusStr); istringstream yssM(yerrminusStr); double xcentre, xerrplus, xerrminus, ycentre, yerrplus, yerrminus; xssC >> xcentre; xssP >> xerrplus; xssM >> xerrminus; yssC >> ycentre; yssP >> yerrplus; yssM >> yerrminus; //cout << " " << centre << " + " << errplus << " - " << errminus << endl; DPSXYPoint pt(xcentre, xerrminus, xerrplus, ycentre, yerrminus, yerrplus); points.push_back(pt); } else { cerr << "Couldn't get tag for " << papername << endl; /// @todo Throw an exception here? } } // Add to the map rtn[plotname] = points; } } // Write out the error /// @todo Rethrow as a general XML failure. catch (std::exception& e) { cerr << e.what() << endl; throw; } // Return return rtn; } map > getDPSXValsErrs(string papername) { // Get filename const string xmlfile = getDatafilePath(papername); // Open AIDA XML file TiXmlDocument doc(xmlfile); doc.LoadFile(); if (doc.Error()) { string err = "Error in " + string(doc.Value()); err += ": " + string(doc.ErrorDesc()); cerr << err << endl; throw Error(err); } // Return value, to be populated map > rtn; try { // Walk down tree to get to the element const TiXmlNode* aidaN = doc.FirstChild("aida"); if (!aidaN) throw Error("Couldn't get root element"); for (const TiXmlNode* dpsN = aidaN->FirstChild("dataPointSet"); dpsN; dpsN = dpsN->NextSibling("dataPointSet")) { const TiXmlElement* dpsE = dpsN->ToElement(); const string plotname = dpsE->Attribute("name"); const string plotpath = dpsE->Attribute("path"); /// Check path to make sure that this is a reference histogram. if (plotpath.find("/REF") != 0) { cerr << "Skipping non-reference histogram " << plotname << endl; continue; } /// @todo Check that "path" matches filename vector points; for (const TiXmlNode* dpN = dpsN->FirstChild("dataPoint"); dpN; dpN = dpN->NextSibling("dataPoint")) { const TiXmlNode* xMeasN = dpN->FirstChild("measurement"); if (xMeasN) { const TiXmlElement* xMeasE = xMeasN->ToElement(); const string centreStr = xMeasE->Attribute("value"); const string errplusStr = xMeasE->Attribute("errorPlus"); const string errminusStr = xMeasE->Attribute("errorMinus"); //if (!centreStr) throw Error("Couldn't get a valid bin centre"); //if (!errplusStr) throw Error("Couldn't get a valid bin err+"); //if (!errminusStr) throw Error("Couldn't get a valid bin err-"); istringstream ssC(centreStr); istringstream ssP(errplusStr); istringstream ssM(errminusStr); double centre, errplus, errminus; ssC >> centre; ssP >> errplus; ssM >> errminus; //cout << " " << centre << " + " << errplus << " - " << errminus << endl; DPSXPoint pt(centre, errminus, errplus); points.push_back(pt); } else { cerr << "Couldn't get tag for " << papername << endl; /// @todo Throw an exception here? } } // Add to the map rtn[plotname] = points; } } // Write out the error /// @todo Rethrow as a general XML failure. catch (std::exception& e) { cerr << e.what() << endl; throw; } // Return return rtn; } map getBinEdges(string papername) { const map > xpoints = getDPSXValsErrs(papername); return getBinEdges(xpoints); } map getBinEdges(const map >& xpoints) { map rtn; for (map >::const_iterator dsit = xpoints.begin(); dsit != xpoints.end(); ++dsit) { const string plotname = dsit->first; list edges; foreach (const DPSXPoint& xpt, dsit->second) { const double lowedge = xpt.val - xpt.errminus; const double highedge = xpt.val + xpt.errplus; edges.push_back(lowedge); edges.push_back(highedge); } //cout << "*** " << edges << endl; // Remove duplicates (the careful testing is why we haven't used a set) //cout << edges.size() << " edges -> " << edges.size()/2 << " bins" << endl; for (list::iterator e = edges.begin(); e != edges.end(); ++e) { list::iterator e2 = e; while (e2 != edges.end()) { if (e != e2) { if (fuzzyEquals(*e, *e2)) { edges.erase(e2++); } } ++e2; } } //cout << edges.size() << " edges after dups removal (should be #bins+1)" << endl; //cout << "@@@ " << edges << endl; // Add to the map rtn[plotname] = BinEdges(edges.begin(), edges.end()); } // Return return rtn; } } rivet-1.8.3/src/Tools/BinnedHistogram.cc0000644000175000017500000000460612116077757016346 0ustar sunsun// -*- C++ -*- #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetBoost.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Analysis.hh" namespace Rivet { template const BinnedHistogram& BinnedHistogram::addHistogram(const T& binMin, const T& binMax, AIDA::IHistogram1D *histo){ if (binMin > binMax) { throw Error ("Cannot add a binned histogram where the lower bin edge is above the upper edge"); } _histosByUpperBound[binMax] = histo; _histosByLowerBound[binMin] = histo; bool found = false; foreach (AIDA::IHistogram1D* hist, _histos) { if (hist == histo) { found = true; break; } } if (!found){ _histos.push_back(histo); _binWidths[histo]=binMax-binMin; } return *this; } template AIDA::IHistogram1D* BinnedHistogram::fill(const T& bin, const T& val, double weight) { typename map::iterator histIt = _histosByUpperBound.upper_bound(bin); //check that the bin is not out of range if (histIt == _histosByUpperBound.end()) { return 0; } AIDA::IHistogram1D* histo = histIt->second; histIt = _histosByLowerBound.lower_bound(bin); // No need to check going beyond the upper bound if we already passed above // (given that upper bound > lower bound is checked) // Check it is not before the start of the map if (histIt == _histosByLowerBound.begin()) { return 0; } // By-lower-bound actually gives us the iterator one above the nearest element, // so decrement it. This is safe because we already checked we're not at the start! --histIt; if (histo != histIt->second) { return 0; } histo->fill(val, weight); return histo; } template void BinnedHistogram::scale(const T& scale, Analysis* ana) { foreach (AIDA::IHistogram1D* hist, getHistograms()) { ana->scale(hist, scale/_binWidths[hist]); } } // Template declarations for the compiler. template class BinnedHistogram; template class BinnedHistogram; template class BinnedHistogram; } rivet-1.8.3/src/Tools/binreloc.c0000644000175000017500000004627712116077757014735 0ustar sunsun/* * BinReloc - a library for creating relocatable executables * Written by: Hongli Lai * http://autopackage.org/ * * This source code is public domain. You can relicense this code * under whatever license you want. * * See http://autopackage.org/docs/binreloc/ for * more information and how to use this. */ #ifndef __BINRELOC_C__ #define __BINRELOC_C__ #ifdef ENABLE_BINRELOC #include #include #include #endif /* ENABLE_BINRELOC */ #include #include #include #include #include "binreloc.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** @internal * Find the canonical filename of the executable. Returns the filename * (which must be freed) or NULL on error. If the parameter 'error' is * not NULL, the error code will be stored there, if an error occured. */ static char * _br_find_exe (BrInitError *error) { #ifndef ENABLE_BINRELOC if (error) *error = BR_INIT_ERROR_DISABLED; return NULL; #else char *path, *path2, *line, *result; size_t buf_size; ssize_t size; struct stat stat_buf; FILE *f; /* Read from /proc/self/exe (symlink) */ if (sizeof (path) > SSIZE_MAX) buf_size = SSIZE_MAX - 1; else buf_size = PATH_MAX - 1; path = (char *) malloc (buf_size); if (path == NULL) { /* Cannot allocate memory. */ if (error) *error = BR_INIT_ERROR_NOMEM; return NULL; } path2 = (char *) malloc (buf_size); if (path2 == NULL) { /* Cannot allocate memory. */ if (error) *error = BR_INIT_ERROR_NOMEM; free (path); return NULL; } strncpy (path2, "/proc/self/exe", buf_size - 1); while (1) { int i; size = readlink (path2, path, buf_size - 1); if (size == -1) { /* Error. */ free (path2); break; } /* readlink() success. */ path[size] = '\0'; /* Check whether the symlink's target is also a symlink. * We want to get the final target. */ i = stat (path, &stat_buf); if (i == -1) { /* Error. */ free (path2); break; } /* stat() success. */ if (!S_ISLNK (stat_buf.st_mode)) { /* path is not a symlink. Done. */ free (path2); return path; } /* path is a symlink. Continue loop and resolve this. */ strncpy (path, path2, buf_size - 1); } /* readlink() or stat() failed; this can happen when the program is * running in Valgrind 2.2. Read from /proc/self/maps as fallback. */ buf_size = PATH_MAX + 128; line = (char *) realloc (path, buf_size); if (line == NULL) { /* Cannot allocate memory. */ free (path); if (error) *error = BR_INIT_ERROR_NOMEM; return NULL; } f = fopen ("/proc/self/maps", "r"); if (f == NULL) { free (line); if (error) *error = BR_INIT_ERROR_OPEN_MAPS; return NULL; } /* The first entry should be the executable name. */ result = fgets (line, (int) buf_size, f); if (result == NULL) { fclose (f); free (line); if (error) *error = BR_INIT_ERROR_READ_MAPS; return NULL; } /* Get rid of newline character. */ buf_size = strlen (line); if (buf_size <= 0) { /* Huh? An empty string? */ fclose (f); free (line); if (error) *error = BR_INIT_ERROR_INVALID_MAPS; return NULL; } if (line[buf_size - 1] == 10) line[buf_size - 1] = 0; /* Extract the filename; it is always an absolute path. */ path = strchr (line, '/'); /* Sanity check. */ if (strstr (line, " r-xp ") == NULL || path == NULL) { fclose (f); free (line); if (error) *error = BR_INIT_ERROR_INVALID_MAPS; return NULL; } char * oldpath = path; path = strdup (oldpath); free (oldpath); free (line); fclose (f); return path; #endif /* ENABLE_BINRELOC */ } /** @internal * Find the canonical filename of the executable which owns symbol. * Returns a filename which must be freed, or NULL on error. */ static char * _br_find_exe_for_symbol (const void *symbol, BrInitError *error) { #ifndef ENABLE_BINRELOC if (error) *error = BR_INIT_ERROR_DISABLED; return (char *) NULL; #else #define SIZE PATH_MAX + 100 FILE *f; size_t address_string_len; char *address_string, line[SIZE], *found; if (symbol == NULL) return (char *) NULL; f = fopen ("/proc/self/maps", "r"); if (f == NULL) return (char *) NULL; address_string_len = 4; address_string = (char *) malloc (address_string_len); /* Handle OOM (Tracker issue #35) */ if (!address_string) { if (error) *error = BR_INIT_ERROR_NOMEM; return (char *) NULL; } found = (char *) NULL; while (!feof (f)) { char *start_addr, *end_addr, *end_addr_end, *file; void *start_addr_p, *end_addr_p; size_t len; if (fgets (line, SIZE, f) == NULL) break; /* Sanity check. */ if (strstr (line, " r-xp ") == NULL || strchr (line, '/') == NULL) continue; /* Parse line. */ start_addr = line; end_addr = strchr (line, '-'); file = strchr (line, '/'); /* More sanity check. */ if (!(file > end_addr && end_addr != NULL && end_addr[0] == '-')) continue; end_addr[0] = '\0'; end_addr++; end_addr_end = strchr (end_addr, ' '); if (end_addr_end == NULL) continue; end_addr_end[0] = '\0'; len = strlen (file); if (len == 0) continue; if (file[len - 1] == '\n') file[len - 1] = '\0'; /* Get rid of "(deleted)" from the filename. */ len = strlen (file); if (len > 10 && strcmp (file + len - 10, " (deleted)") == 0) file[len - 10] = '\0'; /* I don't know whether this can happen but better safe than sorry. */ len = strlen (start_addr); if (len != strlen (end_addr)) continue; /* Transform the addresses into a string in the form of 0xdeadbeef, * then transform that into a pointer. */ if (address_string_len < len + 3) { address_string_len = len + 3; address_string = (char *) realloc (address_string, address_string_len); /* Handle OOM (Tracker issue #35) */ if (!address_string) { if (error) *error = BR_INIT_ERROR_NOMEM; return (char *) NULL; } } memcpy (address_string, "0x", 2); memcpy (address_string + 2, start_addr, len); address_string[2 + len] = '\0'; sscanf (address_string, "%p", &start_addr_p); memcpy (address_string, "0x", 2); memcpy (address_string + 2, end_addr, len); address_string[2 + len] = '\0'; sscanf (address_string, "%p", &end_addr_p); if (symbol >= start_addr_p && symbol < end_addr_p) { found = file; break; } } free (address_string); fclose (f); if (found == NULL) return (char *) NULL; else return strdup (found); #endif /* ENABLE_BINRELOC */ } #ifndef BINRELOC_RUNNING_DOXYGEN #undef NULL #define NULL ((char *) 0) /* typecasted as char* for C++ type safeness */ #endif static char *exe = (char *) NULL; /** Initialize the BinReloc library (for applications). * * This function must be called before using any other BinReloc functions. * It attempts to locate the application's canonical filename. * * @note If you want to use BinReloc for a library, then you should call * br_init_lib() instead. * @note Initialization failure is not fatal. BinReloc functions will just * fallback to the supplied default path. * * @param error If BinReloc failed to initialize, then the error code will * be stored in this variable. Set to NULL if you want to * ignore this. See #BrInitError for a list of error codes. * * @returns 1 on success, 0 if BinReloc failed to initialize. */ int br_init (BrInitError *error) { exe = _br_find_exe (error); return exe != NULL; } /** Initialize the BinReloc library (for libraries). * * This function must be called before using any other BinReloc functions. * It attempts to locate the calling library's canonical filename. * * @note The BinReloc source code MUST be included in your library, or this * function won't work correctly. * @note Initialization failure is not fatal. BinReloc functions will just * fallback to the supplied default path. * * @param error If BinReloc failed to initialize, then the error code will * be stored in this variable. Set to NULL if you want to * ignore this. See #BrInitError for a list of error codes. * * @returns 1 on success, 0 if a filename cannot be found. */ int br_init_lib (BrInitError *error) { exe = _br_find_exe_for_symbol ((const void *) "", error); return exe != NULL; } /** Find the canonical filename of the current application. * * @param default_exe A default filename which will be used as fallback. * @returns A string containing the application's canonical filename, * which must be freed when no longer necessary. If BinReloc is * not initialized, or if br_init() failed, then a copy of * default_exe will be returned. If default_exe is NULL, then * NULL will be returned. */ char * br_find_exe (const char *default_exe) { if (exe == (char *) NULL) { /* BinReloc is not initialized. */ if (default_exe != (const char *) NULL) return strdup (default_exe); else return (char *) NULL; } return strdup (exe); } /** Locate the directory in which the current application is installed. * * The prefix is generated by the following pseudo-code evaluation: * \code * dirname(exename) * \endcode * * @param default_dir A default directory which will used as fallback. * @return A string containing the directory, which must be freed when no * longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_dir * will be returned. If default_dir is NULL, then NULL will be * returned. */ char * br_find_exe_dir (const char *default_dir) { if (exe == NULL) { /* BinReloc not initialized. */ if (default_dir != NULL) return strdup (default_dir); else return NULL; } return br_dirname (exe); } /** Locate the prefix in which the current application is installed. * * The prefix is generated by the following pseudo-code evaluation: * \code * dirname(dirname(exename)) * \endcode * * @param default_prefix A default prefix which will used as fallback. * @return A string containing the prefix, which must be freed when no * longer necessary. If BinReloc is not initialized, or if * the initialization function failed, then a copy of default_prefix * will be returned. If default_prefix is NULL, then NULL will be returned. */ char * br_find_prefix (const char *default_prefix) { char *dir1, *dir2; if (exe == (char *) NULL) { /* BinReloc not initialized. */ if (default_prefix != (const char *) NULL) return strdup (default_prefix); else return (char *) NULL; } dir1 = br_dirname (exe); dir2 = br_dirname (dir1); free (dir1); return dir2; } /** Locate the application's binary folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/bin" * \endcode * * @param default_bin_dir A default path which will used as fallback. * @return A string containing the bin folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if * the initialization function failed, then a copy of default_bin_dir will * be returned. If default_bin_dir is NULL, then NULL will be returned. */ char * br_find_bin_dir (const char *default_bin_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_bin_dir != (const char *) NULL) return strdup (default_bin_dir); else return (char *) NULL; } dir = br_build_path (prefix, "bin"); free (prefix); return dir; } /** Locate the application's superuser binary folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/sbin" * \endcode * * @param default_sbin_dir A default path which will used as fallback. * @return A string containing the sbin folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_sbin_dir will * be returned. If default_bin_dir is NULL, then NULL will be returned. */ char * br_find_sbin_dir (const char *default_sbin_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_sbin_dir != (const char *) NULL) return strdup (default_sbin_dir); else return (char *) NULL; } dir = br_build_path (prefix, "sbin"); free (prefix); return dir; } /** Locate the application's data folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/share" * \endcode * * @param default_data_dir A default path which will used as fallback. * @return A string containing the data folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_data_dir * will be returned. If default_data_dir is NULL, then NULL will be * returned. */ char * br_find_data_dir (const char *default_data_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_data_dir != (const char *) NULL) return strdup (default_data_dir); else return (char *) NULL; } dir = br_build_path (prefix, "share"); free (prefix); return dir; } /** Locate the application's localization folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/share/locale" * \endcode * * @param default_locale_dir A default path which will used as fallback. * @return A string containing the localization folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_locale_dir will be returned. * If default_locale_dir is NULL, then NULL will be returned. */ char * br_find_locale_dir (const char *default_locale_dir) { char *data_dir, *dir; data_dir = br_find_data_dir ((const char *) NULL); if (data_dir == (char *) NULL) { /* BinReloc not initialized. */ if (default_locale_dir != (const char *) NULL) return strdup (default_locale_dir); else return (char *) NULL; } dir = br_build_path (data_dir, "locale"); free (data_dir); return dir; } /** Locate the application's library folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/lib" * \endcode * * @param default_lib_dir A default path which will used as fallback. * @return A string containing the library folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the initialization * function failed, then a copy of default_lib_dir will be returned. * If default_lib_dir is NULL, then NULL will be returned. */ char * br_find_lib_dir (const char *default_lib_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_lib_dir != (const char *) NULL) return strdup (default_lib_dir); else return (char *) NULL; } dir = br_build_path (prefix, "lib"); free (prefix); return dir; } /** Locate the application's libexec folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/libexec" * \endcode * * @param default_libexec_dir A default path which will used as fallback. * @return A string containing the libexec folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the initialization * function failed, then a copy of default_libexec_dir will be returned. * If default_libexec_dir is NULL, then NULL will be returned. */ char * br_find_libexec_dir (const char *default_libexec_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_libexec_dir != (const char *) NULL) return strdup (default_libexec_dir); else return (char *) NULL; } dir = br_build_path (prefix, "libexec"); free (prefix); return dir; } /** Locate the application's configuration files folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/etc" * \endcode * * @param default_etc_dir A default path which will used as fallback. * @return A string containing the etc folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the initialization * function failed, then a copy of default_etc_dir will be returned. * If default_etc_dir is NULL, then NULL will be returned. */ char * br_find_etc_dir (const char *default_etc_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_etc_dir != (const char *) NULL) return strdup (default_etc_dir); else return (char *) NULL; } dir = br_build_path (prefix, "etc"); free (prefix); return dir; } /*********************** * Utility functions ***********************/ /** Concatenate str1 and str2 to a newly allocated string. * * @param str1 A string. * @param str2 Another string. * @returns A newly-allocated string. This string should be freed when no longer needed. */ char * br_strcat (const char *str1, const char *str2) { char *result; size_t len1, len2; if (str1 == NULL) str1 = ""; if (str2 == NULL) str2 = ""; len1 = strlen (str1); len2 = strlen (str2); result = (char *) malloc (len1 + len2 + 1); /* Handle OOM (Tracker issue #35) */ if (result) { memcpy (result, str1, len1); memcpy (result + len1, str2, len2); result[len1 + len2] = '\0'; } return result; } char * br_build_path (const char *dir, const char *file) { char *dir2, *result; size_t len; int must_free = 0; len = strlen (dir); if (len > 0 && dir[len - 1] != '/') { dir2 = br_strcat (dir, "/"); must_free = 1; } else dir2 = (char *) dir; result = br_strcat (dir2, file); if (must_free) free (dir2); return result; } /* Emulates glibc's strndup() */ static char * br_strndup (const char *str, size_t size) { char *result = (char *) NULL; size_t len; if (str == (const char *) NULL) return (char *) NULL; len = strlen (str); if (len == 0) return strdup (""); if (size > len) size = len; result = (char *) malloc (len + 1); /* Handle OOM (Tracker issue #35) */ if (result) { memcpy (result, str, size); result[size] = '\0'; } return result; } /** Extracts the directory component of a path. * * Similar to g_dirname() or the dirname commandline application. * * Example: * \code * br_dirname ("/usr/local/foobar"); --> Returns: "/usr/local" * \endcode * * @param path A path. * @returns A directory name. This string should be freed when no longer needed. */ char * br_dirname (const char *path) { char *end, *result; if (path == (const char *) NULL) return (char *) NULL; end = strrchr (path, '/'); if (end == (const char *) NULL) return strdup ("."); while (end > path && *end == '/') end--; result = br_strndup (path, end - path + 1); if (result[0] == 0) { free (result); return strdup ("/"); } else return result; } #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __BINRELOC_C__ */ rivet-1.8.3/src/Tools/binreloc.h0000644000175000017500000000565412116077757014734 0ustar sunsun/* * BinReloc - a library for creating relocatable executables * Written by: Hongli Lai * http://autopackage.org/ * * This source code is public domain. You can relicense this code * under whatever license you want. * * See http://autopackage.org/docs/binreloc/ for * more information and how to use this. */ #ifndef __BINRELOC_H__ #define __BINRELOC_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** These error codes can be returned by br_init(), br_init_lib(), gbr_init() or gbr_init_lib(). */ typedef enum { /** Cannot allocate memory. */ BR_INIT_ERROR_NOMEM, /** Unable to open /proc/self/maps; see errno for details. */ BR_INIT_ERROR_OPEN_MAPS, /** Unable to read from /proc/self/maps; see errno for details. */ BR_INIT_ERROR_READ_MAPS, /** The file format of /proc/self/maps is invalid; kernel bug? */ BR_INIT_ERROR_INVALID_MAPS, /** BinReloc is disabled (the ENABLE_BINRELOC macro is not defined). */ BR_INIT_ERROR_DISABLED } BrInitError; #ifndef BINRELOC_RUNNING_DOXYGEN /* Mangle symbol names to avoid symbol * collisions with other ELF objects. */ #define br_init KSRM16162742943295_br_init #define br_init_lib KSRM16162742943295_br_init_lib #define br_find_exe KSRM16162742943295_br_find_exe #define br_find_exe_dir KSRM16162742943295_br_find_exe_dir #define br_find_prefix KSRM16162742943295_br_find_prefix #define br_find_bin_dir KSRM16162742943295_br_find_bin_dir #define br_find_sbin_dir KSRM16162742943295_br_find_sbin_dir #define br_find_data_dir KSRM16162742943295_br_find_data_dir #define br_find_locale_dir KSRM16162742943295_br_find_locale_dir #define br_find_lib_dir KSRM16162742943295_br_find_lib_dir #define br_find_libexec_dir KSRM16162742943295_br_find_libexec_dir #define br_find_etc_dir KSRM16162742943295_br_find_etc_dir #define br_strcat KSRM16162742943295_br_strcat #define br_build_path KSRM16162742943295_br_build_path #define br_dirname KSRM16162742943295_br_dirname #endif int br_init (BrInitError *error); int br_init_lib (BrInitError *error); char *br_find_exe (const char *default_exe); char *br_find_exe_dir (const char *default_dir); char *br_find_prefix (const char *default_prefix); char *br_find_bin_dir (const char *default_bin_dir); char *br_find_sbin_dir (const char *default_sbin_dir); char *br_find_data_dir (const char *default_data_dir); char *br_find_locale_dir (const char *default_locale_dir); char *br_find_lib_dir (const char *default_lib_dir); char *br_find_libexec_dir (const char *default_libexec_dir); char *br_find_etc_dir (const char *default_etc_dir); /* Utility functions */ char *br_strcat (const char *str1, const char *str2); char *br_build_path (const char *dir, const char *file); char *br_dirname (const char *path); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __BINRELOC_H__ */ rivet-1.8.3/src/Tools/RivetMT2.cc0000644000175000017500000000123512116077757014700 0ustar sunsun#include "Rivet/Tools/RivetMT2.hh" #include "Rivet/Math/Vector4.hh" #include "mt2_bisect.hh" namespace Rivet { namespace mT2 { double mT2(const FourMomentum & a, const FourMomentum & b, const FourMomentum & pTmiss, double invisiblesMass) { mt2_bisect::mt2 mt2_event; double unused = -999.999; double pa[3] = { 0.0, a.x(), a.y() }; double pb[3] = { 0.0, b.x(), b.y() }; double pmiss[3] = { unused, pTmiss.x(), pTmiss.y() }; mt2_event.set_momenta( pa, pb, pmiss ); mt2_event.set_mn( invisiblesMass ); return mt2_event.get_mt2(); } } } rivet-1.8.3/src/Tools/Utils.cc0000644000175000017500000000027012116077757014362 0ustar sunsun#include "Rivet/Rivet.hh" #include "Rivet/Tools/Utils.hh" namespace Rivet { /// A function to get the Rivet version string string version() { return RIVET_VERSION; } } rivet-1.8.3/src/Tools/TinyXML/0000755000175000017500000000000012131473204014240 5ustar sunsunrivet-1.8.3/src/Tools/TinyXML/tinyxmlparser.cpp0000644000175000017500000010566612116077757017723 0ustar sunsun/* www.sourceforge.net/projects/tinyxml Original code (2.0 and earlier )copyright (c) 2000-2002 Lee Thomason (www.grinninglizard.com) This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #include #include #include "tinyxml.h" //#define DEBUG_PARSER #if defined( DEBUG_PARSER ) # if defined( DEBUG ) && defined( _MSC_VER ) # include # define TIXML_LOG OutputDebugString # else # define TIXML_LOG printf # endif #endif // Note tha "PutString" hardcodes the same list. This // is less flexible than it appears. Changing the entries // or order will break putstring. TiXmlBase::Entity TiXmlBase::entity[ NUM_ENTITY ] = { { "&", 5, '&' }, { "<", 4, '<' }, { ">", 4, '>' }, { """, 6, '\"' }, { "'", 6, '\'' } }; // Bunch of unicode info at: // http://www.unicode.org/faq/utf_bom.html // Including the basic of this table, which determines the #bytes in the // sequence from the lead byte. 1 placed for invalid sequences -- // although the result will be junk, pass it through as much as possible. // Beware of the non-characters in UTF-8: // ef bb bf (Microsoft "lead bytes") // ef bf be // ef bf bf const unsigned char TIXML_UTF_LEAD_0 = 0xefU; const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; const int TiXmlBase::utf8ByteTable[256] = { // 0 1 2 3 4 5 6 7 8 9 a b c d e f 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x00 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x10 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x20 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x30 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x40 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x50 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x60 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x70 End of ASCII range 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x80 0x80 to 0xc1 invalid 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x90 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xa0 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xb0 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xc0 0xc2 to 0xdf 2 byte 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xd0 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 0xe0 0xe0 to 0xef 3 byte 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // 0xf0 0xf0 to 0xf4 4 byte, 0xf5 and higher invalid }; void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ) { const unsigned long BYTE_MASK = 0xBF; const unsigned long BYTE_MARK = 0x80; const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; if (input < 0x80) *length = 1; else if ( input < 0x800 ) *length = 2; else if ( input < 0x10000 ) *length = 3; else if ( input < 0x200000 ) *length = 4; else { *length = 0; return; } // This code won't covert this correctly anyway. output += *length; // Scary scary fall throughs. switch (*length) { case 4: --output; *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; case 3: --output; *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; case 2: --output; *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; case 1: --output; *output = (char)(input | FIRST_BYTE_MARK[*length]); } } /*static*/ int TiXmlBase::IsAlpha( unsigned char anyByte, TiXmlEncoding /*encoding*/ ) { // This will only work for low-ascii, everything else is assumed to be a valid // letter. I'm not sure this is the best approach, but it is quite tricky trying // to figure out alhabetical vs. not across encoding. So take a very // conservative approach. // if ( encoding == TIXML_ENCODING_UTF8 ) // { if ( anyByte < 127 ) return isalpha( anyByte ); else return 1; // What else to do? The unicode set is huge...get the english ones right. // } // else // { // return isalpha( anyByte ); // } } /*static*/ int TiXmlBase::IsAlphaNum( unsigned char anyByte, TiXmlEncoding /*encoding*/ ) { // This will only work for low-ascii, everything else is assumed to be a valid // letter. I'm not sure this is the best approach, but it is quite tricky trying // to figure out alhabetical vs. not across encoding. So take a very // conservative approach. // if ( encoding == TIXML_ENCODING_UTF8 ) // { if ( anyByte < 127 ) return isalnum( anyByte ); else return 1; // What else to do? The unicode set is huge...get the english ones right. // } // else // { // return isalnum( anyByte ); // } } class TiXmlParsingData { friend class TiXmlDocument; public: void Stamp( const char* now, TiXmlEncoding encoding ); const TiXmlCursor& Cursor() { return cursor; } private: // Only used by the document! TiXmlParsingData( const char* start, int _tabsize, int row, int col ) { assert( start ); stamp = start; tabsize = _tabsize; cursor.row = row; cursor.col = col; } TiXmlCursor cursor; const char* stamp; int tabsize; }; void TiXmlParsingData::Stamp( const char* now, TiXmlEncoding encoding ) { assert( now ); // Do nothing if the tabsize is 0. if ( tabsize < 1 ) { return; } // Get the current row, column. int row = cursor.row; int col = cursor.col; const char* p = stamp; assert( p ); while ( p < now ) { // Treat p as unsigned, so we have a happy compiler. const unsigned char* pU = (const unsigned char*)p; // Code contributed by Fletcher Dunn: (modified by lee) switch (*pU) { case 0: // We *should* never get here, but in case we do, don't // advance past the terminating null character, ever return; case '\r': // bump down to the next line ++row; col = 0; // Eat the character ++p; // Check for \r\n sequence, and treat this as a single character if (*p == '\n') { ++p; } break; case '\n': // bump down to the next line ++row; col = 0; // Eat the character ++p; // Check for \n\r sequence, and treat this as a single // character. (Yes, this bizarre thing does occur still // on some arcane platforms...) if (*p == '\r') { ++p; } break; case '\t': // Eat the character ++p; // Skip to next tab stop col = (col / tabsize + 1) * tabsize; break; case TIXML_UTF_LEAD_0: if ( encoding == TIXML_ENCODING_UTF8 ) { if ( *(p+1) && *(p+2) ) { // In these cases, don't advance the column. These are // 0-width spaces. if ( *(pU+1)==TIXML_UTF_LEAD_1 && *(pU+2)==TIXML_UTF_LEAD_2 ) p += 3; else if ( *(pU+1)==0xbfU && *(pU+2)==0xbeU ) p += 3; else if ( *(pU+1)==0xbfU && *(pU+2)==0xbfU ) p += 3; else { p +=3; ++col; } // A normal character. } } else { ++p; ++col; } break; default: if ( encoding == TIXML_ENCODING_UTF8 ) { // Eat the 1 to 4 byte utf8 character. int step = TiXmlBase::utf8ByteTable[*((const unsigned char*)p)]; if ( step == 0 ) step = 1; // Error case from bad encoding, but handle gracefully. p += step; // Just advance one column, of course. ++col; } else { ++p; ++col; } break; } } cursor.row = row; cursor.col = col; assert( cursor.row >= -1 ); assert( cursor.col >= -1 ); stamp = p; assert( stamp ); } const char* TiXmlBase::SkipWhiteSpace( const char* p, TiXmlEncoding encoding ) { if ( !p || !*p ) { return 0; } if ( encoding == TIXML_ENCODING_UTF8 ) { while ( *p ) { const unsigned char* pU = (const unsigned char*)p; // Skip the stupid Microsoft UTF-8 Byte order marks if ( *(pU+0)==TIXML_UTF_LEAD_0 && *(pU+1)==TIXML_UTF_LEAD_1 && *(pU+2)==TIXML_UTF_LEAD_2 ) { p += 3; continue; } else if(*(pU+0)==TIXML_UTF_LEAD_0 && *(pU+1)==0xbfU && *(pU+2)==0xbeU ) { p += 3; continue; } else if(*(pU+0)==TIXML_UTF_LEAD_0 && *(pU+1)==0xbfU && *(pU+2)==0xbfU ) { p += 3; continue; } if ( IsWhiteSpace( *p ) || *p == '\n' || *p =='\r' ) // Still using old rules for white space. ++p; else break; } } else { while ( *p && (IsWhiteSpace( *p ) || *p == '\n' || *p =='\r') ) ++p; } return p; } /*static*/ bool TiXmlBase::StreamWhiteSpace( std::istream * in, TIXML_STRING * tag ) { for( ;; ) { if ( !in->good() ) return false; int c = in->peek(); // At this scope, we can't get to a document. So fail silently. if ( !IsWhiteSpace( c ) || c <= 0 ) return true; *tag += (char) in->get(); } } /*static*/ bool TiXmlBase::StreamTo( std::istream * in, int character, TIXML_STRING * tag ) { //assert( character > 0 && character < 128 ); // else it won't work in utf-8 while ( in->good() ) { int c = in->peek(); if ( c == character ) return true; if ( c <= 0 ) // Silent failure: can't get document at this scope return false; in->get(); *tag += (char) c; } return false; } // One of TinyXML's more performance demanding functions. Try to keep the memory overhead down. The // "assign" optimization removes over 10% of the execution time. // const char* TiXmlBase::ReadName( const char* p, TIXML_STRING * name, TiXmlEncoding encoding ) { // Oddly, not supported on some comilers, //name->clear(); // So use this: *name = ""; assert( p ); // Names start with letters or underscores. // Of course, in unicode, tinyxml has no idea what a letter *is*. The // algorithm is generous. // // After that, they can be letters, underscores, numbers, // hyphens, or colons. (Colons are valid ony for namespaces, // but tinyxml can't tell namespaces from names.) if ( p && *p && ( IsAlpha( (unsigned char) *p, encoding ) || *p == '_' ) ) { const char* start = p; while( p && *p && ( IsAlphaNum( (unsigned char ) *p, encoding ) || *p == '_' || *p == '-' || *p == '.' || *p == ':' ) ) { //(*name) += *p; // expensive ++p; } if ( p-start > 0 ) { name->assign( start, p-start ); } return p; } return 0; } const char* TiXmlBase::GetEntity( const char* p, char* value, int* length, TiXmlEncoding encoding ) { // Presume an entity, and pull it out. TIXML_STRING ent; int i; *length = 0; if ( *(p+1) && *(p+1) == '#' && *(p+2) ) { unsigned long ucs = 0; ptrdiff_t delta = 0; unsigned mult = 1; if ( *(p+2) == 'x' ) { // Hexadecimal. if ( !*(p+3) ) return 0; const char* q = p+3; q = strchr( q, ';' ); if ( !q || !*q ) return 0; delta = q-p; --q; while ( *q != 'x' ) { if ( *q >= '0' && *q <= '9' ) ucs += mult * (*q - '0'); else if ( *q >= 'a' && *q <= 'f' ) ucs += mult * (*q - 'a' + 10); else if ( *q >= 'A' && *q <= 'F' ) ucs += mult * (*q - 'A' + 10 ); else return 0; mult *= 16; --q; } } else { // Decimal. if ( !*(p+2) ) return 0; const char* q = p+2; q = strchr( q, ';' ); if ( !q || !*q ) return 0; delta = q-p; --q; while ( *q != '#' ) { if ( *q >= '0' && *q <= '9' ) ucs += mult * (*q - '0'); else return 0; mult *= 10; --q; } } if ( encoding == TIXML_ENCODING_UTF8 ) { // convert the UCS to UTF-8 ConvertUTF32ToUTF8( ucs, value, length ); } else { *value = (char)ucs; *length = 1; } return p + delta + 1; } // Now try to match it. for( i=0; iappend( cArr, len ); } } else { bool whitespace = false; // Remove leading white space: p = SkipWhiteSpace( p, encoding ); while ( p && *p && !StringEqual( p, endTag, caseInsensitive, encoding ) ) { if ( *p == '\r' || *p == '\n' ) { whitespace = true; ++p; } else if ( IsWhiteSpace( *p ) ) { whitespace = true; ++p; } else { // If we've found whitespace, add it before the // new character. Any whitespace just becomes a space. if ( whitespace ) { (*text) += ' '; whitespace = false; } int len; char cArr[4] = { 0, 0, 0, 0 }; p = GetChar( p, cArr, &len, encoding ); if ( len == 1 ) (*text) += cArr[0]; // more efficient else text->append( cArr, len ); } } } if ( p ) p += strlen( endTag ); return p; } void TiXmlDocument::StreamIn( std::istream * in, TIXML_STRING * tag ) { // The basic issue with a document is that we don't know what we're // streaming. Read something presumed to be a tag (and hope), then // identify it, and call the appropriate stream method on the tag. // // This "pre-streaming" will never read the closing ">" so the // sub-tag can orient itself. if ( !StreamTo( in, '<', tag ) ) { SetError( TIXML_ERROR_PARSING_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); return; } while ( in->good() ) { int tagIndex = (int) tag->length(); while ( in->good() && in->peek() != '>' ) { int c = in->get(); if ( c <= 0 ) { SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); break; } (*tag) += (char) c; } if ( in->good() ) { // We now have something we presume to be a node of // some sort. Identify it, and call the node to // continue streaming. TiXmlNode* node = Identify( tag->c_str() + tagIndex, TIXML_DEFAULT_ENCODING ); if ( node ) { node->StreamIn( in, tag ); bool isElement = node->ToElement() != 0; delete node; node = 0; // If this is the root element, we're done. Parsing will be // done by the >> operator. if ( isElement ) { return; } } else { SetError( TIXML_ERROR, 0, 0, TIXML_ENCODING_UNKNOWN ); return; } } } // We should have returned sooner. SetError( TIXML_ERROR, 0, 0, TIXML_ENCODING_UNKNOWN ); } const char* TiXmlDocument::Parse( const char* p, TiXmlParsingData* prevData, TiXmlEncoding encoding ) { ClearError(); // Parse away, at the document level. Since a document // contains nothing but other tags, most of what happens // here is skipping white space. if ( !p || !*p ) { SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } // Note that, for a document, this needs to come // before the while space skip, so that parsing // starts from the pointer we are given. location.Clear(); if ( prevData ) { location.row = prevData->cursor.row; location.col = prevData->cursor.col; } else { location.row = 0; location.col = 0; } TiXmlParsingData data( p, TabSize(), location.row, location.col ); location = data.Cursor(); if ( encoding == TIXML_ENCODING_UNKNOWN ) { // Check for the Microsoft UTF-8 lead bytes. const unsigned char* pU = (const unsigned char*)p; if ( *(pU+0) && *(pU+0) == TIXML_UTF_LEAD_0 && *(pU+1) && *(pU+1) == TIXML_UTF_LEAD_1 && *(pU+2) && *(pU+2) == TIXML_UTF_LEAD_2 ) { encoding = TIXML_ENCODING_UTF8; useMicrosoftBOM = true; } } p = SkipWhiteSpace( p, encoding ); if ( !p ) { SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } while ( p && *p ) { TiXmlNode* node = Identify( p, encoding ); if ( node ) { p = node->Parse( p, &data, encoding ); LinkEndChild( node ); } else { break; } // Did we get encoding info? if ( encoding == TIXML_ENCODING_UNKNOWN && node->ToDeclaration() ) { TiXmlDeclaration* dec = node->ToDeclaration(); const char* enc = dec->Encoding(); assert( enc ); if ( *enc == 0 ) encoding = TIXML_ENCODING_UTF8; else if ( StringEqual( enc, "UTF-8", true, TIXML_ENCODING_UNKNOWN ) ) encoding = TIXML_ENCODING_UTF8; else if ( StringEqual( enc, "UTF8", true, TIXML_ENCODING_UNKNOWN ) ) encoding = TIXML_ENCODING_UTF8; // incorrect, but be nice else encoding = TIXML_ENCODING_LEGACY; } p = SkipWhiteSpace( p, encoding ); } // Was this empty? if ( !firstChild ) { SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, encoding ); return 0; } // All is well. return p; } void TiXmlDocument::SetError( int err, const char* pError, TiXmlParsingData* data, TiXmlEncoding encoding ) { // The first error in a chain is more accurate - don't set again! if ( error ) return; assert( err > 0 && err < TIXML_ERROR_STRING_COUNT ); error = true; errorId = err; errorDesc = errorString[ errorId ]; errorLocation.Clear(); if ( pError && data ) { data->Stamp( pError, encoding ); errorLocation = data->Cursor(); } } TiXmlNode* TiXmlNode::Identify( const char* p, TiXmlEncoding encoding ) { TiXmlNode* returnNode = 0; p = SkipWhiteSpace( p, encoding ); if( !p || !*p || *p != '<' ) { return 0; } TiXmlDocument* doc = GetDocument(); p = SkipWhiteSpace( p, encoding ); if ( !p || !*p ) { return 0; } // What is this thing? // - Elements start with a letter or underscore, but xml is reserved. // - Comments: "; if ( !StringEqual( p, startTag, false, encoding ) ) { document->SetError( TIXML_ERROR_PARSING_COMMENT, p, data, encoding ); return 0; } p += strlen( startTag ); p = ReadText( p, &value, false, endTag, false, encoding ); return p; } const char* TiXmlAttribute::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ) { p = SkipWhiteSpace( p, encoding ); if ( !p || !*p ) return 0; // int tabsize = 4; // if ( document ) // tabsize = document->TabSize(); if ( data ) { data->Stamp( p, encoding ); location = data->Cursor(); } // Read the name, the '=' and the value. const char* pErr = p; p = ReadName( p, &name, encoding ); if ( !p || !*p ) { if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, pErr, data, encoding ); return 0; } p = SkipWhiteSpace( p, encoding ); if ( !p || !*p || *p != '=' ) { if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); return 0; } ++p; // skip '=' p = SkipWhiteSpace( p, encoding ); if ( !p || !*p ) { if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); return 0; } const char* end; const char SINGLE_QUOTE = '\''; const char DOUBLE_QUOTE = '\"'; if ( *p == SINGLE_QUOTE ) { ++p; end = "\'"; // single quote in string p = ReadText( p, &value, false, end, false, encoding ); } else if ( *p == DOUBLE_QUOTE ) { ++p; end = "\""; // double quote in string p = ReadText( p, &value, false, end, false, encoding ); } else { // All attribute values should be in single or double quotes. // But this is such a common error that the parser will try // its best, even without them. value = ""; while ( p && *p // existence && !IsWhiteSpace( *p ) && *p != '\n' && *p != '\r' // whitespace && *p != '/' && *p != '>' ) // tag end { if ( *p == SINGLE_QUOTE || *p == DOUBLE_QUOTE ) { // [ 1451649 ] Attribute values with trailing quotes not handled correctly // We did not have an opening quote but seem to have a // closing one. Give up and throw an error. if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); return 0; } value += *p; ++p; } } return p; } void TiXmlText::StreamIn( std::istream * in, TIXML_STRING * tag ) { while ( in->good() ) { int c = in->peek(); if ( !cdata && (c == '<' ) ) { return; } if ( c <= 0 ) { TiXmlDocument* document = GetDocument(); if ( document ) document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); return; } (*tag) += (char) c; in->get(); // "commits" the peek made above if ( cdata && c == '>' && tag->size() >= 3 ) { size_t len = tag->size(); if ( (*tag)[len-2] == ']' && (*tag)[len-3] == ']' ) { // terminator of cdata. return; } } } } const char* TiXmlText::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ) { value = ""; TiXmlDocument* document = GetDocument(); if ( data ) { data->Stamp( p, encoding ); location = data->Cursor(); } const char* const startTag = ""; if ( cdata || StringEqual( p, startTag, false, encoding ) ) { cdata = true; if ( !StringEqual( p, startTag, false, encoding ) ) { document->SetError( TIXML_ERROR_PARSING_CDATA, p, data, encoding ); return 0; } p += strlen( startTag ); // Keep all the white space, ignore the encoding, etc. while ( p && *p && !StringEqual( p, endTag, false, encoding ) ) { value += *p; ++p; } TIXML_STRING dummy; p = ReadText( p, &dummy, false, endTag, false, encoding ); return p; } else { bool ignoreWhite = true; const char* end = "<"; p = ReadText( p, &value, ignoreWhite, end, false, encoding ); if ( p ) return p-1; // don't truncate the '<' return 0; } } void TiXmlDeclaration::StreamIn( std::istream * in, TIXML_STRING * tag ) { while ( in->good() ) { int c = in->get(); if ( c <= 0 ) { TiXmlDocument* document = GetDocument(); if ( document ) document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); return; } (*tag) += (char) c; if ( c == '>' ) { // All is well. return; } } } const char* TiXmlDeclaration::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding _encoding ) { p = SkipWhiteSpace( p, _encoding ); // Find the beginning, find the end, and look for // the stuff in-between. TiXmlDocument* document = GetDocument(); if ( !p || !*p || !StringEqual( p, "SetError( TIXML_ERROR_PARSING_DECLARATION, 0, 0, _encoding ); return 0; } if ( data ) { data->Stamp( p, _encoding ); location = data->Cursor(); } p += 5; version = ""; encoding = ""; standalone = ""; while ( p && *p ) { if ( *p == '>' ) { ++p; return p; } p = SkipWhiteSpace( p, _encoding ); if ( StringEqual( p, "version", true, _encoding ) ) { TiXmlAttribute attrib; p = attrib.Parse( p, data, _encoding ); version = attrib.Value(); } else if ( StringEqual( p, "encoding", true, _encoding ) ) { TiXmlAttribute attrib; p = attrib.Parse( p, data, _encoding ); encoding = attrib.Value(); } else if ( StringEqual( p, "standalone", true, _encoding ) ) { TiXmlAttribute attrib; p = attrib.Parse( p, data, _encoding ); standalone = attrib.Value(); } else { // Read over whatever it is. while( p && *p && *p != '>' && !IsWhiteSpace( *p ) ) ++p; } } return 0; } bool TiXmlText::Blank() const { for ( unsigned i=0; i #include #include #include "tinyxml.h" bool TiXmlBase::condenseWhiteSpace = true; void TiXmlBase::PutString( const TIXML_STRING& str, TIXML_STRING* outString ) { int i=0; while( i<(int)str.length() ) { unsigned char c = (unsigned char) str[i]; if ( c == '&' && i < ( (int)str.length() - 2 ) && str[i+1] == '#' && str[i+2] == 'x' ) { // Hexadecimal character reference. // Pass through unchanged. // © -- copyright symbol, for example. // // The -1 is a bug fix from Rob Laveaux. It keeps // an overflow from happening if there is no ';'. // There are actually 2 ways to exit this loop - // while fails (error case) and break (semicolon found). // However, there is no mechanism (currently) for // this function to return an error. while ( i<(int)str.length()-1 ) { outString->append( str.c_str() + i, 1 ); ++i; if ( str[i] == ';' ) break; } } else if ( c == '&' ) { outString->append( entity[0].str, entity[0].strLength ); ++i; } else if ( c == '<' ) { outString->append( entity[1].str, entity[1].strLength ); ++i; } else if ( c == '>' ) { outString->append( entity[2].str, entity[2].strLength ); ++i; } else if ( c == '\"' ) { outString->append( entity[3].str, entity[3].strLength ); ++i; } else if ( c == '\'' ) { outString->append( entity[4].str, entity[4].strLength ); ++i; } else if ( c < 32 ) { // Easy pass at non-alpha/numeric/symbol // Below 32 is symbolic. char buf[ 32 ]; #if defined(TIXML_SNPRINTF) TIXML_SNPRINTF( buf, sizeof(buf), "&#x%02X;", (unsigned) ( c & 0xff ) ); #else sprintf( buf, "&#x%02X;", (unsigned) ( c & 0xff ) ); #endif //*ME: warning C4267: convert 'size_t' to 'int' //*ME: Int-Cast to make compiler happy ... outString->append( buf, (int)strlen( buf ) ); ++i; } else { //char realc = (char) c; //outString->append( &realc, 1 ); *outString += (char) c; // somewhat more efficient function call. ++i; } } } TiXmlNode::TiXmlNode( NodeType _type ) : TiXmlBase() { parent = 0; type = _type; firstChild = 0; lastChild = 0; prev = 0; next = 0; } TiXmlNode::~TiXmlNode() { TiXmlNode* node = firstChild; TiXmlNode* temp = 0; while ( node ) { temp = node; node = node->next; delete temp; } } void TiXmlNode::CopyTo( TiXmlNode* target ) const { target->SetValue (value.c_str() ); target->userData = userData; } void TiXmlNode::Clear() { TiXmlNode* node = firstChild; TiXmlNode* temp = 0; while ( node ) { temp = node; node = node->next; delete temp; } firstChild = 0; lastChild = 0; } TiXmlNode* TiXmlNode::LinkEndChild( TiXmlNode* node ) { assert( node->parent == 0 || node->parent == this ); assert( node->GetDocument() == 0 || node->GetDocument() == this->GetDocument() ); if ( node->Type() == TiXmlNode::DOCUMENT ) { delete node; if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } node->parent = this; node->prev = lastChild; node->next = 0; if ( lastChild ) lastChild->next = node; else firstChild = node; // it was an empty list. lastChild = node; return node; } TiXmlNode* TiXmlNode::InsertEndChild( const TiXmlNode& addThis ) { if ( addThis.Type() == TiXmlNode::DOCUMENT ) { if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } TiXmlNode* node = addThis.Clone(); if ( !node ) return 0; return LinkEndChild( node ); } TiXmlNode* TiXmlNode::InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ) { if ( !beforeThis || beforeThis->parent != this ) { return 0; } if ( addThis.Type() == TiXmlNode::DOCUMENT ) { if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } TiXmlNode* node = addThis.Clone(); if ( !node ) return 0; node->parent = this; node->next = beforeThis; node->prev = beforeThis->prev; if ( beforeThis->prev ) { beforeThis->prev->next = node; } else { assert( firstChild == beforeThis ); firstChild = node; } beforeThis->prev = node; return node; } TiXmlNode* TiXmlNode::InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ) { if ( !afterThis || afterThis->parent != this ) { return 0; } if ( addThis.Type() == TiXmlNode::DOCUMENT ) { if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } TiXmlNode* node = addThis.Clone(); if ( !node ) return 0; node->parent = this; node->prev = afterThis; node->next = afterThis->next; if ( afterThis->next ) { afterThis->next->prev = node; } else { assert( lastChild == afterThis ); lastChild = node; } afterThis->next = node; return node; } TiXmlNode* TiXmlNode::ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ) { if ( replaceThis->parent != this ) return 0; TiXmlNode* node = withThis.Clone(); if ( !node ) return 0; node->next = replaceThis->next; node->prev = replaceThis->prev; if ( replaceThis->next ) replaceThis->next->prev = node; else lastChild = node; if ( replaceThis->prev ) replaceThis->prev->next = node; else firstChild = node; delete replaceThis; node->parent = this; return node; } bool TiXmlNode::RemoveChild( TiXmlNode* removeThis ) { if ( removeThis->parent != this ) { assert( 0 ); return false; } if ( removeThis->next ) removeThis->next->prev = removeThis->prev; else lastChild = removeThis->prev; if ( removeThis->prev ) removeThis->prev->next = removeThis->next; else firstChild = removeThis->next; delete removeThis; return true; } const TiXmlNode* TiXmlNode::FirstChild( const char * _value ) const { const TiXmlNode* node; for ( node = firstChild; node; node = node->next ) { if ( strcmp( node->Value(), _value ) == 0 ) return node; } return 0; } const TiXmlNode* TiXmlNode::LastChild( const char * _value ) const { const TiXmlNode* node; for ( node = lastChild; node; node = node->prev ) { if ( strcmp( node->Value(), _value ) == 0 ) return node; } return 0; } const TiXmlNode* TiXmlNode::IterateChildren( const TiXmlNode* previous ) const { if ( !previous ) { return FirstChild(); } else { assert( previous->parent == this ); return previous->NextSibling(); } } const TiXmlNode* TiXmlNode::IterateChildren( const char * val, const TiXmlNode* previous ) const { if ( !previous ) { return FirstChild( val ); } else { assert( previous->parent == this ); return previous->NextSibling( val ); } } const TiXmlNode* TiXmlNode::NextSibling( const char * _value ) const { const TiXmlNode* node; for ( node = next; node; node = node->next ) { if ( strcmp( node->Value(), _value ) == 0 ) return node; } return 0; } const TiXmlNode* TiXmlNode::PreviousSibling( const char * _value ) const { const TiXmlNode* node; for ( node = prev; node; node = node->prev ) { if ( strcmp( node->Value(), _value ) == 0 ) return node; } return 0; } void TiXmlElement::RemoveAttribute( const char * name ) { TIXML_STRING str( name ); TiXmlAttribute* node = attributeSet.Find( str ); if ( node ) { attributeSet.Remove( node ); delete node; } } const TiXmlElement* TiXmlNode::FirstChildElement() const { const TiXmlNode* node; for ( node = FirstChild(); node; node = node->NextSibling() ) { if ( node->ToElement() ) return node->ToElement(); } return 0; } const TiXmlElement* TiXmlNode::FirstChildElement( const char * _value ) const { const TiXmlNode* node; for ( node = FirstChild( _value ); node; node = node->NextSibling( _value ) ) { if ( node->ToElement() ) return node->ToElement(); } return 0; } const TiXmlElement* TiXmlNode::NextSiblingElement() const { const TiXmlNode* node; for ( node = NextSibling(); node; node = node->NextSibling() ) { if ( node->ToElement() ) return node->ToElement(); } return 0; } const TiXmlElement* TiXmlNode::NextSiblingElement( const char * _value ) const { const TiXmlNode* node; for ( node = NextSibling( _value ); node; node = node->NextSibling( _value ) ) { if ( node->ToElement() ) return node->ToElement(); } return 0; } const TiXmlDocument* TiXmlNode::GetDocument() const { const TiXmlNode* node; for( node = this; node; node = node->parent ) { if ( node->ToDocument() ) return node->ToDocument(); } return 0; } TiXmlElement::TiXmlElement (const char * _value) : TiXmlNode( TiXmlNode::ELEMENT ) { firstChild = lastChild = 0; value = _value; } TiXmlElement::TiXmlElement( const std::string& _value ) : TiXmlNode( TiXmlNode::ELEMENT ) { firstChild = lastChild = 0; value = _value; } TiXmlElement::TiXmlElement( const TiXmlElement& copy) : TiXmlNode( TiXmlNode::ELEMENT ) { firstChild = lastChild = 0; copy.CopyTo( this ); } void TiXmlElement::operator=( const TiXmlElement& base ) { ClearThis(); base.CopyTo( this ); } TiXmlElement::~TiXmlElement() { ClearThis(); } void TiXmlElement::ClearThis() { Clear(); while( attributeSet.First() ) { TiXmlAttribute* node = attributeSet.First(); attributeSet.Remove( node ); delete node; } } const char* TiXmlElement::Attribute( const char* name ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( node ) return node->Value(); return 0; } const std::string* TiXmlElement::Attribute( const std::string& name ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( node ) return &node->ValueStr(); return 0; } const char* TiXmlElement::Attribute( const char* name, int* i ) const { const char* s = Attribute( name ); if ( i ) { if ( s ) { *i = atoi( s ); } else { *i = 0; } } return s; } const std::string* TiXmlElement::Attribute( const std::string& name, int* i ) const { const std::string* s = Attribute( name ); if ( i ) { if ( s ) { *i = atoi( s->c_str() ); } else { *i = 0; } } return s; } const char* TiXmlElement::Attribute( const char* name, double* d ) const { const char* s = Attribute( name ); if ( d ) { if ( s ) { *d = atof( s ); } else { *d = 0; } } return s; } const std::string* TiXmlElement::Attribute( const std::string& name, double* d ) const { const std::string* s = Attribute( name ); if ( d ) { if ( s ) { *d = atof( s->c_str() ); } else { *d = 0; } } return s; } int TiXmlElement::QueryIntAttribute( const char* name, int* ival ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( !node ) return TIXML_NO_ATTRIBUTE; return node->QueryIntValue( ival ); } int TiXmlElement::QueryIntAttribute( const std::string& name, int* ival ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( !node ) return TIXML_NO_ATTRIBUTE; return node->QueryIntValue( ival ); } int TiXmlElement::QueryDoubleAttribute( const char* name, double* dval ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( !node ) return TIXML_NO_ATTRIBUTE; return node->QueryDoubleValue( dval ); } int TiXmlElement::QueryDoubleAttribute( const std::string& name, double* dval ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( !node ) return TIXML_NO_ATTRIBUTE; return node->QueryDoubleValue( dval ); } void TiXmlElement::SetAttribute( const char * name, int val ) { char buf[64]; #if defined(TIXML_SNPRINTF) TIXML_SNPRINTF( buf, sizeof(buf), "%d", val ); #else sprintf( buf, "%d", val ); #endif SetAttribute( name, buf ); } void TiXmlElement::SetAttribute( const std::string& name, int val ) { std::ostringstream oss; oss << val; SetAttribute( name, oss.str() ); } void TiXmlElement::SetDoubleAttribute( const char * name, double val ) { char buf[256]; #if defined(TIXML_SNPRINTF) TIXML_SNPRINTF( buf, sizeof(buf), "%f", val ); #else sprintf( buf, "%f", val ); #endif SetAttribute( name, buf ); } void TiXmlElement::SetAttribute( const char * cname, const char * cvalue ) { TIXML_STRING _name( cname ); TIXML_STRING _value( cvalue ); TiXmlAttribute* node = attributeSet.Find( _name ); if ( node ) { node->SetValue( _value ); return; } TiXmlAttribute* attrib = new TiXmlAttribute( cname, cvalue ); if ( attrib ) { attributeSet.Add( attrib ); } else { TiXmlDocument* document = GetDocument(); if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY, 0, 0, TIXML_ENCODING_UNKNOWN ); } } void TiXmlElement::SetAttribute( const std::string& name, const std::string& _value ) { TiXmlAttribute* node = attributeSet.Find( name ); if ( node ) { node->SetValue( _value ); return; } TiXmlAttribute* attrib = new TiXmlAttribute( name, _value ); if ( attrib ) { attributeSet.Add( attrib ); } else { TiXmlDocument* document = GetDocument(); if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY, 0, 0, TIXML_ENCODING_UNKNOWN ); } } void TiXmlElement::Print( FILE* cfile, int depth ) const { int i; assert( cfile ); for ( i=0; iNext() ) { fprintf( cfile, " " ); attrib->Print( cfile, depth ); } // There are 3 different formatting approaches: // 1) An element without children is printed as a node // 2) An element with only a text child is printed as text // 3) An element with children is printed on multiple lines. TiXmlNode* node; if ( !firstChild ) { fprintf( cfile, " />" ); } else if ( firstChild == lastChild && firstChild->ToText() ) { fprintf( cfile, ">" ); firstChild->Print( cfile, depth + 1 ); fprintf( cfile, "", value.c_str() ); } else { fprintf( cfile, ">" ); for ( node = firstChild; node; node=node->NextSibling() ) { if ( !node->ToText() ) { fprintf( cfile, "\n" ); } node->Print( cfile, depth+1 ); } fprintf( cfile, "\n" ); for( i=0; i", value.c_str() ); } } void TiXmlElement::CopyTo( TiXmlElement* target ) const { // superclass: TiXmlNode::CopyTo( target ); // Element class: // Clone the attributes, then clone the children. const TiXmlAttribute* attribute = 0; for( attribute = attributeSet.First(); attribute; attribute = attribute->Next() ) { target->SetAttribute( attribute->Name(), attribute->Value() ); } TiXmlNode* node = 0; for ( node = firstChild; node; node = node->NextSibling() ) { target->LinkEndChild( node->Clone() ); } } bool TiXmlElement::Accept( TiXmlVisitor* visitor ) const { if ( visitor->VisitEnter( *this, attributeSet.First() ) ) { for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) { if ( !node->Accept( visitor ) ) break; } } return visitor->VisitExit( *this ); } TiXmlNode* TiXmlElement::Clone() const { TiXmlElement* clone = new TiXmlElement( Value() ); if ( !clone ) return 0; CopyTo( clone ); return clone; } const char* TiXmlElement::GetText() const { const TiXmlNode* child = this->FirstChild(); if ( child ) { const TiXmlText* childText = child->ToText(); if ( childText ) { return childText->Value(); } } return 0; } TiXmlDocument::TiXmlDocument() : TiXmlNode( TiXmlNode::DOCUMENT ) { tabsize = 4; useMicrosoftBOM = false; ClearError(); } TiXmlDocument::TiXmlDocument( const char * documentName ) : TiXmlNode( TiXmlNode::DOCUMENT ) { tabsize = 4; useMicrosoftBOM = false; value = documentName; ClearError(); } TiXmlDocument::TiXmlDocument( const std::string& documentName ) : TiXmlNode( TiXmlNode::DOCUMENT ) { tabsize = 4; useMicrosoftBOM = false; value = documentName; ClearError(); } TiXmlDocument::TiXmlDocument( const TiXmlDocument& copy ) : TiXmlNode( TiXmlNode::DOCUMENT ) { copy.CopyTo( this ); } void TiXmlDocument::operator=( const TiXmlDocument& copy ) { Clear(); copy.CopyTo( this ); } bool TiXmlDocument::LoadFile( TiXmlEncoding encoding ) { // See STL_STRING_BUG below. //StringToBuffer buf( value ); return LoadFile( Value(), encoding ); } bool TiXmlDocument::SaveFile() const { // See STL_STRING_BUG below. // StringToBuffer buf( value ); // // if ( buf.buffer && SaveFile( buf.buffer ) ) // return true; // // return false; return SaveFile( Value() ); } bool TiXmlDocument::LoadFile( const char* _filename, TiXmlEncoding encoding ) { // There was a really terrifying little bug here. The code: // value = filename // in the STL case, cause the assignment method of the std::string to // be called. What is strange, is that the std::string had the same // address as it's c_str() method, and so bad things happen. Looks // like a bug in the Microsoft STL implementation. // Add an extra string to avoid the crash. TIXML_STRING filename( _filename ); value = filename; // reading in binary mode so that tinyxml can normalize the EOL FILE* file = fopen( value.c_str (), "rb" ); if ( file ) { bool result = LoadFile( file, encoding ); fclose( file ); return result; } else { SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); return false; } } bool TiXmlDocument::LoadFile( FILE* file, TiXmlEncoding encoding ) { if ( !file ) { SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); return false; } // Delete the existing data: Clear(); location.Clear(); // Get the file size, so we can pre-allocate the string. HUGE speed impact. long length = 0; fseek( file, 0, SEEK_END ); length = ftell( file ); fseek( file, 0, SEEK_SET ); // Strange case, but good to handle up front. if ( length == 0 ) { SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); return false; } // If we have a file, assume it is all one big XML file, and read it in. // The document parser may decide the document ends sooner than the entire file, however. TIXML_STRING data; data.reserve( length ); // Subtle bug here. TinyXml did use fgets. But from the XML spec: // 2.11 End-of-Line Handling // // // ...the XML processor MUST behave as if it normalized all line breaks in external // parsed entities (including the document entity) on input, before parsing, by translating // both the two-character sequence #xD #xA and any #xD that is not followed by #xA to // a single #xA character. // // // It is not clear fgets does that, and certainly isn't clear it works cross platform. // Generally, you expect fgets to translate from the convention of the OS to the c/unix // convention, and not work generally. /* while( fgets( buf, sizeof(buf), file ) ) { data += buf; } */ char* buf = new char[ length+1 ]; buf[0] = 0; if ( fread( buf, length, 1, file ) != 1 ) { delete [] buf; SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); return false; } const char* lastPos = buf; const char* p = buf; buf[length] = 0; while( *p ) { assert( p < (buf+length) ); if ( *p == 0xa ) { // Newline character. No special rules for this. Append all the characters // since the last string, and include the newline. data.append( lastPos, (p-lastPos+1) ); // append, include the newline ++p; // move past the newline lastPos = p; // and point to the new buffer (may be 0) assert( p <= (buf+length) ); } else if ( *p == 0xd ) { // Carriage return. Append what we have so far, then // handle moving forward in the buffer. if ( (p-lastPos) > 0 ) { data.append( lastPos, p-lastPos ); // do not add the CR } data += (char)0xa; // a proper newline if ( *(p+1) == 0xa ) { // Carriage return - new line sequence p += 2; lastPos = p; assert( p <= (buf+length) ); } else { // it was followed by something else...that is presumably characters again. ++p; lastPos = p; assert( p <= (buf+length) ); } } else { ++p; } } // Handle any left over characters. if ( p-lastPos ) { data.append( lastPos, p-lastPos ); } delete [] buf; buf = 0; Parse( data.c_str(), 0, encoding ); if ( Error() ) return false; else return true; } bool TiXmlDocument::SaveFile( const char * filename ) const { // The old c stuff lives on... FILE* fp = fopen( filename, "w" ); if ( fp ) { bool result = SaveFile( fp ); fclose( fp ); return result; } return false; } bool TiXmlDocument::SaveFile( FILE* fp ) const { if ( useMicrosoftBOM ) { const unsigned char TIXML_UTF_LEAD_0 = 0xefU; const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; fputc( TIXML_UTF_LEAD_0, fp ); fputc( TIXML_UTF_LEAD_1, fp ); fputc( TIXML_UTF_LEAD_2, fp ); } Print( fp, 0 ); return (ferror(fp) == 0); } void TiXmlDocument::CopyTo( TiXmlDocument* target ) const { TiXmlNode::CopyTo( target ); target->error = error; target->errorDesc = errorDesc.c_str (); TiXmlNode* node = 0; for ( node = firstChild; node; node = node->NextSibling() ) { target->LinkEndChild( node->Clone() ); } } TiXmlNode* TiXmlDocument::Clone() const { TiXmlDocument* clone = new TiXmlDocument(); if ( !clone ) return 0; CopyTo( clone ); return clone; } void TiXmlDocument::Print( FILE* cfile, int depth ) const { assert( cfile ); for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) { node->Print( cfile, depth ); fprintf( cfile, "\n" ); } } bool TiXmlDocument::Accept( TiXmlVisitor* visitor ) const { if ( visitor->VisitEnter( *this ) ) { for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) { if ( !node->Accept( visitor ) ) break; } } return visitor->VisitExit( *this ); } const TiXmlAttribute* TiXmlAttribute::Next() const { // We are using knowledge of the sentinel. The sentinel // have a value or name. if ( next->value.empty() && next->name.empty() ) return 0; return next; } /* TiXmlAttribute* TiXmlAttribute::Next() { // We are using knowledge of the sentinel. The sentinel // have a value or name. if ( next->value.empty() && next->name.empty() ) return 0; return next; } */ const TiXmlAttribute* TiXmlAttribute::Previous() const { // We are using knowledge of the sentinel. The sentinel // have a value or name. if ( prev->value.empty() && prev->name.empty() ) return 0; return prev; } /* TiXmlAttribute* TiXmlAttribute::Previous() { // We are using knowledge of the sentinel. The sentinel // have a value or name. if ( prev->value.empty() && prev->name.empty() ) return 0; return prev; } */ void TiXmlAttribute::Print( FILE* cfile, int /*depth*/, TIXML_STRING* str ) const { TIXML_STRING n, v; PutString( name, &n ); PutString( value, &v ); if (value.find ('\"') == TIXML_STRING::npos) { if ( cfile ) { fprintf (cfile, "%s=\"%s\"", n.c_str(), v.c_str() ); } if ( str ) { (*str) += n; (*str) += "=\""; (*str) += v; (*str) += "\""; } } else { if ( cfile ) { fprintf (cfile, "%s='%s'", n.c_str(), v.c_str() ); } if ( str ) { (*str) += n; (*str) += "='"; (*str) += v; (*str) += "'"; } } } int TiXmlAttribute::QueryIntValue( int* ival ) const { if ( sscanf( value.c_str(), "%d", ival ) == 1 ) return TIXML_SUCCESS; return TIXML_WRONG_TYPE; } int TiXmlAttribute::QueryDoubleValue( double* dval ) const { if ( sscanf( value.c_str(), "%lf", dval ) == 1 ) return TIXML_SUCCESS; return TIXML_WRONG_TYPE; } void TiXmlAttribute::SetIntValue( int _value ) { char buf [64]; #if defined(TIXML_SNPRINTF) TIXML_SNPRINTF(buf, sizeof(buf), "%d", _value); #else sprintf (buf, "%d", _value); #endif SetValue (buf); } void TiXmlAttribute::SetDoubleValue( double _value ) { char buf [256]; #if defined(TIXML_SNPRINTF) TIXML_SNPRINTF( buf, sizeof(buf), "%f", _value); #else sprintf (buf, "%f", _value); #endif SetValue (buf); } int TiXmlAttribute::IntValue() const { return atoi (value.c_str ()); } double TiXmlAttribute::DoubleValue() const { return atof (value.c_str ()); } TiXmlComment::TiXmlComment( const TiXmlComment& copy ) : TiXmlNode( TiXmlNode::COMMENT ) { copy.CopyTo( this ); } void TiXmlComment::operator=( const TiXmlComment& base ) { Clear(); base.CopyTo( this ); } void TiXmlComment::Print( FILE* cfile, int depth ) const { assert( cfile ); for ( int i=0; i", value.c_str() ); } void TiXmlComment::CopyTo( TiXmlComment* target ) const { TiXmlNode::CopyTo( target ); } bool TiXmlComment::Accept( TiXmlVisitor* visitor ) const { return visitor->Visit( *this ); } TiXmlNode* TiXmlComment::Clone() const { TiXmlComment* clone = new TiXmlComment(); if ( !clone ) return 0; CopyTo( clone ); return clone; } void TiXmlText::Print( FILE* cfile, int depth ) const { assert( cfile ); if ( cdata ) { int i; fprintf( cfile, "\n" ); for ( i=0; i\n", value.c_str() ); // unformatted output } else { TIXML_STRING buffer; PutString( value, &buffer ); fprintf( cfile, "%s", buffer.c_str() ); } } void TiXmlText::CopyTo( TiXmlText* target ) const { TiXmlNode::CopyTo( target ); target->cdata = cdata; } bool TiXmlText::Accept( TiXmlVisitor* visitor ) const { return visitor->Visit( *this ); } TiXmlNode* TiXmlText::Clone() const { TiXmlText* clone = 0; clone = new TiXmlText( "" ); if ( !clone ) return 0; CopyTo( clone ); return clone; } TiXmlDeclaration::TiXmlDeclaration( const char * _version, const char * _encoding, const char * _standalone ) : TiXmlNode( TiXmlNode::DECLARATION ) { version = _version; encoding = _encoding; standalone = _standalone; } TiXmlDeclaration::TiXmlDeclaration( const std::string& _version, const std::string& _encoding, const std::string& _standalone ) : TiXmlNode( TiXmlNode::DECLARATION ) { version = _version; encoding = _encoding; standalone = _standalone; } TiXmlDeclaration::TiXmlDeclaration( const TiXmlDeclaration& copy ) : TiXmlNode( TiXmlNode::DECLARATION ) { copy.CopyTo( this ); } void TiXmlDeclaration::operator=( const TiXmlDeclaration& copy ) { Clear(); copy.CopyTo( this ); } void TiXmlDeclaration::Print( FILE* cfile, int /*depth*/, TIXML_STRING* str ) const { if ( cfile ) fprintf( cfile, "" ); if ( str ) (*str) += "?>"; } void TiXmlDeclaration::CopyTo( TiXmlDeclaration* target ) const { TiXmlNode::CopyTo( target ); target->version = version; target->encoding = encoding; target->standalone = standalone; } bool TiXmlDeclaration::Accept( TiXmlVisitor* visitor ) const { return visitor->Visit( *this ); } TiXmlNode* TiXmlDeclaration::Clone() const { TiXmlDeclaration* clone = new TiXmlDeclaration(); if ( !clone ) return 0; CopyTo( clone ); return clone; } void TiXmlUnknown::Print( FILE* cfile, int depth ) const { for ( int i=0; i", value.c_str() ); } void TiXmlUnknown::CopyTo( TiXmlUnknown* target ) const { TiXmlNode::CopyTo( target ); } bool TiXmlUnknown::Accept( TiXmlVisitor* visitor ) const { return visitor->Visit( *this ); } TiXmlNode* TiXmlUnknown::Clone() const { TiXmlUnknown* clone = new TiXmlUnknown(); if ( !clone ) return 0; CopyTo( clone ); return clone; } TiXmlAttributeSet::TiXmlAttributeSet() { sentinel.next = &sentinel; sentinel.prev = &sentinel; } TiXmlAttributeSet::~TiXmlAttributeSet() { assert( sentinel.next == &sentinel ); assert( sentinel.prev == &sentinel ); } void TiXmlAttributeSet::Add( TiXmlAttribute* addMe ) { assert( !Find( TIXML_STRING( addMe->Name() ) ) ); // Shouldn't be multiply adding to the set. addMe->next = &sentinel; addMe->prev = sentinel.prev; sentinel.prev->next = addMe; sentinel.prev = addMe; } void TiXmlAttributeSet::Remove( TiXmlAttribute* removeMe ) { TiXmlAttribute* node; for( node = sentinel.next; node != &sentinel; node = node->next ) { if ( node == removeMe ) { node->prev->next = node->next; node->next->prev = node->prev; node->next = 0; node->prev = 0; return; } } assert( 0 ); // we tried to remove a non-linked attribute. } const TiXmlAttribute* TiXmlAttributeSet::Find( const std::string& name ) const { for( const TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) { if ( node->name == name ) return node; } return 0; } /* TiXmlAttribute* TiXmlAttributeSet::Find( const std::string& name ) { for( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) { if ( node->name == name ) return node; } return 0; } */ const TiXmlAttribute* TiXmlAttributeSet::Find( const char* name ) const { for( const TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) { if ( strcmp( node->name.c_str(), name ) == 0 ) return node; } return 0; } /* TiXmlAttribute* TiXmlAttributeSet::Find( const char* name ) { for( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) { if ( strcmp( node->name.c_str(), name ) == 0 ) return node; } return 0; } */ std::istream& operator>> (std::istream & in, TiXmlNode & base) { TIXML_STRING tag; tag.reserve( 8 * 1000 ); base.StreamIn( &in, &tag ); base.Parse( tag.c_str(), 0, TIXML_DEFAULT_ENCODING ); return in; } std::ostream& operator<< (std::ostream & out, const TiXmlNode & base) { TiXmlPrinter printer; printer.SetStreamPrinting(); base.Accept( &printer ); out << printer.Str(); return out; } std::string& operator<< (std::string& out, const TiXmlNode& base ) { TiXmlPrinter printer; printer.SetStreamPrinting(); base.Accept( &printer ); out.append( printer.Str() ); return out; } TiXmlHandle TiXmlHandle::FirstChild() const { if ( node ) { TiXmlNode* child = node->FirstChild(); if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::FirstChild( const char * value ) const { if ( node ) { TiXmlNode* child = node->FirstChild( value ); if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::FirstChildElement() const { if ( node ) { TiXmlElement* child = node->FirstChildElement(); if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::FirstChildElement( const char * value ) const { if ( node ) { TiXmlElement* child = node->FirstChildElement( value ); if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::Child( int count ) const { if ( node ) { int i; TiXmlNode* child = node->FirstChild(); for ( i=0; child && iNextSibling(), ++i ) { // nothing } if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::Child( const char* value, int count ) const { if ( node ) { int i; TiXmlNode* child = node->FirstChild( value ); for ( i=0; child && iNextSibling( value ), ++i ) { // nothing } if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::ChildElement( int count ) const { if ( node ) { int i; TiXmlElement* child = node->FirstChildElement(); for ( i=0; child && iNextSiblingElement(), ++i ) { // nothing } if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::ChildElement( const char* value, int count ) const { if ( node ) { int i; TiXmlElement* child = node->FirstChildElement( value ); for ( i=0; child && iNextSiblingElement( value ), ++i ) { // nothing } if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } bool TiXmlPrinter::VisitEnter( const TiXmlDocument& ) { return true; } bool TiXmlPrinter::VisitExit( const TiXmlDocument& ) { return true; } bool TiXmlPrinter::VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute ) { DoIndent(); buffer += "<"; buffer += element.Value(); for( const TiXmlAttribute* attrib = firstAttribute; attrib; attrib = attrib->Next() ) { buffer += " "; attrib->Print( 0, 0, &buffer ); } if ( !element.FirstChild() ) { buffer += " />"; DoLineBreak(); } else { buffer += ">"; if ( element.FirstChild()->ToText() && element.LastChild() == element.FirstChild() && element.FirstChild()->ToText()->CDATA() == false ) { simpleTextPrint = true; // no DoLineBreak()! } else { DoLineBreak(); } } ++depth; return true; } bool TiXmlPrinter::VisitExit( const TiXmlElement& element ) { --depth; if ( !element.FirstChild() ) { // nothing. } else { if ( simpleTextPrint ) { simpleTextPrint = false; } else { DoIndent(); } buffer += ""; DoLineBreak(); } return true; } bool TiXmlPrinter::Visit( const TiXmlText& text ) { if ( text.CDATA() ) { DoIndent(); buffer += ""; DoLineBreak(); } else if ( simpleTextPrint ) { buffer += text.Value(); } else { DoIndent(); buffer += text.Value(); DoLineBreak(); } return true; } bool TiXmlPrinter::Visit( const TiXmlDeclaration& declaration ) { DoIndent(); declaration.Print( 0, 0, &buffer ); DoLineBreak(); return true; } bool TiXmlPrinter::Visit( const TiXmlComment& comment ) { DoIndent(); buffer += ""; DoLineBreak(); return true; } bool TiXmlPrinter::Visit( const TiXmlUnknown& unknown ) { DoIndent(); buffer += "<"; buffer += unknown.Value(); buffer += ">"; DoLineBreak(); return true; } rivet-1.8.3/src/Tools/TinyXML/tinyxmlerror.cpp0000644000175000017500000000341612116077757017546 0ustar sunsun/* www.sourceforge.net/projects/tinyxml Original code (2.0 and earlier )copyright (c) 2000-2006 Lee Thomason (www.grinninglizard.com) This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #include "tinyxml.h" // The goal of the seperate error file is to make the first // step towards localization. tinyxml (currently) only supports // english error messages, but the could now be translated. // // It also cleans up the code a bit. // const char* TiXmlBase::errorString[ TIXML_ERROR_STRING_COUNT ] = { "No error", "Error", "Failed to open file", "Memory allocation failed.", "Error parsing Element.", "Failed to read Element name", "Error reading Element value.", "Error reading Attributes.", "Error: empty tag.", "Error reading end tag.", "Error parsing Unknown.", "Error parsing Comment.", "Error parsing Declaration.", "Error document empty.", "Error null (0) or unexpected EOF found in input stream.", "Error parsing CDATA.", "Error when TiXmlDocument added to document, because TiXmlDocument can only be at the root.", }; rivet-1.8.3/src/Tools/Makefile.in0000644000175000017500000012433312116616065015016 0ustar sunsun# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/Tools DIST_COMMON = $(dist_noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) @WITH_YAML_CPP_FALSE@libRivetTools_la_DEPENDENCIES = $(top_builddir)/src/Tools/yaml-cpp/libyaml-cpp.la am_libRivetTools_la_OBJECTS = libRivetTools_la-Logging.lo \ libRivetTools_la-RivetAIDA.lo libRivetTools_la-RivetPaths.lo \ libRivetTools_la-binreloc.lo libRivetTools_la-Utils.lo \ libRivetTools_la-ParticleIdUtils.lo \ libRivetTools_la-tinyxml.lo libRivetTools_la-tinyxmlerror.lo \ libRivetTools_la-tinyxmlparser.lo \ libRivetTools_la-mt2_bisect.lo libRivetTools_la-RivetMT2.lo \ libRivetTools_la-BinnedHistogram.lo libRivetTools_la_OBJECTS = $(am_libRivetTools_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent libRivetTools_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(libRivetTools_la_LDFLAGS) \ $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/Rivet/Config depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libRivetTools_la_SOURCES) DIST_SOURCES = $(libRivetTools_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(dist_noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = yaml-cpp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @WITHOUT_YAML_CPP_TRUE@SUBDIRS = yaml-cpp noinst_LTLIBRARIES = libRivetTools.la libRivetTools_la_SOURCES = \ Logging.cc \ RivetAIDA.cc \ RivetPaths.cc \ binreloc.c \ Utils.cc \ ParticleIdUtils.cc \ TinyXML/tinyxml.cpp \ TinyXML/tinyxmlerror.cpp \ TinyXML/tinyxmlparser.cpp \ mt2_bisect.cc \ RivetMT2.cc \ BinnedHistogram.cc dist_noinst_HEADERS = binreloc.h mt2_bisect.hh libRivetTools_la_CPPFLAGS = \ $(AM_CPPFLAGS) \ -I$(top_srcdir)/include/TinyXML \ -DENABLE_BINRELOC \ -DDEFAULTDATADIR=\"$(datadir)\" \ -DDEFAULTLIBDIR=\"$(libdir)\" @WITH_YAML_CPP_TRUE@libRivetTools_la_LDFLAGS = $(AM_LDFLAGS) -L$(YAML_CPPLIBPATH) @WITH_YAML_CPP_FALSE@libRivetTools_la_LIBADD = $(top_builddir)/src/Tools/yaml-cpp/libyaml-cpp.la @WITH_YAML_CPP_TRUE@libRivetTools_la_LIBADD = -lyaml-cpp all: all-recursive .SUFFIXES: .SUFFIXES: .c .cc .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Tools/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Tools/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libRivetTools.la: $(libRivetTools_la_OBJECTS) $(libRivetTools_la_DEPENDENCIES) $(EXTRA_libRivetTools_la_DEPENDENCIES) $(AM_V_CXXLD)$(libRivetTools_la_LINK) $(libRivetTools_la_OBJECTS) $(libRivetTools_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetTools_la-BinnedHistogram.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetTools_la-Logging.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetTools_la-ParticleIdUtils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetTools_la-RivetAIDA.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetTools_la-RivetMT2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetTools_la-RivetPaths.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetTools_la-Utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetTools_la-binreloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetTools_la-mt2_bisect.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetTools_la-tinyxml.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetTools_la-tinyxmlerror.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetTools_la-tinyxmlparser.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< libRivetTools_la-binreloc.lo: binreloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libRivetTools_la-binreloc.lo -MD -MP -MF $(DEPDIR)/libRivetTools_la-binreloc.Tpo -c -o libRivetTools_la-binreloc.lo `test -f 'binreloc.c' || echo '$(srcdir)/'`binreloc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetTools_la-binreloc.Tpo $(DEPDIR)/libRivetTools_la-binreloc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='binreloc.c' object='libRivetTools_la-binreloc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libRivetTools_la-binreloc.lo `test -f 'binreloc.c' || echo '$(srcdir)/'`binreloc.c .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< libRivetTools_la-Logging.lo: Logging.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetTools_la-Logging.lo -MD -MP -MF $(DEPDIR)/libRivetTools_la-Logging.Tpo -c -o libRivetTools_la-Logging.lo `test -f 'Logging.cc' || echo '$(srcdir)/'`Logging.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetTools_la-Logging.Tpo $(DEPDIR)/libRivetTools_la-Logging.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Logging.cc' object='libRivetTools_la-Logging.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetTools_la-Logging.lo `test -f 'Logging.cc' || echo '$(srcdir)/'`Logging.cc libRivetTools_la-RivetAIDA.lo: RivetAIDA.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetTools_la-RivetAIDA.lo -MD -MP -MF $(DEPDIR)/libRivetTools_la-RivetAIDA.Tpo -c -o libRivetTools_la-RivetAIDA.lo `test -f 'RivetAIDA.cc' || echo '$(srcdir)/'`RivetAIDA.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetTools_la-RivetAIDA.Tpo $(DEPDIR)/libRivetTools_la-RivetAIDA.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RivetAIDA.cc' object='libRivetTools_la-RivetAIDA.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetTools_la-RivetAIDA.lo `test -f 'RivetAIDA.cc' || echo '$(srcdir)/'`RivetAIDA.cc libRivetTools_la-RivetPaths.lo: RivetPaths.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetTools_la-RivetPaths.lo -MD -MP -MF $(DEPDIR)/libRivetTools_la-RivetPaths.Tpo -c -o libRivetTools_la-RivetPaths.lo `test -f 'RivetPaths.cc' || echo '$(srcdir)/'`RivetPaths.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetTools_la-RivetPaths.Tpo $(DEPDIR)/libRivetTools_la-RivetPaths.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RivetPaths.cc' object='libRivetTools_la-RivetPaths.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetTools_la-RivetPaths.lo `test -f 'RivetPaths.cc' || echo '$(srcdir)/'`RivetPaths.cc libRivetTools_la-Utils.lo: Utils.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetTools_la-Utils.lo -MD -MP -MF $(DEPDIR)/libRivetTools_la-Utils.Tpo -c -o libRivetTools_la-Utils.lo `test -f 'Utils.cc' || echo '$(srcdir)/'`Utils.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetTools_la-Utils.Tpo $(DEPDIR)/libRivetTools_la-Utils.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Utils.cc' object='libRivetTools_la-Utils.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetTools_la-Utils.lo `test -f 'Utils.cc' || echo '$(srcdir)/'`Utils.cc libRivetTools_la-ParticleIdUtils.lo: ParticleIdUtils.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetTools_la-ParticleIdUtils.lo -MD -MP -MF $(DEPDIR)/libRivetTools_la-ParticleIdUtils.Tpo -c -o libRivetTools_la-ParticleIdUtils.lo `test -f 'ParticleIdUtils.cc' || echo '$(srcdir)/'`ParticleIdUtils.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetTools_la-ParticleIdUtils.Tpo $(DEPDIR)/libRivetTools_la-ParticleIdUtils.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ParticleIdUtils.cc' object='libRivetTools_la-ParticleIdUtils.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetTools_la-ParticleIdUtils.lo `test -f 'ParticleIdUtils.cc' || echo '$(srcdir)/'`ParticleIdUtils.cc libRivetTools_la-tinyxml.lo: TinyXML/tinyxml.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetTools_la-tinyxml.lo -MD -MP -MF $(DEPDIR)/libRivetTools_la-tinyxml.Tpo -c -o libRivetTools_la-tinyxml.lo `test -f 'TinyXML/tinyxml.cpp' || echo '$(srcdir)/'`TinyXML/tinyxml.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetTools_la-tinyxml.Tpo $(DEPDIR)/libRivetTools_la-tinyxml.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='TinyXML/tinyxml.cpp' object='libRivetTools_la-tinyxml.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetTools_la-tinyxml.lo `test -f 'TinyXML/tinyxml.cpp' || echo '$(srcdir)/'`TinyXML/tinyxml.cpp libRivetTools_la-tinyxmlerror.lo: TinyXML/tinyxmlerror.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetTools_la-tinyxmlerror.lo -MD -MP -MF $(DEPDIR)/libRivetTools_la-tinyxmlerror.Tpo -c -o libRivetTools_la-tinyxmlerror.lo `test -f 'TinyXML/tinyxmlerror.cpp' || echo '$(srcdir)/'`TinyXML/tinyxmlerror.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetTools_la-tinyxmlerror.Tpo $(DEPDIR)/libRivetTools_la-tinyxmlerror.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='TinyXML/tinyxmlerror.cpp' object='libRivetTools_la-tinyxmlerror.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetTools_la-tinyxmlerror.lo `test -f 'TinyXML/tinyxmlerror.cpp' || echo '$(srcdir)/'`TinyXML/tinyxmlerror.cpp libRivetTools_la-tinyxmlparser.lo: TinyXML/tinyxmlparser.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetTools_la-tinyxmlparser.lo -MD -MP -MF $(DEPDIR)/libRivetTools_la-tinyxmlparser.Tpo -c -o libRivetTools_la-tinyxmlparser.lo `test -f 'TinyXML/tinyxmlparser.cpp' || echo '$(srcdir)/'`TinyXML/tinyxmlparser.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetTools_la-tinyxmlparser.Tpo $(DEPDIR)/libRivetTools_la-tinyxmlparser.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='TinyXML/tinyxmlparser.cpp' object='libRivetTools_la-tinyxmlparser.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetTools_la-tinyxmlparser.lo `test -f 'TinyXML/tinyxmlparser.cpp' || echo '$(srcdir)/'`TinyXML/tinyxmlparser.cpp libRivetTools_la-mt2_bisect.lo: mt2_bisect.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetTools_la-mt2_bisect.lo -MD -MP -MF $(DEPDIR)/libRivetTools_la-mt2_bisect.Tpo -c -o libRivetTools_la-mt2_bisect.lo `test -f 'mt2_bisect.cc' || echo '$(srcdir)/'`mt2_bisect.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetTools_la-mt2_bisect.Tpo $(DEPDIR)/libRivetTools_la-mt2_bisect.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='mt2_bisect.cc' object='libRivetTools_la-mt2_bisect.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetTools_la-mt2_bisect.lo `test -f 'mt2_bisect.cc' || echo '$(srcdir)/'`mt2_bisect.cc libRivetTools_la-RivetMT2.lo: RivetMT2.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetTools_la-RivetMT2.lo -MD -MP -MF $(DEPDIR)/libRivetTools_la-RivetMT2.Tpo -c -o libRivetTools_la-RivetMT2.lo `test -f 'RivetMT2.cc' || echo '$(srcdir)/'`RivetMT2.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetTools_la-RivetMT2.Tpo $(DEPDIR)/libRivetTools_la-RivetMT2.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RivetMT2.cc' object='libRivetTools_la-RivetMT2.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetTools_la-RivetMT2.lo `test -f 'RivetMT2.cc' || echo '$(srcdir)/'`RivetMT2.cc libRivetTools_la-BinnedHistogram.lo: BinnedHistogram.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetTools_la-BinnedHistogram.lo -MD -MP -MF $(DEPDIR)/libRivetTools_la-BinnedHistogram.Tpo -c -o libRivetTools_la-BinnedHistogram.lo `test -f 'BinnedHistogram.cc' || echo '$(srcdir)/'`BinnedHistogram.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetTools_la-BinnedHistogram.Tpo $(DEPDIR)/libRivetTools_la-BinnedHistogram.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BinnedHistogram.cc' object='libRivetTools_la-BinnedHistogram.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetTools_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetTools_la-BinnedHistogram.lo `test -f 'BinnedHistogram.cc' || echo '$(srcdir)/'`BinnedHistogram.cc .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: rivet-1.8.3/src/Tools/mt2_bisect.cc0000644000175000017500000004403612116077757015325 0ustar sunsun/***********************************************************************/ /* */ /* Finding mt2 by Bisection */ /* */ /* Authors: Hsin-Chia Cheng, Zhenyu Han */ /* Dec 11, 2008, v1.01a */ /* */ /* see arXiv:0810.5178 */ /* */ /* Wrapped for Rivet by D. Grellscheid */ /* Apr 13, 2011 */ /* */ /***********************************************************************/ /******************************************************************************* Usage: 1. Define an object of type "mt2": mt2_bisect::mt2 mt2_event; 2. Set momenta and the mass of the invisible particle, mn: mt2_event.set_momenta( pa, pb, pmiss ); mt2_event.set_mass( mn ); where array pa[0..2], pb[0..2], pmiss[0..2] contains (mass,px,py) for the visible particles and the missing momentum. pmiss[0] is not used. All quantities are given in double. 3. Use mt2::get_mt2() to obtain the value of mt2: double mt2_value = mt2_event.get_mt2(); *******************************************************************************/ #include "mt2_bisect.hh" #include "Rivet/Tools/Logging.hh" #include #include namespace Rivet { namespace mt2_bisect { using namespace std; mt2::mt2() { solved = false; momenta_set = false; mt2_b = 0.; scale = 1.; } double mt2::get_mt2() { assert(momenta_set); if (!solved) mt2_bisect(); return mt2_b*scale; } void mt2::set_momenta(double* pa0, double* pb0, double* pmiss0) { solved = false; //reset solved tag when momenta are changed. momenta_set = true; ma = fabs(pa0[0]); // mass cannot be negative if (ma < ZERO_MASS) ma = ZERO_MASS; pax = pa0[1]; pay = pa0[2]; masq = ma*ma; Easq = masq+pax*pax+pay*pay; Ea = sqrt(Easq); mb = fabs(pb0[0]); if (mb < ZERO_MASS) mb = ZERO_MASS; pbx = pb0[1]; pby = pb0[2]; mbsq = mb*mb; Ebsq = mbsq+pbx*pbx+pby*pby; Eb = sqrt(Ebsq); pmissx = pmiss0[1]; pmissy = pmiss0[2]; pmissxsq = pmissx*pmissx; pmissysq = pmissy*pmissy; // set ma>= mb if(masq < mbsq) { double temp; temp = pax; pax = pbx; pbx = temp; temp = pay; pay = pby; pby = temp; temp = Ea; Ea = Eb; Eb = temp; temp = Easq; Easq = Ebsq; Ebsq = temp; temp = masq; masq = mbsq; mbsq = temp; temp = ma; ma = mb; mb = temp; } //normalize max{Ea, Eb} to 100 if (Ea > Eb) scale = Ea/100.; else scale = Eb/100.; if (sqrt(pmissxsq+pmissysq)/100 > scale) scale = sqrt(pmissxsq+pmissysq)/100; //scale = 1; double scalesq = scale * scale; ma = ma/scale; mb = mb/scale; masq = masq/scalesq; mbsq = mbsq/scalesq; pax = pax/scale; pay = pay/scale; pbx = pbx/scale; pby = pby/scale; Ea = Ea/scale; Eb = Eb/scale; Easq = Easq/scalesq; Ebsq = Ebsq/scalesq; pmissx = pmissx/scale; pmissy = pmissy/scale; pmissxsq = pmissxsq/scalesq; pmissysq = pmissysq/scalesq; mn = mn_unscale/scale; mnsq = mn*mn; if (ABSOLUTE_PRECISION > 100.*RELATIVE_PRECISION) precision = ABSOLUTE_PRECISION; else precision = 100.*RELATIVE_PRECISION; } void mt2::set_mn(double mn0) { solved = false; //reset solved tag when mn is changed. mn_unscale = fabs(mn0); //mass cannot be negative mn = mn_unscale/scale; mnsq = mn*mn; } // void mt2::print() // { // cout << " pax = " << pax*scale << "; pay = " << pay*scale << "; ma = " << ma*scale <<";"<< endl; // cout << " pbx = " << pbx*scale << "; pby = " << pby*scale << "; mb = " << mb*scale <<";"<< endl; // cout << " pmissx = " << pmissx*scale << "; pmissy = " << pmissy*scale <<";"<< endl; // cout << " mn = " << mn_unscale<<";" << endl; // } //special case, the visible particle is massless void mt2::mt2_massless() { //rotate so that pay = 0 double theta,s,c; theta = atan(pay/pax); s = sin(theta); c = cos(theta); double pxtemp,pytemp; Easq = pax*pax+pay*pay; Ebsq = pbx*pbx+pby*pby; Ea = sqrt(Easq); Eb = sqrt(Ebsq); pxtemp = pax*c+pay*s; pax = pxtemp; pay = 0; pxtemp = pbx*c+pby*s; pytemp = -s*pbx+c*pby; pbx = pxtemp; pby = pytemp; pxtemp = pmissx*c+pmissy*s; pytemp = -s*pmissx+c*pmissy; pmissx = pxtemp; pmissy = pytemp; a2 = 1-pbx*pbx/(Ebsq); b2 = -pbx*pby/(Ebsq); c2 = 1-pby*pby/(Ebsq); d21 = (Easq*pbx)/Ebsq; d20 = - pmissx + (pbx*(pbx*pmissx + pby*pmissy))/Ebsq; e21 = (Easq*pby)/Ebsq; e20 = - pmissy + (pby*(pbx*pmissx + pby*pmissy))/Ebsq; f22 = -(Easq*Easq/Ebsq); f21 = -2*Easq*(pbx*pmissx + pby*pmissy)/Ebsq; f20 = mnsq + pmissxsq + pmissysq - (pbx*pmissx + pby*pmissy)*(pbx*pmissx + pby*pmissy)/Ebsq; double Deltasq0 = 0; double Deltasq_low, Deltasq_high; int nsols_high, nsols_low; Deltasq_low = Deltasq0 + precision; nsols_low = nsols_massless(Deltasq_low); if(nsols_low > 1) { mt2_b = (double) sqrt(Deltasq0+mnsq); return; } /* if( nsols_massless(Deltasq_high) > 0 ) { mt2_b = (double) sqrt(mnsq+Deltasq0); return; }*/ //look for when both parablos contain origin double Deltasq_high1, Deltasq_high2; Deltasq_high1 = 2*Eb*sqrt(pmissx*pmissx+pmissy*pmissy+mnsq)-2*pbx*pmissx-2*pby*pmissy; Deltasq_high2 = 2*Ea*mn; if(Deltasq_high1 < Deltasq_high2) Deltasq_high = Deltasq_high2; else Deltasq_high = Deltasq_high1; nsols_high=nsols_massless(Deltasq_high); int foundhigh; if (nsols_high == nsols_low) { foundhigh=0; double minmass, maxmass; minmass = mn ; maxmass = sqrt(mnsq + Deltasq_high); for(double mass = minmass + SCANSTEP; mass < maxmass; mass += SCANSTEP) { Deltasq_high = mass*mass - mnsq; nsols_high = nsols_massless(Deltasq_high); if(nsols_high>0) { foundhigh=1; Deltasq_low = (mass-SCANSTEP)*(mass-SCANSTEP) - mnsq; break; } } if(foundhigh==0) { Log::getLog("Rivet.Tools.mt2") << Log::WARN << "Deltasq_high not found at event " << nevt << '\n'; mt2_b = (double)sqrt(Deltasq_low+mnsq); return; } } if(nsols_high == nsols_low) { Log::getLog("Rivet.Tools.mt2") << Log::ERROR << "error: nsols_low=nsols_high=" << nsols_high << '\n' << "Deltasq_high=" << Deltasq_high << '\n' << "Deltasq_low= "<< Deltasq_low << '\n'; mt2_b = sqrt(mnsq + Deltasq_low); return; } double minmass, maxmass; minmass = sqrt(Deltasq_low+mnsq); maxmass = sqrt(Deltasq_high+mnsq); while(maxmass - minmass > precision) { double Delta_mid, midmass, nsols_mid; midmass = (minmass+maxmass)/2.; Delta_mid = midmass * midmass - mnsq; nsols_mid = nsols_massless(Delta_mid); if(nsols_mid != nsols_low) maxmass = midmass; if(nsols_mid == nsols_low) minmass = midmass; } mt2_b = minmass; return; } int mt2::nsols_massless(double Dsq) { double delta; delta = Dsq/(2*Easq); d1 = d11*delta; e1 = e11*delta; f1 = f12*delta*delta+f10; d2 = d21*delta+d20; e2 = e21*delta+e20; f2 = f22*delta*delta+f21*delta+f20; double a,b; if (pax > 0) a = Ea/Dsq; else a = -Ea/Dsq; if (pax > 0) b = -Dsq/(4*Ea)+mnsq*Ea/Dsq; else b = Dsq/(4*Ea)-mnsq*Ea/Dsq; double A4,A3,A2,A1,A0; A4 = a*a*a2; A3 = 2*a*b2/Ea; A2 = (2*a*a2*b+c2+2*a*d2)/(Easq); A1 = (2*b*b2+2*e2)/(Easq*Ea); A0 = (a2*b*b+2*b*d2+f2)/(Easq*Easq); long double B3, B2, B1, B0; B3 = 4*A4; B2 = 3*A3; B1 = 2*A2; B0 = A1; long double C2, C1, C0; C2 = -(A2/2 - 3*A3*A3/(16*A4)); C1 = -(3*A1/4. -A2*A3/(8*A4)); C0 = -A0 + A1*A3/(16*A4); long double D1, D0; D1 = -B1 - (B3*C1*C1/C2 - B3*C0 -B2*C1)/C2; D0 = -B0 - B3 *C0 *C1/(C2*C2)+ B2*C0/C2; long double E0; E0 = -C0 - C2*D0*D0/(D1*D1) + C1*D0/D1; long double t1,t2,t3,t4,t5; //find the coefficients for the leading term in the Sturm sequence t1 = A4; t2 = A4; t3 = C2; t4 = D1; t5 = E0; int nsol; nsol = signchange_n(t1,t2,t3,t4,t5)-signchange_p(t1,t2,t3,t4,t5); if( nsol < 0 ) nsol=0; return nsol; } void mt2::mt2_bisect() { solved = true; //if masses are very small, use code for massless case. if(masq < MIN_MASS && mbsq < MIN_MASS) { mt2_massless(); return; } double Deltasq0; Deltasq0 = ma*(ma + 2*mn); //The minimum mass square to have two ellipses // find the coefficients for the two quadratic equations when Deltasq=Deltasq0. a1 = 1-pax*pax/(Easq); b1 = -pax*pay/(Easq); c1 = 1-pay*pay/(Easq); d1 = -pax*(Deltasq0-masq)/(2*Easq); e1 = -pay*(Deltasq0-masq)/(2*Easq); a2 = 1-pbx*pbx/(Ebsq); b2 = -pbx*pby/(Ebsq); c2 = 1-pby*pby/(Ebsq); d2 = -pmissx+pbx*(Deltasq0-mbsq)/(2*Ebsq)+pbx*(pbx*pmissx+pby*pmissy)/(Ebsq); e2 = -pmissy+pby*(Deltasq0-mbsq)/(2*Ebsq)+pby*(pbx*pmissx+pby*pmissy)/(Ebsq); f2 = pmissx*pmissx+pmissy*pmissy-((Deltasq0-mbsq)/(2*Eb)+ (pbx*pmissx+pby*pmissy)/Eb)*((Deltasq0-mbsq)/(2*Eb)+ (pbx*pmissx+pby*pmissy)/Eb)+mnsq; // find the center of the smaller ellipse double x0,y0; x0 = (c1*d1-b1*e1)/(b1*b1-a1*c1); y0 = (a1*e1-b1*d1)/(b1*b1-a1*c1); // Does the larger ellipse contain the smaller one? double dis=a2*x0*x0+2*b2*x0*y0+c2*y0*y0+2*d2*x0+2*e2*y0+f2; if(dis<=0.01) { mt2_b = (double) sqrt(mnsq+Deltasq0); return; } /* find the coefficients for the two quadratic equations */ /* coefficients for quadratic terms do not change */ /* coefficients for linear and constant terms are polynomials of */ /* delta=(Deltasq-m7sq)/(2 E7sq) */ d11 = -pax; e11 = -pay; f10 = mnsq; f12 = -Easq; d21 = (Easq*pbx)/Ebsq; d20 = ((masq - mbsq)*pbx)/(2.*Ebsq) - pmissx + (pbx*(pbx*pmissx + pby*pmissy))/Ebsq; e21 = (Easq*pby)/Ebsq; e20 = ((masq - mbsq)*pby)/(2.*Ebsq) - pmissy + (pby*(pbx*pmissx + pby*pmissy))/Ebsq; f22 = -Easq*Easq/Ebsq; f21 = (-2*Easq*((masq - mbsq)/(2.*Eb) + (pbx*pmissx + pby*pmissy)/Eb))/Eb; f20 = mnsq + pmissx*pmissx + pmissy*pmissy - ((masq - mbsq)/(2.*Eb) + (pbx*pmissx + pby*pmissy)/Eb) *((masq - mbsq)/(2.*Eb) + (pbx*pmissx + pby*pmissy)/Eb); //Estimate upper bound of mT2 //when Deltasq > Deltasq_high1, the larger encloses the center of the smaller double p2x0,p2y0; double Deltasq_high1; p2x0 = pmissx-x0; p2y0 = pmissy-y0; Deltasq_high1 = 2*Eb*sqrt(p2x0*p2x0+p2y0*p2y0+mnsq)-2*pbx*p2x0-2*pby*p2y0+mbsq; //Another estimate, if both ellipses enclose the origin, Deltasq > mT2 double Deltasq_high2, Deltasq_high21, Deltasq_high22; Deltasq_high21 = 2*Eb*sqrt(pmissx*pmissx+pmissy*pmissy+mnsq)-2*pbx*pmissx-2*pby*pmissy+mbsq; Deltasq_high22 = 2*Ea*mn+masq; if ( Deltasq_high21 < Deltasq_high22 ) Deltasq_high2 = Deltasq_high22; else Deltasq_high2 = Deltasq_high21; //pick the smaller upper bound double Deltasq_high; if(Deltasq_high1 < Deltasq_high2) Deltasq_high = Deltasq_high1; else Deltasq_high = Deltasq_high2; double Deltasq_low; //lower bound Deltasq_low = Deltasq0; //number of solutions at Deltasq_low should not be larger than zero if( nsols(Deltasq_low) > 0 ) { //cout << "nsolutions(Deltasq_low) > 0"< precision) { double Deltasq_mid,nsols_mid; //bisect Deltasq_mid = (Deltasq_high+Deltasq_low)/2.; nsols_mid = nsols(Deltasq_mid); // if nsols_mid = 4, rescan for Deltasq_high if ( nsols_mid == 4 ) { Deltasq_high = Deltasq_mid; //scan_high(Deltasq_high); find_high(Deltasq_high); continue; } if(nsols_mid != nsols_low) Deltasq_high = Deltasq_mid; if(nsols_mid == nsols_low) Deltasq_low = Deltasq_mid; } mt2_b = (double) sqrt( mnsq + Deltasq_high); return; } int mt2::find_high(double & Deltasq_high) { double x0,y0; x0 = (c1*d1-b1*e1)/(b1*b1-a1*c1); y0 = (a1*e1-b1*d1)/(b1*b1-a1*c1); double Deltasq_low = (mn + ma)*(mn + ma) - mnsq; do { double Deltasq_mid = (Deltasq_high + Deltasq_low)/2.; int nsols_mid = nsols(Deltasq_mid); if ( nsols_mid == 2 ) { Deltasq_high = Deltasq_mid; return 1; } else if (nsols_mid == 4) { Deltasq_high = Deltasq_mid; continue; } else if (nsols_mid ==0) { d1 = -pax*(Deltasq_mid-masq)/(2*Easq); e1 = -pay*(Deltasq_mid-masq)/(2*Easq); d2 = -pmissx + pbx*(Deltasq_mid - mbsq)/(2*Ebsq) + pbx*(pbx*pmissx+pby*pmissy)/(Ebsq); e2 = -pmissy + pby*(Deltasq_mid - mbsq)/(2*Ebsq) + pby*(pbx*pmissx+pby*pmissy)/(Ebsq); f2 = pmissx*pmissx+pmissy*pmissy-((Deltasq_mid-mbsq)/(2*Eb)+ (pbx*pmissx+pby*pmissy)/Eb)*((Deltasq_mid-mbsq)/(2*Eb)+ (pbx*pmissx+pby*pmissy)/Eb)+mnsq; // Does the larger ellipse contain the smaller one? double dis = a2*x0*x0 + 2*b2*x0*y0 + c2*y0*y0 + 2*d2*x0 + 2*e2*y0 + f2; if (dis < 0) Deltasq_high = Deltasq_mid; else Deltasq_low = Deltasq_mid; } } while ( Deltasq_high - Deltasq_low > 0.001); return 0; } int mt2::scan_high(double & Deltasq_high) { int foundhigh = 0 ; int nsols_high; double tempmass, maxmass; tempmass = mn + ma; maxmass = sqrt(mnsq + Deltasq_high); // if (nevt == 32334) { // cout << "Deltasq_high = " << Deltasq_high << endl; // } for(double mass = tempmass + SCANSTEP; mass < maxmass; mass += SCANSTEP) { Deltasq_high = mass*mass - mnsq; nsols_high = nsols(Deltasq_high); if( nsols_high > 0) { foundhigh = 1; break; } } return foundhigh; } int mt2::nsols( double Dsq) { double delta = (Dsq-masq)/(2*Easq); //calculate coefficients for the two quadratic equations d1 = d11*delta; e1 = e11*delta; f1 = f12*delta*delta+f10; d2 = d21*delta+d20; e2 = e21*delta+e20; f2 = f22*delta*delta+f21*delta+f20; //obtain the coefficients for the 4th order equation //devided by Ea^n to make the variable dimensionless long double A4, A3, A2, A1, A0; A4 = -4*a2*b1*b2*c1 + 4*a1*b2*b2*c1 +a2*a2*c1*c1 + 4*a2*b1*b1*c2 - 4*a1*b1*b2*c2 - 2*a1*a2*c1*c2 + a1*a1*c2*c2; A3 = (-4*a2*b2*c1*d1 + 8*a2*b1*c2*d1 - 4*a1*b2*c2*d1 - 4*a2*b1*c1*d2 + 8*a1*b2*c1*d2 - 4*a1*b1*c2*d2 - 8*a2*b1*b2*e1 + 8*a1*b2*b2*e1 + 4*a2*a2*c1*e1 - 4*a1*a2*c2*e1 + 8*a2*b1*b1*e2 - 8*a1*b1*b2*e2 - 4*a1*a2*c1*e2 + 4*a1*a1*c2*e2)/Ea; A2 = (4*a2*c2*d1*d1 - 4*a2*c1*d1*d2 - 4*a1*c2*d1*d2 + 4*a1*c1*d2*d2 - 8*a2*b2*d1*e1 - 8*a2*b1*d2*e1 + 16*a1*b2*d2*e1 + 4*a2*a2*e1*e1 + 16*a2*b1*d1*e2 - 8*a1*b2*d1*e2 - 8*a1*b1*d2*e2 - 8*a1*a2*e1*e2 + 4*a1*a1*e2*e2 - 4*a2*b1*b2*f1 + 4*a1*b2*b2*f1 + 2*a2*a2*c1*f1 - 2*a1*a2*c2*f1 + 4*a2*b1*b1*f2 - 4*a1*b1*b2*f2 - 2*a1*a2*c1*f2 + 2*a1*a1*c2*f2)/Easq; A1 = (-8*a2*d1*d2*e1 + 8*a1*d2*d2*e1 + 8*a2*d1*d1*e2 - 8*a1*d1*d2*e2 - 4*a2*b2*d1*f1 - 4*a2*b1*d2*f1 + 8*a1*b2*d2*f1 + 4*a2*a2*e1*f1 - 4*a1*a2*e2*f1 + 8*a2*b1*d1*f2 - 4*a1*b2*d1*f2 - 4*a1*b1*d2*f2 - 4*a1*a2*e1*f2 + 4*a1*a1*e2*f2)/(Easq*Ea); A0 = (-4*a2*d1*d2*f1 + 4*a1*d2*d2*f1 + a2*a2*f1*f1 + 4*a2*d1*d1*f2 - 4*a1*d1*d2*f2 - 2*a1*a2*f1*f2 + a1*a1*f2*f2)/(Easq*Easq); long double B3, B2, B1, B0; B3 = 4*A4; B2 = 3*A3; B1 = 2*A2; B0 = A1; long double C2, C1, C0; C2 = -(A2/2 - 3*A3*A3/(16*A4)); C1 = -(3*A1/4. -A2*A3/(8*A4)); C0 = -A0 + A1*A3/(16*A4); long double D1, D0; D1 = -B1 - (B3*C1*C1/C2 - B3*C0 -B2*C1)/C2; D0 = -B0 - B3 *C0 *C1/(C2*C2)+ B2*C0/C2; long double E0; E0 = -C0 - C2*D0*D0/(D1*D1) + C1*D0/D1; long double t1,t2,t3,t4,t5; //find the coefficients for the leading term in the Sturm sequence t1 = A4; t2 = A4; t3 = C2; t4 = D1; t5 = E0; //The number of solutions depends on diffence of number of sign changes for x->Inf and x->-Inf int nsol; nsol = signchange_n(t1,t2,t3,t4,t5) - signchange_p(t1,t2,t3,t4,t5); //Cannot have negative number of solutions, must be roundoff effect if (nsol < 0) nsol = 0; return nsol; } inline int mt2::signchange_n( long double t1, long double t2, long double t3, long double t4, long double t5) { int nsc; nsc=0; if(t1*t2>0) nsc++; if(t2*t3>0) nsc++; if(t3*t4>0) nsc++; if(t4*t5>0) nsc++; return nsc; } inline int mt2::signchange_p( long double t1, long double t2, long double t3, long double t4, long double t5) { int nsc; nsc=0; if(t1*t2<0) nsc++; if(t2*t3<0) nsc++; if(t3*t4<0) nsc++; if(t4*t5<0) nsc++; return nsc; } }//end namespace mt2_bisect }//end namespace Rivet rivet-1.8.3/src/Tools/yaml-cpp/0000755000175000017500000000000012131473205014457 5ustar sunsunrivet-1.8.3/src/Tools/yaml-cpp/traits.h0000644000175000017500000000323312116077762016152 0ustar sunsun#pragma once #ifndef TRAITS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define TRAITS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 namespace YAML { template struct is_numeric { enum { value = false }; }; template <> struct is_numeric { enum { value = true }; }; template <> struct is_numeric { enum { value = true }; }; template <> struct is_numeric { enum { value = true }; }; template <> struct is_numeric { enum { value = true }; }; template <> struct is_numeric { enum { value = true }; }; template <> struct is_numeric { enum { value = true }; }; template <> struct is_numeric { enum { value = true }; }; template <> struct is_numeric { enum { value = true }; }; // template <> struct is_numeric { enum { value = true }; }; // template <> struct is_numeric { enum { value = true }; }; template <> struct is_numeric { enum { value = true }; }; template <> struct is_numeric { enum { value = true }; }; template <> struct is_numeric { enum { value = true }; }; template struct enable_if_c { typedef T type; }; template struct enable_if_c {}; template struct enable_if : public enable_if_c {}; template struct disable_if_c { typedef T type; }; template struct disable_if_c {}; template struct disable_if : public disable_if_c {}; } #endif // TRAITS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/emitter.h0000644000175000017500000001044112116077762016314 0ustar sunsun#pragma once #ifndef EMITTER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define EMITTER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include "emittermanip.h" #include "ostream.h" #include "null.h" #include #include #include namespace YAML { class EmitterState; class Emitter { public: Emitter(); ~Emitter(); // output const char *c_str() const; unsigned size() const; // state checking bool good() const; const std::string GetLastError() const; // global setters bool SetOutputCharset(EMITTER_MANIP value); bool SetStringFormat(EMITTER_MANIP value); bool SetBoolFormat(EMITTER_MANIP value); bool SetIntBase(EMITTER_MANIP value); bool SetSeqFormat(EMITTER_MANIP value); bool SetMapFormat(EMITTER_MANIP value); bool SetIndent(unsigned n); bool SetPreCommentIndent(unsigned n); bool SetPostCommentIndent(unsigned n); // local setters Emitter& SetLocalValue(EMITTER_MANIP value); Emitter& SetLocalIndent(const _Indent& indent); // overloads of write Emitter& Write(const std::string& str); Emitter& Write(bool b); Emitter& Write(const _Alias& alias); Emitter& Write(const _Anchor& anchor); Emitter& Write(const _Tag& tag); Emitter& Write(const _Comment& comment); Emitter& Write(const _Null& null); template Emitter& WriteIntegralType(T value); template Emitter& WriteStreamable(T value); private: void PreWriteIntegralType(std::stringstream& str); void PostWriteIntegralType(const std::stringstream& str); private: enum ATOMIC_TYPE { AT_SCALAR, AT_SEQ, AT_BLOCK_SEQ, AT_FLOW_SEQ, AT_MAP, AT_BLOCK_MAP, AT_FLOW_MAP }; void PreAtomicWrite(); bool GotoNextPreAtomicState(); void PostAtomicWrite(); void EmitSeparationIfNecessary(); void EmitBeginSeq(); void EmitEndSeq(); void EmitBeginMap(); void EmitEndMap(); void EmitKey(); void EmitValue(); private: ostream m_stream; std::auto_ptr m_pState; }; template inline Emitter& Emitter::WriteIntegralType(T value) { if(!good()) return *this; std::stringstream str; PreWriteIntegralType(str); str << value; PostWriteIntegralType(str); return *this; } template inline Emitter& Emitter::WriteStreamable(T value) { if(!good()) return *this; PreAtomicWrite(); EmitSeparationIfNecessary(); std::stringstream str; str << value; m_stream << str.str(); PostAtomicWrite(); return *this; } // overloads of insertion inline Emitter& operator << (Emitter& emitter, const std::string& v) { return emitter.Write(v); } inline Emitter& operator << (Emitter& emitter, bool v) { return emitter.Write(v); } inline Emitter& operator << (Emitter& emitter, const _Alias& v) { return emitter.Write(v); } inline Emitter& operator << (Emitter& emitter, const _Anchor& v) { return emitter.Write(v); } inline Emitter& operator << (Emitter& emitter, const _Tag& v) { return emitter.Write(v); } inline Emitter& operator << (Emitter& emitter, const _Comment& v) { return emitter.Write(v); } inline Emitter& operator << (Emitter& emitter, const _Null& v) { return emitter.Write(v); } inline Emitter& operator << (Emitter& emitter, const char *v) { return emitter.Write(std::string(v)); } inline Emitter& operator << (Emitter& emitter, int v) { return emitter.WriteIntegralType(v); } inline Emitter& operator << (Emitter& emitter, unsigned int v) { return emitter.WriteIntegralType(v); } inline Emitter& operator << (Emitter& emitter, short v) { return emitter.WriteIntegralType(v); } inline Emitter& operator << (Emitter& emitter, unsigned short v) { return emitter.WriteIntegralType(v); } inline Emitter& operator << (Emitter& emitter, long v) { return emitter.WriteIntegralType(v); } inline Emitter& operator << (Emitter& emitter, unsigned long v) { return emitter.WriteIntegralType(v); } inline Emitter& operator << (Emitter& emitter, float v) { return emitter.WriteStreamable(v); } inline Emitter& operator << (Emitter& emitter, double v) { return emitter.WriteStreamable(v); } inline Emitter& operator << (Emitter& emitter, EMITTER_MANIP value) { return emitter.SetLocalValue(value); } inline Emitter& operator << (Emitter& emitter, _Indent indent) { return emitter.SetLocalIndent(indent); } } #endif // EMITTER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/iterator.cpp0000644000175000017500000000364712116077762017041 0ustar sunsun#include "node.h" #include "exceptions.h" #include "iterpriv.h" namespace YAML { Iterator::Iterator(): m_pData(0) { m_pData = new IterPriv; } Iterator::Iterator(IterPriv *pData): m_pData(pData) { } Iterator::Iterator(const Iterator& rhs): m_pData(0) { m_pData = new IterPriv(*rhs.m_pData); } Iterator& Iterator::operator = (const Iterator& rhs) { if(this == &rhs) return *this; delete m_pData; m_pData = new IterPriv(*rhs.m_pData); return *this; } Iterator::~Iterator() { delete m_pData; } Iterator& Iterator::operator ++ () { if(m_pData->type == IterPriv::IT_SEQ) ++m_pData->seqIter; else if(m_pData->type == IterPriv::IT_MAP) ++m_pData->mapIter; return *this; } Iterator Iterator::operator ++ (int) { Iterator temp = *this; if(m_pData->type == IterPriv::IT_SEQ) ++m_pData->seqIter; else if(m_pData->type == IterPriv::IT_MAP) ++m_pData->mapIter; return temp; } const Node& Iterator::operator * () const { if(m_pData->type == IterPriv::IT_SEQ) return **m_pData->seqIter; throw BadDereference(); } const Node *Iterator::operator -> () const { if(m_pData->type == IterPriv::IT_SEQ) return *m_pData->seqIter; throw BadDereference(); } const Node& Iterator::first() const { if(m_pData->type == IterPriv::IT_MAP) return *m_pData->mapIter->first; throw BadDereference(); } const Node& Iterator::second() const { if(m_pData->type == IterPriv::IT_MAP) return *m_pData->mapIter->second; throw BadDereference(); } bool operator == (const Iterator& it, const Iterator& jt) { if(it.m_pData->type != jt.m_pData->type) return false; if(it.m_pData->type == IterPriv::IT_SEQ) return it.m_pData->seqIter == jt.m_pData->seqIter; else if(it.m_pData->type == IterPriv::IT_MAP) return it.m_pData->mapIter == jt.m_pData->mapIter; return true; } bool operator != (const Iterator& it, const Iterator& jt) { return !(it == jt); } } rivet-1.8.3/src/Tools/yaml-cpp/streamcharsource.h0000644000175000017500000000230712116077762020217 0ustar sunsun#pragma once #ifndef STREAMCHARSOURCE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define STREAMCHARSOURCE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include "noncopyable.h" #include namespace YAML { class StreamCharSource { public: StreamCharSource(const Stream& stream): m_offset(0), m_stream(stream) {} StreamCharSource(const StreamCharSource& source): m_offset(source.m_offset), m_stream(source.m_stream) {} ~StreamCharSource() {} operator bool() const; char operator [] (std::size_t i) const { return m_stream.CharAt(m_offset + i); } bool operator !() const { return !static_cast(*this); } const StreamCharSource operator + (int i) const; private: std::size_t m_offset; const Stream& m_stream; StreamCharSource& operator = (const StreamCharSource&); // non-assignable }; inline StreamCharSource::operator bool() const { return m_stream.ReadAheadTo(m_offset); } inline const StreamCharSource StreamCharSource::operator + (int i) const { StreamCharSource source(*this); if(static_cast (source.m_offset) + i >= 0) source.m_offset += i; else source.m_offset = 0; return source; } } #endif // STREAMCHARSOURCE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/stlemitter.h0000644000175000017500000000223312116077762017037 0ustar sunsun#pragma once #ifndef STLEMITTER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define STLEMITTER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include #include #include namespace YAML { template inline Emitter& operator << (Emitter& emitter, const std::vector & v) { typedef typename std::vector vec; emitter << BeginSeq; for(typename vec::const_iterator it=v.begin();it!=v.end();++it) emitter << *it; emitter << EndSeq; return emitter; } template inline Emitter& operator << (Emitter& emitter, const std::list & v) { typedef typename std::list list; emitter << BeginSeq; for(typename list::const_iterator it=v.begin();it!=v.end();++it) emitter << *it; emitter << EndSeq; return emitter; } template inline Emitter& operator << (Emitter& emitter, const std::map & m) { typedef typename std::map map; emitter << BeginMap; for(typename map::const_iterator it=m.begin();it!=m.end();++it) emitter << Key << it->first << Value << it->second; emitter << EndMap; return emitter; } } #endif // STLEMITTER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/tag.h0000644000175000017500000000075112116077762015421 0ustar sunsun#pragma once #ifndef TAG_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define TAG_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include namespace YAML { struct Token; struct ParserState; struct Tag { enum TYPE { VERBATIM, PRIMARY_HANDLE, SECONDARY_HANDLE, NAMED_HANDLE, NON_SPECIFIC }; Tag(const Token& token); const std::string Translate(const ParserState& state); TYPE type; std::string handle, value; }; } #endif // TAG_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/scantoken.cpp0000644000175000017500000002530712116077762017172 0ustar sunsun#include "scanner.h" #include "token.h" #include "exceptions.h" #include "exp.h" #include "scanscalar.h" #include "scantag.h" #include "tag.h" #include namespace YAML { /////////////////////////////////////////////////////////////////////// // Specialization for scanning specific tokens // Directive // . Note: no semantic checking is done here (that's for the parser to do) void Scanner::ScanDirective() { std::string name; std::vector params; // pop indents and simple keys PopAllIndents(); PopAllSimpleKeys(); m_simpleKeyAllowed = false; m_canBeJSONFlow = false; // store pos and eat indicator Token token(Token::DIRECTIVE, INPUT.mark()); INPUT.eat(1); // read name while(INPUT && !Exp::BlankOrBreak().Matches(INPUT)) token.value += INPUT.get(); // read parameters while(1) { // first get rid of whitespace while(Exp::Blank().Matches(INPUT)) INPUT.eat(1); // break on newline or comment if(!INPUT || Exp::Break().Matches(INPUT) || Exp::Comment().Matches(INPUT)) break; // now read parameter std::string param; while(INPUT && !Exp::BlankOrBreak().Matches(INPUT)) param += INPUT.get(); token.params.push_back(param); } m_tokens.push(token); } // DocStart void Scanner::ScanDocStart() { PopAllIndents(); PopAllSimpleKeys(); m_simpleKeyAllowed = false; m_canBeJSONFlow = false; // eat Mark mark = INPUT.mark(); INPUT.eat(3); m_tokens.push(Token(Token::DOC_START, mark)); } // DocEnd void Scanner::ScanDocEnd() { PopAllIndents(); PopAllSimpleKeys(); m_simpleKeyAllowed = false; m_canBeJSONFlow = false; // eat Mark mark = INPUT.mark(); INPUT.eat(3); m_tokens.push(Token(Token::DOC_END, mark)); } // FlowStart void Scanner::ScanFlowStart() { // flows can be simple keys InsertPotentialSimpleKey(); m_simpleKeyAllowed = true; m_canBeJSONFlow = false; // eat Mark mark = INPUT.mark(); char ch = INPUT.get(); FLOW_MARKER flowType = (ch == Keys::FlowSeqStart ? FLOW_SEQ : FLOW_MAP); m_flows.push(flowType); Token::TYPE type = (flowType == FLOW_SEQ ? Token::FLOW_SEQ_START : Token::FLOW_MAP_START); m_tokens.push(Token(type, mark)); } // FlowEnd void Scanner::ScanFlowEnd() { if(InBlockContext()) throw ParserException(INPUT.mark(), ErrorMsg::FLOW_END); // we might have a solo entry in the flow context if(InFlowContext()) { if(m_flows.top() == FLOW_MAP && VerifySimpleKey()) m_tokens.push(Token(Token::VALUE, INPUT.mark())); else if(m_flows.top() == FLOW_SEQ) InvalidateSimpleKey(); } m_simpleKeyAllowed = false; m_canBeJSONFlow = true; // eat Mark mark = INPUT.mark(); char ch = INPUT.get(); // check that it matches the start FLOW_MARKER flowType = (ch == Keys::FlowSeqEnd ? FLOW_SEQ : FLOW_MAP); if(m_flows.top() != flowType) throw ParserException(mark, ErrorMsg::FLOW_END); m_flows.pop(); Token::TYPE type = (flowType ? Token::FLOW_SEQ_END : Token::FLOW_MAP_END); m_tokens.push(Token(type, mark)); } // FlowEntry void Scanner::ScanFlowEntry() { // we might have a solo entry in the flow context if(InFlowContext()) { if(m_flows.top() == FLOW_MAP && VerifySimpleKey()) m_tokens.push(Token(Token::VALUE, INPUT.mark())); else if(m_flows.top() == FLOW_SEQ) InvalidateSimpleKey(); } m_simpleKeyAllowed = true; m_canBeJSONFlow = false; // eat Mark mark = INPUT.mark(); INPUT.eat(1); m_tokens.push(Token(Token::FLOW_ENTRY, mark)); } // BlockEntry void Scanner::ScanBlockEntry() { // we better be in the block context! if(InFlowContext()) throw ParserException(INPUT.mark(), ErrorMsg::BLOCK_ENTRY); // can we put it here? if(!m_simpleKeyAllowed) throw ParserException(INPUT.mark(), ErrorMsg::BLOCK_ENTRY); PushIndentTo(INPUT.column(), IndentMarker::SEQ); m_simpleKeyAllowed = true; m_canBeJSONFlow = false; // eat Mark mark = INPUT.mark(); INPUT.eat(1); m_tokens.push(Token(Token::BLOCK_ENTRY, mark)); } // Key void Scanner::ScanKey() { // handle keys diffently in the block context (and manage indents) if(InBlockContext()) { if(!m_simpleKeyAllowed) throw ParserException(INPUT.mark(), ErrorMsg::MAP_KEY); PushIndentTo(INPUT.column(), IndentMarker::MAP); } // can only put a simple key here if we're in block context m_simpleKeyAllowed = InBlockContext(); // eat Mark mark = INPUT.mark(); INPUT.eat(1); m_tokens.push(Token(Token::KEY, mark)); } // Value void Scanner::ScanValue() { // and check that simple key bool isSimpleKey = VerifySimpleKey(); m_canBeJSONFlow = false; if(isSimpleKey) { // can't follow a simple key with another simple key (dunno why, though - it seems fine) m_simpleKeyAllowed = false; } else { // handle values diffently in the block context (and manage indents) if(InBlockContext()) { if(!m_simpleKeyAllowed) throw ParserException(INPUT.mark(), ErrorMsg::MAP_VALUE); PushIndentTo(INPUT.column(), IndentMarker::MAP); } // can only put a simple key here if we're in block context m_simpleKeyAllowed = InBlockContext(); } // eat Mark mark = INPUT.mark(); INPUT.eat(1); m_tokens.push(Token(Token::VALUE, mark)); } // AnchorOrAlias void Scanner::ScanAnchorOrAlias() { bool alias; std::string name; // insert a potential simple key InsertPotentialSimpleKey(); m_simpleKeyAllowed = false; m_canBeJSONFlow = false; // eat the indicator Mark mark = INPUT.mark(); char indicator = INPUT.get(); alias = (indicator == Keys::Alias); // now eat the content while(Exp::AlphaNumeric().Matches(INPUT)) name += INPUT.get(); // we need to have read SOMETHING! if(name.empty()) throw ParserException(INPUT.mark(), alias ? ErrorMsg::ALIAS_NOT_FOUND : ErrorMsg::ANCHOR_NOT_FOUND); // and needs to end correctly if(INPUT && !Exp::AnchorEnd().Matches(INPUT)) throw ParserException(INPUT.mark(), alias ? ErrorMsg::CHAR_IN_ALIAS : ErrorMsg::CHAR_IN_ANCHOR); // and we're done Token token(alias ? Token::ALIAS : Token::ANCHOR, mark); token.value = name; m_tokens.push(token); } // Tag void Scanner::ScanTag() { // insert a potential simple key InsertPotentialSimpleKey(); m_simpleKeyAllowed = false; m_canBeJSONFlow = false; Token token(Token::TAG, INPUT.mark()); // eat the indicator INPUT.get(); if(INPUT && INPUT.peek() == Keys::VerbatimTagStart){ std::string tag = ScanVerbatimTag(INPUT); token.value = tag; token.data = Tag::VERBATIM; } else { bool canBeHandle; token.value = ScanTagHandle(INPUT, canBeHandle); token.data = (token.value.empty() ? Tag::SECONDARY_HANDLE : Tag::PRIMARY_HANDLE); // is there a suffix? if(canBeHandle && INPUT.peek() == Keys::Tag) { // eat the indicator INPUT.get(); token.params.push_back(ScanTagSuffix(INPUT)); token.data = Tag::NAMED_HANDLE; } } m_tokens.push(token); } // PlainScalar void Scanner::ScanPlainScalar() { std::string scalar; // set up the scanning parameters ScanScalarParams params; params.end = (InFlowContext() ? Exp::EndScalarInFlow() : Exp::EndScalar()) || (Exp::BlankOrBreak() + Exp::Comment()); params.eatEnd = false; params.indent = (InFlowContext() ? 0 : GetTopIndent() + 1); params.fold = FOLD_FLOW; params.eatLeadingWhitespace = true; params.trimTrailingSpaces = true; params.chomp = STRIP; params.onDocIndicator = BREAK; params.onTabInIndentation = THROW; // insert a potential simple key InsertPotentialSimpleKey(); Mark mark = INPUT.mark(); scalar = ScanScalar(INPUT, params); // can have a simple key only if we ended the scalar by starting a new line m_simpleKeyAllowed = params.leadingSpaces; m_canBeJSONFlow = false; // finally, check and see if we ended on an illegal character //if(Exp::IllegalCharInScalar.Matches(INPUT)) // throw ParserException(INPUT.mark(), ErrorMsg::CHAR_IN_SCALAR); Token token(Token::SCALAR, mark); token.value = scalar; m_tokens.push(token); } // QuotedScalar void Scanner::ScanQuotedScalar() { std::string scalar; // peek at single or double quote (don't eat because we need to preserve (for the time being) the input position) char quote = INPUT.peek(); bool single = (quote == '\''); // setup the scanning parameters ScanScalarParams params; params.end = (single ? RegEx(quote) && !Exp::EscSingleQuote() : RegEx(quote)); params.eatEnd = true; params.escape = (single ? '\'' : '\\'); params.indent = 0; params.fold = FOLD_FLOW; params.eatLeadingWhitespace = true; params.trimTrailingSpaces = false; params.chomp = CLIP; params.onDocIndicator = THROW; // insert a potential simple key InsertPotentialSimpleKey(); Mark mark = INPUT.mark(); // now eat that opening quote INPUT.get(); // and scan scalar = ScanScalar(INPUT, params); m_simpleKeyAllowed = false; m_canBeJSONFlow = true; Token token(Token::SCALAR, mark); token.value = scalar; m_tokens.push(token); } // BlockScalarToken // . These need a little extra processing beforehand. // . We need to scan the line where the indicator is (this doesn't count as part of the scalar), // and then we need to figure out what level of indentation we'll be using. void Scanner::ScanBlockScalar() { std::string scalar; ScanScalarParams params; params.indent = 1; params.detectIndent = true; // eat block indicator ('|' or '>') Mark mark = INPUT.mark(); char indicator = INPUT.get(); params.fold = (indicator == Keys::FoldedScalar ? FOLD_BLOCK : DONT_FOLD); // eat chomping/indentation indicators params.chomp = CLIP; int n = Exp::Chomp().Match(INPUT); for(int i=0;i= 0) params.indent += GetTopIndent(); params.eatLeadingWhitespace = false; params.trimTrailingSpaces = false; params.onTabInIndentation = THROW; scalar = ScanScalar(INPUT, params); // simple keys always ok after block scalars (since we're gonna start a new line anyways) m_simpleKeyAllowed = true; m_canBeJSONFlow = false; Token token(Token::SCALAR, mark); token.value = scalar; m_tokens.push(token); } } rivet-1.8.3/src/Tools/yaml-cpp/conversion.h0000644000175000017500000000135612116077762017035 0ustar sunsun#pragma once #ifndef CONVERSION_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define CONVERSION_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include "null.h" #include "traits.h" #include #include namespace YAML { inline bool Convert(const std::string& input, std::string& output) { output = input; return true; } bool Convert(const std::string& input, bool& output); bool Convert(const std::string& input, _Null& output); template inline bool Convert(const std::string& input, T& output, typename enable_if >::type * = 0) { std::stringstream stream(input); stream.unsetf(std::ios::dec); stream >> output; return !!stream; } } #endif // CONVERSION_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/noncopyable.h0000644000175000017500000000067412116077762017163 0ustar sunsun#pragma once #ifndef NONCOPYABLE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define NONCOPYABLE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 namespace YAML { // this is basically boost::noncopyable class noncopyable { protected: noncopyable() {} ~noncopyable() {} private: noncopyable(const noncopyable&); const noncopyable& operator = (const noncopyable&); }; } #endif // NONCOPYABLE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/setting.h0000644000175000017500000000425312116077762016324 0ustar sunsun#pragma once #ifndef SETTING_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define SETTING_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include #include #include "noncopyable.h" namespace YAML { class SettingChangeBase; template class Setting { public: Setting(): m_value() {} const T get() const { return m_value; } std::auto_ptr set(const T& value); void restore(const Setting& oldSetting) { m_value = oldSetting.get(); } private: T m_value; }; class SettingChangeBase { public: virtual ~SettingChangeBase() {} virtual void pop() = 0; }; template class SettingChange: public SettingChangeBase { public: SettingChange(Setting *pSetting): m_pCurSetting(pSetting) { // copy old setting to save its state m_oldSetting = *pSetting; } virtual void pop() { m_pCurSetting->restore(m_oldSetting); } private: Setting *m_pCurSetting; Setting m_oldSetting; }; template inline std::auto_ptr Setting::set(const T& value) { std::auto_ptr pChange(new SettingChange (this)); m_value = value; return pChange; } class SettingChanges: private noncopyable { public: SettingChanges() {} ~SettingChanges() { clear(); } void clear() { restore(); for(setting_changes::const_iterator it=m_settingChanges.begin();it!=m_settingChanges.end();++it) delete *it; m_settingChanges.clear(); } void restore() { for(setting_changes::const_iterator it=m_settingChanges.begin();it!=m_settingChanges.end();++it) (*it)->pop(); } void push(std::auto_ptr pSettingChange) { m_settingChanges.push_back(pSettingChange.release()); } // like std::auto_ptr - assignment is transfer of ownership SettingChanges& operator = (SettingChanges& rhs) { if(this == &rhs) return *this; clear(); m_settingChanges = rhs.m_settingChanges; rhs.m_settingChanges.clear(); return *this; } private: typedef std::vector setting_changes; setting_changes m_settingChanges; }; } #endif // SETTING_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/conversion.cpp0000644000175000017500000000375312116077762017373 0ustar sunsun#include "conversion.h" #include //////////////////////////////////////////////////////////////// // Specializations for converting a string to specific types namespace { // we're not gonna mess with the mess that is all the isupper/etc. functions bool IsLower(char ch) { return 'a' <= ch && ch <= 'z'; } bool IsUpper(char ch) { return 'A' <= ch && ch <= 'Z'; } char ToLower(char ch) { return IsUpper(ch) ? ch + 'a' - 'A' : ch; } std::string tolower(const std::string& str) { std::string s(str); std::transform(s.begin(), s.end(), s.begin(), ToLower); return s; } template bool IsEntirely(const std::string& str, T func) { for(std::size_t i=0;i #include #include #include namespace YAML { enum FMT_SCOPE { LOCAL, GLOBAL }; enum GROUP_TYPE { GT_NONE, GT_SEQ, GT_MAP }; enum FLOW_TYPE { FT_NONE, FT_FLOW, FT_BLOCK }; enum NODE_STATE { NS_START, NS_READY_FOR_ATOM, NS_END }; enum EMITTER_STATE { ES_WAITING_FOR_DOC, ES_WRITING_DOC, ES_DONE_WITH_DOC, // block seq ES_WAITING_FOR_BLOCK_SEQ_ENTRY, ES_WRITING_BLOCK_SEQ_ENTRY, ES_DONE_WITH_BLOCK_SEQ_ENTRY, // flow seq ES_WAITING_FOR_FLOW_SEQ_ENTRY, ES_WRITING_FLOW_SEQ_ENTRY, ES_DONE_WITH_FLOW_SEQ_ENTRY, // block map ES_WAITING_FOR_BLOCK_MAP_ENTRY, ES_WAITING_FOR_BLOCK_MAP_KEY, ES_WRITING_BLOCK_MAP_KEY, ES_DONE_WITH_BLOCK_MAP_KEY, ES_WAITING_FOR_BLOCK_MAP_VALUE, ES_WRITING_BLOCK_MAP_VALUE, ES_DONE_WITH_BLOCK_MAP_VALUE, // flow map ES_WAITING_FOR_FLOW_MAP_ENTRY, ES_WAITING_FOR_FLOW_MAP_KEY, ES_WRITING_FLOW_MAP_KEY, ES_DONE_WITH_FLOW_MAP_KEY, ES_WAITING_FOR_FLOW_MAP_VALUE, ES_WRITING_FLOW_MAP_VALUE, ES_DONE_WITH_FLOW_MAP_VALUE }; class EmitterState { public: EmitterState(); ~EmitterState(); // basic state checking bool good() const { return m_isGood; } const std::string GetLastError() const { return m_lastError; } void SetError(const std::string& error) { m_isGood = false; m_lastError = error; } // main state of the machine EMITTER_STATE GetCurState() const { return m_stateStack.top(); } void SwitchState(EMITTER_STATE state) { PopState(); PushState(state); } void PushState(EMITTER_STATE state) { m_stateStack.push(state); } void PopState() { m_stateStack.pop(); } void SetLocalValue(EMITTER_MANIP value); // group handling void BeginGroup(GROUP_TYPE type); void EndGroup(GROUP_TYPE type); GROUP_TYPE GetCurGroupType() const; FLOW_TYPE GetCurGroupFlowType() const; int GetCurIndent() const { return m_curIndent; } bool CurrentlyInLongKey(); void StartLongKey(); void StartSimpleKey(); bool RequiresSeparation() const { return m_requiresSeparation; } void RequireSeparation() { m_requiresSeparation = true; } void UnsetSeparation() { m_requiresSeparation = false; } void ClearModifiedSettings(); // formatters bool SetOutputCharset(EMITTER_MANIP value, FMT_SCOPE scope); EMITTER_MANIP GetOutputCharset() const { return m_charset.get(); } bool SetStringFormat(EMITTER_MANIP value, FMT_SCOPE scope); EMITTER_MANIP GetStringFormat() const { return m_strFmt.get(); } bool SetBoolFormat(EMITTER_MANIP value, FMT_SCOPE scope); EMITTER_MANIP GetBoolFormat() const { return m_boolFmt.get(); } bool SetBoolLengthFormat(EMITTER_MANIP value, FMT_SCOPE scope); EMITTER_MANIP GetBoolLengthFormat() const { return m_boolLengthFmt.get(); } bool SetBoolCaseFormat(EMITTER_MANIP value, FMT_SCOPE scope); EMITTER_MANIP GetBoolCaseFormat() const { return m_boolCaseFmt.get(); } bool SetIntFormat(EMITTER_MANIP value, FMT_SCOPE scope); EMITTER_MANIP GetIntFormat() const { return m_intFmt.get(); } bool SetIndent(unsigned value, FMT_SCOPE scope); int GetIndent() const { return m_indent.get(); } bool SetPreCommentIndent(unsigned value, FMT_SCOPE scope); int GetPreCommentIndent() const { return m_preCommentIndent.get(); } bool SetPostCommentIndent(unsigned value, FMT_SCOPE scope); int GetPostCommentIndent() const { return m_postCommentIndent.get(); } bool SetFlowType(GROUP_TYPE groupType, EMITTER_MANIP value, FMT_SCOPE scope); EMITTER_MANIP GetFlowType(GROUP_TYPE groupType) const; bool SetMapKeyFormat(EMITTER_MANIP value, FMT_SCOPE scope); EMITTER_MANIP GetMapKeyFormat() const { return m_mapKeyFmt.get(); } private: template void _Set(Setting& fmt, T value, FMT_SCOPE scope); private: // basic state ok? bool m_isGood; std::string m_lastError; // other state std::stack m_stateStack; Setting m_charset; Setting m_strFmt; Setting m_boolFmt; Setting m_boolLengthFmt; Setting m_boolCaseFmt; Setting m_intFmt; Setting m_indent; Setting m_preCommentIndent, m_postCommentIndent; Setting m_seqFmt; Setting m_mapFmt; Setting m_mapKeyFmt; SettingChanges m_modifiedSettings; SettingChanges m_globalModifiedSettings; struct Group { Group(GROUP_TYPE type_): type(type_), usingLongKey(false), indent(0) {} GROUP_TYPE type; EMITTER_MANIP flow; bool usingLongKey; int indent; SettingChanges modifiedSettings; }; std::auto_ptr _PopGroup(); std::stack m_groups; unsigned m_curIndent; bool m_requiresSeparation; }; template void EmitterState::_Set(Setting& fmt, T value, FMT_SCOPE scope) { switch(scope) { case LOCAL: m_modifiedSettings.push(fmt.set(value)); break; case GLOBAL: fmt.set(value); m_globalModifiedSettings.push(fmt.set(value)); // this pushes an identity set, so when we restore, // it restores to the value here, and not the previous one break; default: assert(false); } } } #endif // EMITTERSTATE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/ltnode.h0000644000175000017500000000045412116077762016133 0ustar sunsun#pragma once #ifndef LTNODE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define LTNODE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 namespace YAML { class Node; struct ltnode { bool operator()(const Node *pNode1, const Node *pNode2) const; }; } #endif // LTNODE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/tag.cpp0000644000175000017500000000170712116077762015756 0ustar sunsun#include "tag.h" #include "token.h" #include "parserstate.h" #include namespace YAML { Tag::Tag(const Token& token): type(static_cast(token.data)) { switch(type) { case VERBATIM: value = token.value; break; case PRIMARY_HANDLE: value = token.value; break; case SECONDARY_HANDLE: value = token.value; break; case NAMED_HANDLE: handle = token.value; value = token.params[0]; break; case NON_SPECIFIC: break; default: assert(false); } } const std::string Tag::Translate(const ParserState& state) { switch(type) { case VERBATIM: return value; case PRIMARY_HANDLE: return state.TranslateTagHandle("!") + value; case SECONDARY_HANDLE: return state.TranslateTagHandle("!!") + value; case NAMED_HANDLE: return state.TranslateTagHandle("!" + handle + "!") + value; case NON_SPECIFIC: // TODO: return "!"; default: assert(false); } } } rivet-1.8.3/src/Tools/yaml-cpp/ostream.h0000644000175000017500000000140212116077762016312 0ustar sunsun#pragma once #ifndef OSTREAM_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define OSTREAM_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include namespace YAML { class ostream { public: ostream(); ~ostream(); void reserve(unsigned size); void put(char ch); const char *str() const { return m_buffer; } unsigned row() const { return m_row; } unsigned col() const { return m_col; } unsigned pos() const { return m_pos; } private: char *m_buffer; unsigned m_pos; unsigned m_size; unsigned m_row, m_col; }; ostream& operator << (ostream& out, const char *str); ostream& operator << (ostream& out, const std::string& str); ostream& operator << (ostream& out, char ch); } #endif // OSTREAM_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/sequence.cpp0000644000175000017500000000672012116077762017013 0ustar sunsun#include "sequence.h" #include "node.h" #include "scanner.h" #include "token.h" #include "emitter.h" #include namespace YAML { Sequence::Sequence() { } Sequence::Sequence(const std::vector& data) { for(std::size_t i=0;iClone().release()); } Sequence::~Sequence() { Clear(); } void Sequence::Clear() { for(std::size_t i=0;i::const_iterator& it) const { it = m_data.begin(); return true; } bool Sequence::GetEnd(std::vector ::const_iterator& it) const { it = m_data.end(); return true; } Node *Sequence::GetNode(std::size_t i) const { if(i < m_data.size()) return m_data[i]; return 0; } std::size_t Sequence::GetSize() const { return m_data.size(); } void Sequence::Parse(Scanner *pScanner, ParserState& state) { Clear(); // split based on start token switch(pScanner->peek().type) { case Token::BLOCK_SEQ_START: ParseBlock(pScanner, state); break; case Token::FLOW_SEQ_START: ParseFlow(pScanner, state); break; default: break; } } void Sequence::ParseBlock(Scanner *pScanner, ParserState& state) { // eat start token pScanner->pop(); state.PushCollectionType(ParserState::BLOCK_SEQ); while(1) { if(pScanner->empty()) throw ParserException(Mark::null(), ErrorMsg::END_OF_SEQ); Token token = pScanner->peek(); if(token.type != Token::BLOCK_ENTRY && token.type != Token::BLOCK_SEQ_END) throw ParserException(token.mark, ErrorMsg::END_OF_SEQ); pScanner->pop(); if(token.type == Token::BLOCK_SEQ_END) break; Node *pNode = new Node; m_data.push_back(pNode); // check for null if(!pScanner->empty()) { const Token& token = pScanner->peek(); if(token.type == Token::BLOCK_ENTRY || token.type == Token::BLOCK_SEQ_END) continue; } pNode->Parse(pScanner, state); } state.PopCollectionType(ParserState::BLOCK_SEQ); } void Sequence::ParseFlow(Scanner *pScanner, ParserState& state) { // eat start token pScanner->pop(); state.PushCollectionType(ParserState::FLOW_SEQ); while(1) { if(pScanner->empty()) throw ParserException(Mark::null(), ErrorMsg::END_OF_SEQ_FLOW); // first check for end if(pScanner->peek().type == Token::FLOW_SEQ_END) { pScanner->pop(); break; } // then read the node Node *pNode = new Node; m_data.push_back(pNode); pNode->Parse(pScanner, state); // now eat the separator (or could be a sequence end, which we ignore - but if it's neither, then it's a bad node) Token& token = pScanner->peek(); if(token.type == Token::FLOW_ENTRY) pScanner->pop(); else if(token.type != Token::FLOW_SEQ_END) throw ParserException(token.mark, ErrorMsg::END_OF_SEQ_FLOW); } state.PopCollectionType(ParserState::FLOW_SEQ); } void Sequence::Write(Emitter& out) const { out << BeginSeq; for(std::size_t i=0;iCompare(this); } int Sequence::Compare(Sequence *pSeq) { std::size_t n = m_data.size(), m = pSeq->m_data.size(); if(n < m) return -1; else if(n > m) return 1; for(std::size_t i=0;iCompare(*pSeq->m_data[i]); if(cmp != 0) return cmp; } return 0; } } rivet-1.8.3/src/Tools/yaml-cpp/emitterutils.cpp0000644000175000017500000002042612116077762017734 0ustar sunsun#include "emitterutils.h" #include "exp.h" #include "indentation.h" #include "exceptions.h" #include "stringsource.h" #include #include namespace YAML { namespace Utils { namespace { enum {REPLACEMENT_CHARACTER = 0xFFFD}; bool IsAnchorChar(int ch) { // test for ns-anchor-char switch (ch) { case ',': case '[': case ']': case '{': case '}': // c-flow-indicator case ' ': case '\t': // s-white case 0xFEFF: // c-byte-order-mark case 0xA: case 0xD: // b-char return false; case 0x85: return true; } if (ch < 0x20) return false; if (ch < 0x7E) return true; if (ch < 0xA0) return false; if (ch >= 0xD800 && ch <= 0xDFFF) return false; if ((ch & 0xFFFE) == 0xFFFE) return false; if ((ch >= 0xFDD0) && (ch <= 0xFDEF)) return false; if (ch > 0x10FFFF) return false; return true; } int Utf8BytesIndicated(char ch) { int byteVal = static_cast(ch); switch (byteVal >> 4) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: return 1; case 12: case 13: return 2; case 14: return 3; case 15: return 4; default: return -1; } } bool IsTrailingByte(char ch) { return (ch & 0xC0) == 0x80; } bool GetNextCodePointAndAdvance(int& codePoint, std::string::const_iterator& first, std::string::const_iterator last) { if (first == last) return false; int nBytes = Utf8BytesIndicated(*first); if (nBytes < 1) { // Bad lead byte ++first; codePoint = REPLACEMENT_CHARACTER; return true; } if (nBytes == 1) { codePoint = *first++; return true; } // Gather bits from trailing bytes codePoint = static_cast(*first) & ~(0xFF << (7 - nBytes)); ++first; --nBytes; for (; nBytes > 0; ++first, --nBytes) { if ((first == last) || !IsTrailingByte(*first)) { codePoint = REPLACEMENT_CHARACTER; break; } codePoint <<= 6; codePoint |= *first & 0x3F; } // Check for illegal code points if (codePoint > 0x10FFFF) codePoint = REPLACEMENT_CHARACTER; else if (codePoint >= 0xD800 && codePoint <= 0xDFFF) codePoint = REPLACEMENT_CHARACTER; else if ((codePoint & 0xFFFE) == 0xFFFE) codePoint = REPLACEMENT_CHARACTER; else if (codePoint >= 0xFDD0 && codePoint <= 0xFDEF) codePoint = REPLACEMENT_CHARACTER; return true; } void WriteCodePoint(ostream& out, int codePoint) { if (codePoint < 0 || codePoint > 0x10FFFF) { codePoint = REPLACEMENT_CHARACTER; } if (codePoint < 0x7F) { out << static_cast(codePoint); } else if (codePoint < 0x7FF) { out << static_cast(0xC0 | (codePoint >> 6)) << static_cast(0x80 | (codePoint & 0x3F)); } else if (codePoint < 0xFFFF) { out << static_cast(0xE0 | (codePoint >> 12)) << static_cast(0x80 | ((codePoint >> 6) & 0x3F)) << static_cast(0x80 | (codePoint & 0x3F)); } else { out << static_cast(0xF0 | (codePoint >> 18)) << static_cast(0x80 | ((codePoint >> 12) & 0x3F)) << static_cast(0x80 | ((codePoint >> 6) & 0x3F)) << static_cast(0x80 | (codePoint & 0x3F)); } } bool IsValidPlainScalar(const std::string& str, bool inFlow, bool allowOnlyAscii) { // first check the start const RegEx& start = (inFlow ? Exp::PlainScalarInFlow() : Exp::PlainScalar()); if(!start.Matches(str)) return false; // and check the end for plain whitespace (which can't be faithfully kept in a plain scalar) if(!str.empty() && *str.rbegin() == ' ') return false; // then check until something is disallowed const RegEx& disallowed = (inFlow ? Exp::EndScalarInFlow() : Exp::EndScalar()) || (Exp::BlankOrBreak() + Exp::Comment()) || Exp::NotPrintable() || Exp::Utf8_ByteOrderMark() || Exp::Break() || Exp::Tab(); StringCharSource buffer(str.c_str(), str.size()); while(buffer) { if(disallowed.Matches(buffer)) return false; if(allowOnlyAscii && (0x7F < static_cast(buffer[0]))) return false; ++buffer; } return true; } void WriteDoubleQuoteEscapeSequence(ostream& out, int codePoint) { static const char hexDigits[] = "0123456789abcdef"; char escSeq[] = "\\U00000000"; int digits = 8; if (codePoint < 0xFF) { escSeq[1] = 'x'; digits = 2; } else if (codePoint < 0xFFFF) { escSeq[1] = 'u'; digits = 4; } // Write digits into the escape sequence int i = 2; for (; digits > 0; --digits, ++i) { escSeq[i] = hexDigits[(codePoint >> (4 * (digits - 1))) & 0xF]; } escSeq[i] = 0; // terminate with NUL character out << escSeq; } bool WriteAliasName(ostream& out, const std::string& str) { int codePoint; for(std::string::const_iterator i = str.begin(); GetNextCodePointAndAdvance(codePoint, i, str.end()); ) { if (!IsAnchorChar(codePoint)) return false; WriteCodePoint(out, codePoint); } return true; } } bool WriteString(ostream& out, const std::string& str, bool inFlow, bool escapeNonAscii) { if(IsValidPlainScalar(str, inFlow, escapeNonAscii)) { out << str; return true; } else return WriteDoubleQuotedString(out, str, escapeNonAscii); } bool WriteSingleQuotedString(ostream& out, const std::string& str) { out << "'"; int codePoint; for(std::string::const_iterator i = str.begin(); GetNextCodePointAndAdvance(codePoint, i, str.end()); ) { if (codePoint == '\n') return false; // We can't handle a new line and the attendant indentation yet if (codePoint == '\'') out << "''"; else WriteCodePoint(out, codePoint); } out << "'"; return true; } bool WriteDoubleQuotedString(ostream& out, const std::string& str, bool escapeNonAscii) { out << "\""; int codePoint; for(std::string::const_iterator i = str.begin(); GetNextCodePointAndAdvance(codePoint, i, str.end()); ) { if (codePoint == '\"') out << "\\\""; else if (codePoint == '\\') out << "\\\\"; else if (codePoint < 0x20 || (codePoint >= 0x80 && codePoint <= 0xA0)) // Control characters and non-breaking space WriteDoubleQuoteEscapeSequence(out, codePoint); else if (codePoint == 0xFEFF) // Byte order marks (ZWNS) should be escaped (YAML 1.2, sec. 5.2) WriteDoubleQuoteEscapeSequence(out, codePoint); else if (escapeNonAscii && codePoint > 0x7E) WriteDoubleQuoteEscapeSequence(out, codePoint); else WriteCodePoint(out, codePoint); } out << "\""; return true; } bool WriteLiteralString(ostream& out, const std::string& str, int indent) { out << "|\n"; out << IndentTo(indent); int codePoint; for(std::string::const_iterator i = str.begin(); GetNextCodePointAndAdvance(codePoint, i, str.end()); ) { if (codePoint == '\n') out << "\n" << IndentTo(indent); else WriteCodePoint(out, codePoint); } return true; } bool WriteComment(ostream& out, const std::string& str, int postCommentIndent) { unsigned curIndent = out.col(); out << "#" << Indentation(postCommentIndent); int codePoint; for(std::string::const_iterator i = str.begin(); GetNextCodePointAndAdvance(codePoint, i, str.end()); ) { if(codePoint == '\n') out << "\n" << IndentTo(curIndent) << "#" << Indentation(postCommentIndent); else WriteCodePoint(out, codePoint); } return true; } bool WriteAlias(ostream& out, const std::string& str) { out << "*"; return WriteAliasName(out, str); } bool WriteAnchor(ostream& out, const std::string& str) { out << "&"; return WriteAliasName(out, str); } bool WriteTag(ostream& out, const std::string& str) { out << "!<"; StringCharSource buffer(str.c_str(), str.size()); while(buffer) { int n = Exp::URI().Match(buffer); if(n <= 0) return false; while(--n >= 0) { out << buffer[0]; ++buffer; } } out << ">"; return true; } } } rivet-1.8.3/src/Tools/yaml-cpp/parserstate.h0000644000175000017500000000173412116077762017205 0ustar sunsun#pragma once #ifndef PARSERSTATE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define PARSERSTATE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include #include #include #include namespace YAML { struct Version { bool isDefault; int major, minor; }; struct ParserState { enum COLLECTION_TYPE { NONE, BLOCK_MAP, BLOCK_SEQ, FLOW_MAP, FLOW_SEQ, COMPACT_MAP }; ParserState(); const std::string TranslateTagHandle(const std::string& handle) const; COLLECTION_TYPE GetCurCollectionType() const { if(collectionStack.empty()) return NONE; return collectionStack.top(); } void PushCollectionType(COLLECTION_TYPE type) { collectionStack.push(type); } void PopCollectionType(COLLECTION_TYPE type) { assert(type == GetCurCollectionType()); collectionStack.pop(); } Version version; std::map tags; std::stack collectionStack; }; } #endif // PARSERSTATE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/map.h0000644000175000017500000000254312116077762015424 0ustar sunsun#pragma once #ifndef MAP_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define MAP_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include "content.h" #include #include namespace YAML { class Node; class Map: public Content { private: typedef std::map node_map; public: Map(); Map(const node_map& data); virtual ~Map(); void Clear(); virtual Content *Clone() const; virtual bool GetBegin(std::map ::const_iterator& it) const; virtual bool GetEnd(std::map ::const_iterator& it) const; virtual std::size_t GetSize() const; virtual void Parse(Scanner *pScanner, ParserState& state); virtual void Write(Emitter& out) const; virtual bool IsMap() const { return true; } // ordering virtual int Compare(Content *pContent); virtual int Compare(Scalar *) { return 1; } virtual int Compare(Sequence *) { return 1; } virtual int Compare(Map *pMap); private: void ParseBlock(Scanner *pScanner, ParserState& state); void ParseFlow(Scanner *pScanner, ParserState& state); void ParseCompact(Scanner *pScanner, ParserState& state); void ParseCompactWithNoKey(Scanner *pScanner, ParserState& state); void AddEntry(std::auto_ptr pKey, std::auto_ptr pValue); private: node_map m_data; }; } #endif // MAP_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/emitterstate.cpp0000644000175000017500000001363512116077762017720 0ustar sunsun#include "emitterstate.h" #include "exceptions.h" namespace YAML { EmitterState::EmitterState(): m_isGood(true), m_curIndent(0), m_requiresSeparation(false) { // start up m_stateStack.push(ES_WAITING_FOR_DOC); // set default global manipulators m_charset.set(EmitNonAscii); m_strFmt.set(Auto); m_boolFmt.set(TrueFalseBool); m_boolLengthFmt.set(LongBool); m_boolCaseFmt.set(LowerCase); m_intFmt.set(Dec); m_indent.set(2); m_preCommentIndent.set(2); m_postCommentIndent.set(1); m_seqFmt.set(Block); m_mapFmt.set(Block); m_mapKeyFmt.set(Auto); } EmitterState::~EmitterState() { while(!m_groups.empty()) _PopGroup(); } std::auto_ptr EmitterState::_PopGroup() { if(m_groups.empty()) return std::auto_ptr (0); std::auto_ptr pGroup(m_groups.top()); m_groups.pop(); return pGroup; } // SetLocalValue // . We blindly tries to set all possible formatters to this value // . Only the ones that make sense will be accepted void EmitterState::SetLocalValue(EMITTER_MANIP value) { SetOutputCharset(value, LOCAL); SetStringFormat(value, LOCAL); SetBoolFormat(value, LOCAL); SetBoolCaseFormat(value, LOCAL); SetBoolLengthFormat(value, LOCAL); SetIntFormat(value, LOCAL); SetFlowType(GT_SEQ, value, LOCAL); SetFlowType(GT_MAP, value, LOCAL); SetMapKeyFormat(value, LOCAL); } void EmitterState::BeginGroup(GROUP_TYPE type) { unsigned lastIndent = (m_groups.empty() ? 0 : m_groups.top()->indent); m_curIndent += lastIndent; std::auto_ptr pGroup(new Group(type)); // transfer settings (which last until this group is done) pGroup->modifiedSettings = m_modifiedSettings; // set up group pGroup->flow = GetFlowType(type); pGroup->indent = GetIndent(); pGroup->usingLongKey = (GetMapKeyFormat() == LongKey ? true : false); m_groups.push(pGroup.release()); } void EmitterState::EndGroup(GROUP_TYPE type) { if(m_groups.empty()) return SetError(ErrorMsg::UNMATCHED_GROUP_TAG); // get rid of the current group { std::auto_ptr pFinishedGroup = _PopGroup(); if(pFinishedGroup->type != type) return SetError(ErrorMsg::UNMATCHED_GROUP_TAG); } // reset old settings unsigned lastIndent = (m_groups.empty() ? 0 : m_groups.top()->indent); assert(m_curIndent >= lastIndent); m_curIndent -= lastIndent; // some global settings that we changed may have been overridden // by a local setting we just popped, so we need to restore them m_globalModifiedSettings.restore(); } GROUP_TYPE EmitterState::GetCurGroupType() const { if(m_groups.empty()) return GT_NONE; return m_groups.top()->type; } FLOW_TYPE EmitterState::GetCurGroupFlowType() const { if(m_groups.empty()) return FT_NONE; return (m_groups.top()->flow == Flow ? FT_FLOW : FT_BLOCK); } bool EmitterState::CurrentlyInLongKey() { if(m_groups.empty()) return false; return m_groups.top()->usingLongKey; } void EmitterState::StartLongKey() { if(!m_groups.empty()) m_groups.top()->usingLongKey = true; } void EmitterState::StartSimpleKey() { if(!m_groups.empty()) m_groups.top()->usingLongKey = false; } void EmitterState::ClearModifiedSettings() { m_modifiedSettings.clear(); } bool EmitterState::SetOutputCharset(EMITTER_MANIP value, FMT_SCOPE scope) { switch(value) { case EmitNonAscii: case EscapeNonAscii: _Set(m_charset, value, scope); return true; default: return false; } } bool EmitterState::SetStringFormat(EMITTER_MANIP value, FMT_SCOPE scope) { switch(value) { case Auto: case SingleQuoted: case DoubleQuoted: case Literal: _Set(m_strFmt, value, scope); return true; default: return false; } } bool EmitterState::SetBoolFormat(EMITTER_MANIP value, FMT_SCOPE scope) { switch(value) { case OnOffBool: case TrueFalseBool: case YesNoBool: _Set(m_boolFmt, value, scope); return true; default: return false; } } bool EmitterState::SetBoolLengthFormat(EMITTER_MANIP value, FMT_SCOPE scope) { switch(value) { case LongBool: case ShortBool: _Set(m_boolLengthFmt, value, scope); return true; default: return false; } } bool EmitterState::SetBoolCaseFormat(EMITTER_MANIP value, FMT_SCOPE scope) { switch(value) { case UpperCase: case LowerCase: case CamelCase: _Set(m_boolCaseFmt, value, scope); return true; default: return false; } } bool EmitterState::SetIntFormat(EMITTER_MANIP value, FMT_SCOPE scope) { switch(value) { case Dec: case Hex: case Oct: _Set(m_intFmt, value, scope); return true; default: return false; } } bool EmitterState::SetIndent(unsigned value, FMT_SCOPE scope) { if(value == 0) return false; _Set(m_indent, value, scope); return true; } bool EmitterState::SetPreCommentIndent(unsigned value, FMT_SCOPE scope) { if(value == 0) return false; _Set(m_preCommentIndent, value, scope); return true; } bool EmitterState::SetPostCommentIndent(unsigned value, FMT_SCOPE scope) { if(value == 0) return false; _Set(m_postCommentIndent, value, scope); return true; } bool EmitterState::SetFlowType(GROUP_TYPE groupType, EMITTER_MANIP value, FMT_SCOPE scope) { switch(value) { case Block: case Flow: _Set(groupType == GT_SEQ ? m_seqFmt : m_mapFmt, value, scope); return true; default: return false; } } EMITTER_MANIP EmitterState::GetFlowType(GROUP_TYPE groupType) const { // force flow style if we're currently in a flow FLOW_TYPE flowType = GetCurGroupFlowType(); if(flowType == FT_FLOW) return Flow; // otherwise, go with what's asked of use return (groupType == GT_SEQ ? m_seqFmt.get() : m_mapFmt.get()); } bool EmitterState::SetMapKeyFormat(EMITTER_MANIP value, FMT_SCOPE scope) { switch(value) { case Auto: case LongKey: _Set(m_mapKeyFmt, value, scope); return true; default: return false; } } } rivet-1.8.3/src/Tools/yaml-cpp/aliascontent.cpp0000644000175000017500000000321212116077762017660 0ustar sunsun#include "aliascontent.h" namespace YAML { AliasContent::AliasContent(Content* pNodeContent) : m_pRef(pNodeContent) { } Content *AliasContent::Clone() const { return 0; // TODO: how to clone an alias? } void AliasContent::Parse(Scanner * /*pScanner*/, ParserState& /*state*/) { } void AliasContent::Write(Emitter&) const { // no content (just an alias) } bool AliasContent::GetBegin(std::vector ::const_iterator& i) const { return m_pRef->GetBegin(i); } bool AliasContent::GetBegin(std::map ::const_iterator& i) const { return m_pRef->GetBegin(i); } bool AliasContent::GetEnd(std::vector ::const_iterator& i) const { return m_pRef->GetEnd(i); } bool AliasContent::GetEnd(std::map ::const_iterator& i) const { return m_pRef->GetEnd(i); } Node* AliasContent::GetNode(std::size_t n) const { return m_pRef->GetNode(n); } std::size_t AliasContent::GetSize() const { return m_pRef->GetSize(); } bool AliasContent::IsScalar() const { return m_pRef->IsScalar(); } bool AliasContent::IsMap() const { return m_pRef->IsMap(); } bool AliasContent::IsSequence() const { return m_pRef->IsSequence(); } bool AliasContent::GetScalar(std::string& scalar) const { return m_pRef->GetScalar(scalar); } int AliasContent::Compare(Content *pContent) { return m_pRef->Compare(pContent); } int AliasContent::Compare(Scalar *pScalar) { return m_pRef->Compare(pScalar); } int AliasContent::Compare(Sequence *pSequence) { return m_pRef->Compare(pSequence); } int AliasContent::Compare(Map *pMap) { return m_pRef->Compare(pMap); } } rivet-1.8.3/src/Tools/yaml-cpp/regeximpl.h0000644000175000017500000001063212116077762016641 0ustar sunsun#pragma once #ifndef REGEXIMPL_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define REGEXIMPL_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include "stream.h" #include "stringsource.h" #include "streamcharsource.h" namespace YAML { // query matches inline bool RegEx::Matches(char ch) const { std::string str; str += ch; return Matches(str); } inline bool RegEx::Matches(const std::string& str) const { return Match(str) >= 0; } inline bool RegEx::Matches(const Stream& in) const { return Match(in) >= 0; } template inline bool RegEx::Matches(const Source& source) const { return Match(source) >= 0; } // Match // . Matches the given string against this regular expression. // . Returns the number of characters matched. // . Returns -1 if no characters were matched (the reason for // not returning zero is that we may have an empty regex // which is ALWAYS successful at matching zero characters). // . REMEMBER that we only match from the start of the buffer! inline int RegEx::Match(const std::string& str) const { StringCharSource source(str.c_str(), str.size()); return Match(source); } inline int RegEx::Match(const Stream& in) const { StreamCharSource source(in); return Match(source); } template inline bool RegEx::IsValidSource(const Source& source) const { return source; } template<> inline bool RegEx::IsValidSource(const StringCharSource&source) const { return source || m_op == REGEX_EMPTY; } template inline int RegEx::Match(const Source& source) const { return IsValidSource(source) ? MatchUnchecked(source) : -1; } template inline int RegEx::MatchUnchecked(const Source& source) const { switch(m_op) { case REGEX_EMPTY: return MatchOpEmpty(source); case REGEX_MATCH: return MatchOpMatch(source); case REGEX_RANGE: return MatchOpRange(source); case REGEX_OR: return MatchOpOr(source); case REGEX_AND: return MatchOpAnd(source); case REGEX_NOT: return MatchOpNot(source); case REGEX_SEQ: return MatchOpSeq(source); } return -1; } ////////////////////////////////////////////////////////////////////////////// // Operators // Note: the convention MatchOp* is that we can assume IsSourceValid(source). // So we do all our checks *before* we call these functions // EmptyOperator template inline int RegEx::MatchOpEmpty(const Source& source) const { return source[0] == Stream::eof() ? 0 : -1; } template <> inline int RegEx::MatchOpEmpty(const StringCharSource& source) const { return !source ? 0 : -1; // the empty regex only is successful on the empty string } // MatchOperator template inline int RegEx::MatchOpMatch(const Source& source) const { if(source[0] != m_a) return -1; return 1; } // RangeOperator template inline int RegEx::MatchOpRange(const Source& source) const { if(m_a > source[0] || m_z < source[0]) return -1; return 1; } // OrOperator template inline int RegEx::MatchOpOr(const Source& source) const { for(std::size_t i=0;i= 0) return n; } return -1; } // AndOperator // Note: 'AND' is a little funny, since we may be required to match things // of different lengths. If we find a match, we return the length of // the FIRST entry on the list. template inline int RegEx::MatchOpAnd(const Source& source) const { int first = -1; for(std::size_t i=0;i inline int RegEx::MatchOpNot(const Source& source) const { if(m_params.empty()) return -1; if(m_params[0].MatchUnchecked(source) >= 0) return -1; return 1; } // SeqOperator template inline int RegEx::MatchOpSeq(const Source& source) const { int offset = 0; for(std::size_t i=0;i #include namespace YAML { class Node; // IterPriv // . The implementation for iterators - essentially a union of sequence and map iterators. struct IterPriv { IterPriv(): type(IT_NONE) {} IterPriv(std::vector ::const_iterator it): type(IT_SEQ), seqIter(it) {} IterPriv(std::map ::const_iterator it): type(IT_MAP), mapIter(it) {} enum ITER_TYPE { IT_NONE, IT_SEQ, IT_MAP }; ITER_TYPE type; std::vector ::const_iterator seqIter; std::map ::const_iterator mapIter; }; } #endif // ITERPRIV_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/stlnode.h0000644000175000017500000000122412116077762016312 0ustar sunsun#pragma once #ifndef STLNODE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define STLNODE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include #include namespace YAML { template void operator >> (const Node& node, std::vector& v) { v.clear(); v.resize(node.size()); for(unsigned i=0;i> v[i]; } template void operator >> (const Node& node, std::map& m) { m.clear(); for(Iterator it=node.begin();it!=node.end();++it) { K k; V v; it.first() >> k; it.second() >> v; m[k] = v; } } } #endif // STLNODE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/map.cpp0000644000175000017500000001255612116077762015764 0ustar sunsun#include "map.h" #include "node.h" #include "scanner.h" #include "token.h" #include "exceptions.h" #include "emitter.h" namespace YAML { Map::Map() { } Map::Map(const node_map& data) { for(node_map::const_iterator it=data.begin();it!=data.end();++it) { std::auto_ptr pKey = it->first->Clone(); std::auto_ptr pValue = it->second->Clone(); AddEntry(pKey, pValue); } } Map::~Map() { Clear(); } void Map::Clear() { for(node_map::const_iterator it=m_data.begin();it!=m_data.end();++it) { delete it->first; delete it->second; } m_data.clear(); } Content *Map::Clone() const { return new Map(m_data); } bool Map::GetBegin(std::map ::const_iterator& it) const { it = m_data.begin(); return true; } bool Map::GetEnd(std::map ::const_iterator& it) const { it = m_data.end(); return true; } std::size_t Map::GetSize() const { return m_data.size(); } void Map::Parse(Scanner *pScanner, ParserState& state) { Clear(); // split based on start token switch(pScanner->peek().type) { case Token::BLOCK_MAP_START: ParseBlock(pScanner, state); break; case Token::FLOW_MAP_START: ParseFlow(pScanner, state); break; case Token::KEY: ParseCompact(pScanner, state); break; case Token::VALUE: ParseCompactWithNoKey(pScanner, state); break; default: break; } } void Map::ParseBlock(Scanner *pScanner, ParserState& state) { // eat start token pScanner->pop(); state.PushCollectionType(ParserState::BLOCK_MAP); while(1) { if(pScanner->empty()) throw ParserException(Mark::null(), ErrorMsg::END_OF_MAP); Token token = pScanner->peek(); if(token.type != Token::KEY && token.type != Token::VALUE && token.type != Token::BLOCK_MAP_END) throw ParserException(token.mark, ErrorMsg::END_OF_MAP); if(token.type == Token::BLOCK_MAP_END) { pScanner->pop(); break; } std::auto_ptr pKey(new Node), pValue(new Node); // grab key (if non-null) if(token.type == Token::KEY) { pScanner->pop(); pKey->Parse(pScanner, state); } // now grab value (optional) if(!pScanner->empty() && pScanner->peek().type == Token::VALUE) { pScanner->pop(); pValue->Parse(pScanner, state); } AddEntry(pKey, pValue); } state.PopCollectionType(ParserState::BLOCK_MAP); } void Map::ParseFlow(Scanner *pScanner, ParserState& state) { // eat start token pScanner->pop(); state.PushCollectionType(ParserState::FLOW_MAP); while(1) { if(pScanner->empty()) throw ParserException(Mark::null(), ErrorMsg::END_OF_MAP_FLOW); Token& token = pScanner->peek(); // first check for end if(token.type == Token::FLOW_MAP_END) { pScanner->pop(); break; } std::auto_ptr pKey(new Node), pValue(new Node); // grab key (if non-null) if(token.type == Token::KEY) { pScanner->pop(); pKey->Parse(pScanner, state); } // now grab value (optional) if(!pScanner->empty() && pScanner->peek().type == Token::VALUE) { pScanner->pop(); pValue->Parse(pScanner, state); } // now eat the separator (or could be a map end, which we ignore - but if it's neither, then it's a bad node) Token& nextToken = pScanner->peek(); if(nextToken.type == Token::FLOW_ENTRY) pScanner->pop(); else if(nextToken.type != Token::FLOW_MAP_END) throw ParserException(nextToken.mark, ErrorMsg::END_OF_MAP_FLOW); AddEntry(pKey, pValue); } state.PopCollectionType(ParserState::FLOW_MAP); } // ParseCompact // . Single "key: value" pair in a flow sequence void Map::ParseCompact(Scanner *pScanner, ParserState& state) { state.PushCollectionType(ParserState::COMPACT_MAP); std::auto_ptr pKey(new Node), pValue(new Node); // grab key pScanner->pop(); pKey->Parse(pScanner, state); // now grab value (optional) if(!pScanner->empty() && pScanner->peek().type == Token::VALUE) { pScanner->pop(); pValue->Parse(pScanner, state); } AddEntry(pKey, pValue); state.PopCollectionType(ParserState::COMPACT_MAP); } // ParseCompactWithNoKey // . Single ": value" pair in a flow sequence void Map::ParseCompactWithNoKey(Scanner *pScanner, ParserState& state) { state.PushCollectionType(ParserState::COMPACT_MAP); std::auto_ptr pKey(new Node), pValue(new Node); // grab value pScanner->pop(); pValue->Parse(pScanner, state); AddEntry(pKey, pValue); state.PopCollectionType(ParserState::COMPACT_MAP); } void Map::AddEntry(std::auto_ptr pKey, std::auto_ptr pValue) { node_map::const_iterator it = m_data.find(pKey.get()); if(it != m_data.end()) return; m_data[pKey.release()] = pValue.release(); } void Map::Write(Emitter& out) const { out << BeginMap; for(node_map::const_iterator it=m_data.begin();it!=m_data.end();++it) out << Key << *it->first << Value << *it->second; out << EndMap; } int Map::Compare(Content *pContent) { return -pContent->Compare(this); } int Map::Compare(Map *pMap) { node_map::const_iterator it = m_data.begin(), jt = pMap->m_data.begin(); while(1) { if(it == m_data.end()) { if(jt == pMap->m_data.end()) return 0; else return -1; } if(jt == pMap->m_data.end()) return 1; int cmp = it->first->Compare(*jt->first); if(cmp != 0) return cmp; cmp = it->second->Compare(*jt->second); if(cmp != 0) return cmp; } return 0; } } rivet-1.8.3/src/Tools/yaml-cpp/mark.h0000644000175000017500000000067412116077762015604 0ustar sunsun#pragma once #ifndef MARK_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define MARK_H_62B23520_7C8E_11DE_8A39_0800200C9A66 namespace YAML { struct Mark { Mark(): pos(0), line(0), column(0) {} static const Mark null() { return Mark(-1, -1, -1); } int pos; int line, column; private: Mark(int pos_, int line_, int column_): pos(pos_), line(line_), column(column_) {} }; } #endif // MARK_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/scantag.cpp0000644000175000017500000000261512116077762016622 0ustar sunsun#include "scanner.h" #include "regex.h" #include "exp.h" #include "exceptions.h" namespace YAML { const std::string ScanVerbatimTag(Stream& INPUT) { std::string tag; // eat the start character INPUT.get(); while(INPUT) { if(INPUT.peek() == Keys::VerbatimTagEnd) { // eat the end character INPUT.get(); return tag; } int n = Exp::URI().Match(INPUT); if(n <= 0) break; tag += INPUT.get(n); } throw ParserException(INPUT.mark(), ErrorMsg::END_OF_VERBATIM_TAG); } const std::string ScanTagHandle(Stream& INPUT, bool& canBeHandle) { std::string tag; canBeHandle = true; Mark firstNonWordChar; while(INPUT) { if(INPUT.peek() == Keys::Tag) { if(!canBeHandle) throw ParserException(firstNonWordChar, ErrorMsg::CHAR_IN_TAG_HANDLE); break; } int n = 0; if(canBeHandle) { n = Exp::Word().Match(INPUT); if(n <= 0) { canBeHandle = false; firstNonWordChar = INPUT.mark(); } } if(!canBeHandle) n = Exp::Tag().Match(INPUT); if(n <= 0) break; tag += INPUT.get(n); } return tag; } const std::string ScanTagSuffix(Stream& INPUT) { std::string tag; while(INPUT) { int n = Exp::Tag().Match(INPUT); if(n <= 0) break; tag += INPUT.get(n); } if(tag.empty()) throw ParserException(INPUT.mark(), ErrorMsg::TAG_WITH_NO_SUFFIX); return tag; } } rivet-1.8.3/src/Tools/yaml-cpp/yaml.h0000644000175000017500000000050512116077762015605 0ustar sunsun#pragma once #ifndef YAML_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define YAML_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include "parser.h" #include "node.h" #include "stlnode.h" #include "iterator.h" #include "emitter.h" #include "stlemitter.h" #include "exceptions.h" #endif // YAML_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/null.h0000644000175000017500000000065312116077762015621 0ustar sunsun#pragma once #ifndef NULL_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define NULL_H_62B23520_7C8E_11DE_8A39_0800200C9A66 namespace YAML { class Node; struct _Null {}; inline bool operator == (const _Null&, const _Null&) { return true; } inline bool operator != (const _Null&, const _Null&) { return false; } bool IsNull(const Node& node); extern _Null Null; } #endif // NULL_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/indentation.h0000644000175000017500000000125312116077762017160 0ustar sunsun#pragma once #ifndef INDENTATION_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define INDENTATION_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include "ostream.h" #include namespace YAML { struct Indentation { Indentation(unsigned n_): n(n_) {} unsigned n; }; inline ostream& operator << (ostream& out, const Indentation& indent) { for(unsigned i=0;i #include #include #include #include namespace YAML { static const size_t MAX_PARSER_PUSHBACK = 8; class Stream: private noncopyable { public: friend class StreamCharSource; Stream(std::istream& input); ~Stream(); operator bool() const; bool operator !() const { return !static_cast (*this); } char peek() const; char get(); std::string get(int n); void eat(int n = 1); static char eof() { return 0x04; } const Mark mark() const { return m_mark; } int pos() const { return m_mark.pos; } int line() const { return m_mark.line; } int column() const { return m_mark.column; } void ResetColumn() { m_mark.column = 0; } private: enum CharacterSet {utf8, utf16le, utf16be, utf32le, utf32be}; std::istream& m_input; Mark m_mark; CharacterSet m_charSet; unsigned char m_bufPushback[MAX_PARSER_PUSHBACK]; mutable size_t m_nPushedBack; mutable std::deque m_readahead; unsigned char* const m_pPrefetched; mutable size_t m_nPrefetchedAvailable; mutable size_t m_nPrefetchedUsed; void AdvanceCurrent(); char CharAt(size_t i) const; bool ReadAheadTo(size_t i) const; bool _ReadAheadTo(size_t i) const; void StreamInUtf8() const; void StreamInUtf16() const; void StreamInUtf32() const; unsigned char GetNextByte() const; }; // CharAt // . Unchecked access inline char Stream::CharAt(size_t i) const { return m_readahead[i]; } inline bool Stream::ReadAheadTo(size_t i) const { if(m_readahead.size() > i) return true; return _ReadAheadTo(i); } } #endif // STREAM_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/parser.cpp0000644000175000017500000000676712116077762016512 0ustar sunsun#include "parser.h" #include "scanner.h" #include "token.h" #include "exceptions.h" #include "parserstate.h" #include #include namespace YAML { Parser::Parser() { } Parser::Parser(std::istream& in) { Load(in); } Parser::~Parser() { } Parser::operator bool() const { return m_pScanner.get() && !m_pScanner->empty(); } void Parser::Load(std::istream& in) { m_pScanner.reset(new Scanner(in)); m_pState.reset(new ParserState); } // GetNextDocument // . Reads the next document in the queue (of tokens). // . Throws a ParserException on error. bool Parser::GetNextDocument(Node& document) { if(!m_pScanner.get()) return false; // clear node document.Clear(); // first read directives ParseDirectives(); // we better have some tokens in the queue if(m_pScanner->empty()) return false; // first eat doc start (optional) if(m_pScanner->peek().type == Token::DOC_START) m_pScanner->pop(); // now parse our root node document.Parse(m_pScanner.get(), *m_pState); // and finally eat any doc ends we see while(!m_pScanner->empty() && m_pScanner->peek().type == Token::DOC_END) m_pScanner->pop(); // clear anchors from the scanner, which are no longer relevant m_pScanner->ClearAnchors(); return true; } // ParseDirectives // . Reads any directives that are next in the queue. void Parser::ParseDirectives() { bool readDirective = false; while(1) { if(m_pScanner->empty()) break; Token& token = m_pScanner->peek(); if(token.type != Token::DIRECTIVE) break; // we keep the directives from the last document if none are specified; // but if any directives are specific, then we reset them if(!readDirective) m_pState.reset(new ParserState); readDirective = true; HandleDirective(token); m_pScanner->pop(); } } void Parser::HandleDirective(const Token& token) { if(token.value == "YAML") HandleYamlDirective(token); else if(token.value == "TAG") HandleTagDirective(token); } // HandleYamlDirective // . Should be of the form 'major.minor' (like a version number) void Parser::HandleYamlDirective(const Token& token) { if(token.params.size() != 1) throw ParserException(token.mark, ErrorMsg::YAML_DIRECTIVE_ARGS); if(!m_pState->version.isDefault) throw ParserException(token.mark, ErrorMsg::REPEATED_YAML_DIRECTIVE); std::stringstream str(token.params[0]); str >> m_pState->version.major; str.get(); str >> m_pState->version.minor; if(!str || str.peek() != EOF) throw ParserException(token.mark, ErrorMsg::YAML_VERSION + token.params[0]); if(m_pState->version.major > 1) throw ParserException(token.mark, ErrorMsg::YAML_MAJOR_VERSION); m_pState->version.isDefault = false; // TODO: warning on major == 1, minor > 2? } // HandleTagDirective // . Should be of the form 'handle prefix', where 'handle' is converted to 'prefix' in the file. void Parser::HandleTagDirective(const Token& token) { if(token.params.size() != 2) throw ParserException(token.mark, ErrorMsg::TAG_DIRECTIVE_ARGS); const std::string& handle = token.params[0]; const std::string& prefix = token.params[1]; if(m_pState->tags.find(handle) != m_pState->tags.end()) throw ParserException(token.mark, ErrorMsg::REPEATED_TAG_DIRECTIVE); m_pState->tags[handle] = prefix; } void Parser::PrintTokens(std::ostream& out) { if(!m_pScanner.get()) return; while(1) { if(m_pScanner->empty()) break; out << m_pScanner->peek() << "\n"; m_pScanner->pop(); } } } rivet-1.8.3/src/Tools/yaml-cpp/content.h0000644000175000017500000000302312116077762016313 0ustar sunsun#pragma once #ifndef CONTENT_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define CONTENT_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include #include #include "parserstate.h" #include "exceptions.h" #include "ltnode.h" namespace YAML { class Scanner; class Parser; class Node; class Scalar; class Sequence; class Map; class Emitter; class Content { public: Content() {} virtual ~Content() {} virtual Content *Clone() const = 0; virtual void Parse(Scanner *pScanner, ParserState& state) = 0; virtual void Write(Emitter& out) const = 0; virtual bool GetBegin(std::vector ::const_iterator&) const { return false; } virtual bool GetBegin(std::map ::const_iterator&) const { return false; } virtual bool GetEnd(std::vector ::const_iterator&) const { return false; } virtual bool GetEnd(std::map ::const_iterator&) const { return false; } virtual Node *GetNode(std::size_t) const { return 0; } virtual std::size_t GetSize() const { return 0; } virtual bool IsScalar() const { return false; } virtual bool IsMap() const { return false; } virtual bool IsSequence() const { return false; } // extraction virtual bool GetScalar(std::string&) const { return false; } // ordering virtual int Compare(Content *) { return 0; } virtual int Compare(Scalar *) { return 0; } virtual int Compare(Sequence *) { return 0; } virtual int Compare(Map *) { return 0; } protected: }; } #endif // CONTENT_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/scalar.h0000644000175000017500000000156012116077762016112 0ustar sunsun#pragma once #ifndef SCALAR_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define SCALAR_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include "content.h" #include namespace YAML { class Scalar: public Content { public: Scalar(); Scalar(const std::string& data); virtual ~Scalar(); virtual Content *Clone() const; virtual void Parse(Scanner *pScanner, ParserState& state); virtual void Write(Emitter& out) const; virtual bool IsScalar() const { return true; } // extraction virtual bool GetScalar(std::string& scalar) const { scalar = m_data; return true; } // ordering virtual int Compare(Content *pContent); virtual int Compare(Scalar *pScalar); virtual int Compare(Sequence *) { return -1; } virtual int Compare(Map *) { return -1; } protected: std::string m_data; }; } #endif // SCALAR_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/scanscalar.h0000644000175000017500000000353312116077762016761 0ustar sunsun#pragma once #ifndef SCANSCALAR_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define SCANSCALAR_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include #include "regex.h" #include "stream.h" namespace YAML { enum CHOMP { STRIP = -1, CLIP, KEEP }; enum ACTION { NONE, BREAK, THROW }; enum FOLD { DONT_FOLD, FOLD_BLOCK, FOLD_FLOW }; struct ScanScalarParams { ScanScalarParams(): eatEnd(false), indent(0), detectIndent(false), eatLeadingWhitespace(0), escape(0), fold(DONT_FOLD), trimTrailingSpaces(0), chomp(CLIP), onDocIndicator(NONE), onTabInIndentation(NONE), leadingSpaces(false) {} // input: RegEx end; // what condition ends this scalar? bool eatEnd; // should we eat that condition when we see it? int indent; // what level of indentation should be eaten and ignored? bool detectIndent; // should we try to autodetect the indent? bool eatLeadingWhitespace; // should we continue eating this delicious indentation after 'indent' spaces? char escape; // what character do we escape on (i.e., slash or single quote) (0 for none) FOLD fold; // how do we fold line ends? bool trimTrailingSpaces; // do we remove all trailing spaces (at the very end) CHOMP chomp; // do we strip, clip, or keep trailing newlines (at the very end) // Note: strip means kill all, clip means keep at most one, keep means keep all ACTION onDocIndicator; // what do we do if we see a document indicator? ACTION onTabInIndentation; // what do we do if we see a tab where we should be seeing indentation spaces // output: bool leadingSpaces; }; std::string ScanScalar(Stream& INPUT, ScanScalarParams& info); } #endif // SCANSCALAR_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/scanner.cpp0000644000175000017500000002446012116077762016635 0ustar sunsun#include "scanner.h" #include "token.h" #include "exceptions.h" #include "exp.h" #include #include namespace YAML { Scanner::Scanner(std::istream& in) : INPUT(in), m_startedStream(false), m_endedStream(false), m_simpleKeyAllowed(false), m_canBeJSONFlow(false) { } Scanner::~Scanner() { for(unsigned i=0;i 0) INPUT.ResetColumn(); PopAllIndents(); PopAllSimpleKeys(); m_simpleKeyAllowed = false; m_endedStream = true; } Token *Scanner::PushToken(Token::TYPE type) { m_tokens.push(Token(type, INPUT.mark())); return &m_tokens.back(); } Token::TYPE Scanner::GetStartTokenFor(IndentMarker::INDENT_TYPE type) const { switch(type) { case IndentMarker::SEQ: return Token::BLOCK_SEQ_START; case IndentMarker::MAP: return Token::BLOCK_MAP_START; case IndentMarker::NONE: assert(false); break; } assert(false); } // PushIndentTo // . Pushes an indentation onto the stack, and enqueues the // proper token (sequence start or mapping start). // . Returns the indent marker it generates (if any). Scanner::IndentMarker *Scanner::PushIndentTo(int column, IndentMarker::INDENT_TYPE type) { // are we in flow? if(InFlowContext()) return 0; std::auto_ptr pIndent(new IndentMarker(column, type)); IndentMarker& indent = *pIndent; const IndentMarker& lastIndent = *m_indents.top(); // is this actually an indentation? if(indent.column < lastIndent.column) return 0; if(indent.column == lastIndent.column && !(indent.type == IndentMarker::SEQ && lastIndent.type == IndentMarker::MAP)) return 0; // push a start token indent.pStartToken = PushToken(GetStartTokenFor(type)); // and then the indent m_indents.push(&indent); m_indentRefs.push_back(pIndent.release()); return m_indentRefs.back(); } // PopIndentToHere // . Pops indentations off the stack until we reach the current indentation level, // and enqueues the proper token each time. // . Then pops all invalid indentations off. void Scanner::PopIndentToHere() { // are we in flow? if(InFlowContext()) return; // now pop away while(!m_indents.empty()) { const IndentMarker& indent = *m_indents.top(); if(indent.column < INPUT.column()) break; if(indent.column == INPUT.column() && !(indent.type == IndentMarker::SEQ && !Exp::BlockEntry().Matches(INPUT))) break; PopIndent(); } while(!m_indents.empty() && m_indents.top()->status == IndentMarker::INVALID) PopIndent(); } // PopAllIndents // . Pops all indentations (except for the base empty one) off the stack, // and enqueues the proper token each time. void Scanner::PopAllIndents() { // are we in flow? if(InFlowContext()) return; // now pop away while(!m_indents.empty()) { const IndentMarker& indent = *m_indents.top(); if(indent.type == IndentMarker::NONE) break; PopIndent(); } } // PopIndent // . Pops a single indent, pushing the proper token void Scanner::PopIndent() { const IndentMarker& indent = *m_indents.top(); m_indents.pop(); if(indent.status != IndentMarker::VALID) { InvalidateSimpleKey(); return; } if(indent.type == IndentMarker::SEQ) m_tokens.push(Token(Token::BLOCK_SEQ_END, INPUT.mark())); else if(indent.type == IndentMarker::MAP) m_tokens.push(Token(Token::BLOCK_MAP_END, INPUT.mark())); } // GetTopIndent int Scanner::GetTopIndent() const { if(m_indents.empty()) return 0; return m_indents.top()->column; } // Save // . Saves a pointer to the Node object referenced by a particular anchor // name. void Scanner::Save(const std::string& anchor, Node* value) { m_anchors[anchor] = value; } // Retrieve // . Retrieves a pointer previously saved for an anchor name. // . Throws an exception if the anchor has not been defined. const Node *Scanner::Retrieve(const std::string& anchor) const { typedef std::map map; map::const_iterator itNode = m_anchors.find(anchor); if(m_anchors.end() == itNode) ThrowParserException(ErrorMsg::UNKNOWN_ANCHOR); return itNode->second; } // ThrowParserException // . Throws a ParserException with the current token location // (if available). // . Does not parse any more tokens. void Scanner::ThrowParserException(const std::string& msg) const { Mark mark = Mark::null(); if(!m_tokens.empty()) { const Token& token = m_tokens.front(); mark = token.mark; } throw ParserException(mark, msg); } void Scanner::ClearAnchors() { m_anchors.clear(); } } rivet-1.8.3/src/Tools/yaml-cpp/nodereadimpl.h0000644000175000017500000000365012116077762017312 0ustar sunsun#pragma once namespace YAML { // implementation for Node::Read // (the goal is to call ConvertScalar if we can, and fall back to operator >> if not) // thanks to litb from stackoverflow.com // http://stackoverflow.com/questions/1386183/how-to-call-a-templated-function-if-it-exists-and-something-else-otherwise/1386390#1386390 // Note: this doesn't work on gcc 3.2, but does on gcc 3.4 and above. I'm not sure about 3.3. #if __GNUC__ && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ <= 3)) // trick doesn't work? Just fall back to ConvertScalar. // This means that we can't use any user-defined types as keys in a map template inline bool Node::Read(T& value) const { return ConvertScalar(*this, value); } #else // usual case: the trick! template struct read_impl; // ConvertScalar available template<> struct read_impl { template static bool read(const Node& node, T& value) { return ConvertScalar(node, value); } }; // ConvertScalar not available template<> struct read_impl { template static bool read(const Node& node, T& value) { try { node >> value; } catch(const Exception&) { return false; } return true; } }; namespace fallback { // sizeof > 1 struct flag { char c[2]; }; flag Convert(...); int operator,(flag, flag); template char operator,(flag, T const&); char operator,(int, flag); int operator,(char, flag); } template inline bool Node::Read(T& value) const { using namespace fallback; return read_impl::read(*this, value); } #endif // done with trick // the main conversion function template inline bool ConvertScalar(const Node& node, T& value) { std::string scalar; if(!node.GetScalar(scalar)) return false; return Convert(scalar, value); } } rivet-1.8.3/src/Tools/yaml-cpp/node.h0000644000175000017500000000672312116077762015600 0ustar sunsun#pragma once #ifndef NODE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define NODE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include "conversion.h" #include "exceptions.h" #include "iterator.h" #include "mark.h" #include "noncopyable.h" #include #include #include #include #include namespace YAML { class Content; class Scanner; class Emitter; struct ParserState; enum CONTENT_TYPE { CT_NONE, CT_SCALAR, CT_SEQUENCE, CT_MAP }; class Node: private noncopyable { public: Node(); ~Node(); void Clear(); std::auto_ptr Clone() const; void Parse(Scanner *pScanner, ParserState& state); CONTENT_TYPE GetType() const; // file location of start of this node const Mark GetMark() const { return m_mark; } // accessors Iterator begin() const; Iterator end() const; std::size_t size() const; // extraction of scalars bool GetScalar(std::string& s) const; // we can specialize this for other values template bool Read(T& value) const; template const T Read() const; template operator T() const; template friend void operator >> (const Node& node, T& value); // retrieval for maps and sequences template const Node *FindValue(const T& key) const; template const Node& operator [] (const T& key) const; // specific to maps const Node *FindValue(const char *key) const; const Node& operator [] (const char *key) const; // for anchors/aliases const Node *Identity() const { return m_pIdentity; } bool IsAlias() const { return m_alias; } bool IsReferenced() const { return m_referenced; } // for tags const std::string GetTag() const { return IsAlias() ? m_pIdentity->GetTag() : m_tag; } // emitting friend Emitter& operator << (Emitter& out, const Node& node); // ordering int Compare(const Node& rhs) const; friend bool operator < (const Node& n1, const Node& n2); private: // helper for sequences template friend struct _FindFromNodeAtIndex; const Node *FindAtIndex(std::size_t i) const; // helper for maps template const Node& GetValue(const T& key) const; template const Node *FindValueForKey(const T& key) const; // helper for cloning Node(const Mark& mark, const std::string& anchor, const std::string& tag, const Content *pContent); // helpers for parsing void ParseHeader(Scanner *pScanner, ParserState& state); void ParseTag(Scanner *pScanner, ParserState& state); void ParseAnchor(Scanner *pScanner, ParserState& state); void ParseAlias(Scanner *pScanner, ParserState& state); private: Mark m_mark; std::string m_anchor, m_tag; Content *m_pContent; bool m_alias; const Node *m_pIdentity; mutable bool m_referenced; }; // comparisons with auto-conversion template bool operator == (const T& value, const Node& node); template bool operator == (const Node& node, const T& value); template bool operator != (const T& value, const Node& node); template bool operator != (const Node& node, const T& value); bool operator == (const char *value, const Node& node); bool operator == (const Node& node, const char *value); bool operator != (const char *value, const Node& node); bool operator != (const Node& node, const char *value); } #include "nodeimpl.h" #include "nodereadimpl.h" #endif // NODE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/stream.cpp0000644000175000017500000003101412116077762016470 0ustar sunsun#include "stream.h" #include #include "exp.h" #ifndef YAML_PREFETCH_SIZE #define YAML_PREFETCH_SIZE 2048 #endif #define S_ARRAY_SIZE( A ) (sizeof(A)/sizeof(*(A))) #define S_ARRAY_END( A ) ((A) + S_ARRAY_SIZE(A)) #define CP_REPLACEMENT_CHARACTER (0xFFFD) namespace YAML { enum UtfIntroState { uis_start, uis_utfbe_b1, uis_utf32be_b2, uis_utf32be_bom3, uis_utf32be, uis_utf16be, uis_utf16be_bom1, uis_utfle_bom1, uis_utf16le_bom2, uis_utf32le_bom3, uis_utf16le, uis_utf32le, uis_utf8_imp, uis_utf16le_imp, uis_utf32le_imp3, uis_utf8_bom1, uis_utf8_bom2, uis_utf8, uis_error }; enum UtfIntroCharType { uict00, uictBB, uictBF, uictEF, uictFE, uictFF, uictAscii, uictOther, uictMax }; static bool s_introFinalState[] = { false, //uis_start false, //uis_utfbe_b1 false, //uis_utf32be_b2 false, //uis_utf32be_bom3 true, //uis_utf32be true, //uis_utf16be false, //uis_utf16be_bom1 false, //uis_utfle_bom1 false, //uis_utf16le_bom2 false, //uis_utf32le_bom3 true, //uis_utf16le true, //uis_utf32le false, //uis_utf8_imp false, //uis_utf16le_imp false, //uis_utf32le_imp3 false, //uis_utf8_bom1 false, //uis_utf8_bom2 true, //uis_utf8 true, //uis_error }; static UtfIntroState s_introTransitions[][uictMax] = { // uict00, uictBB, uictBF, uictEF, uictFE, uictFF, uictAscii, uictOther {uis_utfbe_b1, uis_utf8, uis_utf8, uis_utf8_bom1, uis_utf16be_bom1, uis_utfle_bom1, uis_utf8_imp, uis_utf8}, {uis_utf32be_b2, uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf16be, uis_utf8}, {uis_utf32be, uis_utf8, uis_utf8, uis_utf8, uis_utf32be_bom3, uis_utf8, uis_utf8, uis_utf8}, {uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf32be, uis_utf8, uis_utf8}, {uis_utf32be, uis_utf32be, uis_utf32be, uis_utf32be, uis_utf32be, uis_utf32be, uis_utf32be, uis_utf32be}, {uis_utf16be, uis_utf16be, uis_utf16be, uis_utf16be, uis_utf16be, uis_utf16be, uis_utf16be, uis_utf16be}, {uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf16be, uis_utf8, uis_utf8}, {uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf16le_bom2, uis_utf8, uis_utf8, uis_utf8}, {uis_utf32le_bom3, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le}, {uis_utf32le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le}, {uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le}, {uis_utf32le, uis_utf32le, uis_utf32le, uis_utf32le, uis_utf32le, uis_utf32le, uis_utf32le, uis_utf32le}, {uis_utf16le_imp, uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf8}, {uis_utf32le_imp3, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le}, {uis_utf32le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le, uis_utf16le}, {uis_utf8, uis_utf8_bom2, uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf8}, {uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf8}, {uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf8, uis_utf8}, }; static char s_introUngetCount[][uictMax] = { // uict00, uictBB, uictBF, uictEF, uictFE, uictFF, uictAscii, uictOther {0, 1, 1, 0, 0, 0, 0, 1}, {0, 2, 2, 2, 2, 2, 2, 2}, {3, 3, 3, 3, 0, 3, 3, 3}, {4, 4, 4, 4, 4, 0, 4, 4}, {1, 1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1, 1}, {2, 2, 2, 2, 2, 0, 2, 2}, {2, 2, 2, 2, 0, 2, 2, 2}, {0, 1, 1, 1, 1, 1, 1, 1}, {0, 2, 2, 2, 2, 2, 2, 2}, {1, 1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 1, 1}, {0, 2, 2, 2, 2, 2, 2, 2}, {0, 3, 3, 3, 3, 3, 3, 3}, {4, 4, 4, 4, 4, 4, 4, 4}, {2, 0, 2, 2, 2, 2, 2, 2}, {3, 3, 0, 3, 3, 3, 3, 3}, {1, 1, 1, 1, 1, 1, 1, 1}, }; inline UtfIntroCharType IntroCharTypeOf(std::istream::int_type ch) { if (std::istream::traits_type::eof() == ch) { return uictOther; } switch (ch) { case 0: return uict00; case 0xBB: return uictBB; case 0xBF: return uictBF; case 0xEF: return uictEF; case 0xFE: return uictFE; case 0xFF: return uictFF; } if ((ch > 0) && (ch < 0xFF)) { return uictAscii; } return uictOther; } inline char Utf8Adjust(unsigned long ch, unsigned char lead_bits, unsigned char rshift) { const unsigned char header = ((1 << lead_bits) - 1) << (8 - lead_bits); const unsigned char mask = (0xFF >> (lead_bits + 1)); return static_cast(static_cast( header | ((ch >> rshift) & mask) )); } inline void QueueUnicodeCodepoint(std::deque& q, unsigned long ch) { // We are not allowed to queue the Stream::eof() codepoint, so // replace it with CP_REPLACEMENT_CHARACTER if (static_cast(Stream::eof()) == ch) { ch = CP_REPLACEMENT_CHARACTER; } if (ch < 0x80) { q.push_back(Utf8Adjust(ch, 0, 0)); } else if (ch < 0x800) { q.push_back(Utf8Adjust(ch, 2, 6)); q.push_back(Utf8Adjust(ch, 1, 0)); } else if (ch < 0x10000) { q.push_back(Utf8Adjust(ch, 3, 12)); q.push_back(Utf8Adjust(ch, 1, 6)); q.push_back(Utf8Adjust(ch, 1, 0)); } else { q.push_back(Utf8Adjust(ch, 4, 18)); q.push_back(Utf8Adjust(ch, 1, 12)); q.push_back(Utf8Adjust(ch, 1, 6)); q.push_back(Utf8Adjust(ch, 1, 0)); } } Stream::Stream(std::istream& input) : m_input(input), m_nPushedBack(0), m_pPrefetched(new unsigned char[YAML_PREFETCH_SIZE]), m_nPrefetchedAvailable(0), m_nPrefetchedUsed(0) { typedef std::istream::traits_type char_traits; if(!input) return; // Determine (or guess) the character-set by reading the BOM, if any. See // the YAML specification for the determination algorithm. char_traits::int_type intro[4]; int nIntroUsed = 0; UtfIntroState state = uis_start; for (; !s_introFinalState[state]; ) { std::istream::int_type ch = input.get(); intro[nIntroUsed++] = ch; UtfIntroCharType charType = IntroCharTypeOf(ch); UtfIntroState newState = s_introTransitions[state][charType]; int nUngets = s_introUngetCount[state][charType]; if (nUngets > 0) { for (; nUngets > 0; --nUngets) { if (char_traits::eof() != intro[--nIntroUsed]) { m_bufPushback[m_nPushedBack++] = char_traits::to_char_type(intro[nIntroUsed]); } } } state = newState; } switch (state) { case uis_utf8: m_charSet = utf8; break; case uis_utf16le: m_charSet = utf16le; break; case uis_utf16be: m_charSet = utf16be; break; case uis_utf32le: m_charSet = utf32le; break; case uis_utf32be: m_charSet = utf32be; break; default: m_charSet = utf8; break; } ReadAheadTo(0); } Stream::~Stream() { delete[] m_pPrefetched; } char Stream::peek() const { if (m_readahead.empty()) { return Stream::eof(); } return m_readahead[0]; } Stream::operator bool() const { return m_input.good() || (!m_readahead.empty() && m_readahead[0] != Stream::eof()); } // get // . Extracts a character from the stream and updates our position char Stream::get() { char ch = peek(); AdvanceCurrent(); m_mark.column++; if(ch == '\n') { m_mark.column = 0; m_mark.line++; } return ch; } // get // . Extracts 'n' characters from the stream and updates our position std::string Stream::get(int n) { std::string ret; ret.reserve(n); for(int i=0;i i; } void Stream::StreamInUtf8() const { unsigned char b = GetNextByte(); if (m_input.good()) { m_readahead.push_back(b); } } void Stream::StreamInUtf16() const { unsigned long ch = 0; unsigned char bytes[2]; int nBigEnd = (m_charSet == utf16be) ? 0 : 1; bytes[0] = GetNextByte(); bytes[1] = GetNextByte(); if (!m_input.good()) { return; } ch = (static_cast(bytes[nBigEnd]) << 8) | static_cast(bytes[1 ^ nBigEnd]); if (ch >= 0xDC00 && ch < 0xE000) { // Trailing (low) surrogate...ugh, wrong order QueueUnicodeCodepoint(m_readahead, CP_REPLACEMENT_CHARACTER); return; } else if (ch >= 0xD800 && ch < 0xDC00) { // ch is a leading (high) surrogate // Four byte UTF-8 code point // Read the trailing (low) surrogate for (;;) { bytes[0] = GetNextByte(); bytes[1] = GetNextByte(); if (!m_input.good()) { QueueUnicodeCodepoint(m_readahead, CP_REPLACEMENT_CHARACTER); return; } unsigned long chLow = (static_cast(bytes[nBigEnd]) << 8) | static_cast(bytes[1 ^ nBigEnd]); if (chLow < 0xDC00 || ch >= 0xE000) { // Trouble...not a low surrogate. Dump a REPLACEMENT CHARACTER into the stream. QueueUnicodeCodepoint(m_readahead, CP_REPLACEMENT_CHARACTER); // Deal with the next UTF-16 unit if (chLow < 0xD800 || ch >= 0xE000) { // Easiest case: queue the codepoint and return QueueUnicodeCodepoint(m_readahead, ch); return; } else { // Start the loop over with the new high surrogate ch = chLow; continue; } } // Select the payload bits from the high surrogate ch &= 0x3FF; ch <<= 10; // Include bits from low surrogate ch |= (chLow & 0x3FF); // Add the surrogacy offset ch += 0x10000; } } QueueUnicodeCodepoint(m_readahead, ch); } inline char* ReadBuffer(unsigned char* pBuffer) { return reinterpret_cast(pBuffer); } unsigned char Stream::GetNextByte() const { if (m_nPushedBack) { return m_bufPushback[--m_nPushedBack]; } if (m_nPrefetchedUsed >= m_nPrefetchedAvailable) { std::streambuf *pBuf = m_input.rdbuf(); m_nPrefetchedAvailable = pBuf->sgetn(ReadBuffer(m_pPrefetched), YAML_PREFETCH_SIZE); m_nPrefetchedUsed = 0; if (!m_nPrefetchedAvailable) { m_input.setstate(std::ios_base::eofbit); } if (0 == m_nPrefetchedAvailable) { return 0; } } return m_pPrefetched[m_nPrefetchedUsed++]; } void Stream::StreamInUtf32() const { static int indexes[2][4] = { {3, 2, 1, 0}, {0, 1, 2, 3} }; unsigned long ch = 0; unsigned char bytes[4]; int* pIndexes = (m_charSet == utf32be) ? indexes[1] : indexes[0]; bytes[0] = GetNextByte(); bytes[1] = GetNextByte(); bytes[2] = GetNextByte(); bytes[3] = GetNextByte(); if (!m_input.good()) { return; } for (int i = 0; i < 4; ++i) { ch <<= 8; ch |= bytes[pIndexes[i]]; } QueueUnicodeCodepoint(m_readahead, ch); } } rivet-1.8.3/src/Tools/yaml-cpp/exp.cpp0000644000175000017500000000574612116077762016006 0ustar sunsun#include "exp.h" #include "exceptions.h" #include namespace YAML { namespace Exp { unsigned ParseHex(const std::string& str, const Mark& mark) { unsigned value = 0; for(std::size_t i=0;i(ch)); } // Escape // . Translates the next 'codeLength' characters into a hex number and returns the result. // . Throws if it's not actually hex. std::string Escape(Stream& in, int codeLength) { // grab string std::string str; for(int i=0;i= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF) { std::stringstream msg; msg << ErrorMsg::INVALID_UNICODE << value; throw ParserException(in.mark(), msg.str()); } // now break it up into chars if(value <= 0x7F) return Str(value); else if(value <= 0x7FF) return Str(0xC0 + (value >> 6)) + Str(0x80 + (value & 0x3F)); else if(value <= 0xFFFF) return Str(0xE0 + (value >> 12)) + Str(0x80 + ((value >> 6) & 0x3F)) + Str(0x80 + (value & 0x3F)); else return Str(0xF0 + (value >> 18)) + Str(0x80 + ((value >> 12) & 0x3F)) + Str(0x80 + ((value >> 6) & 0x3F)) + Str(0x80 + (value & 0x3F)); } // Escape // . Escapes the sequence starting 'in' (it must begin with a '\' or single quote) // and returns the result. // . Throws if it's an unknown escape character. std::string Escape(Stream& in) { // eat slash char escape = in.get(); // switch on escape character char ch = in.get(); // first do single quote, since it's easier if(escape == '\'' && ch == '\'') return "\'"; // now do the slash (we're not gonna check if it's a slash - you better pass one!) switch(ch) { case '0': return std::string(1, '\x00'); case 'a': return "\x07"; case 'b': return "\x08"; case 't': case '\t': return "\x09"; case 'n': return "\x0A"; case 'v': return "\x0B"; case 'f': return "\x0C"; case 'r': return "\x0D"; case 'e': return "\x1B"; case ' ': return "\x20"; case '\"': return "\""; case '\'': return "\'"; case '\\': return "\\"; case '/': return "/"; case 'N': return "\x85"; case '_': return "\xA0"; case 'L': return "\xE2\x80\xA8"; // LS (#x2028) case 'P': return "\xE2\x80\xA9"; // PS (#x2029) case 'x': return Escape(in, 2); case 'u': return Escape(in, 4); case 'U': return Escape(in, 8); } std::stringstream msg; throw ParserException(in.mark(), ErrorMsg::INVALID_ESCAPE + ch); } } } rivet-1.8.3/src/Tools/yaml-cpp/aliascontent.h0000644000175000017500000000221512116077762017327 0ustar sunsun#pragma once #ifndef ALIASCONTENT_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define ALIASCONTENT_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include "content.h" namespace YAML { class AliasContent : public Content { public: AliasContent(Content *pNodeContent); virtual Content *Clone() const; virtual void Parse(Scanner* pScanner, ParserState& state); virtual void Write(Emitter&) const; virtual bool GetBegin(std::vector ::const_iterator&) const; virtual bool GetBegin(std::map ::const_iterator&) const; virtual bool GetEnd(std::vector ::const_iterator&) const; virtual bool GetEnd(std::map ::const_iterator&) const; virtual Node* GetNode(std::size_t) const; virtual std::size_t GetSize() const; virtual bool IsScalar() const; virtual bool IsMap() const; virtual bool IsSequence() const; virtual bool GetScalar(std::string& s) const; virtual int Compare(Content *); virtual int Compare(Scalar *); virtual int Compare(Sequence *); virtual int Compare(Map *); private: Content* m_pRef; }; } #endif // ALIASCONTENT_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/regex.cpp0000644000175000017500000000203612116077762016311 0ustar sunsun#include "regex.h" namespace YAML { // constructors RegEx::RegEx(): m_op(REGEX_EMPTY) { } RegEx::RegEx(REGEX_OP op): m_op(op) { } RegEx::RegEx(char ch): m_op(REGEX_MATCH), m_a(ch) { } RegEx::RegEx(char a, char z): m_op(REGEX_RANGE), m_a(a), m_z(z) { } RegEx::RegEx(const std::string& str, REGEX_OP op): m_op(op) { for(std::size_t i=0;istatus = IndentMarker::VALID; if(pMapStart) pMapStart->status = Token::VALID; if(pKey) pKey->status = Token::VALID; } void Scanner::SimpleKey::Invalidate() { if(pIndent) pIndent->status = IndentMarker::INVALID; if(pMapStart) pMapStart->status = Token::INVALID; if(pKey) pKey->status = Token::INVALID; } // CanInsertPotentialSimpleKey bool Scanner::CanInsertPotentialSimpleKey() const { if(!m_simpleKeyAllowed) return false; return !ExistsActiveSimpleKey(); } // ExistsActiveSimpleKey // . Returns true if there's a potential simple key at our flow level // (there's allowed at most one per flow level, i.e., at the start of the flow start token) bool Scanner::ExistsActiveSimpleKey() const { if(m_simpleKeys.empty()) return false; const SimpleKey& key = m_simpleKeys.top(); return key.flowLevel == GetFlowLevel(); } // InsertPotentialSimpleKey // . If we can, add a potential simple key to the queue, // and save it on a stack. void Scanner::InsertPotentialSimpleKey() { if(!CanInsertPotentialSimpleKey()) return; SimpleKey key(INPUT.mark(), GetFlowLevel()); // first add a map start, if necessary if(InBlockContext()) { key.pIndent = PushIndentTo(INPUT.column(), IndentMarker::MAP); if(key.pIndent) { key.pIndent->status = IndentMarker::UNKNOWN; key.pMapStart = key.pIndent->pStartToken; key.pMapStart->status = Token::UNVERIFIED; } } // then add the (now unverified) key m_tokens.push(Token(Token::KEY, INPUT.mark())); key.pKey = &m_tokens.back(); key.pKey->status = Token::UNVERIFIED; m_simpleKeys.push(key); } // InvalidateSimpleKey // . Automatically invalidate the simple key in our flow level void Scanner::InvalidateSimpleKey() { if(m_simpleKeys.empty()) return; // grab top key SimpleKey& key = m_simpleKeys.top(); if(key.flowLevel != GetFlowLevel()) return; key.Invalidate(); m_simpleKeys.pop(); } // VerifySimpleKey // . Determines whether the latest simple key to be added is valid, // and if so, makes it valid. bool Scanner::VerifySimpleKey() { if(m_simpleKeys.empty()) return false; // grab top key SimpleKey key = m_simpleKeys.top(); // only validate if we're in the correct flow level if(key.flowLevel != GetFlowLevel()) return false; m_simpleKeys.pop(); bool isValid = true; // needs to be less than 1024 characters and inline if(INPUT.line() != key.mark.line || INPUT.pos() - key.mark.pos > 1024) isValid = false; // invalidate key if(isValid) key.Validate(); else key.Invalidate(); return isValid; } void Scanner::PopAllSimpleKeys() { while(!m_simpleKeys.empty()) m_simpleKeys.pop(); } } rivet-1.8.3/src/Tools/yaml-cpp/parserstate.cpp0000644000175000017500000000070712116077762017537 0ustar sunsun#include "parserstate.h" namespace YAML { ParserState::ParserState() { // version version.isDefault = true; version.major = 1; version.minor = 2; } const std::string ParserState::TranslateTagHandle(const std::string& handle) const { std::map ::const_iterator it = tags.find(handle); if(it == tags.end()) { if(handle == "!!") return "tag:yaml.org,2002:"; return handle; } return it->second; } } rivet-1.8.3/src/Tools/yaml-cpp/exp.h0000644000175000017500000001241312116077762015440 0ustar sunsun#pragma once #ifndef EXP_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define EXP_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include "regex.h" #include #include #include "stream.h" namespace YAML { //////////////////////////////////////////////////////////////////////////////// // Here we store a bunch of expressions for matching different parts of the file. namespace Exp { // misc inline const RegEx& Space() { static const RegEx e = RegEx(' '); return e; } inline const RegEx& Tab() { static const RegEx e = RegEx('\t'); return e; } inline const RegEx& Blank() { static const RegEx e = Space() || Tab(); return e; } inline const RegEx& Break() { static const RegEx e = RegEx('\n') || RegEx("\r\n"); return e; } inline const RegEx& BlankOrBreak() { static const RegEx e = Blank() || Break(); return e; } inline const RegEx& Digit() { static const RegEx e = RegEx('0', '9'); return e; } inline const RegEx& Alpha() { static const RegEx e = RegEx('a', 'z') || RegEx('A', 'Z'); return e; } inline const RegEx& AlphaNumeric() { static const RegEx e = Alpha() || Digit(); return e; } inline const RegEx& Word() { static const RegEx e = AlphaNumeric() || RegEx('-'); return e; } inline const RegEx& Hex() { static const RegEx e = Digit() || RegEx('A', 'F') || RegEx('a', 'f'); return e; } // Valid Unicode code points that are not part of c-printable (YAML 1.2, sec. 5.1) inline const RegEx& NotPrintable() { static const RegEx e = RegEx(0) || RegEx("\x01\x02\x03\x04\x05\x06\x07\x08\x0B\x0C\x7F", REGEX_OR) || RegEx(0x0E, 0x1F) || (RegEx('\xC2') + (RegEx('\x80', '\x84') || RegEx('\x86', '\x9F'))); return e; } inline const RegEx& Utf8_ByteOrderMark() { static const RegEx e = RegEx("\xEF\xBB\xBF"); return e; } // actual tags inline const RegEx& DocStart() { static const RegEx e = RegEx("---") + (BlankOrBreak() || RegEx()); return e; } inline const RegEx& DocEnd() { static const RegEx e = RegEx("...") + (BlankOrBreak() || RegEx()); return e; } inline const RegEx& DocIndicator() { static const RegEx e = DocStart() || DocEnd(); return e; } inline const RegEx& BlockEntry() { static const RegEx e = RegEx('-') + (BlankOrBreak() || RegEx()); return e; } inline const RegEx& Key() { static const RegEx e = RegEx('?'); return e; } inline const RegEx& KeyInFlow() { static const RegEx e = RegEx('?') + BlankOrBreak(); return e; } inline const RegEx& Value() { static const RegEx e = RegEx(':') + (BlankOrBreak() || RegEx()); return e; } inline const RegEx& ValueInFlow() { static const RegEx e = RegEx(':') + (BlankOrBreak() || RegEx(",}", REGEX_OR)); return e; } inline const RegEx& ValueInJSONFlow() { static const RegEx e = RegEx(':'); return e; } inline const RegEx Comment() { static const RegEx e = RegEx('#'); return e; } inline const RegEx& AnchorEnd() { static const RegEx e = RegEx("?:,]}%@`", REGEX_OR) || BlankOrBreak(); return e; } inline const RegEx& URI() { static const RegEx e = Word() || RegEx("#;/?:@&=+$,_.!~*'()[]", REGEX_OR) || (RegEx('%') + Hex() + Hex()); return e; } inline const RegEx& Tag() { static const RegEx e = Word() || RegEx("#;/?:@&=+$_.~*'", REGEX_OR) || (RegEx('%') + Hex() + Hex()); return e; } // Plain scalar rules: // . Cannot start with a blank. // . Can never start with any of , [ ] { } # & * ! | > \' \" % @ ` // . In the block context - ? : must be not be followed with a space. // . In the flow context ? is illegal and : and - must not be followed with a space. inline const RegEx& PlainScalar() { static const RegEx e = !(BlankOrBreak() || RegEx(",[]{}#&*!|>\'\"%@`", REGEX_OR) || (RegEx("-?:", REGEX_OR) + Blank())); return e; } inline const RegEx& PlainScalarInFlow() { static const RegEx e = !(BlankOrBreak() || RegEx("?,[]{}#&*!|>\'\"%@`", REGEX_OR) || (RegEx("-:", REGEX_OR) + Blank())); return e; } inline const RegEx& EndScalar() { static const RegEx e = RegEx(':') + (BlankOrBreak() || RegEx()); return e; } inline const RegEx& EndScalarInFlow() { static const RegEx e = (RegEx(':') + (BlankOrBreak() || RegEx(",]}", REGEX_OR))) || RegEx(",?[]{}", REGEX_OR); return e; } inline const RegEx& EscSingleQuote() { static const RegEx e = RegEx("\'\'"); return e; } inline const RegEx& EscBreak() { static const RegEx e = RegEx('\\') + Break(); return e; } inline const RegEx& ChompIndicator() { static const RegEx e = RegEx("+-", REGEX_OR); return e; } inline const RegEx& Chomp() { static const RegEx e = (ChompIndicator() + Digit()) || (Digit() + ChompIndicator()) || ChompIndicator() || Digit(); return e; } // and some functions std::string Escape(Stream& in); } namespace Keys { const char Directive = '%'; const char FlowSeqStart = '['; const char FlowSeqEnd = ']'; const char FlowMapStart = '{'; const char FlowMapEnd = '}'; const char FlowEntry = ','; const char Alias = '*'; const char Anchor = '&'; const char Tag = '!'; const char LiteralScalar = '|'; const char FoldedScalar = '>'; const char VerbatimTagStart = '<'; const char VerbatimTagEnd = '>'; } } #endif // EXP_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/regex.h0000644000175000017500000000375612116077762015770 0ustar sunsun#pragma once #ifndef REGEX_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define REGEX_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include #include namespace YAML { class Stream; enum REGEX_OP { REGEX_EMPTY, REGEX_MATCH, REGEX_RANGE, REGEX_OR, REGEX_AND, REGEX_NOT, REGEX_SEQ }; // simplified regular expressions // . Only straightforward matches (no repeated characters) // . Only matches from start of string class RegEx { public: RegEx(); RegEx(char ch); RegEx(char a, char z); RegEx(const std::string& str, REGEX_OP op = REGEX_SEQ); ~RegEx() {} friend RegEx operator ! (const RegEx& ex); friend RegEx operator || (const RegEx& ex1, const RegEx& ex2); friend RegEx operator && (const RegEx& ex1, const RegEx& ex2); friend RegEx operator + (const RegEx& ex1, const RegEx& ex2); bool Matches(char ch) const; bool Matches(const std::string& str) const; bool Matches(const Stream& in) const; template bool Matches(const Source& source) const; int Match(const std::string& str) const; int Match(const Stream& in) const; template int Match(const Source& source) const; private: RegEx(REGEX_OP op); template bool IsValidSource(const Source& source) const; template int MatchUnchecked(const Source& source) const; template int MatchOpEmpty(const Source& source) const; template int MatchOpMatch(const Source& source) const; template int MatchOpRange(const Source& source) const; template int MatchOpOr(const Source& source) const; template int MatchOpAnd(const Source& source) const; template int MatchOpNot(const Source& source) const; template int MatchOpSeq(const Source& source) const; private: REGEX_OP m_op; char m_a, m_z; std::vector m_params; }; } #include "regeximpl.h" #endif // REGEX_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/emittermanip.h0000644000175000017500000000352712116077762017350 0ustar sunsun#pragma once #ifndef EMITTERMANIP_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define EMITTERMANIP_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include namespace YAML { enum EMITTER_MANIP { // general manipulators Auto, // output character set EmitNonAscii, EscapeNonAscii, // string manipulators // Auto, // duplicate SingleQuoted, DoubleQuoted, Literal, // bool manipulators YesNoBool, // yes, no TrueFalseBool, // true, false OnOffBool, // on, off UpperCase, // TRUE, N LowerCase, // f, yes CamelCase, // No, Off LongBool, // yes, On ShortBool, // y, t // int manipulators Dec, Hex, Oct, // sequence manipulators BeginSeq, EndSeq, Flow, Block, // map manipulators BeginMap, EndMap, Key, Value, // Flow, // duplicate // Block, // duplicate // Auto, // duplicate LongKey }; struct _Indent { _Indent(int value_): value(value_) {} int value; }; inline _Indent Indent(int value) { return _Indent(value); } struct _Alias { _Alias(const std::string& content_): content(content_) {} std::string content; }; inline _Alias Alias(const std::string content) { return _Alias(content); } struct _Anchor { _Anchor(const std::string& content_): content(content_) {} std::string content; }; inline _Anchor Anchor(const std::string content) { return _Anchor(content); } struct _Tag { _Tag(const std::string& content_): content(content_), verbatim(true) {} std::string content; bool verbatim; }; inline _Tag VerbatimTag(const std::string& content) { return _Tag(content); } struct _Comment { _Comment(const std::string& content_): content(content_) {} std::string content; }; inline _Comment Comment(const std::string content) { return _Comment(content); } } #endif // EMITTERMANIP_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/sequence.h0000644000175000017500000000223712116077762016457 0ustar sunsun#pragma once #ifndef SEQUENCE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define SEQUENCE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include "content.h" #include namespace YAML { class Node; class Sequence: public Content { public: Sequence(); Sequence(const std::vector& data); virtual ~Sequence(); void Clear(); virtual Content *Clone() const; virtual bool GetBegin(std::vector ::const_iterator& it) const; virtual bool GetEnd(std::vector ::const_iterator& it) const; virtual Node *GetNode(std::size_t i) const; virtual std::size_t GetSize() const; virtual void Parse(Scanner *pScanner, ParserState& state); virtual void Write(Emitter& out) const; virtual bool IsSequence() const { return true; } // ordering virtual int Compare(Content *pContent); virtual int Compare(Scalar *) { return 1; } virtual int Compare(Sequence *pSeq); virtual int Compare(Map *) { return -1; } private: void ParseBlock(Scanner *pScanner, ParserState& state); void ParseFlow(Scanner *pScanner, ParserState& state); protected: std::vector m_data; }; } #endif // SEQUENCE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/nodeutil.h0000644000175000017500000000313712116077762016472 0ustar sunsun#pragma once #ifndef NODEUTIL_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define NODEUTIL_H_62B23520_7C8E_11DE_8A39_0800200C9A66 namespace YAML { template struct is_same_type { enum { value = false }; }; template struct is_same_type { enum { value = true }; }; template struct is_index_type_with_check { enum { value = false }; }; template <> struct is_index_type_with_check { enum { value = true }; }; #define MAKE_INDEX_TYPE(Type) \ template <> struct is_index_type_with_check::value> { enum { value = true }; } MAKE_INDEX_TYPE(int); MAKE_INDEX_TYPE(unsigned); MAKE_INDEX_TYPE(short); MAKE_INDEX_TYPE(unsigned short); MAKE_INDEX_TYPE(long); MAKE_INDEX_TYPE(unsigned long); #undef MAKE_INDEX_TYPE template struct is_index_type: public is_index_type_with_check {}; // messing around with template stuff to get the right overload for operator [] for a sequence template struct _FindFromNodeAtIndex { const Node *pRet; _FindFromNodeAtIndex(const Node&, const T&): pRet(0) {} }; template struct _FindFromNodeAtIndex { const Node *pRet; _FindFromNodeAtIndex(const Node& node, const T& key): pRet(node.FindAtIndex(static_cast(key))) {} }; template inline const Node *FindFromNodeAtIndex(const Node& node, const T& key) { return _FindFromNodeAtIndex::value>(node, key).pRet; } } #endif // NODEUTIL_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/stringsource.h0000644000175000017500000000202212116077762017366 0ustar sunsun#pragma once #ifndef STRINGSOURCE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define STRINGSOURCE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include namespace YAML { class StringCharSource { public: StringCharSource(const char *str, std::size_t size): m_str(str), m_size(size), m_offset(0) {} operator bool() const { return m_offset < m_size; } char operator [] (std::size_t i) const { return m_str[m_offset + i]; } bool operator !() const { return !static_cast(*this); } const StringCharSource operator + (int i) const { StringCharSource source(*this); if(static_cast (source.m_offset) + i >= 0) source.m_offset += i; else source.m_offset = 0; return source; } StringCharSource& operator ++ () { ++m_offset; return *this; } StringCharSource& operator += (std::size_t offset) { m_offset += offset; return *this; } private: const char *m_str; std::size_t m_size; std::size_t m_offset; }; } #endif // STRINGSOURCE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/scalar.cpp0000644000175000017500000000141112116077762016440 0ustar sunsun#include "scalar.h" #include "scanner.h" #include "token.h" #include "exceptions.h" #include "node.h" #include "emitter.h" namespace YAML { Scalar::Scalar() { } Scalar::Scalar(const std::string& data): m_data(data) { } Scalar::~Scalar() { } Content *Scalar::Clone() const { return new Scalar(m_data); } void Scalar::Parse(Scanner *pScanner, ParserState& /*state*/) { Token& token = pScanner->peek(); m_data = token.value; pScanner->pop(); } void Scalar::Write(Emitter& out) const { out << m_data; } int Scalar::Compare(Content *pContent) { return -pContent->Compare(this); } int Scalar::Compare(Scalar *pScalar) { if(m_data < pScalar->m_data) return -1; else if(m_data > pScalar->m_data) return 1; else return 0; } } rivet-1.8.3/src/Tools/yaml-cpp/test.cc0000644000175000017500000000134712116077762015765 0ustar sunsun#include #include #include #include "yaml.h" using namespace std; int main() { ifstream io("test.yaml"); YAML::Parser parser(io); YAML::Node doc; parser.GetNextDocument(doc); const YAML::Node& things = doc["things"]; string s; for (YAML::Iterator it = things.begin(); it != things.end(); ++it) { *it >> s; cout << "&&& " << s << " &&&" << endl; } const YAML::Node& stuff = doc["stuff"]; int a; for (YAML::Iterator it = stuff.begin(); it != stuff.end(); ++it) { *it >> a; cout << "%%% " << a << " %%%" << endl; } const YAML::Node& desc = doc["desc"]; string d; desc >> d; cout << "*** " << d << " ***" << endl; parser.GetNextDocument(doc); return 0; } rivet-1.8.3/src/Tools/yaml-cpp/ostream.cpp0000644000175000017500000000210612116077762016647 0ustar sunsun#include "ostream.h" #include namespace YAML { ostream::ostream(): m_buffer(0), m_pos(0), m_size(0), m_row(0), m_col(0) { reserve(1024); } ostream::~ostream() { delete [] m_buffer; } void ostream::reserve(unsigned size) { if(size <= m_size) return; char *newBuffer = new char[size]; std::memset(newBuffer, 0, size * sizeof(char)); std::memcpy(newBuffer, m_buffer, m_size * sizeof(char)); delete [] m_buffer; m_buffer = newBuffer; m_size = size; } void ostream::put(char ch) { if(m_pos >= m_size - 1) // an extra space for the NULL terminator reserve(m_size * 2); m_buffer[m_pos] = ch; m_pos++; if(ch == '\n') { m_row++; m_col = 0; } else m_col++; } ostream& operator << (ostream& out, const char *str) { std::size_t length = std::strlen(str); for(std::size_t i=0;i #include #include #include #include #include #include "stream.h" #include "token.h" namespace YAML { class Node; class RegEx; class Scanner { public: Scanner(std::istream& in); ~Scanner(); // token queue management (hopefully this looks kinda stl-ish) bool empty(); void pop(); Token& peek(); // anchor management void Save(const std::string& anchor, Node* value); const Node *Retrieve(const std::string& anchor) const; void ClearAnchors(); private: struct IndentMarker { enum INDENT_TYPE { MAP, SEQ, NONE }; enum STATUS { VALID, INVALID, UNKNOWN }; IndentMarker(int column_, INDENT_TYPE type_): column(column_), type(type_), status(VALID), pStartToken(0) {} int column; INDENT_TYPE type; STATUS status; Token *pStartToken; }; enum FLOW_MARKER { FLOW_MAP, FLOW_SEQ }; private: // scanning void EnsureTokensInQueue(); void ScanNextToken(); void ScanToNextToken(); void StartStream(); void EndStream(); Token *PushToken(Token::TYPE type); bool InFlowContext() const { return !m_flows.empty(); } bool InBlockContext() const { return m_flows.empty(); } int GetFlowLevel() const { return m_flows.size(); } Token::TYPE GetStartTokenFor(IndentMarker::INDENT_TYPE type) const; IndentMarker *PushIndentTo(int column, IndentMarker::INDENT_TYPE type); void PopIndentToHere(); void PopAllIndents(); void PopIndent(); int GetTopIndent() const; // checking input bool CanInsertPotentialSimpleKey() const; bool ExistsActiveSimpleKey() const; void InsertPotentialSimpleKey(); void InvalidateSimpleKey(); bool VerifySimpleKey(); void PopAllSimpleKeys(); void ThrowParserException(const std::string& msg) const; bool IsWhitespaceToBeEaten(char ch); const RegEx& GetValueRegex() const; struct SimpleKey { SimpleKey(const Mark& mark_, int flowLevel_); void Validate(); void Invalidate(); Mark mark; int flowLevel; IndentMarker *pIndent; Token *pMapStart, *pKey; }; // and the tokens void ScanDirective(); void ScanDocStart(); void ScanDocEnd(); void ScanBlockSeqStart(); void ScanBlockMapSTart(); void ScanBlockEnd(); void ScanBlockEntry(); void ScanFlowStart(); void ScanFlowEnd(); void ScanFlowEntry(); void ScanKey(); void ScanValue(); void ScanAnchorOrAlias(); void ScanTag(); void ScanPlainScalar(); void ScanQuotedScalar(); void ScanBlockScalar(); private: // the stream Stream INPUT; // the output (tokens) std::queue m_tokens; // state info bool m_startedStream, m_endedStream; bool m_simpleKeyAllowed; bool m_canBeJSONFlow; std::stack m_simpleKeys; std::stack m_indents; std::vector m_indentRefs; // for "garbage collection" std::stack m_flows; std::map m_anchors; }; } #endif // SCANNER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/emitter.cpp0000644000175000017500000004207512116077762016657 0ustar sunsun#include "emitter.h" #include "emitterstate.h" #include "emitterutils.h" #include "indentation.h" #include "exceptions.h" #include namespace YAML { Emitter::Emitter(): m_pState(new EmitterState) { } Emitter::~Emitter() { } const char *Emitter::c_str() const { return m_stream.str(); } unsigned Emitter::size() const { return m_stream.pos(); } // state checking bool Emitter::good() const { return m_pState->good(); } const std::string Emitter::GetLastError() const { return m_pState->GetLastError(); } // global setters bool Emitter::SetOutputCharset(EMITTER_MANIP value) { return m_pState->SetOutputCharset(value, GLOBAL); } bool Emitter::SetStringFormat(EMITTER_MANIP value) { return m_pState->SetStringFormat(value, GLOBAL); } bool Emitter::SetBoolFormat(EMITTER_MANIP value) { bool ok = false; if(m_pState->SetBoolFormat(value, GLOBAL)) ok = true; if(m_pState->SetBoolCaseFormat(value, GLOBAL)) ok = true; if(m_pState->SetBoolLengthFormat(value, GLOBAL)) ok = true; return ok; } bool Emitter::SetIntBase(EMITTER_MANIP value) { return m_pState->SetIntFormat(value, GLOBAL); } bool Emitter::SetSeqFormat(EMITTER_MANIP value) { return m_pState->SetFlowType(GT_SEQ, value, GLOBAL); } bool Emitter::SetMapFormat(EMITTER_MANIP value) { bool ok = false; if(m_pState->SetFlowType(GT_MAP, value, GLOBAL)) ok = true; if(m_pState->SetMapKeyFormat(value, GLOBAL)) ok = true; return ok; } bool Emitter::SetIndent(unsigned n) { return m_pState->SetIndent(n, GLOBAL); } bool Emitter::SetPreCommentIndent(unsigned n) { return m_pState->SetPreCommentIndent(n, GLOBAL); } bool Emitter::SetPostCommentIndent(unsigned n) { return m_pState->SetPostCommentIndent(n, GLOBAL); } // SetLocalValue // . Either start/end a group, or set a modifier locally Emitter& Emitter::SetLocalValue(EMITTER_MANIP value) { if(!good()) return *this; switch(value) { case BeginSeq: EmitBeginSeq(); break; case EndSeq: EmitEndSeq(); break; case BeginMap: EmitBeginMap(); break; case EndMap: EmitEndMap(); break; case Key: EmitKey(); break; case Value: EmitValue(); break; default: m_pState->SetLocalValue(value); break; } return *this; } Emitter& Emitter::SetLocalIndent(const _Indent& indent) { m_pState->SetIndent(indent.value, LOCAL); return *this; } // GotoNextPreAtomicState // . Runs the state machine, emitting if necessary, and returns 'true' if done (i.e., ready to emit an atom) bool Emitter::GotoNextPreAtomicState() { if(!good()) return true; unsigned curIndent = m_pState->GetCurIndent(); EMITTER_STATE curState = m_pState->GetCurState(); switch(curState) { // document-level case ES_WAITING_FOR_DOC: m_stream << "---"; m_pState->RequireSeparation(); m_pState->SwitchState(ES_WRITING_DOC); return true; case ES_WRITING_DOC: return true; // block sequence case ES_WAITING_FOR_BLOCK_SEQ_ENTRY: m_stream << IndentTo(curIndent) << "-"; m_pState->RequireSeparation(); m_pState->SwitchState(ES_WRITING_BLOCK_SEQ_ENTRY); return true; case ES_WRITING_BLOCK_SEQ_ENTRY: return true; case ES_DONE_WITH_BLOCK_SEQ_ENTRY: m_stream << '\n'; m_pState->SwitchState(ES_WAITING_FOR_BLOCK_SEQ_ENTRY); return false; // flow sequence case ES_WAITING_FOR_FLOW_SEQ_ENTRY: m_pState->SwitchState(ES_WRITING_FLOW_SEQ_ENTRY); return true; case ES_WRITING_FLOW_SEQ_ENTRY: return true; case ES_DONE_WITH_FLOW_SEQ_ENTRY: m_stream << ','; m_pState->RequireSeparation(); m_pState->SwitchState(ES_WAITING_FOR_FLOW_SEQ_ENTRY); return false; // block map case ES_WAITING_FOR_BLOCK_MAP_ENTRY: m_pState->SetError(ErrorMsg::EXPECTED_KEY_TOKEN); return true; case ES_WAITING_FOR_BLOCK_MAP_KEY: if(m_pState->CurrentlyInLongKey()) { m_stream << IndentTo(curIndent) << '?'; m_pState->RequireSeparation(); } m_pState->SwitchState(ES_WRITING_BLOCK_MAP_KEY); return true; case ES_WRITING_BLOCK_MAP_KEY: return true; case ES_DONE_WITH_BLOCK_MAP_KEY: m_pState->SetError(ErrorMsg::EXPECTED_VALUE_TOKEN); return true; case ES_WAITING_FOR_BLOCK_MAP_VALUE: if(m_pState->CurrentlyInLongKey()) m_stream << IndentTo(curIndent); m_stream << ':'; m_pState->RequireSeparation(); m_pState->SwitchState(ES_WRITING_BLOCK_MAP_VALUE); return true; case ES_WRITING_BLOCK_MAP_VALUE: return true; case ES_DONE_WITH_BLOCK_MAP_VALUE: m_pState->SetError(ErrorMsg::EXPECTED_KEY_TOKEN); return true; // flow map case ES_WAITING_FOR_FLOW_MAP_ENTRY: m_pState->SetError(ErrorMsg::EXPECTED_KEY_TOKEN); return true; case ES_WAITING_FOR_FLOW_MAP_KEY: m_pState->SwitchState(ES_WRITING_FLOW_MAP_KEY); if(m_pState->CurrentlyInLongKey()) { EmitSeparationIfNecessary(); m_stream << '?'; m_pState->RequireSeparation(); } return true; case ES_WRITING_FLOW_MAP_KEY: return true; case ES_DONE_WITH_FLOW_MAP_KEY: m_pState->SetError(ErrorMsg::EXPECTED_VALUE_TOKEN); return true; case ES_WAITING_FOR_FLOW_MAP_VALUE: m_stream << ':'; m_pState->RequireSeparation(); m_pState->SwitchState(ES_WRITING_FLOW_MAP_VALUE); return true; case ES_WRITING_FLOW_MAP_VALUE: return true; case ES_DONE_WITH_FLOW_MAP_VALUE: m_pState->SetError(ErrorMsg::EXPECTED_KEY_TOKEN); return true; default: assert(false); } assert(false); return true; } // PreAtomicWrite // . Depending on the emitter state, write to the stream to get it // in position to do an atomic write (e.g., scalar, sequence, or map) void Emitter::PreAtomicWrite() { if(!good()) return; while(!GotoNextPreAtomicState()) ; } // PostAtomicWrite // . Clean up void Emitter::PostAtomicWrite() { if(!good()) return; EMITTER_STATE curState = m_pState->GetCurState(); switch(curState) { // document-level case ES_WRITING_DOC: m_pState->SwitchState(ES_DONE_WITH_DOC); break; // block seq case ES_WRITING_BLOCK_SEQ_ENTRY: m_pState->SwitchState(ES_DONE_WITH_BLOCK_SEQ_ENTRY); break; // flow seq case ES_WRITING_FLOW_SEQ_ENTRY: m_pState->SwitchState(ES_DONE_WITH_FLOW_SEQ_ENTRY); break; // block map case ES_WRITING_BLOCK_MAP_KEY: m_pState->SwitchState(ES_DONE_WITH_BLOCK_MAP_KEY); break; case ES_WRITING_BLOCK_MAP_VALUE: m_pState->SwitchState(ES_DONE_WITH_BLOCK_MAP_VALUE); break; // flow map case ES_WRITING_FLOW_MAP_KEY: m_pState->SwitchState(ES_DONE_WITH_FLOW_MAP_KEY); break; case ES_WRITING_FLOW_MAP_VALUE: m_pState->SwitchState(ES_DONE_WITH_FLOW_MAP_VALUE); break; default: assert(false); }; m_pState->ClearModifiedSettings(); } // EmitSeparationIfNecessary void Emitter::EmitSeparationIfNecessary() { if(!good()) return; if(m_pState->RequiresSeparation()) m_stream << ' '; m_pState->UnsetSeparation(); } // EmitBeginSeq void Emitter::EmitBeginSeq() { if(!good()) return; // must have a long key if we're emitting a sequence m_pState->StartLongKey(); PreAtomicWrite(); EMITTER_STATE curState = m_pState->GetCurState(); EMITTER_MANIP flowType = m_pState->GetFlowType(GT_SEQ); if(flowType == Block) { if(curState == ES_WRITING_BLOCK_SEQ_ENTRY || curState == ES_WRITING_BLOCK_MAP_KEY || curState == ES_WRITING_BLOCK_MAP_VALUE || curState == ES_WRITING_DOC ) { m_stream << "\n"; m_pState->UnsetSeparation(); } m_pState->PushState(ES_WAITING_FOR_BLOCK_SEQ_ENTRY); } else if(flowType == Flow) { EmitSeparationIfNecessary(); m_stream << "["; m_pState->PushState(ES_WAITING_FOR_FLOW_SEQ_ENTRY); } else assert(false); m_pState->BeginGroup(GT_SEQ); } // EmitEndSeq void Emitter::EmitEndSeq() { if(!good()) return; if(m_pState->GetCurGroupType() != GT_SEQ) return m_pState->SetError(ErrorMsg::UNEXPECTED_END_SEQ); EMITTER_STATE curState = m_pState->GetCurState(); FLOW_TYPE flowType = m_pState->GetCurGroupFlowType(); if(flowType == FT_BLOCK) { // Note: block sequences are *not* allowed to be empty, but we convert it // to a flow sequence if it is assert(curState == ES_DONE_WITH_BLOCK_SEQ_ENTRY || curState == ES_WAITING_FOR_BLOCK_SEQ_ENTRY); if(curState == ES_WAITING_FOR_BLOCK_SEQ_ENTRY) { // Note: only one of these will actually output anything for a given situation EmitSeparationIfNecessary(); unsigned curIndent = m_pState->GetCurIndent(); m_stream << IndentTo(curIndent); m_stream << "[]"; } } else if(flowType == FT_FLOW) { // Note: flow sequences are allowed to be empty assert(curState == ES_DONE_WITH_FLOW_SEQ_ENTRY || curState == ES_WAITING_FOR_FLOW_SEQ_ENTRY); m_stream << "]"; } else assert(false); m_pState->PopState(); m_pState->EndGroup(GT_SEQ); PostAtomicWrite(); } // EmitBeginMap void Emitter::EmitBeginMap() { if(!good()) return; // must have a long key if we're emitting a map m_pState->StartLongKey(); PreAtomicWrite(); EMITTER_STATE curState = m_pState->GetCurState(); EMITTER_MANIP flowType = m_pState->GetFlowType(GT_MAP); if(flowType == Block) { if(curState == ES_WRITING_BLOCK_SEQ_ENTRY || curState == ES_WRITING_BLOCK_MAP_KEY || curState == ES_WRITING_BLOCK_MAP_VALUE || curState == ES_WRITING_DOC ) { m_stream << "\n"; m_pState->UnsetSeparation(); } m_pState->PushState(ES_WAITING_FOR_BLOCK_MAP_ENTRY); } else if(flowType == Flow) { EmitSeparationIfNecessary(); m_stream << "{"; m_pState->PushState(ES_WAITING_FOR_FLOW_MAP_ENTRY); } else assert(false); m_pState->BeginGroup(GT_MAP); } // EmitEndMap void Emitter::EmitEndMap() { if(!good()) return; if(m_pState->GetCurGroupType() != GT_MAP) return m_pState->SetError(ErrorMsg::UNEXPECTED_END_MAP); EMITTER_STATE curState = m_pState->GetCurState(); FLOW_TYPE flowType = m_pState->GetCurGroupFlowType(); if(flowType == FT_BLOCK) { // Note: block sequences are *not* allowed to be empty, but we convert it // to a flow sequence if it is assert(curState == ES_DONE_WITH_BLOCK_MAP_VALUE || curState == ES_WAITING_FOR_BLOCK_MAP_ENTRY); if(curState == ES_WAITING_FOR_BLOCK_MAP_ENTRY) { // Note: only one of these will actually output anything for a given situation EmitSeparationIfNecessary(); unsigned curIndent = m_pState->GetCurIndent(); m_stream << IndentTo(curIndent); m_stream << "{}"; } } else if(flowType == FT_FLOW) { // Note: flow maps are allowed to be empty assert(curState == ES_DONE_WITH_FLOW_MAP_VALUE || curState == ES_WAITING_FOR_FLOW_MAP_ENTRY); m_stream << "}"; } else assert(false); m_pState->PopState(); m_pState->EndGroup(GT_MAP); PostAtomicWrite(); } // EmitKey void Emitter::EmitKey() { if(!good()) return; EMITTER_STATE curState = m_pState->GetCurState(); FLOW_TYPE flowType = m_pState->GetCurGroupFlowType(); if(curState != ES_WAITING_FOR_BLOCK_MAP_ENTRY && curState != ES_DONE_WITH_BLOCK_MAP_VALUE && curState != ES_WAITING_FOR_FLOW_MAP_ENTRY && curState != ES_DONE_WITH_FLOW_MAP_VALUE) return m_pState->SetError(ErrorMsg::UNEXPECTED_KEY_TOKEN); if(flowType == FT_BLOCK) { if(curState == ES_DONE_WITH_BLOCK_MAP_VALUE) m_stream << '\n'; unsigned curIndent = m_pState->GetCurIndent(); m_stream << IndentTo(curIndent); m_pState->SwitchState(ES_WAITING_FOR_BLOCK_MAP_KEY); } else if(flowType == FT_FLOW) { if(curState == ES_DONE_WITH_FLOW_MAP_VALUE) { m_stream << ','; m_pState->RequireSeparation(); } m_pState->SwitchState(ES_WAITING_FOR_FLOW_MAP_KEY); } else assert(false); if(m_pState->GetMapKeyFormat() == LongKey) m_pState->StartLongKey(); else if(m_pState->GetMapKeyFormat() == Auto) m_pState->StartSimpleKey(); else assert(false); } // EmitValue void Emitter::EmitValue() { if(!good()) return; EMITTER_STATE curState = m_pState->GetCurState(); FLOW_TYPE flowType = m_pState->GetCurGroupFlowType(); if(curState != ES_DONE_WITH_BLOCK_MAP_KEY && curState != ES_DONE_WITH_FLOW_MAP_KEY) return m_pState->SetError(ErrorMsg::UNEXPECTED_VALUE_TOKEN); if(flowType == FT_BLOCK) { if(m_pState->CurrentlyInLongKey()) m_stream << '\n'; m_pState->SwitchState(ES_WAITING_FOR_BLOCK_MAP_VALUE); } else if(flowType == FT_FLOW) { m_pState->SwitchState(ES_WAITING_FOR_FLOW_MAP_VALUE); } else assert(false); } // ******************************************************************************************* // overloads of Write Emitter& Emitter::Write(const std::string& str) { if(!good()) return *this; // literal scalars must use long keys if(m_pState->GetStringFormat() == Literal && m_pState->GetCurGroupFlowType() != FT_FLOW) m_pState->StartLongKey(); PreAtomicWrite(); EmitSeparationIfNecessary(); bool escapeNonAscii = m_pState->GetOutputCharset() == EscapeNonAscii; EMITTER_MANIP strFmt = m_pState->GetStringFormat(); FLOW_TYPE flowType = m_pState->GetCurGroupFlowType(); unsigned curIndent = m_pState->GetCurIndent(); switch(strFmt) { case Auto: Utils::WriteString(m_stream, str, flowType == FT_FLOW, escapeNonAscii); break; case SingleQuoted: if(!Utils::WriteSingleQuotedString(m_stream, str)) { m_pState->SetError(ErrorMsg::SINGLE_QUOTED_CHAR); return *this; } break; case DoubleQuoted: Utils::WriteDoubleQuotedString(m_stream, str, escapeNonAscii); break; case Literal: if(flowType == FT_FLOW) Utils::WriteString(m_stream, str, flowType == FT_FLOW, escapeNonAscii); else Utils::WriteLiteralString(m_stream, str, curIndent + m_pState->GetIndent()); break; default: assert(false); } PostAtomicWrite(); return *this; } void Emitter::PreWriteIntegralType(std::stringstream& str) { PreAtomicWrite(); EmitSeparationIfNecessary(); EMITTER_MANIP intFmt = m_pState->GetIntFormat(); switch(intFmt) { case Dec: str << std::dec; break; case Hex: str << std::hex; break; case Oct: str << std::oct; break; default: assert(false); } } void Emitter::PostWriteIntegralType(const std::stringstream& str) { m_stream << str.str(); PostAtomicWrite(); } Emitter& Emitter::Write(bool b) { if(!good()) return *this; PreAtomicWrite(); EmitSeparationIfNecessary(); // set up all possible bools to write struct BoolName { std::string trueName, falseName; }; struct BoolFormatNames { BoolName upper, lower, camel; }; struct BoolTypes { BoolFormatNames yesNo, trueFalse, onOff; }; static const BoolTypes boolTypes = { { { "YES", "NO" }, { "yes", "no" }, { "Yes", "No" } }, { { "TRUE", "FALSE" }, { "true", "false" }, { "True", "False" } }, { { "ON", "OFF" }, { "on", "off" }, { "On", "Off" } } }; // select the right one EMITTER_MANIP boolFmt = m_pState->GetBoolFormat(); EMITTER_MANIP boolLengthFmt = m_pState->GetBoolLengthFormat(); EMITTER_MANIP boolCaseFmt = m_pState->GetBoolCaseFormat(); const BoolFormatNames& fmtNames = (boolFmt == YesNoBool ? boolTypes.yesNo : boolFmt == TrueFalseBool ? boolTypes.trueFalse : boolTypes.onOff); const BoolName& boolName = (boolCaseFmt == UpperCase ? fmtNames.upper : boolCaseFmt == LowerCase ? fmtNames.lower : fmtNames.camel); const std::string& name = (b ? boolName.trueName : boolName.falseName); // and say it! // TODO: should we disallow writing OnOffBool with ShortBool? (it'll just print "o" for both, which is silly) if(boolLengthFmt == ShortBool) m_stream << name[0]; else m_stream << name; PostAtomicWrite(); return *this; } Emitter& Emitter::Write(const _Alias& alias) { if(!good()) return *this; PreAtomicWrite(); EmitSeparationIfNecessary(); if(!Utils::WriteAlias(m_stream, alias.content)) { m_pState->SetError(ErrorMsg::INVALID_ALIAS); return *this; } PostAtomicWrite(); return *this; } Emitter& Emitter::Write(const _Anchor& anchor) { if(!good()) return *this; PreAtomicWrite(); EmitSeparationIfNecessary(); if(!Utils::WriteAnchor(m_stream, anchor.content)) { m_pState->SetError(ErrorMsg::INVALID_ANCHOR); return *this; } m_pState->RequireSeparation(); // Note: no PostAtomicWrite() because we need another value for this node return *this; } Emitter& Emitter::Write(const _Tag& tag) { if(!good()) return *this; PreAtomicWrite(); EmitSeparationIfNecessary(); if(!Utils::WriteTag(m_stream, tag.content)) { m_pState->SetError(ErrorMsg::INVALID_TAG); return *this; } m_pState->RequireSeparation(); // Note: no PostAtomicWrite() because we need another value for this node return *this; } Emitter& Emitter::Write(const _Comment& comment) { if(!good()) return *this; m_stream << Indentation(m_pState->GetPreCommentIndent()); Utils::WriteComment(m_stream, comment.content, m_pState->GetPostCommentIndent()); return *this; } Emitter& Emitter::Write(const _Null& /*null*/) { if(!good()) return *this; PreAtomicWrite(); EmitSeparationIfNecessary(); m_stream << "~"; PostAtomicWrite(); return *this; } } rivet-1.8.3/src/Tools/yaml-cpp/exceptions.h0000644000175000017500000001507012116077762017027 0ustar sunsun#pragma once #ifndef EXCEPTIONS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define EXCEPTIONS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include "mark.h" #include "traits.h" #include #include #include namespace YAML { // error messages namespace ErrorMsg { const std::string YAML_DIRECTIVE_ARGS = "YAML directives must have exactly one argument"; const std::string YAML_VERSION = "bad YAML version: "; const std::string YAML_MAJOR_VERSION = "YAML major version too large"; const std::string REPEATED_YAML_DIRECTIVE= "repeated YAML directive"; const std::string TAG_DIRECTIVE_ARGS = "TAG directives must have exactly two arguments"; const std::string REPEATED_TAG_DIRECTIVE = "repeated TAG directive"; const std::string CHAR_IN_TAG_HANDLE = "illegal character found while scanning tag handle"; const std::string TAG_WITH_NO_SUFFIX = "tag handle with no suffix"; const std::string END_OF_VERBATIM_TAG = "end of verbatim tag not found"; const std::string END_OF_MAP = "end of map not found"; const std::string END_OF_MAP_FLOW = "end of map flow not found"; const std::string END_OF_SEQ = "end of sequence not found"; const std::string END_OF_SEQ_FLOW = "end of sequence flow not found"; const std::string MULTIPLE_TAGS = "cannot assign multiple tags to the same node"; const std::string MULTIPLE_ANCHORS = "cannot assign multiple anchors to the same node"; const std::string MULTIPLE_ALIASES = "cannot assign multiple aliases to the same node"; const std::string ALIAS_CONTENT = "aliases can't have any content, *including* tags"; const std::string INVALID_HEX = "bad character found while scanning hex number"; const std::string INVALID_UNICODE = "invalid unicode: "; const std::string INVALID_ESCAPE = "unknown escape character: "; const std::string UNKNOWN_TOKEN = "unknown token"; const std::string DOC_IN_SCALAR = "illegal document indicator in scalar"; const std::string EOF_IN_SCALAR = "illegal EOF in scalar"; const std::string CHAR_IN_SCALAR = "illegal character in scalar"; const std::string TAB_IN_INDENTATION = "illegal tab when looking for indentation"; const std::string FLOW_END = "illegal flow end"; const std::string BLOCK_ENTRY = "illegal block entry"; const std::string MAP_KEY = "illegal map key"; const std::string MAP_VALUE = "illegal map value"; const std::string ALIAS_NOT_FOUND = "alias not found after *"; const std::string ANCHOR_NOT_FOUND = "anchor not found after &"; const std::string CHAR_IN_ALIAS = "illegal character found while scanning alias"; const std::string CHAR_IN_ANCHOR = "illegal character found while scanning anchor"; const std::string ZERO_INDENT_IN_BLOCK = "cannot set zero indentation for a block scalar"; const std::string CHAR_IN_BLOCK = "unexpected character in block scalar"; const std::string AMBIGUOUS_ANCHOR = "cannot assign the same alias to multiple nodes"; const std::string UNKNOWN_ANCHOR = "the referenced anchor is not defined"; const std::string INVALID_SCALAR = "invalid scalar"; const std::string KEY_NOT_FOUND = "key not found"; const std::string BAD_DEREFERENCE = "bad dereference"; const std::string UNMATCHED_GROUP_TAG = "unmatched group tag"; const std::string UNEXPECTED_END_SEQ = "unexpected end sequence token"; const std::string UNEXPECTED_END_MAP = "unexpected end map token"; const std::string SINGLE_QUOTED_CHAR = "invalid character in single-quoted string"; const std::string INVALID_ANCHOR = "invalid anchor"; const std::string INVALID_ALIAS = "invalid alias"; const std::string INVALID_TAG = "invalid tag"; const std::string EXPECTED_KEY_TOKEN = "expected key token"; const std::string EXPECTED_VALUE_TOKEN = "expected value token"; const std::string UNEXPECTED_KEY_TOKEN = "unexpected key token"; const std::string UNEXPECTED_VALUE_TOKEN = "unexpected value token"; template inline const std::string KEY_NOT_FOUND_WITH_KEY(const T&, typename disable_if >::type * = 0) { return KEY_NOT_FOUND; } inline const std::string KEY_NOT_FOUND_WITH_KEY(const std::string& key) { return KEY_NOT_FOUND + ": " + key; } template inline const std::string KEY_NOT_FOUND_WITH_KEY(const T& key, typename enable_if >::type * = 0) { std::stringstream stream; stream << KEY_NOT_FOUND << ": " << key; return stream.str(); } } class Exception: public std::exception { public: Exception(const Mark& mark_, const std::string& msg_) : mark(mark_), msg(msg_) { std::stringstream output; output << "yaml-cpp: error at line " << mark.line+1 << ", column " << mark.column+1 << ": " << msg; what_ = output.str(); } virtual ~Exception() throw() {} virtual const char *what() const throw() { return what_.c_str(); } Mark mark; std::string msg; private: std::string what_; }; class ParserException: public Exception { public: ParserException(const Mark& mark_, const std::string& msg_) : Exception(mark_, msg_) {} }; class RepresentationException: public Exception { public: RepresentationException(const Mark& mark_, const std::string& msg_) : Exception(mark_, msg_) {} }; // representation exceptions class InvalidScalar: public RepresentationException { public: InvalidScalar(const Mark& mark_) : RepresentationException(mark_, ErrorMsg::INVALID_SCALAR) {} }; class KeyNotFound: public RepresentationException { public: template KeyNotFound(const Mark& mark_, const T& key_) : RepresentationException(mark_, ErrorMsg::KEY_NOT_FOUND_WITH_KEY(key_)) {} }; template class TypedKeyNotFound: public KeyNotFound { public: TypedKeyNotFound(const Mark& mark_, const T& key_) : KeyNotFound(mark_, key_), key(key_) {} virtual ~TypedKeyNotFound() throw() {} T key; }; template inline TypedKeyNotFound MakeTypedKeyNotFound(const Mark& mark, const T& key) { return TypedKeyNotFound (mark, key); } class BadDereference: public RepresentationException { public: BadDereference() : RepresentationException(Mark::null(), ErrorMsg::BAD_DEREFERENCE) {} }; class EmitterException: public Exception { public: EmitterException(const std::string& msg_) : Exception(Mark::null(), msg_) {} }; } #endif // EXCEPTIONS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/scanscalar.cpp0000644000175000017500000001236712116077762017321 0ustar sunsun#include "scanscalar.h" #include "scanner.h" #include "exp.h" #include "exceptions.h" #include "token.h" namespace YAML { // ScanScalar // . This is where the scalar magic happens. // // . We do the scanning in three phases: // 1. Scan until newline // 2. Eat newline // 3. Scan leading blanks. // // . Depending on the parameters given, we store or stop // and different places in the above flow. std::string ScanScalar(Stream& INPUT, ScanScalarParams& params) { bool foundNonEmptyLine = false; bool pastOpeningBreak = (params.fold == FOLD_FLOW); bool emptyLine = false, moreIndented = false; int foldedNewlineCount = 0; bool foldedNewlineStartedMoreIndented = false; std::string scalar; params.leadingSpaces = false; while(INPUT) { // ******************************** // Phase #1: scan until line ending std::size_t lastNonWhitespaceChar = scalar.size(); bool escapedNewline = false; while(!params.end.Matches(INPUT) && !Exp::Break().Matches(INPUT)) { if(!INPUT) break; // document indicator? if(INPUT.column() == 0 && Exp::DocIndicator().Matches(INPUT)) { if(params.onDocIndicator == BREAK) break; else if(params.onDocIndicator == THROW) throw ParserException(INPUT.mark(), ErrorMsg::DOC_IN_SCALAR); } foundNonEmptyLine = true; pastOpeningBreak = true; // escaped newline? (only if we're escaping on slash) if(params.escape == '\\' && Exp::EscBreak().Matches(INPUT)) { // eat escape character and get out (but preserve trailing whitespace!) INPUT.get(); lastNonWhitespaceChar = scalar.size(); escapedNewline = true; break; } // escape this? if(INPUT.peek() == params.escape) { scalar += Exp::Escape(INPUT); lastNonWhitespaceChar = scalar.size(); continue; } // otherwise, just add the damn character char ch = INPUT.get(); scalar += ch; if(ch != ' ' && ch != '\t') lastNonWhitespaceChar = scalar.size(); } // eof? if we're looking to eat something, then we throw if(!INPUT) { if(params.eatEnd) throw ParserException(INPUT.mark(), ErrorMsg::EOF_IN_SCALAR); break; } // doc indicator? if(params.onDocIndicator == BREAK && INPUT.column() == 0 && Exp::DocIndicator().Matches(INPUT)) break; // are we done via character match? int n = params.end.Match(INPUT); if(n >= 0) { if(params.eatEnd) INPUT.eat(n); break; } // do we remove trailing whitespace? if(params.fold == FOLD_FLOW) scalar.erase(lastNonWhitespaceChar); // ******************************** // Phase #2: eat line ending n = Exp::Break().Match(INPUT); INPUT.eat(n); // ******************************** // Phase #3: scan initial spaces // first the required indentation while(INPUT.peek() == ' ' && (INPUT.column() < params.indent || (params.detectIndent && !foundNonEmptyLine))) INPUT.eat(1); // update indent if we're auto-detecting if(params.detectIndent && !foundNonEmptyLine) params.indent = std::max(params.indent, INPUT.column()); // and then the rest of the whitespace while(Exp::Blank().Matches(INPUT)) { // we check for tabs that masquerade as indentation if(INPUT.peek() == '\t'&& INPUT.column() < params.indent && params.onTabInIndentation == THROW) throw ParserException(INPUT.mark(), ErrorMsg::TAB_IN_INDENTATION); if(!params.eatLeadingWhitespace) break; INPUT.eat(1); } // was this an empty line? bool nextEmptyLine = Exp::Break().Matches(INPUT); bool nextMoreIndented = Exp::Blank().Matches(INPUT); if(params.fold == FOLD_BLOCK && foldedNewlineCount == 0 && nextEmptyLine) foldedNewlineStartedMoreIndented = moreIndented; // for block scalars, we always start with a newline, so we should ignore it (not fold or keep) if(pastOpeningBreak) { switch(params.fold) { case DONT_FOLD: scalar += "\n"; break; case FOLD_BLOCK: if(!emptyLine && !nextEmptyLine && !moreIndented && !nextMoreIndented && INPUT.column() >= params.indent) scalar += " "; else if(nextEmptyLine) foldedNewlineCount++; else scalar += "\n"; if(!nextEmptyLine && foldedNewlineCount > 0) { scalar += std::string(foldedNewlineCount - 1, '\n'); if(foldedNewlineStartedMoreIndented || nextMoreIndented) scalar += "\n"; foldedNewlineCount = 0; } break; case FOLD_FLOW: if(nextEmptyLine) scalar += "\n"; else if(!emptyLine && !nextEmptyLine && !escapedNewline) scalar += " "; break; } } emptyLine = nextEmptyLine; moreIndented = nextMoreIndented; pastOpeningBreak = true; // are we done via indentation? if(!emptyLine && INPUT.column() < params.indent) { params.leadingSpaces = true; break; } } // post-processing if(params.trimTrailingSpaces) { std::size_t pos = scalar.find_last_not_of(' '); if(pos < scalar.size()) scalar.erase(pos + 1); } if(params.chomp == STRIP || params.chomp == CLIP) { std::size_t pos = scalar.find_last_not_of('\n'); if(params.chomp == CLIP && pos + 1 < scalar.size()) scalar.erase(pos + 2); else if(params.chomp == STRIP && pos < scalar.size()) scalar.erase(pos + 1); } return scalar; } } rivet-1.8.3/src/Tools/yaml-cpp/emitterutils.h0000644000175000017500000000153712116077762017403 0ustar sunsun#pragma once #ifndef EMITTERUTILS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define EMITTERUTILS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include "ostream.h" #include namespace YAML { namespace Utils { bool WriteString(ostream& out, const std::string& str, bool inFlow, bool escapeNonAscii); bool WriteSingleQuotedString(ostream& out, const std::string& str); bool WriteDoubleQuotedString(ostream& out, const std::string& str, bool escapeNonAscii); bool WriteLiteralString(ostream& out, const std::string& str, int indent); bool WriteComment(ostream& out, const std::string& str, int postCommentIndent); bool WriteAlias(ostream& out, const std::string& str); bool WriteAnchor(ostream& out, const std::string& str); bool WriteTag(ostream& out, const std::string& str); } } #endif // EMITTERUTILS_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/null.cpp0000644000175000017500000000020512116077762016145 0ustar sunsun#include "null.h" #include "node.h" namespace YAML { _Null Null; bool IsNull(const Node& node) { return node.Read(Null); } } rivet-1.8.3/src/Tools/yaml-cpp/Makefile.in0000644000175000017500000007131412116616065016540 0ustar sunsun# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = testYAML$(EXEEXT) TESTS = testYAML$(EXEEXT) subdir = src/Tools/yaml-cpp DIST_COMMON = $(dist_noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(yamlinclude_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(yamlincludedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libyaml_cpp_la_LIBADD = am_libyaml_cpp_la_OBJECTS = aliascontent.lo emitterstate.lo map.lo \ parser.lo scanscalar.lo sequence.lo stream.lo parserstate.lo \ scalar.lo emitterutils.lo iterator.lo node.lo scantag.lo \ conversion.lo null.lo regex.lo scanner.lo simplekey.lo tag.lo \ emitter.lo exp.lo ostream.lo scantoken.lo libyaml_cpp_la_OBJECTS = $(am_libyaml_cpp_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am_testYAML_OBJECTS = test.$(OBJEXT) testYAML_OBJECTS = $(am_testYAML_OBJECTS) testYAML_DEPENDENCIES = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/Rivet/Config depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libyaml_cpp_la_SOURCES) $(testYAML_SOURCES) DIST_SOURCES = $(libyaml_cpp_la_SOURCES) $(testYAML_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(dist_noinst_HEADERS) $(yamlinclude_HEADERS) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ lib_LTLIBRARIES = libyaml-cpp.la libyaml_cpp_la_SOURCES = \ aliascontent.cpp emitterstate.cpp map.cpp parser.cpp scanscalar.cpp \ sequence.cpp stream.cpp parserstate.cpp scalar.cpp emitterutils.cpp \ iterator.cpp node.cpp scantag.cpp conversion.cpp null.cpp regex.cpp \ scanner.cpp simplekey.cpp tag.cpp emitter.cpp exp.cpp ostream.cpp scantoken.cpp yamlincludedir = $(includedir)/yaml-cpp yamlinclude_HEADERS = \ conversion.h emittermanip.h iterator.h node.h nodereadimpl.h \ noncopyable.h ostream.h stlemitter.h traits.h emitter.h exceptions.h \ mark.h nodeimpl.h nodeutil.h null.h parser.h stlnode.h yaml.h dist_noinst_HEADERS = \ exp.h regeximpl.h token.h aliascontent.h emitterstate.h indentation.h map.h \ scanscalar.h sequence.h stream.h content.h parserstate.h scalar.h setting.h \ stringsource.h emitterutils.h iterpriv.h scantag.h ltnode.h regex.h scanner.h \ streamcharsource.h tag.h testYAML_SOURCES = test.cc testYAML_LDADD = -L$(builddir) -lyaml-cpp all: all-am .SUFFIXES: .SUFFIXES: .cc .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Tools/yaml-cpp/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Tools/yaml-cpp/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libyaml-cpp.la: $(libyaml_cpp_la_OBJECTS) $(libyaml_cpp_la_DEPENDENCIES) $(EXTRA_libyaml_cpp_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(libyaml_cpp_la_OBJECTS) $(libyaml_cpp_la_LIBADD) $(LIBS) clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list testYAML$(EXEEXT): $(testYAML_OBJECTS) $(testYAML_DEPENDENCIES) $(EXTRA_testYAML_DEPENDENCIES) @rm -f testYAML$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(testYAML_OBJECTS) $(testYAML_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aliascontent.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conversion.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emitter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emitterstate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emitterutils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iterator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/map.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/node.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/null.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ostream.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parserstate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scalar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scanner.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scanscalar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scantag.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scantoken.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sequence.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simplekey.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stream.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tag.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-yamlincludeHEADERS: $(yamlinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(yamlinclude_HEADERS)'; test -n "$(yamlincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(yamlincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(yamlincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(yamlincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(yamlincludedir)" || exit $$?; \ done uninstall-yamlincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(yamlinclude_HEADERS)'; test -n "$(yamlincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(yamlincludedir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ col="$$grn"; \ else \ col="$$red"; \ fi; \ echo "$${col}$$dashes$${std}"; \ echo "$${col}$$banner$${std}"; \ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ test -z "$$report" || echo "$${col}$$report$${std}"; \ echo "$${col}$$dashes$${std}"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(yamlincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-yamlincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES uninstall-yamlincludeHEADERS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip install-yamlincludeHEADERS \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-libLTLIBRARIES \ uninstall-yamlincludeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: rivet-1.8.3/src/Tools/yaml-cpp/iterator.h0000644000175000017500000000137512116077762016502 0ustar sunsun#pragma once #ifndef ITERATOR_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define ITERATOR_H_62B23520_7C8E_11DE_8A39_0800200C9A66 namespace YAML { class Node; struct IterPriv; class Iterator { public: Iterator(); Iterator(IterPriv *pData); Iterator(const Iterator& rhs); ~Iterator(); Iterator& operator = (const Iterator& rhs); Iterator& operator ++ (); Iterator operator ++ (int); const Node& operator * () const; const Node *operator -> () const; const Node& first() const; const Node& second() const; friend bool operator == (const Iterator& it, const Iterator& jt); friend bool operator != (const Iterator& it, const Iterator& jt); private: IterPriv *m_pData; }; } #endif // ITERATOR_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/token.h0000644000175000017500000000276212116077762015772 0ustar sunsun#pragma once #ifndef TOKEN_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define TOKEN_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include "mark.h" #include #include #include #include namespace YAML { const std::string TokenNames[] = { "DIRECTIVE", "DOC_START", "DOC_END", "BLOCK_SEQ_START", "BLOCK_MAP_START", "BLOCK_SEQ_END", "BLOCK_MAP_END", "BLOCK_ENTRY", "FLOW_SEQ_START", "FLOW_MAP_START", "FLOW_SEQ_END", "FLOW_MAP_END", "FLOW_MAP_COMPACT", "FLOW_ENTRY", "KEY", "VALUE", "ANCHOR", "ALIAS", "TAG", "SCALAR" }; struct Token { // enums enum STATUS { VALID, INVALID, UNVERIFIED }; enum TYPE { DIRECTIVE, DOC_START, DOC_END, BLOCK_SEQ_START, BLOCK_MAP_START, BLOCK_SEQ_END, BLOCK_MAP_END, BLOCK_ENTRY, FLOW_SEQ_START, FLOW_MAP_START, FLOW_SEQ_END, FLOW_MAP_END, FLOW_MAP_COMPACT, FLOW_ENTRY, KEY, VALUE, ANCHOR, ALIAS, TAG, SCALAR }; // data Token(TYPE type_, const Mark& mark_): status(VALID), type(type_), mark(mark_), data(0) {} friend std::ostream& operator << (std::ostream& out, const Token& token) { out << TokenNames[token.type] << std::string(": ") << token.value; for(std::size_t i=0;i params; int data; }; } #endif // TOKEN_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/scantag.h0000644000175000017500000000063312116077762016265 0ustar sunsun#pragma once #ifndef SCANTAG_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define SCANTAG_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include #include "stream.h" namespace YAML { const std::string ScanVerbatimTag(Stream& INPUT); const std::string ScanTagHandle(Stream& INPUT, bool& canBeHandle); const std::string ScanTagSuffix(Stream& INPUT); } #endif // SCANTAG_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/Makefile.am0000644000175000017500000000201112116077762016520 0ustar sunsunlib_LTLIBRARIES = libyaml-cpp.la libyaml_cpp_la_SOURCES = \ aliascontent.cpp emitterstate.cpp map.cpp parser.cpp scanscalar.cpp \ sequence.cpp stream.cpp parserstate.cpp scalar.cpp emitterutils.cpp \ iterator.cpp node.cpp scantag.cpp conversion.cpp null.cpp regex.cpp \ scanner.cpp simplekey.cpp tag.cpp emitter.cpp exp.cpp ostream.cpp scantoken.cpp yamlincludedir = $(includedir)/yaml-cpp yamlinclude_HEADERS = \ conversion.h emittermanip.h iterator.h node.h nodereadimpl.h \ noncopyable.h ostream.h stlemitter.h traits.h emitter.h exceptions.h \ mark.h nodeimpl.h nodeutil.h null.h parser.h stlnode.h yaml.h dist_noinst_HEADERS = \ exp.h regeximpl.h token.h aliascontent.h emitterstate.h indentation.h map.h \ scanscalar.h sequence.h stream.h content.h parserstate.h scalar.h setting.h \ stringsource.h emitterutils.h iterpriv.h scantag.h ltnode.h regex.h scanner.h \ streamcharsource.h tag.h check_PROGRAMS = testYAML testYAML_SOURCES = test.cc testYAML_LDADD = -L$(builddir) -lyaml-cpp TESTS = testYAML rivet-1.8.3/src/Tools/yaml-cpp/node.cpp0000644000175000017500000001512112116077762016123 0ustar sunsun#include "node.h" #include "token.h" #include "scanner.h" #include "content.h" #include "parser.h" #include "scalar.h" #include "sequence.h" #include "map.h" #include "aliascontent.h" #include "iterpriv.h" #include "emitter.h" #include "tag.h" #include namespace YAML { // the ordering! bool ltnode::operator ()(const Node *pNode1, const Node *pNode2) const { return *pNode1 < *pNode2; } Node::Node(): m_pContent(0), m_alias(false), m_pIdentity(this), m_referenced(true) { } Node::Node(const Mark& mark, const std::string& anchor, const std::string& tag, const Content *pContent) : m_mark(mark), m_anchor(anchor), m_tag(tag), m_pContent(0), m_alias(false), m_pIdentity(this), m_referenced(false) { if(pContent) m_pContent = pContent->Clone(); } Node::~Node() { Clear(); } void Node::Clear() { delete m_pContent; m_pContent = 0; m_alias = false; m_referenced = false; m_anchor.clear(); m_tag.clear(); } std::auto_ptr Node::Clone() const { if(m_alias) throw std::runtime_error("yaml-cpp: Can't clone alias"); // TODO: what to do about aliases? return std::auto_ptr (new Node(m_mark, m_anchor, m_tag, m_pContent)); } void Node::Parse(Scanner *pScanner, ParserState& state) { Clear(); // an empty node *is* a possibility if(pScanner->empty()) return; // save location m_mark = pScanner->peek().mark; // special case: a value node by itself must be a map, with no header if(pScanner->peek().type == Token::VALUE) { m_pContent = new Map; m_pContent->Parse(pScanner, state); return; } ParseHeader(pScanner, state); // is this an alias? if so, its contents are an alias to // a previously defined anchor if(m_alias) { // the scanner throws an exception if it doesn't know this anchor name const Node *pReferencedNode = pScanner->Retrieve(m_anchor); m_pIdentity = pReferencedNode; // mark the referenced node for the sake of the client code pReferencedNode->m_referenced = true; // use of an Alias object keeps the referenced content from // being deleted twice Content *pAliasedContent = pReferencedNode->m_pContent; if(pAliasedContent) m_pContent = new AliasContent(pAliasedContent); return; } // now split based on what kind of node we should be switch(pScanner->peek().type) { case Token::SCALAR: m_pContent = new Scalar; break; case Token::FLOW_SEQ_START: case Token::BLOCK_SEQ_START: m_pContent = new Sequence; break; case Token::FLOW_MAP_START: case Token::BLOCK_MAP_START: m_pContent = new Map; break; case Token::KEY: // compact maps can only go in a flow sequence if(state.GetCurCollectionType() == ParserState::FLOW_SEQ) m_pContent = new Map; break; default: break; } // Have to save anchor before parsing to allow for aliases as // contained node (recursive structure) if(!m_anchor.empty()) pScanner->Save(m_anchor, this); if(m_pContent) m_pContent->Parse(pScanner, state); } // ParseHeader // . Grabs any tag, alias, or anchor tokens and deals with them. void Node::ParseHeader(Scanner *pScanner, ParserState& state) { while(1) { if(pScanner->empty()) return; switch(pScanner->peek().type) { case Token::TAG: ParseTag(pScanner, state); break; case Token::ANCHOR: ParseAnchor(pScanner, state); break; case Token::ALIAS: ParseAlias(pScanner, state); break; default: return; } } } void Node::ParseTag(Scanner *pScanner, ParserState& state) { Token& token = pScanner->peek(); if(m_tag != "") throw ParserException(token.mark, ErrorMsg::MULTIPLE_TAGS); Tag tag(token); m_tag = tag.Translate(state); pScanner->pop(); } void Node::ParseAnchor(Scanner *pScanner, ParserState& /*state*/) { Token& token = pScanner->peek(); if(m_anchor != "") throw ParserException(token.mark, ErrorMsg::MULTIPLE_ANCHORS); m_anchor = token.value; m_alias = false; pScanner->pop(); } void Node::ParseAlias(Scanner *pScanner, ParserState& /*state*/) { Token& token = pScanner->peek(); if(m_anchor != "") throw ParserException(token.mark, ErrorMsg::MULTIPLE_ALIASES); if(m_tag != "") throw ParserException(token.mark, ErrorMsg::ALIAS_CONTENT); m_anchor = token.value; m_alias = true; pScanner->pop(); } CONTENT_TYPE Node::GetType() const { if(!m_pContent) return CT_NONE; if(m_pContent->IsScalar()) return CT_SCALAR; else if(m_pContent->IsSequence()) return CT_SEQUENCE; else if(m_pContent->IsMap()) return CT_MAP; return CT_NONE; } // begin // Returns an iterator to the beginning of this (sequence or map). Iterator Node::begin() const { if(!m_pContent) return Iterator(); std::vector ::const_iterator seqIter; if(m_pContent->GetBegin(seqIter)) return Iterator(new IterPriv(seqIter)); std::map ::const_iterator mapIter; if(m_pContent->GetBegin(mapIter)) return Iterator(new IterPriv(mapIter)); return Iterator(); } // end // . Returns an iterator to the end of this (sequence or map). Iterator Node::end() const { if(!m_pContent) return Iterator(); std::vector ::const_iterator seqIter; if(m_pContent->GetEnd(seqIter)) return Iterator(new IterPriv(seqIter)); std::map ::const_iterator mapIter; if(m_pContent->GetEnd(mapIter)) return Iterator(new IterPriv(mapIter)); return Iterator(); } // size // . Returns the size of this node, if it's a sequence node. // . Otherwise, returns zero. std::size_t Node::size() const { if(!m_pContent) return 0; return m_pContent->GetSize(); } const Node *Node::FindAtIndex(std::size_t i) const { if(!m_pContent) return 0; return m_pContent->GetNode(i); } bool Node::GetScalar(std::string& s) const { if(!m_pContent) { if(m_tag.empty()) s = "~"; else s = ""; return true; } return m_pContent->GetScalar(s); } Emitter& operator << (Emitter& out, const Node& node) { // write anchor/alias if(node.m_anchor != "") { if(node.m_alias) out << Alias(node.m_anchor); else out << Anchor(node.m_anchor); } if(node.m_tag != "") out << VerbatimTag(node.m_tag); // write content if(node.m_pContent) node.m_pContent->Write(out); else if(!node.m_alias) out << Null; return out; } int Node::Compare(const Node& rhs) const { // Step 1: no content is the smallest if(!m_pContent) { if(rhs.m_pContent) return -1; else return 0; } if(!rhs.m_pContent) return 1; return m_pContent->Compare(rhs.m_pContent); } bool operator < (const Node& n1, const Node& n2) { return n1.Compare(n2) < 0; } } rivet-1.8.3/src/Tools/yaml-cpp/nodeimpl.h0000644000175000017500000000505512116077762016457 0ustar sunsun#pragma once #ifndef NODEIMPL_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define NODEIMPL_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include "nodeutil.h" namespace YAML { // implementation of templated things template inline const T Node::Read() const { T value; *this >> value; return value; } template Node::operator T() const { return Read(); } template inline void operator >> (const Node& node, T& value) { if(!ConvertScalar(node, value)) throw InvalidScalar(node.m_mark); } template inline const Node *Node::FindValue(const T& key) const { switch(GetType()) { case CT_MAP: return FindValueForKey(key); case CT_SEQUENCE: return FindFromNodeAtIndex(*this, key); default: return 0; } } template inline const Node *Node::FindValueForKey(const T& key) const { for(Iterator it=begin();it!=end();++it) { T t; if(it.first().Read(t)) { if(key == t) return &it.second(); } } return 0; } template inline const Node& Node::GetValue(const T& key) const { if(!m_pContent) throw BadDereference(); const Node *pValue = FindValue(key); if(!pValue) throw MakeTypedKeyNotFound(m_mark, key); return *pValue; } template inline const Node& Node::operator [] (const T& key) const { return GetValue(key); } inline const Node *Node::FindValue(const char *key) const { return FindValue(std::string(key)); } inline const Node& Node::operator [] (const char *key) const { return GetValue(std::string(key)); } template inline bool operator == (const T& value, const Node& node) { return value == node.operator T(); } template inline bool operator == (const Node& node, const T& value) { return value == node.operator T(); } template inline bool operator != (const T& value, const Node& node) { return value != node.operator T(); } template inline bool operator != (const Node& node, const T& value) { return value != node.operator T(); } inline bool operator == (const char *value, const Node& node) { return std::string(value) == node; } inline bool operator == (const Node& node, const char *value) { return std::string(value) == node; } inline bool operator != (const char *value, const Node& node) { return std::string(value) != node; } inline bool operator != (const Node& node, const char *value) { return std::string(value) != node; } } #endif // NODEIMPL_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/yaml-cpp/parser.h0000644000175000017500000000156512116077762016146 0ustar sunsun#pragma once #ifndef PARSER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #define PARSER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 #include "node.h" #include "noncopyable.h" #include #include #include #include #include namespace YAML { class Scanner; struct ParserState; struct Token; class Parser: private noncopyable { public: Parser(); Parser(std::istream& in); ~Parser(); operator bool() const; void Load(std::istream& in); bool GetNextDocument(Node& document); void PrintTokens(std::ostream& out); private: void ParseDirectives(); void HandleDirective(const Token& token); void HandleYamlDirective(const Token& token); void HandleTagDirective(const Token& token); private: std::auto_ptr m_pScanner; std::auto_ptr m_pState; }; } #endif // PARSER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 rivet-1.8.3/src/Tools/Logging.cc0000644000175000017500000001247412116077757014661 0ustar sunsun#include "Rivet/Tools/Logging.hh" #include #include using namespace std; namespace Rivet { Log::LogMap Log::existingLogs; Log::LevelMap Log::defaultLevels; Log::ColorCodes Log::colorCodes; string Log::endColorCode; bool Log::showTimestamp = false; bool Log::showLogLevel = true; bool Log::showLoggerName = true; bool Log::useShellColors = true; Log::Log(const string& name) : _name(name), _level(INFO), _nostream(new ostream(0)) { } Log::Log(const string& name, int level) : _name(name), _level(level), _nostream(new ostream(0)) { } /// @todo Add single static setLevel void _updateLevels(const Log::LevelMap& defaultLevels, Log::LogMap& existingLogs) { /// @todo Check ordering - "Foo" should come before "Foo.Bar" for (Log::LevelMap::const_iterator lev = defaultLevels.begin(); lev != defaultLevels.end(); ++lev) { for (Log::LogMap::iterator log = existingLogs.begin(); log != existingLogs.end(); ++log) { if (log->first.find(lev->first) == 0) { log->second->setLevel(lev->second); } } } } void Log::setLevel(const string& name, int level) { defaultLevels[name] = level; //cout << name << " -> " << level << endl; _updateLevels(defaultLevels, existingLogs); } void Log::setLevels(const LevelMap& logLevels) { for (LevelMap::const_iterator lev = logLevels.begin(); lev != logLevels.end(); ++lev) { defaultLevels[lev->first] = lev->second; } _updateLevels(defaultLevels, existingLogs); } Log& Log::getLog(const string& name) { if (existingLogs.find(name) == existingLogs.end()) { int level = INFO; // Try running through all parent classes to find an existing level string tmpname = name; bool triedAllParents = false; while (! triedAllParents) { // Is there a default level? if (defaultLevels.find(tmpname) != defaultLevels.end()) { level = defaultLevels.find(tmpname)->second; break; } // Is there already such a logger? (NB. tmpname != name) if (existingLogs.find(tmpname) != existingLogs.end()) { level = existingLogs.find(tmpname)->second->getLevel(); break; } // Crop the string back to the next parent level size_t lastDot = tmpname.find_last_of("."); if (lastDot != string::npos) { tmpname = tmpname.substr(0, lastDot); } else { triedAllParents = true; } } // for (LevelMap::const_iterator l = defaultLevels.begin(); l != defaultLevels.end(); ++l) { // // } existingLogs[name] = new Log(name, level); } return *existingLogs[name]; } string Log::getLevelName(int level) { /// @todo Do the map::upper_limit thing to find nearest level... switch(level) { case TRACE: return "TRACE"; case DEBUG: return "DEBUG"; case INFO: return "INFO"; case WARN: return "WARN"; case ERROR: return "ERROR"; default: return ""; } //throw Error("Enum value was not a valid log level. How did that happen?"); } string Log::getColorCode(int level) { if (!Log::useShellColors) return ""; // If the codes haven't been initialized, do so now. if (Log::colorCodes.empty()) { // If stdout is a valid tty, try to use the appropriate codes. if (isatty(1)) { /// @todo Test for VT100 compliance? Log::colorCodes[TRACE] = "\033[0;36m"; Log::colorCodes[DEBUG] = "\033[0;34m"; Log::colorCodes[INFO] = "\033[0;32m"; Log::colorCodes[WARN] = "\033[0;33m"; Log::colorCodes[ERROR] = "\033[0;31m"; Log::endColorCode = "\033[0m"; } else { Log::colorCodes[TRACE] = ""; Log::colorCodes[DEBUG] = ""; Log::colorCodes[INFO] = ""; Log::colorCodes[WARN] = ""; Log::colorCodes[ERROR] = ""; } } // Return the appropriate code from the colour map. /// @todo Do the map::upper_limit thing to find nearest level... return colorCodes[level]; } Log::Level Log::getLevelFromName(const string& level) { if (level == "TRACE") return TRACE; if (level == "DEBUG") return DEBUG; if (level == "INFO") return INFO; if (level == "WARN") return WARN; if (level == "ERROR") return ERROR; throw Error("Couldn't create a log level from string '" + level + "'"); } string Log::formatMessage(int level, const string& message) { string out; if (Log::useShellColors) { out += getColorCode(level); } if (Log::showLoggerName) { out += getName(); out += ": "; } if (Log::showLogLevel) { out += Log::getLevelName(level); out += " "; } if (Log::showTimestamp) { time_t rawtime; time(&rawtime); char* timestr = ctime(&rawtime); timestr[24] = ' '; out += timestr; out += " "; } if (Log::useShellColors) { out += endColorCode; } out += " "; out += message; return out; } void Log::log(int level, const string& message) { if (isActive(level)) { cout << formatMessage(level, message) << endl; } } ostream& operator<<(Log& log, int level) { if (log.isActive(level)) { cout << log.formatMessage(level, ""); return cout; } else { return *(log._nostream); } } } rivet-1.8.3/src/Tools/Makefile.am0000644000175000017500000000155012116077757015011 0ustar sunsunif WITHOUT_YAML_CPP SUBDIRS = yaml-cpp endif noinst_LTLIBRARIES = libRivetTools.la libRivetTools_la_SOURCES = \ Logging.cc \ RivetAIDA.cc \ RivetPaths.cc \ binreloc.c \ Utils.cc \ ParticleIdUtils.cc \ TinyXML/tinyxml.cpp \ TinyXML/tinyxmlerror.cpp \ TinyXML/tinyxmlparser.cpp \ mt2_bisect.cc \ RivetMT2.cc \ BinnedHistogram.cc dist_noinst_HEADERS = binreloc.h mt2_bisect.hh libRivetTools_la_CPPFLAGS = \ $(AM_CPPFLAGS) \ -I$(top_srcdir)/include/TinyXML \ -DENABLE_BINRELOC \ -DDEFAULTDATADIR=\"$(datadir)\" \ -DDEFAULTLIBDIR=\"$(libdir)\" ## NB. Using $(top_builddir)/src/Tools rather than $(builddir) because of SL4 automake bug if WITH_YAML_CPP libRivetTools_la_LDFLAGS = $(AM_LDFLAGS) -L$(YAML_CPPLIBPATH) libRivetTools_la_LIBADD = -lyaml-cpp else libRivetTools_la_LIBADD = $(top_builddir)/src/Tools/yaml-cpp/libyaml-cpp.la endif rivet-1.8.3/src/Core/0000755000175000017500000000000012131473204012524 5ustar sunsunrivet-1.8.3/src/Core/AnalysisHandler.cc0000644000175000017500000003146112116077757016141 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/ParticleName.hh" #include "Rivet/AnalysisHandler.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Analysis.hh" #include "Rivet/Event.hh" #include "Rivet/Projections/Beam.hh" #include "LWH/AIManagedObject.h" using namespace AIDA; namespace Rivet { AnalysisHandler::AnalysisHandler(const string& runname) : _runname(runname), _numEvents(0), _sumOfWeights(0.0), _xs(-1.0), _initialised(false), _ignoreBeams(false) { _theAnalysisFactory.reset( createAnalysisFactory() ); _setupFactories(); } AnalysisHandler::AnalysisHandler(const string& basefilename, const string& runname, HistoFormat storetype) : _runname(runname), _numEvents(0), _sumOfWeights(0.0), _xs(-1.0), _initialised(false), _ignoreBeams(false) { cerr << "AnalysisHandler(basefilename, runname, format) constructor is deprecated: " << "please migrate your code to use the one-arg constructor" << endl; _theAnalysisFactory.reset( createAnalysisFactory() ); _setupFactories(basefilename, storetype); } AnalysisHandler::~AnalysisHandler() { } Log& AnalysisHandler::getLog() const { return Log::getLog("Rivet.Analysis.Handler"); } void AnalysisHandler::init(const GenEvent& ge) { assert(!_initialised); setRunBeams(Rivet::beams(ge)); MSG_DEBUG("Initialising the analysis handler"); _numEvents = 0; _sumOfWeights = 0.0; // Check that analyses are beam-compatible, and remove those that aren't const size_t num_anas_requested = analysisNames().size(); vector anamestodelete; foreach (const AnaHandle a, _analyses) { if ((!a->isCompatible(beams())) && (!_ignoreBeams)) { //MSG_DEBUG(a->name() << " requires beams " << a->requiredBeams() << " @ " << a->requiredEnergies() << " GeV"); anamestodelete.push_back(a->name()); } } foreach (const string& aname, anamestodelete) { MSG_WARNING("Analysis '" << aname << "' is incompatible with the provided beams: removing"); removeAnalysis(aname); } if (num_anas_requested > 0 && analysisNames().size() == 0) { cerr << "All analyses were incompatible with the first event's beams\n" << "Exiting, since this probably wasn't intentional!" << endl; exit(1); } // Warn if any analysis' status is not unblemished foreach (const AnaHandle a, analyses()) { if (toUpper(a->status()) == "PRELIMINARY") { MSG_WARNING("Analysis '" << a->name() << "' is preliminary: be careful, it may change and/or be renamed!"); } else if (toUpper(a->status()) == "OBSOLETE") { MSG_WARNING("Analysis '" << a->name() << "' is obsolete: please update!"); } else if (toUpper(a->status()).find("UNVALIDATED") != string::npos) { MSG_WARNING("Analysis '" << a->name() << "' is unvalidated: be careful, it may be broken!"); } } // Initialize the remaining analyses foreach (AnaHandle a, _analyses) { MSG_DEBUG("Initialising analysis: " << a->name()); try { // Allow projection registration in the init phase onwards a->_allowProjReg = true; a->init(); //MSG_DEBUG("Checking consistency of analysis: " << a->name()); //a->checkConsistency(); } catch (const Error& err) { cerr << "Error in " << a->name() << "::init method: " << err.what() << endl; exit(1); } MSG_DEBUG("Done initialising analysis: " << a->name()); } _initialised = true; MSG_DEBUG("Analysis handler initialised"); } void AnalysisHandler::analyze(const GenEvent& ge) { // Call init with event as template if not already initialised if (!_initialised) { init(ge); } // Proceed with event analysis assert(_initialised); // Ensure that beam details match those from first event const PdgIdPair beams = Rivet::beamIds(ge); const double sqrts = Rivet::sqrtS(ge); if (!compatible(beams, _beams) || !fuzzyEquals(sqrts, sqrtS())) { cerr << "Event beams mismatch: " << toBeamsString(beams) << " @ " << sqrts/GeV << " GeV" << " vs. first beams " << this->beams() << " @ " << this->sqrtS()/GeV << " GeV" << endl; exit(1); } Event event(ge); _numEvents++; // Weights const double weight = event.weight(); _sumOfWeights += weight; MSG_DEBUG("Event #" << _numEvents << " weight = " << weight); #ifdef HEPMC_HAS_CROSS_SECTION if (ge.cross_section()) { const double xs = ge.cross_section()->cross_section(); setCrossSection(xs); } #endif foreach (AnaHandle a, _analyses) { //MSG_DEBUG("About to run analysis " << a->name()); try { a->analyze(event); } catch (const Error& err) { cerr << "Error in " << a->name() << "::analyze method: " << err.what() << endl; exit(1); } //MSG_DEBUG("Finished running analysis " << a->name()); } } void AnalysisHandler::finalize() { assert(_initialised); MSG_INFO("Finalising analyses"); foreach (AnaHandle a, _analyses) { try { a->finalize(); } catch (const Error& err) { cerr << "Error in " << a->name() << "::finalize method: " << err.what() << endl; exit(1); } } // Print out number of events processed MSG_INFO("Processed " << _numEvents << " event" << (_numEvents == 1 ? "" : "s")); // Change AIDA histos into data point sets MSG_DEBUG("Converting histograms to scatter plots"); assert(_theTree != 0); _normalizeTree(tree()); // Delete analyses MSG_DEBUG("Deleting analyses"); _analyses.clear(); // Print out MCnet boilerplate cout << endl; cout << "The MCnet usage guidelines apply to Rivet: see http://www.montecarlonet.org/GUIDELINES" << endl; cout << "Please acknowledge plots made with Rivet analyses, and cite arXiv:1003.0694 (http://arxiv.org/abs/1003.0694)" << endl; } AnalysisHandler& AnalysisHandler::addAnalysis(const string& analysisname) { // Check for a duplicate analysis /// @todo Might we want to be able to run an analysis twice, with different params? /// Requires avoiding histo tree clashes, i.e. storing the histos on the analysis objects. foreach (const AnaHandle& a, _analyses) { if (a->name() == analysisname) { MSG_WARNING("Analysis '" << analysisname << "' already registered: skipping duplicate"); return *this; } } AnaHandle analysis( AnalysisLoader::getAnalysis(analysisname) ); if (analysis.get() != 0) { // < Check for null analysis. MSG_DEBUG("Adding analysis '" << analysisname << "'"); analysis->_analysishandler = this; _analyses.insert(analysis); } else { MSG_WARNING("Analysis '" << analysisname << "' not found."); } return *this; } AnalysisHandler& AnalysisHandler::removeAnalysis(const string& analysisname) { shared_ptr toremove; foreach (const AnaHandle a, _analyses) { if (a->name() == analysisname) { toremove = a; break; } } if (toremove.get() != 0) { MSG_DEBUG("Removing analysis '" << analysisname << "'"); _analyses.erase(toremove); } return *this; } void AnalysisHandler::_setupFactories(const string& basefilename, HistoFormat storetype) { string filename(basefilename), storetypestr(""); if (storetype == AIDAML) { if (!endsWith(filename, ".aida")) filename += ".aida"; storetypestr = "xml"; } else if (storetype == FLAT) { if (!endsWith(filename, ".data")) filename += ".data"; storetypestr = "flat"; } else if (storetype == ROOT) { if (!endsWith(filename, ".root")) filename += ".root"; storetypestr = "root"; } _theTreeFactory = _theAnalysisFactory->createTreeFactory(); _theTree = _theTreeFactory->create(filename, storetypestr, false, true); _theHistogramFactory = _theAnalysisFactory->createHistogramFactory(tree()); _theDataPointSetFactory = _theAnalysisFactory->createDataPointSetFactory(tree()); } void AnalysisHandler::_setupFactories() { _theTreeFactory = _theAnalysisFactory->createTreeFactory(); _theTree = _theTreeFactory->create(); _theHistogramFactory = _theAnalysisFactory->createHistogramFactory(tree()); _theDataPointSetFactory = _theAnalysisFactory->createDataPointSetFactory(tree()); } void AnalysisHandler::commitData() { tree().commit(); } void AnalysisHandler::writeData(const string& filename) { tree().commit(filename); } void AnalysisHandler::_normalizeTree(ITree& tree) { const vector paths = tree.listObjectNames("/", true); // args set recursive listing MSG_TRACE("Number of objects in AIDA tree = " << paths.size()); const string tmpdir = "/RivetNormalizeTmp"; tree.mkdir(tmpdir); foreach (const string& path, paths) { IManagedObject* hobj = tree.find(path); if (hobj) { // Try to cast to specific histogram types const IProfile1D* prof = dynamic_cast(hobj); const IHistogram1D* histo = (prof) ? 0 : dynamic_cast(hobj); const IHistogram2D* histo2 = (prof || histo) ? 0 : dynamic_cast(hobj); if (!(histo || histo2 || prof)) { MSG_TRACE("Could not find the type of histo for " << path << ": it's probably already a DPS"); continue; } // AIDA path mangling const size_t lastslash = path.find_last_of("/"); const string basename = path.substr(lastslash+1, path.length() - (lastslash+1)); const string tmppath = tmpdir + "/" + basename; // If it's a normal histo: tree.mv(path, tmpdir); if (histo) { MSG_TRACE("Converting histo " << path << " to DPS"); IHistogram1D* tmphisto = dynamic_cast(tree.find(tmppath)); if (tmphisto) datapointsetFactory().create(path, *tmphisto); } // If it's a 2D histo: else if (histo2) { MSG_TRACE("Converting 2D histo " << path << " to DPS"); IHistogram2D* tmphisto2 = dynamic_cast(tree.find(tmppath)); if (tmphisto2) datapointsetFactory().create(path, *tmphisto2); } // If it's a profile histo: else if (prof) { MSG_TRACE("Converting profile histo " << path << " to DPS"); IProfile1D* tmpprof = dynamic_cast(tree.find(tmppath)); if (tmpprof) datapointsetFactory().create(path, *tmpprof); } tree.rm(tmppath); } } tree.rmdir(tmpdir); } string AnalysisHandler::runName() const { return _runname; } size_t AnalysisHandler::numEvents() const { return _numEvents; } double AnalysisHandler::sumOfWeights() const { return _sumOfWeights; } void AnalysisHandler::setSumOfWeights(const double& sum) { _sumOfWeights=sum; } std::vector AnalysisHandler::analysisNames() const { std::vector rtn; foreach (AnaHandle a, _analyses) { rtn.push_back(a->name()); } return rtn; } AnalysisHandler& AnalysisHandler::addAnalyses(const std::vector& analysisnames) { foreach (const string& aname, analysisnames) { //MSG_DEBUG("Adding analysis '" << aname << "'"); addAnalysis(aname); } return *this; } AnalysisHandler& AnalysisHandler::removeAnalyses(const std::vector& analysisnames) { foreach (const string& aname, analysisnames) { removeAnalysis(aname); } return *this; } AIDA::IAnalysisFactory& AnalysisHandler::analysisFactory() { return *_theAnalysisFactory; } AIDA::ITree& AnalysisHandler::tree() { return *_theTree; } AIDA::IHistogramFactory& AnalysisHandler::histogramFactory() { return *_theHistogramFactory; } AIDA::IDataPointSetFactory& AnalysisHandler::datapointsetFactory() { return *_theDataPointSetFactory; } bool AnalysisHandler::needCrossSection() const { bool rtn = false; foreach (const AnaHandle a, _analyses) { if (!rtn) rtn = a->needsCrossSection(); if (rtn) break; } return rtn; } AnalysisHandler& AnalysisHandler::setCrossSection(double xs) { _xs = xs; foreach (AnaHandle a, _analyses) { a->setCrossSection(xs); } return *this; } bool AnalysisHandler::hasCrossSection() const { return (!std::isnan(crossSection())); } AnalysisHandler& AnalysisHandler::addAnalysis(Analysis* analysis) { analysis->_analysishandler = this; _analyses.insert(AnaHandle(analysis)); return *this; } PdgIdPair AnalysisHandler::beamIds() const { return Rivet::beamIds(beams()); } double AnalysisHandler::sqrtS() const { return Rivet::sqrtS(beams()); } void AnalysisHandler::setIgnoreBeams(bool ignore) { _ignoreBeams=ignore; } } rivet-1.8.3/src/Core/Run.cc0000644000175000017500000000713112116077757013621 0ustar sunsun// -*- C++ -*- #include "Rivet/Run.hh" #include "Rivet/AnalysisHandler.hh" #include "HepMC/IO_GenEvent.h" #include "Rivet/Math/MathUtils.hh" #include namespace Rivet { Run::Run(AnalysisHandler& ah) : _ah(ah), _fileweight(1.0), _xs(NAN) { } Run::~Run() { } Run& Run::setCrossSection(const double xs) { _xs = xs; return *this; } double Run::crossSection() const { return _ah.crossSection(); } Run& Run::setListAnalyses(const bool dolist) { _listAnalyses = dolist; return *this; } // Fill event and check for a bad read state bool Run::readEvent() { /// @todo Clear rather than new the GenEvent object per-event? _evt.reset(new GenEvent()); if (_io->rdstate() != 0 || !_io->fill_next_event(_evt.get()) ) { Log::getLog("Rivet.Run") << Log::DEBUG << "Read failed. End of file?" << endl; return false; } // Rescale event weights by file-level weight, if scaling is non-trivial if (!fuzzyEquals(_fileweight, 1.0)) { for (size_t i = 0; i < (size_t) _evt->weights().size(); ++i) { _evt->weights()[i] *= _fileweight; } } return true; } bool Run::openFile(const std::string& evtfile, double weight) { // Set current weight-scaling member _fileweight = weight; // Set up HepMC input reader objects if (evtfile == "-") { _io.reset(new HepMC::IO_GenEvent(std::cin)); } else { // Ignore the HepMC::IO_GenEvent(filename, ios) constructor, since it's only available from HepMC 2.4 _istr.reset(new std::fstream(evtfile.c_str(), std::ios::in)); _io.reset(new HepMC::IO_GenEvent(*_istr)); } if (_io->rdstate() != 0) { Log::getLog("Rivet.Run") << Log::ERROR << "Read error on file " << evtfile << endl; return false; } return true; } bool Run::init(const std::string& evtfile, double weight) { if (!openFile(evtfile, weight)) return false; // Read first event to define run conditions bool ok = readEvent(); if (!ok) return false; if (_evt->particles_size() == 0) { Log::getLog("Rivet.Run") << Log::ERROR << "Empty first event." << endl; return false; } // Initialise AnalysisHandler with beam information from first event _ah.init(*_evt); // Set cross-section from command line if (_xs >= 0.0) { Log::getLog("Rivet.Run") << Log::DEBUG << "Setting user cross-section = " << _xs << " pb" << endl; _ah.setCrossSection(_xs); } // List the chosen & compatible analyses if requested if (_listAnalyses) { foreach (const std::string& ana, _ah.analysisNames()) { cout << ana << endl; } } return true; } bool Run::processEvent() { // Set cross-section if found in event and not from command line #ifdef HEPMC_HAS_CROSS_SECTION if (std::isnan(_xs) && _evt->cross_section()) { const double xs = _evt->cross_section()->cross_section(); //< in pb Log::getLog("Rivet.Run") << Log::DEBUG << "Setting cross-section = " << xs << " pb" << endl; _ah.setCrossSection(xs); } #endif // Complain about absence of cross-section if required! if (_ah.needCrossSection() && !_ah.hasCrossSection()) { Log::getLog("Rivet.Run") << Log::ERROR << "Total cross-section needed for at least one of the analyses. " << "Please set it (on the command line with '-x' if using the 'rivet' program)" << endl; return false; } // Analyze event _ah.analyze(*_evt); return true; } bool Run::finalize() { _evt.reset(); _istr.reset(); _io.reset(); return true; } } rivet-1.8.3/src/Core/AnalysisInfo.cc0000644000175000017500000001463312116077757015461 0ustar sunsun#include "Rivet/Rivet.hh" #include "Rivet/RivetBoost.hh" #include "Rivet/AnalysisInfo.hh" #include "Rivet/Tools/Utils.hh" #include "Rivet/Tools/RivetPaths.hh" #include "Rivet/Tools/Logging.hh" #include "yaml-cpp/yaml.h" #include #include #include namespace Rivet { namespace { Log& getLog() { return Log::getLog("Rivet.AnalysisInfo"); } } /// Static factory method AnalysisInfo* AnalysisInfo::make(const std::string& ananame) { // Returned AI, in semi-null state AnalysisInfo* ai = new AnalysisInfo(); ai->_beams += make_pair(ANY, ANY); ai->_name = ananame; /// If no ana data file found, return null AI const string datapath = findAnalysisInfoFile(ananame + ".info"); if (datapath.empty()) { MSG_DEBUG("No datafile " << ananame + ".info found"); return ai; } // Read data from YAML document MSG_DEBUG("Reading analysis data from " << datapath); std::ifstream io(datapath.c_str()); YAML::Parser parser(io); YAML::Node doc; try { parser.GetNextDocument(doc); //cout << doc << endl; } catch (const YAML::ParserException& ex) { MSG_ERROR("Parse error when reading analysis data from " << datapath << " (" << ex.what() << ")"); return ai; } for (YAML::Iterator it = doc.begin(); it != doc.end(); ++it) { string key; it.first() >> key; stringstream sec; // sec << it.second(); // const string secstr = sec.str().substr(0, sec.str().length()-1); // MSG_TRACE(key << ": " << secstr); try { if (key == "Name") { it.second() >> ai->_name; } else if (key == "Summary") { it.second() >> ai->_summary; } else if (key == "Experiment") { it.second() >> ai->_experiment; } else if (key == "Beams") { const YAML::Node& beampairs = it.second(); vector beam_pairs; if (beampairs.size() == 2 && beampairs[0].GetType() == YAML::CT_SCALAR && beampairs[1].GetType() == YAML::CT_SCALAR) { string bstr0, bstr1; beampairs[0] >> bstr0; beampairs[1] >> bstr1; beam_pairs += make_pdgid_pair(bstr0, bstr1); } else { for (YAML::Iterator bpi = beampairs.begin(); bpi != beampairs.end(); ++bpi) { const YAML::Node& bp = *bpi; if (bp.size() == 2 && bp[0].GetType() == YAML::CT_SCALAR && bp[1].GetType() == YAML::CT_SCALAR) { string bstr0, bstr1; bp[0] >> bstr0; bp[1] >> bstr1; beam_pairs += make_pdgid_pair(bstr0, bstr1); } else { assert(0 && "Beam ID pairs have to be either a 2-tuple or a list of 2-tuples of particle names"); } } } ai->_beams = beam_pairs; } else if (key == "Energies") { const YAML::Node& energies = it.second(); vector > beam_energy_pairs; for (YAML::Iterator be = energies.begin(); be != energies.end(); ++be) { if (be->GetType() == YAML::CT_SCALAR) { // If beam energy is a scalar, then assume symmetric beams each with half that energy double sqrts; *be >> sqrts; beam_energy_pairs += make_pair(sqrts/2.0, sqrts/2.0); } else if (be->GetType() == YAML::CT_SEQUENCE) { const YAML::Node& beseq = *be; // If the sub-sequence is of length 1, then it's another scalar sqrt(s)! if (beseq.size() == 1) { double sqrts; (*be)[0] >> sqrts; beam_energy_pairs += make_pair(sqrts/2.0, sqrts/2.0); } else if (beseq.size() == 2) { vector beamenergies; double beamenergy0, beamenergy1; beseq[0] >> beamenergy0; beseq[1] >> beamenergy1; beam_energy_pairs += make_pair(beamenergy0, beamenergy1); } else { assert(0 && "Beam energies have to be a list of either numbers or pairs of numbers"); } } else { assert(0 && "Beam energies have to be a list of either numbers or pairs of numbers"); } } ai->_energies = beam_energy_pairs; } else if (key == "Collider") { it.second() >> ai->_collider; } else if (key == "SpiresID") { it.second() >> ai->_spiresId; } else if (key == "BibKey") { it.second() >> ai->_bibKey; } else if (key == "BibTeX") { it.second() >> ai->_bibTeX;//Body; } else if (key == "Status") { it.second() >> ai->_status; } else if (key == "ToDo") { const YAML::Node& todos = it.second(); for (YAML::Iterator todo = todos.begin(); todo != todos.end(); ++todo) { string s; *todo >> s; ai->_todos += s; } } else if (key == "NeedCrossSection" || key == "NeedsCrossSection") { it.second() >> ai->_needsCrossSection; } else if (key == "RunInfo") { it.second() >> ai->_runInfo; } else if (key == "Description") { it.second() >> ai->_description; } else if (key == "Year") { it.second() >> ai->_year; } else if (key == "Authors") { const YAML::Node& authors = it.second(); for (YAML::Iterator a = authors.begin(); a != authors.end(); ++a) { string astr; *a >> astr; ai->_authors += astr; } } else if (key == "References") { const YAML::Node& refs = it.second(); for (YAML::Iterator r = refs.begin(); r != refs.end(); ++r) { string rstr; *r >> rstr; ai->_references += rstr; } } } catch (const YAML::RepresentationException& ex) { Log::getLog("Rivet.Analysis") << Log::WARN << "Type error when reading analysis data '" << key << "' from " << datapath << endl; } } MSG_TRACE("AnalysisInfo pointer = " << ai); return ai; } string toString(const AnalysisInfo& ai) { stringstream ss; ss << ai.name(); ss << " - " << ai.summary(); // ss << " - " << ai.beams(); // ss << " - " << ai.energies(); ss << " (" << ai.status() << ")"; return ss.str(); } } rivet-1.8.3/src/Core/Projection.cc0000644000175000017500000000312512116077757015170 0ustar sunsun// -*- C++ -*- #include "Rivet/Projection.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Event.hh" #include "Rivet/Cmp.hh" namespace Rivet { Projection::Projection() : _name("BaseProjection") { addPdgIdPair(ANY, ANY); //getLog() << Log::TRACE << "Creating " << name() << " at " << this << endl; } Projection:: ~Projection() { //getLog() << Log::TRACE << "Destroying " << name() << " at " << this << endl; } // int Projection::compare(const Projection& p) const { // return mkNamedPCmp(p, "FS"); // } bool Projection::before(const Projection& p) const { const std::type_info& thisid = typeid(*this); const std::type_info& otherid = typeid(p); if (thisid == otherid) { return compare(p) < 0; } else { return thisid.before(otherid); } } const set Projection::beamPairs() const { set ret = _beamPairs; set projs = getProjections(); for (set::const_iterator ip = projs.begin(); ip != projs.end(); ++ip) { ConstProjectionPtr p = *ip; getLog() << Log::TRACE << "Proj addr = " << p << endl; if (p) ret = intersection(ret, p->beamPairs()); } return ret; } Cmp Projection::mkNamedPCmp(const Projection& otherparent, const string& pname) const { return pcmp(*this, otherparent, pname); } Cmp Projection::mkPCmp(const Projection& otherparent, const string& pname) const { return pcmp(*this, otherparent, pname); } } rivet-1.8.3/src/Core/ParticleName.cc0000644000175000017500000000230212116077757015414 0ustar sunsun#include "Rivet/ParticleName.hh" #include "Rivet/RivetBoost.hh" #include "Rivet/Tools/Utils.hh" namespace Rivet { // Initialise ParticleNames singleton pointer ParticleNames* ParticleNames::_instance = 0; const std::string& ParticleNames::_particleName(PdgId pid) { if (_ids_names.find(pid) == _ids_names.end()) { throw PidError("Particle ID '" + lexical_cast(pid) + "' not known."); } return _ids_names[pid]; } PdgId ParticleNames::_particleId(const std::string& pname) { if (_names_ids.find(pname) == _names_ids.end()) { if (toUpper(pname) == "P+" || toUpper(pname) == "P") return PROTON; if (toUpper(pname) == "P-" || toUpper(pname) == "PBAR") return ANTIPROTON; if (toUpper(pname) == "E-") return ELECTRON; if (toUpper(pname) == "E+") return POSITRON; if (toUpper(pname) == "GAMMA") return PHOTON; if (toUpper(pname) == "N") return NEUTRON; try { PdgId rtn = lexical_cast(pname); return rtn; } catch (const bad_lexical_cast& blc) { throw PidError("Particle name '" + pname + "' not known and could not be directly cast to a PDG ID."); } } return _names_ids[pname]; } } rivet-1.8.3/src/Core/Event.cc0000644000175000017500000000723412116077757014142 0ustar sunsun#include "Rivet/Event.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/BeamConstraint.hh" #include "HepMC/GenEvent.h" namespace Rivet { void _geRot180x(GenEvent& ge) { for (HepMC::GenEvent::particle_iterator ip = ge.particles_begin(); ip != ge.particles_end(); ++ip) { const HepMC::FourVector& mom = (*ip)->momentum(); (*ip)->set_momentum(HepMC::FourVector(mom.px(), -mom.py(), -mom.pz(), mom.e())); } for (HepMC::GenEvent::vertex_iterator iv = ge.vertices_begin(); iv != ge.vertices_end(); ++iv) { const HepMC::FourVector& pos = (*iv)->position(); (*iv)->set_position(HepMC::FourVector(pos.x(), -pos.y(), -pos.z(), pos.t())); } } // Convert the GenEvent to use conventional alignment // (proton or electron on +ve z-axis?) // For example, FHerwig only produces DIS events in the // unconventional orientation and has to be corrected void Event::_geNormAlignment() { if (!_genEvent.valid_beam_particles()) return; typedef pair GPPair; GPPair bps = _genEvent.beam_particles(); //const PdgIdPair beamids = make_pdgid_pair(bps.first->pdg_id(), bps.second->pdg_id()); //Log::getLog("Rivet.Event") << Log::TRACE << "Beam IDs: " << beamids << endl; const HepMC::GenParticle* plusgp = 0; bool rot = false; // Rotate e+- p and ppbar to put p along +z /// @todo e+ e- convention? B-factories different from LEP? // if (compatible(beamids, make_pdgid_pair(ELECTRON, PROTON)) || // compatible(beamids, make_pdgid_pair(POSITRON, PROTON)) || // compatible(beamids, make_pdgid_pair(ANTIPROTON, PROTON)) ) { // Log::getLog("Rivet.Event") << Log::TRACE << "May need to rotate event..." << endl; if (bps.first->pdg_id() != PROTON || bps.second->pdg_id() != PROTON) { if (bps.first->pdg_id() == PROTON) { plusgp = bps.first; } else if (bps.second->pdg_id() == PROTON) { plusgp = bps.second; } if (plusgp && plusgp->momentum().pz() < 0) { rot = true; } } // Do the rotation if (rot) { if (Log::getLog("Rivet.Event").isActive(Log::TRACE)) { Log::getLog("Rivet.Event") << Log::TRACE << "Rotating event" << endl; Log::getLog("Rivet.Event") << Log::TRACE << "Before rotation: " << bps.first->pdg_id() << "@pz=" << bps.first->momentum().pz()/GeV << ", " << bps.second->pdg_id() << "@pz=" << bps.second->momentum().pz()/GeV << endl; } if (!_modGenEvent) _modGenEvent = new GenEvent(_genEvent); _geRot180x(*_modGenEvent); } } Event::Event(const GenEvent& ge) : _genEvent(ge), _modGenEvent(NULL), _weight(1.0) { // Set the weight if there is one, otherwise default to 1.0 if (!_genEvent.weights().empty()) { _weight = ge.weights()[0]; } // Use Rivet's preferred units if possible #ifdef HEPMC_HAS_UNITS if (_genEvent.momentum_unit() != HepMC::Units::GEV || _genEvent.length_unit() != HepMC::Units::MM) { if (!_modGenEvent) _modGenEvent = new GenEvent(ge); _modGenEvent->use_units(HepMC::Units::GEV, HepMC::Units::MM); } #endif // Use the conventional alignment _geNormAlignment(); // Debug printout to check that copying/mangling has worked //_genEvent.print(); } Event::Event(const Event& e) : _genEvent(e._genEvent), _modGenEvent(e._modGenEvent), _weight(e._weight) { // } Event::~Event() { if (_modGenEvent) delete _modGenEvent; } const GenEvent& Event::genEvent() const { if (_modGenEvent) return *_modGenEvent; return _genEvent; } } rivet-1.8.3/src/Core/ProjectionHandler.cc0000644000175000017500000002305312116077757016470 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/ProjectionHandler.hh" #include "Rivet/Cmp.hh" #include namespace Rivet { // Initialize instance pointer to null. ProjectionHandler* ProjectionHandler::_instance = 0; ProjectionHandler& ProjectionHandler::getInstance() { if (!_instance) { _instance = new ProjectionHandler(); Log::getLog("Rivet.ProjectionHandler") << Log::TRACE << "Created new ProjectionHandler at " << _instance << endl; } return *_instance; } // Get a logger. Log& ProjectionHandler::getLog() const { return Log::getLog("Rivet.ProjectionHandler"); } void ProjectionHandler::clear() { _projs.clear(); _namedprojs.clear(); } // Delete contained pointers. ProjectionHandler::~ProjectionHandler() { clear(); } // Take a Projection, compare it to the others on record, and return (by // reference) an equivalent Projection which is guaranteed to be the // (persistent) version that will be applied to an event. const Projection& ProjectionHandler::registerProjection(const ProjectionApplier& parent, const Projection& proj, const string& name) { getLog() << Log::TRACE << "Trying to register" << " projection " << &proj << " (" << proj.name() << ")" << " for parent " << &parent << " (" << parent.name() << ")" << " with name '" << name << "'" << endl; // Check for duplicate use of "name" on "parent" const bool dupOk = _checkDuplicate(parent, proj, name); if (!dupOk) { cerr << "Duplicate name '" << name << "' in parent '" << parent.name() << "'." << endl; exit(1); } // Choose which version of the projection to register with this parent and name const Projection* p = _getEquiv(proj); if (p == 0) { // a null pointer is a non-match // If there is no equivalent projection, clone proj and use the clone for registering p = _clone(proj); } // Do the registering p = _register(parent, *p, name); // Return registered proj return *p; } // Attach and retrieve a projection as a pointer. const Projection* ProjectionHandler::registerProjection(const ProjectionApplier& parent, const Projection* proj, const string& name) { if (proj == 0) return 0; const Projection& p = registerProjection(parent, *proj, name); return &p; } // Clone neatly const Projection* ProjectionHandler::_clone(const Projection& proj) { // Clone a new copy of the passed projection on the heap getLog() << Log::TRACE << "Cloning projection " << proj.name() << " from " << &proj << endl; const Projection* newproj = proj.clone(); getLog() << Log::TRACE << "Cloned projection " << proj.name() << " at " << newproj << endl; getLog() << Log::TRACE << "Clone types " << typeid(proj).name() << " -> " << typeid(newproj).name() << endl; // Copy all the child ProjHandles when cloning, since otherwise links to "stack parents" // will be generated by their children, without any connection to the cloned parent if (&proj != newproj) { NamedProjsMap::const_iterator nps = _namedprojs.find(&proj); if (nps != _namedprojs.end()) { getLog() << Log::TRACE << "Cloning registered projections list: " << &proj << " -> " << newproj << endl; _namedprojs[newproj] = nps->second; } } return newproj; } // Take a Projection, compare it to the others on record, and // return (by reference) an equivalent Projection which is guaranteed to be // the version that will be applied to an event. const Projection* ProjectionHandler::_register(const ProjectionApplier& parent, const Projection& proj, const string& name) { ProjHandle ph(&proj); getLog() << Log::TRACE << "Registering new projection at " << ph << endl; // Add the passed Projection to _projs _projs.insert(ph); // Add the ProjApplier* => name location to the associative container _namedprojs[&parent][name] = ph; return ph.get(); } // Try to find a equivalent projection in the system const Projection* ProjectionHandler::_getEquiv(const Projection& proj) const { // Get class type using RTTI const std::type_info& newtype = typeid(proj); getLog() << Log::TRACE << "RTTI type of " << &proj << " is " << newtype.name() << endl; // Compare to ALL projections via _projs collection getLog() << Log::TRACE << "Comparing " << &proj << " with " << _projs.size() << " registered projection" << (_projs.size() == 1 ? "" : "s") << endl; foreach (const ProjHandle& ph, _projs) { // Make sure the concrete types match, using RTTI. const std::type_info& regtype = typeid(*ph); getLog() << Log::TRACE << "RTTI type comparison with " << ph << ": " << newtype.name() << " vs. " << regtype.name() << endl; if (newtype != regtype) continue; getLog() << Log::TRACE << "RTTI type matches with " << ph << endl; // Test for semantic match if (pcmp(*ph, proj) != EQUIVALENT) { getLog() << Log::TRACE << "Projections at " << &proj << " and " << ph << " are not equivalent" << endl; } else { getLog() << Log::TRACE << "MATCH! Projections at " << &proj << " and " << ph << " are equivalent" << endl; return ph.get(); } } // If no match, just return a null pointer return 0; } string ProjectionHandler::_getStatus() const { ostringstream msg; msg << "Current projection hierarchy:" << endl; foreach (const NamedProjsMap::value_type& nps, _namedprojs) { //const string parentname = nps.first->name(); msg << nps.first << endl; //"(" << parentname << ")" << endl; foreach (const NamedProjs::value_type& np, nps.second) { msg << " " << np.second << " (" << np.second->name() << ", locally called '" << np.first << "')" << endl; } msg << endl; } return msg.str(); } // Check that the same parent hasn't already used this name for something else bool ProjectionHandler::_checkDuplicate(const ProjectionApplier& parent, const Projection& proj, const string& name) const { NamedProjsMap::const_iterator ipnps = _namedprojs.find(&parent); if (ipnps != _namedprojs.end()) { const NamedProjs pnps = ipnps->second; const NamedProjs::const_iterator ipph = pnps.find(name); if (ipph != pnps.end()) { const ProjHandle pph = ipph->second; getLog() << Log::ERROR << "Projection clash! " << parent.name() << " (" << &parent << ") " << "is trying to overwrite its registered '" << name << "' " << "projection (" << pph << "=" << pph->name() << ") with a non-equivalent projection " << "(" << &proj << "=" << proj.name() << ")" << endl; getLog() << Log::ERROR << _getStatus(); return false; } } return true; } void ProjectionHandler::removeProjectionApplier(ProjectionApplier& parent) { NamedProjsMap::iterator npi = _namedprojs.find(&parent); if (npi != _namedprojs.end()) _namedprojs.erase(npi); // const Projection* parentprojptr = dynamic_cast(&parent); if (parentprojptr) { ProjHandle parentph(parentprojptr); ProjHandles::iterator pi = find(_projs.begin(), _projs.end(), parentph); if (pi != _projs.end()) _projs.erase(pi); } } set ProjectionHandler::getChildProjections(const ProjectionApplier& parent, ProjDepth depth) const { set toplevel; NamedProjs nps = _namedprojs.find(&parent)->second; foreach (NamedProjs::value_type& np, nps) { toplevel.insert(np.second.get()); } if (depth == SHALLOW) { // Only return the projections directly contained within the top level return toplevel; } else { // Return recursively built projection list set alllevels = toplevel; foreach (const Projection* p, toplevel) { set allsublevels = getChildProjections(*p, DEEP); alllevels.insert(allsublevels.begin(), allsublevels.end()); } return alllevels; } } const Projection& ProjectionHandler::getProjection(const ProjectionApplier& parent, const string& name) const { //getLog() << Log::TRACE << "Searching for child projection '" // << name << "' of " << &parent << endl; NamedProjsMap::const_iterator nps = _namedprojs.find(&parent); if (nps == _namedprojs.end()) { ostringstream msg; msg << "No projections registered for parent " << &parent; throw Error(msg.str()); } NamedProjs::const_iterator np = nps->second.find(name); if (np == nps->second.end()) { ostringstream msg; msg << "No projection '" << name << "' found for parent " << &parent; throw Error(msg.str()); } // If it's registered with the projection handler, we must be able to safely // dereference the Projection pointer to a reference... return *(np->second); } } rivet-1.8.3/src/Core/AnalysisLoader.cc0000644000175000017500000000635612116077757015777 0ustar sunsun// -*- C++ -*- #include "Rivet/AnalysisLoader.hh" #include "Rivet/Tools/Utils.hh" #include "Rivet/Tools/osdir.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Analysis.hh" #include namespace Rivet { namespace { inline Log& getLog() { return Log::getLog("Rivet.AnalysisLoader"); } } // Initialise static ptr collection AnalysisLoader::AnalysisBuilderMap AnalysisLoader::_ptrs; vector AnalysisLoader::analysisNames() { _loadAnalysisPlugins(); vector names; foreach (const AnalysisBuilderMap::value_type& p, _ptrs) names += p.first; return names; } set AnalysisLoader::getAllAnalysisNames() { set anaset; vector anas = analysisNames(); foreach (const string &ana, anas) { anaset.insert(ana); } return anaset; } Analysis* AnalysisLoader::getAnalysis(const string& analysisname) { _loadAnalysisPlugins(); AnalysisBuilderMap::const_iterator ai = _ptrs.find(analysisname); if (ai == _ptrs.end()) return 0; return ai->second->mkAnalysis(); } vector AnalysisLoader::getAllAnalyses() { _loadAnalysisPlugins(); vector analyses; foreach (const AnalysisBuilderMap::value_type& p, _ptrs) { analyses += p.second->mkAnalysis(); } return analyses; } void AnalysisLoader::_registerBuilder(const AnalysisBuilderBase* ab) { if (!ab) return; const string name = ab->name(); if (_ptrs.find(name) != _ptrs.end()) { // Duplicate analyses will be ignored... loudly //cerr << "Ignoring duplicate plugin analysis called '" << name << "'" << endl; MSG_WARNING("Ignoring duplicate plugin analysis called '" << name << "'"); } else { MSG_TRACE("Registering a plugin analysis called '" << name << "'"); _ptrs[name] = ab; } } void AnalysisLoader::_loadAnalysisPlugins() { // Only run once if (!_ptrs.empty()) return; // Build the list of directories to search const vector dirs = getAnalysisLibPaths(); // Find plugin module library files const string libsuffix = ".so"; vector pluginfiles; foreach (const string& d, dirs) { if (d.empty()) continue; oslink::directory dir(d); while (dir) { string filename = dir.next(); // Require that plugin lib name starts with 'Rivet' if (filename.find("Rivet") != 0) continue; size_t posn = filename.find(libsuffix); if (posn == string::npos || posn != filename.length()-libsuffix.length()) continue; /// @todo Make sure this is an abs path /// @todo Sys-dependent path separator instead of "/" const string path = d + "/" + filename; // Ensure no duplicate paths if (find(pluginfiles.begin(), pluginfiles.end(), path) == pluginfiles.end()) { pluginfiles += path; } } } // Load the plugin files MSG_TRACE("Candidate analysis plugin libs: " << pluginfiles); foreach (const string& pf, pluginfiles) { MSG_TRACE("Trying to load plugin analyses from file " << pf); void* handle = dlopen(pf.c_str(), RTLD_LAZY); if (!handle) { MSG_WARNING("Cannot open " << pf << ": " << dlerror()); continue; } } } } rivet-1.8.3/src/Core/Particle.cc0000644000175000017500000000170512123034604014577 0ustar sunsun#include "Rivet/Particle.hh" #include "Rivet/RivetBoost.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { bool Particle::hasAncestor(PdgId pdg_id) const { /// @todo Shouldn't a const vertex be being returned? Ah, HepMC... GenVertex* prodVtx = genParticle().production_vertex(); if (prodVtx == NULL) return false; foreach (const GenParticle* ancestor, particles(prodVtx, HepMC::ancestors)) { if (ancestor->pdg_id() == pdg_id) return true; } return false; } bool Particle::fromDecay() const { /// @todo Shouldn't a const vertex be being returned? Ah, HepMC... GenVertex* prodVtx = genParticle().production_vertex(); if (prodVtx == NULL) return false; foreach (const GenParticle* ancestor, particles(prodVtx, HepMC::ancestors)) { const PdgId pid = ancestor->pdg_id(); if (ancestor->status() == 2 && (PID::isHadron(pid) || abs(pid) == TAU)) return true; } return false; } } rivet-1.8.3/src/Core/Jet.cc0000644000175000017500000000724212116077757013602 0ustar sunsun#include "Rivet/Jet.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/ParticleName.hh" #include "Rivet/RivetBoost.hh" namespace Rivet { Jet& Jet::setState(const vector& particles, const FourMomentum& pjet) { setParticles(particles); setMomentum(pjet); return *this; } // Jet& Jet::setState(const vector& momenta, const FourMomentum& pjet) { // setParticles(momenta); // setMomentum(pjet); // return *this; // } Jet& Jet::setMomentum(const FourMomentum& momentum) { _momentum = momentum; return *this; } Jet& Jet::setParticles(const vector& particles) { _particles = particles; // foreach (const Particle& p, particles) { // _momenta.push_back(p.momentum()); // } return *this; } // Jet& Jet::setParticles(const vector& momenta) { // _momenta = momenta; // return *this; // } // Jet& Jet::addParticle(const FourMomentum& particle) { // _momenta.push_back(particle); // return *this; // } // Jet& Jet::addParticle(const Particle& particle) { // _particles.push_back(particle); // _momenta.push_back(particle.momentum()); // return *this; // } bool Jet::containsParticle(const Particle& particle) const { const int barcode = particle.genParticle().barcode(); foreach (const Particle& p, particles()) { if (p.genParticle().barcode() == barcode) return true; } return false; } bool Jet::containsParticleId(PdgId pid) const { foreach (const Particle& p, particles()) { if (p.pdgId() == pid) return true; } return false; } bool Jet::containsParticleId(const vector& pids) const { foreach (const Particle& p, particles()) { foreach (PdgId pid, pids) { if (p.pdgId() == pid) return true; } } return false; } /// @todo Jet::containsMatch(Matcher m) { ... if m(pid) return true; ... } double Jet::neutralEnergy() const { double e_neutral = 0.0; foreach (const Particle& p, particles()) { const PdgId pid = p.pdgId(); if (PID::threeCharge(pid) == 0) { e_neutral += p.momentum().E(); } } return e_neutral; } double Jet::hadronicEnergy() const { double e_hadr = 0.0; foreach (const Particle& p, particles()) { const PdgId pid = p.pdgId(); if (PID::isHadron(pid)) { e_hadr += p.momentum().E(); } } return e_hadr; } bool Jet::containsCharm() const { foreach (const Particle& p, particles()) { const PdgId pid = p.pdgId(); if (abs(pid) == CQUARK) return true; if (PID::isHadron(pid) && PID::hasCharm(pid)) return true; HepMC::GenVertex* gv = p.genParticle().production_vertex(); if (gv) { foreach (const GenParticle* pi, Rivet::particles(gv, HepMC::ancestors)) { const PdgId pid2 = pi->pdg_id(); if (PID::isHadron(pid2) && PID::hasCharm(pid2)) return true; } } } return false; } bool Jet::containsBottom() const { foreach (const Particle& p, particles()) { const PdgId pid = p.pdgId(); if (abs(pid) == BQUARK) return true; if (PID::isHadron(pid) && PID::hasBottom(pid)) return true; HepMC::GenVertex* gv = p.genParticle().production_vertex(); if (gv) { foreach (const GenParticle* pi, Rivet::particles(gv, HepMC::ancestors)) { const PdgId pid2 = pi->pdg_id(); if (PID::isHadron(pid2) && PID::hasBottom(pid2)) return true; } } } return false; } Jet& Jet::clear() { //_momenta.clear(); _particles.clear(); _momentum = FourMomentum(); return *this; } } rivet-1.8.3/src/Core/Makefile.in0000644000175000017500000010410512116616065014601 0ustar sunsun# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @WITHOUT_YAML_CPP_TRUE@am__append_1 = -I$(top_srcdir)/src/Tools @WITHOUT_YAML_CPP_FALSE@am__append_2 = -I$(YAML_CPPINCPATH) subdir = src/Core DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libRivetCore_la_LIBADD = am_libRivetCore_la_OBJECTS = libRivetCore_la-Event.lo \ libRivetCore_la-Jet.lo libRivetCore_la-Particle.lo \ libRivetCore_la-ParticleName.lo \ libRivetCore_la-ProjectionApplier.lo \ libRivetCore_la-Projection.lo libRivetCore_la-Analysis.lo \ libRivetCore_la-AnalysisLoader.lo \ libRivetCore_la-AnalysisInfo.lo \ libRivetCore_la-AnalysisHandler.lo libRivetCore_la-Run.lo \ libRivetCore_la-ProjectionHandler.lo \ libRivetCore_la-HistoHandler.lo libRivetCore_la_OBJECTS = $(am_libRivetCore_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/Rivet/Config depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libRivetCore_la_SOURCES) DIST_SOURCES = $(libRivetCore_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libRivetCore.la libRivetCore_la_SOURCES = \ Event.cc Jet.cc Particle.cc ParticleName.cc \ ProjectionApplier.cc Projection.cc \ Analysis.cc AnalysisLoader.cc AnalysisInfo.cc \ AnalysisHandler.cc Run.cc ProjectionHandler.cc HistoHandler.cc libRivetCore_la_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_1) \ $(am__append_2) $(CPPFLAGS) all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Core/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Core/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libRivetCore.la: $(libRivetCore_la_OBJECTS) $(libRivetCore_la_DEPENDENCIES) $(EXTRA_libRivetCore_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libRivetCore_la_OBJECTS) $(libRivetCore_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetCore_la-Analysis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetCore_la-AnalysisHandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetCore_la-AnalysisInfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetCore_la-AnalysisLoader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetCore_la-Event.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetCore_la-HistoHandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetCore_la-Jet.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetCore_la-Particle.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetCore_la-ParticleName.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetCore_la-Projection.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetCore_la-ProjectionApplier.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetCore_la-ProjectionHandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libRivetCore_la-Run.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< libRivetCore_la-Event.lo: Event.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetCore_la-Event.lo -MD -MP -MF $(DEPDIR)/libRivetCore_la-Event.Tpo -c -o libRivetCore_la-Event.lo `test -f 'Event.cc' || echo '$(srcdir)/'`Event.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetCore_la-Event.Tpo $(DEPDIR)/libRivetCore_la-Event.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Event.cc' object='libRivetCore_la-Event.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetCore_la-Event.lo `test -f 'Event.cc' || echo '$(srcdir)/'`Event.cc libRivetCore_la-Jet.lo: Jet.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetCore_la-Jet.lo -MD -MP -MF $(DEPDIR)/libRivetCore_la-Jet.Tpo -c -o libRivetCore_la-Jet.lo `test -f 'Jet.cc' || echo '$(srcdir)/'`Jet.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetCore_la-Jet.Tpo $(DEPDIR)/libRivetCore_la-Jet.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Jet.cc' object='libRivetCore_la-Jet.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetCore_la-Jet.lo `test -f 'Jet.cc' || echo '$(srcdir)/'`Jet.cc libRivetCore_la-Particle.lo: Particle.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetCore_la-Particle.lo -MD -MP -MF $(DEPDIR)/libRivetCore_la-Particle.Tpo -c -o libRivetCore_la-Particle.lo `test -f 'Particle.cc' || echo '$(srcdir)/'`Particle.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetCore_la-Particle.Tpo $(DEPDIR)/libRivetCore_la-Particle.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Particle.cc' object='libRivetCore_la-Particle.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetCore_la-Particle.lo `test -f 'Particle.cc' || echo '$(srcdir)/'`Particle.cc libRivetCore_la-ParticleName.lo: ParticleName.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetCore_la-ParticleName.lo -MD -MP -MF $(DEPDIR)/libRivetCore_la-ParticleName.Tpo -c -o libRivetCore_la-ParticleName.lo `test -f 'ParticleName.cc' || echo '$(srcdir)/'`ParticleName.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetCore_la-ParticleName.Tpo $(DEPDIR)/libRivetCore_la-ParticleName.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ParticleName.cc' object='libRivetCore_la-ParticleName.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetCore_la-ParticleName.lo `test -f 'ParticleName.cc' || echo '$(srcdir)/'`ParticleName.cc libRivetCore_la-ProjectionApplier.lo: ProjectionApplier.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetCore_la-ProjectionApplier.lo -MD -MP -MF $(DEPDIR)/libRivetCore_la-ProjectionApplier.Tpo -c -o libRivetCore_la-ProjectionApplier.lo `test -f 'ProjectionApplier.cc' || echo '$(srcdir)/'`ProjectionApplier.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetCore_la-ProjectionApplier.Tpo $(DEPDIR)/libRivetCore_la-ProjectionApplier.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ProjectionApplier.cc' object='libRivetCore_la-ProjectionApplier.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetCore_la-ProjectionApplier.lo `test -f 'ProjectionApplier.cc' || echo '$(srcdir)/'`ProjectionApplier.cc libRivetCore_la-Projection.lo: Projection.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetCore_la-Projection.lo -MD -MP -MF $(DEPDIR)/libRivetCore_la-Projection.Tpo -c -o libRivetCore_la-Projection.lo `test -f 'Projection.cc' || echo '$(srcdir)/'`Projection.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetCore_la-Projection.Tpo $(DEPDIR)/libRivetCore_la-Projection.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Projection.cc' object='libRivetCore_la-Projection.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetCore_la-Projection.lo `test -f 'Projection.cc' || echo '$(srcdir)/'`Projection.cc libRivetCore_la-Analysis.lo: Analysis.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetCore_la-Analysis.lo -MD -MP -MF $(DEPDIR)/libRivetCore_la-Analysis.Tpo -c -o libRivetCore_la-Analysis.lo `test -f 'Analysis.cc' || echo '$(srcdir)/'`Analysis.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetCore_la-Analysis.Tpo $(DEPDIR)/libRivetCore_la-Analysis.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Analysis.cc' object='libRivetCore_la-Analysis.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetCore_la-Analysis.lo `test -f 'Analysis.cc' || echo '$(srcdir)/'`Analysis.cc libRivetCore_la-AnalysisLoader.lo: AnalysisLoader.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetCore_la-AnalysisLoader.lo -MD -MP -MF $(DEPDIR)/libRivetCore_la-AnalysisLoader.Tpo -c -o libRivetCore_la-AnalysisLoader.lo `test -f 'AnalysisLoader.cc' || echo '$(srcdir)/'`AnalysisLoader.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetCore_la-AnalysisLoader.Tpo $(DEPDIR)/libRivetCore_la-AnalysisLoader.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AnalysisLoader.cc' object='libRivetCore_la-AnalysisLoader.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetCore_la-AnalysisLoader.lo `test -f 'AnalysisLoader.cc' || echo '$(srcdir)/'`AnalysisLoader.cc libRivetCore_la-AnalysisInfo.lo: AnalysisInfo.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetCore_la-AnalysisInfo.lo -MD -MP -MF $(DEPDIR)/libRivetCore_la-AnalysisInfo.Tpo -c -o libRivetCore_la-AnalysisInfo.lo `test -f 'AnalysisInfo.cc' || echo '$(srcdir)/'`AnalysisInfo.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetCore_la-AnalysisInfo.Tpo $(DEPDIR)/libRivetCore_la-AnalysisInfo.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AnalysisInfo.cc' object='libRivetCore_la-AnalysisInfo.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetCore_la-AnalysisInfo.lo `test -f 'AnalysisInfo.cc' || echo '$(srcdir)/'`AnalysisInfo.cc libRivetCore_la-AnalysisHandler.lo: AnalysisHandler.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetCore_la-AnalysisHandler.lo -MD -MP -MF $(DEPDIR)/libRivetCore_la-AnalysisHandler.Tpo -c -o libRivetCore_la-AnalysisHandler.lo `test -f 'AnalysisHandler.cc' || echo '$(srcdir)/'`AnalysisHandler.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetCore_la-AnalysisHandler.Tpo $(DEPDIR)/libRivetCore_la-AnalysisHandler.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='AnalysisHandler.cc' object='libRivetCore_la-AnalysisHandler.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetCore_la-AnalysisHandler.lo `test -f 'AnalysisHandler.cc' || echo '$(srcdir)/'`AnalysisHandler.cc libRivetCore_la-Run.lo: Run.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetCore_la-Run.lo -MD -MP -MF $(DEPDIR)/libRivetCore_la-Run.Tpo -c -o libRivetCore_la-Run.lo `test -f 'Run.cc' || echo '$(srcdir)/'`Run.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetCore_la-Run.Tpo $(DEPDIR)/libRivetCore_la-Run.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Run.cc' object='libRivetCore_la-Run.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetCore_la-Run.lo `test -f 'Run.cc' || echo '$(srcdir)/'`Run.cc libRivetCore_la-ProjectionHandler.lo: ProjectionHandler.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetCore_la-ProjectionHandler.lo -MD -MP -MF $(DEPDIR)/libRivetCore_la-ProjectionHandler.Tpo -c -o libRivetCore_la-ProjectionHandler.lo `test -f 'ProjectionHandler.cc' || echo '$(srcdir)/'`ProjectionHandler.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetCore_la-ProjectionHandler.Tpo $(DEPDIR)/libRivetCore_la-ProjectionHandler.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ProjectionHandler.cc' object='libRivetCore_la-ProjectionHandler.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetCore_la-ProjectionHandler.lo `test -f 'ProjectionHandler.cc' || echo '$(srcdir)/'`ProjectionHandler.cc libRivetCore_la-HistoHandler.lo: HistoHandler.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libRivetCore_la-HistoHandler.lo -MD -MP -MF $(DEPDIR)/libRivetCore_la-HistoHandler.Tpo -c -o libRivetCore_la-HistoHandler.lo `test -f 'HistoHandler.cc' || echo '$(srcdir)/'`HistoHandler.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libRivetCore_la-HistoHandler.Tpo $(DEPDIR)/libRivetCore_la-HistoHandler.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='HistoHandler.cc' object='libRivetCore_la-HistoHandler.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libRivetCore_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libRivetCore_la-HistoHandler.lo `test -f 'HistoHandler.cc' || echo '$(srcdir)/'`HistoHandler.cc mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: rivet-1.8.3/src/Core/Analysis.cc0000644000175000017500000005241612116077757014646 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/AnalysisHandler.hh" #include "Rivet/AnalysisInfo.hh" #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "LWH/AIManagedObject.h" using namespace AIDA; namespace Rivet { Analysis::Analysis(const string& name) : _crossSection(-1.0), _gotCrossSection(false), _analysishandler(NULL), _madeHistoDir(false) { ProjectionApplier::_allowProjReg = false; _defaultname = name; AnalysisInfo* ai = AnalysisInfo::make(name); assert(ai != 0); _info.reset(ai); assert(_info.get() != 0); } IAnalysisFactory& Analysis::analysisFactory() { return handler().analysisFactory(); } ITree& Analysis::tree() { return handler().tree(); } IHistogramFactory& Analysis::histogramFactory() { return handler().histogramFactory(); } IDataPointSetFactory& Analysis::datapointsetFactory() { return handler().datapointsetFactory(); } double Analysis::sqrtS() const { return handler().sqrtS(); } const ParticlePair& Analysis::beams() const { return handler().beams(); } const PdgIdPair Analysis::beamIds() const { return handler().beamIds(); } const string Analysis::histoDir() const { /// @todo This doesn't change: calc and cache at first use! string path = "/" + name(); if (handler().runName().length() > 0) { path = "/" + handler().runName() + path; } while (find_first(path, "//")) { replace_all(path, "//", "/"); } return path; } const string Analysis::histoPath(const string& hname) const { const string path = histoDir() + "/" + hname; return path; } const string Analysis::histoPath(size_t datasetId, size_t xAxisId, size_t yAxisId) const { return histoDir() + "/" + makeAxisCode(datasetId, xAxisId, yAxisId); } const string Analysis::makeAxisCode(size_t datasetId, size_t xAxisId, size_t yAxisId) const { stringstream axisCode; axisCode << "d"; if (datasetId < 10) axisCode << 0; axisCode << datasetId; axisCode << "-x"; if (xAxisId < 10) axisCode << 0; axisCode << xAxisId; axisCode << "-y"; if (yAxisId < 10) axisCode << 0; axisCode << yAxisId; return axisCode.str(); } Log& Analysis::getLog() const { string logname = "Rivet.Analysis." + name(); return Log::getLog(logname); } size_t Analysis::numEvents() const { return handler().numEvents(); } double Analysis::sumOfWeights() const { return handler().sumOfWeights(); } /////////////////////////////////////////// bool Analysis::isCompatible(const ParticlePair& beams) const { return isCompatible(beams.first.pdgId(), beams.second.pdgId(), beams.first.energy(), beams.second.energy()); } bool Analysis::isCompatible(PdgId beam1, PdgId beam2, double e1, double e2) const { PdgIdPair beams(beam1, beam2); pair energies(e1, e2); return isCompatible(beams, energies); } bool Analysis::isCompatible(const PdgIdPair& beams, const pair& energies) const { // First check the beam IDs bool beamIdsOk = false; foreach (const PdgIdPair& bp, requiredBeams()) { if (compatible(beams, bp)) { beamIdsOk = true; break; } } if (!beamIdsOk) return false; // Next check that the energies are compatible (within 1%, to give a bit of UI forgiveness) bool beamEnergiesOk = requiredEnergies().size()>0 ? false : true; typedef pair DoublePair; foreach (const DoublePair& ep, requiredEnergies()) { if ((fuzzyEquals(ep.first, energies.first, 0.01) && fuzzyEquals(ep.second, energies.second, 0.01)) || (fuzzyEquals(ep.first, energies.second, 0.01) && fuzzyEquals(ep.second, energies.first, 0.01))) { beamEnergiesOk = true; break; } } return beamEnergiesOk; /// @todo Need to also check internal consistency of the analysis' /// beam requirements with those of the projections it uses. } /////////////////////////////////////////// Analysis& Analysis::setCrossSection(double xs) { _crossSection = xs; _gotCrossSection = true; return *this; } double Analysis::crossSection() const { if (!_gotCrossSection || std::isnan(_crossSection)) { string errMsg = "You did not set the cross section for the analysis " + name(); throw Error(errMsg); } return _crossSection; } double Analysis::crossSectionPerEvent() const { const double sumW = sumOfWeights(); assert(sumW != 0.0); return _crossSection / sumW; } //////////////////////////////////////////////////////////// // Histogramming void Analysis::_cacheBinEdges() const { _cacheXAxisData(); if (_histBinEdges.empty()) { MSG_TRACE("Getting histo bin edges from AIDA for paper " << name()); _histBinEdges = getBinEdges(_dpsData); } } void Analysis::_cacheXAxisData() const { if (_dpsData.empty()) { MSG_TRACE("Getting DPS x-axis data from AIDA for paper " << name()); _dpsData = getDPSXValsErrs(name()); } } const BinEdges& Analysis::binEdges(const string& hname) const { _cacheBinEdges(); MSG_TRACE("Using histo bin edges for " << name() << ":" << hname); const BinEdges& edges = _histBinEdges.find(hname)->second; if (getLog().isActive(Log::TRACE)) { stringstream edges_ss; foreach (const double be, edges) { edges_ss << " " << be; } MSG_TRACE("Edges:" << edges_ss.str()); } return edges; } const BinEdges& Analysis::binEdges(size_t datasetId, size_t xAxisId, size_t yAxisId) const { const string hname = makeAxisCode(datasetId, xAxisId, yAxisId); return binEdges(hname); } BinEdges Analysis::logBinEdges(size_t nbins, double lower, double upper) { return logspace(nbins, lower, upper); } IHistogram1D* Analysis::bookHistogram1D(size_t datasetId, size_t xAxisId, size_t yAxisId, const string& title, const string& xtitle, const string& ytitle) { const string axisCode = makeAxisCode(datasetId, xAxisId, yAxisId); return bookHistogram1D(axisCode, title, xtitle, ytitle); } IHistogram1D* Analysis::bookHistogram1D(const string& hname, const string& title, const string& xtitle, const string& ytitle) { // Get the bin edges (only read the AIDA file once) const BinEdges edges = binEdges(hname); _makeHistoDir(); const string path = histoPath(hname); if (path.find(" ") != string::npos) { throw Error("Histogram path '" + path + "' is invalid: spaces are not permitted in paths"); } IHistogram1D* hist = histogramFactory().createHistogram1D(path, title, edges); MSG_TRACE("Made histogram " << hname << " for " << name()); hist->setXTitle(xtitle); hist->setYTitle(ytitle); return hist; } IHistogram1D* Analysis::bookHistogram1D(const string& hname, size_t nbins, double lower, double upper, const string& title, const string& xtitle, const string& ytitle) { _makeHistoDir(); const string path = histoPath(hname); if (path.find(" ") != string::npos) { throw Error("Histogram path '" + path + "' is invalid: spaces are not permitted in paths"); } IHistogram1D* hist = histogramFactory().createHistogram1D(path, title, nbins, lower, upper); MSG_TRACE("Made histogram " << hname << " for " << name()); hist->setXTitle(xtitle); hist->setYTitle(ytitle); return hist; } IHistogram1D* Analysis::bookHistogram1D(const string& hname, const vector& binedges, const string& title, const string& xtitle, const string& ytitle) { _makeHistoDir(); const string path = histoPath(hname); if (path.find(" ") != string::npos) { throw Error("Histogram path '" + path + "' is invalid: spaces are not permitted in paths"); } IHistogram1D* hist = histogramFactory().createHistogram1D(path, title, binedges); MSG_TRACE("Made histogram " << hname << " for " << name()); hist->setXTitle(xtitle); hist->setYTitle(ytitle); return hist; } IHistogram2D* Analysis::bookHistogram2D(const string& hname, size_t nxbins, double xlower, double xupper, size_t nybins, double ylower, double yupper, const string& title, const string& xtitle, const string& ytitle, const string& ztitle) { _makeHistoDir(); const string path = histoPath(hname); if (path.find(" ") != string::npos) { throw Error("Histogram path '" + path + "' is invalid: spaces are not permitted in paths"); } IHistogram2D* hist = histogramFactory().createHistogram2D(path, title, nxbins, xlower, xupper, nybins, ylower, yupper); MSG_TRACE("Made 2D histogram " << hname << " for " << name()); hist->setXTitle(xtitle); hist->setYTitle(ytitle); hist->setZTitle(ztitle); return hist; } IHistogram2D* Analysis::bookHistogram2D(const string& hname, const vector& xbinedges, const vector& ybinedges, const string& title, const string& xtitle, const string& ytitle, const string& ztitle) { _makeHistoDir(); const string path = histoPath(hname); if (path.find(" ") != string::npos) { throw Error("Histogram path '" + path + "' is invalid: spaces are not permitted in paths"); } IHistogram2D* hist = histogramFactory().createHistogram2D(path, title, xbinedges, ybinedges); MSG_TRACE("Made 2D histogram " << hname << " for " << name()); hist->setXTitle(xtitle); hist->setYTitle(ytitle); hist->setZTitle(ztitle); return hist; } ///////////////// IProfile1D* Analysis::bookProfile1D(size_t datasetId, size_t xAxisId, size_t yAxisId, const string& title, const string& xtitle, const string& ytitle) { const string axisCode = makeAxisCode(datasetId, xAxisId, yAxisId); return bookProfile1D(axisCode, title, xtitle, ytitle); } IProfile1D* Analysis::bookProfile1D(const string& hname, const string& title, const string& xtitle, const string& ytitle) { // Get the bin edges (only read the AIDA file once) const BinEdges edges = binEdges(hname); _makeHistoDir(); const string path = histoPath(hname); if (path.find(" ") != string::npos) { throw Error("Histogram path '" + path + "' is invalid: spaces are not permitted in paths"); } IProfile1D* prof = histogramFactory().createProfile1D(path, title, edges); MSG_TRACE("Made profile histogram " << hname << " for " << name()); prof->setXTitle(xtitle); prof->setYTitle(ytitle); return prof; } IProfile1D* Analysis::bookProfile1D(const string& hname, size_t nbins, double lower, double upper, const string& title, const string& xtitle, const string& ytitle) { _makeHistoDir(); const string path = histoPath(hname); if (path.find(" ") != string::npos) { throw Error("Histogram path '" + path + "' is invalid: spaces are not permitted in paths"); } IProfile1D* prof = histogramFactory().createProfile1D(path, title, nbins, lower, upper); MSG_TRACE("Made profile histogram " << hname << " for " << name()); prof->setXTitle(xtitle); prof->setYTitle(ytitle); return prof; } IProfile1D* Analysis::bookProfile1D(const string& hname, const vector& binedges, const string& title, const string& xtitle, const string& ytitle) { _makeHistoDir(); const string path = histoPath(hname); if (path.find(" ") != string::npos) { throw Error("Histogram path '" + path + "' is invalid: spaces are not permitted in paths"); } IProfile1D* prof = histogramFactory().createProfile1D(path, title, binedges); MSG_TRACE("Made profile histogram " << hname << " for " << name()); prof->setXTitle(xtitle); prof->setYTitle(ytitle); return prof; } /////////////////// IDataPointSet* Analysis::bookDataPointSet(const string& hname, const string& title, const string& xtitle, const string& ytitle) { _makeHistoDir(); const string path = histoPath(hname); if (path.find(" ") != string::npos) { throw Error("Histogram path '" + path + "' is invalid: spaces are not permitted in paths"); } IDataPointSet* dps = datapointsetFactory().create(path, title, 2); MSG_TRACE("Made data point set " << hname << " for " << name()); dps->setXTitle(xtitle); dps->setYTitle(ytitle); return dps; } IDataPointSet* Analysis::bookDataPointSet(const string& hname, size_t npts, double lower, double upper, const string& title, const string& xtitle, const string& ytitle) { IDataPointSet* dps = bookDataPointSet(hname, title, xtitle, ytitle); for (size_t pt = 0; pt < npts; ++pt) { const double binwidth = (upper-lower)/npts; const double bincentre = lower + (pt + 0.5) * binwidth; dps->addPoint(); IMeasurement* meas = dps->point(pt)->coordinate(0); meas->setValue(bincentre); meas->setErrorPlus(binwidth/2.0); meas->setErrorMinus(binwidth/2.0); } return dps; } IDataPointSet* Analysis::bookDataPointSet(size_t datasetId, size_t xAxisId, size_t yAxisId, const string& title, const string& xtitle, const string& ytitle) { // Get the bin edges (only read the AIDA file once) _cacheXAxisData(); // Build the axis code const string axisCode = makeAxisCode(datasetId, xAxisId, yAxisId); //const map > xpoints = getDPSXValsErrs(papername); MSG_TRACE("Using DPS x-positions for " << name() << ":" << axisCode); IDataPointSet* dps = bookDataPointSet(axisCode, title, xtitle, ytitle); const vector xpts = _dpsData.find(axisCode)->second; for (size_t pt = 0; pt < xpts.size(); ++pt) { dps->addPoint(); IMeasurement* meas = dps->point(pt)->coordinate(0); meas->setValue(xpts[pt].val); meas->setErrorPlus(xpts[pt].errplus); meas->setErrorMinus(xpts[pt].errminus); } MSG_TRACE("Made DPS " << axisCode << " for " << name()); return dps; } //////////////////// void Analysis::_makeHistoDir() { if (!_madeHistoDir) { if (! name().empty()) { // vector dirs; // split(dirs, histoDir(), "/"); // string pathpart; // foreach (const string& d, dirs) { //tree().mkdir(); //} tree().mkdirs(histoDir()); } _madeHistoDir = true; } } void Analysis::normalize(AIDA::IHistogram1D*& histo, double norm, bool includeoverflows) { if (!histo) { MSG_ERROR("Failed to normalize histo=NULL in analysis " << name() << " (norm=" << norm << ")"); return; } const string hpath = tree().findPath(dynamic_cast(*histo)); MSG_TRACE("Normalizing histo " << hpath << " to " << norm); // Get integral double oldintg = 0.0; int nBins = histo->axis().bins(); for (int iBin = 0; iBin != nBins; ++iBin) { // Leaving out factor of binWidth because AIDA's "height" already includes a width factor. oldintg += histo->binHeight(iBin); // * histo->axis().binWidth(iBin); } if (includeoverflows) { // Include overflow bins in the integral oldintg += histo->binHeight(AIDA::IAxis::UNDERFLOW_BIN); oldintg += histo->binHeight(AIDA::IAxis::OVERFLOW_BIN); } // Sanity check if (oldintg == 0.0) { MSG_WARNING("Histo " << hpath << " has null integral during normalization"); return; } // Scale by the normalisation factor. scale(histo, norm/oldintg); } void Analysis::scale(AIDA::IHistogram1D*& histo, double scale) { if (!histo) { MSG_ERROR("Failed to scale histo=NULL in analysis " << name() << " (scale=" << scale << ")"); return; } const string hpath = tree().findPath(dynamic_cast(*histo)); MSG_TRACE("Scaling histo " << hpath); vector x, y, ex, ey; for (size_t i = 0, N = histo->axis().bins(); i < N; ++i) { x.push_back(0.5 * (histo->axis().binLowerEdge(i) + histo->axis().binUpperEdge(i))); ex.push_back(histo->axis().binWidth(i)*0.5); // "Bin height" is a misnomer in the AIDA spec: width is neglected. // We'd like to do this: y.push_back(histo->binHeight(i) * scale); y.push_back(histo->binHeight(i)*scale/histo->axis().binWidth(i)); // "Bin error" is a misnomer in the AIDA spec: width is neglected. // We'd like to do this: ey.push_back(histo->binError(i) * scale); ey.push_back(histo->binError(i)*scale/histo->axis().binWidth(i)); } string title = histo->title(); string xtitle = histo->xtitle(); string ytitle = histo->ytitle(); tree().mkdir("/tmpnormalize"); tree().mv(hpath, "/tmpnormalize"); if (hpath.find(" ") != string::npos) { throw Error("Histogram path '" + hpath + "' is invalid: spaces are not permitted in paths"); } AIDA::IDataPointSet* dps = datapointsetFactory().createXY(hpath, title, x, y, ex, ey); dps->setXTitle(xtitle); dps->setYTitle(ytitle); tree().rm(tree().findPath(dynamic_cast(*histo))); tree().rmdir("/tmpnormalize"); // Set histo pointer to null - it can no longer be used. histo = 0; } void Analysis::normalize(AIDA::IHistogram2D*& histo, double norm) { if (!histo) { MSG_ERROR("Failed to normalize histo=NULL in analysis " << name() << " (norm=" << norm << ")"); return; } const string hpath = tree().findPath(dynamic_cast(*histo)); MSG_TRACE("Normalizing histo " << hpath << " to " << norm); double oldintg = 0.0; int nxBins = histo->xAxis().bins(); int nyBins = histo->yAxis().bins(); for (int ixBin = 0; ixBin != nxBins; ++ixBin) for (int iyBin = 0; iyBin != nyBins; ++iyBin) { // Leaving out factor of binWidth because AIDA's "height" // already includes a width factor. oldintg += histo->binHeight(ixBin, iyBin); // * histo->axis().binWidth(iBin); } if (oldintg == 0.0) { MSG_WARNING("Histo " << hpath << " has null integral during normalization"); return; } // Scale by the normalisation factor. scale(histo, norm/oldintg); } void Analysis::scale(AIDA::IHistogram2D*& histo, double scale) { if (!histo) { MSG_ERROR("Failed to scale histo=NULL in analysis " << name() << " (scale=" << scale << ")"); return; } const string hpath = tree().findPath(dynamic_cast(*histo)); MSG_TRACE("Scaling histo " << hpath); vector x, y, z, ex, ey, ez; for (size_t ix = 0, Nx = histo->xAxis().bins(); ix < Nx; ++ix) for (size_t iy = 0, Ny = histo->yAxis().bins(); iy < Ny; ++iy) { x.push_back(0.5 * (histo->xAxis().binLowerEdge(ix) + histo->xAxis().binUpperEdge(ix))); ex.push_back(histo->xAxis().binWidth(ix)*0.5); y.push_back(0.5 * (histo->yAxis().binLowerEdge(iy) + histo->yAxis().binUpperEdge(iy))); ey.push_back(histo->yAxis().binWidth(iy)*0.5); // "Bin height" is a misnomer in the AIDA spec: width is neglected. // We'd like to do this: y.push_back(histo->binHeight(i) * scale); z.push_back(histo->binHeight(ix, iy)*scale/ (histo->xAxis().binWidth(ix)*histo->yAxis().binWidth(iy))); // "Bin error" is a misnomer in the AIDA spec: width is neglected. // We'd like to do this: ey.push_back(histo->binError(i) * scale); ez.push_back(histo->binError(ix, iy)*scale/ (histo->xAxis().binWidth(ix)*histo->yAxis().binWidth(iy))); } string title = histo->title(); string xtitle = histo->xtitle(); string ytitle = histo->ytitle(); string ztitle = histo->ztitle(); tree().mkdir("/tmpnormalize"); tree().mv(hpath, "/tmpnormalize"); if (hpath.find(" ") != string::npos) { throw Error("Histogram path '" + hpath + "' is invalid: spaces are not permitted in paths"); } AIDA::IDataPointSet* dps = datapointsetFactory().createXYZ(hpath, title, x, y, z, ex, ey, ez); dps->setXTitle(xtitle); dps->setYTitle(ytitle); dps->setZTitle(ztitle); tree().rm(tree().findPath(dynamic_cast(*histo))); tree().rmdir("/tmpnormalize"); // Set histo pointer to null - it can no longer be used. histo = 0; } } rivet-1.8.3/src/Core/HistoHandler.cc0000644000175000017500000000456512116077757015451 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/HistoHandler.hh" #include "Rivet/Analysis.hh" #include namespace Rivet { // Get a logger. Log& HistoHandler::getLog() const { return Log::getLog("Rivet.HistoHandler"); } void HistoHandler::clear() { _namedhistos.clear(); } // Delete contained pointers. HistoHandler::~HistoHandler() { clear(); } const AnalysisObject* HistoHandler::registerAnalysisObject(const Analysis& parent, const AnalysisObject& ao, const string& name) { getLog() << Log::TRACE << "Trying to register" << " analysis object " << &ao << " for parent " << &parent << "(" << parent.name() << ")" << " with name '" << name << "'" << endl; // If this name is already registered for this analysis, throw a complaint NamedHistosMap::const_iterator nhs = _namedhistos.find(&parent); if (nhs != _namedhistos.end()) { NamedHistos::const_iterator nh = nhs->second.find(name); if (nh != nhs->second.end()) { stringstream ss; ss << "Histogram \"" << name << "\" already exists for parent analysis " << &parent; throw Error(ss.str()); } } _namedhistos[&parent][name] = &ao; //return *(_namedhistos[&parent][name]); return const_cast(_namedhistos[&parent][name]); } AnalysisObject* HistoHandler::_getAnalysisObject(const Analysis& parent, const string& name) const { getLog() << Log::TRACE << "Searching for child histo '" << name << "' of " << &parent << endl; NamedHistosMap::const_iterator nhs = _namedhistos.find(&parent); if (nhs == _namedhistos.end()) { stringstream ss; ss << "Couldn't find any histograms for parent analysis " << &parent; throw Error(ss.str()); } NamedHistos::const_iterator nh = nhs->second.find(name); if (nh == nhs->second.end()) { stringstream ss; ss << "Couldn't find histogram \"" << name << "\" for parent analysis " << &parent; throw Error(ss.str()); } //return *(nh->second); AnalysisObject* rtn = const_cast(nh->second); return rtn; } } rivet-1.8.3/src/Core/ProjectionApplier.cc0000644000175000017500000000246712116077757016515 0ustar sunsun// -*- C++ -*- #include "Rivet/ProjectionApplier.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Event.hh" namespace Rivet { // NB. Allow proj registration in constructor by default -- explicitly disable for Analysis ProjectionApplier::ProjectionApplier() : _allowProjReg(true), _projhandler(ProjectionHandler::getInstance()) { } ProjectionApplier::~ProjectionApplier() { getProjHandler().removeProjectionApplier(*this); } const Projection& ProjectionApplier::_applyProjection(const Event& evt, const string& name) const { return evt.applyProjection(getProjection(name)); } const Projection& ProjectionApplier::_applyProjection(const Event& evt, const Projection& proj) const { return evt.applyProjection(proj); } const Projection& ProjectionApplier::_addProjection(const Projection& proj, const std::string& name) { if (!_allowProjReg) { cerr << "Trying to register projection '" << proj.name() << "' before init phase in '" << this->name() << "'." << endl; exit(2); } const Projection& reg = getProjHandler().registerProjection(*this, proj, name); return reg; } } rivet-1.8.3/src/Core/Makefile.am0000644000175000017500000000074612116077757014607 0ustar sunsunnoinst_LTLIBRARIES = libRivetCore.la libRivetCore_la_SOURCES = \ Event.cc Jet.cc Particle.cc ParticleName.cc \ ProjectionApplier.cc Projection.cc \ Analysis.cc AnalysisLoader.cc AnalysisInfo.cc \ AnalysisHandler.cc Run.cc ProjectionHandler.cc HistoHandler.cc libRivetCore_la_CPPFLAGS = $(AM_CPPFLAGS) if WITHOUT_YAML_CPP libRivetCore_la_CPPFLAGS += -I$(top_srcdir)/src/Tools else libRivetCore_la_CPPFLAGS += -I$(YAML_CPPINCPATH) endif libRivetCore_la_CPPFLAGS += $(CPPFLAGS) rivet-1.8.3/src/Projections/0000755000175000017500000000000012131473204014133 5ustar sunsunrivet-1.8.3/src/Projections/MissingMomentum.cc0000644000175000017500000000134712116077757017622 0ustar sunsun// -*- C++ -*- #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/MissingMomentum.hh" #include "Rivet/Cmp.hh" namespace Rivet { int MissingMomentum::compare(const Projection& p) const { return mkNamedPCmp(p, "VisibleFS"); } void MissingMomentum::clear() { _momentum = FourMomentum(); _set = 0.0; _vet = Vector3(); } void MissingMomentum::project(const Event& e) { clear(); // Project into final state const FinalState& vfs = applyProjection(e, "VisibleFS"); foreach (const Particle& p, vfs.particles()) { const FourMomentum& mom = p.momentum(); _momentum += mom; _set += mom.Et(); _vet += mom.Et() * mom.vector3().setZ(0.0).unit(); } } } rivet-1.8.3/src/Projections/Beam.cc0000644000175000017500000000364512116077757015336 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/Beam.hh" namespace Rivet { ParticlePair beams(const Event& e) { Beam beamproj; beamproj.project(e); return beamproj.beams(); } PdgIdPair beamIds(const Event& e) { Beam beamproj; beamproj.project(e); return beamproj.beamIds(); } PdgIdPair beamIds(const ParticlePair& beams) { return make_pair(beams.first.pdgId(), beams.second.pdgId()); } double sqrtS(const Event& e) { Beam beamproj; beamproj.project(e); return beamproj.sqrtS(); } double sqrtS(const ParticlePair& beams) { return sqrtS(beams.first.momentum(), beams.second.momentum()); } double sqrtS(const FourMomentum& pa, const FourMomentum& pb) { const double mom1 = pa.pz(); const double e1 = pa.E(); const double mom2 = pb.pz(); const double e2 = pb.E(); double sqrts = sqrt( sqr(e1+e2) - sqr(mom1+mom2) ); return sqrts; } ///////////////////////////////////////////// void Beam::project(const Event& e) { assert(e.genEvent().particles_size() >= 2); if (e.genEvent().valid_beam_particles()) { pair beams = e.genEvent().beam_particles(); assert(beams.first && beams.second); _theBeams.first = *(beams.first); _theBeams.second = *(beams.second); } else if(e.genEvent().barcode_to_particle(1) && e.genEvent().barcode_to_particle(2)) { _theBeams.first = *(e.genEvent().barcode_to_particle(1)); _theBeams.second = *(e.genEvent().barcode_to_particle(2)); } else { _theBeams.first = Particle(ANY, FourMomentum()); _theBeams.second = Particle(ANY, FourMomentum()); } //MSG_DEBUG("Beam particle IDs = " << beamIds()); } double Beam::sqrtS() const { double sqrts = Rivet::sqrtS(beams()); //MSG_DEBUG("sqrt(s) = " << sqrts/GeV << " GeV"); return sqrts; } } rivet-1.8.3/src/Projections/WFinder.cc0000644000175000017500000001752212116077757016027 0ustar sunsun// -*- C++ -*- #include "Rivet/Projections/WFinder.hh" #include "Rivet/Projections/InvMassFinalState.hh" #include "Rivet/Projections/MissingMomentum.hh" #include "Rivet/Projections/MergedFinalState.hh" #include "Rivet/Projections/LeptonClusters.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Cmp.hh" namespace Rivet { WFinder::WFinder(const FinalState& inputfs, double etaMin, double etaMax, double pTmin, PdgId pid, double minmass, double maxmass, double missingET, double dRmax, bool clusterPhotons, bool trackPhotons, double masstarget, bool useTransverseMass) { vector > etaRanges; etaRanges += std::make_pair(etaMin, etaMax); _init(inputfs, etaRanges, pTmin, pid, minmass, maxmass, missingET, dRmax, clusterPhotons, trackPhotons, masstarget, useTransverseMass); } WFinder::WFinder(const FinalState& inputfs, const std::vector >& etaRanges, double pTmin, PdgId pid, double minmass, double maxmass, double missingET, double dRmax, bool clusterPhotons, bool trackPhotons, double masstarget, bool useTransverseMass) { _init(inputfs, etaRanges, pTmin, pid, minmass, maxmass, missingET, dRmax, clusterPhotons, trackPhotons, masstarget, useTransverseMass); } WFinder::WFinder(double etaMin, double etaMax, double pTmin, PdgId pid, double minmass, double maxmass, double missingET, double dRmax, bool clusterPhotons, bool trackPhotons, double masstarget, bool useTransverseMass) { vector > etaRanges; etaRanges += std::make_pair(etaMin, etaMax); FinalState inputfs; _init(inputfs, etaRanges, pTmin, pid, minmass, maxmass, missingET, dRmax, clusterPhotons, trackPhotons, masstarget, useTransverseMass); } WFinder::WFinder(const std::vector >& etaRanges, double pTmin, PdgId pid, double minmass, double maxmass, double missingET, double dRmax, bool clusterPhotons, bool trackPhotons, double masstarget, bool useTransverseMass) { FinalState inputfs; _init(inputfs, etaRanges, pTmin, pid, minmass, maxmass, missingET, dRmax, clusterPhotons, trackPhotons, masstarget, useTransverseMass); } void WFinder::_init(const FinalState& inputfs, const std::vector >& etaRanges, double pTmin, PdgId pid, double minmass, double maxmass, double missingET, double dRmax, bool clusterPhotons, bool trackPhotons, double masstarget, bool useTransverseMass) { setName("WFinder"); _minmass = minmass; _maxmass = maxmass; _masstarget = masstarget; _pid = pid; _trackPhotons = trackPhotons; _useTransverseMass = useTransverseMass; // Check that the arguments are legal assert(abs(_pid) == ELECTRON || abs(_pid) == MUON); _nu_pid = abs(_pid) + 1; assert(abs(_nu_pid) == NU_E || abs(_nu_pid) == NU_MU); // Don't make pT or eta cuts on the neutrino IdentifiedFinalState neutrinos(inputfs); neutrinos.acceptNeutrinos(); addProjection(neutrinos, "Neutrinos"); // Lepton clusters IdentifiedFinalState bareleptons(inputfs); bareleptons.acceptIdPair(pid); LeptonClusters leptons(inputfs, bareleptons, dRmax, clusterPhotons, etaRanges, pTmin); addProjection(leptons, "LeptonClusters"); // Add MissingMomentum proj to calc MET MissingMomentum vismom(inputfs); addProjection(vismom, "MissingET"); // Set ETmiss _etMiss = missingET; VetoedFinalState remainingFS; remainingFS.addVetoOnThisFinalState(*this); addProjection(remainingFS, "RFS"); } ///////////////////////////////////////////////////// const FinalState& WFinder::remainingFinalState() const { return getProjection("RFS"); } int WFinder::compare(const Projection& p) const { PCmp LCcmp = mkNamedPCmp(p, "LeptonClusters"); if (LCcmp != EQUIVALENT) return LCcmp; const WFinder& other = dynamic_cast(p); return (cmp(_minmass, other._minmass) || cmp(_maxmass, other._maxmass) || cmp(_useTransverseMass, other._useTransverseMass) || cmp(_etMiss, other._etMiss) || cmp(_pid, other._pid) || cmp(_trackPhotons, other._trackPhotons)); } void WFinder::project(const Event& e) { clear(); const LeptonClusters& leptons = applyProjection(e, "LeptonClusters"); const FinalState& neutrinos = applyProjection(e, "Neutrinos"); // Make and register an invariant mass final state for the W decay leptons vector > l_nu_ids; l_nu_ids += make_pair(abs(_pid), -abs(_nu_pid)); l_nu_ids += make_pair(-abs(_pid), abs(_nu_pid)); InvMassFinalState imfs(l_nu_ids, _minmass, _maxmass, _masstarget); imfs.useTransverseMass(_useTransverseMass); ParticleVector tmp; tmp.insert(tmp.end(), leptons.clusteredLeptons().begin(), leptons.clusteredLeptons().end()); tmp.insert(tmp.end(), neutrinos.particles().begin(), neutrinos.particles().end()); imfs.calc(tmp); if (imfs.particlePairs().size() < 1) return; ParticlePair Wconstituents(imfs.particlePairs()[0]); Particle p1(Wconstituents.first), p2(Wconstituents.second); if (PID::threeCharge(p1)==0) { _constituentLeptons += p2; _constituentNeutrinos += p1; } else { _constituentLeptons += p1; _constituentNeutrinos += p2; } FourMomentum pW = p1.momentum() + p2.momentum(); const int w3charge = PID::threeCharge(p1) + PID::threeCharge(p2); assert(abs(w3charge) == 3); const int wcharge = w3charge/3; stringstream msg; string wsign = (wcharge == 1) ? "+" : "-"; string wstr = "W" + wsign; msg << wstr << " reconstructed from: " << "\n" << " " << p1.momentum() << " " << p1.pdgId() << "\n" << " + " << p2.momentum() << " " << p2.pdgId(); MSG_DEBUG(msg.str()); // Check missing ET const MissingMomentum& vismom = applyProjection(e, "MissingET"); /// @todo Restrict missing momentum eta range? Use vectorET()? if (vismom.scalarEt() < _etMiss) { MSG_DEBUG("Not enough missing ET: " << vismom.scalarEt()/GeV << " GeV vs. " << _etMiss/GeV << " GeV"); return; } // Make W Particle and insert into particles list const PdgId wpid = (wcharge == 1) ? WPLUSBOSON : WMINUSBOSON; _bosons.push_back(Particle(wpid, pW)); // Find the LeptonClusters and neutrinos which survived the IMFS cut such that we can // extract their original particles foreach (const Particle& p, _constituentNeutrinos) { _theParticles.push_back(p); } foreach (const Particle& p, _constituentLeptons) { foreach (const ClusteredLepton& l, leptons.clusteredLeptons()) { if (p.pdgId()==l.pdgId() && p.momentum()==l.momentum()) { _theParticles.push_back(l.constituentLepton()); if (_trackPhotons) { _theParticles.insert(_theParticles.end(), l.constituentPhotons().begin(), l.constituentPhotons().end()); } } } } } } rivet-1.8.3/src/Projections/Multiplicity.cc0000644000175000017500000000114312116077757017151 0ustar sunsun// -*- C++ -*- #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Multiplicity.hh" #include "Rivet/Cmp.hh" namespace Rivet { int Multiplicity::compare(const Projection& p) const { return mkNamedPCmp(p, "FS"); } void Multiplicity::project(const Event& e) { const FinalState& fs = applyProjection(e, "FS"); _totalMult = fs.particles().size(); _hadMult = 0; for (ParticleVector::const_iterator p = fs.particles().begin(); p != fs.particles().end(); ++p) { if (PID::isHadron(p->pdgId())) ++_hadMult; } } } rivet-1.8.3/src/Projections/Spherocity.cc0000644000175000017500000000710012116077757016611 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Projections/Spherocity.hh" #include "Rivet/Tools/Logging.hh" namespace Rivet { void Spherocity::calc(const FinalState& fs) { calc(fs.particles()); } void Spherocity::calc(const vector& fsparticles) { vector threeMomenta; threeMomenta.reserve(fsparticles.size()); foreach (const Particle& p, fsparticles) { const Vector3 p3 = p.momentum().vector3(); threeMomenta.push_back(p3); } _calcSpherocity(threeMomenta); } void Spherocity::calc(const vector& fsmomenta) { vector threeMomenta; threeMomenta.reserve(fsmomenta.size()); foreach (const FourMomentum& v, fsmomenta) { threeMomenta.push_back(v.vector3()); } _calcSpherocity(threeMomenta); } void Spherocity::calc(const vector& fsmomenta) { _calcSpherocity(fsmomenta); } ///////////////////////////////////////////////// //// Do the general case spherocity calculation void _calcS(const vector& perpmomenta, double& sphero, Vector3& saxis) { // According to the Salam paper, p5, footnote 4, the // axis n that minimises the Spherocity value ALWAYS coincides with the // direction of one of the transverse momentum vectors of the events particles. // Thus we carry out the calculation of Sphero for all particles and pick the // one that yields the smallerst values vector p = perpmomenta; vector sval; // Prepare vector to store unit vector representation of all particle momenta vector units; foreach (const Vector3& p, perpmomenta) { units.push_back(Vector3(p.x(), p.y(), 0.0).unit()); } // Spherocity calculation // // Pick the solution with the smallest spherocity sphero = 99999.; // The outer loop is for iteration over all unit vectors foreach (const Vector3& u, units){ double s =0.0; for (unsigned int k=0 ; k& fsmomenta) { // Make a vector of the three-momenta in the final state // Explicitly set the z-component (parallel to beam axis) to zero // This creates a 3D-vector representation of the transverse momentum // but takes the full information momentum vectors as input // A small iteration over full momenta but set z-coord. to 0.0 to get transverse momenta vector fsperpmomenta; foreach (const Vector3& p, fsmomenta) { fsperpmomenta.push_back(Vector3(p.x(), p.y(), 0.0)); } // This returns the scalar sum of (transverse) momenta double perpmomentumSum(0.0); foreach (const Vector3& p, fsperpmomenta) { perpmomentumSum += mod(p); } // Clear the caches _spherocities.clear(); _spherocityAxes.clear(); // Temporary variables for calcs Vector3 axis(0,0,0); double val = 0.; // Get spherocity _calcS(fsperpmomenta, val, axis); MSG_DEBUG("Mom sum = " << perpmomentumSum); double spherocity = 0.25 * PI * PI * val * val / (perpmomentumSum * perpmomentumSum); _spherocities.push_back(spherocity); // See if calculated spherocity value makes sense if (spherocity < 0.0 || spherocity > 1.0) { MSG_WARNING("Spherocity = " << spherocity); } MSG_DEBUG("Spherocity value = " << spherocity); MSG_DEBUG("Sperocity axis = " << axis); _spherocityAxes.push_back(axis); } } rivet-1.8.3/src/Projections/FinalState.cc0000644000175000017500000000756712116077757016533 0ustar sunsun// -*- C++ -*- #include "Rivet/Projections/FinalState.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Cmp.hh" namespace Rivet { FinalState::FinalState(double mineta, double maxeta, double minpt) : _ptmin(minpt) { setName("FinalState"); const bool openpt = isZero(minpt); const bool openeta = (mineta <= -MAXRAPIDITY && maxeta >= MAXRAPIDITY); MSG_TRACE("Check for open FS conditions:" << std::boolalpha << " eta=" << openeta << ", pt=" << openpt); if (!openeta || !openpt) { addProjection(FinalState(), "OpenFS"); if (!openeta) { _etaRanges.push_back(make_pair(mineta, maxeta)); } } } FinalState::FinalState(const vector >& etaRanges, double minpt) : _etaRanges(etaRanges), _ptmin(minpt) { setName("FinalState"); const bool openpt = isZero(minpt); /// @todo Properly check whether any of these eta ranges (or their combination) are actually open const bool openeta = etaRanges.empty(); MSG_TRACE("Check for open FS conditions:" << std::boolalpha << " eta=" << openeta << ", pt=" << openpt); if (!openeta || !openpt) { addProjection(FinalState(), "OpenFS"); } } int FinalState::compare(const Projection& p) const { const FinalState& other = dynamic_cast(p); //MSG_TRACE("FS::compare: " << 1 << " " << this << " " << &p); std::vector > eta1(_etaRanges); std::vector > eta2(other._etaRanges); std::sort(eta1.begin(), eta1.end()); std::sort(eta2.begin(), eta2.end()); //MSG_TRACE("FS::compare: " << 2 << " " << this << " " << &p); if (eta1 < eta2) return ORDERED; else if (eta2 < eta1) return UNORDERED; //MSG_TRACE("FS::compare: " << 3 << " " << this << " " << &p); return cmp(_ptmin, other._ptmin); } void FinalState::project(const Event& e) { _theParticles.clear(); // Handle "open FS" special case if (_etaRanges.empty() && _ptmin == 0) { //MSG_TRACE("Open FS processing: should only see this once per event (" // << e.genEvent().event_number() << ")"); foreach (const GenParticle* p, Rivet::particles(e.genEvent())) { if (p->status() == 1) { //MSG_TRACE("FS GV = " << p->production_vertex()); _theParticles.push_back(Particle(*p)); } } return; } // If this is not itself the "open" FS, base the calculations on the open FS' results /// @todo In general, we'd like to calculate a restrictive FS based on the most restricted superset FS. const ParticleVector allstable = applyProjection(e, "OpenFS").particles(); foreach (const Particle& p, allstable) { const bool passed = accept(p); // MSG_TRACE("Choosing: ID = " << p.pdgId() // << ", pT = " << p.momentum().pT() // << ", eta = " << p.momentum().eta() // << ": result = " << std::boolalpha << passed); if (passed) _theParticles.push_back(p); } //MSG_DEBUG("Number of final-state particles = " << _theParticles.size()); } /// Decide if a particle is to be accepted or not. bool FinalState::accept(const Particle& p) const { // Not having s.c. == 1 should never happen! assert(!p.hasGenParticle() || p.genParticle().status() == 1); // Check pT cut if (_ptmin > 0.0) { const double pT = p.momentum().pT(); if (pT < _ptmin) return false; } // Check eta cuts if (!_etaRanges.empty()) { bool eta_pass = false; const double eta = p.momentum().eta(); typedef pair EtaPair; foreach (const EtaPair& etacuts, _etaRanges) { if (eta > etacuts.first && eta < etacuts.second) { eta_pass = true; break; } } if (!eta_pass) return false; } return true; } } rivet-1.8.3/src/Projections/ClusteredPhotons.cc0000644000175000017500000000306212116077757017770 0ustar sunsun// -*- C++ -*- #include "Rivet/Projections/ClusteredPhotons.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Cmp.hh" namespace Rivet { int ClusteredPhotons::compare(const Projection& p) const { const PCmp fscmp = mkNamedPCmp(p, "Photons"); if (fscmp != EQUIVALENT) return fscmp; const PCmp sigcmp = mkNamedPCmp(p, "Signal"); if (sigcmp != EQUIVALENT) return sigcmp; const ClusteredPhotons& other = dynamic_cast(p); int rcmp = cmp(_dRmax, other._dRmax); return rcmp; } void ClusteredPhotons::project(const Event& e) { _theParticles.clear(); if (!_dRmax > 0.0) return; const FinalState& photons = applyProjection(e, "Photons"); const FinalState& signal = applyProjection(e, "Signal"); foreach (const Particle& p, photons.particles()) { bool clustered = false; foreach (const Particle& l, signal.particles()) { // Only cluster photons around *charged* signal particles if (PID::threeCharge(l.pdgId()) == 0) continue; // Geometrically match momentum vectors const FourMomentum p_l = l.momentum(); const FourMomentum p_P = p.momentum(); if (deltaR(p_l.pseudorapidity(), p_l.azimuthalAngle(), p_P.pseudorapidity(), p_P.azimuthalAngle()) < _dRmax) { clustered = true; } } if (clustered) _theParticles.push_back(p); } MSG_DEBUG(name() << " found " << _theParticles.size() << " matching photons."); } } rivet-1.8.3/src/Projections/Sphericity.cc0000644000175000017500000001041212116077757016603 0ustar sunsun// -*- C++ -*- #include "Rivet/Projections/Sphericity.hh" #include "Rivet/Cmp.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/Utils.hh" namespace Rivet { Sphericity::Sphericity(const FinalState& fsp, double rparam) : _regparam(rparam) { setName("Sphericity"); addProjection(fsp, "FS"); clear(); } void Sphericity::clear() { _lambdas = vector(3, 0); _sphAxes = vector(3, Vector3()); } int Sphericity::compare(const Projection& p) const { PCmp fscmp = mkNamedPCmp(p, "FS"); if (fscmp != EQUIVALENT) return fscmp; const Sphericity& other = dynamic_cast(p); if (fuzzyEquals(_regparam, other._regparam)) return 0; return cmp(_regparam, other._regparam); } void Sphericity::project(const Event& e) { const ParticleVector prts = applyProjection(e, "FS").particles(); calc(prts); } void Sphericity::calc(const FinalState& fs) { calc(fs.particles()); } void Sphericity::calc(const vector& fsparticles) { vector threeMomenta; threeMomenta.reserve(fsparticles.size()); foreach (const Particle& p, fsparticles) { const Vector3 p3 = p.momentum().vector3(); threeMomenta.push_back(p3); } _calcSphericity(threeMomenta); } void Sphericity::calc(const vector& fsmomenta) { vector threeMomenta; threeMomenta.reserve(fsmomenta.size()); foreach (const FourMomentum& v, fsmomenta) { threeMomenta.push_back(v.vector3()); } _calcSphericity(threeMomenta); } void Sphericity::calc(const vector& fsmomenta) { _calcSphericity(fsmomenta); } // Actually do the calculation void Sphericity::_calcSphericity(const vector& fsmomenta) { MSG_DEBUG("Calculating sphericity with r = " << _regparam); // Return (with "safe nonsense" sphericity params) if there are no final state particles. if (fsmomenta.empty()) { MSG_DEBUG("No particles in final state..."); clear(); return; } // Iterate over all the final state particles. Matrix3 mMom; double totalMomentum = 0.0; MSG_DEBUG("Number of particles = " << fsmomenta.size()); foreach (const Vector3& p3, fsmomenta) { // Build the (regulated) normalising factor. totalMomentum += pow(p3.mod(), _regparam); // Build (regulated) quadratic momentum components. const double regfactor = pow(p3.mod(), _regparam-2); if (!fuzzyEquals(regfactor, 1.0)) { MSG_TRACE("Regfactor (r=" << _regparam << ") = " << regfactor); } Matrix3 mMomPart; for (size_t i = 0; i < 3; ++i) { for (size_t j = 0; j < 3; ++j) { mMomPart.set(i,j, p3[i]*p3[j]); } } mMom += regfactor * mMomPart; } // Normalise to total (regulated) momentum. mMom /= totalMomentum; MSG_DEBUG("Momentum tensor = " << "\n" << mMom); // Check that the matrix is symmetric. const bool isSymm = mMom.isSymm(); if (!isSymm) { MSG_ERROR("Error: momentum tensor not symmetric (r=" << _regparam << ")"); MSG_ERROR("[0,1] vs. [1,0]: " << mMom.get(0,1) << ", " << mMom.get(1,0)); MSG_ERROR("[0,2] vs. [2,0]: " << mMom.get(0,2) << ", " << mMom.get(2,0)); MSG_ERROR("[1,2] vs. [2,1]: " << mMom.get(1,2) << ", " << mMom.get(2,1)); } // If not symmetric, something's wrong (we made sure the error msg appeared first). assert(isSymm); // Diagonalize momentum matrix. const EigenSystem<3> eigen3 = diagonalize(mMom); MSG_DEBUG("Diag momentum tensor = " << "\n" << eigen3.getDiagMatrix()); // Reset and set eigenvalue/vector parameters. _lambdas.clear(); _sphAxes.clear(); const EigenSystem<3>::EigenPairs epairs = eigen3.getEigenPairs(); assert(epairs.size() == 3); for (size_t i = 0; i < 3; ++i) { _lambdas.push_back(epairs[i].first); _sphAxes.push_back(Vector3(epairs[i].second)); } // Debug output. MSG_DEBUG("Lambdas = (" << lambda1() << ", " << lambda2() << ", " << lambda3() << ")"); MSG_DEBUG("Sum of lambdas = " << lambda1() + lambda2() + lambda3()); MSG_DEBUG("Vectors = " << sphericityAxis() << ", " << sphericityMajorAxis() << ", " << sphericityMinorAxis() << ")"); } } rivet-1.8.3/src/Projections/LeptonClusters.cc0000644000175000017500000000544112116077757017454 0ustar sunsun// -*- C++ -*- #include "Rivet/Projections/LeptonClusters.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Cmp.hh" namespace Rivet { LeptonClusters::LeptonClusters(const FinalState& photons, const FinalState& signal, double dRmax, bool cluster, const std::vector >& etaRanges, double pTmin) : FinalState(etaRanges, pTmin), _dRmax(dRmax), _cluster(cluster) { setName("LeptonClusters"); IdentifiedFinalState photonfs(photons); photonfs.acceptId(PHOTON); addProjection(photonfs, "Photons"); addProjection(signal, "Signal"); } int LeptonClusters::compare(const Projection& p) const { // Compare the two as final states (for pT and eta cuts) const LeptonClusters& other = dynamic_cast(p); int fscmp = FinalState::compare(other); if (fscmp != EQUIVALENT) return fscmp; const PCmp phcmp = mkNamedPCmp(p, "Photons"); if (phcmp != EQUIVALENT) return phcmp; const PCmp sigcmp = mkNamedPCmp(p, "Signal"); if (sigcmp != EQUIVALENT) return sigcmp; return (cmp(_dRmax, other._dRmax) || cmp(_cluster, other._cluster)); } void LeptonClusters::project(const Event& e) { _theParticles.clear(); _clusteredLeptons.clear(); const FinalState& signal = applyProjection(e, "Signal"); ParticleVector bareleptons = signal.particles(); if (bareleptons.empty()) return; vector allClusteredLeptons; for (size_t i = 0; i < bareleptons.size(); ++i) { allClusteredLeptons.push_back(ClusteredLepton(bareleptons[i])); } const FinalState& photons = applyProjection(e, "Photons"); foreach (const Particle& photon, photons.particles()) { const FourMomentum p_P = photon.momentum(); double dRmin=_dRmax; int idx = -1; for (size_t i = 0; i < bareleptons.size(); ++i) { FourMomentum p_l = bareleptons[i].momentum(); // Only cluster photons around *charged* signal particles if (PID::threeCharge(bareleptons[i].pdgId()) == 0) continue; // Geometrically match momentum vectors double dR=deltaR(p_l, p_P); if (dR < dRmin) { dRmin=dR; idx = i; } } if (idx > -1) { if (_cluster) allClusteredLeptons[idx].addPhoton(photon, _cluster); } } foreach (const ClusteredLepton& lepton, allClusteredLeptons) { if (accept(lepton)) { _clusteredLeptons.push_back(lepton); _theParticles.push_back(lepton.constituentLepton()); _theParticles.insert(_theParticles.end(), lepton.constituentPhotons().begin(), lepton.constituentPhotons().end()); } } } } rivet-1.8.3/src/Projections/MergedFinalState.cc0000644000175000017500000000263512116077757017646 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Projections/MergedFinalState.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Cmp.hh" #include namespace Rivet { int MergedFinalState::compare(const Projection& p) const { /// @todo: Currently A+B is not recognised to be the same as B+A. return mkNamedPCmp(p, "FSA") || mkNamedPCmp(p, "FSB"); } void MergedFinalState::project(const Event& e) { const FinalState& fsa = applyProjection(e, "FSA"); const FinalState& fsb = applyProjection(e, "FSB"); _theParticles.clear(); foreach (const Particle& pa, fsa.particles()){ _theParticles.push_back(pa); } foreach (const Particle& pb, fsb.particles()){ const GenParticle* originalb = &(pb.genParticle()); bool notfound = true; foreach (const Particle& pa, fsa.particles()){ const GenParticle* originala = &(pa.genParticle()); if (originala == originalb) { notfound = false; break; } } if (notfound) { _theParticles.push_back(pb); } } MSG_DEBUG("Number of particles in the two final states to be merged: = \n" << " 1st final state = " << fsa.particles().size() << "\n" << " 2nd final state = " << fsb.particles().size()); MSG_DEBUG("Number of merged final-state particles = " << _theParticles.size()); } } rivet-1.8.3/src/Projections/Thrust.cc0000644000175000017500000001232712116077757015760 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Projections/Thrust.hh" #include "Rivet/Tools/Logging.hh" namespace Rivet { void Thrust::calc(const FinalState& fs) { calc(fs.particles()); } void Thrust::calc(const vector& fsparticles) { vector threeMomenta; threeMomenta.reserve(fsparticles.size()); foreach (const Particle& p, fsparticles) { const Vector3 p3 = p.momentum().vector3(); threeMomenta.push_back(p3); } _calcThrust(threeMomenta); } void Thrust::calc(const vector& fsmomenta) { vector threeMomenta; threeMomenta.reserve(fsmomenta.size()); foreach (const FourMomentum& v, fsmomenta) { threeMomenta.push_back(v.vector3()); } _calcThrust(threeMomenta); } void Thrust::calc(const vector& fsmomenta) { _calcThrust(fsmomenta); } ///////////////////////////////////////////////// inline bool mod2Cmp(const Vector3& a, const Vector3& b) { return a.mod2() > b.mod2(); } // Do the general case thrust calculation void _calcT(const vector& momenta, double& t, Vector3& taxis) { // This function implements the iterative algorithm as described in the // Pythia manual. We take eight (four) different starting vectors // constructed from the four (three) leading particles to make sure that // we don't find a local maximum. vector p = momenta; assert(p.size() >= 3); unsigned int n = 3; if (p.size() == 3) n = 3; vector tvec; vector tval; std::sort(p.begin(), p.end(), mod2Cmp); for (int i = 0 ; i < intpow(2, n-1); ++i) { // Create an initial vector from the leading four jets Vector3 foo(0,0,0); int sign = i; for (unsigned int k = 0 ; k < n ; ++k) { (sign % 2) == 1 ? foo += p[k] : foo -= p[k]; sign /= 2; } foo=foo.unit(); // Iterate double diff=999.; while (diff>1e-5) { Vector3 foobar(0,0,0); for (unsigned int k=0 ; k0 ? foobar+=p[k] : foobar-=p[k]; diff=(foo-foobar.unit()).mod(); foo=foobar.unit(); } // Calculate the thrust value for the vector we found t=0.; for (unsigned int k=0 ; kt){ t=tval[i]; taxis=tvec[i]; } } // Do the full calculation void Thrust::_calcThrust(const vector& fsmomenta) { // Make a vector of the three-momenta in the final state double momentumSum(0.0); foreach (const Vector3& p3, fsmomenta) { momentumSum += mod(p3); } MSG_DEBUG("Number of particles = " << fsmomenta.size()); // Clear the caches _thrusts.clear(); _thrustAxes.clear(); // If there are fewer than 2 visible particles, we can't do much if (fsmomenta.size() < 2) { for (int i = 0; i < 3; ++i) { _thrusts.push_back(-1); _thrustAxes.push_back(Vector3(0,0,0)); } return; } // Handle special case of thrust = 1 if there are only 2 particles if (fsmomenta.size() == 2) { Vector3 axis(0,0,0); _thrusts.push_back(1.0); _thrusts.push_back(0.0); _thrusts.push_back(0.0); axis = fsmomenta[0].unit(); if (axis.z() < 0) axis = -axis; _thrustAxes.push_back(axis); /// @todo Improve this --- special directions bad... /// (a,b,c) _|_ 1/(a^2+b^2) (b,-a,0) etc., but which combination minimises error? if (axis.z() < 0.75) _thrustAxes.push_back( (axis.cross(Vector3(0,0,1))).unit() ); else _thrustAxes.push_back( (axis.cross(Vector3(0,1,0))).unit() ); _thrustAxes.push_back( _thrustAxes[0].cross(_thrustAxes[1]) ); return; } // Temporary variables for calcs Vector3 axis(0,0,0); double val = 0.; // Get thrust _calcT(fsmomenta, val, axis); MSG_DEBUG("Mom sum = " << momentumSum); _thrusts.push_back(val / momentumSum); // Make sure that thrust always points along the +ve z-axis. if (axis.z() < 0) axis = -axis; axis = axis.unit(); MSG_DEBUG("Axis = " << axis); _thrustAxes.push_back(axis); // Get thrust major vector threeMomenta; foreach (const Vector3& v, fsmomenta) { // Get the part of each 3-momentum which is perpendicular to the thrust axis const Vector3 vpar = dot(v, axis.unit()) * axis.unit(); threeMomenta.push_back(v - vpar); } _calcT(threeMomenta, val, axis); _thrusts.push_back(val / momentumSum); if (axis.x() < 0) axis = -axis; axis = axis.unit(); _thrustAxes.push_back(axis); // Get thrust minor if (_thrustAxes[0].dot(_thrustAxes[1]) < 1e-10) { axis = _thrustAxes[0].cross(_thrustAxes[1]); _thrustAxes.push_back(axis); val = 0.0; foreach (const Vector3& v, fsmomenta) { val += fabs(dot(axis, v)); } _thrusts.push_back(val / momentumSum); } else { _thrusts.push_back(-1.0); _thrustAxes.push_back(Vector3(0,0,0)); } } } rivet-1.8.3/src/Projections/NeutralFinalState.cc0000644000175000017500000000204012116077757020043 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Projections/NeutralFinalState.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Cmp.hh" #include namespace Rivet { int NeutralFinalState::compare(const Projection& p) const { const NeutralFinalState& other = dynamic_cast(p); return mkNamedPCmp(other, "FS") || cmp(_Etmin, other._Etmin); } void NeutralFinalState::project(const Event& e) { const FinalState& fs = applyProjection(e, "FS"); _theParticles.clear(); foreach (const Particle& p, fs.particles()){ if ((PID::threeCharge(p.pdgId()) == 0) && (p.momentum().Et() > _Etmin)) { _theParticles.push_back(p); MSG_TRACE("Selected: ID = " << p.pdgId() << ", Et = " << p.momentum().Et() << ", eta = " << p.momentum().eta() << ", charge = " << PID::threeCharge(p.pdgId())/3.0); } } MSG_DEBUG("Number of neutral final-state particles = " << _theParticles.size()); } } rivet-1.8.3/src/Projections/DISFinalState.cc0000644000175000017500000000204012116077757017050 0ustar sunsun// -*- C++ -*- #include "Rivet/Projections/DISFinalState.hh" #include "Rivet/Cmp.hh" namespace Rivet { void DISFinalState::project(const Event& e) { const DISKinematics& diskin = applyProjection(e, "Kinematics"); const LorentzTransform hcmboost = (_boosttype == HCM) ? diskin.boostHCM() : diskin.boostBreit(); const DISLepton& dislep = diskin.applyProjection(e, "Lepton"); const FinalState& fs = dislep.applyProjection(e, "FS"); // Fill the particle list with all particles _other_ than the DIS scattered // lepton, with momenta boosted into the appropriate frame. _theParticles.clear(); _theParticles.reserve(fs.particles().size()-1); const GenParticle& dislepGP = dislep.out().genParticle(); foreach (const Particle& p, fs.particles()) { if (&p.genParticle() != &dislepGP) { //< Ensure that we skip the DIS lepton Particle temp(p); temp.setMomentum(hcmboost.transform(temp.momentum())); _theParticles.push_back(temp); } } } } rivet-1.8.3/src/Projections/JetAlg.cc0000644000175000017500000000060612116077757015632 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/JetAlg.hh" namespace Rivet { JetAlg::JetAlg(const FinalState& fs) : _useInvisibles(false) { setName("JetAlg"); addProjection(fs, "FS"); VisibleFinalState vfs(fs); MSG_DEBUG("Making visible final state from provided FS"); addProjection(vfs, "VFS"); } } rivet-1.8.3/src/Projections/ChargedLeptons.cc0000644000175000017500000000135312116077757017366 0ustar sunsun// -*- C++ -*- #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedLeptons.hh" #include "Rivet/Cmp.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { int ChargedLeptons::compare(const Projection& other) const { return mkNamedPCmp(other, "ChFS"); } void ChargedLeptons::project(const Event& evt) { // Reset result _theParticles.clear(); // Loop over charged particles and fill vector with leptons const FinalState& fs = applyProjection(evt, "ChFS"); foreach (const Particle& p, fs.particles()) { if (PID::isLepton(p.pdgId())) { _theParticles += Particle(p); } } std::sort(_theParticles.begin(), _theParticles.end(), cmpParticleByPt); } } rivet-1.8.3/src/Projections/DISKinematics.cc0000644000175000017500000000572612116077757017123 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Projections/DISKinematics.hh" #include "Rivet/Math/Constants.hh" #include "Rivet/Cmp.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { void DISKinematics::project(const Event& e) { // Identify beam hadron const ParticlePair& inc = applyProjection(e, "Beam").beams(); bool firstIsHadron = PID::isHadron(inc.first.pdgId()); bool secondIsHadron = PID::isHadron(inc.second.pdgId()); if (firstIsHadron && !secondIsHadron) { _inHadron = inc.first; } else if (!firstIsHadron && secondIsHadron) { _inHadron = inc.second; } else { //help! throw Error("DISKinematics projector could not find the correct beam hadron"); } // Get the DIS lepton and store some of its properties const DISLepton& dislep = applyProjection(e, "Lepton"); const FourMomentum pLepIn = dislep.in().momentum(); const FourMomentum pLepOut = dislep.out().momentum(); const FourMomentum pHad = _inHadron.momentum(); const FourMomentum pGamma = pLepIn - pLepOut; const FourMomentum tothad = pGamma + pHad; _theQ2 = -pGamma.mass2(); _theW2 = tothad.mass2(); _theX = Q2()/(2.0 * pGamma * pHad); _theY = (pGamma * pHad) / (pLepIn * pHad); _theS = invariant(pLepIn + pHad); // Calculate boost vector for boost into HCM-system LorentzTransform tmp; tmp.setBoost(-tothad.boostVector()); // Rotate so the photon is in x-z plane in HCM rest frame FourMomentum pGammaHCM = tmp.transform(pGamma); tmp.preMult(Matrix3(Vector3::mkZ(), -pGammaHCM.azimuthalAngle())); pGammaHCM = tmp.transform(pGamma); assert(isZero(dot(pGammaHCM.vector3(), Vector3::mkY()))); // Rotate so the photon is along the positive z-axis const double rot_angle = pGammaHCM.polarAngle() * (pGammaHCM.px() >= 0 ? -1 : 1); tmp.preMult(Matrix3(Vector3::mkY(), rot_angle)); // Check that final HCM photon lies along +ve z as expected pGammaHCM = tmp.transform(pGamma); assert(isZero(dot(pGammaHCM.vector3(), Vector3::mkX()))); assert(isZero(dot(pGammaHCM.vector3(), Vector3::mkY()))); assert(isZero(angle(pGammaHCM.vector3(), Vector3::mkZ()))); // Finally rotate so outgoing lepton at phi = 0 FourMomentum pLepOutHCM = tmp.transform(pLepOut); tmp.preMult(Matrix3(Vector3::mkZ(), -pLepOutHCM.azimuthalAngle())); assert(isZero(tmp.transform(pLepOut).azimuthalAngle())); _hcm = tmp; // Boost to Breit frame (use opposite convention for photon --- along *minus* z) tmp.preMult(Matrix3(Vector3::mkX(), PI)); const double bz = 1 - 2*x(); _breit = LorentzTransform(Vector3::mkZ() * bz).combine(tmp); assert(isZero(angle(_breit.transform(pGamma).vector3(), -Vector3::mkZ()))); assert(isZero(_breit.transform(pLepOut).azimuthalAngle())); } int DISKinematics::compare(const Projection & p) const { const DISKinematics& other = pcast(p); return mkNamedPCmp(other, "Lepton"); } } rivet-1.8.3/src/Projections/IdentifiedFinalState.cc0000644000175000017500000000313612116077757020504 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Cmp.hh" #include "Rivet/Tools/Utils.hh" #include namespace Rivet { IdentifiedFinalState::IdentifiedFinalState(const FinalState& fsp) { setName("IdentifiedFinalState"); addProjection(fsp, "FS"); } IdentifiedFinalState::IdentifiedFinalState(double etamin, double etamax, double ptMin) : FinalState(etamin, etamax, ptMin) { setName("IdentifiedFinalState"); addProjection(FinalState(etamin, etamax, ptMin), "FS"); } IdentifiedFinalState::IdentifiedFinalState(const vector >& etaRanges, double ptMin) : FinalState(etaRanges, ptMin) { setName("IdentifiedFinalState"); addProjection(FinalState(etaRanges, ptMin), "FS"); } int IdentifiedFinalState::compare(const Projection& p) const { const PCmp fscmp = mkNamedPCmp(p, "FS"); if (fscmp != EQUIVALENT) return fscmp; const IdentifiedFinalState& other = dynamic_cast(p); int pidssize = cmp(_pids.size(), other._pids.size()); if (pidssize != EQUIVALENT) return pidssize; return cmp(_pids, other._pids); } void IdentifiedFinalState::project(const Event& e) { const FinalState& fs = applyProjection(e, "FS"); _theParticles.clear(); _theParticles.reserve(fs.particles().size()); foreach (const Particle& p, fs.particles()) { if (acceptedIds().find(p.pdgId()) != acceptedIds().end()) { _theParticles.push_back(p); } } } } rivet-1.8.3/src/Projections/Hemispheres.cc0000644000175000017500000000421512116077757016740 0ustar sunsun// -*- C++ -*- #include "Rivet/Projections/Hemispheres.hh" namespace Rivet { void Hemispheres::project(const Event& e) { clear(); // Get thrust axes. const AxesDefinition& ax = applyProjection(e, "Axes"); const Vector3 n = ax.axis1(); MSG_DEBUG("Thrust axis = " << n); FourMomentum p4With, p4Against; double Evis(0), broadWith(0), broadAgainst(0), broadDenom(0); const FinalState& fs = applyProjection(e, ax.getProjection("FS")); const ParticleVector& particles = fs.particles(); MSG_DEBUG("Number of particles = " << particles.size()); foreach (const Particle& p, particles) { const FourMomentum p4 = p.momentum(); const Vector3 p3 = p4.vector3(); const double p3Mag = mod(p3); const double p3Para = dot(p3, n); const double p3Trans = mod(p3 - p3Para * n); // Update normalisations Evis += p4.E(); broadDenom += 2.0 * p3Mag; // Update the mass and broadening variables if (p3Para > 0) { p4With += p4; broadWith += p3Trans; } else if (p3Para < 0) { p4Against += p4; broadAgainst += p3Trans; } else { // In the incredibly unlikely event that a particle goes exactly along the // thrust plane, add half to each hemisphere. MSG_WARNING("Particle split between hemispheres"); p4With += 0.5 * p4; p4Against += 0.5 * p4; broadWith += 0.5 * p3Trans; broadAgainst += 0.5 * p3Trans; } } // Visible energy squared. _E2vis = Evis * Evis; // Calculate masses. const double mass2With = p4With.mass2(); const double mass2Against = p4Against.mass2(); _M2high = max(mass2With, mass2Against); _M2low = min(mass2With, mass2Against); // Calculate broadenings. broadWith /= broadDenom; broadAgainst /= broadDenom; _Bmax = max(broadWith, broadAgainst); _Bmin = min(broadWith, broadAgainst); // Calculate high-max correlation flag. const int maxMassID = (mass2With >= mass2Against); const int maxBroadID = (broadWith >= broadAgainst); _highMassEqMaxBroad = (maxMassID == maxBroadID); } } rivet-1.8.3/src/Projections/TriggerCDFRun2.cc0000644000175000017500000000200312116077757017144 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/TriggerCDFRun2.hh" namespace Rivet { void TriggerCDFRun2::project(const Event& evt) { // Start with the assumption that the trigger fails _decision_mb = false; // Run 2 Minimum Bias trigger requirements: int n_trig_1 = 0; int n_trig_2 = 0; const ChargedFinalState& cfs = applyProjection(evt, "CFS"); foreach (const Particle& p, cfs.particles()) { const double eta = p.momentum().pseudorapidity(); if (inRange(eta, -4.7, -3.7)) n_trig_1++; else if (inRange(eta, 3.7, 4.7)) n_trig_2++; } // Require at least one charged particle in both -4.7 < eta < -3.7 and 3.7 < eta < 4.7 if (n_trig_1 == 0 || n_trig_2 == 0) return; MSG_DEBUG("Trigger 1: " << n_trig_1 << " Trigger 2: " << n_trig_2); // Trigger success: _decision_mb = true; } } rivet-1.8.3/src/Projections/ChargedFinalState.cc0000644000175000017500000000310012116077757017764 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Cmp.hh" #include namespace Rivet { ChargedFinalState::ChargedFinalState(const FinalState& fsp) { setName("ChargedFinalState"); addProjection(fsp, "FS"); } ChargedFinalState::ChargedFinalState(double mineta, double maxeta, double minpt) { setName("ChargedFinalState"); addProjection(FinalState(mineta, maxeta, minpt), "FS"); } ChargedFinalState::ChargedFinalState(const vector >& etaRanges, double minpt) { setName("ChargedFinalState"); addProjection(FinalState(etaRanges, minpt), "FS"); } int ChargedFinalState::compare(const Projection& p) const { return mkNamedPCmp(p, "FS"); } bool chargedParticleFilter(const Particle& p) { return PID::threeCharge(p.pdgId()) == 0; } void ChargedFinalState::project(const Event& e) { const FinalState& fs = applyProjection(e, "FS"); _theParticles.clear(); std::remove_copy_if(fs.particles().begin(), fs.particles().end(), std::back_inserter(_theParticles), chargedParticleFilter); MSG_DEBUG("Number of charged final-state particles = " << _theParticles.size()); if (getLog().isActive(Log::TRACE)) { for (vector::iterator p = _theParticles.begin(); p != _theParticles.end(); ++p) { MSG_TRACE("Selected: " << p->pdgId() << ", charge = " << PID::threeCharge(p->pdgId())/3.0); } } } } rivet-1.8.3/src/Projections/TriggerUA5.cc0000644000175000017500000000300012116077757016371 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/TriggerUA5.hh" namespace Rivet { TriggerUA5::TriggerUA5() { setName("TriggerUA5"); addProjection(Beam(), "Beam"); addProjection(ChargedFinalState(-5.6, 5.6), "CFS"); } void TriggerUA5::project(const Event& evt) { _n_plus = 0; _n_minus = 0; // Start with the assumption that the trigger fails _decision_sd = false; _decision_nsd_1 = false; _decision_nsd_2 = false; // Triggers can be different for pp and ppbar running const Beam& b = applyProjection(evt, "Beam"); _samebeams = (b.beams().first.pdgId() == b.beams().second.pdgId()); // Count hodoscope hits const ChargedFinalState& cfs = applyProjection(evt, "CFS"); foreach (const Particle& p, cfs.particles()) { const double eta = p.momentum().pseudorapidity(); if (inRange(eta, -5.6, -2.0)) _n_minus++; else if (inRange(eta, 2.0, 5.6)) _n_plus++; } MSG_DEBUG("Trigger -: " << _n_minus << ", Trigger +: " << _n_plus); // Common SD/NSD trigger requirement: must activate at least one hodoscope if (_n_minus == 0 && _n_plus == 0) return; _decision_sd = true; // Extra NSD trigger requirements if (_n_minus == 0 || _n_plus == 0) return; _decision_nsd_1 = true; if (_n_minus < 2 || _n_plus < 2) return; _decision_nsd_2 = true; } } rivet-1.8.3/src/Projections/InitialQuarks.cc0000644000175000017500000000405612116077757017247 0ustar sunsun// -*- C++ -*- #include "Rivet/Projections/InitialQuarks.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Cmp.hh" #define IS_PARTON_PDGID(id) ( abs(id) <= 100 && abs(id) != 22 && (abs(id) < 11 || abs(id) > 18) ) namespace Rivet { int InitialQuarks::compare(const Projection& p) const { return EQUIVALENT; } void InitialQuarks::project(const Event& e) { _theParticles.clear(); foreach (const GenParticle* p, Rivet::particles(e.genEvent())) { const GenVertex* pv = p->production_vertex(); const GenVertex* dv = p->end_vertex(); const PdgId pid = abs(p->pdg_id()); bool passed = inRange((long)pid, 1, 5); if (passed) { if (pv != 0) { foreach (const GenParticle* pp, particles_in(pv)) { // Only accept if parent is electron or Z0 const PdgId pid = abs(pp->pdg_id()); passed = (pid == ELECTRON || abs(pp->pdg_id()) == ZBOSON); } } else { passed = false; } } if (getLog().isActive(Log::TRACE)) { const int st = p->status(); const double pT = p->momentum().perp(); const double eta = p->momentum().eta(); MSG_TRACE(std::boolalpha << "ID = " << p->pdg_id() << ", status = " << st << ", pT = " << pT << ", eta = " << eta << ": result = " << passed); if (pv != 0) { foreach (const GenParticle* pp, particles_in(pv)) { MSG_TRACE(std::boolalpha << " parent ID = " << pp->pdg_id()); } } if (dv != 0) { foreach (const GenParticle* pp, particles_out(dv)) { MSG_TRACE(std::boolalpha << " child ID = " << pp->pdg_id()); } } } if (passed) _theParticles.push_back(Particle(*p)); } MSG_DEBUG("Number of initial quarks = " << _theParticles.size()); if (!_theParticles.empty()) { for (size_t i = 0; i < _theParticles.size(); i++) { MSG_DEBUG("Initial quark[" << i << "] = " << _theParticles[i].pdgId()); } } } } rivet-1.8.3/src/Projections/FastJets.cc0000644000175000017500000002136712116077757016216 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { void FastJets::_init1(JetAlgName alg, double rparameter, double seed_threshold) { setName("FastJets"); MSG_DEBUG("R parameter = " << rparameter); MSG_DEBUG("Seed threshold = " << seed_threshold); if (alg == KT) { _jdef = fastjet::JetDefinition(fastjet::kt_algorithm, rparameter, fastjet::E_scheme); } else if (alg == CAM) { _jdef = fastjet::JetDefinition(fastjet::cambridge_algorithm, rparameter, fastjet::E_scheme); } else if (alg == ANTIKT) { _jdef = fastjet::JetDefinition(fastjet::antikt_algorithm, rparameter, fastjet::E_scheme); } else if (alg == DURHAM) { _jdef = fastjet::JetDefinition(fastjet::ee_kt_algorithm, fastjet::E_scheme); } else { // Plugins: if (alg == SISCONE) { const double OVERLAP_THRESHOLD = 0.75; _plugin.reset(new fastjet::SISConePlugin(rparameter, OVERLAP_THRESHOLD)); } else if (alg == PXCONE) { string msg = "PxCone currently not supported, since FastJet doesn't install it by default. "; msg += "Please notify the Rivet authors if this behaviour should be changed."; throw Error(msg); //_plugin.reset(new fastjet::PxConePlugin(rparameter)); } else if (alg == ATLASCONE) { const double OVERLAP_THRESHOLD = 0.5; _plugin.reset(new fastjet::ATLASConePlugin(rparameter, seed_threshold, OVERLAP_THRESHOLD)); } else if (alg == CMSCONE) { _plugin.reset(new fastjet::CMSIterativeConePlugin(rparameter, seed_threshold)); } else if (alg == CDFJETCLU) { const double OVERLAP_THRESHOLD = 0.75; _plugin.reset(new fastjet::CDFJetCluPlugin(rparameter, OVERLAP_THRESHOLD, seed_threshold)); } else if (alg == CDFMIDPOINT) { const double OVERLAP_THRESHOLD = 0.5; _plugin.reset(new fastjet::CDFMidPointPlugin(rparameter, OVERLAP_THRESHOLD, seed_threshold)); } else if (alg == D0ILCONE) { const double min_jet_Et = 6.0; _plugin.reset(new fastjet::D0RunIIConePlugin(rparameter, min_jet_Et)); } else if (alg == JADE) { _plugin.reset(new fastjet::JadePlugin()); } else if (alg == TRACKJET) { _plugin.reset(new fastjet::TrackJetPlugin(rparameter)); } _jdef = fastjet::JetDefinition(_plugin.get()); } } void FastJets::_init2(fastjet::JetAlgorithm type, fastjet::RecombinationScheme recom, double rparameter) { setName("FastJets"); _jdef = fastjet::JetDefinition(type, rparameter, recom); } void FastJets::_init3(fastjet::JetDefinition::Plugin* plugin) { setName("FastJets"); /// @todo Should we be copying the plugin? _plugin.reset(plugin); _jdef = fastjet::JetDefinition(_plugin.get()); } int FastJets::compare(const Projection& p) const { const FastJets& other = dynamic_cast(p); return \ (_useInvisibles ? mkNamedPCmp(other, "FS") : mkNamedPCmp(other, "VFS")) || cmp(_jdef.jet_algorithm(), other._jdef.jet_algorithm()) || cmp(_jdef.recombination_scheme(), other._jdef.recombination_scheme()) || cmp(_jdef.plugin(), other._jdef.plugin()) || cmp(_jdef.R(), other._jdef.R()) || cmp(_adef, other._adef); } void FastJets::project(const Event& e) { ParticleVector particles; if (_useInvisibles) { particles = applyProjection(e, "FS").particles(); } else { particles = applyProjection(e, "VFS").particles(); } calc(particles); } void FastJets::calc(const ParticleVector& ps) { _particles.clear(); vector vecs; // Store 4 vector data about each particle into vecs int counter = 1; foreach (const Particle& p, ps) { const FourMomentum fv = p.momentum(); fastjet::PseudoJet pJet(fv.px(), fv.py(), fv.pz(), fv.E()); pJet.set_user_index(counter); vecs.push_back(pJet); _particles[counter] = p; ++counter; } MSG_DEBUG("Running FastJet ClusterSequence construction"); // Choose CSeq as basic or area-calculating depending on whether _adef pointer is non-null. if (_adef == 0) { _cseq.reset(new fastjet::ClusterSequence(vecs, _jdef)); } else { _cseq.reset(new fastjet::ClusterSequenceArea(vecs, _jdef, *_adef)); } } Jets FastJets::_pseudojetsToJets(const PseudoJets& pjets) const { Jets rtn; foreach (const fastjet::PseudoJet& pj, pjets) { assert(clusterSeq()); const PseudoJets parts = clusterSeq()->constituents(pj); vector constituents; constituents.reserve(parts.size()); foreach (const fastjet::PseudoJet& p, parts) { map::const_iterator found = _particles.find(p.user_index()); assert(found != _particles.end()); constituents.push_back(found->second); } FourMomentum pjet(pj.E(), pj.px(), pj.py(), pj.pz()); Jet j(constituents, pjet); rtn.push_back(j); } /// @todo Cache? return rtn; } void FastJets::reset() { _yscales.clear(); _particles.clear(); /// @todo _cseq = fastjet::ClusterSequence(); } size_t FastJets::numJets(double ptmin) const { if (_cseq.get() != 0) { return _cseq->inclusive_jets(ptmin).size(); } else { return 0; } } Jets FastJets::_jets(double ptmin) const { Jets rtn = _pseudojetsToJets(pseudoJets(ptmin)); return rtn; } // Jets FastJets::jetsByPt(double ptmin) const { // return _pseudojetsToJets(pseudoJetsByPt(ptmin)); // } // Jets FastJets::jetsByE(double ptmin) const { // return _pseudojetsToJets(pseudoJetsByE(ptmin)); // } // Jets FastJets::jetsByRapidity(double ptmin) const { // return _pseudojetsToJets(pseudoJetsByRapidity(ptmin)); // } PseudoJets FastJets::pseudoJets(double ptmin) const { if (_cseq.get() != 0) { return _cseq->inclusive_jets(ptmin); } else { return PseudoJets(); } } vector FastJets::ySubJet(const fastjet::PseudoJet& jet) const { assert(clusterSeq()); fastjet::ClusterSequence subjet_cseq(clusterSeq()->constituents(jet), _jdef); vector yMergeVals; for (int i = 1; i < 4; ++i) { // Multiply the dmerge value by R^2 so that it corresponds to a // relative k_T (fastjet has 1/R^2 in the d_ij distance by default) const double ktmerge = subjet_cseq.exclusive_dmerge(i) * _jdef.R()*_jdef.R(); yMergeVals.push_back(ktmerge/jet.perp2()); } _yscales.insert(make_pair( jet.cluster_hist_index(), yMergeVals )); return yMergeVals; } fastjet::PseudoJet FastJets::splitJet(fastjet::PseudoJet jet, double& last_R) const { // Sanity cuts if (jet.E() <= 0 || _cseq->constituents(jet).size() <= 1) { return jet; } // Build a new cluster sequence just using the consituents of this jet. assert(clusterSeq()); fastjet::ClusterSequence cs(clusterSeq()->constituents(jet), _jdef); // Get the jet back again fastjet::PseudoJet remadeJet = cs.inclusive_jets()[0]; MSG_DEBUG("Jet2:" << remadeJet.m() << "," << remadeJet.e()); fastjet::PseudoJet parent1, parent2; fastjet::PseudoJet split(0.0, 0.0, 0.0, 0.0); while (cs.has_parents(remadeJet, parent1, parent2)) { MSG_DEBUG("Parents:" << parent1.m() << "," << parent2.m()); if (parent1.m2() < parent2.m2()) { fastjet::PseudoJet tmp; tmp = parent1; parent1 = parent2; parent2 = tmp; } double ktdist = parent1.kt_distance(parent2); double rtycut2 = 0.3*0.3; if (parent1.m() < ((2.0*remadeJet.m())/3.0) && ktdist > rtycut2*remadeJet.m2()) { break; } else { remadeJet = parent1; } } last_R = 0.5 * sqrt(parent1.squared_distance(parent2)); split.reset(remadeJet.px(), remadeJet.py(), remadeJet.pz(), remadeJet.E()); return split; } fastjet::PseudoJet FastJets::filterJet(fastjet::PseudoJet jet, double& stingy_R, const double def_R) const { assert(clusterSeq()); if (jet.E() <= 0.0 || clusterSeq()->constituents(jet).size() == 0) { return jet; } if (stingy_R == 0.0) { stingy_R = def_R; } stingy_R = def_R < stingy_R ? def_R : stingy_R; fastjet::JetDefinition stingy_jet_def(fastjet::cambridge_algorithm, stingy_R); //FlavourRecombiner recom; //stingy_jet_def.set_recombiner(&recom); fastjet::ClusterSequence scs(clusterSeq()->constituents(jet), stingy_jet_def); std::vector stingy_jets = sorted_by_pt(scs.inclusive_jets()); fastjet::PseudoJet reconst_jet(0.0, 0.0, 0.0, 0.0); for (unsigned isj = 0; isj < std::min(3U, (unsigned int) stingy_jets.size()); ++isj) { reconst_jet += stingy_jets[isj]; } return reconst_jet; } } rivet-1.8.3/src/Projections/TotalVisibleMomentum.cc0000644000175000017500000000114212116077757020603 0ustar sunsun// -*- C++ -*- #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/TotalVisibleMomentum.hh" #include "Rivet/Cmp.hh" namespace Rivet { int TotalVisibleMomentum::compare(const Projection& p) const { return mkNamedPCmp(p, "FS"); } void TotalVisibleMomentum::project(const Event& e) { _momentum = FourMomentum(); _set = 0.0; // Project into final state const FinalState& fs = applyProjection(e, "FS"); foreach (const Particle& p, fs.particles()) { const FourMomentum& mom = p.momentum(); _momentum += mom; _set += mom.Et(); } } } rivet-1.8.3/src/Projections/VetoedFinalState.cc0000644000175000017500000001404012116077757017662 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Cmp.hh" #include "Rivet/Tools/Utils.hh" #include namespace Rivet { int VetoedFinalState::compare(const Projection& p) const { const PCmp fscmp = mkNamedPCmp(p, "FS"); if (fscmp != EQUIVALENT) return fscmp; if (_vetofsnames.size() != 0) return UNDEFINED; const VetoedFinalState& other = dynamic_cast(p); return \ cmp(_vetoCodes, other._vetoCodes) || cmp(_compositeVetoes, other._compositeVetoes) || cmp(_parentVetoes, other._parentVetoes); } void VetoedFinalState::project(const Event& e) { const FinalState& fs = applyProjection(e, "FS"); _theParticles.clear(); _theParticles.reserve(fs.particles().size()); foreach (const Particle& p, fs.particles()) { if (getLog().isActive(Log::TRACE)) { vector codes; for (VetoDetails::const_iterator code = _vetoCodes.begin(); code != _vetoCodes.end(); ++code) { codes.push_back(code->first); } const string codestr = "{ " + join(codes) + " }"; MSG_TRACE(p.pdgId() << " vs. veto codes = " << codestr << " (" << codes.size() << ")"); } const long pdgid = p.pdgId(); const double pt = p.momentum().pT(); VetoDetails::iterator iter = _vetoCodes.find(pdgid); if (iter == _vetoCodes.end()) { MSG_TRACE("Storing with PDG code = " << pdgid << ", pT = " << pt); _theParticles.push_back(p); } else { // This particle code is listed as a possible veto... check pT. // Make sure that the pT range is sensible: BinaryCut ptrange = iter->second; assert(ptrange.first <= ptrange.second); stringstream rangess; if (ptrange.first < numeric_limits::max()) rangess << ptrange.second; rangess << " - "; if (ptrange.second < numeric_limits::max()) rangess << ptrange.second; MSG_TRACE("ID = " << pdgid << ", pT range = " << rangess.str()); stringstream debugline; debugline << "with PDG code = " << pdgid << " pT = " << p.momentum().pT(); if (pt < ptrange.first || pt > ptrange.second) { MSG_TRACE("Storing " << debugline.str()); _theParticles.push_back(p); } else { MSG_TRACE("Vetoing " << debugline.str()); } } } set toErase; for (set::iterator nIt = _nCompositeDecays.begin(); nIt != _nCompositeDecays.end() && !_theParticles.empty(); ++nIt) { map, FourMomentum> oldMasses; map, FourMomentum> newMasses; set start; start.insert(_theParticles.begin()); oldMasses.insert(pair, FourMomentum> (start, _theParticles.begin()->momentum())); for (int nParts = 1; nParts != *nIt; ++nParts) { for (map, FourMomentum>::iterator mIt = oldMasses.begin(); mIt != oldMasses.end(); ++mIt) { ParticleVector::iterator pStart = *(mIt->first.rbegin()); for (ParticleVector::iterator pIt = pStart + 1; pIt != _theParticles.end(); ++pIt) { FourMomentum cMom = mIt->second + pIt->momentum(); set pList(mIt->first); pList.insert(pIt); newMasses[pList] = cMom; } } oldMasses = newMasses; newMasses.clear(); } for (map, FourMomentum>::iterator mIt = oldMasses.begin(); mIt != oldMasses.end(); ++mIt) { double mass2 = mIt->second.mass2(); if (mass2 >= 0.0) { double mass = sqrt(mass2); for (CompositeVeto::iterator cIt = _compositeVetoes.lower_bound(*nIt); cIt != _compositeVetoes.upper_bound(*nIt); ++cIt) { BinaryCut massRange = cIt->second; if (mass < massRange.second && mass > massRange.first) { for (set::iterator lIt = mIt->first.begin(); lIt != mIt->first.end(); ++lIt) { toErase.insert(*lIt); } } } } } } for (set::reverse_iterator p = toErase.rbegin(); p != toErase.rend(); ++p) { _theParticles.erase(*p); } /// @todo Improve! for (ParentVetos::const_iterator vIt = _parentVetoes.begin(); vIt != _parentVetoes.end(); ++vIt) { for (ParticleVector::iterator p = _theParticles.begin(); p != _theParticles.end(); ++p) { GenVertex* startVtx = ((*p).genParticle()).production_vertex(); bool veto = false; if (startVtx!=0) { for (GenVertex::particle_iterator pIt = startVtx->particles_begin(HepMC::ancestors); pIt != startVtx->particles_end(HepMC::ancestors) && !veto; ++pIt) { if (*vIt == (*pIt)->pdg_id()) { veto = true; p = _theParticles.erase(p); --p; } } } } } // Now veto on the FS foreach (const string& ifs, _vetofsnames) { const FinalState& vfs = applyProjection(e, ifs); const ParticleVector& vfsp = vfs.particles(); for (ParticleVector::iterator icheck = _theParticles.begin(); icheck != _theParticles.end(); ++icheck) { if (!icheck->hasGenParticle()) continue; bool found = false; for (ParticleVector::const_iterator ipart = vfsp.begin(); ipart != vfsp.end(); ++ipart){ if (!ipart->hasGenParticle()) continue; MSG_TRACE("Comparing barcode " << icheck->genParticle().barcode() << " with veto particle " << ipart->genParticle().barcode()); if (ipart->genParticle().barcode() == icheck->genParticle().barcode()){ found = true; break; } } if (found) { _theParticles.erase(icheck); --icheck; } } } } } rivet-1.8.3/src/Projections/NonHadronicFinalState.cc0000644000175000017500000000144112116077757020637 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/NonHadronicFinalState.hh" #include "Rivet/Cmp.hh" #include namespace Rivet { int NonHadronicFinalState::compare(const Projection& p) const { return FinalState::compare(p); } bool nonHadronFilter(const Particle& p) { return PID::isHadron(p.pdgId()); } void NonHadronicFinalState::project(const Event& e) { const FinalState& fs = applyProjection(e, "FS"); _theParticles.clear(); std::remove_copy_if(fs.particles().begin(), fs.particles().end(), std::back_inserter(_theParticles), nonHadronFilter); MSG_DEBUG("Number of non-hadronic final-state particles = " << _theParticles.size()); } } rivet-1.8.3/src/Projections/SVertex.cc0000644000175000017500000001431212116077757016063 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Projections/SVertex.hh" #include "HepMC/GenVertex.h" #include "HepMC/GenParticle.h" #include "HepMC/GenEvent.h" #include "HepMC/SimpleVector.h" #include "Rivet/Cmp.hh" namespace Rivet { // Return distance of closest approach from track to given (primary) vertex position. inline double get2dClosestApproach(const HepMC::GenParticle& track, const Vector3& vtx3pos) { /// @todo Whoa! - implicit constructors from hell! HepMC::FourVector trkvec = track; HepMC::ThreeVector trk3vec = trkvec; HepMC::ThreeVector trk3pos = track.production_vertex()->position(); Vector3 diff(vtx3pos.x()-trk3pos.x(), vtx3pos.y()-trk3pos.y(), vtx3pos.z()-trk3pos.z()); // Impact parameter in the transverse plane const double d = fabs( trk3vec.x()*diff.y() - trk3vec.y()*diff.x() ) / sqrt( sqr(trk3vec.x()) + sqr(trk3vec.y()) ); return d; } // Return distance of closest approach from track to given (primary) vertex position. inline double get3dClosestApproach(const HepMC::GenParticle& track, const Vector3& vtx3pos) { HepMC::FourVector trkvec = track; HepMC::ThreeVector trk3vec = trkvec; HepMC::FourVector trkpos = track.production_vertex()->position(); HepMC::ThreeVector trk3pos = trkpos; Vector3 diff(vtx3pos.x()-trk3pos.x(), vtx3pos.y()-trk3pos.y(), vtx3pos.z()-trk3pos.z()); // Impact parameter in 3 dimensions const double mag = sqrt( sqr(trk3vec.x()) + sqr(trk3vec.y()) + sqr(trk3vec.z()) ); const double d = sqrt( sqr(trk3vec.y()*diff.z()-trk3vec.z()*diff.y()) - sqr(trk3vec.x()*diff.z()-trk3vec.z()*diff.x()) + sqr(trk3vec.x()*diff.y()-trk3vec.y()*diff.x()) ) / mag; return d; } /// Return Decay Length Significance between two vertices in transverse plane inline double get2dDecayLength(const Vector3& vtx1, const Vector3& vtx2, const FourMomentum& jetaxis) { Vector3 diff = vtx1 - vtx2; const double l = (jetaxis.px()*diff.x() + jetaxis.py()*diff.y() ) / sqrt(sqr(jetaxis.px())+sqr(jetaxis.py())); return l; } /// Return 3 dimensional Decay Length Significance between vertices inline double get3dDecayLength(const Vector3& vtx1, const Vector3& vtx2, const FourMomentum& jetaxis) { Vector3 diff = vtx1 - vtx2; const double l = (jetaxis.px()*diff.x() +jetaxis.py()*diff.y() +jetaxis.pz()*diff.z()) / sqrt(sqr(jetaxis.px())+sqr(jetaxis.py())+sqr(jetaxis.pz())); return l; } int SVertex::compare(const Projection& p) const { const PCmp fscmp = mkNamedPCmp(p, "PV"); if (fscmp != EQUIVALENT) return fscmp; const SVertex& other = pcast(p); return \ cmp(_detEta, other._detEta) || cmp(_IPres, other._IPres) || cmp(_DLS, other._DLS) || cmp(_DLSres, _DLSres); } void SVertex::project(const Event& e) { const PVertex& pvtx = applyProjection(e, "PV"); const Vector3 pvpos = pvtx.position(); const ChargedFinalState& chfs = applyProjection(e, "FS"); // Produce vector of vertices, each containing a vector of all charged // final state particles belonging to this vertex typedef map VtxPartsMap; VtxPartsMap vtxparts; foreach (const Particle& p, chfs.particles()) { // Consider only charged particles in tracker geometrical acceptance /// @todo Use acceptance from the FinalState instead if (fabs(p.momentum().pseudorapidity()) > _detEta) continue; HepMC::GenVertex* pvtx = p.genParticle().production_vertex(); vtxparts[pvtx].push_back(p); } // Check if jets are tagged, by means of selected vertices fulfilling track criteria _taggedjets.clear(); for (VtxPartsMap::const_iterator vp = vtxparts.begin(); vp != vtxparts.end(); ++vp) { FourMomentum vtxVisMom; if (! _applyVtxTrackCuts(vp->second, pvpos, vtxVisMom) ) break; for (vector::const_iterator jaxis = _jetaxes.begin(); jaxis != _jetaxes.end(); ++jaxis) { // Delta{R} requirement between jet and visible vector sum of vertex tracks if (deltaR(*jaxis, vtxVisMom) < _deltaR) { const double dls = get2dDecayLength(vp->first->position(), pvpos, *jaxis) / _DLSres; if (dls > _DLS) _taggedjets.push_back(*jaxis); } } } } /// Analysis dependent cuts on vertex tracks in SVertex projection /// Since the analysis specific cuts are very complex, they are not /// implemented in the projection and are instead passed via a function (object). /// SVertex member function implementation below /// in: reference to instance of SVertex projection, ParticleVector of /// vertex to be analyzed, primary (Gen)Vertex /// out: FourMomentum = visible Momentum of vertex (selected tracks), /// return bool: cuts passed? 1 : 0 /// @todo Move this into the projection concrete class. bool SVertex::_applyVtxTrackCuts(const ParticleVector& vtxparts, const Vector3& pvtxpos, FourMomentum vtxVisMom) { // Check vertex final state charged particles, if fulfilling track criteria size_t pass1trk1pTdcaSig25(0), pass1trk05pTdcaSig25(0), pass2trk15pTdcaSig3(0), pass2trk1pTdcaSig3(0); foreach (const Particle& vp, vtxparts) { const double IPsig = get2dClosestApproach(vp.genParticle(), pvtxpos) / _IPres; // Update "visible momentum" vector (returned by reference). if (vp.momentum().pT() > 0.5) { vtxVisMom += vp.momentum(); } // 1st pass if (vtxparts.size() >= 3 && IPsig > 2.5) { if (vp.momentum().pT() > 1.0) pass1trk1pTdcaSig25++; else if (vp.momentum().pT() > 0.5) pass1trk05pTdcaSig25++; } // 2nd pass if (vtxparts.size() >= 2 && IPsig > 3.) { if (vp.momentum().pT() > 1.5) pass2trk15pTdcaSig3++; else if (vp.momentum().pT() > 1.0) pass2trk1pTdcaSig3++; } } // Combine info from passes to make yes/no decision about whether this is significant: if (pass1trk1pTdcaSig25 >= 1 && pass1trk1pTdcaSig25 + pass1trk05pTdcaSig25>=3) return true; if (pass2trk15pTdcaSig3 >= 1 && pass2trk15pTdcaSig3 + pass2trk1pTdcaSig3>=2) return true; return false; } } rivet-1.8.3/src/Projections/BeamThrust.cc0000644000175000017500000000162012116077757016537 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Projections/BeamThrust.hh" #include "Rivet/Tools/Logging.hh" namespace Rivet { void BeamThrust::calc(const FinalState& fs) { calc(fs.particles()); } void BeamThrust::calc(const vector& fsparticles) { vector fsmomenta; fsmomenta.reserve(fsparticles.size()); foreach (const Particle& p, fsparticles) { const FourMomentum p4 = p.momentum(); fsmomenta.push_back(p4); } _calcBeamThrust(fsmomenta); } void BeamThrust::calc(const vector& fsmomenta) { _calcBeamThrust(fsmomenta); } ///////////////////////////////////////////////// // Do the full calculation void BeamThrust::_calcBeamThrust(const vector& fsmomenta) { _beamthrust = 0.; foreach (const FourMomentum& p, fsmomenta) { _beamthrust += p.E() - fabs(p.z()); } } } rivet-1.8.3/src/Projections/LeadingParticlesFinalState.cc0000644000175000017500000000541312116077757021652 0ustar sunsun#include "Rivet/Projections/LeadingParticlesFinalState.hh" #include "Rivet/Particle.hh" namespace Rivet { int LeadingParticlesFinalState::compare(const Projection& p) const { // First compare the final states we are running on int fscmp = mkNamedPCmp(p, "FS"); if (fscmp != EQUIVALENT) return fscmp; // Then compare the two as final states const LeadingParticlesFinalState& other = dynamic_cast(p); fscmp = FinalState::compare(other); if (fscmp != EQUIVALENT) return fscmp; int locmp = cmp(_leading_only, other._leading_only); if (locmp != EQUIVALENT) return locmp; // Finally compare the IDs if (_ids < other._ids) return ORDERED; else if (other._ids < _ids) return UNORDERED; return EQUIVALENT; } void LeadingParticlesFinalState::project(const Event & e) { _theParticles.clear(); const FinalState& fs = applyProjection(e, "FS"); // Temporary container map tmp; const ParticleVector& particles = fs.particles(); MSG_DEBUG("Original final state particles size " << particles.size()); ParticleVector::const_iterator ifs; for (ifs = particles.begin(); ifs != particles.end(); ++ifs) { if (inList(*ifs) && FinalState::accept(ifs->genParticle())) { // Look for an existing particle in tmp container map < long, ParticleVector::const_iterator >::const_iterator itmp = tmp.find(ifs->pdgId()); if (itmp != tmp.end()) { // if a particle with this type has been already selected // If the new pT is higher than the previous one, then substitute... if (ifs->momentum().pT() > itmp->second->momentum().pT()) { tmp[ifs->pdgId()] = ifs; } // ...otherwise insert in the container } else { tmp[ifs->pdgId()] = ifs; } } } // Loop on the tmp container and fill _theParticles map::const_iterator i; for (i = tmp.begin(); i != tmp.end(); ++i) { MSG_DEBUG("LeadingParticlesFinalState is accepting particle ID " << i->second->pdgId() << " with momentum " << i->second->momentum()); _theParticles.push_back(*(i->second)); } if (_leading_only) { double ptmax=0.0; Particle pmax; foreach (const Particle& p, _theParticles) { if (p.momentum().pT() > ptmax) { ptmax = p.momentum().pT(); pmax = p; } } _theParticles.clear(); _theParticles.push_back(pmax); } } bool LeadingParticlesFinalState::inList(const Particle & particle) const { std::set < long >::const_iterator ilist = _ids.find(particle.pdgId()); if (ilist != _ids.end()) return true; return false; } } rivet-1.8.3/src/Projections/PVertex.cc0000644000175000017500000000216412116077757016062 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Projections/PVertex.hh" #include "HepMC/GenVertex.h" #include "HepMC/GenEvent.h" namespace Rivet { void PVertex::project(const Event& e) { // We'll *try* to do it right, in case any generators are doing the right thing... _thePVertex = e.genEvent().signal_process_vertex(); MSG_DEBUG("PVertex ptr from HepMC = " << _thePVertex); if (!_thePVertex) { // Since no signal vertices are filled in existing Fortran & C++ MC's, // the decay vertex from first vertex in event with 2 incoming particles HepMC::GenEvent::vertex_const_iterator vIt = e.genEvent().vertices_begin(); while((*vIt)->particles_in_size() != 2 && vIt != e.genEvent().vertices_end()){ ++vIt; } if(vIt != e.genEvent().vertices_end()) _thePVertex = *vIt; } assert(_thePVertex); const unsigned int pVertexParticleSize = _thePVertex->particles_in_size(); if (pVertexParticleSize != 2 ) { stringstream ss; ss << "Wrong number of Primary Vertex particles: " << pVertexParticleSize; throw Error(ss.str()); } } } rivet-1.8.3/src/Projections/InvMassFinalState.cc0000644000175000017500000001571212116077757020023 0ustar sunsun// -*- C++ -*- #include "Rivet/Projections/InvMassFinalState.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Cmp.hh" namespace Rivet { InvMassFinalState::InvMassFinalState(const FinalState& fsp, const pair& idpair, // pair of decay products double minmass, // min inv mass double maxmass, // max inv mass double masstarget) : _minmass(minmass), _maxmass(maxmass), _masstarget(masstarget), _useTransverseMass(false) { setName("InvMassFinalState"); addProjection(fsp, "FS"); _decayids.push_back(idpair); } InvMassFinalState::InvMassFinalState(const FinalState& fsp, const vector >& idpairs, // vector of pairs of decay products double minmass, // min inv mass double maxmass, // max inv mass double masstarget) : _decayids(idpairs), _minmass(minmass), _maxmass(maxmass), _masstarget(masstarget), _useTransverseMass(false) { setName("InvMassFinalState"); addProjection(fsp, "FS"); } InvMassFinalState::InvMassFinalState(const pair& idpair, // pair of decay products double minmass, // min inv mass double maxmass, // max inv mass double masstarget) : _minmass(minmass), _maxmass(maxmass), _masstarget(masstarget), _useTransverseMass(false) { setName("InvMassFinalState"); _decayids.push_back(idpair); } InvMassFinalState::InvMassFinalState(const vector >& idpairs, // vector of pairs of decay products double minmass, // min inv mass double maxmass, // max inv mass double masstarget) : _decayids(idpairs), _minmass(minmass), _maxmass(maxmass), _masstarget(masstarget), _useTransverseMass(false) { setName("InvMassFinalState"); } int InvMassFinalState::compare(const Projection& p) const { // First compare the final states we are running on int fscmp = mkNamedPCmp(p, "FS"); if (fscmp != EQUIVALENT) return fscmp; // Then compare the two as final states const InvMassFinalState& other = dynamic_cast(p); fscmp = FinalState::compare(other); if (fscmp != EQUIVALENT) return fscmp; // Compare the mass limits int masstypecmp = cmp(_useTransverseMass, other._useTransverseMass); if (masstypecmp != EQUIVALENT) return masstypecmp; int massllimcmp = cmp(_minmass, other._minmass); if (massllimcmp != EQUIVALENT) return massllimcmp; int masshlimcmp = cmp(_maxmass, other._maxmass); if (masshlimcmp != EQUIVALENT) return masshlimcmp; // Compare the decay species int decaycmp = cmp(_decayids, other._decayids); if (decaycmp != EQUIVALENT) return decaycmp; // Finally compare them as final states return FinalState::compare(other); } void InvMassFinalState::project(const Event& e) { const FinalState& fs = applyProjection(e, "FS"); calc(fs.particles()); } void InvMassFinalState::calc(const ParticleVector& inparticles) { _theParticles.clear(); _particlePairs.clear(); // Containers for the particles of type specified in the pair vector type1; vector type2; // Get all the particles of the type specified in the pair from the particle list foreach (const Particle& ipart, inparticles) { // Loop around possible particle pairs (typedef needed to keep BOOST_FOREACH happy) foreach (const PdgIdPair& ipair, _decayids) { if (ipart.pdgId() == ipair.first) { if (accept(ipart)) { type1 += &ipart; } } else if (ipart.pdgId() == ipair.second) { if (accept(ipart)) { type2 += &ipart; } } } } if (type1.empty() || type2.empty()) return; // Temporary container of selected particles iterators // Useful to compare iterators and avoid double occurrences of the same // particle in case it matches with more than another particle vector tmp; // Now calculate the inv mass pair > closestPair; closestPair.first = 1e30; foreach (const Particle* i1, type1) { foreach (const Particle* i2, type2) { // Check this is actually a pair // (if more than one pair in vector particles can be unrelated) bool found = false; foreach (const PdgIdPair& ipair, _decayids) { if (i1->pdgId() == ipair.first && i2->pdgId() == ipair.second) { found = true; break; } } if (!found) continue; FourMomentum v4 = i1->momentum() + i2->momentum(); if (v4.mass2() < 0) { MSG_DEBUG("Constructed negative inv mass2: skipping!"); continue; } bool passedMassCut = false; if (_useTransverseMass) { passedMassCut = inRange(massT(i1->momentum(), i2->momentum()), _minmass, _maxmass); } else { passedMassCut = inRange(v4.mass(), _minmass, _maxmass); } if (passedMassCut) { MSG_DEBUG("Selecting particles with IDs " << i1->pdgId() << " & " << i2->pdgId() << " and mass = " << v4.mass()/GeV << " GeV"); // Store accepted particles, avoiding duplicates if (find(tmp.begin(), tmp.end(), i1) == tmp.end()) { tmp.push_back(i1); _theParticles += *i1; } if (find(tmp.begin(), tmp.end(), i2) == tmp.end()) { tmp.push_back(i2); _theParticles += *i2; } // Store accepted particle pairs _particlePairs += make_pair(*i1, *i2); if (_masstarget>0.0) { double diff=fabs(v4.mass()-_masstarget); if (diff 0.0 && closestPair.first < 1e30) { _theParticles.clear(); _particlePairs.clear(); _theParticles += closestPair.second.first; _theParticles += closestPair.second.second; _particlePairs += closestPair.second; } MSG_DEBUG("Selected " << _theParticles.size() << " particles " << "(" << _particlePairs.size() << " pairs)"); if (getLog().isActive(Log::TRACE)) { foreach (const Particle& p, _theParticles) { MSG_TRACE("ID: " << p.pdgId() << ", barcode: " << p.genParticle().barcode()); } } } /// Constituent pairs const std::vector >& InvMassFinalState::particlePairs() const { return _particlePairs; } } rivet-1.8.3/src/Projections/FParameter.cc0000644000175000017500000000656612116077757016525 0ustar sunsun// -*- C++ -*- #include "Rivet/Projections/FParameter.hh" #include "Rivet/Cmp.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/Utils.hh" namespace Rivet { FParameter::FParameter(const FinalState& fsp) { setName("FParameter"); addProjection(fsp, "FS"); clear(); } void FParameter::clear() { _lambdas = vector(2, 0); } void FParameter::project(const Event& e) { const ParticleVector prts = applyProjection(e, "FS").particles(); calc(prts); } void FParameter::calc(const FinalState& fs) { calc(fs.particles()); } void FParameter::calc(const vector& fsparticles) { vector threeMomenta; threeMomenta.reserve(fsparticles.size()); foreach (const Particle& p, fsparticles) { const Vector3 p3 = p.momentum().vector3(); threeMomenta.push_back(p3); } _calcFParameter(threeMomenta); } void FParameter::calc(const vector& fsmomenta) { vector threeMomenta; threeMomenta.reserve(fsmomenta.size()); foreach (const FourMomentum& v, fsmomenta) { threeMomenta.push_back(v.vector3()); } _calcFParameter(threeMomenta); } void FParameter::calc(const vector& fsmomenta) { _calcFParameter(fsmomenta); } // Actually do the calculation void FParameter::_calcFParameter(const vector& fsmomenta) { // Return (with "safe nonsense" sphericity params) if there are no final state particles. if (fsmomenta.empty()) { MSG_DEBUG("No particles in final state..."); clear(); return; } // A small iteration over full momenta but set z-coord. to 0.0 to get transverse momenta vector fsperpmomenta; foreach (const Vector3& p, fsmomenta) { fsperpmomenta.push_back(Vector3(p.x(), p.y(), 0.0)); } // Iterate over all the final state particles. Matrix<2> mMom; MSG_DEBUG("Number of particles = " << fsperpmomenta.size()); foreach (const Vector3& p3, fsperpmomenta) { double prefactor = 1.0/mod(p3); Matrix<2> mMomPart; for (size_t i = 0; i < 2; ++i) { for (size_t j = 0; j < 2; ++j) { mMomPart.set(i,j, p3[i]*p3[j]); } } mMom += prefactor * mMomPart; } MSG_DEBUG("Linearised transverse momentum tensor = " << mMom); // Check that the matrix is symmetric. const bool isSymm = mMom.isSymm(); if (!isSymm) { MSG_ERROR("Error: momentum tensor not symmetric:"); MSG_ERROR("[0,1] vs. [1,0]: " << mMom.get(0,1) << ", " << mMom.get(1,0)); MSG_ERROR("[0,2] vs. [2,0]: " << mMom.get(0,2) << ", " << mMom.get(2,0)); MSG_ERROR("[1,2] vs. [2,1]: " << mMom.get(1,2) << ", " << mMom.get(2,1)); } // If not symmetric, something's wrong (we made sure the error msg appeared first). assert(isSymm); // Diagonalize momentum matrix. const EigenSystem<2> eigen2 = diagonalize(mMom); MSG_DEBUG("Diag momentum tensor = " << eigen2.getDiagMatrix()); // Reset and set eigenvalue parameters. _lambdas.clear(); const EigenSystem<2>::EigenPairs epairs = eigen2.getEigenPairs(); assert(epairs.size() == 2); for (size_t i = 0; i < 2; ++i) { _lambdas.push_back(epairs[i].first); } // Debug output. MSG_DEBUG("Lambdas = (" << lambda1() << ", " << lambda2() << ")"); MSG_DEBUG("Sum of lambdas = " << lambda1() + lambda2()); } } rivet-1.8.3/src/Projections/HadronicFinalState.cc0000644000175000017500000000142112116077757020162 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/HadronicFinalState.hh" #include "Rivet/Cmp.hh" #include namespace Rivet { int HadronicFinalState::compare(const Projection& p) const { return FinalState::compare(p); } bool hadronFilter(const Particle& p) { return ! PID::isHadron(p.pdgId()); } void HadronicFinalState::project(const Event& e) { const FinalState& fs = applyProjection(e, "FS"); _theParticles.clear(); std::remove_copy_if(fs.particles().begin(), fs.particles().end(), std::back_inserter(_theParticles), hadronFilter); MSG_DEBUG("Number of hadronic final-state particles = " << _theParticles.size()); } } rivet-1.8.3/src/Projections/VisibleFinalState.cc0000644000175000017500000000242712116077757020037 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Cmp.hh" #include namespace Rivet { int VisibleFinalState::compare(const Projection& p) const { return mkNamedPCmp(p, "FS"); } // Since we remove inivisibles from the FinalState in project(), // we need a filter where invisible --> true bool isInvisibleFilter(const Particle& p) { // charged particles are visible if ( PID::threeCharge( p.pdgId() ) != 0 ) return false; // neutral hadrons are visible if ( PID::isHadron( p.pdgId() ) ) return false; // photons are visible if ( p.pdgId() == PHOTON ) return false; // gluons are visible (for parton level analyses) if ( p.pdgId() == GLUON ) return false; // everything else is invisible return true; } void VisibleFinalState::project(const Event& e) { const FinalState& fs = applyProjection(e, "FS"); _theParticles.clear(); std::remove_copy_if(fs.particles().begin(), fs.particles().end(), std::back_inserter(_theParticles), isInvisibleFilter); MSG_DEBUG("Number of visible final-state particles = " << _theParticles.size()); } } rivet-1.8.3/src/Projections/TriggerCDFRun0Run1.cc0000644000175000017500000000265612116077757017726 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/TriggerCDFRun0Run1.hh" namespace Rivet { void TriggerCDFRun0Run1::project(const Event& evt) { // Start with the assumption that the trigger fails _decision_mb = false; // Minimum Bias trigger requirements from the BBC counters int n_trig_1 = 0; int n_trig_2 = 0; // Event selection based on tracks in VTPC (time projection chambers) int n_backward = 0; int n_forward = 0; const ChargedFinalState& cfs = applyProjection(evt, "CFS"); foreach (const Particle& p, cfs.particles()) { const double eta = p.momentum().pseudorapidity(); if (inRange(eta, -5.9, -3.2)) n_trig_1++; else if (inRange(eta, 3.2, 5.9)) n_trig_2++; if (inRange(eta, -3.0, 0.0)) n_backward++; else if (inRange(eta, 0.0, 3.0)) n_forward++; } // Require at least 4 tracks with at least one in each of the forward // and backward hemispheres: if (n_trig_1 == 0 || n_trig_2 == 0) return; MSG_DEBUG("Trigger 1: " << n_trig_1 << " Trigger 2: " << n_trig_2); if (n_backward + n_forward < 4 || n_backward == 0 || n_forward == 0) return; MSG_DEBUG(" Num. forward: " << n_forward << ", Num. backward: " << n_backward); // Trigger success: _decision_mb = true; } } rivet-1.8.3/src/Projections/Makefile.in0000644000175000017500000005450412116616065016217 0ustar sunsun# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/Projections DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libRivetProjections_la_LIBADD = am_libRivetProjections_la_OBJECTS = Beam.lo BeamThrust.lo \ ChargedFinalState.lo ChargedLeptons.lo CentralEtHCM.lo \ ClusteredPhotons.lo DISFinalState.lo DISKinematics.lo \ DISLepton.lo FastJets.lo FinalState.lo FoxWolframMoments.lo \ FParameter.lo HadronicFinalState.lo NonHadronicFinalState.lo \ Hemispheres.lo IdentifiedFinalState.lo InitialQuarks.lo \ InvMassFinalState.lo JetAlg.lo JetShape.lo \ LeadingParticlesFinalState.lo LeptonClusters.lo \ MergedFinalState.lo MissingMomentum.lo Multiplicity.lo \ NeutralFinalState.lo ParisiTensor.lo PVertex.lo Sphericity.lo \ Spherocity.lo SVertex.lo Thrust.lo TotalVisibleMomentum.lo \ TriggerCDFRun0Run1.lo TriggerCDFRun2.lo TriggerUA5.lo \ UnstableFinalState.lo VetoedFinalState.lo VisibleFinalState.lo \ WFinder.lo ZFinder.lo libRivetProjections_la_OBJECTS = $(am_libRivetProjections_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/Rivet/Config depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libRivetProjections_la_SOURCES) DIST_SOURCES = $(libRivetProjections_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libRivetProjections.la libRivetProjections_la_SOURCES = \ Beam.cc \ BeamThrust.cc \ ChargedFinalState.cc \ ChargedLeptons.cc \ CentralEtHCM.cc \ ClusteredPhotons.cc \ DISFinalState.cc \ DISKinematics.cc \ DISLepton.cc \ FastJets.cc \ FinalState.cc \ FoxWolframMoments.cc \ FParameter.cc \ HadronicFinalState.cc \ NonHadronicFinalState.cc \ Hemispheres.cc \ IdentifiedFinalState.cc \ InitialQuarks.cc \ InvMassFinalState.cc \ JetAlg.cc \ JetShape.cc \ LeadingParticlesFinalState.cc \ LeptonClusters.cc \ MergedFinalState.cc \ MissingMomentum.cc \ Multiplicity.cc \ NeutralFinalState.cc \ ParisiTensor.cc \ PVertex.cc \ Sphericity.cc \ Spherocity.cc \ SVertex.cc \ Thrust.cc \ TotalVisibleMomentum.cc \ TriggerCDFRun0Run1.cc \ TriggerCDFRun2.cc \ TriggerUA5.cc \ UnstableFinalState.cc \ VetoedFinalState.cc \ VisibleFinalState.cc \ WFinder.cc \ ZFinder.cc all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Projections/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Projections/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libRivetProjections.la: $(libRivetProjections_la_OBJECTS) $(libRivetProjections_la_DEPENDENCIES) $(EXTRA_libRivetProjections_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libRivetProjections_la_OBJECTS) $(libRivetProjections_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Beam.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BeamThrust.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CentralEtHCM.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChargedFinalState.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChargedLeptons.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ClusteredPhotons.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DISFinalState.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DISKinematics.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DISLepton.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FParameter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FastJets.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FinalState.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FoxWolframMoments.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HadronicFinalState.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Hemispheres.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IdentifiedFinalState.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/InitialQuarks.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/InvMassFinalState.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JetAlg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JetShape.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LeadingParticlesFinalState.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LeptonClusters.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MergedFinalState.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MissingMomentum.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Multiplicity.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NeutralFinalState.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NonHadronicFinalState.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ParisiTensor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Sphericity.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Spherocity.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Thrust.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TotalVisibleMomentum.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TriggerCDFRun0Run1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TriggerCDFRun2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TriggerUA5.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnstableFinalState.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VetoedFinalState.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VisibleFinalState.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WFinder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ZFinder.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: rivet-1.8.3/src/Projections/JetShape.cc0000644000175000017500000000705112116077757016170 0ustar sunsun// -*- C++ -*- #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/JetShape.hh" namespace Rivet { // Constructor. JetShape::JetShape(const JetAlg& jetalg, double rmin, double rmax, size_t nbins, double ptmin, double ptmax, double absrapmin, double absrapmax, RapScheme rapscheme) : _rapscheme(rapscheme) { setName("JetShape"); _binedges = linspace(nbins, rmin, rmax); _ptcuts = make_pair(ptmin, ptmax); _rapcuts = make_pair(absrapmin, absrapmax); addProjection(jetalg, "Jets"); } // Constructor. JetShape::JetShape(const JetAlg& jetalg, vector binedges, double ptmin, double ptmax, double absrapmin, double absrapmax, RapScheme rapscheme) : _binedges(binedges), _rapscheme(rapscheme) { setName("JetShape"); _ptcuts = make_pair(ptmin, ptmax); _rapcuts = make_pair(absrapmin, absrapmax); addProjection(jetalg, "Jets"); } int JetShape::compare(const Projection& p) const { const int jcmp = mkNamedPCmp(p, "Jets"); if (jcmp != EQUIVALENT) return jcmp; const JetShape& other = pcast(p); const int ptcmp = cmp(ptMin(), other.ptMin()) || cmp(ptMax(), other.ptMax()); if (ptcmp != EQUIVALENT) return ptcmp; const int rapcmp = cmp(_rapcuts.first, other._rapcuts.first) || cmp(_rapcuts.second, other._rapcuts.second); if (rapcmp != EQUIVALENT) return rapcmp; int bincmp = cmp(numBins(), other.numBins()); if (bincmp != EQUIVALENT) return bincmp; for (size_t i = 0; i < _binedges.size(); ++i) { bincmp = cmp(_binedges[i], other._binedges[i]); if (bincmp != EQUIVALENT) return bincmp; } return EQUIVALENT; } void JetShape::clear() { _diffjetshapes.clear(); } void JetShape::calc(const Jets& jets) { clear(); foreach (const Jet& j, jets) { // Apply jet cuts FourMomentum pj = j.momentum(); if (!inRange(pj.pT(), _ptcuts)) continue; /// @todo Introduce a better (i.e. more safe and general) eta/y selection mechanism: MomentumFilter if (_rapscheme == PSEUDORAPIDITY && !inRange(fabs(pj.eta()), _rapcuts)) continue; if (_rapscheme == RAPIDITY && !inRange(fabs(pj.rapidity()), _rapcuts)) continue; // Fill bins vector bins(numBins(), 0.0); foreach (const Particle& p, j.particles()) { const double dR = deltaR(pj, p.momentum(), _rapscheme); const int dRindex = index_between(dR, _binedges); if (dRindex == -1) continue; //< Out of histo range bins[dRindex] += p.momentum().pT(); } // Add bin vector for this jet to the diffjetshapes container _diffjetshapes += bins; } // Normalize to total pT foreach (vector& binsref, _diffjetshapes) { double integral = 0.0; for (size_t i = 0; i < numBins(); ++i) { integral += binsref[i]; } if (integral > 0) { for (size_t i = 0; i < numBins(); ++i) { binsref[i] /= integral; } } else { // It's just-about conceivable that a jet would have no particles in the given Delta(r) range... MSG_DEBUG("No pT contributions in jet Delta(r) range: weird!"); } } } void JetShape::project(const Event& e) { const Jets jets = applyProjection(e, "Jets").jets(_ptcuts.first, _ptcuts.second, -_rapcuts.second, _rapcuts.second, _rapscheme); calc(jets); } } rivet-1.8.3/src/Projections/ZFinder.cc0000644000175000017500000001247512116077757016034 0ustar sunsun// -*- C++ -*- #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Projections/InvMassFinalState.hh" #include "Rivet/Projections/LeptonClusters.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Cmp.hh" namespace Rivet { ZFinder::ZFinder(const FinalState& inputfs, double etaMin, double etaMax, double pTmin, PdgId pid, double minmass, double maxmass, double dRmax, bool clusterPhotons, bool trackPhotons, double masstarget) { vector > etaRanges; etaRanges += std::make_pair(etaMin, etaMax); _init(inputfs, etaRanges, pTmin, pid, minmass, maxmass, dRmax, clusterPhotons, trackPhotons, masstarget); } ZFinder::ZFinder(const FinalState& inputfs, const std::vector >& etaRanges, double pTmin, PdgId pid, double minmass, const double maxmass, double dRmax, bool clusterPhotons, bool trackPhotons, double masstarget) { _init(inputfs, etaRanges, pTmin, pid, minmass, maxmass, dRmax, clusterPhotons, trackPhotons, masstarget); } ZFinder::ZFinder(double etaMin, double etaMax, double pTmin, PdgId pid, double minmass, double maxmass, double dRmax, bool clusterPhotons, bool trackPhotons, double masstarget) { vector > etaRanges; etaRanges += std::make_pair(etaMin, etaMax); FinalState inputfs; _init(inputfs, etaRanges, pTmin, pid, minmass, maxmass, dRmax, clusterPhotons, trackPhotons, masstarget); } ZFinder::ZFinder(const std::vector >& etaRanges, double pTmin, PdgId pid, double minmass, const double maxmass, double dRmax, bool clusterPhotons, bool trackPhotons, double masstarget) { FinalState inputfs; _init(inputfs, etaRanges, pTmin, pid, minmass, maxmass, dRmax, clusterPhotons, trackPhotons, masstarget); } void ZFinder::_init(const FinalState& inputfs, const std::vector >& etaRanges, double pTmin, PdgId pid, double minmass, double maxmass, double dRmax, bool clusterPhotons, bool trackPhotons, double masstarget) { setName("ZFinder"); _minmass = minmass; _maxmass = maxmass; _masstarget = masstarget; _pid = pid; _trackPhotons = trackPhotons; IdentifiedFinalState bareleptons(inputfs); bareleptons.acceptIdPair(pid); LeptonClusters leptons(inputfs, bareleptons, dRmax, clusterPhotons, etaRanges, pTmin); addProjection(leptons, "LeptonClusters"); VetoedFinalState remainingFS; remainingFS.addVetoOnThisFinalState(*this); addProjection(remainingFS, "RFS"); } ///////////////////////////////////////////////////// const FinalState& ZFinder::remainingFinalState() const { return getProjection("RFS"); } int ZFinder::compare(const Projection& p) const { PCmp LCcmp = mkNamedPCmp(p, "LeptonClusters"); if (LCcmp != EQUIVALENT) return LCcmp; const ZFinder& other = dynamic_cast(p); return (cmp(_minmass, other._minmass) || cmp(_maxmass, other._maxmass) || cmp(_pid, other._pid) || cmp(_trackPhotons, other._trackPhotons)); } void ZFinder::project(const Event& e) { clear(); const LeptonClusters& leptons = applyProjection(e, "LeptonClusters"); InvMassFinalState imfs(std::make_pair(_pid, -_pid), _minmass, _maxmass, _masstarget); ParticleVector tmp; tmp.insert(tmp.end(), leptons.clusteredLeptons().begin(), leptons.clusteredLeptons().end()); imfs.calc(tmp); if (imfs.particlePairs().size() < 1) return; ParticlePair Zconstituents(imfs.particlePairs()[0]); Particle l1(Zconstituents.first), l2(Zconstituents.second); if (PID::threeCharge(l1)>0.0) { _constituents += l1, l2; } else { _constituents += l2, l1; } FourMomentum pZ = l1.momentum() + l2.momentum(); const int z3charge = PID::threeCharge(l1.pdgId()) + PID::threeCharge(l2.pdgId()); assert(z3charge == 0); stringstream msg; msg << "Z reconstructed from: \n" << " " << l1.momentum() << " " << l1.pdgId() << "\n" << " + " << l2.momentum() << " " << l2.pdgId(); MSG_DEBUG(msg.str()); _bosons.push_back(Particle(ZBOSON, pZ)); // Find the LeptonClusters which survived the IMFS cut such that we can // extract their original particles foreach (const Particle& p, _constituents) { foreach (const ClusteredLepton& l, leptons.clusteredLeptons()) { if (p.pdgId()==l.pdgId() && p.momentum()==l.momentum()) { _theParticles.push_back(l.constituentLepton()); if (_trackPhotons) { _theParticles.insert(_theParticles.end(), l.constituentPhotons().begin(), l.constituentPhotons().end()); } } } } } } rivet-1.8.3/src/Projections/ParisiTensor.cc0000644000175000017500000000142312116077757017104 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Projections/ParisiTensor.hh" #include "Rivet/Cmp.hh" namespace Rivet { int ParisiTensor::compare(const Projection& p) const { return mkNamedPCmp(p, "Sphericity"); } void ParisiTensor::clear() { _lambda[0] = 0; _lambda[1] = 0; _lambda[2] = 0; _C = 0; _D = 0; } void ParisiTensor::project(const Event & e) { clear(); // Apply sphericity projection to event Sphericity sph = applyProjection(e, "Sphericity"); // Set parameters _lambda[0] = sph.lambda1(); _lambda[1] = sph.lambda2(); _lambda[2] = sph.lambda3(); _C = 3 * ( lambda1()*lambda2() + lambda1()*lambda3() + lambda2()*lambda3() ); _D = 27 * lambda1() * lambda2() * lambda3(); } } rivet-1.8.3/src/Projections/Makefile.am0000644000175000017500000000167712116077757016222 0ustar sunsunnoinst_LTLIBRARIES = libRivetProjections.la libRivetProjections_la_SOURCES = \ Beam.cc \ BeamThrust.cc \ ChargedFinalState.cc \ ChargedLeptons.cc \ CentralEtHCM.cc \ ClusteredPhotons.cc \ DISFinalState.cc \ DISKinematics.cc \ DISLepton.cc \ FastJets.cc \ FinalState.cc \ FoxWolframMoments.cc \ FParameter.cc \ HadronicFinalState.cc \ NonHadronicFinalState.cc \ Hemispheres.cc \ IdentifiedFinalState.cc \ InitialQuarks.cc \ InvMassFinalState.cc \ JetAlg.cc \ JetShape.cc \ LeadingParticlesFinalState.cc \ LeptonClusters.cc \ MergedFinalState.cc \ MissingMomentum.cc \ Multiplicity.cc \ NeutralFinalState.cc \ ParisiTensor.cc \ PVertex.cc \ Sphericity.cc \ Spherocity.cc \ SVertex.cc \ Thrust.cc \ TotalVisibleMomentum.cc \ TriggerCDFRun0Run1.cc \ TriggerCDFRun2.cc \ TriggerUA5.cc \ UnstableFinalState.cc \ VetoedFinalState.cc \ VisibleFinalState.cc \ WFinder.cc \ ZFinder.cc rivet-1.8.3/src/Projections/DISLepton.cc0000644000175000017500000000256712116077757016275 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Projections/DISLepton.hh" #include "Rivet/Cmp.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { int DISLepton::compare(const Projection& p) const { const DISLepton& other = pcast(p); return mkNamedPCmp(other, "Beam") || mkNamedPCmp(other, "FS"); } void DISLepton::project(const Event& e) { const ParticlePair& inc = applyProjection(e, "Beam").beams(); Particle inLepton; bool firstIsLepton = PID::isLepton(inc.first.pdgId()); bool secondIsLepton = PID::isLepton(inc.second.pdgId()); if(firstIsLepton && !secondIsLepton){ _incoming = inc.first; }else if(!firstIsLepton && secondIsLepton){ _incoming = inc.second; }else{ //eek! throw Error("DISLepton projector could not find the correct beam. "); } _sign = (_incoming.momentum().pz() > 0.0)? 1.0: -1.0; long id = _incoming.pdgId(); double pzMax = -1000000000.0; const FinalState& fs = applyProjection(e, "FS"); foreach (const Particle& p, fs.particles()) { double pz = _sign * p.momentum().pz(); if(p.pdgId() == id && pz > pzMax){ _outgoing = p; pzMax = pz; } } if (!_outgoing.hasGenParticle()) { throw Error("DISLepton projector could not find the scattered lepton."); } } } rivet-1.8.3/src/Projections/FoxWolframMoments.cc0000644000175000017500000000437212116077757020117 0ustar sunsun// -*- C++ -*- #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FoxWolframMoments.hh" #include "Rivet/Cmp.hh" namespace Rivet { int FoxWolframMoments::compare(const Projection& p) const { return mkNamedPCmp(p, "FS"); } void FoxWolframMoments::project(const Event& e) { // Project into final state and get total visible momentum const FinalState& fs = applyProjection(e, "VFS"); // remember: # pairs = N! / ( r! * (N-r)! ) // N.B.: Autocorrelations are included! Treat them separately as diagonal elements. // see: http://cepa.fnal.gov/psm/simulation/mcgen/lund/pythia_manual/pythia6.3/pythia6301/node215.html double sumEnergy = 0.0; for (ParticleVector::const_iterator pi = fs.particles().begin(); pi != fs.particles().end(); ++pi) { sumEnergy += pi->momentum().E(); const FourMomentum pi_4 = pi->momentum(); for (ParticleVector::const_iterator pj = pi+1; pj != fs.particles().end(); ++pj) { const FourMomentum pj_4 = pj->momentum(); // Calculate x_ij = cos(theta_ij) double x_ij = 1.0; if ( pi != pj ) { double denom = pi_4.vector3().mod() * pj_4.vector3().mod(); x_ij = pi_4.vector3().dot( pj_4.vector3() ) / denom; } //const double core = fabs( pi_4 * pj_4 ); // / sumet2 ; const double core = pi_4.vector3().mod() * pi_4.vector3().mod(); for (int order = 0; order < MAXMOMENT; ++order) { // enter a factor 2.0 because ij = ji. Use symmetry to speed up! _fwmoments[order] += 2.0 * core * gsl_sf_legendre_Pl( order, x_ij ) ; } } // end loop over p_j // Now add autocorrelations // Obviously cos(theta_ij) = 1.0 // Note that P_l(1) == 1 for each l for (int order = 0; order < MAXMOMENT; ++order) { _fwmoments[order] += fabs( pi_4 * pi_4 ); } } // end loop over p_i MSG_DEBUG("sumEnergy = " << sumEnergy); for (int order = 0; order < MAXMOMENT; ++order) { _fwmoments[order] /= (sumEnergy*sumEnergy); } // Normalize to H0 for (int order = 1; order < MAXMOMENT; ++order) { _fwmoments[order] /= _fwmoments[0]; } } } rivet-1.8.3/src/Projections/CentralEtHCM.cc0000644000175000017500000000070512116077757016675 0ustar sunsun// -*- C++ -*- #include "Rivet/Rivet.hh" #include "Rivet/Projections/CentralEtHCM.hh" #include "Rivet/Cmp.hh" namespace Rivet { void CentralEtHCM::project(const Event& e) { const DISFinalState& fs = applyProjection(e, "FS"); _sumet = 0.0; foreach (const Particle& p, fs.particles()) { /// @todo Generalise rapidity cut value if (fabs(p.momentum().rapidity()) < 0.5) _sumet += p.momentum().Et(); } } } rivet-1.8.3/src/Projections/UnstableFinalState.cc0000644000175000017500000000563512123033122020173 0ustar sunsun// -*- C++ -*- #include "Rivet/Projections/UnstableFinalState.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Cmp.hh" #define IS_PARTON_PDGID(id) ( abs(id) <= 100 && abs(id) != 22 && (abs(id) < 11 || abs(id) > 18) ) namespace Rivet { void UnstableFinalState::project(const Event& e) { _theParticles.clear(); // @todo We should really implement the FinalState algorithm here instead double etamin, etamax; if ( _etaRanges.empty() ) { etamin = -MAXRAPIDITY; etamax = MAXRAPIDITY; } else { // With our current constructor choice, we can only ever have one entry assert( _etaRanges.size() == 1 ); etamin = _etaRanges[0].first; etamax = _etaRanges[0].second; } vector vetoIds; vetoIds += 22; // status 2 photons don't count! vetoIds += 110; vetoIds += 990; vetoIds += 9990; // Reggeons //vetoIds += 9902210; // something weird from PYTHIA6 foreach (GenParticle* p, Rivet::particles(e.genEvent())) { const int st = p->status(); bool passed = (st == 1 || (st == 2 && find(vetoIds.begin(), vetoIds.end(), abs(p->pdg_id())) == vetoIds.end())) && !IS_PARTON_PDGID(p->pdg_id()) && //< Always veto partons? !isZero(p->momentum().perp()) && p->momentum().perp() >= _ptmin && inRange(p->momentum().eta(), etamin, etamax); // Avoid double counting by re-marking as unpassed if particle ID == parent ID const GenVertex* pv = p->production_vertex(); const GenVertex* dv = p->end_vertex(); if (passed && pv) { for (GenVertex::particles_in_const_iterator pp = pv->particles_in_const_begin() ; pp != pv->particles_in_const_end() ; ++pp) { if ( p->pdg_id() == (*pp)->pdg_id() && (*pp)->status() == 2 ) { passed = false; break; } } } // Add to output particles collection if (passed) { _theParticles.push_back(Particle(*p)); } // Log parents and children if (getLog().isActive(Log::TRACE)) { MSG_TRACE("ID = " << p->pdg_id() << ", status = " << st << ", pT = " << p->momentum().perp() << ", eta = " << p->momentum().eta() << ": result = " << std::boolalpha << passed); if (pv) { for (GenVertex::particles_in_const_iterator pp = pv->particles_in_const_begin() ; pp != pv->particles_in_const_end() ; ++pp) { MSG_TRACE(" parent ID = " << (*pp)->pdg_id()); } } if (dv) { for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin() ; pp != dv->particles_out_const_end() ; ++pp) { MSG_TRACE(" child ID = " << (*pp)->pdg_id()); } } } } MSG_DEBUG("Number of unstable final-state particles = " << _theParticles.size()); } } rivet-1.8.3/src/Analyses/0000755000175000017500000000000012131473207013416 5ustar sunsunrivet-1.8.3/src/Analyses/CDF_2009_S8436959.cc0000644000175000017500000000410612116077757016067 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" namespace Rivet { /// @brief CDF inclusive isolated prompt photon cross-section class CDF_2009_S8436959 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor CDF_2009_S8436959() : Analysis("CDF_2009_S8436959") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { FinalState fs; addProjection(fs, "FS"); LeadingParticlesFinalState photonfs(FinalState(-1.0, 1.0, 30.0*GeV)); photonfs.addParticleId(PHOTON); addProjection(photonfs, "LeadingPhoton"); _h_Et_photon = bookHistogram1D(1, 1, 1); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); ParticleVector fs = applyProjection(event, "FS").particles(); ParticleVector photons = applyProjection(event, "LeadingPhoton").particles(); if (photons.size()!=1) { vetoEvent; } FourMomentum leadingPhoton = photons[0].momentum(); double eta_P = leadingPhoton.eta(); double phi_P = leadingPhoton.phi(); FourMomentum mom_in_cone; foreach (const Particle& p, fs) { if (deltaR(eta_P, phi_P, p.momentum().eta(), p.momentum().phi()) < 0.4) { mom_in_cone += p.momentum(); } } if (mom_in_cone.Et()-leadingPhoton.Et() > 2.0*GeV) { vetoEvent; } _h_Et_photon->fill(leadingPhoton.Et(), weight); } /// Normalise histograms etc., after the run void finalize() { scale(_h_Et_photon, crossSection()/sumOfWeights()/2.0); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_Et_photon; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2009_S8436959); } rivet-1.8.3/src/Analyses/MC_JETS.cc0000644000175000017500000000144712116077757015074 0ustar sunsun// -*- C++ -*- #include "Rivet/Analyses/MC_JetAnalysis.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief MC validation analysis for jet events class MC_JETS : public MC_JetAnalysis { public: MC_JETS() : MC_JetAnalysis("MC_JETS", 4, "Jets") { } public: void init() { FinalState fs; FastJets jetpro(fs, FastJets::ANTIKT, 0.4); addProjection(jetpro, "Jets"); MC_JetAnalysis::init(); } void analyze(const Event& event) { MC_JetAnalysis::analyze(event); } void finalize() { MC_JetAnalysis::finalize(); } }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_JETS); } rivet-1.8.3/src/Analyses/DELPHI_2000_S4328825.cc0000644000175000017500000001105612116077757016415 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/Sphericity.hh" #include "Rivet/Projections/Thrust.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/ParisiTensor.hh" #include "Rivet/Projections/Hemispheres.hh" #include "Rivet/Projections/InitialQuarks.hh" #include namespace Rivet { /// @brief OPAL multiplicities at various energies /// @author Peter Richardson class DELPHI_2000_S4328825 : public Analysis { public: /// Constructor DELPHI_2000_S4328825() : Analysis("DELPHI_2000_S4328825"), _weightedTotalChargedPartNumLight(0.), _weightedTotalChargedPartNumCharm(0.), _weightedTotalChargedPartNumBottom(0.), _weightLight(0.),_weightCharm(0.),_weightBottom(0.) {} /// @name Analysis methods //@{ void init() { // Projections addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "CFS"); addProjection(InitialQuarks(), "IQF"); } void analyze(const Event& event) { const double weight = event.weight(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. const FinalState& cfs = applyProjection(event, "CFS"); if (cfs.size() < 2) vetoEvent; int flavour = 0; const InitialQuarks& iqf = applyProjection(event, "IQF"); // If we only have two quarks (qqbar), just take the flavour. // If we have more than two quarks, look for the highest energetic q-qbar pair. if (iqf.particles().size() == 2) { flavour = abs( iqf.particles().front().pdgId() ); } else { map quarkmap; foreach (const Particle& p, iqf.particles()) { if (quarkmap[p.pdgId()] < p.momentum().E()) { quarkmap[p.pdgId()] = p.momentum().E(); } } double maxenergy = 0.; for (int i = 1; i <= 5; ++i) { if (quarkmap[i]+quarkmap[-i] > maxenergy) { flavour = i; } } } const size_t numParticles = cfs.particles().size(); switch (flavour) { case 1: case 2: case 3: _weightLight += weight; _weightedTotalChargedPartNumLight += numParticles * weight; break; case 4: _weightCharm += weight; _weightedTotalChargedPartNumCharm += numParticles * weight; break; case 5: _weightBottom += weight; _weightedTotalChargedPartNumBottom += numParticles * weight; break; } } void finalize() { // bottom const double avgNumPartsBottom = _weightedTotalChargedPartNumBottom / _weightBottom; AIDA::IDataPointSet * multB = bookDataPointSet(1, 1, 1); for (int i = 0; i < multB->size(); ++i) { if (fuzzyEquals(sqrtS(), multB->point(i)->coordinate(0)->value(), 0.01)) { multB->point(i)->coordinate(1)->setValue(avgNumPartsBottom); } } // charm const double avgNumPartsCharm = _weightedTotalChargedPartNumCharm / _weightCharm; AIDA::IDataPointSet * multC = bookDataPointSet(1, 1, 2); for (int i = 0; i < multC->size(); ++i) { if (fuzzyEquals(sqrtS(), multC->point(i)->coordinate(0)->value(), 0.01)) { multC->point(i)->coordinate(1)->setValue(avgNumPartsCharm); } } // light const double avgNumPartsLight = _weightedTotalChargedPartNumLight / _weightLight; AIDA::IDataPointSet * multL = bookDataPointSet(1, 1, 3); for (int i = 0; i < multL->size(); ++i) { if (fuzzyEquals(sqrtS(), multL->point(i)->coordinate(0)->value(), 0.01)) { multL->point(i)->coordinate(1)->setValue(avgNumPartsLight); } } // bottom-light AIDA::IDataPointSet * multD = bookDataPointSet(1, 1, 4); for (int i = 0; i < multD->size(); ++i) { if (fuzzyEquals(sqrtS(), multD->point(i)->coordinate(0)->value(), 0.01)) { multD->point(i)->coordinate(1)->setValue(avgNumPartsBottom-avgNumPartsLight); } } } //@} private: /// @name Multiplicities //@{ double _weightedTotalChargedPartNumLight; double _weightedTotalChargedPartNumCharm; double _weightedTotalChargedPartNumBottom; //@} /// @name Weights //@{ double _weightLight; double _weightCharm; double _weightBottom; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(DELPHI_2000_S4328825); } rivet-1.8.3/src/Analyses/LHCF_2012_I1115479.cc0000644000175000017500000000321612116077757016150 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/UnstableFinalState.hh" #include "Rivet/Tools/BinnedHistogram.hh" namespace Rivet { class LHCF_2012_I1115479 : public Analysis { public: LHCF_2012_I1115479() : Analysis("LHCF_2012_I1115479") { } public: void init() { addProjection(UnstableFinalState(),"UFS"); _binnedHistos_y_pT.addHistogram( 8.9, 9.0, bookHistogram1D(1, 1, 1)); _binnedHistos_y_pT.addHistogram( 9.0, 9.2, bookHistogram1D(2, 1, 1)); _binnedHistos_y_pT.addHistogram( 9.2, 9.4, bookHistogram1D(3, 1, 1)); _binnedHistos_y_pT.addHistogram( 9.4, 9.6, bookHistogram1D(4, 1, 1)); _binnedHistos_y_pT.addHistogram( 9.6, 10.0, bookHistogram1D(5, 1, 1)); _binnedHistos_y_pT.addHistogram(10.0, 11.0, bookHistogram1D(6, 1, 1)); } void analyze(const Event& event) { const UnstableFinalState& ufs = applyProjection(event, "UFS"); const double weight = event.weight(); const double dphi = TWOPI; foreach (const Particle& p, ufs.particles()) { if (p.pdgId() == 111) { double pT = p.momentum().pT(); double y = p.momentum().rapidity(); if (pT > 0.6*GeV) continue; const double scaled_weight = weight/(dphi*pT/GeV); _binnedHistos_y_pT.fill(y, pT/GeV, scaled_weight); } } } void finalize() { _binnedHistos_y_pT.scale( 1./sumOfWeights() , this); } private: BinnedHistogram _binnedHistos_y_pT; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(LHCF_2012_I1115479); } rivet-1.8.3/src/Analyses/BABAR_2005_S6181155.cc0000644000175000017500000001040612116077757016255 0ustar sunsun// -*- C++ -*- #include #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief BABAR Xi_c baryons from fragmentation /// @author Peter Richardson class BABAR_2005_S6181155 : public Analysis { public: BABAR_2005_S6181155() : Analysis("BABAR_2005_S6181155") { } void analyze(const Event& e) { const double weight = e.weight(); // Loop through unstable FS particles and look for charmed mesons/baryons const UnstableFinalState& ufs = applyProjection(e, "UFS"); const Beam beamproj = applyProjection(e, "Beams"); const ParticlePair& beams = beamproj.beams(); FourMomentum mom_tot = beams.first.momentum() + beams.second.momentum(); LorentzTransform cms_boost(-mom_tot.boostVector()); const double s = sqr(beamproj.sqrtS()); const bool onresonance = fuzzyEquals(beamproj.sqrtS(), 10.58, 2E-3); foreach (const Particle& p, ufs.particles()) { // 3-momentum in CMS frame const double mom = cms_boost.transform(p.momentum()).vector3().mod(); // only looking at Xi_c^0 if(abs(p.pdgId()) != 4132 ) continue; if (onresonance) { _histOnResonanceA_norm->fill(mom,weight); _histOnResonanceB_norm->fill(mom,weight); } else { _histOffResonance_norm->fill(mom,s/sqr(10.58)*weight); } MSG_DEBUG("mom = " << mom); // off-resonance cross section if(checkDecay(p.genParticle())) { if (onresonance) { _histOnResonanceA->fill(mom,weight); _histOnResonanceB->fill(mom,weight); } else { _histOffResonance->fill(mom,s/sqr(10.58)*weight); _sigma->fill(10.6,weight); } } } } // analyze void finalize() { scale(_histOnResonanceA, crossSection()/femtobarn/sumOfWeights()); scale(_histOnResonanceB, crossSection()/femtobarn/sumOfWeights()); scale(_histOffResonance, crossSection()/femtobarn/sumOfWeights()); scale(_sigma , crossSection()/femtobarn/sumOfWeights()); normalize(_histOnResonanceA_norm); normalize(_histOnResonanceB_norm); normalize(_histOffResonance_norm); } // finalize void init() { addProjection(Beam(), "Beams"); addProjection(UnstableFinalState(), "UFS"); _histOnResonanceA = bookHistogram1D(1,1,1); _histOnResonanceB = bookHistogram1D(2,1,1); _histOffResonance = bookHistogram1D(2,1,2); _sigma = bookHistogram1D(3,1,1); _histOnResonanceA_norm = bookHistogram1D(4,1,1); _histOnResonanceB_norm = bookHistogram1D(5,1,1); _histOffResonance_norm = bookHistogram1D(5,1,2); } // init private: //@{ /// Histograms AIDA::IHistogram1D *_histOnResonanceA; AIDA::IHistogram1D *_histOnResonanceB; AIDA::IHistogram1D *_histOffResonance; AIDA::IHistogram1D *_sigma ; AIDA::IHistogram1D *_histOnResonanceA_norm; AIDA::IHistogram1D *_histOnResonanceB_norm; AIDA::IHistogram1D *_histOffResonance_norm; //@} bool checkDecay(const GenParticle & p) { unsigned int nstable=0,npip=0,npim=0; unsigned int nXim=0,nXip=0; findDecayProducts(p,nstable,npip,npim, nXip,nXim); int id = p.pdg_id(); // Xi_c if(id==4132) { if(nstable==2&&nXim==1&&npip==1) return true; } else if(id==-4132) { if(nstable==2&&nXip==1&&npim==1) return true; } return false; } void findDecayProducts(const GenParticle & p, unsigned int & nstable, unsigned int & npip, unsigned int & npim, unsigned int & nXip, unsigned int & nXim) { const GenVertex* dv = p.end_vertex(); for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin(); pp != dv->particles_out_const_end(); ++pp) { int id = (*pp)->pdg_id(); if(id==3312) { ++nXim; ++nstable; } else if(id==-3312) { ++nXip; ++nstable; } else if(id==111||id==221) ++nstable; else if((*pp)->end_vertex()) findDecayProducts(**pp,nstable,npip,npim,nXip,nXim); else { if(id!=22) ++nstable; if (id == 211) ++npip; else if(id == -211) ++npim; } } } }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(BABAR_2005_S6181155); } rivet-1.8.3/src/Analyses/CDF_1998_S3618439.cc0000644000175000017500000000337212116077757016101 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief CDF diff cross-section in events with large missing energy class CDF_1998_S3618439 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor CDF_1998_S3618439() : Analysis("CDF_1998_S3618439") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { FinalState fs(-4.2, 4.2); addProjection(FastJets(fs, FastJets::CDFJETCLU, 0.7), "Jets"); _h_sumET_20 = bookHistogram1D(1, 1, 1); _h_sumET_100 = bookHistogram1D(1, 1, 2); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); Jets jets = applyProjection(event, "Jets").jetsByEt(20.0*GeV); double sumET_20(0.0), sumET_100(0.0); foreach (const Jet& jet, jets) { double ET = jet.momentum().Et()/GeV; sumET_20 += ET; if (ET>100.0) sumET_100 += ET; } if (sumET_20>320.0) _h_sumET_20->fill(sumET_20, weight); if (sumET_100>320.0) _h_sumET_100->fill(sumET_100, weight); } /// Normalise histograms etc., after the run void finalize() { scale(_h_sumET_20, crossSection()/picobarn/sumOfWeights()); scale(_h_sumET_100, crossSection()/picobarn/sumOfWeights()); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_sumET_20, *_h_sumET_100; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_1998_S3618439); } rivet-1.8.3/src/Analyses/MC_QCD_PARTONS.cc0000644000175000017500000000232712116077757016142 0ustar sunsun// -*- C++ -*- #include "Rivet/Analyses/MC_JetSplittings.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// Generic analysis looking at kt splitting scales of partons class MC_QCD_PARTONS : public MC_JetSplittings { public: /// Constructor MC_QCD_PARTONS() : MC_JetSplittings("MC_QCD_PARTONS", 4, "Jets") { } public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // Projections IdentifiedFinalState partonfs; for (int i=1; i<6; ++i) partonfs.acceptIdPair(i); partonfs.acceptId(GLUON); addProjection(FastJets(partonfs, FastJets::KT, 0.6), "Jets"); MC_JetSplittings::init(); } /// Perform the per-event analysis void analyze(const Event& event) { MC_JetSplittings::analyze(event); } /// Finalize void finalize() { MC_JetSplittings::finalize(); } //@} private: /// @name Histograms //@{ //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_QCD_PARTONS); } rivet-1.8.3/src/Analyses/CLEO_2004_S5809304.cc0000644000175000017500000001267012116077757016176 0ustar sunsun// -*- C++ -*- #include #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief CLEO charmed mesons and baryons from fragmentation /// @author Peter Richardson class CLEO_2004_S5809304 : public Analysis { public: CLEO_2004_S5809304() : Analysis("CLEO_2004_S5809304") { } void analyze(const Event& e) { const double weight = e.weight(); // Loop through unstable FS particles and look for charmed mesons/baryons const UnstableFinalState& ufs = applyProjection(e, "UFS"); const Beam beamproj = applyProjection(e, "Beams"); const ParticlePair& beams = beamproj.beams(); FourMomentum mom_tot = beams.first.momentum() + beams.second.momentum(); LorentzTransform cms_boost; if(mom_tot.vector3().mod()>0.001) cms_boost = LorentzTransform(-mom_tot.boostVector()); const double s = sqr(beamproj.sqrtS()); // Particle masses from PDGlive (accessed online 16. Nov. 2009). foreach (const Particle& p, ufs.particles()) { double xp = 0.0; double mH2 = 0.0; // 3-momentum in CMS frame const double mom = cms_boost.transform(p.momentum()).vector3().mod(); const int PdgId = abs(p.pdgId()); MSG_DEBUG("pdgID = " << PdgId << " mom = " << mom); switch (PdgId) { case 421: MSG_DEBUG("D0 found"); mH2 = 3.47763; // 1.86484^2 xp = mom/sqrt(s/4.0 - mH2); _sigmaD0A->fill(10.6,weight); _sigmaD0B->fill(10.6,weight); _histXpD0A->fill(xp, weight); _histXpD0B->fill(xp, weight); _histXpTotal->fill(xp, weight); break; case 411: MSG_DEBUG("D+ found"); mH2 = 3.49547; // 1.86962^2 xp = mom/sqrt(s/4.0 - mH2); _sigmaDPlus->fill(10.6,weight); _histXpDplus->fill(xp, weight); _histXpTotal->fill(xp, weight); break; case 413: MSG_DEBUG("D*+ found"); mH2 = 4.04119; // 2.01027^2 xp = mom/sqrt(s/4.0 - mH2); _sigmaDStarPlusA->fill(10.6,weight); _sigmaDStarPlusB->fill(10.6,weight); _histXpDStarPlusA->fill(xp, weight); _histXpDStarPlusB->fill(xp, weight); _histXpTotal->fill(xp, weight); break; case 423: MSG_DEBUG("D*0 found"); mH2 = 4.02793; // 2.00697**2 xp = mom/sqrt(s/4.0 - mH2); _sigmaDStar0A->fill(10.6,weight); _sigmaDStar0B->fill(10.6,weight); _histXpDStar0A->fill(xp, weight); _histXpDStar0B->fill(xp, weight); _histXpTotal->fill(xp, weight); break; } } } // analyze void finalize() { scale(_sigmaDPlus , crossSection()/picobarn/sumOfWeights()); scale(_sigmaD0A , crossSection()/picobarn/sumOfWeights()); scale(_sigmaD0B , crossSection()/picobarn/sumOfWeights()); scale(_sigmaDStarPlusA, crossSection()/picobarn/sumOfWeights()); scale(_sigmaDStarPlusB, crossSection()/picobarn/sumOfWeights()); scale(_sigmaDStar0A , crossSection()/picobarn/sumOfWeights()); scale(_sigmaDStar0B , crossSection()/picobarn/sumOfWeights()); scale(_histXpDplus , crossSection()/picobarn/sumOfWeights()); scale(_histXpD0A , crossSection()/picobarn/sumOfWeights()); scale(_histXpD0B , crossSection()/picobarn/sumOfWeights()); scale(_histXpDStarPlusA, crossSection()/picobarn/sumOfWeights()); scale(_histXpDStarPlusB, crossSection()/picobarn/sumOfWeights()); scale(_histXpDStar0A , crossSection()/picobarn/sumOfWeights()); scale(_histXpDStar0B , crossSection()/picobarn/sumOfWeights()); scale(_histXpTotal , crossSection()/picobarn/sumOfWeights()/4.); } // finalize void init() { addProjection(Beam(), "Beams"); addProjection(UnstableFinalState(), "UFS"); // continuum cross sections _sigmaDPlus = bookHistogram1D(1,1,1); _sigmaD0A = bookHistogram1D(1,1,2); _sigmaD0B = bookHistogram1D(1,1,3); _sigmaDStarPlusA = bookHistogram1D(1,1,4); _sigmaDStarPlusB = bookHistogram1D(1,1,5); _sigmaDStar0A = bookHistogram1D(1,1,6); _sigmaDStar0B = bookHistogram1D(1,1,7); // histograms for continuum data _histXpDplus = bookHistogram1D(2, 1, 1); _histXpD0A = bookHistogram1D(3, 1, 1); _histXpD0B = bookHistogram1D(4, 1, 1); _histXpDStarPlusA = bookHistogram1D(5, 1, 1); _histXpDStarPlusB = bookHistogram1D(6, 1, 1); _histXpDStar0A = bookHistogram1D(7, 1, 1); _histXpDStar0B = bookHistogram1D(8, 1, 1); _histXpTotal = bookHistogram1D(9, 1, 1); } // init private: //@{ // Histograms for the continuum cross sections AIDA::IHistogram1D* _sigmaDPlus ; AIDA::IHistogram1D* _sigmaD0A ; AIDA::IHistogram1D* _sigmaD0B ; AIDA::IHistogram1D* _sigmaDStarPlusA; AIDA::IHistogram1D* _sigmaDStarPlusB; AIDA::IHistogram1D* _sigmaDStar0A ; AIDA::IHistogram1D* _sigmaDStar0B ; // histograms for continuum data AIDA::IHistogram1D* _histXpDplus ; AIDA::IHistogram1D* _histXpD0A ; AIDA::IHistogram1D* _histXpD0B ; AIDA::IHistogram1D* _histXpDStarPlusA; AIDA::IHistogram1D* _histXpDStarPlusB; AIDA::IHistogram1D* _histXpDStar0A ; AIDA::IHistogram1D* _histXpDStar0B ; AIDA::IHistogram1D* _histXpTotal ; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CLEO_2004_S5809304); } rivet-1.8.3/src/Analyses/BABAR_2007_S6895344.cc0000644000175000017500000000463612116077757016303 0ustar sunsun// -*- C++ -*- #include #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief BABAR Lambda_c from fragmentation /// @author Peter Richardson class BABAR_2007_S6895344 : public Analysis { public: BABAR_2007_S6895344() : Analysis("BABAR_2007_S6895344") { } void analyze(const Event& e) { const double weight = e.weight(); // Loop through unstable FS particles and look for charmed mesons/baryons const UnstableFinalState& ufs = applyProjection(e, "UFS"); const Beam beamproj = applyProjection(e, "Beams"); const ParticlePair& beams = beamproj.beams(); FourMomentum mom_tot = beams.first.momentum() + beams.second.momentum(); LorentzTransform cms_boost(-mom_tot.boostVector()); const double s = sqr(beamproj.sqrtS()); const bool onresonance = fuzzyEquals(beamproj.sqrtS(), 10.58, 2E-3); // Particle masses from PDGlive (accessed online 16. Nov. 2009). foreach (const Particle& p, ufs.particles()) { // only looking at Lambda_c if(abs(p.pdgId())!=4122) continue; MSG_DEBUG("Lambda_c found"); double mH2 = 5.22780; // 2.28646^2 const double mom = cms_boost.transform(p.momentum()).vector3().mod(); double xp = mom/sqrt(s/4.0 - mH2); if(onresonance) { _histOn ->fill(xp,weight); _sigmaOn ->fill(10.58,weight); } else { _histOff ->fill(xp,weight); _sigmaOff->fill(10.54,weight); } } } // analyze void finalize() { scale(_sigmaOn , 1./sumOfWeights()); scale(_sigmaOff, 1./sumOfWeights()); scale(_histOn , 1./sumOfWeights()); scale(_histOff , 1./sumOfWeights()); } // finalize void init() { addProjection(Beam(), "Beams"); addProjection(UnstableFinalState(), "UFS"); _histOff = bookHistogram1D(1,1,1); _sigmaOff = bookHistogram1D(2,1,1); _histOn = bookHistogram1D(3,1,1); _sigmaOn = bookHistogram1D(4,1,1); } // init private: //@{ // Histograms for the continuum cross sections AIDA::IHistogram1D* _sigmaOn ; AIDA::IHistogram1D* _sigmaOff; AIDA::IHistogram1D* _histOn ; AIDA::IHistogram1D* _histOff ; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(BABAR_2007_S6895344); } rivet-1.8.3/src/Analyses/CMS_2012_I1193338.cc0000644000175000017500000000446312116077757016063 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { class CMS_2012_I1193338 : public Analysis { public: CMS_2012_I1193338() : Analysis("CMS_2012_I1193338") { } public: void init() { addProjection(ChargedFinalState(-2.4, 2.4, 0.2*GeV), "CFS"); addProjection(FinalState(), "FS"); _h_sigma = bookHistogram1D(1, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); const ChargedFinalState& cfs = applyProjection(event, "CFS"); if (cfs.size() > 1) {_h_sigma->fill(1.5, weight);} if (cfs.size() > 2) {_h_sigma->fill(2.5, weight);} if (cfs.size() > 3) {_h_sigma->fill(3.5, weight);} const FinalState& fs = applyProjection(event, "FS"); if (fs.size() < 2) vetoEvent; // need at least two particles to calculate gaps double gapcenter = 0.; double LRG = 0.; double etapre = 0.; bool first = true; foreach(const Particle& p, fs.particlesByEta()) { // sorted from minus to plus if (first) { // First particle first = false; etapre = p.momentum().eta(); } else { double gap = fabs(p.momentum().eta()-etapre); if (gap > LRG) { LRG = gap; // largest gap gapcenter = (p.momentum().eta()+etapre)/2.; // find the center of the gap to separate the X and Y systems. } etapre = p.momentum().eta(); } } FourMomentum mxFourVector, myFourVector; foreach(const Particle& p, fs.particlesByEta()) { if (p.momentum().eta() > gapcenter) { mxFourVector += p.momentum(); } else { myFourVector += p.momentum(); } } const double M2 = max(mxFourVector.mass2(), myFourVector.mass2()); const double xi = M2/sqr(sqrtS()); // sqrt(s)=7000 GeV, note that units cancel if (xi < 5e-6) vetoEvent; _h_sigma->fill(0.5, weight); } void finalize() { scale(_h_sigma, crossSection()/millibarn/sumOfWeights()); } private: AIDA::IHistogram1D* _h_sigma; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2012_I1193338); } rivet-1.8.3/src/Analyses/ATLAS_2012_CONF_2012_104.cc0000644000175000017500000001601212116077757017107 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { class ATLAS_2012_CONF_2012_104 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_CONF_2012_104() : Analysis("ATLAS_2012_CONF_2012_104") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialize projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 10.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // Jet finder VetoedFinalState vfs; vfs.addVetoPairId(MUON); addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // all tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0,0.5*GeV),"cfs"); // for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); // Book histograms _count_e = bookHistogram1D("count_e" , 1, 0., 1.); _count_mu = bookHistogram1D("count_mu", 1, 0., 1.); _hist_eTmiss_e = bookHistogram1D("hist_eTmiss_e" , 25, 0., 1000.); _hist_eTmiss_mu = bookHistogram1D("hist_eTmiss_mu" , 25, 0., 1000.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // get the candiate jets Jets cand_jets; foreach ( const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 2.8 ) { cand_jets.push_back(jet); } } // get the candidate "medium" leptons without isolation ParticleVector cand_e; foreach( const Particle & e, applyProjection(event, "elecs").particlesByPt()) { // remove any leptons within 0.4 of any candidate jets bool e_near_jet = false; foreach ( const Jet& jet, cand_jets ) { double dR = deltaR(e.momentum(),jet.momentum()); if ( dR < 0.4 && dR > 0.2 ) { e_near_jet = true; break; } } if ( ! e_near_jet ) cand_e.push_back(e); } ParticleVector cand_mu; foreach( const Particle & mu, applyProjection(event, "muons").particlesByPt()) { // remove any leptons within 0.4 of any candidate jets bool mu_near_jet = false; foreach ( const Jet& jet, cand_jets ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) { mu_near_jet = true; break; } } if ( ! mu_near_jet ) cand_mu.push_back(mu); } // apply the isolation ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); // pTcone around muon track (hard) ParticleVector recon_mu; foreach ( const Particle & mu, cand_mu ) { double pTinCone = -mu.momentum().pT(); if(-pTinCone<25.) continue; foreach ( const Particle & track, chg_tracks ) { if ( deltaR(mu.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 1.8*GeV ) recon_mu.push_back(mu); } // pTcone around electron track (hard) ParticleVector recon_e; foreach ( const Particle & e, cand_e ) { double pTinCone = -e.momentum().pT(); if(-pTinCone<25.) continue; foreach ( const Particle & track, chg_tracks ) { if ( deltaR(e.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 0.1 * e.momentum().pT() ) recon_e.push_back(e); } // discard jets that overlap with electrons Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { if(fabs(jet.momentum().eta())>2.5|| jet.momentum().perp()<25.) continue; bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) recon_jets.push_back( jet ); } // pTmiss FourMomentum pTmiss; foreach ( const Particle & p, applyProjection(event, "vfs").particles() ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // at least 4 jets with pT>80. if(recon_jets.size()<4 || recon_jets[3].momentum().perp()<80.) vetoEvent; // only 1 signal lepton if( recon_e.size() + recon_mu.size() != 1 ) vetoEvent; if( cand_e .size() + cand_mu .size() != 1 ) vetoEvent; // start of meff calculation double HT=0.; foreach( const Jet & jet, recon_jets) { double pT = jet.momentum().perp(); if(pT>40.) HT += pT; } // get the lepton Particle lepton = recon_e.empty() ? recon_mu[0] : recon_e[0]; // lepton variables double pT = lepton.momentum().perp(); double mT = 2.*(pT*eTmiss - lepton.momentum().x()*pTmiss.x() - lepton.momentum().y()*pTmiss.y()); mT = sqrt(mT); HT += pT; double m_eff_inc = HT + eTmiss + pT; double m_eff_4 = eTmiss + pT; for(unsigned int ix=0;ix<4;++ix) m_eff_4 += recon_jets[ix].momentum().perp(); // four jet selecton if(mT>100.&& eTmiss/m_eff_4>0.2 && m_eff_inc > 800.) { if( eTmiss > 250. ) { if(abs(lepton.pdgId())==ELECTRON) _count_e->fill(0.5,weight); else if(abs(lepton.pdgId())==MUON) _count_mu->fill(0.5,weight); } if(abs(lepton.pdgId())==ELECTRON) _hist_eTmiss_e ->fill(eTmiss,weight); else if(abs(lepton.pdgId())==MUON) _hist_eTmiss_mu->fill(eTmiss,weight); } } //@} void finalize() { double norm = 5.8* crossSection()/sumOfWeights()/femtobarn; scale(_count_e ,norm); scale(_count_mu,norm); scale(_hist_eTmiss_e ,40.*norm); scale(_hist_eTmiss_mu ,40.*norm); } private: /// @name Histograms //@{ AIDA::IHistogram1D* _count_e ; AIDA::IHistogram1D* _count_mu; AIDA::IHistogram1D* _hist_eTmiss_e ; AIDA::IHistogram1D* _hist_eTmiss_mu; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_CONF_2012_104); } rivet-1.8.3/src/Analyses/OPAL_1998_S3780481.cc0000644000175000017500000001415412116077757016235 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/InitialQuarks.hh" namespace Rivet { /// @brief OPAL flavour-dependent fragmentation paper /// @author Hendrik Hoeth class OPAL_1998_S3780481 : public Analysis { public: /// Constructor OPAL_1998_S3780481() : Analysis("OPAL_1998_S3780481") { // Counters _weightedTotalPartNum = 0; _SumOfudsWeights = 0; _SumOfcWeights = 0; _SumOfbWeights = 0; } /// @name Analysis methods //@{ void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed ncharged cut"); vetoEvent; } MSG_DEBUG("Passed ncharged cut"); // Get event weight for histo filling const double weight = e.weight(); _weightedTotalPartNum += numParticles * weight; // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); int flavour = 0; const InitialQuarks& iqf = applyProjection(e, "IQF"); // If we only have two quarks (qqbar), just take the flavour. // If we have more than two quarks, look for the highest energetic q-qbar pair. if (iqf.particles().size() == 2) { flavour = abs( iqf.particles().front().pdgId() ); } else { map quarkmap; foreach (const Particle& p, iqf.particles()) { if (quarkmap[p.pdgId()] < p.momentum().E()) { quarkmap[p.pdgId()] = p.momentum().E(); } } double maxenergy = 0.; for (int i = 1; i <= 5; ++i) { if (quarkmap[i]+quarkmap[-i] > maxenergy) { flavour = i; } } } switch (flavour) { case 1: case 2: case 3: _SumOfudsWeights += weight; break; case 4: _SumOfcWeights += weight; break; case 5: _SumOfbWeights += weight; break; } foreach (const Particle& p, fs.particles()) { const double xp = p.momentum().vector3().mod()/meanBeamMom; const double logxp = -std::log(xp); _histXpall->fill(xp, weight); _histLogXpall->fill(logxp, weight); _histMultiChargedall->fill(_histMultiChargedall->binMean(0), weight); switch (flavour) { /// @todo Use PDG code enums case DQUARK: case UQUARK: case SQUARK: _histXpuds->fill(xp, weight); _histLogXpuds->fill(logxp, weight); _histMultiChargeduds->fill(_histMultiChargeduds->binMean(0), weight); break; case CQUARK: _histXpc->fill(xp, weight); _histLogXpc->fill(logxp, weight); _histMultiChargedc->fill(_histMultiChargedc->binMean(0), weight); break; case BQUARK: _histXpb->fill(xp, weight); _histLogXpb->fill(logxp, weight); _histMultiChargedb->fill(_histMultiChargedb->binMean(0), weight); break; } } } void init() { // Projections addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "FS"); addProjection(InitialQuarks(), "IQF"); // Book histos _histXpuds = bookHistogram1D(1, 1, 1); _histXpc = bookHistogram1D(2, 1, 1); _histXpb = bookHistogram1D(3, 1, 1); _histXpall = bookHistogram1D(4, 1, 1); _histLogXpuds = bookHistogram1D(5, 1, 1); _histLogXpc = bookHistogram1D(6, 1, 1); _histLogXpb = bookHistogram1D(7, 1, 1); _histLogXpall = bookHistogram1D(8, 1, 1); _histMultiChargeduds = bookHistogram1D(9, 1, 1); _histMultiChargedc = bookHistogram1D(9, 1, 2); _histMultiChargedb = bookHistogram1D(9, 1, 3); _histMultiChargedall = bookHistogram1D(9, 1, 4); } /// Finalize void finalize() { const double avgNumParts = _weightedTotalPartNum / sumOfWeights(); normalize(_histXpuds , avgNumParts); normalize(_histXpc , avgNumParts); normalize(_histXpb , avgNumParts); normalize(_histXpall , avgNumParts); normalize(_histLogXpuds , avgNumParts); normalize(_histLogXpc , avgNumParts); normalize(_histLogXpb , avgNumParts); normalize(_histLogXpall , avgNumParts); scale(_histMultiChargeduds, 1.0/_SumOfudsWeights); scale(_histMultiChargedc , 1.0/_SumOfcWeights); scale(_histMultiChargedb , 1.0/_SumOfbWeights); scale(_histMultiChargedall, 1.0/sumOfWeights()); } //@} private: /// Store the weighted sums of numbers of charged / charged+neutral /// particles - used to calculate average number of particles for the /// inclusive single particle distributions' normalisations. double _weightedTotalPartNum; double _SumOfudsWeights; double _SumOfcWeights; double _SumOfbWeights; AIDA::IHistogram1D *_histXpuds; AIDA::IHistogram1D *_histXpc; AIDA::IHistogram1D *_histXpb; AIDA::IHistogram1D *_histXpall; AIDA::IHistogram1D *_histLogXpuds; AIDA::IHistogram1D *_histLogXpc; AIDA::IHistogram1D *_histLogXpb; AIDA::IHistogram1D *_histLogXpall; AIDA::IHistogram1D *_histMultiChargeduds; AIDA::IHistogram1D *_histMultiChargedc; AIDA::IHistogram1D *_histMultiChargedb; AIDA::IHistogram1D *_histMultiChargedall; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(OPAL_1998_S3780481); } rivet-1.8.3/src/Analyses/CDF_2001_S4517016.cc0000644000175000017500000000411012116077757016026 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief CDF two jet tripply-differential cross-section class CDF_2001_S4517016 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor CDF_2001_S4517016() : Analysis("CDF_2001_S4517016") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { FinalState fs(-4.2, 4.2); addProjection(FastJets(fs, FastJets::CDFJETCLU, 0.7), "Jets"); _h_ET.addHistogram(0.1, 0.7, bookHistogram1D(1, 1, 1)); _h_ET.addHistogram(0.7, 1.4, bookHistogram1D(2, 1, 1)); _h_ET.addHistogram(1.4, 2.1, bookHistogram1D(3, 1, 1)); _h_ET.addHistogram(2.1, 3.0, bookHistogram1D(4, 1, 1)); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); Jets jets = applyProjection(event, "Jets").jetsByEt(10.0*GeV); if (jets.size()<2) { vetoEvent; } FourMomentum jet1 = jets[0].momentum(); FourMomentum jet2 = jets[1].momentum(); double eta1 = fabs(jet1.eta()); double eta2 = fabs(jet2.eta()); double ET1 = jet1.Et(); double ET2 = jet2.Et(); if (eta1<0.1 || eta1>0.7 || ET1<40.0*GeV) { vetoEvent; } if (eta2<0.1 || eta2>3.0) { vetoEvent; } _h_ET.fill(eta2, ET1, weight); if (eta2<0.7 && ET2>40.0*GeV) _h_ET.fill(eta1, ET2, weight); } /// Normalise histograms etc., after the run void finalize() { double deta1 = 1.2; _h_ET.scale(crossSection()/nanobarn/sumOfWeights()/deta1 / 2.0, this); } //@} private: /// @name Histograms //@{ BinnedHistogram _h_ET; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2001_S4517016); } rivet-1.8.3/src/Analyses/CDF_1990_S2089246.cc0000644000175000017500000000367512116077757016074 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/TriggerCDFRun0Run1.hh" namespace Rivet { /// @brief CDF pseudorapidity analysis at 630 and 1800 GeV /// @author Andy Buckley class CDF_1990_S2089246 : public Analysis { public: /// Constructor CDF_1990_S2089246() : Analysis("CDF_1990_S2089246") { _sumWTrig = 0; } /// @name Analysis methods //@{ void init() { // Setup projections addProjection(TriggerCDFRun0Run1(), "Trigger"); addProjection(ChargedFinalState(-3.5, 3.5), "CFS"); // Book histo if (fuzzyEquals(sqrtS()/GeV, 1800, 1E-3)) { _hist_eta = bookHistogram1D(3, 1, 1); } else if (fuzzyEquals(sqrtS()/GeV, 630, 1E-3)) { _hist_eta = bookHistogram1D(4, 1, 1); } } /// Do the analysis void analyze(const Event& event) { // Trigger const bool trigger = applyProjection(event, "Trigger").minBiasDecision(); if (!trigger) vetoEvent; const double weight = event.weight(); _sumWTrig += weight; // Loop over final state charged particles to fill eta histos const FinalState& fs = applyProjection(event, "CFS"); foreach (const Particle& p, fs.particles()) { const double eta = p.momentum().pseudorapidity(); _hist_eta->fill(fabs(eta), weight); } } /// Finalize void finalize() { // Divide through by num events to get d/d(eta) in bins // Factor of 1/2 for |eta| -> eta scale(_hist_eta, 0.5/_sumWTrig); } //@} private: /// @name Weight counter //@{ double _sumWTrig; //@} /// @name Histogram collections //@{ AIDA::IHistogram1D* _hist_eta; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_1990_S2089246); } rivet-1.8.3/src/Analyses/D0_2011_I895662.cc0000644000175000017500000000534412116077757015632 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { class D0_2011_I895662 : public Analysis { public: D0_2011_I895662() : Analysis("D0_2011_I895662") { } public: void init() { FastJets jets(FinalState(-3.6, 3.6, 0.*GeV), FastJets::D0ILCONE, 0.7); jets.useInvisibles(); addProjection(jets, "Jets"); _h_m3j_08_40 = bookHistogram1D(1, 1, 1); _h_m3j_16_40 = bookHistogram1D(2, 1, 1); _h_m3j_24_40 = bookHistogram1D(3, 1, 1); _h_m3j_24_70 = bookHistogram1D(4, 1, 1); _h_m3j_24_100 = bookHistogram1D(5, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); Jets jets = applyProjection(event, "Jets").jetsByPt(40.*GeV); // Need three jets, leading jet above 150 GeV if (jets.size() < 3 || jets[0].momentum().pT() <= 150.*GeV) vetoEvent; std::vector p; for (size_t i=0; i<3; i++) { p.push_back(jets[i].momentum()); } // Jets need to be separated by 2*Rcone if (deltaR(p[0], p[1], RAPIDITY) < 1.4 || deltaR(p[0], p[2], RAPIDITY) < 1.4 || deltaR(p[1], p[2], RAPIDITY) < 1.4) vetoEvent; // Leading three jets need to be within |y|<2.4 double ymax = fabs(p[0].rapidity()); for (size_t i=1; i<3; i++) { if (ymax < fabs(p[i].rapidity())) ymax = fabs(p[i].rapidity()); } if (ymax >= 2.4) vetoEvent; double m3jet = (p[0]+p[1]+p[2]).mass()/GeV; if (ymax < 0.8) _h_m3j_08_40->fill(m3jet, weight); if (ymax < 1.6) _h_m3j_16_40->fill(m3jet, weight); if (ymax < 2.4) { _h_m3j_24_40->fill(m3jet, weight); if (p[2].pT() > 70.*GeV) _h_m3j_24_70->fill(m3jet, weight); if (p[2].pT() > 100.*GeV) _h_m3j_24_100->fill(m3jet, weight); } } void finalize() { // Factor of 1000 is based on GeV <-> TeV mismatch between paper and Hepdata table scale(_h_m3j_08_40, 1000*crossSection()/picobarn/sumOfWeights()); scale(_h_m3j_16_40, 1000*crossSection()/picobarn/sumOfWeights()); scale(_h_m3j_24_40, 1000*crossSection()/picobarn/sumOfWeights()); scale(_h_m3j_24_70, 1000*crossSection()/picobarn/sumOfWeights()); scale(_h_m3j_24_100, 1000*crossSection()/picobarn/sumOfWeights()); } private: AIDA::IHistogram1D *_h_m3j_08_40; AIDA::IHistogram1D *_h_m3j_16_40; AIDA::IHistogram1D *_h_m3j_24_40; AIDA::IHistogram1D *_h_m3j_24_70; AIDA::IHistogram1D *_h_m3j_24_100; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2011_I895662); } rivet-1.8.3/src/Analyses/D0_2008_S7554427.cc0000644000175000017500000000342012116077757015721 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ZFinder.hh" namespace Rivet { /// @brief D0 Run II Z \f$ p_\perp \f$ differential cross-section shape /// @author Andy Buckley /// @author Gavin Hesketh /// @author Frank Siegert class D0_2008_S7554427 : public Analysis { public: /// Default constructor. D0_2008_S7554427() : Analysis("D0_2008_S7554427") { // Run II Z pT } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; ZFinder zfinder(fs, -MAXRAPIDITY, MAXRAPIDITY, 0.0*GeV, ELECTRON, 40.0*GeV, 200.0*GeV, 0.2, true, true); addProjection(zfinder, "ZFinder"); _h_ZpT = bookHistogram1D(1, 1, 1); _h_forward_ZpT = bookHistogram1D(3, 1, 1); } /// Do the analysis void analyze(const Event & e) { const double weight = e.weight(); const ZFinder& zfinder = applyProjection(e, "ZFinder"); if (zfinder.bosons().size() == 1) { double yZ = fabs(zfinder.bosons()[0].momentum().rapidity()); double pTZ = zfinder.bosons()[0].momentum().pT(); _h_ZpT->fill(pTZ, weight); if (yZ > 2.0) { _h_forward_ZpT->fill(pTZ, weight); } } else { MSG_DEBUG("No unique lepton pair found."); } } // Finalize void finalize() { normalize(_h_ZpT); normalize(_h_forward_ZpT); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_ZpT; AIDA::IHistogram1D * _h_forward_ZpT; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2008_S7554427); } rivet-1.8.3/src/Analyses/CDF_2009_S8233977.cc0000644000175000017500000000752712116077757016074 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/TriggerCDFRun2.hh" namespace Rivet { /// @brief CDF Run II min-bias cross-section /// @author Hendrik Hoeth /// /// Measurement of \f$ \langle p_T \rangle \f$ vs. \f$ n_\text{ch} \f$, /// the track \f$ p_T \f$ distribution, and the \f$ \sum E_T \f$ distribution. /// Particles are selected within |eta|<1 and with pT>0.4 GeV. /// There is no pT cut for the \f$ \sum E_T \f$ measurement. /// /// @par Run conditions /// /// @arg \f$ \sqrt{s} = \f$ 1960 GeV /// @arg Run with generic QCD events. /// @arg Set particles with c*tau > 10 mm stable class CDF_2009_S8233977 : public Analysis { public: /// Constructor CDF_2009_S8233977() : Analysis("CDF_2009_S8233977"), _sumWeightSelected(0.0) { } /// @name Analysis methods //@{ /// Book histograms and projections void init() { addProjection(TriggerCDFRun2(), "Trigger"); addProjection(FinalState(-1.0, 1.0, 0.0*GeV), "EtFS"); addProjection(ChargedFinalState(-1.0, 1.0, 0.4*GeV), "CFS"); _hist_pt = bookHistogram1D(1, 1, 1); _hist_pt_vs_multiplicity = bookProfile1D(2, 1, 1); _hist_sumEt = bookHistogram1D(3, 1, 1); } /// Do the analysis void analyze(const Event& evt) { // MinBias Trigger const bool trigger = applyProjection(evt, "Trigger").minBiasDecision(); if (!trigger) vetoEvent; // Get the event weight const double weight = evt.weight(); /// @todo The pT and sum(ET) distributions look slightly different from /// Niccolo's Monte Carlo plots. Still waiting for his answer. const ChargedFinalState& trackfs = applyProjection(evt, "CFS"); const size_t numParticles = trackfs.size(); foreach (const Particle& p, trackfs.particles()) { const double pT = p.momentum().pT() / GeV; _hist_pt_vs_multiplicity->fill(numParticles, pT, weight); // The weight for entries in the pT distribution should be weight/(pT*dPhi*dy). // // - dPhi = 2*PI // // - dy depends on the pT: They calculate y assuming the particle has the // pion mass and assuming that eta=1: // dy = 2 * 1/2 * ln [(sqrt(m^2 + (a+1)*pT^2) + a*pT) / (sqrt(m^2 + (a+1)*pT^2) - a*pT)] // with a = sinh(1). // // sinh(1) = 1.1752012 // m(charged pion)^2 = (139.57 MeV)^2 = 0.019479785 GeV^2 const double sinh1 = 1.1752012; const double apT = sinh1 * pT; const double mPi = 139.57*MeV; const double root = sqrt(mPi*mPi + (1+sinh1)*pT*pT); const double dy = std::log((root+apT)/(root-apT)); const double dphi = TWOPI; _hist_pt->fill(pT, weight/(pT*dphi*dy)); } // Calc sum(Et) from calo particles const FinalState& etfs = applyProjection(evt, "EtFS"); double sumEt = 0.0; foreach (const Particle& p, etfs.particles()) { sumEt += p.momentum().Et(); } _hist_sumEt->fill(sumEt, weight); _sumWeightSelected += evt.weight(); } /// Normalize histos void finalize() { scale(_hist_sumEt, crossSection()/millibarn/(4*M_PI*_sumWeightSelected)); scale(_hist_pt, crossSection()/millibarn/_sumWeightSelected); MSG_DEBUG("sumOfWeights() = " << sumOfWeights()); MSG_DEBUG("_sumWeightSelected = " << _sumWeightSelected); } //@} private: double _sumWeightSelected; AIDA::IProfile1D *_hist_pt_vs_multiplicity; AIDA::IHistogram1D *_hist_pt; AIDA::IHistogram1D *_hist_sumEt; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2009_S8233977); } rivet-1.8.3/src/Analyses/ATLAS_2011_S9212353.cc0000644000175000017500000004433712116077757016317 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { class ATLAS_2011_S9212353 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2011_S9212353() : Analysis("ATLAS_2011_S9212353") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialize projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 20.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // veto region electrons (from 2010 arXiv:1102.2357v2) std::vector > eta_v_e; eta_v_e.push_back(make_pair(-1.52,-1.37)); eta_v_e.push_back(make_pair( 1.37, 1.52)); IdentifiedFinalState veto_elecs(eta_v_e, 10.0*GeV); veto_elecs.acceptIdPair(ELECTRON); addProjection(veto_elecs, "veto_elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // Jet finder VetoedFinalState vfs; vfs.addVetoPairId(MUON); addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // all tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0,0.5*GeV),"cfs"); // for pTmiss addProjection(VisibleFinalState(-4.5,4.5),"vfs"); /// Book histograms _3jl_count_mu_channel = bookHistogram1D("3jl_count_muon_channel", 1, 0., 1.); _3jl_count_e_channel = bookHistogram1D("3jl_count_electron_channel", 1, 0., 1.); _3jt_count_mu_channel = bookHistogram1D("3jt_count_muon_channel", 1, 0., 1.); _3jt_count_e_channel = bookHistogram1D("3jt_count_electron_channel", 1, 0., 1.); _3j_hist_eTmiss_e = bookHistogram1D("3j_Et_miss_e", 65, 0., 650.); _3j_hist_eTmiss_mu = bookHistogram1D("3j_Et_miss_mu", 65, 0., 650.); _3j_hist_mT_e = bookHistogram1D("3j_mT_e", 58, 0., 580.); _3j_hist_mT_mu = bookHistogram1D("3j_mT_mu", 58, 0., 580.); _3j_hist_m_eff_e = bookHistogram1D("3j_m_eff_e", 46, 0., 2300.); _3j_hist_m_eff_mu = bookHistogram1D("3j_m_eff_mu", 46, 0., 2300.); _3jl_hist_m_eff_e_final = bookHistogram1D("3jl_m_eff_e_final", 15, 0., 1500.); _3jl_hist_m_eff_mu_final = bookHistogram1D("3jl_m_eff_mu_final", 15, 0., 1500.); _3jt_hist_m_eff_e_final = bookHistogram1D("3jt_m_eff_e_final", 15, 0., 1500.); _3jt_hist_m_eff_mu_final = bookHistogram1D("3jt_m_eff_mu_final", 15, 0., 1500.); _4jl_count_mu_channel = bookHistogram1D("4jl_count_muon_channel", 1, 0., 1.); _4jl_count_e_channel = bookHistogram1D("4jl_count_electron_channel", 1, 0., 1.); _4jt_count_mu_channel = bookHistogram1D("4jt_count_muon_channel", 1, 0., 1.); _4jt_count_e_channel = bookHistogram1D("4jt_count_electron_channel", 1, 0., 1.); _4j_hist_eTmiss_e = bookHistogram1D("4j_Et_miss_e", 65, 0., 650.); _4j_hist_eTmiss_mu = bookHistogram1D("4j_Et_miss_mu", 65, 0., 650.); _4j_hist_mT_e = bookHistogram1D("4j_mT_e", 58, 0., 580.); _4j_hist_mT_mu = bookHistogram1D("4j_mT_mu", 58, 0., 580.); _4j_hist_m_eff_e = bookHistogram1D("4j_m_eff_e", 46, 0., 2300.); _4j_hist_m_eff_mu = bookHistogram1D("4j_m_eff_mu", 46, 0., 2300.); _4jl_hist_m_eff_e_final = bookHistogram1D("4jl_m_eff_e_final", 15, 0., 1500.); _4jl_hist_m_eff_mu_final = bookHistogram1D("4jl_m_eff_mu_final", 15, 0., 1500.); _4jt_hist_m_eff_e_final = bookHistogram1D("4jt_m_eff_e_final", 15, 0., 1500.); _4jt_hist_m_eff_mu_final = bookHistogram1D("4jt_m_eff_mu_final", 15, 0., 1500.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); ParticleVector veto_e = applyProjection(event, "veto_elecs").particles(); if ( ! veto_e.empty() ) { MSG_DEBUG("electrons in veto region"); vetoEvent; } Jets cand_jets; foreach ( const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 2.8 ) { cand_jets.push_back(jet); } } ParticleVector candtemp_e = applyProjection(event, "elecs").particlesByPt(); ParticleVector candtemp_mu = applyProjection(event,"muons").particlesByPt(); ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); ParticleVector cand_mu; ParticleVector cand_e; // pTcone around muon track foreach ( const Particle & mu, candtemp_mu ) { double pTinCone = -mu.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(mu.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 1.8*GeV ) cand_mu.push_back(mu); } // pTcone around electron foreach ( const Particle e, candtemp_e ) { double pTinCone = -e.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(e.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 0.1 * e.momentum().pT() ) cand_e.push_back(e); } // discard jets that overlap with electrons Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) recon_jets.push_back( jet ); } // only consider leptons far from jet ParticleVector recon_e, recon_mu; foreach ( const Particle & e, cand_e ) { bool e_near_jet = false; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.4 && deltaR(e.momentum(),jet.momentum()) > 0.2 ) e_near_jet = true; } if ( ! e_near_jet ) recon_e.push_back( e ); } foreach ( const Particle & mu, cand_mu ) { bool mu_near_jet = false; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) mu_near_jet = true; } if ( ! mu_near_jet ) recon_mu.push_back( mu ); } // pTmiss ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // ==================== observables ==================== // Njets int Njets = 0; double pTmiss_phi = pTmiss.phi(); foreach ( const Jet& jet, recon_jets ) { if ( fabs(jet.momentum().eta()) < 2.8 ) Njets+=1; } if ( Njets < 3 ) { MSG_DEBUG("Only " << Njets << " jets w/ eta<2.8 left"); vetoEvent; } ParticleVector lepton; if ( recon_mu.empty() && recon_e.empty() ) { MSG_DEBUG("No leptons"); vetoEvent; } else { foreach ( const Particle & mu, recon_mu ) lepton.push_back(mu); foreach ( const Particle & e, recon_e ) lepton.push_back(e); } std::sort(lepton.begin(), lepton.end(), cmpParticleByPt); double e_id = 11; double mu_id = 13; // one hard leading lepton cut if ( fabs(lepton[0].pdgId()) == e_id && lepton[0].momentum().pT() <= 25*GeV ) { vetoEvent; } else if ( fabs(lepton[0].pdgId()) == mu_id && lepton[0].momentum().pT() <= 20*GeV ) { vetoEvent; } // exactly one hard leading lepton cut if(lepton.size()>1) { if ( fabs(lepton[1].pdgId()) == e_id && lepton[1].momentum().pT() > 20*GeV ) { vetoEvent; } else if ( fabs(lepton[1].pdgId()) == mu_id && lepton[1].momentum().pT() > 10*GeV ) { vetoEvent; } } // 3JL if ( recon_jets[0].momentum().pT() > 60.0*GeV && recon_jets[1].momentum().pT() > 25.0*GeV && recon_jets[2].momentum().pT() > 25.0*GeV && deltaPhi( pTmiss_phi, recon_jets[0].momentum().phi() ) > 0.2 && deltaPhi( pTmiss_phi, recon_jets[1].momentum().phi() ) > 0.2 && deltaPhi( pTmiss_phi, recon_jets[2].momentum().phi() ) > 0.2 ) { FourMomentum pT_l = lepton[0].momentum(); double dPhi = deltaPhi( pT_l.phi(), pTmiss_phi); double mT = sqrt( 2 * pT_l.pT() * eTmiss * (1 - cos(dPhi)) ); double m_eff = eTmiss + pT_l.pT() + recon_jets[0].momentum().pT() + recon_jets[1].momentum().pT() + recon_jets[2].momentum().pT(); if ( fabs( lepton[0].pdgId() ) == e_id ) { _3j_hist_mT_e->fill(mT, weight); _3j_hist_eTmiss_e->fill(eTmiss, weight); _3j_hist_m_eff_e->fill(m_eff, weight); if ( mT > 100*GeV && eTmiss > 125*GeV ) { _3jl_hist_m_eff_e_final->fill(m_eff, weight); if ( m_eff > 500*GeV && eTmiss > 0.25*m_eff ) { _3jl_count_e_channel->fill(0.5,weight); } } } else if ( fabs( lepton[0].pdgId() ) == mu_id ) { _3j_hist_mT_mu->fill(mT, weight); _3j_hist_eTmiss_mu->fill(eTmiss, weight); _3j_hist_m_eff_mu->fill(m_eff, weight); if ( mT > 100*GeV && eTmiss > 125*GeV ) { _3jl_hist_m_eff_mu_final->fill(m_eff, weight); if ( m_eff > 500*GeV && eTmiss > 0.25*m_eff ) { _3jl_count_mu_channel->fill(0.5,weight); } } } } // 3JT if ( recon_jets[0].momentum().pT() > 80.0*GeV && recon_jets[1].momentum().pT() > 25.0*GeV && recon_jets[2].momentum().pT() > 25.0*GeV && deltaPhi( pTmiss_phi, recon_jets[0].momentum().phi() ) > 0.2 && deltaPhi( pTmiss_phi, recon_jets[1].momentum().phi() ) > 0.2 && deltaPhi( pTmiss_phi, recon_jets[2].momentum().phi() ) > 0.2 ) { FourMomentum pT_l = lepton[0].momentum(); double dPhi = deltaPhi( pT_l.phi(), pTmiss_phi); double mT = sqrt( 2 * pT_l.pT() * eTmiss * (1 - cos(dPhi)) ); double m_eff = eTmiss + pT_l.pT() + recon_jets[0].momentum().pT() + recon_jets[1].momentum().pT() + recon_jets[2].momentum().pT(); if ( fabs( lepton[0].pdgId() ) == e_id ) { if ( mT > 100*GeV && eTmiss > 240*GeV ) { _3jt_hist_m_eff_e_final->fill(m_eff, weight); if ( m_eff > 600*GeV && eTmiss > 0.15*m_eff ) { _3jt_count_e_channel->fill(0.5,weight); } } } else if ( fabs( lepton[0].pdgId() ) == mu_id ) { if ( mT > 100*GeV && eTmiss > 240*GeV ) { _3jt_hist_m_eff_mu_final->fill(m_eff, weight); if ( m_eff > 600*GeV && eTmiss > 0.15*m_eff ) { _3jt_count_mu_channel->fill(0.5,weight); } } } } if ( Njets < 4 ) { MSG_DEBUG("Only " << Njets << " jets w/ eta<2.8 left"); vetoEvent; } // 4JL if ( recon_jets[0].momentum().pT() > 60.0*GeV && recon_jets[1].momentum().pT() > 25.0*GeV && recon_jets[2].momentum().pT() > 25.0*GeV && recon_jets[3].momentum().pT() > 25.0*GeV && deltaPhi( pTmiss_phi, recon_jets[0].momentum().phi() ) > 0.2 && deltaPhi( pTmiss_phi, recon_jets[1].momentum().phi() ) > 0.2 && deltaPhi( pTmiss_phi, recon_jets[2].momentum().phi() ) > 0.2 && deltaPhi( pTmiss_phi, recon_jets[3].momentum().phi() ) > 0.2 ) { FourMomentum pT_l = lepton[0].momentum(); double dPhi = deltaPhi( pT_l.phi(), pTmiss_phi); double mT = sqrt( 2 * pT_l.pT() * eTmiss * (1 - cos(dPhi)) ); double m_eff = eTmiss + pT_l.pT() + recon_jets[0].momentum().pT() + recon_jets[1].momentum().pT() + recon_jets[2].momentum().pT() + recon_jets[3].momentum().pT(); if ( fabs( lepton[0].pdgId() ) == e_id ) { _4j_hist_mT_e->fill(mT, weight); _4j_hist_eTmiss_e->fill(eTmiss, weight); _4j_hist_m_eff_e->fill(m_eff, weight); if ( mT > 100*GeV && eTmiss > 140*GeV ) { _4jl_hist_m_eff_e_final->fill(m_eff, weight); if ( m_eff > 300*GeV && eTmiss > 0.3*m_eff ) { _4jl_count_e_channel->fill(0.5,weight); } } } // Muon channel signal region else if ( fabs( lepton[0].pdgId() ) == mu_id ) { _4j_hist_mT_mu->fill(mT, weight); _4j_hist_eTmiss_mu->fill(eTmiss, weight); _4j_hist_m_eff_mu->fill(m_eff, weight); if ( mT > 100*GeV && eTmiss > 140*GeV ) { _4jl_hist_m_eff_mu_final->fill(m_eff, weight); if ( m_eff > 300*GeV && eTmiss > 0.3*m_eff ) { _4jl_count_mu_channel->fill(0.5,weight); } } } } // 4JT if ( recon_jets[0].momentum().pT() > 60.0*GeV && recon_jets[1].momentum().pT() > 40.0*GeV && recon_jets[2].momentum().pT() > 40.0*GeV && recon_jets[3].momentum().pT() > 40.0*GeV && deltaPhi( pTmiss_phi, recon_jets[0].momentum().phi() ) > 0.2 && deltaPhi( pTmiss_phi, recon_jets[1].momentum().phi() ) > 0.2 && deltaPhi( pTmiss_phi, recon_jets[2].momentum().phi() ) > 0.2 && deltaPhi( pTmiss_phi, recon_jets[3].momentum().phi() ) > 0.2 ) { FourMomentum pT_l = lepton[0].momentum(); double m_eff = eTmiss + pT_l.pT() + recon_jets[0].momentum().pT() + recon_jets[1].momentum().pT() + recon_jets[2].momentum().pT() + recon_jets[3].momentum().pT(); if ( fabs( lepton[0].pdgId() ) == e_id ) { if ( eTmiss > 200*GeV ) { _4jt_hist_m_eff_e_final->fill(m_eff, weight); if ( m_eff > 500*GeV && eTmiss > 0.15*m_eff ) { _4jt_count_e_channel->fill(0.5,weight); } } } // Muon channel signal region else if ( fabs( lepton[0].pdgId() ) == mu_id ) { if ( eTmiss > 200*GeV ) { _4jt_hist_m_eff_mu_final->fill(m_eff, weight); if ( m_eff > 500*GeV && eTmiss > 0.15*m_eff ) { _4jt_count_mu_channel->fill(0.5,weight); } } } } } //@} void finalize() { scale( _3j_hist_eTmiss_e, 10. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _3j_hist_eTmiss_mu, 10. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _3j_hist_m_eff_e, 50. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _3j_hist_m_eff_mu, 50. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _3j_hist_mT_e, 10. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _3j_hist_mT_mu, 10. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _3jl_hist_m_eff_e_final, 100. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _3jl_hist_m_eff_mu_final, 100. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _3jt_hist_m_eff_e_final, 100. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _3jt_hist_m_eff_mu_final, 100. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _4j_hist_eTmiss_e, 10. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _4j_hist_eTmiss_mu, 10. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _4j_hist_m_eff_e, 50. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _4j_hist_m_eff_mu, 50. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _4j_hist_mT_e, 10. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _4j_hist_mT_mu, 10. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _4jl_hist_m_eff_e_final, 100. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _4jl_hist_m_eff_mu_final, 100. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _4jt_hist_m_eff_e_final, 100. * 1.04e3 * crossSection()/sumOfWeights() ); scale( _4jt_hist_m_eff_mu_final, 100. * 1.04e3 * crossSection()/sumOfWeights() ); } private: /// @name Histograms //@{ AIDA::IHistogram1D* _3jl_count_e_channel; AIDA::IHistogram1D* _3jl_count_mu_channel; AIDA::IHistogram1D* _3jt_count_e_channel; AIDA::IHistogram1D* _3jt_count_mu_channel; AIDA::IHistogram1D* _3j_hist_eTmiss_e; AIDA::IHistogram1D* _3j_hist_eTmiss_mu; AIDA::IHistogram1D* _3j_hist_m_eff_e; AIDA::IHistogram1D* _3j_hist_m_eff_mu; AIDA::IHistogram1D* _3j_hist_mT_e; AIDA::IHistogram1D* _3j_hist_mT_mu; AIDA::IHistogram1D* _3jl_hist_m_eff_e_final; AIDA::IHistogram1D* _3jl_hist_m_eff_mu_final; AIDA::IHistogram1D* _3jt_hist_m_eff_e_final; AIDA::IHistogram1D* _3jt_hist_m_eff_mu_final; AIDA::IHistogram1D* _4jl_count_e_channel; AIDA::IHistogram1D* _4jl_count_mu_channel; AIDA::IHistogram1D* _4jt_count_e_channel; AIDA::IHistogram1D* _4jt_count_mu_channel; AIDA::IHistogram1D* _4j_hist_eTmiss_e; AIDA::IHistogram1D* _4j_hist_eTmiss_mu; AIDA::IHistogram1D* _4j_hist_m_eff_e; AIDA::IHistogram1D* _4j_hist_m_eff_mu; AIDA::IHistogram1D* _4j_hist_mT_e; AIDA::IHistogram1D* _4j_hist_mT_mu; AIDA::IHistogram1D* _4jl_hist_m_eff_e_final; AIDA::IHistogram1D* _4jl_hist_m_eff_mu_final; AIDA::IHistogram1D* _4jt_hist_m_eff_e_final; AIDA::IHistogram1D* _4jt_hist_m_eff_mu_final; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_S9212353); } rivet-1.8.3/src/Analyses/MC_SUSY.cc0000644000175000017500000003030312116077757015123 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/MissingMomentum.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" namespace Rivet { /// @brief MC validation analysis for SUSY events /// @author Andy Buckley class MC_SUSY : public Analysis { public: /// Constructor MC_SUSY() : Analysis("MC_SUSY") { } /// @name Analysis methods //@{ // Book histograms void init() { // Basic final state const FinalState fs(-4.0, 4.0, 10*GeV); // Tracks and jets addProjection(ChargedFinalState(fs), "Tracks"); addProjection(FastJets(fs, FastJets::ANTIKT, 0.7), "Jets"); IdentifiedFinalState photonfs(fs); photonfs.acceptId(PHOTON); addProjection(photonfs, "AllPhotons"); IdentifiedFinalState efs(fs); efs.acceptIdPair(ELECTRON); addProjection(efs, "Electrons"); IdentifiedFinalState mufs(fs); mufs.acceptIdPair(MUON); addProjection(mufs, "Muons"); MissingMomentum missing(fs); addProjection(missing, "MET"); LeadingParticlesFinalState lpfs(fs); lpfs.addParticleIdPair(ELECTRON); lpfs.addParticleIdPair(MUON); addProjection(lpfs, "LeadingParticles"); _hist_n_trk = bookHistogram1D("n-trk", 50, 0.5, 300.5); _hist_phi_trk = bookHistogram1D("phi-trk", 50, -PI, PI); _hist_eta_trk = bookHistogram1D("eta-trk", 50, -4, 4); _hist_pt_trk = bookHistogram1D("pt-trk", 100, 0.0, 1500); _hist_n_jet = bookHistogram1D("n-jet", 21, -0.5, 20.5); _hist_phi_jet = bookHistogram1D("phi-jet", 50, -PI, PI); _hist_eta_jet = bookHistogram1D("eta-jet", 50, -4, 4); _hist_pt_jet = bookHistogram1D("pt-jet", 100, 0.0, 1500); _hist_n_e = bookHistogram1D("n-e", 11, -0.5, 10.5); _hist_phi_e = bookHistogram1D("phi-e", 50, -PI, PI); _hist_eta_e = bookHistogram1D("eta-e", 50, -4, 4); _hist_pt_e = bookHistogram1D("pt-e", 100, 0.0, 500); _hist_n_mu = bookHistogram1D("n-mu", 11, -0.5, 10.5); _hist_phi_mu = bookHistogram1D("phi-mu", 50, -PI, PI); _hist_eta_mu = bookHistogram1D("eta-mu", 50, -4, 4); _hist_pt_mu = bookHistogram1D("pt-mu", 100, 0.0, 500); _hist_n_gamma = bookHistogram1D("n-gamma", 11, -0.5, 10.5); _hist_phi_gamma = bookHistogram1D("phi-gamma", 50, -PI, PI); _hist_eta_gamma = bookHistogram1D("eta-gamma", 50, -4, 4); _hist_pt_gamma = bookHistogram1D("pt-gamma", 100, 0.0, 500); _hist_n_gammaiso = bookHistogram1D("n-gamma-iso", 11, -0.5, 10.5); _hist_phi_gammaiso = bookHistogram1D("phi-gamma-iso", 50, -PI, PI); _hist_eta_gammaiso = bookHistogram1D("eta-gamma-iso", 50, -4, 4); _hist_pt_gammaiso = bookHistogram1D("pt-gamma-iso", 100, 0.0, 500); _hist_met = bookHistogram1D("Etmiss", 100, 0.0, 1500); _hist_mll_ossf_ee = bookHistogram1D("mll-ossf-ee", 50, 0.0, 500); _hist_mll_ossf_mumu = bookHistogram1D("mll-ossf-mumu", 50, 0.0, 500); _hist_mll_osof_emu = bookHistogram1D("mll-osof-emu", 50, 0.0, 500); _hist_mll_all_ossf_ee = bookHistogram1D("mll-all-ossf-ee", 50, 0.0, 500); _hist_mll_all_ossf_mumu = bookHistogram1D("mll-all-ossf-mumu", 50, 0.0, 500); _hist_mll_all_osof_emu = bookHistogram1D("mll-all-osof-emu", 50, 0.0, 500); _hist_mll_2_ossf_ee = bookHistogram1D("mll-2-ossf-ee", 50, 0.0, 500); _hist_mll_2_ossf_mumu = bookHistogram1D("mll-2-ossf-mumu", 50, 0.0, 500); _hist_mll_2_osof_emu = bookHistogram1D("mll-2-osof-emu", 50, 0.0, 500); /// @todo LSP eta, pT, phi, mass: no reliable cross-scenario LSP PID but /// maybe plot for all of chi^0_1, gravitino, sneutrino, gluino, ... or /// identify the LSP as any PID::isSUSY (?) particle with status = 1? } // Do the analysis void analyze(const Event& evt) { const FinalState& tracks = applyProjection(evt, "Tracks"); if (tracks.particles().empty()) { MSG_DEBUG("Failed multiplicity cut"); vetoEvent; } // Get event weight const double weight = evt.weight(); // Fill track histos _hist_n_trk->fill(tracks.size(), weight); foreach (const Particle& t, tracks.particles()) { const FourMomentum& p = t.momentum(); _hist_phi_trk->fill(mapAngleMPiToPi(p.phi()), weight); _hist_eta_trk->fill(p.eta(), weight); _hist_pt_trk->fill(p.pT()/GeV, weight); } // Get jets and fill jet histos const FastJets& jetpro = applyProjection(evt, "Jets"); const Jets jets = jetpro.jetsByPt(); MSG_DEBUG("Jet multiplicity = " << jets.size()); _hist_n_jet->fill(jets.size(), weight); foreach (const Jet& j, jets) { const FourMomentum& pj = j.momentum(); _hist_phi_jet->fill(mapAngleMPiToPi(pj.phi()), weight); _hist_eta_jet->fill(pj.eta(), weight); _hist_pt_jet->fill(pj.pT()/GeV, weight); } /// @todo Resum photons around electrons // Fill final state electron/positron histos const FinalState& efs = applyProjection(evt, "Electrons"); _hist_n_e->fill(efs.size(), weight); vector epluses, eminuses; foreach (const Particle& e, efs.particles()) { const FourMomentum& p = e.momentum(); _hist_phi_e->fill(mapAngleMPiToPi(p.phi()), weight); _hist_eta_e->fill(p.eta(), weight); _hist_pt_e->fill(p.pT()/GeV, weight); // Add sufficiently hard leptons to collections for m_ll histo if (p.pT()/GeV > 20) { if (PID::threeCharge(e.pdgId()) > 0) epluses += p; else eminuses += p; } } /// @todo Resum photons around muons // Fill final state muon/antimuon histos const FinalState& mufs = applyProjection(evt, "Muons"); _hist_n_mu->fill(mufs.size(), weight); vector mupluses, muminuses; foreach (const Particle& mu, mufs.particles()) { const FourMomentum& p = mu.momentum(); _hist_phi_mu->fill(mapAngleMPiToPi(p.phi()), weight); _hist_eta_mu->fill(p.eta(), weight); _hist_pt_mu->fill(p.pT()/GeV, weight); // Add sufficiently hard leptons to collections for m_ll histo if (p.pT()/GeV > 20) { if (PID::threeCharge(mu.pdgId()) > 0) mupluses += p; else muminuses += p; } } // Fill final state non-isolated photon histos const FinalState& allphotonfs = applyProjection(evt, "AllPhotons"); _hist_n_gamma->fill(allphotonfs.size(), weight); ParticleVector isolatedphotons; foreach (const Particle& ph, allphotonfs.particles()) { const FourMomentum& p = ph.momentum(); _hist_phi_gamma->fill(mapAngleMPiToPi(p.phi()), weight); _hist_eta_gamma->fill(p.eta(), weight); _hist_pt_gamma->fill(p.pT()/GeV, weight); // Select isolated photons bool isolated = true; foreach (const Jet& j, jets) { if (deltaR(j.momentum(), p) < 0.2) { isolated = false; break; } } if (isolated) isolatedphotons += ph; } // Fill final state isolated photon histos _hist_n_gammaiso->fill(isolatedphotons.size(), weight); foreach (const Particle& ph_iso, isolatedphotons) { const FourMomentum& p = ph_iso.momentum(); _hist_phi_gammaiso->fill(mapAngleMPiToPi(p.phi()), weight); _hist_eta_gammaiso->fill(p.eta(), weight); _hist_pt_gammaiso->fill(p.pT()/GeV, weight); } // Calculate and fill missing Et histos const MissingMomentum& met = applyProjection(evt, "MET"); _hist_met->fill(met.vectorEt().mod()/GeV); // Choose highest-pT leptons of each sign and flavour for dilepton mass edges const FinalState& lpfs = applyProjection(evt, "LeadingParticles"); bool eplus_ok(false), eminus_ok(false), muplus_ok(false), muminus_ok(false); FourMomentum peplus, peminus, pmuplus, pmuminus; foreach (const Particle& p, lpfs.particles()) { // Only use leptons above 20 GeV if (p.momentum().pT()/GeV < 20) continue; // Identify the PID const PdgId pid = p.pdgId(); if (pid == ELECTRON) { eminus_ok = true; peminus = p.momentum(); } else if (pid == POSITRON) { eplus_ok = true; peplus = p.momentum(); } else if (pid == MUON) { muminus_ok = true; pmuminus = p.momentum(); } else if (pid == ANTIMUON) { muplus_ok = true; pmuplus = p.momentum(); } else { throw Error("Unexpected particle type in leading particles FS!"); } } // m_ee if (eminus_ok && eplus_ok) { const double m_ee = FourMomentum(peplus + peminus).mass(); _hist_mll_ossf_ee->fill(m_ee/GeV, weight); if (epluses.size() == 1 && eminuses.size() == 1) _hist_mll_2_ossf_ee->fill(m_ee/GeV, weight); } // m_mumu if (muminus_ok && muplus_ok) { const double m_mumu = FourMomentum(pmuplus + pmuminus).mass(); _hist_mll_ossf_mumu->fill(m_mumu/GeV, weight); if (mupluses.size() == 1 && muminuses.size() == 1) _hist_mll_2_ossf_mumu->fill(m_mumu/GeV, weight); } // m_emu (both configurations) if (eminus_ok && muplus_ok) { const double m_emu = FourMomentum(pmuplus + peminus).mass(); _hist_mll_osof_emu->fill(m_emu/GeV, weight); if (mupluses.size() == 1 && eminuses.size() == 1) _hist_mll_2_osof_emu->fill(m_emu/GeV, weight); } if (muminus_ok && eplus_ok) { const double m_mue = FourMomentum(peplus + pmuminus).mass(); _hist_mll_osof_emu->fill(m_mue/GeV, weight); if (epluses.size() == 1 && muminuses.size() == 1) _hist_mll_2_osof_emu->fill(m_mue/GeV, weight); } // m_ll plots using *all* electrons, positrons, muons and antimuons // m_ee foreach (const FourMomentum& peplus, epluses) { foreach (const FourMomentum& peminus, eminuses) { const double m_ee = FourMomentum(peplus + peminus).mass(); _hist_mll_all_ossf_ee->fill(m_ee/GeV, weight); } } // m_mumu foreach (const FourMomentum& pmuplus, mupluses) { foreach (const FourMomentum& pmuminus, muminuses) { const double m_mumu = FourMomentum(pmuplus + pmuminus).mass(); _hist_mll_all_ossf_mumu->fill(m_mumu/GeV, weight); } } // m_emu (both configurations) foreach (const FourMomentum& pmuplus, mupluses) { foreach (const FourMomentum& peminus, eminuses) { const double m_emu = FourMomentum(pmuplus + peminus).mass(); _hist_mll_all_osof_emu->fill(m_emu/GeV, weight); } } foreach (const FourMomentum& peplus, epluses) { foreach (const FourMomentum& pmuminus, muminuses) { const double m_mue = FourMomentum(peplus + pmuminus).mass(); _hist_mll_all_osof_emu->fill(m_mue/GeV, weight); } } } void finalize() { /// @todo Normalisations } //@} private: AIDA::IHistogram1D *_hist_n_trk, *_hist_phi_trk, *_hist_eta_trk, *_hist_pt_trk; AIDA::IHistogram1D *_hist_n_jet, *_hist_phi_jet, *_hist_eta_jet, *_hist_pt_jet; AIDA::IHistogram1D *_hist_n_e, *_hist_phi_e, *_hist_eta_e, *_hist_pt_e; AIDA::IHistogram1D *_hist_n_mu, *_hist_phi_mu, *_hist_eta_mu, *_hist_pt_mu; AIDA::IHistogram1D *_hist_n_gamma, *_hist_phi_gamma, *_hist_eta_gamma, *_hist_pt_gamma; AIDA::IHistogram1D *_hist_n_gammaiso, *_hist_phi_gammaiso, *_hist_eta_gammaiso, *_hist_pt_gammaiso; AIDA::IHistogram1D *_hist_met; AIDA::IHistogram1D *_hist_mll_2_ossf_ee, *_hist_mll_2_ossf_mumu, *_hist_mll_2_osof_emu; AIDA::IHistogram1D *_hist_mll_ossf_ee, *_hist_mll_ossf_mumu, *_hist_mll_osof_emu; AIDA::IHistogram1D *_hist_mll_all_ossf_ee, *_hist_mll_all_ossf_mumu, *_hist_mll_all_osof_emu; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_SUSY); } rivet-1.8.3/src/Analyses/ATLAS_2012_CONF_2012_103.cc0000644000175000017500000001711412116077757017112 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/RivetMT2.hh" namespace Rivet { class ATLAS_2012_CONF_2012_103 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_CONF_2012_103() : Analysis("ATLAS_2012_CONF_2012_103") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 20.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); VetoedFinalState vfs; vfs.addVetoPairId(MUON); /// Jet finder addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); /// Book histograms _etmiss_HT_7j55 = bookHistogram1D("etmiss_HT_7j55", 8, 0., 16.); _etmiss_HT_8j55 = bookHistogram1D("etmiss_HT_8j55", 8, 0., 16.); _etmiss_HT_9j55 = bookHistogram1D("etmiss_HT_9j55", 8, 0., 16.); _etmiss_HT_6j80 = bookHistogram1D("etmiss_HT_6j80", 8, 0., 16.); _etmiss_HT_7j80 = bookHistogram1D("etmiss_HT_7j80", 8, 0., 16.); _etmiss_HT_8j80 = bookHistogram1D("etmiss_HT_8j80", 8, 0., 16.); _hist_njet55 = bookHistogram1D("hist_njet55", 4, 5.5, 9.5); _hist_njet80 = bookHistogram1D("hist_njet80", 4, 4.5, 8.5); _count_7j55 = bookHistogram1D("count_7j55", 1, 0., 1.); _count_8j55 = bookHistogram1D("count_8j55", 1, 0., 1.); _count_9j55 = bookHistogram1D("count_9j55", 1, 0., 1.); _count_6j80 = bookHistogram1D("count_6j80", 1, 0., 1.); _count_7j80 = bookHistogram1D("count_7j80", 1, 0., 1.); _count_8j80 = bookHistogram1D("count_8j80", 1, 0., 1.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // get the jet candidates Jets cand_jets; foreach (const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 2.8 ) { cand_jets.push_back(jet); } } // candidate muons ParticleVector cand_mu = applyProjection(event, "muons").particlesByPt(); // candidate electrons ParticleVector cand_e = applyProjection(event, "elecs").particlesByPt(); // resolve jet/lepton ambiguity Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { // candidates after |eta| < 2.8 if ( fabs( jet.momentum().eta() ) >= 2.8 ) continue; bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) recon_jets.push_back( jet ); } // only keep electrons more than R=0.4 from jets ParticleVector recon_e; foreach ( const Particle & e, cand_e ) { bool away = true; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } if ( away ) recon_e.push_back( e ); } // only keep muons more than R=0.4 from jets ParticleVector recon_mu; foreach ( const Particle & mu, cand_mu ) { bool away = true; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } if ( away ) recon_mu.push_back( mu ); } // pTmiss ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // now only use recon_jets, recon_mu, recon_e // reject events with electrons and muons if ( ! ( recon_mu.empty() && recon_e.empty() ) ) { MSG_DEBUG("Charged leptons left after selection"); vetoEvent; } // calculate H_T double HT=0; foreach ( const Jet& jet, recon_jets ) { if ( jet.momentum().pT() > 40 * GeV ) HT += jet.momentum().pT() ; } // number of jets unsigned int njet55=0, njet80=0; for (unsigned int ix=0;ix80.*GeV) ++njet80; if(recon_jets[ix].momentum().pT()>55.*GeV) ++njet55; } double ratio = eTmiss/sqrt(HT); if(ratio>4.) { if(njet55>9) njet55 = 9; if(njet80>8) njet80 = 8; _hist_njet55->fill(njet55,weight); _hist_njet80->fill(njet80,weight); // 7j55 if(njet55>=7) _count_7j55->fill( 0.5, weight); // 8j55 if(njet55>=8) _count_8j55->fill( 0.5, weight) ; // 8j55 if(njet55==9) _count_9j55->fill( 0.5, weight) ; // 6j80 if(njet80>=6) _count_6j80->fill( 0.5, weight) ; // 7j80 if(njet80>=7) _count_7j80->fill( 0.5, weight) ; // 8j80 if(njet80==8) _count_8j80->fill( 0.5, weight) ; } if(njet55>=7) _etmiss_HT_7j55->fill( ratio, weight); // 8j55 if(njet55>=8) _etmiss_HT_8j55->fill( ratio, weight) ; // 8j55 if(njet55>=9) _etmiss_HT_9j55->fill( ratio, weight) ; // 6j80 if(njet80>=6) _etmiss_HT_6j80->fill( ratio, weight) ; // 7j80 if(njet80>=7) _etmiss_HT_7j80->fill( ratio, weight) ; // 8j80 if(njet80>=8) _etmiss_HT_8j80->fill( ratio, weight) ; } //@} void finalize() { double norm = crossSection()/femtobarn*5.8/sumOfWeights(); scale(_etmiss_HT_7j55,2.*norm); scale(_etmiss_HT_8j55,2.*norm); scale(_etmiss_HT_9j55,2.*norm); scale(_etmiss_HT_6j80,2.*norm); scale(_etmiss_HT_7j80,2.*norm); scale(_etmiss_HT_8j80,2.*norm); scale(_hist_njet55,norm); scale(_hist_njet80,norm); scale(_count_7j55,norm); scale(_count_8j55,norm); scale(_count_9j55,norm); scale(_count_6j80,norm); scale(_count_7j80,norm); scale(_count_8j80,norm); } private: /// @name Histograms //@{ AIDA::IHistogram1D* _etmiss_HT_7j55; AIDA::IHistogram1D* _etmiss_HT_8j55; AIDA::IHistogram1D* _etmiss_HT_9j55; AIDA::IHistogram1D* _etmiss_HT_6j80; AIDA::IHistogram1D* _etmiss_HT_7j80; AIDA::IHistogram1D* _etmiss_HT_8j80; AIDA::IHistogram1D* _hist_njet55; AIDA::IHistogram1D* _hist_njet80; AIDA::IHistogram1D* _count_7j55; AIDA::IHistogram1D* _count_8j55; AIDA::IHistogram1D* _count_9j55; AIDA::IHistogram1D* _count_6j80; AIDA::IHistogram1D* _count_7j80; AIDA::IHistogram1D* _count_8j80; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_CONF_2012_103); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1186556.cc0000644000175000017500000001717412116077757016314 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/RivetMT2.hh" namespace Rivet { class ATLAS_2012_I1186556 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_I1186556() : Analysis("ATLAS_2012_I1186556") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialize projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 20.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // Jet finder VetoedFinalState vfs; vfs.addVetoPairId(MUON); addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // all tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0,1.*GeV),"cfs"); // for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); // Book histograms _count_SR_SF = bookHistogram1D("count_SR_SF" , 1, 0., 1.); _count_SR_OF = bookHistogram1D("count_SR_OF" , 1, 0., 1.); _hist_mT2_SF_exp = bookHistogram1D("hist_mT2_SF_exp", 40 , 0., 200. ); _hist_mT2_OF_exp = bookHistogram1D("hist_mT2_OF_exp", 40 , 0., 200. ); _hist_mT2_SF_MC = bookHistogram1D("hist_mT2_SF_MC" , 500, 0., 1000.); _hist_mT2_OF_MC = bookHistogram1D("hist_mT2_OF_MC" , 500, 0., 1000.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // get the candiate jets Jets cand_jets; foreach ( const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 4.5 ) { cand_jets.push_back(jet); } } // charged tracks for isolation ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); // find the electrons ParticleVector cand_e; foreach( const Particle & e, applyProjection(event, "elecs").particlesByPt()) { // remove any leptons within 0.4 of any candidate jets bool e_near_jet = false; foreach ( const Jet& jet, cand_jets ) { double dR = deltaR(e.momentum(),jet.momentum()); if ( dR < 0.4 && dR > 0.2 ) { e_near_jet = true; break; } } if ( e_near_jet ) continue; cand_e.push_back(e); } ParticleVector cand_mu; foreach( const Particle & mu, applyProjection(event, "muons").particlesByPt()) { // remove any leptons within 0.4 of any candidate jets bool mu_near_jet = false; foreach ( const Jet& jet, cand_jets ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) { mu_near_jet = true; break; } } if ( mu_near_jet ) continue; cand_mu.push_back(mu); } // pTcone around muon track ParticleVector recon_mu; foreach ( const Particle & mu, cand_mu ) { double pTinCone = -mu.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(mu.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 1.8*GeV ) recon_mu.push_back(mu); } // pTcone around electron track ParticleVector recon_e; foreach ( const Particle & e, cand_e ) { double pTinCone = -e.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(e.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 0.1 * e.momentum().pT() ) recon_e.push_back(e); } // pTmiss FourMomentum pTmiss; foreach ( const Particle & p, applyProjection(event, "vfs").particles() ) { pTmiss -= p.momentum(); } // discard jets that overlap with electrons Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { if(fabs(jet.momentum().eta())>2.5|| jet.momentum().perp()<20.) continue; bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) recon_jets.push_back( jet ); } // put leptons into 1 vector and order by pT ParticleVector leptons(recon_e.begin(),recon_e.end()); leptons.insert(leptons.begin(),recon_mu.begin(),recon_mu.end()); std::sort(leptons.begin(),leptons.end(),cmpParticleByPt); // exactly two leptons if(leptons.size() !=2) vetoEvent; // hardest lepton pT greater the 25 (20) e(mu) if( (abs(leptons[0].pdgId())==ELECTRON && leptons[0].momentum().perp()<25.) || (abs(leptons[0].pdgId())==ELECTRON && leptons[0].momentum().perp()<20.)) vetoEvent; // require opposite sign if(leptons[0].pdgId()*leptons[1].pdgId()>0) vetoEvent; // and invariant mass > 20 double mll = (leptons[0].momentum()+leptons[1].momentum()).mass(); if(mll<20.) vetoEvent; // two jets 1st pT > 50 and second pT> 25 if(recon_jets.size()<2 || recon_jets[0].momentum().perp()<50. || recon_jets[1].momentum().perp()<25.) vetoEvent; // calculate mT2 double m_T2 = mT2::mT2( leptons[0].momentum(),leptons[1].momentum(), pTmiss,0.0 ); // zero mass invisibles // same flavour region if(leptons[0].pdgId()==-leptons[1].pdgId()) { // remove Z region if(mll>71.&&mll<111.) vetoEvent; // require at least 1 b jet unsigned int n_b=0; for(unsigned int ix=0;ix(RAND_MAX)<=0.60) ++n_b; } if(n_b==0) vetoEvent; _hist_mT2_SF_exp->fill(m_T2,weight); _hist_mT2_SF_MC ->fill(m_T2,weight); if(m_T2>120.) _count_SR_SF->fill(0.5,weight); } // opposite flavour region else { _hist_mT2_OF_exp->fill(m_T2,weight); _hist_mT2_OF_MC ->fill(m_T2,weight); if(m_T2>120.) _count_SR_OF->fill(0.5,weight); } } //@} void finalize() { double norm = 4.7* crossSection()/sumOfWeights()/femtobarn; scale(_count_SR_SF , norm); scale(_count_SR_OF , norm); scale(_hist_mT2_SF_exp,5.*norm); scale(_hist_mT2_OF_exp,5.*norm); scale(_hist_mT2_SF_MC , norm/4.7); scale(_hist_mT2_OF_MC , norm/4.7); } private: /// @name Histograms //@{ AIDA::IHistogram1D* _count_SR_SF; AIDA::IHistogram1D* _count_SR_OF; AIDA::IHistogram1D* _hist_mT2_SF_exp; AIDA::IHistogram1D* _hist_mT2_OF_exp; AIDA::IHistogram1D* _hist_mT2_SF_MC; AIDA::IHistogram1D* _hist_mT2_OF_MC; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I1186556); } rivet-1.8.3/src/Analyses/ATLAS_2010_S8919674.cc0000644000175000017500000001526312116077757016335 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/MissingMomentum.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/ClusteredPhotons.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" namespace Rivet { class ATLAS_2010_S8919674 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2010_S8919674() : Analysis("ATLAS_2010_S8919674") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { /// Initialise and register projections (selections on the final state) // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,-1.52)); eta_e.push_back(make_pair(-1.37,1.37)); eta_e.push_back(make_pair(1.52,2.47)); IdentifiedFinalState elecs(eta_e, 20.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // projection for finding the photons which have to be clustered into // the lepton later ClusteredPhotons cphotons_e(FinalState(), elecs, 0.1); addProjection(cphotons_e, "cphotons_e"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 20.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // projection for finding the photons which have to be clustered into // the lepton later ClusteredPhotons cphotons_m(FinalState(), muons, 0.1); addProjection(cphotons_m, "cphotons_m"); // Leading neutrinos for Etmiss FinalState fs; LeadingParticlesFinalState muon_neutrino(fs); muon_neutrino.addParticleIdPair(NU_MU); muon_neutrino.setLeadingOnly(true); addProjection(muon_neutrino, "muon_neutrino"); LeadingParticlesFinalState elec_neutrino(fs); elec_neutrino.addParticleIdPair(NU_E); elec_neutrino.setLeadingOnly(true); addProjection(elec_neutrino, "elec_neutrino"); // Input for the jets: No neutrinos, no muons, and no electron which // passed the electron cuts ("elecs" finalstate from above) VetoedFinalState veto; veto.addVetoOnThisFinalState(elecs); veto.addVetoPairId(MUON); veto.vetoNeutrinos(); FastJets jets(veto, FastJets::ANTIKT, 0.4); addProjection(jets, "jets"); /// book histograms _h_el_njet_inclusive = bookHistogram1D(1,1,1); _h_mu_njet_inclusive = bookHistogram1D(2,1,1); _h_el_pT_jet1 = bookHistogram1D(5,1,1); _h_mu_pT_jet1 = bookHistogram1D(6,1,1); _h_el_pT_jet2 = bookHistogram1D(7,1,1); _h_mu_pT_jet2 = bookHistogram1D(8,1,1); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); const FinalState& elecs = applyProjection(event, "elecs"); ParticleVector elec_neutrino=applyProjection(event, "elec_neutrino").particles(); if (elecs.size()==1 && elec_neutrino.size()>0) { FourMomentum lepton=elecs.particles()[0].momentum(); foreach (const Particle& photon, applyProjection(event, "cphotons_e").particles()) { lepton+=photon.momentum(); } FourMomentum p_miss = elec_neutrino[0].momentum(); double mT=sqrt(2.0*lepton.pT()*p_miss.Et()*(1.0-cos(lepton.phi()-p_miss.phi()))); if (p_miss.Et()>25.0*GeV && mT>40.0*GeV) { Jets jets; foreach (const Jet& jet, applyProjection(event, "jets").jetsByPt(20.0*GeV)) { if (fabs(jet.eta())<2.8 && deltaR(lepton, jet.momentum())>0.5) { jets.push_back(jet); } } _h_el_njet_inclusive->fill(0, weight); if (jets.size()>=1) { _h_el_njet_inclusive->fill(1, weight); _h_el_pT_jet1->fill(jets[0].momentum().pT(), weight); } if (jets.size()>=2) { _h_el_njet_inclusive->fill(2, weight); _h_el_pT_jet2->fill(jets[1].momentum().pT(), weight); } if (jets.size()>=3) { _h_el_njet_inclusive->fill(3, weight); } } } const FinalState& muons = applyProjection(event, "muons"); ParticleVector muon_neutrino=applyProjection(event, "muon_neutrino").particles(); if (muons.size()==1 && muon_neutrino.size()>0) { FourMomentum lepton=muons.particles()[0].momentum(); foreach (const Particle& photon, applyProjection(event, "cphotons_m").particles()) { lepton+=photon.momentum(); } FourMomentum p_miss = muon_neutrino[0].momentum(); double mT=sqrt(2.0*lepton.pT()*p_miss.Et()*(1.0-cos(lepton.phi()-p_miss.phi()))); if (p_miss.Et()>25.0*GeV && mT>40.0*GeV) { Jets jets; foreach (const Jet& jet, applyProjection(event, "jets").jetsByPt(20.0*GeV)) { if (fabs(jet.eta())<2.8 && deltaR(lepton, jet.momentum())>0.5) { jets.push_back(jet); } } _h_mu_njet_inclusive->fill(0, weight); if (jets.size()>=1) { _h_mu_njet_inclusive->fill(1, weight); _h_mu_pT_jet1->fill(jets[0].momentum().pT(), weight); } if (jets.size()>=2) { _h_mu_njet_inclusive->fill(2, weight); _h_mu_pT_jet2->fill(jets[1].momentum().pT(), weight); } if (jets.size()>=3) { _h_mu_njet_inclusive->fill(3, weight); } if (jets.size()>=4) { _h_mu_njet_inclusive->fill(4, weight); } } } } /// Normalise histograms etc., after the run void finalize() { double normfac=crossSection()/sumOfWeights(); scale(_h_el_njet_inclusive, normfac); scale(_h_mu_njet_inclusive, normfac); scale(_h_el_pT_jet1, normfac); scale(_h_mu_pT_jet1, normfac); scale(_h_el_pT_jet2, normfac); scale(_h_mu_pT_jet2, normfac); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_el_njet_inclusive; AIDA::IHistogram1D * _h_mu_njet_inclusive; AIDA::IHistogram1D * _h_el_pT_jet1; AIDA::IHistogram1D * _h_mu_pT_jet1; AIDA::IHistogram1D * _h_el_pT_jet2; AIDA::IHistogram1D * _h_mu_pT_jet2; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2010_S8919674); } rivet-1.8.3/src/Analyses/MC_HINC.cc0000644000175000017500000000511312116077757015042 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief MC validation analysis for higgs [-> tau tau] events class MC_HINC : public Analysis { public: /// Default constructor MC_HINC() : Analysis("MC_HINC") { } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; ZFinder hfinder(fs, -3.5, 3.5, 25.0*GeV, TAU, 115.0*GeV, 125.0*GeV, 0.0, false, false); addProjection(hfinder, "Hfinder"); _h_H_mass = bookHistogram1D("H_mass", 50, 119.7, 120.3); _h_H_pT = bookHistogram1D("H_pT", logBinEdges(100, 1.0, 0.5*sqrtS())); _h_H_pT_peak = bookHistogram1D("H_pT_peak", 25, 0.0, 25.0); _h_H_y = bookHistogram1D("H_y", 40, -4.0, 4.0); _h_H_phi = bookHistogram1D("H_phi", 25, 0.0, TWOPI); _h_lepton_pT = bookHistogram1D("lepton_pT", logBinEdges(100, 10.0, 0.25*sqrtS())); _h_lepton_eta = bookHistogram1D("lepton_eta", 40, -4.0, 4.0); } /// Do the analysis void analyze(const Event & e) { const ZFinder& hfinder = applyProjection(e, "Hfinder"); if (hfinder.bosons().size()!=1) { vetoEvent; } const double weight = e.weight(); FourMomentum hmom(hfinder.bosons()[0].momentum()); _h_H_mass->fill(hmom.mass(),weight); _h_H_pT->fill(hmom.pT(),weight); _h_H_pT_peak->fill(hmom.pT(),weight); _h_H_y->fill(hmom.rapidity(),weight); _h_H_phi->fill(hmom.azimuthalAngle(),weight); foreach (const Particle& l, hfinder.constituents()) { _h_lepton_pT->fill(l.momentum().pT(), weight); _h_lepton_eta->fill(l.momentum().eta(), weight); } } /// Finalize void finalize() { scale(_h_H_mass, crossSection()/sumOfWeights()); scale(_h_H_pT, crossSection()/sumOfWeights()); scale(_h_H_pT_peak, crossSection()/sumOfWeights()); scale(_h_H_y, crossSection()/sumOfWeights()); scale(_h_H_phi, crossSection()/sumOfWeights()); scale(_h_lepton_pT, crossSection()/sumOfWeights()); scale(_h_lepton_eta, crossSection()/sumOfWeights()); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_H_mass; AIDA::IHistogram1D * _h_H_pT; AIDA::IHistogram1D * _h_H_pT_peak; AIDA::IHistogram1D * _h_H_y; AIDA::IHistogram1D * _h_H_phi; AIDA::IHistogram1D * _h_lepton_pT; AIDA::IHistogram1D * _h_lepton_eta; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_HINC); } rivet-1.8.3/src/Analyses/ATLAS_2012_CONF_2012_001.cc0000644000175000017500000003237212116077757017112 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/RivetMT2.hh" namespace Rivet { /// @author Peter Richardson class ATLAS_2012_CONF_2012_001 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_CONF_2012_001() : Analysis("ATLAS_2012_CONF_2012_001") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 10.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); VetoedFinalState vfs; vfs.addVetoPairId(MUON); /// Jet finder addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // all tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0),"cfs"); // Book histograms _hist_leptonpT.push_back(bookHistogram1D(1,1,1)); _hist_leptonpT.push_back(bookHistogram1D(2,1,1)); _hist_leptonpT.push_back(bookHistogram1D(3,1,1)); _hist_leptonpT.push_back(bookHistogram1D(4,1,1)); _hist_njet = bookHistogram1D(5,1,1); _hist_etmiss = bookHistogram1D(6,1,1); _hist_mSFOS = bookHistogram1D(7,1,1); _hist_meff = bookHistogram1D(8,1,1); _hist_leptonpT_MC.push_back(bookHistogram1D("hist_lepton_pT_1", 26, 0., 260)); _hist_leptonpT_MC.push_back(bookHistogram1D("hist_lepton_pT_2", 15, 0., 150)); _hist_leptonpT_MC.push_back(bookHistogram1D("hist_lepton_pT_3", 20, 0., 100)); _hist_leptonpT_MC.push_back(bookHistogram1D("hist_lepton_pT_4", 20, 0., 100)); _hist_njet_MC = bookHistogram1D("hist_njet", 7, -0.5, 6.5); _hist_etmiss_MC = bookHistogram1D("hist_etmiss",11,0.,220.); _hist_mSFOS_MC = bookHistogram1D("hist_m_SFOS",13,0.,260.); _hist_meff_MC = bookHistogram1D("hist_m_eff",19,0.,950.); _count_SR1 = bookHistogram1D("count_SR1", 1, 0., 1.); _count_SR2 = bookHistogram1D("count_SR2", 1, 0., 1.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // get the jet candidates Jets cand_jets; foreach (const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 2.8 ) { cand_jets.push_back(jet); } } // candidate muons ParticleVector cand_mu; ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); foreach ( const Particle & mu, applyProjection(event, "muons").particlesByPt() ) { double pTinCone = -mu.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(mu.momentum(),track.momentum()) <= 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 1.8*GeV ) cand_mu.push_back(mu); } // candidate electrons ParticleVector cand_e; foreach ( const Particle & e, applyProjection(event, "elecs").particlesByPt() ) { double eta = e.momentum().eta(); // remove electrons with pT<15 in old veto region if( fabs(eta)>1.37 && fabs(eta) < 1.52 && e.momentum().perp()< 15.*GeV) continue; double pTinCone = -e.momentum().perp(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(e.momentum(),track.momentum()) <= 0.2 ) pTinCone += track.momentum().pT(); } if (pTinCone/e.momentum().perp()<0.1) { cand_e.push_back(e); } } // resolve jet/lepton ambiguity Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) recon_jets.push_back( jet ); } // only keep electrons more than R=0.4 from jets ParticleVector cand2_e; for(unsigned int ie=0;ie0) continue; double mtest = (cand2_e[ie].momentum()+cand2_e[ie2].momentum()).mass(); if(mtest<=20.) { pass = false; break; } } if(pass) recon_e.push_back(cand2_e[ie]); } // only keep muons more than R=0.4 from jets ParticleVector cand2_mu; for(unsigned int imu=0;imu0) continue; double mtest = (cand2_mu[imu].momentum()+cand2_mu[imu2].momentum()).mass(); if(mtest<=20.) { pass = false; break; } } if(pass) recon_mu.push_back(cand2_mu[imu]); } // pTmiss ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // now only use recon_jets, recon_mu, recon_e // reject events with less than 4 electrons and muons if ( recon_mu.size() + recon_e.size() < 4 ) { MSG_DEBUG("To few charged leptons left after selection"); vetoEvent; } // ATLAS calo problem if(rand()/static_cast(RAND_MAX)<=0.42) { foreach ( const Particle & e, recon_e ) { double eta = e.momentum().eta(); double phi = e.momentum().azimuthalAngle(MINUSPI_PLUSPI); if(eta>-0.1&&eta<1.5&&phi>-0.9&&phi<-0.5) vetoEvent; } foreach ( const Jet & jet, recon_jets ) { double eta = jet.momentum().rapidity(); double phi = jet.momentum().azimuthalAngle(MINUSPI_PLUSPI); if(jet.momentum().perp()>40 && eta>-0.1&&eta<1.5&&phi>-0.9&&phi<-0.5) vetoEvent; } } // check at least one e/mu passing trigger if( !( !recon_e .empty() && recon_e[0] .momentum().perp()>25.) && !( !recon_mu.empty() && recon_mu[0].momentum().perp()>20.) ) { MSG_DEBUG("Hardest lepton fails trigger"); vetoEvent; } // calculate meff double meff = eTmiss; foreach ( const Particle & e , recon_e ) meff += e.momentum().perp(); foreach ( const Particle & mu, recon_mu ) meff += mu.momentum().perp(); foreach ( const Jet & jet, recon_jets ) { double pT = jet.momentum().perp(); if(pT>40.) meff += pT; } double mSFOS=1e30, mdiff=1e30; // mass of SFOS pairs closest to the Z mass for(unsigned int ix=0;ix0) continue; double mtest = (recon_e[ix].momentum()+recon_e[iy].momentum()).mass(); if(fabs(mtest-90.)0) continue; double mtest = (recon_mu[ix].momentum()+recon_mu[iy].momentum()).mass(); if(fabs(mtest-91.118)pTmu) { _hist_leptonpT [ix]->fill(pTe ,weight); _hist_leptonpT_MC[ix]->fill(pTe ,weight); ++ie; } else { _hist_leptonpT [ix]->fill(pTmu,weight); _hist_leptonpT_MC[ix]->fill(pTmu,weight); ++imu; } } // njet _hist_njet ->fill(recon_jets.size(),weight); _hist_njet_MC->fill(recon_jets.size(),weight); // etmiss _hist_etmiss ->fill(eTmiss,weight); _hist_etmiss_MC->fill(eTmiss,weight); if(mSFOS<1e30) { _hist_mSFOS ->fill(mSFOS,weight); _hist_mSFOS_MC->fill(mSFOS,weight); } _hist_meff ->fill(meff,weight); _hist_meff_MC->fill(meff,weight); // finally the counts if(eTmiss>50.) { _count_SR1->fill(0.5,weight); if(mdiff>10.) _count_SR2->fill(0.5,weight); } } //@} void finalize() { double norm = crossSection()/femtobarn*2.06/sumOfWeights(); // these are number of events at 2.06fb^-1 per 10 GeV scale(_hist_leptonpT [0],norm*10.); scale(_hist_leptonpT [1],norm*10.); scale(_hist_leptonpT_MC[0],norm*10.); scale(_hist_leptonpT_MC[1],norm*10.); // these are number of events at 2.06fb^-1 per 5 GeV scale(_hist_leptonpT [2],norm*5.); scale(_hist_leptonpT [3],norm*5.); scale(_hist_leptonpT_MC[2],norm*5.); scale(_hist_leptonpT_MC[3],norm*5.); // these are number of events at 2.06fb^-1 per 20 GeV scale(_hist_etmiss ,norm*20.); scale(_hist_mSFOS ,norm*20.); scale(_hist_etmiss_MC ,norm*20.); scale(_hist_mSFOS_MC ,norm*20.); // these are number of events at 2.06fb^-1 per 50 GeV scale(_hist_meff ,norm*50.); scale(_hist_meff_MC ,norm*50.); // these are number of events at 2.06fb^-1 scale(_hist_njet ,norm); scale(_hist_njet_MC ,norm); scale(_count_SR1,norm); scale(_count_SR2,norm); } private: /// @name Histograms //@{ vector _hist_leptonpT,_hist_leptonpT_MC; AIDA::IHistogram1D* _hist_njet; AIDA::IHistogram1D* _hist_njet_MC; AIDA::IHistogram1D* _hist_etmiss; AIDA::IHistogram1D* _hist_etmiss_MC; AIDA::IHistogram1D* _hist_mSFOS; AIDA::IHistogram1D* _hist_mSFOS_MC; AIDA::IHistogram1D* _hist_meff; AIDA::IHistogram1D* _hist_meff_MC; AIDA::IHistogram1D* _count_SR1; AIDA::IHistogram1D* _count_SR2; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_CONF_2012_001); } rivet-1.8.3/src/Analyses/D0_2008_S7837160.cc0000644000175000017500000001146612116077757015730 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/WFinder.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/RivetAIDA.hh" #include "LWH/Histogram1D.h" #include "LWH/HistogramFactory.h" namespace Rivet { /// @brief D0 Run II measurement of W charge asymmetry /// @author Andy Buckley /// @author Gavin Hesketh class D0_2008_S7837160 : public Analysis { public: /// Default constructor. D0_2008_S7837160() : Analysis("D0_2008_S7837160") { // Run II W charge asymmetry } /// @name Analysis methods //@{ // Book histograms and set up projections void init() { // Projections /// @todo Use separate pT and ETmiss cuts in WFinder FinalState fs; const WFinder wfe(fs, -5, 5, 25.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2); addProjection(wfe, "WFe"); // Cross-section histograms const BinEdges& edges = binEdges(1,1,1); _h_dsigplus_deta_25_35 = bookHistogram1D("/dsigplus_deta_25_35", edges); _h_dsigminus_deta_25_35 = bookHistogram1D("/dsigminus_deta_25_35", edges); _h_dsigplus_deta_35 = bookHistogram1D("/dsigplus_deta_35", edges); _h_dsigminus_deta_35 = bookHistogram1D("/dsigminus_deta_35", edges); _h_dsigplus_deta_25 = bookHistogram1D("/dsigplus_deta_25", edges); _h_dsigminus_deta_25 = bookHistogram1D("/dsigminus_deta_25", edges); } /// Do the analysis void analyze(const Event & event) { const WFinder& wf = applyProjection(event, "WFe"); if (wf.bosons().size() == 0) { MSG_DEBUG("No W candidates found: vetoing"); vetoEvent; } // Require that leptons have Et >= 25 GeV /// @todo Use pT cut in WFinder /// @todo Any ETmiss cut? FourMomentum p_e=wf.constituentLeptons()[0].momentum(); int chg_e = PID::threeCharge(wf.constituentLeptons()[0].pdgId()); if (p_e.eta() < 0) chg_e *= -1; assert(chg_e != 0); const double weight = event.weight(); const double eta_e = fabs(p_e.eta()); const double et_e = p_e.Et(); if (et_e < 35*GeV) { // 25 <= ET < 35 if (chg_e < 0) { _h_dsigminus_deta_25_35->fill(eta_e, weight); } else { _h_dsigplus_deta_25_35->fill(eta_e, weight); } } else { // ET >= 35 if (chg_e < 0) { _h_dsigminus_deta_35->fill(eta_e, weight); } else { _h_dsigplus_deta_35->fill(eta_e, weight); } } // Inclusive: ET >= 25 if (chg_e < 0) { _h_dsigminus_deta_25->fill(eta_e, weight); } else { _h_dsigplus_deta_25->fill(eta_e, weight); } } /// Finalize void finalize() { // Construct asymmetry: (dsig+/deta - dsig-/deta) / (dsig+/deta + dsig-/deta) for each Et region AIDA::IHistogramFactory& hf = histogramFactory(); IHistogram1D* num25_35 = hf.subtract("/num25_35", *_h_dsigplus_deta_25_35, *_h_dsigminus_deta_25_35); num25_35->scale(100.); IHistogram1D* denom25_35 = hf.add("/denom25_35", *_h_dsigplus_deta_25_35, *_h_dsigminus_deta_25_35); assert(num25_35 && denom25_35); hf.divide(histoDir() + "/d01-x01-y01", *num25_35, *denom25_35); hf.destroy(num25_35); hf.destroy(denom25_35); // IHistogram1D* num35 = hf.subtract("/num35", *_h_dsigplus_deta_35, *_h_dsigminus_deta_35); num35->scale(100.); IHistogram1D* denom35 = hf.add("/denom35", *_h_dsigplus_deta_35, *_h_dsigminus_deta_35); assert(num35 && denom35); hf.divide(histoDir() + "/d01-x01-y02", *num35, *denom35); hf.destroy(num35); hf.destroy(denom35); // IHistogram1D* num25 = hf.subtract("/num25", *_h_dsigplus_deta_25, *_h_dsigminus_deta_25); num25->scale(100.); IHistogram1D* denom25 = hf.add("/denom25", *_h_dsigplus_deta_25, *_h_dsigminus_deta_25); assert(num25 && denom25); hf.divide(histoDir() + "/d01-x01-y03", *num25, *denom25); hf.destroy(num25); hf.destroy(denom25); // Delete raw histos hf.destroy(_h_dsigplus_deta_25_35); hf.destroy(_h_dsigminus_deta_25_35); hf.destroy(_h_dsigplus_deta_35); hf.destroy(_h_dsigminus_deta_35); hf.destroy(_h_dsigplus_deta_25); hf.destroy(_h_dsigminus_deta_25); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_dsigplus_deta_25_35, *_h_dsigminus_deta_25_35; AIDA::IHistogram1D *_h_dsigplus_deta_35, *_h_dsigminus_deta_35; AIDA::IHistogram1D *_h_dsigplus_deta_25, *_h_dsigminus_deta_25; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2008_S7837160); } rivet-1.8.3/src/Analyses/CDF_2001_S4563131.cc0000644000175000017500000000275212116077757016037 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief CDF Run I inclusive jet cross-section class CDF_2001_S4563131 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor CDF_2001_S4563131() : Analysis("CDF_2001_S4563131") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { FinalState fs(-4,2, 4.2); addProjection(FastJets(fs, FastJets::CDFJETCLU, 0.7), "Jets"); _h_ET = bookHistogram1D(1, 1, 1); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); Jets jets = applyProjection(event, "Jets").jetsByEt(40.0*GeV); foreach (const Jet& jet, jets) { double eta = fabs(jet.momentum().eta()); if (eta>0.1 && eta<0.7) { _h_ET->fill(jet.momentum().Et(), weight); } } } /// Normalise histograms etc., after the run void finalize() { double deta = 1.2; scale(_h_ET, crossSection()/sumOfWeights()/deta/nanobarn); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_ET; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2001_S4563131); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1091481.cc0000644000175000017500000001240712116077757016276 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "LWH/AIDataPointSet.h" #include "LWH/Histogram1D.h" #include "LWH/Profile1D.h" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include #include namespace Rivet { class ATLAS_2012_I1091481 : public Analysis { public: /// Constructor ATLAS_2012_I1091481() : Analysis("ATLAS_2012_I1091481") { } public: /// Book histograms and initialise projections before the run void init() { /// @todo Initialise and register projections here ChargedFinalState cfs100(-2.5, 2.5, 0.1*GeV); addProjection(cfs100,"CFS100"); ChargedFinalState cfs500(-2.5, 2.5, 0.5*GeV); addProjection(cfs500,"CFS500"); // collision energy int isqrts = -1; if (fuzzyEquals(sqrtS(), 900*GeV)) isqrts = 2; else if (fuzzyEquals(sqrtS(), 7*TeV)) isqrts = 1; assert(isqrts >= 0); _sE_10_100 = bookHistogram1D(isqrts, 1, 1); _sE_1_100 = bookHistogram1D(isqrts, 1, 2); _sE_10_500 = bookHistogram1D(isqrts, 1, 3); _sEta_10_100 = bookHistogram1D(isqrts, 2, 1); _sEta_1_100 = bookHistogram1D(isqrts, 2, 2); _sEta_10_500 = bookHistogram1D(isqrts, 2, 3); } // Recalculate particle energy assuming pion mass double getPionEnergy(const Particle& p) { double m_pi = 0.1396*GeV; double p2 = p.momentum().vector3().mod2()/(GeV*GeV); return sqrt(pow(m_pi,2) + p2); } // S_eta core for one event // // -1 + 1/Nch * |sum_j^Nch exp[i*(xi eta_j - Phi_j)]|^2 // double getSeta(const ParticleVector& part, double xi) { std::complex c_eta (0.0, 0.0); foreach (const Particle& p, part) { double eta = p.momentum().eta(); double phi = p.momentum().phi(); double arg = xi*eta-phi; std::complex temp(cos(arg), sin(arg)); c_eta += temp; } // Not 100% sure about the -1 here return std::norm(c_eta)/part.size() - 1.0; } // S_E core for one event // // -1 + 1/Nch * |sum_j^Nch exp[i*(omega X_j - Phi_j)]|^2 double getSE(const ParticleVector& part, double omega) { double Xj = 0.0; std::complex c_E (0.0, 0.0); for (unsigned int i=0; i temp(cos(arg), sin(arg)); c_E += temp; Xj += 0.5*getPionEnergy(part[i]); } // Not 100% sure about the -1 here return std::norm(c_E)/part.size() - 1.0; } // Convenient fill function void fillS(AIDA::IHistogram1D* h, const ParticleVector& part, double weight, bool SE=true) { // Loop over bins, take bin centers as parameter values for (int i=0; i< h->axis().bins(); i++) { double x = h->binMean(i); double y; if (SE) y = getSE(part, x); else y = getSeta(part, x); h->fill(x, y*weight); } } /// Perform the per-event analysis void analyze(const Event& event) { double weight = event.weight(); // Charged fs const ChargedFinalState& cfs100 = applyProjection(event, "CFS100"); const ParticleVector part100 = cfs100.particlesByEta(); const ChargedFinalState& cfs500 = applyProjection(event, "CFS500"); const ParticleVector& part500 = cfs500.particlesByEta(); // Veto event if the most inclusive phase space has less than 10 particles and the max pT is > 10 GeV if (part100.size() < 11) vetoEvent; double ptmax = cfs100.particlesByPt()[0].momentum().pT()/GeV; if (ptmax > 10.0) vetoEvent; // Fill the pt>100, pTmax<10 GeV histos fillS(_sE_10_100, part100, weight, true); fillS(_sEta_10_100, part100, weight, false); // Fill the pt>100, pTmax<1 GeV histos if (ptmax < 1.0) { fillS(_sE_1_100, part100, weight, true); fillS(_sEta_1_100, part100, weight, false); } // Fill the pt>500, pTmax<10 GeV histos if (part500.size() > 10) { fillS(_sE_10_500, part500, weight, true); fillS(_sEta_10_500, part500, weight, false); } } /// Normalise histograms etc., after the run void finalize() { // The scaling takes the multiple fills per event into account // --- not sure about the normalisation scale(_sE_10_100, 1.0/(sumOfWeights()*_sE_10_100->axis().bins())); scale(_sE_1_100 , 1.0/(sumOfWeights()*_sE_1_100 ->axis().bins())); scale(_sE_10_500, 1.0/(sumOfWeights()*_sE_10_500->axis().bins())); scale(_sEta_10_100, 1.0/(sumOfWeights()*_sEta_10_100->axis().bins())); scale(_sEta_1_100 , 1.0/(sumOfWeights()*_sEta_1_100 ->axis().bins())); scale(_sEta_10_500, 1.0/(sumOfWeights()*_sEta_10_500->axis().bins())); } //@} private: AIDA::IHistogram1D* _sE_10_100; AIDA::IHistogram1D* _sE_1_100; AIDA::IHistogram1D* _sE_10_500; AIDA::IHistogram1D* _sEta_10_100; AIDA::IHistogram1D* _sEta_1_100; AIDA::IHistogram1D* _sEta_10_500; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I1091481); } rivet-1.8.3/src/Analyses/ATLAS_2010_S8591806.cc0000644000175000017500000000343012116077757016317 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Tools/Logging.hh" namespace Rivet { /// @brief ATLAS minimum bias analysis at 900 GeV /// @author Frank Siegert class ATLAS_2010_S8591806 : public Analysis { public: ATLAS_2010_S8591806() : Analysis("ATLAS_2010_S8591806"), _Nevt_after_cuts(0.0) { } void init() { ChargedFinalState cfs(-2.5, 2.5, 0.5*GeV); addProjection(cfs, "CFS"); _h_dNch_deta = bookHistogram1D(2, 1, 1); _h_dNch_dpT = bookHistogram1D(3, 1, 1); _h_dNevt_dNch = bookHistogram1D(4, 1, 1); _p_meanpT_Nch = bookProfile1D(5, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); const ChargedFinalState& charged = applyProjection(event, "CFS"); if (charged.size() < 1) { vetoEvent; } _Nevt_after_cuts += weight; _h_dNevt_dNch->fill(charged.size(), weight); foreach (const Particle& p, charged.particles()) { double pT = p.momentum().pT()/GeV; _h_dNch_deta->fill(p.momentum().eta(), weight); _h_dNch_dpT->fill(pT, weight/pT); _p_meanpT_Nch->fill(charged.size(), pT, weight); } } void finalize() { double deta = 5.0; scale(_h_dNch_deta, 1.0/_Nevt_after_cuts); scale(_h_dNch_dpT, 1.0/_Nevt_after_cuts/TWOPI/deta); scale(_h_dNevt_dNch, 1.0/_Nevt_after_cuts); } private: AIDA::IHistogram1D* _h_dNch_deta; AIDA::IHistogram1D* _h_dNch_dpT; AIDA::IHistogram1D* _h_dNevt_dNch; AIDA::IProfile1D* _p_meanpT_Nch; double _Nevt_after_cuts; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2010_S8591806); } rivet-1.8.3/src/Analyses/D0_2010_S8821313.cc0000644000175000017500000000775712116077757015723 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ZFinder.hh" namespace Rivet { class D0_2010_S8821313 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor D0_2010_S8821313() : Analysis("D0_2010_S8821313") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { /// Initialise and register projections FinalState fs; vector > etaRanges_ee; etaRanges_ee.push_back(make_pair(-3.0, -1.5)); etaRanges_ee.push_back(make_pair(-1.1, 1.1)); etaRanges_ee.push_back(make_pair(1.5, 3.0)); ZFinder zfinder_ee(fs, etaRanges_ee, 20.0*GeV, ELECTRON, 70.0*GeV, 110.0*GeV, 0.2, true, true); addProjection(zfinder_ee, "zfinder_ee"); ZFinder zfinder_mm(fs, -2.0, 2.0, 15.0*GeV, MUON, 70.0*GeV, 110.0*GeV, 0.0, false, false); addProjection(zfinder_mm, "zfinder_mm"); /// Book histograms here _h_phistar_ee.addHistogram(0.0, 1.0, bookHistogram1D(1, 1, 1)); _h_phistar_ee.addHistogram(1.0, 2.0, bookHistogram1D(1, 1, 2)); _h_phistar_ee.addHistogram(2.0, 10.0, bookHistogram1D(1, 1, 3)); _h_phistar_mm.addHistogram(0.0, 1.0, bookHistogram1D(2, 1, 1)); _h_phistar_mm.addHistogram(1.0, 2.0, bookHistogram1D(2, 1, 2)); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); const ZFinder& zfinder_ee = applyProjection(event, "zfinder_ee"); if (zfinder_ee.bosons().size()==1) { ParticleVector ee=zfinder_ee.constituents(); std::sort(ee.begin(), ee.end(), cmpParticleByPt); FourMomentum eminus=PID::threeCharge(ee[0].pdgId())<0.0?ee[0].momentum():ee[1].momentum(); FourMomentum eplus=PID::threeCharge(ee[0].pdgId())<0.0?ee[1].momentum():ee[0].momentum(); double phi_acop=M_PI-mapAngle0ToPi(eminus.phi()-eplus.phi()); double costhetastar=tanh((eminus.eta()-eplus.eta())/2.0); double sin2thetastar=1.0-sqr(costhetastar); if (sin2thetastar<0.0) sin2thetastar=0.0; double phistar=tan(phi_acop/2.0)*sqrt(sin2thetastar); FourMomentum Zmom=zfinder_ee.bosons()[0].momentum(); _h_phistar_ee.fill(Zmom.rapidity(), phistar, weight); } const ZFinder& zfinder_mm = applyProjection(event, "zfinder_mm"); if (zfinder_mm.bosons().size()==1) { ParticleVector mm=zfinder_mm.constituents(); std::sort(mm.begin(), mm.end(), cmpParticleByPt); FourMomentum mminus=PID::threeCharge(mm[0].pdgId())<0.0?mm[0].momentum():mm[1].momentum(); FourMomentum mplus=PID::threeCharge(mm[0].pdgId())<0.0?mm[1].momentum():mm[0].momentum(); double phi_acop=M_PI-mapAngle0ToPi(mminus.phi()-mplus.phi()); double costhetastar=tanh((mminus.eta()-mplus.eta())/2.0); double sin2thetastar=1.0-sqr(costhetastar); if (sin2thetastar<0.0) sin2thetastar=0.0; double phistar=tan(phi_acop/2.0)*sqrt(sin2thetastar); FourMomentum Zmom=zfinder_mm.bosons()[0].momentum(); _h_phistar_mm.fill(Zmom.rapidity(), phistar, weight); } } /// Normalise histograms etc., after the run void finalize() { foreach (AIDA::IHistogram1D* hist, _h_phistar_ee.getHistograms()) { normalize(hist, 1.0); } foreach (AIDA::IHistogram1D* hist, _h_phistar_mm.getHistograms()) { normalize(hist, 1.0); } } //@} private: // Data members like post-cuts event weight counters go here private: /// @name Histograms //@{ BinnedHistogram _h_phistar_ee; BinnedHistogram _h_phistar_mm; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2010_S8821313); } rivet-1.8.3/src/Analyses/CDF_2007_S7057202.cc0000644000175000017500000000514012116077757016037 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief CDF inclusive jet cross-section using the \f$ k_\perp \f$ algorithm class CDF_2007_S7057202 : public Analysis { public: CDF_2007_S7057202() : Analysis("CDF_2007_S7057202") { } void init() { // Set up projections const FinalState fs; addProjection(FastJets(fs, FastJets::KT, 0.5), "JetsD05"); addProjection(FastJets(fs, FastJets::KT, 0.7), "JetsD07"); addProjection(FastJets(fs, FastJets::KT, 1.0), "JetsD10"); // Book histos _binnedHistosD07.addHistogram( 0, 0.1, bookHistogram1D(1, 1, 1)); _binnedHistosD07.addHistogram(0.1, 0.7, bookHistogram1D(2, 1, 1)); _binnedHistosD07.addHistogram(0.7, 1.1, bookHistogram1D(3, 1, 1)); _binnedHistosD07.addHistogram(1.1, 1.6, bookHistogram1D(4, 1, 1)); _binnedHistosD07.addHistogram(1.6, 2.1, bookHistogram1D(5, 1, 1)); _histoD05 = bookHistogram1D(6, 1, 1); _histoD10 = bookHistogram1D(7, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); foreach (const Jet& jet, applyProjection(event, "JetsD07").jets(54.0*GeV)) { double y = fabs(jet.momentum().rapidity()); _binnedHistosD07.fill(y, jet.momentum().pT(), weight); } foreach (const Jet& jet, applyProjection(event, "JetsD05").jets(54.0*GeV)) { double y = fabs(jet.momentum().rapidity()); if (y >= 0.1 && y < 0.7) _histoD05->fill(jet.momentum().pT(), weight); } foreach (const Jet& jet, applyProjection(event, "JetsD10").jets(54.0*GeV)) { double y = fabs(jet.momentum().rapidity()); if (y >= 0.1 && y < 0.7) _histoD10->fill(jet.momentum().pT(), weight); } } // Normalise histograms to cross-section void finalize() { const double xSec = crossSectionPerEvent()/nanobarn; scale(_histoD05, xSec); scale(_histoD10, xSec); // scale to xSec/yBinWidth and take into account the double yBinWidth due // to the absolute value of y _binnedHistosD07.scale(xSec/2.0, this); } private: BinnedHistogram _binnedHistosD07; // Single histogram for the \f$R=0.5\f$ \f$k_\perp\f$ jets AIDA::IHistogram1D* _histoD05; // Single histogram for the \f$R=1.0\f$ \f$k_\perp\f$ jets AIDA::IHistogram1D* _histoD10; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2007_S7057202); } rivet-1.8.3/src/Analyses/SLD_1999_S3743934.cc0000644000175000017500000007534312116077757016136 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/InitialQuarks.hh" #include "Rivet/Projections/Thrust.hh" #include "LWH/AIManagedObject.h" using namespace AIDA; namespace Rivet { /// @brief SLD flavour-dependent fragmentation paper /// @author Peter Richardson class SLD_1999_S3743934 : public Analysis { public: /// Constructor SLD_1999_S3743934() : Analysis("SLD_1999_S3743934"), _SumOfudsWeights(0.), _SumOfcWeights(0.), _SumOfbWeights(0.), _multPiPlus(4,0.),_multKPlus(4,0.),_multK0(4,0.), _multKStar0(4,0.),_multPhi(4,0.), _multProton(4,0.),_multLambda(4,0.) {} /// @name Analysis methods //@{ void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed ncharged cut"); vetoEvent; } MSG_DEBUG("Passed ncharged cut"); // Get event weight for histo filling const double weight = e.weight(); // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); int flavour = 0; const InitialQuarks& iqf = applyProjection(e, "IQF"); // If we only have two quarks (qqbar), just take the flavour. // If we have more than two quarks, look for the highest energetic q-qbar pair. ParticleVector quarks; if (iqf.particles().size() == 2) { flavour = abs( iqf.particles().front().pdgId() ); quarks = iqf.particles(); } else { map quarkmap; foreach (const Particle& p, iqf.particles()) { if (quarkmap.find(p.pdgId())==quarkmap.end()) quarkmap[p.pdgId()] = p; else if (quarkmap[p.pdgId()].momentum().E() < p.momentum().E()) quarkmap[p.pdgId()] = p; } double maxenergy = 0.; for (int i = 1; i <= 5; ++i) { double energy(0.); if (quarkmap.find( i)!=quarkmap.end()) energy += quarkmap[ i].momentum().E(); if (quarkmap.find(-i)!=quarkmap.end()) energy += quarkmap[-i].momentum().E(); if (energy > maxenergy) flavour = i; } if (quarkmap.find( flavour)!=quarkmap.end()) quarks.push_back(quarkmap[ flavour]); if (quarkmap.find(-flavour)!=quarkmap.end()) quarks.push_back(quarkmap[-flavour]); } switch (flavour) { case 1: case 2: case 3: _SumOfudsWeights += weight; break; case 4: _SumOfcWeights += weight; break; case 5: _SumOfbWeights += weight; break; } // thrust axis for projections Vector3 axis = applyProjection(e, "Thrust").thrustAxis(); double dot(0.); if (!quarks.empty()) { dot = quarks[0].momentum().vector3().dot(axis); if (quarks[0].pdgId()<0) dot *= -1.; } foreach (const Particle& p, fs.particles()) { const double xp = p.momentum().vector3().mod()/meanBeamMom; // if in quark or antiquark hemisphere bool quark = p.momentum().vector3().dot(axis)*dot>0.; _histXpChargedN->fill(xp, weight); int id = abs(p.pdgId()); // charged pions if (id==PIPLUS) { _histXpPiPlusN->fill(xp, weight); _multPiPlus[0] += weight; switch (flavour) { case DQUARK: case UQUARK: case SQUARK: _multPiPlus[1] += weight; _histXpPiPlusLight->fill(xp, weight); if ( ( quark && p.pdgId()>0 ) || ( !quark && p.pdgId()<0 )) _histRPiPlus->fill(xp, weight); else _histRPiMinus->fill(xp, weight); break; case CQUARK: _multPiPlus[2] += weight; _histXpPiPlusCharm->fill(xp, weight); break; case BQUARK: _multPiPlus[3] += weight; _histXpPiPlusBottom->fill(xp, weight); break; } } else if (id==KPLUS) { _histXpKPlusN->fill(xp, weight); _multKPlus[0] += weight; switch (flavour) { case DQUARK: case UQUARK: case SQUARK: _multKPlus[1] += weight; _tempXpKPlusLight->fill(xp, weight); _histXpKPlusLight->fill(xp, weight); if ( ( quark && p.pdgId()>0 ) || ( !quark && p.pdgId()<0 )) _histRKPlus->fill(xp, weight); else _histRKMinus->fill(xp, weight); break; break; case CQUARK: _multKPlus[2] += weight; _histXpKPlusCharm->fill(xp, weight); _tempXpKPlusCharm->fill(xp, weight); break; case BQUARK: _multKPlus[3] += weight; _histXpKPlusBottom->fill(xp, weight); break; } } else if (id==PROTON) { _histXpProtonN->fill(xp, weight); _multProton[0] += weight; switch (flavour) { case DQUARK: case UQUARK: case SQUARK: _multProton[1] += weight; _tempXpProtonLight->fill(xp, weight); _histXpProtonLight->fill(xp, weight); if ( ( quark && p.pdgId()>0 ) || ( !quark && p.pdgId()<0 )) _histRProton->fill(xp, weight); else _histRPBar ->fill(xp, weight); break; break; case CQUARK: _multProton[2] += weight; _tempXpProtonCharm->fill(xp, weight); _histXpProtonCharm->fill(xp, weight); break; case BQUARK: _multProton[3] += weight; _histXpProtonBottom->fill(xp, weight); break; } } } const UnstableFinalState& ufs = applyProjection(e, "UFS"); foreach (const Particle& p, ufs.particles()) { const double xp = p.momentum().vector3().mod()/meanBeamMom; // if in quark or antiquark hemisphere bool quark = p.momentum().vector3().dot(axis)*dot>0.; int id = abs(p.pdgId()); if (id==LAMBDA) { _multLambda[0] += weight; _histXpLambdaN->fill(xp, weight); switch (flavour) { case DQUARK: case UQUARK: case SQUARK: _multLambda[1] += weight; _histXpLambdaLight->fill(xp, weight); if ( ( quark && p.pdgId()>0 ) || ( !quark && p.pdgId()<0 )) _histRLambda->fill(xp, weight); else _histRLBar ->fill(xp, weight); break; case CQUARK: _multLambda[2] += weight; _histXpLambdaCharm->fill(xp, weight); break; case BQUARK: _multLambda[3] += weight; _histXpLambdaBottom->fill(xp, weight); break; } } else if (id==313) { _multKStar0[0] += weight; _histXpKStar0N->fill(xp, weight); switch (flavour) { case DQUARK: case UQUARK: case SQUARK: _multKStar0[1] += weight; _tempXpKStar0Light->fill(xp, weight); _histXpKStar0Light->fill(xp, weight); if ( ( quark && p.pdgId()>0 ) || ( !quark && p.pdgId()<0 )) _histRKS0 ->fill(xp, weight); else _histRKSBar0->fill(xp, weight); break; break; case CQUARK: _multKStar0[2] += weight; _tempXpKStar0Charm->fill(xp, weight); _histXpKStar0Charm->fill(xp, weight); break; case BQUARK: _multKStar0[3] += weight; _histXpKStar0Bottom->fill(xp, weight); break; } } else if (id==333) { _multPhi[0] += weight; _histXpPhiN->fill(xp, weight); switch (flavour) { case DQUARK: case UQUARK: case SQUARK: _multPhi[1] += weight; _histXpPhiLight->fill(xp, weight); break; case CQUARK: _multPhi[2] += weight; _histXpPhiCharm->fill(xp, weight); break; case BQUARK: _multPhi[3] += weight; _histXpPhiBottom->fill(xp, weight); break; } } else if (id==K0S || id == K0L) { _multK0[0] += weight; _histXpK0N->fill(xp, weight); switch (flavour) { case DQUARK: case UQUARK: case SQUARK: _multK0[1] += weight; _histXpK0Light->fill(xp, weight); break; case CQUARK: _multK0[2] += weight; _histXpK0Charm->fill(xp, weight); break; case BQUARK: _multK0[3] += weight; _histXpK0Bottom->fill(xp, weight); break; } } } } void init() { // Projections addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "FS"); addProjection(UnstableFinalState(), "UFS"); addProjection(InitialQuarks(), "IQF"); addProjection(Thrust(FinalState()), "Thrust"); _histXpPiPlusN = bookHistogram1D( 1, 1, 2); _histXpKPlusN = bookHistogram1D( 2, 1, 2); _histXpProtonN = bookHistogram1D( 3, 1, 2); _histXpChargedN = bookHistogram1D( 4, 1, 1); _histXpK0N = bookHistogram1D( 5, 1, 1); _histXpLambdaN = bookHistogram1D( 7, 1, 1); _histXpKStar0N = bookHistogram1D( 8, 1, 1); _histXpPhiN = bookHistogram1D( 9, 1, 1); _histXpPiPlusLight = bookHistogram1D(10, 1, 1); _histXpPiPlusCharm = bookHistogram1D(10, 1, 2); _histXpPiPlusBottom = bookHistogram1D(10, 1, 3); _histXpKPlusLight = bookHistogram1D(12, 1, 1); _histXpKPlusCharm = bookHistogram1D(12, 1, 2); _histXpKPlusBottom = bookHistogram1D(12, 1, 3); _histXpKStar0Light = bookHistogram1D(14, 1, 1); _histXpKStar0Charm = bookHistogram1D(14, 1, 2); _histXpKStar0Bottom = bookHistogram1D(14, 1, 3); _histXpProtonLight = bookHistogram1D(16, 1, 1); _histXpProtonCharm = bookHistogram1D(16, 1, 2); _histXpProtonBottom = bookHistogram1D(16, 1, 3); _histXpLambdaLight = bookHistogram1D(18, 1, 1); _histXpLambdaCharm = bookHistogram1D(18, 1, 2); _histXpLambdaBottom = bookHistogram1D(18, 1, 3); _histXpK0Light = bookHistogram1D(20, 1, 1); _histXpK0Charm = bookHistogram1D(20, 1, 2); _histXpK0Bottom = bookHistogram1D(20, 1, 3); _histXpPhiLight = bookHistogram1D(22, 1, 1); _histXpPhiCharm = bookHistogram1D(22, 1, 2); _histXpPhiBottom = bookHistogram1D(22, 1, 3); _tempXpKPlusCharm = bookHistogram1D( "tempXpKPlusCharm" , binEdges(13,1,1),"tempXpKPlusCharm" ,"X","Y"); _tempXpKPlusLight = bookHistogram1D( "tempXpKPlusLight" , binEdges(13,1,1),"tempXpKPlusLight" ,"X","Y"); _tempXpKStar0Charm = bookHistogram1D( "tempXpKStar0Charm", binEdges(15,1,1),"tempXpKStar0Charm","X","Y"); _tempXpKStar0Light = bookHistogram1D( "tempXpKStar0Light", binEdges(15,1,1),"tempXpKStar0Light","X","Y"); _tempXpProtonCharm = bookHistogram1D( "tempXpProtonCharm", binEdges(17,1,1),"tempXpProtonCharm","X","Y"); _tempXpProtonLight = bookHistogram1D( "tempXpProtonLight", binEdges(17,1,1),"tempXpProtonLight","X","Y"); _histRPiPlus = bookHistogram1D( 26, 1, 1); _histRPiMinus = bookHistogram1D( 26, 1, 2); _histRKS0 = bookHistogram1D( 28, 1, 1); _histRKSBar0 = bookHistogram1D( 28, 1, 2); _histRKPlus = bookHistogram1D( 30, 1, 1); _histRKMinus = bookHistogram1D( 30, 1, 2); _histRProton = bookHistogram1D( 32, 1, 1); _histRPBar = bookHistogram1D( 32, 1, 2); _histRLambda = bookHistogram1D( 34, 1, 1); _histRLBar = bookHistogram1D( 34, 1, 2); } /// Finalize void finalize() { // get the ratio plots sorted out first AIDA::IDataPointSet* h = 0; const string dir = histoDir(); h = histogramFactory().divide(dir + "/d01-x01-y01", *_histXpPiPlusN , *_histXpChargedN ); h = histogramFactory().divide(dir + "/d02-x01-y01", *_histXpKPlusN , *_histXpChargedN ); h = histogramFactory().divide(dir + "/d03-x01-y01", *_histXpProtonN , *_histXpChargedN ); h = histogramFactory().divide(dir + "/d11-x01-y01", *_histXpPiPlusCharm , *_histXpPiPlusLight); scale(h,_SumOfudsWeights/_SumOfcWeights); h = histogramFactory().divide(dir + "/d11-x01-y02", *_histXpPiPlusBottom, *_histXpPiPlusLight); scale(h,_SumOfudsWeights/_SumOfbWeights); h = histogramFactory().divide(dir + "/d13-x01-y01", *_tempXpKPlusCharm , *_tempXpKPlusLight ); scale(h,_SumOfudsWeights/_SumOfcWeights); h = histogramFactory().divide(dir + "/d13-x01-y02", *_histXpKPlusBottom , *_histXpKPlusLight ); scale(h,_SumOfudsWeights/_SumOfbWeights); h = histogramFactory().divide(dir + "/d15-x01-y01", *_tempXpKStar0Charm , *_tempXpKStar0Light); scale(h,_SumOfudsWeights/_SumOfcWeights); h = histogramFactory().divide(dir + "/d15-x01-y02", *_histXpKStar0Bottom, *_histXpKStar0Light); scale(h,_SumOfudsWeights/_SumOfbWeights); h = histogramFactory().divide(dir + "/d17-x01-y01", *_tempXpProtonCharm , *_tempXpProtonLight); scale(h,_SumOfudsWeights/_SumOfcWeights); h = histogramFactory().divide(dir + "/d17-x01-y02", *_histXpProtonBottom, *_histXpProtonLight); scale(h,_SumOfudsWeights/_SumOfbWeights); h = histogramFactory().divide(dir + "/d19-x01-y01", *_histXpLambdaCharm , *_histXpLambdaLight); scale(h,_SumOfudsWeights/_SumOfcWeights); h = histogramFactory().divide(dir + "/d19-x01-y02", *_histXpLambdaBottom, *_histXpLambdaLight); scale(h,_SumOfudsWeights/_SumOfbWeights); h = histogramFactory().divide(dir + "/d21-x01-y01", *_histXpK0Charm , *_histXpK0Light ); scale(h,_SumOfudsWeights/_SumOfcWeights); h = histogramFactory().divide(dir + "/d21-x01-y02", *_histXpK0Bottom , *_histXpK0Light ); scale(h,_SumOfudsWeights/_SumOfbWeights); h = histogramFactory().divide(dir + "/d23-x01-y01", *_histXpPhiCharm , *_histXpPhiLight ); scale(h,_SumOfudsWeights/_SumOfcWeights); h = histogramFactory().divide(dir + "/d23-x01-y02", *_histXpPhiBottom , *_histXpPhiLight ); scale(h,_SumOfudsWeights/_SumOfbWeights); histogramFactory().destroy(_tempXpKPlusCharm ); histogramFactory().destroy(_tempXpKPlusLight ); histogramFactory().destroy(_tempXpKStar0Charm); histogramFactory().destroy(_tempXpKStar0Light); histogramFactory().destroy(_tempXpProtonCharm); histogramFactory().destroy(_tempXpProtonLight); // leading particles AIDA::IHistogram1D * num = histogramFactory().subtract(dir + "/n1",*_histRPiMinus,*_histRPiPlus); AIDA::IHistogram1D * den = histogramFactory().add (dir + "/n2",*_histRPiMinus,*_histRPiPlus); h = histogramFactory().divide(dir +"/d27-x01-y01",*num,*den); histogramFactory().destroy(num); histogramFactory().destroy(den); num = histogramFactory().subtract(dir + "/n3",*_histRKSBar0,*_histRKS0); den = histogramFactory().add (dir + "/n4",*_histRKSBar0,*_histRKS0); h = histogramFactory().divide(dir +"/d29-x01-y01",*num,*den); histogramFactory().destroy(num); histogramFactory().destroy(den); num = histogramFactory().subtract(dir + "/n5",*_histRKMinus,*_histRKPlus); den = histogramFactory().add (dir + "/n6",*_histRKMinus,*_histRKPlus); h = histogramFactory().divide(dir +"/d31-x01-y01",*num,*den); histogramFactory().destroy(num); histogramFactory().destroy(den); num = histogramFactory().subtract(dir + "/n7",*_histRProton,*_histRPBar); den = histogramFactory().add (dir + "/n8",*_histRProton,*_histRPBar); h = histogramFactory().divide(dir +"/d33-x01-y01",*num,*den); histogramFactory().destroy(num); histogramFactory().destroy(den); num = histogramFactory().subtract(dir + "/n9" ,*_histRLambda,*_histRLBar); den = histogramFactory().add (dir + "/n10",*_histRLambda,*_histRLBar); h = histogramFactory().divide(dir +"/d35-x01-y01",*num,*den); histogramFactory().destroy(num); histogramFactory().destroy(den); // then the rest Analysis::scale(_histXpPiPlusN ,1./sumOfWeights()); Analysis::scale(_histXpKPlusN ,1./sumOfWeights()); Analysis::scale(_histXpProtonN ,1./sumOfWeights()); Analysis::scale(_histXpChargedN,1./sumOfWeights()); Analysis::scale(_histXpK0N,1./sumOfWeights()); Analysis::scale(_histXpLambdaN,1./sumOfWeights()); Analysis::scale(_histXpKStar0N,1./sumOfWeights()); Analysis::scale(_histXpPhiN,1./sumOfWeights()); Analysis::scale(_histXpPiPlusLight,1./_SumOfudsWeights); Analysis::scale(_histXpPiPlusCharm,1./_SumOfcWeights); Analysis::scale(_histXpPiPlusBottom,1./_SumOfbWeights); Analysis::scale(_histXpKPlusLight ,1./_SumOfudsWeights); Analysis::scale(_histXpKPlusCharm ,1./_SumOfcWeights); Analysis::scale(_histXpKPlusBottom,1./_SumOfbWeights); Analysis::scale(_histXpKStar0Light ,1./_SumOfudsWeights); Analysis::scale(_histXpKStar0Charm ,1./_SumOfcWeights); Analysis::scale(_histXpKStar0Bottom,1./_SumOfbWeights); Analysis::scale(_histXpProtonLight ,1./_SumOfudsWeights); Analysis::scale(_histXpProtonCharm ,1./_SumOfcWeights); Analysis::scale(_histXpProtonBottom,1./_SumOfbWeights); Analysis::scale(_histXpLambdaLight ,1./_SumOfudsWeights); Analysis::scale(_histXpLambdaCharm ,1./_SumOfcWeights); Analysis::scale(_histXpLambdaBottom,1./_SumOfbWeights); Analysis::scale(_histXpK0Light ,1./_SumOfudsWeights); Analysis::scale(_histXpK0Charm ,1./_SumOfcWeights); Analysis::scale(_histXpK0Bottom,1./_SumOfbWeights); Analysis::scale(_histXpPhiLight ,1./_SumOfudsWeights); Analysis::scale(_histXpPhiCharm ,1./_SumOfcWeights); Analysis::scale(_histXpPhiBottom,1./_SumOfbWeights); Analysis::scale(_histRPiPlus ,1./_SumOfudsWeights); Analysis::scale(_histRPiMinus,1./_SumOfudsWeights); Analysis::scale(_histRKS0 ,1./_SumOfudsWeights); Analysis::scale(_histRKSBar0 ,1./_SumOfudsWeights); Analysis::scale(_histRKPlus ,1./_SumOfudsWeights); Analysis::scale(_histRKMinus ,1./_SumOfudsWeights); Analysis::scale(_histRProton ,1./_SumOfudsWeights); Analysis::scale(_histRPBar ,1./_SumOfudsWeights); Analysis::scale(_histRLambda ,1./_SumOfudsWeights); Analysis::scale(_histRLBar ,1./_SumOfudsWeights); // // multiplicities AIDA::IDataPointSet * multA; AIDA::IDataPointSet * multL; AIDA::IDataPointSet * multC; AIDA::IDataPointSet * multB; AIDA::IDataPointSet * multD1; AIDA::IDataPointSet * multD2; double avgNumPartsAll,avgNumPartsLight,avgNumPartsCharm, avgNumPartsBottom; // pi+/- // all avgNumPartsAll = _multPiPlus[0]/sumOfWeights(); multA = bookDataPointSet(24, 1, 1); multA->point(0)->coordinate(1)->setValue(avgNumPartsAll); // light avgNumPartsLight = _multPiPlus[1]/_SumOfudsWeights; multL = bookDataPointSet(24, 1, 2); multL->point(0)->coordinate(1)->setValue(avgNumPartsLight); // charm avgNumPartsCharm = _multPiPlus[2]/_SumOfcWeights; multC = bookDataPointSet(24, 1, 3); multC->point(0)->coordinate(1)->setValue(avgNumPartsCharm); // bottom avgNumPartsBottom = _multPiPlus[3]/_SumOfbWeights; multB = bookDataPointSet(24, 1, 4); multB->point(0)->coordinate(1)->setValue(avgNumPartsBottom); // charm-light multD1 = bookDataPointSet(25, 1, 1); multD1->point(0)->coordinate(1)->setValue(avgNumPartsCharm -avgNumPartsLight); // bottom-light multD2 = bookDataPointSet(25, 1, 2); multD2->point(0)->coordinate(1)->setValue(avgNumPartsBottom-avgNumPartsLight); // K+/- // all avgNumPartsAll = _multKPlus[0]/sumOfWeights(); multA = bookDataPointSet(24, 2, 1); multA->point(0)->coordinate(1)->setValue(avgNumPartsAll); // light avgNumPartsLight = _multKPlus[1]/_SumOfudsWeights; multL = bookDataPointSet(24, 2, 2); multL->point(0)->coordinate(1)->setValue(avgNumPartsLight); // charm avgNumPartsCharm = _multKPlus[2]/_SumOfcWeights; multC = bookDataPointSet(24, 2, 3); multC->point(0)->coordinate(1)->setValue(avgNumPartsCharm); // bottom avgNumPartsBottom = _multKPlus[3]/_SumOfbWeights; multB = bookDataPointSet(24, 2, 4); multB->point(0)->coordinate(1)->setValue(avgNumPartsBottom); // charm-light multD1 = bookDataPointSet(25, 2, 1); multD1->point(0)->coordinate(1)->setValue(avgNumPartsCharm -avgNumPartsLight); // bottom-light multD2 = bookDataPointSet(25, 2, 2); multD2->point(0)->coordinate(1)->setValue(avgNumPartsBottom-avgNumPartsLight); // K0 // all avgNumPartsAll = _multK0[0]/sumOfWeights(); multA = bookDataPointSet(24, 3, 1); multA->point(0)->coordinate(1)->setValue(avgNumPartsAll); // light avgNumPartsLight = _multK0[1]/_SumOfudsWeights; multL = bookDataPointSet(24, 3, 2); multL->point(0)->coordinate(1)->setValue(avgNumPartsLight); // charm avgNumPartsCharm = _multK0[2]/_SumOfcWeights; multC = bookDataPointSet(24, 3, 3); multC->point(0)->coordinate(1)->setValue(avgNumPartsCharm); // bottom avgNumPartsBottom = _multK0[3]/_SumOfbWeights; multB = bookDataPointSet(24, 3, 4); multB->point(0)->coordinate(1)->setValue(avgNumPartsBottom); // charm-light multD1 = bookDataPointSet(25, 3, 1); multD1->point(0)->coordinate(1)->setValue(avgNumPartsCharm -avgNumPartsLight); // bottom-light multD2 = bookDataPointSet(25, 3, 2); multD2->point(0)->coordinate(1)->setValue(avgNumPartsBottom-avgNumPartsLight); // K*0 // all avgNumPartsAll = _multKStar0[0]/sumOfWeights(); multA = bookDataPointSet(24, 4, 1); multA->point(0)->coordinate(1)->setValue(avgNumPartsAll); // light avgNumPartsLight = _multKStar0[1]/_SumOfudsWeights; multL = bookDataPointSet(24, 4, 2); multL->point(0)->coordinate(1)->setValue(avgNumPartsLight); // charm avgNumPartsCharm = _multKStar0[2]/_SumOfcWeights; multC = bookDataPointSet(24, 4, 3); multC->point(0)->coordinate(1)->setValue(avgNumPartsCharm); // bottom avgNumPartsBottom = _multKStar0[3]/_SumOfbWeights; multB = bookDataPointSet(24, 4, 4); multB->point(0)->coordinate(1)->setValue(avgNumPartsBottom); // charm-light multD1 = bookDataPointSet(25, 4, 1); multD1->point(0)->coordinate(1)->setValue(avgNumPartsCharm -avgNumPartsLight); // bottom-light multD2 = bookDataPointSet(25, 4, 2); multD2->point(0)->coordinate(1)->setValue(avgNumPartsBottom-avgNumPartsLight); // phi // all avgNumPartsAll = _multPhi[0]/sumOfWeights(); multA = bookDataPointSet(24, 5, 1); multA->point(0)->coordinate(1)->setValue(avgNumPartsAll); // light avgNumPartsLight = _multPhi[1]/_SumOfudsWeights; multL = bookDataPointSet(24, 5, 2); multL->point(0)->coordinate(1)->setValue(avgNumPartsLight); // charm avgNumPartsCharm = _multPhi[2]/_SumOfcWeights; multC = bookDataPointSet(24, 5, 3); multC->point(0)->coordinate(1)->setValue(avgNumPartsCharm); // bottom avgNumPartsBottom = _multPhi[3]/_SumOfbWeights; multB = bookDataPointSet(24, 5, 4); multB->point(0)->coordinate(1)->setValue(avgNumPartsBottom); // charm-light multD1 = bookDataPointSet(25, 5, 1); multD1->point(0)->coordinate(1)->setValue(avgNumPartsCharm -avgNumPartsLight); // bottom-light multD2 = bookDataPointSet(25, 5, 2); multD2->point(0)->coordinate(1)->setValue(avgNumPartsBottom-avgNumPartsLight); // p // all avgNumPartsAll = _multProton[0]/sumOfWeights(); multA = bookDataPointSet(24, 6, 1); multA->point(0)->coordinate(1)->setValue(avgNumPartsAll); // light avgNumPartsLight = _multProton[1]/_SumOfudsWeights; multL = bookDataPointSet(24, 6, 2); multL->point(0)->coordinate(1)->setValue(avgNumPartsLight); // charm avgNumPartsCharm = _multProton[2]/_SumOfcWeights; multC = bookDataPointSet(24, 6, 3); multC->point(0)->coordinate(1)->setValue(avgNumPartsCharm); // bottom avgNumPartsBottom = _multProton[3]/_SumOfbWeights; multB = bookDataPointSet(24, 6, 4); multB->point(0)->coordinate(1)->setValue(avgNumPartsBottom); // charm-light multD1 = bookDataPointSet(25, 6, 1); multD1->point(0)->coordinate(1)->setValue(avgNumPartsCharm -avgNumPartsLight); // bottom-light multD2 = bookDataPointSet(25, 6, 2); multD2->point(0)->coordinate(1)->setValue(avgNumPartsBottom-avgNumPartsLight); // Lambda // all avgNumPartsAll = _multLambda[0]/sumOfWeights(); multA = bookDataPointSet(24, 7, 1); multA->point(0)->coordinate(1)->setValue(avgNumPartsAll); // light avgNumPartsLight = _multLambda[1]/_SumOfudsWeights; multL = bookDataPointSet(24, 7, 2); multL->point(0)->coordinate(1)->setValue(avgNumPartsLight); // charm avgNumPartsCharm = _multLambda[2]/_SumOfcWeights; multC = bookDataPointSet(24, 7, 3); multC->point(0)->coordinate(1)->setValue(avgNumPartsCharm); // bottom avgNumPartsBottom = _multLambda[3]/_SumOfbWeights; multB = bookDataPointSet(24, 7, 4); multB->point(0)->coordinate(1)->setValue(avgNumPartsBottom); // charm-light multD1 = bookDataPointSet(25, 7, 1); multD1->point(0)->coordinate(1)->setValue(avgNumPartsCharm -avgNumPartsLight); // bottom-light multD2 = bookDataPointSet(25, 7, 2); multD2->point(0)->coordinate(1)->setValue(avgNumPartsBottom-avgNumPartsLight); } //@} void scale(AIDA::IDataPointSet*& histo, double scale) { if (!histo) { MSG_ERROR("Failed to scale histo=NULL in analysis " << name() << " (scale=" << scale << ")"); return; } const string hpath = tree().findPath(dynamic_cast(*histo)); MSG_TRACE("Scaling histo " << hpath); vector x, y, ex, ey; for (size_t i = 0, N = histo->size(); i < N; ++i) { IDataPoint * point = histo->point(i); assert(point->dimension()==2); x .push_back(point->coordinate(0)->value()); ex.push_back(0.5*(point->coordinate(0)->errorPlus()+ point->coordinate(0)->errorMinus())); y .push_back(point->coordinate(1)->value()*scale); ey.push_back(0.5*scale*(point->coordinate(1)->errorPlus()+ point->coordinate(1)->errorMinus())); } string title = histo->title(); string xtitle = histo->xtitle(); string ytitle = histo->ytitle(); tree().mkdir("/tmpnormalize"); tree().mv(hpath, "/tmpnormalize"); if (hpath.find(" ") != string::npos) { throw Error("Histogram path '" + hpath + "' is invalid: spaces are not permitted in paths"); } AIDA::IDataPointSet* dps = datapointsetFactory().createXY(hpath, title, x, y, ex, ey); dps->setXTitle(xtitle); dps->setYTitle(ytitle); tree().rm(tree().findPath(dynamic_cast(*histo))); tree().rmdir("/tmpnormalize"); // Set histo pointer to null - it can no longer be used. histo = 0; } private: /// Store the weighted sums of numbers of charged / charged+neutral /// particles - used to calculate average number of particles for the /// inclusive single particle distributions' normalisations. double _SumOfudsWeights,_SumOfcWeights,_SumOfbWeights; vector _multPiPlus,_multKPlus,_multK0,_multKStar0, _multPhi,_multProton,_multLambda; AIDA::IHistogram1D *_histXpPiPlusSig; AIDA::IHistogram1D *_histXpPiPlusN; AIDA::IHistogram1D *_histXpKPlusSig; AIDA::IHistogram1D *_histXpKPlusN; AIDA::IHistogram1D *_histXpProtonSig; AIDA::IHistogram1D *_histXpProtonN; AIDA::IHistogram1D *_histXpChargedN; AIDA::IHistogram1D *_histXpK0N; AIDA::IHistogram1D *_histXpLambdaN; AIDA::IHistogram1D *_histXpKStar0N; AIDA::IHistogram1D *_histXpPhiN; AIDA::IHistogram1D *_histXpPiPlusLight; AIDA::IHistogram1D *_histXpPiPlusCharm; AIDA::IHistogram1D *_histXpPiPlusBottom; AIDA::IHistogram1D *_histXpKPlusLight; AIDA::IHistogram1D *_histXpKPlusCharm; AIDA::IHistogram1D *_histXpKPlusBottom; AIDA::IHistogram1D *_histXpKStar0Light; AIDA::IHistogram1D *_histXpKStar0Charm; AIDA::IHistogram1D *_histXpKStar0Bottom; AIDA::IHistogram1D *_histXpProtonLight; AIDA::IHistogram1D *_histXpProtonCharm; AIDA::IHistogram1D *_histXpProtonBottom; AIDA::IHistogram1D *_histXpLambdaLight; AIDA::IHistogram1D *_histXpLambdaCharm; AIDA::IHistogram1D *_histXpLambdaBottom; AIDA::IHistogram1D *_histXpK0Light; AIDA::IHistogram1D *_histXpK0Charm; AIDA::IHistogram1D *_histXpK0Bottom; AIDA::IHistogram1D *_histXpPhiLight; AIDA::IHistogram1D *_histXpPhiCharm; AIDA::IHistogram1D *_histXpPhiBottom; AIDA::IHistogram1D *_tempXpKPlusCharm ; AIDA::IHistogram1D *_tempXpKPlusLight ; AIDA::IHistogram1D *_tempXpKStar0Charm; AIDA::IHistogram1D *_tempXpKStar0Light; AIDA::IHistogram1D *_tempXpProtonCharm; AIDA::IHistogram1D *_tempXpProtonLight; AIDA::IHistogram1D *_histRPiPlus ; AIDA::IHistogram1D *_histRPiMinus; AIDA::IHistogram1D *_histRKS0 ; AIDA::IHistogram1D *_histRKSBar0 ; AIDA::IHistogram1D *_histRKPlus ; AIDA::IHistogram1D *_histRKMinus ; AIDA::IHistogram1D *_histRProton ; AIDA::IHistogram1D *_histRPBar ; AIDA::IHistogram1D *_histRLambda ; AIDA::IHistogram1D *_histRLBar ; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(SLD_1999_S3743934); } rivet-1.8.3/src/Analyses/BABAR_2007_S7266081.cc0000644000175000017500000001524012116077757016263 0ustar sunsun// -*- C++ -*- #include #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/UnstableFinalState.hh" #include "Rivet/ParticleName.hh" namespace Rivet { /// @brief BABAR tau lepton to three charged hadrons /// @author Peter Richardson class BABAR_2007_S7266081 : public Analysis { public: BABAR_2007_S7266081() : Analysis("BABAR_2007_S7266081"), _weight_total(0.), _weight_pipippi(0.),_weight_Kpipi(0.),_weight_KpiK(0.),_weight_KKK(0.) { } void analyze(const Event& e) { const UnstableFinalState& ufs = applyProjection(e, "UFS"); // find the taus ParticleVector taus; foreach (const Particle& p, ufs.particles()) { if(abs(p.pdgId())!=15) continue; _weight_total += 1.; ParticleVector pip,pim,Kp,Km; unsigned int nstable = 0.; // get the boost to the rest frame LorentzTransform cms_boost; if(p.momentum().vector3().mod()>0.001) cms_boost = LorentzTransform(-p.momentum().boostVector()); // find the decay products we want findDecayProducts(p.genParticle(),nstable,pip,pim,Kp,Km); if(p.pdgId()<0) { swap(pip,pim); swap(Kp ,Km ); } if(nstable!=4) continue; // pipipi if(pim.size()==2&&pip.size()==1) { _weight_pipippi += 1.; _hist_pipipi_pipipi-> fill((pip[0].momentum()+pim[0].momentum()+pim[1].momentum()).mass(),1.); _hist_pipipi_pipi-> fill((pip[0].momentum()+pim[0].momentum()).mass(),1.); _hist_pipipi_pipi-> fill((pip[0].momentum()+pim[1].momentum()).mass(),1.); } else if(pim.size()==1&&pip.size()==1&&Km.size()==1) { _weight_Kpipi += 1.; _hist_Kpipi_Kpipi-> fill((pim[0].momentum()+pip[0].momentum()+Km[0].momentum()).mass(),1.); _hist_Kpipi_Kpi-> fill((pip[0].momentum()+Km[0].momentum()).mass(),1.); _hist_Kpipi_pipi-> fill((pim[0].momentum()+pip[0].momentum()).mass(),1.); } else if(Kp.size()==1&&Km.size()==1&&pim.size()==1) { _weight_KpiK += 1.; _hist_KpiK_KpiK-> fill((Kp[0].momentum()+Km[0].momentum()+pim[0].momentum()).mass(),1.); _hist_KpiK_KK-> fill((Kp[0].momentum()+Km[0].momentum()).mass(),1.); _hist_KpiK_piK-> fill((Kp[0].momentum()+pim[0].momentum()).mass(),1.); } else if(Kp.size()==1&&Km.size()==2) { _weight_KKK += 1.; _hist_KKK_KKK-> fill((Kp[0].momentum()+Km[0].momentum()+Km[1].momentum()).mass(),1.); _hist_KKK_KK-> fill((Kp[0].momentum()+Km[0].momentum()).mass(),1.); _hist_KKK_KK-> fill((Kp[0].momentum()+Km[1].momentum()).mass(),1.); } } } // analyze void finalize() { if(_weight_pipippi>0.) { scale(_hist_pipipi_pipipi, 1./_weight_pipippi); scale(_hist_pipipi_pipi ,0.5/_weight_pipippi); } if(_weight_Kpipi>0.) { scale(_hist_Kpipi_Kpipi , 1./_weight_Kpipi); scale(_hist_Kpipi_Kpi , 1./_weight_Kpipi); scale(_hist_Kpipi_pipi , 1./_weight_Kpipi); } if(_weight_KpiK>0.) { scale(_hist_KpiK_KpiK , 1./_weight_KpiK); scale(_hist_KpiK_KK , 1./_weight_KpiK); scale(_hist_KpiK_piK , 1./_weight_KpiK); } if(_weight_KKK>0.) { scale(_hist_KKK_KKK , 1./_weight_KKK); scale(_hist_KKK_KK ,0.5/_weight_KKK); } AIDA::IDataPointSet * br_pipipi = bookDataPointSet(11,1,1); br_pipipi->point(0)->coordinate(1)->setValue ( 100.*_weight_pipippi/_weight_total); br_pipipi->point(0)->coordinate(1)->setErrorPlus ( 100.*sqrt(_weight_pipippi)/_weight_total); br_pipipi->point(0)->coordinate(1)->setErrorMinus( 100.*sqrt(_weight_pipippi)/_weight_total); AIDA::IDataPointSet * br_Kpipi = bookDataPointSet(12,1,1); br_Kpipi->point(0)->coordinate(1)->setValue ( 100.*_weight_Kpipi/_weight_total); br_Kpipi->point(0)->coordinate(1)->setErrorPlus ( 100.*sqrt(_weight_Kpipi)/_weight_total); br_Kpipi->point(0)->coordinate(1)->setErrorMinus( 100.*sqrt(_weight_Kpipi)/_weight_total); AIDA::IDataPointSet * br_KpiK = bookDataPointSet(13,1,1); br_KpiK->point(0)->coordinate(1)->setValue ( 100.*_weight_KpiK/_weight_total); br_KpiK->point(0)->coordinate(1)->setErrorPlus ( 100.*sqrt(_weight_KpiK)/_weight_total); br_KpiK->point(0)->coordinate(1)->setErrorMinus( 100.*sqrt(_weight_KpiK)/_weight_total); AIDA::IDataPointSet * br_KKK = bookDataPointSet(14,1,1); br_KKK->point(0)->coordinate(1)->setValue ( 100.*_weight_KKK/_weight_total); br_KKK->point(0)->coordinate(1)->setErrorPlus ( 100.*sqrt(_weight_KKK)/_weight_total); br_KKK->point(0)->coordinate(1)->setErrorMinus( 100.*sqrt(_weight_KKK)/_weight_total); } // finalize void init() { addProjection(UnstableFinalState(), "UFS"); _hist_pipipi_pipipi = bookHistogram1D( 1,1,1); _hist_pipipi_pipi = bookHistogram1D( 2,1,1); _hist_Kpipi_Kpipi = bookHistogram1D( 3,1,1); _hist_Kpipi_Kpi = bookHistogram1D( 4,1,1); _hist_Kpipi_pipi = bookHistogram1D( 5,1,1); _hist_KpiK_KpiK = bookHistogram1D( 6,1,1); _hist_KpiK_KK = bookHistogram1D( 7,1,1); _hist_KpiK_piK = bookHistogram1D( 8,1,1); _hist_KKK_KKK = bookHistogram1D( 9,1,1); _hist_KKK_KK = bookHistogram1D(10,1,1); } // init private: //@{ AIDA::IHistogram1D* _hist_pipipi_pipipi; AIDA::IHistogram1D* _hist_pipipi_pipi ; AIDA::IHistogram1D* _hist_Kpipi_Kpipi ; AIDA::IHistogram1D* _hist_Kpipi_Kpi ; AIDA::IHistogram1D* _hist_Kpipi_pipi ; AIDA::IHistogram1D* _hist_KpiK_KpiK ; AIDA::IHistogram1D* _hist_KpiK_KK ; AIDA::IHistogram1D* _hist_KpiK_piK ; AIDA::IHistogram1D* _hist_KKK_KKK ; AIDA::IHistogram1D* _hist_KKK_KK ; // count of weights double _weight_total,_weight_pipippi,_weight_Kpipi,_weight_KpiK,_weight_KKK; //@} void findDecayProducts(const GenParticle & p, unsigned int & nstable, ParticleVector & pip, ParticleVector & pim, ParticleVector & Kp, ParticleVector & Km) { const GenVertex* dv = p.end_vertex(); for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin(); pp != dv->particles_out_const_end(); ++pp) { int id = (*pp)->pdg_id(); if( id == PI0 ) ++nstable; else if ( id == K0S) ++nstable; else if(id==PIPLUS) { pip.push_back(Particle(**pp)); ++nstable; } else if(id==PIMINUS) { pim.push_back(Particle(**pp)); ++nstable; } else if(id==KPLUS) { Kp.push_back(Particle(**pp)); ++nstable; } else if(id==KMINUS) { Km.push_back(Particle(**pp)); ++nstable; } else if((*pp)->end_vertex()) { findDecayProducts(**pp,nstable,pip,pim,Kp,Km); } else ++nstable; } } }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(BABAR_2007_S7266081); } rivet-1.8.3/src/Analyses/D0_2008_S7662670.cc0000644000175000017500000000640112116077757015723 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief D0 differential jet cross sections /// @author Andy Buckley /// @author Gavin Hesketh class D0_2008_S7662670 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor D0_2008_S7662670() : Analysis("D0_2008_S7662670") { } //@} /// @name Analysis methods //@{ void init() { // Full final state FinalState fs; addProjection(fs, "FS"); // Jets FastJets jetpro(fs, FastJets::D0ILCONE, 0.7); addProjection(jetpro, "Jets"); // Book histograms _h_dsigdptdy_y00_04 = bookHistogram1D(1, 1, 1); _h_dsigdptdy_y04_08 = bookHistogram1D(2, 1, 1); _h_dsigdptdy_y08_12 = bookHistogram1D(3, 1, 1); _h_dsigdptdy_y12_16 = bookHistogram1D(4, 1, 1); _h_dsigdptdy_y16_20 = bookHistogram1D(5, 1, 1); _h_dsigdptdy_y20_24 = bookHistogram1D(6, 1, 1); } /// Do the analysis void analyze(const Event& event) { const double weight = event.weight(); // Skip if the event is empty const FinalState& fs = applyProjection(event, "FS"); if (fs.empty()) { MSG_DEBUG("Empty event!"); vetoEvent; } // Find the jets const JetAlg& jetpro = applyProjection(event, "Jets"); // Fill histo for each jet foreach (const Jet& j, jetpro.jets(50.0*GeV)) { const double pt = j.momentum().pT(); const double y = fabs(j.momentum().rapidity()); MSG_TRACE("Filling histos: pT = " << pt/GeV << ", |y| = " << y); if (y < 0.4) { _h_dsigdptdy_y00_04->fill(pt/GeV, weight); } else if (y < 0.8) { _h_dsigdptdy_y04_08->fill(pt/GeV, weight); } else if (y < 1.2) { _h_dsigdptdy_y08_12->fill(pt/GeV, weight); } else if (y < 1.6) { _h_dsigdptdy_y12_16->fill(pt/GeV, weight); } else if (y < 2.0) { _h_dsigdptdy_y16_20->fill(pt/GeV, weight); } else if (y < 2.4) { _h_dsigdptdy_y20_24->fill(pt/GeV, weight); } } } /// Finalize void finalize() { /// Scale by L_eff = sig_MC * L_exp / num_MC const double lumi_mc = sumOfWeights() / crossSection(); const double scalefactor = 1 / lumi_mc; scale(_h_dsigdptdy_y00_04, scalefactor); scale(_h_dsigdptdy_y04_08, scalefactor); scale(_h_dsigdptdy_y08_12, scalefactor); scale(_h_dsigdptdy_y12_16, scalefactor); scale(_h_dsigdptdy_y16_20, scalefactor); scale(_h_dsigdptdy_y20_24, scalefactor); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D* _h_dsigdptdy_y00_04; AIDA::IHistogram1D* _h_dsigdptdy_y04_08; AIDA::IHistogram1D* _h_dsigdptdy_y08_12; AIDA::IHistogram1D* _h_dsigdptdy_y12_16; AIDA::IHistogram1D* _h_dsigdptdy_y16_20; AIDA::IHistogram1D* _h_dsigdptdy_y20_24; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2008_S7662670); } rivet-1.8.3/src/Analyses/OPAL_1994_S2927284.cc0000644000175000017500000000466312116077757016240 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "LWH/AIManagedObject.h" using namespace AIDA; namespace Rivet { /// @brief OPAL charged particle fragmentation functions /// @author Peter Richardson class OPAL_1994_S2927284 : public Analysis { public: /// Constructor OPAL_1994_S2927284() : Analysis("OPAL_1994_S2927284") {} /// @name Analysis methods //@{ void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (fs.particles().size() < 2) { MSG_DEBUG("Failed ncharged cut"); vetoEvent; } MSG_DEBUG("Passed ncharged cut"); // Get event weight for histo filling const double weight = e.weight(); // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); foreach (const Particle& p, fs.particles()) { int id = abs(p.pdgId()); // charged pions if(id==PIPLUS) { _histXpPiPlus->fill(p.momentum().vector3().mod(), weight); } else if(id==KPLUS) { _histXpKPlus->fill(p.momentum().vector3().mod(), weight); } else if(id==PROTON) { _histXpProton->fill(p.momentum().vector3().mod(), weight); } } } void init() { // Projections addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "FS"); _histXpPiPlus = bookHistogram1D( 1, 1, 1); _histXpKPlus = bookHistogram1D( 2, 1, 1); _histXpProton = bookHistogram1D( 3, 1, 1); } /// Finalize void finalize() { scale(_histXpPiPlus,1./sumOfWeights()); scale(_histXpKPlus ,1./sumOfWeights()); scale(_histXpProton,1./sumOfWeights()); } //@} private: AIDA::IHistogram1D *_histXpPiPlus; AIDA::IHistogram1D *_histXpKPlus; AIDA::IHistogram1D *_histXpProton; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(OPAL_1994_S2927284); } rivet-1.8.3/src/Analyses/STAR_2006_S6500200.cc0000644000175000017500000000717012116077757016206 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief STAR identified hadron spectra in pp at 200 GeV class STAR_2006_S6500200 : public Analysis { public: /// Constructor STAR_2006_S6500200() : Analysis("STAR_2006_S6500200"), _sumWeightSelected(0.0) { } /// Book projections and histograms void init() { ChargedFinalState bbc1(-5.0,-3.3, 0.0*GeV); // beam-beam-counter trigger ChargedFinalState bbc2( 3.3, 5.0, 0.0*GeV); // beam-beam-counter trigger addProjection(bbc1, "BBC1"); addProjection(bbc2, "BBC2"); IdentifiedFinalState pionfs(-2.5, 2.5, 0.3*GeV); IdentifiedFinalState protonfs(-2.5, 2.5, 0.4*GeV); pionfs.acceptIdPair(PIPLUS); protonfs.acceptIdPair(PROTON); addProjection(pionfs, "PIONFS"); addProjection(protonfs, "PROTONFS"); _h_pT_piplus = bookHistogram1D(1, 1, 1); _h_pT_piminus = bookHistogram1D(1, 2, 1); _h_pT_proton = bookHistogram1D(1, 3, 1); _h_pT_antiproton = bookHistogram1D(1, 4, 1); } /// Do the analysis void analyze(const Event& event) { const ChargedFinalState& bbc1 = applyProjection(event, "BBC1"); const ChargedFinalState& bbc2 = applyProjection(event, "BBC2"); if (bbc1.size()<1 || bbc2.size()<1) { MSG_DEBUG("Failed beam-beam-counter trigger"); vetoEvent; } const double weight = event.weight(); const IdentifiedFinalState& pionfs = applyProjection(event, "PIONFS"); foreach (const Particle& p, pionfs.particles()) { if (fabs(p.momentum().rapidity()) < 0.5) { const double pT = p.momentum().pT() / GeV; if (p.pdgId()>0) { _h_pT_piplus->fill(pT, weight/pT); } else { _h_pT_piminus->fill(pT, weight/pT); } } } const IdentifiedFinalState& protonfs = applyProjection(event, "PROTONFS"); foreach (const Particle& p, protonfs.particles()) { if (fabs(p.momentum().rapidity()) < 0.5) { const double pT = p.momentum().pT() / GeV; if (p.pdgId()>0) { _h_pT_proton->fill(pT, weight/pT); } else { _h_pT_antiproton->fill(pT, weight/pT); } } } _sumWeightSelected += event.weight(); } /// Finalize void finalize() { AIDA::IHistogramFactory& hf = histogramFactory(); const string dir = histoDir(); hf.divide(dir + "/d02-x01-y01", *_h_pT_piminus, *_h_pT_piplus); hf.divide(dir + "/d02-x02-y01", *_h_pT_antiproton, *_h_pT_proton); hf.divide(dir + "/d02-x03-y01", *_h_pT_proton, *_h_pT_piplus); hf.divide(dir + "/d02-x04-y01", *_h_pT_antiproton, *_h_pT_piminus); scale(_h_pT_piplus, 1./(2*M_PI*_sumWeightSelected)); scale(_h_pT_piminus, 1./(2*M_PI*_sumWeightSelected)); scale(_h_pT_proton, 1./(2*M_PI*_sumWeightSelected)); scale(_h_pT_antiproton, 1./(2*M_PI*_sumWeightSelected)); MSG_DEBUG("sumOfWeights() = " << sumOfWeights()); MSG_DEBUG("_sumWeightSelected = " << _sumWeightSelected); } private: double _sumWeightSelected; AIDA::IHistogram1D * _h_pT_piplus; AIDA::IHistogram1D * _h_pT_piminus; AIDA::IHistogram1D * _h_pT_proton; AIDA::IHistogram1D * _h_pT_antiproton; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(STAR_2006_S6500200); } rivet-1.8.3/src/Analyses/ATLAS_2011_S8971293.cc0000644000175000017500000000465512116077757016334 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { class ATLAS_2011_S8971293 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2011_S8971293() : Analysis("ATLAS_2011_S8971293") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { /// Initialise and register projections addProjection(FastJets(FinalState(), FastJets::ANTIKT, 0.6), "AntiKtJets06"); /// Book histograms _h_deltaPhi.addHistogram(110., 160., bookHistogram1D(1, 1, 1)); _h_deltaPhi.addHistogram(160., 210., bookHistogram1D(1, 1, 2)); _h_deltaPhi.addHistogram(210., 260., bookHistogram1D(1, 1, 3)); _h_deltaPhi.addHistogram(260., 310., bookHistogram1D(1, 1, 4)); _h_deltaPhi.addHistogram(310., 400., bookHistogram1D(1, 1, 5)); _h_deltaPhi.addHistogram(400., 500., bookHistogram1D(1, 1, 6)); _h_deltaPhi.addHistogram(500., 600., bookHistogram1D(1, 1, 7)); _h_deltaPhi.addHistogram(600., 800., bookHistogram1D(1, 1, 8)); _h_deltaPhi.addHistogram(800., 10000., bookHistogram1D(1, 1, 9)); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); Jets jets06; foreach (const Jet& jet, applyProjection(event, "AntiKtJets06").jetsByPt(100.0*GeV)) { if (fabs(jet.momentum().rapidity()) < 2.8) { jets06.push_back(jet); } } if (jets06.size()>1){ if (fabs(jets06[0].momentum().rapidity())<0.8 && fabs(jets06[1].momentum().rapidity())<0.8) { double observable = mapAngle0ToPi(jets06[0].momentum().phi()-jets06[1].momentum().phi()) / M_PI; _h_deltaPhi.fill(jets06[0].momentum().pT(), observable, weight); } } } /// Normalise histograms etc., after the run void finalize() { foreach (AIDA::IHistogram1D* hist, _h_deltaPhi.getHistograms()) { normalize(hist, 1/M_PI); } } //@} private: /// @name Histograms //@{ BinnedHistogram _h_deltaPhi; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_S8971293); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1119557.cc0000644000175000017500000002326012117140370016261 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { namespace { // unnamed namespace // Forward declarations of calculator functions: implementations at bottom of file double getWidth(const Jet& jet); double getEcc(const Jet& jet); double getPFlow(const Jet& jet); double getAngularity(const Jet& jet); } class ATLAS_2012_I1119557 : public Analysis { public: ATLAS_2012_I1119557() : Analysis("ATLAS_2012_I1119557") { } void init() { const FinalState fs; addProjection(fs, "FinalState"); FastJets fj06(fs, FastJets::ANTIKT, 0.6); addProjection(fj06, "AntiKT06"); FastJets fj10(fs, FastJets::ANTIKT, 1.0); addProjection(fj10, "AntiKT10"); for (size_t alg = 0; alg < 2; ++alg) { _hs_mass[alg] = bookHistogram1D(1, alg+1, 1); _hs_width[alg] = bookHistogram1D(2, alg+1, 1); /// @todo Commented eccentricity out for now: reinstate // _hs_eccentricity[alg] = bookHistogram1D(3, alg+1, 1); } _h_planarFlow = bookHistogram1D(4, 2, 1); _h_angularity = bookHistogram1D(5, 1, 1); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); Jets jetAr[2]; jetAr[0] = applyProjection(event, "AntiKT06").jetsByPt(300.*GeV, MAXDOUBLE, -2.0, 2.0); jetAr[1] = applyProjection(event, "AntiKT10").jetsByPt(300.*GeV, MAXDOUBLE, -2.0, 2.0); for (size_t alg = 0; alg < 2; ++alg) { // Require at least one jet if (jetAr[alg].size() < 1) continue; // The leading jet const Jet& jet = jetAr[alg][0]; const double m = jet.momentum().mass(); const double eta = jet.momentum().eta(); _hs_mass[alg]->fill(m/GeV, weight); _hs_width[alg]->fill(getWidth(jet), weight); /// @todo Commented eccentricity out for now: reinstate // if (fabs(eta) < 0.7 && m > 100*GeV) _hs_eccentricity[alg]->fill(getEcc(jet), weight); if (alg == 1 && fabs(eta) < 0.7 && inRange(m/GeV, 130., 210.)) _h_planarFlow->fill(getPFlow(jet), weight); if (alg == 0 && fabs(eta) < 0.7 && inRange(m/GeV, 100., 130.)) _h_angularity->fill(getAngularity(jet), weight); } } /// Normalise histograms etc., after the run void finalize() { for (size_t alg = 0; alg < 2; ++alg) { normalize(_hs_mass[alg]); normalize(_hs_width[alg]); /// @todo Commented eccentricity out for now: reinstate // normalize(_hs_eccentricity[alg]); } normalize(_h_planarFlow); normalize(_h_angularity); } private: AIDA::IHistogram1D *_hs_mass[2]; AIDA::IHistogram1D *_hs_width[2]; /// @todo Commented eccentricity out for now: reinstate // AIDA::IHistogram1D *_hs_eccentricity[2]; AIDA::IHistogram1D *_h_planarFlow; AIDA::IHistogram1D *_h_angularity; }; DECLARE_RIVET_PLUGIN(ATLAS_2012_I1119557); namespace { // Adapted code from Lily /// @todo Convert to use the Rivet rotation matrix code (should be simpler) FourMomentum RotateAxes(const Rivet::FourMomentum& p, double M[3][3]){ double px_rot=M[0][0]*(p.px())+M[0][1]*(p.py())+M[0][2]*(p.pz()); double py_rot=M[1][0]*(p.px())+M[1][1]*(p.py())+M[1][2]*(p.pz()); double pz_rot=M[2][0]*(p.px())+M[2][1]*(p.py())+M[2][2]*(p.pz()); return FourMomentum(p.E(), px_rot, py_rot, pz_rot); } // Untouched code from Lily /// @todo Convert to use the Rivet rotation matrix code (should be simpler) void CalcRotationMatrix(double nvec[3],double rot_mat[3][3]){ // clear momentum tensor for (size_t i = 0; i < 3; i++) { for (size_t j = 0; j < 3; j++) { rot_mat[i][j]=0.; } } double mag3=sqrt(nvec[0]*nvec[0] + nvec[1]*nvec[1]+ nvec[2]*nvec[2]); double mag2=sqrt(nvec[0]*nvec[0] + nvec[1]*nvec[1]); /// @todo cout is not a valid response to a numerical error! Is the error condition reported?!? Assert added by AB for Rivet 1.8.2 assert(mag3 > 0); if (mag3 <= 0) { cout << "rotation axis is null" << endl; return; } double ctheta0 = nvec[2]/mag3; double stheta0 = mag2/mag3; double cphi0 = (mag2 > 0.) ? nvec[0]/mag2 : 0; double sphi0 = (mag2 > 0.) ? nvec[1]/mag2 : 0; rot_mat[0][0] = -ctheta0*cphi0; rot_mat[0][1] = -ctheta0*sphi0; rot_mat[0][2] = stheta0; rot_mat[1][0] = sphi0; rot_mat[1][1] = -1.*cphi0; rot_mat[1][2] = 0.; rot_mat[2][0] = stheta0*cphi0; rot_mat[2][1] = stheta0*sphi0; rot_mat[2][2] = ctheta0; } /// Jet width calculation double getWidth(const Jet& jet) { const double phi_jet = jet.phi(); const double eta_jet = jet.eta(); double width(0), pTsum(0); foreach (const Particle& p, jet.particles()) { double pT = p.momentum().pT(); double eta = p.momentum().eta(); double phi = p.momentum().phi(); width += sqrt(pow(phi_jet - phi,2) + pow(eta_jet - eta, 2)) * pT; pTsum += pT; } return (pTsum != 0.0) ? width/pTsum : -1; } /// Eccentricity calculation, copied and adapted from Lily's code double getEcc(const Jet& jet) { vector phis; vector etas; vector energies; double etaSum(0), phiSum(0), eTot(0); foreach (const Particle& p, jet.particles()) { const double E = p.momentum().E(); const double eta = p.momentum().eta(); energies.push_back(E); etas.push_back(jet.momentum().eta() - eta); eTot += E; etaSum += eta * E; /// @todo Replace with the Rivet deltaPhi function (or the mapAngleTo* functions) double dPhi = jet.momentum().phi() - p.momentum().phi(); //if DPhi does not lie within 0 < DPhi < PI take 2*PI off DPhi //this covers cases where DPhi is greater than PI if( fabs( dPhi - TWOPI ) < fabs(dPhi) ) dPhi -= TWOPI; //if DPhi does not lie within -PI < DPhi < 0 add 2*PI to DPhi //this covers cases where DPhi is less than -PI else if( fabs(dPhi + TWOPI) < fabs(dPhi) ) dPhi += TWOPI; phis.push_back(dPhi); phiSum += dPhi * E; } //these are the "pull" away from the jet axis etaSum = etaSum/eTot; phiSum = phiSum/eTot; // now for every cluster we alter its position by moving it: // away from the new axis if it is in the direction of -ve pull // closer to the new axis if it is in the direction of +ve pull // the effect of this will be that the new energy weighted center will be on the old jet axis. double little_x(0), little_y(0); for (size_t k = 0; k < jet.particles().size(); ++k) { little_x+= etas[k]-etaSum; little_y+= phis[k]-phiSum; etas[k] = etas[k]-etaSum; phis[k] = phis[k]-phiSum; } double x1(0), x2(0); for (size_t i = 0; i < jet.particles().size(); ++i) { x1 += 2. * energies[i]* etas[i] * phis[i]; // this is 2*X*Y x2 += energies[i]*(phis[i] * phis[i] - etas[i] * etas[i] ); // this is X^2 - Y^2 } // Variance calculations double theta = .5*atan2(x1, x2); double sinTheta =sin(theta); double cosTheta = cos(theta); double theta2 = theta + 0.5*PI; double sinThetaPrime = sin(theta2); double cosThetaPrime = cos(theta2); double varX(0), varY(0); for (size_t i = 0; i < jet.particles().size(); i++) { const double x = sinTheta*etas[i] + cosTheta*phis[i]; const double y = sinThetaPrime*etas[i] + cosThetaPrime*phis[i]; varX += energies[i]* sqr(x); varY += energies[i]* sqr(y); } const double varianceMax = max(varX, varY); const double varianceMin = min(varX, varY); const double ecc = (varianceMax != 0.0) ? 1 - varianceMin/varianceMax : -1; return ecc; } /// Planar flow calculation, copied and adapted from Lily's code double getPFlow(const Jet& jet) { const double phi0 = jet.momentum().phi(); const double eta0 = jet.momentum().eta(); double nref[3]; //< @todo 3-vector to rotate x to? Use Rivet vector classes nref[0] = cos(phi0)/cosh(eta0); nref[1] = sin(phi0)/cosh(eta0); nref[2] = tanh(eta0); // Rotation matrix to align with nref double rotationMatrix[3][3]; CalcRotationMatrix(nref, rotationMatrix); double iw00(0.), iw01(0.), iw11(0.), iw10(0.); foreach (const Particle& p, jet.particles()) { double a = 1./(p.momentum().E()*jet.momentum().mass()); FourMomentum rotclus = RotateAxes(p.momentum(), rotationMatrix); iw00 += a*pow(rotclus.px(), 2); iw01 += a*rotclus.px()*rotclus.py(); iw10 += a*rotclus.py()*rotclus.px(); iw11 += a*pow(rotclus.py(), 2); } const double det = iw00*iw11 - iw01*iw10; const double trace = iw00 + iw11; const double pf = (trace != 0.0) ? (4.0*det)/sqr(trace) : -1; return pf; } /// Angularity calculation, copied and adapted from Lily's code double getAngularity(const Jet& jet) { double sum_a = 0.; // a can take any value < 2 (e.g. 1,0,-0.5 etc) for infrared safety const double a = -2.; foreach (const Particle& p, jet.particles()) { double e_i = p.momentum().E(); double theta_i = jet.momentum().angle(p.momentum()); double e_theta_i = e_i * pow(sin(theta_i), a) * pow(1-cos(theta_i), 1-a); sum_a += e_theta_i; } return (jet.momentum().mass() != 0.0) ? sum_a/jet.momentum().mass() : -1; } } } rivet-1.8.3/src/Analyses/ATLAS_2011_S9128077.cc0000644000175000017500000002261212116077757016320 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { class ATLAS_2011_S9128077 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2011_S9128077() : Analysis("ATLAS_2011_S9128077") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { const FinalState fs; FastJets j4(fs, FastJets::ANTIKT, 0.4); j4.useInvisibles(); addProjection(j4, "AntiKtJets04"); FastJets j6(fs, FastJets::ANTIKT, 0.6); j6.useInvisibles(); addProjection(j6, "AntiKtJets06"); _h_jet_multi_inclusive = bookHistogram1D(1, 1, 1); _h_jet_multi_ratio = bookDataPointSet(2, 1, 1); _h_jet_pT.resize(4); _h_jet_pT[0] = bookHistogram1D(3, 1, 1); _h_jet_pT[1] = bookHistogram1D(4, 1, 1); _h_jet_pT[2] = bookHistogram1D(5, 1, 1); _h_jet_pT[3] = bookHistogram1D(6, 1, 1); _h_HT_2 = bookHistogram1D(7, 1, 1); _h_HT_3 = bookHistogram1D(8, 1, 1); _h_HT_4 = bookHistogram1D(9, 1, 1); /// temporary histograms which will be divided in the end for the dsigma3/dsigma2 ratios _h_tmp_pTlead_R06_60_2 = bookHistogram1D("tmp1", binEdges(10, 1, 1)); _h_tmp_pTlead_R06_80_2 = bookHistogram1D("tmp2", binEdges(11, 1, 1)); _h_tmp_pTlead_R06_110_2 = bookHistogram1D("tmp3", binEdges(12, 1, 1)); _h_tmp_pTlead_R06_60_3 = bookHistogram1D("tmp4", binEdges(10, 1, 1)); _h_tmp_pTlead_R06_80_3 = bookHistogram1D("tmp5", binEdges(11, 1, 1)); _h_tmp_pTlead_R06_110_3 = bookHistogram1D("tmp6", binEdges(12, 1, 1)); _h_tmp_pTlead_R04_60_2 = bookHistogram1D("tmp7", binEdges(13, 1, 1)); _h_tmp_pTlead_R04_80_2 = bookHistogram1D("tmp8", binEdges(14, 1, 1)); _h_tmp_pTlead_R04_110_2 = bookHistogram1D("tmp9", binEdges(15, 1, 1)); _h_tmp_pTlead_R04_60_3 = bookHistogram1D("tmp10", binEdges(13, 1, 1)); _h_tmp_pTlead_R04_80_3 = bookHistogram1D("tmp11", binEdges(14, 1, 1)); _h_tmp_pTlead_R04_110_3 = bookHistogram1D("tmp12", binEdges(15, 1, 1)); _h_tmp_HT2_R06_2 = bookHistogram1D("tmp13", binEdges(16, 1, 1)); _h_tmp_HT2_R06_3 = bookHistogram1D("tmp14", binEdges(16, 1, 1)); _h_tmp_HT2_R04_2 = bookHistogram1D("tmp15", binEdges(17, 1, 1)); _h_tmp_HT2_R04_3 = bookHistogram1D("tmp16", binEdges(17, 1, 1)); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); vector jets04; foreach (const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(60.0*GeV)) { if (fabs(jet.momentum().eta())<2.8) { jets04.push_back(jet.momentum()); } } if (jets04.size()>1 && jets04[0].pT()>80.0*GeV) { for (size_t i=2; i<=jets04.size(); ++i) { _h_jet_multi_inclusive->fill(i, weight); } double HT=0.0; for (size_t i=0; ifill(jets04[i].pT(), weight); HT += jets04[i].pT(); } if (jets04.size()>=2) _h_HT_2->fill(HT, weight); if (jets04.size()>=3) _h_HT_3->fill(HT, weight); if (jets04.size()>=4) _h_HT_4->fill(HT, weight); double pT1(jets04[0].pT()), pT2(jets04[1].pT()); double HT2=pT1+pT2; if (jets04.size()>=2) { _h_tmp_HT2_R04_2->fill(HT2, weight); _h_tmp_pTlead_R04_60_2->fill(pT1, weight); if (pT2>80.0*GeV) _h_tmp_pTlead_R04_80_2->fill(pT1, weight); if (pT2>110.0*GeV) _h_tmp_pTlead_R04_110_2->fill(pT1, weight); } if (jets04.size()>=3) { double pT3(jets04[2].pT()); _h_tmp_HT2_R04_3->fill(HT2, weight); _h_tmp_pTlead_R04_60_3->fill(pT1, weight); if (pT3>80.0*GeV) _h_tmp_pTlead_R04_80_3->fill(pT1, weight); if (pT3>110.0*GeV) _h_tmp_pTlead_R04_110_3->fill(pT1, weight); } } vector jets06; foreach (const Jet& jet, applyProjection(event, "AntiKtJets06").jetsByPt(60.0*GeV)) { if (fabs(jet.momentum().eta())<2.8) { jets06.push_back(jet.momentum()); } } if (jets06.size()>1 && jets06[0].pT()>80.0*GeV) { double pT1(jets06[0].pT()), pT2(jets06[1].pT()); double HT2=pT1+pT2; if (jets06.size()>=2) { _h_tmp_HT2_R06_2->fill(HT2, weight); _h_tmp_pTlead_R06_60_2->fill(pT1, weight); if (pT2>80.0*GeV) _h_tmp_pTlead_R06_80_2->fill(pT1, weight); if (pT2>110.0*GeV) _h_tmp_pTlead_R06_110_2->fill(pT1, weight); } if (jets06.size()>=3) { double pT3(jets06[2].pT()); _h_tmp_HT2_R06_3->fill(HT2, weight); _h_tmp_pTlead_R06_60_3->fill(pT1, weight); if (pT3>80.0*GeV) _h_tmp_pTlead_R06_80_3->fill(pT1, weight); if (pT3>110.0*GeV) _h_tmp_pTlead_R06_110_3->fill(pT1, weight); } } } /// Normalise histograms etc., after the run void finalize() { // Fill inclusive jet multi ratio int Nbins = _h_jet_multi_inclusive->axis().bins(); std::vector ratio(Nbins-1, 0.0); std::vector err(Nbins-1, 0.0); for (int i = 0; i < Nbins-1; ++i) { if (_h_jet_multi_inclusive->binHeight(i) > 0.0 && _h_jet_multi_inclusive->binHeight(i+1) > 0.0) { ratio[i] = _h_jet_multi_inclusive->binHeight(i+1)/_h_jet_multi_inclusive->binHeight(i); double relerr_i = _h_jet_multi_inclusive->binError(i)/_h_jet_multi_inclusive->binHeight(i); double relerr_j = _h_jet_multi_inclusive->binError(i+1)/_h_jet_multi_inclusive->binHeight(i+1); err[i] = ratio[i] * (relerr_i + relerr_j); } } _h_jet_multi_ratio->setCoordinate(1, ratio, err); scale(_h_jet_multi_inclusive, crossSectionPerEvent()); scale(_h_jet_pT[0], crossSectionPerEvent()); scale(_h_jet_pT[1], crossSectionPerEvent()); scale(_h_jet_pT[2], crossSectionPerEvent()); scale(_h_jet_pT[3], crossSectionPerEvent()); scale(_h_HT_2, crossSectionPerEvent()); scale(_h_HT_3, crossSectionPerEvent()); scale(_h_HT_4, crossSectionPerEvent()); /// create ratio histograms histogramFactory().divide(histoDir() + "/d10-x01-y01", *_h_tmp_pTlead_R06_60_3, *_h_tmp_pTlead_R06_60_2); histogramFactory().divide(histoDir() + "/d11-x01-y01", *_h_tmp_pTlead_R06_80_3, *_h_tmp_pTlead_R06_80_2); histogramFactory().divide(histoDir() + "/d12-x01-y01", *_h_tmp_pTlead_R06_110_3, *_h_tmp_pTlead_R06_110_2); histogramFactory().divide(histoDir() + "/d13-x01-y01", *_h_tmp_pTlead_R04_60_3, *_h_tmp_pTlead_R04_60_2); histogramFactory().divide(histoDir() + "/d14-x01-y01", *_h_tmp_pTlead_R04_80_3, *_h_tmp_pTlead_R04_80_2); histogramFactory().divide(histoDir() + "/d15-x01-y01", *_h_tmp_pTlead_R04_110_3, *_h_tmp_pTlead_R04_110_2); histogramFactory().divide(histoDir() + "/d16-x01-y01", *_h_tmp_HT2_R06_3, *_h_tmp_HT2_R06_2); histogramFactory().divide(histoDir() + "/d17-x01-y01", *_h_tmp_HT2_R04_3, *_h_tmp_HT2_R04_2); histogramFactory().destroy(_h_tmp_pTlead_R06_60_2); histogramFactory().destroy(_h_tmp_pTlead_R06_80_2); histogramFactory().destroy(_h_tmp_pTlead_R06_110_2); histogramFactory().destroy(_h_tmp_pTlead_R06_60_3); histogramFactory().destroy(_h_tmp_pTlead_R06_80_3); histogramFactory().destroy(_h_tmp_pTlead_R06_110_3); histogramFactory().destroy(_h_tmp_pTlead_R04_60_2); histogramFactory().destroy(_h_tmp_pTlead_R04_80_2); histogramFactory().destroy(_h_tmp_pTlead_R04_110_2); histogramFactory().destroy(_h_tmp_pTlead_R04_60_3); histogramFactory().destroy(_h_tmp_pTlead_R04_80_3); histogramFactory().destroy(_h_tmp_pTlead_R04_110_3); histogramFactory().destroy(_h_tmp_HT2_R06_2); histogramFactory().destroy(_h_tmp_HT2_R06_3); histogramFactory().destroy(_h_tmp_HT2_R04_2); histogramFactory().destroy(_h_tmp_HT2_R04_3); } //@} private: // Data members like post-cuts event weight counters go here private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_jet_multi_inclusive; AIDA::IDataPointSet * _h_jet_multi_ratio; vector _h_jet_pT; AIDA::IHistogram1D * _h_HT_2; AIDA::IHistogram1D * _h_HT_3; AIDA::IHistogram1D * _h_HT_4; /// temporary histograms which will be divided in the end for the dsigma3/dsigma2 ratios AIDA::IHistogram1D * _h_tmp_pTlead_R06_60_2; AIDA::IHistogram1D * _h_tmp_pTlead_R06_80_2; AIDA::IHistogram1D * _h_tmp_pTlead_R06_110_2; AIDA::IHistogram1D * _h_tmp_pTlead_R06_60_3; AIDA::IHistogram1D * _h_tmp_pTlead_R06_80_3; AIDA::IHistogram1D * _h_tmp_pTlead_R06_110_3; AIDA::IHistogram1D * _h_tmp_pTlead_R04_60_2; AIDA::IHistogram1D * _h_tmp_pTlead_R04_80_2; AIDA::IHistogram1D * _h_tmp_pTlead_R04_110_2; AIDA::IHistogram1D * _h_tmp_pTlead_R04_60_3; AIDA::IHistogram1D * _h_tmp_pTlead_R04_80_3; AIDA::IHistogram1D * _h_tmp_pTlead_R04_110_3; AIDA::IHistogram1D * _h_tmp_HT2_R06_2; AIDA::IHistogram1D * _h_tmp_HT2_R06_3; AIDA::IHistogram1D * _h_tmp_HT2_R04_2; AIDA::IHistogram1D * _h_tmp_HT2_R04_3; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_S9128077); } rivet-1.8.3/src/Analyses/CDF_2005_S6217184.cc0000644000175000017500000000771312116077757016053 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/JetShape.hh" namespace Rivet { /// @brief CDF Run II jet shape analysis /// @author Andy Buckley class CDF_2005_S6217184 : public Analysis { public: /// Constructor CDF_2005_S6217184() : Analysis("CDF_2005_S6217184") { } /// @name Analysis methods //@{ void init() { // Set up projections const FinalState fs(-2.0, 2.0); addProjection(fs, "FS"); FastJets fj(fs, FastJets::CDFMIDPOINT, 0.7); fj.useInvisibles(); addProjection(fj, "Jets"); // Specify pT bins _ptedges += 37.0, 45.0, 55.0, 63.0, 73.0, 84.0, 97.0, 112.0, 128.0, 148.0, 166.0, 186.0, 208.0, 229.0, 250.0, 277.0, 304.0, 340.0, 380.0; // Register a jet shape projection and histogram for each pT bin for (size_t i = 0; i < 6; ++i) { for (size_t j = 0; j < 3; ++j) { const size_t k = i*3 + j; stringstream ss; ss << "JetShape" << k; const string pname = ss.str(); _jsnames_pT[k] = pname; const JetShape jsp(fj, 0.0, 0.7, 7, _ptedges[k], _ptedges[k+1], 0.1, 0.7, RAPIDITY); addProjection(jsp, pname); _profhistRho_pT[k] = bookProfile1D(i+1, 1, j+1); _profhistPsi_pT[k] = bookProfile1D(6+i+1, 1, j+1); } } // Final histo _profhistPsi_vs_pT = bookDataPointSet(13, 1, 1); } /// Do the analysis void analyze(const Event& evt) { // Get jets and require at least one to pass pT and y cuts const Jets jets = applyProjection(evt, "Jets").jetsByPt(_ptedges.front()*GeV, _ptedges.back()*GeV, -0.7, 0.7, RAPIDITY); MSG_DEBUG("Jet multiplicity before cuts = " << jets.size()); if (jets.size() == 0) { MSG_DEBUG("No jets found in required pT & rapidity range"); vetoEvent; } // Calculate and histogram jet shapes const double weight = evt.weight(); for (size_t ipt = 0; ipt < 18; ++ipt) { const JetShape& jsipt = applyProjection(evt, _jsnames_pT[ipt]); for (size_t ijet = 0; ijet < jsipt.numJets(); ++ijet) { for (size_t rbin = 0; rbin < jsipt.numBins(); ++rbin) { const double r_rho = jsipt.rBinMid(rbin); MSG_DEBUG(ipt << " " << rbin << " (" << r_rho << ") " << jsipt.diffJetShape(ijet, rbin)); /// Bin width Jacobian factor of 0.7/0.1 = 7 in the differential shapes plot _profhistRho_pT[ipt]->fill(r_rho/0.7, (0.7/0.1)*jsipt.diffJetShape(ijet, rbin), weight); const double r_Psi = jsipt.rBinMax(rbin); _profhistPsi_pT[ipt]->fill(r_Psi/0.7, jsipt.intJetShape(ijet, rbin), weight); } } } } // Finalize void finalize() { // Construct final 1-Psi(0.3/0.7) profile from Psi profiles vector y, ey; for (size_t i = 0; i < _ptedges.size()-1; ++i) { // Get entry for rad_Psi = 0.2 bin AIDA::IProfile1D* ph_i = _profhistPsi_pT[i]; y.push_back(ph_i->binHeight(2)); ey.push_back(ph_i->binError(2)); } _profhistPsi_vs_pT->setCoordinate(1, y, ey); } //@} private: /// @name Analysis data //@{ /// Jet \f$ p_\perp\f$ bins. vector _ptedges; // This can't be a raw array if we want to initialise it non-painfully /// JetShape projection name for each \f$p_\perp\f$ bin. string _jsnames_pT[18]; //@} /// @name Histograms //@{ AIDA::IProfile1D* _profhistRho_pT[18]; AIDA::IProfile1D* _profhistPsi_pT[18]; AIDA::IDataPointSet* _profhistPsi_vs_pT; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2005_S6217184); } rivet-1.8.3/src/Analyses/CDF_2009_S8383952.cc0000644000175000017500000000406612116077757016066 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ZFinder.hh" namespace Rivet { /// @brief CDF Z boson rapidity measurement class CDF_2009_S8383952 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor CDF_2009_S8383952() : Analysis("CDF_2009_S8383952") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { /// Initialise and register projections here // this seems to have been corrected completely for all selection cuts, // i.e. eta cuts and pT cuts on leptons. FinalState fs; ZFinder zfinder(fs, -MAXRAPIDITY, MAXRAPIDITY, 0.0*GeV, ELECTRON, 66.0*GeV, 116.0*GeV, 0.2, true, true); addProjection(zfinder, "ZFinder"); /// Book histograms here _h_xs = bookHistogram1D(1, 1, 1); _h_yZ = bookHistogram1D(2, 1, 1); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); const ZFinder& zfinder = applyProjection(event, "ZFinder"); if (zfinder.bosons().size() == 1) { double yZ = fabs(zfinder.bosons()[0].momentum().rapidity()); _h_yZ->fill(yZ, weight); _h_xs->fill(1960.0, weight); } else { MSG_DEBUG("no unique lepton pair found."); } } /// Normalise histograms etc., after the run void finalize() { scale(_h_xs, crossSection()/sumOfWeights()); // Data seems to have been normalized for the avg of the two sides // (+ve & -ve rapidity) rather than the sum, hence the 0.5: scale(_h_yZ, 0.5*crossSection()/sumOfWeights()); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_yZ; AIDA::IHistogram1D *_h_xs; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2009_S8383952); } rivet-1.8.3/src/Analyses/MC_LEADJETUE.cc0000644000175000017500000001355612116077757015635 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief MC validation analysis for underlying event in jet events /// @author Andy Buckley class MC_LEADJETUE : public Analysis { public: /// Constructor MC_LEADJETUE() : Analysis("MC_LEADJETUE") { } /// @name Analysis methods //@{ // Book histograms void init() { // Final state for the jet finding const FinalState fsj(-4.0, 4.0, 0.0*GeV); addProjection(fsj, "FSJ"); addProjection(FastJets(fsj, FastJets::KT, 0.7), "Jets"); // Charged final state for the distributions const ChargedFinalState cfs(-1.0, 1.0, 0.5*GeV); addProjection(cfs, "CFS"); const double maxpt1 = 500.0; _hist_pnchg = bookProfile1D("trans-nchg", 50, 0.0, maxpt1); _hist_pmaxnchg = bookProfile1D("trans-maxnchg", 50, 0.0, maxpt1); _hist_pminnchg = bookProfile1D("trans-minnchg", 50, 0.0, maxpt1); _hist_pcptsum = bookProfile1D("trans-ptsum", 50, 0.0, maxpt1); _hist_pmaxcptsum = bookProfile1D("trans-maxptsum", 50, 0.0, maxpt1); _hist_pmincptsum = bookProfile1D("trans-minptsum", 50, 0.0, maxpt1); _hist_pcptave = bookProfile1D("trans-ptavg", 50, 0.0, maxpt1); } // Do the analysis void analyze(const Event& e) { const FinalState& fsj = applyProjection(e, "FSJ"); if (fsj.particles().empty()) { MSG_DEBUG("Failed multiplicity cut"); vetoEvent; } const FastJets& jetpro = applyProjection(e, "Jets"); const Jets jets = jetpro.jetsByPt(); MSG_DEBUG("Jet multiplicity = " << jets.size()); // Require the leading jet to be within |eta| < 2 if (jets.size() < 1 || fabs(jets[0].momentum().pseudorapidity()) > 2) { MSG_DEBUG("Failed jet cut"); vetoEvent; } const double jetphi = jets[0].momentum().phi(); const double jetpT = jets[0].momentum().pT(); MSG_DEBUG("Leading jet: pT = " << jetpT/GeV << " GeV" << ", eta = " << jets[0].momentum().pseudorapidity() << ", phi = " << jetphi); // Get the event weight const double weight = e.weight(); // Get the final states to work with for filling the distributions const FinalState& cfs = applyProjection(e, "CFS"); size_t numOverall(0), numToward(0), numTrans1(0), numTrans2(0), numAway(0); double ptSumOverall(0.0), ptSumToward(0.0), ptSumTrans1(0.0), ptSumTrans2(0.0), ptSumAway(0.0); double ptMaxOverall(0.0), ptMaxToward(0.0), ptMaxTrans1(0.0), ptMaxTrans2(0.0), ptMaxAway(0.0); // Calculate all the charged stuff foreach (const Particle& p, cfs.particles()) { const double dPhi = deltaPhi(p.momentum().phi(), jetphi); const double pT = p.momentum().pT(); const double phi = p.momentum().azimuthalAngle(); const double rotatedphi = phi - jetphi; ptSumOverall += pT; ++numOverall; if (pT > ptMaxOverall) ptMaxOverall = pT; if (dPhi < PI/3.0) { ptSumToward += pT; ++numToward; if (pT > ptMaxToward) ptMaxToward = pT; } else if (dPhi < 2*PI/3.0) { if (rotatedphi <= PI) { ptSumTrans1 += pT; ++numTrans1; if (pT > ptMaxTrans1) ptMaxTrans1 = pT; } else { ptSumTrans2 += pT; ++numTrans2; if (pT > ptMaxTrans2) ptMaxTrans2 = pT; } } else { ptSumAway += pT; ++numAway; if (pT > ptMaxAway) ptMaxAway = pT; } } // Fill the histograms //_hist_tnchg->fill(jetpT/GeV, numToward/(4*PI/3), weight); _hist_pnchg->fill(jetpT/GeV, (numTrans1+numTrans2)/(4*PI/3), weight); _hist_pmaxnchg->fill(jetpT/GeV, (numTrans1>numTrans2 ? numTrans1 : numTrans2)/(2*PI/3), weight); _hist_pminnchg->fill(jetpT/GeV, (numTrans1fill(jetpT/GeV, abs(numTrans1-numTrans2)/(2*PI/3), weight); //_hist_anchg->fill(jetpT/GeV, numAway/(4*PI/3), weight); //_hist_tcptsum->fill(jetpT/GeV, ptSumToward/GeV/(4*PI/3), weight); _hist_pcptsum->fill(jetpT/GeV, (ptSumTrans1+ptSumTrans2)/GeV/(4*PI/3), weight); _hist_pmaxcptsum->fill(jetpT/GeV, (ptSumTrans1>ptSumTrans2 ? ptSumTrans1 : ptSumTrans2)/GeV/(2*PI/3), weight); _hist_pmincptsum->fill(jetpT/GeV, (ptSumTrans1fill(jetpT/GeV, fabs(ptSumTrans1-ptSumTrans2)/GeV/(2*PI/3), weight); //_hist_acptsum->fill(jetpT/GeV, ptSumAway/GeV/(4*PI/3), weight); //if (numToward > 0) { // _hist_tcptave->fill(jetpT/GeV, ptSumToward/GeV/numToward, weight); // _hist_tcptmax->fill(jetpT/GeV, ptMaxToward/GeV, weight); //} if ((numTrans1+numTrans2) > 0) { _hist_pcptave->fill(jetpT/GeV, (ptSumTrans1+ptSumTrans2)/GeV/(numTrans1+numTrans2), weight); //_hist_pcptmax->fill(jetpT/GeV, (ptMaxTrans1 > ptMaxTrans2 ? ptMaxTrans1 : ptMaxTrans2)/GeV, weight); } //if (numAway > 0) { // _hist_acptave->fill(jetpT/GeV, ptSumAway/GeV/numAway, weight); // _hist_acptmax->fill(jetpT/GeV, ptMaxAway/GeV, weight); //} } void finalize() { // } private: AIDA::IProfile1D *_hist_pnchg; AIDA::IProfile1D *_hist_pmaxnchg; AIDA::IProfile1D *_hist_pminnchg; AIDA::IProfile1D *_hist_pcptsum; AIDA::IProfile1D *_hist_pmaxcptsum; AIDA::IProfile1D *_hist_pmincptsum; AIDA::IProfile1D *_hist_pcptave; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_LEADJETUE); } rivet-1.8.3/src/Analyses/CDF_2006_S6653332.cc0000644000175000017500000001406012116077757016044 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/InvMassFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/ChargedLeptons.hh" namespace Rivet { /// @brief CDF Run II analysis: jet \f$ p_T \f$ and \f$ \eta \f$ /// distributions in Z + (b) jet production /// @author Lars Sonnenschein /// /// This CDF analysis provides \f$ p_T \f$ and \f$ \eta \f$ distributions of /// jets in Z + (b) jet production, before and after tagging. class CDF_2006_S6653332 : public Analysis { public: /// Constructor CDF_2006_S6653332() : Analysis("CDF_2006_S6653332"), _Rjet(0.7), _JetPtCut(20.), _JetEtaCut(1.5), _Lep1PtCut(18.), _Lep2PtCut(10.), _LepEtaCut(1.1), _sumWeightsWithZ(0.0), _sumWeightsWithZJet(0.0) { } /// @name Analysis methods //@{ void init() { const FinalState fs(-3.6, 3.6); addProjection(fs, "FS"); // Create a final state with any e+e- or mu+mu- pair with // invariant mass 76 -> 106 GeV and ET > 20 (Z decay products) vector > vids; vids.push_back(make_pair(ELECTRON, POSITRON)); vids.push_back(make_pair(MUON, ANTIMUON)); FinalState fs2(-3.6, 3.6); InvMassFinalState invfs(fs2, vids, 66*GeV, 116*GeV); addProjection(invfs, "INVFS"); // Make a final state without the Z decay products for jet clustering VetoedFinalState vfs(fs); vfs.addVetoOnThisFinalState(invfs); addProjection(vfs, "VFS"); addProjection(FastJets(vfs, FastJets::CDFMIDPOINT, 0.7), "Jets"); // Book histograms _sigmaBJet = bookHistogram1D(1, 1, 1); _ratioBJetToZ = bookHistogram1D(2, 1, 1); _ratioBJetToJet = bookHistogram1D(3, 1, 1); } /// Do the analysis void analyze(const Event& event) { // Check we have an l+l- pair that passes the kinematic cuts // Get the Z decay products (mu+mu- or e+e- pair) const InvMassFinalState& invMassFinalState = applyProjection(event, "INVFS"); const ParticleVector& ZDecayProducts = invMassFinalState.particles(); // Make sure we have at least 2 Z decay products (mumu or ee) if (ZDecayProducts.size() < 2) vetoEvent; // double Lep1Pt = ZDecayProducts[0].momentum().perp(); double Lep2Pt = ZDecayProducts[1].momentum().perp(); double Lep1Eta = fabs(ZDecayProducts[0].momentum().rapidity()); double Lep2Eta = fabs(ZDecayProducts[1].momentum().rapidity()); if (Lep1Eta > _LepEtaCut && Lep2Eta > _LepEtaCut) vetoEvent; if (abs(ZDecayProducts[0].pdgId())==13 && (Lep1Eta > 1.0 && Lep2Eta > 1.)) { vetoEvent; } if (Lep1Pt < _Lep1PtCut && Lep2Pt < _Lep1PtCut) vetoEvent; // _sumWeightsWithZ += event.weight(); // @todo: write out a warning if there are more than two decay products FourMomentum Zmom = ZDecayProducts[0].momentum() + ZDecayProducts[1].momentum(); // Put all b-quarks in a vector /// @todo Use jet contents rather than accessing quarks directly ParticleVector bquarks; /// @todo Use nicer looping for (GenEvent::particle_const_iterator p = event.genEvent().particles_begin(); p != event.genEvent().particles_end(); ++p) { if ( fabs((*p)->pdg_id()) == BQUARK ) { bquarks.push_back(Particle(**p)); } } // Get jets const FastJets& jetpro = applyProjection(event, "Jets"); MSG_DEBUG("Jet multiplicity before any pT cut = " << jetpro.size()); const PseudoJets& jets = jetpro.pseudoJetsByPt(); MSG_DEBUG("jetlist size = " << jets.size()); int numBJet = 0; int numJet = 0; // for each b-jet plot the ET and the eta of the jet, normalise to the total cross section at the end // for each event plot N jet and pT(Z), normalise to the total cross section at the end for (PseudoJets::const_iterator jt = jets.begin(); jt != jets.end(); ++jt) { // select jets that pass the kinematic cuts if (jt->perp() > _JetPtCut && fabs(jt->rapidity()) <= _JetEtaCut) { ++numJet; // Does the jet contain a b-quark? /// @todo Use jet contents rather than accessing quarks directly bool bjet = false; foreach (const Particle& bquark, bquarks) { if (deltaR(jt->rapidity(), jt->phi(), bquark.momentum().rapidity(),bquark.momentum().azimuthalAngle()) <= _Rjet) { bjet = true; break; } } // end loop around b-jets if (bjet) { numBJet++; } } } // end loop around jets if (numJet > 0) _sumWeightsWithZJet += event.weight(); if (numBJet > 0) { _sigmaBJet->fill(1960.0,event.weight()); _ratioBJetToZ->fill(1960.0,event.weight()); _ratioBJetToJet->fill(1960.0,event.weight()); } } /// Finalize void finalize() { MSG_DEBUG("Total sum of weights = " << sumOfWeights()); MSG_DEBUG("Sum of weights for Z production in mass range = " << _sumWeightsWithZ); MSG_DEBUG("Sum of weights for Z+jet production in mass range = " << _sumWeightsWithZJet); _sigmaBJet->scale(crossSection()/sumOfWeights()); _ratioBJetToZ->scale(1.0/_sumWeightsWithZ); _ratioBJetToJet->scale(1.0/_sumWeightsWithZJet); } //@} private: /// @name Cuts and counters //@{ double _Rjet; double _JetPtCut; double _JetEtaCut; double _Lep1PtCut; double _Lep2PtCut; double _LepEtaCut; double _sumWeightsWithZ; double _sumWeightsWithZJet; //@} /// @name Histograms //@{ AIDA::IHistogram1D* _sigmaBJet; AIDA::IHistogram1D* _ratioBJetToZ; AIDA::IHistogram1D* _ratioBJetToJet; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2006_S6653332); } rivet-1.8.3/src/Analyses/SLD_2004_S5693039.cc0000644000175000017500000003667512116077757016117 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/InitialQuarks.hh" #include "Rivet/Projections/Thrust.hh" #include "LWH/AIManagedObject.h" using namespace AIDA; namespace Rivet { /// @brief SLD flavour-dependent fragmentation paper /// @author Peter Richardson class SLD_2004_S5693039 : public Analysis { public: /// Constructor SLD_2004_S5693039() : Analysis("SLD_2004_S5693039"), _weightedTotalChargedPartNumLight(0.), _weightedTotalChargedPartNumCharm(0.), _weightedTotalChargedPartNumBottom(0.), _weightLight(0.),_weightCharm(0.),_weightBottom(0.) {} /// @name Analysis methods //@{ void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 2 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed ncharged cut"); vetoEvent; } MSG_DEBUG("Passed ncharged cut"); // Get event weight for histo filling const double weight = e.weight(); // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); int flavour = 0; const InitialQuarks& iqf = applyProjection(e, "IQF"); // If we only have two quarks (qqbar), just take the flavour. // If we have more than two quarks, look for the highest energetic q-qbar pair. ParticleVector quarks; if (iqf.particles().size() == 2) { flavour = abs( iqf.particles().front().pdgId() ); quarks = iqf.particles(); } else { map quarkmap; foreach (const Particle& p, iqf.particles()) { if (quarkmap.find(p.pdgId())==quarkmap.end()) quarkmap[p.pdgId()] = p; else if (quarkmap[p.pdgId()].momentum().E() < p.momentum().E()) quarkmap[p.pdgId()] = p; } double maxenergy = 0.; for (int i = 1; i <= 5; ++i) { double energy(0.); if(quarkmap.find( i)!=quarkmap.end()) energy += quarkmap[ i].momentum().E(); if(quarkmap.find(-i)!=quarkmap.end()) energy += quarkmap[-i].momentum().E(); if (energy > maxenergy) flavour = i; } if(quarkmap.find( flavour)!=quarkmap.end()) quarks.push_back(quarkmap[ flavour]); if(quarkmap.find(-flavour)!=quarkmap.end()) quarks.push_back(quarkmap[-flavour]); } // total multiplicities switch (flavour) { case 1: case 2: case 3: _weightLight += weight; _weightedTotalChargedPartNumLight += numParticles * weight; break; case 4: _weightCharm += weight; _weightedTotalChargedPartNumCharm += numParticles * weight; break; case 5: _weightBottom += weight; _weightedTotalChargedPartNumBottom += numParticles * weight; break; } // thrust axis for projections Vector3 axis = applyProjection(e, "Thrust").thrustAxis(); double dot(0.); if(!quarks.empty()) { dot = quarks[0].momentum().vector3().dot(axis); if(quarks[0].pdgId()<0) dot *= -1.; } // spectra and individual multiplicities foreach (const Particle& p, fs.particles()) { double pcm = p.momentum().vector3().mod(); const double xp = pcm/meanBeamMom; // if in quark or antiquark hemisphere bool quark = p.momentum().vector3().dot(axis)*dot>0.; _histPCharged ->fill(pcm , weight); // all charged switch (flavour) { case DQUARK: case UQUARK: case SQUARK: _histXpChargedL->fill(xp, weight); break; case CQUARK: _histXpChargedC->fill(xp, weight); break; case BQUARK: _histXpChargedB->fill(xp, weight); break; } int id = abs(p.pdgId()); // charged pions if(id==PIPLUS) { _histXpPiPlus->fill(xp, weight); _histXpPiPlusTotal->fill(xp, weight); switch (flavour) { case DQUARK: case UQUARK: case SQUARK: _histXpPiPlusL->fill(xp, weight); _multPiPlusL->fill(sqrtS(), weight); if( ( quark && p.pdgId()>0 ) || ( !quark && p.pdgId()<0 )) _histRPiPlus->fill(xp, weight); else _histRPiMinus->fill(xp, weight); break; case CQUARK: _histXpPiPlusC->fill(xp, weight); _multPiPlusC->fill(sqrtS(), weight); break; case BQUARK: _histXpPiPlusB->fill(xp, weight); _multPiPlusB->fill(sqrtS(), weight); break; } } else if(id==KPLUS) { _histXpKPlus->fill(xp, weight); _histXpKPlusTotal->fill(xp, weight); switch (flavour) { case DQUARK: case UQUARK: case SQUARK: _histXpKPlusL->fill(xp, weight); _multKPlusL->fill(sqrtS(), weight); if( ( quark && p.pdgId()>0 ) || ( !quark && p.pdgId()<0 )) _histRKPlus->fill(xp, weight); else _histRKMinus->fill(xp, weight); break; case CQUARK: _histXpKPlusC->fill(xp, weight); _multKPlusC->fill(sqrtS(), weight); break; case BQUARK: _histXpKPlusB->fill(xp, weight); _multKPlusB->fill(sqrtS(), weight); break; } } else if(id==PROTON) { _histXpProton->fill(xp, weight); _histXpProtonTotal->fill(xp, weight); switch (flavour) { case DQUARK: case UQUARK: case SQUARK: _histXpProtonL->fill(xp, weight); _multProtonL->fill(sqrtS(), weight); if( ( quark && p.pdgId()>0 ) || ( !quark && p.pdgId()<0 )) _histRProton->fill(xp, weight); else _histRPBar ->fill(xp, weight); break; case CQUARK: _histXpProtonC->fill(xp, weight); _multProtonC->fill(sqrtS(), weight); break; case BQUARK: _histXpProtonB->fill(xp, weight); _multProtonB->fill(sqrtS(), weight); break; } } } } void init() { // Projections addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "FS"); addProjection(InitialQuarks(), "IQF"); addProjection(Thrust(FinalState()), "Thrust"); // histograms _histPCharged = bookHistogram1D( 1, 1, 1); _histXpPiPlus = bookHistogram1D( 2, 1, 2); _histXpKPlus = bookHistogram1D( 3, 1, 2); _histXpProton = bookHistogram1D( 4, 1, 2); _histXpPiPlusTotal = bookHistogram1D( 2, 2, 2); _histXpKPlusTotal = bookHistogram1D( 3, 2, 2); _histXpProtonTotal = bookHistogram1D( 4, 2, 2); _histXpPiPlusL = bookHistogram1D( 5, 1, 1); _histXpPiPlusC = bookHistogram1D( 5, 1, 2); _histXpPiPlusB = bookHistogram1D( 5, 1, 3); _histXpKPlusL = bookHistogram1D( 6, 1, 1); _histXpKPlusC = bookHistogram1D( 6, 1, 2); _histXpKPlusB = bookHistogram1D( 6, 1, 3); _histXpProtonL = bookHistogram1D( 7, 1, 1); _histXpProtonC = bookHistogram1D( 7, 1, 2); _histXpProtonB = bookHistogram1D( 7, 1, 3); _histXpChargedL = bookHistogram1D( 8, 1, 1); _histXpChargedC = bookHistogram1D( 8, 1, 2); _histXpChargedB = bookHistogram1D( 8, 1, 3); _multPiPlusL = bookHistogram1D( 5, 2, 1); _multPiPlusC = bookHistogram1D( 5, 2, 2); _multPiPlusB = bookHistogram1D( 5, 2, 3); _multKPlusL = bookHistogram1D( 6, 2, 1); _multKPlusC = bookHistogram1D( 6, 2, 2); _multKPlusB = bookHistogram1D( 6, 2, 3); _multProtonL = bookHistogram1D( 7, 2, 1); _multProtonC = bookHistogram1D( 7, 2, 2); _multProtonB = bookHistogram1D( 7, 2, 3); _histRPiPlus = bookHistogram1D( 9, 1, 1); _histRPiMinus = bookHistogram1D( 9, 1, 2); _histRKPlus = bookHistogram1D(10, 1, 1); _histRKMinus = bookHistogram1D(10, 1, 2); _histRProton = bookHistogram1D(11, 1, 1); _histRPBar = bookHistogram1D(11, 1, 2); } /// Finalize void finalize() { // multiplicities // bottom const double avgNumPartsBottom = _weightedTotalChargedPartNumBottom / _weightBottom; AIDA::IDataPointSet * multB = bookDataPointSet(8, 2, 3); multB->point(0)->coordinate(1)->setValue(avgNumPartsBottom); // charm const double avgNumPartsCharm = _weightedTotalChargedPartNumCharm / _weightCharm; AIDA::IDataPointSet * multC = bookDataPointSet(8, 2, 2); multC->point(0)->coordinate(1)->setValue(avgNumPartsCharm); // light const double avgNumPartsLight = _weightedTotalChargedPartNumLight / _weightLight; AIDA::IDataPointSet * multL = bookDataPointSet(8, 2, 1); multL->point(0)->coordinate(1)->setValue(avgNumPartsLight); // charm-light AIDA::IDataPointSet * multD1 = bookDataPointSet(8, 3, 2); multD1->point(0)->coordinate(1)->setValue(avgNumPartsCharm -avgNumPartsLight); // bottom-light AIDA::IDataPointSet * multD2 = bookDataPointSet(8, 3, 3); multD2->point(0)->coordinate(1)->setValue(avgNumPartsBottom-avgNumPartsLight); const string dir = histoDir(); AIDA::IHistogram1D * num = histogramFactory().subtract(dir + "/n1",*_histRPiMinus,*_histRPiPlus); AIDA::IHistogram1D * den = histogramFactory().add (dir + "/n2",*_histRPiMinus,*_histRPiPlus); AIDA::IDataPointSet* h = histogramFactory().divide(dir +"/d09-x01-y03",*num,*den); scale(h,100.); histogramFactory().destroy(num); histogramFactory().destroy(den); num = histogramFactory().subtract(dir + "/n3",*_histRKMinus,*_histRKPlus); den = histogramFactory().add (dir + "/n4",*_histRKMinus,*_histRKPlus); h = histogramFactory().divide(dir +"/d10-x01-y03",*num,*den); scale(h,100.); histogramFactory().destroy(num); histogramFactory().destroy(den); num = histogramFactory().subtract(dir + "/n5",*_histRProton,*_histRPBar); den = histogramFactory().add (dir + "/n6",*_histRProton,*_histRPBar); h = histogramFactory().divide(dir +"/d11-x01-y03",*num,*den); scale(h,100.); histogramFactory().destroy(num); histogramFactory().destroy(den); // histograms Analysis::scale(_histPCharged ,1./sumOfWeights()); Analysis::scale(_histXpPiPlus ,1./sumOfWeights()); Analysis::scale(_histXpKPlus ,1./sumOfWeights()); Analysis::scale(_histXpProton ,1./sumOfWeights()); Analysis::scale(_histXpPiPlusTotal ,1./sumOfWeights()); Analysis::scale(_histXpKPlusTotal ,1./sumOfWeights()); Analysis::scale(_histXpProtonTotal ,1./sumOfWeights()); Analysis::scale(_histXpPiPlusL ,1./_weightLight); Analysis::scale(_histXpPiPlusC ,1./_weightCharm); Analysis::scale(_histXpPiPlusB ,1./_weightBottom); Analysis::scale(_histXpKPlusL ,1./_weightLight); Analysis::scale(_histXpKPlusC ,1./_weightCharm); Analysis::scale(_histXpKPlusB ,1./_weightBottom); Analysis::scale(_histXpProtonL ,1./_weightLight); Analysis::scale(_histXpProtonC ,1./_weightCharm); Analysis::scale(_histXpProtonB ,1./_weightBottom); Analysis::scale(_histXpChargedL ,1./_weightLight); Analysis::scale(_histXpChargedC ,1./_weightCharm); Analysis::scale(_histXpChargedB ,1./_weightBottom); Analysis::scale(_multPiPlusL ,1./_weightLight); Analysis::scale(_multPiPlusC ,1./_weightCharm); Analysis::scale(_multPiPlusB ,1./_weightBottom); Analysis::scale(_multKPlusL ,1./_weightLight); Analysis::scale(_multKPlusC ,1./_weightCharm); Analysis::scale(_multKPlusB ,1./_weightBottom); Analysis::scale(_multProtonL ,1./_weightLight); Analysis::scale(_multProtonC ,1./_weightCharm); Analysis::scale(_multProtonB ,1./_weightBottom); // paper suggests this should be 0.5/weight but has to be 1. // to get normalisations right Analysis::scale(_histRPiPlus ,1./_weightLight); Analysis::scale(_histRPiMinus,1./_weightLight); Analysis::scale(_histRKPlus ,1./_weightLight); Analysis::scale(_histRKMinus ,1./_weightLight); Analysis::scale(_histRProton ,1./_weightLight); Analysis::scale(_histRPBar ,1./_weightLight); } //@} private: /// @name Multiplicities //@{ double _weightedTotalChargedPartNumLight; double _weightedTotalChargedPartNumCharm; double _weightedTotalChargedPartNumBottom; //@} /// @name Weights //@{ double _weightLight; double _weightCharm; double _weightBottom; //@} // Histograms //@{ AIDA::IHistogram1D *_histPCharged ; AIDA::IHistogram1D *_histXpPiPlus ; AIDA::IHistogram1D *_histXpKPlus ; AIDA::IHistogram1D *_histXpProton ; AIDA::IHistogram1D *_histXpPiPlusTotal; AIDA::IHistogram1D *_histXpKPlusTotal ; AIDA::IHistogram1D *_histXpProtonTotal; AIDA::IHistogram1D *_histXpPiPlusL ; AIDA::IHistogram1D *_histXpPiPlusC ; AIDA::IHistogram1D *_histXpPiPlusB ; AIDA::IHistogram1D *_histXpKPlusL ; AIDA::IHistogram1D *_histXpKPlusC ; AIDA::IHistogram1D *_histXpKPlusB ; AIDA::IHistogram1D *_histXpProtonL ; AIDA::IHistogram1D *_histXpProtonC ; AIDA::IHistogram1D *_histXpProtonB ; AIDA::IHistogram1D *_histXpChargedL; AIDA::IHistogram1D *_histXpChargedC; AIDA::IHistogram1D *_histXpChargedB; AIDA::IHistogram1D *_multPiPlusL ; AIDA::IHistogram1D *_multPiPlusC ; AIDA::IHistogram1D *_multPiPlusB ; AIDA::IHistogram1D *_multKPlusL ; AIDA::IHistogram1D *_multKPlusC ; AIDA::IHistogram1D *_multKPlusB ; AIDA::IHistogram1D *_multProtonL ; AIDA::IHistogram1D *_multProtonC ; AIDA::IHistogram1D *_multProtonB ; AIDA::IHistogram1D *_histRPiPlus ; AIDA::IHistogram1D *_histRPiMinus; AIDA::IHistogram1D *_histRKPlus ; AIDA::IHistogram1D *_histRKMinus ; AIDA::IHistogram1D *_histRProton ; AIDA::IHistogram1D *_histRPBar ; //@} void scale(AIDA::IDataPointSet*& histo, double scale) { if (!histo) { MSG_ERROR("Failed to scale histo=NULL in analysis " << name() << " (scale=" << scale << ")"); return; } const string hpath = tree().findPath(dynamic_cast(*histo)); MSG_TRACE("Scaling histo " << hpath); vector x, y, ex, ey; for (size_t i = 0, N = histo->size(); i < N; ++i) { IDataPoint * point = histo->point(i); assert(point->dimension()==2); x .push_back(point->coordinate(0)->value()); ex.push_back(0.5*(point->coordinate(0)->errorPlus()+ point->coordinate(0)->errorMinus())); y .push_back(point->coordinate(1)->value()*scale); ey.push_back(0.5*scale*(point->coordinate(1)->errorPlus()+ point->coordinate(1)->errorMinus())); } string title = histo->title(); string xtitle = histo->xtitle(); string ytitle = histo->ytitle(); tree().mkdir("/tmpnormalize"); tree().mv(hpath, "/tmpnormalize"); if (hpath.find(" ") != string::npos) { throw Error("Histogram path '" + hpath + "' is invalid: spaces are not permitted in paths"); } AIDA::IDataPointSet* dps = datapointsetFactory().createXY(hpath, title, x, y, ex, ey); dps->setXTitle(xtitle); dps->setYTitle(ytitle); tree().rm(tree().findPath(dynamic_cast(*histo))); tree().rmdir("/tmpnormalize"); // Set histo pointer to null - it can no longer be used. histo = 0; } }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(SLD_2004_S5693039); } rivet-1.8.3/src/Analyses/DELPHI_1995_S3137023.cc0000644000175000017500000000622012116077757016423 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief DELPHI strange baryon paper /// @author Hendrik Hoeth class DELPHI_1995_S3137023 : public Analysis { public: /// Constructor DELPHI_1995_S3137023() : Analysis("DELPHI_1995_S3137023") { _weightedTotalNumXiMinus = 0; _weightedTotalNumSigma1385Plus = 0; } /// @name Analysis methods //@{ void init() { addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "FS"); addProjection(UnstableFinalState(), "UFS"); _histXpXiMinus = bookHistogram1D(2, 1, 1); _histXpSigma1385Plus = bookHistogram1D(3, 1, 1); } void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed leptonic event cut"); vetoEvent; } MSG_DEBUG("Passed leptonic event cut"); // Get event weight for histo filling const double weight = e.weight(); // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); // Final state of unstable particles to get particle spectra const UnstableFinalState& ufs = applyProjection(e, "UFS"); foreach (const Particle& p, ufs.particles()) { const int id = abs(p.pdgId()); switch (id) { case 3312: _histXpXiMinus->fill(p.momentum().vector3().mod()/meanBeamMom, weight); _weightedTotalNumXiMinus += weight; break; case 3114: case 3224: _histXpSigma1385Plus->fill(p.momentum().vector3().mod()/meanBeamMom, weight); _weightedTotalNumSigma1385Plus += weight; break; } } } /// Finalize void finalize() { normalize(_histXpXiMinus , _weightedTotalNumXiMinus/sumOfWeights()); normalize(_histXpSigma1385Plus , _weightedTotalNumSigma1385Plus/sumOfWeights()); } //@} private: /// Store the weighted sums of numbers of charged / charged+neutral /// particles - used to calculate average number of particles for the /// inclusive single particle distributions' normalisations. double _weightedTotalNumXiMinus; double _weightedTotalNumSigma1385Plus; AIDA::IHistogram1D *_histXpXiMinus; AIDA::IHistogram1D *_histXpSigma1385Plus; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(DELPHI_1995_S3137023); } rivet-1.8.3/src/Analyses/CMS_2011_I954992.cc0000644000175000017500000000375512116077757016017 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { class CMS_2011_I954992 : public Analysis { public: CMS_2011_I954992() : Analysis("CMS_2011_I954992") { } public: void init() { ChargedFinalState cfs(-2.4, 2.4, 0.0*GeV); addProjection(cfs,"CFS"); /// Get muons which pass the initial kinematic cuts IdentifiedFinalState muon_fs(-2.1, 2.1, 4.0*GeV); muon_fs.acceptIdPair(MUON); addProjection(muon_fs, "MUON_FS"); _h_sigma = bookHistogram1D(1,1,1); } void analyze(const Event& event) { const double weight = event.weight(); const ChargedFinalState& cfs = applyProjection(event, "CFS"); if (cfs.size() != 2) vetoEvent; // no other charged particles in 2.4 const ParticleVector& muonFS = applyProjection(event, "MUON_FS").particles(); if(muonFS.size() != 2) vetoEvent; if(PID::charge(muonFS[0]) != PID::charge(muonFS[1])) { const double dimuon_mass = (muonFS[0].momentum() + muonFS[1].momentum()).mass(); const double v_angle = muonFS[0].momentum().angle(muonFS[1].momentum()); const double dPhi = deltaPhi(muonFS[0], muonFS[1]); const double deltaPt = fabs(muonFS[0].momentum().pT() - muonFS[1].momentum().pT()); if (dimuon_mass >= 11.5*GeV && v_angle < 0.95*PI && dPhi > 0.9*PI && deltaPt < 1.*GeV ) { _h_sigma->fill(sqrtS()/GeV, weight); } } } /// Normalise histograms etc., after the run void finalize() { scale(_h_sigma, crossSection()/picobarn/sumOfWeights()); } private: AIDA::IHistogram1D * _h_sigma; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2011_I954992); } rivet-1.8.3/src/Analyses/CDF_2006_S6450792.cc0000644000175000017500000000245612116077757016057 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief CDF Inclusive jet cross-section differential in \f$ p_\perp \f$ class CDF_2006_S6450792 : public Analysis { public: /// Constructor CDF_2006_S6450792() : Analysis("CDF_2006_S6450792") { } /// @name Analysis methods //@{ void init() { FinalState fs; addProjection(FastJets(fs, FastJets::CDFMIDPOINT, 0.7), "ConeFinder"); _h_jet_pt = bookHistogram1D(1, 1, 1); } void analyze(const Event& event) { const Jets& jets = applyProjection(event, "ConeFinder").jets(61.0*GeV); foreach (const Jet& jet, jets) { double y = fabs(jet.momentum().rapidity()); if (inRange(y, 0.1, 0.7)) { _h_jet_pt->fill(jet.momentum().pT()/GeV, event.weight()); } } } void finalize() { const double delta_y = 1.2; scale(_h_jet_pt, crossSection()/nanobarn/sumOfWeights()/delta_y); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_jet_pt; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2006_S6450792); } rivet-1.8.3/src/Analyses/CDF_1993_S2742446.cc0000644000175000017500000000510012116077757016056 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { /// @brief CDF class CDF_1993_S2742446 : public Analysis { public: CDF_1993_S2742446() : Analysis("CDF_1993_S2742446") { } public: void init() { // The photon selection has been corrected to pTmin=22 GeV (vs. 23 in the trigger) LeadingParticlesFinalState photonfs(FinalState(-0.9, 0.9, 22.0*GeV)); photonfs.addParticleId(PHOTON); addProjection(photonfs, "LeadingPhoton"); // FS excluding the leading photon VetoedFinalState vfs(FinalState(-4.2, 4.2)); vfs.addVetoOnThisFinalState(photonfs); addProjection(vfs, "VFS"); // Jets addProjection(FastJets(vfs, FastJets::CDFJETCLU, 0.7), "Jets"); _h_costheta = bookHistogram1D(1, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); ParticleVector photons = applyProjection(event, "LeadingPhoton").particles(); if (photons.size()!=1 || photons[0].momentum().pT()>45.0*GeV) { vetoEvent; } FourMomentum leadingPhoton = photons[0].momentum(); double eta_P = leadingPhoton.eta(); double phi_P = leadingPhoton.phi(); // photon isolation: less than 2 GeV EM E_T double Etsum=0.0; foreach (const Particle& p, applyProjection(event, "VFS").particles()) { if (PID::threeCharge(p.pdgId())!=0 && deltaR(eta_P, phi_P, p.momentum().eta(), p.momentum().phi()) < 0.7) { Etsum += p.momentum().Et(); } } if (Etsum > 2.0*GeV) { vetoEvent; } // sum all jets in the opposite hemisphere in phi from the photon FourMomentum jetsum; foreach (const Jet& jet, applyProjection(event, "Jets").jets(10.0*GeV)) { if (fabs(jet.momentum().phi()-phi_P) > M_PI) { jetsum+=jet.momentum(); } } double costheta = fabs(tanh((eta_P-jetsum.eta())/2.0)); _h_costheta->fill(costheta, weight); } void finalize() { normalize(_h_costheta, 1.4271); // fixed norm ok } private: AIDA::IHistogram1D *_h_costheta; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_1993_S2742446); } rivet-1.8.3/src/Analyses/CMS_2012_PAS_FWD_11_003.cc0000644000175000017500000001270112116077757017117 0ustar sunsun// Samantha Dooling DESY // February 2012 // // -*- C++ -*- // ============================= // // Ratio of the energy deposited in the pseudorapditiy range // -6.6 < eta < -5.2 for events with a charged particle jet // // ============================= #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "LWH/Histogram1D.h" namespace Rivet { class CMS_2012_PAS_FWD_11_003 : public Analysis { public: /// Constructor CMS_2012_PAS_FWD_11_003() : Analysis("CMS_2012_PAS_FWD_11_003") { } void init() { // gives the range of eta and min pT for the final state from which I get the jets FastJets jetpro (ChargedFinalState(-2.5, 2.5, 0.3*GeV), FastJets::ANTIKT, 0.5); addProjection(jetpro, "Jets"); // skip Neutrinos and Muons VetoedFinalState fsv(FinalState(-7.0, -4.0, 0.*GeV)); fsv.vetoNeutrinos(); fsv.addVetoPairId(MUON); addProjection(fsv, "fsv"); // for the hadron level selection VetoedFinalState sfsv(FinalState(-MAXRAPIDITY, MAXRAPIDITY, 0.*GeV)); sfsv.vetoNeutrinos(); sfsv.addVetoPairId(MUON); addProjection(sfsv, "sfsv"); //counters passedSumOfWeights = 0.; inclEflow = 0.; // Temporary histograms to fill the energy flow for leading jet events. // Ratios are calculated in finalyze(). int id = 0; if (fuzzyEquals(sqrtS()/GeV, 900, 1e-3)) id=1; if (fuzzyEquals(sqrtS()/GeV, 2760, 1e-3)) id=2; if (fuzzyEquals(sqrtS()/GeV, 7000, 1e-3)) id=3; _tmp_jet = bookHistogram1D("eflow_jet", binEdges(id, 1, 1)); // Leading jet energy flow in pt _tmp_njet = bookHistogram1D("number_jet", binEdges(id, 1, 1)); // Number of events in pt } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // Skip if the event is empty const FinalState& fsv = applyProjection(event, "fsv"); if (fsv.empty()) vetoEvent; // ====================== Minimum Bias selection const FinalState& sfsv = applyProjection(event, "sfsv"); ParticleVector parts = sfsv.particlesByRapidity(); if (parts.empty()) vetoEvent; // find dymax double dymax = 0; int gap_pos = -1; for (size_t i=0; i < parts.size()-1; ++i) { double dy = parts[i+1].momentum().rapidity() - parts[i].momentum().rapidity(); if (dy > dymax) { dymax = dy; gap_pos = i; } } // calculate mx2 and my2 FourMomentum xmom; for (int i=0; i<=gap_pos; ++i) { xmom += parts[i].momentum(); } double mx2 = xmom.mass2(); if (mx2<0) vetoEvent; FourMomentum ymom; for (size_t i=gap_pos+1; i 0.1 || xiy > 0.4 || xidd > 0.5)) passedHadronCuts = true; if (fuzzyEquals(sqrtS()/GeV, 2760, 1e-3) && (xix > 0.07 || xiy > 0.2 || xidd > 0.5)) passedHadronCuts = true; if (fuzzyEquals(sqrtS()/GeV, 7000, 1e-3) && (xix > 0.04 || xiy > 0.1 || xidd > 0.5)) passedHadronCuts = true; if (!passedHadronCuts) vetoEvent; // ============================== MINIMUM BIAS EVENTS // loop over particles to calculate the energy passedSumOfWeights += weight; foreach (const Particle& p, fsv.particles()) { if (-5.2 > p.momentum().eta() && p.momentum().eta() > -6.6) inclEflow += weight*p.momentum().E()/GeV; } // ============================== JET EVENTS const FastJets& jetpro = applyProjection(event, "Jets"); const Jets& jets = jetpro.jetsByPt(1.0*GeV); if (jets.size()<1) vetoEvent; if (fabs(jets[0].momentum().eta()) < 2.0) { _tmp_njet->fill(jets[0].momentum().pT()/GeV, weight); // energy flow foreach (const Particle& p, fsv.particles()) { if (p.momentum().eta() > -6.6 && p.momentum().eta() < -5.2) { // ask for the CASTOR region _tmp_jet->fill(jets[0].momentum().pT()/GeV, weight * p.momentum().E()/GeV); } } } }// analysis void finalize() { _tmp_jet->scale(passedSumOfWeights/inclEflow); AIDA::IHistogramFactory& hf = histogramFactory(); if (fuzzyEquals(sqrtS()/GeV, 900, 1e-3)) hf.divide(histoDir() + "/d01-x01-y01", *_tmp_jet, *_tmp_njet); if (fuzzyEquals(sqrtS()/GeV, 2760, 1e-3)) hf.divide(histoDir() + "/d02-x01-y01", *_tmp_jet, *_tmp_njet); if (fuzzyEquals(sqrtS()/GeV, 7000, 1e-3)) hf.divide(histoDir() + "/d03-x01-y01", *_tmp_jet, *_tmp_njet); hf.destroy(_tmp_jet); hf.destroy(_tmp_njet); } private: // counters double passedSumOfWeights; double inclEflow; // histograms AIDA::IHistogram1D* _tmp_jet; AIDA::IHistogram1D* _tmp_njet; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2012_PAS_FWD_11_003); } rivet-1.8.3/src/Analyses/ATLAS_2011_S9131140.cc0000644000175000017500000000703212116077757016300 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Particle.fhh" namespace Rivet { /// @brief ATLAS Z pT in Drell-Yan events at 7 TeV /// @author Elena Yatsenko, Judith Katzy class ATLAS_2011_S9131140 : public Analysis { public: /// Constructor ATLAS_2011_S9131140() : Analysis("ATLAS_2011_S9131140") { _sumw_el_bare = 0; _sumw_el_dressed = 0; _sumw_mu_bare = 0; _sumw_mu_dressed = 0; } /// @name Analysis methods //@{ void init() { // Set up projections FinalState fs; ZFinder zfinder_dressed_el(fs, -2.4, 2.4, 20, ELECTRON, 66.0*GeV, 116.0*GeV, 0.1, true, false); addProjection(zfinder_dressed_el, "ZFinder_dressed_el"); ZFinder zfinder_bare_el(fs, -2.4, 2.4, 20, ELECTRON, 66.0*GeV, 116.0*GeV, 0.0, true, false); addProjection(zfinder_bare_el, "ZFinder_bare_el"); ZFinder zfinder_dressed_mu(fs, -2.4, 2.4, 20, MUON, 66.0*GeV, 116.0*GeV, 0.1, true, false); addProjection(zfinder_dressed_mu, "ZFinder_dressed_mu"); ZFinder zfinder_bare_mu(fs, -2.4, 2.4, 20, MUON, 66.0*GeV, 116.0*GeV, 0.0, true, false); addProjection(zfinder_bare_mu, "ZFinder_bare_mu"); // Book histograms _hist_zpt_el_dressed = bookHistogram1D(1, 1, 2); // electron "dressed" _hist_zpt_el_bare = bookHistogram1D(1, 1, 3); // electron "bare" _hist_zpt_mu_dressed = bookHistogram1D(2, 1, 2); // muon "dressed" _hist_zpt_mu_bare = bookHistogram1D(2, 1, 3); // muon "bare" } /// Do the analysis void analyze(const Event& evt) { const double weight = evt.weight(); const ZFinder& zfinder_dressed_el = applyProjection(evt, "ZFinder_dressed_el"); if (!zfinder_dressed_el.bosons().empty()) { _sumw_el_dressed += weight; const FourMomentum pZ = zfinder_dressed_el.bosons()[0].momentum(); _hist_zpt_el_dressed->fill(pZ.pT()/GeV, weight); } const ZFinder& zfinder_bare_el = applyProjection(evt, "ZFinder_bare_el"); if (!zfinder_bare_el.bosons().empty()) { _sumw_el_bare += weight; const FourMomentum pZ = zfinder_bare_el.bosons()[0].momentum(); _hist_zpt_el_bare->fill(pZ.pT()/GeV, weight); } const ZFinder& zfinder_dressed_mu = applyProjection(evt, "ZFinder_dressed_mu"); if (!zfinder_dressed_mu.bosons().empty()) { _sumw_mu_dressed += weight; const FourMomentum pZ = zfinder_dressed_mu.bosons()[0].momentum(); _hist_zpt_mu_dressed->fill(pZ.pT()/GeV, weight); } const ZFinder& zfinder_bare_mu = applyProjection(evt, "ZFinder_bare_mu"); if (!zfinder_bare_mu.bosons().empty()) { _sumw_mu_bare += weight; const FourMomentum pZ = zfinder_bare_mu.bosons()[0].momentum(); _hist_zpt_mu_bare->fill(pZ.pT()/GeV, weight); } } void finalize() { scale(_hist_zpt_el_dressed, 1/_sumw_el_dressed); scale(_hist_zpt_el_bare, 1/_sumw_el_bare); scale(_hist_zpt_mu_dressed, 1/_sumw_mu_dressed); scale(_hist_zpt_mu_bare, 1/_sumw_mu_bare); } //@} private: double _sumw_el_bare, _sumw_el_dressed; double _sumw_mu_bare, _sumw_mu_dressed; AIDA::IHistogram1D* _hist_zpt_el_dressed; AIDA::IHistogram1D* _hist_zpt_el_bare; AIDA::IHistogram1D* _hist_zpt_mu_dressed; AIDA::IHistogram1D* _hist_zpt_mu_bare; }; // Hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_S9131140); } rivet-1.8.3/src/Analyses/D0_2004_S5992206.cc0000644000175000017500000001014412116077757015715 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/MissingMomentum.hh" namespace Rivet { /* @brief D0 Run II angular correlations in di-jet events * @author Lars Sonnenschein * * Measurement of angular correlations in di-jet events. * * @par Run conditions * * @arg \f$ \sqrt{s} = \f$ 1960 GeV * @arg Run with generic QCD events. * @arg Several \f$ p_\perp^\text{min} \f$ cutoffs are probably required to fill the histograms: * @arg \f$ p_\perp^\text{min} = \f$ 50, 75, 100, 150 GeV for the four pT ranges respecively * */ class D0_2004_S5992206 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor. D0_2004_S5992206() : Analysis("D0_2004_S5992206") { } //@} /// @name Analysis methods //@{ void init() { // Final state for jets, mET etc. const FinalState fs(-3.0, 3.0); addProjection(fs, "FS"); // Veto neutrinos, and muons with pT above 1.0 GeV VetoedFinalState vfs(fs); vfs.vetoNeutrinos(); vfs.addVetoPairDetail(MUON, 1.0*GeV, MAXDOUBLE); addProjection(vfs, "VFS"); addProjection(FastJets(vfs, FastJets::D0ILCONE, 0.7), "Jets"); addProjection(MissingMomentum(vfs), "CalMET"); // Book histograms _histJetAzimuth_pTmax75_100 = bookHistogram1D(1, 2, 1); _histJetAzimuth_pTmax100_130 = bookHistogram1D(2, 2, 1); _histJetAzimuth_pTmax130_180 = bookHistogram1D(3, 2, 1); _histJetAzimuth_pTmax180_ = bookHistogram1D(4, 2, 1); } /// Do the analysis void analyze(const Event& event) { // Analyse and print some info const JetAlg& jetpro = applyProjection(event, "Jets"); MSG_DEBUG("Jet multiplicity before any pT cut = " << jetpro.size()); const Jets jets = jetpro.jetsByPt(40.0*GeV); if (jets.size() >= 2) { MSG_DEBUG("Jet multiplicity after pT > 40 GeV cut = " << jets.size()); } else { vetoEvent; } const double rap1 = jets[0].momentum().rapidity(); const double rap2 = jets[1].momentum().rapidity(); if (fabs(rap1) > 0.5 || fabs(rap2) > 0.5) { vetoEvent; } MSG_DEBUG("Jet eta and pT requirements fulfilled"); const double pT1 = jets[0].momentum().pT(); const MissingMomentum& caloMissEt = applyProjection(event, "CalMET"); MSG_DEBUG("Missing vector Et = " << caloMissEt.vectorEt()/GeV << " GeV"); if (caloMissEt.vectorEt().mod() > 0.7*pT1) { MSG_DEBUG("Vetoing event with too much missing ET: " << caloMissEt.vectorEt()/GeV << " GeV > " << 0.7*pT1/GeV << " GeV"); vetoEvent; } if (pT1/GeV >= 75.0) { const double weight = event.weight(); const double dphi = deltaPhi(jets[0].momentum().phi(), jets[1].momentum().phi()); if (inRange(pT1/GeV, 75.0, 100.0)) { _histJetAzimuth_pTmax75_100->fill(dphi, weight); } else if (inRange(pT1/GeV, 100.0, 130.0)) { _histJetAzimuth_pTmax100_130->fill(dphi, weight); } else if (inRange(pT1/GeV, 130.0, 180.0)) { _histJetAzimuth_pTmax130_180->fill(dphi, weight); } else if (pT1/GeV > 180.0) { _histJetAzimuth_pTmax180_->fill(dphi, weight); } } } // Finalize void finalize() { // Normalize histograms to unit area normalize(_histJetAzimuth_pTmax75_100); normalize(_histJetAzimuth_pTmax100_130); normalize(_histJetAzimuth_pTmax130_180); normalize(_histJetAzimuth_pTmax180_); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D* _histJetAzimuth_pTmax75_100; AIDA::IHistogram1D* _histJetAzimuth_pTmax100_130; AIDA::IHistogram1D* _histJetAzimuth_pTmax130_180; AIDA::IHistogram1D* _histJetAzimuth_pTmax180_; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2004_S5992206); } rivet-1.8.3/src/Analyses/CDF_2010_S8591881_QCD.cc0000644000175000017500000001565612116077757016556 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief CDF Run II underlying event in leading jet events /// @author Hendrik Hoeth /// /// Rick Field's measurement of the underlying event in "leading jet" events. /// The leading jet (CDF midpoint \f$ R = 0.7 \f$) must be within \f$|\eta| < 2 \f$ /// and defines the "toward" phi direction. Particles are selected in /// \f$ |\eta| < 1 \f$. For the \f$ p_\perp \f$-related observables there /// is a \f$ p_\perp > 0.5 \f$ GeV cut. For \f$ \sum E_\perp \f$ there is no /// \f$ p_\perp \f$ cut. /// /// @par Run conditions /// @arg \f$ \sqrt{s} = \f$ 1960 GeV /// @arg Run with generic QCD events. /// @arg Set particles with c*tau > 10 mm stable /// @arg Several \f$ p_\perp^\text{min} \f$ cutoffs are probably required to fill the profile histograms: /// @arg \f$ p_\perp^\text{min} = \f$ 0 (min bias), 10, 20, 50, 100, 150 GeV /// @arg The corresponding merging points are at \f$ p_T = \f$ 0, 30, 50, 80, 130, 180 GeV class CDF_2010_S8591881_QCD : public Analysis { public: /// Constructor CDF_2010_S8591881_QCD() : Analysis("CDF_2010_S8591881_QCD") { } /// @name Analysis methods //@{ void init() { // Final state for the jet finding const FinalState fsj(-4.0, 4.0, 0.0*GeV); addProjection(fsj, "FSJ"); addProjection(FastJets(fsj, FastJets::CDFMIDPOINT, 0.7), "MidpointJets"); // Charged final state for the distributions const ChargedFinalState cfs(-1.0, 1.0, 0.5*GeV); addProjection(cfs, "CFS"); // Book histograms _hist_tnchg = bookProfile1D(10, 1, 1); _hist_pnchg = bookProfile1D(10, 1, 2); _hist_anchg = bookProfile1D(10, 1, 3); _hist_pmaxnchg = bookProfile1D(11, 1, 1); _hist_pminnchg = bookProfile1D(11, 1, 2); _hist_pdifnchg = bookProfile1D(11, 1, 3); _hist_tcptsum = bookProfile1D(12, 1, 1); _hist_pcptsum = bookProfile1D(12, 1, 2); _hist_acptsum = bookProfile1D(12, 1, 3); _hist_pmaxcptsum = bookProfile1D(13, 1, 1); _hist_pmincptsum = bookProfile1D(13, 1, 2); _hist_pdifcptsum = bookProfile1D(13, 1, 3); _hist_pcptave = bookProfile1D(14, 1, 1); _hist_pcptmax = bookProfile1D(15, 1, 1); } // Do the analysis void analyze(const Event& e) { /// @todo Implement Run II min bias trigger cf. CDF_2009? const FinalState& fsj = applyProjection(e, "FSJ"); if (fsj.particles().size() < 1) { MSG_DEBUG("Failed multiplicity cut"); vetoEvent; } const Jets& jets = applyProjection(e, "MidpointJets").jetsByPt(); MSG_DEBUG("Jet multiplicity = " << jets.size()); // We require the leading jet to be within |eta|<2 if (jets.size() < 1 || fabs(jets[0].momentum().eta()) >= 2) { MSG_DEBUG("Failed leading jet cut"); vetoEvent; } const double jetphi = jets[0].momentum().phi(); const double jeteta = jets[0].momentum().eta(); const double jetpT = jets[0].momentum().pT(); MSG_DEBUG("Leading jet: pT = " << jetpT << ", eta = " << jeteta << ", phi = " << jetphi); // Get the event weight const double weight = e.weight(); // Get the final states to work with for filling the distributions const FinalState& cfs = applyProjection(e, "CFS"); size_t numOverall(0), numToward(0), numAway(0) ; long int numTrans1(0), numTrans2(0); double ptSumOverall(0.0), ptSumToward(0.0), ptSumTrans1(0.0), ptSumTrans2(0.0), ptSumAway(0.0); double ptMaxOverall(0.0), ptMaxToward(0.0), ptMaxTrans1(0.0), ptMaxTrans2(0.0), ptMaxAway(0.0); // Calculate all the charged stuff foreach (const Particle& p, cfs.particles()) { const double dPhi = deltaPhi(p.momentum().phi(), jetphi); const double pT = p.momentum().pT(); const double phi = p.momentum().phi(); double rotatedphi = phi - jetphi; while (rotatedphi < 0) rotatedphi += 2*PI; ptSumOverall += pT; ++numOverall; if (pT > ptMaxOverall) { ptMaxOverall = pT; } if (dPhi < PI/3.0) { ptSumToward += pT; ++numToward; if (pT > ptMaxToward) ptMaxToward = pT; } else if (dPhi < 2*PI/3.0) { if (rotatedphi <= PI) { ptSumTrans1 += pT; ++numTrans1; if (pT > ptMaxTrans1) ptMaxTrans1 = pT; } else { ptSumTrans2 += pT; ++numTrans2; if (pT > ptMaxTrans2) ptMaxTrans2 = pT; } } else { ptSumAway += pT; ++numAway; if (pT > ptMaxAway) ptMaxAway = pT; } } // end charged particle loop // Fill the histograms _hist_tnchg->fill(jetpT/GeV, numToward/(4*PI/3), weight); _hist_pnchg->fill(jetpT/GeV, (numTrans1+numTrans2)/(4*PI/3), weight); _hist_pmaxnchg->fill(jetpT/GeV, (numTrans1>numTrans2 ? numTrans1 : numTrans2)/(2*PI/3), weight); _hist_pminnchg->fill(jetpT/GeV, (numTrans1fill(jetpT/GeV, abs(numTrans1-numTrans2)/(2*PI/3), weight); _hist_anchg->fill(jetpT/GeV, numAway/(4*PI/3), weight); _hist_tcptsum->fill(jetpT/GeV, ptSumToward/GeV/(4*PI/3), weight); _hist_pcptsum->fill(jetpT/GeV, (ptSumTrans1+ptSumTrans2)/GeV/(4*PI/3), weight); _hist_pmaxcptsum->fill(jetpT/GeV, (ptSumTrans1>ptSumTrans2 ? ptSumTrans1 : ptSumTrans2)/GeV/(2*PI/3), weight); _hist_pmincptsum->fill(jetpT/GeV, (ptSumTrans1fill(jetpT/GeV, fabs(ptSumTrans1-ptSumTrans2)/GeV/(2*PI/3), weight); _hist_acptsum->fill(jetpT/GeV, ptSumAway/GeV/(4*PI/3), weight); if ((numTrans1+numTrans2) > 0) { _hist_pcptave->fill(jetpT/GeV, (ptSumTrans1+ptSumTrans2)/GeV/(numTrans1+numTrans2), weight); _hist_pcptmax->fill(jetpT/GeV, (ptMaxTrans1 > ptMaxTrans2 ? ptMaxTrans1 : ptMaxTrans2)/GeV, weight); } } void finalize() { } //@} private: AIDA::IProfile1D *_hist_tnchg; AIDA::IProfile1D *_hist_pnchg; AIDA::IProfile1D *_hist_anchg; AIDA::IProfile1D *_hist_pmaxnchg; AIDA::IProfile1D *_hist_pminnchg; AIDA::IProfile1D *_hist_pdifnchg; AIDA::IProfile1D *_hist_tcptsum; AIDA::IProfile1D *_hist_pcptsum; AIDA::IProfile1D *_hist_acptsum; AIDA::IProfile1D *_hist_pmaxcptsum; AIDA::IProfile1D *_hist_pmincptsum; AIDA::IProfile1D *_hist_pdifcptsum; AIDA::IProfile1D *_hist_pcptave; AIDA::IProfile1D *_hist_pcptmax; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2010_S8591881_QCD); } rivet-1.8.3/src/Analyses/OPAL_2004_S6132243.cc0000644000175000017500000002513512116077757016177 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/Sphericity.hh" #include "Rivet/Projections/Thrust.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/ParisiTensor.hh" #include "Rivet/Projections/Hemispheres.hh" #include namespace Rivet { /// @brief OPAL event shapes and moments at 91, 133, 177, and 197 GeV /// @author Andy Buckley class OPAL_2004_S6132243 : public Analysis { public: /// Constructor OPAL_2004_S6132243() : Analysis("OPAL_2004_S6132243"), _isqrts(-1), _sumWTrack2(0.0), _sumWJet3(0.0) { // } /// @name Analysis methods //@{ /// Energies: 91, 133, 177 (161-183), 197 (189-209) => index 0..4 int getHistIndex(double sqrts) { int ih = -1; if (inRange(sqrts/GeV, 89.9, 91.5)) { ih = 0; } else if (fuzzyEquals(sqrts/GeV, 133)) { ih = 1; } else if (fuzzyEquals(sqrts/GeV, 177)) { // (161-183) ih = 2; } else if (fuzzyEquals(sqrts/GeV, 197)) { // (189-209) ih = 3; } else { stringstream ss; ss << "Invalid energy for OPAL_2004 analysis: " << sqrts/GeV << " GeV != 91, 133, 177, or 197 GeV"; throw Error(ss.str()); } assert(ih >= 0); return ih; } void init() { // Projections addProjection(Beam(), "Beams"); const FinalState fs; addProjection(fs, "FS"); const ChargedFinalState cfs; addProjection(cfs, "CFS"); addProjection(FastJets(fs, FastJets::DURHAM, 0.7), "DurhamJets"); addProjection(Sphericity(fs), "Sphericity"); addProjection(ParisiTensor(fs), "Parisi"); const Thrust thrust(fs); addProjection(thrust, "Thrust"); addProjection(Hemispheres(thrust), "Hemispheres"); // Get beam energy index _isqrts = getHistIndex(sqrtS()); // Book histograms _hist1MinusT[_isqrts] = bookHistogram1D(1, 1, _isqrts+1); _histHemiMassH[_isqrts] = bookHistogram1D(2, 1, _isqrts+1); _histCParam[_isqrts] = bookHistogram1D(3, 1, _isqrts+1); _histHemiBroadT[_isqrts] = bookHistogram1D(4, 1, _isqrts+1); _histHemiBroadW[_isqrts] = bookHistogram1D(5, 1, _isqrts+1); _histY23Durham[_isqrts] = bookHistogram1D(6, 1, _isqrts+1); _histTMajor[_isqrts] = bookHistogram1D(7, 1, _isqrts+1); _histTMinor[_isqrts] = bookHistogram1D(8, 1, _isqrts+1); _histAplanarity[_isqrts] = bookHistogram1D(9, 1, _isqrts+1); _histSphericity[_isqrts] = bookHistogram1D(10, 1, _isqrts+1); _histOblateness[_isqrts] = bookHistogram1D(11, 1, _isqrts+1); _histHemiMassL[_isqrts] = bookHistogram1D(12, 1, _isqrts+1); _histHemiBroadN[_isqrts] = bookHistogram1D(13, 1, _isqrts+1); _histDParam[_isqrts] = bookHistogram1D(14, 1, _isqrts+1); // _hist1MinusTMom[_isqrts] = bookHistogram1D(15, 1, _isqrts+1); _histHemiMassHMom[_isqrts] = bookHistogram1D(16, 1, _isqrts+1); _histCParamMom[_isqrts] = bookHistogram1D(17, 1, _isqrts+1); _histHemiBroadTMom[_isqrts] = bookHistogram1D(18, 1, _isqrts+1); _histHemiBroadWMom[_isqrts] = bookHistogram1D(19, 1, _isqrts+1); _histY23DurhamMom[_isqrts] = bookHistogram1D(20, 1, _isqrts+1); _histTMajorMom[_isqrts] = bookHistogram1D(21, 1, _isqrts+1); _histTMinorMom[_isqrts] = bookHistogram1D(22, 1, _isqrts+1); _histSphericityMom[_isqrts] = bookHistogram1D(23, 1, _isqrts+1); _histOblatenessMom[_isqrts] = bookHistogram1D(24, 1, _isqrts+1); _histHemiMassLMom[_isqrts] = bookHistogram1D(25, 1, _isqrts+1); _histHemiBroadNMom[_isqrts] = bookHistogram1D(26, 1, _isqrts+1); } void analyze(const Event& event) { // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. const FinalState& cfs = applyProjection(event, "CFS"); if (cfs.size() < 2) vetoEvent; // Increment passed-cuts weight sum const double weight = event.weight(); _sumWTrack2 += weight; // Thrusts const Thrust& thrust = applyProjection(event, "Thrust"); _hist1MinusT[_isqrts]->fill(1-thrust.thrust(), weight); _histTMajor[_isqrts]->fill(thrust.thrustMajor(), weight); _histTMinor[_isqrts]->fill(thrust.thrustMinor(), weight); _histOblateness[_isqrts]->fill(thrust.oblateness(), weight); for (int n = 1; n <= 5; ++n) { _hist1MinusTMom[_isqrts]->fill(n, pow(1-thrust.thrust(), n)*weight); _histTMajorMom[_isqrts]->fill(n, pow(thrust.thrustMajor(), n)*weight); _histTMinorMom[_isqrts]->fill(n, pow(thrust.thrustMinor(), n)*weight); _histOblatenessMom[_isqrts]->fill(n, pow(thrust.oblateness(), n)*weight); } // Jets const FastJets& durjet = applyProjection(event, "DurhamJets"); if (durjet.clusterSeq()) { _sumWJet3 += weight; const double y23 = durjet.clusterSeq()->exclusive_ymerge_max(2); _histY23Durham[_isqrts]->fill(y23, weight); for (int n = 1; n <= 5; ++n) { _histY23DurhamMom[_isqrts]->fill(n, pow(y23, n)*weight); } } // Sphericities const Sphericity& sphericity = applyProjection(event, "Sphericity"); const double sph = sphericity.sphericity(); const double apl = sphericity.aplanarity(); _histSphericity[_isqrts]->fill(sph, weight); _histAplanarity[_isqrts]->fill(apl, weight); for (int n = 1; n <= 5; ++n) { _histSphericityMom[_isqrts]->fill(n, pow(sph, n)*weight); } // C & D params const ParisiTensor& parisi = applyProjection(event, "Parisi"); const double cparam = parisi.C(); const double dparam = parisi.D(); _histCParam[_isqrts]->fill(cparam, weight); _histDParam[_isqrts]->fill(dparam, weight); for (int n = 1; n <= 5; ++n) { _histCParamMom[_isqrts]->fill(n, pow(cparam, n)*weight); } // Hemispheres const Hemispheres& hemi = applyProjection(event, "Hemispheres"); // The paper says that M_H/L are scaled by sqrt(s), but scaling by E_vis is the way that fits the data... const double hemi_mh = hemi.scaledMhigh(); const double hemi_ml = hemi.scaledMlow(); /// @todo This shouldn't be necessary... what's going on? Memory corruption suspected :( // if (std::isnan(hemi_ml)) { // MSG_ERROR("NaN in HemiL! Event = " << numEvents()); // MSG_ERROR(hemi.M2low() << ", " << hemi.E2vis()); // } if (!std::isnan(hemi_mh) && !std::isnan(hemi_ml)) { const double hemi_bmax = hemi.Bmax(); const double hemi_bmin = hemi.Bmin(); const double hemi_bsum = hemi.Bsum(); _histHemiMassH[_isqrts]->fill(hemi_mh, weight); _histHemiMassL[_isqrts]->fill(hemi_ml, weight); _histHemiBroadW[_isqrts]->fill(hemi_bmax, weight); _histHemiBroadN[_isqrts]->fill(hemi_bmin, weight); _histHemiBroadT[_isqrts]->fill(hemi_bsum, weight); for (int n = 1; n <= 5; ++n) { // if (std::isnan(pow(hemi_ml, n))) MSG_ERROR("NaN in HemiL moment! Event = " << numEvents()); _histHemiMassHMom[_isqrts]->fill(n, pow(hemi_mh, n)*weight); _histHemiMassLMom[_isqrts]->fill(n, pow(hemi_ml, n)*weight); _histHemiBroadWMom[_isqrts]->fill(n, pow(hemi_bmax, n)*weight); _histHemiBroadNMom[_isqrts]->fill(n, pow(hemi_bmin, n)*weight); _histHemiBroadTMom[_isqrts]->fill(n, pow(hemi_bsum, n)*weight); } } } void finalize() { scale(_hist1MinusT[_isqrts], 1.0/_sumWTrack2); scale(_histTMajor[_isqrts], 1.0/_sumWTrack2); scale(_histTMinor[_isqrts], 1.0/_sumWTrack2); scale(_histOblateness[_isqrts], 1.0/_sumWTrack2); scale(_histSphericity[_isqrts], 1.0/_sumWTrack2); scale(_histAplanarity[_isqrts], 1.0/_sumWTrack2); scale(_histHemiMassH[_isqrts], 1.0/_sumWTrack2); scale(_histHemiMassL[_isqrts], 1.0/_sumWTrack2); scale(_histHemiBroadW[_isqrts], 1.0/_sumWTrack2); scale(_histHemiBroadN[_isqrts], 1.0/_sumWTrack2); scale(_histHemiBroadT[_isqrts], 1.0/_sumWTrack2); scale(_histCParam[_isqrts], 1.0/_sumWTrack2); scale(_histDParam[_isqrts], 1.0/_sumWTrack2); scale(_histY23Durham[_isqrts], 1.0/_sumWJet3); // scale(_hist1MinusTMom[_isqrts], 1.0/_sumWTrack2); scale(_histTMajorMom[_isqrts], 1.0/_sumWTrack2); scale(_histTMinorMom[_isqrts], 1.0/_sumWTrack2); scale(_histOblatenessMom[_isqrts], 1.0/_sumWTrack2); scale(_histSphericityMom[_isqrts], 1.0/_sumWTrack2); scale(_histHemiMassHMom[_isqrts], 1.0/_sumWTrack2); scale(_histHemiMassLMom[_isqrts], 1.0/_sumWTrack2); scale(_histHemiBroadWMom[_isqrts], 1.0/_sumWTrack2); scale(_histHemiBroadNMom[_isqrts], 1.0/_sumWTrack2); scale(_histHemiBroadTMom[_isqrts], 1.0/_sumWTrack2); scale(_histCParamMom[_isqrts], 1.0/_sumWTrack2); scale(_histY23DurhamMom[_isqrts], 1.0/_sumWJet3); } //@} private: /// Beam energy index for histograms int _isqrts; /// @name Counters of event weights passing the cuts //@{ double _sumWTrack2, _sumWJet3; //@} /// @name Event shape histos at 4 energies //@{ AIDA::IHistogram1D* _hist1MinusT[4]; AIDA::IHistogram1D* _histHemiMassH[4]; AIDA::IHistogram1D* _histCParam[4]; AIDA::IHistogram1D* _histHemiBroadT[4]; AIDA::IHistogram1D* _histHemiBroadW[4]; AIDA::IHistogram1D* _histY23Durham[4]; AIDA::IHistogram1D* _histTMajor[4]; AIDA::IHistogram1D* _histTMinor[4]; AIDA::IHistogram1D* _histAplanarity[4]; AIDA::IHistogram1D* _histSphericity[4]; AIDA::IHistogram1D* _histOblateness[4]; AIDA::IHistogram1D* _histHemiMassL[4]; AIDA::IHistogram1D* _histHemiBroadN[4]; AIDA::IHistogram1D* _histDParam[4]; //@} /// @name Event shape moment histos at 4 energies //@{ AIDA::IHistogram1D* _hist1MinusTMom[4]; AIDA::IHistogram1D* _histHemiMassHMom[4]; AIDA::IHistogram1D* _histCParamMom[4]; AIDA::IHistogram1D* _histHemiBroadTMom[4]; AIDA::IHistogram1D* _histHemiBroadWMom[4]; AIDA::IHistogram1D* _histY23DurhamMom[4]; AIDA::IHistogram1D* _histTMajorMom[4]; AIDA::IHistogram1D* _histTMinorMom[4]; AIDA::IHistogram1D* _histSphericityMom[4]; AIDA::IHistogram1D* _histOblatenessMom[4]; AIDA::IHistogram1D* _histHemiMassLMom[4]; AIDA::IHistogram1D* _histHemiBroadNMom[4]; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(OPAL_2004_S6132243); } rivet-1.8.3/src/Analyses/MC_GENERIC.cc0000644000175000017500000001413712116077757015403 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" //#include "Rivet/Projections/MissingMomentum.hh" #include "LWH/Histogram1D.h" namespace Rivet { /// Generic analysis looking at various distributions of final state particles class MC_GENERIC : public Analysis { public: /// Constructor MC_GENERIC() : Analysis("MC_GENERIC") { } public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // Projections const FinalState cnfs(-5.0, 5.0, 500*MeV); addProjection(cnfs, "FS"); addProjection(ChargedFinalState(-5.0, 5.0, 500*MeV), "CFS"); //addProjection(MissingMomentum(cnfs), "ETmiss"); // Histograms // @todo Choose E/pT ranged based on input energies... can't do anything about kin. cuts, though _histMult = bookHistogram1D("Mult", 100, -0.5, 199.5); _histMultCh = bookHistogram1D("MultCh", 100, -0.5, 199.5); _histPt = bookHistogram1D("Pt", 300, 0, 30); _histPtCh = bookHistogram1D("PtCh", 300, 0, 30); _histE = bookHistogram1D("E", 100, 0, 200); _histECh = bookHistogram1D("ECh", 100, 0, 200); _histEta = bookHistogram1D("Eta", 50, -5, 5); _histEtaCh = bookHistogram1D("EtaCh", 50, -5, 5); _tmphistEtaPlus.reset(new LWH::Histogram1D(25, 0, 5)); _tmphistEtaMinus.reset(new LWH::Histogram1D(25, 0, 5)); _tmphistEtaChPlus.reset(new LWH::Histogram1D(25, 0, 5)); _tmphistEtaChMinus.reset(new LWH::Histogram1D(25, 0, 5)); _histEtaSumEt = bookProfile1D("EtaSumEt", 25, 0, 5); _histRapidity = bookHistogram1D("Rapidity", 50, -5, 5); _histRapidityCh = bookHistogram1D("RapidityCh", 50, -5, 5); _tmphistRapPlus.reset(new LWH::Histogram1D(25, 0, 5)); _tmphistRapMinus.reset(new LWH::Histogram1D(25, 0, 5)); _tmphistRapChPlus.reset(new LWH::Histogram1D(25, 0, 5)); _tmphistRapChMinus.reset(new LWH::Histogram1D(25, 0, 5)); _histPhi = bookHistogram1D("Phi", 50, 0, TWOPI); _histPhiCh = bookHistogram1D("PhiCh", 50, 0, TWOPI); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // Charged + neutral final state const FinalState& cnfs = applyProjection(event, "FS"); MSG_DEBUG("Total multiplicity = " << cnfs.size()); _histMult->fill(cnfs.size(), weight); foreach (const Particle& p, cnfs.particles()) { const double eta = p.momentum().eta(); _histEta->fill(eta, weight); _histEtaSumEt->fill(fabs(eta), p.momentum().Et(), weight); if (eta > 0) { _tmphistEtaPlus->fill(fabs(eta), weight); } else { _tmphistEtaMinus->fill(fabs(eta), weight); } const double rapidity = p.momentum().rapidity(); _histRapidity->fill(rapidity, weight); if (rapidity > 0) { _tmphistRapPlus->fill(fabs(rapidity), weight); } else { _tmphistRapMinus->fill(fabs(rapidity), weight); } _histPt->fill(p.momentum().pT()/GeV, weight); _histE->fill(p.momentum().E()/GeV, weight); _histPhi->fill(p.momentum().phi(), weight); } const FinalState& cfs = applyProjection(event, "CFS"); MSG_DEBUG("Total charged multiplicity = " << cfs.size()); _histMultCh->fill(cfs.size(), weight); foreach (const Particle& p, cfs.particles()) { const double eta = p.momentum().eta(); _histEtaCh->fill(eta, weight); if (eta > 0) { _tmphistEtaChPlus->fill(fabs(eta), weight); } else { _tmphistEtaChMinus->fill(fabs(eta), weight); } const double rapidity = p.momentum().rapidity(); _histRapidityCh->fill(rapidity, weight); if (rapidity > 0) { _tmphistRapChPlus->fill(fabs(rapidity), weight); } else { _tmphistRapChMinus->fill(fabs(rapidity), weight); } _histPtCh->fill(p.momentum().pT()/GeV, weight); _histECh->fill(p.momentum().E()/GeV, weight); _histPhiCh->fill(p.momentum().phi(), weight); } // const MissingMomentum& met = applyProjection(event, "ETmiss"); } /// Finalize void finalize() { scale(_histMult, 1/sumOfWeights()); scale(_histMultCh, 1/sumOfWeights()); scale(_histEta, 1/sumOfWeights()); scale(_histEtaCh, 1/sumOfWeights()); scale(_histRapidity, 1/sumOfWeights()); scale(_histRapidityCh, 1/sumOfWeights()); scale(_histPt, 1/sumOfWeights()); scale(_histPtCh, 1/sumOfWeights()); scale(_histE, 1/sumOfWeights()); scale(_histECh, 1/sumOfWeights()); scale(_histPhi, 1/sumOfWeights()); scale(_histPhiCh, 1/sumOfWeights()); histogramFactory().divide(histoPath("EtaPMRatio"), *_tmphistEtaPlus, *_tmphistEtaMinus); histogramFactory().divide(histoPath("EtaChPMRatio"), *_tmphistEtaChPlus, *_tmphistEtaChMinus); histogramFactory().divide(histoPath("RapidityPMRatio"), *_tmphistRapPlus, *_tmphistRapMinus); histogramFactory().divide(histoPath("RapidityChPMRatio"), *_tmphistRapChPlus, *_tmphistRapChMinus); } //@} private: /// Temporary histos used to calculate eta+/eta- ratio plot shared_ptr _tmphistEtaPlus, _tmphistEtaMinus; shared_ptr _tmphistEtaChPlus, _tmphistEtaChMinus; shared_ptr _tmphistRapPlus, _tmphistRapMinus; shared_ptr _tmphistRapChPlus, _tmphistRapChMinus; /// @name Histograms //@{ AIDA::IHistogram1D *_histMult, *_histMultCh; AIDA::IProfile1D *_histEtaSumEt; AIDA::IHistogram1D *_histEta, *_histEtaCh; AIDA::IHistogram1D *_histRapidity, *_histRapidityCh; AIDA::IHistogram1D *_histPt, *_histPtCh; AIDA::IHistogram1D *_histE, *_histECh; AIDA::IHistogram1D *_histPhi, *_histPhiCh; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_GENERIC); } rivet-1.8.3/src/Analyses/UA5_1988_S1867512.cc0000644000175000017500000001737612116077757016103 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Math/MathUtils.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/TriggerUA5.hh" namespace Rivet { /// @brief UA5 charged particle correlations at 200, 546 and 900 GeV class UA5_1988_S1867512 : public Analysis { public: UA5_1988_S1867512() : Analysis("UA5_1988_S1867512") { _sumWPassed = 0; } /// @name Analysis methods //@{ void init() { // Projections addProjection(TriggerUA5(), "Trigger"); // Symmetric eta interval addProjection(ChargedFinalState(-0.5, 0.5), "CFS05"); // Asymmetric intervals first // Forward eta intervals addProjection(ChargedFinalState(0.0, 1.0), "CFS10F"); addProjection(ChargedFinalState(0.5, 1.5), "CFS15F"); addProjection(ChargedFinalState(1.0, 2.0), "CFS20F"); addProjection(ChargedFinalState(1.5, 2.5), "CFS25F"); addProjection(ChargedFinalState(2.0, 3.0), "CFS30F"); addProjection(ChargedFinalState(2.5, 3.5), "CFS35F"); addProjection(ChargedFinalState(3.0, 4.0), "CFS40F"); // Backward eta intervals addProjection(ChargedFinalState(-1.0, 0.0), "CFS10B"); addProjection(ChargedFinalState(-1.5, -0.5), "CFS15B"); addProjection(ChargedFinalState(-2.0, -1.0), "CFS20B"); addProjection(ChargedFinalState(-2.5, -1.5), "CFS25B"); addProjection(ChargedFinalState(-3.0, -2.0), "CFS30B"); addProjection(ChargedFinalState(-3.5, -2.5), "CFS35B"); addProjection(ChargedFinalState(-4.0, -3.0), "CFS40B"); // Histogram booking, we have sqrt(s) = 200, 546 and 900 GeV // TODO use DataPointSet to be able to output errors if (fuzzyEquals(sqrtS()/GeV, 200.0, 1E-4)) { _hist_correl = bookDataPointSet(2, 1, 1); _hist_correl_asym = bookDataPointSet(3, 1, 1); } else if (fuzzyEquals(sqrtS()/GeV, 546.0, 1E-4)) { _hist_correl = bookDataPointSet(2, 1, 2); _hist_correl_asym = bookDataPointSet(3, 1, 2); } else if (fuzzyEquals(sqrtS()/GeV, 900.0, 1E-4)) { _hist_correl = bookDataPointSet(2, 1, 3); _hist_correl_asym = bookDataPointSet(3, 1, 3); } } void analyze(const Event& event) { // Trigger const bool trigger = applyProjection(event, "Trigger").nsdDecision(); if (!trigger) vetoEvent; _sumWPassed += event.weight(); // Count forward/backward particles n_10f += applyProjection(event, "CFS10F").size(); n_15f += applyProjection(event, "CFS15F").size(); n_20f += applyProjection(event, "CFS20F").size(); n_25f += applyProjection(event, "CFS25F").size(); n_30f += applyProjection(event, "CFS30F").size(); n_35f += applyProjection(event, "CFS35F").size(); n_40f += applyProjection(event, "CFS40F").size(); // n_10b += applyProjection(event, "CFS10B").size(); n_15b += applyProjection(event, "CFS15B").size(); n_20b += applyProjection(event, "CFS20B").size(); n_25b += applyProjection(event, "CFS25B").size(); n_30b += applyProjection(event, "CFS30B").size(); n_35b += applyProjection(event, "CFS35B").size(); n_40b += applyProjection(event, "CFS40B").size(); // n_05 += applyProjection(event, "CFS05").size(); } void finalize() { // The correlation strength is defined in formulas // 4.1 and 4.2 // Fill histos, gap width histo comes first // * Set the errors as Delta b / sqrt(sumWPassed) with // Delta b being the absolute uncertainty of b according to // Gaussian error-propagation (linear limit) and assuming // Poissonian uncertainties for the number of particles in // the eta-intervals // // Define vectors to be able to fill DataPointSets vector xvals; vector xerrs; vector yvals; vector yerrs; // This defines the binning eventually for (int i=0; i<7; i++) { xvals.push_back(static_cast(i)); xerrs.push_back(0.5); } // Fill the y-value vector yvals.push_back(correlation(n_10f, n_10b)); yvals.push_back(correlation(n_15f, n_15b)); yvals.push_back(correlation(n_20f, n_20b)); yvals.push_back(correlation(n_25f, n_25b)); yvals.push_back(correlation(n_30f, n_30b)); yvals.push_back(correlation(n_35f, n_35b)); yvals.push_back(correlation(n_40f, n_40b)); // Fill the y-error vector yerrs.push_back(correlation_err(n_10f, n_10b)/sqrt(_sumWPassed)); yerrs.push_back(correlation_err(n_15f, n_15b)/sqrt(_sumWPassed)); yerrs.push_back(correlation_err(n_20f, n_20b)/sqrt(_sumWPassed)); yerrs.push_back(correlation_err(n_25f, n_25b)/sqrt(_sumWPassed)); yerrs.push_back(correlation_err(n_30f, n_30b)/sqrt(_sumWPassed)); yerrs.push_back(correlation_err(n_35f, n_35b)/sqrt(_sumWPassed)); yerrs.push_back(correlation_err(n_40f, n_40b)/sqrt(_sumWPassed)); // Fill the DPS _hist_correl->setCoordinate(0, xvals, xerrs); _hist_correl->setCoordinate(1, yvals, yerrs); // Now do the other histo -- clear already defined vectors first xvals.clear(); xerrs.clear(); yvals.clear(); yerrs.clear(); // Different binning for this one for (int i=0; i<6; i++) { xvals.push_back(0.5* static_cast(i)); xerrs.push_back(0.25); } // Fill gap-center histo (Fig 15) // // The first bin contains the c_str strengths of // the gap size histo that has ane eta gap of two // // Fill the y-value vector yvals.push_back(correlation(n_20f, n_20b)); yvals.push_back(correlation(n_25f, n_15b)); yvals.push_back(correlation(n_30f, n_10b)); yvals.push_back(correlation(n_35f, n_05 )); yvals.push_back(correlation(n_40f, n_10f)); // Fill the y-error vector yerrs.push_back(correlation_err(n_20f, n_20b)/sqrt(_sumWPassed)); yerrs.push_back(correlation_err(n_25f, n_15b)/sqrt(_sumWPassed)); yerrs.push_back(correlation_err(n_30f, n_10b)/sqrt(_sumWPassed)); yerrs.push_back(correlation_err(n_35f, n_05 )/sqrt(_sumWPassed)); yerrs.push_back(correlation_err(n_40f, n_10f)/sqrt(_sumWPassed)); // Fill in correlation strength for assymetric intervals, // see Tab. 5 // Fill the DPS _hist_correl_asym->setCoordinate(0, xvals, xerrs); _hist_correl_asym->setCoordinate(1, yvals, yerrs); } //@} private: /// @name Counters //@{ double _sumWPassed; //@} /// @name Vectors for storing the number of particles in the different eta intervals per event. /// @todo Is there a better way? //@{ std::vector n_10f; std::vector n_15f; std::vector n_20f; std::vector n_25f; std::vector n_30f; std::vector n_35f; std::vector n_40f; // std::vector n_10b; std::vector n_15b; std::vector n_20b; std::vector n_25b; std::vector n_30b; std::vector n_35b; std::vector n_40b; // std::vector n_05; //@} /// @name Histograms //@{ // Symmetric eta intervals AIDA::IDataPointSet *_hist_correl; // For asymmetric eta intervals AIDA::IDataPointSet *_hist_correl_asym; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(UA5_1988_S1867512); } rivet-1.8.3/src/Analyses/UA5_1989_S1926373.cc0000644000175000017500000000666112116077757016100 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/TriggerUA5.hh" namespace Rivet { /// @brief UA5 min bias charged multiplicities in central \f$ \eta \f$ ranges class UA5_1989_S1926373 : public Analysis { public: /// Constructor UA5_1989_S1926373() : Analysis("UA5_1989_S1926373") { _sumWPassed = 0; } /// @name Analysis methods //@{ /// Book histograms and projections void init() { addProjection(TriggerUA5(), "Trigger"); addProjection(ChargedFinalState(-0.5, 0.5), "CFS05"); addProjection(ChargedFinalState(-1.5, 1.5), "CFS15"); addProjection(ChargedFinalState(-3.0, 3.0), "CFS30"); addProjection(ChargedFinalState(-5.0, 5.0), "CFS50"); // NB. _hist_nch and _hist_ncheta50 use the same data but different binning if (fuzzyEquals(sqrtS()/GeV, 200, 1E-3)) { _hist_nch = bookHistogram1D(1, 1, 1); _hist_nch_eta05 = bookHistogram1D(3, 1, 1); _hist_nch_eta15 = bookHistogram1D(4, 1, 1); _hist_nch_eta30 = bookHistogram1D(5, 1, 1); _hist_nch_eta50 = bookHistogram1D(6, 1, 1); _hist_mean_nch = bookHistogram1D(11, 1, 1); } else if (fuzzyEquals(sqrtS()/GeV, 900, 1E-3)) { _hist_nch = bookHistogram1D(2, 1, 1); _hist_nch_eta05 = bookHistogram1D(7, 1, 1); _hist_nch_eta15 = bookHistogram1D(8, 1, 1); _hist_nch_eta30 = bookHistogram1D(9, 1, 1); _hist_nch_eta50 = bookHistogram1D(10, 1, 1); _hist_mean_nch = bookHistogram1D(12, 1, 1); } /// @todo Moments of distributions } /// Do the analysis void analyze(const Event& event) { // Trigger const TriggerUA5& trigger = applyProjection(event, "Trigger"); if (!trigger.nsdDecision()) vetoEvent; const double weight = event.weight(); _sumWPassed += weight; // Count final state particles in several eta regions const int numP05 = applyProjection(event, "CFS05").size(); const int numP15 = applyProjection(event, "CFS15").size(); const int numP30 = applyProjection(event, "CFS30").size(); const int numP50 = applyProjection(event, "CFS50").size(); // Fill histograms _hist_nch->fill(numP50, weight); _hist_nch_eta05->fill(numP05, weight); _hist_nch_eta15->fill(numP15, weight); _hist_nch_eta30->fill(numP30, weight); _hist_nch_eta50->fill(numP50, weight); _hist_mean_nch->fill(_hist_mean_nch->binMean(0), numP50*weight); } void finalize() { scale(_hist_nch, 1.0/_sumWPassed); scale(_hist_nch_eta05, 1.0/_sumWPassed); scale(_hist_nch_eta15, 1.0/_sumWPassed); scale(_hist_nch_eta30, 1.0/_sumWPassed); scale(_hist_nch_eta50, 1.0/_sumWPassed); scale(_hist_mean_nch, 1.0/_sumWPassed); } //@} private: /// @name Counters //@{ double _sumWPassed; //@} /// @name Histograms //@{ AIDA::IHistogram1D* _hist_nch; AIDA::IHistogram1D* _hist_nch_eta05; AIDA::IHistogram1D* _hist_nch_eta15; AIDA::IHistogram1D* _hist_nch_eta30; AIDA::IHistogram1D* _hist_nch_eta50; AIDA::IHistogram1D* _hist_mean_nch; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(UA5_1989_S1926373); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1183818.cc0000644000175000017500000002013512116077757016301 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/ParticleIdUtils.hh" //@author Peter Wijeratne //@author Robindra Prabhu namespace Rivet{ // A very basic analysis sensitive to ET flow in minbias and dijet events class ATLAS_2012_I1183818 : public Analysis { public: ATLAS_2012_I1183818() : Analysis("ATLAS_2012_I1183818") {} public: void init() { const FinalState cnfs(-4.8, 4.8, 0*MeV); const ChargedFinalState cfs(-2.5, 2.5, 250*MeV); addProjection(cnfs, "FS"); addProjection(cfs, "CFS"); const FastJets jetsAntiKt4(cnfs, FastJets::ANTIKT, 0.4); addProjection(jetsAntiKt4, "AntiKt4Jets"); // ------- MINBIAS HISTOGRAMS -------- // // MB event counter m_chargedEvents = 0.0; _h_ETflowEta = bookHistogram1D(1, 1, 1); _h_SumETbin1 = bookHistogram1D(3, 1, 1); _h_SumETbin2 = bookHistogram1D(4, 1, 1); _h_SumETbin3 = bookHistogram1D(5, 1, 1); _h_SumETbin4 = bookHistogram1D(6, 1, 1); _h_SumETbin5 = bookHistogram1D(7, 1, 1); _h_SumETbin6 = bookHistogram1D(8, 1, 1); // ------- DIJET HISTOGRAMS -------- // // Dijet event counter m_events_dijets = 0.0; // sumET _h_transETflowEta = bookHistogram1D( 2, 1, 1); _h_transSumETbin1 = bookHistogram1D( 9, 1, 1); _h_transSumETbin2 = bookHistogram1D(10, 1, 1); _h_transSumETbin3 = bookHistogram1D(11, 1, 1); _h_transSumETbin4 = bookHistogram1D(12, 1, 1); _h_transSumETbin5 = bookHistogram1D(13, 1, 1); _h_transSumETbin6 = bookHistogram1D(14, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); const FinalState& cfs = applyProjection(event, "CFS"); bool isCharged = false; if (cfs.size() >= 2) { // event selection: > 2 charged particles with pT > 250.MeV and |eta| < 2.5 isCharged = true; m_chargedEvents += weight; } const FinalState& cnfs = applyProjection(event, "FS"); ParticleVector particles; foreach( const Particle& p, cnfs.particles() ) { // enforce truth selection representing detected particle sensitivity double pp = p.momentum().p().mod(); if (PID::threeCharge(p.pdgId()) != 0 && pp < 0.5*GeV) continue; if (PID::threeCharge(p.pdgId()) == 0 && pp < 0.2*GeV) continue; particles.push_back(p); } // get jets const FastJets& jetsAntiKt4 = applyProjection(event, "AntiKt4Jets"); const Jets& jets = jetsAntiKt4.jetsByPt(20.0*GeV); // initialise sumET variables double sumETbin1 = 0; double sumETbin2 = 0; double sumETbin3 = 0; double sumETbin4 = 0; double sumETbin5 = 0; double sumETbin6 = 0; // if (passes event selection) if (isCharged) { foreach( const Particle& p, particles ) { ///calculate variables double ET = p.momentum().Et()/GeV; double eta = fabs(p.momentum().eta()); // fill histograms _h_ETflowEta->fill(eta, weight*ET); if (eta < 0.8) sumETbin1 += ET; else if (eta < 1.6) sumETbin2 += ET; else if (eta < 2.4) sumETbin3 += ET; else if (eta < 3.2) sumETbin4 += ET; else if (eta < 4.0) sumETbin5 += ET; else if (eta <= 4.8) sumETbin6 += ET; } // end of foreach _h_SumETbin1->fill(sumETbin1, weight); _h_SumETbin2->fill(sumETbin2, weight); _h_SumETbin3->fill(sumETbin3, weight); _h_SumETbin4->fill(sumETbin4, weight); _h_SumETbin5->fill(sumETbin5, weight); _h_SumETbin6->fill(sumETbin6, weight); } // --- do dijet analysis --- if ( jets.size() >= 2 && // require at least two jets jets[0].momentum().Et() >= 20.*GeV && // require two leading jets to pass ET cuts jets[1].momentum().Et() >= 20.*GeV && fabs(jets[0].momentum().eta()) < 2.5 && // require leading jets to be central fabs(jets[1].momentum().eta()) < 2.5 && deltaPhi(jets[0], jets[1]) > 2.5 && // require back-to-back topology jets[1].momentum().Et()/jets[0].momentum().Et() >= 0.5) { //require ET-balance // found an event that satisfies dijet selection, now fill histograms... // initialise dijet sumET variables double trans_sumET_bin1 = 0.; double trans_sumET_bin2 = 0.; double trans_sumET_bin3 = 0.; double trans_sumET_bin4 = 0.; double trans_sumET_bin5 = 0.; double trans_sumET_bin6 = 0.; m_events_dijets += weight; // loop over all particles and check their relation to leading jet foreach( const Particle& particle, particles ) { // calculate variables double dPhi = deltaPhi( jets[0], particle.momentum() ); double ET = particle.momentum().Et()/GeV; double eta = fabs(particle.momentum().eta()); // Transverse region if ( dPhi > 1./3.*M_PI && dPhi < 2./3.*M_PI ) { _h_transETflowEta->fill( eta, weight*ET ); if (eta < 0.8) { trans_sumET_bin1 += ET; } else if (eta < 1.6) { trans_sumET_bin2 += ET; } else if (eta < 2.4) { trans_sumET_bin3 += ET; } else if (eta < 3.2) { trans_sumET_bin4 += ET; } else if (eta < 4.0) { trans_sumET_bin5 += ET; } else if (eta <= 4.8) { trans_sumET_bin6 += ET; } } } // end loop over particles _h_transSumETbin1->fill( trans_sumET_bin1, weight); _h_transSumETbin2->fill( trans_sumET_bin2, weight); _h_transSumETbin3->fill( trans_sumET_bin3, weight); _h_transSumETbin4->fill( trans_sumET_bin4, weight); _h_transSumETbin5->fill( trans_sumET_bin5, weight); _h_transSumETbin6->fill( trans_sumET_bin6, weight); } // end of dijet selection cuts } void finalize() { /// several scale factors here: /// 1. nEvents (m_chargedEvents) /// 2. phase-space (2*M_PI) /// 3. double binning due to symmetrisation (2) scale( _h_ETflowEta, 1./m_chargedEvents/(4.*M_PI) ); scale( _h_SumETbin1, 1./m_chargedEvents ); scale( _h_SumETbin2, 1./m_chargedEvents ); scale( _h_SumETbin3, 1./m_chargedEvents ); scale( _h_SumETbin4, 1./m_chargedEvents ); scale( _h_SumETbin5, 1./m_chargedEvents ); scale( _h_SumETbin6, 1./m_chargedEvents ); //Dijet analysis // Dijet scale factors: //1. number of events passing dijet selection //2. phase-space: 1. / 2/3*M_PI //3. double binning due to symmetrisation in |eta| plots : 1/2 scale( _h_transETflowEta, 1./m_events_dijets * 1./(4./3.*M_PI) ); scale( _h_transSumETbin1, 1./m_events_dijets ); scale( _h_transSumETbin2, 1./m_events_dijets ); scale( _h_transSumETbin3, 1./m_events_dijets ); scale( _h_transSumETbin4, 1./m_events_dijets ); scale( _h_transSumETbin5, 1./m_events_dijets ); scale( _h_transSumETbin6, 1./m_events_dijets ); } private: // Event counts double m_chargedEvents; double m_events_dijets; // Minbias-analysis: variable + histograms AIDA::IHistogram1D* _h_ETflowEta; AIDA::IHistogram1D* _h_SumETbin1; AIDA::IHistogram1D* _h_SumETbin2; AIDA::IHistogram1D* _h_SumETbin3; AIDA::IHistogram1D* _h_SumETbin4; AIDA::IHistogram1D* _h_SumETbin5; AIDA::IHistogram1D* _h_SumETbin6; // Transverse region AIDA::IHistogram1D *_h_transETflowEta; AIDA::IHistogram1D *_h_transSumETbin1; AIDA::IHistogram1D *_h_transSumETbin2; AIDA::IHistogram1D *_h_transSumETbin3; AIDA::IHistogram1D *_h_transSumETbin4; AIDA::IHistogram1D *_h_transSumETbin5; AIDA::IHistogram1D *_h_transSumETbin6; };// end of class ATLAS_2012_I1183818 DECLARE_RIVET_PLUGIN(ATLAS_2012_I1183818); } // end of namespace Rivet rivet-1.8.3/src/Analyses/UA1_1990_S2044935.cc0000644000175000017500000001376012116077757016056 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/MissingMomentum.hh" namespace Rivet { /// @brief UA1 minbias track multiplicities, \f$ p_\perp \f$ and \f$ E_\perp \f$ class UA1_1990_S2044935 : public Analysis { public: /// Constructor UA1_1990_S2044935() : Analysis("UA1_1990_S2044935") { _sumwTrig = 0; _sumwTrig08 = 0; _sumwTrig40 = 0; _sumwTrig80 = 0; } /// @name Analysis methods //@{ /// Book projections and histograms void init() { addProjection(ChargedFinalState(-5.5, 5.5), "TriggerFS"); addProjection(ChargedFinalState(-2.5, 2.5), "TrackFS"); const FinalState trkcalofs(-2.5, 2.5); addProjection(MissingMomentum(trkcalofs), "MET25"); const FinalState calofs(-6.0, 6.0); addProjection(MissingMomentum(calofs), "MET60"); if (fuzzyEquals(sqrtS()/GeV, 63)) { _hist_Pt = bookProfile1D(8,1,1); } else if (fuzzyEquals(sqrtS()/GeV, 200)) { _hist_Nch = bookHistogram1D(1,1,1); _hist_Esigd3p = bookHistogram1D(2,1,1); _hist_Pt = bookProfile1D(6,1,1); _hist_Et = bookHistogram1D(9,1,1); _hist_Etavg = bookProfile1D(12,1,1); } else if (fuzzyEquals(sqrtS()/GeV, 500)) { _hist_Nch = bookHistogram1D(1,1,2); _hist_Esigd3p = bookHistogram1D(2,1,2); _hist_Et = bookHistogram1D(10,1,1); _hist_Etavg = bookProfile1D(12,1,2); } else if (fuzzyEquals(sqrtS()/GeV, 900)) { _hist_Nch = bookHistogram1D(1,1,3); _hist_Esigd3p = bookHistogram1D(2,1,3); _hist_Pt = bookProfile1D(7,1,1); _hist_Et = bookHistogram1D(11,1,1); _hist_Etavg = bookProfile1D(12,1,3); _hist_Esigd3p08 = bookHistogram1D(3,1,1); _hist_Esigd3p40 = bookHistogram1D(4,1,1); _hist_Esigd3p80 = bookHistogram1D(5,1,1); } } void analyze(const Event& event) { // Trigger const FinalState& trigfs = applyProjection(event, "TriggerFS"); unsigned int n_minus(0), n_plus(0); foreach (const Particle& p, trigfs.particles()) { const double eta = p.momentum().eta(); if (inRange(eta, -5.5, -1.5)) n_minus++; else if (inRange(eta, 1.5, 5.5)) n_plus++; } MSG_DEBUG("Trigger -: " << n_minus << ", Trigger +: " << n_plus); if (n_plus == 0 || n_minus == 0) vetoEvent; const double weight = event.weight(); _sumwTrig += weight; // Use good central detector tracks const FinalState& cfs = applyProjection(event, "TrackFS"); const double Et25 = applyProjection(event, "MET25").scalarEt(); const double Et60 = applyProjection(event, "MET60").scalarEt(); const unsigned int nch = cfs.size(); // Event level histos if (!fuzzyEquals(sqrtS()/GeV, 63, 1E-3)) { _hist_Nch->fill(nch, weight); _hist_Et->fill(Et60/GeV, weight); _hist_Etavg->fill(nch, Et25/GeV, weight); } // Particle/track level histos const double deta = 2 * 5.0; const double dphi = TWOPI; const double dnch_deta = nch/deta; foreach (const Particle& p, cfs.particles()) { const double pt = p.momentum().pT(); const double scaled_weight = weight/(deta*dphi*pt/GeV); if (!fuzzyEquals(sqrtS()/GeV, 500, 1E-3)) { _hist_Pt->fill(nch, pt/GeV, weight); } if (!fuzzyEquals(sqrtS()/GeV, 63, 1E-3)) { _hist_Esigd3p->fill(pt/GeV, scaled_weight); } // Also fill for specific dn/deta ranges at 900 GeV if (fuzzyEquals(sqrtS()/GeV, 900, 1E-3)) { if (inRange(dnch_deta, 0.8, 4.0)) { _sumwTrig08 += weight; _hist_Esigd3p08->fill(pt/GeV, scaled_weight); } else if (inRange(dnch_deta, 4.0, 8.0)) { _sumwTrig40 += weight; _hist_Esigd3p40->fill(pt/GeV, scaled_weight); } else { //MSG_WARNING(dnch_deta); if (dnch_deta > 8.0) { _sumwTrig80 += weight; _hist_Esigd3p80->fill(pt/GeV, scaled_weight); } } } } } void finalize() { if (_sumwTrig <= 0) { MSG_WARNING("No events passed the trigger!"); return; } const double xsec = crossSectionPerEvent(); if (!fuzzyEquals(sqrtS()/GeV, 63, 1E-3)) { scale(_hist_Nch, 2*xsec/millibarn); //< Factor of 2 for Nch bin widths? scale(_hist_Esigd3p, xsec/millibarn); scale(_hist_Et, xsec/millibarn); } if (fuzzyEquals(sqrtS()/GeV, 900, 1E-3)) { // NB. Ref data is normalised to a fixed value not reproducible from MC. Note silly AIDA binHeight forgets the bin width. const double scale08 = (_hist_Esigd3p08->binHeight(0) > 0) ? 0.933e5/(_hist_Esigd3p08->binHeight(0)/_hist_Esigd3p08->axis().binWidth(0)) : 0; scale(_hist_Esigd3p08, scale08); const double scale40 = (_hist_Esigd3p40->binHeight(0) > 0) ? 1.369e5/(_hist_Esigd3p40->binHeight(0)/_hist_Esigd3p40->axis().binWidth(0)) : 0; scale(_hist_Esigd3p40, scale40); const double scale80 = (_hist_Esigd3p80->binHeight(0) > 0) ? 1.657e5/(_hist_Esigd3p80->binHeight(0)/_hist_Esigd3p80->axis().binWidth(0)) : 0; scale(_hist_Esigd3p80, scale80); } } //@} private: /// @name Weight counters //@{ double _sumwTrig, _sumwTrig08, _sumwTrig40, _sumwTrig80; //@} /// @name Histogram collections //@{ AIDA::IHistogram1D* _hist_Nch; AIDA::IHistogram1D* _hist_Esigd3p; AIDA::IHistogram1D* _hist_Esigd3p08; AIDA::IHistogram1D* _hist_Esigd3p40; AIDA::IHistogram1D* _hist_Esigd3p80; AIDA::IProfile1D* _hist_Pt; AIDA::IProfile1D* _hist_Etavg; AIDA::IHistogram1D* _hist_Et; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(UA1_1990_S2044935); } rivet-1.8.3/src/Analyses/ATLAS_2010_S8914702.cc0000644000175000017500000001414112116077757016312 0ustar sunsun// -*- C++ -*- #include #include #include #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" #include "Rivet/Jet.hh" #include "Rivet/Projections/FastJets.hh" #include "fastjet/internal/base.hh" #include "fastjet/JetDefinition.hh" #include "fastjet/AreaDefinition.hh" #include "fastjet/ClusterSequence.hh" #include "fastjet/ClusterSequenceArea.hh" #include "fastjet/PseudoJet.hh" namespace Rivet { class ATLAS_2010_S8914702 : public Analysis { public: /// Constructor ATLAS_2010_S8914702() : Analysis("ATLAS_2010_S8914702") { _eta_bins.push_back( 0.00); _eta_bins.push_back( 0.60); _eta_bins.push_back( 1.37); _eta_bins.push_back( 1.52); _eta_bins.push_back( 1.81); _eta_bins_areaoffset.push_back(0.0); _eta_bins_areaoffset.push_back(1.5); _eta_bins_areaoffset.push_back(3.0); } /// Book histograms and initialise projections before the run void init() { FinalState fs; addProjection(fs, "FS"); FastJets fj(fs, FastJets::KT, 0.5); _area_def = new fastjet::AreaDefinition(fastjet::VoronoiAreaSpec()); fj.useJetArea(_area_def); addProjection(fj, "KtJetsD05"); LeadingParticlesFinalState photonfs(FinalState(-1.81, 1.81, 15.0*GeV)); photonfs.addParticleId(PHOTON); addProjection(photonfs, "LeadingPhoton"); int hist_bin = 0; for (int i = 0; i < (int)_eta_bins.size()-1; ++i) { if (fabs(_eta_bins[i] - 1.37) < .0001) continue; _h_Et_photon[i] = bookHistogram1D(1, 1, hist_bin+1); hist_bin += 1; } } int getEtaBin(double eta_w, bool area_eta) const { double eta = fabs(eta_w); int v_iter = 0; if (!area_eta) { for (v_iter=0; v_iter < (int)_eta_bins.size()-1; ++v_iter) { if (eta >= _eta_bins.at(v_iter) && eta < _eta_bins.at(v_iter+1)) break; } } else { for (v_iter=0; v_iter < (int)_eta_bins_areaoffset.size()-1; ++v_iter) { if (eta >= _eta_bins_areaoffset.at(v_iter) && eta < _eta_bins_areaoffset.at(v_iter+1)) break; } } return v_iter; } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); ParticleVector photons = applyProjection(event, "LeadingPhoton").particles(); if (photons.size() != 1) { vetoEvent; } FourMomentum leadingPhoton = photons[0].momentum(); double eta_P = leadingPhoton.eta(); double phi_P = leadingPhoton.phi(); if(fabs(eta_P)>=1.37 && fabs(eta_P)<1.52){ vetoEvent; } int eta_bin = getEtaBin(eta_P,false); ParticleVector fs = applyProjection(event, "FS").particles(); FourMomentum mom_in_EtCone; foreach (const Particle& p, fs) { // check if it's in the cone of .4 if (deltaR(eta_P, phi_P, p.momentum().eta(), p.momentum().phi()) >= 0.4) continue; // check if it's in the 5x7 central core if (fabs(eta_P-p.momentum().eta()) < .025*7.0*0.5 && fabs(phi_P-p.momentum().phi()) < (PI/128.)*5.0*0.5) continue; mom_in_EtCone += p.momentum(); } MSG_DEBUG("Done with initial EtCone."); // Now compute the median energy density _ptDensity.clear(); _sigma.clear(); _Njets.clear(); std::vector< std::vector > ptDensities; std::vector emptyVec; ptDensities.assign(_eta_bins_areaoffset.size()-1,emptyVec); const fastjet::ClusterSequenceArea* clust_seq_area = applyProjection(event, "KtJetsD05").clusterSeqArea(); foreach (const fastjet::PseudoJet& jet, applyProjection(event, "KtJetsD05").pseudoJets(0.0*GeV)) { //const double y = fabs(jet.rapidity()); const double eta = fabs(jet.eta()); const double pt = fabs(jet.perp()); // Get the cluster sequence double area = clust_seq_area->area(jet); if (area > 10e-4 && fabs(eta)<_eta_bins_areaoffset[_eta_bins_areaoffset.size()-1]) { ptDensities.at(getEtaBin(fabs(eta),true)).push_back(pt/area); } } for (int b = 0; b < (int)_eta_bins_areaoffset.size()-1; ++b) { double median = 0.0; double sigma = 0.0; int Njets = 0; if (ptDensities[b].size() > 0) { std::sort(ptDensities[b].begin(), ptDensities[b].end()); int nDens = ptDensities[b].size(); if (nDens % 2 == 0) { median = (ptDensities[b][nDens/2]+ptDensities[b][(nDens-2)/2])/2; } else { median = ptDensities[b][(nDens-1)/2]; } sigma = ptDensities[b][(int)(.15865*nDens)]; Njets = nDens; } _ptDensity.push_back(median); _sigma.push_back(sigma); _Njets.push_back(Njets); } // Now figure out the correction float EtCone_area = PI*.4*.4 - (7.0*.025)*(5.0*PI/128.); float correction = _ptDensity[getEtaBin(eta_P,true)]*EtCone_area; MSG_DEBUG("Jet area correction done."); // Shouldn't need to subtract photon // NB. Using expected cut at hadron/particle level, not cut at reco level if (mom_in_EtCone.Et() - correction/*-leadingPhoton.Et()*/ > 4.0*GeV) { vetoEvent; } MSG_DEBUG("Passed isolation cut."); _h_Et_photon[eta_bin]->fill(leadingPhoton.Et(), weight); } /// Normalise histograms etc., after the run void finalize() { for (int i = 0; i < (int)_eta_bins.size()-1; ++i) { if (fabs(_eta_bins[i] - 1.37) < .0001) continue; scale(_h_Et_photon[i], crossSection()/sumOfWeights()); } } private: AIDA::IHistogram1D *_h_Et_photon[6]; fastjet::AreaDefinition* _area_def; std::vector _eta_bins; std::vector _eta_bins_areaoffset; std::vector _ptDensity; std::vector _sigma; std::vector _Njets; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2010_S8914702); } rivet-1.8.3/src/Analyses/TOTEM_2012_I1115294.cc0000644000175000017500000000246612116077757016325 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" namespace Rivet { class TOTEM_2012_I1115294 : public Analysis { public: TOTEM_2012_I1115294() : Analysis("TOTEM_2012_I1115294") { } public: void init() { ChargedFinalState cfsm(-6.50, -5.35, 40.*MeV); ChargedFinalState cfsp( 5.35, 6.50, 40.*MeV); addProjection(cfsm, "CFSM"); addProjection(cfsp, "CFSP"); _h_eta = bookHistogram1D(1, 1, 1); _sumofweights = 0.; } void analyze(const Event& event) { const double weight = event.weight(); const ChargedFinalState cfsm = applyProjection(event, "CFSM"); const ChargedFinalState cfsp = applyProjection(event, "CFSP"); if (cfsm.size() == 0 && cfsp.size() == 0) vetoEvent; _sumofweights += weight; foreach (const Particle& p, cfsm.particles() + cfsp.particles()) { _h_eta->fill(fabs(p.momentum().eta()), weight); } } void finalize() { scale(_h_eta, 1./(2*_sumofweights)); } private: double _sumofweights; AIDA::IHistogram1D *_h_eta; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(TOTEM_2012_I1115294); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1082936.cc0000644000175000017500000000737612116077757016314 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { class ATLAS_2012_I1082936 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_I1082936() : Analysis("ATLAS_2012_I1082936") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { const FinalState fs; addProjection(fs,"FinalState"); FastJets fj04(fs, FastJets::ANTIKT, 0.4); fj04.useInvisibles(); addProjection(fj04, "AntiKT04"); FastJets fj06(fs, FastJets::ANTIKT, 0.6); fj06.useInvisibles(); addProjection(fj06, "AntiKT06"); // Histogram booking copied from the previous analysis double ybins[] = { 0.0, 0.3, 0.8, 1.2, 2.1, 2.8, 3.6, 4.4 }; double ystarbins[] = { 0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.4}; size_t ptDsOffset(0), massDsOffset(2); for (size_t alg = 0; alg < 2; ++alg) { for (size_t i = 0; i < 7; ++i) { _pThistos[alg].addHistogram(ybins[i], ybins[i+1], bookHistogram1D(1 + ptDsOffset, 1, i+1)); } ptDsOffset += 1; for (size_t i = 0; i < 9; ++i) { _mass[alg].addHistogram(ystarbins[i], ystarbins[i+1], bookHistogram1D(1 + massDsOffset, 1, i+1)); } massDsOffset += 1; } } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); Jets jetAr[2]; jetAr[AKT6] = applyProjection(event, "AntiKT06").jetsByPt(20*GeV); jetAr[AKT4] = applyProjection(event, "AntiKT04").jetsByPt(20*GeV); // Loop over jet "radii" used in analysis for (size_t alg = 0; alg < 2; ++alg) { // Identify dijets vector leadjets; foreach (const Jet& jet, jetAr[alg]) { const double pT = jet.momentum().pT(); const double absy = fabs(jet.momentum().rapidity()); _pThistos[alg].fill(absy, pT/GeV, weight); if (absy < 4.4 && leadjets.size() < 2) { if (leadjets.empty() && pT < 30*GeV) continue; leadjets.push_back(jet.momentum()); } } // Make sure we have a leading jet with pT >30 GeV and a second to leading jet with pT>20 GeV if (leadjets.size() < 2) { MSG_DEBUG("Could not find two suitable leading jets"); continue; } const double y1 = leadjets[0].rapidity(); const double y2 = leadjets[1].rapidity(); const double ystar = fabs(y1-y2)/2.; const double m = (leadjets[0] + leadjets[1]).mass(); // Fill mass histogram _mass[alg].fill(ystar, m/TeV, weight); } } /// Normalise histograms etc., after the run void finalize() { for (size_t alg = 0; alg < 2; ++alg) { // factor 0.5 needed because it is differential in dy and not d|y| _pThistos[alg].scale(0.5*crossSectionPerEvent()/picobarn, this); _mass[alg].scale(crossSectionPerEvent()/picobarn, this); } } //@} private: // Data members like post-cuts event weight counters go here enum Alg { AKT4=0, AKT6=1 }; private: /// The inclusive pT spectrum for akt6 and akt4 jets (array index is jet type from enum above) BinnedHistogram _pThistos[2]; /// The di-jet mass spectrum binned in rapidity for akt6 and akt4 jets (array index is jet type from enum above) BinnedHistogram _mass[2]; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I1082936); } rivet-1.8.3/src/Analyses/D0_2008_S7863608.cc0000644000175000017500000001017012116077757015725 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief D0 differential Z/\f$ \gamma^* \f$ + jet + \f$ X \f$ cross sections /// @author Gavin Hesketh, Andy Buckley, Frank Siegert class D0_2008_S7863608 : public Analysis { public: /// @name Construction //@{ /// Constructor D0_2008_S7863608() : Analysis("D0_2008_S7863608") { } //@} /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; ZFinder zfinder(fs, -1.7, 1.7, 15.0*GeV, MUON, 65.0*GeV, 115.0*GeV, 0.2, false, true); addProjection(zfinder, "ZFinder"); FastJets conefinder(zfinder.remainingFinalState(), FastJets::D0ILCONE, 0.5); addProjection(conefinder, "ConeFinder"); _sum_of_weights_inclusive=0.0; _h_jet_pT_cross_section = bookHistogram1D(1, 1, 1); _h_jet_pT_normalised = bookHistogram1D(1, 1, 2); _h_jet_y_cross_section = bookHistogram1D(2, 1, 1); _h_jet_y_normalised = bookHistogram1D(2, 1, 2); _h_Z_pT_cross_section = bookHistogram1D(3, 1, 1); _h_Z_pT_normalised = bookHistogram1D(3, 1, 2); _h_Z_y_cross_section = bookHistogram1D(4, 1, 1); _h_Z_y_normalised = bookHistogram1D(4, 1, 2); _h_total_cross_section = bookHistogram1D(5, 1, 1); } // Do the analysis void analyze(const Event& e) { const double weight = e.weight(); const ZFinder& zfinder = applyProjection(e, "ZFinder"); if (zfinder.bosons().size()==1) { _sum_of_weights_inclusive += weight; const JetAlg& jetpro = applyProjection(e, "ConeFinder"); const Jets& jets = jetpro.jetsByPt(20.0*GeV); Jets jets_cut; foreach (const Jet& j, jets) { if (fabs(j.momentum().pseudorapidity()) < 2.8) { jets_cut.push_back(j); } } // Return if there are no jets: if(jets_cut.size()<1) { MSG_DEBUG("Skipping event " << e.genEvent().event_number() << " because no jets pass cuts "); vetoEvent; } const FourMomentum Zmom = zfinder.bosons()[0].momentum(); // In jet pT _h_jet_pT_cross_section->fill( jets_cut[0].momentum().pT(), weight); _h_jet_pT_normalised->fill( jets_cut[0].momentum().pT(), weight); _h_jet_y_cross_section->fill( fabs(jets_cut[0].momentum().rapidity()), weight); _h_jet_y_normalised->fill( fabs(jets_cut[0].momentum().rapidity()), weight); // In Z pT _h_Z_pT_cross_section->fill(Zmom.pT(), weight); _h_Z_pT_normalised->fill(Zmom.pT(), weight); _h_Z_y_cross_section->fill(fabs(Zmom.rapidity()), weight); _h_Z_y_normalised->fill(fabs(Zmom.rapidity()), weight); _h_total_cross_section->fill(1960.0, weight); } } /// Finalize void finalize() { const double invlumi = crossSection()/sumOfWeights(); scale(_h_total_cross_section, invlumi); scale(_h_jet_pT_cross_section, invlumi); scale(_h_jet_y_cross_section, invlumi); scale(_h_Z_pT_cross_section, invlumi); scale(_h_Z_y_cross_section, invlumi); double factor=1.0/_sum_of_weights_inclusive; if (_sum_of_weights_inclusive==0.0) factor=0.0; scale(_h_jet_pT_normalised, factor); scale(_h_jet_y_normalised, factor); scale(_h_Z_pT_normalised, factor); scale(_h_Z_y_normalised, factor); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_jet_pT_cross_section; AIDA::IHistogram1D * _h_jet_y_cross_section; AIDA::IHistogram1D * _h_Z_pT_cross_section; AIDA::IHistogram1D * _h_Z_y_cross_section; AIDA::IHistogram1D * _h_total_cross_section; AIDA::IHistogram1D * _h_jet_pT_normalised; AIDA::IHistogram1D * _h_jet_y_normalised; AIDA::IHistogram1D * _h_Z_pT_normalised; AIDA::IHistogram1D * _h_Z_y_normalised; //@} double _sum_of_weights_inclusive; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2008_S7863608); } rivet-1.8.3/src/Analyses/MC_JetAnalysis.cc0000644000175000017500000001623412116077757016555 0ustar sunsun// -*- C++ -*- #include "Rivet/Analyses/MC_JetAnalysis.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { MC_JetAnalysis::MC_JetAnalysis(const string& name, size_t njet, const string& jetpro_name, double jetptcut) : Analysis(name), m_njet(njet), m_jetpro_name(jetpro_name), m_jetptcut(jetptcut), _h_pT_jet(njet, NULL), _h_eta_jet(njet, NULL), _h_eta_jet_plus(njet), _h_eta_jet_minus(njet), _h_rap_jet(njet, NULL), _h_rap_jet_plus(njet), _h_rap_jet_minus(njet), _h_mass_jet(njet, NULL) { setNeedsCrossSection(true); // legitimate use, since a base class has no .info file! } // Book histograms void MC_JetAnalysis::init() { for (size_t i=0; i < m_njet; ++i) { stringstream pTname; pTname << "jet_pT_" << i+1; double pTmax = 1.0/(double(i)+2.0) * sqrtS()/GeV/2.0; int nbins_pT = 100/(i+1); _h_pT_jet[i] = bookHistogram1D(pTname.str(), logBinEdges(nbins_pT, 10.0, pTmax)); stringstream massname; massname << "jet_mass_" << i+1; double mmax = 100.0; int nbins_m = 100/(i+1); _h_mass_jet[i] = bookHistogram1D(massname.str(), logBinEdges(nbins_m, 1.0, mmax)); stringstream etaname; etaname << "jet_eta_" << i+1; _h_eta_jet[i] = bookHistogram1D(etaname.str(), i > 1 ? 25 : 50, -5.0, 5.0); _h_eta_jet_plus[i].reset(new LWH::Histogram1D(i > 1 ? 15 : 25, 0, 5)); _h_eta_jet_minus[i].reset(new LWH::Histogram1D(i > 1 ? 15 : 25, 0, 5)); stringstream rapname; rapname << "jet_y_" << i+1; _h_rap_jet[i] = bookHistogram1D(rapname.str(), i>1 ? 25 : 50, -5.0, 5.0); _h_rap_jet_plus[i].reset(new LWH::Histogram1D(i > 1 ? 15 : 25, 0, 5)); _h_rap_jet_minus[i].reset(new LWH::Histogram1D(i > 1 ? 15 : 25, 0, 5)); for (size_t j = i+1; j < min(size_t(3),m_njet); ++j) { std::pair ij = std::make_pair(i, j); stringstream detaname; detaname << "jets_deta_" << i+1 << j+1; _h_deta_jets.insert(make_pair(ij, bookHistogram1D(detaname.str(), 25, -5.0, 5.0))); stringstream dphiname; dphiname << "jets_dphi_" << i+1 << j+1; _h_dphi_jets.insert(make_pair(ij, bookHistogram1D(dphiname.str(), 25, 0.0, M_PI))); stringstream dRname; dRname << "jets_dR_" << i+1 << j+1; _h_dR_jets.insert(make_pair(ij, bookHistogram1D(dRname.str(), 25, 0.0, 5.0))); } } _h_jet_multi_exclusive = bookHistogram1D("jet_multi_exclusive", m_njet+3, -0.5, m_njet+3-0.5); _h_jet_multi_inclusive = bookHistogram1D("jet_multi_inclusive", m_njet+3, -0.5, m_njet+3-0.5); _h_jet_multi_ratio = bookDataPointSet("jet_multi_ratio", m_njet+2, 0.5, m_njet+3-0.5); _h_jet_HT = bookHistogram1D("jet_HT", logBinEdges(50, m_jetptcut, sqrtS()/GeV/2.0)); } // Do the analysis void MC_JetAnalysis::analyze(const Event & e) { const double weight = e.weight(); const Jets& jets = applyProjection(e, m_jetpro_name).jetsByPt(m_jetptcut); for (size_t i = 0; i < m_njet; ++i) { if (jets.size() < i+1) continue; _h_pT_jet[i]->fill(jets[i].momentum().pT()/GeV, weight); // Check for numerical precision issues with jet masses double m2_i = jets[i].momentum().mass2(); if (m2_i < 0) { if (m2_i < -1e-4) { MSG_WARNING("Jet mass2 is negative: " << m2_i << " GeV^2. " << "Truncating to 0.0, assuming numerical precision is to blame."); } m2_i = 0.0; } // Jet mass _h_mass_jet[i]->fill(sqrt(m2_i)/GeV, weight); // Jet eta const double eta_i = jets[i].momentum().eta(); _h_eta_jet[i]->fill(eta_i, weight); if (eta_i > 0.0) { _h_eta_jet_plus[i]->fill(eta_i, weight); } else { _h_eta_jet_minus[i]->fill(fabs(eta_i), weight); } // Jet rapidity const double rap_i = jets[i].momentum().rapidity(); _h_rap_jet[i]->fill(rap_i, weight); if (rap_i > 0.0) { _h_rap_jet_plus[i]->fill(rap_i, weight); } else { _h_rap_jet_minus[i]->fill(fabs(rap_i), weight); } // Inter-jet properties for (size_t j = i+1; j < min(size_t(3),m_njet); ++j) { if (jets.size() < j+1) continue; std::pair ij = std::make_pair(i, j); double deta = jets[i].momentum().eta()-jets[j].momentum().eta(); double dphi = deltaPhi(jets[i].momentum(),jets[j].momentum()); double dR = deltaR(jets[i].momentum(), jets[j].momentum()); _h_deta_jets[ij]->fill(deta, weight); _h_dphi_jets[ij]->fill(dphi, weight); _h_dR_jets[ij]->fill(dR, weight); } } _h_jet_multi_exclusive->fill(jets.size(), weight); for (size_t i = 0; i < m_njet+2; ++i) { if (jets.size() >= i) { _h_jet_multi_inclusive->fill(i, weight); } } double HT=0.0; foreach (const Jet& jet, jets) { HT += jet.momentum().pT(); } _h_jet_HT->fill(HT, weight); } // Finalize void MC_JetAnalysis::finalize() { for (size_t i = 0; i < m_njet; ++i) { scale(_h_pT_jet[i], crossSection()/sumOfWeights()); scale(_h_mass_jet[i], crossSection()/sumOfWeights()); scale(_h_eta_jet[i], crossSection()/sumOfWeights()); scale(_h_rap_jet[i], crossSection()/sumOfWeights()); // Create eta/rapidity ratio plots stringstream etaname; etaname << "jet_eta_pmratio_" << i+1; histogramFactory().divide(histoPath(etaname.str()), *_h_eta_jet_plus[i], *_h_eta_jet_minus[i]); stringstream rapname; rapname << "jet_y_pmratio_" << i+1; histogramFactory().divide(histoPath(rapname.str()), *_h_rap_jet_plus[i], *_h_rap_jet_minus[i]); } // Scale the d{eta,R} histograms map, AIDA::IHistogram1D*>::iterator it; for (it = _h_deta_jets.begin(); it != _h_deta_jets.end(); ++it) { scale(it->second, crossSection()/sumOfWeights()); } for (it = _h_dphi_jets.begin(); it != _h_dphi_jets.end(); ++it) { scale(it->second, crossSection()/sumOfWeights()); } for (it = _h_dR_jets.begin(); it != _h_dR_jets.end(); ++it) { scale(it->second, crossSection()/sumOfWeights()); } // Fill inclusive jet multi ratio int Nbins = _h_jet_multi_inclusive->axis().bins(); std::vector ratio(Nbins-1, 0.0); std::vector err(Nbins-1, 0.0); for (int i = 0; i < Nbins-1; ++i) { if (_h_jet_multi_inclusive->binHeight(i) > 0.0 && _h_jet_multi_inclusive->binHeight(i+1) > 0.0) { ratio[i] = _h_jet_multi_inclusive->binHeight(i+1)/_h_jet_multi_inclusive->binHeight(i); double relerr_i = _h_jet_multi_inclusive->binError(i)/_h_jet_multi_inclusive->binHeight(i); double relerr_j = _h_jet_multi_inclusive->binError(i+1)/_h_jet_multi_inclusive->binHeight(i+1); err[i] = ratio[i] * (relerr_i + relerr_j); } } _h_jet_multi_ratio->setCoordinate(1, ratio, err); scale(_h_jet_multi_exclusive, crossSection()/sumOfWeights()); scale(_h_jet_multi_inclusive, crossSection()/sumOfWeights()); scale(_h_jet_HT, crossSection()/sumOfWeights()); } } rivet-1.8.3/src/Analyses/ATLAS_2012_I1180197.cc0000644000175000017500000004203012116077757016274 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { class ATLAS_2012_I1180197 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_I1180197() : Analysis("ATLAS_2012_I1180197") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialize projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 7.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 6.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // Jet finder VetoedFinalState vfs; vfs.addVetoPairId(MUON); addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // all tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0,0.5*GeV),"cfs"); // for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); // Book histograms _count_1l_3jet_all_channel = bookHistogram1D("count_1l_3jet_all_channel", 1, 0., 1.); _count_1l_3jet_e_channel = bookHistogram1D("count_1l_3jet_e_channel" , 1, 0., 1.); _count_1l_3jet_mu_channel = bookHistogram1D("count_1l_3jet_mu_channel" , 1, 0., 1.); _count_1l_4jet_all_channel = bookHistogram1D("count_1l_4jet_all_channel", 1, 0., 1.); _count_1l_4jet_e_channel = bookHistogram1D("count_1l_4jet_e_channel" , 1, 0., 1.); _count_1l_4jet_mu_channel = bookHistogram1D("count_1l_4jet_mu_channel" , 1, 0., 1.); _count_1l_soft_all_channel = bookHistogram1D("count_1l_soft_all_channel", 1, 0., 1.); _count_1l_soft_e_channel = bookHistogram1D("count_1l_soft_e_channel" , 1, 0., 1.); _count_1l_soft_mu_channel = bookHistogram1D("count_1l_soft_mu_channel" , 1, 0., 1.); _count_2l_2jet_all_channel = bookHistogram1D("count_2l_2jet_all_channel" , 1, 0., 1.); _count_2l_2jet_ee_channel = bookHistogram1D("count_2l_2jet_ee_channel" , 1, 0., 1.); _count_2l_2jet_emu_channel = bookHistogram1D("count_2l_2jet_emu_channel" , 1, 0., 1.); _count_2l_2jet_mumu_channel = bookHistogram1D("count_2l_2jet_mumu_channel", 1, 0., 1.); _count_2l_4jet_all_channel = bookHistogram1D("count_2l_4jet_all_channel" , 1, 0., 1.); _count_2l_4jet_ee_channel = bookHistogram1D("count_2l_4jet_ee_channel" , 1, 0., 1.); _count_2l_4jet_emu_channel = bookHistogram1D("count_2l_4jet_emu_channel" , 1, 0., 1.); _count_2l_4jet_mumu_channel = bookHistogram1D("count_2l_4jet_mumu_channel", 1, 0., 1.); _hist_1l_m_eff_3jet = bookHistogram1D("hist_1l_m_eff_3jet" , 6, 400., 1600.); _hist_1l_m_eff_4jet = bookHistogram1D("hist_1l_m_eff_4jet" , 4, 800., 1600.); _hist_1l_eTmiss_m_eff_soft = bookHistogram1D("hist_1l_eTmiss_m_eff_soft", 6, 0.1 , 0.7 ); _hist_2l_m_eff_2jet = bookHistogram1D("hist_2l_m_eff_2jet" , 5, 700., 1700.); _hist_2l_m_eff_4jet = bookHistogram1D("hist_2l_m_eff_4jet" , 5, 600., 1600.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // get the candiate jets Jets cand_jets; foreach ( const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 4.5 ) { cand_jets.push_back(jet); } } // charged tracks for isolation ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); // find the electrons ParticleVector cand_soft_e,cand_hard_e; foreach( const Particle & e, applyProjection(event, "elecs").particlesByPt()) { double pT = e.momentum().perp(); double eta = e.momentum().eta(); // remove any leptons within 0.4 of any candidate jets bool e_near_jet = false; foreach ( const Jet& jet, cand_jets ) { double dR = deltaR(e.momentum(),jet.momentum()); if ( dR < 0.4 && dR > 0.2 ) { e_near_jet = true; break; } } if ( e_near_jet ) continue; // soft selection if(pT>7.&&!(fabs(eta)>1.37&&fabs(eta)<1.52)) { cand_soft_e.push_back(e); } // hard selection if(pT>10.) cand_hard_e.push_back(e); } ParticleVector cand_soft_mu,cand_hard_mu; foreach( const Particle & mu, applyProjection(event, "muons").particlesByPt()) { double pT = mu.momentum().perp(); double eta = mu.momentum().eta(); // remove any leptons within 0.4 of any candidate jets bool mu_near_jet = false; foreach ( const Jet& jet, cand_jets ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) { mu_near_jet = true; break; } } if ( mu_near_jet ) continue; // soft selection if(pT>6.&&!(fabs(eta)>1.37&&fabs(eta)<1.52)) { cand_soft_mu.push_back(mu); } // hard selection if(pT>10.) cand_hard_mu.push_back(mu); } // pTcone around muon track (hard) ParticleVector recon_hard_mu; foreach ( const Particle & mu, cand_hard_mu ) { double pTinCone = -mu.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(mu.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 1.8*GeV ) recon_hard_mu.push_back(mu); } // pTcone around muon track (soft) ParticleVector recon_soft_mu; foreach ( const Particle & mu, cand_soft_mu ) { double pTinCone = -mu.momentum().pT(); if(-pTinCone>20.) continue; foreach ( const Particle & track, chg_tracks ) { if ( deltaR(mu.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 1.8*GeV ) recon_soft_mu.push_back(mu); } // pTcone around electron track (hard) ParticleVector recon_hard_e; foreach ( const Particle & e, cand_hard_e ) { double pTinCone = -e.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(e.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 0.1 * e.momentum().pT() ) recon_hard_e.push_back(e); } // pTcone around electron track (soft) ParticleVector recon_soft_e; foreach ( const Particle & e, cand_soft_e ) { double pTinCone = -e.momentum().pT(); if(-pTinCone>25.) continue; foreach ( const Particle & track, chg_tracks ) { if ( deltaR(e.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 0.1 * e.momentum().pT() ) recon_soft_e.push_back(e); } // pTmiss FourMomentum pTmiss; foreach ( const Particle & p, applyProjection(event, "vfs").particles() ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // hard lepton selection if( ! recon_hard_e.empty() || !recon_hard_mu.empty() ) { // discard jets that overlap with electrons Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { if(fabs(jet.momentum().eta())>2.5|| jet.momentum().perp()<25.) continue; bool away_from_e = true; foreach ( const Particle & e, cand_hard_e ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) recon_jets.push_back( jet ); } // both selections require at least 2 jets // meff calculation double HT=0.; foreach( const Jet & jet, recon_jets) { HT += jet.momentum().perp(); } double m_eff_inc = HT+eTmiss; unsigned int njet = recon_jets.size(); // 1 lepton only if( recon_hard_e.size() + recon_hard_mu.size() == 1 && njet >=3 ) { // get the lepton Particle lepton = recon_hard_e.empty() ? recon_hard_mu[0] : recon_hard_e[0]; // lepton variables double pT = lepton.momentum().perp(); double mT = 2.*(pT*eTmiss - lepton.momentum().x()*pTmiss.x() - lepton.momentum().y()*pTmiss.y()); mT = sqrt(mT); HT += pT; m_eff_inc += pT; // apply the cuts on the leptons and min no. of jets if( ( ( abs(lepton.pdgId()) == ELECTRON && pT > 25. ) || ( abs(lepton.pdgId()) == MUON && pT > 20. ) ) && mT > 100. && eTmiss > 250. ) { double m_eff = pT+eTmiss; for(unsigned int ix=0;ix<3;++ix) m_eff += recon_jets[ix].momentum().perp(); // 3 jet channel if( (njet == 3 || recon_jets[3].momentum().perp() < 80. ) && recon_jets[0].momentum().perp()>100. ) { if(eTmiss/m_eff>0.3) { if(m_eff_inc>1200.) { _count_1l_3jet_all_channel->fill(0.5,weight); if(abs(lepton.pdgId()) == ELECTRON ) _count_1l_3jet_e_channel->fill(0.5,weight); else _count_1l_3jet_mu_channel->fill(0.5,weight); } _hist_1l_m_eff_3jet->fill(min(1599.,m_eff_inc),weight); } } // 4 jet channel else if (njet >=4 && recon_jets[3].momentum().perp()>80.) { m_eff += recon_jets[3].momentum().perp(); if(eTmiss/m_eff>0.2) { if(m_eff_inc>800.) { _count_1l_4jet_all_channel->fill(0.5,weight); if(abs(lepton.pdgId()) == ELECTRON ) _count_1l_4jet_e_channel->fill(0.5,weight); else _count_1l_4jet_mu_channel->fill(0.5,weight); } _hist_1l_m_eff_4jet->fill(min(1599.,m_eff_inc),weight); } } } } // multi lepton else if( recon_hard_e.size() + recon_hard_mu.size() >= 2 && njet >=2 ) { // get all the leptons and sort them by pT ParticleVector leptons(recon_hard_e.begin(),recon_hard_e.end()); leptons.insert(leptons.begin(),recon_hard_mu.begin(),recon_hard_mu.end()); std::sort(leptons.begin(),leptons.end(),cmpParticleByPt); double m_eff(0.0); for (size_t ix = 0; ix < leptons.size(); ++ix) m_eff += leptons[ix].momentum().perp(); m_eff_inc += m_eff; m_eff += eTmiss; for (size_t ix = 0; ix < (size_t) min(4, int(recon_jets.size())); ++ix) m_eff += recon_jets[ix].momentum().perp(); // require opposite sign leptons if(leptons[0].pdgId()*leptons[1].pdgId()<0) { // 2 jet if(recon_jets[1].momentum().perp()>200 && ( njet<4 || (njet>=4 && recon_jets[3].momentum().perp()<50.)) && eTmiss>300.) { _count_2l_2jet_all_channel->fill(0.5,weight); if(abs(leptons[0].pdgId()) == ELECTRON && abs(leptons[1].pdgId()) == ELECTRON ) _count_2l_2jet_ee_channel->fill(0.5,weight); else if (abs(leptons[0].pdgId()) == MUON && abs(leptons[1].pdgId()) == MUON ) _count_2l_2jet_mumu_channel->fill(0.5,weight); else _count_2l_2jet_emu_channel->fill(0.5,weight); _hist_2l_m_eff_2jet->fill(min(1699.,m_eff_inc),weight); } // 4 jet else if(njet>=4&& recon_jets[3].momentum().perp()>=50.&& eTmiss>100. && eTmiss/m_eff>0.2) { if( m_eff_inc>650. ) { _count_2l_4jet_all_channel->fill(0.5,weight); if(abs(leptons[0].pdgId()) == ELECTRON && abs(leptons[1].pdgId()) == ELECTRON ) _count_2l_4jet_ee_channel->fill(0.5,weight); else if (abs(leptons[0].pdgId()) == MUON && abs(leptons[1].pdgId()) == MUON ) _count_2l_4jet_mumu_channel->fill(0.5,weight); else _count_2l_4jet_emu_channel->fill(0.5,weight); } _hist_2l_m_eff_4jet->fill(min(1599.,m_eff_inc),weight); } } } } // soft lepton selection if( recon_soft_e.size() + recon_soft_mu.size() == 1 ) { // discard jets that overlap with electrons Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { if(fabs(jet.momentum().eta())>2.5|| jet.momentum().perp()<25.) continue; bool away_from_e = true; foreach ( const Particle & e, cand_soft_e ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) recon_jets.push_back( jet ); } // meff calculation double HT=0.; foreach( const Jet & jet, recon_jets) { HT += jet.momentum().perp(); } double m_eff_inc = HT+eTmiss; // get the lepton Particle lepton = recon_soft_e.empty() ? recon_soft_mu[0] : recon_soft_e[0]; // lepton variables double pT = lepton.momentum().perp(); double mT = 2.*(pT*eTmiss - lepton.momentum().x()*pTmiss.x() - lepton.momentum().y()*pTmiss.y()); mT = sqrt(mT); m_eff_inc += pT; double m_eff = pT+eTmiss; // apply final cuts if(recon_jets.size() >= 2 && recon_jets[0].momentum().perp()>130. && mT>100. && eTmiss>250.) { for(unsigned int ix=0;ix<2;++ix) m_eff += recon_jets[0].momentum().perp(); if( eTmiss/m_eff>0.3 ) { _count_1l_soft_all_channel->fill(0.5,weight); if(abs(lepton.pdgId()) == ELECTRON ) _count_1l_soft_e_channel->fill(0.5,weight); else _count_1l_soft_mu_channel->fill(0.5,weight); } _hist_1l_eTmiss_m_eff_soft->fill( eTmiss/m_eff_inc,weight); } } } //@} void finalize() { double norm = 4.7* crossSection()/sumOfWeights()/femtobarn; scale(_count_1l_3jet_all_channel ,norm); scale(_count_1l_3jet_e_channel ,norm); scale(_count_1l_3jet_mu_channel ,norm); scale(_count_1l_4jet_all_channel ,norm); scale(_count_1l_4jet_e_channel ,norm); scale(_count_1l_4jet_mu_channel ,norm); scale(_count_1l_soft_all_channel ,norm); scale(_count_1l_soft_e_channel ,norm); scale(_count_1l_soft_mu_channel ,norm); scale(_count_2l_2jet_all_channel ,norm); scale(_count_2l_2jet_ee_channel ,norm); scale(_count_2l_2jet_emu_channel ,norm); scale(_count_2l_2jet_mumu_channel ,norm); scale(_count_2l_4jet_all_channel ,norm); scale(_count_2l_4jet_ee_channel ,norm); scale(_count_2l_4jet_emu_channel ,norm); scale(_count_2l_4jet_mumu_channel ,norm); scale(_hist_1l_m_eff_3jet ,200.*norm); scale(_hist_1l_m_eff_4jet ,200.*norm); scale(_hist_1l_eTmiss_m_eff_soft ,0.1*norm); scale(_hist_2l_m_eff_2jet ,200.*norm); scale(_hist_2l_m_eff_4jet ,200.*norm); } private: /// @name Histograms //@{ AIDA::IHistogram1D* _count_1l_3jet_all_channel; AIDA::IHistogram1D* _count_1l_3jet_e_channel; AIDA::IHistogram1D* _count_1l_3jet_mu_channel; AIDA::IHistogram1D* _count_1l_4jet_all_channel; AIDA::IHistogram1D* _count_1l_4jet_e_channel; AIDA::IHistogram1D* _count_1l_4jet_mu_channel; AIDA::IHistogram1D* _count_1l_soft_all_channel; AIDA::IHistogram1D* _count_1l_soft_e_channel; AIDA::IHistogram1D* _count_1l_soft_mu_channel; AIDA::IHistogram1D* _count_2l_2jet_all_channel; AIDA::IHistogram1D* _count_2l_2jet_ee_channel; AIDA::IHistogram1D* _count_2l_2jet_emu_channel; AIDA::IHistogram1D* _count_2l_2jet_mumu_channel; AIDA::IHistogram1D* _count_2l_4jet_all_channel; AIDA::IHistogram1D* _count_2l_4jet_ee_channel; AIDA::IHistogram1D* _count_2l_4jet_emu_channel; AIDA::IHistogram1D* _count_2l_4jet_mumu_channel; AIDA::IHistogram1D* _hist_1l_m_eff_3jet; AIDA::IHistogram1D* _hist_1l_m_eff_4jet; AIDA::IHistogram1D* _hist_1l_eTmiss_m_eff_soft; AIDA::IHistogram1D* _hist_2l_m_eff_2jet; AIDA::IHistogram1D* _hist_2l_m_eff_4jet; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I1180197); } rivet-1.8.3/src/Analyses/D0_2001_S4674421.cc0000644000175000017500000001641012116077757015707 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" namespace Rivet { /// @brief D0 Run I differential W/Z boson cross-section analysis /// @author Lars Sonnenschein class D0_2001_S4674421 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor. D0_2001_S4674421() : Analysis("D0_2001_S4674421") { } /// @name Analysis methods //@{ void init() { // Final state projection FinalState fs(-5.0, 5.0); // corrected for detector acceptance addProjection(fs, "FS"); // Z -> e- e+ LeadingParticlesFinalState eeFS(FinalState(-5.0, 5.0, 0.)); //20.); eeFS.addParticleIdPair(ELECTRON); addProjection(eeFS, "eeFS"); // W- -> e- nu_e~ LeadingParticlesFinalState enuFS(FinalState(-5.0, 5.0, 0.)); //25.); enuFS.addParticleId(ELECTRON).addParticleId(NU_EBAR); addProjection(enuFS, "enuFS"); // W+ -> e+ nu_e LeadingParticlesFinalState enubFS(FinalState(-5.0, 5.0, 0.)); //25.); enubFS.addParticleId(POSITRON).addParticleId(NU_E); addProjection(enubFS, "enubFS"); // Remove neutrinos for isolation of final state particles VetoedFinalState vfs(fs); vfs.vetoNeutrinos(); addProjection(vfs, "VFS"); // Counters _eventsFilledW = 0.0; _eventsFilledZ = 0.0; // Histograms _h_dsigdpt_w = bookHistogram1D(1, 1, 1); _h_dsigdpt_z = bookHistogram1D(1, 1, 2); _h_dsigdpt_scaled_z = bookDataPointSet(2, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); const LeadingParticlesFinalState& eeFS = applyProjection(event, "eeFS"); // Z boson analysis if (eeFS.particles().size() >= 2) { // If there is a Z candidate: // Fill Z pT distributions double deltaM2=1e30,mass2(0.); double pT=-1.; const ParticleVector& Zdaughters = eeFS.particles(); for(unsigned int ix=0;ix0. && mass2 > 0. && inRange(sqrt(mass2)/GeV, 75.0, 105.0)) { _eventsFilledZ += weight; MSG_DEBUG("Z pmom.pT() = " << pT/GeV << " GeV"); _h_dsigdpt_z->fill(pT/GeV, weight); // return if found a Z return; } } // There is no Z -> ee candidate... so this might be a W event const LeadingParticlesFinalState& enuFS = applyProjection(event, "enuFS"); const LeadingParticlesFinalState& enubFS = applyProjection(event, "enubFS"); double deltaM2=1e30; double pT=-1.; for(unsigned int iw=0;iw<2;++iw) { ParticleVector Wdaughters; Wdaughters = iw==0 ? enuFS.particles() : enubFS.particles(); for(unsigned int ix=0;ix0.) { _eventsFilledW += weight; _h_dsigdpt_w->fill(pT/GeV, weight); } } void finalize() { // Get cross-section per event (i.e. per unit weight) from generator const double xSecPerEvent = crossSectionPerEvent()/picobarn; // Correct W pT distribution to W cross-section const double xSecW = xSecPerEvent * _eventsFilledW; // Correct Z pT distribution to Z cross-section const double xSecZ = xSecPerEvent * _eventsFilledZ; // Get W and Z pT integrals const double wpt_integral = integral(_h_dsigdpt_w); const double zpt_integral = integral(_h_dsigdpt_z); // Divide and scale ratio histos if (xSecW == 0 || wpt_integral == 0 || xSecZ == 0 || zpt_integral == 0) { MSG_WARNING("Not filling ratio plot because input histos are empty"); } else { std::vector xval; std::vector xerr; std::vector yval; std::vector yerr; // Scale factor converts event counts to cross-sections, and inverts the // branching ratios since only one decay channel has been analysed for each boson. // Oh, and we put MW/MZ in, like they do in the paper. const double MW_MZ = 0.8820; // Ratio M_W/M_Z const double BRZEE_BRWENU = 0.033632 / 0.1073; // Ratio of branching fractions const double scalefactor = (xSecW / wpt_integral) / (xSecZ / zpt_integral) * MW_MZ * BRZEE_BRWENU; for (int ibin=0; ibin<_h_dsigdpt_scaled_z->size(); ibin++) { /// @todo I would love to use axis().binMidPoint(ibin) here, but this #*&$*^%$ LWH IAxis doesn't have it!!!! /// It's only in Axis and VariAxis, but doesn't get passed through to the user. I WANT YODA!!! *SIGH* xval.push_back(0.5*(_h_dsigdpt_w->axis().binUpperEdge(ibin)+_h_dsigdpt_w->axis().binLowerEdge(ibin))); xerr.push_back(0.5*_h_dsigdpt_w->axis().binWidth(ibin)); if (_h_dsigdpt_w->binHeight(ibin) == 0 || _h_dsigdpt_z->binHeight(ibin) == 0) { yval.push_back(0.); yerr.push_back(0.); } else { yval.push_back(scalefactor * _h_dsigdpt_w->binHeight(ibin) / _h_dsigdpt_z->binHeight(ibin)); double dy2 = 0.; // binWidth(ibin) is needed because binHeight is actually sumofweights. It's AIDA. Don't ask. :-(((( dy2 += pow(_h_dsigdpt_w->binError(ibin)/_h_dsigdpt_w->binHeight(ibin)*_h_dsigdpt_w->axis().binWidth(ibin),2); dy2 += pow(_h_dsigdpt_z->binError(ibin)/_h_dsigdpt_z->binHeight(ibin)*_h_dsigdpt_z->axis().binWidth(ibin),2); double dy = scalefactor * _h_dsigdpt_w->binHeight(ibin)/_h_dsigdpt_z->binHeight(ibin) * sqrt(dy2); yerr.push_back(dy); } } _h_dsigdpt_scaled_z->setCoordinate(0, xval, xerr); _h_dsigdpt_scaled_z->setCoordinate(1, yval, yerr); } // Normalize non-ratio histos normalize(_h_dsigdpt_w, xSecW); normalize(_h_dsigdpt_z, xSecZ); } //@} private: /// @name Event counters for cross section normalizations //@{ double _eventsFilledW; double _eventsFilledZ; //@} //@{ /// Histograms AIDA::IHistogram1D* _h_dsigdpt_w; AIDA::IHistogram1D* _h_dsigdpt_z; AIDA::IDataPointSet* _h_dsigdpt_scaled_z; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2001_S4674421); } rivet-1.8.3/src/Analyses/MC_VH2BB.cc0000644000175000017500000003061212116077757015126 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Projections/WFinder.hh" #include "Rivet/Projections/UnstableFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Math/LorentzTrans.hh" #include "Rivet/Math/Constants.hh" #include #include namespace Rivet { class MC_VH2BB : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor MC_VH2BB() : Analysis("MC_VH2BB") { } //@} public: /// @name Analysis methods //@{ vector boostAngles(const FourMomentum& b1, const FourMomentum& b2, const FourMomentum& vb){ // This should take in the four-momenta of two b's (jets/hadrons) and a vector boson, for the process VB*->VBH with H->bb // It should return the smallest angle between the virtual vector boson and one of the b's, in the rest frame of the Higgs boson. // It should also return (as the second element of the vector) the angle between the b's, in the rest frame of the Higgs boson. FourMomentum higgsMomentum = b1 + b2; FourMomentum virtualVBMomentum = higgsMomentum + vb; LorentzTransform lt( -higgsMomentum.boostVector() ); FourMomentum virtualVBMomentumBOOSTED = lt.transform(virtualVBMomentum); FourMomentum b1BOOSTED = lt.transform(b1); FourMomentum b2BOOSTED = lt.transform(b2); double angle1 = b1BOOSTED.angle(virtualVBMomentumBOOSTED); double angle2 = b2BOOSTED.angle(virtualVBMomentumBOOSTED); double cosbb = b1BOOSTED.vector3().unit().dot(b2BOOSTED.vector3().unit()); double test = 1.+cosbb; double anglebb = b1BOOSTED.angle(b2BOOSTED); vector toReturn; toReturn.push_back(angle1 < angle2 ? angle1 : angle2); toReturn.push_back(anglebb); return toReturn; } /// Book histograms and initialise projections before the run void init() { FinalState fs; ZFinder zeefinder(fs, -3.5, 3.5, 25.0*GeV, ELECTRON, 65.0*GeV, 115.0*GeV, 0.2, true, true); addProjection(zeefinder, "ZeeFinder"); ZFinder zmmfinder(fs, -3.5, 3.5, 25.0*GeV, MUON, 65.0*GeV, 115.0*GeV, 0.2, true, true); addProjection(zmmfinder, "ZmmFinder"); WFinder wefinder(fs, -3.5, 3.5, 25.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2); addProjection(wefinder, "WeFinder"); WFinder wmfinder(fs, -3.5, 3.5, 25.0*GeV, MUON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2); addProjection(wmfinder, "WmFinder"); addProjection(fs, "FinalState"); addProjection(FastJets(fs, FastJets::ANTIKT, 0.4), "AntiKT04"); addProjection(FastJets(fs, FastJets::ANTIKT, 0.5), "AntiKT05"); addProjection(FastJets(fs, FastJets::ANTIKT, 0.6), "AntiKT06"); /// Book histograms _h_jet_bb_Delta_eta = bookHistogram1D("jet_bb_Delta_eta", 50, 0, 4); _h_jet_bb_Delta_phi = bookHistogram1D("jet_bb_Delta_phi", 50, 0, M_PI); _h_jet_bb_Delta_pT = bookHistogram1D("jet_bb_Delta_pT", 50,0, 500); _h_jet_bb_Delta_R = bookHistogram1D("jet_bb_Delta_R", 50, 0, 5); _h_jet_b_jet_eta = bookHistogram1D("jet_b_jet_eta", 50, -4, 4); _h_jet_b_jet_multiplicity = bookHistogram1D("jet_b_jet_multiplicity", 11, -0.5, 10.5); _h_jet_b_jet_phi = bookHistogram1D("jet_b_jet_phi", 50, 0, 2.*M_PI); _h_jet_b_jet_pT = bookHistogram1D("jet_b_jet_pT", 50, 0, 500); _h_jet_H_eta_using_bb = bookHistogram1D("jet_H_eta_using_bb", 50, -4, 4); _h_jet_H_mass_using_bb = bookHistogram1D("jet_H_mass_using_bb", 50, 50, 200); _h_jet_H_phi_using_bb = bookHistogram1D("jet_H_phi_using_bb", 50, 0, 2.*M_PI); _h_jet_H_pT_using_bb = bookHistogram1D("jet_H_pT_using_bb", 50, 0, 500); _h_jet_eta = bookHistogram1D("jet_eta", 50, -4, 4); _h_jet_multiplicity = bookHistogram1D("jet_multiplicity", 11, -0.5, 10.5); _h_jet_phi = bookHistogram1D("jet_phi", 50, 0, 2.*M_PI); _h_jet_pT = bookHistogram1D("jet_pT", 50, 0, 500); _h_jet_VBbb_Delta_eta = bookHistogram1D("jet_VBbb_Delta_eta", 50, 0, 4); _h_jet_VBbb_Delta_phi = bookHistogram1D("jet_VBbb_Delta_phi", 50, 0, M_PI); _h_jet_VBbb_Delta_pT = bookHistogram1D("jet_VBbb_Delta_pT", 50, 0, 500); _h_jet_VBbb_Delta_R = bookHistogram1D("jet_VBbb_Delta_R", 50, 0, 8); _h_VB_eta = bookHistogram1D("VB_eta", 50, -4, 4); _h_VB_mass = bookHistogram1D("VB_mass", 50, 60, 110); _h_Z_multiplicity = bookHistogram1D("Z_multiplicity", 11, -0.5, 10.5); _h_W_multiplicity = bookHistogram1D("W_multiplicity", 11, -0.5, 10.5); _h_VB_phi = bookHistogram1D("VB_phi", 50, 0, 2.*M_PI); _h_VB_pT = bookHistogram1D("VB_pT", 50, 0, 500); _h_jet_bVB_angle_Hframe = bookHistogram1D("jet_bVB_angle_Hframe", 50, 0, M_PI); _h_jet_bVB_cosangle_Hframe = bookHistogram1D("jet_bVB_cosangle_Hframe", 50, -1, 1); _h_jet_bb_angle_Hframe = bookHistogram1D("jet_bb_angle_Hframe", 50, 0, M_PI); _h_jet_bb_cosangle_Hframe = bookHistogram1D("jet_bb_cosangle_Hframe", 50, -1, 1); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); const double JETPTCUT = 30*GeV; const ZFinder& zeefinder = applyProjection(event, "ZeeFinder"); const ZFinder& zmmfinder = applyProjection(event, "ZmmFinder"); const WFinder& wefinder = applyProjection(event, "WeFinder"); const WFinder& wmfinder = applyProjection(event, "WmFinder"); Jets jets = applyProjection(event, "AntiKT04").jetsByPt(JETPTCUT); ParticleVector vectorBosons = zeefinder.bosons(); /// @todo Don't we have a neater vector concatenation? vectorBosons.insert(vectorBosons.end(), zmmfinder.bosons().begin(), zmmfinder.bosons().end()); vectorBosons.insert(vectorBosons.end(), wefinder.bosons().begin(), wefinder.bosons().end()); vectorBosons.insert(vectorBosons.end(), wmfinder.bosons().begin(), wmfinder.bosons().end()); _h_Z_multiplicity->fill(zeefinder.bosons().size() + zmmfinder.bosons().size(), weight); _h_W_multiplicity->fill(wefinder.bosons().size() + wmfinder.bosons().size(), weight); _h_jet_multiplicity->fill(jets.size(), weight); // Identify the b-jets Jets bjets; foreach (const Jet& jet, jets) { const double jetEta = jet.momentum().eta(); const double jetPhi = jet.momentum().phi(); const double jetPt = jet.momentum().pT(); _h_jet_eta->fill(jetEta, weight); _h_jet_phi->fill(jetPhi, weight); _h_jet_pT->fill(jetPt/GeV, weight); if (jet.containsBottom() && jet.momentum().pT() > JETPTCUT) { bjets.push_back(jet); _h_jet_b_jet_eta->fill( jetEta , weight ); _h_jet_b_jet_phi->fill( jetPhi , weight ); _h_jet_b_jet_pT->fill( jetPt , weight ); } } _h_jet_b_jet_multiplicity->fill(bjets.size(), weight); // Plot vector boson properties foreach (const Particle& v, vectorBosons) { _h_VB_phi->fill(v.momentum().phi(), weight); _h_VB_pT->fill(v.momentum().pT(), weight); _h_VB_eta->fill(v.momentum().eta(), weight); _h_VB_mass->fill(v.momentum().mass(), weight); } // rest of analysis requires at least 1 b jets if(bjets.empty()) vetoEvent; // Construct Higgs candidates from pairs of b-jets for (size_t i = 0; i < bjets.size()-1; ++i) { for (size_t j = i+1; j < bjets.size(); ++j) { const Jet& jet1 = bjets[i]; const Jet& jet2 = bjets[j]; const double deltaEtaJJ = fabs(jet1.momentum().eta() - jet2.momentum().eta()); const double deltaPhiJJ = deltaPhi(jet1.momentum(), jet2.momentum()); const double deltaRJJ = deltaR(jet1.momentum(), jet2.momentum()); const double deltaPtJJ = fabs(jet1.momentum().pT() - jet2.momentum().pT()); _h_jet_bb_Delta_eta->fill(deltaEtaJJ, weight); _h_jet_bb_Delta_phi->fill(deltaPhiJJ, weight); _h_jet_bb_Delta_pT->fill(deltaPtJJ, weight); _h_jet_bb_Delta_R->fill(deltaRJJ, weight); const FourMomentum phiggs = jet1.momentum() + jet2.momentum(); _h_jet_H_eta_using_bb->fill(phiggs.eta(), weight); _h_jet_H_mass_using_bb->fill(phiggs.mass(), weight); _h_jet_H_phi_using_bb->fill(phiggs.phi(), weight); _h_jet_H_pT_using_bb->fill(phiggs.pT(), weight); foreach (const Particle& v, vectorBosons) { const double deltaEtaVH = fabs(phiggs.eta() - v.momentum().eta()); const double deltaPhiVH = deltaPhi(phiggs, v.momentum()); const double deltaRVH = deltaR(phiggs, v.momentum()); const double deltaPtVH = fabs(phiggs.pT() - v.momentum().pT()); _h_jet_VBbb_Delta_eta->fill(deltaEtaVH, weight); _h_jet_VBbb_Delta_phi->fill(deltaPhiVH, weight); _h_jet_VBbb_Delta_pT->fill(deltaPtVH, weight); _h_jet_VBbb_Delta_R->fill(deltaRVH, weight); // Calculate boost angles const vector angles = boostAngles(jet1.momentum(), jet2.momentum(), v.momentum()); _h_jet_bVB_angle_Hframe->fill(angles[0], weight); _h_jet_bb_angle_Hframe->fill(angles[1], weight); _h_jet_bVB_cosangle_Hframe->fill(cos(angles[0]), weight); _h_jet_bb_cosangle_Hframe->fill(cos(angles[1]), weight); } } } } /// Normalise histograms etc., after the run void finalize() { scale(_h_jet_bb_Delta_eta, crossSection()/sumOfWeights()); scale(_h_jet_bb_Delta_phi, crossSection()/sumOfWeights()); scale(_h_jet_bb_Delta_pT, crossSection()/sumOfWeights()); scale(_h_jet_bb_Delta_R, crossSection()/sumOfWeights()); scale(_h_jet_b_jet_eta, crossSection()/sumOfWeights()); scale(_h_jet_b_jet_multiplicity, crossSection()/sumOfWeights()); scale(_h_jet_b_jet_phi, crossSection()/sumOfWeights()); scale(_h_jet_b_jet_pT, crossSection()/sumOfWeights()); scale(_h_jet_H_eta_using_bb, crossSection()/sumOfWeights()); scale(_h_jet_H_mass_using_bb, crossSection()/sumOfWeights()); scale(_h_jet_H_phi_using_bb, crossSection()/sumOfWeights()); scale(_h_jet_H_pT_using_bb, crossSection()/sumOfWeights()); scale(_h_jet_eta, crossSection()/sumOfWeights()); scale(_h_jet_multiplicity, crossSection()/sumOfWeights()); scale(_h_jet_phi, crossSection()/sumOfWeights()); scale(_h_jet_pT, crossSection()/sumOfWeights()); scale(_h_jet_VBbb_Delta_eta, crossSection()/sumOfWeights()); scale(_h_jet_VBbb_Delta_phi, crossSection()/sumOfWeights()); scale(_h_jet_VBbb_Delta_pT, crossSection()/sumOfWeights()); scale(_h_jet_VBbb_Delta_R, crossSection()/sumOfWeights()); scale(_h_VB_eta, crossSection()/sumOfWeights()); scale(_h_VB_mass, crossSection()/sumOfWeights()); scale(_h_Z_multiplicity, crossSection()/sumOfWeights()); scale(_h_W_multiplicity, crossSection()/sumOfWeights()); scale(_h_VB_phi, crossSection()/sumOfWeights()); scale(_h_VB_pT, crossSection()/sumOfWeights()); scale(_h_jet_bVB_angle_Hframe, crossSection()/sumOfWeights()); scale(_h_jet_bb_angle_Hframe, crossSection()/sumOfWeights()); scale(_h_jet_bVB_cosangle_Hframe, crossSection()/sumOfWeights()); scale(_h_jet_bb_cosangle_Hframe, crossSection()/sumOfWeights()); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_Z_multiplicity, *_h_W_multiplicity; AIDA::IHistogram1D *_h_jet_bb_Delta_eta, *_h_jet_bb_Delta_phi, *_h_jet_bb_Delta_pT, *_h_jet_bb_Delta_R; AIDA::IHistogram1D *_h_jet_b_jet_eta, *_h_jet_b_jet_multiplicity, *_h_jet_b_jet_phi, *_h_jet_b_jet_pT; AIDA::IHistogram1D *_h_jet_H_eta_using_bb, *_h_jet_H_mass_using_bb, *_h_jet_H_phi_using_bb, *_h_jet_H_pT_using_bb; AIDA::IHistogram1D *_h_jet_eta, *_h_jet_multiplicity, *_h_jet_phi, *_h_jet_pT; AIDA::IHistogram1D *_h_jet_VBbb_Delta_eta, *_h_jet_VBbb_Delta_phi, *_h_jet_VBbb_Delta_pT, *_h_jet_VBbb_Delta_R; AIDA::IHistogram1D *_h_VB_eta, *_h_VB_mass, *_h_VB_phi, *_h_VB_pT; AIDA::IHistogram1D *_h_jet_bVB_angle_Hframe, *_h_jet_bb_angle_Hframe, *_h_jet_bVB_cosangle_Hframe, *_h_jet_bb_cosangle_Hframe; //AIDA::IProfile1D *_h_jet_cuts_bb_deltaR_v_HpT; //@} }; // This global object acts as a hook for the plugin system DECLARE_RIVET_PLUGIN(MC_VH2BB); } rivet-1.8.3/src/Analyses/MC_ZKTSPLITTINGS.cc0000644000175000017500000000240412116077757016412 0ustar sunsun// -*- C++ -*- #include "Rivet/Analyses/MC_JetSplittings.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief MC validation analysis for Z + jets events class MC_ZKTSPLITTINGS : public MC_JetSplittings { public: /// Default constructor MC_ZKTSPLITTINGS() : MC_JetSplittings("MC_ZKTSPLITTINGS", 4, "Jets") { } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; ZFinder zfinder(fs, -3.5, 3.5, 25.0*GeV, ELECTRON, 65.0*GeV, 115.0*GeV, 0.2, true, true); addProjection(zfinder, "ZFinder"); FastJets jetpro(zfinder.remainingFinalState(), FastJets::KT, 0.6); addProjection(jetpro, "Jets"); MC_JetSplittings::init(); } /// Do the analysis void analyze(const Event & e) { const ZFinder& zfinder = applyProjection(e, "ZFinder"); if (zfinder.bosons().size()!=1) { vetoEvent; } MC_JetSplittings::analyze(e); } /// Finalize void finalize() { MC_JetSplittings::finalize(); } //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_ZKTSPLITTINGS); } rivet-1.8.3/src/Analyses/OPAL_2001_S4553896.cc0000644000175000017500000001030012116077757016203 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { namespace { /// @name Jet angle calculator functions //@{ /// @todo Move to utils? (taken from DELPHI_2003) /// @todo Use Jet or FourMomentum interface rather than PseudoJet /// @todo Move to utils? double calc_BZ(const vector& jets) { assert(jets.size() == 4); Vector3 p12 = cross( momentum3(jets[0]), momentum3(jets[1])); Vector3 p34 = cross( momentum3(jets[2]), momentum3(jets[3])); return dot(p12,p34) / (p12.mod()*p34.mod()); } /// @todo Use Jet or FourMomentum interface rather than PseudoJet /// @todo Move to utils? double calc_KSW(const vector& jets) { assert(jets.size() == 4); Vector3 p13 = cross( momentum3(jets[0]), momentum3(jets[2])); Vector3 p24 = cross( momentum3(jets[1]), momentum3(jets[3])); Vector3 p14 = cross( momentum3(jets[0]), momentum3(jets[3])); Vector3 p23 = cross( momentum3(jets[1]), momentum3(jets[2])); return cos (0.5*( acos (dot(p14,p23) / (p14.mod()*p23.mod())) + acos (dot(p13,p24) / (p13.mod()*p24.mod())) )); } /// @todo Use Jet or FourMomentum interface rather than PseudoJet /// @todo Move to utils? double calc_NR(const vector& jets) { assert(jets.size() == 4); Vector3 p12 = momentum3(jets[0]) - momentum3(jets[1]); Vector3 p34 = momentum3(jets[2]) - momentum3(jets[3]); return dot(p12,p34) / (p12.mod()*p34.mod()); } /// @todo Use Jet or FourMomentum interface rather than PseudoJet /// @todo Move to utils? double calc_ALPHA34(const vector& jets) { assert(jets.size() == 4); Vector3 p3 = momentum3(jets[2]); Vector3 p4 = momentum3(jets[3]); return dot(p3,p4) / (p3.mod()*p4.mod()); } //@} } class OPAL_2001_S4553896 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor OPAL_2001_S4553896() : Analysis("OPAL_2001_S4553896") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { /// Initialise and register projections here const FinalState fs; addProjection(fs, "FS"); addProjection(FastJets(fs, FastJets::DURHAM, 0.7), "Jets"); /// @todo Book histograms here, e.g.: _h_BZ = bookHistogram1D(3, 1, 1); _h_KSW = bookHistogram1D(4, 1, 1); _h_NR = bookHistogram1D(5, 1, 1); _h_ALPHA34 = bookHistogram1D(6, 1, 1); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (applyProjection(event, "FS").particles().size() < 2) { vetoEvent; } const FastJets& fastjets = applyProjection(event, "Jets"); if (fastjets.clusterSeq()) { vector jets; foreach (const fastjet::PseudoJet& jet, fastjet::sorted_by_E(fastjets.clusterSeq()->exclusive_jets_ycut(0.008))) { if (jet.E()>3.0*GeV) jets.push_back(jet); } if (jets.size() == 4) { _h_BZ->fill(fabs(calc_BZ(jets)), weight); _h_KSW->fill(calc_KSW(jets), weight); _h_NR->fill(fabs(calc_NR(jets)), weight); _h_ALPHA34->fill(calc_ALPHA34(jets), weight); } } } /// Normalise histograms etc., after the run void finalize() { /// Normalise, scale and otherwise manipulate histograms here normalize(_h_BZ); normalize(_h_KSW); normalize(_h_NR); normalize(_h_ALPHA34); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_BZ; AIDA::IHistogram1D *_h_KSW; AIDA::IHistogram1D *_h_NR; AIDA::IHistogram1D *_h_ALPHA34; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(OPAL_2001_S4553896); } rivet-1.8.3/src/Analyses/ATLAS_2011_S9212183.cc0000644000175000017500000002422512116077757016312 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @author Chris Wymant class ATLAS_2011_S9212183 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2011_S9212183() : Analysis("ATLAS_2011_S9212183") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // Projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 20.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // Projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // Jet finder addProjection(FastJets(FinalState(), FastJets::ANTIKT, 0.4), "AntiKtJets04"); // All tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0),"cfs"); // Used for pTmiss (N.B. the real 'vfs' extends beyond 4.5 to |eta| = 4.9) addProjection(VisibleFinalState(-4.5,4.5),"vfs"); // Book histograms _count_2j = bookHistogram1D("count_2j", 1, 0., 1.); _count_3j = bookHistogram1D("count_3j", 1, 0., 1.); _count_4j5 = bookHistogram1D("count_4j5", 1, 0., 1.); _count_4j10 = bookHistogram1D("count_4j10", 1, 0., 1.); _count_HM = bookHistogram1D("count_HM", 1, 0., 1.); _hist_meff_2j = bookHistogram1D(1,1,1); _hist_meff_3j = bookHistogram1D(2,1,1); _hist_meff_4j = bookHistogram1D(3,1,1); _hist_meff_HM = bookHistogram1D(4,1,1); _hist_eTmiss = bookHistogram1D("Et_miss", 20, 0., 1000.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); Jets cand_jets; const Jets jets = applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV); foreach (const Jet& jet, jets) { if ( fabs( jet.momentum().eta() ) < 4.9 ) { cand_jets.push_back(jet); } } const ParticleVector cand_e = applyProjection(event, "elecs").particlesByPt(); // Muon isolation not mentioned in hep-exp 1109.6572, unlike in 1102.5290, // but assumed to still be applicable ParticleVector cand_mu; const ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); const ParticleVector muons = applyProjection(event, "muons").particlesByPt(); foreach (const Particle& mu, muons) { double pTinCone = -mu.momentum().pT(); foreach (const Particle& track, chg_tracks) { if ( deltaR(mu.momentum(),track.momentum()) <= 0.2 ) { pTinCone += track.momentum().pT(); } } if ( pTinCone < 1.8*GeV ) cand_mu.push_back(mu); } // Resolve jet-lepton overlap for jets with |eta| < 2.8 Jets cand_jets_2; foreach ( const Jet& jet, cand_jets ) { if ( fabs( jet.momentum().eta() ) >= 2.8 ) { cand_jets_2.push_back( jet ); } else { bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) cand_jets_2.push_back( jet ); } } ParticleVector recon_e, recon_mu; foreach ( const Particle & e, cand_e ) { bool away = true; foreach ( const Jet& jet, cand_jets_2 ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } if ( away ) recon_e.push_back( e ); } foreach ( const Particle & mu, cand_mu ) { bool away = true; foreach ( const Jet& jet, cand_jets_2 ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } if ( away ) recon_mu.push_back( mu ); } // pTmiss // Based on all candidate electrons, muons and jets, plus everything else with |eta| < 4.5 // i.e. everything in our projection "vfs" plus the jets with |eta| > 4.5 ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } foreach ( const Jet& jet, cand_jets_2 ) { if ( fabs( jet.momentum().eta() ) > 4.5 ) pTmiss -= jet.momentum(); } double eTmiss = pTmiss.pT(); // Final jet filter Jets recon_jets; foreach ( const Jet& jet, cand_jets_2 ) { if ( fabs( jet.momentum().eta() ) <= 2.8 ) recon_jets.push_back( jet ); } // NB. It seems that jets with |eta| > 2.8 could have been thrown away at // the start; we don't do so, in order to follow both the structure of // the paper and the similar Rivet analysis ATLAS_2011_S8983313 // 'candidate' muons needed only 10 GeV, to cause a veto they need 20 GeV ParticleVector veto_mu; foreach ( const Particle & mu, cand_mu ) { if ( mu.momentum().pT() >= 20.0*GeV ) veto_mu.push_back(mu); } if ( ! ( veto_mu.empty() && recon_e.empty() ) ) { MSG_DEBUG("Charged leptons left after selection"); vetoEvent; } if ( eTmiss <= 130 * GeV ) { MSG_DEBUG("Not enough eTmiss: " << eTmiss << " < 130"); vetoEvent; } if ( recon_jets.empty() || recon_jets[0].momentum().pT() <= 130.0 * GeV ) { MSG_DEBUG("No hard leading jet in " << recon_jets.size() << " jets"); vetoEvent; } // ==================== observables ==================== int Njets = 0; double min_dPhi = 999.999; double pTmiss_phi = pTmiss.phi(); foreach ( const Jet& jet, recon_jets ) { if ( jet.momentum().pT() > 40 * GeV ) { if ( Njets < 3 ) { min_dPhi = min( min_dPhi, deltaPhi( pTmiss_phi, jet.momentum().phi() ) ); } ++Njets; } } int NjetsHighMass = 0; foreach ( const Jet& jet, recon_jets ) { if ( jet.momentum().pT() > 80.0 * GeV ) { ++NjetsHighMass; } } if ( Njets < 2 ) { MSG_DEBUG("Only " << Njets << " >40 GeV jets left"); vetoEvent; } if ( min_dPhi <= 0.4 ) { MSG_DEBUG("dPhi too small"); vetoEvent; } // m_eff double m_eff_2j = eTmiss + recon_jets[0].momentum().pT() + recon_jets[1].momentum().pT(); double m_eff_3j = recon_jets.size() < 3 ? -999.0 : m_eff_2j + recon_jets[2].momentum().pT(); double m_eff_4j = recon_jets.size() < 4 ? -999.0 : m_eff_3j + recon_jets[3].momentum().pT(); double m_eff_HM = eTmiss; foreach ( const Jet& jet, recon_jets ) { if ( jet.momentum().pT() > 40.0 * GeV ) m_eff_HM += jet.momentum().pT(); } double et_meff_2j = eTmiss / m_eff_2j; double et_meff_3j = eTmiss / m_eff_3j; double et_meff_4j = eTmiss / m_eff_4j; double et_meff_HM = eTmiss / m_eff_HM; // ==================== FILL ==================== MSG_DEBUG( "Trying to fill " << Njets << ' ' << m_eff_2j << ' ' << et_meff_2j << ' ' << m_eff_3j << ' ' << et_meff_3j << ' ' << m_eff_4j << ' ' << et_meff_4j << ' ' << m_eff_HM << ' ' << et_meff_HM ); _hist_eTmiss->fill(eTmiss, weight); // 2j region if ( et_meff_2j > 0.3 ) { _hist_meff_2j->fill(m_eff_2j, weight); if ( m_eff_2j > 1000 * GeV ) { MSG_DEBUG("Hits 2j"); _count_2j->fill(0.5, weight); } } // 3j region if ( Njets >= 3 && et_meff_3j > 0.25 ) { _hist_meff_3j->fill(m_eff_3j, weight); if ( m_eff_3j > 1000 * GeV ) { MSG_DEBUG("Hits 3j"); _count_3j->fill(0.5, weight); } } // 4j5 & 4j10 regions if ( Njets >= 4 && et_meff_4j > 0.25 ) { _hist_meff_4j->fill(m_eff_4j, weight); if ( m_eff_4j > 500 * GeV ) { MSG_DEBUG("Hits 4j5"); _count_4j5->fill(0.5, weight); } if ( m_eff_4j > 1000 * GeV ) { MSG_DEBUG("Hits 4j10"); _count_4j10->fill(0.5, weight); } } // High mass region if ( NjetsHighMass >= 4 && et_meff_HM > 0.2 ) { _hist_meff_HM->fill(m_eff_HM, weight); if ( m_eff_HM > 1100 * GeV ) { MSG_DEBUG("Hits HM"); _count_HM->fill(0.5, weight); } } } void finalize() { // Two, three and four jet channels have bin width = 100 (GeV) // High mass channel has bin width = 150 (GeV) // Integrated luminosity = 1040 (pb) scale( _hist_meff_2j, 100. * 1040 * crossSection()/sumOfWeights() ); scale( _hist_meff_3j, 100. * 1040 * crossSection()/sumOfWeights() ); scale( _hist_meff_4j, 100. * 1040 * crossSection()/sumOfWeights() ); scale( _hist_meff_HM, 150. * 1040 * crossSection()/sumOfWeights() ); } //@} private: AIDA::IHistogram1D* _count_2j; AIDA::IHistogram1D* _count_3j; AIDA::IHistogram1D* _count_4j5; AIDA::IHistogram1D* _count_4j10; AIDA::IHistogram1D* _count_HM; AIDA::IHistogram1D* _hist_meff_2j; AIDA::IHistogram1D* _hist_meff_3j; AIDA::IHistogram1D* _hist_meff_4j; AIDA::IHistogram1D* _hist_meff_HM; AIDA::IHistogram1D* _hist_eTmiss; }; // This global object acts as a hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_S9212183); } rivet-1.8.3/src/Analyses/MC_XS.cc0000644000175000017500000000345612116077757014663 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "HepMC/HepMCDefs.h" namespace Rivet { /// @brief Analysis for the generated cross section class MC_XS : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor MC_XS() : Analysis("MC_XS") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { _h_XS = bookDataPointSet("XS", 1, 0.0, 1.0); _h_N = bookHistogram1D("N", 1, 0.0, 1.0); _h_pmXS = bookHistogram1D("pmXS", 2, -1.0, 1.0); _h_pmN = bookHistogram1D("pmN", 2, -1.0, 1.0); _mc_xs=_mc_error=0.; } /// Perform the per-event analysis void analyze(const Event& event) { _h_N->fill(0.5,1.); _h_pmXS->fill(0.5*(event.weight()>0?1.:-1),abs(event.weight())); _h_pmN->fill(0.5*(event.weight()>0?1.:-1),1.); #ifdef HEPMC_HAS_CROSS_SECTION _mc_xs = event.genEvent().cross_section()->cross_section(); _mc_error = event.genEvent().cross_section()->cross_section_error(); #endif } /// Normalise histograms etc., after the run void finalize() { scale(_h_pmXS, crossSection()/sumOfWeights()); #ifndef HEPMC_HAS_CROSS_SECTION _mc_xs=crossSection(); _mc_error=0.0; #endif std::vector xs,err; xs.push_back(_mc_xs); err.push_back(_mc_error); _h_XS->setCoordinate(1,xs,err); } //@} private: /// @name Histograms //@{ AIDA::IDataPointSet * _h_XS; AIDA::IHistogram1D * _h_N; AIDA::IHistogram1D * _h_pmXS; AIDA::IHistogram1D * _h_pmN; double _mc_xs, _mc_error; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_XS); } rivet-1.8.3/src/Analyses/D0_2010_S8570965.cc0000644000175000017500000001023112116077757015716 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Tools/BinnedHistogram.hh" namespace Rivet { /// @brief D0 direct photon pair production class D0_2010_S8570965 : public Analysis { typedef std::pair doublepair; public: D0_2010_S8570965() : Analysis("D0_2010_S8570965") { } public: void init() { FinalState fs; addProjection(fs, "FS"); IdentifiedFinalState ifs(-0.9, 0.9, 20.0*GeV); ifs.acceptId(PHOTON); addProjection(ifs, "IFS"); _h_M = bookHistogram1D(1, 1, 1); _h_pT = bookHistogram1D(2, 1, 1); _h_dPhi = bookHistogram1D(3, 1, 1); _h_costheta = bookHistogram1D(4, 1, 1); std::pair M_ranges[] = { std::make_pair(30.0, 50.0), std::make_pair(50.0, 80.0), std::make_pair(80.0, 350.0) }; for (size_t i=0; i<3; ++i) { _h_pT_M.addHistogram(M_ranges[i].first, M_ranges[i].second, bookHistogram1D(5+3*i, 1, 1)); _h_dPhi_M.addHistogram(M_ranges[i].first, M_ranges[i].second, bookHistogram1D(6+3*i, 1, 1)); _h_costheta_M.addHistogram(M_ranges[i].first, M_ranges[i].second, bookHistogram1D(7+3*i, 1, 1)); } } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); ParticleVector photons = applyProjection(event, "IFS").particlesByPt(); if (photons.size() < 2 || (photons[0].momentum().pT() < 21.0*GeV)) { vetoEvent; } // Isolate photons with ET_sum in cone ParticleVector isolated_photons; ParticleVector fs = applyProjection(event, "FS").particles(); foreach (const Particle& photon, photons) { double eta_P = photon.momentum().eta(); double phi_P = photon.momentum().phi(); double Etsum=0.0; foreach (const Particle& p, fs) { if (p.genParticle().barcode()!=photon.genParticle().barcode() && deltaR(eta_P, phi_P, p.momentum().eta(), p.momentum().phi()) < 0.4) { Etsum += p.momentum().Et(); } } if (Etsum<2.5*GeV) { isolated_photons.push_back(photon); } } if (isolated_photons.size() != 2) { vetoEvent; } std::sort(isolated_photons.begin(), isolated_photons.end(), cmpParticleByPt); FourMomentum y1=isolated_photons[0].momentum(); FourMomentum y2=isolated_photons[1].momentum(); if (deltaR(y1, y2)<0.4) { vetoEvent; } FourMomentum yy=y1+y2; double Myy = yy.mass()/GeV; if (Myy<30.0 || Myy>350.0) { vetoEvent; } double pTyy = yy.pT()/GeV; if (Myyfill(Myy, weight); _h_pT->fill(pTyy, weight); _h_dPhi->fill(dPhiyy, weight); _h_costheta->fill(costhetayy, weight); _h_pT_M.fill(Myy, pTyy, weight); _h_dPhi_M.fill(Myy, dPhiyy, weight); _h_costheta_M.fill(Myy, costhetayy, weight); } void finalize() { scale(_h_M, crossSection()/sumOfWeights()); scale(_h_pT, crossSection()/sumOfWeights()); scale(_h_dPhi, crossSection()/sumOfWeights()); scale(_h_costheta, crossSection()/sumOfWeights()); _h_pT_M.scale(crossSection()/sumOfWeights(), this); _h_dPhi_M.scale(crossSection()/sumOfWeights(), this); _h_costheta_M.scale(crossSection()/sumOfWeights(), this); } private: AIDA::IHistogram1D *_h_M; AIDA::IHistogram1D *_h_pT; AIDA::IHistogram1D *_h_dPhi; AIDA::IHistogram1D *_h_costheta; BinnedHistogram _h_pT_M; BinnedHistogram _h_dPhi_M; BinnedHistogram _h_costheta_M; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2010_S8570965); } rivet-1.8.3/src/Analyses/H1_1994_S2919893.cc0000644000175000017500000001770412116077757015764 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Math/Constants.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/DISKinematics.hh" namespace Rivet { /// @brief H1 energy flow and charged particle spectra /// @author Peter Richardson /// Based on the equivalent HZTool analysis class H1_1994_S2919893 : public Analysis { public: /// Constructor H1_1994_S2919893() : Analysis("H1_1994_S2919893") { // Initialise member variables _w77 = make_pair(0.0, 0.0); _w122 = make_pair(0.0, 0.0); _w169 = make_pair(0.0, 0.0); _w117 = make_pair(0.0, 0.0); _wEnergy = make_pair(0.0, 0.0); } /// @name Analysis methods //@{ void analyze(const Event& event) { const FinalState& fs = applyProjection(event, "FS"); const DISKinematics& dk = applyProjection(event, "Kinematics"); const DISLepton& dl = applyProjection(event,"Lepton"); // Get the DIS kinematics double x = dk.x(); double w2 = dk.W2(); double w = sqrt(w2); // Momentum of the scattered lepton FourMomentum leptonMom = dl.out().momentum(); double ptel = pT(leptonMom); double enel = leptonMom.E(); double thel = leptonMom.angle(dk.beamHadron().momentum())/degree; // Extract the particles other than the lepton ParticleVector particles; particles.reserve(fs.particles().size()); const GenParticle& dislepGP = dl.out().genParticle(); foreach (const Particle& p, fs.particles()) { const GenParticle& loopGP = p.genParticle(); if (&loopGP == &dislepGP) continue; particles.push_back(p); } // Cut on the forward energy double efwd = 0.0; foreach (const Particle& p, particles) { double th = p.momentum().angle(dk.beamHadron().momentum())/degree; if (th > 4.4 && th < 15.) { efwd += p.momentum().E(); } } // Apply the cuts // Lepton energy and angle, w2 and forward energy MSG_DEBUG("enel/GeV = " << enel/GeV << ", thel = " << thel << ", w2 = " << w2 << ", efwd/GeV = " << efwd/GeV); bool cut = enel/GeV > 14. && thel > 157. && thel < 172.5 && w2 >= 3000. && efwd/GeV > 0.5; if (!cut) vetoEvent; // Weight of the event const double weight = event.weight(); // weights for x<1e-3 and x>1e-3 if (x < 1e-3) { _wEnergy.first += weight; } else { _wEnergy.second += weight; } // Boost to hadronic CM const LorentzTransform hcmboost = dk.boostHCM(); // Loop over the particles long ncharged(0); for (size_t ip1 = 0; ip1 < particles.size(); ++ip1) { const Particle& p = particles[ip1]; double th = p.momentum().angle(dk.beamHadron().momentum()) / degree; // Boost momentum to lab const FourMomentum hcmMom = hcmboost.transform(p.momentum()); // Angular cut if (th <= 4.4) continue; // Energy flow histogram double et = fabs(Et(hcmMom)); double eta = hcmMom.pseudorapidity(); if (x < 1e-3) { _histEnergyFlowLowX ->fill(eta, et*weight); } else { _histEnergyFlowHighX->fill(eta, et*weight); } if (PID::threeCharge(p.pdgId()) != 0) { /// @todo Use units in w comparisons... what are the units? if (w > 50. && w <= 200.) { double xf= 2 * hcmMom.z() / w; double pt2 = pT2(hcmMom); if (w > 50. && w <= 100.) { _histSpectraW77 ->fill(xf, weight); } else if (w > 100. && w <= 150.) { _histSpectraW122->fill(xf, weight); } else if (w > 150. && w <= 200.) { _histSpectraW169->fill(xf, weight); } _histSpectraW117->fill(xf, weight); /// @todo Is this profile meant to be filled with 2 weight factors? _histPT2->fill(xf, pt2*weight/GeV2, weight); ++ncharged; } } // Energy-energy correlation if (th <= 8.) continue; double phi1 = p.momentum().azimuthalAngle(ZERO_2PI); double eta1 = p.momentum().pseudorapidity(); double et1 = fabs(Et(p.momentum())); for (size_t ip2 = ip1+1; ip2 < particles.size(); ++ip2) { const Particle& p2 = particles[ip2]; //double th2 = beamAngle(p2.momentum(), order); double th2 = p2.momentum().angle(dk.beamHadron().momentum()) / degree; if (th2 <= 8.) continue; double phi2 = p2.momentum().azimuthalAngle(ZERO_2PI); /// @todo Use angle function double deltaphi = phi1 - phi2; if (fabs(deltaphi) > PI) deltaphi = fabs(fabs(deltaphi) - TWOPI); double eta2 = p2.momentum().pseudorapidity(); double omega = sqrt(sqr(eta1-eta2) + sqr(deltaphi)); double et2 = fabs(Et(p2.momentum())); double wt = et1*et2 / sqr(ptel) * weight; if(x < 1e-3) { _histEECLowX ->fill(omega, wt); } else { _histEECHighX->fill(omega,wt); } } } // Factors for normalization if (w > 50. && w <= 200.) { if (w <= 100.) { _w77.first += ncharged*weight; _w77.second += weight; } else if (w <= 150.) { _w122.first += ncharged*weight; _w122.second += weight; } else { _w169.first += ncharged*weight; _w169.second += weight; } _w117.first += ncharged*weight; _w117.second += weight; } } void init() { // Projections addProjection(DISLepton(), "Lepton"); addProjection(DISKinematics(), "Kinematics"); addProjection(FinalState(), "FS"); // Histos _histEnergyFlowLowX = bookHistogram1D(1, 1, 1); _histEnergyFlowHighX = bookHistogram1D(1, 1, 2); _histEECLowX = bookHistogram1D(2, 1, 1); _histEECHighX = bookHistogram1D(2, 1, 2); _histSpectraW77 = bookHistogram1D(3, 1, 1); _histSpectraW122 = bookHistogram1D(3, 1, 2); _histSpectraW169 = bookHistogram1D(3, 1, 3); _histSpectraW117 = bookHistogram1D(3, 1, 4); _histPT2 = bookProfile1D(4, 1, 1); } /// Finalize void finalize() { // Normalize inclusive single particle distributions to the average number // of charged particles per event. double avgNumParts = _w77.first/_w77.second; normalize(_histSpectraW77, avgNumParts); avgNumParts = _w122.first/_w122.second; normalize(_histSpectraW122, avgNumParts); avgNumParts = _w169.first/_w169.second; normalize(_histSpectraW169, avgNumParts); avgNumParts = _w117.first/_w117.second; normalize(_histSpectraW117, avgNumParts); scale(_histEnergyFlowLowX , 1./_wEnergy.first ); scale(_histEnergyFlowHighX, 1./_wEnergy.second); scale(_histEECLowX , 1./_wEnergy.first ); scale(_histEECHighX, 1./_wEnergy.second); } //@} private: /** * Polar angle with right direction of the beam */ inline double beamAngle(const FourVector& v, const bool & order) { double thel = v.polarAngle()/degree; if(thel<0.) thel+=180.; if(!order) thel = 180.-thel; return thel; } /// @name Histograms //@{ AIDA::IHistogram1D *_histEnergyFlowLowX; AIDA::IHistogram1D *_histEnergyFlowHighX; AIDA::IHistogram1D *_histEECLowX; AIDA::IHistogram1D *_histEECHighX; AIDA::IHistogram1D *_histSpectraW77; AIDA::IHistogram1D *_histSpectraW122; AIDA::IHistogram1D *_histSpectraW169; AIDA::IHistogram1D *_histSpectraW117; AIDA::IProfile1D *_histPT2; //@} /// @name storage of weight to calculate averages for normalisation //@{ pair _w77,_w122,_w169,_w117,_wEnergy; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(H1_1994_S2919893); } rivet-1.8.3/src/Analyses/OPAL_1995_S3198391.cc0000644000175000017500000000443412116077757016235 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief OPAL Delta++ fragmentation function paper /// @author Peter Richardson class OPAL_1995_S3198391 : public Analysis { public: /// Constructor OPAL_1995_S3198391() : Analysis("OPAL_1995_S3198391") {} /// @name Analysis methods //@{ void init() { addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "FS"); addProjection(UnstableFinalState(), "UFS"); _histXpDelta = bookHistogram1D( 1, 1, 1); } void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed leptonic event cut"); vetoEvent; } MSG_DEBUG("Passed leptonic event cut"); // Get event weight for histo filling const double weight = e.weight(); // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); // Final state of unstable particles to get particle spectra const UnstableFinalState& ufs = applyProjection(e, "UFS"); foreach (const Particle& p, ufs.particles()) { if(abs(p.pdgId())==2224) { double xp = p.momentum().vector3().mod()/meanBeamMom; _histXpDelta->fill(xp, weight); } } } /// Finalize void finalize() { scale(_histXpDelta, 1./sumOfWeights()); } //@} private: AIDA::IHistogram1D *_histXpDelta; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(OPAL_1995_S3198391); } rivet-1.8.3/src/Analyses/D0_2008_S7719523.cc0000644000175000017500000001426012116077757015725 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief Measurement of isolated gamma + jet + X differential cross-sections /// /// Inclusive isolated gamma + jet cross-sections, differential in pT(gamma), for /// various photon and jet rapidity bins. /// /// @author Andy Buckley /// @author Gavin Hesketh class D0_2008_S7719523 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor D0_2008_S7719523() : Analysis("D0_2008_S7719523") { } //@} /// @name Analysis methods //@{ /// Set up projections and book histograms void init() { // General FS FinalState fs; addProjection(fs, "FS"); // Get leading photon LeadingParticlesFinalState photonfs(FinalState(-1.0, 1.0, 30.0*GeV)); photonfs.addParticleId(PHOTON); addProjection(photonfs, "LeadingPhoton"); // FS excluding the leading photon VetoedFinalState vfs(fs); vfs.addVetoOnThisFinalState(photonfs); addProjection(vfs, "JetFS"); // Jets FastJets jetpro(vfs, FastJets::D0ILCONE, 0.7); addProjection(jetpro, "Jets"); // Histograms _h_central_same_cross_section = bookHistogram1D(1, 1, 1); _h_central_opp_cross_section = bookHistogram1D(2, 1, 1); _h_forward_same_cross_section = bookHistogram1D(3, 1, 1); _h_forward_opp_cross_section = bookHistogram1D(4, 1, 1); } /// Do the analysis void analyze(const Event& event) { const double weight = event.weight(); // Get the photon const FinalState& photonfs = applyProjection(event, "LeadingPhoton"); if (photonfs.particles().size() != 1) { vetoEvent; } const FourMomentum photon = photonfs.particles().front().momentum(); // Isolate photon by ensuring that a 0.4 cone around it contains less than 7% of the photon's energy double egamma = photon.E(); double eta_P = photon.pseudorapidity(); double phi_P = photon.azimuthalAngle(); double econe = 0.0; foreach (const Particle& p, applyProjection(event, "JetFS").particles()) { if (deltaR(eta_P, phi_P, p.momentum().pseudorapidity(), p.momentum().azimuthalAngle()) < 0.4) { econe += p.momentum().E(); // Veto as soon as E_cone gets larger if (econe/egamma > 0.07) { MSG_DEBUG("Vetoing event because photon is insufficiently isolated"); vetoEvent; } } } Jets jets = applyProjection(event, "Jets").jetsByPt(15.0*GeV); if (jets.size()==0) { vetoEvent; } FourMomentum leadingJet = jets[0].momentum(); if (deltaR(eta_P, phi_P, leadingJet.eta(), leadingJet.phi())<0.7) { vetoEvent; } int photon_jet_sign = sign( leadingJet.rapidity() * photon.rapidity() ); // Veto if leading jet is outside plotted rapidity regions const double abs_y1 = fabs(leadingJet.rapidity()); if (inRange(abs_y1, 0.8, 1.5) || abs_y1 > 2.5) { MSG_DEBUG("Leading jet falls outside acceptance range; |y1| = " << abs_y1); vetoEvent; } // Fill histos if (fabs(leadingJet.rapidity()) < 0.8) { if (photon_jet_sign >= 1) { _h_central_same_cross_section->fill(photon.pT(), weight); } else { _h_central_opp_cross_section->fill(photon.pT(), weight); } } else if (inRange( fabs(leadingJet.rapidity()), 1.5, 2.5)) { if (photon_jet_sign >= 1) { _h_forward_same_cross_section->fill(photon.pT(), weight); } else { _h_forward_opp_cross_section->fill(photon.pT(), weight); } } } /// Finalize void finalize() { const double lumi_gen = sumOfWeights()/crossSection(); const double dy_photon = 2.0; const double dy_jet_central = 1.6; const double dy_jet_forward = 2.0; // Cross-section ratios (6 plots) // Central/central and forward/forward ratios AIDA::IHistogramFactory& hf = histogramFactory(); const string dir = histoDir(); hf.divide(dir + "/d05-x01-y01", *_h_central_opp_cross_section, *_h_central_same_cross_section); hf.divide(dir + "/d08-x01-y01", *_h_forward_opp_cross_section, *_h_forward_same_cross_section); // Central/forward ratio combinations hf.divide(dir + "/d06-x01-y01", *_h_central_same_cross_section, *_h_forward_same_cross_section)->scale(dy_jet_forward/dy_jet_central, 1); hf.divide(dir + "/d07-x01-y01", *_h_central_opp_cross_section, *_h_forward_same_cross_section)->scale(dy_jet_forward/dy_jet_central, 1); hf.divide(dir + "/d09-x01-y01", *_h_central_same_cross_section, *_h_forward_opp_cross_section)->scale(dy_jet_forward/dy_jet_central, 1); hf.divide(dir + "/d10-x01-y01", *_h_central_opp_cross_section, *_h_forward_opp_cross_section)->scale(dy_jet_forward/dy_jet_central, 1); // Use generator cross section for remaining histograms // Each of these needs the additional factor 2 because the // y_photon * y_jet requirement reduces the corresponding 2D "bin width" // by a factor 1/2. scale(_h_central_same_cross_section, 2.0/lumi_gen * 1.0/dy_photon * 1.0/dy_jet_central); scale(_h_central_opp_cross_section, 2.0/lumi_gen * 1.0/dy_photon * 1.0/dy_jet_central); scale(_h_forward_same_cross_section, 2.0/lumi_gen * 1.0/dy_photon * 1.0/dy_jet_forward); scale(_h_forward_opp_cross_section, 2.0/lumi_gen * 1.0/dy_photon * 1.0/dy_jet_forward); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D* _h_central_same_cross_section; AIDA::IHistogram1D* _h_central_opp_cross_section; AIDA::IHistogram1D* _h_forward_same_cross_section; AIDA::IHistogram1D* _h_forward_opp_cross_section; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2008_S7719523); } rivet-1.8.3/src/Analyses/CMS_2011_S8968497.cc0000644000175000017500000000354612116077757016124 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/BinnedHistogram.hh" namespace Rivet { class CMS_2011_S8968497 : public Analysis { public: CMS_2011_S8968497() : Analysis("CMS_2011_S8968497") { } void init() { FinalState fs; FastJets antikt(fs, FastJets::ANTIKT, 0.5); addProjection(antikt, "ANTIKT"); _h_chi_dijet.addHistogram(2200., 7000., bookHistogram1D(1, 1, 1)); _h_chi_dijet.addHistogram(1800., 2200., bookHistogram1D(2, 1, 1)); _h_chi_dijet.addHistogram(1400., 1800., bookHistogram1D(3, 1, 1)); _h_chi_dijet.addHistogram(1100., 1400., bookHistogram1D(4, 1, 1)); _h_chi_dijet.addHistogram( 850., 1100., bookHistogram1D(5, 1, 1)); _h_chi_dijet.addHistogram( 650., 850., bookHistogram1D(6, 1, 1)); _h_chi_dijet.addHistogram( 500., 650., bookHistogram1D(7, 1, 1)); _h_chi_dijet.addHistogram( 350., 500., bookHistogram1D(8, 1, 1)); _h_chi_dijet.addHistogram( 250., 350., bookHistogram1D(9, 1, 1)); } void analyze(const Event& event) { const double weight = event.weight(); const Jets& jets = applyProjection(event, "ANTIKT").jetsByPt(); if (jets.size() < 2) vetoEvent; FourMomentum j0(jets[0].momentum()); FourMomentum j1(jets[1].momentum()); double y0 = j0.rapidity(); double y1 = j1.rapidity(); if (fabs(y0+y1)/2. > 1.11) vetoEvent; double mjj = FourMomentum(j0+j1).mass(); double chi = exp(fabs(y0-y1)); if(chi<16.) _h_chi_dijet.fill(mjj, chi, weight); } void finalize() { foreach (AIDA::IHistogram1D* hist, _h_chi_dijet.getHistograms()) { normalize(hist); } } private: BinnedHistogram _h_chi_dijet; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2011_S8968497); } rivet-1.8.3/src/Analyses/CDF_2001_S4751469.cc0000644000175000017500000002334012116077757016050 0ustar sunsun// -*- C++ -*- // Field & Stuart underlying event analysis at CDF. // Phys.Rev.D65:092002,2002 - no arXiv code. // FNAL-PUB 01/211-E #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/ConstLossyFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/TriggerCDFRun0Run1.hh" #include "LWH/Profile1D.h" namespace Rivet { /// @brief "Field-Stuart" CDF Run I track-jet underlying event analysis /// /// @author Andy Buckley /// /// The "original" underlying event analysis, using a non-standard track-jet algorithm. /// /// @par Run conditions /// /// @arg \f$ \sqrt{s} = \f$ 1800 GeV /// @arg Run with generic QCD events. /// @arg Several \f$ p_\perp^\text{min} \f$ cutoffs are probably required to fill the profile histograms: /// @arg \f$ p_\perp^\text{min} = \f$ 0 (min bias), 10, 20 GeV class CDF_2001_S4751469 : public Analysis { public: /// Constructor: cuts on final state are \f$ -1 < \eta < 1 \f$ /// and \f$ p_T > 0.5 \f$ GeV. CDF_2001_S4751469() : Analysis("CDF_2001_S4751469"), _totalNumTrans2(0), _totalNumTrans5(0), _totalNumTrans30(0), _sumWeightsPtLead2(0),_sumWeightsPtLead5(0), _sumWeightsPtLead30(0) { } /// @name Analysis methods //@{ // Book histograms void init() { addProjection(TriggerCDFRun0Run1(), "Trigger"); // Randomly discard 8% of charged particles as a kind of hacky detector correction. const ChargedFinalState cfs(-1.0, 1.0, 0.5*GeV); const ConstLossyFinalState lfs(cfs, 0.08); // const LossyFinalState lfs(cfs, StarRandomFilter()); addProjection(lfs, "FS"); addProjection(FastJets(lfs, FastJets::TRACKJET, 0.7), "TrackJet"); _numvsDeltaPhi2 = bookProfile1D(1, 1, 1); _numvsDeltaPhi5 = bookProfile1D(1, 1, 2); _numvsDeltaPhi30 = bookProfile1D(1, 1, 3); _pTvsDeltaPhi2 = bookProfile1D(2, 1, 1); _pTvsDeltaPhi5 = bookProfile1D(2, 1, 2); _pTvsDeltaPhi30 = bookProfile1D(2, 1, 3); _numTowardMB = bookProfile1D(3, 1, 1); _numTransMB = bookProfile1D(3, 1, 2); _numAwayMB = bookProfile1D(3, 1, 3); _numTowardJ20 = bookProfile1D(4, 1, 1); _numTransJ20 = bookProfile1D(4, 1, 2); _numAwayJ20 = bookProfile1D(4, 1, 3); _ptsumTowardMB = bookProfile1D(5, 1, 1); _ptsumTransMB = bookProfile1D(5, 1, 2); _ptsumAwayMB = bookProfile1D(5, 1, 3); _ptsumTowardJ20 = bookProfile1D(6, 1, 1); _ptsumTransJ20 = bookProfile1D(6, 1, 2); _ptsumAwayJ20 = bookProfile1D(6, 1, 3); _ptTrans2 = bookHistogram1D(7, 1, 1); _ptTrans5 = bookHistogram1D(7, 1, 2); _ptTrans30 = bookHistogram1D(7, 1, 3); } /// Do the analysis void analyze(const Event& event) { // Trigger const bool trigger = applyProjection(event, "Trigger").minBiasDecision(); if (!trigger) vetoEvent; // Analyse, with pT > 0.5 GeV AND |eta| < 1 const JetAlg& tj = applyProjection(event, "TrackJet"); // Final state (lossy) charged particles const FinalState& fs = applyProjection(event, "FS"); // Get jets, sorted by pT const Jets jets = tj.jetsByPt(); if (jets.empty()) { vetoEvent; } Jet leadingJet = jets.front(); const double phiLead = leadingJet.phi(); const double ptLead = leadingJet.ptSum(); // Cut on highest pT jet: combined 0.5 GeV < pT(lead) < 50 GeV if (ptLead/GeV < 0.5) vetoEvent; if (ptLead/GeV > 50.0) vetoEvent; // Get the event weight const double weight = event.weight(); // Count sum of all event weights in three pT_lead regions if (ptLead/GeV > 2.0) { _sumWeightsPtLead2 += weight; } if (ptLead/GeV > 5.0) { _sumWeightsPtLead5 += weight; } if (ptLead/GeV > 30.0) { _sumWeightsPtLead30 += weight; } // Run over tracks double ptSumToward(0.0), ptSumAway(0.0), ptSumTrans(0.0); size_t numToward(0), numTrans(0), numAway(0); // Temporary histos that bin N and pT in dphi /// @todo Copy the permanent histos to get the binnings more robustly LWH::Profile1D hist_num_dphi_2(50, 0, 180), hist_num_dphi_5(50, 0, 180), hist_num_dphi_30(50, 0, 180); LWH::Profile1D hist_pt_dphi_2(50, 0, 180), hist_pt_dphi_5(50, 0, 180), hist_pt_dphi_30(50, 0, 180); foreach (const Particle& p, fs.particles()) { // Calculate DeltaPhi(p,leadingJet) const double dPhi = deltaPhi(p.momentum().phi(), phiLead); const double pT = p.momentum().pT(); if (dPhi < PI/3.0) { ptSumToward += pT; ++numToward; } else if (dPhi < 2*PI/3.0) { ptSumTrans += pT; ++numTrans; // Fill transverse pT distributions if (ptLead/GeV > 2.0) { _ptTrans2->fill(pT/GeV, weight); _totalNumTrans2 += weight; } if (ptLead/GeV > 5.0) { _ptTrans5->fill(pT/GeV, weight); _totalNumTrans5 += weight; } if (ptLead/GeV > 30.0) { _ptTrans30->fill(pT/GeV, weight); _totalNumTrans30 += weight; } } else { ptSumAway += pT; ++numAway; } // Fill tmp histos to bin event's track Nch & pT in dphi const double dPhideg = 180*dPhi/PI; if (ptLead/GeV > 2.0) { hist_num_dphi_2.fill(dPhideg, 1); hist_pt_dphi_2.fill (dPhideg, pT/GeV); } if (ptLead/GeV > 5.0) { hist_num_dphi_5.fill(dPhideg, 1); hist_pt_dphi_5.fill (dPhideg, pT/GeV); } if (ptLead/GeV > 30.0) { hist_num_dphi_30.fill(dPhideg, 1); hist_pt_dphi_30.fill (dPhideg, pT/GeV); } } // Update the "proper" dphi profile histograms for (int i = 0; i < 50; i++) { if (ptLead/GeV > 2.0) { _numvsDeltaPhi2->fill(hist_num_dphi_2.binMean(i), hist_num_dphi_2.binHeight(i), weight); _pTvsDeltaPhi2->fill(hist_pt_dphi_2.binMean(i), hist_pt_dphi_2.binHeight(i), weight); } if (ptLead/GeV > 5.0) { _numvsDeltaPhi5->fill(hist_num_dphi_5.binMean(i), hist_num_dphi_5.binHeight(i), weight); _pTvsDeltaPhi5->fill(hist_pt_dphi_5.binMean(i), hist_pt_dphi_5.binHeight(i), weight); } if (ptLead/GeV > 30.0) { _numvsDeltaPhi30->fill(hist_num_dphi_30.binMean(i), hist_num_dphi_30.binHeight(i), weight); _pTvsDeltaPhi30->fill(hist_pt_dphi_30.binMean(i), hist_pt_dphi_30.binHeight(i), weight); } } // Log some event details about pT MSG_DEBUG("pT [lead; twd, away, trans] = [" << ptLead << "; " << ptSumToward << ", " << ptSumAway << ", " << ptSumTrans << "]"); // Update the pT profile histograms _ptsumTowardMB->fill(ptLead/GeV, ptSumToward/GeV, weight); _ptsumTowardJ20->fill(ptLead/GeV, ptSumToward/GeV, weight); _ptsumTransMB->fill(ptLead/GeV, ptSumTrans/GeV, weight); _ptsumTransJ20->fill(ptLead/GeV, ptSumTrans/GeV, weight); _ptsumAwayMB->fill(ptLead/GeV, ptSumAway/GeV, weight); _ptsumAwayJ20->fill(ptLead/GeV, ptSumAway/GeV, weight); // Log some event details about Nch MSG_DEBUG("N [twd, away, trans] = [" << ptLead << "; " << numToward << ", " << numTrans << ", " << numAway << "]"); // Update the N_track profile histograms _numTowardMB->fill(ptLead/GeV, numToward, weight); _numTowardJ20->fill(ptLead/GeV, numToward, weight); _numTransMB->fill(ptLead/GeV, numTrans, weight); _numTransJ20->fill(ptLead/GeV, numTrans, weight); _numAwayMB->fill(ptLead/GeV, numAway, weight); _numAwayJ20->fill(ptLead/GeV, numAway, weight); } /// Normalize histos void finalize() { normalize(_ptTrans2, _totalNumTrans2 / _sumWeightsPtLead2); normalize(_ptTrans5, _totalNumTrans5 / _sumWeightsPtLead5); normalize(_ptTrans30, _totalNumTrans30 / _sumWeightsPtLead30); } //@} private: /// Sum total number of charged particles in the trans region, in 3 \f$ p_\perp^\text{lead} \f$ bins. double _totalNumTrans2, _totalNumTrans5, _totalNumTrans30; /// Sum the total number of events in 3 \f$ p_\perp^\text{lead} \f$ bins. double _sumWeightsPtLead2,_sumWeightsPtLead5, _sumWeightsPtLead30; /// @name Histogram collections //@{ // These histos (binned in dphi) are filled per event and then reset // TODO: use LWH AIDA::IProfile1D *_hist_num_dphi_2, *_hist_num_dphi_5, *_hist_num_dphi_30; AIDA::IProfile1D *_hist_pt_dphi_2, *_hist_pt_dphi_5, *_hist_pt_dphi_30; // The sumpt vs. dphi and Nch vs. dphi histos AIDA::IProfile1D *_numvsDeltaPhi2, *_numvsDeltaPhi5, *_numvsDeltaPhi30; AIDA::IProfile1D *_pTvsDeltaPhi2, *_pTvsDeltaPhi5, *_pTvsDeltaPhi30; /// Profile histograms, binned in the \f$ p_T \f$ of the leading jet, for /// the \f$ p_T \f$ sum in the toward, transverse and away regions. AIDA::IProfile1D *_ptsumTowardMB, *_ptsumTransMB, *_ptsumAwayMB; AIDA::IProfile1D *_ptsumTowardJ20, *_ptsumTransJ20, *_ptsumAwayJ20; /// Profile histograms, binned in the \f$ p_T \f$ of the leading jet, for /// the number of charged particles per jet in the toward, transverse and /// away regions. AIDA::IProfile1D *_numTowardMB, *_numTransMB, *_numAwayMB; AIDA::IProfile1D *_numTowardJ20, *_numTransJ20, *_numAwayJ20; /// Histogram of \f$ p_T \f$ distribution for 3 different \f$ p_{T1} \f$ IR cutoffs. AIDA::IHistogram1D *_ptTrans2, *_ptTrans5, *_ptTrans30; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2001_S4751469); } rivet-1.8.3/src/Analyses/ALEPH_1996_S3486095.cc0000644000175000017500000005417712116077757016346 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/Sphericity.hh" #include "Rivet/Projections/Thrust.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/ParisiTensor.hh" #include "Rivet/Projections/Hemispheres.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief ALEPH QCD study with event shapes and identified particles /// @author Holger Schulz class ALEPH_1996_S3486095 : public Analysis { public: /// Constructor ALEPH_1996_S3486095() : Analysis("ALEPH_1996_S3486095") { _numChParticles = 0; _weightedTotalPartNum = 0; _weightedTotalNumPiPlus = 0; _weightedTotalNumKPlus = 0; _weightedTotalNumP = 0; _weightedTotalNumPhoton = 0; _weightedTotalNumPi0 = 0; _weightedTotalNumEta = 0; _weightedTotalNumEtaPrime = 0; _weightedTotalNumK0 = 0; _weightedTotalNumLambda0 = 0; _weightedTotalNumXiMinus = 0; _weightedTotalNumSigma1385Plus= 0; _weightedTotalNumXi1530_0 = 0; _weightedTotalNumRho = 0; _weightedTotalNumOmega782 = 0; _weightedTotalNumKStar892_0 = 0; _weightedTotalNumPhi = 0; _weightedTotalNumKStar892Plus = 0; } /// @name Analysis methods //@{ void init() { // Set up projections addProjection(Beam(), "Beams"); const ChargedFinalState cfs; addProjection(cfs, "FS"); addProjection(UnstableFinalState(), "UFS"); addProjection(FastJets(cfs, FastJets::DURHAM, 0.7), "DurhamJets"); addProjection(Sphericity(cfs), "Sphericity"); addProjection(ParisiTensor(cfs), "Parisi"); const Thrust thrust(cfs); addProjection(thrust, "Thrust"); addProjection(Hemispheres(thrust), "Hemispheres"); // Book histograms _histSphericity = bookHistogram1D(1, 1, 1); _histAplanarity = bookHistogram1D(2, 1, 1); _hist1MinusT = bookHistogram1D(3, 1, 1); _histTMinor = bookHistogram1D(4, 1, 1); _histY3 = bookHistogram1D(5, 1, 1); _histHeavyJetMass = bookHistogram1D(6, 1, 1); _histCParam = bookHistogram1D(7, 1, 1); _histOblateness = bookHistogram1D(8, 1, 1); _histScaledMom = bookHistogram1D(9, 1, 1); _histRapidityT = bookHistogram1D(10, 1, 1); _histPtSIn = bookHistogram1D(11, 1, 1); _histPtSOut = bookHistogram1D(12, 1, 1); _histLogScaledMom = bookHistogram1D(17, 1, 1); _histChMult = bookHistogram1D(18, 1, 1); _histMeanChMult = bookHistogram1D(19, 1, 1); _histMeanChMultRapt05= bookHistogram1D(20, 1, 1); _histMeanChMultRapt10= bookHistogram1D(21, 1, 1); _histMeanChMultRapt15= bookHistogram1D(22, 1, 1); _histMeanChMultRapt20= bookHistogram1D(23, 1, 1); // Particle spectra _histMultiPiPlus = bookHistogram1D(25, 1, 1); _histMultiKPlus = bookHistogram1D(26, 1, 1); _histMultiP = bookHistogram1D(27, 1, 1); _histMultiPhoton = bookHistogram1D(28, 1, 1); _histMultiPi0 = bookHistogram1D(29, 1, 1); _histMultiEta = bookHistogram1D(30, 1, 1); _histMultiEtaPrime = bookHistogram1D(31, 1, 1); _histMultiK0 = bookHistogram1D(32, 1, 1); _histMultiLambda0 = bookHistogram1D(33, 1, 1); _histMultiXiMinus = bookHistogram1D(34, 1, 1); _histMultiSigma1385Plus = bookHistogram1D(35, 1, 1); _histMultiXi1530_0 = bookHistogram1D(36, 1, 1); _histMultiRho = bookHistogram1D(37, 1, 1); _histMultiOmega782 = bookHistogram1D(38, 1, 1); _histMultiKStar892_0 = bookHistogram1D(39, 1, 1); _histMultiPhi = bookHistogram1D(40, 1, 1); _histMultiKStar892Plus = bookHistogram1D(43, 1, 1); // Mean multiplicities _histMeanMultiPi0 = bookHistogram1D(44, 1, 2); _histMeanMultiEta = bookHistogram1D(44, 1, 3); _histMeanMultiEtaPrime = bookHistogram1D(44, 1, 4); _histMeanMultiK0 = bookHistogram1D(44, 1, 5); _histMeanMultiRho = bookHistogram1D(44, 1, 6); _histMeanMultiOmega782 = bookHistogram1D(44, 1, 7); _histMeanMultiPhi = bookHistogram1D(44, 1, 8); _histMeanMultiKStar892Plus = bookHistogram1D(44, 1, 9); _histMeanMultiKStar892_0 = bookHistogram1D(44, 1, 10); _histMeanMultiLambda0 = bookHistogram1D(44, 1, 11); _histMeanMultiSigma0 = bookHistogram1D(44, 1, 12); _histMeanMultiXiMinus = bookHistogram1D(44, 1, 13); _histMeanMultiSigma1385Plus = bookHistogram1D(44, 1, 14); _histMeanMultiXi1530_0 = bookHistogram1D(44, 1, 15); _histMeanMultiOmegaOmegaBar = bookHistogram1D(44, 1, 16); } void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed leptonic event cut"); vetoEvent; } MSG_DEBUG("Passed leptonic event cut"); // Get event weight for histo filling const double weight = e.weight(); _weightedTotalPartNum += numParticles * weight; // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); // Thrusts MSG_DEBUG("Calculating thrust"); const Thrust& thrust = applyProjection(e, "Thrust"); _hist1MinusT->fill(1 - thrust.thrust(), weight); _histTMinor->fill(thrust.thrustMinor(), weight); _histOblateness->fill(thrust.oblateness(), weight); // Jets MSG_DEBUG("Calculating differential jet rate plots:"); const FastJets& durjet = applyProjection(e, "DurhamJets"); if (durjet.clusterSeq()) { double y3 = durjet.clusterSeq()->exclusive_ymerge_max(2); _histY3->fill(-1. * std::log(y3), weight); } // Sphericities MSG_DEBUG("Calculating sphericity"); const Sphericity& sphericity = applyProjection(e, "Sphericity"); _histSphericity->fill(sphericity.sphericity(), weight); _histAplanarity->fill(sphericity.aplanarity(), weight); // C param MSG_DEBUG("Calculating Parisi params"); const ParisiTensor& parisi = applyProjection(e, "Parisi"); _histCParam->fill(parisi.C(), weight); // Hemispheres MSG_DEBUG("Calculating hemisphere variables"); const Hemispheres& hemi = applyProjection(e, "Hemispheres"); _histHeavyJetMass->fill(hemi.scaledM2high(), weight); // Iterate over all the charged final state particles. double Evis = 0.0; double rapt05 = 0.; double rapt10 = 0.; double rapt15 = 0.; double rapt20 = 0.; //int numChParticles = 0; MSG_DEBUG("About to iterate over charged FS particles"); foreach (const Particle& p, fs.particles()) { // Get momentum and energy of each particle. const Vector3 mom3 = p.momentum().vector3(); const double energy = p.momentum().E(); Evis += energy; _numChParticles += weight; // Scaled momenta. const double mom = mom3.mod(); const double scaledMom = mom/meanBeamMom; const double logInvScaledMom = -std::log(scaledMom); _histLogScaledMom->fill(logInvScaledMom, weight); _histScaledMom->fill(scaledMom, weight); // Get momenta components w.r.t. thrust and sphericity. const double momT = dot(thrust.thrustAxis(), mom3); const double pTinS = dot(mom3, sphericity.sphericityMajorAxis()); const double pToutS = dot(mom3, sphericity.sphericityMinorAxis()); _histPtSIn->fill(fabs(pTinS/GeV), weight); _histPtSOut->fill(fabs(pToutS/GeV), weight); // Calculate rapidities w.r.t. thrust. const double rapidityT = 0.5 * std::log((energy + momT) / (energy - momT)); _histRapidityT->fill(fabs(rapidityT), weight); if (std::fabs(rapidityT) <= 0.5) { rapt05 += 1.0; } if (std::fabs(rapidityT) <= 1.0) { rapt10 += 1.0; } if (std::fabs(rapidityT) <= 1.5) { rapt15 += 1.0; } if (std::fabs(rapidityT) <= 2.0) { rapt20 += 1.0; } } _histChMult->fill(numParticles, weight); _histMeanChMultRapt05->fill(_histMeanChMultRapt05->binMean(0), rapt05 * weight); _histMeanChMultRapt10->fill(_histMeanChMultRapt10->binMean(0), rapt10 * weight); _histMeanChMultRapt15->fill(_histMeanChMultRapt15->binMean(0), rapt15 * weight); _histMeanChMultRapt20->fill(_histMeanChMultRapt20->binMean(0), rapt20 * weight); _histMeanChMult->fill(_histMeanChMult->binMean(0), numParticles*weight); //// Final state of unstable particles to get particle spectra const UnstableFinalState& ufs = applyProjection(e, "UFS"); for (ParticleVector::const_iterator p = ufs.particles().begin(); p != ufs.particles().end(); ++p) { const Vector3 mom3 = p->momentum().vector3(); int id = abs(p->pdgId()); const double mom = mom3.mod(); const double energy = p->momentum().E(); const double scaledMom = mom/meanBeamMom; const double scaledEnergy = energy/meanBeamMom; // meanBeamMom is approximately beam energy switch (id) { case 22: _histMultiPhoton->fill(-1.*std::log(scaledMom), weight); _weightedTotalNumPhoton += weight; break; case -321: case 321: _weightedTotalNumKPlus += weight; _histMultiKPlus->fill(scaledMom, weight); break; case 211: case -211: _histMultiPiPlus->fill(scaledMom, weight); _weightedTotalNumPiPlus += weight; break; case 2212: case -2212: _histMultiP->fill(scaledMom, weight); _weightedTotalNumP += weight; break; case 111: _histMultiPi0->fill(scaledMom, weight); _histMeanMultiPi0->fill(_histMeanMultiPi0->binMean(0), weight); _weightedTotalNumPi0 += weight; break; case 221: if (scaledMom >= 0.1) { _histMultiEta->fill(scaledEnergy, weight); _histMeanMultiEta->fill(_histMeanMultiEta->binMean(0), weight); _weightedTotalNumEta += weight; } break; case 331: if (scaledMom >= 0.1) { _histMultiEtaPrime->fill(scaledEnergy, weight); _histMeanMultiEtaPrime->fill(_histMeanMultiEtaPrime->binMean(0), weight); _weightedTotalNumEtaPrime += weight; } break; case 130: //klong case 310: //kshort _histMultiK0->fill(scaledMom, weight); _histMeanMultiK0->fill(_histMeanMultiK0->binMean(0), weight); _weightedTotalNumK0 += weight; break; case 113: _histMultiRho->fill(scaledMom, weight); _histMeanMultiRho->fill(_histMeanMultiRho->binMean(0), weight); _weightedTotalNumRho += weight; break; case 223: _histMultiOmega782->fill(scaledMom, weight); _histMeanMultiOmega782->fill(_histMeanMultiOmega782->binMean(0), weight); _weightedTotalNumOmega782 += weight; break; case 333: _histMultiPhi->fill(scaledMom, weight); _histMeanMultiPhi->fill(_histMeanMultiPhi->binMean(0), weight); _weightedTotalNumPhi += weight; break; case 313: case -313: _histMultiKStar892_0->fill(scaledMom, weight); _histMeanMultiKStar892_0->fill(_histMeanMultiKStar892_0->binMean(0), weight); _weightedTotalNumKStar892_0 += weight; break; case 323: case -323: _histMultiKStar892Plus->fill(scaledEnergy, weight); _histMeanMultiKStar892Plus->fill(_histMeanMultiKStar892Plus->binMean(0), weight); _weightedTotalNumKStar892Plus += weight; break; case 3122: case -3122: _histMultiLambda0->fill(scaledMom, weight); _histMeanMultiLambda0->fill(_histMeanMultiLambda0->binMean(0), weight); _weightedTotalNumLambda0 += weight; break; case 3212: case -3212: _histMeanMultiSigma0->fill(_histMeanMultiSigma0->binMean(0), weight); break; case 3312: case -3312: _histMultiXiMinus->fill(scaledEnergy, weight); _histMeanMultiXiMinus->fill(_histMeanMultiXiMinus->binMean(0), weight); _weightedTotalNumXiMinus += weight; break; case 3114: case -3114: case 3224: case -3224: _histMultiSigma1385Plus->fill(scaledEnergy, weight); _histMeanMultiSigma1385Plus->fill(_histMeanMultiSigma1385Plus->binMean(0), weight); _weightedTotalNumSigma1385Plus += weight; break; case 3324: case -3324: _histMultiXi1530_0->fill(scaledEnergy, weight); _histMeanMultiXi1530_0->fill(_histMeanMultiXi1530_0->binMean(0), weight); _weightedTotalNumXi1530_0 += weight; break; case 3334: _histMeanMultiOmegaOmegaBar->fill(_histMeanMultiOmegaOmegaBar->binMean(0), weight); break; } } } /// Finalize void finalize() { // Normalize inclusive single particle distributions to the average number // of charged particles per event. const double avgNumParts = _weightedTotalPartNum / sumOfWeights(); normalize(_histPtSIn, avgNumParts); normalize(_histPtSOut, avgNumParts); normalize(_histRapidityT, avgNumParts); normalize(_histY3); normalize(_histLogScaledMom, avgNumParts); normalize(_histScaledMom, avgNumParts); // particle spectra scale(_histMultiPiPlus ,1./sumOfWeights()); scale(_histMultiKPlus ,1./sumOfWeights()); scale(_histMultiP ,1./sumOfWeights()); scale(_histMultiPhoton ,1./sumOfWeights()); scale(_histMultiPi0 ,1./sumOfWeights()); scale(_histMultiEta ,1./sumOfWeights()); scale(_histMultiEtaPrime ,1./sumOfWeights()); scale(_histMultiK0 ,1./sumOfWeights()); scale(_histMultiLambda0 ,1./sumOfWeights()); scale(_histMultiXiMinus ,1./sumOfWeights()); scale(_histMultiSigma1385Plus ,1./sumOfWeights()); scale(_histMultiXi1530_0 ,1./sumOfWeights()); scale(_histMultiRho ,1./sumOfWeights()); scale(_histMultiOmega782 ,1./sumOfWeights()); scale(_histMultiKStar892_0 ,1./sumOfWeights()); scale(_histMultiPhi ,1./sumOfWeights()); scale(_histMultiKStar892Plus ,1./sumOfWeights()); //normalize(_histMultiPiPlus ,_weightedTotalNumPiPlus / sumOfWeights()); //normalize(_histMultiKPlus ,_weightedTotalNumKPlus/sumOfWeights()); //normalize(_histMultiP ,_weightedTotalNumP/sumOfWeights()); //normalize(_histMultiPhoton ,_weightedTotalNumPhoton/sumOfWeights()); //normalize(_histMultiPi0 ,_weightedTotalNumPi0/sumOfWeights()); //normalize(_histMultiEta ,_weightedTotalNumEta/sumOfWeights()); //normalize(_histMultiEtaPrime ,_weightedTotalNumEtaPrime/sumOfWeights()); //normalize(_histMultiK0 ,_weightedTotalNumK0/sumOfWeights()); //normalize(_histMultiLambda0 ,_weightedTotalNumLambda0/sumOfWeights()); //normalize(_histMultiXiMinus ,_weightedTotalNumXiMinus/sumOfWeights()); //normalize(_histMultiSigma1385Plus ,_weightedTotalNumSigma1385Plus/sumOfWeights()); //normalize(_histMultiXi1530_0 ,_weightedTotalNumXi1530_0 /sumOfWeights()); //normalize(_histMultiRho ,_weightedTotalNumRho/sumOfWeights()); //normalize(_histMultiOmegaMinus ,_weightedTotalNumOmegaMinus/sumOfWeights()); //normalize(_histMultiKStar892_0 ,_weightedTotalNumKStar892_0/sumOfWeights()); //normalize(_histMultiPhi ,_weightedTotalNumPhi/sumOfWeights()); //normalize(_histMultiKStar892Plus ,_weightedTotalNumKStar892Plus/sumOfWeights()); // event shape normalize(_hist1MinusT); normalize(_histTMinor); normalize(_histOblateness); normalize(_histSphericity); normalize(_histAplanarity); normalize(_histHeavyJetMass); normalize(_histCParam); // mean multiplicities scale(_histChMult , 2.0/sumOfWeights()); // taking into account the binwidth of 2 scale(_histMeanChMult , 1.0/sumOfWeights()); scale(_histMeanChMultRapt05 , 1.0/sumOfWeights()); scale(_histMeanChMultRapt10 , 1.0/sumOfWeights()); scale(_histMeanChMultRapt15 , 1.0/sumOfWeights()); scale(_histMeanChMultRapt20 , 1.0/sumOfWeights()); scale(_histMeanMultiPi0 , 1.0/sumOfWeights()); scale(_histMeanMultiEta , 1.0/sumOfWeights()); scale(_histMeanMultiEtaPrime , 1.0/sumOfWeights()); scale(_histMeanMultiK0 , 1.0/sumOfWeights()); scale(_histMeanMultiRho , 1.0/sumOfWeights()); scale(_histMeanMultiOmega782 , 1.0/sumOfWeights()); scale(_histMeanMultiPhi , 1.0/sumOfWeights()); scale(_histMeanMultiKStar892Plus , 1.0/sumOfWeights()); scale(_histMeanMultiKStar892_0 , 1.0/sumOfWeights()); scale(_histMeanMultiLambda0 , 1.0/sumOfWeights()); scale(_histMeanMultiSigma0 , 1.0/sumOfWeights()); scale(_histMeanMultiXiMinus , 1.0/sumOfWeights()); scale(_histMeanMultiSigma1385Plus, 1.0/sumOfWeights()); scale(_histMeanMultiXi1530_0 , 1.0/sumOfWeights()); scale(_histMeanMultiOmegaOmegaBar, 1.0/sumOfWeights()); } //@} private: /// Store the weighted sums of numbers of charged / charged+neutral /// particles - used to calculate average number of particles for the /// inclusive single particle distributions' normalisations. double _weightedTotalPartNum; double _weightedTotalNumPiPlus; double _weightedTotalNumKPlus; double _weightedTotalNumP; double _weightedTotalNumPhoton; double _weightedTotalNumPi0; double _weightedTotalNumEta; double _weightedTotalNumEtaPrime; double _weightedTotalNumK0; double _weightedTotalNumLambda0; double _weightedTotalNumXiMinus; double _weightedTotalNumSigma1385Plus; double _weightedTotalNumXi1530_0; double _weightedTotalNumRho; double _weightedTotalNumOmega782; double _weightedTotalNumKStar892_0; double _weightedTotalNumPhi; double _weightedTotalNumKStar892Plus; double _numChParticles; /// @name Histograms //@{ AIDA::IHistogram1D *_histSphericity; AIDA::IHistogram1D *_histAplanarity; AIDA::IHistogram1D *_hist1MinusT; AIDA::IHistogram1D *_histTMinor; AIDA::IHistogram1D *_histY3; AIDA::IHistogram1D *_histHeavyJetMass; AIDA::IHistogram1D *_histCParam; AIDA::IHistogram1D *_histOblateness; AIDA::IHistogram1D *_histScaledMom; AIDA::IHistogram1D *_histRapidityT; AIDA::IHistogram1D *_histPtSIn; AIDA::IHistogram1D *_histPtSOut; AIDA::IHistogram1D *_histJetRate2Durham; AIDA::IHistogram1D *_histJetRate3Durham; AIDA::IHistogram1D *_histJetRate4Durham; AIDA::IHistogram1D *_histJetRate5Durham; AIDA::IHistogram1D *_histLogScaledMom; AIDA::IHistogram1D *_histChMult; AIDA::IHistogram1D *_histMultiPiPlus; AIDA::IHistogram1D *_histMultiKPlus; AIDA::IHistogram1D *_histMultiP; AIDA::IHistogram1D *_histMultiPhoton; AIDA::IHistogram1D *_histMultiPi0; AIDA::IHistogram1D *_histMultiEta; AIDA::IHistogram1D *_histMultiEtaPrime; AIDA::IHistogram1D *_histMultiK0; AIDA::IHistogram1D *_histMultiLambda0; AIDA::IHistogram1D *_histMultiXiMinus; AIDA::IHistogram1D *_histMultiSigma1385Plus; AIDA::IHistogram1D *_histMultiXi1530_0; AIDA::IHistogram1D *_histMultiRho; AIDA::IHistogram1D *_histMultiOmega782; AIDA::IHistogram1D *_histMultiKStar892_0; AIDA::IHistogram1D *_histMultiPhi; AIDA::IHistogram1D *_histMultiKStar892Plus; // mean multiplicities AIDA::IHistogram1D *_histMeanChMult; AIDA::IHistogram1D *_histMeanChMultRapt05; AIDA::IHistogram1D *_histMeanChMultRapt10; AIDA::IHistogram1D *_histMeanChMultRapt15; AIDA::IHistogram1D *_histMeanChMultRapt20; AIDA::IHistogram1D *_histMeanMultiPi0; AIDA::IHistogram1D *_histMeanMultiEta; AIDA::IHistogram1D *_histMeanMultiEtaPrime; AIDA::IHistogram1D *_histMeanMultiK0; AIDA::IHistogram1D *_histMeanMultiRho; AIDA::IHistogram1D *_histMeanMultiOmega782; AIDA::IHistogram1D *_histMeanMultiPhi; AIDA::IHistogram1D *_histMeanMultiKStar892Plus; AIDA::IHistogram1D *_histMeanMultiKStar892_0; AIDA::IHistogram1D *_histMeanMultiLambda0; AIDA::IHistogram1D *_histMeanMultiSigma0; AIDA::IHistogram1D *_histMeanMultiXiMinus; AIDA::IHistogram1D *_histMeanMultiSigma1385Plus; AIDA::IHistogram1D *_histMeanMultiXi1530_0; AIDA::IHistogram1D *_histMeanMultiOmegaOmegaBar; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ALEPH_1996_S3486095); } rivet-1.8.3/src/Analyses/ATLAS_2011_CONF_2011_090.cc0000644000175000017500000002320612116077757017114 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { class ATLAS_2011_CONF_2011_090 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2011_CONF_2011_090() : Analysis("ATLAS_2011_CONF_2011_090") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialize projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 20.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // veto region electrons (from 2010 arXiv:1102.2357v2) std::vector > eta_v_e; eta_v_e.push_back(make_pair(-1.52,-1.37)); eta_v_e.push_back(make_pair( 1.37, 1.52)); IdentifiedFinalState veto_elecs(eta_v_e, 10.0*GeV); veto_elecs.acceptIdPair(ELECTRON); addProjection(veto_elecs, "veto_elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // Jet finder VetoedFinalState vfs; vfs.addVetoPairId(MUON); addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // all tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0,0.5*GeV),"cfs"); // for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); /// Book histograms _count_mu_channel = bookHistogram1D("count_muon_channel", 1, 0., 1.); _count_e_channel = bookHistogram1D("count_electron_channel", 1, 0., 1.); _hist_eTmiss_e = bookHistogram1D("Et_miss_e", 50, 0., 500.); _hist_eTmiss_mu = bookHistogram1D("Et_miss_mu", 50, 0., 500.); _hist_m_eff_e = bookHistogram1D("m_eff_e", 60, 0., 1500.); _hist_m_eff_mu = bookHistogram1D("m_eff_mu", 60, 0., 1500.); _hist_m_eff_e_final = bookHistogram1D("m_eff_e_final", 15, 0., 1500.); _hist_m_eff_mu_final = bookHistogram1D("m_eff_mu_final", 15, 0., 1500.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); ParticleVector veto_e = applyProjection(event, "veto_elecs").particles(); if ( ! veto_e.empty() ) { MSG_DEBUG("electrons in veto region"); vetoEvent; } Jets cand_jets; foreach ( const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 2.8 ) { cand_jets.push_back(jet); } } ParticleVector candtemp_e = applyProjection(event, "elecs").particlesByPt(); ParticleVector candtemp_mu = applyProjection(event,"muons").particlesByPt(); ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); ParticleVector cand_mu; ParticleVector cand_e; // pTcone around muon track foreach ( const Particle & mu, candtemp_mu ) { double pTinCone = -mu.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(mu.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 1.8*GeV ) cand_mu.push_back(mu); } // pTcone around electron foreach ( const Particle e, candtemp_e ) { double pTinCone = -e.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(e.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 0.10 * e.momentum().pT() ) cand_e.push_back(e); } // discard jets that overlap with electrons Jets cand_jets_2; foreach ( const Jet& jet, cand_jets ) { bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) cand_jets_2.push_back( jet ); } // only consider leptons far from jet ParticleVector recon_e, recon_mu; foreach ( const Particle & e, cand_e ) { bool e_near_jet = false; foreach ( const Jet& jet, cand_jets_2 ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.4 && deltaR(e.momentum(),jet.momentum()) > 0.2 ) e_near_jet = true; } if ( ! e_near_jet ) recon_e.push_back( e ); } foreach ( const Particle & mu, cand_mu ) { bool mu_near_jet = false; foreach ( const Jet& jet, cand_jets_2 ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) mu_near_jet = true; } if ( ! mu_near_jet ) recon_mu.push_back( mu ); } // pTmiss ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // final jet filter Jets recon_jets; foreach ( const Jet& jet, cand_jets_2 ) { recon_jets.push_back( jet ); } // ==================== observables ==================== // Njets int Njets = 0; double pTmiss_phi = pTmiss.phi(); foreach ( const Jet& jet, recon_jets ) { if ( fabs(jet.momentum().eta()) < 2.8 ) Njets+=1; } if ( Njets < 3 ) { MSG_DEBUG("Only " << Njets << " jets w/ eta<2.8 left"); vetoEvent; } if ( recon_jets[0].momentum().pT() <= 60.0 * GeV ) { MSG_DEBUG("No hard leading jet in " << recon_jets.size() << " jets"); vetoEvent; } for ( int i = 1; i < 3; ++i ) { if ( recon_jets[i].momentum().pT() <= 25*GeV ) { vetoEvent; } } for ( int i = 0; i < 3; ++i ) { double dPhi = deltaPhi( pTmiss_phi, recon_jets[i].momentum().phi() ); if ( dPhi <= 0.2 ) { MSG_DEBUG("dPhi too small"); vetoEvent; break; } } ParticleVector lepton; if ( recon_mu.empty() && recon_e.empty() ) { MSG_DEBUG("No leptons"); vetoEvent; } else { foreach ( const Particle & mu, recon_mu ) lepton.push_back(mu); foreach ( const Particle & e, recon_e ) lepton.push_back(e); } std::sort(lepton.begin(), lepton.end(), cmpParticleByPt); double e_id = 11; double mu_id = 13; // one hard leading lepton cut if ( fabs(lepton[0].pdgId()) == e_id && lepton[0].momentum().pT() <= 25*GeV ) { vetoEvent; } else if ( fabs(lepton[0].pdgId()) == mu_id && lepton[0].momentum().pT() <= 20*GeV ) { vetoEvent; } // exactly one hard leading lepton cut if(lepton.size()>1) { if ( fabs(lepton[1].pdgId()) == e_id && lepton[1].momentum().pT() > 20*GeV ) { vetoEvent; } else if ( fabs(lepton[1].pdgId()) == mu_id && lepton[1].momentum().pT() > 10*GeV ) { vetoEvent; } } // ==================== FILL ==================== FourMomentum pT_l = lepton[0].momentum(); double dPhi = deltaPhi( pT_l.phi(), pTmiss_phi); double mT = sqrt( 2 * pT_l.pT() * eTmiss * (1 - cos(dPhi)) ); // effective mass double m_eff = eTmiss + pT_l.pT() + recon_jets[0].momentum().pT() + recon_jets[1].momentum().pT() + recon_jets[2].momentum().pT(); // Electron channel signal region if ( fabs( lepton[0].pdgId() ) == e_id ) { _hist_eTmiss_e->fill(eTmiss, weight); _hist_m_eff_e->fill(m_eff, weight); if ( mT > 100*GeV && eTmiss > 125*GeV ) { _hist_m_eff_e_final->fill(m_eff, weight); if ( m_eff > 500*GeV && eTmiss > 0.25*m_eff ) { _count_e_channel->fill(0.5,weight); } } } // Muon channel signal region else if ( fabs( lepton[0].pdgId() ) == mu_id ) { _hist_eTmiss_mu->fill(eTmiss, weight); _hist_m_eff_mu->fill(m_eff, weight); if ( mT > 100*GeV && eTmiss > 125*GeV ) { _hist_m_eff_mu_final->fill(m_eff, weight); if ( m_eff > 500*GeV && eTmiss > 0.25*m_eff ) { _count_mu_channel->fill(0.5,weight); } } } } //@} void finalize() { scale( _hist_eTmiss_e , 10. * 165. * crossSection()/picobarn/sumOfWeights() ); scale( _hist_eTmiss_mu , 10. * 165. * crossSection()/picobarn/sumOfWeights() ); scale( _hist_m_eff_e , 25. * 165. * crossSection()/picobarn/sumOfWeights() ); scale( _hist_m_eff_mu , 25. * 165. * crossSection()/picobarn/sumOfWeights() ); scale( _hist_m_eff_e_final , 100. * 165. * crossSection()/picobarn/sumOfWeights() ); scale( _hist_m_eff_mu_final, 100. * 165. * crossSection()/picobarn/sumOfWeights() ); } private: /// @name Histograms //@{ AIDA::IHistogram1D* _count_e_channel; AIDA::IHistogram1D* _count_mu_channel; AIDA::IHistogram1D* _hist_eTmiss_e; AIDA::IHistogram1D* _hist_eTmiss_mu; AIDA::IHistogram1D* _hist_m_eff_e; AIDA::IHistogram1D* _hist_m_eff_mu; AIDA::IHistogram1D* _hist_m_eff_e_final; AIDA::IHistogram1D* _hist_m_eff_mu_final; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_CONF_2011_090); } rivet-1.8.3/src/Analyses/MC_WWJETS.cc0000644000175000017500000000761512116077757015355 0ustar sunsun// -*- C++ -*- #include "Rivet/Analyses/MC_JetAnalysis.hh" #include "Rivet/Projections/WFinder.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief MC validation analysis for W^+[enu]W^-[munu] + jets events class MC_WWJETS : public MC_JetAnalysis { public: /// Default constructor MC_WWJETS() : MC_JetAnalysis("MC_WWJETS", 4, "Jets") { } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; WFinder wenufinder(fs, -3.5, 3.5, 25.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2); addProjection(wenufinder, "WenuFinder"); VetoedFinalState wmnuinput; wmnuinput.addVetoOnThisFinalState(wenufinder); WFinder wmnufinder(wmnuinput, -3.5, 3.5, 25.0*GeV, MUON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2); addProjection(wmnufinder, "WmnuFinder"); VetoedFinalState jetinput; jetinput .addVetoOnThisFinalState(wenufinder) .addVetoOnThisFinalState(wmnufinder); FastJets jetpro(jetinput, FastJets::ANTIKT, 0.4); addProjection(jetpro, "Jets"); // correlations with jets _h_WW_jet1_deta = bookHistogram1D("WW_jet1_deta", 70, -7.0, 7.0); _h_WW_jet1_dR = bookHistogram1D("WW_jet1_dR", 25, 1.5, 7.0); _h_We_jet1_dR = bookHistogram1D("We_jet1_dR", 25, 0.0, 7.0); // global stuff _h_HT = bookHistogram1D("HT", logBinEdges(100, 100.0, 0.5*sqrtS())); _h_jets_m_12 = bookHistogram1D("jets_m_12", logBinEdges(100, 1.0, 0.25*sqrtS())); MC_JetAnalysis::init(); } /// Do the analysis void analyze(const Event & e) { const double weight = e.weight(); const WFinder& wenufinder = applyProjection(e, "WenuFinder"); if (wenufinder.bosons().size()!=1) { vetoEvent; } const WFinder& wmnufinder = applyProjection(e, "WmnuFinder"); if (wmnufinder.bosons().size()!=1) { vetoEvent; } FourMomentum wenu(wenufinder.bosons()[0].momentum()); FourMomentum wmnu(wmnufinder.bosons()[0].momentum()); FourMomentum ww(wenu+wmnu); // find leptons FourMomentum ep=wenufinder.constituentLeptons()[0].momentum(); FourMomentum enu=wenufinder.constituentNeutrinos()[0].momentum(); FourMomentum mm=wmnufinder.constituentLeptons()[0].momentum(); FourMomentum mnu=wmnufinder.constituentNeutrinos()[0].momentum(); const Jets& jets = applyProjection(e, "Jets").jetsByPt(m_jetptcut); if (jets.size() > 0) { _h_WW_jet1_deta->fill(ww.eta()-jets[0].momentum().eta(), weight); _h_WW_jet1_dR->fill(deltaR(ww, jets[0].momentum()), weight); _h_We_jet1_dR->fill(deltaR(ep, jets[0].momentum()), weight); } double HT=ep.pT()+mm.pT()+FourMomentum(enu+mnu).pT(); foreach (const Jet& jet, jets) { HT+=jet.momentum().pT(); } if (HT>0.0) _h_HT->fill(HT, weight); if (jets.size()>1) { FourMomentum jet1(jets[0].momentum()); FourMomentum jet2(jets[1].momentum()); _h_jets_m_12->fill(FourMomentum(jet1+jet2).mass(), weight); } MC_JetAnalysis::analyze(e); } /// Finalize void finalize() { double norm=crossSection()/sumOfWeights(); scale(_h_WW_jet1_deta, norm); scale(_h_WW_jet1_dR, norm); scale(_h_We_jet1_dR, norm); scale(_h_jets_m_12, norm); scale(_h_HT, norm); MC_JetAnalysis::finalize(); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_WW_jet1_deta; AIDA::IHistogram1D * _h_WW_jet1_dR; AIDA::IHistogram1D * _h_We_jet1_dR; AIDA::IHistogram1D * _h_jets_m_12; AIDA::IHistogram1D * _h_HT; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_WWJETS); } rivet-1.8.3/src/Analyses/MC_IDENTIFIED.cc0000644000175000017500000000612012116077757015724 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// Generic analysis looking at various distributions of final state particles class MC_IDENTIFIED : public Analysis { public: /// Constructor MC_IDENTIFIED() : Analysis("MC_IDENTIFIED") { } public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // Projections const FinalState cnfs(-5.0, 5.0, 500*MeV); addProjection(cnfs, "FS"); addProjection(UnstableFinalState(-5.0, 5.0, 500*MeV), "UFS"); // Histograms // @todo Choose E/pT ranged based on input energies... can't do anything about kin. cuts, though _histStablePIDs = bookHistogram1D("MultsStablePIDs", 3335, -0.5, 3334.5); _histDecayedPIDs = bookHistogram1D("MultsDecayedPIDs", 3335, -0.5, 3334.5); _histAllPIDs = bookHistogram1D("MultsAllPIDs", 3335, -0.5, 3334.5); _histEtaPi = bookHistogram1D("EtaPi", 25, 0, 5); _histEtaK = bookHistogram1D("EtaK", 25, 0, 5); _histEtaLambda = bookHistogram1D("EtaLambda", 25, 0, 5); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // Unphysical (debug) plotting of all PIDs in the event, physical or otherwise foreach (const GenParticle* gp, particles(event.genEvent())) { _histAllPIDs->fill(abs(gp->pdg_id()), weight); } // Charged + neutral final state PIDs const FinalState& cnfs = applyProjection(event, "FS"); foreach (const Particle& p, cnfs.particles()) { _histStablePIDs->fill(abs(p.pdgId()), weight); } // Unstable PIDs and identified particle eta spectra const UnstableFinalState& ufs = applyProjection(event, "UFS"); foreach (const Particle& p, ufs.particles()) { _histDecayedPIDs->fill(p.pdgId(), weight); const double eta_abs = fabs(p.momentum().eta()); const PdgId pid = abs(p.pdgId()); //if (PID::isMeson(pid) && PID::hasStrange()) { if (pid == 211 || pid == 111) _histEtaPi->fill(eta_abs, weight); else if (pid == 321 || pid == 130 || pid == 310) _histEtaK->fill(eta_abs, weight); else if (pid == 3122) _histEtaLambda->fill(eta_abs, weight); } } /// Finalize void finalize() { scale(_histStablePIDs, 1/sumOfWeights()); scale(_histDecayedPIDs, 1/sumOfWeights()); scale(_histAllPIDs, 1/sumOfWeights()); scale(_histEtaPi, 1/sumOfWeights()); scale(_histEtaK, 1/sumOfWeights()); scale(_histEtaLambda, 1/sumOfWeights()); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_histStablePIDs, *_histDecayedPIDs, *_histAllPIDs; AIDA::IHistogram1D *_histEtaPi, *_histEtaK, *_histEtaLambda; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_IDENTIFIED); } rivet-1.8.3/src/Analyses/H1_1995_S3167097.cc0000644000175000017500000001147012116077757015747 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/DISFinalState.hh" #include "Rivet/Projections/CentralEtHCM.hh" namespace Rivet { /// @brief H1 energy flow in DIS /// @todo Check this analysis! /// @author Leif Lonnblad class H1_1995_S3167097 : public Analysis { public: /// Constructor H1_1995_S3167097() : Analysis("H1_1995_S3167097") { } /// @name Analysis methods //@{ void init() { const DISKinematics& diskin = addProjection(DISKinematics(), "Kinematics"); const DISFinalState& fshcm = addProjection(DISFinalState(diskin, DISFinalState::HCM), "FS"); addProjection(CentralEtHCM(fshcm), "Y1HCM"); _hEtFlow = vector(_nbin); _hEtFlowStat = vector(_nbin); _nev = vector(_nbin); /// @todo Automate this sort of thing so that the analysis code is more readable. for (size_t i = 0; i < _nbin; ++i) { string istr(1, char('1' + i)); _hEtFlow[i] = bookHistogram1D(istr, _nb, _xmin, _xmax); _hEtFlowStat[i] = bookHistogram1D(istr, _nb, _xmin, _xmax); } _hAvEt = bookHistogram1D("21tmp", _nbin, 1.0, 10.0); _hAvX = bookHistogram1D("22tmp", _nbin, 1.0, 10.0); _hAvQ2 = bookHistogram1D("23tmp", _nbin, 1.0, 10.0); _hN = bookHistogram1D("24", _nbin, 1.0, 10.0); } /// Calculate the bin number from the DISKinematics projection int _getbin(const DISKinematics& dk) { if ( dk.Q2() > 5.0*GeV2 && dk.Q2() <= 10.0*GeV2 ) { if ( dk.x() > 0.0001 && dk.x() <= 0.0002 ) return 0; else if ( dk.x() > 0.0002 && dk.x() <= 0.0005 && dk.Q2() > 6.0*GeV2 ) return 1; } else if ( dk.Q2() > 10.0*GeV2 && dk.Q2() <= 20.0*GeV2 ){ if ( dk.x() > 0.0002 && dk.x() <= 0.0005 ) return 2; else if ( dk.x() > 0.0005 && dk.x() <= 0.0008 ) return 3; else if ( dk.x() > 0.0008 && dk.x() <= 0.0015 ) return 4; else if ( dk.x() > 0.0015 && dk.x() <= 0.0040 ) return 5; } else if ( dk.Q2() > 20.0*GeV2 && dk.Q2() <= 50.0*GeV2 ){ if ( dk.x() > 0.0005 && dk.x() <= 0.0014 ) return 6; else if ( dk.x() > 0.0014 && dk.x() <= 0.0030 ) return 7; else if ( dk.x() > 0.0030 && dk.x() <= 0.0100 ) return 8; } return -1; } void analyze(const Event& event) { const FinalState& fs = applyProjection(event, "FS"); const DISKinematics& dk = applyProjection(event, "Kinematics"); const CentralEtHCM y1 = applyProjection(event, "Y1HCM"); const int ibin = _getbin(dk); if (ibin < 0) vetoEvent; const double weight = event.weight(); for (size_t i = 0, N = fs.particles().size(); i < N; ++i) { const double rap = fs.particles()[i].momentum().rapidity(); const double et = fs.particles()[i].momentum().Et(); _hEtFlow[ibin]->fill(rap, weight * et/GeV); _hEtFlowStat[ibin]->fill(rap, weight * et/GeV); } _nev[ibin] += weight; _hAvEt->fill(ibin + 1.5, weight * y1.sumEt()/GeV); _hAvX->fill(ibin + 1.5, weight * dk.x()); _hAvQ2->fill(ibin + 1.5, weight * dk.Q2()/GeV2); _hN->fill(ibin + 1.5, weight); } void finalize() { for (size_t ibin = 0; ibin < _nbin; ++ibin) { _hEtFlow[ibin]->scale(1.0/(_nev[ibin]*double(_nb)/(_xmax-_xmin))); _hEtFlowStat[ibin]->scale(1.0/(_nev[ibin]*double(_nb)/(_xmax-_xmin))); } /// @todo Automate this sort of thing so that the analysis code is more readable. AIDA::IDataPointSet* h = 0; h = histogramFactory().divide("/H1_1995_S3167097/21", *_hAvEt, *_hN); h->setTitle(_hAvEt->title()); histogramFactory().destroy(_hAvEt); h = histogramFactory().divide("/H1_1995_S3167097/22", *_hAvX, *_hN); h->setTitle(_hAvX->title()); histogramFactory().destroy(_hAvX); h = histogramFactory().divide("/H1_1995_S3167097/23", *_hAvQ2, *_hN); h->setTitle(_hAvQ2->title()); histogramFactory().destroy(_hAvQ2); } //@} private: /// Some integer constants used. /// @todo Remove statics! static const size_t _nb = 24, _nbin = 9; /// Some double constants used. /// @todo Remove statics! static const double _xmin, _xmax; /// Histograms for the \f$ E_T \f$ flows vector _hEtFlow, _hEtFlowStat; /// Histograms for averages in different kinematical bins. AIDA::IHistogram1D *_hAvEt, *_hAvX, *_hAvQ2, *_hN; /// Helper vector; vector _nev; }; // Init statics const double H1_1995_S3167097::_xmin = -6.0; const double H1_1995_S3167097::_xmax = 6.0; // The hook for the plugin system DECLARE_RIVET_PLUGIN(H1_1995_S3167097); } rivet-1.8.3/src/Analyses/ATLAS_2011_S9002537.cc0000644000175000017500000000652412116077757016314 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/MissingMomentum.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { class ATLAS_2011_S9002537 : public Analysis { public: ATLAS_2011_S9002537() : Analysis("ATLAS_2011_S9002537") { } public: void init() { IdentifiedFinalState Muons(-2.4,2.4,20.*GeV); Muons.acceptIdPair(MUON); addProjection(Muons,"muons"); ChargedFinalState CFS(-2.8,2.8,0.*GeV); addProjection(CFS,"tracks"); MissingMomentum missmom(FinalState(-5.,5.,0.*GeV)); addProjection(missmom,"MissingMomentum"); _h_plus = bookHistogram1D("_h_plus", binEdges(1,1,1)); _h_minus = bookHistogram1D("_h_minus", binEdges(1,1,1)); _h_asym = bookDataPointSet(1,1,1); } void analyze(const Event& event) { const IdentifiedFinalState& muons = applyProjection(event, "muons"); const ChargedFinalState& tracks = applyProjection(event, "tracks"); if (muons.size()<1) vetoEvent; ParticleVector selected_muons; foreach (Particle muon, muons.particles()) { FourMomentum testmom = muon.momentum(); double ptmu(testmom.pT()), ptsum(-ptmu), ratio(0.); foreach (Particle track,tracks.particles()) { FourMomentum trackmom = track.momentum(); if (deltaR(testmom,trackmom)<0.4) { ptsum += trackmom.pT(); ratio = ptsum/ptmu; if (ratio>0.2) break; } } if (ratio<0.2) selected_muons.push_back(muon); } if (selected_muons.size()<1) vetoEvent; const FourMomentum muonmom = selected_muons[0].momentum(); const MissingMomentum& missmom = applyProjection(event, "MissingMomentum"); FourMomentum missvec = -missmom.visibleMomentum(); if (fabs(missvec.Et())<25) vetoEvent; double MTW = sqrt(2.*missvec.pT()*muonmom.pT()*(1.-cos(deltaPhi(missvec.phi(),muonmom.phi())))); if (MTW<40.*GeV) vetoEvent; if (selected_muons[0].pdgId()>0) _h_minus->fill(muonmom.eta(),event.weight()); else _h_plus->fill(muonmom.eta(),event.weight()); } /// Normalise histograms etc., after the run void finalize() { int Nbins = _h_plus->axis().bins(); std::vector asym, asym_err; for (int i=0; ibinHeight(i) - _h_minus->binHeight(i); double denom = _h_plus->binHeight(i) + _h_minus->binHeight(i); double err = _h_plus->binError(i) + _h_minus->binError(i); if (num==0 || denom==0) { asym.push_back(0.); asym_err.push_back(0.); } else { asym.push_back(num/denom); asym_err.push_back(num/denom*((err/num)+(err/denom))); } } _h_asym->setCoordinate(1, asym, asym_err); histogramFactory().destroy(_h_plus); histogramFactory().destroy(_h_minus); } private: AIDA::IHistogram1D *_h_plus, *_h_minus; AIDA::IDataPointSet *_h_asym; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_S9002537); } rivet-1.8.3/src/Analyses/SFM_1984_S1178091.cc0000644000175000017500000000751512116077757016121 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" namespace Rivet { /// @brief SFM charged multiplicities in NSD and inelastic minbias events class SFM_1984_S1178091 : public Analysis { public: /// Constructor SFM_1984_S1178091() : Analysis("SFM_1984_S1178091") { _sumW = 0; _sumWDiff = 0; } /// @name Analysis methods //@{ void init() { // Projections /// @todo Corrected to full phase space? addProjection(ChargedFinalState(), "FS"); // Histograms if (fuzzyEquals(sqrtS()/GeV, 30.4, 1E-1)) { _hist_multiplicity_inel = bookHistogram1D(1, 1, 1); _hist_multiplicity_nsd = bookHistogram1D(2, 1, 1); } else if (fuzzyEquals(sqrtS(), 44.5, 1E-1)) { _hist_multiplicity_inel = bookHistogram1D(1, 1, 2); _hist_multiplicity_nsd = bookHistogram1D(2, 1, 2); } else if (fuzzyEquals(sqrtS(), 52.2, 1E-1)) { _hist_multiplicity_inel = bookHistogram1D(1, 1, 3); _hist_multiplicity_nsd = bookHistogram1D(2, 1, 3); } else if (fuzzyEquals(sqrtS(), 62.2, 1E-1)) { _hist_multiplicity_inel = bookHistogram1D(1, 1, 4); _hist_multiplicity_nsd = bookHistogram1D(2, 1, 4); } } // Analyse each event void analyze(const Event& event) { const double weight = event.weight(); const ChargedFinalState& fs = applyProjection(event, "FS"); const size_t numParticles = fs.particles().size(); /// @todo Any trigger? // Decide whether event is of diffractive type or not // @todo It is not so clear in the paper how this distinction is made. // They seem to require either exactly one particle with Feynman x larger // than 0.8 to call an event diffractive or that there are no tracks // reconstructed in either of the two hemispheres. For the latter // they require in addition also the number of charged particles // to be smaller than 8. int n_left(0), n_right(0), n_large_x(0); foreach (const Particle& p, fs.particles()) { // Calculate the particles' Feynman x const double x_feyn = 2.0 * fabs(p.momentum().pz())/sqrtS(); if (x_feyn > 0.8 ) n_large_x += 1; // Pseudorapidity const double eta = p.momentum().pseudorapidity(); if (eta > 0.0) n_right += 1; else if (eta < 0.0) n_left += 1; } MSG_DEBUG("N_left: " << n_left << ", " << "N_right: " << n_right << ", " << "N_large_x: " << n_large_x); // Not sure about the "=="! // @todo Not sure about the "== 1", the paper says no charged particle // that was reconstructed so the incoming protons must run down the beam // pipe. Since we look a the complete final state here no particle being // reconstructed should be equal to one particle (proton) in each // hemisphere. The "< 8" is also not certain. const bool isDiffractive = (n_large_x == 1) || ((n_left == 1 || n_right == 1) && numParticles < 8 ); // Increment weight counters _sumW += weight; _sumWDiff += weight; // Fill histos of charged multiplicity distributions _hist_multiplicity_inel->fill(numParticles, weight); if (!isDiffractive) _hist_multiplicity_nsd->fill(numParticles, weight); } void finalize() { scale(_hist_multiplicity_inel, 1.0/_sumWDiff); scale(_hist_multiplicity_nsd, 1.0/_sumW ); } //@} private: /// @name Weight counters //@{ double _sumW, _sumWDiff; //@} /// @name Histograms //@{ AIDA::IHistogram1D *_hist_multiplicity_inel; AIDA::IHistogram1D *_hist_multiplicity_nsd; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(SFM_1984_S1178091); } rivet-1.8.3/src/Analyses/CDF_1996_S3349578.cc0000644000175000017500000003377512116077757016116 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief CDF properties of high-mass multi-jet events class CDF_1996_S3349578 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor CDF_1996_S3349578() : Analysis("CDF_1996_S3349578") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { /// Initialise and register projections here const FinalState fs(-4.2, 4.2); addProjection(FastJets(fs, FastJets::CDFJETCLU, 0.7), "Jets"); /// Book histograms here, e.g.: _h_3_mNJ = bookHistogram1D(1, 1, 1); _h_3_X3 = bookHistogram1D(2, 1, 1); _h_3_X4 = bookHistogram1D(3, 1, 1); _h_3_costheta3 = bookHistogram1D(8, 1, 1); _h_3_psi3 = bookHistogram1D(9, 1, 1); _h_3_f3 = bookHistogram1D(14, 1, 1); _h_3_f4 = bookHistogram1D(14, 1, 2); _h_3_f5 = bookHistogram1D(14, 1, 3); _h_4_mNJ = bookHistogram1D(1, 1, 2); _h_4_X3 = bookHistogram1D(4, 1, 1); _h_4_X4 = bookHistogram1D(5, 1, 1); _h_4_costheta3 = bookHistogram1D(10, 1, 1); _h_4_psi3 = bookHistogram1D(11, 1, 1); _h_4_f3 = bookHistogram1D(15, 1, 1); _h_4_f4 = bookHistogram1D(15, 1, 2); _h_4_f5 = bookHistogram1D(15, 1, 3); _h_4_XA = bookHistogram1D(17, 1, 1); _h_4_psiAB = bookHistogram1D(19, 1, 1); _h_4_fA = bookHistogram1D(21, 1, 1); _h_4_fB = bookHistogram1D(21, 1, 2); _h_5_mNJ = bookHistogram1D(1, 1, 3); _h_5_X3 = bookHistogram1D(6, 1, 1); _h_5_X4 = bookHistogram1D(7, 1, 1); _h_5_costheta3 = bookHistogram1D(12, 1, 1); _h_5_psi3 = bookHistogram1D(13, 1, 1); _h_5_f3 = bookHistogram1D(16, 1, 1); _h_5_f4 = bookHistogram1D(16, 1, 2); _h_5_f5 = bookHistogram1D(16, 1, 3); _h_5_XA = bookHistogram1D(18, 1, 1); _h_5_XC = bookHistogram1D(18, 1, 2); _h_5_psiAB = bookHistogram1D(20, 1, 1); _h_5_psiCD = bookHistogram1D(20, 1, 2); _h_5_fA = bookHistogram1D(22, 1, 1); _h_5_fB = bookHistogram1D(23, 1, 1); _h_5_fC = bookHistogram1D(24, 1, 1); _h_5_fD = bookHistogram1D(25, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); Jets jets; FourMomentum jetsystem(0.0, 0.0, 0.0, 0.0); foreach (const Jet& jet, applyProjection(event, "Jets").jetsByEt()) { double Et = jet.momentum().Et(); if (Et > 20.0*GeV) { bool separated=true; foreach (const Jet& ref, jets) { if (deltaR(jet.momentum(), ref.momentum())<0.9) { separated=false; break; } } if (!separated) continue; jets.push_back(jet); jetsystem += jet.momentum(); } if (jets.size()>=5) break; } /// @todo include gaussian jet energy resolution smearing? if (jets.size() > 4) { _fiveJetAnalysis(jets, weight); jets.resize(4); } if (jets.size() > 3) { _fourJetAnalysis(jets, weight); jets.resize(3); } if (jets.size() > 2) _threeJetAnalysis(jets, weight); } void _threeJetAnalysis(const Jets& jets, const double& weight) { MSG_DEBUG("3 jet analysis"); double sumEt=0.0; FourMomentum jetsystem(0.0, 0.0, 0.0, 0.0); foreach (const Jet& jet, jets) { sumEt+=jet.momentum().Et(); jetsystem+=jet.momentum(); } if (sumEt < 420.0*GeV) return; const double m3J = _safeMass(jetsystem); if (m3J<600*GeV) { return; } LorentzTransform cms_boost(-jetsystem.boostVector()); vector jets3; foreach (Jet jet, jets) { jets3.push_back(cms_boost.transform(jet.momentum())); } std::sort(jets3.begin(), jets3.end(), FourMomentum::byEDescending()); FourMomentum p3(jets3[0]); FourMomentum p4(jets3[1]); FourMomentum p5(jets3[2]); FourMomentum pAV = cms_boost.transform(_avg_beam_in_lab(m3J, jetsystem.rapidity())); double costheta3=pAV.vector3().unit().dot(p3.vector3().unit()); if (fabs(costheta3)>0.6) { return; } double X3 = 2.0*p3.E()/m3J; if (X3>0.9) { return; } const double X4 = 2.0*p4.E()/m3J; const double psi3 = _psi(p3, pAV, p4, p5); const double f3 = _safeMass(p3)/m3J; const double f4 = _safeMass(p4)/m3J; const double f5 = _safeMass(p5)/m3J; _h_3_mNJ->fill(m3J, weight); _h_3_X3->fill(X3, weight); _h_3_X4->fill(X4, weight); _h_3_costheta3->fill(costheta3, weight); _h_3_psi3->fill(psi3, weight); _h_3_f3->fill(f3, weight); _h_3_f4->fill(f4, weight); _h_3_f5->fill(f5, weight); } void _fourJetAnalysis(const Jets& jets, const double& weight) { MSG_DEBUG("4 jet analysis"); double sumEt=0.0; FourMomentum jetsystem(0.0, 0.0, 0.0, 0.0); foreach (const Jet& jet, jets) { sumEt+=jet.momentum().Et(); jetsystem+=jet.momentum(); } if (sumEt < 420.0*GeV) return; const double m4J = _safeMass(jetsystem); if (m4J < 650*GeV) return; LorentzTransform cms_boost(-jetsystem.boostVector()); vector jets4; foreach (Jet jet, jets) { jets4.push_back(cms_boost.transform(jet.momentum())); } std::sort(jets4.begin(), jets4.end(), FourMomentum::byEDescending()); FourMomentum pA, pB; vector jets3(_reduce(jets4, pA, pB)); std::sort(jets3.begin(), jets3.end(), FourMomentum::byEDescending()); FourMomentum p3(jets3[0]); FourMomentum p4(jets3[1]); FourMomentum p5(jets3[2]); FourMomentum pAV = cms_boost.transform(_avg_beam_in_lab(m4J, jetsystem.rapidity())); double costheta3=pAV.vector3().unit().dot(p3.vector3().unit()); if (fabs(costheta3)>0.8) { return; } const double X3 = 2.0*p3.E()/m4J; if (X3>0.9) { return; } // fill histograms const double X4 = 2.0*p4.E()/m4J; const double psi3 = _psi(p3, pAV, p4, p5); const double f3 = _safeMass(p3)/m4J; const double f4 = _safeMass(p4)/m4J; const double f5 = _safeMass(p5)/m4J; const double fA = _safeMass(pA)/m4J; const double fB = _safeMass(pB)/m4J; const double XA = pA.E()/(pA.E()+pB.E()); const double psiAB = _psi(pA, pB, pA+pB, pAV); _h_4_mNJ->fill(m4J, weight); _h_4_X3->fill(X3, weight); _h_4_X4->fill(X4, weight); _h_4_costheta3->fill(costheta3, weight); _h_4_psi3->fill(psi3, weight); _h_4_f3->fill(f3, weight); _h_4_f4->fill(f4, weight); _h_4_f5->fill(f5, weight); _h_4_XA->fill(XA, weight); _h_4_psiAB->fill(psiAB, weight); _h_4_fA->fill(fA, weight); _h_4_fB->fill(fB, weight); } void _fiveJetAnalysis(const Jets& jets, const double& weight) { MSG_DEBUG("5 jet analysis"); double sumEt=0.0; FourMomentum jetsystem(0.0, 0.0, 0.0, 0.0); foreach (const Jet& jet, jets) { sumEt+=jet.momentum().Et(); jetsystem+=jet.momentum(); } if (sumEt < 420.0*GeV) return; const double m5J = _safeMass(jetsystem); if (m5J < 750*GeV) return; LorentzTransform cms_boost(-jetsystem.boostVector()); vector jets5; foreach (Jet jet, jets) { jets5.push_back(cms_boost.transform(jet.momentum())); } std::sort(jets5.begin(), jets5.end(), FourMomentum::byEDescending()); FourMomentum pC, pD; vector jets4(_reduce(jets5, pC, pD)); std::sort(jets4.begin(), jets4.end(), FourMomentum::byEDescending()); FourMomentum pA, pB; vector jets3(_reduce(jets4, pA, pB)); std::sort(jets3.begin(), jets3.end(), FourMomentum::byEDescending()); FourMomentum p3(jets3[0]); FourMomentum p4(jets3[1]); FourMomentum p5(jets3[2]); // fill histograms FourMomentum pAV = cms_boost.transform(_avg_beam_in_lab(m5J, jetsystem.rapidity())); const double costheta3 = pAV.vector3().unit().dot(p3.vector3().unit()); const double X3 = 2.0*p3.E()/m5J; const double X4 = 2.0*p4.E()/m5J; const double psi3 = _psi(p3, pAV, p4, p5); const double f3 = _safeMass(p3)/m5J; const double f4 = _safeMass(p4)/m5J; const double f5 = _safeMass(p5)/m5J; const double fA = _safeMass(pA)/m5J; const double fB = _safeMass(pB)/m5J; const double XA = pA.E()/(pA.E()+pB.E()); const double psiAB = _psi(pA, pB, pA+pB, pAV); const double fC = _safeMass(pC)/m5J; const double fD = _safeMass(pD)/m5J; const double XC = pC.E()/(pC.E()+pD.E()); const double psiCD = _psi(pC, pD, pC+pD, pAV); _h_5_mNJ->fill(m5J, weight); _h_5_X3->fill(X3, weight); _h_5_X4->fill(X4, weight); _h_5_costheta3->fill(costheta3, weight); _h_5_psi3->fill(psi3, weight); _h_5_f3->fill(f3, weight); _h_5_f4->fill(f4, weight); _h_5_f5->fill(f5, weight); _h_5_XA->fill(XA, weight); _h_5_psiAB->fill(psiAB, weight); _h_5_fA->fill(fA, weight); _h_5_fB->fill(fB, weight); _h_5_XC->fill(XC, weight); _h_5_psiCD->fill(psiCD, weight); _h_5_fC->fill(fC, weight); _h_5_fD->fill(fD, weight); } /// Normalise histograms etc., after the run void finalize() { /// Normalise, scale and otherwise manipulate histograms here normalize(_h_3_mNJ, 1.0); normalize(_h_3_X3, 1.0); normalize(_h_3_X4, 1.0); normalize(_h_3_costheta3, 1.0); normalize(_h_3_psi3, 1.0); normalize(_h_3_f3, 1.0); normalize(_h_3_f4, 1.0); normalize(_h_3_f5, 1.0); normalize(_h_4_mNJ, 1.0); normalize(_h_4_X3, 1.0); normalize(_h_4_X4, 1.0); normalize(_h_4_costheta3, 1.0); normalize(_h_4_psi3, 1.0); normalize(_h_4_f3, 1.0); normalize(_h_4_f4, 1.0); normalize(_h_4_f5, 1.0); normalize(_h_4_XA, 1.0); normalize(_h_4_psiAB, 1.0); normalize(_h_4_fA, 1.0); normalize(_h_4_fB, 1.0); normalize(_h_5_mNJ, 1.0); normalize(_h_5_X3, 1.0); normalize(_h_5_X4, 1.0); normalize(_h_5_costheta3, 1.0); normalize(_h_5_psi3, 1.0); normalize(_h_5_f3, 1.0); normalize(_h_5_f4, 1.0); normalize(_h_5_f5, 1.0); normalize(_h_5_XA, 1.0); normalize(_h_5_XC, 1.0); normalize(_h_5_psiAB, 1.0); normalize(_h_5_psiCD, 1.0); normalize(_h_5_fA, 1.0); normalize(_h_5_fB, 1.0); normalize(_h_5_fC, 1.0); normalize(_h_5_fD, 1.0); } //@} private: vector _reduce(const vector& jets, FourMomentum& combined1, FourMomentum& combined2) { double minMass2 = 1e9; size_t idx1(jets.size()), idx2(jets.size()); for (size_t i=0; i newjets; for (size_t i=0; i1e-3) { FourMomentum boostvec(cosh(y), 0.0, 0.0, sinh(y)); LorentzTransform cms_boost(-boostvec.boostVector()); cms_boost = cms_boost.inverse(); beam1=cms_boost.transform(beam1); beam2=cms_boost.transform(beam2); } if (beam1.E()>beam2.E()) { return beam1-beam2; } else { return beam2-beam1; } } double _psi(const FourMomentum& p1, const FourMomentum& p2, const FourMomentum& p3, const FourMomentum& p4) { Vector3 p1xp2 = p1.vector3().cross(p2.vector3()); Vector3 p3xp4 = p3.vector3().cross(p4.vector3()); return mapAngle0ToPi(acos(p1xp2.unit().dot(p3xp4.unit()))); } double _safeMass(const FourMomentum& p) { double mass2=p.mass2(); if (mass2>0.0) return sqrt(mass2); else if (mass2<-1.0e-5) { MSG_WARNING("m2 = " << m2 << ". Assuming m2=0."); return 0.0; } else return 0.0; } private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_3_mNJ; AIDA::IHistogram1D *_h_3_X3; AIDA::IHistogram1D *_h_3_X4; AIDA::IHistogram1D *_h_3_costheta3; AIDA::IHistogram1D *_h_3_psi3; AIDA::IHistogram1D *_h_3_f3; AIDA::IHistogram1D *_h_3_f4; AIDA::IHistogram1D *_h_3_f5; AIDA::IHistogram1D *_h_4_mNJ; AIDA::IHistogram1D *_h_4_X3; AIDA::IHistogram1D *_h_4_X4; AIDA::IHistogram1D *_h_4_costheta3; AIDA::IHistogram1D *_h_4_psi3; AIDA::IHistogram1D *_h_4_f3; AIDA::IHistogram1D *_h_4_f4; AIDA::IHistogram1D *_h_4_f5; AIDA::IHistogram1D *_h_4_XA; AIDA::IHistogram1D *_h_4_psiAB; AIDA::IHistogram1D *_h_4_fA; AIDA::IHistogram1D *_h_4_fB; AIDA::IHistogram1D *_h_5_mNJ; AIDA::IHistogram1D *_h_5_X3; AIDA::IHistogram1D *_h_5_X4; AIDA::IHistogram1D *_h_5_costheta3; AIDA::IHistogram1D *_h_5_psi3; AIDA::IHistogram1D *_h_5_f3; AIDA::IHistogram1D *_h_5_f4; AIDA::IHistogram1D *_h_5_f5; AIDA::IHistogram1D *_h_5_XA; AIDA::IHistogram1D *_h_5_XC; AIDA::IHistogram1D *_h_5_psiAB; AIDA::IHistogram1D *_h_5_psiCD; AIDA::IHistogram1D *_h_5_fA; AIDA::IHistogram1D *_h_5_fB; AIDA::IHistogram1D *_h_5_fC; AIDA::IHistogram1D *_h_5_fD; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_1996_S3349578); } rivet-1.8.3/src/Analyses/OPAL_1993_S2692198.cc0000644000175000017500000001635212116077757016240 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "fastjet/JadePlugin.hh" namespace Rivet { /// @brief OPAL photon production /// @author Peter Richardson class OPAL_1993_S2692198 : public Analysis { public: /// Constructor OPAL_1993_S2692198() : Analysis("OPAL_1993_S2692198") { } /// @name Analysis methods //@{ void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles // const ChargedFinalState& cfs = applyProjection(e, "CFS"); // const size_t numParticles = cfs.particles().size(); // if (numParticles < 4) { // MSG_DEBUG("Failed ncharged cut"); // vetoEvent; // } // MSG_DEBUG("Passed ncharged cut"); // Get event weight for histo filling const double weight = e.weight(); // extract the photons ParticleVector photons; ParticleVector nonPhotons; FourMomentum ptotal; const FinalState& fs = applyProjection(e, "FS"); foreach (const Particle& p, fs.particles()) { ptotal+= p.momentum(); if(p.pdgId()==PHOTON) { photons.push_back(p); } else { nonPhotons.push_back(p); } } // no photon return but still count for normalisation if(photons.empty()) return; // definition of the Durham algorithm fastjet::JetDefinition durham_def(fastjet::ee_kt_algorithm,fastjet::E_scheme, fastjet::Best); // definition of the JADE algorithm fastjet::JadePlugin jade; fastjet::JetDefinition jade_def = fastjet::JetDefinition(&jade); // now for the weird jet algorithm double evis = ptotal.mass(); vector input_particles; // pseudo jets from the non photons foreach (const Particle& p, nonPhotons) { input_particles.push_back(fastjet::PseudoJet(p.momentum().px(), p.momentum().py(), p.momentum().pz(), p.momentum().E())); } // pseudo jets from all bar the first photon for(unsigned int ix=1;ixsize(); ++j) { bool accept(true); double ycut = _nPhotonDurham->point(j)->coordinate(0)->value(); double dcut = sqr(evis)*ycut; vector exclusive_jets = sorted_by_E(clust_seq.exclusive_jets(dcut)); for(unsigned int iy=0;iypoint(j)->coordinate(1)-> setValue(_nPhotonDurham->point(j)->coordinate(1)->value()+weight); int njet = min(4,int(exclusive_jets.size())) - 1; if(j<_nPhotonJetDurham[njet]->size()) { _nPhotonJetDurham[njet]->point(j)->coordinate(1)-> setValue(_nPhotonJetDurham[njet]->point(j)->coordinate(1)->value()+weight); } } // run the jet clustering JADE fastjet::ClusterSequence clust_seq2(input_particles, jade_def); for (int j = 0; j < _nPhotonJade->size(); ++j) { bool accept(true); double ycut = _nPhotonJade->point(j)->coordinate(0)->value(); double dcut = sqr(evis)*ycut; vector exclusive_jets = sorted_by_E(clust_seq2.exclusive_jets(dcut)); for(unsigned int iy=0;iypoint(j)->coordinate(1)-> setValue(_nPhotonJade->point(j)->coordinate(1)->value()+weight); int njet = min(4,int(exclusive_jets.size())) - 1; if(j<_nPhotonJetJade[njet]->size()) { _nPhotonJetJade[njet]->point(j)->coordinate(1)-> setValue(_nPhotonJetJade[njet]->point(j)->coordinate(1)->value()+weight); } } // add this photon back in for the next interation of the loop if(ix+1!=photons.size()) input_particles[nonPhotons.size()+ix] = fastjet::PseudoJet(photons[ix].momentum().px(),photons[ix].momentum().py(), photons[ix].momentum().pz(),photons[ix].momentum().E()); } } void init() { // Projections addProjection(FinalState(), "FS"); // addProjection(ChargedFinalState(), "CFS"); // Book data sets _nPhotonJade = bookDataPointSet(1, 1, 1); _nPhotonDurham = bookDataPointSet(2, 1, 1); for(unsigned int ix=0;ix<4;++ix) { _nPhotonJetJade [ix] = bookDataPointSet(3 , 1, 1+ix); _nPhotonJetDurham[ix] = bookDataPointSet(4 , 1, 1+ix); } } /// Finalize void finalize() { const double fact = 1000./sumOfWeights(); normaliseDataPointSet(_nPhotonJade ,fact); normaliseDataPointSet(_nPhotonDurham ,fact); for(unsigned int ix=0;ix<4;++ix) { normaliseDataPointSet(_nPhotonJetJade [ix],fact); normaliseDataPointSet(_nPhotonJetDurham[ix],fact); } } // normalise a data point set, default function does both x and y AHHH void normaliseDataPointSet(AIDA::IDataPointSet * points, const double & fact) { for (int i = 0; i < points->size(); ++i) { points->point(i)->coordinate(1)-> setValue(points->point(i)->coordinate(1)->value()*fact); } } //@} private: AIDA::IDataPointSet *_nPhotonJade; AIDA::IDataPointSet *_nPhotonDurham; AIDA::IDataPointSet *_nPhotonJetJade [4]; AIDA::IDataPointSet *_nPhotonJetDurham[4]; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(OPAL_1993_S2692198); } rivet-1.8.3/src/Analyses/OPAL_1998_S3749908.cc0000644000175000017500000001136512116077757016247 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief OPAL photon/light meson paper /// @author Peter Richardson class OPAL_1998_S3749908 : public Analysis { public: /// Constructor OPAL_1998_S3749908() : Analysis("OPAL_1998_S3749908") {} /// @name Analysis methods //@{ void init() { addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "FS"); addProjection(UnstableFinalState(), "UFS"); _histXePhoton = bookHistogram1D( 2, 1, 1); _histXiPhoton = bookHistogram1D( 3, 1, 1); _histXePi = bookHistogram1D( 4, 1, 1); _histXiPi = bookHistogram1D( 5, 1, 1); _histXeEta = bookHistogram1D( 6, 1, 1); _histXiEta = bookHistogram1D( 7, 1, 1); _histXeRho = bookHistogram1D( 8, 1, 1); _histXiRho = bookHistogram1D( 9, 1, 1); _histXeOmega = bookHistogram1D(10, 1, 1); _histXiOmega = bookHistogram1D(11, 1, 1); _histXeEtaPrime = bookHistogram1D(12, 1, 1); _histXiEtaPrime = bookHistogram1D(13, 1, 1); _histXeA0 = bookHistogram1D(14, 1, 1); _histXiA0 = bookHistogram1D(15, 1, 1); } void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed leptonic event cut"); vetoEvent; } MSG_DEBUG("Passed leptonic event cut"); // Get event weight for histo filling const double weight = e.weight(); // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); // Final state of unstable particles to get particle spectra const UnstableFinalState& ufs = applyProjection(e, "UFS"); foreach (const Particle& p, ufs.particles()) { const int id = abs(p.pdgId()); double xi = -log(p.momentum().vector3().mod()/meanBeamMom); double xE = p.momentum().t()/meanBeamMom; switch (id) { case 22: _histXePhoton->fill(xE, weight); _histXiPhoton->fill(xi, weight); break; case 111: _histXePi->fill(xE, weight); _histXiPi->fill(xi, weight); break; case 211: _histXeEta->fill(xE, weight); _histXiEta->fill(xi, weight); break; case 213: _histXeRho->fill(xE, weight); _histXiRho->fill(xi, weight); break; case 223: _histXeOmega->fill(xE, weight); _histXiOmega->fill(xi, weight); break; case 331: _histXeEtaPrime->fill(xE, weight); _histXiEtaPrime->fill(xi, weight); break; case 9000111: _histXeA0->fill(xE, weight); _histXiA0->fill(xi, weight); break; } } } /// Finalize void finalize() { scale(_histXePhoton , 1./sumOfWeights()); scale(_histXiPhoton , 1./sumOfWeights()); scale(_histXePi , 1./sumOfWeights()); scale(_histXiPi , 1./sumOfWeights()); scale(_histXeEta , 1./sumOfWeights()); scale(_histXiEta , 1./sumOfWeights()); scale(_histXeRho , 1./sumOfWeights()); scale(_histXiRho , 1./sumOfWeights()); scale(_histXeOmega , 1./sumOfWeights()); scale(_histXiOmega , 1./sumOfWeights()); scale(_histXeEtaPrime, 1./sumOfWeights()); scale(_histXiEtaPrime, 1./sumOfWeights()); scale(_histXeA0 , 1./sumOfWeights()); scale(_histXiA0 , 1./sumOfWeights()); } //@} private: AIDA::IHistogram1D *_histXePhoton ; AIDA::IHistogram1D *_histXiPhoton ; AIDA::IHistogram1D *_histXePi ; AIDA::IHistogram1D *_histXiPi ; AIDA::IHistogram1D *_histXeEta ; AIDA::IHistogram1D *_histXiEta ; AIDA::IHistogram1D *_histXeRho ; AIDA::IHistogram1D *_histXiRho ; AIDA::IHistogram1D *_histXeOmega ; AIDA::IHistogram1D *_histXiOmega ; AIDA::IHistogram1D *_histXeEtaPrime; AIDA::IHistogram1D *_histXiEtaPrime; AIDA::IHistogram1D *_histXeA0 ; AIDA::IHistogram1D *_histXiA0 ; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(OPAL_1998_S3749908); } rivet-1.8.3/src/Analyses/ATLAS_2011_I945498.cc0000644000175000017500000002442012116077757016232 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Particle.fhh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" #include "Rivet/Projections/ClusteredPhotons.hh" namespace Rivet { class ATLAS_2011_I945498 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2011_I945498() : Analysis("ATLAS_2011_I945498") { /// @todo Set whether your finalize method needs the generator cross section setNeedsCrossSection(true); for (size_t chn = 0; chn < 3; ++chn) { weights_nj0[chn] = 0.0; weights_nj1[chn] = 0.0; weights_nj2[chn] = 0.0; weights_nj3[chn] = 0.0; weights_nj4[chn] = 0.0; } } //@} public: /// Book histograms and initialise projections before the run void init() { // Set up projections ZFinder zfinder_mu(-2.4, 2.4, 20, MUON, 66.0*GeV, 116.0*GeV, 0.1, true, false); addProjection(zfinder_mu, "ZFinder_mu"); std::vector > eta_e; eta_e.push_back(make_pair(-2.47,-1.52)); eta_e.push_back(make_pair(-1.37,1.37)); eta_e.push_back(make_pair(1.52,2.47)); ZFinder zfinder_el(eta_e, 20, ELECTRON, 66.0*GeV, 116.0*GeV, 0.1, true, false); addProjection(zfinder_el, "ZFinder_el"); // Define veto FS in order to prevent Z-decay products entering the jet algorithm VetoedFinalState remfs; remfs.addVetoOnThisFinalState(zfinder_el); remfs.addVetoOnThisFinalState(zfinder_mu); FastJets jets(remfs, FastJets::ANTIKT, 0.4); jets.useInvisibles(); addProjection(jets, "jets"); // 0=el, 1=mu, 2=comb for (size_t chn = 0; chn < 3; ++chn) { _h_njet_incl[chn] = bookHistogram1D(1, 1, chn+1); _h_njet_ratio[chn] = bookDataPointSet(2, 1, chn+1); _h_ptjet[chn] = bookHistogram1D(3, 1, chn+1); _h_ptlead[chn] = bookHistogram1D(4, 1, chn+1); _h_ptseclead[chn] = bookHistogram1D(5, 1, chn+1); _h_yjet[chn] = bookHistogram1D(6, 1, chn+1); _h_ylead[chn] = bookHistogram1D(7, 1, chn+1); _h_yseclead[chn] = bookHistogram1D(8, 1, chn+1); _h_mass[chn] = bookHistogram1D(9, 1, chn+1); _h_deltay[chn] = bookHistogram1D(10, 1, chn+1); _h_deltaphi[chn] = bookHistogram1D(11, 1, chn+1); _h_deltaR[chn] = bookHistogram1D(12, 1, chn+1); } } // Jet selection criteria universal for electron and muon channel Jets selectJets(const ZFinder* zf, const Event& event) { FourMomentum l1=zf->constituents()[0].momentum(); FourMomentum l2=zf->constituents()[1].momentum(); Jets jets; foreach (const Jet& jet, applyProjection(event, "jets").jetsByPt(30.0*GeV)) { FourMomentum jmom = jet.momentum(); if (fabs(jmom.rapidity()) < 4.4 && deltaR(l1, jmom) > 0.5 && deltaR(l2, jmom) > 0.5) { jets.push_back(jet); } } return jets; } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); vector zfs; zfs.push_back(& (applyProjection(event, "ZFinder_el"))); zfs.push_back(& (applyProjection(event, "ZFinder_mu"))); // Require exactly one electronic or muonic Z-decay in the event if (!( (zfs[0]->bosons().size()==1 && zfs[1]->bosons().size()!=1) || (zfs[1]->bosons().size()==1 && zfs[0]->bosons().size()!=1) )) vetoEvent; int chn = (zfs[0]->bosons().size()==1 ? 0:1); Jets jets=selectJets(zfs[chn], event); // Some silly weight counters for the njet-ratio histo // --- not sure about the njet=0 case, the Figure ca[ption says // that selected events require at least one jet with 20 GeV if (jets.size() == 0) { weights_nj0[chn] += 1.0; } else if (jets.size() == 1) { weights_nj0[chn] += 1.0; weights_nj1[chn] += 1.0; } else if (jets.size() == 2) { weights_nj0[chn] += 1.0; weights_nj1[chn] += 1.0; weights_nj2[chn] += 1.0; } else if (jets.size() == 3) { weights_nj0[chn] += 1.0; weights_nj1[chn] += 1.0; weights_nj2[chn] += 1.0; weights_nj3[chn] += 1.0; } else if (jets.size() >= 4) { weights_nj0[chn] += 1.0; weights_nj1[chn] += 1.0; weights_nj2[chn] += 1.0; weights_nj3[chn] += 1.0; weights_nj4[chn] += 1.0; } if (jets.size() <1) vetoEvent; _h_njet_incl[chn] ->fill(jets.size(), weight); _h_njet_incl[2] ->fill(jets.size(), weight); // Loop over selected jets, fill inclusive jet distributions for (unsigned int ijet=0; ijetfill(jets[ijet].momentum().pT()/GeV, weight); _h_ptjet[2] ->fill(jets[ijet].momentum().pT()/GeV, weight); _h_yjet[chn] ->fill(fabs(jets[ijet].momentum().rapidity()), weight); _h_yjet[2] ->fill(fabs(jets[ijet].momentum().rapidity()), weight); } // The leading jet histos if (jets.size()>=1) { double ptlead = jets[0].momentum().pT()/GeV; double yabslead = fabs(jets[0].momentum().rapidity()); _h_ptlead[chn] ->fill(ptlead, weight); _h_ptlead[2] ->fill(ptlead, weight); _h_ylead[chn] ->fill(yabslead, weight); _h_ylead[2] ->fill(yabslead, weight); } if (jets.size()>=2) { // The second to leading jet histos double pt2ndlead = jets[1].momentum().pT()/GeV; double yabs2ndlead = fabs(jets[1].momentum().rapidity()); _h_ptseclead[chn] ->fill(pt2ndlead, weight); _h_ptseclead[2] ->fill(pt2ndlead, weight); _h_yseclead[chn] ->fill(yabs2ndlead, weight); _h_yseclead[2] ->fill(yabs2ndlead, weight); // Dijet histos double deltaphi = fabs(deltaPhi(jets[1], jets[0])); double deltarap = fabs(jets[0].momentum().rapidity() - jets[1].momentum().rapidity()) ; double deltar = fabs(deltaR(jets[0], jets[1], RAPIDITY)); double mass = (jets[0].momentum() + jets[1].momentum()).mass(); _h_mass[chn] ->fill(mass, weight); _h_mass[2] ->fill(mass, weight); _h_deltay[chn] ->fill(deltarap, weight); _h_deltay[2] ->fill(deltarap, weight); _h_deltaphi[chn] ->fill(deltaphi, weight); _h_deltaphi[2] ->fill(deltaphi, weight); _h_deltaR[chn] ->fill(deltar, weight); _h_deltaR[2] ->fill(deltar, weight); } } /// Normalise histograms etc., after the run std::vector ratio(double a, double b) { double ratio=0.0; double ratio_err=0.0; std::vector temp; cout << "a: " << a << " b: " << b << endl; if (b>0. && a>0.) { ratio = a/b; ratio_err = sqrt(a/pow(b,2) + pow(a,2)*b/pow(b,4)); } temp.push_back(ratio); temp.push_back(ratio_err); return temp; } void finalize() { // Fill RATIO histograms (DataPointSets) vector yvals_ratio[3]; vector yerrs_ratio[3]; for (size_t chn = 0; chn < 2; ++chn) { yvals_ratio[chn].push_back(ratio(weights_nj1[chn], weights_nj0[chn])[0]); yvals_ratio[chn].push_back(ratio(weights_nj2[chn], weights_nj1[chn])[0]); yvals_ratio[chn].push_back(ratio(weights_nj3[chn], weights_nj2[chn])[0]); yvals_ratio[chn].push_back(ratio(weights_nj4[chn], weights_nj3[chn])[0]); // Errors yerrs_ratio[chn].push_back(ratio(weights_nj1[chn], weights_nj0[chn])[1]); yerrs_ratio[chn].push_back(ratio(weights_nj2[chn], weights_nj1[chn])[1]); yerrs_ratio[chn].push_back(ratio(weights_nj3[chn], weights_nj2[chn])[1]); yerrs_ratio[chn].push_back(ratio(weights_nj4[chn], weights_nj3[chn])[1]); // Actually fill histo _h_njet_ratio[chn] ->setCoordinate(1, yvals_ratio[chn], yerrs_ratio[chn]); // Combined histos yvals_ratio[2].push_back(ratio(weights_nj1[chn], weights_nj0[chn])[0]); yvals_ratio[2].push_back(ratio(weights_nj2[chn], weights_nj1[chn])[0]); yvals_ratio[2].push_back(ratio(weights_nj3[chn], weights_nj2[chn])[0]); yvals_ratio[2].push_back(ratio(weights_nj4[chn], weights_nj3[chn])[0]); // Errors yerrs_ratio[2].push_back(ratio(weights_nj1[chn], weights_nj0[chn])[1]); yerrs_ratio[2].push_back(ratio(weights_nj2[chn], weights_nj1[chn])[1]); yerrs_ratio[2].push_back(ratio(weights_nj3[chn], weights_nj2[chn])[1]); yerrs_ratio[2].push_back(ratio(weights_nj4[chn], weights_nj3[chn])[1]); } _h_njet_ratio[2] ->setCoordinate(1, yvals_ratio[2], yerrs_ratio[2]); const double xs = crossSectionPerEvent()/picobarn; for (size_t chn = 0; chn < 3; ++chn) { scale(_h_njet_incl[chn], xs); scale(_h_ptjet[chn] , xs); scale(_h_ptlead[chn] , xs); scale(_h_ptseclead[chn], xs); scale(_h_yjet[chn] , xs); scale(_h_ylead[chn] , xs); scale(_h_yseclead[chn] , xs); scale(_h_deltaphi[chn] , xs); scale(_h_deltay[chn] , xs); scale(_h_deltaR[chn] , xs); scale(_h_mass[chn] , xs); } } //@} private: double weights_nj0[3]; double weights_nj1[3]; double weights_nj2[3]; double weights_nj3[3]; double weights_nj4[3]; // AIDA::IDataPointSet *_h_njet_ratio[3]; AIDA::IHistogram1D *_h_njet_incl[3]; AIDA::IHistogram1D *_h_ptjet[3]; AIDA::IHistogram1D *_h_ptlead[3]; AIDA::IHistogram1D *_h_ptseclead[3]; AIDA::IHistogram1D *_h_yjet[3]; AIDA::IHistogram1D *_h_ylead[3]; AIDA::IHistogram1D *_h_yseclead[3]; AIDA::IHistogram1D *_h_deltaphi[3]; AIDA::IHistogram1D *_h_deltay[3]; AIDA::IHistogram1D *_h_deltaR[3]; AIDA::IHistogram1D *_h_mass[3]; }; // This global object acts as a hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_I945498); } rivet-1.8.3/src/Analyses/STAR_2008_S7869363.cc0000644000175000017500000001152112116077757016240 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/LossyFinalState.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { class STARRandomFilter { public: STARRandomFilter() { } // Return true to throw away a particle bool operator()(const Particle& p) { /// @todo Use a better RNG? size_t idx = int(floor(p.momentum().pT()/MeV/50)); if (idx > 11) idx = 11; return (rand()/static_cast(RAND_MAX) > _trkeff[idx]); } int compare(const STARRandomFilter& other) const { return true; } private: const static double _trkeff[12]; }; // Here we have the track reconstruction efficiencies for tracks with pT from 0 to 600 MeV // in steps of 50 MeV. The efficiency is assumed to be 0.88 for pT >= 600 MeV const double STARRandomFilter::_trkeff[12] = {0,0,0.38,0.72,0.78,0.81,0.82,0.84,0.85,0.86,0.87,0.88}; class STAR_2008_S7869363 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor STAR_2008_S7869363() : Analysis("STAR_2008_S7869363"), nCutsPassed(0), nPi(0), nPiPlus(0), nKaon(0), nKaonPlus(0), nProton(0), nAntiProton(0) { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { const ChargedFinalState cfs(-0.5, 0.5, 0.2*GeV); const LossyFinalState lfs(cfs, STARRandomFilter()); addProjection(lfs, "FS"); _h_dNch = bookHistogram1D(1, 1, 1); _h_dpT_Pi = bookHistogram1D(2, 1, 1); _h_dpT_Piplus = bookHistogram1D(2, 1, 2); _h_dpT_Kaon = bookHistogram1D(2, 1, 3); _h_dpT_Kaonplus = bookHistogram1D(2, 1, 4); _h_dpT_AntiProton = bookHistogram1D(2, 1, 5); _h_dpT_Proton = bookHistogram1D(2, 1, 6); } /// Perform the per-event analysis void analyze(const Event& event) { const FinalState& charged = applyProjection(event, "FS"); // Vertex reconstruction efficiencies as a function of charged multiplicity. // For events with more than 23 reconstructed tracks the efficiency is 100%. double vtxeffs[24] = { 0.000000,0.512667,0.739365,0.847131,0.906946,0.940922,0.959328,0.96997, 0.975838,0.984432,0.988311,0.990327,0.990758,0.995767,0.99412,0.992271, 0.996631,0.994802,0.99635,0.997384,0.998986,0.996441,0.994513,1.000000 }; double vtxeff = 1.0; if (charged.particles().size() < 24) { vtxeff = vtxeffs[charged.particles().size()]; } const double weight = vtxeff * event.weight(); foreach (const Particle& p, charged.particles()) { double pT = p.momentum().pT()/GeV; double y = p.momentum().rapidity(); if (fabs(y) < 0.1) { nCutsPassed += weight; const PdgId id = p.pdgId(); switch (id) { case -211: _h_dpT_Pi->fill(pT, weight/(TWOPI*pT*0.2)); nPi += weight; break; case 211: _h_dpT_Piplus->fill(pT, weight/(TWOPI*pT*0.2)); nPiPlus += weight; break; case -321: _h_dpT_Kaon->fill(pT, weight/(TWOPI*pT*0.2)); nKaon += weight; break; case 321: _h_dpT_Kaonplus->fill(pT, weight/(TWOPI*pT*0.2)); nKaonPlus += weight; break; case -2212: _h_dpT_AntiProton->fill(pT, weight/(TWOPI*pT*0.2)); nAntiProton += weight; break; case 2212: _h_dpT_Proton->fill(pT, weight/(TWOPI*pT*0.2)); nProton += weight; break; } } else { continue; } } _h_dNch->fill(charged.particles().size(), weight); } /// Normalise histograms etc., after the run void finalize() { //double nTot = nPi + nPiPlus + nKaon + nKaonPlus + nProton + nAntiProton; normalize(_h_dNch); /// @todo Norm to data! normalize(_h_dpT_Pi , 0.389825 ); normalize(_h_dpT_Piplus , 0.396025 ); normalize(_h_dpT_Kaon , 0.03897 ); normalize(_h_dpT_Kaonplus , 0.04046 ); normalize(_h_dpT_AntiProton, 0.0187255); normalize(_h_dpT_Proton , 0.016511 ); } private: AIDA::IHistogram1D *_h_dNch; AIDA::IHistogram1D *_h_dpT_Pi, *_h_dpT_Piplus; AIDA::IHistogram1D *_h_dpT_Kaon, *_h_dpT_Kaonplus; AIDA::IHistogram1D *_h_dpT_AntiProton, *_h_dpT_Proton; AIDA::IProfile1D *_h_pT_vs_Nch; double nCutsPassed, nPi, nPiPlus, nKaon, nKaonPlus, nProton, nAntiProton; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(STAR_2008_S7869363); } rivet-1.8.3/src/Analyses/H1_2000_S4129130.cc0000644000175000017500000002232112116077757015701 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Math/Constants.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/DISKinematics.hh" namespace Rivet { /// @brief H1 energy flow and charged particle spectra /// @author Peter Richardson /// Based on the HZtool analysis hz99091 class H1_2000_S4129130 : public Analysis { public: /// Constructor H1_2000_S4129130() : Analysis("H1_2000_S4129130") { } /// @name Analysis methods //@{ void analyze(const Event& event) { // Get the projections const FinalState & fs = applyProjection(event, "FS"); const DISKinematics& dk = applyProjection(event, "Kinematics"); const DISLepton & dl = applyProjection(event,"Lepton"); // Get the DIS kinematics double q2 = dk.Q2(); double x = dk.x(); double y = dk.y(); double w2 = dk.W2(); // Momentum of the scattered lepton FourMomentum leptonMom = dl.out().momentum(); // pT energy and angle double enel = leptonMom.E(); double thel = 180.-leptonMom.angle(dl.in().momentum())/degree; // Extract the particles other than the lepton ParticleVector particles; particles.reserve(fs.particles().size()); const GenParticle& dislepGP = dl.out().genParticle(); for (ParticleVector::const_iterator p = fs.particles().begin(); p != fs.particles().end(); ++p) { const GenParticle& loopGP = p->genParticle(); if (&loopGP == &dislepGP) continue; particles.push_back(*p); } // Cut on the forward energy double efwd = 0.; foreach (const Particle& p, particles) { double th = 180.-p.momentum().angle(dl.in().momentum())/degree; if (th > 4.4 && th < 15.0) efwd += p.momentum().E(); } // There are four possible selections for events bool evcut[4]; // Low Q2 selection a evcut[0] = enel/GeV > 12. && w2 >= 4400.*GeV2 && efwd/GeV > 0.5 && inRange(thel,157.,176.); // Low Q2 selection b evcut[1] = enel/GeV > 12. && inRange(y,0.3,0.5); // High Q2 selection a evcut[2] = inRange(thel,12.,150.) && inRange(y,0.05,0.6) && w2 >= 4400.*GeV2 && efwd > 0.5; // High Q2 selection b evcut[3] = inRange(thel,12.,150.) && inRange(y,0.05,0.6) && inRange(w2,27110.*GeV2,45182.*GeV2); // Veto if fails all cuts if (! (evcut[0] || evcut[1] || evcut[2] || evcut[3]) ) { vetoEvent; } // Find the bins int bin[4] = {-1,-1,-1,-1}; // For the low Q2 selection a) if (q2 > 2.5*GeV && q2 <= 5.*GeV) { if (x > 0.00005 && x <= 0.0001 ) bin[0] = 0; if (x > 0.0001 && x <= 0.0002 ) bin[0] = 1; if (x > 0.0002 && x <= 0.00035) bin[0] = 2; if (x > 0.00035 && x <= 0.0010 ) bin[0] = 3; } else if(q2 > 5.*GeV && q2 <= 10.*GeV) { if (x > 0.0001 && x <= 0.0002 ) bin[0] = 4; if (x > 0.0002 && x <= 0.00035) bin[0] = 5; if (x > 0.00035 && x <= 0.0007 ) bin[0] = 6; if (x > 0.0007 && x <= 0.0020 ) bin[0] = 7; } else if(q2 > 10.*GeV && q2 <= 20.*GeV) { if (x > 0.0002 && x <= 0.0005) bin[0] = 8; if (x > 0.0005 && x <= 0.0008) bin[0] = 9; if (x > 0.0008 && x <= 0.0015) bin[0] = 10; if (x > 0.0015 && x <= 0.040 ) bin[0] = 11; } else if(q2 > 20.*GeV && q2 <= 50.*GeV) { if (x > 0.0005 && x <= 0.0014) bin[0] = 12; if (x > 0.0014 && x <= 0.0030) bin[0] = 13; if (x > 0.0030 && x <= 0.0100) bin[0] = 14; } else if (q2 > 50.*GeV && q2 <= 100.*GeV) { if (x >0.0008 && x <= 0.0030) bin[0] = 15; if (x >0.0030 && x <= 0.0200) bin[0] = 16; } // check in one of the bins evcut[0] &= bin[0] >= 0; // For the low Q2 selection b) if (q2 > 2.5*GeV && q2 <= 5. *GeV) bin[1] = 0; if (q2 > 5. *GeV && q2 <= 10. *GeV) bin[1] = 1; if (q2 > 10.*GeV && q2 <= 20. *GeV) bin[1] = 2; if (q2 > 20.*GeV && q2 <= 50. *GeV) bin[1] = 3; if (q2 > 50.*GeV && q2 <= 100.*GeV) bin[1] = 4; // check in one of the bins evcut[1] &= bin[1] >= 0; // for the high Q2 selection a) if (q2 > 100.*GeV && q2 <= 400.*GeV) { if (x > 0.00251 && x <= 0.00631) bin[2] = 0; if (x > 0.00631 && x <= 0.0158 ) bin[2] = 1; if (x > 0.0158 && x <= 0.0398 ) bin[2] = 2; } else if (q2 > 400.*GeV && q2 <= 1100.*GeV) { if (x > 0.00631 && x <= 0.0158 ) bin[2] = 3; if (x > 0.0158 && x <= 0.0398 ) bin[2] = 4; if (x > 0.0398 && x <= 1. ) bin[2] = 5; } else if (q2 > 1100.*GeV && q2 <= 100000.*GeV) { if (x > 0. && x <= 1.) bin[2] = 6; } // check in one of the bins evcut[2] &= bin[2] >= 0; // for the high Q2 selection b) if (q2 > 100.*GeV && q2 <= 220.*GeV) bin[3] = 0; else if (q2 > 220.*GeV && q2 <= 400.*GeV) bin[3] = 1; else if (q2 > 400. ) bin[3] = 2; // check in one of*GeV the bins evcut[3] &= bin[3] >= 0; // Veto if fails all cuts after bin selection if (! (evcut[0] || evcut[1] || evcut[2] || evcut[3])) { vetoEvent; } // Increment the count for normalisation const double weight = event.weight(); if (evcut[0]) _weightETLowQa [bin[0]] += weight; if (evcut[1]) _weightETLowQb [bin[1]] += weight; if (evcut[2]) _weightETHighQa[bin[2]] += weight; if (evcut[3]) _weightETHighQb[bin[3]] += weight; // Boost to hadronicCM const LorentzTransform hcmboost = dk.boostHCM(); // Loop over the particles double etcent = 0; double etfrag = 0; foreach (const Particle& p, particles) { // Boost momentum to CMS const FourMomentum hcmMom = hcmboost.transform(p.momentum()); double et = fabs(Et(hcmMom)); double eta = hcmMom.pseudorapidity(); // Averages in central and forward region if (fabs(eta) < .5 ) etcent += et; if (eta > 2 && eta <= 3.) etfrag += et; // Histograms of Et flow if (evcut[0]) _histETLowQa [bin[0]]->fill(eta, et*weight); if (evcut[1]) _histETLowQb [bin[1]]->fill(eta, et*weight); if (evcut[2]) _histETHighQa[bin[2]]->fill(eta, et*weight); if (evcut[3]) _histETHighQb[bin[3]]->fill(eta, et*weight); } // Fill histograms for the average quantities if (evcut[1] || evcut[3]) { _histAverETCentral->fill(q2, etcent*weight,weight); _histAverETFrag ->fill(q2, etfrag*weight,weight); } } void init() { // Projections addProjection(DISLepton(), "Lepton"); addProjection(DISKinematics(), "Kinematics"); addProjection(FinalState(), "FS"); // Histos IHistogram1D* h = 0; // Histograms and weight vectors for low Q^2 a _histETLowQa.reserve(17); _weightETLowQa.reserve(17); for (size_t ix = 0; ix < 17; ++ix) { h = bookHistogram1D(ix+1, 1, 1); _histETLowQa.push_back(h); _weightETLowQa.push_back(0.); } // Histograms and weight vectors for high Q^2 a _histETHighQa.reserve(7); _weightETHighQa.reserve(7); for (size_t ix = 0; ix < 7; ++ix) { h = bookHistogram1D(ix+18, 1, 1); _histETHighQa.push_back(h); _weightETHighQa.push_back(0.); } // Histograms and weight vectors for low Q^2 b _histETLowQb.reserve(5); _weightETLowQb.reserve(5); for (size_t ix = 0; ix < 5; ++ix) { h = bookHistogram1D(ix+25, 1, 1); _histETLowQb.push_back(h); _weightETLowQb.push_back(0.); } // Histograms and weight vectors for high Q^2 b _histETHighQb.reserve(3); _weightETHighQb.reserve(3); for (size_t ix = 0; ix < 3; ++ix) { h = bookHistogram1D(30+ix, 1, 1); _histETHighQb.push_back(h); _weightETHighQb.push_back(0.0); } // Histograms for the averages _histAverETCentral = bookProfile1D(33, 1, 1); _histAverETFrag = bookProfile1D(34, 1, 1); } // Finalize void finalize() { // Normalization of the Et distributions for (size_t ix=0; ix<17; ++ix) { scale(_histETLowQa[ix], 1./_weightETLowQa[ix]); } for(size_t ix=0; ix<7; ++ix) { scale(_histETHighQa[ix], 1./_weightETHighQa[ix]); } for(size_t ix=0; ix<5; ++ix) { scale(_histETLowQb[ix], 1./_weightETLowQb[ix]); } for(size_t ix=0; ix<3; ++ix) { scale(_histETHighQb[ix], 1./_weightETHighQb[ix]); } } //@} private: /// @name Histograms //@{ vector _histETLowQa; vector _histETHighQa; vector _histETLowQb; vector _histETHighQb; AIDA::IProfile1D * _histAverETCentral; AIDA::IProfile1D * _histAverETFrag; //@} /// @name storage of weights for normalisation //@{ vector _weightETLowQa; vector _weightETHighQa; vector _weightETLowQb; vector _weightETHighQb; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(H1_2000_S4129130); } rivet-1.8.3/src/Analyses/LHCB_2010_S8758301.cc0000644000175000017500000004477112116077757016173 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/UnstableFinalState.hh" #include "Rivet/Math/Constants.hh" #include "Rivet/Math/Units.hh" #include "HepMC/GenEvent.h" #include "HepMC/GenParticle.h" #include "HepMC/GenVertex.h" #include "HepMC/SimpleVector.h" namespace Rivet { using namespace HepMC; using namespace std; // Lifetime cut: longest living ancestor ctau < 10^-11 [m] namespace { const double MAX_CTAU = 1.0E-11; // [m] const double MIN_PT = 0.0001; // [GeV/c] } class LHCB_2010_S8758301 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor LHCB_2010_S8758301() : Analysis("LHCB_2010_S8758301"), sumKs0_30(0.0), sumKs0_35(0.0), sumKs0_40(0.0), sumKs0_badnull(0), sumKs0_badlft(0), sumKs0_all(0), sumKs0_outup(0), sumKs0_outdwn(0), sum_low_pt_loss(0), sum_high_pt_loss(0) { } //@} /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { MSG_DEBUG("Initializing analysis!"); fillMap(partLftMap); _h_K0s_pt_30 = bookHistogram1D(1,1,1); _h_K0s_pt_35 = bookHistogram1D(1,1,2); _h_K0s_pt_40 = bookHistogram1D(1,1,3); _h_K0s_pt_y_30 = bookHistogram1D(2,1,1); _h_K0s_pt_y_35 = bookHistogram1D(2,1,2); _h_K0s_pt_y_40 = bookHistogram1D(2,1,3); _h_K0s_pt_y_all = bookHistogram1D(3,1,1); addProjection(UnstableFinalState(), "UFS"); } /// Perform the per-event analysis void analyze(const Event& event) { int id; double y, pT; const double weight = event.weight(); const UnstableFinalState& ufs = applyProjection(event, "UFS"); double ancestor_lftime; foreach (const Particle& p, ufs.particles()) { id = p.pdgId(); if ((id != 310) && (id != -310)) continue; sumKs0_all ++; ancestor_lftime = 0.; const GenParticle* long_ancestor = getLongestLivedAncestor(p, ancestor_lftime); if ( !(long_ancestor) ) { sumKs0_badnull ++; continue; } if ( ancestor_lftime > MAX_CTAU ) { sumKs0_badlft ++; MSG_DEBUG("Ancestor " << long_ancestor->pdg_id() << ", ctau: " << ancestor_lftime << " [m]"); continue; } const FourMomentum& qmom = p.momentum(); y = 0.5 * log((qmom.E() + qmom.pz())/(qmom.E() - qmom.pz())); pT = sqrt((qmom.px() * qmom.px()) + (qmom.py() * qmom.py())); if (pT < MIN_PT) { sum_low_pt_loss ++; MSG_DEBUG("Small pT K^0_S: " << pT << " GeV/c."); } if (pT > 1.6) { sum_high_pt_loss ++; } if (y > 2.5 && y < 4.0) { _h_K0s_pt_y_all->fill(pT, weight); if (y > 2.5 && y < 3.0) { _h_K0s_pt_y_30->fill(pT, weight); _h_K0s_pt_30->fill(pT, weight); sumKs0_30 += weight; } else if (y > 3.0 && y < 3.5) { _h_K0s_pt_y_35->fill(pT, weight); _h_K0s_pt_35->fill(pT, weight); sumKs0_35 += weight; } else if (y > 3.5 && y < 4.0) { _h_K0s_pt_y_40->fill(pT, weight); _h_K0s_pt_40->fill(pT, weight); sumKs0_40 += weight; } } else if (y < 2.5) { sumKs0_outdwn ++; } else if (y > 4.0) { sumKs0_outup ++; } } } /// Normalise histograms etc., after the run void finalize() { MSG_DEBUG("Total number Ks0: " << sumKs0_all << endl << "Sum of weights: " << sumOfWeights() << endl << "Weight Ks0 (2.5 < y < 3.0): " << sumKs0_30 << endl << "Weight Ks0 (3.0 < y < 3.5): " << sumKs0_35 << endl << "Weight Ks0 (3.5 < y < 4.0): " << sumKs0_40 << endl << "Nb. unprompt Ks0 [null mother]: " << sumKs0_badnull << endl << "Nb. unprompt Ks0 [mother lifetime exceeded]: " << sumKs0_badlft << endl << "Nb. Ks0 (y > 4.0): " << sumKs0_outup << endl << "Nb. Ks0 (y < 2.5): " << sumKs0_outdwn << endl << "Nb. Ks0 (pT < " << (MIN_PT/MeV) << " MeV/c): " << sum_low_pt_loss << endl << "Nb. Ks0 (pT > 1.6 GeV/c): " << sum_high_pt_loss << endl << "Cross-section [mb]: " << crossSection()/millibarn << endl << "Nb. events: " << numEvents()); // Compute cross-section; multiply by bin width for correct scaling // cross-section given by Rivet in pb double xsection_factor = crossSection()/sumOfWeights(); // Multiply bin width for correct scaling, xsection in mub scale(_h_K0s_pt_30, 0.2*xsection_factor/microbarn); scale(_h_K0s_pt_35, 0.2*xsection_factor/microbarn); scale(_h_K0s_pt_40, 0.2*xsection_factor/microbarn); // Divide by dy (rapidity window width), xsection in mb scale(_h_K0s_pt_y_30, xsection_factor/0.5/millibarn); scale(_h_K0s_pt_y_35, xsection_factor/0.5/millibarn); scale(_h_K0s_pt_y_40, xsection_factor/0.5/millibarn); scale(_h_K0s_pt_y_all, xsection_factor/1.5/millibarn); } //@} private: /// Get particle lifetime from hardcoded data double getLifeTime(int pid) { double lft = -1.0; if (pid < 0) pid = - pid; // Correct Pythia6 PIDs for f0(980), f0(1370) mesons if (pid == 10331) pid = 30221; if (pid == 10221) pid = 9010221; map::iterator pPartLft = partLftMap.find(pid); // search stable particle list if (pPartLft == partLftMap.end()) { if (pid <= 100) return 0.0; for (unsigned int i=0; i < sizeof(stablePDGIds)/sizeof(unsigned int); i++ ) { if (pid == stablePDGIds[i]) { lft = 0.0; break; } } } else { lft = (*pPartLft).second; } if (lft < 0.0) MSG_ERROR("Could not determine lifetime for particle with PID " << pid << "... This K_s^0 will be considered unprompt!"); return lft; } const GenParticle* getLongestLivedAncestor(const Particle& p, double& lifeTime) { const GenParticle* ret = NULL; lifeTime = 1.; if (!p.hasGenParticle()) return NULL; const GenParticle* pmother = &(p.genParticle()); double longest_ctau = 0.; double mother_ctau; int mother_pid, n_inparts; GenVertex* ivertex = pmother->production_vertex(); while (ivertex) { n_inparts = ivertex->particles_in_size(); if (n_inparts < 1) {ret = NULL; break;} // error: should never happen! const HepMC::GenVertex::particles_in_const_iterator iPart_invtx = ivertex->particles_in_const_begin(); pmother = (*iPart_invtx); // first mother particle mother_pid = pmother->pdg_id(); ivertex = pmother->production_vertex(); // get next vertex if ( (mother_pid == 2212) || (mother_pid <= 100) ) { if (ret == NULL) ret = pmother; continue; } mother_ctau = getLifeTime(mother_pid); if (mother_ctau < 0.) { ret= NULL; break; } // error:should never happen! if (mother_ctau > longest_ctau) { longest_ctau = mother_ctau; ret = pmother; } } if (ret) lifeTime = longest_ctau * c_light; return ret; } // Fill the PDG Id to Lifetime[seconds] map // Data was extract from LHCb Particle Table using ParticleSvc bool fillMap(map &m) { m[6] = 4.707703E-25; m[11] = 1.E+16; m[12] = 1.E+16; m[13] = 2.197019E-06; m[14] = 1.E+16; m[15] = 2.906E-13; m[16] = 1.E+16; m[22] = 1.E+16; m[23] = 2.637914E-25; m[24] = 3.075758E-25; m[25] = 9.4E-26; m[35] = 9.4E-26; m[36] = 9.4E-26; m[37] = 9.4E-26; m[84] = 3.335641E-13; m[85] = 1.290893E-12; m[111] = 8.4E-17; m[113] = 4.405704E-24; m[115] = 6.151516E-24; m[117] = 4.088275E-24; m[119] = 2.102914E-24; m[130] = 5.116E-08; m[150] = 1.525E-12; m[211] = 2.6033E-08; m[213] = 4.405704E-24; m[215] = 6.151516E-24; m[217] = 4.088275E-24; m[219] = 2.102914E-24; m[221] = 5.063171E-19; m[223] = 7.752794E-23; m[225] = 3.555982E-24; m[227] = 3.91793E-24; m[229] = 2.777267E-24; m[310] = 8.953E-11; m[313] = 1.308573E-23; m[315] = 6.038644E-24; m[317] = 4.139699E-24; m[319] = 3.324304E-24; m[321] = 1.238E-08; m[323] = 1.295693E-23; m[325] = 6.682357E-24; m[327] = 4.139699E-24; m[329] = 3.324304E-24; m[331] = 3.210791E-21; m[333] = 1.545099E-22; m[335] = 9.016605E-24; m[337] = 7.565657E-24; m[350] = 1.407125E-12; m[411] = 1.04E-12; m[413] = 6.856377E-21; m[415] = 1.778952E-23; m[421] = 4.101E-13; m[423] = 1.000003E-19; m[425] = 1.530726E-23; m[431] = 5.E-13; m[433] = 1.000003E-19; m[435] = 3.291061E-23; m[441] = 2.465214E-23; m[443] = 7.062363E-21; m[445] = 3.242425E-22; m[510] = 1.525E-12; m[511] = 1.525E-12; m[513] = 1.000019E-19; m[515] = 1.31E-23; m[521] = 1.638E-12; m[523] = 1.000019E-19; m[525] = 1.31E-23; m[530] = 1.536875E-12; m[531] = 1.472E-12; m[533] = 1.E-19; m[535] = 1.31E-23; m[541] = 4.5E-13; m[553] = 1.218911E-20; m[1112] = 4.539394E-24; m[1114] = 5.578069E-24; m[1116] = 1.994582E-24; m[1118] = 2.269697E-24; m[1212] = 4.539394E-24; m[1214] = 5.723584E-24; m[1216] = 1.994582E-24; m[1218] = 1.316424E-24; m[2112] = 8.857E+02; m[2114] = 5.578069E-24; m[2116] = 4.388081E-24; m[2118] = 2.269697E-24; m[2122] = 4.539394E-24; m[2124] = 5.723584E-24; m[2126] = 1.994582E-24; m[2128] = 1.316424E-24; m[2212] = 1.E+16; m[2214] = 5.578069E-24; m[2216] = 4.388081E-24; m[2218] = 2.269697E-24; m[2222] = 4.539394E-24; m[2224] = 5.578069E-24; m[2226] = 1.994582E-24; m[2228] = 2.269697E-24; m[3112] = 1.479E-10; m[3114] = 1.670589E-23; m[3116] = 5.485102E-24; m[3118] = 3.656734E-24; m[3122] = 2.631E-10; m[3124] = 4.219309E-23; m[3126] = 8.227653E-24; m[3128] = 3.291061E-24; m[3212] = 7.4E-20; m[3214] = 1.828367E-23; m[3216] = 5.485102E-24; m[3218] = 3.656734E-24; m[3222] = 8.018E-11; m[3224] = 1.838582E-23; m[3226] = 5.485102E-24; m[3228] = 3.656734E-24; m[3312] = 1.639E-10; m[3314] = 6.648608E-23; m[3322] = 2.9E-10; m[3324] = 7.233101E-23; m[3334] = 8.21E-11; m[4112] = 2.991874E-22; m[4114] = 4.088274E-23; m[4122] = 2.E-13; m[4132] = 1.12E-13; m[4212] = 3.999999E-22; m[4214] = 3.291061E-22; m[4222] = 2.951624E-22; m[4224] = 4.417531E-23; m[4232] = 4.42E-13; m[4332] = 6.9E-14; m[4412] = 3.335641E-13; m[4422] = 3.335641E-13; m[4432] = 3.335641E-13; m[5112] = 1.E-19; m[5122] = 1.38E-12; m[5132] = 1.42E-12; m[5142] = 1.290893E-12; m[5212] = 1.E-19; m[5222] = 1.E-19; m[5232] = 1.42E-12; m[5242] = 1.290893E-12; m[5312] = 1.E-19; m[5322] = 1.E-19; m[5332] = 1.55E-12; m[5342] = 1.290893E-12; m[5442] = 1.290893E-12; m[5512] = 1.290893E-12; m[5522] = 1.290893E-12; m[5532] = 1.290893E-12; m[5542] = 1.290893E-12; m[10111] = 2.48382E-24; m[10113] = 4.635297E-24; m[10115] = 2.54136E-24; m[10211] = 2.48382E-24; m[10213] = 4.635297E-24; m[10215] = 2.54136E-24; m[10223] = 1.828367E-24; m[10225] = 3.636531E-24; m[10311] = 2.437823E-24; m[10313] = 7.313469E-24; m[10315] = 3.538775E-24; m[10321] = 2.437823E-24; m[10323] = 7.313469E-24; m[10325] = 3.538775E-24; m[10331] = 4.804469E-24; m[10411] = 4.38E-24; m[10413] = 3.29E-23; m[10421] = 4.38E-24; m[10423] = 3.22653E-23; m[10431] = 6.5821E-22; m[10433] = 6.5821E-22; m[10441] = 6.453061E-23; m[10511] = 4.39E-24; m[10513] = 1.65E-23; m[10521] = 4.39E-24; m[10523] = 1.65E-23; m[10531] = 4.39E-24; m[10533] = 1.65E-23; m[11114] = 2.194041E-24; m[11116] = 1.828367E-24; m[11212] = 1.880606E-24; m[11216] = 1.828367E-24; m[12112] = 2.194041E-24; m[12114] = 2.194041E-24; m[12116] = 5.063171E-24; m[12126] = 1.828367E-24; m[12212] = 2.194041E-24; m[12214] = 2.194041E-24; m[12216] = 5.063171E-24; m[12224] = 2.194041E-24; m[12226] = 1.828367E-24; m[13112] = 6.582122E-24; m[13114] = 1.09702E-23; m[13116] = 5.485102E-24; m[13122] = 1.316424E-23; m[13124] = 1.09702E-23; m[13126] = 6.928549E-24; m[13212] = 6.582122E-24; m[13214] = 1.09702E-23; m[13216] = 5.485102E-24; m[13222] = 6.582122E-24; m[13224] = 1.09702E-23; m[13226] = 5.485102E-24; m[13312] = 4.135667E-22; m[13314] = 2.742551E-23; m[13324] = 2.742551E-23; m[14122] = 1.828367E-22; m[20022] = 1.E+16; m[20113] = 1.567172E-24; m[20213] = 1.567172E-24; m[20223] = 2.708692E-23; m[20313] = 3.782829E-24; m[20315] = 2.384827E-24; m[20323] = 3.782829E-24; m[20325] = 2.384827E-24; m[20333] = 1.198929E-23; m[20413] = 2.63E-24; m[20423] = 2.63E-24; m[20433] = 6.5821E-22; m[20443] = 7.395643E-22; m[20513] = 2.63E-24; m[20523] = 2.63E-24; m[20533] = 2.63E-24; m[21112] = 2.632849E-24; m[21114] = 3.291061E-24; m[21212] = 2.632849E-24; m[21214] = 6.582122E-24; m[22112] = 4.388081E-24; m[22114] = 3.291061E-24; m[22122] = 2.632849E-24; m[22124] = 6.582122E-24; m[22212] = 4.388081E-24; m[22214] = 3.291061E-24; m[22222] = 2.632849E-24; m[22224] = 3.291061E-24; m[23112] = 7.313469E-24; m[23114] = 2.991874E-24; m[23122] = 4.388081E-24; m[23124] = 6.582122E-24; m[23126] = 3.291061E-24; m[23212] = 7.313469E-24; m[23214] = 2.991874E-24; m[23222] = 7.313469E-24; m[23224] = 2.991874E-24; m[30113] = 2.632849E-24; m[30213] = 2.632849E-24; m[30221] = 1.880606E-24; m[30223] = 2.089563E-24; m[30313] = 2.056913E-24; m[30323] = 2.056913E-24; m[30443] = 2.419898E-23; m[31114] = 1.880606E-24; m[31214] = 3.291061E-24; m[32112] = 3.989164E-24; m[32114] = 1.880606E-24; m[32124] = 3.291061E-24; m[32212] = 3.989164E-24; m[32214] = 1.880606E-24; m[32224] = 1.880606E-24; m[33122] = 1.880606E-23; m[42112] = 6.582122E-24; m[42212] = 6.582122E-24; m[43122] = 2.194041E-24; m[53122] = 4.388081E-24; m[100111] = 1.645531E-24; m[100113] = 1.64553E-24; m[100211] = 1.645531E-24; m[100213] = 1.64553E-24; m[100221] = 1.196749E-23; m[100223] = 3.061452E-24; m[100313] = 2.837122E-24; m[100323] = 2.837122E-24; m[100331] = 4.459432E-25; m[100333] = 4.388081E-24; m[100441] = 4.701516E-23; m[100443] = 2.076379E-21; m[100553] = 2.056913E-20; m[200553] = 3.242425E-20; m[300553] = 3.210791E-23; m[9000111] = 8.776163E-24; m[9000211] = 8.776163E-24; m[9000443] = 8.227652E-24; m[9000553] = 5.983747E-24; m[9010111] = 3.164482E-24; m[9010211] = 3.164482E-24; m[9010221] = 9.403031E-24; m[9010443] = 8.438618E-24; m[9010553] = 8.3318E-24; m[9020221] = 8.093281E-23; m[9020443] = 1.061633E-23; m[9030221] = 6.038644E-24; m[9042413] = 2.07634E-21; m[9050225] = 1.394517E-24; m[9060225] = 3.291061E-24; m[9080225] = 4.388081E-24; m[9090225] = 2.056913E-24; m[9910445] = 2.07634E-21; m[9920443] = 2.07634E-21; return true; } /// @name Histograms //@{ AIDA::IHistogram1D *_h_K0s_pt_y_30; // histogram for 2.5 < y < 3.0 (d2sigma) AIDA::IHistogram1D *_h_K0s_pt_y_35; // histogram for 3.0 < y < 3.5 (d2sigma) AIDA::IHistogram1D *_h_K0s_pt_y_40; // histogram for 3.5 < y < 4.0 (d2sigma) AIDA::IHistogram1D *_h_K0s_pt_30; // histogram for 2.5 < y < 3.0 (sigma) AIDA::IHistogram1D *_h_K0s_pt_35; // histogram for 3.0 < y < 3.5 (sigma) AIDA::IHistogram1D *_h_K0s_pt_40; // histogram for 3.5 < y < 4.0 (sigma) AIDA::IHistogram1D *_h_K0s_pt_y_all; // histogram for 2.5 < y < 4.0 (d2sigma) double sumKs0_30; // Sum of weights 2.5 < y < 3.0 double sumKs0_35; // Sum of weights 3.0 < y < 3.5 double sumKs0_40; // Sum of weights 3.5 < y < 4.0 // Various counters mainly for debugging and comparisons between different generators size_t sumKs0_badnull; // Nb of particles for which mother could not be identified size_t sumKs0_badlft; // Nb of mesons with long lived mothers size_t sumKs0_all; // Nb of all Ks0 generated size_t sumKs0_outup; // Nb of mesons with y > 4.0 size_t sumKs0_outdwn; // Nb of mesons with y < 2.5 size_t sum_low_pt_loss; // Nb of mesons with very low pT (indicates when units are mixed-up) size_t sum_high_pt_loss; // Nb of mesons with pT > 1.6 GeV/c // Map between PDG id and particle lifetimes in seconds std::map partLftMap; // Set of PDG Ids for stable particles (PDG Id <= 100 are considered stable) static const int stablePDGIds[205]; //@} }; // Actual initialization according to ISO C++ requirements const int LHCB_2010_S8758301::stablePDGIds[205] = { 311, 543, 545, 551, 555, 557, 1103, 2101, 2103, 2203, 3101, 3103, 3201, 3203, 3303, 4101, 4103, 4124, 4201, 4203, 4301, 4303, 4312, 4314, 4322, 4324, 4334, 4403, 4414, 4424, 4434, 4444, 5101, 5103, 5114, 5201, 5203, 5214, 5224, 5301, 5303, 5314, 5324, 5334, 5401, 5403, 5412, 5414, 5422, 5424, 5432, 5434, 5444, 5503, 5514, 5524, 5534, 5544, 5554, 10022, 10333, 10335, 10443, 10541, 10543, 10551, 10553, 10555, 11112, 12118, 12122, 12218, 12222, 13316, 13326, 20543, 20553, 20555, 23314, 23324, 30343, 30353, 30363, 30553, 33314, 33324, 41214, 42124, 52114, 52214, 100311, 100315, 100321, 100325, 100411, 100413, 100421, 100423, 100551, 100555, 100557, 110551, 110553, 110555, 120553, 120555, 130553, 200551, 200555, 210551, 210553, 220553, 1000001, 1000002, 1000003, 1000004, 1000005, 1000006, 1000011, 1000012, 1000013, 1000014, 1000015, 1000016, 1000021, 1000022, 1000023, 1000024, 1000025, 1000035, 1000037, 1000039, 2000001, 2000002, 2000003, 2000004, 2000005, 2000006, 2000011, 2000012, 2000013, 2000014, 2000015, 2000016, 3000111, 3000113, 3000211, 3000213, 3000221, 3000223, 3000331, 3100021, 3100111, 3100113, 3200111, 3200113, 3300113, 3400113, 4000001, 4000002, 4000011, 4000012, 5000039, 9000221, 9900012, 9900014, 9900016, 9900023, 9900024, 9900041, 9900042}; // Hook for the plugin system DECLARE_RIVET_PLUGIN(LHCB_2010_S8758301); } rivet-1.8.3/src/Analyses/CDF_2008_S7782535.cc0000644000175000017500000000760512116077757016066 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/JetShape.hh" namespace Rivet { /// @brief CDF Run II b-jet shape paper class CDF_2008_S7782535 : public Analysis { public: /// Constructor CDF_2008_S7782535() : Analysis("CDF_2008_S7782535") { } /// @name Analysis methods //@{ void init() { // Set up projections const FinalState fs(-3.6, 3.6); addProjection(fs, "FS"); FastJets jetproj(fs, FastJets::CDFMIDPOINT, 0.7); jetproj.useInvisibles(); addProjection(jetproj, "Jets"); // Book histograms and corresponding jet shape projections _ptedges += 52, 80, 104, 142, 300; for (size_t i = 0; i < 4; ++i) { stringstream ss; ss << "JetShape" << i; const string pname = ss.str(); _jsnames_pT[i] = pname; const JetShape jsp(jetproj, 0.0, 0.7, 7, _ptedges[i], _ptedges[i+1], 0.0, 0.7, RAPIDITY); addProjection(jsp, pname); _h_Psi_pT[i] = bookProfile1D(i+1, 2, 1); } _h_OneMinusPsi_vs_pT = bookDataPointSet(5, 1, 1); } // Do the analysis void analyze(const Event& event) { const Jets& jets = applyProjection(event, "Jets").jets(_ptedges.front()*GeV, _ptedges.back()*GeV, 0.0, 0.7, RAPIDITY); MSG_DEBUG("Jet multiplicity before any pT cut = " << jets.size()); if (jets.size() == 0) { MSG_DEBUG("No jets found in required pT range"); vetoEvent; } // Filter to just get a vector of b-jets Jets bjets; foreach (const Jet& j, jets) { if (j.containsBottom()) bjets += j; } if (bjets.empty()) { MSG_DEBUG("No b-jet axes in acceptance"); vetoEvent; } // Bin b-jets in pT Jets bjets_ptbinned[4]; foreach (const Jet& bj, bjets) { const FourMomentum pbj = bj.momentum(); const int ipt = index_between(pbj.pT(), _ptedges); if (ipt == -1) continue; //< Out of pT range (somehow!) bjets_ptbinned[ipt] += bj; } // Loop over jet pT bins and fill shape profiles const double weight = event.weight(); for (size_t ipt = 0; ipt < 4; ++ipt) { if (bjets_ptbinned[ipt].empty()) continue; // Don't use the cached result: copy construct and calculate for provided b-jets only JetShape jsipt = applyProjection(event, _jsnames_pT[ipt]); jsipt.calc(bjets_ptbinned[ipt]); for (size_t ijet = 0; ijet < jsipt.numJets(); ++ijet) { for (size_t rbin = 0; rbin < jsipt.numBins(); ++rbin) { const double r_Psi = jsipt.rBinMax(rbin); _h_Psi_pT[ipt]->fill(r_Psi/0.7, jsipt.intJetShape(ijet, rbin), weight); } } } } /// Finalize void finalize() { // Construct final 1-Psi(0.3/0.7) profile from Psi profiles vector y, ey; for (size_t i = 0; i < _ptedges.size()-1; ++i) { // Get entry for rad_Psi = 0.2 bin AIDA::IProfile1D* ph_i = _h_Psi_pT[i]; y.push_back(1.0 - ph_i->binHeight(1)); ey.push_back(ph_i->binError(1)); } _h_OneMinusPsi_vs_pT->setCoordinate(1, y, ey); } //@} private: /// @name Analysis data //@{ /// Jet \f$ p_\perp\f$ bins. vector _ptedges; // This can't be a raw array if we want to initialise it non-painfully /// JetShape projection name for each \f$p_\perp\f$ bin. string _jsnames_pT[4]; //@} /// @name Histograms //@{ AIDA::IProfile1D* _h_Psi_pT[4]; AIDA::IDataPointSet* _h_OneMinusPsi_vs_pT; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2008_S7782535); } rivet-1.8.3/src/Analyses/CDF_2010_S8591881_DY.cc0000644000175000017500000001732312116077757016454 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/ChargedLeptons.hh" namespace Rivet { /// @brief CDF Run II underlying event in Drell-Yan /// @author Hendrik Hoeth /// /// Measurement of the underlying event in Drell-Yan /// \f$ Z/\gamma^* \to e^+ e^- \f$ and /// \f$ Z/\gamma^* \to \mu^+ \mu^- \f$ events. The reconstructed /// Z defines the \f$ \phi \f$ orientation. A Z mass window cut is applied. /// /// @par Run conditions /// /// @arg \f$ \sqrt{s} = \f$ 1960 GeV /// @arg produce Drell-Yan events /// @arg Set particles with c*tau > 10 mm stable /// @arg Z decay mode: Z -> e+e- and Z -> mu+mu- /// @arg gamma decay mode: gamma -> e+e- and gamma -> mu+mu- /// @arg minimum invariant mass of the fermion pair coming from the Z/gamma: 70 GeV class CDF_2010_S8591881_DY : public Analysis { public: /// Constructor CDF_2010_S8591881_DY() : Analysis("CDF_2010_S8591881_DY") { } /// @name Analysis methods //@{ void init() { // Set up projections const ChargedFinalState cfs(-1.0, 1.0, 0.5*GeV); const ChargedFinalState clfs(-1.0, 1.0, 20*GeV); addProjection(cfs, "FS"); addProjection(ChargedLeptons(clfs), "CL"); // Book histograms _hist_tnchg = bookProfile1D( 1, 1, 1); _hist_pnchg = bookProfile1D( 1, 1, 2); _hist_anchg = bookProfile1D( 1, 1, 3); _hist_pmaxnchg = bookProfile1D( 2, 1, 1); _hist_pminnchg = bookProfile1D( 2, 1, 2); _hist_pdifnchg = bookProfile1D( 2, 1, 3); _hist_tcptsum = bookProfile1D( 3, 1, 1); _hist_pcptsum = bookProfile1D( 3, 1, 2); _hist_acptsum = bookProfile1D( 3, 1, 3); _hist_pmaxcptsum = bookProfile1D( 4, 1, 1); _hist_pmincptsum = bookProfile1D( 4, 1, 2); _hist_pdifcptsum = bookProfile1D( 4, 1, 3); _hist_tcptave = bookProfile1D( 5, 1, 1); _hist_pcptave = bookProfile1D( 5, 1, 2); _hist_tcptmax = bookProfile1D( 6, 1, 1); _hist_pcptmax = bookProfile1D( 6, 1, 2); _hist_zptvsnchg = bookProfile1D( 7, 1, 1); _hist_cptavevsnchg = bookProfile1D( 8, 1, 1); _hist_cptavevsnchgsmallzpt = bookProfile1D( 9, 1, 1); } /// Do the analysis void analyze(const Event& e) { const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 1) { MSG_DEBUG("Failed multiplicity cut"); vetoEvent; } // Get the event weight const double weight = e.weight(); // Get the leptons const ParticleVector& leptons = applyProjection(e, "CL").chargedLeptons(); // We want exactly two leptons of the same flavour. MSG_DEBUG("lepton multiplicity = " << leptons.size()); if (leptons.size() != 2 || leptons[0].pdgId() != -leptons[1].pdgId() ) vetoEvent; // Lepton pT > 20 GeV if (leptons[0].momentum().pT()/GeV <= 20 || leptons[1].momentum().pT()/GeV <= 20) vetoEvent; // Lepton pair should have an invariant mass between 70 and 110 and |eta| < 6 const FourMomentum dilepton = leptons[0].momentum() + leptons[1].momentum(); if (!inRange(dilepton.mass()/GeV, 70., 110.) || fabs(dilepton.eta()) >= 6) vetoEvent; MSG_DEBUG("Dilepton mass = " << mass(dilepton)/GeV << " GeV"); MSG_DEBUG("Dilepton pT = " << pT(dilepton)/GeV << " GeV"); // Calculate the observables size_t numToward(0), numAway(0); long int numTrans1(0), numTrans2(0); double ptSumToward(0.0), ptSumTrans1(0.0), ptSumTrans2(0.0), ptSumAway(0.0); double ptMaxToward(0.0), ptMaxTrans1(0.0), ptMaxTrans2(0.0), ptMaxAway(0.0); const double phiZ = azimuthalAngle(dilepton); const double pTZ = pT(dilepton); /// @todo Replace with foreach for (ParticleVector::const_iterator p = fs.particles().begin(); p != fs.particles().end(); ++p) { // Don't use the leptons /// @todo Replace with PID::isLepton if (abs(p->pdgId()) < 20) continue; const double dPhi = deltaPhi(p->momentum().phi(), phiZ); const double pT = p->momentum().pT(); double rotatedphi = p->momentum().phi() - phiZ; while (rotatedphi < 0) rotatedphi += 2*PI; if (dPhi < PI/3.0) { ptSumToward += pT; ++numToward; if (pT > ptMaxToward) ptMaxToward = pT; } else if (dPhi < 2*PI/3.0) { if (rotatedphi <= PI) { ptSumTrans1 += pT; ++numTrans1; if (pT > ptMaxTrans1) ptMaxTrans1 = pT; } else { ptSumTrans2 += pT; ++numTrans2; if (pT > ptMaxTrans2) ptMaxTrans2 = pT; } } else { ptSumAway += pT; ++numAway; if (pT > ptMaxAway) ptMaxAway = pT; } // We need to subtract the two leptons from the number of particles to get the correct multiplicity _hist_cptavevsnchg->fill(numParticles-2, pT, weight); if (pTZ < 10) _hist_cptavevsnchgsmallzpt->fill(numParticles-2, pT, weight); } // Fill the histograms _hist_tnchg->fill(pTZ, numToward/(4*PI/3), weight); _hist_pnchg->fill(pTZ, (numTrans1+numTrans2)/(4*PI/3), weight); _hist_pmaxnchg->fill(pTZ, (numTrans1>numTrans2 ? numTrans1 : numTrans2)/(2*PI/3), weight); _hist_pminnchg->fill(pTZ, (numTrans1fill(pTZ, abs(numTrans1-numTrans2)/(2*PI/3), weight); _hist_anchg->fill(pTZ, numAway/(4*PI/3), weight); _hist_tcptsum->fill(pTZ, ptSumToward/(4*PI/3), weight); _hist_pcptsum->fill(pTZ, (ptSumTrans1+ptSumTrans2)/(4*PI/3), weight); _hist_pmaxcptsum->fill(pTZ, (ptSumTrans1>ptSumTrans2 ? ptSumTrans1 : ptSumTrans2)/(2*PI/3), weight); _hist_pmincptsum->fill(pTZ, (ptSumTrans1fill(pTZ, fabs(ptSumTrans1-ptSumTrans2)/(2*PI/3), weight); _hist_acptsum->fill(pTZ, ptSumAway/(4*PI/3), weight); if (numToward > 0) { _hist_tcptave->fill(pTZ, ptSumToward/numToward, weight); _hist_tcptmax->fill(pTZ, ptMaxToward, weight); } if ((numTrans1+numTrans2) > 0) { _hist_pcptave->fill(pTZ, (ptSumTrans1+ptSumTrans2)/(numTrans1+numTrans2), weight); _hist_pcptmax->fill(pTZ, (ptMaxTrans1 > ptMaxTrans2 ? ptMaxTrans1 : ptMaxTrans2), weight); } // We need to subtract the two leptons from the number of particles to get the correct multiplicity _hist_zptvsnchg->fill(numParticles-2, pTZ, weight); } void finalize() { } //@} private: AIDA::IProfile1D *_hist_tnchg; AIDA::IProfile1D *_hist_pnchg; AIDA::IProfile1D *_hist_pmaxnchg; AIDA::IProfile1D *_hist_pminnchg; AIDA::IProfile1D *_hist_pdifnchg; AIDA::IProfile1D *_hist_anchg; AIDA::IProfile1D *_hist_tcptsum; AIDA::IProfile1D *_hist_pcptsum; AIDA::IProfile1D *_hist_pmaxcptsum; AIDA::IProfile1D *_hist_pmincptsum; AIDA::IProfile1D *_hist_pdifcptsum; AIDA::IProfile1D *_hist_acptsum; AIDA::IProfile1D *_hist_tcptave; AIDA::IProfile1D *_hist_pcptave; AIDA::IProfile1D *_hist_tcptmax; AIDA::IProfile1D *_hist_pcptmax; AIDA::IProfile1D *_hist_zptvsnchg; AIDA::IProfile1D *_hist_cptavevsnchg; AIDA::IProfile1D *_hist_cptavevsnchgsmallzpt; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2010_S8591881_DY); } rivet-1.8.3/src/Analyses/ATLAS_2011_I9035664.cc0000644000175000017500000001036712116077757016311 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief J/Psi production at ATLAS class ATLAS_2011_I9035664: public Analysis { public: /// Constructor ATLAS_2011_I9035664() : Analysis("ATLAS_2011_I9035664") {} /// @name Analysis methods //@{ void init() { addProjection(UnstableFinalState(), "UFS"); _nonPrRapHigh = bookHistogram1D( 14, 1, 1); _nonPrRapMedHigh = bookHistogram1D( 13, 1, 1); _nonPrRapMedLow = bookHistogram1D( 12, 1, 1); _nonPrRapLow = bookHistogram1D( 11, 1, 1); _PrRapHigh = bookHistogram1D( 18, 1, 1); _PrRapMedHigh = bookHistogram1D( 17, 1, 1); _PrRapMedLow = bookHistogram1D( 16, 1, 1); _PrRapLow = bookHistogram1D( 15, 1, 1); _IncRapHigh = bookHistogram1D( 20, 1, 1); _IncRapMedHigh = bookHistogram1D( 21, 1, 1); _IncRapMedLow = bookHistogram1D( 22, 1, 1); _IncRapLow = bookHistogram1D( 23, 1, 1); } void analyze(const Event& e) { // Get event weight for histo filling const double weight = e.weight(); // Final state of unstable particles to get particle spectra const UnstableFinalState& ufs = applyProjection(e, "UFS"); foreach (const Particle& p, ufs.particles()) { if(abs(p.pdgId())!=443) continue; HepMC::GenVertex* gv = p.genParticle().production_vertex(); bool nonPrompt = false; if (gv) { foreach (const GenParticle* pi, Rivet::particles(gv, HepMC::ancestors)) { const PdgId pid2 = pi->pdg_id(); if (PID::isHadron(pid2) && PID::hasBottom(pid2)) { nonPrompt = true; break; } } } double rapidity = p.momentum().rapidity(); double xp = p.momentum().perp(); if(rapidity<=2.4 and rapidity>2.){ if(nonPrompt) _nonPrRapHigh->fill(xp, weight); else if(!nonPrompt) _PrRapHigh->fill(xp,weight); _IncRapHigh->fill(xp,weight); } else if(rapidity<=2. and rapidity>1.5){ if(nonPrompt) _nonPrRapMedHigh->fill(xp,weight); else if(!nonPrompt) _PrRapMedHigh->fill(xp,weight); _IncRapMedHigh->fill(xp,weight); } else if(rapidity<=1.5 and rapidity>0.75){ if(nonPrompt) _nonPrRapMedLow->fill(xp,weight); else if(!nonPrompt) _PrRapMedLow->fill(xp,weight); _IncRapMedLow->fill(xp,weight); } else if(rapidity<=0.75){ if(nonPrompt) _nonPrRapLow->fill(xp,weight); else if(!nonPrompt) _PrRapLow->fill(xp,weight); _IncRapLow->fill(xp,weight); } } } /// Finalize void finalize() { double factor = crossSection()/nanobarn*0.0593; scale(_PrRapHigh , factor/sumOfWeights()); scale(_PrRapMedHigh , factor/sumOfWeights()); scale(_PrRapMedLow , factor/sumOfWeights()); scale(_PrRapLow , factor/sumOfWeights()); scale(_nonPrRapHigh , factor/sumOfWeights()); scale(_nonPrRapMedHigh , factor/sumOfWeights()); scale(_nonPrRapMedLow , factor/sumOfWeights()); scale(_nonPrRapLow , factor/sumOfWeights()); scale(_IncRapHigh , 1000.*factor/sumOfWeights()); scale(_IncRapMedHigh , 1000.*factor/sumOfWeights()); scale(_IncRapMedLow , 1000.*factor/sumOfWeights()); scale(_IncRapLow , 1000.*factor/sumOfWeights()); } //@} private: AIDA::IHistogram1D *_nonPrRapHigh; AIDA::IHistogram1D *_nonPrRapMedHigh; AIDA::IHistogram1D *_nonPrRapMedLow; AIDA::IHistogram1D *_nonPrRapLow; AIDA::IHistogram1D *_PrRapHigh; AIDA::IHistogram1D *_PrRapMedHigh; AIDA::IHistogram1D *_PrRapMedLow; AIDA::IHistogram1D *_PrRapLow; AIDA::IHistogram1D *_IncRapHigh; AIDA::IHistogram1D *_IncRapMedHigh; AIDA::IHistogram1D *_IncRapMedLow; AIDA::IHistogram1D *_IncRapLow; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_I9035664); } rivet-1.8.3/src/Analyses/ATLAS_2012_I943401.cc0000644000175000017500000004177212116077757016222 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/VetoedFinalState.hh" namespace Rivet { class ATLAS_2012_I943401 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_I943401() : Analysis("ATLAS_2012_I943401") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 20.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // jet finder VetoedFinalState vfs; vfs.addVetoPairId(MUON); addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // all tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0,0.5*GeV),"cfs"); // for pTmiss addProjection(VisibleFinalState(-4.5,4.5),"vfs"); // book histograms // counts in signal regions _count_OS_SR1 = bookHistogram1D("count_OS_SR1", 1, 0., 1.); _count_OS_SR2 = bookHistogram1D("count_OS_SR2", 1, 0., 1.); _count_OS_SR3 = bookHistogram1D("count_OS_SR3", 1, 0., 1.); _count_SS_SR1 = bookHistogram1D("count_SS_SR1", 1, 0., 1.); _count_SS_SR2 = bookHistogram1D("count_SS_SR2", 1, 0., 1.); _count_FS_SR1 = bookHistogram1D("count_FS_SR1", 1, 0., 1.); _count_FS_SR2 = bookHistogram1D("count_FS_SR2", 1, 0., 1.); _count_FS_SR3 = bookHistogram1D("count_FS_SR3", 1, 0., 1.); // histograms from paper _hist_mll_SS_D = bookHistogram1D( 1,1,1); _hist_mll_SS_B = bookHistogram1D( 1,1,2); _hist_eTmiss_SS_D = bookHistogram1D( 2,1,1); _hist_eTmiss_SS_B = bookHistogram1D( 2,1,2); _hist_mll_SS_2Jet_D = bookHistogram1D( 3,1,1); _hist_mll_SS_2Jet_B = bookHistogram1D( 3,1,2); _hist_njet_SS_D = bookHistogram1D( 5,1,1); _hist_njet_SS_B = bookHistogram1D( 5,1,2); _hist_pT_j1_SS_D = bookHistogram1D( 6,1,1); _hist_pT_j1_SS_B = bookHistogram1D( 6,1,2); _hist_pT_j2_SS_D = bookHistogram1D( 7,1,1); _hist_pT_j2_SS_B = bookHistogram1D( 7,1,2); _hist_pT_l1_SS_D = bookHistogram1D( 8,1,1); _hist_pT_l1_SS_B = bookHistogram1D( 8,1,2); _hist_pT_l2_SS_D = bookHistogram1D( 9,1,1); _hist_pT_l2_SS_B = bookHistogram1D( 9,1,2); _hist_mll_OS_D = bookHistogram1D(10,1,1); _hist_mll_OS_B = bookHistogram1D(10,1,2); _hist_eTmiss_OS_D = bookHistogram1D(11,1,1); _hist_eTmiss_OS_B = bookHistogram1D(11,1,2); _hist_eTmiss_3Jet_OS_D = bookHistogram1D(12,1,1); _hist_eTmiss_3Jet_OS_B = bookHistogram1D(12,1,2); _hist_eTmiss_4Jet_OS_D = bookHistogram1D(13,1,1); _hist_eTmiss_4Jet_OS_B = bookHistogram1D(13,1,2); _hist_njet_OS_D = bookHistogram1D(14,1,1); _hist_njet_OS_B = bookHistogram1D(14,1,2); _hist_pT_j1_OS_D = bookHistogram1D(15,1,1); _hist_pT_j1_OS_B = bookHistogram1D(15,1,2); _hist_pT_j2_OS_D = bookHistogram1D(16,1,1); _hist_pT_j2_OS_B = bookHistogram1D(16,1,2); _hist_pT_l1_OS_D = bookHistogram1D(17,1,1); _hist_pT_l1_OS_B = bookHistogram1D(17,1,2); _hist_pT_l2_OS_D = bookHistogram1D(18,1,1); _hist_pT_l2_OS_B = bookHistogram1D(18,1,2); //???? // // } /// Perform the event analysis void analyze(const Event& event) { // event weight const double weight = event.weight(); // get the jet candidates Jets cand_jets; foreach (const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 2.8 ) { cand_jets.push_back(jet); } } // electron candidates ParticleVector cand_e = applyProjection(event, "elecs").particlesByPt(); // Discard jets that overlap with electrons Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) recon_jets.push_back( jet ); } // get the charged tracks for isolation ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); // Reconstructed electrons ParticleVector recon_e; foreach ( const Particle & e, cand_e ) { // check not near a jet bool e_near_jet = false; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) { e_near_jet = true; break; } } if ( e_near_jet ) continue; // check the isolation double pTinCone = -e.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(e.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 0.1*e.momentum().perp() ) recon_e.push_back(e); } // Reconstructed Muons ParticleVector recon_mu; ParticleVector cand_mu = applyProjection(event,"muons").particlesByPt(); foreach ( const Particle & mu, cand_mu ) { // check not near a jet bool mu_near_jet = false; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) { mu_near_jet = true; break; } } if ( mu_near_jet ) continue; // isolation double pTinCone = -mu.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(mu.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 1.8*GeV ) recon_mu.push_back(mu); } // pTmiss ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // ATLAS calo problem if(rand()/static_cast(RAND_MAX)<=0.42) { foreach ( const Particle & e, recon_e ) { double eta = e.momentum().eta(); double phi = e.momentum().azimuthalAngle(MINUSPI_PLUSPI); if(eta>-0.1&&eta<1.5&&phi>-0.9&&phi<-0.5) vetoEvent; } foreach ( const Jet & jet, recon_jets ) { double eta = jet.momentum().rapidity(); double phi = jet.momentum().azimuthalAngle(MINUSPI_PLUSPI); if(jet.momentum().perp()>40 && eta>-0.1&&eta<1.5&&phi>-0.9&&phi<-0.5) vetoEvent; } } // Exactly two leptons for each event if ( recon_mu.size() + recon_e.size() != 2) vetoEvent; // two electrons highest pT > 25 ParticleVector recon_leptons; if(recon_e.size()==2&&recon_e[0].momentum().perp()>25.) { recon_leptons = recon_e; } // two muons highest pT > 20 else if(recon_mu.size()==2&&recon_mu[0].momentum().perp()>20.) { recon_leptons = recon_mu; } else if(recon_e.size()==1 && recon_mu.size()==1 && (recon_e[0].momentum().perp()>25. ||recon_mu[0].momentum().perp()>20. )) { if(recon_mu[0].momentum().perp() 12. if(mll < 12.) vetoEvent; // same sign or opposite sign event int sign = recon_leptons[0].pdgId()*recon_leptons[1].pdgId(); // same sign leptons if(sign>0) { _hist_mll_SS_D ->fill(mll ,weight); _hist_mll_SS_B ->fill(mll ,weight); _hist_eTmiss_SS_D->fill(eTmiss,weight); _hist_eTmiss_SS_B->fill(eTmiss,weight); if(recon_jets.size()>=2) { _hist_mll_SS_2Jet_D ->fill(mll ,weight); _hist_mll_SS_2Jet_B ->fill(mll ,weight); } _hist_njet_SS_D ->fill(recon_jets.size(),weight); _hist_njet_SS_B ->fill(recon_jets.size(),weight); if(!recon_jets.empty()) { _hist_pT_j1_SS_D->fill(recon_jets[0].momentum().perp(),weight); _hist_pT_j1_SS_B->fill(recon_jets[0].momentum().perp(),weight); } if(recon_jets.size()>2) { _hist_pT_j2_SS_D->fill(recon_jets[1].momentum().perp(),weight); _hist_pT_j2_SS_B->fill(recon_jets[1].momentum().perp(),weight); } _hist_pT_l1_SS_D->fill(recon_leptons[0].momentum().perp(),weight); _hist_pT_l1_SS_B->fill(recon_leptons[0].momentum().perp(),weight); _hist_pT_l2_SS_D->fill(recon_leptons[1].momentum().perp(),weight); _hist_pT_l2_SS_B->fill(recon_leptons[1].momentum().perp(),weight); // SS-SR1 if(eTmiss>100.) { _count_SS_SR1->fill(0.5,weight); } // SS-SR2 if(eTmiss>80. && recon_jets.size()>=2 && recon_jets[1].momentum().perp()>50.) { _count_SS_SR2->fill(0.5,weight); } } // opposite sign else { _hist_mll_OS_D->fill(mll ,weight); _hist_mll_OS_B->fill(mll ,weight); _hist_eTmiss_OS_D->fill(eTmiss,weight); _hist_eTmiss_OS_B->fill(eTmiss,weight); if(recon_jets.size()>=3){ _hist_eTmiss_3Jet_OS_D->fill(eTmiss,weight); _hist_eTmiss_3Jet_OS_B->fill(eTmiss,weight); } if(recon_jets.size()>=4){ _hist_eTmiss_4Jet_OS_D->fill(eTmiss,weight); _hist_eTmiss_4Jet_OS_B->fill(eTmiss,weight); } _hist_njet_OS_D->fill(recon_jets.size(),weight); _hist_njet_OS_B->fill(recon_jets.size(),weight); if(!recon_jets.empty()) { _hist_pT_j1_OS_D->fill(recon_jets[0].momentum().perp(),weight); _hist_pT_j1_OS_B->fill(recon_jets[0].momentum().perp(),weight); } if(recon_jets.size()>2) { _hist_pT_j2_OS_D->fill(recon_jets[1].momentum().perp(),weight); _hist_pT_j2_OS_B->fill(recon_jets[1].momentum().perp(),weight); } _hist_pT_l1_OS_D->fill(recon_leptons[0].momentum().perp(),weight); _hist_pT_l1_OS_B->fill(recon_leptons[0].momentum().perp(),weight); _hist_pT_l2_OS_D->fill(recon_leptons[1].momentum().perp(),weight); _hist_pT_l2_OS_B->fill(recon_leptons[1].momentum().perp(),weight); // different signal regions // OS-SR1 if(eTmiss>250.) { _count_OS_SR1->fill(0.5,weight); } // OS-SR2 if(eTmiss>220. && recon_jets.size()>=3 && recon_jets[0].momentum().perp()>80. && recon_jets[2].momentum().perp()>40.) { _count_OS_SR2->fill(0.5,weight); } // OS-SR3 if(eTmiss>100. && recon_jets.size()>=4 && recon_jets[0].momentum().perp()>100. && recon_jets[3].momentum().perp()>70.) { _count_OS_SR3->fill(0.5,weight); } // same flavour analysis static const double beta = 0.75; static const double tau_e = 0.96; static const double tau_mu = 0.816; double fs_weight = weight; if(abs(recon_leptons[0].pdgId())==ELECTRON && abs(recon_leptons[1].pdgId())==ELECTRON) { fs_weight /= beta*(1.-sqr(1.-tau_e)); } else if(abs(recon_leptons[0].pdgId())==MUON && abs(recon_leptons[1].pdgId())==MUON) { fs_weight *= beta/(1.-sqr(1.-tau_mu)); } else { fs_weight /= -(1.-(1.-tau_e)*(1.-tau_mu)); } // FS-SR1 if(eTmiss>80.&& (mll<80.||mll>100.)) { _count_FS_SR1->fill(0.5,fs_weight); } // FS-SR2 if(eTmiss>80.&&recon_jets.size()>=2) { _count_FS_SR2->fill(0.5,fs_weight); } // FS-SR3 if(eTmiss>250.) { _count_FS_SR3->fill(0.5,fs_weight); } } } //@} void finalize() { double norm = crossSection()/femtobarn*1.04/sumOfWeights(); // event counts scale(_count_OS_SR1,norm); scale(_count_OS_SR2,norm); scale(_count_OS_SR3,norm); scale(_count_SS_SR1,norm); scale(_count_SS_SR2,norm); scale(_count_FS_SR1,norm); scale(_count_FS_SR2,norm); scale(_count_FS_SR3,norm); // histograms scale(_hist_mll_SS_D ,norm*20.); scale(_hist_mll_SS_B ,norm*20.); scale(_hist_eTmiss_SS_D ,norm*20.); scale(_hist_eTmiss_SS_B ,norm*20.); scale(_hist_mll_SS_2Jet_D,norm*50.); scale(_hist_mll_SS_2Jet_B,norm*50.); scale(_hist_njet_SS_D ,norm ); scale(_hist_njet_SS_B ,norm ); scale(_hist_pT_j1_SS_D ,norm*20.); scale(_hist_pT_j1_SS_B ,norm*20.); scale(_hist_pT_j2_SS_D ,norm*20.); scale(_hist_pT_j2_SS_B ,norm*20.); scale(_hist_pT_l1_SS_D ,norm*5. ); scale(_hist_pT_l1_SS_B ,norm*5. ); scale(_hist_pT_l2_SS_D ,norm*5. ); scale(_hist_pT_l2_SS_B ,norm*5. ); scale(_hist_mll_OS_D ,norm*10.); scale(_hist_mll_OS_B ,norm*10.); scale(_hist_eTmiss_OS_D ,norm*10.); scale(_hist_eTmiss_OS_B ,norm*10.); scale(_hist_eTmiss_3Jet_OS_D,norm*10.); scale(_hist_eTmiss_3Jet_OS_B,norm*10.); scale(_hist_eTmiss_4Jet_OS_D,norm*10.); scale(_hist_eTmiss_4Jet_OS_B,norm*10.); scale(_hist_njet_OS_D ,norm ); scale(_hist_njet_OS_B ,norm ); scale(_hist_pT_j1_OS_D ,norm*20.); scale(_hist_pT_j1_OS_B ,norm*20.); scale(_hist_pT_j2_OS_D ,norm*20.); scale(_hist_pT_j2_OS_B ,norm*20.); scale(_hist_pT_l1_OS_D ,norm*20.); scale(_hist_pT_l1_OS_B ,norm*20.); scale(_hist_pT_l2_OS_D ,norm*20.); scale(_hist_pT_l2_OS_B ,norm*20.); } private: /// @name Histograms //@{ AIDA::IHistogram1D* _count_OS_SR1; AIDA::IHistogram1D* _count_OS_SR2; AIDA::IHistogram1D* _count_OS_SR3; AIDA::IHistogram1D* _count_SS_SR1; AIDA::IHistogram1D* _count_SS_SR2; AIDA::IHistogram1D* _count_FS_SR1; AIDA::IHistogram1D* _count_FS_SR2; AIDA::IHistogram1D* _count_FS_SR3; AIDA::IHistogram1D* _hist_mll_SS_D; AIDA::IHistogram1D* _hist_mll_SS_B; AIDA::IHistogram1D* _hist_eTmiss_SS_D; AIDA::IHistogram1D* _hist_eTmiss_SS_B; AIDA::IHistogram1D* _hist_mll_SS_2Jet_D; AIDA::IHistogram1D* _hist_mll_SS_2Jet_B; AIDA::IHistogram1D* _hist_njet_SS_D; AIDA::IHistogram1D* _hist_njet_SS_B; AIDA::IHistogram1D* _hist_pT_j1_SS_D; AIDA::IHistogram1D* _hist_pT_j1_SS_B; AIDA::IHistogram1D* _hist_pT_j2_SS_D; AIDA::IHistogram1D* _hist_pT_j2_SS_B; AIDA::IHistogram1D* _hist_pT_l1_SS_D; AIDA::IHistogram1D* _hist_pT_l1_SS_B; AIDA::IHistogram1D* _hist_pT_l2_SS_D; AIDA::IHistogram1D* _hist_pT_l2_SS_B; AIDA::IHistogram1D* _hist_mll_OS_D; AIDA::IHistogram1D* _hist_mll_OS_B; AIDA::IHistogram1D* _hist_eTmiss_OS_D; AIDA::IHistogram1D* _hist_eTmiss_OS_B; AIDA::IHistogram1D* _hist_eTmiss_3Jet_OS_D; AIDA::IHistogram1D* _hist_eTmiss_3Jet_OS_B; AIDA::IHistogram1D* _hist_eTmiss_4Jet_OS_D; AIDA::IHistogram1D* _hist_eTmiss_4Jet_OS_B; AIDA::IHistogram1D* _hist_njet_OS_D ; AIDA::IHistogram1D* _hist_njet_OS_B ; AIDA::IHistogram1D* _hist_pT_j1_OS_D; AIDA::IHistogram1D* _hist_pT_j1_OS_B; AIDA::IHistogram1D* _hist_pT_j2_OS_D; AIDA::IHistogram1D* _hist_pT_j2_OS_B; AIDA::IHistogram1D* _hist_pT_l1_OS_D; AIDA::IHistogram1D* _hist_pT_l1_OS_B; AIDA::IHistogram1D* _hist_pT_l2_OS_D; AIDA::IHistogram1D* _hist_pT_l2_OS_B; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I943401); } rivet-1.8.3/src/Analyses/BELLE_2006_S6265367.cc0000644000175000017500000003463112116077757016310 0ustar sunsun// -*- C++ -*- #include #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief BELLE charmed mesons and baryons from fragmentation /// @author Eike von Seggern class BELLE_2006_S6265367 : public Analysis { public: BELLE_2006_S6265367() : Analysis("BELLE_2006_S6265367") { } void analyze(const Event& e) { const double weight = e.weight(); // Loop through unstable FS particles and look for charmed mesons/baryons const UnstableFinalState& ufs = applyProjection(e, "UFS"); const Beam beamproj = applyProjection(e, "Beams"); const ParticlePair& beams = beamproj.beams(); FourMomentum mom_tot = beams.first.momentum() + beams.second.momentum(); LorentzTransform cms_boost(-mom_tot.boostVector()); const double s = sqr(beamproj.sqrtS()); const bool onresonance = fuzzyEquals(beamproj.sqrtS(), 10.58, 5E-3); // Particle masses from PDGlive (accessed online 16. Nov. 2009). foreach (const Particle& p, ufs.particles()) { double xp = 0.0; double mH2 = 0.0; // 3-momentum in CMS frame const double mom = cms_boost.transform(p.momentum()).vector3().mod(); const int PdgId = abs(p.pdgId()); MSG_DEBUG("pdgID = " << PdgId << " mom = " << mom); switch (PdgId) { case 421: MSG_DEBUG("D0 found"); mH2 = 3.47763; // 1.86484^2 xp = mom/sqrt(s/4.0 - mH2); // off-resonance cross section if(!onresonance) _sigmaD0->fill(10.6,weight); if(checkDecay(p.genParticle())) { if (onresonance) _histXpD0_R->fill(xp, s*weight); else _histXpD0_C->fill(xp, s*weight); } if (onresonance) _histXpD0_R_N->fill(xp, weight); else _histXpD0_C_N->fill(xp, weight); break; case 411: MSG_DEBUG("D+ found"); mH2 = 3.49547; // 1.86962^2 xp = mom/sqrt(s/4.0 - mH2); if(!onresonance) _sigmaDPlus->fill(10.6,weight); if(checkDecay(p.genParticle())) { if (onresonance) _histXpDplus_R->fill(xp, s*weight); else _histXpDplus_C->fill(xp, s*weight); } if (onresonance) _histXpDplus_R_N->fill(xp, weight); else _histXpDplus_C_N->fill(xp, weight); break; case 431: MSG_DEBUG("D+_s found"); mH2 = 3.87495; // 1.96849^2 xp = mom/sqrt(s/4.0 - mH2); if(!onresonance) _sigmaDs->fill(10.6,weight); if(checkDecay(p.genParticle())) { if (onresonance) _histXpDplus_s_R->fill(xp, s*weight); else _histXpDplus_s_C->fill(xp, s*weight); } if (onresonance) _histXpDplus_s_R_N->fill(xp, weight); else _histXpDplus_s_C_N->fill(xp, weight); break; case 4122: MSG_DEBUG("Lambda_c found"); mH2 = 5.22780; // 2.28646^2 xp = mom/sqrt(s/4.0 - mH2); if(!onresonance) _sigmaLambdac ->fill(10.6,weight); if(checkDecay(p.genParticle())) { if (onresonance) _histXpLambda_c_R->fill(xp, s*weight); else _histXpLambda_c_C->fill(xp, s*weight); } if (onresonance) _histXpLambda_c_R_N->fill(xp, weight); else _histXpLambda_c_C_N->fill(xp, weight); break; case 413: { MSG_DEBUG("D*+ found"); mH2 = 4.04119; // 2.01027^2 xp = mom/sqrt(s/4.0 - mH2); if(!onresonance) { _sigmaDStarPlusA->fill(10.6,weight); _sigmaDStarPlusB->fill(10.6,weight); _sigmaDStarPlusC->fill(10.6,weight); } const GenParticle * Dmeson = &p.genParticle(); const GenVertex* dv = p.genParticle().end_vertex(); bool D0decay(false), Pi0decay(false), Piplusdecay(false), Dplusdecay(false); for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin(); pp != dv->particles_out_const_end(); ++pp) { if (abs((*pp)->pdg_id()) == 421) { Dmeson = *pp; D0decay = true; } else if (abs((*pp)->pdg_id()) == 411) { Dmeson = *pp; Dplusdecay = true; } else if (abs((*pp)->pdg_id()) == 111) { Pi0decay = true; } else if (abs((*pp)->pdg_id()) == 211) { Piplusdecay = true; } } if (D0decay && Piplusdecay && checkDecay(*Dmeson)) { if (onresonance) _histXpDstarplus2D0_R->fill(xp, s*weight); else _histXpDstarplus2D0_C->fill(xp, s*weight); } else if (Dplusdecay && Pi0decay && checkDecay(*Dmeson)) { if (onresonance) _histXpDstarplus2Dplus_R->fill(xp, s*weight); else _histXpDstarplus2Dplus_C->fill(xp, s*weight); } else { MSG_WARNING("Unexpected D* decay!"); } if (onresonance) { _histXpDstarplus2D0_R_N->fill(xp, weight); _histXpDstarplus2Dplus_R_N->fill(xp, weight); } else { _histXpDstarplus2D0_C_N->fill(xp, weight); _histXpDstarplus2Dplus_C_N->fill(xp, weight); } break; } case 423: MSG_DEBUG("D*0 found"); mH2 = 4.02793; // 2.00697**2 xp = mom/sqrt(s/4.0 - mH2); if(!onresonance) _sigmaDStar0 ->fill(10.6,weight); MSG_DEBUG("xp = " << xp); const GenParticle * Dmeson = &p.genParticle(); const GenVertex* dv = p.genParticle().end_vertex(); bool D0decay(false), Pi0decay(false); for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin(); pp != dv->particles_out_const_end(); ++pp) { if (abs((*pp)->pdg_id()) == 421) { Dmeson = *pp; D0decay = true; } else if (abs((*pp)->pdg_id()) == 111) { Pi0decay = true; } } if (D0decay && Pi0decay && checkDecay(*Dmeson)) { if (onresonance) _histXpDstar0_R->fill(xp, s*weight); else { _histXpDstar0_C->fill(xp, s*weight); } } if (onresonance) _histXpDstar0_R_N->fill(xp, weight); else { _histXpDstar0_C_N->fill(xp, weight); } break; } } } // analyze void finalize() { scale(_histXpDstarplus2D0_R, crossSection()/nanobarn/sumOfWeights()); scale(_histXpD0_R, crossSection()/nanobarn/sumOfWeights()); scale(_histXpDplus_R, crossSection()/nanobarn/sumOfWeights()); scale(_histXpDplus_s_R, crossSection()/nanobarn/sumOfWeights()); scale(_histXpLambda_c_R, crossSection()/nanobarn/sumOfWeights()); scale(_histXpDstarplus2Dplus_R, crossSection()/nanobarn/sumOfWeights()); scale(_histXpDstar0_R, crossSection()/nanobarn/sumOfWeights()); scale(_histXpDstarplus2D0_C, crossSection()/nanobarn/sumOfWeights()); scale(_histXpD0_C, crossSection()/nanobarn/sumOfWeights()); scale(_histXpDplus_C, crossSection()/nanobarn/sumOfWeights()); scale(_histXpDplus_s_C, crossSection()/nanobarn/sumOfWeights()); scale(_histXpLambda_c_C, crossSection()/nanobarn/sumOfWeights()); scale(_histXpDstarplus2Dplus_C, crossSection()/nanobarn/sumOfWeights()); scale(_histXpDstar0_C, crossSection()/nanobarn/sumOfWeights()); normalize(_histXpDstarplus2D0_R_N); normalize(_histXpD0_R_N); normalize(_histXpDplus_R_N); normalize(_histXpDplus_s_R_N); normalize(_histXpLambda_c_R_N); normalize(_histXpDstarplus2Dplus_R_N); normalize(_histXpDstar0_R_N); normalize(_histXpDstarplus2D0_C_N); normalize(_histXpD0_C_N); normalize(_histXpDplus_C_N); normalize(_histXpDplus_s_C_N); normalize(_histXpLambda_c_C_N); normalize(_histXpDstarplus2Dplus_C_N); normalize(_histXpDstar0_C_N); scale(_sigmaD0, crossSection()/picobarn/sumOfWeights()); scale(_sigmaDPlus, crossSection()/picobarn/sumOfWeights()); scale(_sigmaDs, crossSection()/picobarn/sumOfWeights()); scale(_sigmaLambdac, crossSection()/picobarn/sumOfWeights()); scale(_sigmaDStar0, crossSection()/picobarn/sumOfWeights()); scale(_sigmaDStarPlusA, crossSection()/picobarn/sumOfWeights()); scale(_sigmaDStarPlusB, crossSection()/picobarn/sumOfWeights()); scale(_sigmaDStarPlusC, crossSection()/picobarn/sumOfWeights()); } // finalize void init() { addProjection(Beam(), "Beams"); addProjection(UnstableFinalState(), "UFS"); // continuum cross sections _sigmaD0 = bookHistogram1D(1,1,1); _sigmaDPlus = bookHistogram1D(1,1,2); _sigmaDs = bookHistogram1D(1,1,3); _sigmaLambdac = bookHistogram1D(1,1,4); _sigmaDStar0 = bookHistogram1D(1,1,5); _sigmaDStarPlusA = bookHistogram1D(1,1,6); _sigmaDStarPlusB = bookHistogram1D(1,1,7); _sigmaDStarPlusC = bookHistogram1D(1,1,8); // histograms for continuum data (sqrt(s) = 10.52 GeV) _histXpDstarplus2D0_C = bookHistogram1D(2, 1, 1); _histXpD0_C = bookHistogram1D(3, 1, 1); _histXpDplus_C = bookHistogram1D(4, 1, 1); _histXpDplus_s_C = bookHistogram1D(5, 1, 1); _histXpLambda_c_C = bookHistogram1D(6, 1, 1); _histXpDstarplus2Dplus_C = bookHistogram1D(7, 1, 1); _histXpDstar0_C = bookHistogram1D(8, 1, 1); // histograms for on-resonance data (sqrt(s) = 10.58 GeV) _histXpDstarplus2D0_R = bookHistogram1D(9, 1, 1); _histXpD0_R = bookHistogram1D(10, 1, 1); _histXpDplus_R = bookHistogram1D(11, 1, 1); _histXpDplus_s_R = bookHistogram1D(12, 1, 1); _histXpLambda_c_R = bookHistogram1D(13, 1, 1); _histXpDstarplus2Dplus_R = bookHistogram1D(14, 1, 1); _histXpDstar0_R = bookHistogram1D(15, 1, 1); // histograms for continuum data (sqrt(s) = 10.52 GeV) _histXpDstarplus2D0_C_N = bookHistogram1D(2, 1, 2); _histXpD0_C_N = bookHistogram1D(3, 1, 2); _histXpDplus_C_N = bookHistogram1D(4, 1, 2); _histXpDplus_s_C_N = bookHistogram1D(5, 1, 2); _histXpLambda_c_C_N = bookHistogram1D(6, 1, 2); _histXpDstarplus2Dplus_C_N = bookHistogram1D(7, 1, 2); _histXpDstar0_C_N = bookHistogram1D(8, 1, 2); // histograms for on-resonance data (sqrt(s) = 10.58 GeV) _histXpDstarplus2D0_R_N = bookHistogram1D(9, 1, 2); _histXpD0_R_N = bookHistogram1D(10, 1, 2); _histXpDplus_R_N = bookHistogram1D(11, 1, 2); _histXpDplus_s_R_N = bookHistogram1D(12, 1, 2); _histXpLambda_c_R_N = bookHistogram1D(13, 1, 2); _histXpDstarplus2Dplus_R_N = bookHistogram1D(14, 1, 2); _histXpDstar0_R_N = bookHistogram1D(15, 1, 2); } // init private: //@{ /// Histograms // Histograms for the continuum cross sections AIDA::IHistogram1D* _sigmaD0; AIDA::IHistogram1D* _sigmaDPlus; AIDA::IHistogram1D* _sigmaDs; AIDA::IHistogram1D* _sigmaLambdac; AIDA::IHistogram1D* _sigmaDStar0; AIDA::IHistogram1D* _sigmaDStarPlusA; AIDA::IHistogram1D* _sigmaDStarPlusB; AIDA::IHistogram1D* _sigmaDStarPlusC; // histograms for continuum data (sqrt(s) = 10.52 GeV) AIDA::IHistogram1D* _histXpDstarplus2D0_C; AIDA::IHistogram1D* _histXpD0_C; AIDA::IHistogram1D* _histXpDplus_C; AIDA::IHistogram1D* _histXpDplus_s_C; AIDA::IHistogram1D* _histXpLambda_c_C; AIDA::IHistogram1D* _histXpDstarplus2Dplus_C; AIDA::IHistogram1D* _histXpDstar0_C; AIDA::IHistogram1D* _histXpDstarplus2D0_C_N; AIDA::IHistogram1D* _histXpD0_C_N; AIDA::IHistogram1D* _histXpDplus_C_N; AIDA::IHistogram1D* _histXpDplus_s_C_N; AIDA::IHistogram1D* _histXpLambda_c_C_N; AIDA::IHistogram1D* _histXpDstarplus2Dplus_C_N; AIDA::IHistogram1D* _histXpDstar0_C_N; // histograms for on-resonance data (sqrt(s) = 10.58 GeV) AIDA::IHistogram1D* _histXpDstarplus2D0_R; AIDA::IHistogram1D* _histXpD0_R; AIDA::IHistogram1D* _histXpDplus_R; AIDA::IHistogram1D* _histXpDplus_s_R; AIDA::IHistogram1D* _histXpLambda_c_R; AIDA::IHistogram1D* _histXpDstarplus2Dplus_R; AIDA::IHistogram1D* _histXpDstar0_R; AIDA::IHistogram1D* _histXpDstarplus2D0_R_N; AIDA::IHistogram1D* _histXpD0_R_N; AIDA::IHistogram1D* _histXpDplus_R_N; AIDA::IHistogram1D* _histXpDplus_s_R_N; AIDA::IHistogram1D* _histXpLambda_c_R_N; AIDA::IHistogram1D* _histXpDstarplus2Dplus_R_N; AIDA::IHistogram1D* _histXpDstar0_R_N; //@} bool checkDecay(const GenParticle & p) { unsigned int nstable=0,npip=0,npim=0; unsigned int np=0,nap=0,nKp=0,nKm=0,nPhi=0; findDecayProducts(p,nstable,npip,npim, np,nap,nKp,nKm,nPhi); int id = p.pdg_id(); //D0 if(id==421) { if(nstable==2&&nKm==1&&npip==1) return true; } //Dbar0 else if(id==-421) { if(nstable==2&&nKp==1&&npim==1) return true; } // D+ else if(id==411) { if(nstable==3&&nKm==1&&npip==2) return true; } // D- else if(id==-411) { if(nstable==3&&nKp==1&&npim==2) return true; } // D_s+ else if(id==431) { if(nstable==1&&nPhi==1&&npip==1) return true; } // D_s- else if(id==-431) { if(nstable==1&&nPhi==1&&npim==1) return true; } // Lambda_c else if(id==4122) { if(nstable==3&&np==1&&npip==1&&nKm==1) return true; } // Lambda_c bar else if(id==-4122) { if(nstable==3&&nap==1&&npim==1&&nKp==1) return true; } return false; } void findDecayProducts(const GenParticle & p, unsigned int & nstable, unsigned int & npip, unsigned int & npim , unsigned int & np, unsigned int & nap , unsigned int & nKp, unsigned int & nKm , unsigned int & nPhi) { const GenVertex* dv = p.end_vertex(); for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin(); pp != dv->particles_out_const_end(); ++pp) { int id = (*pp)->pdg_id(); if(id==333) ++nPhi; else if(id==111||id==221) ++nstable; else if((*pp)->end_vertex()) findDecayProducts(**pp,nstable,npip,npim,np,nap,nKp,nKm,nPhi); else { if(id!=22) ++nstable; if (id == 211) ++npip; else if(id == -211) ++npim; else if(id == 2212) ++np; else if(id == -2212) ++nap; else if(id == 321) ++nKp; else if(id == -321) ++nKm; } } } }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(BELLE_2006_S6265367); } rivet-1.8.3/src/Analyses/CDF_1988_S1865951.cc0000644000175000017500000000370412116077757016100 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/TriggerCDFRun0Run1.hh" namespace Rivet { /// @brief CDF track \f$ p_\perp \f$ distributions at 630 and 1800 GeV class CDF_1988_S1865951 : public Analysis { public: /// Constructor CDF_1988_S1865951() : Analysis("CDF_1988_S1865951") { _sumWTrig = 0; } /// @name Analysis methods //@{ /// Book histograms and set up projections void init() { // Set up projections addProjection(TriggerCDFRun0Run1(), "Trigger"); const ChargedFinalState cfs(-1.0, 1.0, 0.4*GeV); addProjection(cfs, "CFS"); // Book histo if (fuzzyEquals(sqrtS()/GeV, 1800, 1E-3)) { _hist_pt = bookHistogram1D(1, 1, 1); } else if (fuzzyEquals(sqrtS()/GeV, 630, 1E-3)) { _hist_pt = bookHistogram1D(2, 1, 1); } } /// Do the analysis void analyze(const Event& event) { // Trigger const bool trigger = applyProjection(event, "Trigger").minBiasDecision(); if (!trigger) vetoEvent; const double weight = event.weight(); _sumWTrig += weight; const FinalState& trackfs = applyProjection(event, "CFS"); foreach (Particle p, trackfs.particles()) { const double pt = p.momentum().pT()/GeV; // Effective weight for d3sig/dp3 = weight / ( Delta eta * 2pi * pt ), with Delta(eta) = 2 const double eff_weight = weight/(2*2*TWOPI*pt); _hist_pt->fill(pt, eff_weight); } } /// Scale histos void finalize() { scale(_hist_pt, crossSectionPerEvent()/millibarn); } //@} private: /// @name Counters //@{ double _sumWTrig; //@} /// @name Histos //@{ AIDA::IHistogram1D* _hist_pt; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_1988_S1865951); } rivet-1.8.3/src/Analyses/ATLAS_2012_CONF_2012_105.cc0000644000175000017500000001622312116077757017114 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/VetoedFinalState.hh" namespace Rivet { class ATLAS_2012_CONF_2012_105 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_CONF_2012_105() : Analysis("ATLAS_2012_CONF_2012_105") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 20.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 20.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // jet finder VetoedFinalState vfs; vfs.addVetoPairId(MUON); addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // all tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0,0.5*GeV),"cfs"); // for pTmiss addProjection(VisibleFinalState(-4.5,4.5),"vfs"); // book histograms // counts in signal regions _count_ee = bookHistogram1D("count_ee" , 1, 0., 1.); _count_emu = bookHistogram1D("count_emu" , 1, 0., 1.); _count_mumu = bookHistogram1D("count_mumu", 1, 0., 1.); _count_ll = bookHistogram1D("count_ll" , 1, 0., 1.); // histograms from paper _hist_eTmiss_ee = bookHistogram1D("eTmiss_ee" , 8, 0., 400.); _hist_eTmiss_emu = bookHistogram1D("eTmiss_emu" , 8, 0., 400.); _hist_eTmiss_mumu = bookHistogram1D("eTmiss_mumu", 8, 0., 400.); _hist_eTmiss_ll = bookHistogram1D("eTmiss_ll" , 8, 0., 400.); } /// Perform the event analysis void analyze(const Event& event) { // event weight const double weight = event.weight(); // get the jet candidates Jets cand_jets; foreach (const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 2.8 ) { cand_jets.push_back(jet); } } // electron candidates ParticleVector cand_e = applyProjection(event, "elecs").particlesByPt(); // Discard jets that overlap with electrons Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) recon_jets.push_back( jet ); } // get the charged tracks for isolation ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); // Reconstructed electrons ParticleVector recon_leptons; foreach ( const Particle & e, cand_e ) { // check not near a jet bool e_near_jet = false; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) { e_near_jet = true; break; } } if ( e_near_jet ) continue; // check the isolation double pTinCone = -e.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(e.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 0.1*e.momentum().perp() ) recon_leptons.push_back(e); } // Reconstructed Muons ParticleVector cand_mu = applyProjection(event,"muons").particlesByPt(); foreach ( const Particle & mu, cand_mu ) { // check not near a jet bool mu_near_jet = false; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) { mu_near_jet = true; break; } } if ( mu_near_jet ) continue; // isolation double pTinCone = -mu.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(mu.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 1.8*GeV ) recon_leptons.push_back(mu); } // pTmiss ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // Exactly two leptons for each event if ( recon_leptons.size() != 2) vetoEvent; // ensure 1st hardest if(recon_leptons[0].momentum().perp()50 if(recon_jets.size()<4||recon_jets[3].momentum().perp()<50.) vetoEvent; if(recon_leptons[0].pdgId()!=recon_leptons[1].pdgId()) _hist_eTmiss_emu ->fill(eTmiss,weight); else if(abs(recon_leptons[0].pdgId())==ELECTRON) _hist_eTmiss_ee ->fill(eTmiss,weight); else if(abs(recon_leptons[0].pdgId())==MUON) _hist_eTmiss_mumu->fill(eTmiss,weight); _hist_eTmiss_ll->fill(eTmiss,weight); if(eTmiss>150.) { if(recon_leptons[0].pdgId()!=recon_leptons[1].pdgId()) _count_emu ->fill(0.5,weight); else if(abs(recon_leptons[0].pdgId())==ELECTRON) _count_ee ->fill(0.5,weight); else if(abs(recon_leptons[0].pdgId())==MUON) _count_mumu->fill(0.5,weight); _count_ll->fill(0.5,weight); } } //@} void finalize() { double norm = crossSection()/femtobarn*5.8/sumOfWeights(); // event counts scale(_count_ee ,norm); scale(_count_emu ,norm); scale(_count_mumu,norm); scale(_count_ll ,norm); // histograms scale(_hist_eTmiss_ee ,norm*50.); scale(_hist_eTmiss_emu ,norm*50.); scale(_hist_eTmiss_mumu,norm*50.); scale(_hist_eTmiss_ll ,norm*50.); } private: /// @name Histograms //@{ AIDA::IHistogram1D* _count_ee ; AIDA::IHistogram1D* _count_emu ; AIDA::IHistogram1D* _count_mumu; AIDA::IHistogram1D* _count_ll ; AIDA::IHistogram1D* _hist_eTmiss_ee; AIDA::IHistogram1D* _hist_eTmiss_emu; AIDA::IHistogram1D* _hist_eTmiss_mumu; AIDA::IHistogram1D* _hist_eTmiss_ll; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_CONF_2012_105); } rivet-1.8.3/src/Analyses/E735_1998_S3905616.cc0000644000175000017500000000327412116077757016125 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/TriggerCDFRun0Run1.hh" #include "Rivet/Projections/TriggerUA5.hh" namespace Rivet { /// @brief E735 charged multiplicity in NSD-triggered events class E735_1998_S3905616 : public Analysis { public: /// Constructor E735_1998_S3905616() : Analysis("E735_1998_S3905616") { _sumWTrig = 0; } /// @name Analysis methods //@{ void init() { // Projections /// @todo E735 trigger? //addProjection(TriggerCDFRun0Run1(), "Trigger"); addProjection(TriggerUA5(), "Trigger"); addProjection(ChargedFinalState(), "FS"); // Histo _hist_multiplicity = bookHistogram1D(1, 1, 1); } void analyze(const Event& event) { //const bool trigger = applyProjection(event, "Trigger").minBiasDecision(); const bool trigger = applyProjection(event, "Trigger").nsdDecision(); if (!trigger) vetoEvent; const double weight = event.weight(); _sumWTrig += weight; const ChargedFinalState& fs = applyProjection(event, "FS"); const size_t numParticles = fs.particles().size(); _hist_multiplicity->fill(numParticles, weight); } void finalize() { scale(_hist_multiplicity, 1/_sumWTrig); } //@} private: /// @name Weight counter //@{ double _sumWTrig; //@} /// @name Histograms //@{ AIDA::IHistogram1D* _hist_multiplicity; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(E735_1998_S3905616); } rivet-1.8.3/src/Analyses/ATLAS_2011_S8924791.cc0000644000175000017500000000752412116077757016333 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/JetShape.hh" namespace Rivet { /// @brief ATLAS jet shape analysis /// @author Andy Buckley, Judith Katzy, Francesc Vives class ATLAS_2011_S8924791 : public Analysis { public: /// Constructor ATLAS_2011_S8924791() : Analysis("ATLAS_2011_S8924791") { } /// @name Analysis methods //@{ void init() { // Set up projections const FinalState fs(-5.0, 5.0); addProjection(fs, "FS"); FastJets fj(fs, FastJets::ANTIKT, 0.6); fj.useInvisibles(); addProjection(fj, "Jets"); // Specify pT bins _ptedges += 30.0, 40.0, 60.0, 80.0, 110.0, 160.0, 210.0, 260.0, 310.0, 400.0, 500.0, 600.0; _yedges += 0.0, 0.3, 0.8, 1.2, 2.1, 2.8; // Register a jet shape projection and histogram for each pT bin for (size_t i = 0; i < 11; ++i) { for (size_t j = 0; j < 6; ++j) { if (i==8 && j==4) continue; if (i==9 && j==4) continue; if (i==10 && j!=5) continue; stringstream ss; ss << "JetShape" << i << j; const string pname = ss.str(); _jsnames_pT[i][j] = pname; if (j < 5) { const JetShape jsp(fj, 0.0, 0.7, 7, _ptedges[i], _ptedges[i+1], _yedges[j], _yedges[j+1], RAPIDITY); addProjection(jsp, pname); } else { const JetShape jsp(fj, 0.0, 0.7, 7, _ptedges[i], _ptedges[i+1], _yedges.front(), _yedges.back(), RAPIDITY); addProjection(jsp, pname); } _profhistRho_pT[i][j] = bookProfile1D(i+1, j+1, 1); _profhistPsi_pT[i][j] = bookProfile1D(i+1, j+1, 2); } } } /// Do the analysis void analyze(const Event& evt) { // Get jets and require at least one to pass pT and y cuts const Jets jets = applyProjection(evt, "Jets").jetsByPt(_ptedges.front()*GeV, _ptedges.back()*GeV, -2.8, 2.8, RAPIDITY); MSG_DEBUG("Jet multiplicity before cuts = " << jets.size()); if (jets.size() == 0) { MSG_DEBUG("No jets found in required pT & rapidity range"); vetoEvent; } // Calculate and histogram jet shapes const double weight = evt.weight(); for (size_t ipt = 0; ipt < 11; ++ipt) { for (size_t jy = 0; jy < 6; ++jy) { if (ipt==8 && jy==4) continue; if (ipt==9 && jy==4) continue; if (ipt==10 && jy!=5) continue; const JetShape& jsipt = applyProjection(evt, _jsnames_pT[ipt][jy]); for (size_t ijet = 0; ijet < jsipt.numJets(); ++ijet) { for (size_t rbin = 0; rbin < jsipt.numBins(); ++rbin) { const double r_rho = jsipt.rBinMid(rbin); _profhistRho_pT[ipt][jy]->fill(r_rho, (1./0.1)*jsipt.diffJetShape(ijet, rbin), weight); const double r_Psi = jsipt.rBinMid(rbin); _profhistPsi_pT[ipt][jy]->fill(r_Psi, jsipt.intJetShape(ijet, rbin), weight); } } } } } // Finalize void finalize() { } //@} private: /// @name Analysis data //@{ /// Jet \f$ p_\perp\f$ bins. vector _ptedges; // This can't be a raw array if we want to initialise it non-painfully vector _yedges; /// JetShape projection name for each \f$p_\perp\f$ bin. string _jsnames_pT[11][6]; //@} /// @name Histograms //@{ AIDA::IProfile1D* _profhistRho_pT[11][6]; AIDA::IProfile1D* _profhistPsi_pT[11][6]; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_S8924791); } rivet-1.8.3/src/Analyses/OPAL_2000_S4418603.cc0000644000175000017500000000444612116077757016202 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief OPAL K0 fragmentation function paper /// @author Peter Richardson class OPAL_2000_S4418603 : public Analysis { public: /// Constructor OPAL_2000_S4418603() : Analysis("OPAL_2000_S4418603") {} /// @name Analysis methods //@{ void init() { addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "FS"); addProjection(UnstableFinalState(), "UFS"); _histXeK0 = bookHistogram1D( 3, 1, 1); } void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed leptonic event cut"); vetoEvent; } MSG_DEBUG("Passed leptonic event cut"); // Get event weight for histo filling const double weight = e.weight(); // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); // Final state of unstable particles to get particle spectra const UnstableFinalState& ufs = applyProjection(e, "UFS"); foreach (const Particle& p, ufs.particles()) { const int id = abs(p.pdgId()); if(id==K0S || id == K0L) { double xE = p.momentum().t()/meanBeamMom; _histXeK0->fill(xE, weight); } } } /// Finalize void finalize() { scale(_histXeK0, 1./sumOfWeights()); } //@} private: AIDA::IHistogram1D *_histXeK0; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(OPAL_2000_S4418603); } rivet-1.8.3/src/Analyses/JADE_OPAL_2000_S4300807.cc0000644000175000017500000001477412116077757016766 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { /// @brief Jet rates in \f$ e^+ e^- \f$ at OPAL and JADE /// @author Frank Siegert class JADE_OPAL_2000_S4300807 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor JADE_OPAL_2000_S4300807() : Analysis("JADE_OPAL_2000_S4300807") { } //@} /// @name Analysis methods //@{ void init() { // Projections const FinalState fs; addProjection(fs, "FS"); FastJets JadeJets = FastJets(fs, FastJets::JADE, 0.7); FastJets DurhamJets = FastJets(fs, FastJets::DURHAM, 0.7); JadeJets.useInvisibles(true); DurhamJets.useInvisibles(true); addProjection(JadeJets, "JadeJets"); addProjection(DurhamJets, "DurhamJets"); // Histos int offset = 0; switch (int(sqrtS()/GeV + 0.5)) { case 35: offset = 7; break; case 44: offset = 8; break; case 91: offset = 9; break; case 133: offset = 10; break; case 161: offset = 11; break; case 172: offset = 12; break; case 183: offset = 13; break; case 189: offset = 14; break; default: break; } for (size_t i = 0; i < 5; ++i) { _h_R_Jade[i] = bookDataPointSet(offset, 1, i+1); _h_R_Durham[i] = bookDataPointSet(offset+9, 1, i+1); if (i < 4) _h_y_Durham[i] = bookHistogram1D(offset+17, 1, i+1); } } void analyze(const Event& e) { const double weight = e.weight(); MSG_DEBUG("Num particles = " << applyProjection(e, "FS").particles().size()); const FastJets& jadejet = applyProjection(e, "JadeJets"); if (jadejet.clusterSeq()) { /// @todo Put this in an index loop? double y_23 = jadejet.clusterSeq()->exclusive_ymerge_max(2); double y_34 = jadejet.clusterSeq()->exclusive_ymerge_max(3); double y_45 = jadejet.clusterSeq()->exclusive_ymerge_max(4); double y_56 = jadejet.clusterSeq()->exclusive_ymerge_max(5); for (int i = 0; i < _h_R_Jade[0]->size(); ++i) { IDataPoint* dp = _h_R_Jade[0]->point(i); if (y_23 < dp->coordinate(0)->value()) { dp->coordinate(1)->setValue(dp->coordinate(1)->value() + weight); } } for (int i = 0; i < _h_R_Jade[1]->size(); ++i) { IDataPoint* dp = _h_R_Jade[1]->point(i); double ycut = dp->coordinate(0)->value(); if (y_34 < ycut && y_23 > ycut) { dp->coordinate(1)->setValue(dp->coordinate(1)->value() + weight); } } for (int i = 0; i < _h_R_Jade[2]->size(); ++i) { IDataPoint* dp = _h_R_Jade[2]->point(i); double ycut = dp->coordinate(0)->value(); if (y_45 < ycut && y_34 > ycut) { dp->coordinate(1)->setValue(dp->coordinate(1)->value() + weight); } } for (int i = 0; i < _h_R_Jade[3]->size(); ++i) { IDataPoint* dp = _h_R_Jade[3]->point(i); double ycut = dp->coordinate(0)->value(); if (y_56 < ycut && y_45 > ycut) { dp->coordinate(1)->setValue(dp->coordinate(1)->value() + weight); } } for (int i = 0; i < _h_R_Jade[4]->size(); ++i) { IDataPoint* dp = _h_R_Jade[4]->point(i); double ycut = dp->coordinate(0)->value(); if (y_56 > ycut) { dp->coordinate(1)->setValue(dp->coordinate(1)->value() + weight); } } } const FastJets& durjet = applyProjection(e, "DurhamJets"); if (durjet.clusterSeq()) { /// @todo Put this in an index loop? double y_23 = durjet.clusterSeq()->exclusive_ymerge_max(2); double y_34 = durjet.clusterSeq()->exclusive_ymerge_max(3); double y_45 = durjet.clusterSeq()->exclusive_ymerge_max(4); double y_56 = durjet.clusterSeq()->exclusive_ymerge_max(5); _h_y_Durham[0]->fill(y_23, weight); _h_y_Durham[1]->fill(y_34, weight); _h_y_Durham[2]->fill(y_45, weight); _h_y_Durham[3]->fill(y_56, weight); for (int i = 0; i < _h_R_Durham[0]->size(); ++i) { IDataPoint* dp = _h_R_Durham[0]->point(i); if (y_23 < dp->coordinate(0)->value()) { dp->coordinate(1)->setValue(dp->coordinate(1)->value() + weight); } } for (int i = 0; i < _h_R_Durham[1]->size(); ++i) { IDataPoint* dp = _h_R_Durham[1]->point(i); double ycut = dp->coordinate(0)->value(); if (y_34 < ycut && y_23 > ycut) { dp->coordinate(1)->setValue(dp->coordinate(1)->value() + weight); } } for (int i = 0; i < _h_R_Durham[2]->size(); ++i) { IDataPoint* dp = _h_R_Durham[2]->point(i); double ycut = dp->coordinate(0)->value(); if (y_45 < ycut && y_34 > ycut) { dp->coordinate(1)->setValue(dp->coordinate(1)->value() + weight); } } for (int i = 0; i < _h_R_Durham[3]->size(); ++i) { IDataPoint* dp = _h_R_Durham[3]->point(i); double ycut = dp->coordinate(0)->value(); if (y_56 < ycut && y_45 > ycut) { dp->coordinate(1)->setValue(dp->coordinate(1)->value() + weight); } } for (int i = 0; i < _h_R_Durham[4]->size(); ++i) { IDataPoint* dp = _h_R_Durham[4]->point(i); double ycut = dp->coordinate(0)->value(); if (y_56 > ycut) { dp->coordinate(1)->setValue(dp->coordinate(1)->value() + weight); } } } } /// Finalize void finalize() { for (size_t n = 0; n < 4; ++n) { scale(_h_y_Durham[n], 1.0/sumOfWeights()); } for (size_t n = 0; n < 5; ++n) { // Scale integrated jet rates to 100% for (int i = 0; i < _h_R_Jade[n]->size(); ++i) { IDataPoint* dp = _h_R_Jade[n]->point(i); dp->coordinate(1)->setValue(dp->coordinate(1)->value()*100.0/sumOfWeights()); } for (int i = 0; i < _h_R_Durham[n]->size(); ++i) { IDataPoint* dp = _h_R_Durham[n]->point(i); dp->coordinate(1)->setValue(dp->coordinate(1)->value()*100.0/sumOfWeights()); } } } //@} private: /// @name Histograms //@{ AIDA::IDataPointSet *_h_R_Jade[5]; AIDA::IDataPointSet *_h_R_Durham[5]; AIDA::IHistogram1D *_h_y_Durham[4]; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(JADE_OPAL_2000_S4300807); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1118269.cc0000644000175000017500000000413512116077757016301 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Particle.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { class ATLAS_2012_I1118269 : public Analysis { public: ATLAS_2012_I1118269() : Analysis("ATLAS_2012_I1118269") { } void init() { _h_sigma_vs_pt = bookHistogram1D(1, 1, 1); _h_sigma_vs_eta = bookHistogram1D(2, 1, 1); } /// Perform the per-event analysis void analyze(const Event& event) { double weight = event.weight(); ParticleVector bhadrons; foreach (const GenParticle* p, particles(event.genEvent())) { if (!( PID::isHadron( p->pdg_id() ) && PID::hasBottom( p->pdg_id() )) ) continue; const GenVertex* dv = p->end_vertex(); /// @todo In future, convert to use built-in 'last B hadron' function bool hasBdaughter = false; if ( PID::isHadron( p->pdg_id() ) && PID::hasBottom( p->pdg_id() )) { // b-hadron selection if (dv) { for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin() ; pp != dv->particles_out_const_end() ; ++pp) { if ( PID::isHadron( (*pp)->pdg_id() ) && PID::hasBottom( (*pp)->pdg_id()) ) { hasBdaughter = true; } } } } if (hasBdaughter) continue; bhadrons += Particle(*p); } foreach (const Particle& particle, bhadrons) { double eta = particle.momentum().eta(); double pt = particle.momentum().pT(); if (!(inRange(eta, -2.5, 2.5))) continue; if (pt < 9.*GeV) continue; _h_sigma_vs_pt->fill(pt, weight); _h_sigma_vs_eta->fill(fabs(eta), weight); } } void finalize() { scale(_h_sigma_vs_pt, crossSection()/nanobarn/sumOfWeights()); scale(_h_sigma_vs_eta, crossSection()/microbarn/sumOfWeights()); } private: AIDA::IHistogram1D *_h_sigma_vs_pt; AIDA::IHistogram1D *_h_sigma_vs_eta; }; // Hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I1118269); } rivet-1.8.3/src/Analyses/PDG_HADRON_MULTIPLICITIES.cc0000644000175000017500000011252512116077757017635 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief Implementation of PDG hadron multiplicities /// @author Hendrik Hoeth class PDG_HADRON_MULTIPLICITIES : public Analysis { public: /// Constructor PDG_HADRON_MULTIPLICITIES() : Analysis("PDG_HADRON_MULTIPLICITIES") { } /// @name Analysis methods //@{ void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed leptonic event cut"); vetoEvent; } MSG_DEBUG("Passed leptonic event cut"); // Get event weight for histo filling const double weight = e.weight(); MSG_DEBUG("sqrt(s) = " << sqrtS()/GeV << " GeV"); // Final state of unstable particles to get particle spectra const UnstableFinalState& ufs = applyProjection(e, "UFS"); if (sqrtS()/GeV >= 9.5 && sqrtS()/GeV <= 10.5) { foreach (const Particle& p, ufs.particles()) { const PdgId id = abs(p.pdgId()); switch (id) { case 211: _histMeanMultiPiPlus->fill(_histMeanMultiPiPlus->binMean(0), weight); break; case 111: _histMeanMultiPi0->fill(_histMeanMultiPi0->binMean(0), weight); break; case 321: _histMeanMultiKPlus->fill(_histMeanMultiKPlus->binMean(0), weight); break; case 130: case 310: _histMeanMultiK0->fill(_histMeanMultiK0->binMean(0), weight); break; case 221: _histMeanMultiEta->fill(_histMeanMultiEta->binMean(0), weight); break; case 331: _histMeanMultiEtaPrime->fill(_histMeanMultiEtaPrime->binMean(0), weight); break; case 411: _histMeanMultiDPlus->fill(_histMeanMultiDPlus->binMean(0), weight); break; case 421: _histMeanMultiD0->fill(_histMeanMultiD0->binMean(0), weight); break; case 431: _histMeanMultiDPlus_s->fill(_histMeanMultiDPlus_s->binMean(0), weight); break; case 9010221: _histMeanMultiF0_980->fill(_histMeanMultiF0_980->binMean(0), weight); break; case 113: _histMeanMultiRho770_0->fill(_histMeanMultiRho770_0->binMean(0), weight); break; case 223: _histMeanMultiOmega782->fill(_histMeanMultiOmega782->binMean(0), weight); break; case 323: _histMeanMultiKStar892Plus->fill(_histMeanMultiKStar892Plus->binMean(0), weight); break; case 313: _histMeanMultiKStar892_0->fill(_histMeanMultiKStar892_0->binMean(0), weight); break; case 333: _histMeanMultiPhi1020->fill(_histMeanMultiPhi1020->binMean(0), weight); break; case 413: _histMeanMultiDStar2010Plus->fill(_histMeanMultiDStar2010Plus->binMean(0), weight); break; case 423: _histMeanMultiDStar2007_0->fill(_histMeanMultiDStar2007_0->binMean(0), weight); break; case 433: _histMeanMultiDStar_s2112Plus->fill(_histMeanMultiDStar_s2112Plus->binMean(0), weight); break; case 443: _histMeanMultiJPsi1S->fill(_histMeanMultiJPsi1S->binMean(0), weight); break; case 225: _histMeanMultiF2_1270->fill(_histMeanMultiF2_1270->binMean(0), weight); break; case 2212: _histMeanMultiP->fill(_histMeanMultiP->binMean(0), weight); break; case 3122: _histMeanMultiLambda->fill(_histMeanMultiLambda->binMean(0), weight); break; case 3212: _histMeanMultiSigma0->fill(_histMeanMultiSigma0->binMean(0), weight); break; case 3312: _histMeanMultiXiMinus->fill(_histMeanMultiXiMinus->binMean(0), weight); break; case 2224: _histMeanMultiDelta1232PlusPlus->fill(_histMeanMultiDelta1232PlusPlus->binMean(0), weight); break; case 3114: _histMeanMultiSigma1385Minus->fill(_histMeanMultiSigma1385Minus->binMean(0), weight); _histMeanMultiSigma1385PlusMinus->fill(_histMeanMultiSigma1385PlusMinus->binMean(0), weight); break; case 3224: _histMeanMultiSigma1385Plus->fill(_histMeanMultiSigma1385Plus->binMean(0), weight); _histMeanMultiSigma1385PlusMinus->fill(_histMeanMultiSigma1385PlusMinus->binMean(0), weight); break; case 3324: _histMeanMultiXi1530_0->fill(_histMeanMultiXi1530_0->binMean(0), weight); break; case 3334: _histMeanMultiOmegaMinus->fill(_histMeanMultiOmegaMinus->binMean(0), weight); break; case 4122: _histMeanMultiLambda_c_Plus->fill(_histMeanMultiLambda_c_Plus->binMean(0), weight); break; case 4222: case 4112: _histMeanMultiSigma_c_PlusPlus_0->fill(_histMeanMultiSigma_c_PlusPlus_0->binMean(0), weight); break; case 3124: _histMeanMultiLambda1520->fill(_histMeanMultiLambda1520->binMean(0), weight); break; } } } if (sqrtS()/GeV >= 29 && sqrtS()/GeV <= 35) { foreach (const Particle& p, ufs.particles()) { const PdgId id = abs(p.pdgId()); switch (id) { case 211: _histMeanMultiPiPlus->fill(_histMeanMultiPiPlus->binMean(0), weight); break; case 111: _histMeanMultiPi0->fill(_histMeanMultiPi0->binMean(0), weight); break; case 321: _histMeanMultiKPlus->fill(_histMeanMultiKPlus->binMean(0), weight); break; case 130: case 310: _histMeanMultiK0->fill(_histMeanMultiK0->binMean(0), weight); break; case 221: _histMeanMultiEta->fill(_histMeanMultiEta->binMean(0), weight); break; case 331: _histMeanMultiEtaPrime->fill(_histMeanMultiEtaPrime->binMean(0), weight); break; case 411: _histMeanMultiDPlus->fill(_histMeanMultiDPlus->binMean(0), weight); break; case 421: _histMeanMultiD0->fill(_histMeanMultiD0->binMean(0), weight); break; case 431: _histMeanMultiDPlus_s->fill(_histMeanMultiDPlus_s->binMean(0), weight); break; case 9010221: _histMeanMultiF0_980->fill(_histMeanMultiF0_980->binMean(0), weight); break; case 113: _histMeanMultiRho770_0->fill(_histMeanMultiRho770_0->binMean(0), weight); break; case 323: _histMeanMultiKStar892Plus->fill(_histMeanMultiKStar892Plus->binMean(0), weight); break; case 313: _histMeanMultiKStar892_0->fill(_histMeanMultiKStar892_0->binMean(0), weight); break; case 333: _histMeanMultiPhi1020->fill(_histMeanMultiPhi1020->binMean(0), weight); break; case 413: _histMeanMultiDStar2010Plus->fill(_histMeanMultiDStar2010Plus->binMean(0), weight); break; case 423: _histMeanMultiDStar2007_0->fill(_histMeanMultiDStar2007_0->binMean(0), weight); break; case 225: _histMeanMultiF2_1270->fill(_histMeanMultiF2_1270->binMean(0), weight); break; case 325: _histMeanMultiK2Star1430Plus->fill(_histMeanMultiK2Star1430Plus->binMean(0), weight); break; case 315: _histMeanMultiK2Star1430_0->fill(_histMeanMultiK2Star1430_0->binMean(0), weight); break; case 2212: _histMeanMultiP->fill(_histMeanMultiP->binMean(0), weight); break; case 3122: _histMeanMultiLambda->fill(_histMeanMultiLambda->binMean(0), weight); break; case 3312: _histMeanMultiXiMinus->fill(_histMeanMultiXiMinus->binMean(0), weight); break; case 3114: _histMeanMultiSigma1385Minus->fill(_histMeanMultiSigma1385Minus->binMean(0), weight); _histMeanMultiSigma1385PlusMinus->fill(_histMeanMultiSigma1385PlusMinus->binMean(0), weight); break; case 3224: _histMeanMultiSigma1385Plus->fill(_histMeanMultiSigma1385Plus->binMean(0), weight); _histMeanMultiSigma1385PlusMinus->fill(_histMeanMultiSigma1385PlusMinus->binMean(0), weight); break; case 3334: _histMeanMultiOmegaMinus->fill(_histMeanMultiOmegaMinus->binMean(0), weight); break; case 4122: _histMeanMultiLambda_c_Plus->fill(_histMeanMultiLambda_c_Plus->binMean(0), weight); break; } } } if (sqrtS()/GeV >= 89.5 && sqrtS()/GeV <= 91.8) { foreach (const Particle& p, ufs.particles()) { const PdgId id = abs(p.pdgId()); switch (id) { case 211: _histMeanMultiPiPlus->fill(_histMeanMultiPiPlus->binMean(0), weight); break; case 111: _histMeanMultiPi0->fill(_histMeanMultiPi0->binMean(0), weight); break; case 321: _histMeanMultiKPlus->fill(_histMeanMultiKPlus->binMean(0), weight); break; case 130: case 310: _histMeanMultiK0->fill(_histMeanMultiK0->binMean(0), weight); break; case 221: _histMeanMultiEta->fill(_histMeanMultiEta->binMean(0), weight); break; case 331: _histMeanMultiEtaPrime->fill(_histMeanMultiEtaPrime->binMean(0), weight); break; case 411: _histMeanMultiDPlus->fill(_histMeanMultiDPlus->binMean(0), weight); break; case 421: _histMeanMultiD0->fill(_histMeanMultiD0->binMean(0), weight); break; case 431: _histMeanMultiDPlus_s->fill(_histMeanMultiDPlus_s->binMean(0), weight); break; case 511: _histMeanMultiBPlus_B0_d->fill(_histMeanMultiBPlus_B0_d->binMean(0), weight); break; case 521: _histMeanMultiBPlus_B0_d->fill(_histMeanMultiBPlus_B0_d->binMean(0), weight); _histMeanMultiBPlus_u->fill(_histMeanMultiBPlus_u->binMean(0), weight); break; case 531: _histMeanMultiB0_s->fill(_histMeanMultiB0_s->binMean(0), weight); break; case 9010221: _histMeanMultiF0_980->fill(_histMeanMultiF0_980->binMean(0), weight); break; case 9000211: _histMeanMultiA0_980Plus->fill(_histMeanMultiA0_980Plus->binMean(0), weight); break; case 113: _histMeanMultiRho770_0->fill(_histMeanMultiRho770_0->binMean(0), weight); break; case 213: _histMeanMultiRho770Plus->fill(_histMeanMultiRho770Plus->binMean(0), weight); break; case 223: _histMeanMultiOmega782->fill(_histMeanMultiOmega782->binMean(0), weight); break; case 323: _histMeanMultiKStar892Plus->fill(_histMeanMultiKStar892Plus->binMean(0), weight); break; case 313: _histMeanMultiKStar892_0->fill(_histMeanMultiKStar892_0->binMean(0), weight); break; case 333: _histMeanMultiPhi1020->fill(_histMeanMultiPhi1020->binMean(0), weight); break; case 413: _histMeanMultiDStar2010Plus->fill(_histMeanMultiDStar2010Plus->binMean(0), weight); break; case 433: _histMeanMultiDStar_s2112Plus->fill(_histMeanMultiDStar_s2112Plus->binMean(0), weight); break; case 513: case 523: case 533: _histMeanMultiBStar->fill(_histMeanMultiBStar->binMean(0), weight); break; case 443: _histMeanMultiJPsi1S->fill(_histMeanMultiJPsi1S->binMean(0), weight); break; case 100443: _histMeanMultiPsi2S->fill(_histMeanMultiPsi2S->binMean(0), weight); break; case 553: _histMeanMultiUpsilon1S->fill(_histMeanMultiUpsilon1S->binMean(0), weight); break; case 20223: _histMeanMultiF1_1285->fill(_histMeanMultiF1_1285->binMean(0), weight); break; case 20333: _histMeanMultiF1_1420->fill(_histMeanMultiF1_1420->binMean(0), weight); break; case 445: _histMeanMultiChi_c1_3510->fill(_histMeanMultiChi_c1_3510->binMean(0), weight); break; case 225: _histMeanMultiF2_1270->fill(_histMeanMultiF2_1270->binMean(0), weight); break; case 335: _histMeanMultiF2Prime1525->fill(_histMeanMultiF2Prime1525->binMean(0), weight); break; case 315: _histMeanMultiK2Star1430_0->fill(_histMeanMultiK2Star1430_0->binMean(0), weight); break; case 515: case 525: case 535: _histMeanMultiBStarStar->fill(_histMeanMultiBStarStar->binMean(0), weight); break; case 10433: case 20433: _histMeanMultiDs1Plus->fill(_histMeanMultiDs1Plus->binMean(0), weight); break; case 435: _histMeanMultiDs2Plus->fill(_histMeanMultiDs2Plus->binMean(0), weight); break; case 2212: _histMeanMultiP->fill(_histMeanMultiP->binMean(0), weight); break; case 3122: _histMeanMultiLambda->fill(_histMeanMultiLambda->binMean(0), weight); break; case 3212: _histMeanMultiSigma0->fill(_histMeanMultiSigma0->binMean(0), weight); break; case 3112: _histMeanMultiSigmaMinus->fill(_histMeanMultiSigmaMinus->binMean(0), weight); _histMeanMultiSigmaPlusMinus->fill(_histMeanMultiSigmaPlusMinus->binMean(0), weight); break; case 3222: _histMeanMultiSigmaPlus->fill(_histMeanMultiSigmaPlus->binMean(0), weight); _histMeanMultiSigmaPlusMinus->fill(_histMeanMultiSigmaPlusMinus->binMean(0), weight); break; case 3312: _histMeanMultiXiMinus->fill(_histMeanMultiXiMinus->binMean(0), weight); break; case 2224: _histMeanMultiDelta1232PlusPlus->fill(_histMeanMultiDelta1232PlusPlus->binMean(0), weight); break; case 3114: _histMeanMultiSigma1385Minus->fill(_histMeanMultiSigma1385Minus->binMean(0), weight); _histMeanMultiSigma1385PlusMinus->fill(_histMeanMultiSigma1385PlusMinus->binMean(0), weight); break; case 3224: _histMeanMultiSigma1385Plus->fill(_histMeanMultiSigma1385Plus->binMean(0), weight); _histMeanMultiSigma1385PlusMinus->fill(_histMeanMultiSigma1385PlusMinus->binMean(0), weight); break; case 3324: _histMeanMultiXi1530_0->fill(_histMeanMultiXi1530_0->binMean(0), weight); break; case 3334: _histMeanMultiOmegaMinus->fill(_histMeanMultiOmegaMinus->binMean(0), weight); break; case 4122: _histMeanMultiLambda_c_Plus->fill(_histMeanMultiLambda_c_Plus->binMean(0), weight); break; case 5122: _histMeanMultiLambda_b_0->fill(_histMeanMultiLambda_b_0->binMean(0), weight); break; case 3124: _histMeanMultiLambda1520->fill(_histMeanMultiLambda1520->binMean(0), weight); break; } } } if (sqrtS()/GeV >= 130 && sqrtS()/GeV <= 200) { foreach (const Particle& p, ufs.particles()) { const PdgId id = abs(p.pdgId()); switch (id) { case 211: _histMeanMultiPiPlus->fill(_histMeanMultiPiPlus->binMean(0), weight); break; case 321: _histMeanMultiKPlus->fill(_histMeanMultiKPlus->binMean(0), weight); break; case 130: case 310: _histMeanMultiK0->fill(_histMeanMultiK0->binMean(0), weight); break; case 2212: _histMeanMultiP->fill(_histMeanMultiP->binMean(0), weight); break; case 3122: _histMeanMultiLambda->fill(_histMeanMultiLambda->binMean(0), weight); break; } } } } void init() { addProjection(ChargedFinalState(), "FS"); addProjection(UnstableFinalState(), "UFS"); if (sqrtS()/GeV >= 9.5 && sqrtS()/GeV <= 10.5) { _histMeanMultiPiPlus = bookHistogram1D( 1, 1, 1); _histMeanMultiPi0 = bookHistogram1D( 2, 1, 1); _histMeanMultiKPlus = bookHistogram1D( 3, 1, 1); _histMeanMultiK0 = bookHistogram1D( 4, 1, 1); _histMeanMultiEta = bookHistogram1D( 5, 1, 1); _histMeanMultiEtaPrime = bookHistogram1D( 6, 1, 1); _histMeanMultiDPlus = bookHistogram1D( 7, 1, 1); _histMeanMultiD0 = bookHistogram1D( 8, 1, 1); _histMeanMultiDPlus_s = bookHistogram1D( 9, 1, 1); _histMeanMultiF0_980 = bookHistogram1D(13, 1, 1); _histMeanMultiRho770_0 = bookHistogram1D(15, 1, 1); _histMeanMultiOmega782 = bookHistogram1D(17, 1, 1); _histMeanMultiKStar892Plus = bookHistogram1D(18, 1, 1); _histMeanMultiKStar892_0 = bookHistogram1D(19, 1, 1); _histMeanMultiPhi1020 = bookHistogram1D(20, 1, 1); _histMeanMultiDStar2010Plus = bookHistogram1D(21, 1, 1); _histMeanMultiDStar2007_0 = bookHistogram1D(22, 1, 1); _histMeanMultiDStar_s2112Plus = bookHistogram1D(23, 1, 1); _histMeanMultiJPsi1S = bookHistogram1D(25, 1, 1); _histMeanMultiF2_1270 = bookHistogram1D(31, 1, 1); _histMeanMultiP = bookHistogram1D(38, 1, 1); _histMeanMultiLambda = bookHistogram1D(39, 1, 1); _histMeanMultiSigma0 = bookHistogram1D(40, 1, 1); _histMeanMultiXiMinus = bookHistogram1D(44, 1, 1); _histMeanMultiDelta1232PlusPlus = bookHistogram1D(45, 1, 1); _histMeanMultiSigma1385Minus = bookHistogram1D(46, 1, 1); _histMeanMultiSigma1385Plus = bookHistogram1D(47, 1, 1); _histMeanMultiSigma1385PlusMinus = bookHistogram1D(48, 1, 1); _histMeanMultiXi1530_0 = bookHistogram1D(49, 1, 1); _histMeanMultiOmegaMinus = bookHistogram1D(50, 1, 1); _histMeanMultiLambda_c_Plus = bookHistogram1D(51, 1, 1); _histMeanMultiSigma_c_PlusPlus_0 = bookHistogram1D(53, 1, 1); _histMeanMultiLambda1520 = bookHistogram1D(54, 1, 1); } if (sqrtS()/GeV >= 29 && sqrtS()/GeV <= 35) { _histMeanMultiPiPlus = bookHistogram1D( 1, 1, 2); _histMeanMultiPi0 = bookHistogram1D( 2, 1, 2); _histMeanMultiKPlus = bookHistogram1D( 3, 1, 2); _histMeanMultiK0 = bookHistogram1D( 4, 1, 2); _histMeanMultiEta = bookHistogram1D( 5, 1, 2); _histMeanMultiEtaPrime = bookHistogram1D( 6, 1, 2); _histMeanMultiDPlus = bookHistogram1D( 7, 1, 2); _histMeanMultiD0 = bookHistogram1D( 8, 1, 2); _histMeanMultiDPlus_s = bookHistogram1D( 9, 1, 2); _histMeanMultiF0_980 = bookHistogram1D(13, 1, 2); _histMeanMultiRho770_0 = bookHistogram1D(15, 1, 2); _histMeanMultiKStar892Plus = bookHistogram1D(18, 1, 2); _histMeanMultiKStar892_0 = bookHistogram1D(19, 1, 2); _histMeanMultiPhi1020 = bookHistogram1D(20, 1, 2); _histMeanMultiDStar2010Plus = bookHistogram1D(21, 1, 2); _histMeanMultiDStar2007_0 = bookHistogram1D(22, 1, 2); _histMeanMultiF2_1270 = bookHistogram1D(31, 1, 2); _histMeanMultiK2Star1430Plus = bookHistogram1D(33, 1, 1); _histMeanMultiK2Star1430_0 = bookHistogram1D(34, 1, 1); _histMeanMultiP = bookHistogram1D(38, 1, 2); _histMeanMultiLambda = bookHistogram1D(39, 1, 2); _histMeanMultiXiMinus = bookHistogram1D(44, 1, 2); _histMeanMultiSigma1385Minus = bookHistogram1D(46, 1, 2); _histMeanMultiSigma1385Plus = bookHistogram1D(47, 1, 2); _histMeanMultiSigma1385PlusMinus = bookHistogram1D(48, 1, 2); _histMeanMultiOmegaMinus = bookHistogram1D(50, 1, 2); _histMeanMultiLambda_c_Plus = bookHistogram1D(51, 1, 2); } if (sqrtS()/GeV >= 89.5 && sqrtS()/GeV <= 91.8) { _histMeanMultiPiPlus = bookHistogram1D( 1, 1, 3); _histMeanMultiPi0 = bookHistogram1D( 2, 1, 3); _histMeanMultiKPlus = bookHistogram1D( 3, 1, 3); _histMeanMultiK0 = bookHistogram1D( 4, 1, 3); _histMeanMultiEta = bookHistogram1D( 5, 1, 3); _histMeanMultiEtaPrime = bookHistogram1D( 6, 1, 3); _histMeanMultiDPlus = bookHistogram1D( 7, 1, 3); _histMeanMultiD0 = bookHistogram1D( 8, 1, 3); _histMeanMultiDPlus_s = bookHistogram1D( 9, 1, 3); _histMeanMultiBPlus_B0_d = bookHistogram1D(10, 1, 1); _histMeanMultiBPlus_u = bookHistogram1D(11, 1, 1); _histMeanMultiB0_s = bookHistogram1D(12, 1, 1); _histMeanMultiF0_980 = bookHistogram1D(13, 1, 3); _histMeanMultiA0_980Plus = bookHistogram1D(14, 1, 1); _histMeanMultiRho770_0 = bookHistogram1D(15, 1, 3); _histMeanMultiRho770Plus = bookHistogram1D(16, 1, 1); _histMeanMultiOmega782 = bookHistogram1D(17, 1, 2); _histMeanMultiKStar892Plus = bookHistogram1D(18, 1, 3); _histMeanMultiKStar892_0 = bookHistogram1D(19, 1, 3); _histMeanMultiPhi1020 = bookHistogram1D(20, 1, 3); _histMeanMultiDStar2010Plus = bookHistogram1D(21, 1, 3); _histMeanMultiDStar_s2112Plus = bookHistogram1D(23, 1, 2); _histMeanMultiBStar = bookHistogram1D(24, 1, 1); _histMeanMultiJPsi1S = bookHistogram1D(25, 1, 2); _histMeanMultiPsi2S = bookHistogram1D(26, 1, 1); _histMeanMultiUpsilon1S = bookHistogram1D(27, 1, 1); _histMeanMultiF1_1285 = bookHistogram1D(28, 1, 1); _histMeanMultiF1_1420 = bookHistogram1D(29, 1, 1); _histMeanMultiChi_c1_3510 = bookHistogram1D(30, 1, 1); _histMeanMultiF2_1270 = bookHistogram1D(31, 1, 3); _histMeanMultiF2Prime1525 = bookHistogram1D(32, 1, 1); _histMeanMultiK2Star1430_0 = bookHistogram1D(34, 1, 2); _histMeanMultiBStarStar = bookHistogram1D(35, 1, 1); _histMeanMultiDs1Plus = bookHistogram1D(36, 1, 1); _histMeanMultiDs2Plus = bookHistogram1D(37, 1, 1); _histMeanMultiP = bookHistogram1D(38, 1, 3); _histMeanMultiLambda = bookHistogram1D(39, 1, 3); _histMeanMultiSigma0 = bookHistogram1D(40, 1, 2); _histMeanMultiSigmaMinus = bookHistogram1D(41, 1, 1); _histMeanMultiSigmaPlus = bookHistogram1D(42, 1, 1); _histMeanMultiSigmaPlusMinus = bookHistogram1D(43, 1, 1); _histMeanMultiXiMinus = bookHistogram1D(44, 1, 3); _histMeanMultiDelta1232PlusPlus = bookHistogram1D(45, 1, 2); _histMeanMultiSigma1385Minus = bookHistogram1D(46, 1, 3); _histMeanMultiSigma1385Plus = bookHistogram1D(47, 1, 3); _histMeanMultiSigma1385PlusMinus = bookHistogram1D(48, 1, 3); _histMeanMultiXi1530_0 = bookHistogram1D(49, 1, 2); _histMeanMultiOmegaMinus = bookHistogram1D(50, 1, 3); _histMeanMultiLambda_c_Plus = bookHistogram1D(51, 1, 3); _histMeanMultiLambda_b_0 = bookHistogram1D(52, 1, 1); _histMeanMultiLambda1520 = bookHistogram1D(54, 1, 2); } if (sqrtS()/GeV >= 130 && sqrtS()/GeV <= 200) { _histMeanMultiPiPlus = bookHistogram1D( 1, 1, 4); _histMeanMultiKPlus = bookHistogram1D( 3, 1, 4); _histMeanMultiK0 = bookHistogram1D( 4, 1, 4); _histMeanMultiP = bookHistogram1D(38, 1, 4); _histMeanMultiLambda = bookHistogram1D(39, 1, 4); } } // Finalize void finalize() { if (sqrtS()/GeV >= 9.5 && sqrtS()/GeV <= 10.5) { scale(_histMeanMultiPiPlus , 1.0/sumOfWeights()); scale(_histMeanMultiPi0 , 1.0/sumOfWeights()); scale(_histMeanMultiKPlus , 1.0/sumOfWeights()); scale(_histMeanMultiK0 , 1.0/sumOfWeights()); scale(_histMeanMultiEta , 1.0/sumOfWeights()); scale(_histMeanMultiEtaPrime , 1.0/sumOfWeights()); scale(_histMeanMultiDPlus , 1.0/sumOfWeights()); scale(_histMeanMultiD0 , 1.0/sumOfWeights()); scale(_histMeanMultiDPlus_s , 1.0/sumOfWeights()); scale(_histMeanMultiF0_980 , 1.0/sumOfWeights()); scale(_histMeanMultiRho770_0 , 1.0/sumOfWeights()); scale(_histMeanMultiOmega782 , 1.0/sumOfWeights()); scale(_histMeanMultiKStar892Plus , 1.0/sumOfWeights()); scale(_histMeanMultiKStar892_0 , 1.0/sumOfWeights()); scale(_histMeanMultiPhi1020 , 1.0/sumOfWeights()); scale(_histMeanMultiDStar2010Plus , 1.0/sumOfWeights()); scale(_histMeanMultiDStar2007_0 , 1.0/sumOfWeights()); scale(_histMeanMultiDStar_s2112Plus , 1.0/sumOfWeights()); scale(_histMeanMultiJPsi1S , 1.0/sumOfWeights()); scale(_histMeanMultiF2_1270 , 1.0/sumOfWeights()); scale(_histMeanMultiP , 1.0/sumOfWeights()); scale(_histMeanMultiLambda , 1.0/sumOfWeights()); scale(_histMeanMultiSigma0 , 1.0/sumOfWeights()); scale(_histMeanMultiXiMinus , 1.0/sumOfWeights()); scale(_histMeanMultiDelta1232PlusPlus , 1.0/sumOfWeights()); scale(_histMeanMultiSigma1385Minus , 1.0/sumOfWeights()); scale(_histMeanMultiSigma1385Plus , 1.0/sumOfWeights()); scale(_histMeanMultiSigma1385PlusMinus, 1.0/sumOfWeights()); scale(_histMeanMultiXi1530_0 , 1.0/sumOfWeights()); scale(_histMeanMultiOmegaMinus , 1.0/sumOfWeights()); scale(_histMeanMultiLambda_c_Plus , 1.0/sumOfWeights()); scale(_histMeanMultiSigma_c_PlusPlus_0, 1.0/sumOfWeights()); scale(_histMeanMultiLambda1520 , 1.0/sumOfWeights()); } if (sqrtS()/GeV >= 29 && sqrtS()/GeV <= 35) { scale(_histMeanMultiPiPlus , 5.0/sumOfWeights()); scale(_histMeanMultiPi0 , 5.0/sumOfWeights()); scale(_histMeanMultiKPlus , 5.0/sumOfWeights()); scale(_histMeanMultiK0 , 5.0/sumOfWeights()); scale(_histMeanMultiEta , 5.0/sumOfWeights()); scale(_histMeanMultiEtaPrime , 5.0/sumOfWeights()); scale(_histMeanMultiDPlus , 5.0/sumOfWeights()); scale(_histMeanMultiD0 , 5.0/sumOfWeights()); scale(_histMeanMultiDPlus_s , 5.0/sumOfWeights()); scale(_histMeanMultiF0_980 , 5.0/sumOfWeights()); scale(_histMeanMultiRho770_0 , 5.0/sumOfWeights()); scale(_histMeanMultiKStar892Plus , 5.0/sumOfWeights()); scale(_histMeanMultiKStar892_0 , 5.0/sumOfWeights()); scale(_histMeanMultiPhi1020 , 5.0/sumOfWeights()); scale(_histMeanMultiDStar2010Plus , 5.0/sumOfWeights()); scale(_histMeanMultiDStar2007_0 , 5.0/sumOfWeights()); scale(_histMeanMultiF2_1270 , 5.0/sumOfWeights()); scale(_histMeanMultiK2Star1430Plus , 5.0/sumOfWeights()); scale(_histMeanMultiK2Star1430_0 , 5.0/sumOfWeights()); scale(_histMeanMultiP , 5.0/sumOfWeights()); scale(_histMeanMultiLambda , 5.0/sumOfWeights()); scale(_histMeanMultiXiMinus , 5.0/sumOfWeights()); scale(_histMeanMultiSigma1385Minus , 5.0/sumOfWeights()); scale(_histMeanMultiSigma1385Plus , 5.0/sumOfWeights()); scale(_histMeanMultiSigma1385PlusMinus, 5.0/sumOfWeights()); scale(_histMeanMultiOmegaMinus , 5.0/sumOfWeights()); scale(_histMeanMultiLambda_c_Plus , 5.0/sumOfWeights()); } if (sqrtS()/GeV >= 89.5 && sqrtS()/GeV <= 91.8) { scale(_histMeanMultiPiPlus , 1.0/sumOfWeights()); scale(_histMeanMultiPi0 , 1.0/sumOfWeights()); scale(_histMeanMultiKPlus , 1.0/sumOfWeights()); scale(_histMeanMultiK0 , 1.0/sumOfWeights()); scale(_histMeanMultiEta , 1.0/sumOfWeights()); scale(_histMeanMultiEtaPrime , 1.0/sumOfWeights()); scale(_histMeanMultiDPlus , 1.0/sumOfWeights()); scale(_histMeanMultiD0 , 1.0/sumOfWeights()); scale(_histMeanMultiDPlus_s , 1.0/sumOfWeights()); scale(_histMeanMultiBPlus_B0_d , 1.0/sumOfWeights()); scale(_histMeanMultiBPlus_u , 1.0/sumOfWeights()); scale(_histMeanMultiB0_s , 1.0/sumOfWeights()); scale(_histMeanMultiF0_980 , 1.0/sumOfWeights()); scale(_histMeanMultiA0_980Plus , 1.0/sumOfWeights()); scale(_histMeanMultiRho770_0 , 1.0/sumOfWeights()); scale(_histMeanMultiRho770Plus , 1.0/sumOfWeights()); scale(_histMeanMultiOmega782 , 1.0/sumOfWeights()); scale(_histMeanMultiKStar892Plus , 1.0/sumOfWeights()); scale(_histMeanMultiKStar892_0 , 1.0/sumOfWeights()); scale(_histMeanMultiPhi1020 , 1.0/sumOfWeights()); scale(_histMeanMultiDStar2010Plus , 1.0/sumOfWeights()); scale(_histMeanMultiDStar_s2112Plus , 1.0/sumOfWeights()); scale(_histMeanMultiBStar , 1.0/sumOfWeights()); scale(_histMeanMultiJPsi1S , 1.0/sumOfWeights()); scale(_histMeanMultiPsi2S , 1.0/sumOfWeights()); scale(_histMeanMultiUpsilon1S , 1.0/sumOfWeights()); scale(_histMeanMultiF1_1285 , 1.0/sumOfWeights()); scale(_histMeanMultiF1_1420 , 1.0/sumOfWeights()); scale(_histMeanMultiChi_c1_3510 , 1.0/sumOfWeights()); scale(_histMeanMultiF2_1270 , 1.0/sumOfWeights()); scale(_histMeanMultiF2Prime1525 , 1.0/sumOfWeights()); scale(_histMeanMultiK2Star1430_0 , 1.0/sumOfWeights()); scale(_histMeanMultiBStarStar , 1.0/sumOfWeights()); scale(_histMeanMultiDs1Plus , 1.0/sumOfWeights()); scale(_histMeanMultiDs2Plus , 1.0/sumOfWeights()); scale(_histMeanMultiP , 1.0/sumOfWeights()); scale(_histMeanMultiLambda , 1.0/sumOfWeights()); scale(_histMeanMultiSigma0 , 1.0/sumOfWeights()); scale(_histMeanMultiSigmaMinus , 1.0/sumOfWeights()); scale(_histMeanMultiSigmaPlus , 1.0/sumOfWeights()); scale(_histMeanMultiSigmaPlusMinus , 1.0/sumOfWeights()); scale(_histMeanMultiXiMinus , 1.0/sumOfWeights()); scale(_histMeanMultiDelta1232PlusPlus , 1.0/sumOfWeights()); scale(_histMeanMultiSigma1385Minus , 1.0/sumOfWeights()); scale(_histMeanMultiSigma1385Plus , 1.0/sumOfWeights()); scale(_histMeanMultiSigma1385PlusMinus, 1.0/sumOfWeights()); scale(_histMeanMultiXi1530_0 , 1.0/sumOfWeights()); scale(_histMeanMultiOmegaMinus , 1.0/sumOfWeights()); scale(_histMeanMultiLambda_c_Plus , 1.0/sumOfWeights()); scale(_histMeanMultiLambda_b_0 , 1.0/sumOfWeights()); scale(_histMeanMultiLambda1520 , 1.0/sumOfWeights()); } if (sqrtS()/GeV >= 130 && sqrtS()/GeV <= 200) { scale(_histMeanMultiPiPlus , 70.0/sumOfWeights()); scale(_histMeanMultiKPlus , 70.0/sumOfWeights()); scale(_histMeanMultiK0 , 70.0/sumOfWeights()); scale(_histMeanMultiP , 70.0/sumOfWeights()); scale(_histMeanMultiLambda , 70.0/sumOfWeights()); } } //@} private: AIDA::IHistogram1D *_histMeanMultiPiPlus; AIDA::IHistogram1D *_histMeanMultiPi0; AIDA::IHistogram1D *_histMeanMultiKPlus; AIDA::IHistogram1D *_histMeanMultiK0; AIDA::IHistogram1D *_histMeanMultiEta; AIDA::IHistogram1D *_histMeanMultiEtaPrime; AIDA::IHistogram1D *_histMeanMultiDPlus; AIDA::IHistogram1D *_histMeanMultiD0; AIDA::IHistogram1D *_histMeanMultiDPlus_s; AIDA::IHistogram1D *_histMeanMultiBPlus_B0_d; AIDA::IHistogram1D *_histMeanMultiBPlus_u; AIDA::IHistogram1D *_histMeanMultiB0_s; AIDA::IHistogram1D *_histMeanMultiF0_980; AIDA::IHistogram1D *_histMeanMultiA0_980Plus; AIDA::IHistogram1D *_histMeanMultiRho770_0; AIDA::IHistogram1D *_histMeanMultiRho770Plus; AIDA::IHistogram1D *_histMeanMultiOmega782; AIDA::IHistogram1D *_histMeanMultiKStar892Plus; AIDA::IHistogram1D *_histMeanMultiKStar892_0; AIDA::IHistogram1D *_histMeanMultiPhi1020; AIDA::IHistogram1D *_histMeanMultiDStar2010Plus; AIDA::IHistogram1D *_histMeanMultiDStar2007_0; AIDA::IHistogram1D *_histMeanMultiDStar_s2112Plus; AIDA::IHistogram1D *_histMeanMultiBStar; AIDA::IHistogram1D *_histMeanMultiJPsi1S; AIDA::IHistogram1D *_histMeanMultiPsi2S; AIDA::IHistogram1D *_histMeanMultiUpsilon1S; AIDA::IHistogram1D *_histMeanMultiF1_1285; AIDA::IHistogram1D *_histMeanMultiF1_1420; AIDA::IHistogram1D *_histMeanMultiChi_c1_3510; AIDA::IHistogram1D *_histMeanMultiF2_1270; AIDA::IHistogram1D *_histMeanMultiF2Prime1525; AIDA::IHistogram1D *_histMeanMultiK2Star1430Plus; AIDA::IHistogram1D *_histMeanMultiK2Star1430_0; AIDA::IHistogram1D *_histMeanMultiBStarStar; AIDA::IHistogram1D *_histMeanMultiDs1Plus; AIDA::IHistogram1D *_histMeanMultiDs2Plus; AIDA::IHistogram1D *_histMeanMultiP; AIDA::IHistogram1D *_histMeanMultiLambda; AIDA::IHistogram1D *_histMeanMultiSigma0; AIDA::IHistogram1D *_histMeanMultiSigmaMinus; AIDA::IHistogram1D *_histMeanMultiSigmaPlus; AIDA::IHistogram1D *_histMeanMultiSigmaPlusMinus; AIDA::IHistogram1D *_histMeanMultiXiMinus; AIDA::IHistogram1D *_histMeanMultiDelta1232PlusPlus; AIDA::IHistogram1D *_histMeanMultiSigma1385Minus; AIDA::IHistogram1D *_histMeanMultiSigma1385Plus; AIDA::IHistogram1D *_histMeanMultiSigma1385PlusMinus; AIDA::IHistogram1D *_histMeanMultiXi1530_0; AIDA::IHistogram1D *_histMeanMultiOmegaMinus; AIDA::IHistogram1D *_histMeanMultiLambda_c_Plus; AIDA::IHistogram1D *_histMeanMultiLambda_b_0; AIDA::IHistogram1D *_histMeanMultiSigma_c_PlusPlus_0; AIDA::IHistogram1D *_histMeanMultiLambda1520; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(PDG_HADRON_MULTIPLICITIES); } rivet-1.8.3/src/Analyses/ATLAS_2011_CONF_2011_098.cc0000644000175000017500000002143312116077757017124 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" // #include "Rivet/Tools/RivetMT2.hh" namespace Rivet { class ATLAS_2011_CONF_2011_098 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2011_CONF_2011_098() : Analysis("ATLAS_2011_CONF_2011_098"), //debug variables threeJA(0), threeJB(0), threeJC(0), threeJD(0), bj(0), jets(0), zerolept(0), eTmisscut(0) { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 20.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); /// Jet finder addProjection(FastJets(FinalState(), FastJets::ANTIKT, 0.4), "AntiKtJets04"); // all tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0),"cfs"); // for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); /// Book histograms _count_threeJA = bookHistogram1D("count_threeJA", 1, 0., 1.); _count_threeJB = bookHistogram1D("count_threeJB", 1, 0., 1.); _count_threeJC = bookHistogram1D("count_threeJC", 1, 0., 1.); _count_threeJD = bookHistogram1D("count_threeJD", 1, 0., 1.); _hist_meff_1bjet = bookHistogram1D("meff_1bjet", 32, 0., 1600.); _hist_eTmiss_1bjet = bookHistogram1D("eTmiss_1bjet", 6, 0., 600.); _hist_pTj_1bjet = bookHistogram1D("pTjet_1bjet", 20, 0., 800.); _hist_meff_2bjet = bookHistogram1D("meff_2bjet", 32, 0., 1600.); _hist_eTmiss_2bjet = bookHistogram1D("eTmiss_2bjet", 6, 0., 600.); _hist_pTj_2bjet = bookHistogram1D("pTjet_2bjet", 20, 0., 800.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // Temp: calorimeter module failure with 10% acceptance loss; // region unknown ==> randomly choose 10% of events to be vetoed if ( rand()/static_cast(RAND_MAX) < 0.1 ) vetoEvent; Jets tmp_cand_jets; foreach (const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 2.8 ) { tmp_cand_jets.push_back(jet); } } ParticleVector cand_e = applyProjection(event, "elecs").particlesByPt(); ParticleVector cand_mu = applyProjection(event, "muons").particlesByPt(); ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); //cerr << "cand_e.size(): " << cand_e.size() << " cand_mu.size(): " << cand_mu.size() << '\n'; Jets cand_jets; foreach ( const Jet& jet, tmp_cand_jets ) { if ( fabs( jet.momentum().eta() ) >= 2.8 ) cand_jets.push_back( jet ); else { bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) cand_jets.push_back( jet ); } } ParticleVector cand_lept; bool isolated_e; foreach ( const Particle & e, cand_e ) { isolated_e = true; foreach ( const Jet& jet, cand_jets ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) isolated_e = false; } if ( isolated_e == true ) cand_lept.push_back( e ); } bool isolated_mu; foreach ( const Particle & mu, cand_mu ) { isolated_mu = true; foreach ( const Jet& jet, cand_jets ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) isolated_mu = false; } if ( isolated_mu == true) cand_lept.push_back( mu ); } // pTmiss ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // bjets Jets bjets,recon_jets; foreach (const Jet& j, cand_jets) { if(fabs( j.momentum().eta() ) <= 2.8) { recon_jets.push_back(j); if ( fabs( j.momentum().eta() ) <= 2.5 && j.momentum().perp()>50. && j.containsBottom() && rand()/static_cast(RAND_MAX) < 0.5 ) bjets.push_back(j); } } if (bjets.empty()) { MSG_DEBUG("No b-jet axes in acceptance"); vetoEvent; } ++bj; // Jets event selection if ( recon_jets.size() < 3 ) vetoEvent; if ( recon_jets[0].momentum().pT() <= 130*GeV ) vetoEvent; if ( recon_jets[1].momentum().pT() <= 50*GeV || recon_jets[2].momentum().pT() <= 50*GeV ) vetoEvent; ++jets; // eTmiss cut if ( eTmiss <= 130*GeV ) vetoEvent; ++eTmisscut; // 0-lepton requirement if ( !cand_lept.empty() ) vetoEvent; ++zerolept; // m_eff cut double m_eff = eTmiss + recon_jets[0].momentum().pT() + recon_jets[1].momentum().pT() + recon_jets[2].momentum().pT(); if ( eTmiss / m_eff <= 0.25 ) vetoEvent; // min_dPhi double min_dPhi = 999.999; for ( int i = 0; i < 3; ++i ) { double dPhi = deltaPhi( pTmiss.phi(), recon_jets[i].momentum().phi() ); min_dPhi = min( min_dPhi, dPhi ); } if ( min_dPhi <= 0.4 ) vetoEvent; // ==================== FILL ==================== // 1 bjet if ( bjets.size() >= 1 ) { _hist_meff_1bjet->fill(m_eff, weight); _hist_eTmiss_1bjet->fill(eTmiss, weight); _hist_pTj_1bjet->fill(recon_jets[0].momentum().pT(), weight); // 3JA region if ( m_eff > 200*GeV ) { ++threeJA; _count_threeJA->fill(0.5, weight); } // 3JB region if ( m_eff > 700*GeV ) { ++threeJB; _count_threeJB->fill(0.5, weight); } } // 2 bjets if ( bjets.size() >= 2 ) { _hist_meff_2bjet->fill(m_eff, weight); _hist_eTmiss_2bjet->fill(eTmiss, weight); _hist_pTj_2bjet->fill(recon_jets[0].momentum().pT(), weight); // 3JC region if ( m_eff > 500*GeV ) { ++threeJC; _count_threeJC->fill(0.5, weight); } // 3JD region if ( m_eff > 700*GeV ) { ++threeJD; _count_threeJD->fill(0.5, weight); } } } //@} void finalize() { scale( _hist_meff_1bjet, 50. * 830. * crossSection()/sumOfWeights() ); scale( _hist_eTmiss_1bjet, 100. * 830. * crossSection()/sumOfWeights() ); scale( _hist_pTj_1bjet, 40. * 830. * crossSection()/sumOfWeights() ); scale( _hist_meff_2bjet, 50. * 830. * crossSection()/sumOfWeights() ); scale( _hist_eTmiss_2bjet, 100. * 830. * crossSection()/sumOfWeights() ); scale( _hist_pTj_2bjet, 40. * 830. * crossSection()/sumOfWeights() ); // cerr<< '\n'<<'\n' // << "Saw " // << bj << " events aft bjets cut, " // << jets << " events aft jet cuts, " // << eTmisscut << " events aft eTmiss cut, " // << zerolept << " events after 0-lept cut. " // << '\n' // << threeJA << " 3JA events, " // << threeJB << " 3JB events, " // << threeJC << " 3JC events, " // << threeJD << " 3JD events. " // << '\n' // ; } private: /// @name Histograms //@{ AIDA::IHistogram1D* _count_threeJA; AIDA::IHistogram1D* _count_threeJB; AIDA::IHistogram1D* _count_threeJC; AIDA::IHistogram1D* _count_threeJD; AIDA::IHistogram1D* _hist_meff_1bjet; AIDA::IHistogram1D* _hist_eTmiss_1bjet; AIDA::IHistogram1D* _hist_pTj_1bjet; AIDA::IHistogram1D* _hist_meff_2bjet; AIDA::IHistogram1D* _hist_eTmiss_2bjet; AIDA::IHistogram1D* _hist_pTj_2bjet; //@} // debug variables int threeJA; int threeJB; int threeJC; int threeJD; int bj; int jets; int zerolept; int eTmisscut; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_CONF_2011_098); } rivet-1.8.3/src/Analyses/MC_PHOTONS.cc0000644000175000017500000001203312116077757015452 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" namespace Rivet { class MC_PHOTONS : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor MC_PHOTONS() : Analysis("MC_PHOTONS") { } //@} /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { IdentifiedFinalState leptons(-5.0, 5.0, 10*GeV); IdentifiedFinalState photons(-5.0, 5.0); leptons.acceptChLeptons(); photons.acceptId(PHOTON); addProjection(leptons, "lFS"); addProjection(photons, "gammaFS"); _h_Ptgamma = bookHistogram1D("Ptgamma", logspace(50, 0.01, 30)); _h_Egamma = bookHistogram1D("Egamma", logspace(50, 0.01, 200)); _h_sumPtgamma = bookHistogram1D("sumPtgamma", 50, 0, 100); _h_sumEgamma = bookHistogram1D("sumEgamma", 50, 0, sqrtS()/GeV/5.0); _h_DelR = bookHistogram1D("DeltaR", 50, 0, 2); _h_DelR_weighted = bookHistogram1D("DeltaR_ptweighted", 50, 0, 2); _h_DelR_R = bookHistogram1D("DeltaR_R", 50, 0, 2); _h_DelR_R_weighted = bookHistogram1D("DeltaR_R_ptweighted", 50, 0, 2); _p_DelR_vs_pTl = bookProfile1D("DeltaR_vs_pTlep", 50, 10, 120); _p_DelR_weighted_vs_pTl = bookProfile1D("DeltaR_ptweighted_vs_pTlep", 50, 10, 120); _p_DelR_R_vs_pTl = bookProfile1D("DeltaR_R_vs_pTlep", 50, 10, 120); _p_DelR_R_weighted_vs_pTl = bookProfile1D("DeltaR_R_ptweighted_vs_pTlep", 50, 10, 120); _p_sumPtgamma_vs_pTl = bookProfile1D("sumPtGamma_vs_pTlep", 50, 10, 120); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); /// Get photons and leptons const ParticleVector& photons = applyProjection(event, "gammaFS").particles(); MSG_DEBUG("Photon multiplicity = " << photons.size()); const ParticleVector& leptons = applyProjection(event, "lFS").particles(); MSG_DEBUG("Photon multiplicity = " << leptons.size()); // Initialise a map of sumPtgamma for each lepton map sumpT_per_lep; for (size_t il = 0; il < leptons.size(); ++il) sumpT_per_lep[il] = 0; // Calculate photon energies and transverse momenta double sumPtgamma(0), sumEgamma(0); foreach (const Particle& p, photons) { // Individual and summed pTs and energies double pTgamma = p.momentum().pT()/GeV; double Egamma = p.momentum().E()/GeV; _h_Ptgamma->fill(pTgamma, weight); _h_Egamma->fill(Egamma, weight); sumPtgamma += pTgamma; sumEgamma += Egamma; // Calculate delta R with respect to the nearest lepton int ilep = -1; double delR = 10000; for (size_t il = 0; il < leptons.size(); ++il) { const double tmpdelR = deltaR(leptons[il].momentum(), p.momentum()); if (tmpdelR < delR) { ilep = il; delR = tmpdelR; } } if (ilep != -1) { _h_DelR->fill(delR, weight); _h_DelR_weighted->fill(delR, weight*pTgamma/GeV); _h_DelR_R->fill(delR, weight/(delR+1e-5)); _h_DelR_R_weighted->fill(delR, weight*pTgamma/GeV/(delR+1e-5)); _p_DelR_vs_pTl->fill(leptons[ilep].momentum().pT()/GeV, delR, weight); _p_DelR_weighted_vs_pTl->fill(leptons[ilep].momentum().pT()/GeV, delR, weight*pTgamma/GeV); _p_DelR_R_vs_pTl->fill(leptons[ilep].momentum().pT()/GeV, delR, weight/(delR+1e-5)); _p_DelR_R_weighted_vs_pTl->fill(leptons[ilep].momentum().pT()/GeV, delR, weight*pTgamma/GeV/(delR+1e-5)); sumpT_per_lep[ilep] += pTgamma; } } // Histogram whole-event photon HT/energy _h_sumPtgamma->fill(sumPtgamma/GeV, weight); _h_sumEgamma->fill(sumEgamma/GeV, weight); // Histogram per-lepton sum(pT) for (size_t il = 0; il < leptons.size(); ++il) { _p_sumPtgamma_vs_pTl->fill(leptons[il].momentum().pT()/GeV, sumpT_per_lep[il]/GeV, weight); } } /// Normalise histograms etc., after the run void finalize() { normalize(_h_Ptgamma); normalize(_h_Egamma); normalize(_h_sumPtgamma); normalize(_h_sumEgamma); normalize(_h_DelR); normalize(_h_DelR_weighted); normalize(_h_DelR_R); normalize(_h_DelR_R_weighted); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_Ptgamma, *_h_Egamma; AIDA::IHistogram1D *_h_sumPtgamma, *_h_sumEgamma; AIDA::IHistogram1D *_h_DelR, *_h_DelR_weighted; AIDA::IHistogram1D *_h_DelR_R, *_h_DelR_R_weighted; AIDA::IProfile1D *_p_DelR_vs_pTl, *_p_DelR_weighted_vs_pTl; AIDA::IProfile1D *_p_DelR_R_vs_pTl, *_p_DelR_R_weighted_vs_pTl; AIDA::IProfile1D *_p_sumPtgamma_vs_pTl; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_PHOTONS); } rivet-1.8.3/src/Analyses/MC_ZJETS.cc0000644000175000017500000000372112116077757015223 0ustar sunsun// -*- C++ -*- #include "Rivet/Analyses/MC_JetAnalysis.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief MC validation analysis for Z + jets events class MC_ZJETS : public MC_JetAnalysis { public: /// Default constructor MC_ZJETS() : MC_JetAnalysis("MC_ZJETS", 4, "Jets") { } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; ZFinder zfinder(fs, -3.5, 3.5, 25.0*GeV, ELECTRON, 65.0*GeV, 115.0*GeV, 0.2, true, true); addProjection(zfinder, "ZFinder"); FastJets jetpro(zfinder.remainingFinalState(), FastJets::ANTIKT, 0.4); addProjection(jetpro, "Jets"); _h_Z_jet1_deta = bookHistogram1D("Z_jet1_deta", 50, -5.0, 5.0); _h_Z_jet1_dR = bookHistogram1D("Z_jet1_dR", 25, 0.5, 7.0); MC_JetAnalysis::init(); } /// Do the analysis void analyze(const Event & e) { const ZFinder& zfinder = applyProjection(e, "ZFinder"); if (zfinder.bosons().size()!=1) { vetoEvent; } const double weight = e.weight(); FourMomentum zmom(zfinder.bosons()[0].momentum()); const Jets& jets = applyProjection(e, "Jets").jetsByPt(m_jetptcut); if (jets.size() > 0) { _h_Z_jet1_deta->fill(zmom.eta()-jets[0].momentum().eta(), weight); _h_Z_jet1_dR->fill(deltaR(zmom, jets[0].momentum()), weight); } MC_JetAnalysis::analyze(e); } /// Finalize void finalize() { scale(_h_Z_jet1_deta, crossSection()/sumOfWeights()); scale(_h_Z_jet1_dR, crossSection()/sumOfWeights()); MC_JetAnalysis::finalize(); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_Z_jet1_deta; AIDA::IHistogram1D * _h_Z_jet1_dR; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_ZJETS); } rivet-1.8.3/src/Analyses/MC_PHOTONJETUE.cc0000644000175000017500000002414312116077757016131 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief MC validation analysis for underlying event in jet + isolated photon events /// @author Andy Buckley class MC_PHOTONJETUE : public Analysis { public: /// Constructor MC_PHOTONJETUE() : Analysis("MC_PHOTONJETUE") { } /// @name Analysis methods //@{ // Book histograms and projections void init() { // Final state for the jet finding const FinalState fsj(-4.0, 4.0, 0.1*GeV); addProjection(fsj, "FSJ"); addProjection(FastJets(fsj, FastJets::ANTIKT, 0.7), "Jets"); // Charged final state for the distributions const ChargedFinalState cfs(-2.0, 2.0, 0.2*GeV); addProjection(cfs, "Tracks"); // Photons (for isolation) const FinalState fsp(-2.0, 2.0, 20.0*GeV); IdentifiedFinalState photonfs(fsp); photonfs.acceptId(PHOTON); addProjection(photonfs, "Photons"); // Histograms _hist_jetgamma_dR = bookHistogram1D("gammajet-dR", 52, 0.0, 5.2); _hist_jetgamma_dphi = bookHistogram1D("gammajet-dphi", 50, 0.0, PI); // const double MAXPT1 = 50.0; _hist_pnchg_jet = bookProfile1D("trans-nchg-jet", 50, 0.0, MAXPT1); _hist_pmaxnchg_jet = bookProfile1D("trans-maxnchg-jet", 50, 0.0, MAXPT1); _hist_pminnchg_jet = bookProfile1D("trans-minnchg-jet", 50, 0.0, MAXPT1); _hist_pcptsum_jet = bookProfile1D("trans-ptsum-jet", 50, 0.0, MAXPT1); _hist_pmaxcptsum_jet = bookProfile1D("trans-maxptsum-jet", 50, 0.0, MAXPT1); _hist_pmincptsum_jet = bookProfile1D("trans-minptsum-jet", 50, 0.0, MAXPT1); _hist_pcptave_jet = bookProfile1D("trans-ptavg-jet", 50, 0.0, MAXPT1); // _hist_pnchg_gamma = bookProfile1D("trans-nchg-gamma", 50, 0.0, MAXPT1); _hist_pmaxnchg_gamma = bookProfile1D("trans-maxnchg-gamma", 50, 0.0, MAXPT1); _hist_pminnchg_gamma = bookProfile1D("trans-minnchg-gamma", 50, 0.0, MAXPT1); _hist_pcptsum_gamma = bookProfile1D("trans-ptsum-gamma", 50, 0.0, MAXPT1); _hist_pmaxcptsum_gamma = bookProfile1D("trans-maxptsum-gamma", 50, 0.0, MAXPT1); _hist_pmincptsum_gamma = bookProfile1D("trans-minptsum-gamma", 50, 0.0, MAXPT1); _hist_pcptave_gamma = bookProfile1D("trans-ptavg-gamma", 50, 0.0, MAXPT1); } // Do the analysis void analyze(const Event& evt) { // Get jets const Jets jets = applyProjection(evt, "Jets").jetsByPt(); MSG_DEBUG("Jet multiplicity = " << jets.size()); if (jets.size() < 1) { MSG_DEBUG("No jets found"); vetoEvent; } // Get leading jet properties const FourMomentum pjet = jets.front().momentum(); const double jeteta = pjet.eta(); const double jetphi = pjet.phi(); const double jetpT = pjet.pT(); MSG_DEBUG("Leading jet: pT = " << jetpT/GeV << " GeV" << ", eta = " << jeteta << ", phi = " << jetphi); // Require the leading jet to be within |eta| < 2 if (fabs(jeteta) > 2) { MSG_DEBUG("Failed leading jet eta cut"); vetoEvent; } // Get the leading photon const FinalState& photonfs = applyProjection(evt, "Photons"); if (photonfs.size() < 1) { MSG_DEBUG("No hard photons found"); vetoEvent; } const FourMomentum pgamma = photonfs.particlesByPt().front().momentum(); // Check that leading photon is isolated from jets bool isolated = true; foreach (const Jet& j, jets) { if (deltaR(j.momentum(), pgamma) < 0.1) { isolated = false; break; } } if (!isolated) { MSG_DEBUG("Leading photon is not isolated from jets"); vetoEvent; } // Get leading photon properties const double gammaeta = pgamma.eta(); const double gammaphi = pgamma.phi(); const double gammapT = pgamma.pT(); MSG_DEBUG("Leading photon: pT = " << gammapT/GeV << " GeV" << ", eta = " << gammaeta << ", phi = " << gammaphi); // Get the event weight const double weight = evt.weight(); // Fill jet1-photon separation histos const double dR_jetgamma = deltaR(pgamma, pjet); _hist_jetgamma_dR->fill(dR_jetgamma, weight); const double dPhi_jetgamma = deltaPhi(gammaphi, jetphi); _hist_jetgamma_dphi->fill(dPhi_jetgamma, weight); /// Cut on back-to-backness of jet-photon if (dPhi_jetgamma < 0.5) vetoEvent; /// @todo Plot evolution of UE as a function of jet-photon angle /// @todo Plot evolution of UE as a function of photon pT // Get the final states to work with for filling the distributions const FinalState& cfs = applyProjection(evt, "Tracks"); // Whole-event counters unsigned int numOverall(0); double ptSumOverall(0.0), ptMaxOverall(0.0); // Jet-oriented counters unsigned int numToward_jet(0), numTrans1_jet(0), numTrans2_jet(0), numAway_jet(0); double ptSumToward_jet(0.0), ptSumTrans1_jet(0.0), ptSumTrans2_jet(0.0), ptSumAway_jet(0.0); double ptMaxToward_jet(0.0), ptMaxTrans1_jet(0.0), ptMaxTrans2_jet(0.0), ptMaxAway_jet(0.0); // Photon-oriented counters unsigned int numToward_gamma(0), numTrans1_gamma(0), numTrans2_gamma(0), numAway_gamma(0); double ptSumToward_gamma(0.0), ptSumTrans1_gamma(0.0), ptSumTrans2_gamma(0.0), ptSumAway_gamma(0.0); double ptMaxToward_gamma(0.0), ptMaxTrans1_gamma(0.0), ptMaxTrans2_gamma(0.0), ptMaxAway_gamma(0.0); // Calculate all the charged stuff foreach (const Particle& p, cfs.particles()) { ++numOverall; const double pT = p.momentum().pT(); ptSumOverall += pT; if (pT > ptMaxOverall) ptMaxOverall = pT; // Increment jet-oriented variables const double dPhi_jet = jetphi - p.momentum().phi(); if (fabs(dPhi_jet) < PI/3.0) { ptSumToward_jet += pT; ++numToward_jet; if (pT > ptMaxToward_jet) ptMaxToward_jet = pT; } else if (fabs(dPhi_jet) < 2*PI/3.0) { if (sign(dPhi_jet) == MINUS) { ptSumTrans1_jet += pT; ++numTrans1_jet; if (pT > ptMaxTrans1_jet) ptMaxTrans1_jet = pT; } else { ptSumTrans2_jet += pT; ++numTrans2_jet; if (pT > ptMaxTrans2_jet) ptMaxTrans2_jet = pT; } } else { ptSumAway_jet += pT; ++numAway_jet; if (pT > ptMaxAway_jet) ptMaxAway_jet = pT; } // Increment photon-oriented variables const double dPhi_gamma = gammaphi - p.momentum().phi(); if (fabs(dPhi_gamma) < PI/3.0) { ptSumToward_gamma += pT; ++numToward_gamma; if (pT > ptMaxToward_gamma) ptMaxToward_gamma = pT; } else if (fabs(dPhi_gamma) < 2*PI/3.0) { if (sign(dPhi_gamma) == MINUS) { ptSumTrans1_gamma += pT; ++numTrans1_gamma; if (pT > ptMaxTrans1_gamma) ptMaxTrans1_gamma = pT; } else { ptSumTrans2_gamma += pT; ++numTrans2_gamma; if (pT > ptMaxTrans2_gamma) ptMaxTrans2_gamma = pT; } } else { ptSumAway_gamma += pT; ++numAway_gamma; if (pT > ptMaxAway_gamma) ptMaxAway_gamma = pT; } } // Fill the histograms _hist_pnchg_jet->fill(jetpT/GeV, (numTrans1_jet+numTrans2_jet)/(4*PI/3), weight); _hist_pmaxnchg_jet->fill(jetpT/GeV, (numTrans1_jet>numTrans2_jet ? numTrans1_jet : numTrans2_jet)/(2*PI/3), weight); _hist_pminnchg_jet->fill(jetpT/GeV, (numTrans1_jetfill(jetpT/GeV, (ptSumTrans1_jet+ptSumTrans2_jet)/GeV/(4*PI/3), weight); _hist_pmaxcptsum_jet->fill(jetpT/GeV, (ptSumTrans1_jet>ptSumTrans2_jet ? ptSumTrans1_jet : ptSumTrans2_jet)/GeV/(2*PI/3), weight); _hist_pmincptsum_jet->fill(jetpT/GeV, (ptSumTrans1_jet 0) { _hist_pcptave_jet->fill(jetpT/GeV, (ptSumTrans1_jet+ptSumTrans2_jet)/GeV/(numTrans1_jet+numTrans2_jet), weight); } // _hist_pnchg_gamma->fill(gammapT/GeV, (numTrans1_gamma+numTrans2_gamma)/(4*PI/3), weight); _hist_pmaxnchg_gamma->fill(gammapT/GeV, (numTrans1_gamma>numTrans2_gamma ? numTrans1_gamma : numTrans2_gamma)/(2*PI/3), weight); _hist_pminnchg_gamma->fill(gammapT/GeV, (numTrans1_gammafill(gammapT/GeV, (ptSumTrans1_gamma+ptSumTrans2_gamma)/GeV/(4*PI/3), weight); _hist_pmaxcptsum_gamma->fill(gammapT/GeV, (ptSumTrans1_gamma>ptSumTrans2_gamma ? ptSumTrans1_gamma : ptSumTrans2_gamma)/GeV/(2*PI/3), weight); _hist_pmincptsum_gamma->fill(gammapT/GeV, (ptSumTrans1_gamma 0) { _hist_pcptave_gamma->fill(gammapT/GeV, (ptSumTrans1_gamma+ptSumTrans2_gamma)/GeV/(numTrans1_gamma+numTrans2_gamma), weight); } } void finalize() { // } private: AIDA::IHistogram1D* _hist_jetgamma_dR; AIDA::IHistogram1D* _hist_jetgamma_dphi; AIDA::IProfile1D *_hist_pnchg_jet, *_hist_pnchg_gamma; AIDA::IProfile1D *_hist_pmaxnchg_jet, *_hist_pmaxnchg_gamma; AIDA::IProfile1D *_hist_pminnchg_jet, *_hist_pminnchg_gamma; AIDA::IProfile1D *_hist_pcptsum_jet, *_hist_pcptsum_gamma; AIDA::IProfile1D *_hist_pmaxcptsum_jet, *_hist_pmaxcptsum_gamma; AIDA::IProfile1D *_hist_pmincptsum_jet, *_hist_pmincptsum_gamma; AIDA::IProfile1D *_hist_pcptave_jet, *_hist_pcptave_gamma; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_PHOTONJETUE); } rivet-1.8.3/src/Analyses/OPAL_1996_S3257789.cc0000644000175000017500000000542412116077757016245 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief OPAL J/Psi fragmentation function paper /// @author Peter Richardson class OPAL_1996_S3257789 : public Analysis { public: /// Constructor OPAL_1996_S3257789() : Analysis("OPAL_1996_S3257789"), _weightSum(0.) {} /// @name Analysis methods //@{ void init() { addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "FS"); addProjection(UnstableFinalState(), "UFS"); _histXpJPsi = bookHistogram1D( 1, 1, 1); _multJPsi = bookHistogram1D( 2, 1, 1); _multPsiPrime = bookHistogram1D( 2, 1, 2); } void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed leptonic event cut"); vetoEvent; } MSG_DEBUG("Passed leptonic event cut"); // Get event weight for histo filling const double weight = e.weight(); // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); // Final state of unstable particles to get particle spectra const UnstableFinalState& ufs = applyProjection(e, "UFS"); foreach (const Particle& p, ufs.particles()) { if(abs(p.pdgId())==443) { double xp = p.momentum().vector3().mod()/meanBeamMom; _histXpJPsi->fill(xp, weight); _multJPsi->fill(91.2,weight); _weightSum += weight; } else if(abs(p.pdgId())==100443) { _multPsiPrime->fill(91.2,weight); } } } /// Finalize void finalize() { if(_weightSum>0.) scale(_histXpJPsi , 0.1/_weightSum); scale(_multJPsi , 1./sumOfWeights()); scale(_multPsiPrime, 1./sumOfWeights()); } //@} private: double _weightSum; AIDA::IHistogram1D *_histXpJPsi; AIDA::IHistogram1D *_multJPsi; AIDA::IHistogram1D *_multPsiPrime; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(OPAL_1996_S3257789); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1093738.cc0000644000175000017500000002470312116077757016307 0ustar sunsun// -*- C++ -*- #include #include #include #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Jet.hh" #include "Rivet/Projections/FastJets.hh" #include "fastjet/internal/base.hh" #include "fastjet/JetDefinition.hh" #include "fastjet/AreaDefinition.hh" #include "fastjet/ClusterSequence.hh" #include "fastjet/ClusterSequenceArea.hh" #include "fastjet/PseudoJet.hh" #define MYDEBUG if(false) getLog() << __LINE__ namespace Rivet { /// @brief Measurement of isolated gamma + jet + X differential cross-sections /// /// Inclusive isolated gamma + jet cross-sections, differential in pT(gamma), for /// various photon and jet rapidity configurations. /// /// @author Giovanni Marchiori class ATLAS_2012_I1093738 : public Analysis { public: // Constructor ATLAS_2012_I1093738() : Analysis("ATLAS_2012_I1093738") { _eta_bins_ph.push_back(0.0); _eta_bins_ph.push_back(1.37); _eta_bins_ph.push_back(1.52); _eta_bins_ph.push_back(2.37); _eta_bins_jet.push_back(0.0); _eta_bins_jet.push_back(1.2); _eta_bins_jet.push_back(2.8); _eta_bins_jet.push_back(4.4); _eta_bins_areaoffset.push_back(0.0); _eta_bins_areaoffset.push_back(1.5); _eta_bins_areaoffset.push_back(3.0); } public: // Book histograms and initialise projections before the run void init() { MYDEBUG << "Entering init." << std::endl; // Final state FinalState fs; addProjection(fs, "FS"); // Voronoi eta-phi tassellation with KT jets, for ambient energy density calculation FastJets fj(fs, FastJets::KT, 0.5); _area_def = new fastjet::AreaDefinition(fastjet::VoronoiAreaSpec()); fj.useJetArea(_area_def); addProjection(fj, "KtJetsD05"); // Leading photon LeadingParticlesFinalState photonfs(FinalState(-1.37, 1.37, 25.0*GeV)); photonfs.addParticleId(PHOTON); addProjection(photonfs, "LeadingPhoton"); // FS excluding the leading photon VetoedFinalState vfs(fs); vfs.addVetoOnThisFinalState(photonfs); addProjection(vfs, "JetFS"); // Jets FastJets jetpro(vfs, FastJets::ANTIKT, 0.4); //FastJets jetpro(vfs, FastJets::ANTIKT, 0.6); jetpro.useInvisibles(); addProjection(jetpro, "Jets"); MYDEBUG << "\t... Booking Histograms " << std::endl; // use autobook option, histo d??-x??-y?? _h_phbarrel_jetcentral_SS = bookHistogram1D(1, 1, 1); _h_phbarrel_jetmedium_SS = bookHistogram1D(2, 1, 1); _h_phbarrel_jetforward_SS = bookHistogram1D(3, 1, 1); _h_phbarrel_jetcentral_OS = bookHistogram1D(4, 1, 1); _h_phbarrel_jetmedium_OS = bookHistogram1D(5, 1, 1); _h_phbarrel_jetforward_OS = bookHistogram1D(6, 1, 1); MYDEBUG << "Exiting init." << std::endl; } int getEtaBin(double eta_w, int what) const { double eta = fabs(eta_w); int v_iter=0; if (what==0) { for(v_iter=0; v_iter < (int)_eta_bins_ph.size()-1; v_iter++){ if(eta >= _eta_bins_ph.at(v_iter) && eta < _eta_bins_ph.at(v_iter+1)) break; } } else if (what==1) { for (v_iter=0; v_iter < (int)_eta_bins_jet.size()-1; v_iter++){ if(eta >= _eta_bins_jet.at(v_iter) && eta < _eta_bins_jet.at(v_iter+1)) break; } } else { for(v_iter=0; v_iter < (int)_eta_bins_areaoffset.size()-1; v_iter++){ if(eta >= _eta_bins_areaoffset.at(v_iter) && eta < _eta_bins_areaoffset.at(v_iter+1)) break; } } return v_iter; } // Perform the per-event analysis void analyze(const Event& event) { MYDEBUG << "Entering Analyze." << std::endl; const double weight = event.weight(); MYDEBUG << "...First projections." << std::endl; // Get the photon const FinalState& photonfs = applyProjection(event, "LeadingPhoton"); if (photonfs.particles().size() < 1) { MYDEBUG << "...Going to veto event(1)." << std::endl; vetoEvent; } MYDEBUG << "...Didn't veto event(1)." << std::endl; const FourMomentum photon = photonfs.particles().front().momentum(); double eta_P = photon.eta(); double phi_P = photon.phi(); // Get the jet Jets jets = applyProjection(event, "Jets").jetsByPt(20.0*GeV); if (jets.size()==0) { MYDEBUG << "...Going to veto event(3)." << std::endl; vetoEvent; } MYDEBUG << "...Didn't veto event(3)." << std::endl; FourMomentum leadingJet = jets[0].momentum(); // Require jet separated from photon if (deltaR(eta_P, phi_P, leadingJet.eta(), leadingJet.phi())<1.0) { MYDEBUG << "...Going to veto event(4)." << std::endl; vetoEvent; } MYDEBUG << "...Didn't veto event(4)." << std::endl; // Veto if leading jet is outside plotted rapidity regions const double abs_y1 = fabs(leadingJet.rapidity()); if (abs_y1 > 4.4) { MYDEBUG << "...Going to veto event(5)." << std::endl; vetoEvent; } MYDEBUG << "...Didn't veto event(5)." << std::endl; // compute the median event energy density const unsigned int skipnhardjets = 0; _ptDensity.clear(); _sigma.clear(); _Njets.clear(); std::vector< std::vector > ptDensities; std::vector emptyVec; ptDensities.assign(_eta_bins_areaoffset.size()-1,emptyVec); const fastjet::ClusterSequenceArea* clust_seq_area = applyProjection(event, "KtJetsD05").clusterSeqArea(); foreach (const fastjet::PseudoJet& jet, applyProjection(event, "KtJetsD05").pseudoJets(0.0*GeV)) { double eta = fabs(jet.eta()); double pt = fabs(jet.perp()); /// get the cluster sequence double area = clust_seq_area->area(jet); if(area > 10e-4 && fabs(eta)<_eta_bins_areaoffset[_eta_bins_areaoffset.size()-1]){ ptDensities.at(getEtaBin(fabs(eta),2)).push_back(pt/area); } } for(int b=0; b<(int)_eta_bins_areaoffset.size()-1; b++){ double median = 0.0; double sigma = 0.0; int Njets = 0; if(ptDensities[b].size() > skipnhardjets) { std::sort(ptDensities[b].begin(), ptDensities[b].end()); int nDens = ptDensities[b].size() - skipnhardjets; if( nDens%2 == 0 ) median = (ptDensities[b][nDens/2]+ptDensities[b][(nDens-2)/2])/2; else median = ptDensities[b][(nDens-1)/2]; sigma = ptDensities[b][(int)(.15865*nDens)]; Njets = nDens; } _ptDensity.push_back(median); _sigma.push_back(sigma); _Njets.push_back(Njets); } // compute photon isolation // std EtCone ParticleVector fs = applyProjection(event, "JetFS").particles(); FourMomentum mom_in_EtCone; float iso_dR = 0.4; float cluster_eta_width = 0.25*7.0; float cluster_phi_width = (PI/128.)*5.0; foreach (const Particle& p, fs) { // check if it's in the cone of .4 if (deltaR(eta_P, phi_P, p.momentum().eta(), p.momentum().phi()) >= iso_dR) continue; // check if it's in the 5x7 central core if (fabs(eta_P-p.momentum().eta()) < cluster_eta_width*0.5 && fabs(phi_P-p.momentum().phi()) < cluster_phi_width*0.5) continue; mom_in_EtCone += p.momentum(); } MYDEBUG << "...Done with initial EtCone." << std::endl; // now figure out the correction (area*density) float EtCone_area = PI*iso_dR*iso_dR - cluster_eta_width*cluster_phi_width; float correction = _ptDensity[getEtaBin(eta_P,2)]*EtCone_area; MYDEBUG << "...Done with jet-area correction." << std::endl; // require photon to be isolated if(mom_in_EtCone.Et()-correction > 4.0*GeV){ MYDEBUG << "...Going to veto event(6)." << std::endl; vetoEvent; } MYDEBUG << "...Didn't veto event(6)." << std::endl; int photon_jet_sign = sign( leadingJet.rapidity() * photon.rapidity() ); // Fill histos float abs_jet_rapidity = fabs(leadingJet.rapidity()); float photon_pt = photon.pT()/GeV; float abs_photon_eta = fabs(photon.eta()); if (abs_photon_eta<1.37) { if (abs_jet_rapidity < 1.2) { if (photon_jet_sign >= 1) { _h_phbarrel_jetcentral_SS->fill(photon_pt, weight); } else { _h_phbarrel_jetcentral_OS->fill(photon_pt, weight); } } else if (abs_jet_rapidity < 2.8) { if (photon_jet_sign >= 1) { _h_phbarrel_jetmedium_SS->fill(photon_pt, weight); } else { _h_phbarrel_jetmedium_OS->fill(photon_pt, weight); } } else if (abs_jet_rapidity < 4.4) { if (photon_jet_sign >= 1) { _h_phbarrel_jetforward_SS->fill(photon_pt, weight); } else { _h_phbarrel_jetforward_OS->fill(photon_pt, weight); } } } MYDEBUG << "...Done with analyze." << std::endl; } /// Normalise histograms etc., after the run void finalize() { MYDEBUG << "In finalize." << std::endl; scale(_h_phbarrel_jetcentral_SS, crossSection()/sumOfWeights()); scale(_h_phbarrel_jetcentral_OS, crossSection()/sumOfWeights()); scale(_h_phbarrel_jetmedium_SS, crossSection()/sumOfWeights()); scale(_h_phbarrel_jetmedium_OS, crossSection()/sumOfWeights()); scale(_h_phbarrel_jetforward_SS, crossSection()/sumOfWeights()); scale(_h_phbarrel_jetforward_OS, crossSection()/sumOfWeights()); MYDEBUG << "Done with finalize." << std::endl; } private: AIDA::IHistogram1D* _h_phbarrel_jetcentral_SS; AIDA::IHistogram1D* _h_phbarrel_jetmedium_SS; AIDA::IHistogram1D* _h_phbarrel_jetforward_SS; AIDA::IHistogram1D* _h_phbarrel_jetcentral_OS; AIDA::IHistogram1D* _h_phbarrel_jetmedium_OS; AIDA::IHistogram1D* _h_phbarrel_jetforward_OS; fastjet::AreaDefinition* _area_def; std::vector _eta_bins_ph; std::vector _eta_bins_jet; std::vector _eta_bins_areaoffset; std::vector _ptDensity; std::vector _sigma; std::vector _Njets; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I1093738); } rivet-1.8.3/src/Analyses/CDF_2009_NOTE_9936.cc0000644000175000017500000000274512116077757016337 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/TriggerCDFRun2.hh" namespace Rivet { class CDF_2009_NOTE_9936 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor CDF_2009_NOTE_9936() : Analysis("CDF_2009_NOTE_9936") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { addProjection(TriggerCDFRun2(), "Trigger"); addProjection(ChargedFinalState(-1.0, 1.0, 0.4*GeV), "CFS"); _hist_nch = bookHistogram1D(1, 1, 1); } /// Perform the per-event analysis void analyze(const Event& event) { // MinBias Trigger const bool trigger = applyProjection(event, "Trigger").minBiasDecision(); if (!trigger) vetoEvent; //_sumWPassed += event.weight(); const double weight = event.weight(); // Get events charged multiplicity and fill histogram const ChargedFinalState& cfs = applyProjection(event, "CFS"); _hist_nch->fill(cfs.size(), weight); } /// Normalise histograms etc., after the run void finalize() { normalize(_hist_nch); } //@} private: AIDA::IHistogram1D *_hist_nch; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2009_NOTE_9936); } rivet-1.8.3/src/Analyses/ATLAS_2011_I894867.cc0000644000175000017500000000370612116077757016241 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { class ATLAS_2011_I894867 : public Analysis { public: ATLAS_2011_I894867() : Analysis("ATLAS_2011_I894867") { } public: void init() { addProjection(FinalState(), "FS"); _h_sigma = bookHistogram1D(1, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); const FinalState& fs = applyProjection(event, "FS"); if (fs.size() < 2) vetoEvent; // need at least two particles to calculate gaps double gapcenter = 0.; double LRG = 0.; double etapre = 0.; bool first = true; foreach(const Particle& p, fs.particlesByEta()) { // sorted from minus to plus if (first) { // First particle first = false; etapre = p.momentum().eta(); } else { double gap = fabs(p.momentum().eta()-etapre); if (gap > LRG) { LRG = gap; // largest gap gapcenter = (p.momentum().eta()+etapre)/2.; // find the center of the gap to separate the X and Y systems. } etapre = p.momentum().eta(); } } FourMomentum mxFourVector, myFourVector; foreach(const Particle& p, fs.particlesByEta()) { if (p.momentum().eta() > gapcenter) { mxFourVector += p.momentum(); } else { myFourVector += p.momentum(); } } const double M2 = max(mxFourVector.mass2(), myFourVector.mass2()); const double xi = M2/sqr(sqrtS()); // sqrt(s)=7000 GeV, note that units cancel if (xi < 5e-6) vetoEvent; _h_sigma->fill(sqrtS()/GeV, weight); } void finalize() { scale(_h_sigma, crossSection()/millibarn/sumOfWeights()); } private: AIDA::IHistogram1D* _h_sigma; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_I894867); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1082009.cc0000644000175000017500000001024412116077757016267 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/MissingMomentum.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/ClusteredPhotons.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { class ATLAS_2012_I1082009 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_I1082009() : Analysis("ATLAS_2012_I1082009"), _weight25_30(0.),_weight30_40(0.),_weight40_50(0.), _weight50_60(0.),_weight60_70(0.),_weight25_70(0.) { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // Input for the jets: No neutrinos, no muons VetoedFinalState veto; veto.addVetoPairId(MUON); veto.vetoNeutrinos(); FastJets jets(veto, FastJets::ANTIKT, 0.6); addProjection(jets, "jets"); // unstable final-state for D* addProjection(UnstableFinalState(), "UFS"); _h_pt25_30 = bookHistogram1D( 8,1,1); _h_pt30_40 = bookHistogram1D( 9,1,1); _h_pt40_50 = bookHistogram1D(10,1,1); _h_pt50_60 = bookHistogram1D(11,1,1); _h_pt60_70 = bookHistogram1D(12,1,1); _h_pt25_70 = bookHistogram1D(13,1,1); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // get the jets Jets jets; foreach (const Jet& jet, applyProjection(event, "jets").jetsByPt(25.0*GeV)) { if ( fabs(jet.eta()) < 2.5 ) jets.push_back(jet); } // get the D* mesons const UnstableFinalState& ufs = applyProjection(event, "UFS"); ParticleVector Dstar; foreach (const Particle& p, ufs.particles()) { const int id = abs(p.pdgId()); if(id==413) Dstar.push_back(p); } // loop over the jobs foreach (const Jet& jet, jets ) { double perp = jet.momentum().perp(); bool found = false; double z(0.); if(perp<25.||perp>70.) continue; foreach(const Particle & p, Dstar) { if(p.momentum().perp()<7.5) continue; if(deltaR(p, jet.momentum())<0.6) { Vector3 axis = jet.momentum().vector3().unit(); z = axis.dot(p.momentum().vector3())/jet.momentum().E(); if(z<0.3) continue; found = true; break; } } _weight25_70 += weight; if(found) _h_pt25_70->fill(z,weight); if(perp>=25.&&perp<30.) { _weight25_30 += weight; if(found) _h_pt25_30->fill(z,weight); } else if(perp>=30.&&perp<40.) { _weight30_40 += weight; if(found) _h_pt30_40->fill(z,weight); } else if(perp>=40.&&perp<50.) { _weight40_50 += weight; if(found) _h_pt40_50->fill(z,weight); } else if(perp>=50.&&perp<60.) { _weight50_60 += weight; if(found) _h_pt50_60->fill(z,weight); } else if(perp>=60.&&perp<70.) { _weight60_70 += weight; if(found) _h_pt60_70->fill(z,weight); } } } /// Normalise histograms etc., after the run void finalize() { scale(_h_pt25_30,1./_weight25_30); scale(_h_pt30_40,1./_weight30_40); scale(_h_pt40_50,1./_weight40_50); scale(_h_pt50_60,1./_weight50_60); scale(_h_pt60_70,1./_weight60_70); scale(_h_pt25_70,1./_weight25_70); } //@} private: /// @name Histograms //@{ double _weight25_30,_weight30_40,_weight40_50; double _weight50_60,_weight60_70,_weight25_70; AIDA::IHistogram1D * _h_pt25_30; AIDA::IHistogram1D * _h_pt30_40; AIDA::IHistogram1D * _h_pt40_50; AIDA::IHistogram1D * _h_pt50_60; AIDA::IHistogram1D * _h_pt60_70; AIDA::IHistogram1D * _h_pt25_70; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I1082009); } rivet-1.8.3/src/Analyses/MC_WPOL.cc0000644000175000017500000001261312116077757015105 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/WFinder.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { /// @brief MC validation analysis for W polarisation class MC_WPOL : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor MC_WPOL() : Analysis("MC_WPOL") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { FinalState fs; WFinder wfinder(fs, -MAXRAPIDITY, MAXRAPIDITY, 0.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 0.0*GeV, 0.0); addProjection(wfinder, "WFinder"); Beam beams; addProjection(beams, "Beams"); vector tags; tags += "_wplus", "_wminus"; _h_dists.resize(tags.size()); _h_histos.resize(tags.size()); for (size_t i=0; i(event, "WFinder"); if (wfinder.bosons().size() != 1) { vetoEvent; } const ParticlePair& beams = applyProjection(event, "Beams").beams(); FourMomentum pb1(beams.second.momentum()), pb2(beams.first.momentum()); Particle lepton=wfinder.constituentLeptons()[0]; FourMomentum pl(lepton.momentum()); size_t idx = (PID::threeCharge(lepton.pdgId())>0 ? 0 : 1); FourMomentum plnu(wfinder.bosons()[0].momentum()); LorentzTransform cms(-plnu.boostVector()); Matrix3 zrot(plnu.vector3(), Vector3(0.0, 0.0, 1.0)); pl=cms.transform(pl); pb1=cms.transform(pb1); pb2=cms.transform(pb2); Vector3 pl3=pl.vector3(); Vector3 pb13=pb1.vector3(); Vector3 pb23=pb2.vector3(); pl3=zrot*pl3; pb13=zrot*pb13; pb23=zrot*pb23; Vector3 xref(cos(pb13.theta())>cos(pb23.theta())?pb13:pb23); Matrix3 xrot(Vector3(xref.x(), xref.y(), 0.0), Vector3(1.0, 0.0, 0.0)); pl3=xrot*pl3; double ptw(wfinder.bosons()[0].momentum().pT()/GeV); double thetas(pl3.theta()), phis(pl3.phi()); double costhetas(cos(thetas)), sinthetas(sin(thetas)); double cosphis(cos(phis)), sinphis(sin(phis)); if (phis<0.0) phis+=2.0*M_PI; _h_histos[idx][0]->fill(costhetas,weight); _h_histos[idx][1]->fill(phis*180.0/M_PI,weight); if (ptw>20.0) { _h_histos[idx][2]->fill(costhetas,weight); _h_histos[idx][3]->fill(phis*180.0/M_PI,weight); } _h_dists[idx][0]->fill(ptw,10.0/3.0*(1.0-3.0*sqr(costhetas))+2.0/3.0,weight); _h_dists[idx][1]->fill(ptw,10.0*sinthetas*costhetas*cosphis,weight); _h_dists[idx][2]->fill(ptw,10.0*sqr(sinthetas)*(sqr(cosphis)-sqr(sinphis)),weight); _h_dists[idx][3]->fill(ptw,4.0*sinthetas*cosphis,weight); _h_dists[idx][4]->fill(ptw,4.0*costhetas,weight); _h_dists[idx][5]->fill(ptw,4.0*sinthetas*sinphis,weight); _h_dists[idx][6]->fill(ptw,10.0*costhetas*sinthetas*sinphis,weight); _h_dists[idx][7]->fill(ptw,10.0*sqr(sinthetas)*cosphis*sinphis,weight); _h_dists[idx][8]->fill(ptw,0.5*sqr(1.0-costhetas)-(1.0-2.0*sqr(costhetas)),weight); _h_dists[idx][9]->fill(ptw,0.5*sqr(1.0+costhetas)-(1.0-2.0*sqr(costhetas)),weight); _h_dists[idx][10]->fill(ptw,5.0*sqr(sinthetas)-3.0,weight); } /// Normalise histograms etc., after the run void finalize() { for (size_t i=0; i<_h_histos.size(); ++i) { foreach (AIDA::IHistogram1D* histo, _h_histos[i]) { scale(histo, crossSectionPerEvent()); } } } //@} private: /// @name Histograms //@{ std::vector > _h_dists; std::vector > _h_histos; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_WPOL); } rivet-1.8.3/src/Analyses/MC_JetSplittings.cc0000644000175000017500000000602012116077757017122 0ustar sunsun// -*- C++ -*- #include "Rivet/Analyses/MC_JetSplittings.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { MC_JetSplittings::MC_JetSplittings(const string& name, size_t njet, const string& jetpro_name) : Analysis(name), m_njet(njet), m_jetpro_name(jetpro_name), _h_log10_d(njet, NULL), _h_log10_R(njet+1, NULL) { setNeedsCrossSection(true); // legitimate use, since a base class has no .info file! } // Book histograms void MC_JetSplittings::init() { for (size_t i=0; i < m_njet; ++i) { stringstream dname; dname << "log10_d_" << i << i+1; _h_log10_d[i] = bookHistogram1D(dname.str(), 100, 0.2, log10(0.5*sqrtS())); stringstream Rname; Rname << "log10_R_" << i; _h_log10_R[i] = bookDataPointSet(Rname.str(), 100, 0.2, log10(0.5*sqrtS())); } stringstream Rname; Rname << "log10_R_" << m_njet; _h_log10_R[m_njet] = bookDataPointSet(Rname.str(), 100, 0.2, log10(0.5*sqrtS())); } // Do the analysis void MC_JetSplittings::analyze(const Event & e) { const double weight = e.weight(); const FastJets& jetpro = applyProjection(e, m_jetpro_name); // Jet resolutions and integrated jet rates const fastjet::ClusterSequence* seq = jetpro.clusterSeq(); if (seq != NULL) { double previous_dij = 10.0; for (size_t i = 0; i < m_njet; ++i) { // Jet resolution i -> j double d_ij = log10(sqrt(seq->exclusive_dmerge_max(i))); // Fill differential jet resolution _h_log10_d[i]->fill(d_ij, weight); // Fill integrated jet resolution for (int ibin = 0; ibin < _h_log10_R[i]->size(); ++ibin) { IDataPoint* dp = _h_log10_R[i]->point(ibin); double dcut = dp->coordinate(0)->value(); if (d_ij < dcut && previous_dij > dcut) { dp->coordinate(1)->setValue(dp->coordinate(1)->value() + weight); } } previous_dij = d_ij; } // One remaining integrated jet resolution for (int ibin = 0; ibin<_h_log10_R[m_njet]->size(); ++ibin) { IDataPoint* dp = _h_log10_R[m_njet]->point(ibin); double dcut = dp->coordinate(0)->value(); if (previous_dij > dcut) { dp->coordinate(1)->setValue(dp->coordinate(1)->value() + weight); } } } } // Finalize void MC_JetSplittings::finalize() { for (size_t i = 0; i < m_njet; ++i) { scale(_h_log10_d[i], crossSection()/sumOfWeights()); for (int ibin = 0; ibin<_h_log10_R[i]->size(); ++ibin) { IDataPoint* dp = _h_log10_R[i]->point(ibin); dp->coordinate(1)->setValue(dp->coordinate(1)->value()*crossSection()/sumOfWeights()); } } for (int ibin = 0; ibin < _h_log10_R[m_njet]->size(); ++ibin) { IDataPoint* dp =_h_log10_R[m_njet]->point(ibin); dp->coordinate(1)->setValue(dp->coordinate(1)->value()*crossSection()/sumOfWeights()); } } } rivet-1.8.3/src/Analyses/D0_2010_S8671338.cc0000644000175000017500000000307212116077757015717 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ZFinder.hh" namespace Rivet { /// @brief Measurement of Z(->muon muon) pT differential cross-section /// @author Flavia Dias class D0_2010_S8671338 : public Analysis { public: /// @name Construction //@{ /// Constructor D0_2010_S8671338() : Analysis("D0_2010_S8671338") { } //@} ///@name Analysis methods //@{ /// Add projections and book histograms void init() { FinalState fs; ZFinder zfinder(fs, -1.7, 1.7, 15.0*GeV, MUON, 65.0*GeV, 115.0*GeV, 0.2, false, true); addProjection(zfinder, "ZFinder"); _h_Z_pT_normalised = bookHistogram1D(1, 1, 1); _h_Z_pT_xs = bookHistogram1D(2, 1, 1); } // Do the analysis void analyze(const Event& e) { const double weight = e.weight(); const ZFinder& zfinder = applyProjection(e, "ZFinder"); if (zfinder.bosons().size()==1) { double ZpT = zfinder.bosons()[0].momentum().pT()/GeV; _h_Z_pT_normalised->fill(ZpT, weight); _h_Z_pT_xs->fill(ZpT, weight); } } /// Finalize void finalize() { normalize(_h_Z_pT_normalised, 1.0); scale(_h_Z_pT_xs, crossSectionPerEvent()); } //@} private: /// @name Histogram AIDA::IHistogram1D * _h_Z_pT_normalised; AIDA::IHistogram1D * _h_Z_pT_xs; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2010_S8671338); } rivet-1.8.3/src/Analyses/MC_ZZINC.cc0000644000175000017500000001407512116077757015225 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief MC validation analysis for Z[ee]Z[mumu] events class MC_ZZINC : public Analysis { public: /// Default constructor MC_ZZINC() : Analysis("MC_ZZINC") { } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; ZFinder zeefinder(fs, -3.5, 3.5, 25.0*GeV, ELECTRON, 65.0*GeV, 115.0*GeV, 0.2, true, true); addProjection(zeefinder, "ZeeFinder"); VetoedFinalState zmminput; zmminput.addVetoOnThisFinalState(zeefinder); ZFinder zmmfinder(zmminput, -3.5, 3.5, 25.0*GeV, MUON, 65.0*GeV, 115.0*GeV, 0.2, true, true); addProjection(zmmfinder, "ZmmFinder"); // properties of the pair momentum _h_ZZ_pT = bookHistogram1D("ZZ_pT", logBinEdges(100, 1.0, 0.5*sqrtS())); _h_ZZ_pT_peak = bookHistogram1D("ZZ_pT_peak", 25, 0.0, 25.0); _h_ZZ_eta = bookHistogram1D("ZZ_eta", 40, -7.0, 7.0); _h_ZZ_phi = bookHistogram1D("ZZ_phi", 25, 0.0, TWOPI); _h_ZZ_m = bookHistogram1D("ZZ_m", logBinEdges(100, 150.0, 180.0+0.25*sqrtS())); // correlations between the ZZ _h_ZZ_dphi = bookHistogram1D("ZZ_dphi", 25, 0.0, PI); /// @todo non-linear? _h_ZZ_deta = bookHistogram1D("ZZ_deta", 25, -7.0, 7.0); _h_ZZ_dR = bookHistogram1D("ZZ_dR", 25, 0.5, 7.0); _h_ZZ_dpT = bookHistogram1D("ZZ_dpT", logBinEdges(100, 1.0, 0.5*sqrtS())); _h_ZZ_costheta_planes = bookHistogram1D("ZZ_costheta_planes", 25, -1.0, 1.0); // properties of the Z bosons _h_Z_pT = bookHistogram1D("Z_pT", logBinEdges(100, 10.0, 0.25*sqrtS())); _h_Z_eta = bookHistogram1D("Z_eta", 70, -7.0, 7.0); // properties of the leptons _h_Zl_pT = bookHistogram1D("Zl_pT", logBinEdges(100, 30.0, 0.1 *sqrtS())); _h_Zl_eta = bookHistogram1D("Zl_eta", 40, -3.5, 3.5); // correlations between the opposite charge leptons _h_ZeZm_dphi = bookHistogram1D("ZeZm_dphi", 25, 0.0, PI); _h_ZeZm_deta = bookHistogram1D("ZeZm_deta", 25, -5.0, 5.0); _h_ZeZm_dR = bookHistogram1D("ZeZm_dR", 25, 0.5, 5.0); _h_ZeZm_m = bookHistogram1D("ZeZm_m", 100, 0.0, 300.0); } /// Do the analysis void analyze(const Event & e) { const double weight = e.weight(); const ZFinder& zeefinder = applyProjection(e, "ZeeFinder"); if (zeefinder.bosons().size()!=1) { vetoEvent; } const ZFinder& zmmfinder = applyProjection(e, "ZmmFinder"); if (zmmfinder.bosons().size()!=1) { vetoEvent; } FourMomentum zee(zeefinder.bosons()[0].momentum()); FourMomentum zmm(zmmfinder.bosons()[0].momentum()); FourMomentum zz(zee+zmm); // find leptons FourMomentum ep(zeefinder.constituents()[0].momentum()), em(zeefinder.constituents()[1].momentum()), mp(zmmfinder.constituents()[0].momentum()), mm(zmmfinder.constituents()[1].momentum()); _h_ZZ_pT->fill(zz.pT(),weight); _h_ZZ_pT_peak->fill(zz.pT(),weight); _h_ZZ_eta->fill(zz.eta(),weight); _h_ZZ_phi->fill(zz.azimuthalAngle(),weight); double mzz2=zz.mass2(); if (mzz2>0.0) _h_ZZ_m->fill(sqrt(mzz2), weight); _h_ZZ_dphi->fill(mapAngle0ToPi(zee.phi()-zmm.phi()), weight); _h_ZZ_deta->fill(zee.eta()-zmm.eta(), weight); _h_ZZ_dR->fill(deltaR(zee,zmm), weight); _h_ZZ_dpT->fill(fabs(zee.pT()-zmm.pT()), weight); Vector3 crossZee = ep.vector3().cross(em.vector3()); Vector3 crossZmm = mp.vector3().cross(mm.vector3()); double costheta = crossZee.dot(crossZmm)/crossZee.mod()/crossZmm.mod(); _h_ZZ_costheta_planes->fill(costheta, weight); _h_Z_pT->fill(zee.pT(),weight); _h_Z_pT->fill(zmm.pT(),weight); _h_Z_eta->fill(zee.eta(),weight); _h_Z_eta->fill(zmm.eta(),weight); _h_Zl_pT->fill(ep.pT(), weight); _h_Zl_pT->fill(em.pT(), weight); _h_Zl_pT->fill(mp.pT(), weight); _h_Zl_pT->fill(mm.pT(), weight); _h_Zl_eta->fill(ep.eta(), weight); _h_Zl_eta->fill(em.eta(), weight); _h_Zl_eta->fill(mp.eta(), weight); _h_Zl_eta->fill(mm.eta(), weight); _h_ZeZm_dphi->fill(mapAngle0ToPi(ep.phi()-mm.phi()), weight); _h_ZeZm_deta->fill(ep.eta()-mm.eta(), weight); _h_ZeZm_dR->fill(deltaR(ep,mm), weight); double m2=FourMomentum(ep+mm).mass2(); if (m2 < 0) m2 = 0.0; _h_ZeZm_m->fill(sqrt(m2), weight); } /// Finalize void finalize() { double norm=crossSection()/sumOfWeights(); scale(_h_ZZ_pT, norm); scale(_h_ZZ_pT_peak, norm); scale(_h_ZZ_eta, norm); scale(_h_ZZ_phi, norm); scale(_h_ZZ_m, norm); scale(_h_ZZ_dphi, norm); scale(_h_ZZ_deta, norm); scale(_h_ZZ_dR, norm); scale(_h_ZZ_dpT, norm); scale(_h_ZZ_costheta_planes, norm); scale(_h_Z_pT, norm); scale(_h_Z_eta, norm); scale(_h_Zl_pT, norm); scale(_h_Zl_eta, norm); scale(_h_ZeZm_dphi, norm); scale(_h_ZeZm_deta, norm); scale(_h_ZeZm_dR, norm); scale(_h_ZeZm_m, norm); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_ZZ_pT; AIDA::IHistogram1D * _h_ZZ_pT_peak; AIDA::IHistogram1D * _h_ZZ_eta; AIDA::IHistogram1D * _h_ZZ_phi; AIDA::IHistogram1D * _h_ZZ_m; AIDA::IHistogram1D * _h_ZZ_dphi; AIDA::IHistogram1D * _h_ZZ_deta; AIDA::IHistogram1D * _h_ZZ_dR; AIDA::IHistogram1D * _h_ZZ_dpT; AIDA::IHistogram1D * _h_ZZ_costheta_planes; AIDA::IHistogram1D * _h_Z_pT; AIDA::IHistogram1D * _h_Z_eta; AIDA::IHistogram1D * _h_Zl_pT; AIDA::IHistogram1D * _h_Zl_eta; AIDA::IHistogram1D * _h_ZeZm_dphi; AIDA::IHistogram1D * _h_ZeZm_deta; AIDA::IHistogram1D * _h_ZeZm_dR; AIDA::IHistogram1D * _h_ZeZm_m; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_ZZINC); } rivet-1.8.3/src/Analyses/ATLAS_2011_I926145.cc0000644000175000017500000001472012116077757016220 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/WFinder.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { /// @brief Measurement of electron and muon differential cross section from heavy flavour production /// /// lepton cross sections differential in pT /// /// @author Paul Bell, Holger Schulz class ATLAS_2011_I926145 : public Analysis { public: /// Constructor ATLAS_2011_I926145() : Analysis("ATLAS_2011_I926145") { } public: /// Book histograms and initialise projections before the run void init() { ///projection for electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.00,-1.52)); eta_e.push_back(make_pair(-1.37,1.37)); eta_e.push_back(make_pair(1.52,2.00)); IdentifiedFinalState elecs(eta_e, 7.0*GeV); elecs.acceptId(ELECTRON); elecs.acceptId(POSITRON); addProjection(elecs, "elecs"); //projection for muons -- same phase space as above??? Not sure if the crack region has //to be removed for the muons as well std::vector > eta_m; //eta_m.push_back(make_pair(-2.00,-1.52)); //eta_m.push_back(make_pair(-1.37,1.37)); //eta_m.push_back(make_pair(1.52,2.00)); //IdentifiedFinalState muons(eta_m, 7.0*GeV); IdentifiedFinalState muons(-2.0, 2.0, 7.0*GeV); muons.acceptId(MUON); muons.acceptId(ANTIMUON); addProjection(muons, "muons"); //projection for muons full range IdentifiedFinalState muons_full(-2.5, 2.5, 4.0*GeV); muons_full.acceptId(MUON); muons_full.acceptId(ANTIMUON); addProjection(muons_full, "muons_full"); //// ZFinder: etaMin, etaMax, pid, minmass, maxmass, dRmax, clusterPhotons, trackPhotons ZFinder zfinder_e(-2.0, 2.0, 0.0, ELECTRON, 66.0*GeV, 116.0*GeV, 0.1, false, false); addProjection(zfinder_e, "ZFinder_e"); ZFinder zfinder_mu(-2.0, 2.0, 0.0, MUON, 66.0*GeV, 116.0*GeV, 0.1, false, false); addProjection(zfinder_mu, "ZFinder_mu"); ZFinder zfinder_mufull(-2.5, 2.5, 0.0, MUON, 66.0*GeV, 116.0*GeV, 0.1, false, false); addProjection(zfinder_mufull, "ZFinder_mufull"); //// WFinder: etaMin, etaMax, pid, minmass, maxmass, dRmax, clusterPhotons, trackPhotons WFinder wfinder_e(-2.0, 2.0, 0.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2); addProjection(wfinder_e, "WFinder_e"); WFinder wfinder_mu(-2.0, 2.0, 0.0*GeV, MUON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2); addProjection(wfinder_mu, "WFinder_mu"); WFinder wfinder_mufull(-2.5, 2.5, 0.0*GeV, MUON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2); addProjection(wfinder_mufull, "WFinder_mufull"); // Book histograms - use autobooking _histPt_elecs = bookHistogram1D(1 ,1 ,1); _histPt_muons = bookHistogram1D(2 ,1 ,1); _histPt_muons_full = bookHistogram1D(3 ,1 ,1); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); const FinalState& elecs = applyProjection(event, "elecs"); const FinalState& muons = applyProjection(event, "muons"); const FinalState& muons_full = applyProjection(event, "muons_full"); // Veto event if no lepton is present if (elecs.size() == 0 && muons.size() == 0 && muons_full.size() == 0) { vetoEvent; } // Check for W and or Z bosons in event // // Z veto const ZFinder& zfinder_e = applyProjection(event, "ZFinder_e"); const ZFinder& zfinder_mu = applyProjection(event, "ZFinder_mu"); const ZFinder& zfinder_mufull = applyProjection(event, "ZFinder_mufull"); if (zfinder_e.bosons().size() > 0 || zfinder_mu.bosons().size() > 0 || zfinder_mufull.bosons().size() > 0) { MSG_DEBUG("Num elec Z-bosons found: " << zfinder_e.bosons().size()); MSG_DEBUG("Num muon Z-bosons found: " << zfinder_mu.bosons().size()); MSG_DEBUG("Num muon Z-bosons found (|eta|<2.5): " << zfinder_mufull.bosons().size()); vetoEvent; } // W veto const WFinder& wfinder_e = applyProjection(event, "WFinder_e"); const WFinder& wfinder_mu = applyProjection(event, "WFinder_mu"); const WFinder& wfinder_mufull = applyProjection(event, "WFinder_mufull"); if (wfinder_e.bosons().size() > 0 || wfinder_mu.bosons().size() > 0 || wfinder_mufull.bosons().size() > 0) { MSG_DEBUG("Num elec W-bosons found: " << wfinder_e.bosons().size()); MSG_DEBUG("Num muon W-bosons found: " << wfinder_mu.bosons().size()); MSG_DEBUG("Num muon W-bosons found (|eta|<2.5): " << wfinder_mufull.bosons().size()); vetoEvent; } // Electron histogram if (elecs.size() > 0) { foreach (const Particle& ele, elecs.particles()) { if (ele.momentum().pT()*GeV < 26.0) { _histPt_elecs->fill(ele.momentum().pT()*GeV, weight); } } } // Muon histogram if (muons.size() > 0) { foreach (const Particle& muo, muons.particles()) { if (muo.momentum().pT()*GeV < 26.0) { _histPt_muons->fill(muo.momentum().pT()*GeV, weight); } } } // Muon full histogram if (muons_full.size() > 0) { foreach (const Particle& muo, muons_full.particles()) { if (muo.momentum().pT()*GeV < 100.0) { _histPt_muons_full->fill(muo.momentum().pT()*GeV, weight); } } } } /// Normalise histograms etc., after the run void finalize() { // Data cross-section is given in nb! x-sections in rivet are in pb! scale(_histPt_elecs, crossSection()/nanobarn/sumOfWeights()); scale(_histPt_muons, crossSection()/nanobarn/sumOfWeights()); scale(_histPt_muons_full, crossSection()/nanobarn/sumOfWeights()); } private: /// @name Histograms AIDA::IHistogram1D *_histPt_elecs; AIDA::IHistogram1D *_histPt_muons; AIDA::IHistogram1D *_histPt_muons_full; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_I926145); } rivet-1.8.3/src/Analyses/CMS_2011_S8941262.cc0000644000175000017500000000365712116077757016104 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Particle.hh" namespace Rivet { class CMS_2011_S8941262 : public Analysis { public: /// Constructor CMS_2011_S8941262() : Analysis("CMS_2011_S8941262") { } /// Book histograms and initialise projections before the run void init() { _h_total = bookHistogram1D(1, 1, 1); _h_mupt = bookHistogram1D(2, 1, 1); _h_mueta = bookHistogram1D(3, 1, 1); nbtot=0.; nbmutot=0.; IdentifiedFinalState ifs(-2.1, 2.1, 6.0*GeV); ifs.acceptIdPair(MUON); addProjection(ifs, "IFS"); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // a b-quark must have been produced int nb = 0; foreach (const GenParticle* p, particles(event.genEvent())) { if (abs(p->pdg_id()) == BQUARK) nb += 1; } if (nb == 0) vetoEvent; nbtot += weight; // Event must contain a muon ParticleVector muons = applyProjection(event, "IFS").particlesByPt(); if (muons.size() < 1) vetoEvent; nbmutot += weight; FourMomentum pmu = muons[0].momentum(); _h_total->fill( 7000/GeV, weight); _h_mupt->fill( pmu.pT()/GeV, weight); _h_mueta->fill( pmu.eta()/GeV, weight); } /// Normalise histograms etc., after the run void finalize() { scale(_h_total, crossSection()/microbarn/sumOfWeights()); scale(_h_mupt, crossSection()/nanobarn/sumOfWeights()); scale(_h_mueta, crossSection()/nanobarn/sumOfWeights()); } private: double nbtot, nbmutot; AIDA::IHistogram1D *_h_total; AIDA::IHistogram1D *_h_mupt; AIDA::IHistogram1D *_h_mueta; }; // Hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2011_S8941262); } rivet-1.8.3/src/Analyses/SLD_2002_S4869273.cc0000644000175000017500000000564512116077757016112 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" /// @todo Use inline PID functions instead #define IS_PARTON_PDGID(id) ( abs(id) <= 100 && abs(id) != 22 && (abs(id) < 11 || abs(id) > 18) ) #define IS_BHADRON_PDGID(id) ( ((abs(id)/100)%10 == 5) || (abs(id) >= 5000 && abs(id) <= 5999) ) namespace Rivet { /// @brief SLD b-fragmentation measurement /// @author Peter Richardson class SLD_2002_S4869273 : public Analysis { public: /// Constructor SLD_2002_S4869273() : Analysis("SLD_2002_S4869273") { } /// @name Analysis methods //@{ /// Book projections and histograms void init() { addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "FS"); _histXbweak = bookHistogram1D(1, 1, 1); } void analyze(const Event& e) { const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed ncharged cut"); vetoEvent; } MSG_DEBUG("Passed ncharged cut"); // Get event weight for histo filling const double weight = e.weight(); // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); foreach (const GenParticle* p, particles(e.genEvent())) { const GenVertex* dv = p->end_vertex(); if (IS_BHADRON_PDGID(p->pdg_id())) { const double xp = p->momentum().e()/meanBeamMom; // If the B-hadron has no B-hadron as a child, it decayed weakly: if (dv) { bool is_weak = true; for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin() ; pp != dv->particles_out_const_end() ; ++pp) { if (IS_BHADRON_PDGID((*pp)->pdg_id())) { is_weak = false; } } if (is_weak) { _histXbweak->fill(xp, weight); } } } } } // Finalize void finalize() { normalize(_histXbweak); } private: /// Store the weighted sums of numbers of charged / charged+neutral /// particles - used to calculate average number of particles for the /// inclusive single particle distributions' normalisations. AIDA::IHistogram1D *_histXbweak; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(SLD_2002_S4869273); } rivet-1.8.3/src/Analyses/CMS_2011_S8884919.cc0000644000175000017500000000723712116077757016121 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" using namespace std; namespace Rivet { class CMS_2011_S8884919 : public Analysis { public: CMS_2011_S8884919() : Analysis("CMS_2011_S8884919") { } void init() { ChargedFinalState cfs(-2.4, 2.4, 0.0*GeV); addProjection(cfs, "CFS"); // eta bins _etabins.push_back(0.5); _etabins.push_back(1.0); _etabins.push_back(1.5); _etabins.push_back(2.0); _etabins.push_back(2.4) ; if (fuzzyEquals(sqrtS()/GeV, 900)) { for (size_t ietabin=0; ietabin < _etabins.size(); ietabin++) { _h_dNch_dn.push_back( bookHistogram1D( 2 + ietabin, 1, 1) ); } _h_dNch_dn_pt500_eta24 = bookHistogram1D(20, 1, 1); _h_dmpt_dNch_eta24 = bookProfile1D(23, 1, 1); } if (fuzzyEquals(sqrtS()/GeV, 2360)) { for (size_t ietabin=0; ietabin < _etabins.size(); ietabin++) { _h_dNch_dn.push_back( bookHistogram1D(7 + ietabin, 1, 1) ); } _h_dNch_dn_pt500_eta24 = bookHistogram1D(21, 1, 1); _h_dmpt_dNch_eta24 = bookProfile1D(24, 1, 1); } if (fuzzyEquals(sqrtS()/GeV, 7000)) { for (size_t ietabin=0; ietabin < _etabins.size(); ietabin++) { _h_dNch_dn.push_back( bookHistogram1D(12 + ietabin, 1, 1) ); } _h_dNch_dn_pt500_eta24 = bookHistogram1D(22, 1, 1); _h_dmpt_dNch_eta24 = bookProfile1D(25, 1, 1); } } void analyze(const Event& event) { const double weight = event.weight(); // Get the charged particles const ChargedFinalState& charged = applyProjection(event, "CFS"); // Resetting the multiplicity for the event to 0; vector _nch_in_Evt; vector _nch_in_Evt_pt500; _nch_in_Evt.assign(_etabins.size(), 0); _nch_in_Evt_pt500.assign(_etabins.size(), 0); double sumpt = 0; // Loop over particles in event foreach (const Particle& p, charged.particles()) { // Selecting only charged hadrons if (! PID::isHadron(p.pdgId())) continue; double pT = p.momentum().pT(); double eta = p.momentum().eta(); sumpt += pT; for (int ietabin = _etabins.size() - 1; ietabin >= 0; --ietabin) { if (fabs(eta) <= _etabins[ietabin]){ ++(_nch_in_Evt[ietabin]); if (pT > 0.5/GeV) ++(_nch_in_Evt_pt500[ietabin]); } else break; } } // Filling multiplicity-dependent histogramms for (size_t ietabin = 0; ietabin < _etabins.size(); ietabin++) { _h_dNch_dn[ietabin]->fill(_nch_in_Evt[ietabin], weight); } // Do only if eta bins are the needed ones if (_etabins[4] == 2.4 && _etabins[0] == 0.5) { if (_nch_in_Evt[4] != 0) { _h_dmpt_dNch_eta24->fill(_nch_in_Evt[4], sumpt / GeV / _nch_in_Evt[4], weight); } _h_dNch_dn_pt500_eta24->fill(_nch_in_Evt_pt500[4], weight); } else { MSG_WARNING("You changed the number of eta bins, but forgot to propagate it everywhere !!"); } } void finalize() { for (size_t ietabin = 0; ietabin < _etabins.size(); ietabin++) { normalize(_h_dNch_dn[ietabin]); } normalize(_h_dNch_dn_pt500_eta24); } private: vector _h_dNch_dn; AIDA::IHistogram1D* _h_dNch_dn_pt500_eta24; AIDA::IProfile1D* _h_dmpt_dNch_eta24; vector _etabins; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2011_S8884919); } rivet-1.8.3/src/Analyses/ALEPH_1991_S2435284.cc0000644000175000017500000000251212116077757016314 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/Multiplicity.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief ALEPH LEP1 charged multiplicity in hadronic Z decay /// @author Andy Buckley class ALEPH_1991_S2435284 : public Analysis { public: /// Constructor. ALEPH_1991_S2435284() : Analysis("ALEPH_1991_S2435284") { } /// @name Analysis methods //@{ /// Book projections and histogram void init() { const ChargedFinalState cfs; addProjection(cfs, "FS"); addProjection(Multiplicity(cfs), "Mult"); _histChTot = bookHistogram1D(1, 1, 1); } /// Do the analysis void analyze(const Event& event) { const Multiplicity& m = applyProjection(event, "Mult"); MSG_DEBUG("Total charged multiplicity = " << m.totalMultiplicity()); _histChTot->fill(m.totalMultiplicity(), event.weight()); } /// Normalize the histogram void finalize() { scale(_histChTot, 2.0/sumOfWeights()); // same as in ALEPH 1996 } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D* _histChTot; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ALEPH_1991_S2435284); } rivet-1.8.3/src/Analyses/ATLAS_2011_I919017.cc0000644000175000017500000017413212116077757016224 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Math/MathUtils.hh" namespace Rivet { namespace { inline double calcz(const Jet& j, const Particle& p) { const double num = j.momentum().vector3().dot(p.momentum().vector3()); const double den = j.momentum().vector3().mod2(); return num/den; } inline double calcptrel(const Jet& j, const Particle& p) { const double num = j.momentum().vector3().cross(p.momentum().vector3()).mod(); const double den = j.momentum().vector3().mod(); return num/den; } inline double calcr(const Jet& j, const Particle& p) { return deltaR(j.momentum().rapidity(), j.momentum().phi(), p.momentum().rapidity(), p.momentum().phi()); } // For annulus area kludge /// @todo Improve somehow... need normalisation *without* bin width factors! inline double calcrweight(const Jet& j, const Particle& p) { size_t nBins_r = 26; double bins_r[] = { 0.00, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.12, 0.14, 0.16, 0.18, 0.20, 0.22, 0.24, 0.26, 0.28, 0.30, 0.35, 0.40, 0.45, 0.50, 0.55, 0.60 }; double r = calcr(j,p); for (size_t bin = 0 ; bin < nBins_r ; bin++) { if (r < bins_r[bin+1]) { double up = bins_r[bin+1]; double down = bins_r[bin]; return ((up-down)/(M_PI*(up*up-down*down))); } } return 1.0; } } class ATLAS_2011_I919017 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2011_I919017() : Analysis("ATLAS_2011_I919017"), _sumofweights04(0), _sumofweights06(0), _numjets04_00_05_04_06(0), _numjets04_00_05_06_10(0), _numjets04_00_05_10_15(0), _numjets04_00_05_15_24(0), _numjets04_00_05_24_40(0), _numjets06_00_05_04_06(0), _numjets06_00_05_06_10(0), _numjets06_00_05_10_15(0), _numjets06_00_05_15_24(0), _numjets06_00_05_24_40(0), _numjets04_05_10_04_06(0), _numjets04_05_10_06_10(0), _numjets04_05_10_10_15(0), _numjets04_05_10_15_24(0), _numjets04_05_10_24_40(0), _numjets06_05_10_04_06(0), _numjets06_05_10_06_10(0), _numjets06_05_10_10_15(0), _numjets06_05_10_15_24(0), _numjets06_05_10_24_40(0), _numjets04_10_15_04_06(0), _numjets04_10_15_06_10(0), _numjets04_10_15_10_15(0), _numjets04_10_15_15_24(0), _numjets04_10_15_24_40(0), _numjets06_10_15_04_06(0), _numjets06_10_15_06_10(0), _numjets06_10_15_10_15(0), _numjets06_10_15_15_24(0), _numjets06_10_15_24_40(0), _numjets04_15_19_04_06(0), _numjets04_15_19_06_10(0), _numjets04_15_19_10_15(0), _numjets04_15_19_15_24(0), _numjets04_15_19_24_40(0), _numjets06_15_19_04_06(0), _numjets06_15_19_06_10(0), _numjets06_15_19_10_15(0), _numjets06_15_19_15_24(0), _numjets06_15_19_24_40(0), _numjets04_00_19_04_06(0), _numjets04_00_19_06_10(0), _numjets04_00_19_10_15(0), _numjets04_00_19_15_24(0), _numjets04_00_19_24_40(0), _numjets06_00_19_04_06(0), _numjets06_00_19_06_10(0), _numjets06_00_19_10_15(0), _numjets06_00_19_15_24(0), _numjets06_00_19_24_40(0) { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { ChargedFinalState cfs(-2.5, 2.5, 0.3*GeV); FastJets trkjets04(cfs, FastJets::ANTIKT, 0.4); FastJets trkjets06(cfs, FastJets::ANTIKT, 0.6); addProjection(trkjets04, "Jets04"); addProjection(trkjets06, "Jets06"); // Book histograms _h_pt04_00_05 = bookHistogram1D(1, 1, 1); _h_pt06_00_05 = bookHistogram1D(2, 1, 1); _h_N04_00_05_04_06 = bookHistogram1D(1, 2, 1+5); _h_N06_00_05_04_06 = bookHistogram1D(2, 2, 1+5); _h_N04_00_05_06_10 = bookHistogram1D(1, 2, 2+5); _h_N06_00_05_06_10 = bookHistogram1D(2, 2, 2+5); _h_N04_00_05_10_15 = bookHistogram1D(1, 2, 3+5); _h_N06_00_05_10_15 = bookHistogram1D(2, 2, 3+5); _h_N04_00_05_15_24 = bookHistogram1D(1, 2, 4+5); _h_N06_00_05_15_24 = bookHistogram1D(2, 2, 4+5); _h_N04_00_05_24_40 = bookHistogram1D(1, 2, 5+5); _h_N06_00_05_24_40 = bookHistogram1D(2, 2, 5+5); _h_z04_00_05_04_06 = bookHistogram1D(1, 3, 1+5); _h_z06_00_05_04_06 = bookHistogram1D(2, 3, 1+5); _h_z04_00_05_06_10 = bookHistogram1D(1, 3, 2+5); _h_z06_00_05_06_10 = bookHistogram1D(2, 3, 2+5); _h_z04_00_05_10_15 = bookHistogram1D(1, 3, 3+5); _h_z06_00_05_10_15 = bookHistogram1D(2, 3, 3+5); _h_z04_00_05_15_24 = bookHistogram1D(1, 3, 4+5); _h_z06_00_05_15_24 = bookHistogram1D(2, 3, 4+5); _h_z04_00_05_24_40 = bookHistogram1D(1, 3, 5+5); _h_z06_00_05_24_40 = bookHistogram1D(2, 3, 5+5); _h_ptrel04_00_05_04_06 = bookHistogram1D(1, 4, 1+5); _h_ptrel06_00_05_04_06 = bookHistogram1D(2, 4, 1+5); _h_ptrel04_00_05_06_10 = bookHistogram1D(1, 4, 2+5); _h_ptrel06_00_05_06_10 = bookHistogram1D(2, 4, 2+5); _h_ptrel04_00_05_10_15 = bookHistogram1D(1, 4, 3+5); _h_ptrel06_00_05_10_15 = bookHistogram1D(2, 4, 3+5); _h_ptrel04_00_05_15_24 = bookHistogram1D(1, 4, 4+5); _h_ptrel06_00_05_15_24 = bookHistogram1D(2, 4, 4+5); _h_ptrel04_00_05_24_40 = bookHistogram1D(1, 4, 5+5); _h_ptrel06_00_05_24_40 = bookHistogram1D(2, 4, 5+5); _h_rdA04_00_05_04_06 = bookHistogram1D(1, 5, 1+5); _h_rdA06_00_05_04_06 = bookHistogram1D(2, 5, 1+5); _h_rdA04_00_05_06_10 = bookHistogram1D(1, 5, 2+5); _h_rdA06_00_05_06_10 = bookHistogram1D(2, 5, 2+5); _h_rdA04_00_05_10_15 = bookHistogram1D(1, 5, 3+5); _h_rdA06_00_05_10_15 = bookHistogram1D(2, 5, 3+5); _h_rdA04_00_05_15_24 = bookHistogram1D(1, 5, 4+5); _h_rdA06_00_05_15_24 = bookHistogram1D(2, 5, 4+5); _h_rdA04_00_05_24_40 = bookHistogram1D(1, 5, 5+5); _h_rdA06_00_05_24_40 = bookHistogram1D(2, 5, 5+5); _h_pt04_05_10 = bookHistogram1D(1, 1, 2); _h_pt06_05_10 = bookHistogram1D(2, 1, 2); _h_N04_05_10_04_06 = bookHistogram1D(1, 2, 1+10); _h_N06_05_10_04_06 = bookHistogram1D(2, 2, 1+10); _h_N04_05_10_06_10 = bookHistogram1D(1, 2, 2+10); _h_N06_05_10_06_10 = bookHistogram1D(2, 2, 2+10); _h_N04_05_10_10_15 = bookHistogram1D(1, 2, 3+10); _h_N06_05_10_10_15 = bookHistogram1D(2, 2, 3+10); _h_N04_05_10_15_24 = bookHistogram1D(1, 2, 4+10); _h_N06_05_10_15_24 = bookHistogram1D(2, 2, 4+10); _h_N04_05_10_24_40 = bookHistogram1D(1, 2, 5+10); _h_N06_05_10_24_40 = bookHistogram1D(2, 2, 5+10); _h_z04_05_10_04_06 = bookHistogram1D(1, 3, 1+10); _h_z06_05_10_04_06 = bookHistogram1D(2, 3, 1+10); _h_z04_05_10_06_10 = bookHistogram1D(1, 3, 2+10); _h_z06_05_10_06_10 = bookHistogram1D(2, 3, 2+10); _h_z04_05_10_10_15 = bookHistogram1D(1, 3, 3+10); _h_z06_05_10_10_15 = bookHistogram1D(2, 3, 3+10); _h_z04_05_10_15_24 = bookHistogram1D(1, 3, 4+10); _h_z06_05_10_15_24 = bookHistogram1D(2, 3, 4+10); _h_z04_05_10_24_40 = bookHistogram1D(1, 3, 5+10); _h_z06_05_10_24_40 = bookHistogram1D(2, 3, 5+10); _h_ptrel04_05_10_04_06 = bookHistogram1D(1, 4, 1+10); _h_ptrel06_05_10_04_06 = bookHistogram1D(2, 4, 1+10); _h_ptrel04_05_10_06_10 = bookHistogram1D(1, 4, 2+10); _h_ptrel06_05_10_06_10 = bookHistogram1D(2, 4, 2+10); _h_ptrel04_05_10_10_15 = bookHistogram1D(1, 4, 3+10); _h_ptrel06_05_10_10_15 = bookHistogram1D(2, 4, 3+10); _h_ptrel04_05_10_15_24 = bookHistogram1D(1, 4, 4+10); _h_ptrel06_05_10_15_24 = bookHistogram1D(2, 4, 4+10); _h_ptrel04_05_10_24_40 = bookHistogram1D(1, 4, 5+10); _h_ptrel06_05_10_24_40 = bookHistogram1D(2, 4, 5+10); _h_rdA04_05_10_04_06 = bookHistogram1D(1, 5, 1+10); _h_rdA06_05_10_04_06 = bookHistogram1D(2, 5, 1+10); _h_rdA04_05_10_06_10 = bookHistogram1D(1, 5, 2+10); _h_rdA06_05_10_06_10 = bookHistogram1D(2, 5, 2+10); _h_rdA04_05_10_10_15 = bookHistogram1D(1, 5, 3+10); _h_rdA06_05_10_10_15 = bookHistogram1D(2, 5, 3+10); _h_rdA04_05_10_15_24 = bookHistogram1D(1, 5, 4+10); _h_rdA06_05_10_15_24 = bookHistogram1D(2, 5, 4+10); _h_rdA04_05_10_24_40 = bookHistogram1D(1, 5, 5+10); _h_rdA06_05_10_24_40 = bookHistogram1D(2, 5, 5+10); _h_pt04_10_15 = bookHistogram1D(1, 1, 3); _h_pt06_10_15 = bookHistogram1D(2, 1, 3); _h_N04_10_15_04_06 = bookHistogram1D(1, 2, 1+15); _h_N06_10_15_04_06 = bookHistogram1D(2, 2, 1+15); _h_N04_10_15_06_10 = bookHistogram1D(1, 2, 2+15); _h_N06_10_15_06_10 = bookHistogram1D(2, 2, 2+15); _h_N04_10_15_10_15 = bookHistogram1D(1, 2, 3+15); _h_N06_10_15_10_15 = bookHistogram1D(2, 2, 3+15); _h_N04_10_15_15_24 = bookHistogram1D(1, 2, 4+15); _h_N06_10_15_15_24 = bookHistogram1D(2, 2, 4+15); _h_N04_10_15_24_40 = bookHistogram1D(1, 2, 5+15); _h_N06_10_15_24_40 = bookHistogram1D(2, 2, 5+15); _h_z04_10_15_04_06 = bookHistogram1D(1, 3, 1+15); _h_z06_10_15_04_06 = bookHistogram1D(2, 3, 1+15); _h_z04_10_15_06_10 = bookHistogram1D(1, 3, 2+15); _h_z06_10_15_06_10 = bookHistogram1D(2, 3, 2+15); _h_z04_10_15_10_15 = bookHistogram1D(1, 3, 3+15); _h_z06_10_15_10_15 = bookHistogram1D(2, 3, 3+15); _h_z04_10_15_15_24 = bookHistogram1D(1, 3, 4+15); _h_z06_10_15_15_24 = bookHistogram1D(2, 3, 4+15); _h_z04_10_15_24_40 = bookHistogram1D(1, 3, 5+15); _h_z06_10_15_24_40 = bookHistogram1D(2, 3, 5+15); _h_ptrel04_10_15_04_06 = bookHistogram1D(1, 4, 1+15); _h_ptrel06_10_15_04_06 = bookHistogram1D(2, 4, 1+15); _h_ptrel04_10_15_06_10 = bookHistogram1D(1, 4, 2+15); _h_ptrel06_10_15_06_10 = bookHistogram1D(2, 4, 2+15); _h_ptrel04_10_15_10_15 = bookHistogram1D(1, 4, 3+15); _h_ptrel06_10_15_10_15 = bookHistogram1D(2, 4, 3+15); _h_ptrel04_10_15_15_24 = bookHistogram1D(1, 4, 4+15); _h_ptrel06_10_15_15_24 = bookHistogram1D(2, 4, 4+15); _h_ptrel04_10_15_24_40 = bookHistogram1D(1, 4, 5+15); _h_ptrel06_10_15_24_40 = bookHistogram1D(2, 4, 5+15); _h_rdA04_10_15_04_06 = bookHistogram1D(1, 5, 1+15); _h_rdA06_10_15_04_06 = bookHistogram1D(2, 5, 1+15); _h_rdA04_10_15_06_10 = bookHistogram1D(1, 5, 2+15); _h_rdA06_10_15_06_10 = bookHistogram1D(2, 5, 2+15); _h_rdA04_10_15_10_15 = bookHistogram1D(1, 5, 3+15); _h_rdA06_10_15_10_15 = bookHistogram1D(2, 5, 3+15); _h_rdA04_10_15_15_24 = bookHistogram1D(1, 5, 4+15); _h_rdA06_10_15_15_24 = bookHistogram1D(2, 5, 4+15); _h_rdA04_10_15_24_40 = bookHistogram1D(1, 5, 5+15); _h_rdA06_10_15_24_40 = bookHistogram1D(2, 5, 5+15); _h_pt04_15_19 = bookHistogram1D(1, 1, 4); _h_pt06_15_19 = bookHistogram1D(2, 1, 4); _h_N04_15_19_04_06 = bookHistogram1D(1, 2, 1+20); _h_N06_15_19_04_06 = bookHistogram1D(2, 2, 1+20); _h_N04_15_19_06_10 = bookHistogram1D(1, 2, 2+20); _h_N06_15_19_06_10 = bookHistogram1D(2, 2, 2+20); _h_N04_15_19_10_15 = bookHistogram1D(1, 2, 3+20); _h_N06_15_19_10_15 = bookHistogram1D(2, 2, 3+20); _h_N04_15_19_15_24 = bookHistogram1D(1, 2, 4+20); _h_N06_15_19_15_24 = bookHistogram1D(2, 2, 4+20); _h_N04_15_19_24_40 = bookHistogram1D(1, 2, 5+20); _h_N06_15_19_24_40 = bookHistogram1D(2, 2, 5+20); _h_z04_15_19_04_06 = bookHistogram1D(1, 3, 1+20); _h_z06_15_19_04_06 = bookHistogram1D(2, 3, 1+20); _h_z04_15_19_06_10 = bookHistogram1D(1, 3, 2+20); _h_z06_15_19_06_10 = bookHistogram1D(2, 3, 2+20); _h_z04_15_19_10_15 = bookHistogram1D(1, 3, 3+20); _h_z06_15_19_10_15 = bookHistogram1D(2, 3, 3+20); _h_z04_15_19_15_24 = bookHistogram1D(1, 3, 4+20); _h_z06_15_19_15_24 = bookHistogram1D(2, 3, 4+20); _h_z04_15_19_24_40 = bookHistogram1D(1, 3, 5+20); _h_z06_15_19_24_40 = bookHistogram1D(2, 3, 5+20); _h_ptrel04_15_19_04_06 = bookHistogram1D(1, 4, 1+20); _h_ptrel06_15_19_04_06 = bookHistogram1D(2, 4, 1+20); _h_ptrel04_15_19_06_10 = bookHistogram1D(1, 4, 2+20); _h_ptrel06_15_19_06_10 = bookHistogram1D(2, 4, 2+20); _h_ptrel04_15_19_10_15 = bookHistogram1D(1, 4, 3+20); _h_ptrel06_15_19_10_15 = bookHistogram1D(2, 4, 3+20); _h_ptrel04_15_19_15_24 = bookHistogram1D(1, 4, 4+20); _h_ptrel06_15_19_15_24 = bookHistogram1D(2, 4, 4+20); _h_ptrel04_15_19_24_40 = bookHistogram1D(1, 4, 5+20); _h_ptrel06_15_19_24_40 = bookHistogram1D(2, 4, 5+20); _h_rdA04_15_19_04_06 = bookHistogram1D(1, 5, 1+20); _h_rdA06_15_19_04_06 = bookHistogram1D(2, 5, 1+20); _h_rdA04_15_19_06_10 = bookHistogram1D(1, 5, 2+20); _h_rdA06_15_19_06_10 = bookHistogram1D(2, 5, 2+20); _h_rdA04_15_19_10_15 = bookHistogram1D(1, 5, 3+20); _h_rdA06_15_19_10_15 = bookHistogram1D(2, 5, 3+20); _h_rdA04_15_19_15_24 = bookHistogram1D(1, 5, 4+20); _h_rdA06_15_19_15_24 = bookHistogram1D(2, 5, 4+20); _h_rdA04_15_19_24_40 = bookHistogram1D(1, 5, 5+20); _h_rdA06_15_19_24_40 = bookHistogram1D(2, 5, 5+20); _h_N04_00_19_04_06 = bookHistogram1D(1, 2, 1+0); _h_N06_00_19_04_06 = bookHistogram1D(2, 2, 1+0); _h_N04_00_19_06_10 = bookHistogram1D(1, 2, 2+0); _h_N06_00_19_06_10 = bookHistogram1D(2, 2, 2+0); _h_N04_00_19_10_15 = bookHistogram1D(1, 2, 3+0); _h_N06_00_19_10_15 = bookHistogram1D(2, 2, 3+0); _h_N04_00_19_15_24 = bookHistogram1D(1, 2, 4+0); _h_N06_00_19_15_24 = bookHistogram1D(2, 2, 4+0); _h_N04_00_19_24_40 = bookHistogram1D(1, 2, 5+0); _h_N06_00_19_24_40 = bookHistogram1D(2, 2, 5+0); _h_z04_00_19_04_06 = bookHistogram1D(1, 3, 1+0); _h_z06_00_19_04_06 = bookHistogram1D(2, 3, 1+0); _h_z04_00_19_06_10 = bookHistogram1D(1, 3, 2+0); _h_z06_00_19_06_10 = bookHistogram1D(2, 3, 2+0); _h_z04_00_19_10_15 = bookHistogram1D(1, 3, 3+0); _h_z06_00_19_10_15 = bookHistogram1D(2, 3, 3+0); _h_z04_00_19_15_24 = bookHistogram1D(1, 3, 4+0); _h_z06_00_19_15_24 = bookHistogram1D(2, 3, 4+0); _h_z04_00_19_24_40 = bookHistogram1D(1, 3, 5+0); _h_z06_00_19_24_40 = bookHistogram1D(2, 3, 5+0); _h_ptrel04_00_19_04_06 = bookHistogram1D(1, 4, 1+0); _h_ptrel06_00_19_04_06 = bookHistogram1D(2, 4, 1+0); _h_ptrel04_00_19_06_10 = bookHistogram1D(1, 4, 2+0); _h_ptrel06_00_19_06_10 = bookHistogram1D(2, 4, 2+0); _h_ptrel04_00_19_10_15 = bookHistogram1D(1, 4, 3+0); _h_ptrel06_00_19_10_15 = bookHistogram1D(2, 4, 3+0); _h_ptrel04_00_19_15_24 = bookHistogram1D(1, 4, 4+0); _h_ptrel06_00_19_15_24 = bookHistogram1D(2, 4, 4+0); _h_ptrel04_00_19_24_40 = bookHistogram1D(1, 4, 5+0); _h_ptrel06_00_19_24_40 = bookHistogram1D(2, 4, 5+0); _h_rdA04_00_19_04_06 = bookHistogram1D(1, 5, 1+0); _h_rdA06_00_19_04_06 = bookHistogram1D(2, 5, 1+0); _h_rdA04_00_19_06_10 = bookHistogram1D(1, 5, 2+0); _h_rdA06_00_19_06_10 = bookHistogram1D(2, 5, 2+0); _h_rdA04_00_19_10_15 = bookHistogram1D(1, 5, 3+0); _h_rdA06_00_19_10_15 = bookHistogram1D(2, 5, 3+0); _h_rdA04_00_19_15_24 = bookHistogram1D(1, 5, 4+0); _h_rdA06_00_19_15_24 = bookHistogram1D(2, 5, 4+0); _h_rdA04_00_19_24_40 = bookHistogram1D(1, 5, 5+0); _h_rdA06_00_19_24_40 = bookHistogram1D(2, 5, 5+0); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); const Jets& jets04 = applyProjection(event, "Jets04").jets(); if (!jets04.empty()) { _sumofweights04 += weight; foreach (const Jet& j, jets04) { const double jetpt = j.momentum().pT(); if (fabs(j.momentum().rapidity()) < 0.5) { _h_pt04_00_05->fill(jetpt/GeV, weight); if (inRange(jetpt/GeV, 4., 6.)) { _numjets04_00_05_04_06 += weight; _h_N04_00_05_04_06->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_00_05_04_06->fill(calcz(j,p),weight); _h_ptrel04_00_05_04_06->fill(calcptrel(j,p),weight); _h_rdA04_00_05_04_06->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 6., 10.)) { _numjets04_00_05_06_10 += weight; _h_N04_00_05_06_10->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_00_05_06_10->fill(calcz(j,p),weight); _h_ptrel04_00_05_06_10->fill(calcptrel(j,p),weight); _h_rdA04_00_05_06_10->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 10., 15.)) { _numjets04_00_05_10_15 += weight; _h_N04_00_05_10_15->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_00_05_10_15->fill(calcz(j,p),weight); _h_ptrel04_00_05_10_15->fill(calcptrel(j,p),weight); _h_rdA04_00_05_10_15->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 15., 24.)) { _numjets04_00_05_15_24 += weight; _h_N04_00_05_15_24->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_00_05_15_24->fill(calcz(j,p),weight); _h_ptrel04_00_05_15_24->fill(calcptrel(j,p),weight); _h_rdA04_00_05_15_24->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 24., 40.)) { _numjets04_00_05_24_40 += weight; _h_N04_00_05_24_40->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_00_05_24_40->fill(calcz(j,p),weight); _h_ptrel04_00_05_24_40->fill(calcptrel(j,p),weight); _h_rdA04_00_05_24_40->fill(calcr(j,p),weight*calcrweight(j,p)); } } } if (fabs(j.momentum().rapidity()) > 0.5 && fabs(j.momentum().rapidity()) < 1.0) { _h_pt04_05_10->fill(jetpt/GeV, weight); if (inRange(jetpt/GeV, 4., 6.)) { _numjets04_05_10_04_06 += weight; _h_N04_05_10_04_06->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_05_10_04_06->fill(calcz(j,p),weight); _h_ptrel04_05_10_04_06->fill(calcptrel(j,p),weight); _h_rdA04_05_10_04_06->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 6., 10.)) { _numjets04_05_10_06_10 += weight; _h_N04_05_10_06_10->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_05_10_06_10->fill(calcz(j,p),weight); _h_ptrel04_05_10_06_10->fill(calcptrel(j,p),weight); _h_rdA04_05_10_06_10->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 10., 15.)) { _numjets04_05_10_10_15 += weight; _h_N04_05_10_10_15->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_05_10_10_15->fill(calcz(j,p),weight); _h_ptrel04_05_10_10_15->fill(calcptrel(j,p),weight); _h_rdA04_05_10_10_15->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 15., 24.)) { _numjets04_05_10_15_24 += weight; _h_N04_05_10_15_24->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_05_10_15_24->fill(calcz(j,p),weight); _h_ptrel04_05_10_15_24->fill(calcptrel(j,p),weight); _h_rdA04_05_10_15_24->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 24., 40.)) { _numjets04_05_10_24_40 += weight; _h_N04_05_10_24_40->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_05_10_24_40->fill(calcz(j,p),weight); _h_ptrel04_05_10_24_40->fill(calcptrel(j,p),weight); _h_rdA04_05_10_24_40->fill(calcr(j,p),weight*calcrweight(j,p)); } } } if (fabs(j.momentum().rapidity()) > 1.0 && fabs(j.momentum().rapidity()) < 1.5) { _h_pt04_10_15->fill(jetpt/GeV, weight); if (inRange(jetpt/GeV, 4., 6.)) { _numjets04_10_15_04_06 += weight; _h_N04_10_15_04_06->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_10_15_04_06->fill(calcz(j,p),weight); _h_ptrel04_10_15_04_06->fill(calcptrel(j,p),weight); _h_rdA04_10_15_04_06->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 6., 10.)) { _numjets04_10_15_06_10 += weight; _h_N04_10_15_06_10->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_10_15_06_10->fill(calcz(j,p),weight); _h_ptrel04_10_15_06_10->fill(calcptrel(j,p),weight); _h_rdA04_10_15_06_10->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 10., 15.)) { _numjets04_10_15_10_15 += weight; _h_N04_10_15_10_15->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_10_15_10_15->fill(calcz(j,p),weight); _h_ptrel04_10_15_10_15->fill(calcptrel(j,p),weight); _h_rdA04_10_15_10_15->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 15., 24.)) { _numjets04_10_15_15_24 += weight; _h_N04_10_15_15_24->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_10_15_15_24->fill(calcz(j,p),weight); _h_ptrel04_10_15_15_24->fill(calcptrel(j,p),weight); _h_rdA04_10_15_15_24->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 24., 40.)) { _numjets04_10_15_24_40 += weight; _h_N04_10_15_24_40->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_10_15_24_40->fill(calcz(j,p),weight); _h_ptrel04_10_15_24_40->fill(calcptrel(j,p),weight); _h_rdA04_10_15_24_40->fill(calcr(j,p),weight*calcrweight(j,p)); } } } if (fabs(j.momentum().rapidity()) > 1.5 && fabs(j.momentum().rapidity()) < 1.9) { _h_pt04_15_19->fill(jetpt/GeV, weight); if (inRange(jetpt/GeV, 4., 6.)) { _numjets04_15_19_04_06 += weight; _h_N04_15_19_04_06->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_15_19_04_06->fill(calcz(j,p),weight); _h_ptrel04_15_19_04_06->fill(calcptrel(j,p),weight); _h_rdA04_15_19_04_06->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 6., 10.)) { _numjets04_15_19_06_10 += weight; _h_N04_15_19_06_10->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_15_19_06_10->fill(calcz(j,p),weight); _h_ptrel04_15_19_06_10->fill(calcptrel(j,p),weight); _h_rdA04_15_19_06_10->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 10., 15.)) { _numjets04_15_19_10_15 += weight; _h_N04_15_19_10_15->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_15_19_10_15->fill(calcz(j,p),weight); _h_ptrel04_15_19_10_15->fill(calcptrel(j,p),weight); _h_rdA04_15_19_10_15->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 15., 24.)) { _numjets04_15_19_15_24 += weight; _h_N04_15_19_15_24->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_15_19_15_24->fill(calcz(j,p),weight); _h_ptrel04_15_19_15_24->fill(calcptrel(j,p),weight); _h_rdA04_15_19_15_24->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 24., 40.)) { _numjets04_15_19_24_40 += weight; _h_N04_15_19_24_40->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_15_19_24_40->fill(calcz(j,p),weight); _h_ptrel04_15_19_24_40->fill(calcptrel(j,p),weight); _h_rdA04_15_19_24_40->fill(calcr(j,p),weight*calcrweight(j,p)); } } } // 1.5 < rapidity < 1.9 if (fabs(j.momentum().rapidity()) < 1.9) { if (inRange(jetpt/GeV, 4., 6.)) { _numjets04_00_19_04_06 += weight; _h_N04_00_19_04_06->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_00_19_04_06->fill(calcz(j,p),weight); _h_ptrel04_00_19_04_06->fill(calcptrel(j,p),weight); _h_rdA04_00_19_04_06->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 6., 10.)) { _numjets04_00_19_06_10 += weight; _h_N04_00_19_06_10->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_00_19_06_10->fill(calcz(j,p),weight); _h_ptrel04_00_19_06_10->fill(calcptrel(j,p),weight); _h_rdA04_00_19_06_10->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 10., 15.)) { _numjets04_00_19_10_15 += weight; _h_N04_00_19_10_15->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_00_19_10_15->fill(calcz(j,p),weight); _h_ptrel04_00_19_10_15->fill(calcptrel(j,p),weight); _h_rdA04_00_19_10_15->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 15., 24.)) { _numjets04_00_19_15_24 += weight; _h_N04_00_19_15_24->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_00_19_15_24->fill(calcz(j,p),weight); _h_ptrel04_00_19_15_24->fill(calcptrel(j,p),weight); _h_rdA04_00_19_15_24->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 24., 40.)) { _numjets04_00_19_24_40 += weight; _h_N04_00_19_24_40->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z04_00_19_24_40->fill(calcz(j,p),weight); _h_ptrel04_00_19_24_40->fill(calcptrel(j,p),weight); _h_rdA04_00_19_24_40->fill(calcr(j,p),weight*calcrweight(j,p)); } } } // 0.0 < rapidity < 1.9 } // each jet } // jets04 not empty const Jets& jets06 = applyProjection(event, "Jets06").jets(); if (!jets06.empty()) { _sumofweights06 += weight; foreach (const Jet& j, jets06) { const double jetpt = j.momentum().pT(); if (fabs(j.momentum().rapidity()) < 0.5) { _h_pt06_00_05->fill(jetpt/GeV, weight); if (inRange(jetpt/GeV, 4., 6.)) { _numjets06_00_05_04_06 += weight; _h_N06_00_05_04_06->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_00_05_04_06->fill(calcz(j,p),weight); _h_ptrel06_00_05_04_06->fill(calcptrel(j,p),weight); _h_rdA06_00_05_04_06->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 6., 10.)) { _numjets06_00_05_06_10 += weight; _h_N06_00_05_06_10->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_00_05_06_10->fill(calcz(j,p),weight); _h_ptrel06_00_05_06_10->fill(calcptrel(j,p),weight); _h_rdA06_00_05_06_10->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 10., 15.)) { _numjets06_00_05_10_15 += weight; _h_N06_00_05_10_15->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_00_05_10_15->fill(calcz(j,p),weight); _h_ptrel06_00_05_10_15->fill(calcptrel(j,p),weight); _h_rdA06_00_05_10_15->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 15., 24.)) { _numjets06_00_05_15_24 += weight; _h_N06_00_05_15_24->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_00_05_15_24->fill(calcz(j,p),weight); _h_ptrel06_00_05_15_24->fill(calcptrel(j,p),weight); _h_rdA06_00_05_15_24->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 24., 40.)) { _numjets06_00_05_24_40 += weight; _h_N06_00_05_24_40->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_00_05_24_40->fill(calcz(j,p),weight); _h_ptrel06_00_05_24_40->fill(calcptrel(j,p),weight); _h_rdA06_00_05_24_40->fill(calcr(j,p),weight*calcrweight(j,p)); } } } if (fabs(j.momentum().rapidity()) > 0.5 && fabs(j.momentum().rapidity()) < 1.0) { _h_pt06_05_10->fill(jetpt/GeV, weight); if (inRange(jetpt/GeV, 4., 6.)) { _numjets06_05_10_04_06 += weight; _h_N06_05_10_04_06->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_05_10_04_06->fill(calcz(j,p),weight); _h_ptrel06_05_10_04_06->fill(calcptrel(j,p),weight); _h_rdA06_05_10_04_06->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 6., 10.)) { _numjets06_05_10_06_10 += weight; _h_N06_05_10_06_10->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_05_10_06_10->fill(calcz(j,p),weight); _h_ptrel06_05_10_06_10->fill(calcptrel(j,p),weight); _h_rdA06_05_10_06_10->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 10., 15.)) { _numjets06_05_10_10_15 += weight; _h_N06_05_10_10_15->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_05_10_10_15->fill(calcz(j,p),weight); _h_ptrel06_05_10_10_15->fill(calcptrel(j,p),weight); _h_rdA06_05_10_10_15->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 15., 24.)) { _numjets06_05_10_15_24 += weight; _h_N06_05_10_15_24->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_05_10_15_24->fill(calcz(j,p),weight); _h_ptrel06_05_10_15_24->fill(calcptrel(j,p),weight); _h_rdA06_05_10_15_24->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 24., 40.)) { _numjets06_05_10_24_40 += weight; _h_N06_05_10_24_40->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_05_10_24_40->fill(calcz(j,p),weight); _h_ptrel06_05_10_24_40->fill(calcptrel(j,p),weight); _h_rdA06_05_10_24_40->fill(calcr(j,p),weight*calcrweight(j,p)); } } } if (fabs(j.momentum().rapidity()) > 1.0 && fabs(j.momentum().rapidity()) < 1.5) { _h_pt06_10_15->fill(jetpt/GeV, weight); if (inRange(jetpt/GeV, 4., 6.)) { _numjets06_10_15_04_06 += weight; _h_N06_10_15_04_06->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_10_15_04_06->fill(calcz(j,p),weight); _h_ptrel06_10_15_04_06->fill(calcptrel(j,p),weight); _h_rdA06_10_15_04_06->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 6., 10.)) { _numjets06_10_15_06_10 += weight; _h_N06_10_15_06_10->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_10_15_06_10->fill(calcz(j,p),weight); _h_ptrel06_10_15_06_10->fill(calcptrel(j,p),weight); _h_rdA06_10_15_06_10->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 10., 15.)) { _numjets06_10_15_10_15 += weight; _h_N06_10_15_10_15->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_10_15_10_15->fill(calcz(j,p),weight); _h_ptrel06_10_15_10_15->fill(calcptrel(j,p),weight); _h_rdA06_10_15_10_15->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 15., 24.)) { _numjets06_10_15_15_24 += weight; _h_N06_10_15_15_24->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_10_15_15_24->fill(calcz(j,p),weight); _h_ptrel06_10_15_15_24->fill(calcptrel(j,p),weight); _h_rdA06_10_15_15_24->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 24., 40.)) { _numjets06_10_15_24_40 += weight; _h_N06_10_15_24_40->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_10_15_24_40->fill(calcz(j,p),weight); _h_ptrel06_10_15_24_40->fill(calcptrel(j,p),weight); _h_rdA06_10_15_24_40->fill(calcr(j,p),weight*calcrweight(j,p)); } } } if (fabs(j.momentum().rapidity()) > 1.5 && fabs(j.momentum().rapidity()) < 1.9) { _h_pt06_15_19->fill(jetpt/GeV, weight); if (inRange(jetpt/GeV, 4., 6.)) { _numjets06_15_19_04_06 += weight; _h_N06_15_19_04_06->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_15_19_04_06->fill(calcz(j,p),weight); _h_ptrel06_15_19_04_06->fill(calcptrel(j,p),weight); _h_rdA06_15_19_04_06->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 6., 10.)) { _numjets06_15_19_06_10 += weight; _h_N06_15_19_06_10->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_15_19_06_10->fill(calcz(j,p),weight); _h_ptrel06_15_19_06_10->fill(calcptrel(j,p),weight); _h_rdA06_15_19_06_10->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 10., 15.)) { _numjets06_15_19_10_15 += weight; _h_N06_15_19_10_15->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_15_19_10_15->fill(calcz(j,p),weight); _h_ptrel06_15_19_10_15->fill(calcptrel(j,p),weight); _h_rdA06_15_19_10_15->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 15., 24.)) { _numjets06_15_19_15_24 += weight; _h_N06_15_19_15_24->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_15_19_15_24->fill(calcz(j,p),weight); _h_ptrel06_15_19_15_24->fill(calcptrel(j,p),weight); _h_rdA06_15_19_15_24->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 24., 40.)) { _numjets06_15_19_24_40 += weight; _h_N06_15_19_24_40->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_15_19_24_40->fill(calcz(j,p),weight); _h_ptrel06_15_19_24_40->fill(calcptrel(j,p),weight); _h_rdA06_15_19_24_40->fill(calcr(j,p),weight*calcrweight(j,p)); } } } // 1.5 < rapidity < 1.9 if (fabs(j.momentum().rapidity()) < 1.9) { if (inRange(jetpt/GeV, 4., 6.)) { _numjets06_00_19_04_06 += weight; _h_N06_00_19_04_06->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_00_19_04_06->fill(calcz(j,p),weight); _h_ptrel06_00_19_04_06->fill(calcptrel(j,p),weight); _h_rdA06_00_19_04_06->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 6., 10.)) { _numjets06_00_19_06_10 += weight; _h_N06_00_19_06_10->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_00_19_06_10->fill(calcz(j,p),weight); _h_ptrel06_00_19_06_10->fill(calcptrel(j,p),weight); _h_rdA06_00_19_06_10->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 10., 15.)) { _numjets06_00_19_10_15 += weight; _h_N06_00_19_10_15->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_00_19_10_15->fill(calcz(j,p),weight); _h_ptrel06_00_19_10_15->fill(calcptrel(j,p),weight); _h_rdA06_00_19_10_15->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 15., 24.)) { _numjets06_00_19_15_24 += weight; _h_N06_00_19_15_24->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_00_19_15_24->fill(calcz(j,p),weight); _h_ptrel06_00_19_15_24->fill(calcptrel(j,p),weight); _h_rdA06_00_19_15_24->fill(calcr(j,p),weight*calcrweight(j,p)); } } if (inRange(jetpt/GeV, 24., 40.)) { _numjets06_00_19_24_40 += weight; _h_N06_00_19_24_40->fill(j.particles().size(),weight); foreach (const Particle& p, j.particles()) { _h_z06_00_19_24_40->fill(calcz(j,p),weight); _h_ptrel06_00_19_24_40->fill(calcptrel(j,p),weight); _h_rdA06_00_19_24_40->fill(calcr(j,p),weight*calcrweight(j,p)); } } } } // each jet } // jets06 not empty } // end of event /// Normalise histograms etc., after the run void finalize() { // pT histos: d2sigma_jet / deta dpT const double xsec = crossSection()/microbarn; safeinvscale(_h_pt04_00_05, _sumofweights04*(2*0.5)/xsec); safeinvscale(_h_pt06_00_05, _sumofweights06*(2*0.5)/xsec); safeinvscale(_h_pt04_05_10, _sumofweights04*(2*0.5)/xsec); safeinvscale(_h_pt06_05_10, _sumofweights06*(2*0.5)/xsec); safeinvscale(_h_pt04_10_15, _sumofweights04*(2*0.5)/xsec); safeinvscale(_h_pt06_10_15, _sumofweights06*(2*0.5)/xsec); safeinvscale(_h_pt04_15_19, _sumofweights04*(2*0.4)/xsec); safeinvscale(_h_pt06_15_19, _sumofweights06*(2*0.4)/xsec); // N histos: 1/N_jet dN_jet / dN^{ch}_jet safeinvscale(_h_N04_00_05_04_06, _numjets04_00_05_04_06); safeinvscale(_h_N06_00_05_04_06, _numjets06_00_05_04_06); safeinvscale(_h_N04_00_05_06_10, _numjets04_00_05_06_10); safeinvscale(_h_N06_00_05_06_10, _numjets06_00_05_06_10); safeinvscale(_h_N04_00_05_10_15, _numjets04_00_05_10_15); safeinvscale(_h_N06_00_05_10_15, _numjets06_00_05_10_15); safeinvscale(_h_N04_00_05_15_24, _numjets04_00_05_15_24); safeinvscale(_h_N06_00_05_15_24, _numjets06_00_05_15_24); safeinvscale(_h_N04_00_05_24_40, _numjets04_00_05_24_40); safeinvscale(_h_N06_00_05_24_40, _numjets06_00_05_24_40); safeinvscale(_h_N04_05_10_04_06, _numjets04_05_10_04_06); safeinvscale(_h_N06_05_10_04_06, _numjets06_05_10_04_06); safeinvscale(_h_N04_05_10_06_10, _numjets04_05_10_06_10); safeinvscale(_h_N06_05_10_06_10, _numjets06_05_10_06_10); safeinvscale(_h_N04_05_10_10_15, _numjets04_05_10_10_15); safeinvscale(_h_N06_05_10_10_15, _numjets06_05_10_10_15); safeinvscale(_h_N04_05_10_15_24, _numjets04_05_10_15_24); safeinvscale(_h_N06_05_10_15_24, _numjets06_05_10_15_24); safeinvscale(_h_N04_05_10_24_40, _numjets04_05_10_24_40); safeinvscale(_h_N06_05_10_24_40, _numjets06_05_10_24_40); safeinvscale(_h_N04_10_15_04_06, _numjets04_10_15_04_06); safeinvscale(_h_N06_10_15_04_06, _numjets06_10_15_04_06); safeinvscale(_h_N04_10_15_06_10, _numjets04_10_15_06_10); safeinvscale(_h_N06_10_15_06_10, _numjets06_10_15_06_10); safeinvscale(_h_N04_10_15_10_15, _numjets04_10_15_10_15); safeinvscale(_h_N06_10_15_10_15, _numjets06_10_15_10_15); safeinvscale(_h_N04_10_15_15_24, _numjets04_10_15_15_24); safeinvscale(_h_N06_10_15_15_24, _numjets06_10_15_15_24); safeinvscale(_h_N04_10_15_24_40, _numjets04_10_15_24_40); safeinvscale(_h_N06_10_15_24_40, _numjets06_10_15_24_40); safeinvscale(_h_N04_15_19_04_06, _numjets04_15_19_04_06); safeinvscale(_h_N06_15_19_04_06, _numjets06_15_19_04_06); safeinvscale(_h_N04_15_19_06_10, _numjets04_15_19_06_10); safeinvscale(_h_N06_15_19_06_10, _numjets06_15_19_06_10); safeinvscale(_h_N04_15_19_10_15, _numjets04_15_19_10_15); safeinvscale(_h_N06_15_19_10_15, _numjets06_15_19_10_15); safeinvscale(_h_N04_15_19_15_24, _numjets04_15_19_15_24); safeinvscale(_h_N06_15_19_15_24, _numjets06_15_19_15_24); safeinvscale(_h_N04_15_19_24_40, _numjets04_15_19_24_40); safeinvscale(_h_N06_15_19_24_40, _numjets06_15_19_24_40); safeinvscale(_h_N04_00_19_04_06, _numjets04_00_19_04_06); safeinvscale(_h_N06_00_19_04_06, _numjets06_00_19_04_06); safeinvscale(_h_N04_00_19_06_10, _numjets04_00_19_06_10); safeinvscale(_h_N06_00_19_06_10, _numjets06_00_19_06_10); safeinvscale(_h_N04_00_19_10_15, _numjets04_00_19_10_15); safeinvscale(_h_N06_00_19_10_15, _numjets06_00_19_10_15); safeinvscale(_h_N04_00_19_15_24, _numjets04_00_19_15_24); safeinvscale(_h_N06_00_19_15_24, _numjets06_00_19_15_24); safeinvscale(_h_N04_00_19_24_40, _numjets04_00_19_24_40); safeinvscale(_h_N06_00_19_24_40, _numjets06_00_19_24_40); // z histos: 1/N_jet dN_track / dz_track safeinvscale(_h_z04_00_05_04_06, _numjets04_00_05_04_06); safeinvscale(_h_z06_00_05_04_06, _numjets06_00_05_04_06); safeinvscale(_h_z04_00_05_06_10, _numjets04_00_05_06_10); safeinvscale(_h_z06_00_05_06_10, _numjets06_00_05_06_10); safeinvscale(_h_z04_00_05_10_15, _numjets04_00_05_10_15); safeinvscale(_h_z06_00_05_10_15, _numjets06_00_05_10_15); safeinvscale(_h_z04_00_05_15_24, _numjets04_00_05_15_24); safeinvscale(_h_z06_00_05_15_24, _numjets06_00_05_15_24); safeinvscale(_h_z04_00_05_24_40, _numjets04_00_05_24_40); safeinvscale(_h_z06_00_05_24_40, _numjets06_00_05_24_40); safeinvscale(_h_z04_05_10_04_06, _numjets04_05_10_04_06); safeinvscale(_h_z06_05_10_04_06, _numjets06_05_10_04_06); safeinvscale(_h_z04_05_10_06_10, _numjets04_05_10_06_10); safeinvscale(_h_z06_05_10_06_10, _numjets06_05_10_06_10); safeinvscale(_h_z04_05_10_10_15, _numjets04_05_10_10_15); safeinvscale(_h_z06_05_10_10_15, _numjets06_05_10_10_15); safeinvscale(_h_z04_05_10_15_24, _numjets04_05_10_15_24); safeinvscale(_h_z06_05_10_15_24, _numjets06_05_10_15_24); safeinvscale(_h_z04_05_10_24_40, _numjets04_05_10_24_40); safeinvscale(_h_z06_05_10_24_40, _numjets06_05_10_24_40); safeinvscale(_h_z04_10_15_04_06, _numjets04_10_15_04_06); safeinvscale(_h_z06_10_15_04_06, _numjets06_10_15_04_06); safeinvscale(_h_z04_10_15_06_10, _numjets04_10_15_06_10); safeinvscale(_h_z06_10_15_06_10, _numjets06_10_15_06_10); safeinvscale(_h_z04_10_15_10_15, _numjets04_10_15_10_15); safeinvscale(_h_z06_10_15_10_15, _numjets06_10_15_10_15); safeinvscale(_h_z04_10_15_15_24, _numjets04_10_15_15_24); safeinvscale(_h_z06_10_15_15_24, _numjets06_10_15_15_24); safeinvscale(_h_z04_10_15_24_40, _numjets04_10_15_24_40); safeinvscale(_h_z06_10_15_24_40, _numjets06_10_15_24_40); safeinvscale(_h_z04_15_19_04_06, _numjets04_15_19_04_06); safeinvscale(_h_z06_15_19_04_06, _numjets06_15_19_04_06); safeinvscale(_h_z04_15_19_06_10, _numjets04_15_19_06_10); safeinvscale(_h_z06_15_19_06_10, _numjets06_15_19_06_10); safeinvscale(_h_z04_15_19_10_15, _numjets04_15_19_10_15); safeinvscale(_h_z06_15_19_10_15, _numjets06_15_19_10_15); safeinvscale(_h_z04_15_19_15_24, _numjets04_15_19_15_24); safeinvscale(_h_z06_15_19_15_24, _numjets06_15_19_15_24); safeinvscale(_h_z04_15_19_24_40, _numjets04_15_19_24_40); safeinvscale(_h_z06_15_19_24_40, _numjets06_15_19_24_40); safeinvscale(_h_z04_00_19_04_06, _numjets04_00_19_04_06); safeinvscale(_h_z06_00_19_04_06, _numjets06_00_19_04_06); safeinvscale(_h_z04_00_19_06_10, _numjets04_00_19_06_10); safeinvscale(_h_z06_00_19_06_10, _numjets06_00_19_06_10); safeinvscale(_h_z04_00_19_10_15, _numjets04_00_19_10_15); safeinvscale(_h_z06_00_19_10_15, _numjets06_00_19_10_15); safeinvscale(_h_z04_00_19_15_24, _numjets04_00_19_15_24); safeinvscale(_h_z06_00_19_15_24, _numjets06_00_19_15_24); safeinvscale(_h_z04_00_19_24_40, _numjets04_00_19_24_40); safeinvscale(_h_z06_00_19_24_40, _numjets06_00_19_24_40); // ptrel histos: 1/N_jet dN_track / dptrel_track safeinvscale(_h_ptrel04_00_05_04_06, _numjets04_00_05_04_06); safeinvscale(_h_ptrel06_00_05_04_06, _numjets06_00_05_04_06); safeinvscale(_h_ptrel04_00_05_06_10, _numjets04_00_05_06_10); safeinvscale(_h_ptrel06_00_05_06_10, _numjets06_00_05_06_10); safeinvscale(_h_ptrel04_00_05_10_15, _numjets04_00_05_10_15); safeinvscale(_h_ptrel06_00_05_10_15, _numjets06_00_05_10_15); safeinvscale(_h_ptrel04_00_05_15_24, _numjets04_00_05_15_24); safeinvscale(_h_ptrel06_00_05_15_24, _numjets06_00_05_15_24); safeinvscale(_h_ptrel04_00_05_24_40, _numjets04_00_05_24_40); safeinvscale(_h_ptrel06_00_05_24_40, _numjets06_00_05_24_40); safeinvscale(_h_ptrel04_05_10_04_06, _numjets04_05_10_04_06); safeinvscale(_h_ptrel06_05_10_04_06, _numjets06_05_10_04_06); safeinvscale(_h_ptrel04_05_10_06_10, _numjets04_05_10_06_10); safeinvscale(_h_ptrel06_05_10_06_10, _numjets06_05_10_06_10); safeinvscale(_h_ptrel04_05_10_10_15, _numjets04_05_10_10_15); safeinvscale(_h_ptrel06_05_10_10_15, _numjets06_05_10_10_15); safeinvscale(_h_ptrel04_05_10_15_24, _numjets04_05_10_15_24); safeinvscale(_h_ptrel06_05_10_15_24, _numjets06_05_10_15_24); safeinvscale(_h_ptrel04_05_10_24_40, _numjets04_05_10_24_40); safeinvscale(_h_ptrel06_05_10_24_40, _numjets06_05_10_24_40); safeinvscale(_h_ptrel04_10_15_04_06, _numjets04_10_15_04_06); safeinvscale(_h_ptrel06_10_15_04_06, _numjets06_10_15_04_06); safeinvscale(_h_ptrel04_10_15_06_10, _numjets04_10_15_06_10); safeinvscale(_h_ptrel06_10_15_06_10, _numjets06_10_15_06_10); safeinvscale(_h_ptrel04_10_15_10_15, _numjets04_10_15_10_15); safeinvscale(_h_ptrel06_10_15_10_15, _numjets06_10_15_10_15); safeinvscale(_h_ptrel04_10_15_15_24, _numjets04_10_15_15_24); safeinvscale(_h_ptrel06_10_15_15_24, _numjets06_10_15_15_24); safeinvscale(_h_ptrel04_10_15_24_40, _numjets04_10_15_24_40); safeinvscale(_h_ptrel06_10_15_24_40, _numjets06_10_15_24_40); safeinvscale(_h_ptrel04_15_19_04_06, _numjets04_15_19_04_06); safeinvscale(_h_ptrel06_15_19_04_06, _numjets06_15_19_04_06); safeinvscale(_h_ptrel04_15_19_06_10, _numjets04_15_19_06_10); safeinvscale(_h_ptrel06_15_19_06_10, _numjets06_15_19_06_10); safeinvscale(_h_ptrel04_15_19_10_15, _numjets04_15_19_10_15); safeinvscale(_h_ptrel06_15_19_10_15, _numjets06_15_19_10_15); safeinvscale(_h_ptrel04_15_19_15_24, _numjets04_15_19_15_24); safeinvscale(_h_ptrel06_15_19_15_24, _numjets06_15_19_15_24); safeinvscale(_h_ptrel04_15_19_24_40, _numjets04_15_19_24_40); safeinvscale(_h_ptrel06_15_19_24_40, _numjets06_15_19_24_40); safeinvscale(_h_ptrel04_00_19_04_06, _numjets04_00_19_04_06); safeinvscale(_h_ptrel06_00_19_04_06, _numjets06_00_19_04_06); safeinvscale(_h_ptrel04_00_19_06_10, _numjets04_00_19_06_10); safeinvscale(_h_ptrel06_00_19_06_10, _numjets06_00_19_06_10); safeinvscale(_h_ptrel04_00_19_10_15, _numjets04_00_19_10_15); safeinvscale(_h_ptrel06_00_19_10_15, _numjets06_00_19_10_15); safeinvscale(_h_ptrel04_00_19_15_24, _numjets04_00_19_15_24); safeinvscale(_h_ptrel06_00_19_15_24, _numjets06_00_19_15_24); safeinvscale(_h_ptrel04_00_19_24_40, _numjets04_00_19_24_40); safeinvscale(_h_ptrel06_00_19_24_40, _numjets06_00_19_24_40); // r histos: 1/N_jet dN_track / dA safeinvscale(_h_rdA04_00_05_04_06, _numjets04_00_05_04_06); safeinvscale(_h_rdA06_00_05_04_06, _numjets06_00_05_04_06); safeinvscale(_h_rdA04_00_05_06_10, _numjets04_00_05_06_10); safeinvscale(_h_rdA06_00_05_06_10, _numjets06_00_05_06_10); safeinvscale(_h_rdA04_00_05_10_15, _numjets04_00_05_10_15); safeinvscale(_h_rdA06_00_05_10_15, _numjets06_00_05_10_15); safeinvscale(_h_rdA04_00_05_15_24, _numjets04_00_05_15_24); safeinvscale(_h_rdA06_00_05_15_24, _numjets06_00_05_15_24); safeinvscale(_h_rdA04_00_05_24_40, _numjets04_00_05_24_40); safeinvscale(_h_rdA06_00_05_24_40, _numjets06_00_05_24_40); safeinvscale(_h_rdA04_05_10_04_06, _numjets04_05_10_04_06); safeinvscale(_h_rdA06_05_10_04_06, _numjets06_05_10_04_06); safeinvscale(_h_rdA04_05_10_06_10, _numjets04_05_10_06_10); safeinvscale(_h_rdA06_05_10_06_10, _numjets06_05_10_06_10); safeinvscale(_h_rdA04_05_10_10_15, _numjets04_05_10_10_15); safeinvscale(_h_rdA06_05_10_10_15, _numjets06_05_10_10_15); safeinvscale(_h_rdA04_05_10_15_24, _numjets04_05_10_15_24); safeinvscale(_h_rdA06_05_10_15_24, _numjets06_05_10_15_24); safeinvscale(_h_rdA04_05_10_24_40, _numjets04_05_10_24_40); safeinvscale(_h_rdA06_05_10_24_40, _numjets06_05_10_24_40); safeinvscale(_h_rdA04_10_15_04_06, _numjets04_10_15_04_06); safeinvscale(_h_rdA06_10_15_04_06, _numjets06_10_15_04_06); safeinvscale(_h_rdA04_10_15_06_10, _numjets04_10_15_06_10); safeinvscale(_h_rdA06_10_15_06_10, _numjets06_10_15_06_10); safeinvscale(_h_rdA04_10_15_10_15, _numjets04_10_15_10_15); safeinvscale(_h_rdA06_10_15_10_15, _numjets06_10_15_10_15); safeinvscale(_h_rdA04_10_15_15_24, _numjets04_10_15_15_24); safeinvscale(_h_rdA06_10_15_15_24, _numjets06_10_15_15_24); safeinvscale(_h_rdA04_10_15_24_40, _numjets04_10_15_24_40); safeinvscale(_h_rdA06_10_15_24_40, _numjets06_10_15_24_40); safeinvscale(_h_rdA04_15_19_04_06, _numjets04_15_19_04_06); safeinvscale(_h_rdA06_15_19_04_06, _numjets06_15_19_04_06); safeinvscale(_h_rdA04_15_19_06_10, _numjets04_15_19_06_10); safeinvscale(_h_rdA06_15_19_06_10, _numjets06_15_19_06_10); safeinvscale(_h_rdA04_15_19_10_15, _numjets04_15_19_10_15); safeinvscale(_h_rdA06_15_19_10_15, _numjets06_15_19_10_15); safeinvscale(_h_rdA04_15_19_15_24, _numjets04_15_19_15_24); safeinvscale(_h_rdA06_15_19_15_24, _numjets06_15_19_15_24); safeinvscale(_h_rdA04_15_19_24_40, _numjets04_15_19_24_40); safeinvscale(_h_rdA06_15_19_24_40, _numjets06_15_19_24_40); safeinvscale(_h_rdA04_00_19_04_06, _numjets04_00_19_04_06); safeinvscale(_h_rdA06_00_19_04_06, _numjets06_00_19_04_06); safeinvscale(_h_rdA04_00_19_06_10, _numjets04_00_19_06_10); safeinvscale(_h_rdA06_00_19_06_10, _numjets06_00_19_06_10); safeinvscale(_h_rdA04_00_19_10_15, _numjets04_00_19_10_15); safeinvscale(_h_rdA06_00_19_10_15, _numjets06_00_19_10_15); safeinvscale(_h_rdA04_00_19_15_24, _numjets04_00_19_15_24); safeinvscale(_h_rdA06_00_19_15_24, _numjets06_00_19_15_24); safeinvscale(_h_rdA04_00_19_24_40, _numjets04_00_19_24_40); safeinvscale(_h_rdA06_00_19_24_40, _numjets06_00_19_24_40); } //@} private: void safeinvscale(AIDA::IHistogram1D* h, double denom) { if (denom != 0) { scale(h, 1.0/denom); } else { normalize(h, 0); } } /// Event weights double _sumofweights04, _sumofweights06; /// Jet counters double _numjets04_00_05_04_06, _numjets04_00_05_06_10, _numjets04_00_05_10_15, _numjets04_00_05_15_24, _numjets04_00_05_24_40; double _numjets06_00_05_04_06, _numjets06_00_05_06_10, _numjets06_00_05_10_15, _numjets06_00_05_15_24, _numjets06_00_05_24_40; double _numjets04_05_10_04_06, _numjets04_05_10_06_10, _numjets04_05_10_10_15, _numjets04_05_10_15_24, _numjets04_05_10_24_40; double _numjets06_05_10_04_06, _numjets06_05_10_06_10, _numjets06_05_10_10_15, _numjets06_05_10_15_24, _numjets06_05_10_24_40; double _numjets04_10_15_04_06, _numjets04_10_15_06_10, _numjets04_10_15_10_15, _numjets04_10_15_15_24, _numjets04_10_15_24_40; double _numjets06_10_15_04_06, _numjets06_10_15_06_10, _numjets06_10_15_10_15, _numjets06_10_15_15_24, _numjets06_10_15_24_40; double _numjets04_15_19_04_06, _numjets04_15_19_06_10, _numjets04_15_19_10_15, _numjets04_15_19_15_24, _numjets04_15_19_24_40; double _numjets06_15_19_04_06, _numjets06_15_19_06_10, _numjets06_15_19_10_15, _numjets06_15_19_15_24, _numjets06_15_19_24_40; double _numjets04_00_19_04_06, _numjets04_00_19_06_10, _numjets04_00_19_10_15, _numjets04_00_19_15_24, _numjets04_00_19_24_40; double _numjets06_00_19_04_06, _numjets06_00_19_06_10, _numjets06_00_19_10_15, _numjets06_00_19_15_24, _numjets06_00_19_24_40; private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_pt04_00_05, *_h_pt06_00_05; AIDA::IHistogram1D *_h_N04_00_05_04_06, *_h_N06_00_05_04_06; AIDA::IHistogram1D *_h_N04_00_05_06_10, *_h_N06_00_05_06_10; AIDA::IHistogram1D *_h_N04_00_05_10_15, *_h_N06_00_05_10_15; AIDA::IHistogram1D *_h_N04_00_05_15_24, *_h_N06_00_05_15_24; AIDA::IHistogram1D *_h_N04_00_05_24_40, *_h_N06_00_05_24_40; AIDA::IHistogram1D *_h_z04_00_05_04_06, *_h_z06_00_05_04_06; AIDA::IHistogram1D *_h_z04_00_05_06_10, *_h_z06_00_05_06_10; AIDA::IHistogram1D *_h_z04_00_05_10_15, *_h_z06_00_05_10_15; AIDA::IHistogram1D *_h_z04_00_05_15_24, *_h_z06_00_05_15_24; AIDA::IHistogram1D *_h_z04_00_05_24_40, *_h_z06_00_05_24_40; AIDA::IHistogram1D *_h_ptrel04_00_05_04_06, *_h_ptrel06_00_05_04_06; AIDA::IHistogram1D *_h_ptrel04_00_05_06_10, *_h_ptrel06_00_05_06_10; AIDA::IHistogram1D *_h_ptrel04_00_05_10_15, *_h_ptrel06_00_05_10_15; AIDA::IHistogram1D *_h_ptrel04_00_05_15_24, *_h_ptrel06_00_05_15_24; AIDA::IHistogram1D *_h_ptrel04_00_05_24_40, *_h_ptrel06_00_05_24_40; AIDA::IHistogram1D *_h_rdA04_00_05_04_06, *_h_rdA06_00_05_04_06; AIDA::IHistogram1D *_h_rdA04_00_05_06_10, *_h_rdA06_00_05_06_10; AIDA::IHistogram1D *_h_rdA04_00_05_10_15, *_h_rdA06_00_05_10_15; AIDA::IHistogram1D *_h_rdA04_00_05_15_24, *_h_rdA06_00_05_15_24; AIDA::IHistogram1D *_h_rdA04_00_05_24_40, *_h_rdA06_00_05_24_40; AIDA::IHistogram1D *_h_pt04_05_10, *_h_pt06_05_10; AIDA::IHistogram1D *_h_N04_05_10_04_06, *_h_N06_05_10_04_06; AIDA::IHistogram1D *_h_N04_05_10_06_10, *_h_N06_05_10_06_10; AIDA::IHistogram1D *_h_N04_05_10_10_15, *_h_N06_05_10_10_15; AIDA::IHistogram1D *_h_N04_05_10_15_24, *_h_N06_05_10_15_24; AIDA::IHistogram1D *_h_N04_05_10_24_40, *_h_N06_05_10_24_40; AIDA::IHistogram1D *_h_z04_05_10_04_06, *_h_z06_05_10_04_06; AIDA::IHistogram1D *_h_z04_05_10_06_10, *_h_z06_05_10_06_10; AIDA::IHistogram1D *_h_z04_05_10_10_15, *_h_z06_05_10_10_15; AIDA::IHistogram1D *_h_z04_05_10_15_24, *_h_z06_05_10_15_24; AIDA::IHistogram1D *_h_z04_05_10_24_40, *_h_z06_05_10_24_40; AIDA::IHistogram1D *_h_ptrel04_05_10_04_06, *_h_ptrel06_05_10_04_06; AIDA::IHistogram1D *_h_ptrel04_05_10_06_10, *_h_ptrel06_05_10_06_10; AIDA::IHistogram1D *_h_ptrel04_05_10_10_15, *_h_ptrel06_05_10_10_15; AIDA::IHistogram1D *_h_ptrel04_05_10_15_24, *_h_ptrel06_05_10_15_24; AIDA::IHistogram1D *_h_ptrel04_05_10_24_40, *_h_ptrel06_05_10_24_40; AIDA::IHistogram1D *_h_rdA04_05_10_04_06, *_h_rdA06_05_10_04_06; AIDA::IHistogram1D *_h_rdA04_05_10_06_10, *_h_rdA06_05_10_06_10; AIDA::IHistogram1D *_h_rdA04_05_10_10_15, *_h_rdA06_05_10_10_15; AIDA::IHistogram1D *_h_rdA04_05_10_15_24, *_h_rdA06_05_10_15_24; AIDA::IHistogram1D *_h_rdA04_05_10_24_40, *_h_rdA06_05_10_24_40; AIDA::IHistogram1D *_h_pt04_10_15, *_h_pt06_10_15; AIDA::IHistogram1D *_h_N04_10_15_04_06, *_h_N06_10_15_04_06; AIDA::IHistogram1D *_h_N04_10_15_06_10, *_h_N06_10_15_06_10; AIDA::IHistogram1D *_h_N04_10_15_10_15, *_h_N06_10_15_10_15; AIDA::IHistogram1D *_h_N04_10_15_15_24, *_h_N06_10_15_15_24; AIDA::IHistogram1D *_h_N04_10_15_24_40, *_h_N06_10_15_24_40; AIDA::IHistogram1D *_h_z04_10_15_04_06, *_h_z06_10_15_04_06; AIDA::IHistogram1D *_h_z04_10_15_06_10, *_h_z06_10_15_06_10; AIDA::IHistogram1D *_h_z04_10_15_10_15, *_h_z06_10_15_10_15; AIDA::IHistogram1D *_h_z04_10_15_15_24, *_h_z06_10_15_15_24; AIDA::IHistogram1D *_h_z04_10_15_24_40, *_h_z06_10_15_24_40; AIDA::IHistogram1D *_h_ptrel04_10_15_04_06, *_h_ptrel06_10_15_04_06; AIDA::IHistogram1D *_h_ptrel04_10_15_06_10, *_h_ptrel06_10_15_06_10; AIDA::IHistogram1D *_h_ptrel04_10_15_10_15, *_h_ptrel06_10_15_10_15; AIDA::IHistogram1D *_h_ptrel04_10_15_15_24, *_h_ptrel06_10_15_15_24; AIDA::IHistogram1D *_h_ptrel04_10_15_24_40, *_h_ptrel06_10_15_24_40; AIDA::IHistogram1D *_h_rdA04_10_15_04_06, *_h_rdA06_10_15_04_06; AIDA::IHistogram1D *_h_rdA04_10_15_06_10, *_h_rdA06_10_15_06_10; AIDA::IHistogram1D *_h_rdA04_10_15_10_15, *_h_rdA06_10_15_10_15; AIDA::IHistogram1D *_h_rdA04_10_15_15_24, *_h_rdA06_10_15_15_24; AIDA::IHistogram1D *_h_rdA04_10_15_24_40, *_h_rdA06_10_15_24_40; AIDA::IHistogram1D *_h_pt04_15_19, *_h_pt06_15_19; AIDA::IHistogram1D *_h_N04_15_19_04_06, *_h_N06_15_19_04_06; AIDA::IHistogram1D *_h_N04_15_19_06_10, *_h_N06_15_19_06_10; AIDA::IHistogram1D *_h_N04_15_19_10_15, *_h_N06_15_19_10_15; AIDA::IHistogram1D *_h_N04_15_19_15_24, *_h_N06_15_19_15_24; AIDA::IHistogram1D *_h_N04_15_19_24_40, *_h_N06_15_19_24_40; AIDA::IHistogram1D *_h_z04_15_19_04_06, *_h_z06_15_19_04_06; AIDA::IHistogram1D *_h_z04_15_19_06_10, *_h_z06_15_19_06_10; AIDA::IHistogram1D *_h_z04_15_19_10_15, *_h_z06_15_19_10_15; AIDA::IHistogram1D *_h_z04_15_19_15_24, *_h_z06_15_19_15_24; AIDA::IHistogram1D *_h_z04_15_19_24_40, *_h_z06_15_19_24_40; AIDA::IHistogram1D *_h_ptrel04_15_19_04_06, *_h_ptrel06_15_19_04_06; AIDA::IHistogram1D *_h_ptrel04_15_19_06_10, *_h_ptrel06_15_19_06_10; AIDA::IHistogram1D *_h_ptrel04_15_19_10_15, *_h_ptrel06_15_19_10_15; AIDA::IHistogram1D *_h_ptrel04_15_19_15_24, *_h_ptrel06_15_19_15_24; AIDA::IHistogram1D *_h_ptrel04_15_19_24_40, *_h_ptrel06_15_19_24_40; AIDA::IHistogram1D *_h_rdA04_15_19_04_06, *_h_rdA06_15_19_04_06; AIDA::IHistogram1D *_h_rdA04_15_19_06_10, *_h_rdA06_15_19_06_10; AIDA::IHistogram1D *_h_rdA04_15_19_10_15, *_h_rdA06_15_19_10_15; AIDA::IHistogram1D *_h_rdA04_15_19_15_24, *_h_rdA06_15_19_15_24; AIDA::IHistogram1D *_h_rdA04_15_19_24_40, *_h_rdA06_15_19_24_40; AIDA::IHistogram1D *_h_N04_00_19_04_06, *_h_N06_00_19_04_06; AIDA::IHistogram1D *_h_N04_00_19_06_10, *_h_N06_00_19_06_10; AIDA::IHistogram1D *_h_N04_00_19_10_15, *_h_N06_00_19_10_15; AIDA::IHistogram1D *_h_N04_00_19_15_24, *_h_N06_00_19_15_24; AIDA::IHistogram1D *_h_N04_00_19_24_40, *_h_N06_00_19_24_40; AIDA::IHistogram1D *_h_z04_00_19_04_06, *_h_z06_00_19_04_06; AIDA::IHistogram1D *_h_z04_00_19_06_10, *_h_z06_00_19_06_10; AIDA::IHistogram1D *_h_z04_00_19_10_15, *_h_z06_00_19_10_15; AIDA::IHistogram1D *_h_z04_00_19_15_24, *_h_z06_00_19_15_24; AIDA::IHistogram1D *_h_z04_00_19_24_40, *_h_z06_00_19_24_40; AIDA::IHistogram1D *_h_ptrel04_00_19_04_06, *_h_ptrel06_00_19_04_06; AIDA::IHistogram1D *_h_ptrel04_00_19_06_10, *_h_ptrel06_00_19_06_10; AIDA::IHistogram1D *_h_ptrel04_00_19_10_15, *_h_ptrel06_00_19_10_15; AIDA::IHistogram1D *_h_ptrel04_00_19_15_24, *_h_ptrel06_00_19_15_24; AIDA::IHistogram1D *_h_ptrel04_00_19_24_40, *_h_ptrel06_00_19_24_40; AIDA::IHistogram1D *_h_rdA04_00_19_04_06, *_h_rdA06_00_19_04_06; AIDA::IHistogram1D *_h_rdA04_00_19_06_10, *_h_rdA06_00_19_06_10; AIDA::IHistogram1D *_h_rdA04_00_19_10_15, *_h_rdA06_00_19_10_15; AIDA::IHistogram1D *_h_rdA04_00_19_15_24, *_h_rdA06_00_19_15_24; AIDA::IHistogram1D *_h_rdA04_00_19_24_40, *_h_rdA06_00_19_24_40; //@} }; // This global object acts as a hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_I919017); } rivet-1.8.3/src/Analyses/DELPHI_2003_WUD_03_11.cc0000644000175000017500000001501312116077757016675 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" namespace Rivet { namespace { /// @name Jet angle calculator functions //@{ /// @todo Move to utils? /// @todo Use Jet or FourMomentum interface rather than PseudoJet /// @todo Move to utils? double calc_BZ(const vector& jets) { assert(jets.size() == 4); Vector3 p12 = cross( momentum3(jets[0]), momentum3(jets[1])); Vector3 p34 = cross( momentum3(jets[2]), momentum3(jets[3])); return dot(p12,p34) / (p12.mod()*p34.mod()); } /// @todo Use Jet or FourMomentum interface rather than PseudoJet /// @todo Move to utils? double calc_KSW(const vector& jets) { assert(jets.size() == 4); Vector3 p13 = cross( momentum3(jets[0]), momentum3(jets[2])); Vector3 p24 = cross( momentum3(jets[1]), momentum3(jets[3])); Vector3 p14 = cross( momentum3(jets[0]), momentum3(jets[3])); Vector3 p23 = cross( momentum3(jets[1]), momentum3(jets[2])); return cos (0.5*( acos (dot(p14,p23) / (p14.mod()*p23.mod())) + acos (dot(p13,p24) / (p13.mod()*p24.mod())) )); } /// @todo Use Jet or FourMomentum interface rather than PseudoJet /// @todo Move to utils? double calc_NR(const vector& jets) { assert(jets.size() == 4); Vector3 p12 = momentum3(jets[0]) - momentum3(jets[1]); Vector3 p34 = momentum3(jets[2]) - momentum3(jets[3]); return dot(p12,p34) / (p12.mod()*p34.mod()); } /// @todo Use Jet or FourMomentum interface rather than PseudoJet /// @todo Move to utils? double calc_ALPHA34(const vector& jets) { assert(jets.size() == 4); Vector3 p3 = momentum3(jets[2]); Vector3 p4 = momentum3(jets[3]); return dot(p3,p4) / (p3.mod()*p4.mod()); } //@} } /** * @brief DELPHI 4-jet angular distributions * @author Hendrik Hoeth * * This is Hendrik Hoeth's Diploma thesis, measuring the 4-jet angular * distributions at LEP-1. * * @par Run conditions * * @arg LEP1 beam energy: \f$ \sqrt{s} = \f$ 91.2 GeV * @arg Run with generic QCD events. * @arg No \f$ p_\perp^\text{min} \f$ cutoff is required */ class DELPHI_2003_WUD_03_11 : public Analysis { public: /// Constructor DELPHI_2003_WUD_03_11() : Analysis("DELPHI_2003_WUD_03_11") { _numdurjets = 0; _numjadejets = 0; } /// @name Analysis methods //@{ void init() { const ChargedFinalState cfs; addProjection(cfs, "FS"); addProjection(FastJets(cfs, FastJets::JADE, 0.7), "JadeJets"); addProjection(FastJets(cfs, FastJets::DURHAM, 0.7), "DurhamJets"); _histDurhamBZ = bookHistogram1D(1, 1, 1); _histDurhamKSW = bookHistogram1D(2, 1, 1); _histDurhamNR = bookHistogram1D(3, 1, 1); _histDurhamALPHA34 = bookHistogram1D(4, 1, 1); _histJadeBZ = bookHistogram1D(1, 2, 1); _histJadeKSW = bookHistogram1D(2, 2, 1); _histJadeNR = bookHistogram1D(3, 2, 1); _histJadeALPHA34 = bookHistogram1D(4, 2, 1); } void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed multiplicity cut"); vetoEvent; } MSG_DEBUG("Passed multiplicity cut"); // Get event weight for histo filling const double weight = e.weight(); // Jets const FastJets& durjet = applyProjection(e, "DurhamJets"); vector jets_durham; if (durjet.clusterSeq()) { jets_durham = fastjet::sorted_by_E(durjet.clusterSeq()->exclusive_jets_ycut(0.008)); if (jets_durham.size() == 4) { _histDurhamBZ->fill(fabs(calc_BZ(jets_durham)), weight); _histDurhamKSW->fill(calc_KSW(jets_durham), weight); _histDurhamNR->fill(fabs(calc_NR(jets_durham)), weight); _histDurhamALPHA34->fill(calc_ALPHA34(jets_durham), weight); } if (durjet.clusterSeq()->exclusive_ymerge_max(3) > 0.008 && durjet.clusterSeq()->exclusive_ymerge_max(4) < 0.008) { _numdurjets++; } } const FastJets& jadejet = applyProjection(e, "JadeJets"); vector jets_jade; if (jadejet.clusterSeq()) { jets_jade = fastjet::sorted_by_E(jadejet.clusterSeq()->exclusive_jets_ycut(0.015)); if (jets_jade.size() == 4) { _histJadeBZ->fill(fabs(calc_BZ(jets_jade)), weight); _histJadeKSW->fill(calc_KSW(jets_jade), weight); _histJadeNR->fill(fabs(calc_NR(jets_jade)), weight); _histJadeALPHA34->fill(calc_ALPHA34(jets_jade), weight); } if (jadejet.clusterSeq()->exclusive_ymerge_max(3) > 0.015 && jadejet.clusterSeq()->exclusive_ymerge_max(4) < 0.015) { _numjadejets++; } } } // Finalize void finalize() { // Normalize inclusive single particle distributions to the average number // of charged particles per event. MSG_INFO("Number of Durham jets = " << _numdurjets); MSG_INFO("Number of Jade jets = " << _numjadejets); /// @todo Scale rather than normalize? normalize(_histDurhamBZ , 0.0785); normalize(_histDurhamKSW , 0.0785); normalize(_histDurhamNR , 0.0785); normalize(_histDurhamALPHA34 , 0.0785); normalize(_histJadeBZ , 0.0277); normalize(_histJadeKSW , 0.0277); normalize(_histJadeNR , 0.0277); normalize(_histJadeALPHA34 , 0.0277); } //@} private: int _numdurjets; int _numjadejets; /// @name Histograms //@{ AIDA::IHistogram1D *_histDurhamBZ; AIDA::IHistogram1D *_histDurhamKSW; AIDA::IHistogram1D *_histDurhamNR; AIDA::IHistogram1D *_histDurhamALPHA34; AIDA::IHistogram1D *_histJadeBZ; AIDA::IHistogram1D *_histJadeKSW; AIDA::IHistogram1D *_histJadeNR; AIDA::IHistogram1D *_histJadeALPHA34; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(DELPHI_2003_WUD_03_11); } rivet-1.8.3/src/Analyses/D0_1996_S3214044.cc0000644000175000017500000002255712116077757015734 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Math/LorentzTrans.hh" #include "Rivet/Math/Vector3.hh" #include "Rivet/Math/Units.hh" namespace Rivet { /// @brief D0 topological distributions of 3- and 4-jet events. class D0_1996_S3214044 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor D0_1996_S3214044() : Analysis("D0_1996_S3214044") { } /// @name Analysis methods //@{ /// Book histograms void init() { const FinalState fs; addProjection(fs, "FS"); /// @todo Use correct jet algorithm addProjection(FastJets(fs, FastJets::D0ILCONE, 0.7), "ConeJets"); _h_3j_x3 = bookHistogram1D(1, 1, 1); _h_3j_x5 = bookHistogram1D(2, 1, 1); _h_3j_costheta3 = bookHistogram1D(3, 1, 1); _h_3j_psi = bookHistogram1D(4, 1, 1); _h_3j_mu34 = bookHistogram1D(5, 1, 1); _h_3j_mu35 = bookHistogram1D(6, 1, 1); _h_3j_mu45 = bookHistogram1D(7, 1, 1); _h_4j_x3 = bookHistogram1D(8, 1, 1); _h_4j_x4 = bookHistogram1D(9, 1, 1); _h_4j_x5 = bookHistogram1D(10, 1, 1); _h_4j_x6 = bookHistogram1D(11, 1, 1); _h_4j_costheta3 = bookHistogram1D(12, 1, 1); _h_4j_costheta4 = bookHistogram1D(13, 1, 1); _h_4j_costheta5 = bookHistogram1D(14, 1, 1); _h_4j_costheta6 = bookHistogram1D(15, 1, 1); _h_4j_cosomega34 = bookHistogram1D(16, 1, 1); _h_4j_cosomega35 = bookHistogram1D(17, 1, 1); _h_4j_cosomega36 = bookHistogram1D(18, 1, 1); _h_4j_cosomega45 = bookHistogram1D(19, 1, 1); _h_4j_cosomega46 = bookHistogram1D(20, 1, 1); _h_4j_cosomega56 = bookHistogram1D(21, 1, 1); _h_4j_mu34 = bookHistogram1D(22, 1, 1); _h_4j_mu35 = bookHistogram1D(23, 1, 1); _h_4j_mu36 = bookHistogram1D(24, 1, 1); _h_4j_mu45 = bookHistogram1D(25, 1, 1); _h_4j_mu46 = bookHistogram1D(26, 1, 1); _h_4j_mu56 = bookHistogram1D(27, 1, 1); _h_4j_theta_BZ = bookHistogram1D(28, 1, 1); _h_4j_costheta_NR = bookHistogram1D(29, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); Jets jets_in; foreach (const Jet& jet, applyProjection(event, "ConeJets").jetsByEt(20.0*GeV)) { if (fabs(jet.momentum().eta()) < 3.0) { jets_in.push_back(jet); } } Jets jets_isolated; for (size_t i = 0; i < jets_in.size(); ++i) { bool isolated=true; for (size_t j = 0; j < jets_in.size(); ++j) { if (i != j && deltaR(jets_in[i].momentum(), jets_in[j].momentum()) < 1.4) { isolated = false; break; } } if (isolated) { jets_isolated.push_back(jets_in[i]); } } if (jets_isolated.size() == 0 || jets_isolated[0].momentum().Et() < 60.0*GeV) { vetoEvent; } if (jets_isolated.size() > 2) _threeJetAnalysis(jets_isolated, weight); if (jets_isolated.size() > 3) _fourJetAnalysis(jets_isolated, weight); } void finalize() { normalize(_h_3j_x3, 1.0); normalize(_h_3j_x5, 1.0); normalize(_h_3j_costheta3, 1.0); normalize(_h_3j_psi, 1.0); normalize(_h_3j_mu34, 1.0); normalize(_h_3j_mu35, 1.0); normalize(_h_3j_mu45, 1.0); normalize(_h_4j_x3, 1.0); normalize(_h_4j_x4, 1.0); normalize(_h_4j_x5, 1.0); normalize(_h_4j_x6, 1.0); normalize(_h_4j_costheta3, 1.0); normalize(_h_4j_costheta4, 1.0); normalize(_h_4j_costheta5, 1.0); normalize(_h_4j_costheta6, 1.0); normalize(_h_4j_cosomega34, 1.0); normalize(_h_4j_cosomega35, 1.0); normalize(_h_4j_cosomega36, 1.0); normalize(_h_4j_cosomega45, 1.0); normalize(_h_4j_cosomega46, 1.0); normalize(_h_4j_cosomega56, 1.0); normalize(_h_4j_mu34, 1.0); normalize(_h_4j_mu35, 1.0); normalize(_h_4j_mu36, 1.0); normalize(_h_4j_mu45, 1.0); normalize(_h_4j_mu46, 1.0); normalize(_h_4j_mu56, 1.0); normalize(_h_4j_theta_BZ, 1.0); normalize(_h_4j_costheta_NR, 1.0); } //@} private: /// @name Helper functions //@{ void _threeJetAnalysis(const Jets& jets, const double& weight) { // >=3 jet events FourMomentum jjj(jets[0].momentum()+jets[1].momentum()+jets[2].momentum()); const double sqrts = _safeMass(jjj); if (sqrts<200*GeV) { return; } LorentzTransform cms_boost(-jjj.boostVector()); vector jets_boosted; foreach (Jet jet, jets) { jets_boosted.push_back(cms_boost.transform(jet.momentum())); } std::sort(jets_boosted.begin(), jets_boosted.end(), FourMomentum::byEDescending()); FourMomentum p3(jets_boosted[0]); FourMomentum p4(jets_boosted[1]); FourMomentum p5(jets_boosted[2]); Vector3 beam1(0.0, 0.0, 1.0); Vector3 p1xp3 = beam1.cross(p3.vector3()); Vector3 p4xp5 = p4.vector3().cross(p5.vector3()); const double cospsi = p1xp3.dot(p4xp5)/p1xp3.mod()/p4xp5.mod(); _h_3j_x3->fill(2.0*p3.E()/sqrts, weight); _h_3j_x5->fill(2.0*p5.E()/sqrts, weight); _h_3j_costheta3->fill(fabs(cos(p3.theta())), weight); _h_3j_psi->fill(acos(cospsi)/degree, weight); _h_3j_mu34->fill(_safeMass(FourMomentum(p3+p4))/sqrts, weight); _h_3j_mu35->fill(_safeMass(FourMomentum(p3+p5))/sqrts, weight); _h_3j_mu45->fill(_safeMass(FourMomentum(p4+p5))/sqrts, weight); } void _fourJetAnalysis(const Jets& jets, const double& weight) { // >=4 jet events FourMomentum jjjj(jets[0].momentum() + jets[1].momentum() + jets[2].momentum()+ jets[3].momentum()); const double sqrts = _safeMass(jjjj); if (sqrts < 200*GeV) return; LorentzTransform cms_boost(-jjjj.boostVector()); vector jets_boosted; foreach (Jet jet, jets) { jets_boosted.push_back(cms_boost.transform(jet.momentum())); } sort(jets_boosted.begin(), jets_boosted.end(), FourMomentum::byEDescending()); FourMomentum p3(jets_boosted[0]); FourMomentum p4(jets_boosted[1]); FourMomentum p5(jets_boosted[2]); FourMomentum p6(jets_boosted[3]); Vector3 p3xp4 = p3.vector3().cross(p4.vector3()); Vector3 p5xp6 = p5.vector3().cross(p6.vector3()); const double costheta_BZ = p3xp4.dot(p5xp6)/p3xp4.mod()/p5xp6.mod(); const double costheta_NR = (p3.vector3()-p4.vector3()).dot(p5.vector3()-p6.vector3())/ (p3.vector3()-p4.vector3()).mod()/(p5.vector3()-p6.vector3()).mod(); _h_4j_x3->fill(2.0*p3.E()/sqrts, weight); _h_4j_x4->fill(2.0*p4.E()/sqrts, weight); _h_4j_x5->fill(2.0*p5.E()/sqrts, weight); _h_4j_x6->fill(2.0*p6.E()/sqrts, weight); _h_4j_costheta3->fill(fabs(cos(p3.theta())), weight); _h_4j_costheta4->fill(fabs(cos(p4.theta())), weight); _h_4j_costheta5->fill(fabs(cos(p5.theta())), weight); _h_4j_costheta6->fill(fabs(cos(p6.theta())), weight); _h_4j_cosomega34->fill(cos(p3.angle(p4)), weight); _h_4j_cosomega35->fill(cos(p3.angle(p5)), weight); _h_4j_cosomega36->fill(cos(p3.angle(p6)), weight); _h_4j_cosomega45->fill(cos(p4.angle(p5)), weight); _h_4j_cosomega46->fill(cos(p4.angle(p6)), weight); _h_4j_cosomega56->fill(cos(p5.angle(p6)), weight); _h_4j_mu34->fill(_safeMass(FourMomentum(p3+p4))/sqrts, weight); _h_4j_mu35->fill(_safeMass(FourMomentum(p3+p5))/sqrts, weight); _h_4j_mu36->fill(_safeMass(FourMomentum(p3+p6))/sqrts, weight); _h_4j_mu45->fill(_safeMass(FourMomentum(p4+p5))/sqrts, weight); _h_4j_mu46->fill(_safeMass(FourMomentum(p4+p6))/sqrts, weight); _h_4j_mu56->fill(_safeMass(FourMomentum(p5+p6))/sqrts, weight); _h_4j_theta_BZ->fill(acos(costheta_BZ)/degree, weight); _h_4j_costheta_NR->fill(costheta_NR, weight); } double _safeMass(const FourMomentum& p) { double mass2=p.mass2(); if (mass2>0.0) return sqrt(mass2); else if (mass2<-1.0e-5) { MSG_WARNING("m2 = " << m2 << ". Assuming m2=0."); return 0.0; } else return 0.0; } private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_3j_x3; AIDA::IHistogram1D *_h_3j_x5; AIDA::IHistogram1D *_h_3j_costheta3; AIDA::IHistogram1D *_h_3j_psi; AIDA::IHistogram1D *_h_3j_mu34; AIDA::IHistogram1D *_h_3j_mu35; AIDA::IHistogram1D *_h_3j_mu45; AIDA::IHistogram1D *_h_4j_x3; AIDA::IHistogram1D *_h_4j_x4; AIDA::IHistogram1D *_h_4j_x5; AIDA::IHistogram1D *_h_4j_x6; AIDA::IHistogram1D *_h_4j_costheta3; AIDA::IHistogram1D *_h_4j_costheta4; AIDA::IHistogram1D *_h_4j_costheta5; AIDA::IHistogram1D *_h_4j_costheta6; AIDA::IHistogram1D *_h_4j_cosomega34; AIDA::IHistogram1D *_h_4j_cosomega35; AIDA::IHistogram1D *_h_4j_cosomega36; AIDA::IHistogram1D *_h_4j_cosomega45; AIDA::IHistogram1D *_h_4j_cosomega46; AIDA::IHistogram1D *_h_4j_cosomega56; AIDA::IHistogram1D *_h_4j_mu34; AIDA::IHistogram1D *_h_4j_mu35; AIDA::IHistogram1D *_h_4j_mu36; AIDA::IHistogram1D *_h_4j_mu45; AIDA::IHistogram1D *_h_4j_mu46; AIDA::IHistogram1D *_h_4j_mu56; AIDA::IHistogram1D *_h_4j_theta_BZ; AIDA::IHistogram1D *_h_4j_costheta_NR; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_1996_S3214044); } rivet-1.8.3/src/Analyses/ATLAS_2013_I1217867.cc0000644000175000017500000001126412116077757016307 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/LeptonClusters.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { class ATLAS_2013_I1217867 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2013_I1217867() : Analysis("ATLAS_2013_I1217867") { m_njet=4; _h_dI.resize(2, std::vector(m_njet, NULL)); _h_dI_ratio.resize(2, std::vector(m_njet-1, NULL)); } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // Initialise projections FinalState fs(-5.0, 5.0, 0.0*GeV); IdentifiedFinalState bareElectrons(fs); bareElectrons.acceptIdPair(ELECTRON); vector > etaRangesElectrons; etaRangesElectrons.push_back(make_pair(-2.47, -1.52)); etaRangesElectrons.push_back(make_pair(-1.37, 1.37)); etaRangesElectrons.push_back(make_pair(1.52, 2.47)); LeptonClusters electronClusters(fs, bareElectrons, 0.1, true, etaRangesElectrons, 20.0*GeV); addProjection(electronClusters, "electronClusters"); IdentifiedFinalState bareMuons(fs); bareMuons.acceptIdPair(MUON); vector > etaRangesMuons; etaRangesMuons.push_back(make_pair(-2.4, 2.4)); LeptonClusters muonClusters(fs, bareMuons, 0.1, true, etaRangesMuons, 20.0*GeV); addProjection(muonClusters, "muonClusters"); IdentifiedFinalState neutrinos(-MAXRAPIDITY, MAXRAPIDITY, 25.0*GeV); neutrinos.acceptNeutrinos(); addProjection(neutrinos, "neutrinos"); VetoedFinalState jetFS(fs); jetFS.addVetoOnThisFinalState(electronClusters); jetFS.addVetoOnThisFinalState(muonClusters); jetFS.addVetoOnThisFinalState(neutrinos); FastJets jetpro(jetFS, FastJets::KT, 0.6); jetpro.useInvisibles(true); addProjection(jetpro, "jets"); // Book histograms for (size_t flav=0; flav < 2; ++flav) { for (size_t i=0; i < m_njet; ++i) _h_dI[flav][i] = bookHistogram1D(i+1, 1, flav+1); for (size_t i=0; i < m_njet-1; ++i) _h_dI_ratio[flav][i] = bookHistogram1D(4+i+1, 1, flav+1); } } /// Perform the per-event analysis void analyze(const Event& e) { const double weight = e.weight(); const LeptonClusters& electronClusters = applyProjection(e, "electronClusters"); const LeptonClusters& muonClusters = applyProjection(e, "muonClusters"); int ne = electronClusters.clusteredLeptons().size(); int nmu = muonClusters.clusteredLeptons().size(); FourMomentum lepton; size_t flav = 2; if (ne==1) { lepton=electronClusters.clusteredLeptons()[0].momentum(); flav = 0; if (nmu > 0) vetoEvent; } else if (nmu == 1) { lepton=muonClusters.clusteredLeptons()[0].momentum(); flav = 1; if (ne > 0) vetoEvent; } else { vetoEvent; } const ParticleVector& neutrinos = applyProjection(e, "neutrinos").particlesByPt(); if (neutrinos.size() < 1) vetoEvent; FourMomentum neutrino = neutrinos[0].momentum(); double mtW=sqrt(2.0*lepton.pT()*neutrino.pT()*(1-cos(lepton.phi()-neutrino.phi()))); if (mtW<40.0*GeV) vetoEvent; const fastjet::ClusterSequence* seq = applyProjection(e, "jets").clusterSeq(); if (seq != NULL) { for (size_t i = 0; i < m_njet; ++i) { double d_ij = sqrt(seq->exclusive_dmerge_max(i)); _h_dI[flav][i]->fill(d_ij, weight); if (i20.0*GeV) { double d_ijplus1 = sqrt(seq->exclusive_dmerge_max(i+1)); _h_dI_ratio[flav][i]->fill(d_ijplus1/d_ij, weight); } } } } } /// Normalise histograms etc., after the run void finalize() { for (size_t flav = 0; flav < 2; ++flav) { for (size_t i = 0; i < m_njet; ++i) { normalize(_h_dI[flav][i], 1.0, false); if (i < m_njet-1) normalize(_h_dI_ratio[flav][i], 1.0, false); } } } //@} private: /// @name Histograms //@{ std::vector > _h_dI; std::vector > _h_dI_ratio; //@} size_t m_njet; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2013_I1217867); } rivet-1.8.3/src/Analyses/CMS_2011_S9215166.cc0000644000175000017500000000721212116077757016071 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/VetoedFinalState.hh" namespace Rivet { class CMS_2011_S9215166 : public Analysis { public: /// Constructor CMS_2011_S9215166() : Analysis("CMS_2011_S9215166"), _weightMB(0.), _weightDiJet(0.) { } void init() { const FinalState fs(-6.0, 6.0, 0.0*GeV); addProjection(fs, "FS"); addProjection(FastJets(fs, FastJets::ANTIKT, 0.5), "Jets"); VetoedFinalState fsv(fs); fsv.vetoNeutrinos(); fsv.addVetoPairDetail(MUON, 0.0*GeV, 99999.9*GeV); addProjection(fsv, "fsv"); // For the MB ND selection const ChargedFinalState fschrgd(-6.0,6.0,0.0*GeV); addProjection(fschrgd, "fschrgd"); VetoedFinalState fschrgdv(fschrgd); fschrgdv.vetoNeutrinos(); addProjection(fschrgdv, "fschrgdv"); if (fuzzyEquals(sqrtS()/GeV, 900, 1E-3)) { _hist_mb = bookHistogram1D(1, 1, 1); // energy flow in MB, 0.9 TeV _hist_dijet = bookHistogram1D(2, 1, 1); // energy flow in dijet events, 0.9 TeV } else if (fuzzyEquals(sqrtS()/GeV, 7000, 1E-3)) { _hist_mb = bookHistogram1D(3, 1, 1); // energy flow in MB, 7 TeV _hist_dijet = bookHistogram1D(4, 1, 1); // energy flow in dijet events, 7 TeV } } void analyze(const Event& event) { const double weight = event.weight(); // Skip if the event is empty const FinalState& fsv = applyProjection(event, "fsv"); if (fsv.empty()) vetoEvent; // Veto diffractive topologies according to defined hadron level double count_chrg_forward = 0; double count_chrg_backward = 0; const FinalState& fschrgdv = applyProjection(event, "fschrgdv"); foreach (const Particle& p, fschrgdv.particles()) { if (3.9 < p.momentum().eta() && p.momentum().eta() < 4.4) count_chrg_forward++; if (-4.4 < p.momentum().eta() && p.momentum().eta() < -3.9) count_chrg_backward++; } if (count_chrg_forward == 0 || count_chrg_backward == 0) vetoEvent; /// @todo "Diffractive" veto should really also veto dijet events? // MINIMUM BIAS EVENTS _weightMB += weight; foreach (const Particle& p, fsv.particles()) { _hist_mb->fill(fabs(p.momentum().eta()), weight*p.momentum().E()/GeV); } // DIJET EVENTS double PTCUT = -1.0; if (fuzzyEquals(sqrtS()/GeV, 900, 1E-3)) PTCUT = 8.0*GeV; else if (fuzzyEquals(sqrtS()/GeV, 7000, 1E-3)) PTCUT = 20.0*GeV; const FastJets& jetpro = applyProjection(event, "Jets"); const Jets jets = jetpro.jetsByPt(PTCUT); if (jets.size() >= 2) { // eta cut for the central jets if (fabs(jets[0].momentum().eta()) < 2.5 && fabs(jets[1].momentum().eta()) < 2.5) { // Back to back condition of the jets const double diffphi = deltaPhi(jets[1].momentum().phi(), jets[0].momentum().phi()); if (diffphi-PI < 1.0) { _weightDiJet += weight; foreach (const Particle& p, fsv.particles()) { _hist_dijet->fill(fabs(p.momentum().eta()), weight*p.momentum().E()/GeV); } } } } } void finalize() { scale(_hist_mb , 0.5/_weightMB ); scale(_hist_dijet, 0.5/_weightDiJet); } private: AIDA::IHistogram1D *_hist_mb, *_hist_dijet; double _weightMB,_weightDiJet; }; // Hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2011_S9215166); } rivet-1.8.3/src/Analyses/ATLAS_2010_S8894728.cc0000644000175000017500000003563412116077757016343 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Tools/Logging.hh" #include "LWH/Profile1D.h" #include "LWH/Histogram1D.h" namespace Rivet { class ATLAS_2010_S8894728 : public Analysis { public: ATLAS_2010_S8894728() : Analysis("ATLAS_2010_S8894728") { } void init() { const ChargedFinalState cfs100(-2.5, 2.5, 100*MeV); addProjection(cfs100, "CFS100"); const ChargedFinalState cfs500(-2.5, 2.5, 500*MeV); addProjection(cfs500, "CFS500"); const ChargedFinalState cfslead(-2.5, 2.5, 1.0*GeV); addProjection(cfslead, "CFSlead"); // Get an index for the beam energy int isqrts = -1; if (fuzzyEquals(sqrtS(), 900*GeV)) isqrts = 0; else if (fuzzyEquals(sqrtS(), 7*TeV)) isqrts = 1; assert(isqrts >= 0); // Nch profiles, 500 MeV track pT cut _hist_nch_transverse_500[0] = bookProfile1D(1+isqrts, 1, 1); _hist_nch_toward_500 = bookProfile1D(1+isqrts, 1, 2); _hist_nch_away_500 = bookProfile1D(1+isqrts, 1, 3); // pTsum profiles, 500 MeV track pT cut _hist_ptsum_transverse_500[0] = bookProfile1D(3+isqrts, 1, 1); _hist_ptsum_toward_500 = bookProfile1D(3+isqrts, 1, 2); _hist_ptsum_away_500 = bookProfile1D(3+isqrts, 1, 3); // Standard deviation profiles // First the higher moments of main profiles to calculate variance and error on variance... for (size_t i = 1; i < 4; ++i) { _hist_nch_transverse_500[i] = new LWH::Profile1D(binEdges(1+isqrts, 1, 1)); _hist_ptsum_transverse_500[i] = new LWH::Profile1D(binEdges(3+isqrts, 1, 1)); } // Then the data point sets into which the results will be inserted _dps_sdnch_transverse_500 = bookDataPointSet(5+isqrts, 1, 1); _dps_sdptsum_transverse_500 = bookDataPointSet(7+isqrts, 1, 1); // profiles, 500 MeV track pT cut _hist_ptavg_transverse_500 = bookProfile1D(9+isqrts, 1, 1); _hist_ptavg_toward_500 = bookProfile1D(9+isqrts, 1, 2); _hist_ptavg_away_500 = bookProfile1D(9+isqrts, 1, 3); // vs. Nch profiles, 500 MeV track pT cut _hist_dn_dpt_transverse_500 = bookProfile1D(11+isqrts, 1, 1); _hist_dn_dpt_toward_500 = bookProfile1D(11+isqrts, 1, 2); _hist_dn_dpt_away_500 = bookProfile1D(11+isqrts, 1, 3); // Nch vs. Delta(phi) profiles, 500 MeV track pT cut _hist_N_vs_dPhi_1_500 = bookProfile1D(13+isqrts, 1, 1); _hist_N_vs_dPhi_2_500 = bookProfile1D(13+isqrts, 1, 2); _hist_N_vs_dPhi_3_500 = bookProfile1D(13+isqrts, 1, 3); _hist_N_vs_dPhi_5_500 = bookProfile1D(13+isqrts, 1, 4); // pT vs. Delta(phi) profiles, 500 MeV track pT cut _hist_pT_vs_dPhi_1_500 = bookProfile1D(15+isqrts, 1, 1); _hist_pT_vs_dPhi_2_500 = bookProfile1D(15+isqrts, 1, 2); _hist_pT_vs_dPhi_3_500 = bookProfile1D(15+isqrts, 1, 3); _hist_pT_vs_dPhi_5_500 = bookProfile1D(15+isqrts, 1, 4); // Nch and pTsum profiles, 100 MeV track pT cut _hist_nch_transverse_100 = bookProfile1D(17+isqrts, 1, 1); _hist_nch_toward_100 = bookProfile1D(17+isqrts, 1, 2); _hist_nch_away_100 = bookProfile1D(17+isqrts, 1, 3); _hist_ptsum_transverse_100 = bookProfile1D(19+isqrts, 1, 1); _hist_ptsum_toward_100 = bookProfile1D(19+isqrts, 1, 2); _hist_ptsum_away_100 = bookProfile1D(19+isqrts, 1, 3); // Profiles vs. eta (7 TeV only) if (isqrts == 1) { _hist_nch_vs_eta_transverse_100 = bookProfile1D(21, 1, 1); _hist_ptsum_vs_eta_transverse_100 = bookProfile1D(22, 1, 1); } } // Little helper function to identify Delta(phi) regions inline int region_index(double dphi) { assert(inRange(dphi, 0.0, PI, CLOSED, CLOSED)); if (dphi < PI/3.0) return 0; if (dphi < 2*PI/3.0) return 1; return 2; } void analyze(const Event& event) { const double weight = event.weight(); // Require at least one track in the event with pT >= 1 GeV const ChargedFinalState& cfslead = applyProjection(event, "CFSlead"); if (cfslead.size() < 1) { vetoEvent; } // These are the charged particles (tracks) with pT > 500 MeV const ChargedFinalState& charged500 = applyProjection(event, "CFS500"); // Identify leading track and its phi and pT (this is the same for both the 100 MeV and 500 MeV track cuts) ParticleVector particles500 = charged500.particlesByPt(); Particle p_lead = particles500[0]; const double philead = p_lead.momentum().phi(); const double etalead = p_lead.momentum().eta(); const double pTlead = p_lead.momentum().perp(); MSG_DEBUG("Leading track: pT = " << pTlead << ", eta = " << etalead << ", phi = " << philead); // Iterate over all > 500 MeV particles and count particles and scalar pTsum in the three regions vector num500(3, 0), ptSum500(3, 0.0); // Temporary histos that bin Nch and pT in dPhi. // NB. Only one of each needed since binnings are the same for the energies and pT cuts LWH::Histogram1D hist_num_dphi_500(binEdges(13,1,1)); LWH::Histogram1D hist_pt_dphi_500(binEdges(15,1,1)); foreach (const Particle& p, particles500) { const double pT = p.momentum().pT(); const double dPhi = deltaPhi(philead, p.momentum().phi()); const int ir = region_index(dPhi); num500[ir] += 1; ptSum500[ir] += pT; // Fill temp histos to bin Nch and pT in dPhi if (p.genParticle() != p_lead.genParticle()) { // We don't want to fill all those zeros from the leading track... hist_num_dphi_500.fill(dPhi, 1); hist_pt_dphi_500.fill(dPhi, pT); } } // Iterate over charged particles again for profiles against Nch // This is necessary since the Nch are region-specific and so are only known after the first loop foreach (const Particle& p, particles500) { const double pT = p.momentum().pT(); const double dPhi = deltaPhi(philead, p.momentum().phi()); const int ir = region_index(dPhi); switch (ir) { case 0: _hist_dn_dpt_toward_500->fill(num500[0], pT, weight); break; case 1: _hist_dn_dpt_transverse_500->fill(num500[1], pT, weight); break; case 2: _hist_dn_dpt_away_500->fill(num500[2], pT, weight); break; default: assert(false && "How did we get here?"); } } // Now fill underlying event histograms // The densities are calculated by dividing the UE properties by dEta*dPhi // -- each region has a dPhi of 2*PI/3 and dEta is two times 2.5 const double dEtadPhi = (2*2.5 * 2*PI/3.0); // Transverse profiles need 4 orders of moments for stddev with errors for (int i = 0; i < 4; ++i) { _hist_nch_transverse_500[i]->fill(pTlead/GeV, pow(num500[1]/dEtadPhi, i+1), weight); _hist_ptsum_transverse_500[i]->fill(pTlead/GeV, pow(ptSum500[1]/GeV/dEtadPhi, i+1), weight); } // Toward and away profiles only need the first moment (the mean) _hist_nch_toward_500->fill(pTlead/GeV, num500[0]/dEtadPhi, weight); _hist_nch_away_500->fill(pTlead/GeV, num500[2]/dEtadPhi, weight); _hist_ptsum_toward_500->fill(pTlead/GeV, ptSum500[0]/GeV/dEtadPhi, weight); _hist_ptsum_away_500->fill(pTlead/GeV, ptSum500[2]/GeV/dEtadPhi, weight); // profiles //MSG_INFO("Trans pT1, pTsum, Nch, " << pTlead/GeV << ", " << ptSum500[1]/GeV << ", " << num500[1] << ", " << ptSum500[1]/GeV/num500[1]); if (num500[1] > 0) _hist_ptavg_transverse_500->fill(pTlead/GeV, ptSum500[1]/GeV/num500[1], weight); if (num500[0] > 0) _hist_ptavg_toward_500->fill(pTlead/GeV, ptSum500[0]/GeV/num500[0], weight); if (num500[2] > 0) _hist_ptavg_away_500->fill(pTlead/GeV, ptSum500[2]/GeV/num500[2], weight); // Update the "proper" dphi profile histograms // Note that we fill dN/dEtadPhi: dEta = 2*2.5, dPhi = 2*PI/nBins // The values tabulated in the note are for an (undefined) signed Delta(phi) rather than // |Delta(phi)| and so differ by a factor of 2: we have to actually norm for angular range = 2pi const size_t nbins = binEdges(13,1,1).size() - 1; std::vector ptcut; if (fuzzyEquals(sqrtS(), 900*GeV)) { ptcut += 1.0; ptcut += 1.5; ptcut += 2.0; ptcut += 2.5; } else if (fuzzyEquals(sqrtS(), 7*TeV)) { ptcut += 1.0; ptcut += 2.0; ptcut += 3.0; ptcut += 5.0; } assert(ptcut.size() == 4); for (size_t i = 0; i < nbins; ++i) { // First Nch const double binmean_num = hist_num_dphi_500.binMean(i); const double binvalue_num = hist_num_dphi_500.binHeight(i)/hist_num_dphi_500.axis().binWidth(i)/10.0; if (pTlead/GeV >= ptcut[0]) _hist_N_vs_dPhi_1_500->fill(binmean_num, binvalue_num, weight); if (pTlead/GeV >= ptcut[1]) _hist_N_vs_dPhi_2_500->fill(binmean_num, binvalue_num, weight); if (pTlead/GeV >= ptcut[2]) _hist_N_vs_dPhi_3_500->fill(binmean_num, binvalue_num, weight); if (pTlead/GeV >= ptcut[3]) _hist_N_vs_dPhi_5_500->fill(binmean_num, binvalue_num, weight); // Then pT const double binmean_pt = hist_pt_dphi_500.binMean(i); const double binvalue_pt = hist_pt_dphi_500.binHeight(i)/hist_pt_dphi_500.axis().binWidth(i)/10.0; if (pTlead/GeV >= ptcut[0]) _hist_pT_vs_dPhi_1_500->fill(binmean_pt, binvalue_pt, weight); if (pTlead/GeV >= ptcut[1]) _hist_pT_vs_dPhi_2_500->fill(binmean_pt, binvalue_pt, weight); if (pTlead/GeV >= ptcut[2]) _hist_pT_vs_dPhi_3_500->fill(binmean_pt, binvalue_pt, weight); if (pTlead/GeV >= ptcut[3]) _hist_pT_vs_dPhi_5_500->fill(binmean_pt, binvalue_pt, weight); } ////////////////////// // These are the charged particles (tracks) with pT > 100 MeV const ChargedFinalState& charged100 = applyProjection(event, "CFS100"); // Iterate over all > 100 MeV particles and count particles and scalar pTsum in the three regions vector num100(3, 0), ptSum100(3, 0.0); foreach (const Particle& p, charged100.particles()) { const double pT = p.momentum().pT(); const double dPhi = deltaPhi(philead, p.momentum().phi()); const int ir = region_index(dPhi); num100[ir] += 1; ptSum100[ir] += pT; } // Now fill the two sets of 100 MeV underlying event histograms _hist_nch_transverse_100->fill(pTlead/GeV, num100[1]/dEtadPhi, weight); _hist_nch_toward_100->fill(pTlead/GeV, num100[0]/dEtadPhi, weight); _hist_nch_away_100->fill(pTlead/GeV, num100[2]/dEtadPhi, weight); _hist_ptsum_transverse_100->fill(pTlead/GeV, ptSum100[1]/GeV/dEtadPhi, weight); _hist_ptsum_toward_100->fill(pTlead/GeV, ptSum100[0]/GeV/dEtadPhi, weight); _hist_ptsum_away_100->fill(pTlead/GeV, ptSum100[2]/GeV/dEtadPhi, weight); // And finally the Nch and pT vs eta_lead profiles (again from > 100 MeV tracks, and only at 7 TeV) if (fuzzyEquals(sqrtS(), 7*TeV) && pTlead > 5*GeV) { // MSG_INFO(sqrtS() << " " << pTlead << " " << ptSum100[1]/dEtadPhi << " " << num100[1]/dEtadPhi); _hist_nch_vs_eta_transverse_100->fill(etalead, num100[1]/dEtadPhi, weight); _hist_ptsum_vs_eta_transverse_100->fill(etalead, ptSum100[1]/GeV/dEtadPhi, weight); } } void finalize() { // Convert the various moments of the 500 MeV trans pT and Nch distributions to std devs with correct error _moments_to_stddev(_hist_nch_transverse_500, _dps_sdnch_transverse_500); _moments_to_stddev(_hist_ptsum_transverse_500, _dps_sdptsum_transverse_500); } private: inline void _moments_to_stddev(AIDA::IProfile1D* moment_profiles[], AIDA::IDataPointSet* target_dps) { for (int b = 0; b < target_dps->size(); ++b) { // loop over bins /// @todo Assuming unit weights here! Should use N_effective = sumW**2/sumW2? How? const double numentries = moment_profiles[0]->binEntries(b); const double var = moment_profiles[1]->binHeight(b) - pow(moment_profiles[0]->binHeight(b), 2); const double sd = fuzzyLessEquals(var,0.) ? 0 : sqrt(var); //< Numerical safety check target_dps->point(b)->coordinate(1)->setValue(sd); if (sd == 0 || numentries < 3) { MSG_WARNING("Need at least 3 bin entries and a non-zero central value to calculate " << "an error on standard deviation profiles (bin " << b << ")"); target_dps->point(b)->coordinate(1)->setErrorPlus(0); target_dps->point(b)->coordinate(1)->setErrorMinus(0); continue; } // c2(y) = m4(x) - 4 m3(x) m1(x) - m2(x)^2 + 8 m2(x) m1(x)^2 - 4 m1(x)^4 const double var_on_var = moment_profiles[3]->binHeight(b) - 4 * moment_profiles[2]->binHeight(b) * moment_profiles[0]->binHeight(b) - pow(moment_profiles[1]->binHeight(b), 2) + 8 * moment_profiles[1]->binHeight(b) * pow(moment_profiles[0]->binHeight(b), 2) - 4 * pow(moment_profiles[0]->binHeight(b), 4); const double stderr_on_var = sqrt(var_on_var/(numentries-2.0)); const double stderr_on_sd = stderr_on_var / (2.0*sd); target_dps->point(b)->coordinate(1)->setErrorPlus(stderr_on_sd); target_dps->point(b)->coordinate(1)->setErrorMinus(stderr_on_sd); } } private: AIDA::IProfile1D* _hist_nch_transverse_500[4]; AIDA::IProfile1D* _hist_nch_toward_500; AIDA::IProfile1D* _hist_nch_away_500; AIDA::IProfile1D* _hist_ptsum_transverse_500[4]; AIDA::IProfile1D* _hist_ptsum_toward_500; AIDA::IProfile1D* _hist_ptsum_away_500; AIDA::IDataPointSet* _dps_sdnch_transverse_500; AIDA::IDataPointSet* _dps_sdptsum_transverse_500; AIDA::IProfile1D* _hist_ptavg_transverse_500; AIDA::IProfile1D* _hist_ptavg_toward_500; AIDA::IProfile1D* _hist_ptavg_away_500; AIDA::IProfile1D* _hist_dn_dpt_transverse_500; AIDA::IProfile1D* _hist_dn_dpt_toward_500; AIDA::IProfile1D* _hist_dn_dpt_away_500; AIDA::IProfile1D* _hist_N_vs_dPhi_1_500; AIDA::IProfile1D* _hist_N_vs_dPhi_2_500; AIDA::IProfile1D* _hist_N_vs_dPhi_3_500; AIDA::IProfile1D* _hist_N_vs_dPhi_5_500; AIDA::IProfile1D* _hist_pT_vs_dPhi_1_500; AIDA::IProfile1D* _hist_pT_vs_dPhi_2_500; AIDA::IProfile1D* _hist_pT_vs_dPhi_3_500; AIDA::IProfile1D* _hist_pT_vs_dPhi_5_500; AIDA::IProfile1D* _hist_nch_transverse_100; AIDA::IProfile1D* _hist_nch_toward_100; AIDA::IProfile1D* _hist_nch_away_100; AIDA::IProfile1D* _hist_ptsum_transverse_100; AIDA::IProfile1D* _hist_ptsum_toward_100; AIDA::IProfile1D* _hist_ptsum_away_100; AIDA::IProfile1D* _hist_nch_vs_eta_transverse_100; AIDA::IProfile1D* _hist_ptsum_vs_eta_transverse_100; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2010_S8894728); } rivet-1.8.3/src/Analyses/ALEPH_1996_S3196992.cc0000644000175000017500000001260712116077757016342 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/Thrust.hh" namespace Rivet { /// @brief ALEPH measurement of quark-to-photon fragmentation function class ALEPH_1996_S3196992 : public Analysis { public: /// Constructor ALEPH_1996_S3196992() : Analysis("ALEPH_1996_S3196992") { } /// @name Analysis methods //@{ void init() { // Set up projections FinalState fs; addProjection(FastJets(fs, FastJets::DURHAM, 0.7), "DurhamJets"); IdentifiedFinalState ifs(-MAXRAPIDITY, +MAXRAPIDITY, 0.0); ifs.acceptId(PHOTON); addProjection(ifs, "Photons"); addProjection(Thrust(fs), "Thrust"); addProjection(ChargedFinalState(), "CFS"); // Book histograms _h_z_2jet_001 = bookHistogram1D(1, 1, 1); _h_z_2jet_006 = bookHistogram1D(2, 1, 1); _h_z_2jet_01 = bookHistogram1D(3, 1, 1); _h_z_2jet_033 = bookHistogram1D(4, 1, 1); _h_z_3jet_001 = bookHistogram1D(5, 1, 1); _h_z_3jet_006 = bookHistogram1D(6, 1, 1); _h_z_3jet_01 = bookHistogram1D(7, 1, 1); _h_z_4jet_001 = bookHistogram1D(8, 1, 1); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); if (applyProjection(event, "CFS").particles().size()<2) { vetoEvent; } const ParticleVector allphotons = applyProjection(event, "Photons").particles(); ParticleVector photons; foreach (const Particle& photon, allphotons) { if (fabs(cos(photon.momentum().theta()))<0.95 && photon.momentum().E()>5.0*GeV) { photons.push_back(photon); } } if (photons.size()<1) { vetoEvent; } const Thrust& thrust = applyProjection(event, "Thrust"); if (fabs(cos(thrust.thrustAxis().theta()))>0.95) { vetoEvent; } const FastJets& durjet = applyProjection(event, "DurhamJets"); foreach (const Particle& photon, photons) { PseudoJets jets_001 = durjet.clusterSeq()->exclusive_jets_ycut(0.01); foreach (const fastjet::PseudoJet& jet, jets_001) { if (particleInJet(photon, jet, durjet.clusterSeq())) { double zgamma = photon.momentum().E()/jet.E(); if (jets_001.size() == 2) _h_z_2jet_001->fill(zgamma, weight); else if (jets_001.size() == 3) _h_z_3jet_001->fill(zgamma, weight); else if (jets_001.size() > 3) _h_z_4jet_001->fill(zgamma, weight); break; } } PseudoJets jets_006 = durjet.clusterSeq()->exclusive_jets_ycut(0.06); foreach (const fastjet::PseudoJet& jet, jets_006) { if (particleInJet(photon, jet, durjet.clusterSeq())) { double zgamma = photon.momentum().E()/jet.E(); if (jets_006.size() == 2) _h_z_2jet_006->fill(zgamma, weight); else if (jets_006.size() == 3) _h_z_3jet_006->fill(zgamma, weight); break; } } PseudoJets jets_01 = durjet.clusterSeq()->exclusive_jets_ycut(0.1); foreach (const fastjet::PseudoJet& jet, jets_01) { if (particleInJet(photon, jet, durjet.clusterSeq())) { double zgamma = photon.momentum().E()/jet.E(); if (jets_01.size() == 2) _h_z_2jet_01->fill(zgamma, weight); else if (jets_01.size() == 3) _h_z_3jet_01->fill(zgamma, weight); break; } } PseudoJets jets_033 = durjet.clusterSeq()->exclusive_jets_ycut(0.33); foreach (const fastjet::PseudoJet& jet, jets_033) { if (particleInJet(photon, jet, durjet.clusterSeq())) { double zgamma = photon.momentum().E()/jet.E(); if (jets_033.size() == 2) _h_z_2jet_033->fill(zgamma, weight); break; } } } } bool particleInJet(const Particle& p, const fastjet::PseudoJet& jet, const fastjet::ClusterSequence* cseq ) { foreach (const fastjet::PseudoJet& jetpart, cseq->constituents(jet)) { if (fuzzyEquals(jetpart.E(), p.momentum().E()) && fuzzyEquals(jetpart.px(), p.momentum().x()) && fuzzyEquals(jetpart.py(), p.momentum().y()) && fuzzyEquals(jetpart.pz(), p.momentum().z())) { return true; } } return false; } /// Normalise histograms etc., after the run void finalize() { scale(_h_z_2jet_001, 1000.0/sumOfWeights()); scale(_h_z_2jet_006, 1000.0/sumOfWeights()); scale(_h_z_2jet_01, 1000.0/sumOfWeights()); scale(_h_z_2jet_033, 1000.0/sumOfWeights()); scale(_h_z_3jet_001, 1000.0/sumOfWeights()); scale(_h_z_3jet_006, 1000.0/sumOfWeights()); scale(_h_z_3jet_01, 1000.0/sumOfWeights()); scale(_h_z_4jet_001, 1000.0/sumOfWeights()); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_z_2jet_001, *_h_z_2jet_006, *_h_z_2jet_01, *_h_z_2jet_033; AIDA::IHistogram1D *_h_z_3jet_001, *_h_z_3jet_006, *_h_z_3jet_01; AIDA::IHistogram1D *_h_z_4jet_001; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ALEPH_1996_S3196992); } rivet-1.8.3/src/Analyses/ALEPH_2001_S4656318.cc0000644000175000017500000000755612116077757016315 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" /// @todo Use inline PID functions instead #define IS_PARTON_PDGID(id) ( abs(id) <= 100 && abs(id) != 22 && (abs(id) < 11 || abs(id) > 18) ) #define IS_BHADRON_PDGID(id) ( ((abs(id)/100)%10 == 5) || (abs(id) >= 5000 && abs(id) <= 5999) ) namespace Rivet { /// @brief DELPHI b-fragmentation measurement /// @author Hendrik Hoeth class ALEPH_2001_S4656318 : public Analysis { public: /// Constructor ALEPH_2001_S4656318() : Analysis("ALEPH_2001_S4656318") { } /// @name Analysis methods //@{ /// Book projections and histograms void init() { addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "FS"); _histXbweak = bookHistogram1D(8, 1, 1); _histXbprim = bookHistogram1D(8, 1, 2); _histMeanXbweak = bookProfile1D(6, 1, 1); _histMeanXbprim = bookProfile1D(7, 1, 1); } void analyze(const Event& e) { const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed ncharged cut"); vetoEvent; } MSG_DEBUG("Passed ncharged cut"); // Get event weight for histo filling const double weight = e.weight(); // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); foreach (const GenParticle* p, particles(e.genEvent())) { const GenVertex* pv = p->production_vertex(); const GenVertex* dv = p->end_vertex(); if (IS_BHADRON_PDGID(p->pdg_id())) { const double xp = p->momentum().e()/meanBeamMom; // If the B-hadron has a parton as parent, call it primary B-hadron: if (pv) { bool is_primary = false; for (GenVertex::particles_in_const_iterator pp = pv->particles_in_const_begin(); pp != pv->particles_in_const_end() ; ++pp) { if (IS_PARTON_PDGID((*pp)->pdg_id())) is_primary = true; } if (is_primary) { _histXbprim->fill(xp, weight); _histMeanXbprim->fill(_histMeanXbprim->binMean(0), xp, weight); } } // If the B-hadron has no B-hadron as a child, it decayed weakly: if (dv) { bool is_weak = true; for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin() ; pp != dv->particles_out_const_end() ; ++pp) { if (IS_BHADRON_PDGID((*pp)->pdg_id())) { is_weak = false; } } if (is_weak) { _histXbweak->fill(xp, weight); _histMeanXbweak->fill(_histMeanXbweak->binMean(0), xp, weight); } } } } } // Finalize void finalize() { normalize(_histXbprim); normalize(_histXbweak); } private: /// Store the weighted sums of numbers of charged / charged+neutral /// particles - used to calculate average number of particles for the /// inclusive single particle distributions' normalisations. AIDA::IHistogram1D *_histXbprim; AIDA::IHistogram1D *_histXbweak; AIDA::IProfile1D *_histMeanXbprim; AIDA::IProfile1D *_histMeanXbweak; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ALEPH_2001_S4656318); } rivet-1.8.3/src/Analyses/OPAL_2002_S5361494.cc0000644000175000017500000001104612116077757016204 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/Sphericity.hh" #include "Rivet/Projections/Thrust.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/ParisiTensor.hh" #include "Rivet/Projections/Hemispheres.hh" #include "Rivet/Projections/InitialQuarks.hh" #include namespace Rivet { /// @brief OPAL multiplicities at various energies /// @author Peter Richardson class OPAL_2002_S5361494 : public Analysis { public: /// Constructor OPAL_2002_S5361494() : Analysis("OPAL_2002_S5361494"), _weightedTotalChargedPartNumLight(0.), _weightedTotalChargedPartNumCharm(0.), _weightedTotalChargedPartNumBottom(0.), _weightLight(0.),_weightCharm(0.),_weightBottom(0.) {} /// @name Analysis methods //@{ void init() { // Projections addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "CFS"); addProjection(InitialQuarks(), "IQF"); } void analyze(const Event& event) { const double weight = event.weight(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. const FinalState& cfs = applyProjection(event, "CFS"); if (cfs.size() < 2) vetoEvent; int flavour = 0; const InitialQuarks& iqf = applyProjection(event, "IQF"); // If we only have two quarks (qqbar), just take the flavour. // If we have more than two quarks, look for the highest energetic q-qbar pair. if (iqf.particles().size() == 2) { flavour = abs( iqf.particles().front().pdgId() ); } else { map quarkmap; foreach (const Particle& p, iqf.particles()) { if (quarkmap[p.pdgId()] < p.momentum().E()) { quarkmap[p.pdgId()] = p.momentum().E(); } } double maxenergy = 0.; for (int i = 1; i <= 5; ++i) { if (quarkmap[i]+quarkmap[-i] > maxenergy) { flavour = i; } } } const size_t numParticles = cfs.particles().size(); switch (flavour) { case 1: case 2: case 3: _weightLight += weight; _weightedTotalChargedPartNumLight += numParticles * weight; break; case 4: _weightCharm += weight; _weightedTotalChargedPartNumCharm += numParticles * weight; break; case 5: _weightBottom += weight; _weightedTotalChargedPartNumBottom += numParticles * weight; break; } } void finalize() { // bottom const double avgNumPartsBottom = _weightedTotalChargedPartNumBottom / _weightBottom; AIDA::IDataPointSet * multB = bookDataPointSet(1, 1, 1); for (int i = 0; i < multB->size(); ++i) { if (fuzzyEquals(sqrtS(), multB->point(i)->coordinate(0)->value(), 0.01)) { multB->point(i)->coordinate(1)->setValue(avgNumPartsBottom); } } // charm const double avgNumPartsCharm = _weightedTotalChargedPartNumCharm / _weightCharm; AIDA::IDataPointSet * multC = bookDataPointSet(1, 1, 2); for (int i = 0; i < multC->size(); ++i) { if (fuzzyEquals(sqrtS(), multC->point(i)->coordinate(0)->value(), 0.01)) { multC->point(i)->coordinate(1)->setValue(avgNumPartsCharm); } } // light const double avgNumPartsLight = _weightedTotalChargedPartNumLight / _weightLight; AIDA::IDataPointSet * multL = bookDataPointSet(1, 1, 3); for (int i = 0; i < multL->size(); ++i) { if (fuzzyEquals(sqrtS(), multL->point(i)->coordinate(0)->value(), 0.01)) { multL->point(i)->coordinate(1)->setValue(avgNumPartsLight); } } // bottom-light AIDA::IDataPointSet * multD = bookDataPointSet(1, 1, 4); for (int i = 0; i < multD->size(); ++i) { if (fuzzyEquals(sqrtS(), multD->point(i)->coordinate(0)->value(), 0.01)) { multD->point(i)->coordinate(1)->setValue(avgNumPartsBottom-avgNumPartsLight); } } } //@} private: /// @name Multiplicities //@{ double _weightedTotalChargedPartNumLight; double _weightedTotalChargedPartNumCharm; double _weightedTotalChargedPartNumBottom; //@} /// @name Weights //@{ double _weightLight; double _weightCharm; double _weightBottom; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(OPAL_2002_S5361494); } rivet-1.8.3/src/Analyses/MC_WJETS.cc0000644000175000017500000000400012116077757015207 0ustar sunsun// -*- C++ -*- #include "Rivet/Analyses/MC_JetAnalysis.hh" #include "Rivet/Projections/WFinder.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { /// @brief MC validation analysis for W + jets events class MC_WJETS : public MC_JetAnalysis { public: /// Default constructor MC_WJETS() : MC_JetAnalysis("MC_WJETS", 4, "Jets") { } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; WFinder wfinder(fs, -3.5, 3.5, 25.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2); addProjection(wfinder, "WFinder"); FastJets jetpro(wfinder.remainingFinalState(), FastJets::ANTIKT, 0.4); addProjection(jetpro, "Jets"); _h_W_jet1_deta = bookHistogram1D("W_jet1_deta", 50, -5.0, 5.0); _h_W_jet1_dR = bookHistogram1D("W_jet1_dR", 25, 0.5, 7.0); MC_JetAnalysis::init(); } /// Do the analysis void analyze(const Event & e) { const double weight = e.weight(); const WFinder& wfinder = applyProjection(e, "WFinder"); if (wfinder.bosons().size() != 1) { vetoEvent; } FourMomentum wmom(wfinder.bosons().front().momentum()); const Jets& jets = applyProjection(e, "Jets").jetsByPt(m_jetptcut); if (jets.size() > 0) { _h_W_jet1_deta->fill(wmom.eta()-jets[0].momentum().eta(), weight); _h_W_jet1_dR->fill(deltaR(wmom, jets[0].momentum()), weight); } MC_JetAnalysis::analyze(e); } /// Finalize void finalize() { scale(_h_W_jet1_deta, crossSection()/sumOfWeights()); scale(_h_W_jet1_dR, crossSection()/sumOfWeights()); MC_JetAnalysis::finalize(); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_W_jet1_deta; AIDA::IHistogram1D * _h_W_jet1_dR; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_WJETS); } rivet-1.8.3/src/Analyses/D0_2006_S6438750.cc0000644000175000017500000000471212116077757015723 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief D0 inclusive isolated photon cross-section vs. \f$ p_\perp(gamma) \f$. /// @author Andy Buckley /// @author Gavin Hesketh class D0_2006_S6438750 : public Analysis { public: /// @name Constructors etc. //@{ /// Default constructor. D0_2006_S6438750() : Analysis("D0_2006_S6438750") { } //@} /// @name Analysis methods //@{ void init() { // General FS for photon isolation FinalState fs; addProjection(fs, "AllFS"); // Get leading photon LeadingParticlesFinalState photonfs(FinalState(-0.9, 0.9, 23.0*GeV)); photonfs.addParticleId(PHOTON); addProjection(photonfs, "LeadingPhoton"); // Book histograms _h_pTgamma = bookHistogram1D(1, 1, 1); } /// Do the analysis void analyze(const Event& event) { // Get the photon const FinalState& photonfs = applyProjection(event, "LeadingPhoton"); if (photonfs.particles().size() != 1) { vetoEvent; } const FourMomentum photon = photonfs.particles().front().momentum(); // Isolate photon by ensuring that a 0.4 cone around it contains less than 10% of the photon's energy double E_P = photon.E(); double eta_P = photon.pseudorapidity(); double phi_P = photon.azimuthalAngle(); double econe = 0.0; foreach (const Particle& p, applyProjection(event, "AllFS").particles()) { if (deltaR(eta_P, phi_P, p.momentum().pseudorapidity(), p.momentum().azimuthalAngle()) < 0.4) { econe += p.momentum().E(); if (econe/E_P > 1.1) { vetoEvent; } } } // Fill histo const double weight = event.weight(); _h_pTgamma->fill(photon.pT(), weight); } // Finalize void finalize() { const double lumi_gen = sumOfWeights()/crossSection(); // Divide by effective lumi, plus rapidity bin width of 1.8 scale(_h_pTgamma, 1/lumi_gen * 1/1.8); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D* _h_pTgamma; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2006_S6438750); } rivet-1.8.3/src/Analyses/CMS_2012_PAS_QCD_11_010.cc0000644000175000017500000000512612116077757017107 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { class CMS_2012_PAS_QCD_11_010 : public Analysis { public: CMS_2012_PAS_QCD_11_010() : Analysis("CMS_2012_PAS_QCD_11_010") { } void init() { const FastJets jets(ChargedFinalState(-2.5, 2.5, 0.5*GeV), FastJets::ANTIKT, 0.5); addProjection(jets, "Jets"); const UnstableFinalState ufs(-2.0, 2.0, 0.6*GeV); addProjection(ufs, "UFS"); _h_nTrans_Lambda = bookProfile1D(1, 1, 1); _h_nTrans_Kaon = bookProfile1D(2, 1, 1); _h_ptsumTrans_Lambda = bookProfile1D(3, 1, 1); _h_ptsumTrans_Kaon = bookProfile1D(4, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); Jets jets = applyProjection(event, "Jets").jetsByPt(1.0*GeV); if (jets.size() < 1) vetoEvent; if (fabs(jets[0].momentum().eta()) >= 2) { // cuts on leading jets vetoEvent; } FourMomentum p_lead = jets[0].momentum(); const double pTlead = p_lead.pT(); const UnstableFinalState& ufs = applyProjection(event, "UFS"); int numTrans_Kaon = 0; int numTrans_Lambda = 0; double ptSumTrans_Kaon = 0.; double ptSumTrans_Lambda = 0.; foreach (const Particle& p, ufs.particles()) { double dphi = deltaPhi(p, p_lead); double pT = p.momentum().pT(); const PdgId id = abs(p.pdgId()); if (dphi > PI/3. && dphi < 2./3.*PI) { if (id == 310 && pT > 0.6*GeV) { ptSumTrans_Kaon += pT/GeV; numTrans_Kaon++; } else if (id == 3122 && pT > 1.5*GeV) { ptSumTrans_Lambda += pT/GeV; numTrans_Lambda++; } } } _h_nTrans_Kaon->fill(pTlead/GeV, numTrans_Kaon / (8.0 * PI/3.0), weight); _h_nTrans_Lambda->fill(pTlead/GeV, numTrans_Lambda / (8.0 * PI/3.0), weight); _h_ptsumTrans_Kaon->fill(pTlead/GeV, ptSumTrans_Kaon / (GeV * (8.0 * PI/3.0)), weight); _h_ptsumTrans_Lambda->fill(pTlead/GeV, ptSumTrans_Lambda / (GeV * (8.0 * PI/3.0)), weight); } void finalize() { } private: AIDA::IProfile1D* _h_nTrans_Kaon; AIDA::IProfile1D* _h_nTrans_Lambda; AIDA::IProfile1D* _h_ptsumTrans_Kaon; AIDA::IProfile1D* _h_ptsumTrans_Lambda; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2012_PAS_QCD_11_010); } rivet-1.8.3/src/Analyses/ATLAS_2011_S9126244.cc0000644000175000017500000003756512116077757016327 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/BinnedHistogram.hh" namespace Rivet { struct ATLAS_2011_S9126244_Plots { int selectionType; // The third value in the axis code d**-**-** std::string intermediateHistName; // Gap Fraction Vs Delta Y Plot Setup int m_gapFractionDeltaYHistIndex; std::vector m_gapFractionDeltaYSlices; BinnedHistogram _h_gapVsDeltaYVeto; BinnedHistogram _h_gapVsDeltaYInc; // Gap Fraction Vs PtBar Plot Setup int m_gapFractionPtBarHistIndex; std::vector m_gapFractionPtBarSlices; BinnedHistogram _h_gapVsPtBarVeto; BinnedHistogram _h_gapVsPtBarInc; // Gap Fraction Vs Q0 Plot Setup int m_gapFractionQ0HistIndex; std::vector m_gapFractionQ0SlicesPtBar; std::vector m_gapFractionQ0SlicesDeltaY; std::vector _h_vetoPt; std::vector _d_vetoPtGapFraction; std::vector _h_vetoPtTotalSum; // Average NJet Vs DeltaY Setup int m_avgNJetDeltaYHistIndex; std::vector m_avgNJetDeltaYSlices; std::vector _p_avgJetVsDeltaY; // Average NJet Vs PtBar Setup int m_avgNJetPtBarHistIndex; std::vector m_avgNJetPtBarSlices; std::vector _p_avgJetVsPtBar; }; class ATLAS_2011_S9126244 : public Analysis { public: /// Constructor ATLAS_2011_S9126244() : Analysis("ATLAS_2011_S9126244") { } public: /// Book histograms and initialise projections before the run void init() { // Initialize the lone projection required addProjection(FastJets(FinalState(), FastJets::ANTIKT, 0.6), "AntiKtJets06"); // Make Q0 bins 0->20 then 20 to 195.0 in steps of 5 m_q0BinEdges += 0.0; for (unsigned int x=0; x<36; x++){ m_q0BinEdges += 20.0 + x*5.0 ; } // Initialize plots for each selection type m_selectionPlots[0].intermediateHistName = "highestPt"; m_selectionPlots[0].selectionType = 1; m_selectionPlots[0].m_gapFractionDeltaYHistIndex = 6; m_selectionPlots[0].m_gapFractionPtBarHistIndex = 1; m_selectionPlots[0].m_gapFractionQ0HistIndex = 13; m_selectionPlots[0].m_avgNJetDeltaYHistIndex = 37; m_selectionPlots[0].m_avgNJetPtBarHistIndex = 26; m_selectionPlots[0].m_gapFractionDeltaYSlices += 70.0, 90.0, 120.0, 150.0, 180.0, 210.0, 240.0, 270.0; m_selectionPlots[0].m_gapFractionPtBarSlices += 1.0, 2.0, 3.0, 4.0, 5.0, 6.0; m_selectionPlots[0].m_gapFractionQ0SlicesPtBar += 70.0, 90.0, 120.0, 150.0, 210.0, 240.0; m_selectionPlots[0].m_gapFractionQ0SlicesDeltaY += 2.0, 3.0, 4.0, 5.0; m_selectionPlots[0].m_avgNJetPtBarSlices += 1.0, 2.0, 3.0, 4.0, 5.0; m_selectionPlots[0].m_avgNJetDeltaYSlices += 70.0, 90.0, 120.0, 150.0, 180.0, 210.0, 240.0, 270.0; initializePlots(m_selectionPlots[0]); m_selectionPlots[1].intermediateHistName = "forwardBackward"; m_selectionPlots[1].selectionType = 2; m_selectionPlots[1].m_gapFractionDeltaYHistIndex = 6; m_selectionPlots[1].m_gapFractionPtBarHistIndex = 1; m_selectionPlots[1].m_gapFractionQ0HistIndex = 13; m_selectionPlots[1].m_avgNJetDeltaYHistIndex = 37; m_selectionPlots[1].m_avgNJetPtBarHistIndex = 26; m_selectionPlots[1].m_gapFractionDeltaYSlices += 70.0, 90.0, 120.0, 150.0, 180.0, 210.0, 240.0, 270.0; m_selectionPlots[1].m_gapFractionPtBarSlices += 1.0, 2.0, 3.0, 4.0, 5.0, 6.0; m_selectionPlots[1].m_gapFractionQ0SlicesPtBar += 70.0, 90.0, 120.0, 150.0, 210.0, 240.0; m_selectionPlots[1].m_gapFractionQ0SlicesDeltaY += 2.0, 3.0, 4.0, 5.0; m_selectionPlots[1].m_avgNJetPtBarSlices += 1.0, 2.0, 3.0, 4.0, 5.0; m_selectionPlots[1].m_avgNJetDeltaYSlices += 70.0, 90.0, 120.0, 150.0, 180.0, 210.0, 240.0, 270.0; initializePlots(m_selectionPlots[1]); m_selectionPlots[2].intermediateHistName = "forwardBackward_PtBarVeto"; m_selectionPlots[2].selectionType = 1; m_selectionPlots[2].m_gapFractionDeltaYHistIndex = 19; m_selectionPlots[2].m_avgNJetDeltaYHistIndex = 30; m_selectionPlots[2].m_gapFractionDeltaYSlices += 70.0, 90.0, 120.0, 150.0, 180.0, 210.0, 240.0, 270.0; m_selectionPlots[2].m_avgNJetDeltaYSlices += 70.0, 90.0, 120.0, 150.0, 180.0, 210.0, 240.0, 270.0; initializePlots(m_selectionPlots[2]); } void initializePlots(ATLAS_2011_S9126244_Plots& plots) { // Gap Fraction Vs DeltaY for (int x = 0; x < ((int)plots.m_gapFractionDeltaYSlices.size()-1); x++) { std::stringstream vetoHistName; std::stringstream inclusiveHistName; const BinEdges deltaYEdges = binEdges(plots.m_gapFractionDeltaYHistIndex+x, 1, plots.selectionType); vetoHistName << "gapDeltaYVeto_" << plots.intermediateHistName << "_" << x; inclusiveHistName << "gapDeltaYInclusive_" << plots.intermediateHistName << "_" << x; plots._h_gapVsDeltaYVeto.addHistogram(plots.m_gapFractionDeltaYSlices[x], plots.m_gapFractionDeltaYSlices[x+1], bookHistogram1D(vetoHistName.str(), deltaYEdges)); plots._h_gapVsDeltaYInc.addHistogram(plots.m_gapFractionDeltaYSlices[x], plots.m_gapFractionDeltaYSlices[x+1], bookHistogram1D(inclusiveHistName.str(), deltaYEdges)); } // Average NJet Vs DeltaY for (int x = 0; x < ((int)plots.m_avgNJetDeltaYSlices.size()-1); x++) { plots._p_avgJetVsDeltaY += bookProfile1D(plots.m_avgNJetDeltaYHistIndex+x, 1, plots.selectionType); } // Gap Fraction Vs PtBar for (int x = 0; x < ((int)plots.m_gapFractionPtBarSlices.size()-1); x++) { std::stringstream vetoHistName; std::stringstream inclusiveHistName; const BinEdges ptBarEdges = binEdges(plots.m_gapFractionPtBarHistIndex+x, 1, plots.selectionType); vetoHistName << "gapPtBarVeto_" << plots.intermediateHistName << "_" << x; inclusiveHistName << "gapPtBarInclusive_" << plots.intermediateHistName << "_" << x; plots._h_gapVsPtBarVeto.addHistogram(plots.m_gapFractionPtBarSlices[x], plots.m_gapFractionPtBarSlices[x+1], bookHistogram1D(vetoHistName.str(), ptBarEdges)); plots._h_gapVsPtBarInc.addHistogram(plots.m_gapFractionPtBarSlices[x], plots.m_gapFractionPtBarSlices[x+1], bookHistogram1D(inclusiveHistName.str(), ptBarEdges)); } // Average NJet Vs PtBar for (int x = 0; x < ((int)plots.m_avgNJetPtBarSlices.size()-1); x++) { plots._p_avgJetVsPtBar += bookProfile1D(plots.m_avgNJetPtBarHistIndex+x, 1, plots.selectionType); } // Gap fraction Vs Q0 int q0PlotCount = 0; for (int x = 0; x < ((int)plots.m_gapFractionQ0SlicesPtBar.size()/2); x++) { for (int y = 0; y < ((int)plots.m_gapFractionQ0SlicesDeltaY.size()/2); y++) { std::stringstream vetoPtHistName; std::stringstream vetoPtGapDataPointName; vetoPtHistName << "vetoPt_" << plots.intermediateHistName << "_" << q0PlotCount; vetoPtGapDataPointName << "gapQ0GapFractionDataPoints_" << plots.intermediateHistName << "_" << q0PlotCount; plots._h_vetoPt += bookHistogram1D(vetoPtHistName.str(), m_q0BinEdges); plots._d_vetoPtGapFraction += bookDataPointSet(plots.m_gapFractionQ0HistIndex+q0PlotCount, 1, plots.selectionType); plots._h_vetoPtTotalSum += 0.0; q0PlotCount++; } } } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // Get minimal list of jets needed to be considered double minimumJetPtBar = 50.0*GeV; //of interval defining jets vector acceptJets; foreach (const Jet& jet, applyProjection(event, "AntiKtJets06").jetsByPt(20.0*GeV)) { if (fabs(jet.momentum().rapidity()) < 4.4) { acceptJets.push_back(jet.momentum()); } } // If can't form an interval drop out of the analysis early if (acceptJets.size() < 2) { return; } // Analyze leading jet case if ((acceptJets[0].pT() + acceptJets[1].pT())/2.0 > minimumJetPtBar) { analyzeJets(acceptJets, m_selectionPlots[0], weight, 20.0*GeV); } // Re-order jets to have forward backward selection unsigned int minRapidityJet = 0; unsigned int maxRapidityJet = 0; for (size_t j=1; j acceptJets[maxRapidityJet].rapidity()) { maxRapidityJet=j; } if (acceptJets[j].rapidity() < acceptJets[minRapidityJet].rapidity()) { minRapidityJet=j; } } vector fwdBkwdJets; fwdBkwdJets.push_back(acceptJets[maxRapidityJet]); fwdBkwdJets.push_back(acceptJets[minRapidityJet]); for (size_t j=0; j minimumJetPtBar) { //Use most forward/backward jets in rapidity to define the interval analyzeJets(fwdBkwdJets, m_selectionPlots[1], weight, 20.0*GeV); //As before but now using PtBar of interval to define veto threshold analyzeJets(fwdBkwdJets, m_selectionPlots[2], weight, (fwdBkwdJets[0].pT()+fwdBkwdJets[1].pT())/2.0); } } // Fill plots! void analyzeJets(vector& jets, ATLAS_2011_S9126244_Plots& plots, const double weight, double vetoPtThreshold){ // Calculate the interval size, ptBar and veto Pt (if any) double intervalSize; double ptBar; double vetoPt = 0.0*GeV; intervalSize = fabs(jets[0].rapidity()-jets[1].rapidity()); ptBar = (jets[0].pT()+jets[1].pT())/2.0; double minY; double maxY; if (jets[0].rapidity() > jets[1].rapidity()) { minY = jets[1].rapidity(); maxY = jets[0].rapidity(); } else { minY = jets[0].rapidity(); maxY = jets[1].rapidity(); } for (size_t j=2; j minY && jets[j].rapidity() < maxY && jets[j].pT() > vetoPt){ vetoPt = jets[j].pT(); } } // Fill the gap fraction vs delta Y histograms plots._h_gapVsDeltaYInc.fill(ptBar/GeV, intervalSize, weight); if (vetoPt < vetoPtThreshold) { plots._h_gapVsDeltaYVeto.fill(ptBar/GeV, intervalSize, weight); } // Fill the gap fraction vs pt Bar histograms plots._h_gapVsPtBarInc.fill(intervalSize, ptBar/GeV, weight); if (vetoPt < vetoPtThreshold) { plots._h_gapVsPtBarVeto.fill(intervalSize, ptBar/GeV, weight); } // Count the number of veto jets present int vetoJetsCount=0; for (size_t j=2; j minY && jets[j].rapidity() < maxY && jets[j].pT() > vetoPtThreshold){ vetoJetsCount += 1; } } // Fill the avg NJet, deltaY slices for (int i=0; i<(int)plots.m_avgNJetPtBarSlices.size()-1; i++) { if ( intervalSize >= plots.m_avgNJetPtBarSlices[i] && intervalSize < plots.m_avgNJetPtBarSlices[i+1]) { plots._p_avgJetVsPtBar[i]->fill(ptBar/GeV, vetoJetsCount, weight); } } // Fill the avg NJet, ptBar slices for (int i=0; i<(int)plots.m_avgNJetDeltaYSlices.size()-1; i++) { if ( ptBar/GeV >= plots.m_avgNJetDeltaYSlices[i] && ptBar/GeV < plots.m_avgNJetDeltaYSlices[i+1] ) { plots._p_avgJetVsDeltaY[i]->fill(intervalSize, vetoJetsCount, weight); } } // Fill the veto pt plots int q0PlotCount = 0; for (int x=0; x<((int)plots.m_gapFractionQ0SlicesPtBar.size()/2); x++) { for (int y=0; y<((int)plots.m_gapFractionQ0SlicesDeltaY.size()/2); y++) { // Check if it should be filled if ( ptBar/GeV < plots.m_gapFractionQ0SlicesPtBar[x*2] || ptBar/GeV >= plots.m_gapFractionQ0SlicesPtBar[x*2+1] ) { q0PlotCount++; continue; } if ( intervalSize < plots.m_gapFractionQ0SlicesDeltaY[y*2] || intervalSize >= plots.m_gapFractionQ0SlicesDeltaY[y*2+1] ) { q0PlotCount++; continue; } plots._h_vetoPt[q0PlotCount]->fill(vetoPt, weight); plots._h_vetoPtTotalSum[q0PlotCount] += weight; q0PlotCount++; } } } /// Derive final distributions for each selection void finalize() { foreach (const ATLAS_2011_S9126244_Plots& plots, m_selectionPlots) { // Calculate the gap fraction for each slice for (size_t x = 0; x < plots._h_gapVsDeltaYVeto.getHistograms().size(); x++) { histogramFactory().divide(histoPath(makeAxisCode(plots.m_gapFractionDeltaYHistIndex+x, 1, plots.selectionType)), *(plots._h_gapVsDeltaYVeto.getHistograms()[x]), *(plots._h_gapVsDeltaYInc.getHistograms()[x])); histogramFactory().destroy(plots._h_gapVsDeltaYVeto.getHistograms()[x]); histogramFactory().destroy(plots._h_gapVsDeltaYInc.getHistograms()[x]); } for (size_t x = 0; x < plots._h_gapVsPtBarVeto.getHistograms().size(); x++) { histogramFactory().divide(histoPath(makeAxisCode(plots.m_gapFractionPtBarHistIndex+x, 1, plots.selectionType)), *(plots._h_gapVsPtBarVeto.getHistograms()[x]), *(plots._h_gapVsPtBarInc.getHistograms()[x])); histogramFactory().destroy(plots._h_gapVsPtBarVeto.getHistograms()[x]); histogramFactory().destroy(plots._h_gapVsPtBarInc.getHistograms()[x]); } for (size_t h = 0; h < plots._d_vetoPtGapFraction.size(); h++) { // Get the number of bins needed for this slice const BinEdges q0Edges = binEdges(plots.m_gapFractionQ0HistIndex+h, 1, plots.selectionType); finalizeQ0GapFraction(plots._h_vetoPtTotalSum[h], plots._d_vetoPtGapFraction[h], plots._h_vetoPt[h], q0Edges.size()); } } } void finalizeQ0GapFraction(double totalWeightSum, AIDA::IDataPointSet* gapFractionDP, AIDA::IHistogram1D* vetoPtHist, int binNumber) { double vetoPtWeightSum = 0.0; for (int x = 0; x < binNumber-1; x++) { vetoPtWeightSum += vetoPtHist->binHeight(x); // Alternatively try saving as data points IDataPoint* currentPoint = gapFractionDP->point(x); IMeasurement* xCoord = currentPoint->coordinate(0); IMeasurement* yCoord = currentPoint->coordinate(1); // Calculate the efficiency uncertainty double efficiency = vetoPtWeightSum/totalWeightSum; double efficiencyError = std::sqrt(efficiency*(1.0-efficiency)/totalWeightSum); if (totalWeightSum==0.) efficiency = efficiencyError = 0.; xCoord->setValue(m_q0BinEdges[x+1]); xCoord->setErrorPlus(2.5); xCoord->setErrorMinus(2.5); yCoord->setValue(efficiency); yCoord->setErrorPlus(efficiencyError); yCoord->setErrorMinus(efficiencyError); } histogramFactory().destroy(vetoPtHist); } private: // Only need to define the q0 binning here std::vector m_q0BinEdges; private: // Structure containing complete set of plots ATLAS_2011_S9126244_Plots m_selectionPlots[3]; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_S9126244); } rivet-1.8.3/src/Analyses/D0_2009_S8202443.cc0000644000175000017500000001144412116077757015714 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief D0 Z + jet + \f$ X \f$ cross-section / \f$ p_\perp \f$ distributions class D0_2009_S8202443 : public Analysis { public: /// @name Construction //@{ /// Constructor D0_2009_S8202443() : Analysis("D0_2009_S8202443"), _sum_of_weights(0.0), _sum_of_weights_constrained(0.0) { } //@} /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; // Leptons in constrained tracking acceptance vector > etaRanges; etaRanges.push_back(make_pair(-2.5, -1.5)); etaRanges.push_back(make_pair(-1.1, 1.1)); etaRanges.push_back(make_pair(1.5, 2.5)); ZFinder zfinder_constrained(fs, etaRanges, 25.0*GeV, ELECTRON, 65.0*GeV, 115.0*GeV, 0.2, true, true); addProjection(zfinder_constrained, "ZFinderConstrained"); FastJets conefinder_constrained(zfinder_constrained.remainingFinalState(), FastJets::D0ILCONE, 0.5); addProjection(conefinder_constrained, "ConeFinderConstrained"); // Unconstrained leptons ZFinder zfinder(fs, -MAXRAPIDITY, MAXRAPIDITY, 0.0*GeV, ELECTRON, 65.0*GeV, 115.0*GeV, 0.2, true, true); addProjection(zfinder, "ZFinder"); FastJets conefinder(zfinder.remainingFinalState(), FastJets::D0ILCONE, 0.5); addProjection(conefinder, "ConeFinder"); _h_jet1_pT_constrained = bookHistogram1D(1, 1, 1); _h_jet2_pT_constrained = bookHistogram1D(3, 1, 1); _h_jet3_pT_constrained = bookHistogram1D(5, 1, 1); _h_jet1_pT = bookHistogram1D(2, 1, 1); _h_jet2_pT = bookHistogram1D(4, 1, 1); _h_jet3_pT = bookHistogram1D(6, 1, 1); } // Do the analysis void analyze(const Event& e) { double weight = e.weight(); // unconstrained electrons first const ZFinder& zfinder = applyProjection(e, "ZFinder"); if (zfinder.bosons().size()==1) { _sum_of_weights += weight; const JetAlg& jetpro = applyProjection(e, "ConeFinder"); const Jets& jets = jetpro.jetsByPt(20.0*GeV); Jets jets_cut; foreach (const Jet& j, jets) { if (fabs(j.momentum().pseudorapidity()) < 2.5) { jets_cut.push_back(j); } } if (jets_cut.size()>0) { _h_jet1_pT->fill(jets_cut[0].momentum().pT()/GeV, weight); } if (jets_cut.size()>1) { _h_jet2_pT->fill(jets_cut[1].momentum().pT()/GeV, weight); } if (jets_cut.size()>2) { _h_jet3_pT->fill(jets_cut[2].momentum().pT()/GeV, weight); } } else { MSG_DEBUG("no unique lepton pair found."); } // constrained electrons const ZFinder& zfinder_constrained = applyProjection(e, "ZFinderConstrained"); if (zfinder_constrained.bosons().size()==1) { _sum_of_weights_constrained += weight; const JetAlg& jetpro = applyProjection(e, "ConeFinderConstrained"); const Jets& jets = jetpro.jetsByPt(20.0*GeV); Jets jets_cut; foreach (const Jet& j, jets) { if (fabs(j.momentum().pseudorapidity()) < 2.5) { jets_cut.push_back(j); } } if (jets_cut.size()>0) { _h_jet1_pT_constrained->fill(jets_cut[0].momentum().pT()/GeV, weight); } if (jets_cut.size()>1) { _h_jet2_pT_constrained->fill(jets_cut[1].momentum().pT()/GeV, weight); } if (jets_cut.size()>2) { _h_jet3_pT_constrained->fill(jets_cut[2].momentum().pT()/GeV, weight); } } else { MSG_DEBUG("no unique lepton pair found."); vetoEvent; } } // Finalize void finalize() { scale(_h_jet1_pT, 1.0/_sum_of_weights); scale(_h_jet2_pT, 1.0/_sum_of_weights); scale(_h_jet3_pT, 1.0/_sum_of_weights); scale(_h_jet1_pT_constrained, 1.0/_sum_of_weights_constrained); scale(_h_jet2_pT_constrained, 1.0/_sum_of_weights_constrained); scale(_h_jet3_pT_constrained, 1.0/_sum_of_weights_constrained); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_jet1_pT; AIDA::IHistogram1D * _h_jet2_pT; AIDA::IHistogram1D * _h_jet3_pT; AIDA::IHistogram1D * _h_jet1_pT_constrained; AIDA::IHistogram1D * _h_jet2_pT_constrained; AIDA::IHistogram1D * _h_jet3_pT_constrained; //@} double _sum_of_weights, _sum_of_weights_constrained; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2009_S8202443); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1188891.cc0000644000175000017500000001276212116077757016316 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "LWH/Histogram1D.h" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Particle.hh" //#include namespace Rivet { class ATLAS_2012_I1188891 : public Analysis { public: ATLAS_2012_I1188891() : Analysis("ATLAS_2012_I1188891") { } public: void init() { const FinalState fs; FastJets fj04(fs, FastJets::ANTIKT, 0.4); addProjection(fj04, "AntiKT04"); //double xbins[7] = { 40.,60.,80.,120.,160.,250.,500. }; vector xbins; xbins.push_back(40.); xbins.push_back(60.); xbins.push_back(80.); xbins.push_back(120.); xbins.push_back(160.); xbins.push_back(250.); xbins.push_back(500.); string histotitle[7]={"BBfraction","BCfraction","CCfraction","BUfraction","CUfraction","UUfraction","Total"}; for (int i = 0 ; i < 7 ; i++){ _fracHistos[i] = bookHistogram1D(histotitle[i],xbins); } } void analyze(const Event& event) { double weight = event.weight(); double weight100 = event.weight() * 100.; //to get results in % //keeps jets with pt>20 geV and ordered in decreasing pt Jets jetAr = applyProjection(event, "AntiKT04").jetsByPt(20*GeV); int flav[2]={1,1}; vector leadjets; //get b/c-hadrons std::vector B_hadrons; std::vector C_hadrons; std::vector allParticles = particles(event.genEvent()); for(unsigned int i = 0; i < allParticles.size(); i++) { GenParticle* p = allParticles.at(i); if(p->momentum().perp()*GeV < 5) continue; if ( (Rivet::PID::isHadron ( p->pdg_id() ) && Rivet::PID::hasBottom( p->pdg_id() ) ) ) { B_hadrons.push_back(p); } if ( (Rivet::PID::isHadron( p->pdg_id() ) && Rivet::PID::hasCharm( p->pdg_id() ) ) ) { C_hadrons.push_back(p); } } //select dijet foreach (const Jet& jet, jetAr) { const double pT = jet.momentum().pT(); const double absy = fabs(jet.momentum().rapidity()); bool isBjet = false; //not using this //isBjet = jet.containsBottom(); foreach(HepMC::GenParticle* b, B_hadrons) { FourMomentum hadron = b->momentum(); double hadron_jet_dR = deltaR(jet.momentum(), hadron); if(hadron_jet_dR < 0.3) isBjet = true; } bool isCjet = false; //bool isCjet = jet.containsCharm(); foreach(HepMC::GenParticle* c, C_hadrons) { FourMomentum hadron = c->momentum(); double hadron_jet_dR = deltaR(jet.momentum(), hadron); if(hadron_jet_dR < 0.3) isCjet = true; } int jetflav=1; if (isBjet)jetflav=5; else if (isCjet)jetflav=4; if (absy <= 2.1 && leadjets.size() < 2) { if (pT > 500*GeV) continue; if ((leadjets.empty() && pT < 40*GeV) || pT < 20*GeV) continue; leadjets.push_back(jet.momentum()); if (leadjets.size()==1) flav[0] = jetflav; if (leadjets.size()==2) flav[1] = jetflav; } } if (leadjets.size() < 2) vetoEvent; double pBinsLJ[7] = {40.,60.,80.,120.,160.,250.,500.}; int iPBinLJ = -1; for (int k = 0 ; k < 7 ; k++) { if (leadjets[0].pT() > pBinsLJ[k]*GeV) iPBinLJ=k; else break; } bool c_ljpt = (iPBinLJ != -1); bool c_nljpt = leadjets[1].pT() > 20*GeV; bool c_dphi = fabs( deltaPhi(leadjets[0],leadjets[1]) ) > 2.1; bool isDijet = c_ljpt & c_nljpt & c_dphi; if (!isDijet) vetoEvent; _fracHistos[6]->fill(leadjets[0].pT(), weight); if (flav[0]==5 && flav[1]==5) // BB dijet _fracHistos[0]->fill(leadjets[0].pT(), weight100); if ((flav[0]==5 && flav[1]==4) || (flav[0]==4 && flav[1]==5)) // BC dijet _fracHistos[1]->fill(leadjets[0].pT(), weight100); if (flav[0]==4 && flav[1]==4) // CC dijet _fracHistos[2]->fill(leadjets[0].pT(), weight100); if ((flav[0]==5 && flav[1]==1) || (flav[0]==1 && flav[1]==5)) // B-light dijet _fracHistos[3]->fill(leadjets[0].pT(), weight100); if ((flav[0]==4 && flav[1]==1) || (flav[0]==1 && flav[1]==4)) // C-light dijet _fracHistos[4]->fill(leadjets[0].pT(), weight100); if (flav[0]==1 && flav[1]==1) // light-light dijet _fracHistos[5]->fill(leadjets[0].pT(), weight100); } void finalize() { AIDA::IHistogramFactory& hf = histogramFactory(); hf.divide( histoPath(1,1,1), *_fracHistos[0], *_fracHistos[6]); hf.divide( histoPath(2,1,1), *_fracHistos[1], *_fracHistos[6]); hf.divide( histoPath(3,1,1), *_fracHistos[2], *_fracHistos[6]); hf.divide( histoPath(4,1,1), *_fracHistos[3], *_fracHistos[6]); hf.divide( histoPath(5,1,1), *_fracHistos[4], *_fracHistos[6]); hf.divide( histoPath(6,1,1), *_fracHistos[5], *_fracHistos[6]); // remove temporary histograms for (size_t i=0; i<7; i++) { hf.destroy(_fracHistos[i]); } } private: AIDA::IHistogram1D * _fracHistos[7]; }; DECLARE_RIVET_PLUGIN(ATLAS_2012_I1188891); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1125575.cc0000644000175000017500000001766412116077757016312 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/BinnedHistogram.hh" namespace Rivet { class ATLAS_2012_I1125575 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_I1125575() : Analysis("ATLAS_2012_I1125575") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { /// @todo Initialise and register projections here const ChargedFinalState jet_input(-2.5, 2.5, 0.5*GeV); addProjection(jet_input, "JET_INPUT"); const ChargedFinalState track_input(-1.5, 1.5, 0.5*GeV); addProjection(track_input, "TRACK_INPUT"); const FastJets jets02(jet_input, FastJets::ANTIKT, 0.2); addProjection(jets02, "JETS_02"); const FastJets jets04(jet_input, FastJets::ANTIKT, 0.4); addProjection(jets04, "JETS_04"); const FastJets jets06(jet_input, FastJets::ANTIKT, 0.6); addProjection(jets06, "JETS_06"); const FastJets jets08(jet_input, FastJets::ANTIKT, 0.8); addProjection(jets08, "JETS_08"); const FastJets jets10(jet_input, FastJets::ANTIKT, 1.0); addProjection(jets10, "JETS_10"); // Mean number of tracks InitializeProfiles(_h_meanNch, 1); // Mean of the average track pT in each region InitializeProfiles(_h_meanPtAvg, 2); // Mean of the scalar sum of track pT in each region InitializeProfiles(_h_meanPtSum, 3); // Distribution of Nch, in bins of leading track-jet pT InitializeHistograms(_h_Nch, 4); // Distribution of average track-jet pT, in bins of leading track-jet pT InitializeHistograms(_h_PtAvg, 5); // Distribution of sum of track-jet pT, in bins of leading track-jet pT InitializeHistograms(_h_PtSum, 6); for (int i=0; i<5; ++i) { _nEvents[i] = 0.0; } } void InitializeProfiles(AIDA::IProfile1D* plots[5][2], int distribution) { for (int i=0; i<5; ++i) { for (int j=0; j<2; ++j) { plots[i][j] = bookProfile1D(distribution, i+1, j+1); } } } void InitializeHistograms(BinnedHistogram plots[5][2], int distribution) { vector bin_edges = binEdges(1, 1, 1); for (int i=0; i<5; ++i) { for (int y=0; y<2; ++y) { for (unsigned int j=0; j all_jets; Jets jets_02 = applyProjection(event, "JETS_02").jetsByPt(4.0*GeV, MAXDOUBLE, -1.5, 1.5, PSEUDORAPIDITY); all_jets.push_back(&jets_02); Jets jets_04 = applyProjection(event, "JETS_04").jetsByPt(4.0*GeV, MAXDOUBLE, -1.5, 1.5, PSEUDORAPIDITY); all_jets.push_back(&jets_04); Jets jets_06 = applyProjection(event, "JETS_06").jetsByPt(4.0*GeV, MAXDOUBLE, -1.5, 1.5, PSEUDORAPIDITY); all_jets.push_back(&jets_06); Jets jets_08 = applyProjection(event, "JETS_08").jetsByPt(4.0*GeV, MAXDOUBLE, -1.5, 1.5, PSEUDORAPIDITY); all_jets.push_back(&jets_08); Jets jets_10 = applyProjection(event, "JETS_10").jetsByPt(4.0*GeV, MAXDOUBLE, -1.5, 1.5, PSEUDORAPIDITY); all_jets.push_back(&jets_10); // Count the number of tracks in the away and transverse regions, for each set of jets double n_ch[5][2] = { {0,0}, {0,0}, {0,0}, {0,0}, {0,0} }; // Also add up the sum pT double sumpt[5][2] = { {0,0}, {0,0}, {0,0}, {0,0}, {0,0} }; // ptmean = sumpt / n_ch double ptavg[5][2] = { {0,0}, {0,0}, {0,0}, {0,0}, {0,0} }; // lead jet pT defines which bin we want to fill double lead_jet_pts[5] = {0.0}; // Loop over each of the jet radii: for (int i=0; i<5; ++i) { if (all_jets[i]->size() < 1) continue; // Find the lead jet pT lead_jet_pts[i] = all_jets[i]->at(0).momentum().pT(); // Loop over each of the charged particles const ParticleVector& tracks = applyProjection(event, "TRACK_INPUT").particlesByPt(); foreach(const Particle& t, tracks) { // Get the delta-phi between the track and the leading jet double dphi = deltaPhi(all_jets[i]->at(0), t); // Find out which region this puts it in. // 0 = away region, 1 = transverse region, 2 = toward region int region = region_index(dphi); // If the track is in the toward region, ignore it. if (region == 2) continue; // Otherwise, increment the relevant counters ++n_ch[i][region]; sumpt[i][region] += t.momentum().pT(); } // Calculate the pT_avg for the away and transverse regions. // (And make sure we don't try to divide by zero.) ptavg[i][0] = (n_ch[i][0] == 0 ? 0.0 : sumpt[i][0] / n_ch[i][0]); ptavg[i][1] = (n_ch[i][1] == 0 ? 0.0 : sumpt[i][1] / n_ch[i][1]); _nEvents[i] += weight; } FillProfiles(_h_meanNch, n_ch, lead_jet_pts, weight, 1.0 / (2*PI)); FillProfiles(_h_meanPtAvg, ptavg, lead_jet_pts, weight, 1.0); FillProfiles(_h_meanPtSum, sumpt, lead_jet_pts, weight, 1.0 / (2*PI)); FillHistograms(_h_Nch, n_ch, lead_jet_pts, weight); FillHistograms(_h_PtAvg, ptavg, lead_jet_pts, weight); FillHistograms(_h_PtSum, sumpt, lead_jet_pts, weight); } void FillProfiles(AIDA::IProfile1D* plots[5][2], double var[5][2], double lead_pt[5], double weight, double scale) { for (int i=0; i<5; ++i) { double pt = lead_pt[i]; for (int j=0; j<2; ++j) { double v = var[i][j]; plots[i][j]->fill(pt, v*scale, weight); } } } void FillHistograms(BinnedHistogram plots[5][2], double var[5][2], double lead_pt[5], double weight) { for (int i=0; i<5; ++i) { double pt = lead_pt[i]; for (int j=0; j<2; ++j) { double v = var[i][j]; plots[i][j].fill(pt, v, weight); } } } inline int region_index(double dphi) { assert(inRange(dphi, 0.0, PI, CLOSED, CLOSED)); if (dphi < PI/3.0) return 2; if (dphi < 2*PI/3.0) return 1; return 0; } /// Normalise histograms etc., after the run void finalize() { FinalizeHistograms(_h_Nch); FinalizeHistograms(_h_PtAvg); FinalizeHistograms(_h_PtSum); } void FinalizeHistograms(BinnedHistogram plots[5][2]) { for (int i=0; i<5; ++i) { for (int j=0; j<2; ++j) { vector histos = plots[i][j].getHistograms(); foreach(AIDA::IHistogram1D* h, histos) { scale(h, 1.0/_nEvents[i]); } } } } //@} private: // Data members like post-cuts event weight counters go here double _nEvents[5]; private: AIDA::IProfile1D* _h_meanNch[5][2]; AIDA::IProfile1D* _h_meanPtAvg[5][2]; AIDA::IProfile1D* _h_meanPtSum[5][2]; BinnedHistogram _h_Nch[5][2]; BinnedHistogram _h_PtAvg[5][2]; BinnedHistogram _h_PtSum[5][2]; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I1125575); } rivet-1.8.3/src/Analyses/CMS_2010_S8547297.cc0000644000175000017500000000563412116077757016112 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { class CMS_2010_S8547297 : public Analysis { public: CMS_2010_S8547297() : Analysis("CMS_2010_S8547297") {} void init() { ChargedFinalState cfs(-2.5, 2.5, 0.0*GeV); addProjection(cfs, "CFS"); if (fuzzyEquals(sqrtS()/GeV, 900)) { for (int d=1; d<=3; d++) { for (int y=1; y<=4; y++) { _h_dNch_dpT.push_back(bookHistogram1D(d, 1, y)); } } _h_dNch_dpT_all = bookHistogram1D(7, 1, 1); _h_dNch_dEta = bookHistogram1D(8, 1, 1); } else if (fuzzyEquals(sqrtS()/GeV, 2360)) { for (int d=4; d<=6; d++) { for (int y=1; y<=4; y++) { _h_dNch_dpT.push_back(bookHistogram1D(d, 1, y)); } } _h_dNch_dpT_all = bookHistogram1D(7, 1, 2); _h_dNch_dEta = bookHistogram1D(8, 1, 2); } } void analyze(const Event& event) { const double weight = event.weight(); //charged particles const ChargedFinalState& charged = applyProjection(event, "CFS"); foreach (const Particle& p, charged.particles()) { //selecting only charged hadrons if (! PID::isHadron(p.pdgId())) continue; const double pT = p.momentum().pT(); const double eta = p.momentum().eta(); // The data is actually a duplicated folded distribution. This should mimic it. _h_dNch_dEta->fill(eta, 0.5*weight); _h_dNch_dEta->fill(-eta, 0.5*weight); if (fabs(eta) < 2.4 && pT > 0.1*GeV) { if (pT < 4.0*GeV) { _h_dNch_dpT_all->fill(pT/GeV, weight/(pT/GeV)); if (pT < 2.0*GeV) { int ietabin = int(fabs(eta)/0.2); _h_dNch_dpT[ietabin]->fill(pT/GeV, weight); } } } } } void finalize() { const double normfac = 1.0/sumOfWeights(); // Normalizing to unit eta is automatic // The pT distributions in bins of eta must be normalized to unit eta. This is a factor of 2 // for the |eta| times 0.2 (eta range). // The pT distributions over all eta are normalized to unit eta (2.0*2.4) and by 1/2*pi*pT. // The 1/pT part is taken care of in the filling. The 1/2pi is taken care of here. const double normpT = normfac/(2.0*0.2); const double normpTall = normfac/(2.0*M_PI*2.0*2.4); for (size_t ietabin=0; ietabin < _h_dNch_dpT.size(); ietabin++){ scale(_h_dNch_dpT[ietabin], normpT); } scale(_h_dNch_dpT_all, normpTall); scale(_h_dNch_dEta, normfac); } private: std::vector _h_dNch_dpT; AIDA::IHistogram1D* _h_dNch_dpT_all; AIDA::IHistogram1D* _h_dNch_dEta; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2010_S8547297); } rivet-1.8.3/src/Analyses/CDF_2005_S6080774.cc0000644000175000017500000000555412116077757016057 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" namespace Rivet { /// @brief CDF diff cross-sections for prompt di-photon production class CDF_2005_S6080774 : public Analysis { public: /// Constructor CDF_2005_S6080774() : Analysis("CDF_2005_S6080774") { } /// @name Analysis methods //@{ void init() { FinalState fs; addProjection(fs, "FS"); IdentifiedFinalState ifs(-0.9, 0.9, 13.0*GeV); ifs.acceptId(PHOTON); addProjection(ifs, "IFS"); for (size_t yAxisId=1; yAxisId<5; ++yAxisId) { _h_m_PP.push_back(bookHistogram1D(1, 1, yAxisId)); _h_pT_PP.push_back(bookHistogram1D(2, 1, yAxisId)); _h_dphi_PP.push_back(bookHistogram1D(3, 1, yAxisId)); } } void analyze(const Event& event) { const double weight = event.weight(); ParticleVector photons = applyProjection(event, "IFS").particlesByPt(); if (photons.size() < 2 || (photons[0].momentum().pT() < 14.0*GeV)) { vetoEvent; } // Isolate photons with ET_sum in cone ParticleVector isolated_photons; ParticleVector fs = applyProjection(event, "FS").particles(); foreach (const Particle& photon, photons) { FourMomentum mom_in_cone; double eta_P = photon.momentum().eta(); double phi_P = photon.momentum().phi(); foreach (const Particle& p, fs) { if (deltaR(eta_P, phi_P, p.momentum().eta(), p.momentum().phi()) < 0.4) { mom_in_cone += p.momentum(); } } if (mom_in_cone.Et()-photon.momentum().Et() < 1.0*GeV) { isolated_photons.push_back(photon); } } if (isolated_photons.size() != 2) { vetoEvent; } FourMomentum mom_PP = isolated_photons[0].momentum() + isolated_photons[1].momentum(); for (size_t i=0; i<4; ++i) { _h_m_PP[i]->fill(mom_PP.mass(), weight); _h_pT_PP[i]->fill(mom_PP.pT(), weight); _h_dphi_PP[i]->fill(mapAngle0ToPi(isolated_photons[0].momentum().phi()- isolated_photons[1].momentum().phi())/M_PI, weight); } } void finalize() { for (size_t i=0; i<4; ++i) { scale(_h_m_PP[i], crossSection()/sumOfWeights()); scale(_h_pT_PP[i], crossSection()/sumOfWeights()); scale(_h_dphi_PP[i], crossSection()/M_PI/sumOfWeights()); } } //@} private: /// @name Histograms //@{ std::vector _h_m_PP; std::vector _h_pT_PP; std::vector _h_dphi_PP; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2005_S6080774); } rivet-1.8.3/src/Analyses/ATLAS_2012_I946427.cc0000644000175000017500000000744512116077757016234 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { /// @author Peter Richardson class ATLAS_2012_I946427 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_I946427() : Analysis("ATLAS_2012_I946427") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // photons IdentifiedFinalState photonfs(-1.81, 1.81, 25.0*GeV); photonfs.acceptId(PHOTON); addProjection(photonfs, "Photon"); // FinalState fs; addProjection(fs, "FS"); // Used for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); // Book histograms _count_SR = bookHistogram1D("count_SR", 1, 0., 1.); _hist_ET_photon = bookHistogram1D("hist_ET_photon", 48 , 20., 500.); _hist_met = bookHistogram1D("hist_met" , 100, 0., 500.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // require at least 2 photons in final state ParticleVector photons = applyProjection(event, "Photon").particlesByPt(); if (photons.size() < 2) { vetoEvent; } // Loop over photons and fill vector of isolated ones ParticleVector fs = applyProjection(event, "FS").particles(); ParticleVector isolated_photons; foreach (const Particle& photon, photons) { // remove photons in crack double eta_P = photon.momentum().eta(); if (fabs(eta_P)>=1.37 && fabs(eta_P)<1.52) continue; double phi_P = photon.momentum().phi(); FourMomentum mom_in_EtCone = -photon.momentum(); foreach (const Particle& p, fs) { // check if it's in the cone of .2 if (deltaR(eta_P, phi_P, p.momentum().eta(), p.momentum().phi()) >= 0.2) continue; mom_in_EtCone += p.momentum(); } // apply isolation if(mom_in_EtCone.Et()>5.) continue; // add photon to list of isolated ones isolated_photons.push_back(photon); } // need two isolated photons if(isolated_photons.size() < 2 ) { vetoEvent; } // pTmiss ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); _hist_ET_photon->fill(isolated_photons[0].momentum().Et(),weight); _hist_met ->fill(eTmiss ,weight); if(eTmiss>125.) _count_SR->fill(0.5,weight); } void finalize() { double norm = crossSection()/femtobarn*1.07/sumOfWeights(); // these are number of events at 1.07fb^-1 per 10 GeV scale( _hist_ET_photon, 10. * norm ); // these are number of events at 1.07fb^-1 per 5 GeV scale( _hist_met, 5. * norm ); // these are number of events at 1.07fb^-1 scale(_count_SR,norm); } //@} private: AIDA::IHistogram1D* _count_SR; AIDA::IHistogram1D* _hist_ET_photon; AIDA::IHistogram1D* _hist_met; }; // This global object acts as a hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I946427); } rivet-1.8.3/src/Analyses/MC_WWINC.cc0000644000175000017500000001405312116077757015213 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Projections/WFinder.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief MC validation analysis for W^+[enu]W^-[munu] events class MC_WWINC : public Analysis { public: /// Default constructor MC_WWINC() : Analysis("MC_WWINC") { } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; WFinder wenufinder(fs, -3.5, 3.5, 25.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2); addProjection(wenufinder, "WenuFinder"); VetoedFinalState wmnuinput; wmnuinput.addVetoOnThisFinalState(wenufinder); WFinder wmnufinder(wmnuinput, -3.5, 3.5, 25.0*GeV, MUON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2); addProjection(wmnufinder, "WmnuFinder"); // properties of the pair momentum _h_WW_pT = bookHistogram1D("WW_pT", logBinEdges(100, 1.0, 0.5*sqrtS())); _h_WW_pT_peak = bookHistogram1D("WW_pT_peak", 25, 0.0, 25.0); _h_WW_eta = bookHistogram1D("WW_eta", 40, -7.0, 7.0); _h_WW_phi = bookHistogram1D("WW_phi", 25, 0.0, TWOPI); _h_WW_m = bookHistogram1D("WW_m", logBinEdges(100, 150.0, 180.0+0.25*sqrtS())); // correlations between the WW _h_WW_dphi = bookHistogram1D("WW_dphi", 25, 0.0, PI); /// @todo non-linear? _h_WW_deta = bookHistogram1D("WW_deta", 25, -7.0, 7.0); _h_WW_dR = bookHistogram1D("WW_dR", 25, 0.5, 7.0); _h_WW_dpT = bookHistogram1D("WW_dpT", logBinEdges(100, 1.0, 0.5*sqrtS())); _h_WW_costheta_planes = bookHistogram1D("WW_costheta_planes", 25, -1.0, 1.0); /// @todo fuer WW: missing ET // properties of the W bosons _h_W_pT = bookHistogram1D("W_pT", logBinEdges(100, 10.0, 0.25*sqrtS())); _h_W_eta = bookHistogram1D("W_eta", 70, -7.0, 7.0); // properties of the leptons _h_Wl_pT = bookHistogram1D("Wl_pT", logBinEdges(100, 30.0, 0.1 *sqrtS())); _h_Wl_eta = bookHistogram1D("Wl_eta", 40, -3.5, 3.5); // correlations between the opposite charge leptons _h_WeWm_dphi = bookHistogram1D("WeWm_dphi", 25, 0.0, PI); _h_WeWm_deta = bookHistogram1D("WeWm_deta", 25, -5.0, 5.0); _h_WeWm_dR = bookHistogram1D("WeWm_dR", 25, 0.5, 5.0); _h_WeWm_m = bookHistogram1D("WeWm_m", 100, 0.0, 300.0); } /// Do the analysis void analyze(const Event & e) { const double weight = e.weight(); const WFinder& wenufinder = applyProjection(e, "WenuFinder"); if (wenufinder.bosons().size()!=1) { vetoEvent; } const WFinder& wmnufinder = applyProjection(e, "WmnuFinder"); if (wmnufinder.bosons().size()!=1) { vetoEvent; } FourMomentum wenu(wenufinder.bosons()[0].momentum()); FourMomentum wmnu(wmnufinder.bosons()[0].momentum()); FourMomentum ww(wenu+wmnu); // find leptons FourMomentum ep=wenufinder.constituentLeptons()[0].momentum(); FourMomentum enu=wenufinder.constituentNeutrinos()[0].momentum(); FourMomentum mm=wmnufinder.constituentLeptons()[0].momentum(); FourMomentum mnu=wmnufinder.constituentNeutrinos()[0].momentum(); _h_WW_pT->fill(ww.pT(),weight); _h_WW_pT_peak->fill(ww.pT(),weight); _h_WW_eta->fill(ww.eta(),weight); _h_WW_phi->fill(ww.azimuthalAngle(),weight); double mww2=ww.mass2(); if (mww2>0.0) _h_WW_m->fill(sqrt(mww2), weight); _h_WW_dphi->fill(mapAngle0ToPi(wenu.phi()-wmnu.phi()), weight); _h_WW_deta->fill(wenu.eta()-wmnu.eta(), weight); _h_WW_dR->fill(deltaR(wenu,wmnu), weight); _h_WW_dpT->fill(fabs(wenu.pT()-wmnu.pT()), weight); Vector3 crossWenu = ep.vector3().cross(enu.vector3()); Vector3 crossWmnu = mm.vector3().cross(mnu.vector3()); double costheta = crossWenu.dot(crossWmnu)/crossWenu.mod()/crossWmnu.mod(); _h_WW_costheta_planes->fill(costheta, weight); _h_W_pT->fill(wenu.pT(),weight); _h_W_pT->fill(wmnu.pT(),weight); _h_W_eta->fill(wenu.eta(),weight); _h_W_eta->fill(wmnu.eta(),weight); _h_Wl_pT->fill(ep.pT(), weight); _h_Wl_pT->fill(mm.pT(), weight); _h_Wl_eta->fill(ep.eta(), weight); _h_Wl_eta->fill(mm.eta(), weight); _h_WeWm_dphi->fill(mapAngle0ToPi(ep.phi()-mm.phi()), weight); _h_WeWm_deta->fill(ep.eta()-mm.eta(), weight); _h_WeWm_dR->fill(deltaR(ep,mm), weight); double m2=FourMomentum(ep+mm).mass2(); if (m2 < 0) m2 = 0.0; _h_WeWm_m->fill(sqrt(m2), weight); } /// Finalize void finalize() { double norm=crossSection()/sumOfWeights(); scale(_h_WW_pT, norm); scale(_h_WW_pT_peak, norm); scale(_h_WW_eta, norm); scale(_h_WW_phi, norm); scale(_h_WW_m, norm); scale(_h_WW_dphi, norm); scale(_h_WW_deta, norm); scale(_h_WW_dR, norm); scale(_h_WW_dpT, norm); scale(_h_WW_costheta_planes, norm); scale(_h_W_pT, norm); scale(_h_W_eta, norm); scale(_h_Wl_pT, norm); scale(_h_Wl_eta, norm); scale(_h_WeWm_dphi, norm); scale(_h_WeWm_deta, norm); scale(_h_WeWm_dR, norm); scale(_h_WeWm_m, norm); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_WW_pT; AIDA::IHistogram1D * _h_WW_pT_peak; AIDA::IHistogram1D * _h_WW_eta; AIDA::IHistogram1D * _h_WW_phi; AIDA::IHistogram1D * _h_WW_m; AIDA::IHistogram1D * _h_WW_dphi; AIDA::IHistogram1D * _h_WW_deta; AIDA::IHistogram1D * _h_WW_dR; AIDA::IHistogram1D * _h_WW_dpT; AIDA::IHistogram1D * _h_WW_costheta_planes; AIDA::IHistogram1D * _h_W_pT; AIDA::IHistogram1D * _h_W_eta; AIDA::IHistogram1D * _h_Wl_pT; AIDA::IHistogram1D * _h_Wl_eta; AIDA::IHistogram1D * _h_WeWm_dphi; AIDA::IHistogram1D * _h_WeWm_deta; AIDA::IHistogram1D * _h_WeWm_dR; AIDA::IHistogram1D * _h_WeWm_m; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_WWINC); } rivet-1.8.3/src/Analyses/ALEPH_2004_S5765862.cc0000644000175000017500000003101312116077757016307 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/Thrust.hh" #include "Rivet/Projections/Sphericity.hh" #include "Rivet/Projections/ParisiTensor.hh" #include "Rivet/Projections/Hemispheres.hh" #include "Rivet/Projections/Beam.hh" namespace Rivet { /// @brief ALEPH jet rates and event shapes at LEP 1 and 2 class ALEPH_2004_S5765862 : public Analysis { public: ALEPH_2004_S5765862() : Analysis("ALEPH_2004_S5765862") , _initialisedJets(false), _initialisedSpectra(false), _weightedTotalChargedPartNum(0) { } public: void init() { _initialisedJets = true; _initialisedSpectra = true; // TODO: According to the paper they seem to discard neutral particles // between 1 and 2 GeV. That correction is included in the systematic // uncertainties and overly complicated to program, so we ignore it. const FinalState fs; addProjection(fs, "FS"); FastJets durhamjets(fs, FastJets::DURHAM, 0.7); durhamjets.useInvisibles(true); addProjection(durhamjets, "DurhamJets"); const Thrust thrust(fs); addProjection(thrust, "Thrust"); addProjection(Sphericity(fs), "Sphericity"); addProjection(ParisiTensor(fs), "Parisi"); addProjection(Hemispheres(thrust), "Hemispheres"); const ChargedFinalState cfs; addProjection(Beam(), "Beams"); addProjection(cfs, "CFS"); // Histos // offset for the event shapes and jets int offset = 0; switch (int(sqrtS()/GeV + 0.5)) { case 91: offset = 0; break; case 133: offset = 1; break; case 161: offset = 2; break; case 172: offset = 3; break; case 183: offset = 4; break; case 189: offset = 5; break; case 200: offset = 6; break; case 206: offset = 7; break; default: _initialisedJets = false; } // event shapes if(_initialisedJets) { _h_thrust = bookHistogram1D(offset+54, 1, 1); _h_heavyjetmass = bookHistogram1D(offset+62, 1, 1); _h_totaljetbroadening = bookHistogram1D(offset+70, 1, 1); _h_widejetbroadening = bookHistogram1D(offset+78, 1, 1); _h_cparameter = bookHistogram1D(offset+86, 1, 1); _h_thrustmajor = bookHistogram1D(offset+94, 1, 1); _h_thrustminor = bookHistogram1D(offset+102, 1, 1); _h_jetmassdifference = bookHistogram1D(offset+110, 1, 1); _h_aplanarity = bookHistogram1D(offset+118, 1, 1); _h_planarity = offset==0 ? NULL : bookHistogram1D(offset+125, 1, 1); _h_oblateness = bookHistogram1D(offset+133, 1, 1); _h_sphericity = bookHistogram1D(offset+141, 1, 1); // Durham n->m jet resolutions _h_y_Durham[0] = bookHistogram1D(offset+149, 1, 1); // y12 d149 ... d156 _h_y_Durham[1] = bookHistogram1D(offset+157, 1, 1); // y23 d157 ... d164 if (offset<6) { // there is no y34, y45 and y56 for 200 gev _h_y_Durham[2] = bookHistogram1D(offset+165, 1, 1); // y34 d165 ... d172, but not 171 _h_y_Durham[3] = bookHistogram1D(offset+173, 1, 1); // y45 d173 ... d179 _h_y_Durham[4] = bookHistogram1D(offset+180, 1, 1); // y56 d180 ... d186 } else if (offset==6) { _h_y_Durham[2] = NULL; _h_y_Durham[3] = NULL; _h_y_Durham[4] = NULL; } else if (offset==7) { _h_y_Durham[2] = bookHistogram1D(172, 1, 1); _h_y_Durham[3] = bookHistogram1D(179, 1, 1); _h_y_Durham[4] = bookHistogram1D(186, 1, 1); } // Durham n-jet fractions _h_R_Durham[0] = bookDataPointSet(offset+187, 1, 1); // R1 d187 ... d194 _h_R_Durham[1] = bookDataPointSet(offset+195, 1, 1); // R2 d195 ... d202 _h_R_Durham[2] = bookDataPointSet(offset+203, 1, 1); // R3 d203 ... d210 _h_R_Durham[3] = bookDataPointSet(offset+211, 1, 1); // R4 d211 ... d218 _h_R_Durham[4] = bookDataPointSet(offset+219, 1, 1); // R5 d219 ... d226 _h_R_Durham[5] = bookDataPointSet(offset+227, 1, 1); // R>=6 d227 ... d234 } // offset for the charged particle distributions offset = 0; switch (int(sqrtS()/GeV + 0.5)) { case 133: offset = 0; break; case 161: offset = 1; break; case 172: offset = 2; break; case 183: offset = 3; break; case 189: offset = 4; break; case 196: offset = 5; break; case 200: offset = 6; break; case 206: offset = 7; break; default: _initialisedSpectra=false; } if (_initialisedSpectra) { _h_xp = bookHistogram1D( 2+offset, 1, 1); _h_xi = bookHistogram1D(11+offset, 1, 1); _h_xe = bookHistogram1D(19+offset, 1, 1); _h_pTin = bookHistogram1D(27+offset, 1, 1); _h_pTout = offset != 7 ? NULL : bookHistogram1D(35, 1, 1); _h_rapidityT = bookHistogram1D(36+offset, 1, 1); _h_rapidityS = bookHistogram1D(44+offset, 1, 1); } if (!_initialisedSpectra && !_initialisedJets) { MSG_WARNING("CoM energy of events sqrt(s) = " << sqrtS()/GeV << " doesn't match any available analysis energy ."); } } void analyze(const Event& e) { const double weight = e.weight(); const Thrust& thrust = applyProjection(e, "Thrust"); const Sphericity& sphericity = applyProjection(e, "Sphericity"); if(_initialisedJets) { bool LEP1 = fuzzyEquals(sqrtS(),91.2*GeV,0.01); // event shapes double thr = LEP1 ? thrust.thrust() : 1.0 - thrust.thrust(); _h_thrust->fill(thr,weight); _h_thrustmajor->fill(thrust.thrustMajor(),weight); if(LEP1) _h_thrustminor->fill(log(thrust.thrustMinor()),weight); else _h_thrustminor->fill(thrust.thrustMinor(),weight); _h_oblateness->fill(thrust.oblateness(),weight); const Hemispheres& hemi = applyProjection(e, "Hemispheres"); _h_heavyjetmass->fill(hemi.scaledM2high(),weight); _h_jetmassdifference->fill(hemi.scaledM2diff(),weight); _h_totaljetbroadening->fill(hemi.Bsum(),weight); _h_widejetbroadening->fill(hemi.Bmax(),weight); const ParisiTensor& parisi = applyProjection(e, "Parisi"); _h_cparameter->fill(parisi.C(),weight); _h_aplanarity->fill(sphericity.aplanarity(),weight); if(_h_planarity) _h_planarity->fill(sphericity.planarity(),weight); _h_sphericity->fill(sphericity.sphericity(),weight); // Jet rates const FastJets& durjet = applyProjection(e, "DurhamJets"); double log10e = log10(exp(1.)); if (durjet.clusterSeq()) { double logynm1=0.; double logyn; for (size_t i=0; i<5; ++i) { logyn = -log(durjet.clusterSeq()->exclusive_ymerge_max(i+1)); if (_h_y_Durham[i]) { _h_y_Durham[i]->fill(logyn, weight); } if(!LEP1) logyn *= log10e; for (int j = 0; j < _h_R_Durham[i]->size(); ++j) { IDataPoint* dp = _h_R_Durham[i]->point(j); double val = -dp->coordinate(0)->value()+dp->coordinate(0)->errorMinus(); if(val<=logynm1) break; if(valcoordinate(1)->setValue(dp->coordinate(1)->value()+weight); } } logynm1 = logyn; } for (int j = 0; j < _h_R_Durham[5]->size(); ++j) { IDataPoint* dp = _h_R_Durham[5]->point(j); double val = -dp->coordinate(0)->value()+dp->coordinate(0)->errorMinus(); if(val<=logynm1) break; dp->coordinate(1)->setValue(dp->coordinate(1)->value()+weight); } } if( !_initialisedSpectra) { const ChargedFinalState& cfs = applyProjection(e, "CFS"); const size_t numParticles = cfs.particles().size(); _weightedTotalChargedPartNum += numParticles * weight; } } // charged particle distributions if(_initialisedSpectra) { const ChargedFinalState& cfs = applyProjection(e, "CFS"); const size_t numParticles = cfs.particles().size(); _weightedTotalChargedPartNum += numParticles * weight; const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; foreach (const Particle& p, cfs.particles()) { const double xp = p.momentum().vector3().mod()/meanBeamMom; _h_xp->fill(xp , weight); const double logxp = -std::log(xp); _h_xi->fill(logxp, weight); const double xe = p.momentum().E()/meanBeamMom; _h_xe->fill(xe , weight); const double pTinT = dot(p.momentum().vector3(), thrust.thrustMajorAxis()); const double pToutT = dot(p.momentum().vector3(), thrust.thrustMinorAxis()); _h_pTin->fill(fabs(pTinT/GeV), weight); if(_h_pTout) _h_pTout->fill(fabs(pToutT/GeV), weight); const double momT = dot(thrust.thrustAxis() ,p.momentum().vector3()); const double rapidityT = 0.5 * std::log((p.momentum().E() + momT) / (p.momentum().E() - momT)); _h_rapidityT->fill(fabs(rapidityT), weight); const double momS = dot(sphericity.sphericityAxis(),p.momentum().vector3()); const double rapidityS = 0.5 * std::log((p.momentum().E() + momS) / (p.momentum().E() - momS)); _h_rapidityS->fill(fabs(rapidityS), weight); } } } void finalize() { if(!_initialisedJets && !_initialisedSpectra) return; if (_initialisedJets) { normalize(_h_thrust); normalize(_h_heavyjetmass); normalize(_h_totaljetbroadening); normalize(_h_widejetbroadening); normalize(_h_cparameter); normalize(_h_thrustmajor); normalize(_h_thrustminor); normalize(_h_jetmassdifference); normalize(_h_aplanarity); if(_h_planarity) normalize(_h_planarity); normalize(_h_oblateness); normalize(_h_sphericity); for (size_t N=1; N<7; ++N) { for (int i = 0; i < _h_R_Durham[N-1]->size(); ++i) { _h_R_Durham[N-1]->point(i)->coordinate(1)-> setValue(_h_R_Durham[N-1]->point(i)->coordinate(1)->value()/sumOfWeights()); } } for (size_t n = 0; n < 5; ++n) { if (_h_y_Durham[n]) { scale(_h_y_Durham[n], 1.0/sumOfWeights()); } } } const double avgNumParts = _weightedTotalChargedPartNum / sumOfWeights(); AIDA::IDataPointSet * mult = bookDataPointSet(1, 1, 1); for (int i = 0; i < mult->size(); ++i) { if (fuzzyEquals(sqrtS(), mult->point(i)->coordinate(0)->value(), 0.01)) { mult->point(i)->coordinate(1)->setValue(avgNumParts); } } if (_initialisedSpectra) { normalize(_h_xp, avgNumParts); normalize(_h_xi, avgNumParts); normalize(_h_xe, avgNumParts); normalize(_h_pTin , avgNumParts); if (_h_pTout) normalize(_h_pTout, avgNumParts); normalize(_h_rapidityT, avgNumParts); normalize(_h_rapidityS, avgNumParts); } } private: bool _initialisedJets; bool _initialisedSpectra; AIDA::IHistogram1D *_h_xp; AIDA::IHistogram1D *_h_xi; AIDA::IHistogram1D *_h_xe; AIDA::IHistogram1D *_h_pTin; AIDA::IHistogram1D *_h_pTout; AIDA::IHistogram1D *_h_rapidityT; AIDA::IHistogram1D *_h_rapidityS; AIDA::IHistogram1D *_h_thrust; AIDA::IHistogram1D *_h_heavyjetmass; AIDA::IHistogram1D *_h_totaljetbroadening; AIDA::IHistogram1D *_h_widejetbroadening; AIDA::IHistogram1D *_h_cparameter; AIDA::IHistogram1D *_h_thrustmajor; AIDA::IHistogram1D *_h_thrustminor; AIDA::IHistogram1D *_h_jetmassdifference; AIDA::IHistogram1D *_h_aplanarity; AIDA::IHistogram1D *_h_planarity; AIDA::IHistogram1D *_h_oblateness; AIDA::IHistogram1D *_h_sphericity; AIDA::IDataPointSet *_h_R_Durham[6]; AIDA::IHistogram1D *_h_y_Durham[5]; double _weightedTotalChargedPartNum; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ALEPH_2004_S5765862); } rivet-1.8.3/src/Analyses/ALICE_2011_S8909580.cc0000644000175000017500000000672212116077757016302 0ustar sunsun#include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { class ALICE_2011_S8909580 : public Analysis { public: ALICE_2011_S8909580() : Analysis("ALICE_2011_S8909580") {} public: void init() { const UnstableFinalState ufs(-15, 15); addProjection(ufs, "UFS"); _histPtK0s = bookHistogram1D("d01-x01-y01"); _histPtLambda = bookHistogram1D("d02-x01-y01"); _histPtAntiLambda = bookHistogram1D("d03-x01-y01"); _histPtXi = bookHistogram1D("d04-x01-y01"); _histPtPhi = bookHistogram1D("d05-x01-y01"); _temp_h_Lambdas = bookHistogram1D("temp_h_Lambdas", binEdges("d06-x01-y01")); _temp_h_Kzeros = bookHistogram1D("temp_h_Kzeros", binEdges("d06-x01-y01")); } void analyze(const Event& event) { const double weight = event.weight(); const UnstableFinalState& ufs = applyProjection(event, "UFS"); foreach (const Particle& p, ufs.particles()) { const double absrap = fabs(p.momentum().rapidity()); const double pT = p.momentum().pT()/GeV; if (absrap<0.8) { switch(p.pdgId()) { case 3312: case -3312: if ( !( p.hasAncestor(3334) || p.hasAncestor(-3334) ) ) { _histPtXi->fill(pT, weight); } break; if (absrap<0.75) { case 310: _histPtK0s->fill(pT, weight); _temp_h_Kzeros->fill(pT, 2*weight); break; case 3122: if ( !( p.hasAncestor(3322) || p.hasAncestor(-3322) || p.hasAncestor(3312) || p.hasAncestor(-3312) || p.hasAncestor(3334) || p.hasAncestor(-3334) ) ) { _histPtLambda->fill(pT, weight); _temp_h_Lambdas->fill(pT, weight); } break; case -3122: if ( !( p.hasAncestor(3322) || p.hasAncestor(-3322) || p.hasAncestor(3312) || p.hasAncestor(-3312) || p.hasAncestor(3334) || p.hasAncestor(-3334) ) ) { _histPtAntiLambda->fill(pT, weight); _temp_h_Lambdas->fill(pT, weight); } break; } if (absrap<0.6) { case 333: _histPtPhi->fill(pT, weight); break; } } } } } void finalize() { scale(_histPtK0s, 1./(1.5*sumOfWeights())); scale(_histPtLambda, 1./(1.5*sumOfWeights())); scale(_histPtAntiLambda, 1./(1.5*sumOfWeights())); scale(_histPtXi, 1./(1.6*sumOfWeights())); scale(_histPtPhi, 1./(1.2*sumOfWeights())); histogramFactory().divide(histoPath("d06-x01-y01"), *_temp_h_Lambdas, *_temp_h_Kzeros); histogramFactory().destroy(_temp_h_Lambdas); histogramFactory().destroy(_temp_h_Kzeros); } private: AIDA::IHistogram1D *_histPtK0s; AIDA::IHistogram1D *_histPtLambda; AIDA::IHistogram1D *_histPtAntiLambda; AIDA::IHistogram1D *_histPtXi; AIDA::IHistogram1D *_histPtPhi; AIDA::IHistogram1D *_temp_h_Lambdas; AIDA::IHistogram1D *_temp_h_Kzeros; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ALICE_2011_S8909580); } rivet-1.8.3/src/Analyses/STAR_2006_S6860818.cc0000644000175000017500000001645512116077757016244 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief STAR strange particle spectra in pp at 200 GeV class STAR_2006_S6860818 : public Analysis { public: /// Constructor STAR_2006_S6860818() : Analysis("STAR_2006_S6860818"), _sumWeightSelected(0.0) { for (size_t i = 0; i < 4; i++) { _nBaryon[i] = 0; _nAntiBaryon[i] = 0; _nWeightedBaryon[i] = 0.; _nWeightedAntiBaryon[i] = 0.; } } /// Book projections and histograms void init() { ChargedFinalState bbc1(-5.0,-3.5, 0.0*GeV); // beam-beam-counter trigger ChargedFinalState bbc2( 3.5, 5.0, 0.0*GeV); // beam-beam-counter trigger addProjection(bbc1, "BBC1"); addProjection(bbc2, "BBC2"); UnstableFinalState ufs(-2.5, 2.5, 0.0*GeV); addProjection(ufs, "UFS"); _h_pT_k0s = bookHistogram1D(1, 1, 1); _h_pT_kminus = bookHistogram1D(1, 2, 1); _h_pT_kplus = bookHistogram1D(1, 3, 1); _h_pT_lambda = bookHistogram1D(1, 4, 1); _h_pT_lambdabar = bookHistogram1D(1, 5, 1); _h_pT_ximinus = bookHistogram1D(1, 6, 1); _h_pT_xiplus = bookHistogram1D(1, 7, 1); //_h_pT_omega = bookHistogram1D(1, 8, 1); _h_antibaryon_baryon_ratio = bookDataPointSet(2, 1, 1); _h_pT_vs_mass = bookProfile1D(3, 1, 1); } /// Do the analysis void analyze(const Event& event) { const ChargedFinalState& bbc1 = applyProjection(event, "BBC1"); const ChargedFinalState& bbc2 = applyProjection(event, "BBC2"); if (bbc1.size()<1 || bbc2.size()<1) { MSG_DEBUG("Failed beam-beam-counter trigger"); vetoEvent; } const double weight = event.weight(); const UnstableFinalState& ufs = applyProjection(event, "UFS"); foreach (const Particle& p, ufs.particles()) { if (fabs(p.momentum().rapidity()) < 0.5) { const PdgId pid = p.pdgId(); const double pT = p.momentum().pT() / GeV; switch (abs(pid)) { case PIPLUS: if (pid < 0) _h_pT_vs_mass->fill(0.1396, pT, weight); break; case PROTON: if (pid < 0) _h_pT_vs_mass->fill(0.9383, pT, weight); if (pT > 0.4) { pid > 0 ? _nBaryon[0]++ : _nAntiBaryon[0]++; pid > 0 ? _nWeightedBaryon[0]+=weight : _nWeightedAntiBaryon[0]+=weight; } break; case K0S: if (pT > 0.2) { _h_pT_k0s->fill(pT, weight/pT); } _h_pT_vs_mass->fill(0.5056, pT, weight); break; case K0L: _h_pT_vs_mass->fill(0.5056, pT, weight); break; case 113: // rho0(770) _h_pT_vs_mass->fill(0.7755, pT, weight); break; case 313: // K0*(892) _h_pT_vs_mass->fill(0.8960, pT, weight); break; case 333: // phi(1020) _h_pT_vs_mass->fill(1.0190, pT, weight); break; case 3214: // Sigma(1385) _h_pT_vs_mass->fill(1.3840, pT, weight); break; case 3124: // Lambda(1520) _h_pT_vs_mass->fill(1.5200, pT, weight); break; case KPLUS: if (pid < 0) _h_pT_vs_mass->fill(0.4856, pT, weight); if (pT > 0.2) { pid > 0 ? _h_pT_kplus->fill(pT, weight/pT) : _h_pT_kminus->fill(pT, weight/pT); } break; case LAMBDA: pid > 0 ? _h_pT_vs_mass->fill(1.1050, pT, weight) : _h_pT_vs_mass->fill(1.1250, pT, weight); if (pT > 0.3) { pid > 0 ? _h_pT_lambda->fill(pT, weight/pT) : _h_pT_lambdabar->fill(pT, weight/pT); pid > 0 ? _nBaryon[1]++ : _nAntiBaryon[1]++; pid > 0 ? _nWeightedBaryon[1]+=weight : _nWeightedAntiBaryon[1]+=weight; } break; case XIMINUS: pid > 0 ? _h_pT_vs_mass->fill(1.3120, pT, weight) : _h_pT_vs_mass->fill(1.3320, pT, weight); if (pT > 0.5) { pid > 0 ? _h_pT_ximinus->fill(pT, weight/pT) : _h_pT_xiplus->fill(pT, weight/pT); pid > 0 ? _nBaryon[2]++ : _nAntiBaryon[2]++; pid > 0 ? _nWeightedBaryon[2]+=weight : _nWeightedAntiBaryon[2]+=weight; } break; case OMEGAMINUS: _h_pT_vs_mass->fill(1.6720, pT, weight); if (pT > 0.5) { //_h_pT_omega->fill(pT, weight/pT); pid > 0 ? _nBaryon[3]++ : _nAntiBaryon[3]++; pid > 0 ? _nWeightedBaryon[3]+=weight : _nWeightedAntiBaryon[3]+=weight; } break; } } } _sumWeightSelected += event.weight(); } /// Finalize void finalize() { std::vector xval; std::vector xerr; std::vector yval; std::vector yerr; for (size_t i=0 ; i<4 ; i++) { xval.push_back(i); xerr.push_back(0.5); if (_nWeightedBaryon[i]==0 || _nWeightedAntiBaryon[i]==0) { yval.push_back(0); yerr.push_back(0); } else { double y = _nWeightedAntiBaryon[i]/_nWeightedBaryon[i]; double dy = sqrt( 1./_nAntiBaryon[i] + 1./_nBaryon[i] ); yval.push_back(y); yerr.push_back(y*dy); } } _h_antibaryon_baryon_ratio->setCoordinate(0, xval, xerr); _h_antibaryon_baryon_ratio->setCoordinate(1, yval, yerr); AIDA::IHistogramFactory& hf = histogramFactory(); const string dir = histoDir(); hf.divide(dir + "/d02-x02-y01", *_h_pT_lambdabar, *_h_pT_lambda); hf.divide(dir + "/d02-x03-y01", *_h_pT_xiplus, *_h_pT_ximinus); scale(_h_pT_k0s, 1./(2*M_PI*_sumWeightSelected)); scale(_h_pT_kminus, 1./(2*M_PI*_sumWeightSelected)); scale(_h_pT_kplus, 1./(2*M_PI*_sumWeightSelected)); scale(_h_pT_lambda, 1./(2*M_PI*_sumWeightSelected)); scale(_h_pT_lambdabar, 1./(2*M_PI*_sumWeightSelected)); scale(_h_pT_ximinus, 1./(2*M_PI*_sumWeightSelected)); scale(_h_pT_xiplus, 1./(2*M_PI*_sumWeightSelected)); //scale(_h_pT_omega, 1./(2*M_PI*_sumWeightSelected)); MSG_DEBUG("sumOfWeights() = " << sumOfWeights()); MSG_DEBUG("_sumWeightSelected = " << _sumWeightSelected); } private: double _sumWeightSelected; int _nBaryon[4]; int _nAntiBaryon[4]; double _nWeightedBaryon[4]; double _nWeightedAntiBaryon[4]; AIDA::IHistogram1D * _h_pT_k0s; AIDA::IHistogram1D * _h_pT_kminus; AIDA::IHistogram1D * _h_pT_kplus; AIDA::IHistogram1D * _h_pT_lambda; AIDA::IHistogram1D * _h_pT_lambdabar; AIDA::IHistogram1D * _h_pT_ximinus; AIDA::IHistogram1D * _h_pT_xiplus; //AIDA::IHistogram1D * _h_pT_omega; AIDA::IDataPointSet* _h_antibaryon_baryon_ratio; AIDA::IProfile1D* _h_pT_vs_mass; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(STAR_2006_S6860818); } rivet-1.8.3/src/Analyses/CMS_2012_I1102908.cc0000644000175000017500000001226512116077757016053 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/RivetAIDA.hh" #include "LWH/HistogramFactory.h" #include "LWH/Histogram1D.h" // exclusive events are a subset of inclusive events // so we need special error estimation treatment void divide_set_by_subset_with_binomial_errors(AIDA::IDataPointSet* h, const AIDA::IHistogram1D & hist1, const AIDA::IHistogram1D & hist2); #include namespace Rivet { // CMS Measurement of inclusive and exclusive dijet production // ratio at large rapidity intervals class CMS_2012_I1102908 : public Analysis { public: CMS_2012_I1102908() : Analysis("CMS_2012_I1102908") {} // ======================================================== init void init() { FinalState fs; FastJets akt(fs, FastJets::ANTIKT, 0.5); addProjection(akt, "antikT"); // dijet ratio _h_dijet_ratio = bookDataPointSet(1,1,1); // MN dijet ratio _h_MN_dijet_ratio = bookDataPointSet(2,1,1); // exclusive dijets _h_DeltaY_exclusive = bookHistogram1D("DeltaY_exclusive", binEdges(1, 1, 1)); // inclusive dijets _h_DeltaY_inclusive = bookHistogram1D("DeltaY_inclusive", binEdges(1, 1, 1)); // Mueller-Navelet dijets _h_DeltaY_MN = bookHistogram1D("DeltaY_MN", binEdges(1, 1, 1)); } // ======================================================== analyze void analyze(const Event & event) { const double weight = event.weight(); // Jets with pT > 35.0, -4.7 < y < 4.7 JetAlg const &jet_alg = applyProjection(event, "antikT"); const Jets& jets = jet_alg.jets(35.0/GeV, Rivet::MAXDOUBLE, -4.7, 4.7, RAPIDITY); // veto event if number of jets less than 2 if(jets.size() < 2) return; // loop over jet pairs double deltaY_MN = 0.0; for(Jets::const_iterator jet1 = jets.begin(); jet1 != jets.end(); ++jet1) { for(Jets::const_iterator jet2 = jet1 + 1; jet2 != jets.end(); ++jet2) { const double y1 = jet1->momentum().rapidity(), y2 = jet2->momentum().rapidity(); const double deltaY = fabs(y1 - y2); // exclusive case: if(jets.size()==2) { _h_DeltaY_exclusive->fill(deltaY, weight); } // inclusive case: _h_DeltaY_inclusive->fill(deltaY, weight); // Mueller-Navelet: if(deltaY > deltaY_MN) { deltaY_MN = deltaY; } } } _h_DeltaY_MN->fill(deltaY_MN, weight); } // ======================================================== finalize void finalize() { // computing the ratio -- note that in YODA this can be replaced by a regular // divide with erroropt=BINOMIAL -- see comment below!!!!! divide_set_by_subset_with_binomial_errors(_h_dijet_ratio, *_h_DeltaY_inclusive, *_h_DeltaY_exclusive); divide_set_by_subset_with_binomial_errors(_h_MN_dijet_ratio, *_h_DeltaY_MN, *_h_DeltaY_exclusive); // removing unnecessary histograms histogramFactory().destroy(_h_DeltaY_inclusive); histogramFactory().destroy(_h_DeltaY_exclusive); histogramFactory().destroy(_h_DeltaY_MN); } private: /// @name Histograms //@{ AIDA::IHistogram1D* _h_DeltaY_inclusive; AIDA::IHistogram1D* _h_DeltaY_exclusive; AIDA::IHistogram1D* _h_DeltaY_MN; AIDA::IDataPointSet* _h_dijet_ratio; AIDA::IDataPointSet* _h_MN_dijet_ratio; //@} }; // This global object acts as a hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2012_I1102908); } ////////// @todo YODA: This can be deleted. Use erroropt=BINOMIAL in YODA divide() instead. But we need ////////// to be careful because this is "superset/subset" and not "subset/superset" as in the ////////// YODA implementation, so we need to use the inverse. // adapted from HistogramFactory::divide // in order to change treatment of errors void divide_set_by_subset_with_binomial_errors(AIDA::IDataPointSet* h, const AIDA::IHistogram1D & hist1, const AIDA::IHistogram1D & hist2) { using namespace AIDA; using namespace Rivet; using namespace LWH; const LWH::Histogram1D& h1 = dynamic_cast(hist1); const LWH::Histogram1D& h2 = dynamic_cast(hist2); for (int i = 0; i < h1.axis().bins(); ++i) { AIDA::IDataPoint* point = h->point(i); double yval(0), yerr(0); if ( h1.binHeight(i) == 0 || h2.binHeight(i) == 0 ) { /// @todo Bad way of handling div by zero! yval = 0.0; yerr = 0.0; } else { const double b1 = h2.binHeight(i); // subset const double b2 = h1.binHeight(i); // super-set const double w = b1/b2; double e1 = h2.binError(i); double e2 = h1.binError(i); // see http://root.cern.ch/root/html/src/TH1.cxx.html#2592: double w_error = 0; if(b1 < b2) w_error = sqrt( ((1.-2.*w)*e1*e1 + w*w*e2*e2 )/(b2*b2) ); // taking the inverse: yval = 1/w; if(w!=0) { yerr = w_error/pow(w,2); } else { yerr = 0; } } IMeasurement* y = point->coordinate(1); y->setValue(yval); y->setErrorPlus(yerr); y->setErrorMinus(yerr); } } rivet-1.8.3/src/Analyses/UA5_1986_S1583476.cc0000644000175000017500000000652412116077757016076 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/TriggerUA5.hh" namespace Rivet { /// @brief UA5 \f$ \eta \f$ distributions at 200 and 900 GeV class UA5_1986_S1583476 : public Analysis { public: /// Constructor UA5_1986_S1583476() : Analysis("UA5_1986_S1583476") { _sumWTrig = 0; _sumWTrigNSD = 0; } /// @name Analysis methods //@{ /// Set up projections and histograms void init() { addProjection(TriggerUA5(), "Trigger"); addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(-5.0, 5.0), "CFS50"); // Histograms if (fuzzyEquals(sqrtS()/GeV, 200.0, 1E-4)) { _hist_eta_nsd = bookHistogram1D(1,1,1); _hist_eta_inelastic = bookHistogram1D(1,1,2); for (int i = 1; i <= 6; ++i) { _sumWn += 0.0; _hists_eta_nsd += bookHistogram1D(2,1,i); } } else if (fuzzyEquals(sqrtS()/GeV, 900.0, 1E-4)) { _hist_eta_nsd = bookHistogram1D(1,1,3); _hist_eta_inelastic = bookHistogram1D(1,1,4); for (int i = 1; i <= 9; ++i) { _sumWn += 0.0; _hists_eta_nsd += bookHistogram1D(3,1,i); } } } /// Fill eta histograms (in Nch bins) void analyze(const Event& event) { // Trigger const TriggerUA5& trigger = applyProjection(event, "Trigger"); if (!trigger.sdDecision()) vetoEvent; const bool isNSD = trigger.nsdDecision(); // Get the index corresponding to the max Nch range histo/sum(w) vector index const ChargedFinalState& cfs50 = applyProjection(event, "CFS50"); const int numP = cfs50.size(); const int ni = (int)floor(static_cast(numP-2)/10.0); const int num_idx = min(ni, (int)_sumWn.size()-1); MSG_TRACE("Multiplicity index: " << numP << " charged particles -> #" << num_idx); // Update weights const double weight = event.weight(); _sumWTrig += weight; if (isNSD) { _sumWTrigNSD += weight; if (num_idx >= 0) _sumWn[num_idx] += weight; } // Fill histos foreach (const Particle& p, cfs50.particles()) { const double eta = fabs(p.momentum().pseudorapidity()); _hist_eta_inelastic->fill(eta, weight); if (isNSD) { _hist_eta_nsd->fill(eta, weight); if (num_idx >= 0) _hists_eta_nsd[num_idx]->fill(eta, weight); } } } /// Scale histos void finalize() { MSG_DEBUG("sumW_NSD,inel = " << _sumWTrigNSD << ", " << _sumWTrig); scale(_hist_eta_nsd, 0.5/_sumWTrigNSD); scale(_hist_eta_inelastic, 0.5/_sumWTrig); // MSG_DEBUG("sumW[n] = " << _sumWn); for (size_t i = 0; i < _hists_eta_nsd.size(); ++i) { scale(_hists_eta_nsd[i], 0.5/_sumWn[i]); } } private: /// @name Weight counters //@{ double _sumWTrig; double _sumWTrigNSD; vector _sumWn; //@} /// @name Histograms //@{ AIDA::IHistogram1D *_hist_eta_nsd; AIDA::IHistogram1D *_hist_eta_inelastic; vector _hists_eta_nsd; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(UA5_1986_S1583476); } rivet-1.8.3/src/Analyses/LHCB_2011_I919315.cc0000644000175000017500000000507512116077757016070 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/Projections/UnstableFinalState.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { class LHCB_2011_I919315 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor LHCB_2011_I919315() : Analysis("LHCB_2011_I919315") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { addProjection(UnstableFinalState(), "UFS"); _h_Phi_pT_y.addHistogram( 2.44, 2.62, bookHistogram1D(2, 1, 1)); _h_Phi_pT_y.addHistogram( 2.62, 2.80, bookHistogram1D(2, 1, 2)); _h_Phi_pT_y.addHistogram( 2.80, 2.98, bookHistogram1D(3, 1, 1)); _h_Phi_pT_y.addHistogram( 2.98, 3.16, bookHistogram1D(3, 1, 2)); _h_Phi_pT_y.addHistogram( 3.16, 3.34, bookHistogram1D(4, 1, 1)); _h_Phi_pT_y.addHistogram( 3.34, 3.52, bookHistogram1D(4, 1, 2)); _h_Phi_pT_y.addHistogram( 3.52, 3.70, bookHistogram1D(5, 1, 1)); _h_Phi_pT_y.addHistogram( 3.70, 3.88, bookHistogram1D(5, 1, 2)); _h_Phi_pT_y.addHistogram( 3.88, 4.06, bookHistogram1D(6, 1, 1)); _h_Phi_pT = bookHistogram1D(7, 1, 1); _h_Phi_y = bookHistogram1D(8, 1, 1); } /// Perform the per-event analysis void analyze (const Event& event) { const double weight = event.weight(); const UnstableFinalState& ufs = applyProjection (event, "UFS"); foreach (const Particle& p, ufs.particles()) { const PdgId id = abs(p.pdgId()); if (id == 333) { // id 333 = phi-meson double y = p.momentum().rapidity(); double pT = p.momentum().perp(); if (pT < 0.6*GeV || pT > 5.0*GeV || y < 2.44 || y > 4.06) { continue; } _h_Phi_y->fill (y, weight); _h_Phi_pT->fill (pT/MeV, weight); _h_Phi_pT_y.fill(y, pT/GeV, weight); } } } /// Normalise histograms etc., after the run void finalize() { double scale_factor = crossSectionPerEvent()/microbarn; scale (_h_Phi_y, scale_factor); scale (_h_Phi_pT, scale_factor); _h_Phi_pT_y.scale(scale_factor/1000., this); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_Phi_y; AIDA::IHistogram1D * _h_Phi_pT; BinnedHistogram _h_Phi_pT_y; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(LHCB_2011_I919315); } //@} rivet-1.8.3/src/Analyses/ALICE_2010_S8624100.cc0000644000175000017500000000430712116077757016254 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" namespace Rivet { class ALICE_2010_S8624100 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ALICE_2010_S8624100() : Analysis("ALICE_2010_S8624100") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { ChargedFinalState cfs05(-0.5, 0.5); ChargedFinalState cfs10(-1.0, 1.0); ChargedFinalState cfs13(-1.3, 1.3); addProjection(cfs05, "CFS05"); addProjection(cfs10, "CFS10"); addProjection(cfs13, "CFS13"); if (fuzzyEquals(sqrtS()/GeV, 900, 1E-3)) { _h_dN_dNch_05 = bookHistogram1D(11, 1, 1); _h_dN_dNch_10 = bookHistogram1D(12, 1, 1); _h_dN_dNch_13 = bookHistogram1D(13, 1, 1); } else if (fuzzyEquals(sqrtS()/GeV, 2360, 1E-3)) { _h_dN_dNch_05 = bookHistogram1D(17, 1, 1); _h_dN_dNch_10 = bookHistogram1D(18, 1, 1); _h_dN_dNch_13 = bookHistogram1D(19, 1, 1); } } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); const ChargedFinalState& charged_05 = applyProjection(event, "CFS05"); const ChargedFinalState& charged_10 = applyProjection(event, "CFS10"); const ChargedFinalState& charged_13 = applyProjection(event, "CFS13"); _h_dN_dNch_05->fill(charged_05.size(), weight); _h_dN_dNch_10->fill(charged_10.size(), weight); _h_dN_dNch_13->fill(charged_13.size(), weight); } /// Normalise histograms etc., after the run void finalize() { normalize(_h_dN_dNch_05); normalize(_h_dN_dNch_10); normalize(_h_dN_dNch_13); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_dN_dNch_05; AIDA::IHistogram1D *_h_dN_dNch_10; AIDA::IHistogram1D *_h_dN_dNch_13; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ALICE_2010_S8624100); } rivet-1.8.3/src/Analyses/CDF_2000_S4155203.cc0000644000175000017500000000316312116077757016030 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ZFinder.hh" namespace Rivet { /// @brief CDF Run I Z \f$ p_\perp \f$ in Drell-Yan events /// @author Hendrik Hoeth class CDF_2000_S4155203 : public Analysis { public: /// Constructor CDF_2000_S4155203() : Analysis("CDF_2000_S4155203") { } /// @name Analysis methods //@{ void init() { // Set up projections FinalState fs; ZFinder zfinder(fs, -MAXRAPIDITY, MAXRAPIDITY, 0.0*GeV, ELECTRON, 66.0*GeV, 116.0*GeV, 0.0, false, false); addProjection(zfinder, "ZFinder"); // Book histogram _hist_zpt = bookHistogram1D(1, 1, 1); } /// Do the analysis void analyze(const Event& e) { const ZFinder& zfinder = applyProjection(e, "ZFinder"); if (zfinder.bosons().size() != 1) { MSG_DEBUG("Num e+ e- pairs found = " << zfinder.bosons().size()); vetoEvent; } FourMomentum pZ = zfinder.bosons()[0].momentum(); if (pZ.mass2() < 0) { MSG_DEBUG("Negative Z mass**2 = " << pZ.mass2()/GeV2 << "!"); vetoEvent; } MSG_DEBUG("Dilepton mass = " << pZ.mass()/GeV << " GeV"); MSG_DEBUG("Dilepton pT = " << pZ.pT()/GeV << " GeV"); _hist_zpt->fill(pZ.pT()/GeV, e.weight()); } void finalize() { scale(_hist_zpt, crossSection()/picobarn/sumOfWeights()); } //@} private: AIDA::IHistogram1D *_hist_zpt; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2000_S4155203); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1190891.cc0000644000175000017500000002271212116077757016303 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/RivetMT2.hh" namespace Rivet { /// @author Peter Richardson class ATLAS_2012_I1190891 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_I1190891() : Analysis("ATLAS_2012_I1190891") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 10.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); VetoedFinalState vfs; vfs.addVetoPairId(MUON); /// Jet finder addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // all tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0),"cfs"); // Book histograms _hist_etmiss = bookHistogram1D("hist_etmiss",10,0.,500.); _hist_meff = bookHistogram1D("hist_m_eff",7,0.,1050.); _count_SR1 = bookHistogram1D("count_SR1", 1, 0., 1.); _count_SR2 = bookHistogram1D("count_SR2", 1, 0., 1.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // get the jet candidates Jets cand_jets; foreach (const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 2.5 ) { cand_jets.push_back(jet); } } // candidate muons ParticleVector cand_mu; ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); foreach ( const Particle & mu, applyProjection(event, "muons").particlesByPt() ) { double pTinCone = -mu.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(mu.momentum(),track.momentum()) <= 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 1.8*GeV ) cand_mu.push_back(mu); } // candidate electrons ParticleVector cand_e; foreach ( const Particle & e, applyProjection(event, "elecs").particlesByPt() ) { double pTinCone = -e.momentum().perp(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(e.momentum(),track.momentum()) <= 0.2 ) pTinCone += track.momentum().pT(); } if (pTinCone/e.momentum().perp()<0.1) { cand_e.push_back(e); } } // resolve jet/lepton ambiguity Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) recon_jets.push_back( jet ); } // only keep electrons more than R=0.4 from jets ParticleVector cand2_e; for(unsigned int ie=0;ie0) continue; double mtest = (cand2_e[ie].momentum()+cand2_e[ie2].momentum()).mass(); if(mtest<=20.) { pass = false; break; } } if(pass) recon_e.push_back(cand2_e[ie]); } // only keep muons more than R=0.4 from jets ParticleVector cand2_mu; for(unsigned int imu=0;imu0) continue; double mtest = (cand2_mu[imu].momentum()+cand2_mu[imu2].momentum()).mass(); if(mtest<=20.) { pass = false; break; } } if(pass) recon_mu.push_back(cand2_mu[imu]); } // pTmiss ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // now only use recon_jets, recon_mu, recon_e // reject events with less than 4 electrons and muons if ( recon_mu.size() + recon_e.size() < 4 ) { MSG_DEBUG("To few charged leptons left after selection"); vetoEvent; } // check if passes single lepton trigger bool passSingle = ( !recon_e .empty() && recon_e[0] .momentum().perp()>25. )|| ( !recon_mu.empty() && recon_mu[0].momentum().perp()>20.); // or two lepton trigger bool passDouble = ( recon_mu.size()>=2 && recon_mu[1].momentum().perp()>12.) || ( recon_e .size()>=2 && recon_e [1].momentum().perp()>17.) || ( !recon_e.empty() && !recon_mu.empty() && recon_e[0].momentum().perp()>15. && recon_mu[0].momentum().perp()>10.); // must pass a trigger if( !passSingle && !passDouble ) { MSG_DEBUG("Hardest lepton fails trigger"); vetoEvent; } // calculate meff double meff = eTmiss; foreach ( const Particle & e , recon_e ) meff += e.momentum().perp(); foreach ( const Particle & mu, recon_mu ) meff += mu.momentum().perp(); foreach ( const Jet & jet, recon_jets ) { double pT = jet.momentum().perp(); if(pT>40.) meff += pT; } // mass of SFOS pairs closest to the Z mass for(unsigned int ix=0;ix0) continue; double mtest = (recon_e[ix].momentum()+recon_e[iy].momentum()).mass(); if(mtest>81.2 && mtest<101.2) vetoEvent; } } for(unsigned int ix=0;ix0) continue; double mtest = (recon_mu[ix].momentum()+recon_mu[iy].momentum()).mass(); if(mtest>81.2 && mtest<101.2) vetoEvent; } } // make the control plots _hist_etmiss ->fill(eTmiss,weight); _hist_meff ->fill(meff ,weight); // finally the counts if(eTmiss>50.) _count_SR1->fill(0.5,weight); if(meff >300.) _count_SR2->fill(0.5,weight); } //@} void finalize() { double norm = crossSection()/femtobarn*4.7/sumOfWeights(); scale(_hist_etmiss,norm* 50.); scale(_hist_meff ,norm*150.); scale(_count_SR1,norm); scale(_count_SR2,norm); } private: /// @name Histograms //@{ AIDA::IHistogram1D* _hist_etmiss; AIDA::IHistogram1D* _hist_meff; AIDA::IHistogram1D* _count_SR1; AIDA::IHistogram1D* _count_SR2; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I1190891); } rivet-1.8.3/src/Analyses/UA5_1987_S1640666.cc0000644000175000017500000000314712116077757016070 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/TriggerUA5.hh" #include "Rivet/Projections/ChargedFinalState.hh" namespace Rivet { class UA5_1987_S1640666 : public Analysis { public: /// Constructor UA5_1987_S1640666() : Analysis("UA5_1987_S1640666") { _sumWPassed = 0; } /// Book histograms and initialise projections before the run void init() { addProjection(TriggerUA5(), "Trigger"); addProjection(ChargedFinalState(-5.0, 5.0), "CFS"); _hist_mean_nch = bookHistogram1D(1, 1, 1); _hist_nch = bookHistogram1D(3, 1, 1); } /// Perform the per-event analysis void analyze(const Event& event) { // Trigger const TriggerUA5& trigger = applyProjection(event, "Trigger"); if (!trigger.nsdDecision()) vetoEvent; const double weight = event.weight(); _sumWPassed += weight; // Count final state particles in several eta regions const int Nch = applyProjection(event, "CFS").size(); // Fill histograms _hist_nch->fill(Nch, weight); _hist_mean_nch->fill(_hist_mean_nch->binMean(0), Nch*weight); } /// Normalise histograms etc., after the run void finalize() { scale(_hist_nch, 1.0/_sumWPassed); scale(_hist_mean_nch, 1.0/_sumWPassed); } private: double _sumWPassed; AIDA::IHistogram1D *_hist_mean_nch; AIDA::IHistogram1D *_hist_nch; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(UA5_1987_S1640666); } rivet-1.8.3/src/Analyses/D0_2008_S6879055.cc0000644000175000017500000000672312116077757015740 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief D0 measurement of the ratio \f$ \sigma(Z/\gamma^* + n \text{ jets})/\sigma(Z/\gamma^*) \f$ class D0_2008_S6879055 : public Analysis { public: /// Default constructor. D0_2008_S6879055() : Analysis("D0_2008_S6879055") { } /// @name Analysis methods //@{ // Book histograms void init() { FinalState fs; ZFinder zfinder(fs, -MAXRAPIDITY, MAXRAPIDITY, 0.0*GeV, ELECTRON, 40.0*GeV, 200.0*GeV, 0.2, true, true); addProjection(zfinder, "ZFinder"); FastJets conefinder(zfinder.remainingFinalState(), FastJets::D0ILCONE, 0.5); addProjection(conefinder, "ConeFinder"); _crossSectionRatio = bookHistogram1D(1, 1, 1); _pTjet1 = bookHistogram1D(2, 1, 1); _pTjet2 = bookHistogram1D(3, 1, 1); _pTjet3 = bookHistogram1D(4, 1, 1); } /// Do the analysis void analyze(const Event& event) { const double weight = event.weight(); const ZFinder& zfinder = applyProjection(event, "ZFinder"); if (zfinder.bosons().size()!=1) { vetoEvent; } FourMomentum e0 = zfinder.constituents()[0].momentum(); FourMomentum e1 = zfinder.constituents()[1].momentum(); const double e0eta = e0.eta(); const double e0phi = e0.phi(); const double e1eta = e1.eta(); const double e1phi = e1.phi(); vector finaljet_list; foreach (const Jet& j, applyProjection(event, "ConeFinder").jetsByPt(20.0*GeV)) { const double jeta = j.momentum().eta(); const double jphi = j.momentum().phi(); if (fabs(jeta) < 2.5) { if (deltaR(e0eta, e0phi, jeta, jphi) > 0.4 && deltaR(e1eta, e1phi, jeta, jphi) > 0.4) { finaljet_list.push_back(j.momentum()); } } } // For normalisation of crossSection data (includes events with no jets passing cuts) _crossSectionRatio->fill(0, weight); // Fill jet pT and multiplicities if (finaljet_list.size() >= 1) { _crossSectionRatio->fill(1, weight); _pTjet1->fill(finaljet_list[0].pT(), weight); } if (finaljet_list.size() >= 2) { _crossSectionRatio->fill(2, weight); _pTjet2->fill(finaljet_list[1].pT(), weight); } if (finaljet_list.size() >= 3) { _crossSectionRatio->fill(3, weight); _pTjet3->fill(finaljet_list[2].pT(), weight); } if (finaljet_list.size() >= 4) { _crossSectionRatio->fill(4, weight); } } /// Finalize void finalize() { // Now divide by the inclusive result _crossSectionRatio->scale(1.0/_crossSectionRatio->binHeight(0)); // Normalise jet pTs to integrals of data // NB. There is no other way to do this, because these quantities are not // detector-corrected normalize(_pTjet1, 10439.0); // fixed norm OK normalize(_pTjet2, 1461.5); // fixed norm OK normalize(_pTjet3, 217.0); // fixed norm OK } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _crossSectionRatio; AIDA::IHistogram1D * _pTjet1; AIDA::IHistogram1D * _pTjet2; AIDA::IHistogram1D * _pTjet3; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2008_S6879055); } rivet-1.8.3/src/Analyses/CMS_2012_I1087342.cc0000644000175000017500000000402212116077757016047 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { // This analysis is a derived from the class Analysis: class CMS_2012_I1087342 : public Analysis { public: // Constructor CMS_2012_I1087342() : Analysis("CMS_2012_I1087342") { } void init() { const FinalState fs; addProjection(FastJets(fs, FastJets::ANTIKT, 0.5),"Jets"); _hist_jetpt_fwdincl = bookHistogram1D(1,1,1); _hist_jetpt_forward = bookHistogram1D(2,1,1); _hist_jetpt_central = bookHistogram1D(3,1,1); } void analyze(const Event &event) { const double weight = event.weight(); const FastJets &fj = applyProjection(event,"Jets"); const Jets jets = fj.jets(35*GeV, 150*GeV, -4.7, 4.7, ETA); double cjet_pt=0.0; double fjet_pt=0.0; foreach(const Jet &j, jets) { if(j.momentum().eta() > 3.2 || j.momentum().eta() < -3.2) { _hist_jetpt_fwdincl -> fill(j.momentum().pT(), weight); } double pT = j.momentum().pT()*GeV; if (fabs(j.momentum().eta()) < 2.8) { if(cjet_pt < pT) cjet_pt = pT; } if (fabs(j.momentum().eta()) < 4.7 && fabs(j.momentum().eta()) > 3.2) { if(fjet_pt < pT) fjet_pt = pT; } } if (cjet_pt > 35 && fjet_pt > 35) { _hist_jetpt_forward->fill(fjet_pt, weight); _hist_jetpt_central->fill(cjet_pt, weight); } } void finalize() { scale(_hist_jetpt_fwdincl, crossSection() / picobarn / sumOfWeights() / 3.0); scale(_hist_jetpt_forward, crossSection() / picobarn / sumOfWeights() / 3.0); scale(_hist_jetpt_central, crossSection() / picobarn / sumOfWeights() / 5.6); } private: AIDA::IHistogram1D* _hist_jetpt_fwdincl; AIDA::IHistogram1D* _hist_jetpt_forward; AIDA::IHistogram1D* _hist_jetpt_central; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2012_I1087342); } rivet-1.8.3/src/Analyses/MC_PDFS.cc0000644000175000017500000000564612116077757015070 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" // #include "Rivet/Projections/ChargedFinalState.hh" namespace Rivet { /// Generic analysis looking at various distributions of final state particles class MC_PDFS : public Analysis { public: /// Constructor MC_PDFS() : Analysis("MC_PDFS") { } public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // Projections // addProjection(ChargedFinalState(-5.0, 5.0, 500*MeV), "CFS"); // Histograms _histPdfX = bookHistogram1D("PdfX", logspace(50, 0.000001, 1.0)); _histPdfXmin = bookHistogram1D("PdfXmin", logspace(50, 0.000001, 1.0)); _histPdfXmax = bookHistogram1D("PdfXmax", logspace(50, 0.000001, 1.0)); _histPdfQ = bookHistogram1D("PdfQ", 50, 0.0, 30.0); // _histPdfXQ = bookHistogram2D("PdfXQ", logspace(50, 0.000001, 1.0), linspace(50, 0.0, 30.0)); // _histPdfTrackptVsX = bookProfile1D("PdfTrackptVsX", logspace(50, 0.000001, 1.0)); // _histPdfTrackptVsQ = bookProfile1D("PdfTrackptVsQ", 50, 0.0, 30.0); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // This analysis needs a valid HepMC PDF info object to do anything if (event.genEvent().pdf_info() == 0) vetoEvent; HepMC::PdfInfo pdfi = *event.genEvent().pdf_info(); MSG_DEBUG("PDF Q = " << pdfi.scalePDF() << " for (id, x) = " << "(" << pdfi.id1() << ", " << pdfi.x1() << ") " << "(" << pdfi.id2() << ", " << pdfi.x2() << ")"); _histPdfX->fill(pdfi.x1(), weight); _histPdfX->fill(pdfi.x2(), weight); _histPdfXmin->fill(std::min(pdfi.x1(), pdfi.x2()), weight); _histPdfXmax->fill(std::max(pdfi.x1(), pdfi.x2()), weight); _histPdfQ->fill(pdfi.scalePDF(), weight); // always in GeV? // const FinalState& cfs = applyProjection(event, "CFS"); // foreach (const Particle& p, cfs.particles()) { // if (fabs(eta) < 2.5 && p.momentum().pT() > 10*GeV) { // _histPdfTrackptVsX->fill(pdfi.x1(), p.momentum().pT()/GeV, weight); // _histPdfTrackptVsX->fill(pdfi.x2(), p.momentum().pT()/GeV, weight); // _histPdfTrackptVsQ->fill(pdfi.scalePDF(), p.momentum().pT()/GeV, weight); // } // } } /// Finalize void finalize() { scale(_histPdfX, 1/sumOfWeights()); scale(_histPdfXmin, 1/sumOfWeights()); scale(_histPdfXmax, 1/sumOfWeights()); scale(_histPdfQ, 1/sumOfWeights()); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_histPdfX, *_histPdfXmin, *_histPdfXmax, *_histPdfQ; // AIDA::IProfile1D *_histPdfTrackptVsX, *_histPdfTrackptVsQ; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_PDFS); } rivet-1.8.3/src/Analyses/CMS_2012_I1184941.cc0000644000175000017500000000362512116077757016062 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Tools/Logging.hh" namespace Rivet { class CMS_2012_I1184941 : public Analysis { public: CMS_2012_I1184941() : Analysis("CMS_2012_I1184941") { } public: void init() { FinalState fs; addProjection(fs, "FS"); const FastJets jets(FinalState(-4.9, 4.9, 0.0*GeV), FastJets::ANTIKT, 0.5); addProjection(jets, "AntiKtJets05"); _h_xi = bookHistogram1D(1, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); double xiM = 0.; double xiP = 0.; const Jets jets = applyProjection(event, "AntiKtJets05").jetsByPt(20.*GeV); if (jets.size() < 2) vetoEvent; // require a dijet system with a 20 GeV cut on both jets if (fabs(jets[0].momentum().eta()) > 4.4 || fabs(jets[1].momentum().eta()) > 4.4) vetoEvent; const FinalState& fsp = applyProjection(event, "FS"); foreach (const Particle& p, fsp.particlesByEta()) { double eta = p.momentum().eta(); double energy = p.momentum().E(); double costheta = cos(p.momentum().theta()); // Yes, they really correct to +/- infinity, using Pythia 8 ... if ( eta < 4.9 ) xiP += (energy + energy*costheta); if ( -4.9 < eta ) xiM += (energy - energy*costheta); } xiP = xiP / (sqrtS()/GeV); xiM = xiM / (sqrtS()/GeV); _h_xi->fill( xiM, weight ); // Fill the histogram both with xiP and xiM, and get the average in the endjob. _h_xi->fill( xiP, weight ); } void finalize() { scale( _h_xi, crossSection()/microbarn/sumOfWeights() / 2.); } private: AIDA::IHistogram1D* _h_xi; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2012_I1184941); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1094061.cc0000644000175000017500000002715312123033122016247 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include namespace Rivet{ class ATLAS_2012_I1094061; AnalysisBuilder plugin_ATLAS_2012_I1094061; class ATLAS_2012_I1094061: public Analysis{ private: //////////////////////////////////////////////////////////////////////////// /** * Little container to hold a pair of foreground and background histos and then * divide them at the end of the analysis */ class HistoPair{ public: enum HistoType{FOREGROUND, BACKGROUND}; HistoPair(): _analysis(0), _h_foreground(0), _h_background(0), _d_final(0){} void init(int ds, int xaxis, int yaxis, ATLAS_2012_I1094061 *analysis){ _ds = ds; _xaxis = xaxis; _yaxis = yaxis; _analysis = analysis; ++HistoPair::_s_counter; const BinEdges &edges = _analysis->binEdges(_ds, _xaxis, _yaxis); string sCount = boost::lexical_cast(HistoPair::_s_counter); _h_foreground = analysis->bookHistogram1D("tmpForeground" + sCount, edges); _h_background = analysis->bookHistogram1D("tmpBackground" + sCount, edges); } void fillForeground(double value, double weight){ _h_foreground->fill(value, weight); _h_foreground->fill(-value, weight); return; } void fillBackground(double value, double weight){ _h_background->fill(value, weight); _h_background->fill(-value, weight); return; } void fill(double value, double weight, HistoType type){ switch(type){ case FOREGROUND: fillForeground(value, weight); break; case BACKGROUND: fillBackground(value, weight); break; } return; } void finalize(double wgtSum, double bgWeight, double avNTracks){ _h_foreground->scale(1. / wgtSum); _h_background->scale(1. / bgWeight); string histoPath = _analysis->histoPath(_ds, _xaxis, _yaxis); AIDA::IDataPointSet *final = _analysis->histogramFactory().divide(histoPath, *_h_foreground, *_h_background); for(int ii=0; ii!= final->size(); ++ii){ AIDA::IDataPoint *pt = final->point(ii); double y=pt->coordinate(1)->value(); pt->coordinate(1)->setValue(y-(avNTracks - 1)); } _analysis->histogramFactory().destroy(_h_foreground); _analysis->histogramFactory().destroy(_h_background); return; } private: int _ds, _xaxis, _yaxis; ATLAS_2012_I1094061 *_analysis; AIDA::IHistogram1D* _h_foreground; AIDA::IHistogram1D* _h_background; AIDA::IDataPointSet* _d_final; static short _s_counter; }; //////////////////////////////////////////////////////////////////////////// public: ATLAS_2012_I1094061(): Analysis("ATLAS_2012_I1094061"), _minpT(100.*MeV), _etaMax(2.5), _nVersions(5), _version(0), _etaCut(2.), _phiCut(0.5*M_PI), _historyInclusive(_nVersions, ParticleVector()), _historyN20(_nVersions, ParticleVector()), _historyInclusiveWgts(_nVersions, 0.), _historyN20Wgts(_nVersions, 0.), _particleCountInclusive(0.), _particleCountN20(0.), _weightInclusive(0.), _weightN20(0.), _bgWeightInclusive(0.), _bgWeightN20(0.){ } //////////////////////////////////////////////////////////////////////////// void init(){ const ChargedFinalState cfs(-2.5, 2.5, _minpT); addProjection(cfs, "ChargedParticles"); // Only do the multiplicity > 20 plots for 7 TeV collisions _doN20 = (fabs(sqrtS() - 7000.*GeV) < 0.1*GeV); int yaxis = (_doN20)? 2: 1; _hp_DEta_0_pi.init(1, 1, yaxis, this); _hp_DEta_0_pi2.init(2, 1, yaxis, this); _hp_DEta_pi2_pi.init(3, 1, yaxis, this); _hp_DPhi_0_2.init(4, 1, yaxis, this); _hp_DPhi_2_5.init(5, 1, yaxis, this); if(_doN20){ yaxis = 3; _hp_N20_DEta_0_pi.init(1, 1, yaxis, this); _hp_N20_DEta_0_pi2.init(2, 1, yaxis, this); _hp_N20_DEta_pi2_pi.init(3, 1, yaxis, this); _hp_N20_DPhi_0_2.init(4, 1, yaxis, this); _hp_N20_DPhi_2_5.init(5, 1, yaxis, this); } return; } //////////////////////////////////////////////////////////////////////////// void analyze(const Event &evt){ const ChargedFinalState &cfsProj = applyProjection(evt, "ChargedParticles"); ParticleVector chargedParticles = cfsProj.particles(); if(chargedParticles.size() < 2) vetoEvent; bool hasN20 = (_doN20 && chargedParticles.size() >= 20); double dMultiplicity = (double)chargedParticles.size(); double multiplicityWeightIncr = dMultiplicity * evt.weight(); _weightInclusive += evt.weight(); _particleCountInclusive += multiplicityWeightIncr; if(hasN20){ _weightN20 += evt.weight(); _particleCountN20 += multiplicityWeightIncr; } double fgWeight = 2.*evt.weight() / dMultiplicity; for(ParticleVector::const_iterator p1 = chargedParticles.begin(); p1 != chargedParticles.end(); ++p1){ ParticleVector::const_iterator p2 = p1; ++p2; // fill the foreground distributions while(p2 != chargedParticles.end()){ fillHistosInclusive(*p1, *p2, fgWeight, HistoPair::FOREGROUND); if(hasN20) fillHistosN20(*p1, *p2, fgWeight, HistoPair::FOREGROUND); ++p2; }// end filling the foreground distributions // loop over the history of particles from previous events and fill the background // by correlating those particles with the current event for(size_t version = 0; version != _nVersions; ++version){ const ParticleVector &bgParticles = _historyInclusive[version]; double bgWeight = evt.weight() * _historyInclusiveWgts[version]; for(ParticleVector::const_iterator p2 = bgParticles.begin(); p2 != bgParticles.end(); ++p2){ fillHistosInclusive(*p1, *p2, bgWeight, HistoPair::BACKGROUND); _bgWeightInclusive += bgWeight; } if(!hasN20) continue; const ParticleVector &bgParticlesN20 = _historyN20[version]; bgWeight = evt.weight() * _historyN20Wgts[version]; for(ParticleVector::const_iterator p2 = bgParticlesN20.begin(); p2 != bgParticlesN20.end(); ++p2){ fillHistosN20(*p1, *p2, bgWeight, HistoPair::BACKGROUND); _bgWeightN20 += bgWeight; } }//end loop over particle history for background fill }// end particle loop // Overwrite the history for the version count number _historyInclusive[_version] = chargedParticles; _historyInclusiveWgts[_version] = evt.weight(); if(hasN20){ _historyN20[_version] = chargedParticles; _historyN20Wgts[_version] = evt.weight(); } ++_version; if(_version == _nVersions) _version = 0; return; } //////////////////////////////////////////////////////////////////////////// void finalize(){ double avMultiplicity = _particleCountInclusive / _weightInclusive; _hp_DEta_0_pi.finalize(_weightInclusive, _bgWeightInclusive, avMultiplicity); _hp_DEta_0_pi2.finalize(_weightInclusive, _bgWeightInclusive, avMultiplicity); _hp_DEta_pi2_pi.finalize(_weightInclusive,_bgWeightInclusive, avMultiplicity); _hp_DPhi_0_2.finalize(_weightInclusive, _bgWeightInclusive, avMultiplicity); _hp_DPhi_2_5.finalize(_weightInclusive, _bgWeightInclusive, avMultiplicity); if(_doN20){ avMultiplicity = _particleCountN20 / _weightN20; _hp_N20_DEta_0_pi.finalize(_weightN20, _bgWeightN20, avMultiplicity); _hp_N20_DEta_0_pi2.finalize(_weightN20, _bgWeightN20, avMultiplicity); _hp_N20_DEta_pi2_pi.finalize(_weightN20, _bgWeightN20, avMultiplicity); _hp_N20_DPhi_0_2.finalize(_weightN20, _bgWeightN20, avMultiplicity); _hp_N20_DPhi_2_5.finalize(_weightN20, _bgWeightN20, avMultiplicity); } return; } //////////////////////////////////////////////////////////////////////////// void fillHistos(const Particle &p1, const Particle &p2, double weight, HistoPair::HistoType type, bool inclusive){ double dEta = fabs(p1.momentum().eta() - p2.momentum().eta()); double dPhi = mapAngle0ToPi(p1.momentum().phi() - p2.momentum().phi()); double dPhiShift = TWOPI - dPhi; HistoPair &dEta_0_pi = (inclusive)? _hp_DEta_0_pi :_hp_N20_DEta_0_pi; HistoPair &dPhi_0_2 = (inclusive)? _hp_DPhi_0_2 :_hp_N20_DPhi_0_2; HistoPair &dPhi_2_5 = (inclusive)? _hp_DPhi_2_5 :_hp_N20_DPhi_2_5; HistoPair &dEta_0_pi2 = (inclusive)? _hp_DEta_0_pi2 :_hp_N20_DEta_0_pi2; HistoPair &dEta_pi2_pi = (inclusive)? _hp_DEta_pi2_pi :_hp_N20_DEta_pi2_pi; dEta_0_pi.fill(dEta, weight, type); if(dEta < _etaCut){ dPhi_0_2.fill(dPhi, weight, type); dPhi_0_2.fill(dPhiShift, weight, type); }else{ dPhi_2_5.fill(dPhi, weight, type); dPhi_2_5.fill(dPhiShift, weight, type); } if(dPhi < _phiCut){ dEta_0_pi2.fill(dEta, weight, type); }else{ dEta_pi2_pi.fill(dEta, weight, type); } return; } //////////////////////////////////////////////////////////////////////////// void fillHistosInclusive(const Particle &p1, const Particle &p2, double weight, HistoPair::HistoType type){ fillHistos(p1, p2, weight, type, true); return; } void fillHistosN20(const Particle &p1, const Particle &p2, double weight, HistoPair::HistoType type){ fillHistos(p1, p2, weight, type, false); return; } //////////////////////////////////////////////////////////////////////////// double _minpT; double _etaMax; size_t _nVersions; size_t _version; double _etaCut; double _phiCut; /// The "history" vectors contain the history of particles from _nVersions previous events /// These are used to construct the background correlation. vector _historyInclusive; vector _historyN20; vector _historyInclusiveWgts; vector _historyN20Wgts; double _particleCountInclusive; double _particleCountN20; double _weightInclusive; double _weightN20; double _bgWeightInclusive; double _bgWeightN20; bool _doN20; HistoPair _hp_DEta_0_pi; HistoPair _hp_DEta_0_pi2; HistoPair _hp_DEta_pi2_pi; HistoPair _hp_DPhi_0_2; HistoPair _hp_DPhi_2_5; HistoPair _hp_N20_DEta_0_pi; HistoPair _hp_N20_DEta_0_pi2; HistoPair _hp_N20_DEta_pi2_pi; HistoPair _hp_N20_DPhi_0_2; HistoPair _hp_N20_DPhi_2_5; }; short ATLAS_2012_I1094061::HistoPair::_s_counter = 0; } rivet-1.8.3/src/Analyses/ATLAS_2011_S9225137.cc0000644000175000017500000003500412116077757016312 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/RivetMT2.hh" namespace Rivet { class ATLAS_2011_S9225137 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2011_S9225137() : Analysis("ATLAS_2011_S9225137") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // veto region electrons std::vector > eta_v_e; eta_v_e.push_back(make_pair(-1.52,-1.37)); eta_v_e.push_back(make_pair( 1.37, 1.52)); IdentifiedFinalState veto_elecs(eta_v_e, 10.0*GeV); veto_elecs.acceptIdPair(ELECTRON); addProjection(veto_elecs, "veto_elecs"); // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 20.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); VetoedFinalState vfs; vfs.addVetoPairId(MUON); /// Jet finder addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // all tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0),"cfs"); /// Book histograms _etmisspT_55_NJ_6_obs = bookHistogram1D( 1,1,1); _etmisspT_55_NJ_6_bac = bookHistogram1D( 1,1,2); _etmisspT_55_NJ_6_sig = bookHistogram1D( 1,1,3); _etmisspT_55_NJ_7_obs = bookHistogram1D(13,1,1); _etmisspT_55_NJ_7_bac = bookHistogram1D(13,1,2); _etmisspT_55_NJ_7_sig = bookHistogram1D(13,1,3); _etmisspT_55_NJ_8_obs = bookHistogram1D(15,1,1); _etmisspT_55_NJ_8_bac = bookHistogram1D(15,1,2); _etmisspT_55_NJ_8_sig = bookHistogram1D(15,1,3); _etmisspT_80_NJ_5_obs = bookHistogram1D( 2,1,1); _etmisspT_80_NJ_5_bac = bookHistogram1D( 2,1,2); _etmisspT_80_NJ_5_sig = bookHistogram1D( 2,1,3); _etmisspT_80_NJ_6_obs = bookHistogram1D(14,1,1); _etmisspT_80_NJ_6_bac = bookHistogram1D(14,1,2); _etmisspT_80_NJ_6_sig = bookHistogram1D(14,1,3); _etmisspT_80_NJ_7_obs = bookHistogram1D(16,1,1); _etmisspT_80_NJ_7_bac = bookHistogram1D(16,1,2); _etmisspT_80_NJ_7_sig = bookHistogram1D(16,1,3); _njet55A_obs = bookHistogram1D( 3,1,1); _njet55A_bac = bookHistogram1D( 3,1,2); _njet55A_sig = bookHistogram1D( 3,1,3); _njet55B_obs = bookHistogram1D( 4,1,1); _njet55B_bac = bookHistogram1D( 4,1,2); _njet55B_sig = bookHistogram1D( 4,1,3); _njet55C_obs = bookHistogram1D(17,1,1); _njet55C_bac = bookHistogram1D(17,1,2); _njet55C_sig = bookHistogram1D(17,1,3); _njet80A_obs = bookHistogram1D( 5,1,1); _njet80A_bac = bookHistogram1D( 5,1,2); _njet80A_sig = bookHistogram1D( 5,1,3); _njet80B_obs = bookHistogram1D( 6,1,1); _njet80B_bac = bookHistogram1D( 6,1,2); _njet80B_sig = bookHistogram1D( 6,1,3); _njet80C_obs = bookHistogram1D(18,1,1); _njet80C_bac = bookHistogram1D(18,1,2); _njet80C_sig = bookHistogram1D(18,1,3); _count_7j55 = bookHistogram1D("count_7j55", 1, 0., 1.); _count_8j55 = bookHistogram1D("count_8j55", 1, 0., 1.); _count_6j80 = bookHistogram1D("count_6j80", 1, 0., 1.); _count_7j80 = bookHistogram1D("count_7j80", 1, 0., 1.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // apply electron veto region ParticleVector veto_e = applyProjection(event, "veto_elecs").particles(); if ( ! veto_e.empty() ) { MSG_DEBUG("electrons in veto region"); vetoEvent; } // get the jet candidates Jets cand_jets; foreach (const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 4.9 ) { cand_jets.push_back(jet); } } // candidate muons ParticleVector cand_mu; ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); foreach ( const Particle & mu, applyProjection(event, "muons").particlesByPt() ) { double pTinCone = -mu.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(mu.momentum(),track.momentum()) <= 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 1.8*GeV ) cand_mu.push_back(mu); } // candidate electrons ParticleVector cand_e = applyProjection(event, "elecs").particlesByPt(); // resolve jet/lepton ambiguity Jets cand_jets_2; foreach ( const Jet& jet, cand_jets ) { // candidates above eta=2.8 are jets if ( fabs( jet.momentum().eta() ) >= 2.8 ) cand_jets_2.push_back( jet ); // otherwise more the R=0.2 from an electrons else { bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) cand_jets_2.push_back( jet ); } } // only keep electrons more than R=0.4 from jets ParticleVector recon_e; foreach ( const Particle & e, cand_e ) { bool away = true; foreach ( const Jet& jet, cand_jets_2 ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } if ( away ) recon_e.push_back( e ); } // only keep muons more than R=0.4 from jets ParticleVector recon_mu; foreach ( const Particle & mu, cand_mu ) { bool away = true; foreach ( const Jet& jet, cand_jets_2 ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } if ( away ) recon_mu.push_back( mu ); } // pTmiss ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // final jet filter Jets recon_jets; foreach ( const Jet& jet, cand_jets_2 ) { if ( fabs( jet.momentum().eta() ) <= 2.8 ) recon_jets.push_back( jet ); } // now only use recon_jets, recon_mu, recon_e // reject events with electrons and muons if ( ! ( recon_mu.empty() && recon_e.empty() ) ) { MSG_DEBUG("Charged leptons left after selection"); vetoEvent; } // calculate H_T double HT=0; foreach ( const Jet& jet, recon_jets ) { if ( jet.momentum().pT() > 40 * GeV ) HT += jet.momentum().pT() ; } // number of jets and deltaR bool pass55DeltaR=true; unsigned int njet55=0; bool pass80DeltaR=true; unsigned int njet80=0; for (unsigned int ix=0;ix80.*GeV) ++njet80; if(recon_jets[ix].momentum().pT()>55.*GeV) ++njet55; for (unsigned int iy=ix+1;iy55.*GeV && recon_jets[iy].momentum().pT()>55.*GeV && deltaR(recon_jets[ix],recon_jets[iy]) <0.6 ) pass55DeltaR = false; if(recon_jets[ix].momentum().pT()>80.*GeV && recon_jets[iy].momentum().pT()>80.*GeV && deltaR(recon_jets[ix],recon_jets[iy]) <0.6 ) pass80DeltaR = false; } } // require at least four jets with et > 55 if(njet55<=3) vetoEvent; // plots of etmiss/ht double etht = eTmiss/sqrt(HT); if(njet55==6) { _etmisspT_55_NJ_6_obs->fill(etht,weight); _etmisspT_55_NJ_6_bac->fill(etht,weight); _etmisspT_55_NJ_6_sig->fill(etht,weight); } else if(njet55==7) { _etmisspT_55_NJ_7_obs->fill(etht,weight); _etmisspT_55_NJ_7_bac->fill(etht,weight); _etmisspT_55_NJ_7_sig->fill(etht,weight); } else if(njet55==8) { _etmisspT_55_NJ_8_obs->fill(etht,weight); _etmisspT_55_NJ_8_bac->fill(etht,weight); _etmisspT_55_NJ_8_sig->fill(etht,weight); } if(njet80==5) { _etmisspT_80_NJ_5_obs->fill(etht,weight); _etmisspT_80_NJ_5_bac->fill(etht,weight); _etmisspT_80_NJ_5_sig->fill(etht,weight); } else if(njet80==6) { _etmisspT_80_NJ_6_obs->fill(etht,weight); _etmisspT_80_NJ_6_bac->fill(etht,weight); _etmisspT_80_NJ_6_sig->fill(etht,weight); } else if(njet80==7) { _etmisspT_80_NJ_7_obs->fill(etht,weight); _etmisspT_80_NJ_7_bac->fill(etht,weight); _etmisspT_80_NJ_7_sig->fill(etht,weight); } if(etht>1.5&ðt<2. ) { if(njet55>3) { _njet55A_obs->fill(njet55,weight); _njet55A_bac->fill(njet55,weight); _njet55A_sig->fill(njet55,weight); } if(njet80>3) { _njet80A_obs->fill(njet80,weight); _njet80A_bac->fill(njet80,weight); _njet80A_sig->fill(njet80,weight); } } else if(etht>2. &ðt<3. ) { if(njet55>3) { _njet55B_obs->fill(njet55,weight); _njet55B_bac->fill(njet55,weight); _njet55B_sig->fill(njet55,weight); } if(njet80>3) { _njet80B_obs->fill(njet80,weight); _njet80B_bac->fill(njet80,weight); _njet80B_sig->fill(njet80,weight); } } else { if(njet55>3) { _njet55C_obs->fill(njet55,weight); _njet55C_bac->fill(njet55,weight); _njet55C_sig->fill(njet55,weight); } if(njet80>3) { _njet80C_obs->fill(njet80,weight); _njet80C_bac->fill(njet80,weight); _njet80C_sig->fill(njet80,weight); } } // apply E_T/sqrt(H_T) cut if(etht<=3.5*GeV) { MSG_DEBUG("Fails ET/sqrt(HT) cut "); vetoEvent; } // check passes at least one delta5/ njet number cut if(!(pass55DeltaR && njet55 >= 7) && !(pass80DeltaR && njet80 >= 6) ) { MSG_DEBUG("Fails DeltaR cut or jet number cuts"); vetoEvent; } // 7j55 if(njet55>=7&&pass55DeltaR) _count_7j55->fill( 0.5, weight) ; // 8j55 if(njet55>=8&&pass55DeltaR) _count_8j55->fill( 0.5, weight) ; // 6j80 if(njet80>=6&&pass80DeltaR) _count_6j80->fill( 0.5, weight) ; // 7j80 if(njet80>=7&&pass80DeltaR) _count_7j80->fill( 0.5, weight) ; } //@} void finalize() { double norm = crossSection()/femtobarn*1.34/sumOfWeights(); scale(_etmisspT_55_NJ_6_obs,norm); scale(_etmisspT_55_NJ_6_bac,norm); scale(_etmisspT_55_NJ_6_sig,norm); scale(_etmisspT_55_NJ_7_obs,norm); scale(_etmisspT_55_NJ_7_bac,norm); scale(_etmisspT_55_NJ_7_sig,norm); scale(_etmisspT_55_NJ_8_obs,norm); scale(_etmisspT_55_NJ_8_bac,norm); scale(_etmisspT_55_NJ_8_sig,norm); scale(_etmisspT_80_NJ_5_obs,norm); scale(_etmisspT_80_NJ_5_bac,norm); scale(_etmisspT_80_NJ_5_sig,norm); scale(_etmisspT_80_NJ_6_obs,norm); scale(_etmisspT_80_NJ_6_bac,norm); scale(_etmisspT_80_NJ_6_sig,norm); scale(_etmisspT_80_NJ_7_obs,norm); scale(_etmisspT_80_NJ_7_bac,norm); scale(_etmisspT_80_NJ_7_sig,norm); scale(_njet55A_obs,norm); scale(_njet55A_bac,norm); scale(_njet55A_sig,norm); scale(_njet55B_obs,norm); scale(_njet55B_bac,norm); scale(_njet55B_sig,norm); scale(_njet55C_obs,norm); scale(_njet55C_bac,norm); scale(_njet55C_sig,norm); scale(_njet80A_obs,norm); scale(_njet80A_bac,norm); scale(_njet80A_sig,norm); scale(_njet80B_obs,norm); scale(_njet80B_bac,norm); scale(_njet80B_sig,norm); scale(_njet80C_obs,norm); scale(_njet80C_bac,norm); scale(_njet80C_sig,norm); scale(_count_7j55,norm); scale(_count_8j55,norm); scale(_count_6j80,norm); scale(_count_7j80,norm); } private: /// @name Histograms //@{ AIDA::IHistogram1D* _etmisspT_55_NJ_6_obs; AIDA::IHistogram1D* _etmisspT_55_NJ_6_bac; AIDA::IHistogram1D* _etmisspT_55_NJ_6_sig; AIDA::IHistogram1D* _etmisspT_55_NJ_7_obs; AIDA::IHistogram1D* _etmisspT_55_NJ_7_bac; AIDA::IHistogram1D* _etmisspT_55_NJ_7_sig; AIDA::IHistogram1D* _etmisspT_55_NJ_8_obs; AIDA::IHistogram1D* _etmisspT_55_NJ_8_bac; AIDA::IHistogram1D* _etmisspT_55_NJ_8_sig; AIDA::IHistogram1D* _etmisspT_80_NJ_5_obs; AIDA::IHistogram1D* _etmisspT_80_NJ_5_bac; AIDA::IHistogram1D* _etmisspT_80_NJ_5_sig; AIDA::IHistogram1D* _etmisspT_80_NJ_6_obs; AIDA::IHistogram1D* _etmisspT_80_NJ_6_bac; AIDA::IHistogram1D* _etmisspT_80_NJ_6_sig; AIDA::IHistogram1D* _etmisspT_80_NJ_7_obs; AIDA::IHistogram1D* _etmisspT_80_NJ_7_bac; AIDA::IHistogram1D* _etmisspT_80_NJ_7_sig; AIDA::IHistogram1D* _njet55A_obs; AIDA::IHistogram1D* _njet55A_bac; AIDA::IHistogram1D* _njet55A_sig; AIDA::IHistogram1D* _njet55B_obs; AIDA::IHistogram1D* _njet55B_bac; AIDA::IHistogram1D* _njet55B_sig; AIDA::IHistogram1D* _njet55C_obs; AIDA::IHistogram1D* _njet55C_bac; AIDA::IHistogram1D* _njet55C_sig; AIDA::IHistogram1D* _njet80A_obs; AIDA::IHistogram1D* _njet80A_bac; AIDA::IHistogram1D* _njet80A_sig; AIDA::IHistogram1D* _njet80B_obs; AIDA::IHistogram1D* _njet80B_bac; AIDA::IHistogram1D* _njet80B_sig; AIDA::IHistogram1D* _njet80C_obs; AIDA::IHistogram1D* _njet80C_bac; AIDA::IHistogram1D* _njet80C_sig; AIDA::IHistogram1D* _count_7j55; AIDA::IHistogram1D* _count_8j55; AIDA::IHistogram1D* _count_6j80; AIDA::IHistogram1D* _count_7j80; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_S9225137); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1083318.cc0000644000175000017500000002344412116077757016301 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/MissingMomentum.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/LeptonClusters.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" namespace Rivet { class ATLAS_2012_I1083318 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_I1083318() : Analysis("ATLAS_2012_I1083318") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { FinalState fs; IdentifiedFinalState allleptons; allleptons.acceptIdPair(ELECTRON); allleptons.acceptIdPair(MUON); std::vector > etaRanges; etaRanges.push_back(make_pair(-2.5, 2.5)); LeptonClusters leptons(fs, allleptons, 0.1, true, etaRanges, 20.0*GeV); addProjection(leptons, "leptons"); // Leading neutrinos for Etmiss LeadingParticlesFinalState neutrinos(fs); neutrinos.addParticleIdPair(NU_E); neutrinos.addParticleIdPair(NU_MU); neutrinos.setLeadingOnly(true); addProjection(neutrinos, "neutrinos"); // Input for the jets: "Neutrinos, electrons, and muons from decays of the // massive W boson were not used" VetoedFinalState veto; veto.addVetoOnThisFinalState(leptons); veto.addVetoOnThisFinalState(neutrinos); FastJets jets(veto, FastJets::ANTIKT, 0.4); jets.useInvisibles(true); addProjection(jets, "jets"); for (size_t i=0; i<2; ++i) { _h_NjetIncl[i] = bookHistogram1D(1, 1, i+1); _h_RatioNjetIncl[i] = bookDataPointSet(2, 1, i+1); _h_FirstJetPt_1jet[i] = bookHistogram1D(3, 1, i+1); _h_FirstJetPt_2jet[i] = bookHistogram1D(4, 1, i+1); _h_FirstJetPt_3jet[i] = bookHistogram1D(5, 1, i+1); _h_FirstJetPt_4jet[i] = bookHistogram1D(6, 1, i+1); _h_SecondJetPt_2jet[i] = bookHistogram1D(7, 1, i+1); _h_SecondJetPt_3jet[i] = bookHistogram1D(8, 1, i+1); _h_SecondJetPt_4jet[i] = bookHistogram1D(9, 1, i+1); _h_ThirdJetPt_3jet[i] = bookHistogram1D(10, 1, i+1); _h_ThirdJetPt_4jet[i] = bookHistogram1D(11, 1, i+1); _h_FourthJetPt_4jet[i] = bookHistogram1D(12, 1, i+1); _h_Ht_1jet[i] = bookHistogram1D(13, 1, i+1); _h_Ht_2jet[i] = bookHistogram1D(14, 1, i+1); _h_Ht_3jet[i] = bookHistogram1D(15, 1, i+1); _h_Ht_4jet[i] = bookHistogram1D(16, 1, i+1); _h_Minv_2jet[i] = bookHistogram1D(17, 1, i+1); _h_Minv_3jet[i] = bookHistogram1D(18, 1, i+1); _h_Minv_4jet[i] = bookHistogram1D(19, 1, i+1); _h_JetRapidity[i] = bookHistogram1D(20, 1, i+1); _h_DeltaYElecJet[i] = bookHistogram1D(21, 1, i+1); _h_SumYElecJet[i] = bookHistogram1D(22, 1, i+1); _h_DeltaR_2jet[i] = bookHistogram1D(23, 1, i+1); _h_DeltaY_2jet[i] = bookHistogram1D(24, 1, i+1); _h_DeltaPhi_2jet[i] = bookHistogram1D(25, 1, i+1); } } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); const vector& leptons = applyProjection(event, "leptons").clusteredLeptons(); ParticleVector neutrinos = applyProjection(event, "neutrinos").particlesByPt(); if (leptons.size()!=1 || (neutrinos.size()==0)) { vetoEvent; } FourMomentum lepton=leptons[0].momentum(); FourMomentum p_miss = neutrinos[0].momentum(); if (p_miss.Et()<25.0*GeV) { vetoEvent; } double mT=sqrt(2.0*lepton.pT()*p_miss.Et()*(1.0-cos(lepton.phi()-p_miss.phi()))); if (mT<40.0*GeV) { vetoEvent; } double jetcuts[] = {30.0*GeV, 20.0*GeV}; const FastJets& jetpro = applyProjection(event, "jets"); for (size_t i=0; i<2; ++i) { vector jets; double HT=lepton.pT()+p_miss.pT(); foreach (const Jet& jet, jetpro.jetsByPt(jetcuts[i])) { if (fabs(jet.momentum().rapidity())<4.4 && deltaR(lepton, jet.momentum())>0.5) { jets.push_back(jet.momentum()); HT += jet.momentum().pT(); } } _h_NjetIncl[i]->fill(0.0, weight); // Njet>=1 observables if (jets.size()<1) continue; _h_NjetIncl[i]->fill(1.0, weight); _h_FirstJetPt_1jet[i]->fill(jets[0].pT(), weight); _h_JetRapidity[i]->fill(jets[0].rapidity(), weight); _h_Ht_1jet[i]->fill(HT, weight); _h_DeltaYElecJet[i]->fill(lepton.rapidity()-jets[0].rapidity(), weight); _h_SumYElecJet[i]->fill(lepton.rapidity()+jets[0].rapidity(), weight); // Njet>=2 observables if (jets.size()<2) continue; _h_NjetIncl[i]->fill(2.0, weight); _h_FirstJetPt_2jet[i]->fill(jets[0].pT(), weight); _h_SecondJetPt_2jet[i]->fill(jets[1].pT(), weight); _h_Ht_2jet[i]->fill(HT, weight); double m2_2jet = FourMomentum(jets[0]+jets[1]).mass2(); _h_Minv_2jet[i]->fill(m2_2jet>0.0 ? sqrt(m2_2jet) : 0.0, weight); _h_DeltaR_2jet[i]->fill(deltaR(jets[0], jets[1]), weight); _h_DeltaY_2jet[i]->fill(jets[0].rapidity()-jets[1].rapidity(), weight); _h_DeltaPhi_2jet[i]->fill(deltaPhi(jets[0], jets[1]), weight); // Njet>=3 observables if (jets.size()<3) continue; _h_NjetIncl[i]->fill(3.0, weight); _h_FirstJetPt_3jet[i]->fill(jets[0].pT(), weight); _h_SecondJetPt_3jet[i]->fill(jets[1].pT(), weight); _h_ThirdJetPt_3jet[i]->fill(jets[2].pT(), weight); _h_Ht_3jet[i]->fill(HT, weight); double m2_3jet = FourMomentum(jets[0]+jets[1]+jets[2]).mass2(); _h_Minv_3jet[i]->fill(m2_3jet>0.0 ? sqrt(m2_3jet) : 0.0, weight); // Njet>=4 observables if (jets.size()<4) continue; _h_NjetIncl[i]->fill(4.0, weight); _h_FirstJetPt_4jet[i]->fill(jets[0].pT(), weight); _h_SecondJetPt_4jet[i]->fill(jets[1].pT(), weight); _h_ThirdJetPt_4jet[i]->fill(jets[2].pT(), weight); _h_FourthJetPt_4jet[i]->fill(jets[3].pT(), weight); _h_Ht_4jet[i]->fill(HT, weight); double m2_4jet = FourMomentum(jets[0]+jets[1]+jets[2]+jets[3]).mass2(); _h_Minv_4jet[i]->fill(m2_4jet>0.0 ? sqrt(m2_4jet) : 0.0, weight); // Njet>=5 observables if (jets.size()<5) continue; _h_NjetIncl[i]->fill(5.0, weight); } } /// Normalise histograms etc., after the run void finalize() { for (size_t i=0; i<2; ++i) { // first construct jet multi ratio int Nbins = _h_NjetIncl[i]->axis().bins(); std::vector ratio(Nbins-1, 0.0); std::vector err(Nbins-1, 0.0); for (int n = 0; n < Nbins-1; ++n) { if (_h_NjetIncl[i]->binHeight(n) > 0.0 && _h_NjetIncl[i]->binHeight(n+1) > 0.0) { ratio[n] = _h_NjetIncl[i]->binHeight(n+1)/_h_NjetIncl[i]->binHeight(n); double relerr_n = _h_NjetIncl[i]->binError(n)/_h_NjetIncl[i]->binHeight(n); double relerr_m = _h_NjetIncl[i]->binError(n+1)/_h_NjetIncl[i]->binHeight(n+1); err[n] = ratio[n] * (relerr_n + relerr_m); } } _h_RatioNjetIncl[i]->setCoordinate(1, ratio, err); // scale all histos to the cross section double factor = crossSection()/sumOfWeights(); scale(_h_DeltaPhi_2jet[i], factor); scale(_h_DeltaR_2jet[i], factor); scale(_h_DeltaY_2jet[i], factor); scale(_h_DeltaYElecJet[i], factor); scale(_h_FirstJetPt_1jet[i], factor); scale(_h_FirstJetPt_2jet[i], factor); scale(_h_FirstJetPt_3jet[i], factor); scale(_h_FirstJetPt_4jet[i], factor); scale(_h_FourthJetPt_4jet[i], factor); scale(_h_Ht_1jet[i], factor); scale(_h_Ht_2jet[i], factor); scale(_h_Ht_3jet[i], factor); scale(_h_Ht_4jet[i], factor); scale(_h_JetRapidity[i], factor); scale(_h_Minv_2jet[i], factor); scale(_h_Minv_3jet[i], factor); scale(_h_Minv_4jet[i], factor); scale(_h_NjetIncl[i], factor); scale(_h_SecondJetPt_2jet[i], factor); scale(_h_SecondJetPt_3jet[i], factor); scale(_h_SecondJetPt_4jet[i], factor); scale(_h_SumYElecJet[i], factor); scale(_h_ThirdJetPt_3jet[i], factor); scale(_h_ThirdJetPt_4jet[i], factor); } } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_DeltaPhi_2jet[2]; AIDA::IHistogram1D *_h_DeltaR_2jet[2]; AIDA::IHistogram1D *_h_DeltaY_2jet[2]; AIDA::IHistogram1D *_h_DeltaYElecJet[2]; AIDA::IHistogram1D *_h_FirstJetPt_1jet[2]; AIDA::IHistogram1D *_h_FirstJetPt_2jet[2]; AIDA::IHistogram1D *_h_FirstJetPt_3jet[2]; AIDA::IHistogram1D *_h_FirstJetPt_4jet[2]; AIDA::IHistogram1D *_h_FourthJetPt_4jet[2]; AIDA::IHistogram1D *_h_Ht_1jet[2]; AIDA::IHistogram1D *_h_Ht_2jet[2]; AIDA::IHistogram1D *_h_Ht_3jet[2]; AIDA::IHistogram1D *_h_Ht_4jet[2]; AIDA::IHistogram1D *_h_JetRapidity[2]; AIDA::IHistogram1D *_h_Minv_2jet[2]; AIDA::IHistogram1D *_h_Minv_3jet[2]; AIDA::IHistogram1D *_h_Minv_4jet[2]; AIDA::IHistogram1D *_h_NjetIncl[2]; AIDA::IDataPointSet *_h_RatioNjetIncl[2]; AIDA::IHistogram1D *_h_SecondJetPt_2jet[2]; AIDA::IHistogram1D *_h_SecondJetPt_3jet[2]; AIDA::IHistogram1D *_h_SecondJetPt_4jet[2]; AIDA::IHistogram1D *_h_SumYElecJet[2]; AIDA::IHistogram1D *_h_ThirdJetPt_3jet[2]; AIDA::IHistogram1D *_h_ThirdJetPt_4jet[2]; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I1083318); } rivet-1.8.3/src/Analyses/ALEPH_2002_S4823664.cc0000644000175000017500000000505012116077757016301 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief ALEPH eta/omega fragmentation function paper /// @author Peter Richardson class ALEPH_2002_S4823664 : public Analysis { public: /// Constructor ALEPH_2002_S4823664() : Analysis("ALEPH_2002_S4823664") {} /// @name Analysis methods //@{ void init() { addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "FS"); addProjection(UnstableFinalState(), "UFS"); _histXpEta = bookHistogram1D( 2, 1, 2); _histXpOmega = bookHistogram1D( 3, 1, 2); } void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed leptonic event cut"); vetoEvent; } MSG_DEBUG("Passed leptonic event cut"); // Get event weight for histo filling const double weight = e.weight(); // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); // Final state of unstable particles to get particle spectra const UnstableFinalState& ufs = applyProjection(e, "UFS"); foreach (const Particle& p, ufs.particles()) { if(abs(p.pdgId())==221) { double xp = p.momentum().vector3().mod()/meanBeamMom; _histXpEta->fill(xp, weight); } else if(abs(p.pdgId())==223) { double xp = p.momentum().vector3().mod()/meanBeamMom; _histXpOmega->fill(xp, weight); } } } /// Finalize void finalize() { scale(_histXpEta , 1./sumOfWeights()); scale(_histXpOmega, 1./sumOfWeights()); } //@} private: AIDA::IHistogram1D *_histXpEta; AIDA::IHistogram1D *_histXpOmega; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ALEPH_2002_S4823664); } rivet-1.8.3/src/Analyses/CDF_2008_S7541902.cc0000644000175000017500000001610212116077757016045 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/InvMassFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include namespace Rivet { /// @brief CDF jet pT and multiplicity distributions in W + jets events /// /// This CDF analysis provides jet pT distributions for 4 jet multiplicity bins /// as well as the jet multiplicity distribution in W + jets events. /// e-Print: arXiv:0711.4044 [hep-ex] class CDF_2008_S7541902 : public Analysis { public: /// Constructor CDF_2008_S7541902() : Analysis("CDF_2008_S7541902"), _electronETCut(20.0*GeV), _electronETACut(1.1), _eTmissCut(30.0*GeV), _mTCut(20.0*GeV), _jetEtCutA(20.0*GeV), _jetEtCutB(25.0*GeV), _jetETA(2.0), _xpoint(1960.) { } /// @name Analysis methods //@{ void init() { // Set up projections // Basic FS FinalState fs(-3.6, 3.6); addProjection(fs, "FS"); // Create a final state with any e-nu pair with invariant mass 65 -> 95 GeV and ET > 20 (W decay products) vector > vids; vids += make_pair(ELECTRON, NU_EBAR); vids += make_pair(POSITRON, NU_E); FinalState fs2(-3.6, 3.6, 20*GeV); InvMassFinalState invfs(fs2, vids, 65*GeV, 95*GeV); addProjection(invfs, "INVFS"); // Make a final state without the W decay products for jet clustering VetoedFinalState vfs(fs); vfs.addVetoOnThisFinalState(invfs); addProjection(vfs, "VFS"); addProjection(FastJets(vfs, FastJets::CDFJETCLU, 0.4), "Jets"); // Book histograms for (int i = 0 ; i < 4 ; ++i) { _histJetEt[i] = bookHistogram1D(i+1, 1, 1); _histJetMultRatio[i] = bookDataPointSet(5 , 1, i+1); _histJetMult[i] = bookHistogram1D(i+6, 1, 1); } _histJetMultNorm = bookHistogram1D("norm", 1, _xpoint, _xpoint+1.); } /// Do the analysis void analyze(const Event& event) { // Get the W decay products (electron and neutrino) const InvMassFinalState& invMassFinalState = applyProjection(event, "INVFS"); const ParticleVector& wDecayProducts = invMassFinalState.particles(); FourMomentum electronP, neutrinoP; bool gotElectron(false), gotNeutrino(false); foreach (const Particle& p, wDecayProducts) { FourMomentum p4 = p.momentum(); if (p4.Et() > _electronETCut && fabs(p4.eta()) < _electronETACut && abs(p.pdgId()) == ELECTRON) { electronP = p4; gotElectron = true; } else if (p4.Et() > _eTmissCut && abs(p.pdgId()) == NU_E) { neutrinoP = p4; gotNeutrino = true; } } // Veto event if the electron or MET cuts fail if (!gotElectron || !gotNeutrino) vetoEvent; // Veto event if the MTR cut fails double mT2 = 2.0 * ( electronP.pT()*neutrinoP.pT() - electronP.px()*neutrinoP.px() - electronP.py()*neutrinoP.py() ); if (sqrt(mT2) < _mTCut ) vetoEvent; // Get the jets const JetAlg& jetProj = applyProjection(event, "Jets"); Jets theJets = jetProj.jetsByEt(_jetEtCutA); size_t njetsA(0), njetsB(0); foreach (const Jet& j, theJets) { const FourMomentum pj = j.momentum(); if (fabs(pj.rapidity()) < _jetETA) { // Fill differential histograms for top 4 jets with Et > 20 if (njetsA < 4 && pj.Et() > _jetEtCutA) { ++njetsA; _histJetEt[njetsA-1]->fill(pj.Et(), event.weight()); } // Count number of jets with Et > 25 (for multiplicity histograms) if (pj.Et() > _jetEtCutB) ++njetsB; } } // Jet multiplicity _histJetMultNorm->fill(_xpoint, event.weight()); for (size_t i = 1; i <= njetsB; ++i) { _histJetMult[i-1]->fill(_xpoint, event.weight()); if (i == 4) break; } } /// Finalize void finalize() { const double xsec = crossSection()/sumOfWeights(); // Get the x-axis for the ratio plots /// @todo Replace with autobooking etc. once YODA in place std::vector xval; xval.push_back(_xpoint); std::vector xerr; xerr.push_back(.5); // Fill the first ratio histogram using the special normalisation histogram for the total cross section double ratio1to0 = 0.; if (_histJetMultNorm->binHeight(0) > 0.) ratio1to0 = _histJetMult[0]->binHeight(0)/_histJetMultNorm->binHeight(0); // Get the fractional error on the ratio histogram double frac_err1to0 = 0.; if (_histJetMult[0]->binHeight(0) > 0.) frac_err1to0 = _histJetMult[0]->binError(0)/_histJetMult[0]->binHeight(0); if (_histJetMultNorm->binHeight(0) > 0.) { frac_err1to0 *= frac_err1to0; frac_err1to0 += pow(_histJetMultNorm->binError(0)/_histJetMultNorm->binHeight(0),2.); frac_err1to0 = sqrt(frac_err1to0); } /// @todo Replace with autobooking etc. once YODA in place vector yval[4]; yval[0].push_back(ratio1to0); vector yerr[4]; yerr[0].push_back(ratio1to0*frac_err1to0); _histJetMultRatio[0]->setCoordinate(0,xval,xerr); _histJetMultRatio[0]->setCoordinate(1,yval[0],yerr[0]); for (int i = 0; i < 4; ++i) { if (i < 3) { float ratio = 0.0; if (_histJetMult[i]->binHeight(0) > 0.0) ratio = _histJetMult[i+1]->binHeight(0)/_histJetMult[i]->binHeight(0); float frac_err = 0.0; if (_histJetMult[i]->binHeight(0) > 0.0) frac_err = _histJetMult[i]->binError(0)/_histJetMult[i]->binHeight(0); if (_histJetMult[i+1]->binHeight(0) > 0.0) { frac_err *= frac_err; frac_err += pow(_histJetMult[i+1]->binError(0)/_histJetMult[i+1]->binHeight(0),2.); frac_err = sqrt(frac_err); } yval[i+1].push_back(ratio); yerr[i+1].push_back(ratio*frac_err); _histJetMultRatio[i+1]->setCoordinate(0,xval,xerr); _histJetMultRatio[i+1]->setCoordinate(1,yval[i+1],yerr[i+1]); } _histJetEt[i]->scale(xsec); _histJetMult[i]->scale(xsec); } _histJetMultNorm->scale(xsec); } //@} private: /// @name Cuts //@{ /// Cut on the electron ET: double _electronETCut; /// Cut on the electron ETA: double _electronETACut; /// Cut on the missing ET double _eTmissCut; /// Cut on the transverse mass squared double _mTCut; /// Cut on the jet ET for differential cross sections double _jetEtCutA; /// Cut on the jet ET for jet multiplicity double _jetEtCutB; /// Cut on the jet ETA double _jetETA; //@} double _xpoint; /// @name Histograms //@{ AIDA::IHistogram1D* _histJetEt[4]; AIDA::IHistogram1D* _histJetMultNorm; AIDA::IDataPointSet* _histJetMultRatio[4]; AIDA::IHistogram1D* _histJetMult[4]; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2008_S7541902); } rivet-1.8.3/src/Analyses/CMS_QCD_10_024.cc0000644000175000017500000000632012116077757015741 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Particle.hh" namespace Rivet { class CMS_QCD_10_024 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor CMS_QCD_10_024() : Analysis("CMS_QCD_10_024"), _weight_pt05_eta08(0.), _weight_pt10_eta08(0.), _weight_pt05_eta24(0.), _weight_pt10_eta24(0.) { } void init() { addProjection(ChargedFinalState(-0.8, 0.8, 0.5*GeV), "CFS_08_05"); addProjection(ChargedFinalState(-0.8, 0.8, 1.0*GeV), "CFS_08_10"); addProjection(ChargedFinalState(-2.4, 2.4, 0.5*GeV), "CFS_24_05"); addProjection(ChargedFinalState(-2.4, 2.4, 1.0*GeV), "CFS_24_10"); size_t offset = 0; if (fuzzyEquals(sqrtS()/GeV, 7000, 1E-3)) offset = 0; if (fuzzyEquals(sqrtS()/GeV, 900, 1E-3)) offset = 4; _hist_dNch_deta_pt05_eta08 = bookHistogram1D(1+offset, 1, 1); _hist_dNch_deta_pt10_eta08 = bookHistogram1D(2+offset, 1, 1); _hist_dNch_deta_pt05_eta24 = bookHistogram1D(3+offset, 1, 1); _hist_dNch_deta_pt10_eta24 = bookHistogram1D(4+offset, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); const ChargedFinalState& cfs_08_05 = applyProjection(event, "CFS_08_05"); const ChargedFinalState& cfs_08_10 = applyProjection(event, "CFS_08_10"); const ChargedFinalState& cfs_24_05 = applyProjection(event, "CFS_24_05"); const ChargedFinalState& cfs_24_10 = applyProjection(event, "CFS_24_10"); // Plot distributions if(!cfs_08_05.particles().empty()) _weight_pt05_eta08 += weight; if(!cfs_24_05.particles().empty()) _weight_pt05_eta24 += weight; foreach (const Particle& p, cfs_24_05.particles()) { _hist_dNch_deta_pt05_eta24->fill(p.momentum().pseudorapidity(), weight); if(!cfs_08_05.particles().empty()) _hist_dNch_deta_pt05_eta08->fill(p.momentum().pseudorapidity(), weight); } if(!cfs_08_10.particles().empty()) _weight_pt10_eta08 += weight; if(!cfs_24_10.particles().empty()) _weight_pt10_eta24 += weight; foreach (const Particle& p, cfs_24_10.particles()) { _hist_dNch_deta_pt10_eta24->fill(p.momentum().pseudorapidity(), weight); if(!cfs_08_10.particles().empty()) _hist_dNch_deta_pt10_eta08->fill(p.momentum().pseudorapidity(), weight); } } /// Normalise histograms etc., after the run void finalize() { scale(_hist_dNch_deta_pt05_eta08,1./_weight_pt05_eta08); scale(_hist_dNch_deta_pt10_eta08,1./_weight_pt10_eta08); scale(_hist_dNch_deta_pt05_eta24,1./_weight_pt05_eta24); scale(_hist_dNch_deta_pt10_eta24,1./_weight_pt10_eta24); } private: AIDA::IHistogram1D *_hist_dNch_deta_pt05_eta08; AIDA::IHistogram1D *_hist_dNch_deta_pt10_eta08; AIDA::IHistogram1D *_hist_dNch_deta_pt05_eta24; AIDA::IHistogram1D *_hist_dNch_deta_pt10_eta24; double _weight_pt05_eta08,_weight_pt10_eta08,_weight_pt05_eta24,_weight_pt10_eta24; }; // Hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_QCD_10_024); } rivet-1.8.3/src/Analyses/BABAR_2003_I593379.cc0000644000175000017500000001475012116077757016200 0ustar sunsun// -*- C++ -*- #include #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief Babar chamronium spectra /// @author Peter Richardson class BABAR_2003_I593379 : public Analysis { public: BABAR_2003_I593379() : Analysis("BABAR_2003_I593379"), _weightSum(0.) { } void analyze(const Event& e) { const double weight = e.weight(); const UnstableFinalState& ufs = applyProjection(e, "UFS"); // find the upsilons ParticleVector upsilons; // first in unstable final state foreach (const Particle& p, ufs.particles()) if(p.pdgId()==300553) upsilons.push_back(p); // then in whole event if fails if(upsilons.empty()) { foreach (GenParticle* p, Rivet::particles(e.genEvent())) { if(p->pdg_id()!=300553) continue; const GenVertex* pv = p->production_vertex(); bool passed = true; if (pv) { for (GenVertex::particles_in_const_iterator pp = pv->particles_in_const_begin() ; pp != pv->particles_in_const_end() ; ++pp) { if ( p->pdg_id() == (*pp)->pdg_id() ) { passed = false; break; } } } if(passed) upsilons.push_back(Particle(*p)); } } // find an upsilons foreach (const Particle& p, upsilons) { _weightSum += weight; // find the charmonium resonances vector allJpsi,primaryJpsi,Psiprime, all_chi_c1,all_chi_c2,primary_chi_c1,primary_chi_c2; findDecayProducts(p.genParticle(),allJpsi,primaryJpsi,Psiprime, all_chi_c1,all_chi_c2,primary_chi_c1,primary_chi_c2); LorentzTransform cms_boost(-p.momentum().boostVector()); for(unsigned int ix=0;ixmomentum())).vector3().mod(); _hist_all_Jpsi->fill(pcm,weight); } _mult_JPsi->fill(10.58,weight*double(allJpsi.size())); for(unsigned int ix=0;ixmomentum())).vector3().mod(); _hist_primary_Jpsi->fill(pcm,weight); } _mult_JPsi_direct->fill(10.58,weight*double(primaryJpsi.size())); for(unsigned int ix=0;ixmomentum())).vector3().mod(); _hist_Psi_prime->fill(pcm,weight); } _mult_Psi2S->fill(10.58,weight*double(Psiprime.size())); for(unsigned int ix=0;ixmomentum())).vector3().mod(); _hist_chi_c1->fill(pcm,weight); } _mult_chi_c1->fill(10.58,weight*double(all_chi_c1.size())); _mult_chi_c1_direct->fill(10.58,weight*double(primary_chi_c1.size())); for(unsigned int ix=0;ixmomentum())).vector3().mod(); _hist_chi_c2->fill(pcm,weight); } _mult_chi_c2->fill(10.58,weight*double(all_chi_c2.size())); _mult_chi_c2_direct->fill(10.58,weight*double(primary_chi_c2.size())); } } // analyze void finalize() { scale(_hist_all_Jpsi ,0.5*0.1/_weightSum); scale(_hist_chi_c1 ,0.5*0.1/_weightSum); scale(_hist_chi_c2 ,0.5*0.1/_weightSum); scale(_hist_Psi_prime ,0.5*0.1/_weightSum); scale(_hist_primary_Jpsi,0.5*0.1/_weightSum); scale(_mult_JPsi ,0.5*100./_weightSum); scale(_mult_JPsi_direct ,0.5*100./_weightSum); scale(_mult_chi_c1 ,0.5*100./_weightSum); scale(_mult_chi_c1_direct,0.5*100./_weightSum); scale(_mult_chi_c2 ,0.5*100./_weightSum); scale(_mult_chi_c2_direct,0.5*100./_weightSum); scale(_mult_Psi2S ,0.5*100./_weightSum); } // finalize void init() { addProjection(UnstableFinalState(), "UFS"); _mult_JPsi = bookHistogram1D(1, 1, 1); _mult_JPsi_direct = bookHistogram1D(1, 1, 2); _mult_chi_c1 = bookHistogram1D(1, 1, 3); _mult_chi_c1_direct = bookHistogram1D(1, 1, 4); _mult_chi_c2 = bookHistogram1D(1, 1, 5); _mult_chi_c2_direct = bookHistogram1D(1, 1, 6); _mult_Psi2S = bookHistogram1D(1, 1, 7); _hist_all_Jpsi = bookHistogram1D(6, 1, 1); _hist_chi_c1 = bookHistogram1D(7, 1, 1); _hist_chi_c2 = bookHistogram1D(7, 1, 2); _hist_Psi_prime = bookHistogram1D(8, 1, 1); _hist_primary_Jpsi = bookHistogram1D(10, 1, 1); } // init private: //@{ // count of weights double _weightSum; /// Histograms AIDA::IHistogram1D* _hist_all_Jpsi; AIDA::IHistogram1D* _hist_chi_c1; AIDA::IHistogram1D* _hist_chi_c2; AIDA::IHistogram1D* _hist_Psi_prime; AIDA::IHistogram1D* _hist_primary_Jpsi; AIDA::IHistogram1D* _mult_JPsi; AIDA::IHistogram1D* _mult_JPsi_direct; AIDA::IHistogram1D* _mult_chi_c1; AIDA::IHistogram1D* _mult_chi_c1_direct; AIDA::IHistogram1D* _mult_chi_c2; AIDA::IHistogram1D* _mult_chi_c2_direct; AIDA::IHistogram1D* _mult_Psi2S; //@} void findDecayProducts(const GenParticle & p, vector & allJpsi, vector & primaryJpsi, vector & Psiprime, vector & all_chi_c1, vector & all_chi_c2, vector & primary_chi_c1, vector & primary_chi_c2) { const GenVertex* dv = p.end_vertex(); bool isOnium(false); for (GenVertex::particles_in_const_iterator pp = dv->particles_in_const_begin() ; pp != dv->particles_in_const_end() ; ++pp) { int id = (*pp)->pdg_id(); id = id%1000; id -= id%10; id /= 10; if(id==44) isOnium = true; } for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin(); pp != dv->particles_out_const_end(); ++pp) { int id = (*pp)->pdg_id(); if(id==100443) { Psiprime.push_back(*pp); } else if(id==20443) { all_chi_c1.push_back(*pp); if(!isOnium) primary_chi_c1.push_back(*pp); } else if(id==445) { all_chi_c2.push_back(*pp); if(!isOnium) primary_chi_c2.push_back(*pp); } else if(id==443) { allJpsi.push_back(*pp); if(!isOnium) primaryJpsi.push_back(*pp); } if((*pp)->end_vertex()) { findDecayProducts(**pp,allJpsi,primaryJpsi,Psiprime, all_chi_c1,all_chi_c2,primary_chi_c1,primary_chi_c2); } } } }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(BABAR_2003_I593379); } rivet-1.8.3/src/Analyses/OPAL_1997_S3396100.cc0000644000175000017500000001407712116077757016227 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief OPAL strange baryon paper /// @author Peter Richardson class OPAL_1997_S3396100 : public Analysis { public: /// Constructor OPAL_1997_S3396100() : Analysis("OPAL_1997_S3396100"), _weightedTotalNumLambda(0.) ,_weightedTotalNumXiMinus(0.), _weightedTotalNumSigma1385Plus(0.),_weightedTotalNumSigma1385Minus(0.), _weightedTotalNumXi1530(0.) ,_weightedTotalNumLambda1520(0.) {} /// @name Analysis methods //@{ void init() { addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "FS"); addProjection(UnstableFinalState(), "UFS"); _histXpLambda = bookHistogram1D( 1, 1, 1); _histXiLambda = bookHistogram1D( 2, 1, 1); _histXpXiMinus = bookHistogram1D( 3, 1, 1); _histXiXiMinus = bookHistogram1D( 4, 1, 1); _histXpSigma1385Plus = bookHistogram1D( 5, 1, 1); _histXiSigma1385Plus = bookHistogram1D( 6, 1, 1); _histXpSigma1385Minus = bookHistogram1D( 7, 1, 1); _histXiSigma1385Minus = bookHistogram1D( 8, 1, 1); _histXpXi1530 = bookHistogram1D( 9, 1, 1); _histXiXi1530 = bookHistogram1D(10, 1, 1); _histXpLambda1520 = bookHistogram1D(11, 1, 1); _histXiLambda1520 = bookHistogram1D(12, 1, 1); } void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed leptonic event cut"); vetoEvent; } MSG_DEBUG("Passed leptonic event cut"); // Get event weight for histo filling const double weight = e.weight(); // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); // Final state of unstable particles to get particle spectra const UnstableFinalState& ufs = applyProjection(e, "UFS"); foreach (const Particle& p, ufs.particles()) { const int id = abs(p.pdgId()); double xp = p.momentum().vector3().mod()/meanBeamMom; double xi = -log(xp); switch (id) { case 3312: _histXpXiMinus->fill(xp, weight); _histXiXiMinus->fill(xi, weight); _weightedTotalNumXiMinus += weight; break; case 3224: _histXpSigma1385Plus->fill(xp, weight); _histXiSigma1385Plus->fill(xi, weight); _weightedTotalNumSigma1385Plus += weight; break; case 3114: _histXpSigma1385Minus->fill(xp, weight); _histXiSigma1385Minus->fill(xi, weight); _weightedTotalNumSigma1385Minus += weight; break; case 3122: _histXpLambda->fill(xp, weight); _histXiLambda->fill(xi, weight); _weightedTotalNumLambda += weight; break; case 3324: _histXpXi1530->fill(xp, weight); _histXiXi1530->fill(xi, weight); _weightedTotalNumXi1530 += weight; break; case 3124: _histXpLambda1520->fill(xp, weight); _histXiLambda1520->fill(xi, weight); _weightedTotalNumLambda1520 += weight; break; } } } /// Finalize void finalize() { normalize(_histXpLambda , _weightedTotalNumLambda /sumOfWeights()); normalize(_histXiLambda , _weightedTotalNumLambda /sumOfWeights()); normalize(_histXpXiMinus , _weightedTotalNumXiMinus /sumOfWeights()); normalize(_histXiXiMinus , _weightedTotalNumXiMinus /sumOfWeights()); normalize(_histXpSigma1385Plus , _weightedTotalNumSigma1385Plus/sumOfWeights()); normalize(_histXiSigma1385Plus , _weightedTotalNumSigma1385Plus/sumOfWeights()); normalize(_histXpSigma1385Minus, _weightedTotalNumSigma1385Plus/sumOfWeights()); normalize(_histXiSigma1385Minus, _weightedTotalNumSigma1385Plus/sumOfWeights()); normalize(_histXpXi1530 , _weightedTotalNumXi1530 /sumOfWeights()); normalize(_histXiXi1530 , _weightedTotalNumXi1530 /sumOfWeights()); normalize(_histXpLambda1520 , _weightedTotalNumLambda1520 /sumOfWeights()); normalize(_histXiLambda1520 , _weightedTotalNumLambda1520 /sumOfWeights()); } //@} private: /// Store the weighted sums of numbers of charged / charged+neutral /// particles - used to calculate average number of particles for the /// inclusive single particle distributions' normalisations. double _weightedTotalNumLambda; double _weightedTotalNumXiMinus; double _weightedTotalNumSigma1385Plus; double _weightedTotalNumSigma1385Minus; double _weightedTotalNumXi1530; double _weightedTotalNumLambda1520; AIDA::IHistogram1D *_histXpLambda ; AIDA::IHistogram1D *_histXiLambda ; AIDA::IHistogram1D *_histXpXiMinus ; AIDA::IHistogram1D *_histXiXiMinus ; AIDA::IHistogram1D *_histXpSigma1385Plus ; AIDA::IHistogram1D *_histXiSigma1385Plus ; AIDA::IHistogram1D *_histXpSigma1385Minus; AIDA::IHistogram1D *_histXiSigma1385Minus; AIDA::IHistogram1D *_histXpXi1530 ; AIDA::IHistogram1D *_histXiXi1530 ; AIDA::IHistogram1D *_histXpLambda1520 ; AIDA::IHistogram1D *_histXiLambda1520 ; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(OPAL_1997_S3396100); } rivet-1.8.3/src/Analyses/DELPHI_2002_069_CONF_603.cc0000644000175000017500000000760412116077757017154 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" /// @todo Use inline PID functions instead #define IS_PARTON_PDGID(id) ( abs(id) <= 100 && abs(id) != 22 && (abs(id) < 11 || abs(id) > 18) ) #define IS_BHADRON_PDGID(id) ( ((abs(id)/100)%10 == 5) || (abs(id) >= 5000 && abs(id) <= 5999) ) namespace Rivet { /// @brief DELPHI b-fragmentation measurement /// @author Hendrik Hoeth class DELPHI_2002_069_CONF_603 : public Analysis { public: /// Constructor DELPHI_2002_069_CONF_603() : Analysis("DELPHI_2002_069_CONF_603") { } /// @name Analysis methods //@{ /// Book projections and histograms void init() { addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "FS"); _histXbprim = bookHistogram1D(1, 1, 1); _histXbweak = bookHistogram1D(2, 1, 1); _histMeanXbprim = bookProfile1D(4, 1, 1); _histMeanXbweak = bookProfile1D(5, 1, 1); } void analyze(const Event& e) { const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed ncharged cut"); vetoEvent; } MSG_DEBUG("Passed ncharged cut"); // Get event weight for histo filling const double weight = e.weight(); // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); foreach (const GenParticle* p, particles(e.genEvent())) { const GenVertex* pv = p->production_vertex(); const GenVertex* dv = p->end_vertex(); if (IS_BHADRON_PDGID(p->pdg_id())) { const double xp = p->momentum().e()/meanBeamMom; // If the B-hadron has a parton as parent, call it primary B-hadron: if (pv) { bool is_primary = false; for (GenVertex::particles_in_const_iterator pp = pv->particles_in_const_begin(); pp != pv->particles_in_const_end() ; ++pp) { if (IS_PARTON_PDGID((*pp)->pdg_id())) is_primary = true; } if (is_primary) { _histXbprim->fill(xp, weight); _histMeanXbprim->fill(_histMeanXbprim->binMean(0), xp, weight); } } // If the B-hadron has no B-hadron as a child, it decayed weakly: if (dv) { bool is_weak = true; for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin() ; pp != dv->particles_out_const_end() ; ++pp) { if (IS_BHADRON_PDGID((*pp)->pdg_id())) { is_weak = false; } } if (is_weak) { _histXbweak->fill(xp, weight); _histMeanXbweak->fill(_histMeanXbweak->binMean(0), xp, weight); } } } } } // Finalize void finalize() { normalize(_histXbprim); normalize(_histXbweak); } private: /// Store the weighted sums of numbers of charged / charged+neutral /// particles - used to calculate average number of particles for the /// inclusive single particle distributions' normalisations. AIDA::IHistogram1D *_histXbprim; AIDA::IHistogram1D *_histXbweak; AIDA::IProfile1D *_histMeanXbprim; AIDA::IProfile1D *_histMeanXbweak; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(DELPHI_2002_069_CONF_603); } rivet-1.8.3/src/Analyses/OPAL_1998_S3702294.cc0000644000175000017500000000526112116077757016230 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief OPAL f0,f2 and phi fragmentation function paper /// @author Peter Richardson class OPAL_1998_S3702294 : public Analysis { public: /// Constructor OPAL_1998_S3702294() : Analysis("OPAL_1998_S3702294") {} /// @name Analysis methods //@{ void init() { addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "FS"); addProjection(UnstableFinalState(), "UFS"); _histXpf0 = bookHistogram1D( 2, 1, 1); _histXpf2 = bookHistogram1D( 2, 1, 2); _histXpPhi = bookHistogram1D( 2, 1, 3); } void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed leptonic event cut"); vetoEvent; } MSG_DEBUG("Passed leptonic event cut"); // Get event weight for histo filling const double weight = e.weight(); // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); // Final state of unstable particles to get particle spectra const UnstableFinalState& ufs = applyProjection(e, "UFS"); foreach (const Particle& p, ufs.particles()) { const int id = abs(p.pdgId()); double xp = p.momentum().vector3().mod()/meanBeamMom; switch (id) { case 9010221: _histXpf0->fill(xp, weight); break; case 225: _histXpf2->fill(xp, weight); break; case 333: _histXpPhi->fill(xp, weight); break; } } } /// Finalize void finalize() { scale(_histXpf0 , 1./sumOfWeights()); scale(_histXpf2 , 1./sumOfWeights()); scale(_histXpPhi, 1./sumOfWeights()); } //@} private: AIDA::IHistogram1D *_histXpf0; AIDA::IHistogram1D *_histXpf2; AIDA::IHistogram1D *_histXpPhi; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(OPAL_1998_S3702294); } rivet-1.8.3/src/Analyses/ATLAS_2011_S8983313.cc0000644000175000017500000002162712116077757016326 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/RivetMT2.hh" namespace Rivet { class ATLAS_2011_S8983313 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2011_S8983313() : Analysis("ATLAS_2011_S8983313") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 10.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // veto region electrons std::vector > eta_v_e; eta_v_e.push_back(make_pair(-1.52,-1.37)); eta_v_e.push_back(make_pair( 1.37, 1.52)); IdentifiedFinalState veto_elecs(eta_v_e, 10.0*GeV); veto_elecs.acceptIdPair(ELECTRON); addProjection(veto_elecs, "veto_elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); VetoedFinalState vfs; vfs.addVetoPairId(MUON); /// Jet finder addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // all tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0),"cfs"); // for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); /// Book histograms _count_A = bookHistogram1D("count_A", 1, 0., 1.); _count_B = bookHistogram1D("count_B", 1, 0., 1.); _count_C = bookHistogram1D("count_C", 1, 0., 1.); _count_D = bookHistogram1D("count_D", 1, 0., 1.); _hist_meff_A = bookHistogram1D("m_eff_A", 30, 0., 3000.); _hist_mT2_B = bookHistogram1D("m_T2", 25, 0., 1000.); _hist_meff_CD = bookHistogram1D("m_eff_C_D", 30, 0., 3000.); _hist_eTmiss = bookHistogram1D("Et_miss", 20, 0., 1000.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); ParticleVector veto_e = applyProjection(event, "veto_elecs").particles(); if ( ! veto_e.empty() ) { MSG_DEBUG("electrons in veto region"); vetoEvent; } Jets cand_jets; foreach (const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 4.9 ) { cand_jets.push_back(jet); } } ParticleVector cand_e = applyProjection(event, "elecs").particlesByPt(); ParticleVector cand_mu; ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); foreach ( const Particle & mu, applyProjection(event, "muons").particlesByPt() ) { double pTinCone = -mu.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(mu.momentum(),track.momentum()) <= 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 1.8*GeV ) cand_mu.push_back(mu); } Jets cand_jets_2; foreach ( const Jet& jet, cand_jets ) { if ( fabs( jet.momentum().eta() ) >= 2.5 ) cand_jets_2.push_back( jet ); else { bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) cand_jets_2.push_back( jet ); } } ParticleVector recon_e, recon_mu; foreach ( const Particle & e, cand_e ) { bool away = true; foreach ( const Jet& jet, cand_jets_2 ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } if ( away ) recon_e.push_back( e ); } foreach ( const Particle & mu, cand_mu ) { bool away = true; foreach ( const Jet& jet, cand_jets_2 ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } if ( away ) recon_mu.push_back( mu ); } // pTmiss ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // final jet filter Jets recon_jets; foreach ( const Jet& jet, cand_jets_2 ) { if ( fabs( jet.momentum().eta() ) <= 2.5 ) recon_jets.push_back( jet ); } // now only use recon_jets, recon_mu, recon_e if ( ! ( recon_mu.empty() && recon_e.empty() ) ) { MSG_DEBUG("Charged leptons left after selection"); vetoEvent; } if ( eTmiss <= 100 * GeV ) { MSG_DEBUG("Not enough eTmiss: " << eTmiss << " < 100"); vetoEvent; } if ( recon_jets.empty() || recon_jets[0].momentum().pT() <= 120.0 * GeV ) { MSG_DEBUG("No hard leading jet in " << recon_jets.size() << " jets"); vetoEvent; } // ==================== observables ==================== // Njets, min_dPhi int Njets = 0; double min_dPhi = 999.999; double pTmiss_phi = pTmiss.phi(); foreach ( const Jet& jet, recon_jets ) { if ( jet.momentum().pT() > 40 * GeV ) { if ( Njets < 3 ) min_dPhi = min( min_dPhi, deltaPhi( pTmiss_phi, jet.momentum().phi() ) ); ++Njets; } } if ( Njets < 2 ) { MSG_DEBUG("Only " << Njets << " >40 GeV jets left"); vetoEvent; } if ( min_dPhi <= 0.4 ) { MSG_DEBUG("dPhi too small"); vetoEvent; } // m_eff double m_eff_2j = eTmiss + recon_jets[0].momentum().pT() + recon_jets[1].momentum().pT(); double m_eff_3j = recon_jets.size() < 3 ? -999.0 : m_eff_2j + recon_jets[2].momentum().pT(); // etmiss / m_eff double et_meff_2j = eTmiss / m_eff_2j; double et_meff_3j = eTmiss / m_eff_3j; FourMomentum a = recon_jets[0].momentum(); FourMomentum b = recon_jets[1].momentum(); double m_T2 = mT2::mT2( a, b, pTmiss, 0.0 ); // zero mass invisibles // ==================== FILL ==================== MSG_DEBUG( "Trying to fill " << Njets << ' ' << m_eff_2j << ' ' << et_meff_2j << ' ' << m_eff_3j << ' ' << et_meff_3j << ' ' << m_T2 ); _hist_eTmiss->fill(eTmiss, weight); // AAAAAAAAAA if ( et_meff_2j > 0.3 ) { _hist_meff_A->fill(m_eff_2j, weight); if ( m_eff_2j > 500 * GeV ) { MSG_DEBUG("Hits A"); _count_A->fill(0.5, weight); } } // BBBBBBBBBB _hist_mT2_B->fill(m_T2, weight); if ( m_T2 > 300 * GeV ) { MSG_DEBUG("Hits B"); _count_B->fill(0.5, weight); } // need 3 jets for C and D if ( Njets >= 3 && et_meff_3j > 0.25 ) { _hist_meff_CD->fill(m_eff_3j, weight); // CCCCCCCCCC if ( m_eff_3j > 500 * GeV ) { MSG_DEBUG("Hits C"); _count_C->fill(0.5, weight); } // DDDDDDDDDD if ( m_eff_3j > 1000 * GeV ) { MSG_DEBUG("Hits D"); _count_D->fill(0.5, weight); } } } //@} void finalize() { double norm = crossSection()/picobarn*35.0/sumOfWeights(); scale(_hist_meff_A ,100.*norm); scale(_hist_mT2_B ,100.*norm); scale(_hist_meff_CD, 40.*norm); scale(_hist_eTmiss , 50.*norm); } private: /// @name Histograms //@{ AIDA::IHistogram1D* _count_A; AIDA::IHistogram1D* _count_B; AIDA::IHistogram1D* _count_C; AIDA::IHistogram1D* _count_D; AIDA::IHistogram1D* _hist_meff_A; AIDA::IHistogram1D* _hist_mT2_B; AIDA::IHistogram1D* _hist_meff_CD; AIDA::IHistogram1D* _hist_eTmiss; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_S8983313); } rivet-1.8.3/src/Analyses/CDF_2008_S8093652.cc0000644000175000017500000000273612116077757016062 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief CDF dijet mass spectrum class CDF_2008_S8093652 : public Analysis { public: /// Constructor CDF_2008_S8093652() : Analysis("CDF_2008_S8093652") { } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; FastJets conefinder(fs, FastJets::CDFMIDPOINT, 0.7); addProjection(conefinder, "ConeFinder"); _h_m_dijet = bookHistogram1D(1, 1, 1); } /// Do the analysis void analyze(const Event & e) { const double weight = e.weight(); const JetAlg& jetpro = applyProjection(e, "ConeFinder"); const Jets& jets = jetpro.jetsByPt(); if (jets.size() < 2) vetoEvent; const FourMomentum j0(jets[0].momentum()); const FourMomentum j1(jets[1].momentum()); if (fabs(j1.rapidity()) > 1.0 || fabs(j0.rapidity()) > 1.0) { vetoEvent; } double mjj = FourMomentum(j0+j1).mass(); _h_m_dijet->fill(mjj, weight); } /// Finalize void finalize() { scale(_h_m_dijet, crossSection()/sumOfWeights()); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D* _h_m_dijet; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2008_S8093652); } rivet-1.8.3/src/Analyses/LHCB_2010_I867355.cc0000644000175000017500000000551212116077757016071 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Particle.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { class LHCB_2010_I867355 : public Analysis { public: LHCB_2010_I867355() : Analysis("LHCB_2010_I867355") { } void init() { //@ Results are presented for two different fragmentation functions, LEP and Tevatron. Therefore, we have two sets of histograms. _h_sigma_vs_eta_lep = bookHistogram1D(1, 1, 1); _h_sigma_vs_eta_tvt = bookHistogram1D(1, 1, 2); _h_sigma_total_lep = bookHistogram1D(2, 1, 1); _h_sigma_total_tvt = bookHistogram1D(2, 1, 2); } /// Perform the per-event analysis void analyze(const Event& event) { double weight = event.weight(); ParticleVector bhadrons; foreach (const GenParticle* p, particles(event.genEvent())) { if (!( PID::isHadron( p->pdg_id() ) && PID::hasBottom( p->pdg_id() )) ) continue; const GenVertex* dv = p->end_vertex(); bool hasBdaughter = false; if ( PID::isHadron( p->pdg_id() ) && PID::hasBottom( p->pdg_id() )) { // selecting b-hadrons if (dv) { for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin() ; pp != dv->particles_out_const_end() ; ++pp) { if (PID::isHadron( (*pp)->pdg_id() ) && PID::hasBottom( (*pp)->pdg_id() )) { hasBdaughter = true; } } } } if (hasBdaughter) continue; // continue if the daughter is another b-hadron bhadrons += Particle(*p); } foreach (const Particle& particle, bhadrons) { // take fabs() to use full statistics and then multiply weight by 0.5 because LHCb is single-sided double eta = fabs(particle.momentum().eta()); _h_sigma_vs_eta_lep->fill( eta, 0.5*weight ); _h_sigma_vs_eta_tvt->fill( eta, 0.5*weight ); _h_sigma_total_lep->fill( eta, 0.5*weight ); // histogram for full kinematic range _h_sigma_total_tvt->fill( eta, 0.5*weight ); // histogram for full kinematic range } } void finalize() { double norm = crossSection()/microbarn/sumOfWeights(); double binwidth = 4.; // integrated over full rapidity space from 2 to 6. // to get the avergae of b and bbar, we scale with 0.5 scale(_h_sigma_vs_eta_lep, 0.5*norm); scale(_h_sigma_vs_eta_tvt, 0.5*norm); scale(_h_sigma_total_lep, 0.5*norm*binwidth); scale(_h_sigma_total_tvt, 0.5*norm*binwidth); } private: AIDA::IHistogram1D *_h_sigma_total_lep; AIDA::IHistogram1D *_h_sigma_total_tvt; AIDA::IHistogram1D *_h_sigma_vs_eta_lep; AIDA::IHistogram1D *_h_sigma_vs_eta_tvt; }; // Hook for the plugin system DECLARE_RIVET_PLUGIN(LHCB_2010_I867355); } rivet-1.8.3/src/Analyses/PDG_HADRON_MULTIPLICITIES_RATIOS.cc0000644000175000017500000011335612116077757020721 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief Implementation of PDG hadron multiplicities as ratios to \f$ \pi^\pm \f$ multiplicity /// @author Holger Schulz class PDG_HADRON_MULTIPLICITIES_RATIOS : public Analysis { public: /// Constructor PDG_HADRON_MULTIPLICITIES_RATIOS() : Analysis("PDG_HADRON_MULTIPLICITIES_RATIOS") { _weightedTotalNumPiPlus = 0; } /// @name Analysis methods //@{ void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed leptonic event cut"); vetoEvent; } MSG_DEBUG("Passed leptonic event cut"); // Get event weight for histo filling const double weight = e.weight(); MSG_DEBUG("sqrt(S) = " << sqrtS()/GeV << " GeV"); // Final state of unstable particles to get particle spectra const UnstableFinalState& ufs = applyProjection(e, "UFS"); if (sqrtS()/GeV >= 9.5 && sqrtS()/GeV <= 10.5) { foreach (const Particle& p, ufs.particles()) { const PdgId id = abs(p.pdgId()); switch (id) { case 211: _weightedTotalNumPiPlus += weight; break; case 111: _histMeanMultiPi0->fill(_histMeanMultiPi0->binMean(0), weight); break; case 321: _histMeanMultiKPlus->fill(_histMeanMultiKPlus->binMean(0), weight); break; case 130: case 310: _histMeanMultiK0->fill(_histMeanMultiK0->binMean(0), weight); break; case 221: _histMeanMultiEta->fill(_histMeanMultiEta->binMean(0), weight); break; case 331: _histMeanMultiEtaPrime->fill(_histMeanMultiEtaPrime->binMean(0), weight); break; case 411: _histMeanMultiDPlus->fill(_histMeanMultiDPlus->binMean(0), weight); break; case 421: _histMeanMultiD0->fill(_histMeanMultiD0->binMean(0), weight); break; case 431: _histMeanMultiDPlus_s->fill(_histMeanMultiDPlus_s->binMean(0), weight); break; case 9010221: _histMeanMultiF0_980->fill(_histMeanMultiF0_980->binMean(0), weight); break; case 113: _histMeanMultiRho770_0->fill(_histMeanMultiRho770_0->binMean(0), weight); break; case 223: _histMeanMultiOmega782->fill(_histMeanMultiOmega782->binMean(0), weight); break; case 323: _histMeanMultiKStar892Plus->fill(_histMeanMultiKStar892Plus->binMean(0), weight); break; case 313: _histMeanMultiKStar892_0->fill(_histMeanMultiKStar892_0->binMean(0), weight); break; case 333: _histMeanMultiPhi1020->fill(_histMeanMultiPhi1020->binMean(0), weight); break; case 413: _histMeanMultiDStar2010Plus->fill(_histMeanMultiDStar2010Plus->binMean(0), weight); break; case 423: _histMeanMultiDStar2007_0->fill(_histMeanMultiDStar2007_0->binMean(0), weight); break; case 433: _histMeanMultiDStar_s2112Plus->fill(_histMeanMultiDStar_s2112Plus->binMean(0), weight); break; case 443: _histMeanMultiJPsi1S->fill(_histMeanMultiJPsi1S->binMean(0), weight); break; case 225: _histMeanMultiF2_1270->fill(_histMeanMultiF2_1270->binMean(0), weight); break; case 2212: _histMeanMultiP->fill(_histMeanMultiP->binMean(0), weight); break; case 3122: _histMeanMultiLambda->fill(_histMeanMultiLambda->binMean(0), weight); break; case 3212: _histMeanMultiSigma0->fill(_histMeanMultiSigma0->binMean(0), weight); break; case 3312: _histMeanMultiXiMinus->fill(_histMeanMultiXiMinus->binMean(0), weight); break; case 2224: _histMeanMultiDelta1232PlusPlus->fill(_histMeanMultiDelta1232PlusPlus->binMean(0), weight); break; case 3114: _histMeanMultiSigma1385Minus->fill(_histMeanMultiSigma1385Minus->binMean(0), weight); _histMeanMultiSigma1385PlusMinus->fill(_histMeanMultiSigma1385PlusMinus->binMean(0), weight); break; case 3224: _histMeanMultiSigma1385Plus->fill(_histMeanMultiSigma1385Plus->binMean(0), weight); _histMeanMultiSigma1385PlusMinus->fill(_histMeanMultiSigma1385PlusMinus->binMean(0), weight); break; case 3324: _histMeanMultiXi1530_0->fill(_histMeanMultiXi1530_0->binMean(0), weight); break; case 3334: _histMeanMultiOmegaMinus->fill(_histMeanMultiOmegaMinus->binMean(0), weight); break; case 4122: _histMeanMultiLambda_c_Plus->fill(_histMeanMultiLambda_c_Plus->binMean(0), weight); break; case 4222: case 4112: _histMeanMultiSigma_c_PlusPlus_0->fill(_histMeanMultiSigma_c_PlusPlus_0->binMean(0), weight); break; case 3124: _histMeanMultiLambda1520->fill(_histMeanMultiLambda1520->binMean(0), weight); break; } } } if (sqrtS()/GeV >= 29 && sqrtS()/GeV <= 35) { foreach (const Particle& p, ufs.particles()) { const PdgId id = abs(p.pdgId()); switch (id) { case 211: _weightedTotalNumPiPlus += weight; break; case 111: _histMeanMultiPi0->fill(_histMeanMultiPi0->binMean(0), weight); break; case 321: _histMeanMultiKPlus->fill(_histMeanMultiKPlus->binMean(0), weight); break; case 130: case 310: _histMeanMultiK0->fill(_histMeanMultiK0->binMean(0), weight); break; case 221: _histMeanMultiEta->fill(_histMeanMultiEta->binMean(0), weight); break; case 331: _histMeanMultiEtaPrime->fill(_histMeanMultiEtaPrime->binMean(0), weight); break; case 411: _histMeanMultiDPlus->fill(_histMeanMultiDPlus->binMean(0), weight); break; case 421: _histMeanMultiD0->fill(_histMeanMultiD0->binMean(0), weight); break; case 431: _histMeanMultiDPlus_s->fill(_histMeanMultiDPlus_s->binMean(0), weight); break; case 9010221: _histMeanMultiF0_980->fill(_histMeanMultiF0_980->binMean(0), weight); break; case 113: _histMeanMultiRho770_0->fill(_histMeanMultiRho770_0->binMean(0), weight); break; case 323: _histMeanMultiKStar892Plus->fill(_histMeanMultiKStar892Plus->binMean(0), weight); break; case 313: _histMeanMultiKStar892_0->fill(_histMeanMultiKStar892_0->binMean(0), weight); break; case 333: _histMeanMultiPhi1020->fill(_histMeanMultiPhi1020->binMean(0), weight); break; case 413: _histMeanMultiDStar2010Plus->fill(_histMeanMultiDStar2010Plus->binMean(0), weight); break; case 423: _histMeanMultiDStar2007_0->fill(_histMeanMultiDStar2007_0->binMean(0), weight); break; case 225: _histMeanMultiF2_1270->fill(_histMeanMultiF2_1270->binMean(0), weight); break; case 325: _histMeanMultiK2Star1430Plus->fill(_histMeanMultiK2Star1430Plus->binMean(0), weight); break; case 315: _histMeanMultiK2Star1430_0->fill(_histMeanMultiK2Star1430_0->binMean(0), weight); break; case 2212: _histMeanMultiP->fill(_histMeanMultiP->binMean(0), weight); break; case 3122: _histMeanMultiLambda->fill(_histMeanMultiLambda->binMean(0), weight); break; case 3312: _histMeanMultiXiMinus->fill(_histMeanMultiXiMinus->binMean(0), weight); break; case 3114: _histMeanMultiSigma1385Minus->fill(_histMeanMultiSigma1385Minus->binMean(0), weight); _histMeanMultiSigma1385PlusMinus->fill(_histMeanMultiSigma1385PlusMinus->binMean(0), weight); break; case 3224: _histMeanMultiSigma1385Plus->fill(_histMeanMultiSigma1385Plus->binMean(0), weight); _histMeanMultiSigma1385PlusMinus->fill(_histMeanMultiSigma1385PlusMinus->binMean(0), weight); break; case 3334: _histMeanMultiOmegaMinus->fill(_histMeanMultiOmegaMinus->binMean(0), weight); break; case 4122: _histMeanMultiLambda_c_Plus->fill(_histMeanMultiLambda_c_Plus->binMean(0), weight); break; } } } if (sqrtS()/GeV >= 89.5 && sqrtS()/GeV <= 91.8) { foreach (const Particle& p, ufs.particles()) { const PdgId id = abs(p.pdgId()); switch (id) { case 211: _weightedTotalNumPiPlus += weight; break; case 111: _histMeanMultiPi0->fill(_histMeanMultiPi0->binMean(0), weight); break; case 321: _histMeanMultiKPlus->fill(_histMeanMultiKPlus->binMean(0), weight); break; case 130: case 310: _histMeanMultiK0->fill(_histMeanMultiK0->binMean(0), weight); break; case 221: _histMeanMultiEta->fill(_histMeanMultiEta->binMean(0), weight); break; case 331: _histMeanMultiEtaPrime->fill(_histMeanMultiEtaPrime->binMean(0), weight); break; case 411: _histMeanMultiDPlus->fill(_histMeanMultiDPlus->binMean(0), weight); break; case 421: _histMeanMultiD0->fill(_histMeanMultiD0->binMean(0), weight); break; case 431: _histMeanMultiDPlus_s->fill(_histMeanMultiDPlus_s->binMean(0), weight); break; case 511: _histMeanMultiBPlus_B0_d->fill(_histMeanMultiBPlus_B0_d->binMean(0), weight); break; case 521: _histMeanMultiBPlus_B0_d->fill(_histMeanMultiBPlus_B0_d->binMean(0), weight); _histMeanMultiBPlus_u->fill(_histMeanMultiBPlus_u->binMean(0), weight); break; case 531: _histMeanMultiB0_s->fill(_histMeanMultiB0_s->binMean(0), weight); break; case 9010221: _histMeanMultiF0_980->fill(_histMeanMultiF0_980->binMean(0), weight); break; case 9000211: _histMeanMultiA0_980Plus->fill(_histMeanMultiA0_980Plus->binMean(0), weight); break; case 113: _histMeanMultiRho770_0->fill(_histMeanMultiRho770_0->binMean(0), weight); break; case 213: _histMeanMultiRho770Plus->fill(_histMeanMultiRho770Plus->binMean(0), weight); break; case 223: _histMeanMultiOmega782->fill(_histMeanMultiOmega782->binMean(0), weight); break; case 323: _histMeanMultiKStar892Plus->fill(_histMeanMultiKStar892Plus->binMean(0), weight); break; case 313: _histMeanMultiKStar892_0->fill(_histMeanMultiKStar892_0->binMean(0), weight); break; case 333: _histMeanMultiPhi1020->fill(_histMeanMultiPhi1020->binMean(0), weight); break; case 413: _histMeanMultiDStar2010Plus->fill(_histMeanMultiDStar2010Plus->binMean(0), weight); break; case 433: _histMeanMultiDStar_s2112Plus->fill(_histMeanMultiDStar_s2112Plus->binMean(0), weight); break; case 513: case 523: case 533: _histMeanMultiBStar->fill(_histMeanMultiBStar->binMean(0), weight); break; case 443: _histMeanMultiJPsi1S->fill(_histMeanMultiJPsi1S->binMean(0), weight); break; case 100443: _histMeanMultiPsi2S->fill(_histMeanMultiPsi2S->binMean(0), weight); break; case 553: _histMeanMultiUpsilon1S->fill(_histMeanMultiUpsilon1S->binMean(0), weight); break; case 20223: _histMeanMultiF1_1285->fill(_histMeanMultiF1_1285->binMean(0), weight); break; case 20333: _histMeanMultiF1_1420->fill(_histMeanMultiF1_1420->binMean(0), weight); break; case 445: _histMeanMultiChi_c1_3510->fill(_histMeanMultiChi_c1_3510->binMean(0), weight); break; case 225: _histMeanMultiF2_1270->fill(_histMeanMultiF2_1270->binMean(0), weight); break; case 335: _histMeanMultiF2Prime1525->fill(_histMeanMultiF2Prime1525->binMean(0), weight); break; case 315: _histMeanMultiK2Star1430_0->fill(_histMeanMultiK2Star1430_0->binMean(0), weight); break; case 515: case 525: case 535: _histMeanMultiBStarStar->fill(_histMeanMultiBStarStar->binMean(0), weight); break; case 10433: case 20433: _histMeanMultiDs1Plus->fill(_histMeanMultiDs1Plus->binMean(0), weight); break; case 435: _histMeanMultiDs2Plus->fill(_histMeanMultiDs2Plus->binMean(0), weight); break; case 2212: _histMeanMultiP->fill(_histMeanMultiP->binMean(0), weight); break; case 3122: _histMeanMultiLambda->fill(_histMeanMultiLambda->binMean(0), weight); break; case 3212: _histMeanMultiSigma0->fill(_histMeanMultiSigma0->binMean(0), weight); break; case 3112: _histMeanMultiSigmaMinus->fill(_histMeanMultiSigmaMinus->binMean(0), weight); _histMeanMultiSigmaPlusMinus->fill(_histMeanMultiSigmaPlusMinus->binMean(0), weight); break; case 3222: _histMeanMultiSigmaPlus->fill(_histMeanMultiSigmaPlus->binMean(0), weight); _histMeanMultiSigmaPlusMinus->fill(_histMeanMultiSigmaPlusMinus->binMean(0), weight); break; case 3312: _histMeanMultiXiMinus->fill(_histMeanMultiXiMinus->binMean(0), weight); break; case 2224: _histMeanMultiDelta1232PlusPlus->fill(_histMeanMultiDelta1232PlusPlus->binMean(0), weight); break; case 3114: _histMeanMultiSigma1385Minus->fill(_histMeanMultiSigma1385Minus->binMean(0), weight); _histMeanMultiSigma1385PlusMinus->fill(_histMeanMultiSigma1385PlusMinus->binMean(0), weight); break; case 3224: _histMeanMultiSigma1385Plus->fill(_histMeanMultiSigma1385Plus->binMean(0), weight); _histMeanMultiSigma1385PlusMinus->fill(_histMeanMultiSigma1385PlusMinus->binMean(0), weight); break; case 3324: _histMeanMultiXi1530_0->fill(_histMeanMultiXi1530_0->binMean(0), weight); break; case 3334: _histMeanMultiOmegaMinus->fill(_histMeanMultiOmegaMinus->binMean(0), weight); break; case 4122: _histMeanMultiLambda_c_Plus->fill(_histMeanMultiLambda_c_Plus->binMean(0), weight); break; case 5122: _histMeanMultiLambda_b_0->fill(_histMeanMultiLambda_b_0->binMean(0), weight); break; case 3124: _histMeanMultiLambda1520->fill(_histMeanMultiLambda1520->binMean(0), weight); break; } } } if (sqrtS()/GeV >= 130 && sqrtS()/GeV <= 200) { foreach (const Particle& p, ufs.particles()) { const PdgId id = abs(p.pdgId()); switch (id) { case 211: _weightedTotalNumPiPlus += weight; break; case 321: _histMeanMultiKPlus->fill(_histMeanMultiKPlus->binMean(0), weight); break; case 130: case 310: _histMeanMultiK0->fill(_histMeanMultiK0->binMean(0), weight); break; case 2212: _histMeanMultiP->fill(_histMeanMultiP->binMean(0), weight); break; case 3122: _histMeanMultiLambda->fill(_histMeanMultiLambda->binMean(0), weight); break; } } } } void init() { addProjection(ChargedFinalState(), "FS"); addProjection(UnstableFinalState(), "UFS"); if (sqrtS()/GeV >= 9.5 && sqrtS()/GeV <= 10.5) { _histMeanMultiPi0 = bookHistogram1D( 2, 1, 1); _histMeanMultiKPlus = bookHistogram1D( 3, 1, 1); _histMeanMultiK0 = bookHistogram1D( 4, 1, 1); _histMeanMultiEta = bookHistogram1D( 5, 1, 1); _histMeanMultiEtaPrime = bookHistogram1D( 6, 1, 1); _histMeanMultiDPlus = bookHistogram1D( 7, 1, 1); _histMeanMultiD0 = bookHistogram1D( 8, 1, 1); _histMeanMultiDPlus_s = bookHistogram1D( 9, 1, 1); _histMeanMultiF0_980 = bookHistogram1D(13, 1, 1); _histMeanMultiRho770_0 = bookHistogram1D(15, 1, 1); _histMeanMultiOmega782 = bookHistogram1D(17, 1, 1); _histMeanMultiKStar892Plus = bookHistogram1D(18, 1, 1); _histMeanMultiKStar892_0 = bookHistogram1D(19, 1, 1); _histMeanMultiPhi1020 = bookHistogram1D(20, 1, 1); _histMeanMultiDStar2010Plus = bookHistogram1D(21, 1, 1); _histMeanMultiDStar2007_0 = bookHistogram1D(22, 1, 1); _histMeanMultiDStar_s2112Plus = bookHistogram1D(23, 1, 1); _histMeanMultiJPsi1S = bookHistogram1D(25, 1, 1); _histMeanMultiF2_1270 = bookHistogram1D(31, 1, 1); _histMeanMultiP = bookHistogram1D(38, 1, 1); _histMeanMultiLambda = bookHistogram1D(39, 1, 1); _histMeanMultiSigma0 = bookHistogram1D(40, 1, 1); _histMeanMultiXiMinus = bookHistogram1D(44, 1, 1); _histMeanMultiDelta1232PlusPlus = bookHistogram1D(45, 1, 1); _histMeanMultiSigma1385Minus = bookHistogram1D(46, 1, 1); _histMeanMultiSigma1385Plus = bookHistogram1D(47, 1, 1); _histMeanMultiSigma1385PlusMinus = bookHistogram1D(48, 1, 1); _histMeanMultiXi1530_0 = bookHistogram1D(49, 1, 1); _histMeanMultiOmegaMinus = bookHistogram1D(50, 1, 1); _histMeanMultiLambda_c_Plus = bookHistogram1D(51, 1, 1); _histMeanMultiSigma_c_PlusPlus_0 = bookHistogram1D(53, 1, 1); _histMeanMultiLambda1520 = bookHistogram1D(54, 1, 1); } if (sqrtS()/GeV >= 29 && sqrtS()/GeV <= 35) { _histMeanMultiPi0 = bookHistogram1D( 2, 1, 2); _histMeanMultiKPlus = bookHistogram1D( 3, 1, 2); _histMeanMultiK0 = bookHistogram1D( 4, 1, 2); _histMeanMultiEta = bookHistogram1D( 5, 1, 2); _histMeanMultiEtaPrime = bookHistogram1D( 6, 1, 2); _histMeanMultiDPlus = bookHistogram1D( 7, 1, 2); _histMeanMultiD0 = bookHistogram1D( 8, 1, 2); _histMeanMultiDPlus_s = bookHistogram1D( 9, 1, 2); _histMeanMultiF0_980 = bookHistogram1D(13, 1, 2); _histMeanMultiRho770_0 = bookHistogram1D(15, 1, 2); _histMeanMultiKStar892Plus = bookHistogram1D(18, 1, 2); _histMeanMultiKStar892_0 = bookHistogram1D(19, 1, 2); _histMeanMultiPhi1020 = bookHistogram1D(20, 1, 2); _histMeanMultiDStar2010Plus = bookHistogram1D(21, 1, 2); _histMeanMultiDStar2007_0 = bookHistogram1D(22, 1, 2); _histMeanMultiF2_1270 = bookHistogram1D(31, 1, 2); _histMeanMultiK2Star1430Plus = bookHistogram1D(33, 1, 1); _histMeanMultiK2Star1430_0 = bookHistogram1D(34, 1, 1); _histMeanMultiP = bookHistogram1D(38, 1, 2); _histMeanMultiLambda = bookHistogram1D(39, 1, 2); _histMeanMultiXiMinus = bookHistogram1D(44, 1, 2); _histMeanMultiSigma1385Minus = bookHistogram1D(46, 1, 2); _histMeanMultiSigma1385Plus = bookHistogram1D(47, 1, 2); _histMeanMultiSigma1385PlusMinus = bookHistogram1D(48, 1, 2); _histMeanMultiOmegaMinus = bookHistogram1D(50, 1, 2); _histMeanMultiLambda_c_Plus = bookHistogram1D(51, 1, 2); } if (sqrtS()/GeV >= 89.5 && sqrtS()/GeV <= 91.8) { _histMeanMultiPi0 = bookHistogram1D( 2, 1, 3); _histMeanMultiKPlus = bookHistogram1D( 3, 1, 3); _histMeanMultiK0 = bookHistogram1D( 4, 1, 3); _histMeanMultiEta = bookHistogram1D( 5, 1, 3); _histMeanMultiEtaPrime = bookHistogram1D( 6, 1, 3); _histMeanMultiDPlus = bookHistogram1D( 7, 1, 3); _histMeanMultiD0 = bookHistogram1D( 8, 1, 3); _histMeanMultiDPlus_s = bookHistogram1D( 9, 1, 3); _histMeanMultiBPlus_B0_d = bookHistogram1D(10, 1, 1); _histMeanMultiBPlus_u = bookHistogram1D(11, 1, 1); _histMeanMultiB0_s = bookHistogram1D(12, 1, 1); _histMeanMultiF0_980 = bookHistogram1D(13, 1, 3); _histMeanMultiA0_980Plus = bookHistogram1D(14, 1, 1); _histMeanMultiRho770_0 = bookHistogram1D(15, 1, 3); _histMeanMultiRho770Plus = bookHistogram1D(16, 1, 1); _histMeanMultiOmega782 = bookHistogram1D(17, 1, 2); _histMeanMultiKStar892Plus = bookHistogram1D(18, 1, 3); _histMeanMultiKStar892_0 = bookHistogram1D(19, 1, 3); _histMeanMultiPhi1020 = bookHistogram1D(20, 1, 3); _histMeanMultiDStar2010Plus = bookHistogram1D(21, 1, 3); _histMeanMultiDStar_s2112Plus = bookHistogram1D(23, 1, 2); _histMeanMultiBStar = bookHistogram1D(24, 1, 1); _histMeanMultiJPsi1S = bookHistogram1D(25, 1, 2); _histMeanMultiPsi2S = bookHistogram1D(26, 1, 1); _histMeanMultiUpsilon1S = bookHistogram1D(27, 1, 1); _histMeanMultiF1_1285 = bookHistogram1D(28, 1, 1); _histMeanMultiF1_1420 = bookHistogram1D(29, 1, 1); _histMeanMultiChi_c1_3510 = bookHistogram1D(30, 1, 1); _histMeanMultiF2_1270 = bookHistogram1D(31, 1, 3); _histMeanMultiF2Prime1525 = bookHistogram1D(32, 1, 1); _histMeanMultiK2Star1430_0 = bookHistogram1D(34, 1, 2); _histMeanMultiBStarStar = bookHistogram1D(35, 1, 1); _histMeanMultiDs1Plus = bookHistogram1D(36, 1, 1); _histMeanMultiDs2Plus = bookHistogram1D(37, 1, 1); _histMeanMultiP = bookHistogram1D(38, 1, 3); _histMeanMultiLambda = bookHistogram1D(39, 1, 3); _histMeanMultiSigma0 = bookHistogram1D(40, 1, 2); _histMeanMultiSigmaMinus = bookHistogram1D(41, 1, 1); _histMeanMultiSigmaPlus = bookHistogram1D(42, 1, 1); _histMeanMultiSigmaPlusMinus = bookHistogram1D(43, 1, 1); _histMeanMultiXiMinus = bookHistogram1D(44, 1, 3); _histMeanMultiDelta1232PlusPlus = bookHistogram1D(45, 1, 2); _histMeanMultiSigma1385Minus = bookHistogram1D(46, 1, 3); _histMeanMultiSigma1385Plus = bookHistogram1D(47, 1, 3); _histMeanMultiSigma1385PlusMinus = bookHistogram1D(48, 1, 3); _histMeanMultiXi1530_0 = bookHistogram1D(49, 1, 2); _histMeanMultiOmegaMinus = bookHistogram1D(50, 1, 3); _histMeanMultiLambda_c_Plus = bookHistogram1D(51, 1, 3); _histMeanMultiLambda_b_0 = bookHistogram1D(52, 1, 1); _histMeanMultiLambda1520 = bookHistogram1D(54, 1, 2); } if (sqrtS()/GeV >= 130 && sqrtS()/GeV <= 200) { _histMeanMultiKPlus = bookHistogram1D( 3, 1, 4); _histMeanMultiK0 = bookHistogram1D( 4, 1, 4); _histMeanMultiP = bookHistogram1D(38, 1, 4); _histMeanMultiLambda = bookHistogram1D(39, 1, 4); } } // Finalize void finalize() { if (sqrtS()/GeV >= 9.5 && sqrtS()/GeV <= 10.5) { scale(_histMeanMultiPi0 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiKPlus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiK0 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiEta , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiEtaPrime , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiDPlus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiD0 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiDPlus_s , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiF0_980 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiRho770_0 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiOmega782 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiKStar892Plus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiKStar892_0 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiPhi1020 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiDStar2010Plus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiDStar2007_0 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiDStar_s2112Plus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiJPsi1S , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiF2_1270 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiP , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiLambda , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiSigma0 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiXiMinus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiDelta1232PlusPlus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiSigma1385Minus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiSigma1385Plus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiSigma1385PlusMinus, 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiXi1530_0 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiOmegaMinus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiLambda_c_Plus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiSigma_c_PlusPlus_0, 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiLambda1520 , 1.0/_weightedTotalNumPiPlus); } if (sqrtS()/GeV >= 29 && sqrtS()/GeV <= 35) { scale(_histMeanMultiPi0 , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiKPlus , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiK0 , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiEta , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiEtaPrime , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiDPlus , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiD0 , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiDPlus_s , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiF0_980 , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiRho770_0 , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiKStar892Plus , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiKStar892_0 , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiPhi1020 , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiDStar2010Plus , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiDStar2007_0 , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiF2_1270 , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiK2Star1430Plus , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiK2Star1430_0 , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiP , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiLambda , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiXiMinus , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiSigma1385Minus , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiSigma1385Plus , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiSigma1385PlusMinus, 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiOmegaMinus , 5.0/_weightedTotalNumPiPlus); scale(_histMeanMultiLambda_c_Plus , 5.0/_weightedTotalNumPiPlus); } if (sqrtS()/GeV >= 89.5 && sqrtS()/GeV <= 91.8) { scale(_histMeanMultiPi0 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiKPlus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiK0 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiEta , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiEtaPrime , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiDPlus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiD0 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiDPlus_s , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiBPlus_B0_d , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiBPlus_u , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiB0_s , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiF0_980 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiA0_980Plus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiRho770_0 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiRho770Plus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiOmega782 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiKStar892Plus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiKStar892_0 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiPhi1020 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiDStar2010Plus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiDStar_s2112Plus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiBStar , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiJPsi1S , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiPsi2S , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiUpsilon1S , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiF1_1285 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiF1_1420 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiChi_c1_3510 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiF2_1270 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiF2Prime1525 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiK2Star1430_0 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiBStarStar , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiDs1Plus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiDs2Plus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiP , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiLambda , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiSigma0 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiSigmaMinus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiSigmaPlus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiSigmaPlusMinus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiXiMinus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiDelta1232PlusPlus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiSigma1385Minus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiSigma1385Plus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiSigma1385PlusMinus, 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiXi1530_0 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiOmegaMinus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiLambda_c_Plus , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiLambda_b_0 , 1.0/_weightedTotalNumPiPlus); scale(_histMeanMultiLambda1520 , 1.0/_weightedTotalNumPiPlus); } if (sqrtS()/GeV >= 130 && sqrtS()/GeV <= 200) { scale(_histMeanMultiKPlus , 70.0/_weightedTotalNumPiPlus); scale(_histMeanMultiK0 , 70.0/_weightedTotalNumPiPlus); scale(_histMeanMultiP , 70.0/_weightedTotalNumPiPlus); scale(_histMeanMultiLambda , 70.0/_weightedTotalNumPiPlus); } } //@} private: double _weightedTotalNumPiPlus; AIDA::IHistogram1D *_histMeanMultiPi0; AIDA::IHistogram1D *_histMeanMultiKPlus; AIDA::IHistogram1D *_histMeanMultiK0; AIDA::IHistogram1D *_histMeanMultiEta; AIDA::IHistogram1D *_histMeanMultiEtaPrime; AIDA::IHistogram1D *_histMeanMultiDPlus; AIDA::IHistogram1D *_histMeanMultiD0; AIDA::IHistogram1D *_histMeanMultiDPlus_s; AIDA::IHistogram1D *_histMeanMultiBPlus_B0_d; AIDA::IHistogram1D *_histMeanMultiBPlus_u; AIDA::IHistogram1D *_histMeanMultiB0_s; AIDA::IHistogram1D *_histMeanMultiF0_980; AIDA::IHistogram1D *_histMeanMultiA0_980Plus; AIDA::IHistogram1D *_histMeanMultiRho770_0; AIDA::IHistogram1D *_histMeanMultiRho770Plus; AIDA::IHistogram1D *_histMeanMultiOmega782; AIDA::IHistogram1D *_histMeanMultiKStar892Plus; AIDA::IHistogram1D *_histMeanMultiKStar892_0; AIDA::IHistogram1D *_histMeanMultiPhi1020; AIDA::IHistogram1D *_histMeanMultiDStar2010Plus; AIDA::IHistogram1D *_histMeanMultiDStar2007_0; AIDA::IHistogram1D *_histMeanMultiDStar_s2112Plus; AIDA::IHistogram1D *_histMeanMultiBStar; AIDA::IHistogram1D *_histMeanMultiJPsi1S; AIDA::IHistogram1D *_histMeanMultiPsi2S; AIDA::IHistogram1D *_histMeanMultiUpsilon1S; AIDA::IHistogram1D *_histMeanMultiF1_1285; AIDA::IHistogram1D *_histMeanMultiF1_1420; AIDA::IHistogram1D *_histMeanMultiChi_c1_3510; AIDA::IHistogram1D *_histMeanMultiF2_1270; AIDA::IHistogram1D *_histMeanMultiF2Prime1525; AIDA::IHistogram1D *_histMeanMultiK2Star1430Plus; AIDA::IHistogram1D *_histMeanMultiK2Star1430_0; AIDA::IHistogram1D *_histMeanMultiBStarStar; AIDA::IHistogram1D *_histMeanMultiDs1Plus; AIDA::IHistogram1D *_histMeanMultiDs2Plus; AIDA::IHistogram1D *_histMeanMultiP; AIDA::IHistogram1D *_histMeanMultiLambda; AIDA::IHistogram1D *_histMeanMultiSigma0; AIDA::IHistogram1D *_histMeanMultiSigmaMinus; AIDA::IHistogram1D *_histMeanMultiSigmaPlus; AIDA::IHistogram1D *_histMeanMultiSigmaPlusMinus; AIDA::IHistogram1D *_histMeanMultiXiMinus; AIDA::IHistogram1D *_histMeanMultiDelta1232PlusPlus; AIDA::IHistogram1D *_histMeanMultiSigma1385Minus; AIDA::IHistogram1D *_histMeanMultiSigma1385Plus; AIDA::IHistogram1D *_histMeanMultiSigma1385PlusMinus; AIDA::IHistogram1D *_histMeanMultiXi1530_0; AIDA::IHistogram1D *_histMeanMultiOmegaMinus; AIDA::IHistogram1D *_histMeanMultiLambda_c_Plus; AIDA::IHistogram1D *_histMeanMultiLambda_b_0; AIDA::IHistogram1D *_histMeanMultiSigma_c_PlusPlus_0; AIDA::IHistogram1D *_histMeanMultiLambda1520; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(PDG_HADRON_MULTIPLICITIES_RATIOS); } rivet-1.8.3/src/Analyses/ALEPH_1999_S4193598.cc0000644000175000017500000000603312116077757016341 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/Beam.hh" #include "HepMC/GenParticle.h" #include "HepMC/GenVertex.h" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" bool hasDecayedTo(const HepMC::GenParticle* p, int id1, int id2) { bool decision = false; HepMC::GenVertex* decV = p->end_vertex(); std::vector decids; if (decV->particles_out_size() == 2) { for (HepMC::GenVertex::particles_out_const_iterator pp = decV->particles_out_const_begin() ; pp != decV->particles_out_const_end() ; ++pp) { decids.push_back(abs((*pp)->pdg_id())); } if ( (decids[0] == abs(id1) && decids[1] == abs(id2)) || (decids[1] == abs(id1) && decids[0] == abs(id2)) ) decision = true; }; return decision; } bool hasDecayedTo(const Rivet::Particle& p, int id1, int id2) { return hasDecayedTo(p.genParticle(), id1, id2); } namespace Rivet { class ALEPH_1999_S4193598 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ALEPH_1999_S4193598() : Analysis("ALEPH_1999_S4193598") { _sumWpassed = 0.0; } //@} public: /// Book histograms and initialise projections before the run void init() { addProjection(Beam(), "Beams"); addProjection(UnstableFinalState(), "UFS"); addProjection(ChargedFinalState(), "CFS"); _h_Xe_Ds = bookHistogram1D(1, 1, 1); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // Trigger condition const ChargedFinalState& cfs = applyProjection(event, "CFS"); if (cfs.size() < 5) vetoEvent; _sumWpassed += weight; const UnstableFinalState& ufs = applyProjection(event, "UFS"); // Get beams and average beam momentum const ParticlePair& beams = applyProjection(event, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0/GeV; foreach (const Particle& p, ufs.particles()) { const PdgId pid = abs(p.pdgId()); switch (pid) { case 413: // Accept all D*+- decays. Normalisation to D0 + pi+- in finalize() // Scaled energy. const double energy = p.momentum().E()/GeV; const double scaledEnergy = energy/meanBeamMom; _h_Xe_Ds->fill(scaledEnergy, weight); break; } } } /// Normalise histograms etc., after the run void finalize() { // Scale to the product of branching fractions D0*->D0 pi x D0->Kpi(charged) // Numbers are taken from PDG 2010 scale(_h_Xe_Ds, 0.677*0.0389/_sumWpassed); } private: double _sumWpassed; private: AIDA::IHistogram1D *_h_Xe_Ds; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ALEPH_1999_S4193598); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1094568.cc0000644000175000017500000003336212116077757016312 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" #include "Rivet/Projections/HadronicFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/LeptonClusters.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "LWH/AIManagedObject.h" #include "Rivet/Particle.hh" #include "HepMC/GenEvent.h" namespace Rivet { struct ATLAS_2012_I1094568_plots { // Keep track of which veto region this is, to match // the autobook-ed histograms int region_index; // lower rapidity boundary or veto region double y_low; // upper rapidity boundary or veto region double y_high; double vetoJetPt_Q0; double vetoJetPt_Qsum; // Histograms to store the veto jet pT and // sum(veto jet pT) histograms. AIDA::IHistogram1D* _h_vetoJetPt_Q0; AIDA::IHistogram1D* _h_vetoJetPt_Qsum; // DataPointSets for the gap fractions AIDA::IDataPointSet* _d_gapFraction_Q0; AIDA::IDataPointSet* _d_gapFraction_Qsum; }; class ATLAS_2012_I1094568 : public Analysis { public: /// Constructor ATLAS_2012_I1094568() : Analysis("ATLAS_2012_I1094568") {} public: /// Book histograms and initialise projections before the run void init() { const FinalState fs(-4.5, 4.5); addProjection(fs, "ALL_FS"); /// Get electrons from truth record IdentifiedFinalState elec_fs(-2.47, 2.47, 25.0*GeV); elec_fs.acceptIdPair(ELECTRON); addProjection(elec_fs, "ELEC_FS"); /// Get muons which pass the initial kinematic cuts: IdentifiedFinalState muon_fs(-2.5, 2.5, 20.0*GeV); muon_fs.acceptIdPair(MUON); addProjection(muon_fs, "MUON_FS"); /// Get all neutrinos. These will not be used to form jets. /// We'll use the highest 2 pT neutrinos to calculate the MET IdentifiedFinalState neutrino_fs(-4.5, 4.5, 0.0*GeV); neutrino_fs.acceptNeutrinos(); addProjection(neutrino_fs, "NEUTRINO_FS"); // Final state used as input for jet-finding. // We include everything except the muons and neutrinos VetoedFinalState jet_input(fs); jet_input.vetoNeutrinos(); jet_input.addVetoPairId(MUON); addProjection(jet_input, "JET_INPUT"); // Get the jets FastJets jets(jet_input, FastJets::ANTIKT, 0.4); addProjection(jets, "JETS"); for(int i=0; i<201; ++i) { double bin_edge = i*5; m_q0BinEdges += bin_edge; } m_total_weight = 0.0; m_plots[0].region_index = 1; m_plots[0].y_low = 0.0; m_plots[0].y_high = 0.8; InitializePlots(m_plots[0]); m_plots[1].region_index = 2; m_plots[1].y_low = 0.8; m_plots[1].y_high = 1.5; InitializePlots(m_plots[1]); m_plots[2].region_index = 3; m_plots[2].y_low = 1.5; m_plots[2].y_high = 2.1; InitializePlots(m_plots[2]); m_plots[3].region_index = 4; m_plots[3].y_low = 0.0; m_plots[3].y_high = 2.1; InitializePlots(m_plots[3]); } void InitializePlots(ATLAS_2012_I1094568_plots& plots) { int q0_index = 1; int qsum_index = 2; std::stringstream vetoPt_Q0_name; vetoPt_Q0_name << "vetoJetPt_Q0_" << plots.region_index; std::stringstream vetoPt_Qsum_name; vetoPt_Qsum_name << "vetoJetPt_Qsum_" << plots.region_index; plots._h_vetoJetPt_Q0 = bookHistogram1D(vetoPt_Q0_name.str(), m_q0BinEdges); plots._h_vetoJetPt_Qsum = bookHistogram1D(vetoPt_Qsum_name.str(), m_q0BinEdges); plots._d_gapFraction_Q0 = bookDataPointSet(plots.region_index, q0_index, 1); plots._d_gapFraction_Qsum = bookDataPointSet(plots.region_index, qsum_index, 1); plots.vetoJetPt_Q0 = 0.0; plots.vetoJetPt_Qsum = 0.0; } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); /// Get the various sets of final state particles const ParticleVector& elecFS = applyProjection(event, "ELEC_FS").particlesByPt(); const ParticleVector& muonFS = applyProjection(event, "MUON_FS").particlesByPt(); const ParticleVector& neutrinoFS = applyProjection(event, "NEUTRINO_FS").particlesByPt(); // Get all jets with pT > 25 GeV const Jets& jets = applyProjection(event, "JETS").jetsByPt(25.0*GeV); // Keep any jets that pass the initial rapidity cut vector central_jets; double rapMax = 2.4; foreach(const Jet& j, jets) { double rapidity = fabs(j.momentum().rapidity()); if(rapidity < rapMax) central_jets.push_back(&j); } // For each of the jets that pass the rapidity cut, only keep those that are not // too close to any leptons vector good_jets; foreach(const Jet* j, central_jets) { bool goodJet = true; foreach(const Particle& e, elecFS) { double elec_jet_dR = deltaR(e.momentum(), j->momentum()); if(elec_jet_dR < 0.4) goodJet = false; } foreach(const Particle& m, muonFS) { double muon_jet_dR = deltaR(m.momentum(), j->momentum()); if(muon_jet_dR < 0.4) goodJet = false; } if(goodJet == true) good_jets.push_back(j); } // Temporary fix to get B-hadrons in evgen files where they don't show up // in the UnstableFinalState projection // (e.g. mc10_7TeV.105200.T1_McAtNlo_Jimmy.evgen.EVNT.e598/) // This will be updated for MC12 to just use UnstableFinalState // (Thanks to Steve Bieniek for this!) std::vector B_hadrons; std::vector allParticles = particles(event.genEvent()); for(unsigned int i = 0; i < allParticles.size(); i++) { GenParticle* p = allParticles.at(i); if ( !(Rivet::PID::isHadron( p->pdg_id() ) && Rivet::PID::hasBottom( p->pdg_id() )) ) continue; if(p->momentum().perp()*GeV < 5) continue; B_hadrons.push_back(p); } // For each of the good jets, check whether any are b-jets vector b_jets; foreach(const Jet* j, good_jets) { bool isbJet = false; foreach(HepMC::GenParticle* b, B_hadrons) { FourMomentum hadron = b->momentum(); double hadron_jet_dR = deltaR(j->momentum(), hadron); if(hadron_jet_dR < 0.3) isbJet = true; } if(isbJet) b_jets.push_back(j); } // Check the good jets again and keep track of the "additional jets" // I.e. those which are not either of the 2 highest pT b-jets vector veto_jets; int n_bjets_matched = 0; foreach(const Jet* j, good_jets) { bool isBJet = false; foreach(const Jet* b, b_jets) { if(n_bjets_matched == 2) break; if(b == j){isBJet = true; ++ n_bjets_matched;} } if(!isBJet) veto_jets.push_back(j); } // Get the MET by taking the vector sum of all neutrinos double MET = 0; FourMomentum p_MET(0., 0., 0., 0.); foreach(const Particle& p, neutrinoFS) { p_MET = p_MET + p.momentum(); } MET = p_MET.pT(); // Now we have everything we need to start doing the event selections bool passed_ee = false; vector vetoJets_ee; // We want exactly 2 electrons... if(elecFS.size() == 2) { // ... with opposite sign charges. if(PID::charge(elecFS.at(0)) != PID::charge(elecFS.at(1))) { // Check the MET if(MET >= 40*GeV) { // Do some dilepton mass cuts double dilepton_mass = (elecFS.at(0).momentum() + elecFS.at(1).momentum()).mass(); if(dilepton_mass >= 15*GeV) { if(fabs(dilepton_mass - 91.0*GeV) >= 10.0*GeV) { // we need at least 2 b-jets if(b_jets.size() > 1) { // This event has passed all the cuts; passed_ee = true; } } } } } } bool passed_mumu = false; // Now do the same checks for the mumu channel vector vetoJets_mumu; // So we now want 2 good muons... if(muonFS.size() == 2) { // ...with opposite sign charges. if(PID::charge(muonFS.at(0)) != PID::charge(muonFS.at(1))) { // Check the MET if(MET >= 40*GeV) { // and do some di-muon mass cuts double dilepton_mass = (muonFS.at(0).momentum() + muonFS.at(1).momentum()).mass(); if(dilepton_mass >= 15*GeV) { if(fabs(dilepton_mass - 91.0*GeV) >= 10.0*GeV) { // Need atleast 2 b-jets if(b_jets.size() > 1) { // This event has passed all mumu-channel cuts passed_mumu = true; } } } } } } bool passed_emu = false; // Finally, the same again with the emu channel vector vetoJets_emu; // We want exactly 1 electron and 1 muon if(elecFS.size() == 1 && muonFS.size() == 1) { // With opposite sign charges if(PID::charge(elecFS.at(0)) != PID::charge(muonFS.at(0))) { // Calculate the HT from the scalar sum of the pT of the leptons // and all good jets double HT = 0; HT += fabs(elecFS.at(0).momentum().pT()); HT += fabs(muonFS.at(0).momentum().pT()); foreach(const Jet* j, good_jets) { HT += fabs(j->momentum().pT()); } // Keep events with HT > 130 GeV if(HT > 130.0*GeV) { // And again we want 2 or more b-jets if(b_jets.size() > 1) { passed_emu = true; } } } } if(passed_ee == true || passed_mumu == true || passed_emu == true) { // If the event passes the selection, we use it for all gap fractions m_total_weight += weight; // Loop over each veto jet foreach(const Jet* j, veto_jets) { double pt = j->momentum().pT(); double rapidity = fabs(j->momentum().rapidity()); // Loop over each region for(int i=0; i<4; ++i) { // If the jet falls into this region, get its pT and increment sum(pT) if( (rapidity > m_plots[i].y_low) && (rapidity < m_plots[i].y_high)) { m_plots[i].vetoJetPt_Qsum += pt; // If we've already got a veto jet, don't replace it if(m_plots[i].vetoJetPt_Q0 == 0.0) m_plots[i].vetoJetPt_Q0 = pt; } } } // end loop over veto jets for(int i=0; i<4; ++i) { m_plots[i]._h_vetoJetPt_Q0->fill(m_plots[i].vetoJetPt_Q0, weight); m_plots[i]._h_vetoJetPt_Qsum->fill(m_plots[i].vetoJetPt_Qsum, weight); ClearVetoJetPts(m_plots[i]); } } } void ClearVetoJetPts(ATLAS_2012_I1094568_plots& plots) { plots.vetoJetPt_Q0 = 0.0; plots.vetoJetPt_Qsum = 0.0; } /// Normalise histograms etc., after the run void finalize() { for(int i=0; i<4; ++i) { FinalizeGapFraction(m_total_weight, m_plots[i]._d_gapFraction_Q0, m_plots[i]._h_vetoJetPt_Q0, binEdges(i+1, 1, 1)); FinalizeGapFraction(m_total_weight, m_plots[i]._d_gapFraction_Qsum, m_plots[i]._h_vetoJetPt_Qsum, binEdges(i+1, 2, 1)); } } //void FinalizeGapFraction(double total_weight, ATLAS_2011_I1094568_plots& plots, int type) void FinalizeGapFraction(double total_weight, AIDA::IDataPointSet* gapFraction, AIDA::IHistogram1D* vetoPt, BinEdges fgap_binEdges) { // Stores the cumulative frequency of the veto jet pT histogram double vetoPtWeightSum = 0.0; // Keep track of which gap fraction point we're doing unsigned int fgap_point = 0; for(unsigned int i=0; ibinHeight(i); // If we've done the last point, stop. if(fgap_point == fgap_binEdges.size()-1) break; // Get the x-value of this gap fraction point, from the mid-point of the bin edges double binCentre = ( fgap_binEdges.at(fgap_point) + fgap_binEdges.at(fgap_point+1) ) / 2; double errorPlus = fgap_binEdges.at(fgap_point+1) - binCentre; double errorMinus = binCentre - fgap_binEdges.at(fgap_point); // If this Q0/Qsum point is not the cut value we need for this gap fraction point, continue if(m_q0BinEdges.at(i+1) != binCentre) continue; // Calculate the gap fraction and its uncertainty double fraction = vetoPtWeightSum/total_weight; double fraction_error = sqrt(fraction*(1.0-fraction)/total_weight); if(total_weight == 0.0) fraction = fraction_error = 0.0; // Set the point IDataPoint* currentPoint = gapFraction->point(fgap_point); IMeasurement* xCoord = currentPoint->coordinate(0); IMeasurement* yCoord = currentPoint->coordinate(1); xCoord->setValue(binCentre); xCoord->setErrorPlus(errorPlus); xCoord->setErrorMinus(errorMinus); yCoord->setValue(fraction); yCoord->setErrorPlus(fraction_error); yCoord->setErrorMinus(fraction_error); ++fgap_point; } tree().rm(tree().findPath(dynamic_cast(*vetoPt))); } private: // define the vetoJet pT binning std::vector m_q0BinEdges; double m_total_weight; private: ATLAS_2012_I1094568_plots m_plots[4]; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I1094568); } rivet-1.8.3/src/Analyses/ALICE_2012_I1181770.cc0000644000175000017500000000744712116077757016260 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" namespace Rivet { class ALICE_2012_I1181770 : public Analysis { public: ALICE_2012_I1181770() : Analysis("ALICE_2012_I1181770") { } void init() { // Projection setup addProjection(ChargedFinalState(), "CFS"); // Book (energy-specific) histograms _isqrts = -1; if (fuzzyEquals(sqrtS()/GeV, 900, 1E-3)) _isqrts = 1; else if (fuzzyEquals(sqrtS()/GeV, 2760, 1E-3)) _isqrts = 2; else if (fuzzyEquals(sqrtS()/GeV, 7000, 1E-3)) _isqrts = 3; assert(_isqrts > 0); _h_xsec_sd = bookHistogram1D(3, 1, _isqrts); _h_xsec_dd = bookHistogram1D(4, 1, _isqrts); _h_xsec_inel = bookHistogram1D(5, 1, _isqrts); } void analyze(const Event& event) { const ChargedFinalState& cfs = applyProjection(event, "CFS"); if (cfs.size() < 2) vetoEvent; // need at least two particles to calculate gaps const double weight = event.weight(); // Fill INEL plots for each event _h_xsec_inel->fill(sqrtS()/GeV, weight); // Identify particles with most positive/most negative rapidities const ParticleVector particlesByRap = cfs.particlesByRapidity(); const Particle pslowest = particlesByRap.front(); const Particle pfastest = particlesByRap.back(); // Find gap sizes const ParticleVector particlesByEta = cfs.particlesByEta(); // sorted from minus to plus const size_t num_particles = particlesByEta.size(); vector gaps; for (size_t ip = 1; ip < num_particles; ++ip) { const Particle& p1 = particlesByEta[ip-1]; const Particle& p2 = particlesByEta[ip]; const double gap = p2.momentum().eta() - p1.momentum().eta(); assert(gap >= 0); gaps.push_back(gap); } // First, last, and largest gaps const double gapmax = *max_element(gaps.begin(), gaps.end()); const double gapbwd = gaps.front(); const double gapfwd = gaps.back(); // Mx calculation FourMomentum p4lead; if (pslowest.pdgId() == PROTON && pfastest.pdgId() == PROTON) { p4lead = (fabs(pslowest.momentum().rapidity()) > fabs(pfastest.momentum().rapidity())) ? pslowest.momentum() : pfastest.momentum(); } else if (pslowest.pdgId() == PROTON) { p4lead = pslowest.momentum(); } else if (pfastest.pdgId() == PROTON) { p4lead = pfastest.momentum(); } const double Mx = sqrt( (sqrtS()-p4lead.E()-p4lead.vector3().mod()) * (sqrtS()-p4lead.E()+p4lead.vector3().mod()) ); // Fill SD (and escape) if Mx is sufficiently low if (Mx < 200*GeV) { _h_xsec_sd->fill(sqrtS()/GeV, weight); return; } // Also remove SD-like events in NSD events if (fuzzyEquals(gapbwd, gapmax) || fuzzyEquals(gapfwd, gapmax)) vetoEvent; // Fill DD plots if (gapmax > 3) _h_xsec_dd->fill(sqrtS()/GeV, weight); } void finalize() { // Make the ratio plots: SD/inel, DD/inel const string dir = histoDir(); const string ypart = "y0" + lexical_cast(_isqrts); histogramFactory().divide( dir + "/d01-x01-" + ypart, *_h_xsec_sd, *_h_xsec_inel); histogramFactory().divide( dir + "/d02-x01-" + ypart, *_h_xsec_dd, *_h_xsec_inel); scale(_h_xsec_sd, crossSection()/millibarn/sumOfWeights()); scale(_h_xsec_dd, crossSection()/millibarn/sumOfWeights()); scale(_h_xsec_inel, crossSection()/millibarn/sumOfWeights()); } private: AIDA::IHistogram1D *_h_xsec_sd; AIDA::IHistogram1D *_h_xsec_dd; AIDA::IHistogram1D *_h_xsec_inel; /// Energy index for histogram IDs int _isqrts; }; DECLARE_RIVET_PLUGIN(ALICE_2012_I1181770); } rivet-1.8.3/src/Analyses/D0_2007_S7075677.cc0000644000175000017500000000341212116077757015726 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ZFinder.hh" namespace Rivet { /// @brief Measurement of D0 Run II Z \f$ p_\perp \f$ diff cross-section shape /// @author Andy Buckley /// @author Gavin Hesketh /// @author Frank Siegert class D0_2007_S7075677 : public Analysis { public: /// Default constructor. D0_2007_S7075677() : Analysis("D0_2007_S7075677") { // Run II Z rapidity } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; ZFinder zfinder(fs, -MAXRAPIDITY, MAXRAPIDITY, 0.0*GeV, ELECTRON, 71.0*GeV, 111.0*GeV, 0.2, true, true); addProjection(zfinder, "ZFinder"); _h_yZ = bookHistogram1D(1, 1, 1); } /// Do the analysis void analyze(const Event & e) { const double weight = e.weight(); const ZFinder& zfinder = applyProjection(e, "ZFinder"); if (zfinder.bosons().size() == 1) { const ParticleVector& el(zfinder.constituents()); if (el[0].momentum().pT() > 25.0*GeV || el[1].momentum().pT() > 25.0*GeV) { double yZ = fabs(zfinder.bosons()[0].momentum().rapidity()); _h_yZ->fill(yZ, weight); } } else { MSG_DEBUG("No unique lepton pair found."); } } // Finalize void finalize() { // Data seems to have been normalized for the avg of the two sides // (+ve & -ve rapidity) rather than the sum, hence the 0.5: normalize(_h_yZ, 0.5); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_yZ; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2007_S7075677); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1126136.cc0000644000175000017500000002301412116077757016266 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Tools/RivetMT2.hh" namespace Rivet { class ATLAS_2012_I1126136 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_I1126136() : Analysis("ATLAS_2012_I1126136") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialize projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 20.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // Jet finder VetoedFinalState vfs; vfs.addVetoPairId(MUON); addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); // Book histograms _count_SR_A = bookHistogram1D("count_SR_A" , 1, 0., 1.); _count_SR_B = bookHistogram1D("count_SR_B" , 1, 0., 1.); _hist_mjjj1 = bookHistogram1D("hist_mjjj1" , 30 , 0. , 600. ); _hist_mjjj2 = bookHistogram1D("hist_mjjj2" , 30 , 0. , 600. ); _hist_ETmiss = bookHistogram1D("hist_ETmiss", 20 , 100. , 600. ); _hist_mT2 = bookHistogram1D("hist_mT2" , 200, 0. , 1000. ); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // pTmiss FourMomentum pTmiss; foreach ( const Particle & p, applyProjection(event, "vfs").particles() ) { pTmiss -= p.momentum(); } double ETmiss = pTmiss.perp(); // require eTmiss > 150 if(ETmiss<150.) vetoEvent; // get the candiate jets Jets cand_jets; foreach ( const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 4.5 ) { cand_jets.push_back(jet); } } // find the electrons ParticleVector cand_e; foreach( const Particle & e, applyProjection(event, "elecs").particlesByPt()) { // remove any leptons within 0.4 of any candidate jets bool e_near_jet = false; foreach ( const Jet& jet, cand_jets ) { double dR = deltaR(e.momentum(),jet.momentum()); if ( dR < 0.4 && dR > 0.2 ) { e_near_jet = true; break; } } if ( e_near_jet ) continue; cand_e.push_back(e); } // find the muons ParticleVector cand_mu; foreach( const Particle & mu, applyProjection(event, "muons").particlesByPt()) { // remove any leptons within 0.4 of any candidate jets bool mu_near_jet = false; foreach ( const Jet& jet, cand_jets ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) { mu_near_jet = true; break; } } if ( mu_near_jet ) continue; cand_mu.push_back(mu); } // veto events with leptons if( ! cand_e.empty() || ! cand_mu.empty() ) vetoEvent; // discard jets that overlap with electrons Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { if(fabs(jet.momentum().eta())>2.8 || jet.momentum().perp()<30.) continue; bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) recon_jets.push_back( jet ); } // find b jets Jets tight_bjets,loose_bjets; foreach(const Jet & jet, recon_jets) { if(!jet.containsBottom() && jet.momentum().eta()>2.5) continue; double prob = rand()/static_cast(RAND_MAX); if(prob <= 0.60) tight_bjets.push_back(jet); if(prob <= 0.75) loose_bjets.push_back(jet); } // require >=1 tight or >=2 loose b-jets if( ! ( !tight_bjets.empty() || loose_bjets.size()>=2) ) vetoEvent; // must be at least 6 jets with pT>30 if(recon_jets.size()<6 ) vetoEvent; // hardest > 130 if(recon_jets[0].momentum().perp() < 130. ) vetoEvent; // three hardest jets must be separated from etmiss for(unsigned int ix=0;ix<3;++ix) { if(deltaPhi(recon_jets[ix].momentum(),pTmiss)<0.2*PI) vetoEvent; } // remove events with tau like jets for(unsigned int ix=3;ix=0.2*PI) continue; // check the number of tracks between 1 and 4 unsigned int ncharged=0; foreach ( const Particle & particle, recon_jets[ix].particles()) { if(PID::threeCharge(particle.pdgId())!=0) ++ncharged; } if(ncharged==0 || ncharged>4) continue; // calculate transverse mass and reject if < 100 double mT = 2.*recon_jets[ix].momentum().perp()*ETmiss -recon_jets[ix].momentum().x()*pTmiss.x() -recon_jets[ix].momentum().y()*pTmiss.y(); if(mT<100.) vetoEvent; } // if 2 loose b-jets apply mT cut if(loose_bjets.size()>=2) { // find b-jet closest to eTmiss double minR(1e30); unsigned int ijet(0); for(unsigned int ix=0;ixfill(mjjj1,weight); _hist_mjjj2->fill(mjjj2,weight); // require triplets in 80270.||mjjj2<80.||mjjj2>270.) vetoEvent; // counts in signal regions _count_SR_A->fill(0.5,weight); if(ETmiss>260.) _count_SR_B->fill(0.5,weight); _hist_ETmiss->fill(ETmiss,weight); double m_T2 = mT2::mT2( pjjj1,pjjj2, pTmiss,0.0 ); // zero mass invisibles _hist_mT2->fill(m_T2,weight); } //@} void finalize() { double norm = 4.7* crossSection()/sumOfWeights()/femtobarn; scale(_count_SR_A , norm ); scale(_count_SR_B , norm ); scale(_hist_mjjj1 , 20.*norm ); scale(_hist_ETmiss, 50.*norm ); scale(_hist_mjjj2 , 20.*norm ); scale(_hist_mT2 , norm ); } private: /// @name Histograms //@{ AIDA::IHistogram1D* _count_SR_A; AIDA::IHistogram1D* _count_SR_B; AIDA::IHistogram1D* _hist_mjjj1; AIDA::IHistogram1D* _hist_mjjj2; AIDA::IHistogram1D* _hist_ETmiss; AIDA::IHistogram1D* _hist_mT2; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I1126136); } rivet-1.8.3/src/Analyses/CMS_2010_S8656010.cc0000644000175000017500000000505112116077757016063 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { class CMS_2010_S8656010 : public Analysis { public: CMS_2010_S8656010() : Analysis("CMS_2010_S8656010") {} void init() { ChargedFinalState cfs(-2.5, 2.5, 0.0*GeV); addProjection(cfs, "CFS"); for (int d=1; d<=3; d++) { for (int y=1; y<=4; y++) { _h_dNch_dpT.push_back(bookHistogram1D(d, 1, y)); } } _h_dNch_dpT_all = bookHistogram1D(4, 1, 1); _h_dNch_dEta = bookHistogram1D(5, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); //charged particles const ChargedFinalState& charged = applyProjection(event, "CFS"); foreach (const Particle& p, charged.particles()) { //selecting only charged hadrons if (! PID::isHadron(p.pdgId())) continue; const double pT = p.momentum().pT(); const double eta = p.momentum().eta(); // The data is actually a duplicated folded distribution. This should mimic it. _h_dNch_dEta->fill(eta, 0.5*weight); _h_dNch_dEta->fill(-eta, 0.5*weight); if (fabs(eta) < 2.4 && pT > 0.1*GeV) { if (pT < 6.0*GeV) { _h_dNch_dpT_all->fill(pT/GeV, weight/(pT/GeV)); if (pT < 2.0*GeV) { int ietabin = int(fabs(eta)/0.2); _h_dNch_dpT[ietabin]->fill(pT/GeV, weight); } } } } } void finalize() { const double normfac = 1.0/sumOfWeights(); // Normalizing to unit eta is automatic // The pT distributions in bins of eta must be normalized to unit eta. This is a factor of 2 // for the |eta| times 0.2 (eta range). // The pT distributions over all eta are normalized to unit eta (2.0*2.4) and by 1/2*pi*pT. // The 1/pT part is taken care of in the filling. The 1/2pi is taken care of here. const double normpT = normfac/(2.0*0.2); const double normpTall = normfac/(2.0*M_PI*2.0*2.4); for (size_t ietabin=0; ietabin < _h_dNch_dpT.size(); ietabin++){ scale(_h_dNch_dpT[ietabin], normpT); } scale(_h_dNch_dpT_all, normpTall); scale(_h_dNch_dEta, normfac); } private: std::vector _h_dNch_dpT; AIDA::IHistogram1D* _h_dNch_dpT_all; AIDA::IHistogram1D* _h_dNch_dEta; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2010_S8656010); } rivet-1.8.3/src/Analyses/CDF_1996_S3418421.cc0000644000175000017500000000615212116077757016063 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief CDF dijet angular distributions class CDF_1996_S3418421 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor CDF_1996_S3418421() : Analysis("CDF_1996_S3418421") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { FinalState fs(-4.2, 4.2); addProjection(FastJets(fs, FastJets::CDFJETCLU, 0.7), "Jets"); _h_chi.addHistogram(241.0, 300.0, bookHistogram1D(1, 1, 1)); _h_chi.addHistogram(300.0, 400.0, bookHistogram1D(1, 1, 2)); _h_chi.addHistogram(400.0, 517.0, bookHistogram1D(1, 1, 3)); _h_chi.addHistogram(517.0, 625.0, bookHistogram1D(1, 1, 4)); _h_chi.addHistogram(625.0, 1800.0, bookHistogram1D(1, 1, 5)); _h_ratio = bookDataPointSet(2,1,1,"","",""); _chi_above_25.resize(_h_ratio->size()); _chi_below_25.resize(_h_ratio->size()); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); Jets jets = applyProjection(event, "Jets").jetsByPt(50.0*GeV); if (jets.size()<2) { vetoEvent; } FourMomentum jet1 = jets[0].momentum(); FourMomentum jet2 = jets[1].momentum(); double eta1 = jet1.eta(); double eta2 = jet2.eta(); double chi = exp(fabs(eta1-eta2)); if (fabs(eta2)>2.0 || fabs(eta1)>2.0 || chi>5.0) { vetoEvent; } double m = FourMomentum(jet1+jet2).mass(); _h_chi.fill(m, chi, weight); // fill ratio counter if (m > _h_ratio->lowerExtent(0) && m < _h_ratio->upperExtent(0)) { int bin=-1; for (int i=0; i<_h_ratio->size(); ++i) { AIDA::IMeasurement* x = _h_ratio->point(i)->coordinate(0); if (m > x->value()-x->errorMinus() && m < x->value()+x->errorPlus()) { bin=i; break; } } if (bin>-1) { if (chi>2.5) _chi_above_25[bin] += weight; else _chi_below_25[bin] += weight; } } } /// Normalise histograms etc., after the run void finalize() { foreach (AIDA::IHistogram1D* hist, _h_chi.getHistograms()) { normalize(hist); } for (int bin=0; bin<_h_ratio->size(); ++bin) { _h_ratio->point(bin)->coordinate(1)->setValue(_chi_below_25[bin]/_chi_above_25[bin]); /// @todo calculate errors while analysing and fill them here as well } } //@} private: // Data members like post-cuts event weight counters go here std::vector _chi_above_25; std::vector _chi_below_25; private: /// @name Histograms //@{ BinnedHistogram _h_chi; AIDA::IDataPointSet* _h_ratio; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_1996_S3418421); } rivet-1.8.3/src/Analyses/MC_PHOTONKTSPLITTINGS.cc0000644000175000017500000000444412116077757017216 0ustar sunsun// -*- C++ -*- #include "Rivet/Analyses/MC_JetSplittings.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief MC validation analysis for photon + jets events class MC_PHOTONKTSPLITTINGS : public MC_JetSplittings { public: /// Default constructor MC_PHOTONKTSPLITTINGS() : MC_JetSplittings("MC_PHOTONKTSPLITTINGS", 4, "Jets") { } /// @name Analysis methods //@{ /// Book histograms void init() { // General FS FinalState fs(-5.0, 5.0); addProjection(fs, "FS"); // Get leading photon LeadingParticlesFinalState photonfs(FinalState(-1.0, 1.0, 30.0*GeV)); photonfs.addParticleId(PHOTON); addProjection(photonfs, "LeadingPhoton"); // FS for jets excludes the leading photon VetoedFinalState vfs(fs); vfs.addVetoOnThisFinalState(photonfs); addProjection(vfs, "JetFS"); FastJets jetpro(vfs, FastJets::KT, 0.6); addProjection(jetpro, "Jets"); MC_JetSplittings::init(); } /// Do the analysis void analyze(const Event& e) { // Get the photon const ParticleVector photons = applyProjection(e, "LeadingPhoton").particles(); if (photons.size() != 1) { vetoEvent; } const FourMomentum photon = photons.front().momentum(); // Get all charged particles const FinalState& fs = applyProjection(e, "JetFS"); if (fs.empty()) { vetoEvent; } // Isolate photon by ensuring that a 0.4 cone around it contains less than 7% of the photon's energy const double egamma = photon.E(); double econe = 0.0; foreach (const Particle& p, fs.particles()) { if (deltaR(photon, p.momentum()) < 0.4) { econe += p.momentum().E(); // Veto as soon as E_cone gets larger if (econe/egamma > 0.07) { vetoEvent; } } } MC_JetSplittings::analyze(e); } // Finalize void finalize() { MC_JetSplittings::finalize(); } //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_PHOTONKTSPLITTINGS); } rivet-1.8.3/src/Analyses/MC_HJETS.cc0000644000175000017500000000373712116077757015210 0ustar sunsun// -*- C++ -*- #include "Rivet/Analyses/MC_JetAnalysis.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief MC validation analysis for higgs [-> tau tau] + jets events class MC_HJETS : public MC_JetAnalysis { public: /// Default constructor MC_HJETS() : MC_JetAnalysis("MC_HJETS", 4, "Jets") { } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; ZFinder hfinder(fs, -3.5, 3.5, 25.0*GeV, TAU, 115.0*GeV, 125.0*GeV, 0.0, false, false); addProjection(hfinder, "Hfinder"); FastJets jetpro(hfinder.remainingFinalState(), FastJets::ANTIKT, 0.4); addProjection(jetpro, "Jets"); _h_H_jet1_deta = bookHistogram1D("H_jet1_deta", 50, -5.0, 5.0); _h_H_jet1_dR = bookHistogram1D("H_jet1_dR", 25, 0.5, 7.0); MC_JetAnalysis::init(); } /// Do the analysis void analyze(const Event & e) { const ZFinder& hfinder = applyProjection(e, "Hfinder"); if (hfinder.bosons().size()!=1) { vetoEvent; } const double weight = e.weight(); FourMomentum hmom(hfinder.bosons()[0].momentum()); const Jets& jets = applyProjection(e, "Jets").jetsByPt(m_jetptcut); if (jets.size() > 0) { _h_H_jet1_deta->fill(hmom.eta()-jets[0].momentum().eta(), weight); _h_H_jet1_dR->fill(deltaR(hmom, jets[0].momentum()), weight); } MC_JetAnalysis::analyze(e); } /// Finalize void finalize() { scale(_h_H_jet1_deta, crossSection()/sumOfWeights()); scale(_h_H_jet1_dR, crossSection()/sumOfWeights()); MC_JetAnalysis::finalize(); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_H_jet1_deta; AIDA::IHistogram1D * _h_H_jet1_dR; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_HJETS); } rivet-1.8.3/src/Analyses/CDF_1994_S2952106.cc0000644000175000017500000002126012116077757016060 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/MissingMomentum.hh" #include "LWH/Histogram1D.h" namespace Rivet { /// @brief CDF Run I color coherence analysis /// @author Andy Buckley /// @author Lars Sonnenschein class CDF_1994_S2952106 : public Analysis { public: /// Constructor CDF_1994_S2952106() : Analysis("CDF_1994_S2952106") { } /// @name Analysis methods //@{ void init() { const FinalState fs(-4.2, 4.2); addProjection(fs, "FS"); addProjection(FastJets(fs, FastJets::CDFJETCLU, 0.7), "Jets"); // Zero passed-cuts event weight counters _sumw = 0; // Output histograms _histJet1Et = bookHistogram1D(1,1,1); _histJet2Et = bookHistogram1D(2,1,1); _histJet3eta = bookDataPointSet(3,1,1); _histR23 = bookDataPointSet(4,1,1); _histAlpha = bookDataPointSet(5,1,1); // Temporary histos: these are the ones we actually fill for the plots which require correction _tmphistJet3eta.reset(new LWH::Histogram1D(binEdges(3,1,1))); _tmphistR23.reset( new LWH::Histogram1D(binEdges(4,1,1))); _tmphistAlpha.reset( new LWH::Histogram1D(binEdges(5,1,1))); } // Do the analysis void analyze(const Event & event) { const Jets jets = applyProjection(event, "Jets").jetsByEt(); MSG_DEBUG("Jet multiplicity before any cuts = " << jets.size()); // ETs only from jets: double et_sinphi_sum = 0; double et_cosphi_sum = 0; double et_sum = 0; for (size_t i = 0; i< jets.size(); ++i) { et_sinphi_sum += jets[i].momentum().Et() * sin(jets[i].phi()); et_cosphi_sum += jets[i].momentum().Et() * cos(jets[i].phi()); et_sum += jets[i].momentum().Et(); } // ET requirement if (sqrt(sqr(et_sinphi_sum) + sqr(et_cosphi_sum))/et_sum > 6.0) vetoEvent; // Check jet requirements if (jets.size() < 3) vetoEvent; if (jets[0].momentum().pT() < 110*GeV) vetoEvent; if (jets[2].momentum().pT() < 10*GeV) vetoEvent; // More jet 1,2,3 checks FourMomentum pj1(jets[0].momentum()), pj2(jets[1].momentum()), pj3(jets[2].momentum()); if (fabs(pj1.eta()) > 0.7 || fabs(pj2.eta()) > 0.7) vetoEvent; MSG_DEBUG("Jet 1 & 2 eta, pT requirements fulfilled"); // Require that jets are back-to-back within 20 degrees in phi if ((PI - deltaPhi(pj1.phi(), pj2.phi())) > (20/180.0)*PI) vetoEvent; MSG_DEBUG("Jet 1 & 2 phi requirement fulfilled"); const double weight = event.weight(); _sumw += weight; // Fill histos _histJet1Et->fill(pj1.pT(), weight); _histJet2Et->fill(pj2.pT(), weight); _tmphistJet3eta->fill(pj3.eta(), weight); _tmphistR23->fill(deltaR(pj2, pj3), weight); // Calc and plot alpha const double dPhi = deltaPhi(pj3.phi(), pj2.phi()); const double dH = sign(pj2.eta()) * (pj3.eta() - pj2.eta()); const double alpha = atan(dH/dPhi); _tmphistAlpha->fill(alpha*180./PI, weight); } /// Apply bin-wise detector correction factors void finalize() { // Normal scalings normalize(_histJet1Et, 12.3); normalize(_histJet2Et, 12.3); // eta3 correction const double eta3_CDF_sim[] = { 0.0013, 0.0037, 0.0047, 0.0071, 0.0093, 0.0117, 0.0151, 0.0149, 0.0197, 0.0257, 0.0344, 0.0409, 0.0481, 0.0454, 0.0394, 0.0409, 0.0387, 0.0387, 0.0322, 0.0313, 0.0290, 0.0309, 0.0412, 0.0417, 0.0412, 0.0397, 0.0417, 0.0414, 0.0376, 0.0316, 0.0270, 0.0186, 0.0186, 0.0132, 0.0127, 0.0106, 0.0071, 0.0040, 0.0020, 0.0013 }; const double eta3_CDF_sim_err[] = { 0.0009, 0.0009, 0.0007, 0.0007, 0.0007, 0.0010, 0.0012, 0.0012, 0.0013, 0.0016, 0.0017, 0.0020, 0.0020, 0.0022, 0.0020, 0.0020, 0.0018, 0.0018, 0.0016, 0.0017, 0.0017, 0.0019, 0.0020, 0.0021, 0.0020, 0.0020, 0.0019, 0.0020, 0.0018, 0.0017, 0.0017, 0.0014, 0.0014, 0.0009, 0.0010, 0.0009, 0.0009, 0.0008, 0.0008, 0.0009 }; const double eta3_Ideal_sim[] = { 0.0017, 0.0030, 0.0033, 0.0062, 0.0062, 0.0112, 0.0177, 0.0164, 0.0196, 0.0274, 0.0351, 0.0413, 0.0520, 0.0497, 0.0448, 0.0446, 0.0375, 0.0329, 0.0291, 0.0272, 0.0233, 0.0288, 0.0384, 0.0396, 0.0468, 0.0419, 0.0459, 0.0399, 0.0355, 0.0329, 0.0274, 0.0230, 0.0201, 0.0120, 0.0100, 0.0080, 0.0051, 0.0051, 0.0010, 0.0010 }; vector yval_eta3, yerr_eta3; for (size_t i = 0; i < 40; ++i) { const double yval = _tmphistJet3eta->binHeight(i) * (eta3_CDF_sim[i]/eta3_Ideal_sim[i]); yval_eta3.push_back(yval/_sumw); const double yerr = _tmphistJet3eta->binError(i) * (eta3_CDF_sim_err[i]/eta3_Ideal_sim[i]); yerr_eta3.push_back(yerr/_sumw); } _histJet3eta->setCoordinate(1, yval_eta3, yerr_eta3); // R23 correction const double R23_CDF_sim[] = { 0.0005, 0.0161, 0.0570, 0.0762, 0.0723, 0.0705, 0.0598, 0.0563, 0.0557, 0.0579, 0.0538, 0.0522, 0.0486, 0.0449, 0.0418, 0.0361, 0.0326, 0.0304, 0.0252, 0.0212, 0.0173, 0.0176, 0.0145, 0.0127, 0.0103, 0.0065, 0.0049, 0.0045, 0.0035, 0.0029, 0.0024, 0.0014, 0.0011, 0.0010, 0.0009 }; const double R23_CDF_sim_err[] = { 0.0013, 0.0009, 0.0022, 0.0029, 0.0026, 0.0024, 0.0022, 0.0025, 0.0023, 0.0024, 0.0021, 0.0021, 0.0021, 0.0021, 0.0021, 0.0019, 0.0019, 0.0016, 0.0017, 0.0014, 0.0010, 0.0014, 0.0012, 0.0013, 0.0010, 0.0011, 0.0010, 0.0010, 0.0010, 0.0011, 0.0011, 0.0009, 0.0008, 0.0008, 0.0009 }; const double R23_Ideal_sim[] = { 0.0005, 0.0176, 0.0585, 0.0862, 0.0843, 0.0756, 0.0673, 0.0635, 0.0586, 0.0619, 0.0565, 0.0515, 0.0466, 0.0472, 0.0349, 0.0349, 0.0266, 0.0254, 0.0204, 0.0179, 0.0142, 0.0134, 0.0101, 0.0090, 0.0080, 0.0034, 0.0030, 0.0033, 0.0027, 0.0021, 0.0012, 0.0006, 0.0004, 0.0005, 0.0003 }; vector yval_R23, yerr_R23; for (size_t i = 0; i < 35; ++i) { const double yval = _tmphistR23->binHeight(i) * (R23_CDF_sim[i]/R23_Ideal_sim[i]); yval_R23.push_back(yval/_sumw); const double yerr = _tmphistR23->binError(i) * (R23_CDF_sim_err[i]/R23_Ideal_sim[i]); yerr_R23.push_back(yerr/_sumw); } _histR23->setCoordinate(1, yval_R23, yerr_R23); // alpha correction const double alpha_CDF_sim[] = { 0.0517, 0.0461, 0.0490, 0.0452, 0.0451, 0.0435, 0.0317, 0.0287, 0.0294, 0.0261, 0.0231, 0.0220, 0.0233, 0.0192, 0.0213, 0.0166, 0.0176, 0.0146, 0.0136, 0.0156, 0.0142, 0.0152, 0.0151, 0.0147, 0.0164, 0.0186, 0.0180, 0.0210, 0.0198, 0.0189, 0.0197, 0.0211, 0.0270, 0.0236, 0.0243, 0.0269, 0.0257, 0.0276, 0.0246, 0.0286 }; const double alpha_CDF_sim_err[] = { 0.0024, 0.0025, 0.0024, 0.0024, 0.0024, 0.0022, 0.0019, 0.0018, 0.0019, 0.0016, 0.0017, 0.0017, 0.0019, 0.0013, 0.0017, 0.0014, 0.0016, 0.0013, 0.0012, 0.0009, 0.0014, 0.0014, 0.0014, 0.0014, 0.0014, 0.0015, 0.0014, 0.0016, 0.0016, 0.0015, 0.0016, 0.0016, 0.0019, 0.0017, 0.0019, 0.0018, 0.0018, 0.0018, 0.0018, 0.0019 }; const double alpha_Ideal_sim[] = { 0.0552, 0.0558, 0.0583, 0.0550, 0.0495, 0.0433, 0.0393, 0.0346, 0.0331, 0.0296, 0.0258, 0.0196, 0.0171, 0.0179, 0.0174, 0.0141, 0.0114, 0.0096, 0.0076, 0.0087, 0.0099, 0.0079, 0.0102, 0.0114, 0.0124, 0.0130, 0.0165, 0.0160, 0.0177, 0.0190, 0.0232, 0.0243, 0.0238, 0.0248, 0.0235, 0.0298, 0.0292, 0.0291, 0.0268, 0.0316 }; vector yval_alpha, yerr_alpha; for (size_t i = 0; i < 40; ++i) { const double yval = _tmphistAlpha->binHeight(i) * (alpha_CDF_sim[i]/alpha_Ideal_sim[i]); yval_alpha.push_back(yval/_sumw); const double yerr = _tmphistAlpha->binError(i) * (alpha_CDF_sim_err[i]/alpha_Ideal_sim[i]); yerr_alpha.push_back(yerr/_sumw); } _histAlpha->setCoordinate(1, yval_alpha, yerr_alpha); } //@} private: /// @name Event weight counters //@{ double _sumw; //@} /// @name Histograms //@{ /// Straightforward output histos AIDA::IHistogram1D *_histJet1Et, *_histJet2Et; /// Output histos which need to have correction factors applied AIDA::IDataPointSet *_histR23, *_histJet3eta, *_histAlpha; /// Temporary histos, to be converted to DPSes shared_ptr _tmphistR23, _tmphistJet3eta, _tmphistAlpha; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_1994_S2952106); } rivet-1.8.3/src/Analyses/ALICE_2010_S8625980.cc0000644000175000017500000000403512116077757016273 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" namespace Rivet { class ALICE_2010_S8625980 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ALICE_2010_S8625980() : Analysis("ALICE_2010_S8625980"), _Nevt_after_cuts(0.0) { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { ChargedFinalState cfs(-1.0, 1.0); addProjection(cfs, "CFS"); if (fuzzyEquals(sqrtS()/GeV, 900, 1E-3)) { _h_dN_deta = bookHistogram1D(4, 1, 1); } else if (fuzzyEquals(sqrtS()/GeV, 2360, 1E-3)) { _h_dN_deta = bookHistogram1D(5, 1, 1); } else if (fuzzyEquals(sqrtS()/GeV, 7000, 1E-3)) { _h_dN_deta = bookHistogram1D(6, 1, 1); _h_dN_dNch = bookHistogram1D(3, 1, 1); } } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); const ChargedFinalState& charged = applyProjection(event, "CFS"); if (charged.size() < 1) { vetoEvent; } _Nevt_after_cuts += weight; foreach (const Particle& p, charged.particles()) { const double eta = p.momentum().pseudorapidity(); _h_dN_deta->fill(eta, weight); } if (fuzzyEquals(sqrtS()/GeV, 7000, 1E-3)) { _h_dN_dNch->fill(charged.size(), weight); } } /// Normalise histograms etc., after the run void finalize() { if (fuzzyEquals(sqrtS()/GeV, 7000, 1E-3)) { normalize(_h_dN_dNch); } scale(_h_dN_deta, 1.0/_Nevt_after_cuts); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_dN_deta; AIDA::IHistogram1D *_h_dN_dNch; double _Nevt_after_cuts; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ALICE_2010_S8625980); } rivet-1.8.3/src/Analyses/ATLAS_2011_S9041966.cc0000644000175000017500000004613712116077757016331 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// 1-lepton and 2-lepton search for first or second generation leptoquarks /// @todo Clean up the debug stuff class ATLAS_2011_S9041966 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2011_S9041966() : Analysis("ATLAS_2011_S9041966"), // DEBUG count(0), vetoe(0), Njetscut(0), dilept(0), candmumujj(0), candeejj(0), onelept(0), eTmisscut(0), candmvjj(0), candevjj(0), mumujj(0), eejj(0), mTonelept(0), MLQonelept(0), MtLQonelept(0), Stvonelept(0), mTev(0), MLQev(0), MtLQev(0), Stvev(0), muvjj(0), evjj(0), emuvjj(0), cande(0), candmu(0), tmpe(0), tmpmu(0), mumuZCR(0), eeZCR(0), munuW2CR(0), munuttCR(0), enuW2CR(0), enuttCR(0) { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialize projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 20.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // veto region electrons std::vector > eta_v_e; eta_v_e.push_back(make_pair(-1.52,-1.35)); eta_v_e.push_back(make_pair( 1.35, 1.52)); IdentifiedFinalState veto_elecs(eta_v_e, 10.0*GeV); veto_elecs.acceptIdPair(ELECTRON); addProjection(veto_elecs, "veto_elecs"); ///DEBUG // projection to find all leptons IdentifiedFinalState all_mu_e; all_mu_e.acceptIdPair(MUON); all_mu_e.acceptIdPair(ELECTRON); addProjection(all_mu_e, "all_mu_e"); //debug // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 20.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // Jet finder VetoedFinalState vfs; vfs.addVetoPairDetail(MUON,20*GeV,7000*GeV); vfs.addVetoPairDetail(ELECTRON,20*GeV,7000*GeV); addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // all tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0,0.5*GeV),"cfs"); // for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); /// Book histograms _count_mumujj = bookHistogram1D("count_2muons_dijet", 1, 0., 1.); _count_eejj = bookHistogram1D("count_2elecs_dijet", 1, 0., 1.); _count_muvjj = bookHistogram1D("count_muon_neutrino_dijet", 1, 0., 1.); _count_evjj = bookHistogram1D("count_elec_neutrino_dijet", 1, 0., 1.); _hist_St_mumu = bookHistogram1D("hist_mumujj_St", 10, 450., 1650.); _hist_St_ee = bookHistogram1D("hist_eejj_St", 10, 450., 1650.); _hist_MLQ_muv = bookHistogram1D("hist_munujj_MLQ", 9, 150., 600.); _hist_MLQ_ev = bookHistogram1D("hist_enujj_MLQ", 9, 150., 600.); _hist_St_mumu_ZCR = bookHistogram1D("CR_Zjets_St_mumu", 40, 0., 800.); _hist_St_ee_ZCR = bookHistogram1D("CR_Zjets_Stee", 40, 0., 800.); _hist_MLQ_munu_W2CR = bookHistogram1D("CR_W2jets_MLQ_munu", 20, 0., 400.); _hist_MLQ_enu_W2CR = bookHistogram1D("CR_W2jets_MLQ_enu", 20, 0., 400.); _hist_MLQ_munu_ttCR = bookHistogram1D("CR_tt_MLQ_munu", 35, 0., 700.); _hist_MLQ_enu_ttCR = bookHistogram1D("CR_tt_MLQ_enu", 35, 0., 700.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); ///DEBUG count +=1; //cerr<< "Event " << count << '\n'; // debug ParticleVector veto_e = applyProjection(event, "veto_elecs").particles(); if ( ! veto_e.empty() ) { MSG_DEBUG("electrons in veto region"); vetoEvent; } ++vetoe; Jets cand_jets; foreach ( const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 2.8 ) { cand_jets.push_back(jet); } } ParticleVector candtemp_e = applyProjection(event, "elecs").particlesByPt(); ParticleVector candtemp_mu = applyProjection(event,"muons").particlesByPt(); ParticleVector cand_mu; ParticleVector cand_e; ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); // pTcone around muon track foreach ( const Particle & mu, candtemp_mu ) { ++tmpmu; double pTinCone = -mu.momentum().pT(); foreach ( const Particle & track, vfs_particles ) { if ( deltaR(mu.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone/mu.momentum().pT() < 0.25 ) ++candmu; cand_mu.push_back(mu); } // pTcone around electron foreach ( const Particle e, candtemp_e ) { ++tmpe; double pTinCone = -e.momentum().pT(); foreach ( const Particle & track, vfs_particles ) { if ( deltaR(e.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone/e.momentum().pT() < 0.2 ) ++cande; cand_e.push_back(e); } if ( cand_e.empty() && cand_mu.empty() ) { //cerr<<" ->Event vetoed. No candidate lept"<<'\n'; vetoEvent; } //DEBUG // else{ // foreach (const Particle & mu, cand_mu) { // cerr << "cand mu: " << "Id " << mu.pdgId() << " eta " << mu.momentum().eta() << " pT " << mu.momentum().pT() << '\n'; // } // foreach (const Particle & lepton, cand_e) { // cerr << "cand e: " << "Id " << lepton.pdgId() << " eta " << lepton.momentum().eta() << " pT " << lepton.momentum().pT() << '\n'; // }} // debug // pTmiss FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // discard jets that overlap with leptons Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { bool away_from_lept = true; foreach ( const Particle e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) <= 0.5 ) { away_from_lept = false; break; } } foreach ( const Particle & mu, cand_mu ) { if ( deltaR(mu.momentum(),jet.momentum()) <= 0.5 ) { away_from_lept = false; break; } } if ( away_from_lept ) recon_jets.push_back( jet ); } //DEBUG // cerr << " Num of recon jets: " << recon_jets.size() << '\n'; // cerr << " Num of cand e: " << cand_e.size() << '\n'; // cerr << " Num of cand mu: " << cand_mu.size() << '\n'; //debug // ================ OBSERVABLES ================ // At least 2 hard jets if ( recon_jets.size() < 2 ) { //cerr << " ->Event vetoed. Not enough hard jets." << '\n'; vetoEvent; } ++Njetscut; // Initialize variables for observables double M_ll=0., M_LQ=0., St_ll=0., Mt_LQ=0., St_v=0., mT=0.; FourMomentum p_l, p_l1, p_l2, p_j[2]; p_j[0] = recon_jets[0].momentum(); p_j[1] = recon_jets[1].momentum(); ParticleVector dilept_pair; bool single_lept = false; if ( cand_mu.size() == 2 && cand_e.empty() ) { ++candmumujj; foreach ( const Particle& mu, cand_mu ) dilept_pair.push_back(mu); } else if ( cand_e.size() == 2 && cand_mu.empty() ) { ++candeejj; foreach ( const Particle& e, cand_e ) dilept_pair.push_back(e); } else if ( cand_mu.size() == 1 && cand_e.empty() ) { ++candmvjj; p_l = cand_mu[0].momentum(); single_lept = true; } else if ( cand_e.size() == 1 && cand_mu.empty() ) { ++candevjj; p_l = cand_e[0].momentum(); single_lept = true; } // Dilepton channel observables if ( ! dilept_pair.empty() ) { double E_l1, E_l2, E_j1, E_j2; double tmpM_LQ1[2], tmpM_LQ2[2], M_LQDiff1, M_LQDiff2; p_l1 = dilept_pair[0].momentum(); p_l2 = dilept_pair[1].momentum(); E_l1 = p_l1.E(); E_l2 = p_l2.E(); E_j1 = p_j[0].E(); E_j2 = p_j[1].E(); // Calculate possible leptoquark mass M_LQ and reconstruct average M_LQ tmpM_LQ1[0] = E_l1 + E_j1; tmpM_LQ1[1] = E_l2 + E_j2; M_LQDiff1 = abs( tmpM_LQ1[0] - tmpM_LQ1[1] ); tmpM_LQ2[0] = E_l1 + E_j2; tmpM_LQ2[1] = E_l2 + E_j1; M_LQDiff2 = abs( tmpM_LQ2[0] - tmpM_LQ2[1] ); if ( M_LQDiff1 > M_LQDiff2 ) M_LQ = ( tmpM_LQ2[0] + tmpM_LQ2[1] ) / 2; else M_LQ = ( tmpM_LQ1[0] + tmpM_LQ1[1] ) / 2; // Calculate event transverse energy St St_ll = p_l1.pT() + p_l2.pT() + p_j[0].pT() + p_j[1].pT(); // Dilept pair invariant mass M_ll M_ll = E_l1 + E_l2; } // 1-lepton channel observables else if ( single_lept ) { double tmpM_LQ[2], tmpMt_LQ[2], dPhi_j[2], M_LQDiff1, M_LQDiff2; // List of possible M_LQ, Mt_LQ pairings for ( int i = 0; i < 2; ++i ) { tmpM_LQ[i] = p_l.E() + p_j[i].E(); dPhi_j[1-i] = deltaPhi( p_j[1-i].phi(), pTmiss.phi() ); tmpMt_LQ[i] = sqrt( 2 * p_j[1-i].pT() * eTmiss * (1 - cos( dPhi_j[1-i] )) ); } // Choose pairing that gives smallest absolute difference M_LQDiff1 = abs( tmpM_LQ[0] - tmpMt_LQ[0] ); M_LQDiff2 = abs( tmpM_LQ[1] - tmpMt_LQ[1] ); if ( M_LQDiff1 > M_LQDiff2 ) { M_LQ = tmpM_LQ[1]; Mt_LQ = tmpMt_LQ[1]; } else { M_LQ = tmpM_LQ[0]; Mt_LQ = tmpMt_LQ[0]; } // Event transverse energy St_v = p_l.pT() + eTmiss + p_j[0].pT() + p_j[1].pT(); // Transverse mass mT double dPhi_l = deltaPhi( p_l.phi(), pTmiss.phi()); mT = sqrt( 2 * p_l.pT() * eTmiss * (1 - cos(dPhi_l)) ); } // ============== CONTROL REGIONS =============== // mumujj, Z control region if ( cand_mu.size() == 2 ) { if ( M_ll >= 81*GeV && M_ll <= 101*GeV ) { ++mumuZCR; _hist_St_mumu_ZCR->fill(St_ll, weight); } } // eejj, Z control region else if ( cand_e.size() == 2 ) { if ( M_ll >= 81*GeV && M_ll <= 101*GeV ) { ++eeZCR; _hist_St_ee_ZCR->fill(St_ll, weight); } } if ( cand_mu.size() == 1 ) { // munujj, W+2jets control region if ( recon_jets.size() == 2 && mT >= 40*GeV && mT <= 150*GeV ) { ++munuW2CR; _hist_MLQ_munu_W2CR->fill(M_LQ, weight); } // munujj, tt control region if ( recon_jets.size() >= 4 && recon_jets[0].momentum().pT() > 50*GeV && recon_jets[1].momentum().pT() > 40*GeV && recon_jets[2].momentum().pT() > 30*GeV ) { ++munuttCR; _hist_MLQ_munu_ttCR->fill(M_LQ, weight); } } if ( cand_e.size() == 1 ) { // enujj, W+2jets control region if ( recon_jets.size() == 2 && mT >= 40*GeV && mT <= 150*GeV ) { ++enuW2CR; _hist_MLQ_enu_W2CR->fill(M_LQ, weight); } // enujj, tt control region if ( recon_jets.size() >= 4 && recon_jets[0].momentum().pT() > 50*GeV && recon_jets[1].momentum().pT() > 40*GeV && recon_jets[2].momentum().pT() > 30*GeV ) { ++enuttCR; _hist_MLQ_enu_ttCR->fill(M_LQ, weight); } } // ========= PRESELECTION ======================= // Single lepton channel cuts if ( single_lept ) { if ( eTmiss <= 25*GeV ) { //cerr << " ->Event vetoed. eTmiss=" << eTmiss << '\n'; vetoEvent; } ++eTmisscut; if ( mT <= 40*GeV ) vetoEvent; //++mTcut; // enujj channel if ( cand_e.size() == 1 && cand_mu.empty() ) { // Triangle cut double dPhi_jet1 = deltaPhi( recon_jets[0].phi(), pTmiss.phi() ); double dPhi_jet2 = deltaPhi( recon_jets[1].phi(), pTmiss.phi() ); if ( dPhi_jet1 <= 1.5 * (1 - eTmiss/45) || dPhi_jet2 <= 1.5 * (1 - eTmiss/45) ) { ++emuvjj; vetoEvent; } } } // ==================== FILL ==================== // mumujj channel if ( cand_mu.size() == 2 ) { if ( M_ll <= 120*GeV || M_LQ <= 150*GeV || p_l1.pT() <= 30*GeV || p_l2.pT() <= 30*GeV || p_j[0].pT() <= 30*GeV || p_j[1].pT() <= 30*GeV || St_ll <= 450*GeV ) { //cerr<<" ->Dilept event vetoed. Table 4 cuts." << '\n'; vetoEvent; } else { ++mumujj; // cerr<< " ->MUMUJJ event selected." << '\n'; _hist_St_mumu->fill(St_ll, weight); _count_mumujj->fill(0.5, weight); } } // eejj channel else if ( cand_e.size() == 2 ) { if ( M_ll <= 120*GeV || M_LQ <= 150*GeV || p_l1.pT() <= 30*GeV || p_l2.pT() <= 30*GeV || p_j[0].pT() <= 30*GeV || p_j[1].pT() <= 30*GeV || St_ll <= 450*GeV ) { //cerr<<" ->Dilept event vetoed. Table 4 cuts." << '\n'; vetoEvent; } else { ++eejj; //cerr<< " ->EEJJ event selected." << '\n'; _hist_St_ee->fill(St_ll, weight); _count_eejj->fill(0.5, weight); } } // muvjj channel else if ( cand_mu.size() == 1 ) { if (M_LQ<=150*GeV) { //cerr<<" ->muvjj event vetoed. Not enough M_LQ: " << M_LQ<< '\n'; vetoEvent; } ++MLQonelept; if (Mt_LQ<=150*GeV) { //cerr<<" ->muvjj event vetoed. Not enough Mt_LQ: " << Mt_LQ<< '\n'; vetoEvent; } ++MtLQonelept; if (St_v<=400*GeV) { //cerr<<" ->muvjj event vetoed. Not enough St_v: " << St_v<< '\n'; vetoEvent; } ++Stvonelept; if (mT<=160*GeV) { //cerr<<" ->muvjj event vetoed. Not enough mT: " << mT<<'\n'; vetoEvent; } ++mTonelept; //else { ++muvjj; //cerr<< " ->MUVJJ event selected." << '\n'; _hist_MLQ_muv->fill(M_LQ, weight); _count_muvjj->fill(0.5, weight); //} } // evjj channel else if ( cand_e.size() == 1 ) { if (M_LQ<=180*GeV) { //cerr<<" ->evjj event vetoed. Not enough M_LQ: " << M_LQ<< '\n'; vetoEvent; } ++MLQev; if (Mt_LQ<=180*GeV) { //cerr<<" ->evjj event vetoed. Not enough Mt_LQ: " << Mt_LQ<< '\n'; vetoEvent; } ++MtLQev; if (St_v<=410*GeV) { //cerr<<" ->evjj event vetoed. Not enough St_v: " << St_v<< '\n'; vetoEvent; } ++Stvev; if (mT<=200*GeV) { //cerr<<" ->evjj event vetoed. Not enough mT: " << mT<<'\n'; vetoEvent; } ++mTev; //else { ++evjj; //cerr<< " ->EVJJ event selected." << '\n'; _hist_MLQ_ev->fill(M_LQ, weight); _count_evjj->fill(0.5, weight); // if ( mT <= 200*GeV || // M_LQ <= 180*GeV || // Mt_LQ <= 180*GeV || // St_v <= 410*GeV ) { // cerr<<" ->evjj event vetoed. Doesn't pass table 4 cuts." << '\n'; // vetoEvent; // } // else { // ++evjj; // cerr<< " ->EVJJ event selected." << '\n'; // _hist_MLQ_ev->fill(M_LQ, weight); // _count_evjj->fill(0.5, weight); // } } } //@} void finalize() { // cerr << '\n' << "Of " << count << " events, saw " // << vetoe << " (after veto region cut), " // << Njetscut << " (after 2jet req). " // << '\n' // << "For " << dilept << " dilept events: " // << candmumujj << " cand mumujj events, " // << candeejj << " cand eejj events." // << '\n' // << "For " << onelept << " onelept events: " // << candmvjj << " preselected mvjj events, " // << candevjj << " preselected evjj events; " // << eTmisscut << " (eTmiss req); " // << emuvjj << " leftover; " // << MLQonelept << " (muvjj M_LQ cut), " // << MtLQonelept << " (muvjj Mt_LQ cut), " // << Stvonelept << " (muvjj St_v cut), " // << mTonelept << " (muvjj mT cut); " // << MLQev << " (evjj M_LQ cut), " // << MtLQev << " (evjj Mt_LQ cut), " // << Stvev << " (evjj St_v cut), " // << mTev << " (evjj mT cut). " // << '\n'<<'\n' // ; // cerr << "CR - " << "mumu Z: " << mumuZCR << " ee Z: " << eeZCR << " munu W+2jets: " << munuW2CR << " munu tt: " << munuttCR << " enu W+2jets: " << enuW2CR << " enu tt: " << enuttCR << '\n'; // cerr << "mumujj: " << mumujj << " eejj: " << eejj << " muvjj: " << muvjj << " evjj: " << evjj << '\n'; scale( _hist_St_ee, 120. * 35. * crossSection()/sumOfWeights() ); scale( _hist_St_mumu, 120. * 35. * crossSection()/sumOfWeights() ); scale( _hist_MLQ_muv, 50. * 35. * crossSection()/sumOfWeights() ); scale( _hist_MLQ_ev, 50. * 35. * crossSection()/sumOfWeights() ); scale( _hist_St_mumu_ZCR, 20. * 35. * crossSection()/sumOfWeights() ); scale( _hist_St_ee_ZCR, 20. * 35. * crossSection()/sumOfWeights() ); scale( _hist_MLQ_munu_W2CR, 20. * 35. * crossSection()/sumOfWeights() ); scale( _hist_MLQ_enu_W2CR, 20. * 35. * crossSection()/sumOfWeights() ); scale( _hist_MLQ_munu_ttCR, 20. * 35. * crossSection()/sumOfWeights() ); scale( _hist_MLQ_enu_ttCR, 20. * 35. * crossSection()/sumOfWeights() ); /* scale( _hist_eTmiss_mu, binwidth*luminosity* crossSection()/sumOfWeights() ); */ } private: /// @name Histograms //@{ AIDA::IHistogram1D* _count_mumujj; AIDA::IHistogram1D* _count_eejj; AIDA::IHistogram1D* _count_muvjj; AIDA::IHistogram1D* _count_evjj; AIDA::IHistogram1D* _hist_St_mumu; AIDA::IHistogram1D* _hist_St_ee; AIDA::IHistogram1D* _hist_MLQ_muv; AIDA::IHistogram1D* _hist_MLQ_ev; AIDA::IHistogram1D* _hist_St_mumu_ZCR; AIDA::IHistogram1D* _hist_St_ee_ZCR; AIDA::IHistogram1D* _hist_MLQ_munu_W2CR; AIDA::IHistogram1D* _hist_MLQ_enu_W2CR; AIDA::IHistogram1D* _hist_MLQ_munu_ttCR; AIDA::IHistogram1D* _hist_MLQ_enu_ttCR; //@} // DEBUG VARIABLES int count; int vetoe; int Njetscut; int dilept; int candmumujj; int candeejj; int onelept; int eTmisscut; int candmvjj; int candevjj; int mumujj; int eejj; int mTonelept; int MLQonelept; int MtLQonelept; int Stvonelept; int mTev; int MLQev; int MtLQev; int Stvev; int muvjj; int evjj; int emuvjj; int cande; int candmu; int tmpe; int tmpmu; int mumuZCR; int eeZCR; int munuW2CR; int munuttCR; int enuW2CR; int enuttCR; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_S9041966); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1095236.cc0000644000175000017500000002537512116077757016310 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { /// @author Peter Richardson class ATLAS_2012_I1095236 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_I1095236() : Analysis("ATLAS_2012_I1095236") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // Projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 20.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // Projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // Jet finder VetoedFinalState vfs; vfs.addVetoPairId(MUON); addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // All tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0),"cfs"); // Used for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); // Book histograms _count_SR0_A1 = bookHistogram1D("count_SR0_A1", 1, 0., 1.); _count_SR0_B1 = bookHistogram1D("count_SR0_B1", 1, 0., 1.); _count_SR0_C1 = bookHistogram1D("count_SR0_C1", 1, 0., 1.); _count_SR0_A2 = bookHistogram1D("count_SR0_A2", 1, 0., 1.); _count_SR0_B2 = bookHistogram1D("count_SR0_B2", 1, 0., 1.); _count_SR0_C2 = bookHistogram1D("count_SR0_C2", 1, 0., 1.); _count_SR1_D = bookHistogram1D("count_SR1_D" , 1, 0., 1.); _count_SR1_E = bookHistogram1D("count_SR1_E" , 1, 0., 1.); _hist_meff_SR0_A1 = bookHistogram1D("hist_m_eff_SR0_A1", 14, 400., 1800.); _hist_meff_SR0_A2 = bookHistogram1D("hist_m_eff_SR0_A2", 14, 400., 1800.); _hist_meff_SR1_D_e = bookHistogram1D("hist_meff_SR1_D_e" , 16, 600., 2200.); _hist_meff_SR1_D_mu = bookHistogram1D("hist_meff_SR1_D_mu", 16, 600., 2200.); _hist_met_SR0_A1 = bookHistogram1D("hist_met_SR0_A1", 14, 0., 700.); _hist_met_SR0_A2 = bookHistogram1D("hist_met_SR0_A2", 14, 0., 700.); _hist_met_SR0_D_e = bookHistogram1D("hist_met_SR1_D_e" , 15, 0., 600.); _hist_met_SR0_D_mu = bookHistogram1D("hist_met_SR1_D_mu", 15, 0., 600.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); Jets cand_jets; const Jets jets = applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV); foreach (const Jet& jet, jets) { if ( fabs( jet.momentum().eta() ) < 2.8 ) { cand_jets.push_back(jet); } } const ParticleVector cand_e = applyProjection(event, "elecs").particlesByPt(); const ParticleVector cand_mu = applyProjection(event, "muons").particlesByPt(); // Resolve jet-lepton overlap for jets with |eta| < 2.8 Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { if ( fabs( jet.momentum().eta() ) >= 2.8 ) continue; bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) recon_jets.push_back( jet ); } // get the loose leptons used to define the 0 lepton channel ParticleVector loose_e, loose_mu; foreach ( const Particle & e, cand_e ) { bool away = true; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } if ( away ) loose_e.push_back( e ); } foreach ( const Particle & mu, cand_mu ) { bool away = true; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } if ( away ) loose_mu.push_back( mu ); } // tight leptons for the 1-lepton channel ParticleVector tight_mu; ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); foreach ( const Particle & mu, loose_mu) { if(mu.momentum().perp()<20.) continue; double pTinCone = -mu.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(mu.momentum(),track.momentum()) <= 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 1.8*GeV ) tight_mu.push_back(mu); } ParticleVector tight_e; foreach ( const Particle & e, loose_e ) { if(e.momentum().perp()<25.) continue; double pTinCone = -e.momentum().perp(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(e.momentum(),track.momentum()) <= 0.2 ) pTinCone += track.momentum().pT(); } if (pTinCone/e.momentum().perp()<0.1) { tight_e.push_back(e); } } // pTmiss ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // get the number of b-tagged jets unsigned int ntagged=0; foreach (const Jet & jet, recon_jets ) { if(jet.momentum().perp()>50. && abs(jet.momentum().eta())<2.5 && jet.containsBottom() && rand()/static_cast(RAND_MAX)<=0.60) ++ntagged; } // ATLAS calo problem if(rand()/static_cast(RAND_MAX)<=0.42) { foreach ( const Jet & jet, recon_jets ) { double eta = jet.momentum().rapidity(); double phi = jet.momentum().azimuthalAngle(MINUSPI_PLUSPI); if(jet.momentum().perp()>50 && eta>-0.1&&eta<1.5&&phi>-0.9&&phi<-0.5) vetoEvent; } } // at least 1 b tag if(ntagged==0) vetoEvent; // minumum Et miss if(eTmiss<80.) vetoEvent; // at least 3 jets pT > 50 if(recon_jets.size()<3 || recon_jets[2].momentum().perp()<50.) vetoEvent; // m_eff double m_eff = eTmiss; for(unsigned int ix=0;ix<3;++ix) m_eff += recon_jets[ix].momentum().perp(); // delta Phi double min_dPhi = 999.999; double pTmiss_phi = pTmiss.phi(); for(unsigned int ix=0;ix<3;++ix) { min_dPhi = min( min_dPhi, deltaPhi( pTmiss_phi, recon_jets[ix].momentum().phi() ) ); } // 0-lepton channels if(loose_e.empty() && loose_mu.empty() && recon_jets[0].momentum().perp()>130. && eTmiss>130. && eTmiss/m_eff>0.25 && min_dPhi>0.4) { // jet charge cut bool jetCharge = true; for(unsigned int ix=0;ix<3;++ix) { if(fabs(recon_jets[ix].momentum().eta())>2.) continue; double trackpT=0; foreach(const Particle & p, recon_jets[ix].particles()) { if(PID::threeCharge(p.pdgId())==0) continue; trackpT += p.momentum().perp(); } if(trackpT/recon_jets[ix].momentum().perp()<0.05) jetCharge = false; } if(jetCharge) { // SR0-A region if(m_eff>500.) { _count_SR0_A1->fill(0.5,weight); _hist_meff_SR0_A1->fill(m_eff,weight); _hist_met_SR0_A1 ->fill(eTmiss,weight); if(ntagged>=2) { _count_SR0_A2->fill(0.5,weight); _hist_meff_SR0_A2->fill(m_eff,weight); _hist_met_SR0_A2 ->fill(eTmiss,weight); } } // SR0-B if(m_eff>700.) { _count_SR0_B1->fill(0.5,weight); if(ntagged>=2) _count_SR0_B2->fill(0.5,weight); } // SR0-C if(m_eff>900.) { _count_SR0_C1->fill(0.5,weight); if(ntagged>=2) _count_SR0_C2->fill(0.5,weight); } } } // 1-lepton channels if(tight_e.size() + tight_mu.size() == 1 && recon_jets.size()>=4 && recon_jets[3].momentum().perp()>50.&& recon_jets[0].momentum().perp()>60.) { Particle lepton = tight_e.empty() ? tight_mu[0] : tight_e[0]; m_eff += lepton.momentum().perp() + recon_jets[3].momentum().perp(); // transverse mass cut double mT = 2.*(lepton.momentum().perp()*eTmiss- lepton.momentum().x()*pTmiss.x()- lepton.momentum().y()*pTmiss.y()); mT = sqrt(mT); if(mT>100.&&m_eff>700.) { // D region _count_SR1_D->fill(0.5,weight); if(abs(lepton.pdgId())==ELECTRON) { _hist_meff_SR1_D_e->fill(m_eff,weight); _hist_met_SR0_D_e->fill(eTmiss,weight); } else { _hist_meff_SR1_D_mu->fill(m_eff,weight); _hist_met_SR0_D_mu->fill(eTmiss,weight); } // E region if(eTmiss>200.) { _count_SR1_E->fill(0.5,weight); } } } } void finalize() { double norm = crossSection()/femtobarn*2.05/sumOfWeights(); // these are number of events at 2.05fb^-1 per 100 GeV scale( _hist_meff_SR0_A1 , 100. * norm ); scale( _hist_meff_SR0_A2 , 100. * norm ); scale( _hist_meff_SR1_D_e , 100. * norm ); scale( _hist_meff_SR1_D_mu , 100. * norm ); // these are number of events at 2.05fb^-1 per 50 GeV scale( _hist_met_SR0_A1, 50. * norm ); scale( _hist_met_SR0_A2, 40. * norm ); // these are number of events at 2.05fb^-1 per 40 GeV scale( _hist_met_SR0_D_e , 40. * norm ); scale( _hist_met_SR0_D_mu, 40. * norm ); // these are number of events at 2.05fb^-1 scale(_count_SR0_A1,norm); scale(_count_SR0_B1,norm); scale(_count_SR0_C1,norm); scale(_count_SR0_A2,norm); scale(_count_SR0_B2,norm); scale(_count_SR0_C2,norm); scale(_count_SR1_D ,norm); scale(_count_SR1_E ,norm); } //@} private: AIDA::IHistogram1D* _count_SR0_A1; AIDA::IHistogram1D* _count_SR0_B1; AIDA::IHistogram1D* _count_SR0_C1; AIDA::IHistogram1D* _count_SR0_A2; AIDA::IHistogram1D* _count_SR0_B2; AIDA::IHistogram1D* _count_SR0_C2; AIDA::IHistogram1D* _count_SR1_D; AIDA::IHistogram1D* _count_SR1_E; AIDA::IHistogram1D* _hist_meff_SR0_A1; AIDA::IHistogram1D* _hist_meff_SR0_A2; AIDA::IHistogram1D* _hist_meff_SR1_D_e; AIDA::IHistogram1D* _hist_meff_SR1_D_mu; AIDA::IHistogram1D* _hist_met_SR0_A1; AIDA::IHistogram1D* _hist_met_SR0_A2; AIDA::IHistogram1D* _hist_met_SR0_D_e; AIDA::IHistogram1D* _hist_met_SR0_D_mu; }; // This global object acts as a hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I1095236); } rivet-1.8.3/src/Analyses/TOTEM_2012_002.cc0000644000175000017500000000271612116077757015665 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" namespace Rivet { /// TOTEM elastic and total cross-section measurement class TOTEM_2012_002 : public Analysis { public: TOTEM_2012_002() : Analysis("TOTEM_2012_002") { } public: void init() { addProjection(ChargedFinalState(), "CFS"); _hist_tlow = bookHistogram1D(1, 1, 1); _hist_thigh = bookHistogram1D(2, 1, 1); _hist_sigma = bookHistogram1D(3, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); const ChargedFinalState& cfs = applyProjection(event, "CFS"); if (cfs.size() > 2) MSG_WARNING("Final state includes more than two charged particles !"); _hist_sigma->fill(sqrtS()/GeV, weight); foreach (const Particle& p, cfs.particles()) { if (p.momentum().eta() > 0. && p.pdgId() == PROTON) { double t = sqr(p.momentum().pT()); _hist_tlow->fill(t, weight); _hist_thigh->fill(t, weight); } } } void finalize() { normalize(_hist_tlow, crossSection()/millibarn); normalize(_hist_thigh, crossSection()/millibarn); normalize(_hist_sigma, crossSection()/millibarn); } private: AIDA::IHistogram1D *_hist_tlow, *_hist_thigh, *_hist_sigma; }; DECLARE_RIVET_PLUGIN(TOTEM_2012_002); } rivet-1.8.3/src/Analyses/MC_ZZKTSPLITTINGS.cc0000644000175000017500000000347612116077757016556 0ustar sunsun// -*- C++ -*- #include "Rivet/Analyses/MC_JetSplittings.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief MC validation analysis for Z[ee]Z[mumu] + jets events class MC_ZZKTSPLITTINGS : public MC_JetSplittings { public: /// Default constructor MC_ZZKTSPLITTINGS() : MC_JetSplittings("MC_ZZKTSPLITTINGS", 4, "Jets") { } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; ZFinder zeefinder(fs, -3.5, 3.5, 25.0*GeV, ELECTRON, 65.0*GeV, 115.0*GeV, 0.2, true, true); addProjection(zeefinder, "ZeeFinder"); VetoedFinalState zmminput; zmminput.addVetoOnThisFinalState(zeefinder); ZFinder zmmfinder(zmminput, -3.5, 3.5, 25.0*GeV, MUON, 65.0*GeV, 115.0*GeV, 0.2, true, true); addProjection(zmmfinder, "ZmmFinder"); VetoedFinalState jetinput; jetinput .addVetoOnThisFinalState(zeefinder) .addVetoOnThisFinalState(zmmfinder); FastJets jetpro(jetinput, FastJets::KT, 0.6); addProjection(jetpro, "Jets"); MC_JetSplittings::init(); } /// Do the analysis void analyze(const Event & e) { const ZFinder& zeefinder = applyProjection(e, "ZeeFinder"); if (zeefinder.bosons().size()!=1) { vetoEvent; } const ZFinder& zmmfinder = applyProjection(e, "ZmmFinder"); if (zmmfinder.bosons().size()!=1) { vetoEvent; } MC_JetSplittings::analyze(e); } /// Finalize void finalize() { MC_JetSplittings::finalize(); } //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_ZZKTSPLITTINGS); } rivet-1.8.3/src/Analyses/ATLAS_2012_CONF_2012_153.cc0000644000175000017500000003404612123033122017072 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/RivetMT2.hh" namespace Rivet { class ATLAS_2012_CONF_2012_153 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_CONF_2012_153() : Analysis("ATLAS_2012_CONF_2012_153") { } //@} //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 10.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); VetoedFinalState vfs; vfs.addVetoPairId(MUON); /// Jet finder addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // all tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0),"cfs"); vector edges_meff; edges_meff.push_back( 0); edges_meff.push_back( 150); edges_meff.push_back( 300); edges_meff.push_back( 500); edges_meff.push_back(1000); edges_meff.push_back(1500); vector edges_eT; edges_eT.push_back(0); edges_eT.push_back(50); edges_eT.push_back(150); edges_eT.push_back(300); edges_eT.push_back(500); // Book histograms _hist_electrons = bookHistogram1D("hist_electrons_before", 11, -0.5,10.5); _hist_muons = bookHistogram1D("hist_muons_before" , 11, -0.5,10.5); _hist_leptons = bookHistogram1D("hist_leptons_before" , 11, -0.5,10.5); _hist_4leptons = bookHistogram1D("hist_4leptons", 1, 0.,1.); _hist_veto = bookHistogram1D("hist_veto", 1, 0., 1.); _hist_etmiss = bookHistogram1D("hist_etmiss",edges_eT); _hist_meff = bookHistogram1D("hist_m_eff",edges_meff); _count_SR1 = bookHistogram1D("count_SR1", 1, 0., 1.); _count_SR2 = bookHistogram1D("count_SR2", 1, 0., 1.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // get the jet candidates Jets cand_jets; foreach (const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 2.5 ) { cand_jets.push_back(jet); } } // candidate muons ParticleVector cand_mu = applyProjection(event, "muons").particlesByPt(); // candidate electrons // Discard if two electrons are within R=0.1 ParticleVector temp = applyProjection(event, "elecs").particlesByE(); vector vetoed(temp.size(),false); ParticleVector cand_e; for (unsigned int ix=0; ix(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // apply electron isolation ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); ParticleVector cand4_e; foreach ( const Particle & e, cand3_e ) { // charge isolation double pTinCone = -e.momentum().perp(); foreach ( const Particle & track, chg_tracks ) { if(track.momentum().perp()>0.4 && deltaR(e.momentum(),track.momentum()) <= 0.3 ) pTinCone += track.momentum().pT(); } if (pTinCone/e.momentum().perp()>0.16) continue; // all particles isolation pTinCone = -e.momentum().perp(); foreach ( const Particle & p, vfs_particles ) { if(abs(p.pdgId())!=MUON && deltaR(e.momentum(),p.momentum()) <= 0.3 ) pTinCone += p.momentum().pT(); } if (pTinCone/e.momentum().perp()<0.18) { cand4_e.push_back(e); } } // apply muon isolation ParticleVector cand4_mu; foreach ( const Particle & mu, cand3_mu ) { double pTinCone = -mu.momentum().perp(); foreach ( const Particle & track, chg_tracks ) { if(track.momentum().perp()>1.0 && deltaR(mu.momentum(),track.momentum()) <= 0.3 ) pTinCone += track.momentum().pT(); } if (pTinCone/mu.momentum().perp()<0.12) { cand4_mu.push_back(mu); } } // same SOSF pairs m>12. ParticleVector recon_e; foreach(const Particle & e, cand4_e) { bool veto=false; foreach(const Particle & e2, cand4_e) { if(e.pdgId()*e2.pdgId()<0&&(e.momentum()+e2.momentum()).mass()<12.) { veto=true; break; } } if(!veto) recon_e.push_back(e); } ParticleVector recon_mu; foreach(const Particle & mu, cand4_mu) { bool veto=false; foreach(const Particle & mu2, cand4_mu) { if(mu.pdgId()*mu2.pdgId()<0&&(mu.momentum()+mu2.momentum()).mass()<12.) { veto=true; break; } } if(!veto) recon_mu.push_back(mu); } // now only use recon_jets, recon_mu, recon_e _hist_electrons->fill(recon_e.size(), weight); _hist_muons->fill(recon_mu.size(), weight); _hist_leptons->fill(recon_mu.size() + recon_e.size(), weight); if( recon_mu.size() + recon_e.size() > 3) { _hist_4leptons->fill(0.5, weight); } // reject events with less than 4 electrons and muons if ( recon_mu.size() + recon_e.size() < 4 ) { MSG_DEBUG("To few charged leptons left after selection"); vetoEvent; } // or two lepton trigger bool passDouble = (recon_mu.size()>=2 && ( (recon_mu[1].momentum().perp()>14.) || (recon_mu[0].momentum().perp()>18. && recon_mu[1].momentum().perp()>10.) )) || (recon_e.size() >=2 && ( (recon_e [1].momentum().perp()>14.) || (recon_e [0].momentum().perp()>25. && recon_e [1].momentum().perp()>10.) )) || (!recon_e.empty() && !recon_mu.empty() && ( (recon_e[0].momentum().perp()>14. && recon_mu[0].momentum().perp()>10.)|| (recon_e[0].momentum().perp()>10. && recon_mu[0].momentum().perp()>18.) )); // must pass a trigger if(!passDouble ) { MSG_DEBUG("Hardest lepton fails trigger"); _hist_veto->fill(0.5, weight); vetoEvent; } // calculate meff double meff = eTmiss; foreach ( const Particle & e , recon_e ) meff += e.momentum().perp(); foreach ( const Particle & mu, recon_mu ) meff += mu.momentum().perp(); foreach ( const Jet & jet, recon_jets ) { double pT = jet.momentum().perp(); if(pT>40.) meff += pT; } // 2/3 leptons --> find 1 SFOS pair in range and veto event // 4+ leptons --> find 2 SFOS pairs and in range veto event for(unsigned int ix=0;ix0) continue; FourMomentum ppair = recon_e[ix].momentum()+recon_e[iy].momentum(); double mtest = ppair.mass(); if(mtest>81.2 && mtest<101.2) vetoEvent; // check triplets with electron for(unsigned int iz=0;iz81.2 && mtest<101.2) vetoEvent; } // check triplets with muon for(unsigned int iz=0;iz81.2 && mtest<101.2) vetoEvent; } // check quadruplets with electrons for(unsigned int iz=0;iz0) continue; mtest = (ppair+recon_e[iz].momentum()+recon_e[iw].momentum()).mass(); if(mtest>81.2 && mtest<101.2) vetoEvent; } } // check quadruplets with muons for(unsigned int iz=0;iz0) continue; mtest = (ppair+recon_mu[iz].momentum()+recon_mu[iw].momentum()).mass(); if(mtest>81.2 && mtest<101.2) vetoEvent; } } } } // Muon pairs for(unsigned int ix=0;ix0) continue; FourMomentum ppair = recon_mu[ix].momentum()+recon_mu[iy].momentum(); double mtest = ppair.mass(); if(mtest>81.2 && mtest<101.2) vetoEvent; // check triplets with muon for(unsigned int iz=0;iz81.2 && mtest<101.2) vetoEvent; } // check triplets with electron for(unsigned int iz=0;iz81.2 && mtest<101.2) vetoEvent; } // check muon quadruplets for(unsigned int iz=0;iz0) continue; mtest = (ppair+recon_mu[iz].momentum()+recon_mu[iw].momentum()).mass(); if(mtest>81.2 && mtest<101.2) vetoEvent; } } } } //make the control plots _hist_etmiss ->fill(eTmiss,weight); _hist_meff ->fill(meff ,weight); // finally the counts if(eTmiss>50.) _count_SR1->fill(0.5,weight); if(meff >300. ) _count_SR2->fill(0.5,weight); } //@} void finalize() { double norm = crossSection()/femtobarn*13./sumOfWeights(); scale(_hist_etmiss,norm*20.); scale(_hist_meff ,norm*20.); scale(_count_SR1,norm); scale(_count_SR2,norm); } private: /// @name Histograms //@{ AIDA::IHistogram1D* _hist_electrons; AIDA::IHistogram1D* _hist_muons; AIDA::IHistogram1D* _hist_leptons; AIDA::IHistogram1D* _hist_4leptons; AIDA::IHistogram1D* _hist_veto; AIDA::IHistogram1D* _hist_etmiss; AIDA::IHistogram1D* _hist_meff; AIDA::IHistogram1D* _count_SR1; AIDA::IHistogram1D* _count_SR2; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_CONF_2012_153); } rivet-1.8.3/src/Analyses/CDF_2008_S7828950.cc0000644000175000017500000000357312116077757016070 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief CDF Run II inclusive jet cross-section using the Midpoint algorithm. /// /// The analysis includes 1.1fb^-1 of CDF data and is the first with a /// cone algorithm to include the forward region of the detector. /// arXiv:0807.2204 to be published in PRD class CDF_2008_S7828950 : public Analysis { public: /// Constructor CDF_2008_S7828950() : Analysis("CDF_2008_S7828950") { } /// @name Analysis methods //@{ // Book histos and set counters for number of events passed in each one void init() { const FinalState fs; addProjection(FastJets(fs, FastJets::CDFMIDPOINT, 0.7), "JetsM07"); _binnedHistosR07.addHistogram( 0, 0.1, bookHistogram1D(1, 1, 1)); _binnedHistosR07.addHistogram(0.1, 0.7, bookHistogram1D(2, 1, 1)); _binnedHistosR07.addHistogram(0.7, 1.1, bookHistogram1D(3, 1, 1)); _binnedHistosR07.addHistogram(1.1, 1.6, bookHistogram1D(4, 1, 1)); _binnedHistosR07.addHistogram(1.6, 2.1, bookHistogram1D(5, 1, 1)); } // Do the analysis void analyze(const Event& event) { const double weight = event.weight(); foreach (const Jet& jet, applyProjection(event, "JetsM07").jets(62.0*GeV)) { _binnedHistosR07.fill(fabs(jet.momentum().rapidity()), jet.momentum().pT(), weight); } } // Normalise histograms to cross-section void finalize() { _binnedHistosR07.scale(crossSection()/nanobarn/sumOfWeights()/2.0, this); } //@} private: /// Histograms in different eta regions BinnedHistogram _binnedHistosR07; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2008_S7828950); } rivet-1.8.3/src/Analyses/EXAMPLE.cc0000644000175000017500000001034712116077757015042 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/Multiplicity.hh" #include "Rivet/Projections/Thrust.hh" #include "Rivet/Projections/Sphericity.hh" namespace Rivet { /// @brief Just measures a few random things as an example. class EXAMPLE : public Analysis { public: /// Constructor EXAMPLE() : Analysis("EXAMPLE") { // No counters etc. to initialise, hence nothing to do here! } /// @name Analysis methods //@{ /// Set up projections and book histograms void init() { // Projections const FinalState cnfs(-4, 4, 2*GeV); const ChargedFinalState cfs(-4, 4, 2*GeV); addProjection(cnfs, "FS"); addProjection(cfs, "CFS"); addProjection(FastJets(cnfs, FastJets::KT, 0.7), "Jets"); addProjection(Multiplicity(cfs), "CMult"); addProjection(Multiplicity(cnfs), "CNMult"); addProjection(Thrust(cfs), "Thrust"); addProjection(Sphericity(cfs), "Sphericity"); // Histograms _histTot = bookHistogram1D("TotalMult", 100, -0.5, 99.5); _histChTot = bookHistogram1D("TotalChMult", 50, -1.0, 99.0); _histHadrTot = bookHistogram1D("HadrTotalMult", 100, -0.5, 99.5); _histHadrChTot = bookHistogram1D("HadrTotalChMult", 50, -1.0, 99.0); _histMajor = bookHistogram1D("Major", 10, 0.0, 0.6); _histSphericity = bookHistogram1D("Sphericity", 10, 0.0, 0.8); _histAplanarity = bookHistogram1D("Aplanarity", 10, 0.0, 0.3); // Non-uniform binning example: double edges[11] = { 0.5, 0.6, 0.7, 0.80, 0.85, 0.9, 0.92, 0.94, 0.96, 0.98, 1.0 }; vector vedges(edges, edges+11); _histThrust = bookHistogram1D("Thrust", vedges); } /// Do the analysis void analyze(const Event& event) { // Make sure to always include the event weight in histogram fills! const double weight = event.weight(); const Multiplicity& cnm = applyProjection(event, "CNMult"); MSG_DEBUG("Total multiplicity = " << cnm.totalMultiplicity()); _histTot->fill(cnm.totalMultiplicity(), weight); MSG_DEBUG("Hadron multiplicity = " << cnm.hadronMultiplicity()); _histHadrTot->fill(cnm.hadronMultiplicity(), weight); const Multiplicity& cm = applyProjection(event, "CMult"); MSG_DEBUG("Total charged multiplicity = " << cm.totalMultiplicity()); _histChTot->fill(cm.totalMultiplicity(), weight); MSG_DEBUG("Hadron charged multiplicity = " << cm.hadronMultiplicity()); _histHadrChTot->fill(cm.hadronMultiplicity(), weight); const Thrust& t = applyProjection(event, "Thrust"); MSG_DEBUG("Thrust = " << t.thrust()); _histThrust->fill(t.thrust(), weight); _histMajor->fill(t.thrustMajor(), weight); const Sphericity& s = applyProjection(event, "Sphericity"); MSG_DEBUG("Sphericity = " << s.sphericity()); _histSphericity->fill(s.sphericity(), weight); MSG_DEBUG("Aplanarity = " << s.aplanarity()); _histAplanarity->fill(s.aplanarity(), weight); unsigned int num_b_jets = 0; const Jets jets = applyProjection(event, "Jets").jets(5*GeV); foreach (const Jet& j, jets) { if (j.containsBottom()) num_b_jets += 1; } MSG_DEBUG("Num B-jets with pT > 5 GeV = " << num_b_jets); } /// Finalize void finalize() { normalize(_histTot); normalize(_histChTot); normalize(_histHadrTot); normalize(_histHadrChTot); normalize(_histThrust); normalize(_histMajor); normalize(_histSphericity); normalize(_histAplanarity); } //@} private: //@{ /// Histograms AIDA::IHistogram1D* _histTot; AIDA::IHistogram1D* _histChTot; AIDA::IHistogram1D* _histHadrTot; AIDA::IHistogram1D* _histHadrChTot; AIDA::IHistogram1D* _histThrust; AIDA::IHistogram1D* _histMajor; AIDA::IHistogram1D* _histSphericity; AIDA::IHistogram1D* _histAplanarity; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(EXAMPLE); } rivet-1.8.3/src/Analyses/CMS_2011_S9120041.cc0000644000175000017500000001132512116077757016054 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/FastJets.hh" using namespace std; namespace Rivet { // UE charged particles vs. leading jet class CMS_2011_S9120041 : public Analysis { public: /// Constructor CMS_2011_S9120041() : Analysis("CMS_2011_S9120041") {} void init() { const ChargedFinalState cfs(-2.0, 2.0, 500*MeV); addProjection(cfs, "CFS"); const ChargedFinalState cfsforjet(-2.5, 2.5, 500*MeV); const FastJets jetpro(cfsforjet, FastJets::SISCONE, 0.5); addProjection(jetpro, "Jets"); if (fuzzyEquals(sqrtS(), 7.0*TeV)) { _h_Nch_vs_pT = bookProfile1D(1, 1, 1); // Nch vs. pT_max _h_Sum_vs_pT = bookProfile1D(2, 1, 1); // sum(pT) vs. pT_max _h_pT3_Nch = bookHistogram1D(5, 1, 1); // transverse Nch, pT_max > 3GeV _h_pT3_Sum = bookHistogram1D(6, 1, 1); // transverse sum(pT), pT_max > 3GeV _h_pT3_pT = bookHistogram1D(7, 1, 1); // transverse pT, pT_max > 3GeV _h_pT20_Nch = bookHistogram1D(8, 1, 1); // transverse Nch, pT_max > 20GeV _h_pT20_Sum = bookHistogram1D(9, 1, 1); // transverse sum(pT), pT_max > 20GeV _h_pT20_pT = bookHistogram1D(10, 1, 1); // transverse pT, pT_max > 20GeV } if (fuzzyEquals(sqrtS(), 0.9*TeV)) { _h_Nch_vs_pT = bookProfile1D(3, 1, 1); // Nch vs. pT_max _h_Sum_vs_pT = bookProfile1D(4, 1, 1); // sum(pT) vs. pT_max _h_pT3_Nch = bookHistogram1D(11, 1, 1); // transverse Nch, pT_max > 3GeV _h_pT3_Sum = bookHistogram1D(12, 1, 1); // transverse sum(pT), pT_max > 3GeV _h_pT3_pT = bookHistogram1D(13, 1, 1); // transverse pT, pT_max > 3GeV } sumOfWeights3 = 0.0; sumOfWeights20 = 0.0; _nch_tot_pT3 = 0.0; _nch_tot_pT20 = 0.0; } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // Find the lead jet, applying a restriction that the jets must be within |eta| < 2. FourMomentum p_lead; foreach (const Jet& j, applyProjection(event, "Jets").jetsByPt(1.0*GeV)) { if (fabs(j.momentum().eta()) < 2.0) { p_lead = j.momentum(); break; } } if (p_lead.isZero()) vetoEvent; const double philead = p_lead.phi(); const double pTlead = p_lead.pT(); ParticleVector particles = applyProjection(event, "CFS").particlesByPt(); int nTransverse = 0; double ptSumTransverse = 0.; foreach (const Particle& p, particles) { double dphi = fabs(deltaPhi(philead, p.momentum().phi())); if (dphi>PI/3. && dphi 3.0*GeV) _h_pT3_pT->fill(pT, weight); if (fuzzyEquals(sqrtS(), 7.0*TeV) && pTlead > 20.0*GeV) _h_pT20_pT->fill(pT, weight); } } const double area = 8./3. * PI; _h_Nch_vs_pT->fill(pTlead/GeV, 1./area*nTransverse, weight); _h_Sum_vs_pT->fill(pTlead/GeV, 1./area*ptSumTransverse, weight); if(pTlead > 3.0*GeV) { _h_pT3_Nch->fill(nTransverse, weight); _h_pT3_Sum->fill(ptSumTransverse, weight); sumOfWeights3 += weight; _nch_tot_pT3 += weight*nTransverse; } if (fuzzyEquals(sqrtS(), 7.0*TeV) && pTlead > 20.0*GeV) { _h_pT20_Nch->fill(nTransverse, weight); _h_pT20_Sum->fill(ptSumTransverse, weight); sumOfWeights20 += weight; _nch_tot_pT20 += weight*nTransverse; } } /// Normalise histograms etc., after the run void finalize() { normalize(_h_pT3_Nch); normalize(_h_pT3_Sum); if (sumOfWeights3 != 0.0) normalize(_h_pT3_pT, _nch_tot_pT3 / sumOfWeights3); if (fuzzyEquals(sqrtS(), 7.0*TeV)) { normalize(_h_pT20_Nch); normalize(_h_pT20_Sum); if (sumOfWeights20 != 0.0) normalize(_h_pT20_pT, _nch_tot_pT20 / sumOfWeights20); } } private: double sumOfWeights3; double sumOfWeights20; double _nch_tot_pT3; double _nch_tot_pT20; AIDA::IProfile1D* _h_Nch_vs_pT; AIDA::IProfile1D* _h_Sum_vs_pT; AIDA::IHistogram1D* _h_pT3_Nch; AIDA::IHistogram1D* _h_pT3_Sum; AIDA::IHistogram1D* _h_pT3_pT; AIDA::IHistogram1D* _h_pT20_Nch; AIDA::IHistogram1D* _h_pT20_Sum; AIDA::IHistogram1D* _h_pT20_pT; }; // This global object acts as a hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2011_S9120041); } rivet-1.8.3/src/Analyses/MC_PRINTEVENT.cc0000644000175000017500000001731412116077757016025 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" //#include "Rivet/RivetYODA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { /// @author Andy Buckley class MC_PRINTEVENT : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor MC_PRINTEVENT() : Analysis("MC_PRINTEVENT") { } //@} public: /// @name Analysis methods //@{ void init() { /// Set up particle name map // quarks & gluons _pnames[1] = "d"; _pnames[-1] = "d~"; _pnames[2] = "u"; _pnames[-2] = "u~"; _pnames[3] = "s"; _pnames[-3] = "s~"; _pnames[4] = "c"; _pnames[-4] = "c~"; _pnames[5] = "b"; _pnames[-5] = "b~"; _pnames[6] = "t"; _pnames[-6] = "t~"; // bosons _pnames[21] = "g"; _pnames[22] = "gamma"; _pnames[23] = "W+"; _pnames[-23] = "W-"; _pnames[-24] = "Z0"; _pnames[-25] = "h0"; _pnames[-26] = "h0"; // leptons _pnames[11] = "e-"; _pnames[-11] = "e+"; _pnames[13] = "mu-"; _pnames[-13] = "mu+"; _pnames[15] = "tau-"; _pnames[-15] = "tau+"; _pnames[12] = "nu_e"; _pnames[-12] = "nu_e~"; _pnames[14] = "nu_mu"; _pnames[-14] = "nu_mu~"; _pnames[16] = "nu_tau"; _pnames[-16] = "nu_tau~"; // common hadrons _pnames[111] = "pi0"; _pnames[211] = "pi+"; _pnames[-211] = "pi-"; _pnames[221] = "eta"; _pnames[331] = "eta'"; _pnames[113] = "rho0"; _pnames[213] = "rho+"; _pnames[-213] = "rho-"; _pnames[223] = "omega"; _pnames[333] = "phi"; _pnames[130] = "K0L"; _pnames[310] = "K0S"; _pnames[311] = "K0"; _pnames[-311] = "K0"; _pnames[321] = "K+"; _pnames[-321] = "K-"; _pnames[313] = "K*0"; _pnames[-313] = "K*0~"; _pnames[323] = "K*+"; _pnames[-323] = "K*-"; _pnames[411] = "D+"; _pnames[-411] = "D-"; _pnames[421] = "D0"; _pnames[-421] = "D0~"; _pnames[413] = "D*+"; _pnames[-413] = "D*-"; _pnames[423] = "D*0"; _pnames[-423] = "D*0~"; _pnames[431] = "Ds+"; _pnames[-431] = "Ds-"; _pnames[433] = "Ds*+"; _pnames[-433] = "Ds*-"; _pnames[511] = "B0"; _pnames[-511] = "B0~"; _pnames[521] = "B+"; _pnames[-521] = "B-"; _pnames[513] = "B*0"; _pnames[-513] = "B*0~"; _pnames[523] = "B*+"; _pnames[-523] = "B*-"; _pnames[531] = "B0s"; _pnames[541] = "Bc+"; _pnames[-541] = "Bc-"; _pnames[441] = "eta_c(1S)"; _pnames[443] = "J/psi(1S)"; _pnames[551] = "eta_b(1S)"; _pnames[553] = "Upsilon(1S)"; _pnames[2212] = "p+"; _pnames[-2212] = "p-"; _pnames[2112] = "n"; _pnames[-2112] = "n~"; _pnames[2224] = "Delta++"; _pnames[2214] = "Delta+"; _pnames[2114] = "Delta0"; _pnames[1114] = "Delta-"; _pnames[3122] = "Lambda"; _pnames[-3122] = "Lambda~"; _pnames[3222] = "Sigma+"; _pnames[-3222] = "Sigma+~"; _pnames[3212] = "Sigma0"; _pnames[-3212] = "Sigma0~"; _pnames[3112] = "Sigma-"; _pnames[-3112] = "Sigma-~"; _pnames[4122] = "Lambda_c+"; _pnames[-4122] = "Lambda_c-"; _pnames[5122] = "Lambda_b"; // exotic _pnames[32] = "Z'"; _pnames[34] = "W'+"; _pnames[-34] = "W'-"; _pnames[35] = "H0"; _pnames[36] = "A0"; _pnames[37] = "H+"; _pnames[-37] = "H-"; // shower-specific _pnames[91] = "cluster"; _pnames[92] = "string"; _pnames[9922212] = "remn"; _pnames[1103] = "dd"; _pnames[2101] = "ud0"; _pnames[2103] = "ud1"; _pnames[2203] = "uu"; } /// Perform the per-event analysis void analyze(const Event& event) { //printEvent(event.genEvent()); const GenEvent& evt = event.genEvent(); cout << string(120, '=') << "\n" << endl; // Weights cout << "Weights(" << evt.weights().size() << ")="; for (HepMC::WeightContainer::const_iterator wgt = evt.weights().begin(); wgt != evt.weights().end(); ++wgt) { cout << *wgt << " "; } cout << "\n" << "EventScale " << evt.event_scale() << " [energy] \t alphaQCD=" << evt.alphaQCD() << "\t alphaQED=" << evt.alphaQED() << endl; if (evt.pdf_info()) { cout << "PdfInfo: id1=" << evt.pdf_info()->id1() << " id2=" << evt.pdf_info()->id2() << " x1=" << evt.pdf_info()->x1() << " x2=" << evt.pdf_info()->x2() << " q=" << evt.pdf_info()->scalePDF() << " xpdf1=" << evt.pdf_info()->pdf1() << " xpdf2=" << evt.pdf_info()->pdf2() << endl; } else { cout << "PdfInfo: EMPTY"; } // Print a legend to describe the particle info char particle_legend[120]; sprintf( particle_legend," %9s %8s %-15s %4s %8s %8s (%9s,%9s,%9s,%9s,%9s)", "Barcode","PDG ID","Name","Stat","ProdVtx","DecayVtx","Px","Py","Pz","E ","m"); cout << endl; cout << " GenParticle Legend\n" << particle_legend << "\n"; // if (m_vertexinfo) { // sprintf( particle_legend," %60s (%9s,%9s,%9s,%9s)"," ","Vx","Vy","Vz","Vct "); // cout << particle_legend << endl; // } // cout << string(120, '_') << endl; // Print all particles // const HepPDT::ParticleDataTable* pdt = m_ppsvc->PDT(); for (HepMC::GenEvent::particle_const_iterator p = evt.particles_begin(); p != evt.particles_end(); ++p) { int p_bcode = (*p)->barcode(); int p_pdg_id = (*p)->pdg_id(); double p_px = (*p)->momentum().px(); double p_py = (*p)->momentum().py(); double p_pz = (*p)->momentum().pz(); double p_pe = (*p)->momentum().e(); int p_stat = (*p)->status(); int p_prodvtx = 0; if ((*p)->production_vertex() && (*p)->production_vertex()->barcode() != 0) { p_prodvtx = (*p)->production_vertex()->barcode(); } int p_endvtx = 0; if ((*p)->end_vertex() && (*p)->end_vertex()->barcode() != 0) { p_endvtx=(*p)->end_vertex()->barcode(); } // double v_x = 0; // double v_y = 0; // double v_z = 0; // double v_ct = 0; // if ((*p)->production_vertex()) { // v_x = (*p)->production_vertex()->position().x(); // v_y = (*p)->production_vertex()->position().y(); // v_z = (*p)->production_vertex()->position().z(); // v_ct = (*p)->production_vertex()->position().t(); // } // Mass (prefer generated mass if available) double p_mass = (*p)->generated_mass(); if (p_mass == 0 && !(p_stat == 1 && p_pdg_id == 22)) p_mass = (*p)->momentum().m(); // Particle names string sname = (_pnames.find(p_pdg_id) != _pnames.end()) ? _pnames[p_pdg_id] : ""; const char* p_name = sname.c_str() ; char particle_entries[120]; sprintf(particle_entries, " %9i %8i %-15s %4i %8i %8i (%+9.3g,%+9.3g,%+9.3g,%+9.3g,%9.3g)", p_bcode, p_pdg_id, p_name, p_stat, p_prodvtx, p_endvtx, p_px, p_py, p_pz, p_pe, p_mass); cout << particle_entries << "\n"; // if (m_vertexinfo) { // sprintf(particle_entries," %60s (%+9.3g,%+9.3g,%+9.3g,%+9.3g)"," ",v_x, v_y, v_z, v_ct); // cout << particle_entries << "\n"; // } } cout << "\n" << endl; } /// Normalise histograms etc., after the run void finalize() { } //@} private: map _pnames; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_PRINTEVENT); } rivet-1.8.3/src/Analyses/ATLAS_2011_I954993.cc0000644000175000017500000001027612116077757016236 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Projections/WFinder.hh" #include "Rivet/Projections/VetoedFinalState.hh" namespace Rivet { /// @brief MC validation analysis for WZ events class ATLAS_2011_I954993 : public Analysis { public: /// Default constructor ATLAS_2011_I954993() : Analysis("ATLAS_2011_I954993") { setNeedsCrossSection(true); } /// @name Analysis methods //@{ /// Book histograms void init() { //// ZFinder: etaMin,etaMax,pTmin,pid,m2_min,m2_max,dRmax,clusterPhotons,excludePhotonsFromRFS ZFinder zfinder_e( -2.5, 2.5, 15.0*GeV, ELECTRON, 81.1876*GeV, 101.1876*GeV, 0.1, true, true); addProjection(zfinder_e, "ZFinder_e"); ZFinder zfinder_mu(-2.5, 2.5, 15.0*GeV, MUON, 81.1876*GeV, 101.1876*GeV, 0.1, true, true); addProjection(zfinder_mu, "ZFinder_mu"); //// WFinder: etaRanges,pTmin,pid,m2_min,m2_max,missingET,dRmax VetoedFinalState weinput; weinput.addVetoOnThisFinalState(zfinder_e); WFinder wfinder_e(weinput, -2.5, 2.5, 15.0*GeV, ELECTRON, 0.0*GeV, 1000.0*GeV, 25.0*GeV, 0.1); addProjection(wfinder_e, "WFinder_e"); VetoedFinalState wminput; wminput.addVetoOnThisFinalState(zfinder_mu); WFinder wfinder_mu(wminput,-2.5, 2.5, 15.0*GeV, MUON, 0.0*GeV, 1000.0*GeV, 25.0*GeV, 0.1); addProjection(wfinder_mu, "WFinder_mu"); //// Histograms _h_fiducial = bookHistogram1D(1,1,1); } /// Do the analysis void analyze(const Event & e) { const double weight = e.weight(); const ZFinder& zfinder_e = applyProjection(e, "ZFinder_e"); const ZFinder& zfinder_mu = applyProjection(e, "ZFinder_mu"); const WFinder& wfinder_e = applyProjection(e, "WFinder_e"); const WFinder& wfinder_mu = applyProjection(e, "WFinder_mu"); // Looking for a Z if (zfinder_e.bosons().size()!= 1 && zfinder_mu.bosons().size() != 1) { MSG_DEBUG("No Z boson found, vetoing event"); vetoEvent; } // Looking for a W if (wfinder_e.bosons().size()!= 1 && wfinder_mu.bosons().size() != 1) { MSG_DEBUG("No W boson found, vetoing event"); vetoEvent; } // If we find a W... FourMomentum wmom_e(0.0,0.0,0.0,0.0), We(0.0,0.0,0.0,0.0), Wenu(0.0,0.0,0.0,0.0); FourMomentum wmom_mu(0.0,0.0,0.0,0.0), Wmu(0.0,0.0,0.0,0.0), Wmunu(0.0,0.0,0.0,0.0); if(wfinder_e.bosons().size()== 1){ wmom_e = wfinder_e.bosons().front().momentum(); We = wfinder_e.constituentLeptons()[0].momentum(); Wenu = wfinder_e.constituentNeutrinos()[0].momentum(); } if(wfinder_mu.bosons().size()== 1){ wmom_mu = wfinder_mu.bosons().front().momentum(); Wmu = wfinder_mu.constituentLeptons()[0].momentum(); Wmunu = wfinder_mu.constituentNeutrinos()[0].momentum(); } // Applying remaining fiducial phase space requirements double mT = 0; if(wfinder_e.bosons().size() == 1){ mT = sqrt(2*We.pT()*Wenu.Et()*(1.0-cos(We.phi()-Wenu.phi()))); if (Wenu.pT()/GeV < 25.0 || We.pT()/GeV < 20.0 || mT/GeV < 20.0) { MSG_DEBUG(" Wnu.pT()/GeV:" << Wenu.pT()/GeV<<" Wl.pT()/GeV:" << We.pT()/GeV<<" mT/GeV:" << mT/GeV); vetoEvent; } } else if(wfinder_mu.bosons().size() == 1){ mT = sqrt(2*Wmu.pT()*Wmunu.Et()*(1.0-cos(Wmu.phi()-Wmunu.phi()))); if (Wmunu.pT()/GeV < 25.0 || Wmu.pT()/GeV < 20.0 || mT/GeV < 20.0) { MSG_DEBUG(" Wnu.pT()/GeV:" << Wmunu.pT()/GeV<<" Wl.pT()/GeV:" << Wmu.pT()/GeV<<" mT/GeV:" << mT/GeV); vetoEvent; } } else{ MSG_DEBUG("No W boson found, can't make a transverse mass, vetoing event"); vetoEvent; } _h_fiducial->fill(7000.0, weight); } /// Finalize void finalize() { scale(_h_fiducial, crossSection()/femtobarn/sumOfWeights()); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D* _h_fiducial; //@} }; //// The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_I954993); } rivet-1.8.3/src/Analyses/ATLAS_2011_S9120807.cc0000644000175000017500000001457212116077757016317 0ustar sunsun// -*- C++ -*- #include #include #include #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Jet.hh" #include "Rivet/Projections/FastJets.hh" #include "fastjet/internal/base.hh" #include "fastjet/JetDefinition.hh" #include "fastjet/AreaDefinition.hh" #include "fastjet/ClusterSequence.hh" #include "fastjet/ClusterSequenceArea.hh" #include "fastjet/PseudoJet.hh" namespace Rivet { /// @brief Measurement of isolated diphoton + X differential cross-sections /// /// Inclusive isolated gamma gamma cross-sections, differential in M(gg), pT(gg), /// dphi(gg) /// /// @author Giovanni Marchiori class ATLAS_2011_S9120807 : public Analysis { public: /// Constructor ATLAS_2011_S9120807() : Analysis("ATLAS_2011_S9120807") { _eta_bins_areaoffset.push_back(0.0); _eta_bins_areaoffset.push_back(1.5); _eta_bins_areaoffset.push_back(3.0); } public: /// Book histograms and initialise projections before the run void init() { FinalState fs; addProjection(fs, "FS"); FastJets fj(fs, FastJets::KT, 0.5); _area_def = new fastjet::AreaDefinition(fastjet::VoronoiAreaSpec()); fj.useJetArea(_area_def); addProjection(fj, "KtJetsD05"); IdentifiedFinalState photonfs(-2.37, 2.37, 16.0*GeV); photonfs.acceptId(PHOTON); addProjection(photonfs, "Photon"); _h_M = bookHistogram1D(1, 1, 1); _h_pT = bookHistogram1D(2, 1, 1); _h_dPhi = bookHistogram1D(3, 1, 1); } int getEtaBin(double eta_w) const { double eta = fabs(eta_w); int v_iter=0; for (v_iter=0; v_iter < (int)_eta_bins_areaoffset.size()-1; v_iter++) { if (inRange(eta, _eta_bins_areaoffset[v_iter], _eta_bins_areaoffset[v_iter+1])) break; } return v_iter; } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); /// /// require at least 2 photons in final state /// ParticleVector photons = applyProjection(event, "Photon").particlesByPt(); if (photons.size() < 2) { vetoEvent; } /// /// compute the median energy density /// std::vector _ptDensity; std::vector< std::vector > ptDensities; std::vector emptyVec; ptDensities.assign(_eta_bins_areaoffset.size()-1, emptyVec); const fastjet::ClusterSequenceArea* clust_seq_area = applyProjection(event, "KtJetsD05").clusterSeqArea(); foreach (const fastjet::PseudoJet& jet, applyProjection(event, "KtJetsD05").pseudoJets(0.0*GeV)) { double eta = fabs(jet.eta()); double pt = fabs(jet.perp()); /// get the cluster sequence double area = clust_seq_area->area(jet); if(area > 10e-4 && fabs(eta) < _eta_bins_areaoffset[_eta_bins_areaoffset.size()-1]) { ptDensities.at(getEtaBin(fabs(eta))).push_back(pt/area); } } for(int b=0; b<(int)_eta_bins_areaoffset.size()-1; b++) { double median = 0.0; if(ptDensities[b].size() > 0) { std::sort(ptDensities[b].begin(), ptDensities[b].end()); int nDens = ptDensities[b].size(); if( nDens%2 == 0 ) median = (ptDensities[b][nDens/2] + ptDensities[b][(nDens-2)/2]) / 2; else median = ptDensities[b][(nDens-1)/2]; } _ptDensity.push_back(median); } /// /// Loop over photons and fill vector of isolated ones /// ParticleVector isolated_photons; foreach (const Particle& photon, photons) { /// /// remove photons in crack /// double eta_P = photon.momentum().eta(); if (fabs(eta_P)>=1.37 && fabs(eta_P)<1.52) continue; double phi_P = photon.momentum().phi(); /// /// compute isolation /// /// std EtCone ParticleVector fs = applyProjection(event, "FS").particles(); FourMomentum mom_in_EtCone; foreach (const Particle& p, fs) { /// check if it's in the cone of .4 if (deltaR(eta_P, phi_P, p.momentum().eta(), p.momentum().phi()) >= 0.4) continue; /// check if it's in the 5x7 central core if (fabs(eta_P-p.momentum().eta()) < .025*7.0*0.5 && fabs(phi_P-p.momentum().phi()) < (M_PI/128.)*5.0*0.5) continue; mom_in_EtCone += p.momentum(); } /// now figure out the correction (area*density) double EtCone_area = M_PI*.4*.4 - (7.0*.025)*(5.0*M_PI/128.); double correction = _ptDensity[getEtaBin(eta_P)]*EtCone_area; /// shouldn't need to subtract photon /// note: using expected cut at hadron/particle level, not cut at reco level if (mom_in_EtCone.Et()-correction > 4.0*GeV) { continue; } /// add photon to list of isolated ones isolated_photons.push_back(photon); } /// /// require at least two isolated photons /// if (isolated_photons.size() < 2) { vetoEvent; } /// /// select leading pT pair /// std::sort(isolated_photons.begin(), isolated_photons.end(), cmpParticleByPt); FourMomentum y1=isolated_photons[0].momentum(); FourMomentum y2=isolated_photons[1].momentum(); /// /// require the two photons to be separated (dR>0.4) /// if (deltaR(y1, y2)<0.4) { vetoEvent; } FourMomentum yy = y1+y2; double Myy = yy.mass()/GeV; double pTyy = yy.pT()/GeV; double dPhiyy = deltaPhi(y1.phi(), y2.phi()); _h_M->fill(Myy, weight); _h_pT->fill(pTyy, weight); _h_dPhi->fill(dPhiyy, weight); } /// Normalise histograms etc., after the run void finalize() { scale(_h_M, crossSection()/sumOfWeights()); scale(_h_pT, crossSection()/sumOfWeights()); scale(_h_dPhi, crossSection()/sumOfWeights()); } private: AIDA::IHistogram1D *_h_M; AIDA::IHistogram1D *_h_pT; AIDA::IHistogram1D *_h_dPhi; fastjet::AreaDefinition* _area_def; std::vector _eta_bins_areaoffset; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_S9120807); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1125961.cc0000644000175000017500000002562012116077757016300 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/VetoedFinalState.hh" namespace Rivet { /// @author Peter Richardson class ATLAS_2012_I1125961 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_I1125961() : Analysis("ATLAS_2012_I1125961") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // Projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 20.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // Projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // Jet finder VetoedFinalState vfs; vfs.addVetoPairId(MUON); addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // All tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0),"cfs"); // Used for pTmiss (N.B. the real 'vfs' extends beyond 4.5 to |eta| = 4.9) addProjection(VisibleFinalState(-4.5,4.5),"vfs"); // Book histograms _count_A_tight = bookHistogram1D("count_A_tight" , 1, 0., 1.); _count_A_medium = bookHistogram1D("count_A_medium" , 1, 0., 1.); _count_Ap_medium = bookHistogram1D("count_Ap_medium" , 1, 0., 1.); _count_B_tight = bookHistogram1D("count_B_tight" , 1, 0., 1.); _count_C_tight = bookHistogram1D("count_C_tight" , 1, 0., 1.); _count_C_medium = bookHistogram1D("count_C_medium" , 1, 0., 1.); _count_C_loose = bookHistogram1D("count_C_loose" , 1, 0., 1.); _count_D_tight = bookHistogram1D("count_D_tight" , 1, 0., 1.); _count_E_tight = bookHistogram1D("count_E_tight" , 1, 0., 1.); _count_E_medium = bookHistogram1D("count_E_medium" , 1, 0., 1.); _count_E_loose = bookHistogram1D("count_E_loose" , 1, 0., 1.); _hist_meff_A = bookHistogram1D("hist_m_eff_A" , 30, 0., 3000.); _hist_meff_Ap = bookHistogram1D("hist_m_eff_Ap", 30, 0., 3000.); _hist_meff_B = bookHistogram1D("hist_m_eff_B" , 30, 0., 3000.); _hist_meff_C = bookHistogram1D("hist_m_eff_C" , 30, 0., 3000.); _hist_meff_D = bookHistogram1D("hist_m_eff_D" , 30, 0., 3000.); _hist_meff_E = bookHistogram1D("hist_m_eff_E" , 30, 0., 3000.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); Jets cand_jets; const Jets jets = applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV); foreach (const Jet& jet, jets) { if ( fabs( jet.momentum().eta() ) < 4.9 ) { cand_jets.push_back(jet); } } const ParticleVector cand_e = applyProjection(event, "elecs").particlesByPt(); // Muon isolation not mentioned in hep-exp 1109.6572 but assumed to still be applicable ParticleVector cand_mu; const ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); const ParticleVector muons = applyProjection(event, "muons").particlesByPt(); foreach (const Particle& mu, muons) { double pTinCone = -mu.momentum().pT(); foreach (const Particle& track, chg_tracks) { if ( deltaR(mu.momentum(),track.momentum()) <= 0.2 ) { pTinCone += track.momentum().pT(); } } if ( pTinCone < 1.8*GeV ) cand_mu.push_back(mu); } // Resolve jet-lepton overlap for jets with |eta| < 2.8 Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { if ( fabs( jet.momentum().eta() ) >= 2.8 ) continue; bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) recon_jets.push_back( jet ); } ParticleVector recon_e, recon_mu; foreach ( const Particle & e, cand_e ) { bool away = true; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } if ( away ) recon_e.push_back( e ); } foreach ( const Particle & mu, cand_mu ) { bool away = true; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } if ( away ) recon_mu.push_back( mu ); } // pTmiss // Based on all candidate electrons, muons and jets, plus everything else with |eta| < 4.5 // i.e. everything in our projection "vfs" plus the jets with |eta| > 4.5 ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } foreach ( const Jet& jet, cand_jets ) { if ( fabs( jet.momentum().eta() ) > 4.5 ) pTmiss -= jet.momentum(); } double eTmiss = pTmiss.pT(); // no electron pT> 20 or muons pT>10 if ( !recon_mu.empty() || !recon_e.empty() ) { MSG_DEBUG("Charged leptons left after selection"); vetoEvent; } if ( eTmiss <= 160 * GeV ) { MSG_DEBUG("Not enough eTmiss: " << eTmiss << " < 130"); vetoEvent; } if ( recon_jets.size()<2 || recon_jets[0].momentum().pT() <= 130.0 * GeV || recon_jets[0].momentum().pT() <= 60.0 * GeV ) { MSG_DEBUG("No hard leading jet in " << recon_jets.size() << " jets"); vetoEvent; } // ==================== observables ==================== int Njets = 0; double min_dPhi_All = 999.999; double min_dPhi_2 = 999.999; double min_dPhi_3 = 999.999; double pTmiss_phi = pTmiss.phi(); foreach ( const Jet& jet, recon_jets ) { if ( jet.momentum().pT() < 40 * GeV ) continue; if ( Njets < 2 ) { min_dPhi_2 = min( min_dPhi_2, deltaPhi( pTmiss_phi, jet.momentum().phi() ) ); } if( Njets < 3) { min_dPhi_3 = min( min_dPhi_3, deltaPhi( pTmiss_phi, jet.momentum().phi() ) ); } min_dPhi_All = min( min_dPhi_All, deltaPhi( pTmiss_phi, jet.momentum().phi() ) ); ++Njets; } // inclusive meff double m_eff_inc = eTmiss; foreach ( const Jet& jet, recon_jets ) { double perp = jet.momentum().pT(); if(perp>40.) m_eff_inc += perp; } // region A double m_eff_Nj = eTmiss + recon_jets[0].momentum().pT() + recon_jets[1].momentum().pT(); if( min_dPhi_2 > 0.4 && eTmiss/m_eff_Nj > 0.3 ) { _hist_meff_A->fill(m_eff_inc,weight); if(m_eff_inc>1900.) _count_A_tight ->fill(0.5,weight); if(m_eff_inc>1400.) _count_A_medium->fill(0.5,weight); } // region A' if( min_dPhi_2 > 0.4 && eTmiss/m_eff_Nj > 0.4 ) { _hist_meff_Ap->fill(m_eff_inc,weight); if(m_eff_inc>1200.) _count_Ap_medium->fill(0.5,weight); } // for rest of regions 3 jets pT> 60 needed if(recon_jets.size()<3 || recon_jets[2].momentum().perp()<60.) vetoEvent; // region B m_eff_Nj += recon_jets[2].momentum().perp(); if( min_dPhi_3 > 0.4 && eTmiss/m_eff_Nj > 0.25 ) { _hist_meff_B->fill(m_eff_inc,weight); if(m_eff_inc>1900.) _count_B_tight ->fill(0.5,weight); } // for rest of regions 4 jets pT> 60 needed if(recon_jets.size()<4 || recon_jets[3].momentum().perp()<60.) vetoEvent; // region C m_eff_Nj += recon_jets[3].momentum().perp(); if( min_dPhi_3 > 0.4 && min_dPhi_All > 0.2 && eTmiss/m_eff_Nj > 0.25 ) { _hist_meff_C->fill(m_eff_inc,weight); if(m_eff_inc>1500.) _count_C_tight ->fill(0.5,weight); if(m_eff_inc>1200.) _count_C_medium->fill(0.5,weight); if(m_eff_inc> 900.) _count_C_loose ->fill(0.5,weight); } // for rest of regions 5 jets pT> 40 needed if(recon_jets.size()<5 || recon_jets[4].momentum().perp()<40.) vetoEvent; // region D m_eff_Nj += recon_jets[4].momentum().perp(); if( min_dPhi_3 > 0.4 && min_dPhi_All > 0.2 && eTmiss/m_eff_Nj > 0.2 ) { _hist_meff_D->fill(m_eff_inc,weight); if(m_eff_inc>1500.) _count_D_tight ->fill(0.5,weight); } // for rest of regions 6 jets pT> 40 needed if(recon_jets.size()<6 || recon_jets[5].momentum().perp()<40.) vetoEvent; // region E m_eff_Nj += recon_jets[5].momentum().perp(); if( min_dPhi_3 > 0.4 && min_dPhi_All > 0.2 && eTmiss/m_eff_Nj > 0.15 ) { _hist_meff_E->fill(m_eff_inc,weight); if(m_eff_inc>1400.) _count_E_tight ->fill(0.5,weight); if(m_eff_inc>1200.) _count_E_medium->fill(0.5,weight); if(m_eff_inc> 900.) _count_E_loose ->fill(0.5,weight); } } void finalize() { double norm = crossSection()/femtobarn*4.7/sumOfWeights(); // these are number of events at 4.7fb^-1 per 100 GeV scale( _hist_meff_A , 100. * norm ); scale( _hist_meff_Ap, 100. * norm ); scale( _hist_meff_B , 100. * norm ); scale( _hist_meff_C , 100. * norm ); scale( _hist_meff_D , 100. * norm ); scale( _hist_meff_E , 100. * norm ); // these are number of events at 4.7fb^-1 scale(_count_A_tight ,norm); scale(_count_A_medium ,norm); scale(_count_Ap_medium,norm); scale(_count_B_tight ,norm); scale(_count_C_tight ,norm); scale(_count_C_medium ,norm); scale(_count_C_loose ,norm); scale(_count_D_tight ,norm); scale(_count_E_tight ,norm); scale(_count_E_medium ,norm); scale(_count_E_loose ,norm); } //@} private: AIDA::IHistogram1D* _count_A_tight; AIDA::IHistogram1D* _count_A_medium; AIDA::IHistogram1D* _count_Ap_medium; AIDA::IHistogram1D* _count_B_tight; AIDA::IHistogram1D* _count_C_tight; AIDA::IHistogram1D* _count_C_medium; AIDA::IHistogram1D* _count_C_loose; AIDA::IHistogram1D* _count_D_tight; AIDA::IHistogram1D* _count_E_tight; AIDA::IHistogram1D* _count_E_medium; AIDA::IHistogram1D* _count_E_loose; AIDA::IHistogram1D* _hist_meff_A ; AIDA::IHistogram1D* _hist_meff_Ap; AIDA::IHistogram1D* _hist_meff_B ; AIDA::IHistogram1D* _hist_meff_C ; AIDA::IHistogram1D* _hist_meff_D ; AIDA::IHistogram1D* _hist_meff_E ; }; // This global object acts as a hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I1125961); } rivet-1.8.3/src/Analyses/ALICE_2010_S8706239.cc0000644000175000017500000000417412116077757016274 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" namespace Rivet { class ALICE_2010_S8706239 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ALICE_2010_S8706239() : Analysis("ALICE_2010_S8706239"), _Nevt_after_cuts(0.0) { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { ChargedFinalState cfs(-0.8, 0.8, 0.15); addProjection(cfs, "CFS"); _h_pT = bookHistogram1D(4, 1, 1); _h_pT_Nch_015 = bookProfile1D(11, 1, 1); _h_pT_Nch_05 = bookProfile1D(12, 1, 1); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); const ChargedFinalState& charged = applyProjection(event, "CFS"); _Nevt_after_cuts += weight; // Get number of particles that fulfill certain pT requirements int Nch_015 = 0; int Nch_05 = 0; foreach (const Particle& p, charged.particles()) { double pT = p.momentum().pT()/GeV; if (pT < 4.0) Nch_015++; if (pT > 0.5 && pT < 4.0) Nch_05++; } // Now we can fill histograms foreach (const Particle& p, charged.particles()) { double pT = p.momentum().pT()/GeV; if (pT < 4.0) _h_pT_Nch_015 ->fill(Nch_015, pT, weight); if (pT > 0.5 && pT < 4.0) _h_pT_Nch_05 ->fill(Nch_05, pT, weight); // To get the Yield, fill appropriate weight 1/(2PI * pT * d eta) _h_pT->fill(pT, weight /(TWOPI*pT*1.6) ); } } /// Normalise histograms etc., after the run void finalize() { scale(_h_pT, 1.0/_Nevt_after_cuts); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D* _h_pT; AIDA::IProfile1D* _h_pT_Nch_015 ; AIDA::IProfile1D* _h_pT_Nch_05 ; double _Nevt_after_cuts; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ALICE_2010_S8706239); } rivet-1.8.3/src/Analyses/CMS_2012_I1107658.cc0000644000175000017500000001622712116077757016064 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/ParticleName.hh" namespace Rivet { class CMS_2012_I1107658 : public Analysis { public: /// Constructor CMS_2012_I1107658() : Analysis("CMS_2012_I1107658") {} void init() { FinalState fs; ZFinder zfinder(fs, -2.4, 2.4, 20.0*GeV, MUON, 4.0*GeV, 140.0*GeV, 0.2, false, false); addProjection(zfinder, "ZFinder"); ChargedFinalState cfs(-2.0, 2.0, 500*MeV); // For charged particles VetoedFinalState nonmuons(cfs); nonmuons.addVetoPairId(MUON); addProjection(nonmuons, "nonmuons"); _h_Nchg_towards_pTmumu = bookProfile1D(1, 1, 1); _h_Nchg_transverse_pTmumu = bookProfile1D(2, 1, 1); _h_Nchg_away_pTmumu = bookProfile1D(3, 1, 1); _h_pTsum_towards_pTmumu = bookProfile1D(4, 1, 1); _h_pTsum_transverse_pTmumu = bookProfile1D(5, 1, 1); _h_pTsum_away_pTmumu = bookProfile1D(6, 1, 1); _h_avgpT_towards_pTmumu = bookProfile1D(7, 1, 1); _h_avgpT_transverse_pTmumu = bookProfile1D(8, 1, 1); _h_avgpT_away_pTmumu = bookProfile1D(9, 1, 1); _h_Nchg_towards_plus_transverse_Mmumu = bookProfile1D(10, 1, 1); _h_pTsum_towards_plus_transverse_Mmumu = bookProfile1D(11, 1, 1); _h_avgpT_towards_plus_transverse_Mmumu = bookProfile1D(12, 1, 1); _h_Nchg_towards_zmass_81_101 = bookHistogram1D(13, 1, 1); _h_Nchg_transverse_zmass_81_101 = bookHistogram1D(14, 1, 1); _h_Nchg_away_zmass_81_101 = bookHistogram1D(15, 1, 1); _h_pT_towards_zmass_81_101 = bookHistogram1D(16, 1, 1); _h_pT_transverse_zmass_81_101 = bookHistogram1D(17, 1, 1); _h_pT_away_zmass_81_101 = bookHistogram1D(18, 1, 1); _h_Nchg_transverse_zpt_5 = bookHistogram1D(19, 1, 1); _h_pT_transverse_zpt_5 = bookHistogram1D(20, 1, 1); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); const ZFinder& zfinder = applyProjection(event, "ZFinder"); if (zfinder.bosons().size() != 1) vetoEvent; double Zpt = zfinder.bosons()[0].momentum().pT()/GeV; double Zphi = zfinder.bosons()[0].momentum().phi(); double Zmass = zfinder.bosons()[0].momentum().mass()/GeV; ParticleVector particles = applyProjection(event, "nonmuons").particles(); int nTowards = 0; int nTransverse = 0; int nAway = 0; double ptSumTowards = 0.0; double ptSumTransverse = 0.0; double ptSumAway = 0.0; foreach (const Particle& p, particles) { double dphi = fabs(deltaPhi(Zphi, p.momentum().phi())); double pT = p.momentum().pT(); if ( dphi < M_PI/3.0 ) { nTowards++; ptSumTowards += pT; if (Zmass > 81. && Zmass < 101.) _h_pT_towards_zmass_81_101->fill(pT, weight); } else if ( dphi < 2.*M_PI/3.0 ) { nTransverse++; ptSumTransverse += pT; if (Zmass > 81. && Zmass < 101.) _h_pT_transverse_zmass_81_101->fill(pT, weight); if (Zpt < 5.) _h_pT_transverse_zpt_5->fill(pT, weight); } else { nAway++; ptSumAway += pT; if (Zmass > 81. && Zmass < 101.) _h_pT_away_zmass_81_101->fill(pT, weight); } } // Loop over particles const double area = 8./3.*M_PI; if (Zmass > 81. && Zmass < 101.) { _h_Nchg_towards_pTmumu-> fill(Zpt, 1./area * nTowards, weight); _h_Nchg_transverse_pTmumu-> fill(Zpt, 1./area * nTransverse, weight); _h_Nchg_away_pTmumu-> fill(Zpt, 1./area * nAway, weight); _h_pTsum_towards_pTmumu-> fill(Zpt, 1./area * ptSumTowards, weight); _h_pTsum_transverse_pTmumu-> fill(Zpt, 1./area * ptSumTransverse, weight); _h_pTsum_away_pTmumu-> fill(Zpt, 1./area * ptSumAway, weight); if (nTowards > 0) _h_avgpT_towards_pTmumu-> fill(Zpt, ptSumTowards/nTowards, weight); if (nTransverse > 0) _h_avgpT_transverse_pTmumu-> fill(Zpt, ptSumTransverse/nTransverse, weight); if (nAway > 0) _h_avgpT_away_pTmumu-> fill(Zpt, ptSumAway/nAway, weight); _h_Nchg_towards_zmass_81_101-> fill(nTowards, weight); _h_Nchg_transverse_zmass_81_101->fill(nTransverse, weight); _h_Nchg_away_zmass_81_101-> fill(nAway, weight); } if (Zpt < 5.) { _h_Nchg_towards_plus_transverse_Mmumu->fill(Zmass, (nTowards + nTransverse)/(2.*area), weight); _h_pTsum_towards_plus_transverse_Mmumu->fill(Zmass, (ptSumTowards + ptSumTransverse)/(2.*area), weight); if ((nTowards + nTransverse) > 0) _h_avgpT_towards_plus_transverse_Mmumu->fill(Zmass, (ptSumTowards + ptSumTransverse)/(nTowards + nTransverse), weight); _h_Nchg_transverse_zpt_5->fill(nTransverse, weight); } } /// Normalise histograms etc., after the run void finalize() { if (integral(_h_Nchg_towards_zmass_81_101) > 0) scale(_h_pT_towards_zmass_81_101, 1.0/integral(_h_Nchg_towards_zmass_81_101)); if (integral(_h_Nchg_transverse_zmass_81_101) > 0) scale(_h_pT_transverse_zmass_81_101, 1.0/integral(_h_Nchg_transverse_zmass_81_101)); if (integral(_h_Nchg_away_zmass_81_101) > 0) scale(_h_pT_away_zmass_81_101, 1.0/integral(_h_Nchg_away_zmass_81_101)); if (integral(_h_Nchg_transverse_zpt_5) > 0) scale(_h_pT_transverse_zpt_5, 1.0/integral(_h_Nchg_transverse_zpt_5)); normalize(_h_Nchg_towards_zmass_81_101); normalize(_h_Nchg_transverse_zmass_81_101); normalize(_h_Nchg_away_zmass_81_101); normalize(_h_Nchg_transverse_zpt_5); } private: AIDA::IProfile1D* _h_Nchg_towards_pTmumu; AIDA::IProfile1D* _h_Nchg_transverse_pTmumu; AIDA::IProfile1D* _h_Nchg_away_pTmumu; AIDA::IProfile1D* _h_pTsum_towards_pTmumu; AIDA::IProfile1D* _h_pTsum_transverse_pTmumu; AIDA::IProfile1D* _h_pTsum_away_pTmumu; AIDA::IProfile1D* _h_avgpT_towards_pTmumu; AIDA::IProfile1D* _h_avgpT_transverse_pTmumu; AIDA::IProfile1D* _h_avgpT_away_pTmumu; AIDA::IProfile1D* _h_Nchg_towards_plus_transverse_Mmumu; AIDA::IProfile1D* _h_pTsum_towards_plus_transverse_Mmumu; AIDA::IProfile1D* _h_avgpT_towards_plus_transverse_Mmumu; AIDA::IHistogram1D* _h_Nchg_towards_zmass_81_101; AIDA::IHistogram1D* _h_Nchg_transverse_zmass_81_101; AIDA::IHistogram1D* _h_Nchg_away_zmass_81_101; AIDA::IHistogram1D* _h_pT_towards_zmass_81_101; AIDA::IHistogram1D* _h_pT_transverse_zmass_81_101; AIDA::IHistogram1D* _h_pT_away_zmass_81_101; AIDA::IHistogram1D* _h_Nchg_transverse_zpt_5; AIDA::IHistogram1D* _h_pT_transverse_zpt_5; //@} }; // This global object acts as a hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2012_I1107658); } rivet-1.8.3/src/Analyses/ATLAS_2011_S9019561.cc0000644000175000017500000002146412116077757016321 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/VetoedFinalState.hh" namespace Rivet { class ATLAS_2011_S9019561 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2011_S9019561() : Analysis("ATLAS_2011_S9019561") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 20.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // veto region electrons std::vector > eta_v_e; eta_v_e.push_back(make_pair(-1.52,-1.37)); eta_v_e.push_back(make_pair( 1.37, 1.52)); IdentifiedFinalState veto_elecs(eta_v_e, 10.0*GeV); veto_elecs.acceptIdPair(ELECTRON); addProjection(veto_elecs, "veto_elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 20.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // jet finder VetoedFinalState vfs; vfs.addVetoPairId(MUON); addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // all tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0,0.5*GeV),"cfs"); // for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); /// book histograms _count_OS_e_mu = bookHistogram1D("count_OS_e+-mu-+", 1, 0., 1.); _count_OS_e_e = bookHistogram1D("count_OS_e+e-", 1, 0., 1.); _count_OS_mu_mu = bookHistogram1D("count_OS_mu+mu-", 1, 0., 1.); _count_SS_e_mu = bookHistogram1D("count_SS_e+-mu+-", 1, 0., 1.); _count_SS_e_e = bookHistogram1D("count_SS_e+-e+-", 1, 0., 1.); _count_SS_mu_mu = bookHistogram1D("count_SS_mu+-mu+-", 1, 0., 1.); _hist_eTmiss_OS = bookHistogram1D("Et_miss_OS", 20, 0., 400.); _hist_eTmiss_SS = bookHistogram1D("Et_miss_SS", 20, 0., 400.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); ParticleVector veto_e = applyProjection(event, "veto_elecs").particles(); if ( ! veto_e.empty() ) { MSG_DEBUG("electrons in veto region"); vetoEvent; } Jets cand_jets; foreach (const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 2.5 ) { cand_jets.push_back(jet); } } ParticleVector cand_e = applyProjection(event, "elecs").particlesByPt(); // charged particle for isolation ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); // apply muon isolation ParticleVector cand_mu; // pTcone around muon track foreach ( const Particle & mu, applyProjection(event,"muons").particlesByPt() ) { double pTinCone = -mu.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(mu.momentum(),track.momentum()) < 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 1.8*GeV ) cand_mu.push_back(mu); } // Discard jets that overlap with electrons Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) recon_jets.push_back( jet ); } // Leptons far from jet ParticleVector recon_e; foreach ( const Particle & e, cand_e ) { bool e_near_jet = false; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) { e_near_jet = true; break; } } // Electron isolation criterion if ( ! e_near_jet ) { double EtinCone = -e.momentum().Et(); foreach ( const Particle & track, chg_tracks) { if ( deltaR(e.momentum(),track.momentum()) <= 0.2 ) EtinCone += track.momentum().Et(); } if ( EtinCone/e.momentum().pT() <= 0.15 ) recon_e.push_back( e ); } } ParticleVector recon_mu; foreach ( const Particle & mu, cand_mu ) { bool mu_near_jet = false; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) { mu_near_jet = true; break; } } if ( ! mu_near_jet ) recon_mu.push_back( mu ); } // pTmiss ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // Exactly two leptons for each event if ( recon_mu.size() + recon_e.size() != 2) vetoEvent; // Lepton pair mass FourMomentum p_leptons; foreach ( Particle e, recon_e ) { p_leptons += e.momentum(); } foreach ( Particle mu, recon_mu) { p_leptons += mu.momentum(); } if ( p_leptons.mass() <= 5.0 * GeV) vetoEvent; // ==================== FILL ==================== // electron, electron if (recon_e.size() == 2 ) { // SS ee if ( recon_e[0].pdgId() * recon_e[1].pdgId() > 0 ) { _hist_eTmiss_SS->fill(eTmiss, weight); if ( eTmiss > 100 ) { MSG_DEBUG("Hits SS e+/-e+/-"); _count_SS_e_e->fill(0.5, weight); } } // OS ee else if ( recon_e[0].pdgId() * recon_e[1].pdgId() < 0) { _hist_eTmiss_OS->fill(eTmiss, weight); if ( eTmiss > 150 ) { MSG_DEBUG("Hits OS e+e-"); _count_OS_e_e->fill(0.5, weight); } } } // muon, electron else if ( recon_e.size() == 1 ) { // SS mu_e if ( recon_e[0].pdgId() * recon_mu[0].pdgId() > 0 ) { _hist_eTmiss_SS->fill(eTmiss, weight); if ( eTmiss > 100 ) { MSG_DEBUG("Hits SS e+/-mu+/-"); _count_SS_e_mu->fill(0.5, weight); } } // OS mu_e else if ( recon_e[0].pdgId() * recon_mu[0].pdgId() < 0) { _hist_eTmiss_OS->fill(eTmiss, weight); if ( eTmiss > 150 ) { MSG_DEBUG("Hits OS e+mu-"); _count_OS_e_mu->fill(0.5, weight); } } } // muon, muon else if ( recon_mu.size() == 2 ) { // SS mu_mu if ( recon_mu[0].pdgId() * recon_mu[1].pdgId() > 0 ) { _hist_eTmiss_SS->fill(eTmiss, weight); if ( eTmiss > 100 ) { MSG_DEBUG("Hits SS mu+/-mu+/-"); _count_SS_mu_mu->fill(0.5, weight); } } // OS mu_mu else if ( recon_mu[0].pdgId() * recon_mu[1].pdgId() < 0) { _hist_eTmiss_OS->fill(eTmiss, weight); if ( eTmiss > 150 ) { MSG_DEBUG("Hits OS mu+mu-"); _count_OS_mu_mu->fill(0.5, weight); } } } } //@} void finalize() { double norm = crossSection()/picobarn*35./sumOfWeights(); // event counts scale(_count_OS_e_mu ,norm); scale(_count_OS_e_e ,norm); scale(_count_OS_mu_mu,norm); scale(_count_SS_e_mu ,norm); scale(_count_SS_e_e ,norm); scale(_count_SS_mu_mu,norm); scale(_hist_eTmiss_OS,10.*norm); scale(_hist_eTmiss_SS,10.*norm); } private: /// @name Histograms //@{ AIDA::IHistogram1D* _count_OS_e_mu; AIDA::IHistogram1D* _count_OS_e_e; AIDA::IHistogram1D* _count_OS_mu_mu; AIDA::IHistogram1D* _count_SS_e_mu; AIDA::IHistogram1D* _count_SS_e_e; AIDA::IHistogram1D* _count_SS_mu_mu; AIDA::IHistogram1D* _hist_eTmiss_OS; AIDA::IHistogram1D* _hist_eTmiss_SS; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_S9019561); } rivet-1.8.3/src/Analyses/ATLAS_2011_S8994773.cc0000644000175000017500000001151012116077757016330 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Tools/Logging.hh" #include "LWH/Profile1D.h" #include "LWH/Histogram1D.h" namespace Rivet { /// @author Jinlong Zhang class ATLAS_2011_S8994773 : public Analysis { public: ATLAS_2011_S8994773() : Analysis("ATLAS_2011_S8994773") { } void init() { const FinalState fs500(-2.5, 2.5, 500*MeV); addProjection(fs500, "FS500"); const FinalState fslead(-2.5, 2.5, 1.0*GeV); addProjection(fslead, "FSlead"); // Get an index for the beam energy isqrts = -1; if (fuzzyEquals(sqrtS(), 900*GeV)) isqrts = 0; else if (fuzzyEquals(sqrtS(), 7*TeV)) isqrts = 1; assert(isqrts >= 0); // N profiles, 500 MeV pT cut _hist_N_transverse_500 = bookProfile1D(1+isqrts, 1, 1); // pTsum profiles, 500 MeV pT cut _hist_ptsum_transverse_500 = bookProfile1D(3+isqrts, 1, 1); // N vs. Delta(phi) profiles, 500 MeV pT cut _hist_N_vs_dPhi_1_500 = bookProfile1D(13+isqrts, 1, 1); _hist_N_vs_dPhi_2_500 = bookProfile1D(13+isqrts, 1, 2); _hist_N_vs_dPhi_3_500 = bookProfile1D(13+isqrts, 1, 3); } void analyze(const Event& event) { const double weight = event.weight(); // Require at least one cluster in the event with pT >= 1 GeV const FinalState& fslead = applyProjection(event, "FSlead"); if (fslead.size() < 1) { vetoEvent; } // These are the particles with pT > 500 MeV const FinalState& chargedNeutral500 = applyProjection(event, "FS500"); // Identify leading object and its phi and pT ParticleVector particles500 = chargedNeutral500.particlesByPt(); Particle p_lead = particles500[0]; const double philead = p_lead.momentum().phi(); const double etalead = p_lead.momentum().eta(); const double pTlead = p_lead.momentum().pT(); MSG_DEBUG("Leading object: pT = " << pTlead << ", eta = " << etalead << ", phi = " << philead); // Iterate over all > 500 MeV particles and count particles and scalar pTsum in the three regions vector num500(3, 0), ptSum500(3, 0.0); // Temporary histos that bin N in dPhi. // NB. Only one of each needed since binnings are the same for the energies and pT cuts LWH::Histogram1D hist_num_dphi_500(binEdges(13+isqrts,1,1)); foreach (const Particle& p, particles500) { const double pT = p.momentum().pT(); const double dPhi = deltaPhi(philead, p.momentum().phi()); const int ir = region_index(dPhi); num500[ir] += 1; ptSum500[ir] += pT; // Fill temp histos to bin N in dPhi if (p.genParticle() != p_lead.genParticle()) { // We don't want to fill all those zeros from the leading track... hist_num_dphi_500.fill(dPhi, 1); } } // Now fill underlying event histograms // The densities are calculated by dividing the UE properties by dEta*dPhi // -- each region has a dPhi of 2*PI/3 and dEta is two times 2.5 const double dEtadPhi = (2*2.5 * 2*PI/3.0); _hist_N_transverse_500->fill(pTlead/GeV, num500[1]/dEtadPhi, weight); _hist_ptsum_transverse_500->fill(pTlead/GeV, ptSum500[1]/GeV/dEtadPhi, weight); // Update the "proper" dphi profile histograms // Note that we fill dN/dEtadPhi: dEta = 2*2.5, dPhi = 2*PI/nBins // The values tabulated in the note are for an (undefined) signed Delta(phi) rather than // |Delta(phi)| and so differ by a factor of 2: we have to actually norm for angular range = 2pi const size_t nbins = binEdges(13+isqrts,1,1).size() - 1; for (size_t i = 0; i < nbins; ++i) { const double binmean_num = hist_num_dphi_500.binMean(i); const double binvalue_num = hist_num_dphi_500.binHeight(i)/hist_num_dphi_500.axis().binWidth(i)/10.0; if (pTlead/GeV >= 1.0) _hist_N_vs_dPhi_1_500->fill(binmean_num, binvalue_num, weight); if (pTlead/GeV >= 2.0) _hist_N_vs_dPhi_2_500->fill(binmean_num, binvalue_num, weight); if (pTlead/GeV >= 3.0) _hist_N_vs_dPhi_3_500->fill(binmean_num, binvalue_num, weight); } } void finalize() { // nothing } private: // Little helper function to identify Delta(phi) regions inline int region_index(double dphi) { assert(inRange(dphi, 0.0, PI, CLOSED, CLOSED)); if (dphi < PI/3.0) return 0; if (dphi < 2*PI/3.0) return 1; return 2; } private: int isqrts; AIDA::IProfile1D* _hist_N_transverse_500; AIDA::IProfile1D* _hist_ptsum_transverse_500; AIDA::IProfile1D* _hist_N_vs_dPhi_1_500; AIDA::IProfile1D* _hist_N_vs_dPhi_2_500; AIDA::IProfile1D* _hist_N_vs_dPhi_3_500; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_S8994773); } rivet-1.8.3/src/Analyses/SLD_1996_S3398250.cc0000644000175000017500000001013312116077757016112 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/Sphericity.hh" #include "Rivet/Projections/Thrust.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/ParisiTensor.hh" #include "Rivet/Projections/Hemispheres.hh" #include "Rivet/Projections/InitialQuarks.hh" #include namespace Rivet { /// @brief SLD multiplicities at mZ /// @author Peter Richardson class SLD_1996_S3398250 : public Analysis { public: /// Constructor SLD_1996_S3398250() : Analysis("SLD_1996_S3398250"), _weightedTotalChargedPartNumLight(0.), _weightedTotalChargedPartNumCharm(0.), _weightedTotalChargedPartNumBottom(0.), _weightLight(0.),_weightCharm(0.),_weightBottom(0.) {} /// @name Analysis methods //@{ void init() { // Projections addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "CFS"); addProjection(InitialQuarks(), "IQF"); } void analyze(const Event& event) { const double weight = event.weight(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. const FinalState& cfs = applyProjection(event, "CFS"); if (cfs.size() < 2) vetoEvent; int flavour = 0; const InitialQuarks& iqf = applyProjection(event, "IQF"); // If we only have two quarks (qqbar), just take the flavour. // If we have more than two quarks, look for the highest energetic q-qbar pair. if (iqf.particles().size() == 2) { flavour = abs( iqf.particles().front().pdgId() ); } else { map quarkmap; foreach (const Particle& p, iqf.particles()) { if (quarkmap[p.pdgId()] < p.momentum().E()) { quarkmap[p.pdgId()] = p.momentum().E(); } } double maxenergy = 0.; for (int i = 1; i <= 5; ++i) { if (quarkmap[i]+quarkmap[-i] > maxenergy) { flavour = i; } } } const size_t numParticles = cfs.particles().size(); switch (flavour) { case 1: case 2: case 3: _weightLight += weight; _weightedTotalChargedPartNumLight += numParticles * weight; break; case 4: _weightCharm += weight; _weightedTotalChargedPartNumCharm += numParticles * weight; break; case 5: _weightBottom += weight; _weightedTotalChargedPartNumBottom += numParticles * weight; break; } } void finalize() { // bottom const double avgNumPartsBottom = _weightedTotalChargedPartNumBottom / _weightBottom; AIDA::IDataPointSet * multB = bookDataPointSet(1, 1, 1); multB->point(0)->coordinate(1)->setValue(avgNumPartsBottom); // charm const double avgNumPartsCharm = _weightedTotalChargedPartNumCharm / _weightCharm; AIDA::IDataPointSet * multC = bookDataPointSet(2, 1, 1); multC->point(0)->coordinate(1)->setValue(avgNumPartsCharm); // light const double avgNumPartsLight = _weightedTotalChargedPartNumLight / _weightLight; AIDA::IDataPointSet * multL = bookDataPointSet(3, 1, 1); multL->point(0)->coordinate(1)->setValue(avgNumPartsLight); // charm-light AIDA::IDataPointSet * multD1 = bookDataPointSet(4, 1, 1); multD1->point(0)->coordinate(1)->setValue(avgNumPartsCharm -avgNumPartsLight); // bottom-light AIDA::IDataPointSet * multD2 = bookDataPointSet(5, 1, 1); multD2->point(0)->coordinate(1)->setValue(avgNumPartsBottom-avgNumPartsLight); } //@} private: /// @name Multiplicities //@{ double _weightedTotalChargedPartNumLight; double _weightedTotalChargedPartNumCharm; double _weightedTotalChargedPartNumBottom; //@} /// @name Weights //@{ double _weightLight; double _weightCharm; double _weightBottom; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(SLD_1996_S3398250); } rivet-1.8.3/src/Analyses/D0_1996_S3324664.cc0000644000175000017500000000545412116077757015743 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { /// @brief D0 azimuthal correlation of jets widely separated in rapidity class D0_1996_S3324664 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor D0_1996_S3324664() : Analysis("D0_1996_S3324664") { } /// @name Analysis methods //@{ void init() { const FinalState fs; addProjection(fs, "FS"); /// @todo Use correct jet algorithm addProjection(FastJets(fs, FastJets::D0ILCONE, 0.7), "ConeJets"); _h_deta = bookHistogram1D(1, 1, 1); _h_dphi.addHistogram(0.0, 2.0, bookHistogram1D(2, 1, 1)); _h_dphi.addHistogram(2.0, 4.0, bookHistogram1D(2, 1, 2)); _h_dphi.addHistogram(4.0, 6.0, bookHistogram1D(2, 1, 3)); _h_cosdphi_deta = bookProfile1D(3, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); Jets jets; foreach (const Jet& jet, applyProjection(event, "ConeJets").jets(20.0*GeV)) { if (fabs(jet.momentum().eta()) < 3.0) { jets.push_back(jet); } } if (jets.size() < 2) { vetoEvent; } FourMomentum minjet = jets[0].momentum(); FourMomentum maxjet = jets[1].momentum(); double mineta = minjet.eta(); double maxeta = maxjet.eta(); foreach(const Jet& jet, jets) { double eta = jet.momentum().eta(); if (eta < mineta) { minjet = jet.momentum(); mineta = eta; } else if (eta > maxeta) { maxjet = jet.momentum(); maxeta = eta; } } if (minjet.Et()<50*GeV && maxjet.Et()<50.0*GeV) { vetoEvent; } double deta = maxjet.eta()-minjet.eta(); double dphi = mapAngle0To2Pi(maxjet.phi()-minjet.phi()); _h_deta->fill(deta, weight); _h_dphi.fill(deta, 1.0-dphi/M_PI, weight); _h_cosdphi_deta->fill(deta, cos(M_PI-dphi), weight); } void finalize() { // Normalised to #events normalize(_h_deta, 8830.0); // fixed norm OK // I have no idea what this is normalised to... in the paper it says unity! /// @todo Understand this! foreach (IHistogram1D* histo, _h_dphi.getHistograms()) { /// @todo Prefer to scale rather than normalize, if possible normalize(histo, 0.0798); } } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_deta; BinnedHistogram _h_dphi; AIDA::IProfile1D *_h_cosdphi_deta; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_1996_S3324664); } rivet-1.8.3/src/Analyses/D0_2010_S8566488.cc0000644000175000017500000000405312116077757015730 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief D0 dijet invariant mass measurement class D0_2010_S8566488 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor D0_2010_S8566488() : Analysis("D0_2010_S8566488") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { FinalState fs; FastJets conefinder(fs, FastJets::D0ILCONE, 0.7); addProjection(conefinder, "ConeFinder"); _h_m_dijet.addHistogram(0.0, 0.4, bookHistogram1D(1, 1, 1)); _h_m_dijet.addHistogram(0.4, 0.8, bookHistogram1D(2, 1, 1)); _h_m_dijet.addHistogram(0.8, 1.2, bookHistogram1D(3, 1, 1)); _h_m_dijet.addHistogram(1.2, 1.6, bookHistogram1D(4, 1, 1)); _h_m_dijet.addHistogram(1.6, 2.0, bookHistogram1D(5, 1, 1)); _h_m_dijet.addHistogram(2.0, 2.4, bookHistogram1D(6, 1, 1)); } /// Perform the per-event analysis void analyze(const Event& e) { const double weight = e.weight(); const Jets& jets = applyProjection(e, "ConeFinder").jetsByPt(40.0*GeV); if (jets.size() < 2) vetoEvent; FourMomentum j0(jets[0].momentum()); FourMomentum j1(jets[1].momentum()); double ymax = std::max(fabs(j0.rapidity()), fabs(j1.rapidity())); double mjj = FourMomentum(j0+j1).mass(); _h_m_dijet.fill(ymax, mjj/TeV, weight); } /// Normalise histograms etc., after the run void finalize() { _h_m_dijet.scale(crossSection()/sumOfWeights(), this); } //@} private: // Data members like post-cuts event weight counters go here private: /// @name Histograms //@{ BinnedHistogram _h_m_dijet; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2010_S8566488); } rivet-1.8.3/src/Analyses/TASSO_1990_S2148048.cc0000644000175000017500000001127612116077757016361 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" //#include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/Thrust.hh" #include "Rivet/Projections/Sphericity.hh" #include "Rivet/Projections/ChargedFinalState.hh" /// @todo Include more projections as required, e.g. ChargedFinalState, FastJets, ZFinder... namespace Rivet { class TASSO_1990_S2148048 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor TASSO_1990_S2148048() : Analysis("TASSO_1990_S2148048") { /// @todo Set whether your finalize method needs the generator cross section //_sumWPassed = 0; } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { const ChargedFinalState cfs(-MAXRAPIDITY, MAXRAPIDITY, 0.1/GeV); addProjection(cfs, "CFS"); //// Beams -- needed for x_p calculation //addProjection(Beam(), "Beams"); // Thrust addProjection(Thrust(cfs), "Thrust"); // For Sphericity and the like addProjection(Sphericity(cfs), "Sphericity"); // Histos int offset = 0; switch (int(sqrtS()/GeV)) { case 14: offset = 0; break; case 22: offset = 1; break; case 35: offset = 2; break; case 44: offset = 3; break; } //_h_xp = bookHistogram1D( 2, 1, 1+offset); _h_sphericity = bookHistogram1D( 6, 1, 1+offset); _h_aplanarity = bookHistogram1D( 7, 1, 1+offset); _h_thrust = bookHistogram1D( 8, 1, 1+offset); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); const ChargedFinalState& cfs = applyProjection(event, "CFS"); //// Get beams and average beam momentum //const ParticlePair& beams = applyProjection(event, "Beams").beams(); //const double meanBeamMom = ( beams.first.momentum().vector3().mod() + //beams.second.momentum().vector3().mod() ) / 2.0; // TASSO hadronic event selection TODO: move this into a trigger definition // See page 2 in publication // Condition 1) --- require at least 5 (4) 'good' tracks int nch = cfs.particles().size(); if ( (int(sqrtS()/GeV) > 27 && nch < 5) || (int(sqrtS()/GeV) <= 27 && nch < 4 ) ) { MSG_DEBUG("Failed # good tracks cut: " << nch); vetoEvent; } // Condition 2) --- // Condition 5) --- scalar momentum (not pT!!!) sum >= 0.265*s double momsum = 0.0; foreach (const Particle& p, cfs.particles()) { const double mom = p.momentum().vector3().mod(); momsum += mom; } if (momsum <=0.265 * sqrtS()/GeV) { MSG_DEBUG("Failed pTsum cut: " << momsum << " < " << 0.265 * sqrtS()/GeV); vetoEvent; } // Raise counter for events that pass trigger conditions //_sumWPassed += event.weight(); const Thrust& thrust = applyProjection(event, "Thrust"); //const Vector3 & thrustAxis = thrust.thrustAxis (); //double theta = thrustAxis.theta(); //if ( fabs(cos(theta)) >= 0.8 ) { //MSG_DEBUG("Failed thrust angle cut: " << fabs(cos(theta))); //vetoEvent; //} const Sphericity& sphericity = applyProjection(event, "Sphericity"); //// Fill histograms in order of appearance in paper //foreach (const Particle& p, cfs.particles()) { //// Get momentum and energy of each particle. //const Vector3 mom3 = p.momentum().vector3(); //// Scaled momenta. //const double mom = mom3.mod(); //const double scaledMom = mom/meanBeamMom; //_h_xp->fill(scaledMom, weight); //} // _h_sphericity->fill(sphericity.sphericity(), weight); _h_aplanarity->fill(sphericity.aplanarity(), weight); _h_thrust->fill(thrust.thrust(), weight); } /// Normalise histograms etc., after the run void finalize() { //scale(_h_xp, _sumWPassed/(crossSection()*sumOfWeights())); normalize(_h_sphericity); normalize(_h_aplanarity); normalize(_h_thrust ); } //@} private: // Data members like post-cuts event weight counters go here //double _sumWPassed; private: /// @name Histograms //@{ AIDA::IHistogram1D* _h_xp ; AIDA::IHistogram1D* _h_sphericity; AIDA::IHistogram1D* _h_aplanarity; AIDA::IHistogram1D* _h_thrust ; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(TASSO_1990_S2148048); } rivet-1.8.3/src/Analyses/CDF_1997_S3541940.cc0000644000175000017500000002005512116077757016065 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief CDF properties of 6-jet events with large 6-jet mass class CDF_1997_S3541940 : public Analysis { public: CDF_1997_S3541940() : Analysis("CDF_1997_S3541940") { } public: void init() { const FinalState fs(-4.2, 4.2); addProjection(FastJets(fs, FastJets::CDFJETCLU, 0.7), "Jets"); _h_m6J = bookHistogram1D(1, 1, 1); _h_X3ppp = bookHistogram1D(2, 1, 1); _h_X4ppp = bookHistogram1D(3, 1, 1); _h_costheta3ppp = bookHistogram1D(4, 1, 1); _h_psi3ppp = bookHistogram1D(5, 1, 1); _h_f3ppp = bookHistogram1D(6, 1, 1); _h_f4ppp = bookHistogram1D(6, 1, 2); _h_f5ppp = bookHistogram1D(6, 1, 3); _h_XApp = bookHistogram1D(7, 1, 1); _h_XCp = bookHistogram1D(8, 1, 1); _h_XE = bookHistogram1D(9, 1, 1); _h_psiAppBpp = bookHistogram1D(10, 1, 1); _h_psiCpDp = bookHistogram1D(11, 1, 1); _h_psiEF = bookHistogram1D(12, 1, 1); _h_fApp = bookHistogram1D(13, 1, 1); _h_fBpp = bookHistogram1D(14, 1, 1); _h_fCp = bookHistogram1D(15, 1, 1); _h_fDp = bookHistogram1D(16, 1, 1); _h_fE = bookHistogram1D(17, 1, 1); _h_fF = bookHistogram1D(18, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); Jets jets; double sumEt = 0.0; FourMomentum jetsystem(0.0, 0.0, 0.0, 0.0); foreach (const Jet& jet, applyProjection(event, "Jets").jetsByEt()) { double Et = jet.momentum().Et(); double eta = fabs(jet.momentum().eta()); if (Et > 20.0*GeV && eta<3.0) { bool separated=true; foreach (const Jet& ref, jets) { if (deltaR(jet.momentum(), ref.momentum())<0.9) { separated=false; break; } } if (!separated) continue; jets.push_back(jet); sumEt += Et; jetsystem += jet.momentum(); } if (jets.size()>=6) break; } if (jets.size()<6) { vetoEvent; } if (sumEt<320.0*GeV) { vetoEvent; } double m6J=_safeMass(jetsystem); if (m6J<520.0*GeV) { vetoEvent; } LorentzTransform cms_boost(-jetsystem.boostVector()); vector jets6; foreach (Jet jet, jets) { jets6.push_back(cms_boost.transform(jet.momentum())); } std::sort(jets6.begin(), jets6.end(), FourMomentum::byEDescending()); FourMomentum pE, pF; vector jets5(_reduce(jets6, pE, pF)); std::sort(jets5.begin(), jets5.end(), FourMomentum::byEDescending()); FourMomentum pCp, pDp; vector jets4(_reduce(jets5, pCp, pDp)); std::sort(jets4.begin(), jets4.end(), FourMomentum::byEDescending()); FourMomentum pApp, pBpp; vector jets3(_reduce(jets4, pApp, pBpp)); std::sort(jets3.begin(), jets3.end(), FourMomentum::byEDescending()); FourMomentum p3ppp(jets3[0]); FourMomentum p4ppp(jets3[1]); FourMomentum p5ppp(jets3[2]); double X3ppp = 2.0*p3ppp.E()/m6J; if (X3ppp>0.9) { vetoEvent; } FourMomentum pAV = cms_boost.transform(_avg_beam_in_lab(m6J, jetsystem.rapidity())); double costheta3ppp=pAV.vector3().unit().dot(p3ppp.vector3().unit()); if (fabs(costheta3ppp)>0.9) { vetoEvent; } // 3-jet-system variables _h_m6J->fill(m6J, weight); _h_X3ppp->fill(X3ppp, weight); _h_X4ppp->fill(2.0*p4ppp.E()/m6J, weight); _h_costheta3ppp->fill(costheta3ppp, weight); double psi3ppp=_psi(p3ppp, pAV, p4ppp, p5ppp); _h_psi3ppp->fill(psi3ppp, weight); _h_f3ppp->fill(_safeMass(p3ppp)/m6J, weight); _h_f4ppp->fill(_safeMass(p4ppp)/m6J, weight); _h_f5ppp->fill(_safeMass(p5ppp)/m6J, weight); // 4 -> 3 jet variables _h_fApp->fill(_safeMass(pApp)/m6J, weight); _h_fBpp->fill(_safeMass(pApp)/m6J, weight); _h_XApp->fill(pApp.E()/(pApp.E()+pBpp.E()), weight); double psiAppBpp=_psi(pApp, pBpp, pApp+pBpp, pAV); _h_psiAppBpp->fill(psiAppBpp, weight); // 5 -> 4 jet variables _h_fCp->fill(_safeMass(pCp)/m6J, weight); _h_fDp->fill(_safeMass(pDp)/m6J, weight); _h_XCp->fill(pCp.E()/(pCp.E()+pDp.E()), weight); double psiCpDp=_psi(pCp, pDp, pCp+pDp, pAV); _h_psiCpDp->fill(psiCpDp, weight); // 6 -> 5 jet variables _h_fE->fill(_safeMass(pE)/m6J, weight); _h_fF->fill(_safeMass(pF)/m6J, weight); _h_XE->fill(pE.E()/(pE.E()+pF.E()), weight); double psiEF=_psi(pE, pF, pE+pF, pAV); _h_psiEF->fill(psiEF, weight); } void finalize() { normalize(_h_m6J); normalize(_h_X3ppp); normalize(_h_X4ppp); normalize(_h_costheta3ppp); normalize(_h_psi3ppp); normalize(_h_f3ppp); normalize(_h_f4ppp); normalize(_h_f5ppp); normalize(_h_XApp); normalize(_h_XCp); normalize(_h_XE); normalize(_h_psiAppBpp); normalize(_h_psiCpDp); normalize(_h_psiEF); normalize(_h_fApp); normalize(_h_fBpp); normalize(_h_fCp); normalize(_h_fDp); normalize(_h_fE); normalize(_h_fF); } private: vector _reduce(const vector& jets, FourMomentum& combined1, FourMomentum& combined2) { double minMass2 = 1e9; size_t idx1(jets.size()), idx2(jets.size()); for (size_t i=0; i newjets; for (size_t i=0; i1e-3) { FourMomentum boostvec(cosh(y), 0.0, 0.0, sinh(y)); LorentzTransform cms_boost(-boostvec.boostVector()); cms_boost = cms_boost.inverse(); beam1=cms_boost.transform(beam1); beam2=cms_boost.transform(beam2); } if (beam1.E()>beam2.E()) { return beam1-beam2; } else { return beam2-beam1; } } double _psi(const FourMomentum& p1, const FourMomentum& p2, const FourMomentum& p3, const FourMomentum& p4) { Vector3 p1xp2 = p1.vector3().cross(p2.vector3()); Vector3 p3xp4 = p3.vector3().cross(p4.vector3()); return mapAngle0ToPi(acos(p1xp2.unit().dot(p3xp4.unit()))); } double _safeMass(const FourMomentum& p) { double mass2=p.mass2(); if (mass2>0.0) return sqrt(mass2); else if (mass2<-1.0e-5) { MSG_WARNING("m2 = " << m2 << ". Assuming m2=0."); return 0.0; } else return 0.0; } private: AIDA::IHistogram1D *_h_m6J; AIDA::IHistogram1D *_h_X3ppp; AIDA::IHistogram1D *_h_X4ppp; AIDA::IHistogram1D *_h_costheta3ppp; AIDA::IHistogram1D *_h_psi3ppp; AIDA::IHistogram1D *_h_f3ppp; AIDA::IHistogram1D *_h_f4ppp; AIDA::IHistogram1D *_h_f5ppp; AIDA::IHistogram1D *_h_XApp; AIDA::IHistogram1D *_h_XCp; AIDA::IHistogram1D *_h_XE; AIDA::IHistogram1D *_h_psiAppBpp; AIDA::IHistogram1D *_h_psiCpDp; AIDA::IHistogram1D *_h_psiEF; AIDA::IHistogram1D *_h_fApp; AIDA::IHistogram1D *_h_fBpp; AIDA::IHistogram1D *_h_fCp; AIDA::IHistogram1D *_h_fDp; AIDA::IHistogram1D *_h_fE; AIDA::IHistogram1D *_h_fF; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_1997_S3541940); } rivet-1.8.3/src/Analyses/CDF_2000_S4266730.cc0000644000175000017500000000340212116077757016034 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief CDF dijet cross-section, differential in dijet mass class CDF_2000_S4266730 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor CDF_2000_S4266730() : Analysis("CDF_2000_S4266730") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { FinalState fs(-4.2, 4.2); addProjection(FastJets(fs, FastJets::CDFJETCLU, 0.7), "Jets"); _h_mjj = bookHistogram1D(1, 1, 1); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); Jets jets = applyProjection(event, "Jets").jetsByEt(); if (jets.size()<2) { vetoEvent; } FourMomentum jet1 = jets[0].momentum(); FourMomentum jet2 = jets[1].momentum(); double eta1 = jet1.eta(); double eta2 = jet2.eta(); if (fabs(eta1)>2.0 || fabs(eta2)>2.0) { vetoEvent; } if (fabs(tanh((eta1-eta2)/2))>2.0/3.0) { vetoEvent; } double mjj = FourMomentum(jet1+jet2).mass()/GeV; if (mjj<180.0) { vetoEvent; } _h_mjj->fill(mjj, weight); } /// Normalise histograms etc., after the run void finalize() { scale(_h_mjj, crossSection()/picobarn/sumOfWeights()); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_mjj; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2000_S4266730); } rivet-1.8.3/src/Analyses/MC_WKTSPLITTINGS.cc0000644000175000017500000000250312116077757016407 0ustar sunsun// -*- C++ -*- #include "Rivet/Analyses/MC_JetSplittings.hh" #include "Rivet/Projections/WFinder.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { /// @brief MC validation analysis for kt splitting scales in W + jets events class MC_WKTSPLITTINGS : public MC_JetSplittings { public: /// Default constructor MC_WKTSPLITTINGS() : MC_JetSplittings("MC_WKTSPLITTINGS", 4, "Jets") { } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; WFinder wfinder(fs, -3.5, 3.5, 25.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2); addProjection(wfinder, "WFinder"); FastJets jetpro(wfinder.remainingFinalState(), FastJets::KT, 0.6); addProjection(jetpro, "Jets"); MC_JetSplittings::init(); } /// Do the analysis void analyze(const Event & e) { const WFinder& wfinder = applyProjection(e, "WFinder"); if (wfinder.bosons().size() != 1) { vetoEvent; } MC_JetSplittings::analyze(e); } /// Finalize void finalize() { MC_JetSplittings::finalize(); } //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_WKTSPLITTINGS); } rivet-1.8.3/src/Analyses/D0_2000_S4480767.cc0000644000175000017500000000254012116077757015715 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/WFinder.hh" namespace Rivet { class D0_2000_S4480767 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor D0_2000_S4480767() : Analysis("D0_2000_S4480767") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { FinalState fs; WFinder wf(fs, -5, 5, 0.0*GeV, ELECTRON, 0.0*GeV, 200.0*GeV, 0.0*GeV, 0.2); addProjection(wf, "WFinder"); _h_W_pT = bookHistogram1D(1, 1, 1); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); const WFinder& wf = applyProjection(event, "WFinder"); if (wf.bosons().size() == 0) vetoEvent; _h_W_pT->fill(wf.bosons()[0].momentum().pT()/GeV, weight); } /// Normalise histograms etc., after the run void finalize() { scale(_h_W_pT, crossSection()/sumOfWeights()); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_W_pT; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2000_S4480767); } rivet-1.8.3/src/Analyses/CDF_2008_S8095620.cc0000644000175000017500000001375012116077757016055 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/InvMassFinalState.hh" namespace Rivet { /// @brief CDF Run II Z + b-jet cross-section measurement class CDF_2008_S8095620 : public Analysis { public: /// Constructor. /// jet cuts: |eta| <= 1.5 CDF_2008_S8095620() : Analysis("CDF_2008_S8095620"), _Rjet(0.7), _JetPtCut(20.), _JetEtaCut(1.5), _Lep1PtCut(18.), _Lep2PtCut(10.), _LepEtaCut(3.2), _sumWeightSelected(0.0) { } /// @name Analysis methods //@{ void init() { // Set up projections const FinalState fs(-3.2, 3.2); addProjection(fs, "FS"); // Create a final state with any e+e- or mu+mu- pair with // invariant mass 76 -> 106 GeV and ET > 18 (Z decay products) vector > vids; vids.push_back(make_pair(ELECTRON, POSITRON)); vids.push_back(make_pair(MUON, ANTIMUON)); FinalState fs2(-3.2, 3.2); InvMassFinalState invfs(fs2, vids, 76*GeV, 106*GeV); addProjection(invfs, "INVFS"); // Make a final state without the Z decay products for jet clustering VetoedFinalState vfs(fs); vfs.addVetoOnThisFinalState(invfs); addProjection(vfs, "VFS"); addProjection(FastJets(vfs, FastJets::CDFMIDPOINT, 0.7), "Jets"); // Book histograms _dStot = bookHistogram1D(1, 1, 1); _dSdET = bookHistogram1D(2, 1, 1); _dSdETA = bookHistogram1D(3, 1, 1); _dSdZpT = bookHistogram1D(4, 1, 1); _dSdNJet = bookHistogram1D(5, 1, 1); _dSdNbJet = bookHistogram1D(6, 1, 1); } // Do the analysis void analyze(const Event& event) { // Check we have an l+l- pair that passes the kinematic cuts // Get the Z decay products (mu+mu- or e+e- pair) const InvMassFinalState& invMassFinalState = applyProjection(event, "INVFS"); const ParticleVector& ZDecayProducts = invMassFinalState.particles(); // make sure we have 2 Z decay products (mumu or ee) if (ZDecayProducts.size() < 2) vetoEvent; //new cuts double Lep1Pt = ZDecayProducts[0].momentum().perp(); double Lep2Pt = ZDecayProducts[1].momentum().perp(); double Lep1Eta = fabs(ZDecayProducts[0].momentum().rapidity()); double Lep2Eta = fabs(ZDecayProducts[1].momentum().rapidity()); if (Lep1Eta > _LepEtaCut || Lep2Eta > _LepEtaCut) vetoEvent; if (abs(ZDecayProducts[0].pdgId())==13 && ((Lep1Eta > 1.5 || Lep2Eta > 1.5) || (Lep1Eta > 1.0 && Lep2Eta > 1.0))) { vetoEvent; } if (Lep1Pt > Lep2Pt) { if (Lep1Pt < _Lep1PtCut || Lep2Pt < _Lep2PtCut) vetoEvent; } else { if (Lep1Pt < _Lep2PtCut || Lep2Pt < _Lep1PtCut) vetoEvent; } _sumWeightSelected += event.weight(); // @todo: write out a warning if there are more than two decay products FourMomentum Zmom = ZDecayProducts[0].momentum() + ZDecayProducts[1].momentum(); // Put all b-quarks in a vector ParticleVector bquarks; foreach (const GenParticle* p, particles(event.genEvent())) { if (fabs(p->pdg_id()) == BQUARK) { bquarks += Particle(*p); } } // Get jets const FastJets& jetpro = applyProjection(event, "Jets"); MSG_DEBUG("Jet multiplicity before any pT cut = " << jetpro.size()); const PseudoJets& jets = jetpro.pseudoJetsByPt(); MSG_DEBUG("jetlist size = " << jets.size()); int numBJet = 0; int numJet = 0; // for each b-jet plot the ET and the eta of the jet, normalise to the total cross section at the end // for each event plot N jet and pT(Z), normalise to the total cross section at the end for (PseudoJets::const_iterator jt = jets.begin(); jt != jets.end(); ++jt) { // select jets that pass the kinematic cuts if (jt->perp() > _JetPtCut && fabs(jt->rapidity()) <= _JetEtaCut) { numJet++; // does the jet contain a b-quark? bool bjet = false; foreach (const Particle& bquark, bquarks) { if (deltaR(jt->rapidity(), jt->phi(), bquark.momentum().rapidity(),bquark.momentum().azimuthalAngle()) <= _Rjet) { bjet = true; break; } } // end loop around b-jets if (bjet) { numBJet++; _dSdET->fill(jt->perp(),event.weight()); _dSdETA->fill(fabs(jt->rapidity()),event.weight()); } } } // end loop around jets // wasn't asking for b-jets before!!!! if(numJet > 0 && numBJet > 0) _dSdNJet->fill(numJet,event.weight()); if(numBJet > 0) { _dStot->fill(1960.0,event.weight()); _dSdNbJet->fill(numBJet,event.weight()); _dSdZpT->fill(Zmom.pT(),event.weight()); } } // Finalize void finalize() { // normalise histograms // scale by 1 / the sum-of-weights of events that pass the Z cuts // since the cross sections are normalized to the inclusive // Z cross sections. double Scale = 1.0; if (_sumWeightSelected != 0.0) Scale = 1.0/_sumWeightSelected; _dStot->scale(Scale); _dSdET->scale(Scale); _dSdETA->scale(Scale); _dSdNJet->scale(Scale); _dSdNbJet->scale(Scale); _dSdZpT->scale(Scale); } //@} private: double _Rjet; double _JetPtCut; double _JetEtaCut; double _Lep1PtCut; double _Lep2PtCut; double _LepEtaCut; double _sumWeightSelected; //@{ /// Histograms AIDA::IHistogram1D* _dStot; AIDA::IHistogram1D* _dSdET; AIDA::IHistogram1D* _dSdETA; AIDA::IHistogram1D* _dSdNJet; AIDA::IHistogram1D* _dSdNbJet; AIDA::IHistogram1D* _dSdZpT; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2008_S8095620); } rivet-1.8.3/src/Analyses/MC_DIJET.cc0000644000175000017500000001046612116077757015167 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief MC validation analysis for di-jet events class MC_DIJET : public Analysis { public: /// Default constructor MC_DIJET() : Analysis("MC_DIJET") { } /// @name Analysis methods //@{ void init() { FinalState fs(-4, 4, 0.5*GeV); ChargedFinalState cfs(fs); addProjection(fs, "FS"); addProjection(cfs, "CFS"); addProjection(FastJets(fs, FastJets::ANTIKT, 0.7), "Jets"); addProjection(FastJets(cfs, FastJets::ANTIKT, 0.7), "ChargedJets"); _hist_jetcount = bookHistogram1D("d01-x01-y01", 5, 0., 10.); _hist_jetpt = bookHistogram1D("d02-x01-y01", 30, 30.,100.); _hist_jetptlog = bookHistogram1D("d03-x01-y01", 20, 0.,8.); _hist_leadingjetpt = bookHistogram1D("d04-x01-y01", 25, 30.,100.); _hist_secondleadingjetpt = bookHistogram1D("d05-x01-y01", 25, 30.,100.); _hist_jetphi = bookHistogram1D("d06-x01-y01",24, 0., 6.4); _hist_jeteta = bookHistogram1D("d07-x01-y01", 30, -6., 6.); _hist_jetdphi = bookHistogram1D("d08-x01-y01", 24, 0., 6.4); _hist_jetdeta = bookHistogram1D("d09-x01-y01", 24, 0., 6.); _hist_chargemultiplicity = bookHistogram1D("d10-x01-y01",30, 0.5, 250.5); _hist_chargemeanpt = bookHistogram1D("d11-x01-y01", 25, 0., 10.); _hist_chargept = bookHistogram1D("d12-x01-y01", 32, 0., 25.); _hist_chargelogpt = bookHistogram1D("d13-x01-y01", 32, 0., 6.); _hist_chargermspt = bookHistogram1D("d14-x01-y01", 32, 0., 10.); } void analyze(const Event& event) { const FastJets& fastjets = applyProjection(event, "Jets"); const Jets jets = fastjets.jetsByPt(20.*GeV); const double weight = event.weight(); if (jets.size() < 2 || jets.size() >= 3) vetoEvent; const double angle = fabs(jets[1].momentum().azimuthalAngle() - jets[0].momentum().azimuthalAngle()); const double prapidity = fabs(jets[1].momentum().pseudorapidity() - jets[0].momentum().pseudorapidity()); _hist_jetcount->fill(jets.size(), weight); _hist_leadingjetpt->fill(jets[0].momentum().pT(), weight); _hist_secondleadingjetpt->fill(jets[1].momentum().pT(), weight); _hist_jetdphi->fill(angle , weight); _hist_jetdeta->fill(prapidity, weight); foreach(Jet j, fastjets.jetsByPt(20.*GeV)) { _hist_jetpt->fill(j.momentum().pT(), weight); _hist_jetptlog->fill(log(j.momentum().pT()), weight); _hist_jetphi->fill(j.momentum().azimuthalAngle(), weight); _hist_jeteta->fill(j.momentum().pseudorapidity(), weight); } const ChargedFinalState& cfs = applyProjection(event, "CFS"); // const FastJets& cfastjets = applyProjection(event, "ChargedJets"); double meanpt(0), rmspt(0); /// @todo Add jets // foreach(Jet cj, cfastjets.jetsByPt(20.*GeV)){ _hist_chargemultiplicity->fill(cfs.particles().size(), weight); foreach(Particle cp, cfs.particles()) { meanpt= meanpt + cp.momentum().pT(); rmspt = rmspt + (cp.momentum().pT()*cp.momentum().pT()); _hist_chargept->fill(cp.momentum().pT(), weight); _hist_chargelogpt->fill(log(cp.momentum().pT()), weight); } meanpt = meanpt / cfs.particles().size(); _hist_chargemeanpt->fill(meanpt, weight); rmspt = sqrt(rmspt / cfs.particles().size()); _hist_chargermspt->fill(rmspt, weight); // } } void finalize() { /// @todo Normalise! } //@} private: AIDA::IHistogram1D* _hist_jetcount; AIDA::IHistogram1D* _hist_jetpt; AIDA::IHistogram1D* _hist_jetptlog; AIDA::IHistogram1D* _hist_leadingjetpt; AIDA::IHistogram1D* _hist_secondleadingjetpt; AIDA::IHistogram1D* _hist_jetphi; AIDA::IHistogram1D* _hist_jetdphi; AIDA::IHistogram1D* _hist_jeteta; AIDA::IHistogram1D* _hist_jetdeta; AIDA::IHistogram1D* _hist_chargemultiplicity; AIDA::IHistogram1D* _hist_chargemeanpt; AIDA::IHistogram1D* _hist_chargept; AIDA::IHistogram1D* _hist_chargelogpt; AIDA::IHistogram1D* _hist_chargermspt; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_DIJET); } rivet-1.8.3/src/Analyses/D0_2009_S8320160.cc0000644000175000017500000000447512116077757015717 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief D0 dijet angular distributions class D0_2009_S8320160 : public Analysis { public: /// @name Construction //@{ /// Constructor D0_2009_S8320160() : Analysis("D0_2009_S8320160") { } //@} /// @name Analysis methods //@{ // Book histograms void init() { FinalState fs; FastJets conefinder(fs, FastJets::D0ILCONE, 0.7); addProjection(conefinder, "ConeFinder"); _h_chi_dijet.addHistogram(250., 300., bookHistogram1D(1, 1, 1)); _h_chi_dijet.addHistogram(300., 400., bookHistogram1D(2, 1, 1)); _h_chi_dijet.addHistogram(400., 500., bookHistogram1D(3, 1, 1)); _h_chi_dijet.addHistogram(500., 600., bookHistogram1D(4, 1, 1)); _h_chi_dijet.addHistogram(600., 700., bookHistogram1D(5, 1, 1)); _h_chi_dijet.addHistogram(700., 800., bookHistogram1D(6, 1, 1)); _h_chi_dijet.addHistogram(800., 900., bookHistogram1D(7, 1, 1)); _h_chi_dijet.addHistogram(900., 1000., bookHistogram1D(8, 1, 1)); _h_chi_dijet.addHistogram(1000., 1100., bookHistogram1D(9, 1, 1)); _h_chi_dijet.addHistogram(1100., 1960, bookHistogram1D(10, 1, 1)); } /// Do the analysis void analyze(const Event & e) { const double weight = e.weight(); const Jets& jets = applyProjection(e, "ConeFinder").jetsByPt(); if (jets.size() < 2) vetoEvent; FourMomentum j0(jets[0].momentum()); FourMomentum j1(jets[1].momentum()); double y0 = j0.rapidity(); double y1 = j1.rapidity(); if (fabs(y0+y1)>2) vetoEvent; double mjj = FourMomentum(j0+j1).mass(); double chi = exp(fabs(y0-y1)); _h_chi_dijet.fill(mjj, chi, weight); } /// Finalize void finalize() { foreach (AIDA::IHistogram1D* hist, _h_chi_dijet.getHistograms()) { normalize(hist); } } //@} private: /// @name Histograms //@{ BinnedHistogram _h_chi_dijet; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2009_S8320160); } rivet-1.8.3/src/Analyses/ATLAS_2010_CONF_2010_049.cc0000644000175000017500000000730012116077757017113 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/Logging.hh" #include "LWH/Histogram1D.h" namespace Rivet { class ATLAS_2010_CONF_2010_049 : public Analysis { public: ATLAS_2010_CONF_2010_049() : Analysis("ATLAS_2010_CONF_2010_049") { } void init() { ChargedFinalState cfs(-1.5, 1.5, 0.5*GeV); addProjection(cfs, "CFS"); FastJets jetsproj6(cfs, FastJets::ANTIKT, 0.6); addProjection(jetsproj6, "Jets6"); FastJets jetsproj4(cfs, FastJets::ANTIKT, 0.4); addProjection(jetsproj4, "Jets4"); for (size_t i=0 ; i<2 ; i++) { _h_xsec[i] = bookHistogram1D(1+i, 1, 1); _h_frag_04_06[i] = bookHistogram1D(3+i, 1, 1); _h_frag_06_10[i] = bookHistogram1D(3+i, 2, 1); _h_frag_10_15[i] = bookHistogram1D(3+i, 3, 1); _h_frag_15_24[i] = bookHistogram1D(3+i, 4, 1); _njets_04_06[i] = 0.0; _njets_06_10[i] = 0.0; _njets_10_15[i] = 0.0; _njets_15_24[i] = 0.0; } } void analyze(const Event& event) { const double weight = event.weight(); const FastJets & jetsproj6 = applyProjection(event, "Jets6"); const FastJets & jetsproj4 = applyProjection(event, "Jets4"); Jets alljets[2]; alljets[0] = jetsproj6.jetsByPt(4.0*GeV); alljets[1] = jetsproj4.jetsByPt(4.0*GeV); for (size_t i=0 ; i<2 ; i++) { Jets jets; // First we want to make sure that we only use jets within |eta|<0.57 foreach (const Jet& jet, alljets[i]) { if (fabs(jet.momentum().eta())<0.57) { jets.push_back(jet); } } foreach (const Jet& jet, jets) { const double pTjet = jet.momentum().pT(); const double pjet = jet.momentum().p().mod(); _h_xsec[i]->fill(pTjet, weight); if (pTjet > 24*GeV) continue; foreach (const Particle& p, jet.particles()) { double z=p.momentum().p().mod()/pjet; if (z>0.9999) z=0.9999; // Make sure that z=1 doesn't go into overflow if (pTjet > 15*GeV) { _h_frag_15_24[i]->fill(z, weight); } else if (pTjet > 10*GeV) { _h_frag_10_15[i]->fill(z, weight); } else if (pTjet > 6*GeV) { _h_frag_06_10[i]->fill(z, weight); } else { _h_frag_04_06[i]->fill(z, weight); } } if (pTjet > 15*GeV) { _njets_15_24[i] += weight; } else if (pTjet > 10*GeV) { _njets_10_15[i] += weight; } else if (pTjet > 6*GeV) { _njets_06_10[i] += weight; } else { _njets_04_06[i] += weight; } } } } void finalize() { for (size_t i=0 ; i<2 ; i++) { // deta = 2*0.57 scale(_h_xsec[i], crossSection()/microbarn/sumOfWeights()/(2*0.57)); scale(_h_frag_04_06[i], 1./_njets_04_06[i]); scale(_h_frag_06_10[i], 1./_njets_06_10[i]); scale(_h_frag_10_15[i], 1./_njets_10_15[i]); scale(_h_frag_15_24[i], 1./_njets_15_24[i]); } } private: AIDA::IHistogram1D* _h_xsec[2]; AIDA::IHistogram1D* _h_frag_04_06[2]; AIDA::IHistogram1D* _h_frag_06_10[2]; AIDA::IHistogram1D* _h_frag_10_15[2]; AIDA::IHistogram1D* _h_frag_15_24[2]; double _njets_04_06[2]; double _njets_06_10[2]; double _njets_10_15[2]; double _njets_15_24[2]; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2010_CONF_2010_049); } rivet-1.8.3/src/Analyses/ATLAS_2010_S8817804.cc0000644000175000017500000000733512116077757016326 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief ATLAS inclusive jet pT spectrum, di-jet Mass and di-jet chi class ATLAS_2010_S8817804: public Analysis { public: ATLAS_2010_S8817804() : Analysis("ATLAS_2010_S8817804") { } private: enum Alg { AKT4=0, AKT6=1 }; public: void init() { FinalState fs; addProjection(fs, "FinalState"); addProjection(FastJets(fs, FastJets::ANTIKT, 0.6), "AntiKT06"); addProjection(FastJets(fs, FastJets::ANTIKT, 0.4), "AntiKT04"); double ybins[] = { 0.0, 0.3, 0.8, 1.2, 2.1, 2.8 }; double massBinsForChi[] = { 340, 520, 800, 1200 }; size_t ptDsOffset(0), massDsOffset(10), chiDsOffset(20); for (size_t alg = 0; alg < 2; ++alg) { for (size_t i = 0; i < 5; ++i) { _pThistos[alg].addHistogram(ybins[i], ybins[i+1], bookHistogram1D(i + 1 + ptDsOffset, 1, 1)); } ptDsOffset += 5; for (size_t i = 0; i < 5; ++i) { _massVsY[alg].addHistogram(ybins[i], ybins[i+1], bookHistogram1D(i + 1 + massDsOffset, 1, 1)); } massDsOffset += 5; for (size_t i = 0; i < 3; ++i) { _chiVsMass[alg].addHistogram(massBinsForChi[i], massBinsForChi[i+1], bookHistogram1D(i + 1 + chiDsOffset, 1, 1)); } chiDsOffset += 3; } } void analyze(const Event& evt) { Jets jetAr[2]; jetAr[AKT6] = applyProjection(evt, "AntiKT06").jetsByPt(30*GeV); jetAr[AKT4] = applyProjection(evt, "AntiKT04").jetsByPt(30*GeV); // Identify the dijets for (size_t alg = 0; alg < 2; ++alg) { vector leadjets; foreach (const Jet& jet, jetAr[alg]) { const double pT = jet.momentum().pT(); const double absy = fabs(jet.momentum().rapidity()); _pThistos[alg].fill(absy, pT/GeV, evt.weight()); if (absy < 2.8 && leadjets.size() < 2) { if (leadjets.empty() && pT < 60*GeV) continue; leadjets.push_back(jet.momentum()); } } // Veto if no acceptable dijet found if (leadjets.size() < 2) { MSG_DEBUG("Could not find two suitable leading jets"); continue; } const double rap1 = leadjets[0].rapidity(); const double rap2 = leadjets[1].rapidity(); const double mass = (leadjets[0] + leadjets[1]).mass(); const double ymax = max(fabs(rap1), fabs(rap2)); const double chi = exp(fabs(rap1 - rap2)); if (fabs(rap1 + rap2) < 2.2) { _chiVsMass[alg].fill(mass/GeV, chi, evt.weight()); } _massVsY[alg].fill(ymax, mass/GeV, evt.weight()); } } void finalize() { for (size_t alg = 0; alg < 2; ++alg) { // factor 0.5 needed because it is differential in dy and not d|y| _pThistos[alg].scale(0.5*crossSectionPerEvent()/picobarn, this); _massVsY[alg].scale(crossSectionPerEvent()/picobarn, this); _chiVsMass[alg].scale(crossSectionPerEvent()/picobarn, this); } } private: /// The inclusive pT spectrum for akt6 and akt4 jets (array index is jet type from enum above) BinnedHistogram _pThistos[2]; /// The di-jet mass spectrum binned in rapidity for akt6 and akt4 jets (array index is jet type from enum above) BinnedHistogram _massVsY[2]; /// The di-jet chi distribution binned in mass for akt6 and akt4 jets (array index is jet type from enum above) BinnedHistogram _chiVsMass[2]; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2010_S8817804); } rivet-1.8.3/src/Analyses/CDF_2002_S4796047.cc0000644000175000017500000000707512116077757016061 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/TriggerCDFRun0Run1.hh" namespace Rivet { /// @brief CDF Run I charged multiplicity measurement /// @author Hendrik Hoeth /// /// This analysis measures the charged multiplicity distribution /// in minimum bias events at two different center-of-mass energies: /// \f$ \sqrt{s} = \f$ 630 and 1800 GeV. /// /// Particles with c*tau > 10 mm are considered stable, i.e. they /// are reconstructed and their decay products removed. Selection /// cuts are |eta|<1 and pT>0.4 GeV. /// /// @par Run conditions /// /// @arg Two different beam energies: \f$ \sqrt{s} = \$f 630 & 1800 GeV /// @arg Run with generic QCD events. /// @arg Set particles with c*tau > 10 mm stable class CDF_2002_S4796047 : public Analysis { public: /// Constructor CDF_2002_S4796047() : Analysis("CDF_2002_S4796047") { _sumWTrig = 0; } /// @name Analysis methods //@{ /// Book projections and histograms void init() { addProjection(TriggerCDFRun0Run1(), "Trigger"); const ChargedFinalState cfs(-1.0, 1.0, 0.4*GeV); addProjection(cfs, "FS"); // Histos if (fuzzyEquals(sqrtS()/GeV, 630)) { _hist_multiplicity = bookHistogram1D(1, 1, 1); _hist_pt_vs_multiplicity = bookProfile1D(3, 1, 1); } else if (fuzzyEquals(sqrtS()/GeV, 1800)) { _hist_multiplicity = bookHistogram1D(2, 1, 1); _hist_pt_vs_multiplicity = bookProfile1D(4, 1, 1); } } /// Do the analysis void analyze(const Event& evt) { // Trigger const bool trigger = applyProjection(evt, "Trigger").minBiasDecision(); if (!trigger) vetoEvent; const double weight = evt.weight(); _sumWTrig += weight; // Get beam energy and tracks const ChargedFinalState& fs = applyProjection(evt, "FS"); const size_t numParticles = fs.particles().size(); // Fill histos of charged multiplicity distributions _hist_multiplicity->fill(numParticles, weight); // Fill histos for vs. charged multiplicity foreach (const Particle& p, fs.particles()) { const double pT = p.momentum().pT(); _hist_pt_vs_multiplicity->fill(numParticles, pT/GeV, weight); } } void finalize() { // This normalisation is NOT a cross-section. // In the paper the x-axes (!) of the histograms are // scaled such that they can put both energies in the // same plot. Of course this affects the area, too. // Since we want to plot the actual multiplicity, we // scale the x-axes back and have to adjust the areas // accordingly. The scale factors are given in the // legend of the plot in the paper. Have a look at // figure 1 and everything immediately becomes clear. // DON'T TRY TO REPAIR THIS, YOU WILL BREAK IT. if (fuzzyEquals(sqrtS()/GeV, 630)) { normalize(_hist_multiplicity, 3.21167); // fixed norm OK } else if (fuzzyEquals(sqrtS()/GeV, 1800)) { normalize(_hist_multiplicity, 4.19121); // fixed norm OK } } //@} private: /// @name Counter //@{ double _sumWTrig; //@} /// @name Histos //@{ AIDA::IHistogram1D* _hist_multiplicity; AIDA::IProfile1D* _hist_pt_vs_multiplicity; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2002_S4796047); } rivet-1.8.3/src/Analyses/D0_2009_S8349509.cc0000644000175000017500000001201712116077757015730 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief D0 Z+jets angular distributions class D0_2009_S8349509 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor D0_2009_S8349509() : Analysis("D0_2009_S8349509"), _inclusive_Z_sumofweights(0.0) { } //@} /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; ZFinder zfinder(fs, -1.7, 1.7, 15.0*GeV, MUON, 65.0*GeV, 115.0*GeV, 0.2, false, true); addProjection(zfinder, "ZFinder"); FastJets conefinder(zfinder.remainingFinalState(), FastJets::D0ILCONE, 0.5); addProjection(conefinder, "ConeFinder"); _h_dphi_jet_Z25 = bookHistogram1D(1, 1, 1); _h_dphi_jet_Z45 = bookHistogram1D(2, 1, 1); _h_dy_jet_Z25 = bookHistogram1D(3, 1, 1); _h_dy_jet_Z45 = bookHistogram1D(4, 1, 1); _h_yboost_jet_Z25 = bookHistogram1D(5, 1, 1); _h_yboost_jet_Z45 = bookHistogram1D(6, 1, 1); _h_dphi_jet_Z25_xs = bookHistogram1D(1, 1, 2); _h_dphi_jet_Z45_xs = bookHistogram1D(2, 1, 2); _h_dy_jet_Z25_xs = bookHistogram1D(3, 1, 2); _h_dy_jet_Z45_xs = bookHistogram1D(4, 1, 2); _h_yboost_jet_Z25_xs = bookHistogram1D(5, 1, 2); _h_yboost_jet_Z45_xs = bookHistogram1D(6, 1, 2); _inclusive_Z_sumofweights = 0.0; } void analyze(const Event& event) { const double weight = event.weight(); const ZFinder& zfinder = applyProjection(event, "ZFinder"); if (zfinder.bosons().size()==1) { // count inclusive sum of weights for histogram normalisation _inclusive_Z_sumofweights += weight; const FourMomentum Zmom = zfinder.bosons()[0].momentum(); if (Zmom.pT()<25.0*GeV) { vetoEvent; } Jets jets; foreach (const Jet& j, applyProjection(event, "ConeFinder").jetsByPt(20.0*GeV)) { if (fabs(j.momentum().pseudorapidity()) < 2.8) { jets.push_back(j); break; } } // Return if there are no jets: if (jets.size() < 1) { MSG_DEBUG("Skipping event " << event.genEvent().event_number() << " because no jets pass cuts "); vetoEvent; } const FourMomentum jetmom = jets[0].momentum(); double yZ = Zmom.rapidity(); double yjet = jetmom.rapidity(); double dphi = deltaPhi(Zmom.phi(), jetmom.phi()); double dy = fabs(yZ-yjet); double yboost = fabs(yZ+yjet)/2.0; if (Zmom.pT() > 25.0*GeV) { _h_dphi_jet_Z25->fill(dphi,weight); _h_dy_jet_Z25->fill(dy, weight); _h_yboost_jet_Z25->fill(yboost, weight); _h_dphi_jet_Z25_xs->fill(dphi,weight); _h_dy_jet_Z25_xs->fill(dy, weight); _h_yboost_jet_Z25_xs->fill(yboost, weight); } if (Zmom.pT() > 45.0*GeV) { _h_dphi_jet_Z45->fill(dphi,weight); _h_dy_jet_Z45->fill(dy, weight); _h_yboost_jet_Z45->fill(yboost, weight); _h_dphi_jet_Z45_xs->fill(dphi,weight); _h_dy_jet_Z45_xs->fill(dy, weight); _h_yboost_jet_Z45_xs->fill(yboost, weight); } } } void finalize() { if (_inclusive_Z_sumofweights == 0.0) return; scale(_h_dphi_jet_Z25, 1.0/_inclusive_Z_sumofweights); scale(_h_dphi_jet_Z45, 1.0/_inclusive_Z_sumofweights); scale(_h_dy_jet_Z25, 1.0/_inclusive_Z_sumofweights); scale(_h_dy_jet_Z45, 1.0/_inclusive_Z_sumofweights); scale(_h_yboost_jet_Z25, 1.0/_inclusive_Z_sumofweights); scale(_h_yboost_jet_Z45, 1.0/_inclusive_Z_sumofweights); scale(_h_dphi_jet_Z25_xs, crossSectionPerEvent()); scale(_h_dphi_jet_Z45_xs, crossSectionPerEvent()); scale(_h_dy_jet_Z25_xs, crossSectionPerEvent()); scale(_h_dy_jet_Z45_xs, crossSectionPerEvent()); scale(_h_yboost_jet_Z25_xs, crossSectionPerEvent()); scale(_h_yboost_jet_Z45_xs, crossSectionPerEvent()); } //@} private: // Data members like post-cuts event weight counters go here private: /// @name Histograms (normalised) //@{ AIDA::IHistogram1D *_h_dphi_jet_Z25; AIDA::IHistogram1D *_h_dphi_jet_Z45; AIDA::IHistogram1D *_h_dy_jet_Z25; AIDA::IHistogram1D *_h_dy_jet_Z45; AIDA::IHistogram1D *_h_yboost_jet_Z25; AIDA::IHistogram1D *_h_yboost_jet_Z45; //@} /// @name Histograms (absolute cross sections) //@{ AIDA::IHistogram1D *_h_dphi_jet_Z25_xs; AIDA::IHistogram1D *_h_dphi_jet_Z45_xs; AIDA::IHistogram1D *_h_dy_jet_Z25_xs; AIDA::IHistogram1D *_h_dy_jet_Z45_xs; AIDA::IHistogram1D *_h_yboost_jet_Z25_xs; AIDA::IHistogram1D *_h_yboost_jet_Z45_xs; //@} double _inclusive_Z_sumofweights; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(D0_2009_S8349509); } rivet-1.8.3/src/Analyses/CDF_2008_S7540469.cc0000644000175000017500000001430612116077757016060 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" namespace Rivet { /// @brief Measurement differential Z/\f$ \gamma^* \f$ + jet + \f$ X \f$ cross sections /// @author Frank Siegert class CDF_2008_S7540469 : public Analysis { public: /// Constructor CDF_2008_S7540469() : Analysis("CDF_2008_S7540469") { } /// @name Analysis methods //@{ /// Book histograms void init() { // Full final state FinalState fs(-5.0, 5.0); addProjection(fs, "FS"); // Leading electrons in tracking acceptance IdentifiedFinalState elfs(-5.0, 5.0, 25.0*GeV); elfs.acceptIdPair(ELECTRON); addProjection(elfs, "LeadingElectrons"); _h_jet_multiplicity = bookHistogram1D(1, 1, 1); _h_jet_pT_cross_section_incl_1jet = bookHistogram1D(2, 1, 1); _h_jet_pT_cross_section_incl_2jet = bookHistogram1D(3, 1, 1); } /// Do the analysis void analyze(const Event & event) { const double weight = event.weight(); // Skip if the event is empty const FinalState& fs = applyProjection(event, "FS"); if (fs.empty()) { MSG_DEBUG("Skipping event " << event.genEvent().event_number() << " because no final state pair found "); vetoEvent; } // Find the Z candidates const FinalState & electronfs = applyProjection(event, "LeadingElectrons"); std::vector > Z_candidates; ParticleVector all_els=electronfs.particles(); for (size_t i=0; i116.0) { candidate=false; } double abs_eta_0=fabs(all_els[i].momentum().pseudorapidity()); double abs_eta_1=fabs(all_els[j].momentum().pseudorapidity()); if (abs_eta_11.0) { candidate=false; } if (!(abs_eta_1<1.0 || (abs_eta_1>1.2 && abs_eta_1<2.8))) { candidate=false; } if (candidate) { Z_candidates.push_back(make_pair(all_els[i], all_els[j])); } } } if (Z_candidates.size() != 1) { MSG_DEBUG("Skipping event " << event.genEvent().event_number() << " because no unique electron pair found "); vetoEvent; } // Now build the jets on a FS without the electrons from the Z // (including their QED radiation) ParticleVector jetparts; foreach (const Particle& p, fs.particles()) { bool copy = true; if (p.pdgId() == PHOTON) { FourMomentum p_e0 = Z_candidates[0].first.momentum(); FourMomentum p_e1 = Z_candidates[0].second.momentum(); FourMomentum p_P = p.momentum(); if (deltaR(p_e0.pseudorapidity(), p_e0.azimuthalAngle(), p_P.pseudorapidity(), p_P.azimuthalAngle()) < 0.2) { copy = false; } if (deltaR(p_e1.pseudorapidity(), p_e1.azimuthalAngle(), p_P.pseudorapidity(), p_P.azimuthalAngle()) < 0.2) { copy = false; } } else { if (p.genParticle().barcode()==Z_candidates[0].first.genParticle().barcode()) { copy = false; } if (p.genParticle().barcode()==Z_candidates[0].second.genParticle().barcode()) { copy = false; } } if (copy) jetparts.push_back(p); } FastJets jetpro(FastJets::CDFMIDPOINT, 0.7); jetpro.calc(jetparts); // Take jets with pt > 30, |eta| < 2.1: /// @todo Make this neater, using the JetAlg interface and the built-in sorting const Jets& jets = jetpro.jets(); Jets jets_cut; foreach (const Jet& j, jets) { if (j.momentum().pT()/GeV > 30.0 && fabs(j.momentum().pseudorapidity()) < 2.1) { jets_cut.push_back(j); } } MSG_DEBUG("Num jets above 30 GeV = " << jets_cut.size()); // Return if there are no jets: if (jets_cut.empty()) { MSG_DEBUG("No jets pass cuts "); vetoEvent; } // Sort by pT: sort(jets_cut.begin(), jets_cut.end(), cmpJetsByPt); // cut on Delta R between jet and electrons foreach (const Jet& j, jets_cut) { Particle el = Z_candidates[0].first; if (deltaR(el.momentum().pseudorapidity(), el.momentum().azimuthalAngle(), j.momentum().pseudorapidity(), j.momentum().azimuthalAngle()) < 0.7) { vetoEvent; } el = Z_candidates[0].second; if (deltaR(el.momentum().pseudorapidity(), el.momentum().azimuthalAngle(), j.momentum().pseudorapidity(), j.momentum().azimuthalAngle()) < 0.7) { vetoEvent; } } for (size_t njet=1; njet<=jets_cut.size(); ++njet) { _h_jet_multiplicity->fill(njet, weight); } foreach (const Jet& j, jets_cut) { if (jets_cut.size()>0) { _h_jet_pT_cross_section_incl_1jet->fill(j.momentum().pT(), weight); } if (jets_cut.size()>1) { _h_jet_pT_cross_section_incl_2jet->fill(j.momentum().pT(), weight); } } } /// Rescale histos void finalize() { const double invlumi = crossSection()/femtobarn/sumOfWeights(); scale(_h_jet_multiplicity, invlumi); scale(_h_jet_pT_cross_section_incl_1jet, invlumi); scale(_h_jet_pT_cross_section_incl_2jet, invlumi); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_jet_multiplicity; AIDA::IHistogram1D * _h_jet_pT_cross_section_incl_1jet; AIDA::IHistogram1D * _h_jet_pT_cross_section_incl_2jet; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2008_S7540469); } rivet-1.8.3/src/Analyses/CDF_2012_NOTE10874.cc0000644000175000017500000000434712116077757016243 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" namespace Rivet { class CDF_2012_NOTE10874 : public Analysis { public: CDF_2012_NOTE10874() : Analysis("CDF_2012_NOTE10874") {} public: void init() { const ChargedFinalState cfs(-1.0, 1.0, 0.5*GeV); addProjection(cfs, "CFS"); int isqrts = -1; if (fuzzyEquals(sqrtS(), 300*GeV)) isqrts = 1; else if (fuzzyEquals(sqrtS(), 900*GeV)) isqrts = 2; else if (fuzzyEquals(sqrtS(), 1960*GeV)) isqrts = 3; assert(isqrts >= 0); _h_nch_transverse = bookProfile1D(1,1,isqrts); _h_ptSumDen = bookProfile1D(2,1,isqrts); _h_avePt = bookProfile1D(3,1,isqrts); } // Little helper function to identify Delta(phi) regions inline int region_index(double dphi) { assert(inRange(dphi, 0.0, PI, CLOSED, CLOSED)); if (dphi < PI/3.0) return 0; if (dphi < 2*PI/3.0) return 1; return 2; } void analyze(const Event& event) { const double weight = event.weight(); const ChargedFinalState& cfs = applyProjection(event, "CFS"); if (cfs.size() < 1) { vetoEvent; } ParticleVector particles = cfs.particlesByPt(); Particle p_lead = particles[0]; const double philead = p_lead.momentum().phi(); const double pTlead = p_lead.momentum().pT(); int tNch = 0; double ptSum = 0.0; foreach (const Particle& p, particles) { const double pT = p.momentum().pT(); const double dPhi = deltaPhi(philead, p.momentum().phi()); const int ir = region_index(dPhi); if (ir==1) { tNch++; ptSum += pT; } } const double dEtadPhi = 4.0*PI/3.0; _h_nch_transverse->fill(pTlead/GeV, tNch/dEtadPhi, weight); _h_ptSumDen->fill(pTlead/GeV, ptSum/dEtadPhi, weight); if (tNch > 0) { _h_avePt->fill(pTlead/GeV, ptSum/tNch, weight); } } void finalize() { } private: AIDA::IProfile1D *_h_nch_transverse, *_h_ptSumDen, *_h_avePt; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2012_NOTE10874); } rivet-1.8.3/src/Analyses/MC_TTBAR.cc0000644000175000017500000003111412116077757015175 0ustar sunsun#include "Rivet/Analysis.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/ChargedLeptons.hh" #include "Rivet/Projections/MissingMomentum.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/AnalysisLoader.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { class MC_TTBAR : public Analysis { public: /// Minimal constructor MC_TTBAR() : Analysis("MC_TTBAR") { } /// @name Analysis methods //@{ /// Set up projections and book histograms void init() { // A FinalState is used to select particles within |eta| < 4.2 and with pT // > 30 GeV, out of which the ChargedLeptons projection picks only the // electrons and muons, to be accessed later as "LFS". ChargedLeptons lfs(FinalState(-4.2, 4.2, 30*GeV)); addProjection(lfs, "LFS"); // A second FinalState is used to select all particles in |eta| < 4.2, // with no pT cut. This is used to construct jets and measure missing // transverse energy. VetoedFinalState fs(FinalState(-4.2, 4.2, 0*GeV)); fs.addVetoOnThisFinalState(lfs); addProjection(FastJets(fs, FastJets::ANTIKT, 0.6), "Jets"); addProjection(MissingMomentum(fs), "MissingET"); // Booking of histograms _h_njets = bookHistogram1D("jet_mult", 11, -0.5, 10.5); // _h_jet_1_pT = bookHistogram1D("jet_1_pT", logspace(50, 20.0, 500.0)); _h_jet_2_pT = bookHistogram1D("jet_2_pT", logspace(50, 20.0, 400.0)); _h_jet_3_pT = bookHistogram1D("jet_3_pT", logspace(50, 20.0, 300.0)); _h_jet_4_pT = bookHistogram1D("jet_4_pT", logspace(50, 20.0, 200.0)); _h_jet_HT = bookHistogram1D("jet_HT", logspace(50, 100.0, 2000.0)); // _h_bjet_1_pT = bookHistogram1D("jetb_1_pT", logspace(50, 20.0, 400.0)); _h_bjet_2_pT = bookHistogram1D("jetb_2_pT", logspace(50, 20.0, 300.0)); // _h_ljet_1_pT = bookHistogram1D("jetl_1_pT", logspace(50, 20.0, 400.0)); _h_ljet_2_pT = bookHistogram1D("jetl_2_pT", logspace(50, 20.0, 300.0)); // _h_W_mass = bookHistogram1D("W_mass", 75, 30, 180); _h_t_mass = bookHistogram1D("t_mass", 150, 130, 430); _h_t_mass_W_cut = bookHistogram1D("t_mass_W_cut", 150, 130, 430); // _h_jetb_1_jetb_2_dR = bookHistogram1D("jetb_1_jetb_2_dR", 20, 0.0, 7.0); _h_jetb_1_jetb_2_deta = bookHistogram1D("jetb_1_jetb_2_deta", 20, 0.0, 7.0); _h_jetb_1_jetb_2_dphi = bookHistogram1D("jetb_1_jetb_2_dphi", 20, 0.0, M_PI); _h_jetb_1_jetl_1_dR = bookHistogram1D("jetb_1_jetl_1_dR", 20, 0.0, 7.0); _h_jetb_1_jetl_1_deta = bookHistogram1D("jetb_1_jetl_1_deta", 20, 0.0, 7.0); _h_jetb_1_jetl_1_dphi = bookHistogram1D("jetb_1_jetl_1_dphi", 20, 0.0, M_PI); _h_jetl_1_jetl_2_dR = bookHistogram1D("jetl_1_jetl_2_dR", 20, 0.0, 7.0); _h_jetl_1_jetl_2_deta = bookHistogram1D("jetl_1_jetl_2_deta", 20, 0.0, 7.0); _h_jetl_1_jetl_2_dphi = bookHistogram1D("jetl_1_jetl_2_dphi", 20, 0.0, M_PI); _h_jetb_1_W_dR = bookHistogram1D("jetb_1_W_dR", 20, 0.0, 7.0); _h_jetb_1_W_deta = bookHistogram1D("jetb_1_W_deta", 20, 0.0, 7.0); _h_jetb_1_W_dphi = bookHistogram1D("jetb_1_W_dphi", 20, 0.0, M_PI); _h_jetb_1_l_dR = bookHistogram1D("jetb_1_l_dR", 20, 0.0, 7.0); _h_jetb_1_l_deta = bookHistogram1D("jetb_1_l_deta", 20, 0.0, 7.0); _h_jetb_1_l_dphi = bookHistogram1D("jetb_1_l_dphi", 20, 0.0, M_PI); _h_jetb_1_l_mass = bookHistogram1D("jetb_1_l_mass", 40, 0.0, 500.0); } void analyze(const Event& event) { const double weight = event.weight(); // Use the "LFS" projection to require at least one hard charged // lepton. This is an experimental signature for the leptonically decaying // W. This helps to reduce pure QCD backgrounds. const ChargedLeptons& lfs = applyProjection(event, "LFS"); MSG_DEBUG("Charged lepton multiplicity = " << lfs.chargedLeptons().size()); foreach (const Particle& lepton, lfs.chargedLeptons()) { MSG_DEBUG("Lepton pT = " << lepton.momentum().pT()); } if (lfs.chargedLeptons().empty()) { MSG_DEBUG("Event failed lepton multiplicity cut"); vetoEvent; } // Use a missing ET cut to bias toward events with a hard neutrino from // the leptonically decaying W. This helps to reduce pure QCD backgrounds. const MissingMomentum& met = applyProjection(event, "MissingET"); MSG_DEBUG("Vector ET = " << met.vectorEt().mod() << " GeV"); if (met.vectorEt().mod() < 30*GeV) { MSG_DEBUG("Event failed missing ET cut"); vetoEvent; } // Use the "Jets" projection to check that there are at least 4 jets of // any pT. Getting the jets sorted by pT ensures that the first jet is the // hardest, and so on. We apply no pT cut here only because we want to // plot all jet pTs to help optimise our jet pT cut. const FastJets& jetpro = applyProjection(event, "Jets"); const Jets alljets = jetpro.jetsByPt(); if (alljets.size() < 4) { MSG_DEBUG("Event failed jet multiplicity cut"); vetoEvent; } // Update passed-cuts counter and fill all-jets histograms _h_jet_1_pT->fill(alljets[0].momentum().pT()/GeV, weight); _h_jet_2_pT->fill(alljets[1].momentum().pT()/GeV, weight); _h_jet_3_pT->fill(alljets[2].momentum().pT()/GeV, weight); _h_jet_4_pT->fill(alljets[3].momentum().pT()/GeV, weight); // Insist that the hardest 4 jets pass pT hardness cuts. If we don't find // at least 4 such jets, we abandon this event. const Jets jets = jetpro.jetsByPt(30*GeV); _h_njets->fill(jets.size(), weight); double ht = 0.0; foreach (const Jet& j, jets) { ht += j.momentum().pT(); } _h_jet_HT->fill(ht/GeV, weight); if (jets.size() < 4 || jets[0].momentum().pT() < 60*GeV || jets[1].momentum().pT() < 50*GeV || jets[3].momentum().pT() < 30*GeV) { MSG_DEBUG("Event failed jet cuts"); vetoEvent; } // Sort the jets into b-jets and light jets. We expect one hard b-jet from // each top decay, so our 4 hardest jets should include two b-jets. The // Jet::containsBottom() method is equivalent to perfect experimental // b-tagging, in a generator-independent way. Jets bjets, ljets; foreach (const Jet& jet, jets) { // // Don't count jets that overlap with the hard leptons bool isolated = true; foreach (const Particle& lepton, lfs.chargedLeptons()) { if (deltaR(jet.momentum(), lepton.momentum()) < 0.3) { isolated = false; break; } } if (!isolated) { MSG_DEBUG("Jet failed lepton isolation cut"); break; } if (jet.containsBottom()) { bjets.push_back(jet); } else { ljets.push_back(jet); } } MSG_DEBUG("Number of b-jets = " << bjets.size()); MSG_DEBUG("Number of l-jets = " << ljets.size()); if (bjets.size() != 2) { MSG_DEBUG("Event failed post-lepton-isolation b-tagging cut"); vetoEvent; } if (ljets.size() < 2) { MSG_DEBUG("Event failed since not enough light jets remaining after lepton-isolation"); vetoEvent; } // Plot the pTs of the identified jets. _h_bjet_1_pT->fill(bjets[0].momentum().pT(), weight); _h_bjet_2_pT->fill(bjets[1].momentum().pT(), weight); _h_ljet_1_pT->fill(ljets[0].momentum().pT(), weight); _h_ljet_2_pT->fill(ljets[1].momentum().pT(), weight); // Construct the hadronically decaying W momentum 4-vector from pairs of // non-b-tagged jets. The pair which best matches the W mass is used. We start // with an always terrible 4-vector estimate which should always be "beaten" by // a real jet pair. FourMomentum W(10*sqrtS(), 0, 0, 0); for (size_t i = 0; i < ljets.size()-1; ++i) { for (size_t j = i + 1; j < ljets.size(); ++j) { const FourMomentum Wcand = ljets[i].momentum() + ljets[j].momentum(); MSG_TRACE(i << "," << j << ": candidate W mass = " << Wcand.mass()/GeV << " GeV, vs. incumbent candidate with " << W.mass()/GeV << " GeV"); if (fabs(Wcand.mass() - 80.4*GeV) < fabs(W.mass() - 80.4*GeV)) { W = Wcand; } } } MSG_DEBUG("Candidate W mass = " << W.mass() << " GeV"); // There are two b-jets with which this can be combined to make the // hadronically decaying top, one of which is correct and the other is // not... but we have no way to identify which is which, so we construct // both possible top momenta and fill the histograms with both. const FourMomentum t1 = W + bjets[0].momentum(); const FourMomentum t2 = W + bjets[1].momentum(); _h_W_mass->fill(W.mass(), weight); _h_t_mass->fill(t1.mass(), weight); _h_t_mass->fill(t2.mass(), weight); // Placing a cut on the well-known W mass helps to reduce backgrounds if (inRange(W.mass()/GeV, 75.0, 85.0)) { MSG_DEBUG("W found with mass " << W.mass()/GeV << " GeV"); _h_t_mass_W_cut->fill(t1.mass(), weight); _h_t_mass_W_cut->fill(t2.mass(), weight); _h_jetb_1_jetb_2_dR->fill(deltaR(bjets[0].momentum(), bjets[1].momentum()),weight); _h_jetb_1_jetb_2_deta->fill(fabs(bjets[0].momentum().eta()-bjets[1].momentum().eta()),weight); _h_jetb_1_jetb_2_dphi->fill(deltaPhi(bjets[0].momentum(),bjets[1].momentum()),weight); _h_jetb_1_jetl_1_dR->fill(deltaR(bjets[0].momentum(), ljets[0].momentum()),weight); _h_jetb_1_jetl_1_deta->fill(fabs(bjets[0].momentum().eta()-ljets[0].momentum().eta()),weight); _h_jetb_1_jetl_1_dphi->fill(deltaPhi(bjets[0].momentum(),ljets[0].momentum()),weight); _h_jetl_1_jetl_2_dR->fill(deltaR(ljets[0].momentum(), ljets[1].momentum()),weight); _h_jetl_1_jetl_2_deta->fill(fabs(ljets[0].momentum().eta()-ljets[1].momentum().eta()),weight); _h_jetl_1_jetl_2_dphi->fill(deltaPhi(ljets[0].momentum(),ljets[1].momentum()),weight); _h_jetb_1_W_dR->fill(deltaR(bjets[0].momentum(), W),weight); _h_jetb_1_W_deta->fill(fabs(bjets[0].momentum().eta()-W.eta()),weight); _h_jetb_1_W_dphi->fill(deltaPhi(bjets[0].momentum(),W),weight); FourMomentum l=lfs.chargedLeptons()[0].momentum(); _h_jetb_1_l_dR->fill(deltaR(bjets[0].momentum(), l),weight); _h_jetb_1_l_deta->fill(fabs(bjets[0].momentum().eta()-l.eta()),weight); _h_jetb_1_l_dphi->fill(deltaPhi(bjets[0].momentum(),l),weight); _h_jetb_1_l_mass->fill(FourMomentum(bjets[0].momentum()+l).mass(), weight); } } void finalize() { normalize(_h_njets); normalize(_h_jet_1_pT); normalize(_h_jet_2_pT); normalize(_h_jet_3_pT); normalize(_h_jet_4_pT); normalize(_h_jet_HT); normalize(_h_bjet_1_pT); normalize(_h_bjet_2_pT); normalize(_h_ljet_1_pT); normalize(_h_ljet_2_pT); normalize(_h_W_mass); normalize(_h_t_mass); normalize(_h_t_mass_W_cut); normalize(_h_jetb_1_jetb_2_dR); normalize(_h_jetb_1_jetb_2_deta); normalize(_h_jetb_1_jetb_2_dphi); normalize(_h_jetb_1_jetl_1_dR); normalize(_h_jetb_1_jetl_1_deta); normalize(_h_jetb_1_jetl_1_dphi); normalize(_h_jetl_1_jetl_2_dR); normalize(_h_jetl_1_jetl_2_deta); normalize(_h_jetl_1_jetl_2_dphi); normalize(_h_jetb_1_W_dR); normalize(_h_jetb_1_W_deta); normalize(_h_jetb_1_W_dphi); normalize(_h_jetb_1_l_dR); normalize(_h_jetb_1_l_deta); normalize(_h_jetb_1_l_dphi); normalize(_h_jetb_1_l_mass); } //@} private: // @name Histogram data members //@{ AIDA::IHistogram1D *_h_njets; AIDA::IHistogram1D *_h_jet_1_pT, *_h_jet_2_pT, *_h_jet_3_pT, *_h_jet_4_pT; AIDA::IHistogram1D *_h_jet_HT; AIDA::IHistogram1D *_h_bjet_1_pT, *_h_bjet_2_pT; AIDA::IHistogram1D *_h_ljet_1_pT, *_h_ljet_2_pT; AIDA::IHistogram1D *_h_W_mass; AIDA::IHistogram1D *_h_t_mass, *_h_t_mass_W_cut; AIDA::IHistogram1D *_h_jetb_1_jetb_2_dR, *_h_jetb_1_jetb_2_deta, *_h_jetb_1_jetb_2_dphi; AIDA::IHistogram1D *_h_jetb_1_jetl_1_dR, *_h_jetb_1_jetl_1_deta, *_h_jetb_1_jetl_1_dphi; AIDA::IHistogram1D *_h_jetl_1_jetl_2_dR, *_h_jetl_1_jetl_2_deta, *_h_jetl_1_jetl_2_dphi; AIDA::IHistogram1D *_h_jetb_1_W_dR, *_h_jetb_1_W_deta, *_h_jetb_1_W_dphi; AIDA::IHistogram1D *_h_jetb_1_l_dR, *_h_jetb_1_l_deta, *_h_jetb_1_l_dphi,*_h_jetb_1_l_mass; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_TTBAR); } rivet-1.8.3/src/Analyses/CMS_2011_S9086218.cc0000644000175000017500000000326312116077757016077 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/BinnedHistogram.hh" namespace Rivet { // Inclusive jet pT class CMS_2011_S9086218 : public Analysis { public: // Constructor CMS_2011_S9086218() : Analysis("CMS_2011_S9086218") {} // Book histograms and initialize projections: void init() { const FinalState fs; // Initialize the projectors: addProjection(FastJets(fs, FastJets::ANTIKT, 0.5),"Jets"); // Book histograms: _hist_sigma.addHistogram(0.0, 0.5, bookHistogram1D(1, 1, 1)); _hist_sigma.addHistogram(0.5, 1.0, bookHistogram1D(2, 1, 1)); _hist_sigma.addHistogram(1.0, 1.5, bookHistogram1D(3, 1, 1)); _hist_sigma.addHistogram(1.5, 2.0, bookHistogram1D(4, 1, 1)); _hist_sigma.addHistogram(2.0, 2.5, bookHistogram1D(5, 1, 1)); _hist_sigma.addHistogram(2.5, 3.0, bookHistogram1D(6, 1, 1)); } // Analysis void analyze(const Event &event) { const double weight = event.weight(); const FastJets &fj = applyProjection(event,"Jets"); const Jets& jets = fj.jets(18.0*GeV, 1100.0*GeV, -4.7, 4.7, RAPIDITY); // Fill the relevant histograms: foreach(const Jet &j, jets) { _hist_sigma.fill(fabs(j.momentum().rapidity()), j.momentum().pT(), weight); } } // Finalize void finalize() { _hist_sigma.scale(crossSection()/sumOfWeights()/2.0, this); } private: BinnedHistogram _hist_sigma; }; // This global object acts as a hook for the plugin system. DECLARE_RIVET_PLUGIN(CMS_2011_S9086218); } rivet-1.8.3/src/Analyses/MC_ZINC.cc0000644000175000017500000000507312116077757015071 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief MC validation analysis for Z events class MC_ZINC : public Analysis { public: /// Default constructor MC_ZINC() : Analysis("MC_ZINC") { } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; ZFinder zfinder(fs, -3.5, 3.5, 25.0*GeV, ELECTRON, 65.0*GeV, 115.0*GeV, 0.2, true, true); addProjection(zfinder, "ZFinder"); _h_Z_mass = bookHistogram1D("Z_mass", 50, 66.0, 116.0); _h_Z_pT = bookHistogram1D("Z_pT", logBinEdges(100, 1.0, 0.5*sqrtS())); _h_Z_pT_peak = bookHistogram1D("Z_pT_peak", 25, 0.0, 25.0); _h_Z_y = bookHistogram1D("Z_y", 40, -4.0, 4.0); _h_Z_phi = bookHistogram1D("Z_phi", 25, 0.0, TWOPI); _h_lepton_pT = bookHistogram1D("lepton_pT", logBinEdges(100, 10.0, 0.25*sqrtS())); _h_lepton_eta = bookHistogram1D("lepton_eta", 40, -4.0, 4.0); } /// Do the analysis void analyze(const Event & e) { const ZFinder& zfinder = applyProjection(e, "ZFinder"); if (zfinder.bosons().size()!=1) { vetoEvent; } const double weight = e.weight(); FourMomentum zmom(zfinder.bosons()[0].momentum()); _h_Z_mass->fill(zmom.mass(),weight); _h_Z_pT->fill(zmom.pT(),weight); _h_Z_pT_peak->fill(zmom.pT(),weight); _h_Z_y->fill(zmom.rapidity(),weight); _h_Z_phi->fill(zmom.azimuthalAngle(),weight); foreach (const Particle& l, zfinder.constituents()) { _h_lepton_pT->fill(l.momentum().pT(), weight); _h_lepton_eta->fill(l.momentum().eta(), weight); } } /// Finalize void finalize() { scale(_h_Z_mass, crossSection()/sumOfWeights()); scale(_h_Z_pT, crossSection()/sumOfWeights()); scale(_h_Z_pT_peak, crossSection()/sumOfWeights()); scale(_h_Z_y, crossSection()/sumOfWeights()); scale(_h_Z_phi, crossSection()/sumOfWeights()); scale(_h_lepton_pT, crossSection()/sumOfWeights()); scale(_h_lepton_eta, crossSection()/sumOfWeights()); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_Z_mass; AIDA::IHistogram1D * _h_Z_pT; AIDA::IHistogram1D * _h_Z_pT_peak; AIDA::IHistogram1D * _h_Z_y; AIDA::IHistogram1D * _h_Z_phi; AIDA::IHistogram1D * _h_lepton_pT; AIDA::IHistogram1D * _h_lepton_eta; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_ZINC); } rivet-1.8.3/src/Analyses/OPAL_1997_S3608263.cc0000644000175000017500000000443212116077757016227 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief OPAL K*0 fragmentation function paper /// @author Peter Richardson class OPAL_1997_S3608263 : public Analysis { public: /// Constructor OPAL_1997_S3608263() : Analysis("OPAL_1997_S3608263") {} /// @name Analysis methods //@{ void init() { addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "FS"); addProjection(UnstableFinalState(), "UFS"); _histXeK0 = bookHistogram1D( 1, 1, 1); } void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed leptonic event cut"); vetoEvent; } MSG_DEBUG("Passed leptonic event cut"); // Get event weight for histo filling const double weight = e.weight(); // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); // Final state of unstable particles to get particle spectra const UnstableFinalState& ufs = applyProjection(e, "UFS"); foreach (const Particle& p, ufs.particles()) { const int id = abs(p.pdgId()); if(id==313) { double xE = p.momentum().t()/meanBeamMom; _histXeK0->fill(xE, weight); } } } /// Finalize void finalize() { scale(_histXeK0, 1./sumOfWeights()); } //@} private: AIDA::IHistogram1D *_histXeK0; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(OPAL_1997_S3608263); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1112263.cc0000644000175000017500000002633312116077757016271 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/RivetMT2.hh" namespace Rivet { /// @author Peter Richardson class ATLAS_2012_I1112263 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_I1112263() : Analysis("ATLAS_2012_I1112263") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 10.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); VetoedFinalState vfs; vfs.addVetoPairId(MUON); /// Jet finder addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // all tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0),"cfs"); // Book histograms _hist_leptonpT_SR1.push_back(bookHistogram1D("hist_lepton_pT_1_SR1",11,0.,220.)); _hist_leptonpT_SR1.push_back(bookHistogram1D("hist_lepton_pT_2_SR1", 7,0.,140.)); _hist_leptonpT_SR1.push_back(bookHistogram1D("hist_lepton_pT_3_SR1", 8,0.,160.)); _hist_leptonpT_SR2.push_back(bookHistogram1D("hist_lepton_pT_1_SR2",11,0.,220.)); _hist_leptonpT_SR2.push_back(bookHistogram1D("hist_lepton_pT_2_SR2", 7,0.,140.)); _hist_leptonpT_SR2.push_back(bookHistogram1D("hist_lepton_pT_3_SR2", 8,0.,160.)); _hist_etmiss_SR1_A = bookHistogram1D("hist_etmiss_SR1_A",15,10.,310.); _hist_etmiss_SR1_B = bookHistogram1D("hist_etmiss_SR1_B", 9,10.,190.); _hist_etmiss_SR2_A = bookHistogram1D("hist_etmiss_SR2_A",15,10.,310.); _hist_etmiss_SR2_B = bookHistogram1D("hist_etmiss_SR2_B", 9,10.,190.); _hist_mSFOS= bookHistogram1D("hist_mSFOF",9,0.,180.); _count_SR1 = bookHistogram1D("count_SR1", 1, 0., 1.); _count_SR2 = bookHistogram1D("count_SR2", 1, 0., 1.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // get the jet candidates Jets cand_jets; foreach (const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 2.8 ) { cand_jets.push_back(jet); } } // candidate muons ParticleVector cand_mu; ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); foreach ( const Particle & mu, applyProjection(event, "muons").particlesByPt() ) { double pTinCone = -mu.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(mu.momentum(),track.momentum()) <= 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 1.8*GeV ) cand_mu.push_back(mu); } // candidate electrons ParticleVector cand_e; foreach ( const Particle & e, applyProjection(event, "elecs").particlesByPt() ) { double eta = e.momentum().eta(); // remove electrons with pT<15 in old veto region // (NOT EXPLICIT IN THIS PAPER BUT IN SIMILAR 4 LEPTON PAPER and THIS DESCRPITION // IS MUCH WORSE SO ASSUME THIS IS DONE) if( fabs(eta)>1.37 && fabs(eta) < 1.52 && e.momentum().perp()< 15.*GeV) continue; double pTinCone = -e.momentum().perp(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(e.momentum(),track.momentum()) <= 0.2 ) pTinCone += track.momentum().pT(); } if (pTinCone/e.momentum().perp()<0.1) { cand_e.push_back(e); } } // resolve jet/lepton ambiguity // (NOT EXPLICIT IN THIS PAPER BUT IN SIMILAR 4 LEPTON PAPER and THIS DESCRPITION // IS MUCH WORSE SO ASSUME THIS IS DONE) Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) recon_jets.push_back( jet ); } // only keep electrons more than R=0.4 from jets ParticleVector recon_e; foreach ( const Particle & e, cand_e ) { bool away = true; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } // and 0.1 from any muons if ( ! away ) { foreach ( const Particle & mu, cand_e ) { if ( deltaR(mu.momentum(),e.momentum()) < 0.1 ) { away = false; break; } } } if ( away ) recon_e.push_back( e ); } // only keep muons more than R=0.4 from jets ParticleVector recon_mu; foreach ( const Particle & mu, cand_mu ) { bool away = true; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } // and 0.1 from any electrona if ( ! away ) { foreach ( const Particle & e, cand_e ) { if ( deltaR(mu.momentum(),e.momentum()) < 0.1 ) { away = false; break; } } } if ( away ) recon_mu.push_back( mu ); } // pTmiss ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // now only use recon_jets, recon_mu, recon_e // reject events with wrong number of leptons if ( recon_mu.size() + recon_e.size() != 3 ) { MSG_DEBUG("To few charged leptons left after selection"); vetoEvent; } // ATLAS calo problem if(rand()/static_cast(RAND_MAX)<=0.42) { foreach ( const Particle & e, recon_e ) { double eta = e.momentum().eta(); double phi = e.momentum().azimuthalAngle(MINUSPI_PLUSPI); if(eta>-0.1&&eta<1.5&&phi>-0.9&&phi<-0.5) vetoEvent; } foreach ( const Jet & jet, recon_jets ) { double eta = jet.momentum().rapidity(); double phi = jet.momentum().azimuthalAngle(MINUSPI_PLUSPI); if(jet.momentum().perp()>40 && eta>-0.1&&eta<1.5&&phi>-0.9&&phi<-0.5) vetoEvent; } } // check at least one e/mu passing trigger if( !( !recon_e .empty() && recon_e[0] .momentum().perp()>25.) && !( !recon_mu.empty() && recon_mu[0].momentum().perp()>20.) ) { MSG_DEBUG("Hardest lepton fails trigger"); vetoEvent; } // eTmiss cut if(eTmiss<50.) vetoEvent; // check at least 1 SFOS pair double mSFOS=1e30, mdiff=1e30; unsigned int nSFOS=0; for(unsigned int ix=0;ix0) continue; ++nSFOS; double mtest = (recon_e[ix].momentum()+recon_e[iy].momentum()).mass(); // veto is mass<20 if(mtest<20.) vetoEvent; if(fabs(mtest-90.)0) continue; ++nSFOS; double mtest = (recon_mu[ix].momentum()+recon_mu[iy].momentum()).mass(); // veto is mass<20 if(mtest<20.) vetoEvent; if(fabs(mtest-90.)10.) { foreach (const Jet & jet, recon_jets ) { if(jet.containsBottom() && rand()/static_cast(RAND_MAX)<=0.60) vetoEvent; } } // region SR1, Z depleted if(mdiff>10.) { _count_SR1->fill(0.5,weight); _hist_etmiss_SR1_A->fill(eTmiss,weight); _hist_etmiss_SR1_B->fill(eTmiss,weight); _hist_mSFOS->fill(mSFOS,weight); } // region SR2, Z enriched else { _count_SR2->fill(0.5,weight); _hist_etmiss_SR2_A->fill(eTmiss,weight); _hist_etmiss_SR2_B->fill(eTmiss,weight); } // make the control plots // lepton pT unsigned int ie=0,imu=0; for(unsigned int ix=0;ix<3;++ix) { AIDA::IHistogram1D* hist = mdiff>10. ? _hist_leptonpT_SR1[ix] : _hist_leptonpT_SR2[ix]; double pTe = ie pTmu) { hist->fill(pTe ,weight); ++ie; } else { hist->fill(pTmu,weight); ++imu; } } } //@} void finalize() { double norm = crossSection()/femtobarn*2.06/sumOfWeights(); // these are number of events at 2.06fb^-1 per 20 GeV for(unsigned int ix=0;ix<3;++ix) { scale(_hist_leptonpT_SR1[ix],norm*20.); scale(_hist_leptonpT_SR2[ix],norm*20.); } scale(_hist_etmiss_SR1_A,norm*20.); scale(_hist_etmiss_SR1_B,norm*20.); scale(_hist_etmiss_SR2_A,norm*20.); scale(_hist_etmiss_SR2_B,norm*20.); scale(_hist_mSFOS ,norm*20.); // these are number of events at 2.06fb^-1 scale(_count_SR1,norm); scale(_count_SR2,norm); } private: /// @name Histograms //@{ vector _hist_leptonpT_SR1; vector _hist_leptonpT_SR2; AIDA::IHistogram1D* _hist_etmiss_SR1_A; AIDA::IHistogram1D* _hist_etmiss_SR1_B; AIDA::IHistogram1D* _hist_etmiss_SR2_A; AIDA::IHistogram1D* _hist_etmiss_SR2_B; AIDA::IHistogram1D* _hist_mSFOS; AIDA::IHistogram1D* _count_SR1; AIDA::IHistogram1D* _count_SR2; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I1112263); } rivet-1.8.3/src/Analyses/CDF_2008_LEADINGJETS.cc0000644000175000017500000002024712116077757016625 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief CDF Run II underlying event in leading jet events /// @author Hendrik Hoeth /// /// Rick Field's measurement of the underlying event in "leading jet" events. /// The leading jet (CDF midpoint \f$ R = 0.7 \f$) must be within \f$|\eta| < 2 \f$ /// and defines the "toward" phi direction. Particles are selected in /// \f$ |\eta| < 1 \f$. For the \f$ p_\perp \f$-related observables there /// is a \f$ p_\perp > 0.5 \f$ GeV cut. For \f$ \sum E_\perp \f$ there is no /// \f$ p_\perp \f$ cut. /// /// @par Run conditions /// /// @arg \f$ \sqrt{s} = \f$ 1960 GeV /// @arg Run with generic QCD events. /// @arg Set particles with c*tau > 10 mm stable /// @arg Several \f$ p_\perp^\text{min} \f$ cutoffs are probably required to fill the profile histograms: /// @arg \f$ p_\perp^\text{min} = \f$ 0 (min bias), 10, 20, 50, 100, 150 GeV /// @arg The corresponding merging points are at \f$ p_T = \f$ 0, 30, 50, 80, 130, 180 GeV class CDF_2008_LEADINGJETS : public Analysis { public: /// Constructor CDF_2008_LEADINGJETS() : Analysis("CDF_2008_LEADINGJETS") { } /// @name Analysis methods //@{ void init() { // Final state for the jet finding const FinalState fsj(-4.0, 4.0, 0.0*GeV); addProjection(fsj, "FSJ"); addProjection(FastJets(fsj, FastJets::CDFMIDPOINT, 0.7), "MidpointJets"); // Final state for the sum(ET) distributions const FinalState fs(-1.0, 1.0, 0.0*GeV); addProjection(fs, "FS"); // Charged final state for the distributions const ChargedFinalState cfs(-1.0, 1.0, 0.5*GeV); addProjection(cfs, "CFS"); // Book histograms _hist_pnchg = bookProfile1D( 1, 1, 1); _hist_pmaxnchg = bookProfile1D( 2, 1, 1); _hist_pminnchg = bookProfile1D( 3, 1, 1); _hist_pdifnchg = bookProfile1D( 4, 1, 1); _hist_pcptsum = bookProfile1D( 5, 1, 1); _hist_pmaxcptsum = bookProfile1D( 6, 1, 1); _hist_pmincptsum = bookProfile1D( 7, 1, 1); _hist_pdifcptsum = bookProfile1D( 8, 1, 1); _hist_pcptave = bookProfile1D( 9, 1, 1); //_hist_onchg = bookProfile1D( 1, 1, 1, "Overall number of charged particles"); //_hist_ocptsum = bookProfile1D( 2, 1, 1, "Overall charged $p_\\perp$ sum"); //_hist_oetsum = bookProfile1D( 3, 1, 1, "Overall $E_\\perp$ sum"); } // Do the analysis void analyze(const Event& e) { /// @todo Implement Run II min bias trigger cf. CDF_2009? const FinalState& fsj = applyProjection(e, "FSJ"); if (fsj.particles().size() < 1) { MSG_DEBUG("Failed multiplicity cut"); vetoEvent; } const Jets& jets = applyProjection(e, "MidpointJets").jetsByPt(); MSG_DEBUG("Jet multiplicity = " << jets.size()); // We require the leading jet to be within |eta|<2 if (jets.size() < 1 || fabs(jets[0].momentum().eta()) >= 2) { MSG_DEBUG("Failed leading jet cut"); vetoEvent; } const double jetphi = jets[0].momentum().phi(); const double jeteta = jets[0].momentum().eta(); const double jetpT = jets[0].momentum().pT(); MSG_DEBUG("Leading jet: pT = " << jetpT << ", eta = " << jeteta << ", phi = " << jetphi); // Get the event weight const double weight = e.weight(); // Get the final states to work with for filling the distributions const FinalState& cfs = applyProjection(e, "CFS"); size_t numOverall(0), numToward(0), numAway(0) ; long int numTrans1(0), numTrans2(0); double ptSumOverall(0.0), ptSumToward(0.0), ptSumTrans1(0.0), ptSumTrans2(0.0), ptSumAway(0.0); //double EtSumOverall(0.0), EtSumToward(0.0), EtSumTrans1(0.0), EtSumTrans2(0.0), EtSumAway(0.0); double ptMaxOverall(0.0), ptMaxToward(0.0), ptMaxTrans1(0.0), ptMaxTrans2(0.0), ptMaxAway(0.0); // Calculate all the charged stuff foreach (const Particle& p, cfs.particles()) { const double dPhi = deltaPhi(p.momentum().phi(), jetphi); const double pT = p.momentum().pT(); const double phi = p.momentum().phi(); double rotatedphi = phi - jetphi; while (rotatedphi < 0) rotatedphi += 2*PI; ptSumOverall += pT; ++numOverall; if (pT > ptMaxOverall) { ptMaxOverall = pT; } if (dPhi < PI/3.0) { ptSumToward += pT; ++numToward; if (pT > ptMaxToward) ptMaxToward = pT; } else if (dPhi < 2*PI/3.0) { if (rotatedphi <= PI) { ptSumTrans1 += pT; ++numTrans1; if (pT > ptMaxTrans1) ptMaxTrans1 = pT; } else { ptSumTrans2 += pT; ++numTrans2; if (pT > ptMaxTrans2) ptMaxTrans2 = pT; } } else { ptSumAway += pT; ++numAway; if (pT > ptMaxAway) ptMaxAway = pT; } } // end charged particle loop #if 0 /// @todo Enable this part when we have the numbers from Rick Field // And now the same business for all particles (including neutrals) foreach (const Particle& p, fs.particles()) { const double dPhi = deltaPhi(p.momentum().phi(), jetphi); const double ET = p.momentum().Et(); const double phi = p.momentum().phi(); double rotatedphi = phi - jetphi; while (rotatedphi < 0) rotatedphi += 2*PI; EtSumOverall += ET; if (dPhi < PI/3.0) { EtSumToward += ET; } else if (dPhi < 2*PI/3.0) { if (rotatedphi <= PI) { EtSumTrans1 += ET; } else { EtSumTrans2 += ET; } } else { EtSumAway += ET; } } // end all particle loop #endif // Fill the histograms //_hist_tnchg->fill(jetpT/GeV, numToward/(4*PI/3), weight); _hist_pnchg->fill(jetpT/GeV, (numTrans1+numTrans2)/(4*PI/3), weight); _hist_pmaxnchg->fill(jetpT/GeV, (numTrans1>numTrans2 ? numTrans1 : numTrans2)/(2*PI/3), weight); _hist_pminnchg->fill(jetpT/GeV, (numTrans1fill(jetpT/GeV, abs(numTrans1-numTrans2)/(2*PI/3), weight); //_hist_anchg->fill(jetpT/GeV, numAway/(4*PI/3), weight); //_hist_tcptsum->fill(jetpT/GeV, ptSumToward/GeV/(4*PI/3), weight); _hist_pcptsum->fill(jetpT/GeV, (ptSumTrans1+ptSumTrans2)/GeV/(4*PI/3), weight); _hist_pmaxcptsum->fill(jetpT/GeV, (ptSumTrans1>ptSumTrans2 ? ptSumTrans1 : ptSumTrans2)/GeV/(2*PI/3), weight); _hist_pmincptsum->fill(jetpT/GeV, (ptSumTrans1fill(jetpT/GeV, fabs(ptSumTrans1-ptSumTrans2)/GeV/(2*PI/3), weight); //_hist_acptsum->fill(jetpT/GeV, ptSumAway/GeV/(4*PI/3), weight); //if (numToward > 0) { // _hist_tcptave->fill(jetpT/GeV, ptSumToward/GeV/numToward, weight); // _hist_tcptmax->fill(jetpT/GeV, ptMaxToward/GeV, weight); //} if ((numTrans1+numTrans2) > 0) { _hist_pcptave->fill(jetpT/GeV, (ptSumTrans1+ptSumTrans2)/GeV/(numTrans1+numTrans2), weight); //_hist_pcptmax->fill(jetpT/GeV, (ptMaxTrans1 > ptMaxTrans2 ? ptMaxTrans1 : ptMaxTrans2)/GeV, weight); } //if (numAway > 0) { // _hist_acptave->fill(jetpT/GeV, ptSumAway/GeV/numAway, weight); // _hist_acptmax->fill(jetpT/GeV, ptMaxAway/GeV, weight); //} } void finalize() { // } //@} private: AIDA::IProfile1D *_hist_pnchg; AIDA::IProfile1D *_hist_pmaxnchg; AIDA::IProfile1D *_hist_pminnchg; AIDA::IProfile1D *_hist_pdifnchg; AIDA::IProfile1D *_hist_pcptsum; AIDA::IProfile1D *_hist_pmaxcptsum; AIDA::IProfile1D *_hist_pmincptsum; AIDA::IProfile1D *_hist_pdifcptsum; AIDA::IProfile1D *_hist_pcptave; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2008_LEADINGJETS); } rivet-1.8.3/src/Analyses/ARGUS_1993_S2669951.cc0000644000175000017500000001577212116077757016374 0ustar sunsun// -*- C++ -*- #include #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/UnstableFinalState.hh" #include "Rivet/ParticleName.hh" namespace Rivet { /// @brief BELLE pi+/-, K+/- and proton/antiproton spectrum at Upsilon(4S) /// @author Peter Richardson class ARGUS_1993_S2669951 : public Analysis { public: ARGUS_1993_S2669951() : Analysis("ARGUS_1993_S2669951"), _count_etaPrime_highZ(2,0.), _count_etaPrime_allZ(3,0.), _count_f0(3,0.), _weightSum_cont(0.),_weightSum_Ups1(0.),_weightSum_Ups2(0.) { } void analyze(const Event& e) { const double weight = e.weight(); const Beam beamproj = applyProjection(e, "Beams"); const double s = sqr(beamproj.sqrtS()); const double roots = sqrt(s); const UnstableFinalState& ufs = applyProjection(e, "UFS"); // find the upsilons ParticleVector upsilons; // first in unstable final state foreach (const Particle& p, ufs.particles()) if(p.pdgId()==553 || p.pdgId()==100553 ) upsilons.push_back(p); // then in whole event if fails if(upsilons.empty()) { foreach (GenParticle* p, Rivet::particles(e.genEvent())) { if( p->pdg_id() != 553 && p->pdg_id() != 100553 ) continue; const GenVertex* pv = p->production_vertex(); bool passed = true; if (pv) { for (GenVertex::particles_in_const_iterator pp = pv->particles_in_const_begin() ; pp != pv->particles_in_const_end() ; ++pp) { if ( p->pdg_id() == (*pp)->pdg_id() ) { passed = false; break; } } } if(passed) upsilons.push_back(Particle(*p)); } } // continuum if(upsilons.empty()) { _weightSum_cont += weight; unsigned int nEtaA(0),nEtaB(0),nf0(0); foreach (const Particle& p, ufs.particles()) { int id = abs(p.pdgId()); double xp = 2.*p.momentum().t()/roots; double beta = p.momentum().vector3().mod()/p.momentum().t(); if(id==9010221) { _hist_cont_f0->fill(xp,weight/beta); ++nf0; } else if(id==331) { if(xp>0.35) ++nEtaA; ++nEtaB; } } _count_f0[2] += nf0*weight; _count_etaPrime_highZ[1] += nEtaA*weight; _count_etaPrime_allZ[2] += nEtaB*weight; } else { // find an upsilons foreach (const Particle& ups, upsilons) { int parentId = ups.pdgId(); if(parentId==553) _weightSum_Ups1 += weight; else _weightSum_Ups2 += weight; ParticleVector unstable; // find the decay products we want findDecayProducts(ups.genParticle(),unstable); LorentzTransform cms_boost; if(ups.momentum().vector3().mod()>0.001) cms_boost = LorentzTransform(-ups.momentum().boostVector()); double mass = ups.momentum().mass(); unsigned int nEtaA(0),nEtaB(0),nf0(0); foreach(const Particle & p , unstable) { int id = abs(p.pdgId()); FourMomentum p2 = cms_boost.transform(p.momentum()); double xp = 2.*p2.t()/mass; double beta = p2.vector3().mod()/p2.t(); if(id==9010221) { if(parentId==553) _hist_Ups1_f0->fill(xp,weight/beta); else _hist_Ups2_f0->fill(xp,weight/beta); ++nf0; } else if(id==331) { if(xp>0.35) ++nEtaA; ++nEtaB; } } if(parentId==553) { _count_f0[0] += nf0*weight; _count_etaPrime_highZ[0] += nEtaA*weight; _count_etaPrime_allZ[0] += nEtaB*weight; } else { _count_f0[1] += nf0*weight; _count_etaPrime_allZ[1] += nEtaB*weight; } } } } // analyze void finalize() { AIDA::IDataPointSet * mult_etaPrime_highZ = bookDataPointSet( 1,1,1); for (int i = 0; i < mult_etaPrime_highZ->size(); ++i) { if ( fuzzyEquals( 9.905, mult_etaPrime_highZ->point(i)->coordinate(0)->value(), 0.001) && _weightSum_cont>0.) mult_etaPrime_highZ->point(i)->coordinate(1)->setValue( _count_etaPrime_highZ[1]/_weightSum_cont); else if ( fuzzyEquals( 9.46, mult_etaPrime_highZ->point(i)->coordinate(0)->value(), 0.001) && _weightSum_Ups1>0.) mult_etaPrime_highZ->point(i)->coordinate(1)->setValue(_count_etaPrime_highZ[0]/_weightSum_Ups1); } AIDA::IDataPointSet * mult_etaPrime_allZ = bookDataPointSet( 1,1,2); for (int i = 0; i < mult_etaPrime_allZ->size(); ++i) { if ( fuzzyEquals( 9.905, mult_etaPrime_allZ->point(i)->coordinate(0)->value(), 0.001) && _weightSum_cont>0.) { mult_etaPrime_allZ->point(i)->coordinate(1)->setValue( _count_etaPrime_allZ[2]/_weightSum_cont); } else if ( fuzzyEquals( 9.46, mult_etaPrime_allZ->point(i)->coordinate(0)->value(), 0.001) && _weightSum_Ups1>0.) { mult_etaPrime_allZ->point(i)->coordinate(1)->setValue(_count_etaPrime_allZ[0]/_weightSum_Ups1); } else if ( fuzzyEquals( 10.02, mult_etaPrime_allZ->point(i)->coordinate(0)->value(), 0.001) && _weightSum_Ups2>0.) { mult_etaPrime_allZ->point(i)->coordinate(1)->setValue(_count_etaPrime_allZ[1]/_weightSum_Ups2); } } AIDA::IDataPointSet * mult_f0 = bookDataPointSet( 5,1,1); for (int i = 0; i < mult_f0->size(); ++i) { if ( fuzzyEquals( 10.45, mult_f0->point(i)->coordinate(0)->value(), 0.001) && _weightSum_cont>0.) { mult_f0->point(i)->coordinate(1)->setValue( _count_f0[2]/_weightSum_cont); } else if ( fuzzyEquals( 9.46, mult_f0->point(i)->coordinate(0)->value(), 0.001) && _weightSum_Ups1>0.) { mult_f0->point(i)->coordinate(1)->setValue(_count_f0[0]/_weightSum_Ups1); } else if ( fuzzyEquals( 10.02, mult_f0->point(i)->coordinate(0)->value(), 0.001) && _weightSum_Ups2>0.) { mult_f0->point(i)->coordinate(1)->setValue(_count_f0[1]/_weightSum_Ups2); } } if(_weightSum_cont>0.) scale(_hist_cont_f0 , 1./_weightSum_cont); if(_weightSum_Ups1>0.) scale(_hist_Ups1_f0 , 1./_weightSum_Ups1); if(_weightSum_Ups2>0.) scale(_hist_Ups2_f0 , 1./_weightSum_Ups2); } // finalize void init() { addProjection(Beam(), "Beams"); addProjection(UnstableFinalState(), "UFS"); _hist_cont_f0 = bookHistogram1D( 2,1,1); _hist_Ups1_f0 = bookHistogram1D( 3,1,1); _hist_Ups2_f0 = bookHistogram1D( 4,1,1); } // init private: //@{ vector _count_etaPrime_highZ; vector _count_etaPrime_allZ; vector _count_f0; AIDA::IHistogram1D* _hist_cont_f0; AIDA::IHistogram1D* _hist_Ups1_f0; AIDA::IHistogram1D* _hist_Ups2_f0; // count of weights double _weightSum_cont,_weightSum_Ups1,_weightSum_Ups2; //@} void findDecayProducts(const GenParticle & p, ParticleVector & unstable) { const GenVertex* dv = p.end_vertex(); for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin(); pp != dv->particles_out_const_end(); ++pp) { int id = abs((*pp)->pdg_id()); if(id == 331 || id == 9010221 ) { unstable.push_back(Particle(**pp)); } else if((*pp)->end_vertex()) findDecayProducts(**pp,unstable); } } }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ARGUS_1993_S2669951); } rivet-1.8.3/src/Analyses/ATLAS_2010_S8918562.cc0000644000175000017500000001770712116077757016335 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Tools/Logging.hh" namespace Rivet { /// Rivet analysis class for ATLAS 2010 minimum bias analysis class ATLAS_2010_S8918562 : public Analysis { public: /// Helper for collectively filling Nch, pT, eta, and pT vs. Nch histograms void fillPtEtaNch(const ChargedFinalState& cfs, int nchcut, double weight, AIDA::IHistogram1D* h_nch, AIDA::IHistogram1D* h_pt, AIDA::IHistogram1D* h_eta, AIDA::IProfile1D* h_ptnch = 0) { // Get number of particles and skip if event fails cut const int nch = cfs.size(); if (nch < nchcut) return; // Fill nch h_nch->fill(nch, weight); // Loop over particles, fill pT, eta and ptnch foreach (const Particle& p, cfs.particles()) { const double pt = p.momentum().pT(); h_pt->fill(pt/GeV, weight/pt); h_eta->fill(p.momentum().eta(), weight); if (h_ptnch != 0) h_ptnch->fill(nch, pt/GeV, weight); } } /// Default constructor ATLAS_2010_S8918562() : Analysis("ATLAS_2010_S8918562") { _sumW_pt100_nch2 = 0; _sumW_pt100_nch20 = 0; _sumW_pt500_nch1 = 0; _sumW_pt500_nch6 = 0; _sumW_pt2500_nch1 = 0; } /// Initialization, called once before running void init() { // Projections const ChargedFinalState cfs100(-2.5, 2.5, 100.0*MeV); addProjection(cfs100, "CFS100"); const ChargedFinalState cfs500(-2.5, 2.5, 500.0*MeV); addProjection(cfs500, "CFS500"); const ChargedFinalState cfs2500(-2.5, 2.5, 2500.0*MeV); addProjection(cfs2500, "CFS2500"); // Book histograms if (fuzzyEquals(sqrtS()/GeV, 900)) { _hist_pt100_nch2_nch = bookHistogram1D(18, 1, 1); _hist_pt100_nch2_pt = bookHistogram1D(11, 1, 1); _hist_pt100_nch2_eta = bookHistogram1D(4, 1, 1); _hist_pt100_nch2_ptnch = bookProfile1D(24, 1, 1); _hist_pt100_nch20_nch = bookHistogram1D(34, 1, 1); _hist_pt100_nch20_pt = bookHistogram1D(30, 1, 1); _hist_pt100_nch20_eta = bookHistogram1D(26, 1, 1); _hist_pt500_nch1_nch = bookHistogram1D(15, 1, 1); _hist_pt500_nch1_pt = bookHistogram1D(8, 1, 1); _hist_pt500_nch1_eta = bookHistogram1D(1, 1, 1); _hist_pt500_nch1_ptnch = bookProfile1D(22, 1, 1); _hist_pt500_nch6_nch = bookHistogram1D(20, 1, 1); _hist_pt500_nch6_pt = bookHistogram1D(13, 1, 1); _hist_pt500_nch6_eta = bookHistogram1D(6, 1, 1); _hist_pt2500_nch1_nch = bookHistogram1D(36, 1, 1); _hist_pt2500_nch1_pt = bookHistogram1D(32, 1, 1); _hist_pt2500_nch1_eta = bookHistogram1D(28, 1, 1); _hist_pt2500_nch1_ptnch = bookProfile1D(38, 1, 1); } else if (fuzzyEquals(sqrtS()/GeV, 2360)) { _hist_pt500_nch1_nch = bookHistogram1D(16, 1, 1); _hist_pt500_nch1_pt = bookHistogram1D(9, 1, 1); _hist_pt500_nch1_eta = bookHistogram1D(2, 1, 1); // This one histogram might be called while unbooked, so ensure its pointer is null! _hist_pt500_nch1_ptnch = 0; } else if (fuzzyEquals(sqrtS()/GeV, 7000)) { _hist_pt100_nch2_nch = bookHistogram1D(19, 1, 1); _hist_pt100_nch2_pt = bookHistogram1D(12, 1, 1); _hist_pt100_nch2_eta = bookHistogram1D(5, 1, 1); _hist_pt100_nch2_ptnch = bookProfile1D(25, 1, 1); _hist_pt100_nch20_nch = bookHistogram1D(35, 1, 1); _hist_pt100_nch20_pt = bookHistogram1D(31, 1, 1); _hist_pt100_nch20_eta = bookHistogram1D(27, 1, 1); _hist_pt500_nch1_nch = bookHistogram1D(17, 1, 1); _hist_pt500_nch1_pt = bookHistogram1D(10, 1, 1); _hist_pt500_nch1_eta = bookHistogram1D(3, 1, 1); _hist_pt500_nch1_ptnch = bookProfile1D(23, 1, 1); _hist_pt500_nch6_nch = bookHistogram1D(21, 1, 1); _hist_pt500_nch6_pt = bookHistogram1D(14, 1, 1); _hist_pt500_nch6_eta = bookHistogram1D(7, 1, 1); _hist_pt2500_nch1_nch = bookHistogram1D(37, 1, 1); _hist_pt2500_nch1_pt = bookHistogram1D(33, 1, 1); _hist_pt2500_nch1_eta = bookHistogram1D(29, 1, 1); _hist_pt2500_nch1_ptnch = bookProfile1D(39, 1, 1); } else { throw LogicError("The ATLAS_2010_S8918562 analysis is only valid for sqrt(s) = 900, 2360 and 7000 GeV!"); } } void analyze(const Event& event) { const double weight = event.weight(); // 100 GeV final states if (!fuzzyEquals(sqrtS()/GeV, 2360)) { const ChargedFinalState& cfs100 = applyProjection(event, "CFS100"); // nch>=2 if (cfs100.size() >= 2) _sumW_pt100_nch2 += weight; fillPtEtaNch(cfs100, 2, weight, _hist_pt100_nch2_nch, _hist_pt100_nch2_pt, _hist_pt100_nch2_eta, _hist_pt100_nch2_ptnch); // nch>=20 if (cfs100.size() >= 20) _sumW_pt100_nch20 += weight; fillPtEtaNch(cfs100, 20, weight, _hist_pt100_nch20_nch, _hist_pt100_nch20_pt, _hist_pt100_nch20_eta); } // 500 GeV final states const ChargedFinalState& cfs500 = applyProjection(event, "CFS500"); // nch>=1 if (cfs500.size() >= 1) _sumW_pt500_nch1 += weight; fillPtEtaNch(cfs500, 1, weight, _hist_pt500_nch1_nch, _hist_pt500_nch1_pt, _hist_pt500_nch1_eta, _hist_pt500_nch1_ptnch); // nch>=6 if (!fuzzyEquals(sqrtS()/GeV, 2360)) { if (cfs500.size() >= 6) _sumW_pt500_nch6 += weight; fillPtEtaNch(cfs500, 6, weight, _hist_pt500_nch6_nch, _hist_pt500_nch6_pt, _hist_pt500_nch6_eta); } // 2500 GeV final states if (!fuzzyEquals(sqrtS()/GeV, 2360)) { const ChargedFinalState& cfs2500 = applyProjection(event, "CFS2500"); // nch>=1 if (cfs2500.size() >= 1) _sumW_pt2500_nch1 += weight; fillPtEtaNch(cfs2500, 1, weight, _hist_pt2500_nch1_nch, _hist_pt2500_nch1_pt, _hist_pt2500_nch1_eta, _hist_pt2500_nch1_ptnch); } } void finalize() { if (!fuzzyEquals(sqrtS()/GeV, 2360)) { if (_sumW_pt100_nch2 > 0) { _hist_pt100_nch2_nch->scale(1.0/_sumW_pt100_nch2); _hist_pt100_nch2_pt->scale(1.0/_sumW_pt100_nch2/TWOPI/5); _hist_pt100_nch2_eta->scale(1.0/_sumW_pt100_nch2); } if (_sumW_pt100_nch20 > 0) { _hist_pt100_nch20_nch->scale(1.0/_sumW_pt100_nch20); _hist_pt100_nch20_pt->scale(1.0/_sumW_pt100_nch20/TWOPI/5); _hist_pt100_nch20_eta->scale(1.0/_sumW_pt100_nch20); } if (_sumW_pt500_nch6 > 0) { _hist_pt500_nch6_nch->scale(1.0/_sumW_pt500_nch6); _hist_pt500_nch6_pt->scale(1.0/_sumW_pt500_nch6/TWOPI/5); _hist_pt500_nch6_eta->scale(1.0/_sumW_pt500_nch6); } if (_sumW_pt2500_nch1 > 0) { _hist_pt2500_nch1_nch->scale(1.0/_sumW_pt2500_nch1); _hist_pt2500_nch1_pt->scale(1.0/_sumW_pt2500_nch1/TWOPI/5); _hist_pt2500_nch1_eta->scale(1.0/_sumW_pt2500_nch1); } } if (_sumW_pt500_nch1 > 0) { _hist_pt500_nch1_nch->scale(1.0/_sumW_pt500_nch1); _hist_pt500_nch1_pt->scale(1.0/_sumW_pt500_nch1/TWOPI/5); _hist_pt500_nch1_eta->scale(1.0/_sumW_pt500_nch1); } } private: double _sumW_pt100_nch2, _sumW_pt100_nch20, _sumW_pt500_nch1, _sumW_pt500_nch6, _sumW_pt2500_nch1; AIDA::IHistogram1D *_hist_pt100_nch2_nch, *_hist_pt100_nch20_nch, *_hist_pt500_nch1_nch, *_hist_pt500_nch6_nch, *_hist_pt2500_nch1_nch; AIDA::IHistogram1D *_hist_pt100_nch2_pt, *_hist_pt100_nch20_pt, *_hist_pt500_nch1_pt, *_hist_pt500_nch6_pt, *_hist_pt2500_nch1_pt; AIDA::IHistogram1D *_hist_pt100_nch2_eta, *_hist_pt100_nch20_eta, *_hist_pt500_nch1_eta, *_hist_pt500_nch6_eta, *_hist_pt2500_nch1_eta; AIDA::IProfile1D *_hist_pt100_nch2_ptnch, *_hist_pt500_nch1_ptnch, *_hist_pt2500_nch1_ptnch; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2010_S8918562); } rivet-1.8.3/src/Analyses/Makefile.in0000644000175000017500000021216412123053517015470 0ustar sunsun# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ENABLE_PRELIMINARY_TRUE@am__append_1 = \ @ENABLE_PRELIMINARY_TRUE@ ATLAS_2012_CONF_2012_001.cc @ENABLE_UNVALIDATED_TRUE@am__append_2 = \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2010_CONF_2010_049.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2011_S9041966.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2011_CONF_2011_090.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2011_CONF_2011_098.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2011_S9108483.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2011_S9212353.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2011_I9035664.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_I1083318.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_I1095236.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_I1082009.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_I946427.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_I1126136.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_I1180197.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_I1186556.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_I1190891.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_CONF_2012_103.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_CONF_2012_104.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_CONF_2012_105.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_CONF_2012_109.cc \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_CONF_2012_153.cc @ENABLE_PRELIMINARY_TRUE@am__append_3 = \ @ENABLE_PRELIMINARY_TRUE@ CMS_QCD_10_024.cc \ @ENABLE_PRELIMINARY_TRUE@ CMS_2012_PAS_FWD_11_003.cc \ @ENABLE_PRELIMINARY_TRUE@ CMS_2012_PAS_QCD_11_010.cc @ENABLE_UNVALIDATED_TRUE@am__append_4 = \ @ENABLE_UNVALIDATED_TRUE@ LHCB_2010_S8758301.cc \ @ENABLE_UNVALIDATED_TRUE@ LHCB_2011_I917009.cc \ @ENABLE_UNVALIDATED_TRUE@ LHCB_2011_I919315.cc \ @ENABLE_UNVALIDATED_TRUE@ LHCB_2012_I1119400.cc @ENABLE_PRELIMINARY_TRUE@am__append_5 = \ @ENABLE_PRELIMINARY_TRUE@ CDF_2009_NOTE_9936.cc \ @ENABLE_PRELIMINARY_TRUE@ CDF_2012_NOTE10874.cc @ENABLE_OBSOLETE_TRUE@am__append_6 = \ @ENABLE_OBSOLETE_TRUE@ CDF_2008_LEADINGJETS.cc \ @ENABLE_OBSOLETE_TRUE@ CDF_2008_NOTE_9351.cc @ENABLE_UNVALIDATED_TRUE@am__append_7 = \ @ENABLE_UNVALIDATED_TRUE@ CDF_1993_S2742446.cc \ @ENABLE_UNVALIDATED_TRUE@ CDF_1996_S3108457.cc \ @ENABLE_UNVALIDATED_TRUE@ CDF_1996_S3349578.cc \ @ENABLE_UNVALIDATED_TRUE@ CDF_1997_S3541940.cc \ @ENABLE_UNVALIDATED_TRUE@ CDF_2008_S7541902.cc \ @ENABLE_UNVALIDATED_TRUE@ CDF_2008_S7782535.cc @ENABLE_UNVALIDATED_TRUE@am__append_8 = \ @ENABLE_UNVALIDATED_TRUE@ D0_1996_S3214044.cc \ @ENABLE_UNVALIDATED_TRUE@ D0_1996_S3324664.cc @ENABLE_UNVALIDATED_TRUE@am__append_9 = \ @ENABLE_UNVALIDATED_TRUE@ H1_1995_S3167097.cc \ @ENABLE_UNVALIDATED_TRUE@ ZEUS_2001_S4815815.cc @ENABLE_PRELIMINARY_TRUE@am__append_10 = \ @ENABLE_PRELIMINARY_TRUE@ DELPHI_2002_069_CONF_603.cc @ENABLE_UNVALIDATED_TRUE@am__append_11 = \ @ENABLE_UNVALIDATED_TRUE@ DELPHI_2003_WUD_03_11.cc @ENABLE_PRELIMINARY_TRUE@am__append_12 = \ @ENABLE_PRELIMINARY_TRUE@ STAR_2009_UE_HELEN.cc @ENABLE_UNVALIDATED_TRUE@am__append_13 = \ @ENABLE_UNVALIDATED_TRUE@ STAR_2008_S7869363.cc \ @ENABLE_UNVALIDATED_TRUE@ STAR_2008_S7993412.cc @ENABLE_UNVALIDATED_TRUE@am__append_14 = \ @ENABLE_UNVALIDATED_TRUE@ E735_1998_S3905616.cc \ @ENABLE_UNVALIDATED_TRUE@ SFM_1984_S1178091.cc @ENABLE_UNVALIDATED_TRUE@am__append_15 = \ @ENABLE_UNVALIDATED_TRUE@ MC_DIJET.cc \ @ENABLE_UNVALIDATED_TRUE@ MC_PHOTONJETUE.cc subdir = src/Analyses DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) RivetALICEAnalyses_la_LIBADD = am_RivetALICEAnalyses_la_OBJECTS = ALICE_2010_S8624100.lo \ ALICE_2010_S8625980.lo ALICE_2010_S8706239.lo \ ALICE_2011_S8909580.lo ALICE_2011_S8945144.lo \ ALICE_2012_I1181770.lo RivetALICEAnalyses_la_OBJECTS = $(am_RivetALICEAnalyses_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent RivetATLASAnalyses_la_LIBADD = am__RivetATLASAnalyses_la_SOURCES_DIST = ATLAS_2010_S8591806.cc \ ATLAS_2010_S8817804.cc ATLAS_2010_S8894728.cc \ ATLAS_2010_S8914702.cc ATLAS_2010_S8918562.cc \ ATLAS_2010_S8919674.cc ATLAS_2011_S8924791.cc \ ATLAS_2011_S8971293.cc ATLAS_2011_S8994773.cc \ ATLAS_2011_S8983313.cc ATLAS_2011_S9002537.cc \ ATLAS_2011_S9120807.cc ATLAS_2011_S9126244.cc \ ATLAS_2011_S9128077.cc ATLAS_2011_S9131140.cc \ ATLAS_2011_S9212183.cc ATLAS_2011_S9225137.cc \ ATLAS_2011_S9019561.cc ATLAS_2011_I894867.cc \ ATLAS_2011_I919017.cc ATLAS_2011_I925932.cc \ ATLAS_2011_I926145.cc ATLAS_2011_I944826.cc \ ATLAS_2011_I945498.cc ATLAS_2011_I954993.cc \ ATLAS_2012_I943401.cc ATLAS_2012_I1082936.cc \ ATLAS_2012_I1084540.cc ATLAS_2012_I1091481.cc \ ATLAS_2012_I1093738.cc ATLAS_2012_I1094061.cc \ ATLAS_2012_I1094568.cc ATLAS_2012_I1112263.cc \ ATLAS_2012_I1117704.cc ATLAS_2012_I1118269.cc \ ATLAS_2012_I1119557.cc ATLAS_2012_I1125575.cc \ ATLAS_2012_I1125961.cc ATLAS_2012_I1183818.cc \ ATLAS_2012_I1188891.cc ATLAS_2013_I1217867.cc \ ATLAS_2012_CONF_2012_001.cc ATLAS_2010_CONF_2010_049.cc \ ATLAS_2011_S9041966.cc ATLAS_2011_CONF_2011_090.cc \ ATLAS_2011_CONF_2011_098.cc ATLAS_2011_S9108483.cc \ ATLAS_2011_S9212353.cc ATLAS_2011_I9035664.cc \ ATLAS_2012_I1083318.cc ATLAS_2012_I1095236.cc \ ATLAS_2012_I1082009.cc ATLAS_2012_I946427.cc \ ATLAS_2012_I1126136.cc ATLAS_2012_I1180197.cc \ ATLAS_2012_I1186556.cc ATLAS_2012_I1190891.cc \ ATLAS_2012_CONF_2012_103.cc ATLAS_2012_CONF_2012_104.cc \ ATLAS_2012_CONF_2012_105.cc ATLAS_2012_CONF_2012_109.cc \ ATLAS_2012_CONF_2012_153.cc @ENABLE_PRELIMINARY_TRUE@am__objects_1 = ATLAS_2012_CONF_2012_001.lo @ENABLE_UNVALIDATED_TRUE@am__objects_2 = ATLAS_2010_CONF_2010_049.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2011_S9041966.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2011_CONF_2011_090.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2011_CONF_2011_098.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2011_S9108483.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2011_S9212353.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2011_I9035664.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_I1083318.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_I1095236.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_I1082009.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_I946427.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_I1126136.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_I1180197.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_I1186556.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_I1190891.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_CONF_2012_103.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_CONF_2012_104.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_CONF_2012_105.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_CONF_2012_109.lo \ @ENABLE_UNVALIDATED_TRUE@ ATLAS_2012_CONF_2012_153.lo am_RivetATLASAnalyses_la_OBJECTS = ATLAS_2010_S8591806.lo \ ATLAS_2010_S8817804.lo ATLAS_2010_S8894728.lo \ ATLAS_2010_S8914702.lo ATLAS_2010_S8918562.lo \ ATLAS_2010_S8919674.lo ATLAS_2011_S8924791.lo \ ATLAS_2011_S8971293.lo ATLAS_2011_S8994773.lo \ ATLAS_2011_S8983313.lo ATLAS_2011_S9002537.lo \ ATLAS_2011_S9120807.lo ATLAS_2011_S9126244.lo \ ATLAS_2011_S9128077.lo ATLAS_2011_S9131140.lo \ ATLAS_2011_S9212183.lo ATLAS_2011_S9225137.lo \ ATLAS_2011_S9019561.lo ATLAS_2011_I894867.lo \ ATLAS_2011_I919017.lo ATLAS_2011_I925932.lo \ ATLAS_2011_I926145.lo ATLAS_2011_I944826.lo \ ATLAS_2011_I945498.lo ATLAS_2011_I954993.lo \ ATLAS_2012_I943401.lo ATLAS_2012_I1082936.lo \ ATLAS_2012_I1084540.lo ATLAS_2012_I1091481.lo \ ATLAS_2012_I1093738.lo ATLAS_2012_I1094061.lo \ ATLAS_2012_I1094568.lo ATLAS_2012_I1112263.lo \ ATLAS_2012_I1117704.lo ATLAS_2012_I1118269.lo \ ATLAS_2012_I1119557.lo ATLAS_2012_I1125575.lo \ ATLAS_2012_I1125961.lo ATLAS_2012_I1183818.lo \ ATLAS_2012_I1188891.lo ATLAS_2013_I1217867.lo $(am__objects_1) \ $(am__objects_2) RivetATLASAnalyses_la_OBJECTS = $(am_RivetATLASAnalyses_la_OBJECTS) RivetCDFAnalyses_la_LIBADD = am__RivetCDFAnalyses_la_SOURCES_DIST = CDF_1988_S1865951.cc \ CDF_1990_S2089246.cc CDF_1994_S2952106.cc CDF_1996_S3418421.cc \ CDF_1998_S3618439.cc CDF_2000_S4155203.cc CDF_2000_S4266730.cc \ CDF_2001_S4517016.cc CDF_2001_S4563131.cc CDF_2001_S4751469.cc \ CDF_2002_S4796047.cc CDF_2004_S5839831.cc CDF_2005_S6080774.cc \ CDF_2005_S6217184.cc CDF_2006_S6450792.cc CDF_2006_S6653332.cc \ CDF_2007_S7057202.cc CDF_2008_S7540469.cc CDF_2008_S7828950.cc \ CDF_2008_S8093652.cc CDF_2008_S8095620.cc CDF_2009_S8233977.cc \ CDF_2009_S8383952.cc CDF_2009_S8436959.cc \ CDF_2010_S8591881_DY.cc CDF_2010_S8591881_QCD.cc \ CDF_2009_NOTE_9936.cc CDF_2012_NOTE10874.cc \ CDF_2008_LEADINGJETS.cc CDF_2008_NOTE_9351.cc \ CDF_1993_S2742446.cc CDF_1996_S3108457.cc CDF_1996_S3349578.cc \ CDF_1997_S3541940.cc CDF_2008_S7541902.cc CDF_2008_S7782535.cc @ENABLE_PRELIMINARY_TRUE@am__objects_3 = CDF_2009_NOTE_9936.lo \ @ENABLE_PRELIMINARY_TRUE@ CDF_2012_NOTE10874.lo @ENABLE_OBSOLETE_TRUE@am__objects_4 = CDF_2008_LEADINGJETS.lo \ @ENABLE_OBSOLETE_TRUE@ CDF_2008_NOTE_9351.lo @ENABLE_UNVALIDATED_TRUE@am__objects_5 = CDF_1993_S2742446.lo \ @ENABLE_UNVALIDATED_TRUE@ CDF_1996_S3108457.lo \ @ENABLE_UNVALIDATED_TRUE@ CDF_1996_S3349578.lo \ @ENABLE_UNVALIDATED_TRUE@ CDF_1997_S3541940.lo \ @ENABLE_UNVALIDATED_TRUE@ CDF_2008_S7541902.lo \ @ENABLE_UNVALIDATED_TRUE@ CDF_2008_S7782535.lo am_RivetCDFAnalyses_la_OBJECTS = CDF_1988_S1865951.lo \ CDF_1990_S2089246.lo CDF_1994_S2952106.lo CDF_1996_S3418421.lo \ CDF_1998_S3618439.lo CDF_2000_S4155203.lo CDF_2000_S4266730.lo \ CDF_2001_S4517016.lo CDF_2001_S4563131.lo CDF_2001_S4751469.lo \ CDF_2002_S4796047.lo CDF_2004_S5839831.lo CDF_2005_S6080774.lo \ CDF_2005_S6217184.lo CDF_2006_S6450792.lo CDF_2006_S6653332.lo \ CDF_2007_S7057202.lo CDF_2008_S7540469.lo CDF_2008_S7828950.lo \ CDF_2008_S8093652.lo CDF_2008_S8095620.lo CDF_2009_S8233977.lo \ CDF_2009_S8383952.lo CDF_2009_S8436959.lo \ CDF_2010_S8591881_DY.lo CDF_2010_S8591881_QCD.lo \ $(am__objects_3) $(am__objects_4) $(am__objects_5) RivetCDFAnalyses_la_OBJECTS = $(am_RivetCDFAnalyses_la_OBJECTS) RivetCMSAnalyses_la_LIBADD = am__RivetCMSAnalyses_la_SOURCES_DIST = CMS_2010_S8547297.cc \ CMS_2010_S8656010.cc CMS_2011_S8884919.cc CMS_2011_S8941262.cc \ CMS_2011_S8950903.cc CMS_2011_S8957746.cc CMS_2011_S8968497.cc \ CMS_2011_S8973270.cc CMS_2011_S8978280.cc CMS_2011_S9086218.cc \ CMS_2011_S9088458.cc CMS_2011_S9120041.cc CMS_2011_S9215166.cc \ CMS_2011_I954992.cc CMS_2012_I1087342.cc CMS_2012_I1102908.cc \ CMS_2012_I1107658.cc CMS_2012_I1184941.cc CMS_2012_I1193338.cc \ CMS_QCD_10_024.cc CMS_2012_PAS_FWD_11_003.cc \ CMS_2012_PAS_QCD_11_010.cc @ENABLE_PRELIMINARY_TRUE@am__objects_6 = CMS_QCD_10_024.lo \ @ENABLE_PRELIMINARY_TRUE@ CMS_2012_PAS_FWD_11_003.lo \ @ENABLE_PRELIMINARY_TRUE@ CMS_2012_PAS_QCD_11_010.lo am_RivetCMSAnalyses_la_OBJECTS = CMS_2010_S8547297.lo \ CMS_2010_S8656010.lo CMS_2011_S8884919.lo CMS_2011_S8941262.lo \ CMS_2011_S8950903.lo CMS_2011_S8957746.lo CMS_2011_S8968497.lo \ CMS_2011_S8973270.lo CMS_2011_S8978280.lo CMS_2011_S9086218.lo \ CMS_2011_S9088458.lo CMS_2011_S9120041.lo CMS_2011_S9215166.lo \ CMS_2011_I954992.lo CMS_2012_I1087342.lo CMS_2012_I1102908.lo \ CMS_2012_I1107658.lo CMS_2012_I1184941.lo CMS_2012_I1193338.lo \ $(am__objects_6) RivetCMSAnalyses_la_OBJECTS = $(am_RivetCMSAnalyses_la_OBJECTS) RivetD0Analyses_la_LIBADD = am__RivetD0Analyses_la_SOURCES_DIST = D0_2000_S4480767.cc \ D0_2001_S4674421.cc D0_2004_S5992206.cc D0_2006_S6438750.cc \ D0_2007_S7075677.cc D0_2008_S6879055.cc D0_2008_S7554427.cc \ D0_2008_S7662670.cc D0_2008_S7719523.cc D0_2008_S7837160.cc \ D0_2008_S7863608.cc D0_2009_S8202443.cc D0_2009_S8320160.cc \ D0_2009_S8349509.cc D0_2010_S8566488.cc D0_2010_S8570965.cc \ D0_2010_S8671338.cc D0_2010_S8821313.cc D0_2011_I895662.cc \ D0_1996_S3214044.cc D0_1996_S3324664.cc @ENABLE_UNVALIDATED_TRUE@am__objects_7 = D0_1996_S3214044.lo \ @ENABLE_UNVALIDATED_TRUE@ D0_1996_S3324664.lo am_RivetD0Analyses_la_OBJECTS = D0_2000_S4480767.lo \ D0_2001_S4674421.lo D0_2004_S5992206.lo D0_2006_S6438750.lo \ D0_2007_S7075677.lo D0_2008_S6879055.lo D0_2008_S7554427.lo \ D0_2008_S7662670.lo D0_2008_S7719523.lo D0_2008_S7837160.lo \ D0_2008_S7863608.lo D0_2009_S8202443.lo D0_2009_S8320160.lo \ D0_2009_S8349509.lo D0_2010_S8566488.lo D0_2010_S8570965.lo \ D0_2010_S8671338.lo D0_2010_S8821313.lo D0_2011_I895662.lo \ $(am__objects_7) RivetD0Analyses_la_OBJECTS = $(am_RivetD0Analyses_la_OBJECTS) RivetHERAAnalyses_la_LIBADD = am__RivetHERAAnalyses_la_SOURCES_DIST = H1_1994_S2919893.cc \ H1_2000_S4129130.cc H1_1995_S3167097.cc ZEUS_2001_S4815815.cc @ENABLE_UNVALIDATED_TRUE@am__objects_8 = H1_1995_S3167097.lo \ @ENABLE_UNVALIDATED_TRUE@ ZEUS_2001_S4815815.lo am_RivetHERAAnalyses_la_OBJECTS = H1_1994_S2919893.lo \ H1_2000_S4129130.lo $(am__objects_8) RivetHERAAnalyses_la_OBJECTS = $(am_RivetHERAAnalyses_la_OBJECTS) RivetLEPAnalyses_la_LIBADD = am__RivetLEPAnalyses_la_SOURCES_DIST = ALEPH_1991_S2435284.cc \ ALEPH_1996_S3486095.cc ALEPH_1996_S3196992.cc \ ALEPH_1999_S4193598.cc ALEPH_2001_S4656318.cc \ ALEPH_2002_S4823664.cc ALEPH_2004_S5765862.cc \ DELPHI_1995_S3137023.cc DELPHI_1996_S3430090.cc \ DELPHI_1999_S3960137.cc DELPHI_2000_S4328825.cc \ OPAL_1993_S2692198.cc OPAL_1994_S2927284.cc \ OPAL_1995_S3198391.cc OPAL_1996_S3257789.cc \ OPAL_1997_S3396100.cc OPAL_1997_S3608263.cc \ OPAL_1998_S3702294.cc OPAL_1998_S3749908.cc \ OPAL_1998_S3780481.cc OPAL_2000_S4418603.cc \ OPAL_2001_S4553896.cc OPAL_2002_S5361494.cc \ OPAL_2004_S6132243.cc SLD_1996_S3398250.cc \ SLD_1999_S3743934.cc SLD_2002_S4869273.cc SLD_2004_S5693039.cc \ DELPHI_2002_069_CONF_603.cc DELPHI_2003_WUD_03_11.cc @ENABLE_PRELIMINARY_TRUE@am__objects_9 = DELPHI_2002_069_CONF_603.lo @ENABLE_UNVALIDATED_TRUE@am__objects_10 = DELPHI_2003_WUD_03_11.lo am_RivetLEPAnalyses_la_OBJECTS = ALEPH_1991_S2435284.lo \ ALEPH_1996_S3486095.lo ALEPH_1996_S3196992.lo \ ALEPH_1999_S4193598.lo ALEPH_2001_S4656318.lo \ ALEPH_2002_S4823664.lo ALEPH_2004_S5765862.lo \ DELPHI_1995_S3137023.lo DELPHI_1996_S3430090.lo \ DELPHI_1999_S3960137.lo DELPHI_2000_S4328825.lo \ OPAL_1993_S2692198.lo OPAL_1994_S2927284.lo \ OPAL_1995_S3198391.lo OPAL_1996_S3257789.lo \ OPAL_1997_S3396100.lo OPAL_1997_S3608263.lo \ OPAL_1998_S3702294.lo OPAL_1998_S3749908.lo \ OPAL_1998_S3780481.lo OPAL_2000_S4418603.lo \ OPAL_2001_S4553896.lo OPAL_2002_S5361494.lo \ OPAL_2004_S6132243.lo SLD_1996_S3398250.lo \ SLD_1999_S3743934.lo SLD_2002_S4869273.lo SLD_2004_S5693039.lo \ $(am__objects_9) $(am__objects_10) RivetLEPAnalyses_la_OBJECTS = $(am_RivetLEPAnalyses_la_OBJECTS) RivetLHCbAnalyses_la_LIBADD = am__RivetLHCbAnalyses_la_SOURCES_DIST = LHCB_2010_I867355.cc \ LHCB_2010_S8758301.cc LHCB_2011_I917009.cc \ LHCB_2011_I919315.cc LHCB_2012_I1119400.cc @ENABLE_UNVALIDATED_TRUE@am__objects_11 = LHCB_2010_S8758301.lo \ @ENABLE_UNVALIDATED_TRUE@ LHCB_2011_I917009.lo \ @ENABLE_UNVALIDATED_TRUE@ LHCB_2011_I919315.lo \ @ENABLE_UNVALIDATED_TRUE@ LHCB_2012_I1119400.lo am_RivetLHCbAnalyses_la_OBJECTS = LHCB_2010_I867355.lo \ $(am__objects_11) RivetLHCbAnalyses_la_OBJECTS = $(am_RivetLHCbAnalyses_la_OBJECTS) RivetLHCfAnalyses_la_LIBADD = am_RivetLHCfAnalyses_la_OBJECTS = LHCF_2012_I1115479.lo RivetLHCfAnalyses_la_OBJECTS = $(am_RivetLHCfAnalyses_la_OBJECTS) RivetMCAnalyses_la_LIBADD = am__RivetMCAnalyses_la_SOURCES_DIST = EXAMPLE.cc MC_QCD_PARTONS.cc \ MC_DIPHOTON.cc MC_GENERIC.cc MC_HINC.cc MC_HJETS.cc \ MC_HKTSPLITTINGS.cc MC_IDENTIFIED.cc MC_JETS.cc \ MC_LEADJETUE.cc MC_PDFS.cc MC_PHOTONINC.cc MC_PHOTONJETS.cc \ MC_PHOTONKTSPLITTINGS.cc MC_PHOTONS.cc MC_PRINTEVENT.cc \ MC_SUSY.cc MC_TTBAR.cc MC_VH2BB.cc MC_WINC.cc MC_WJETS.cc \ MC_WKTSPLITTINGS.cc MC_WPOL.cc MC_WWINC.cc MC_WWJETS.cc \ MC_WWKTSPLITTINGS.cc MC_XS.cc MC_ZINC.cc MC_ZJETS.cc \ MC_ZKTSPLITTINGS.cc MC_ZZINC.cc MC_ZZJETS.cc \ MC_ZZKTSPLITTINGS.cc MC_DIJET.cc MC_PHOTONJETUE.cc @ENABLE_UNVALIDATED_TRUE@am__objects_12 = MC_DIJET.lo \ @ENABLE_UNVALIDATED_TRUE@ MC_PHOTONJETUE.lo am_RivetMCAnalyses_la_OBJECTS = EXAMPLE.lo MC_QCD_PARTONS.lo \ MC_DIPHOTON.lo MC_GENERIC.lo MC_HINC.lo MC_HJETS.lo \ MC_HKTSPLITTINGS.lo MC_IDENTIFIED.lo MC_JETS.lo \ MC_LEADJETUE.lo MC_PDFS.lo MC_PHOTONINC.lo MC_PHOTONJETS.lo \ MC_PHOTONKTSPLITTINGS.lo MC_PHOTONS.lo MC_PRINTEVENT.lo \ MC_SUSY.lo MC_TTBAR.lo MC_VH2BB.lo MC_WINC.lo MC_WJETS.lo \ MC_WKTSPLITTINGS.lo MC_WPOL.lo MC_WWINC.lo MC_WWJETS.lo \ MC_WWKTSPLITTINGS.lo MC_XS.lo MC_ZINC.lo MC_ZJETS.lo \ MC_ZKTSPLITTINGS.lo MC_ZZINC.lo MC_ZZJETS.lo \ MC_ZZKTSPLITTINGS.lo $(am__objects_12) RivetMCAnalyses_la_OBJECTS = $(am_RivetMCAnalyses_la_OBJECTS) RivetMiscAnalyses_la_LIBADD = am__RivetMiscAnalyses_la_SOURCES_DIST = PDG_HADRON_MULTIPLICITIES.cc \ PDG_HADRON_MULTIPLICITIES_RATIOS.cc JADE_OPAL_2000_S4300807.cc \ ARGUS_1993_S2653028.cc ARGUS_1993_S2669951.cc \ ARGUS_1993_S2789213.cc BABAR_2003_I593379.cc \ BABAR_2005_S6181155.cc BABAR_2007_S6895344.cc \ BABAR_2007_S7266081.cc BELLE_2001_S4598261.cc \ BELLE_2006_S6265367.cc CLEO_2004_S5809304.cc \ E735_1998_S3905616.cc SFM_1984_S1178091.cc @ENABLE_UNVALIDATED_TRUE@am__objects_13 = E735_1998_S3905616.lo \ @ENABLE_UNVALIDATED_TRUE@ SFM_1984_S1178091.lo am_RivetMiscAnalyses_la_OBJECTS = PDG_HADRON_MULTIPLICITIES.lo \ PDG_HADRON_MULTIPLICITIES_RATIOS.lo JADE_OPAL_2000_S4300807.lo \ ARGUS_1993_S2653028.lo ARGUS_1993_S2669951.lo \ ARGUS_1993_S2789213.lo BABAR_2003_I593379.lo \ BABAR_2005_S6181155.lo BABAR_2007_S6895344.lo \ BABAR_2007_S7266081.lo BELLE_2001_S4598261.lo \ BELLE_2006_S6265367.lo CLEO_2004_S5809304.lo $(am__objects_13) RivetMiscAnalyses_la_OBJECTS = $(am_RivetMiscAnalyses_la_OBJECTS) RivetPetraAnalyses_la_LIBADD = am_RivetPetraAnalyses_la_OBJECTS = JADE_1998_S3612880.lo \ TASSO_1990_S2148048.lo RivetPetraAnalyses_la_OBJECTS = $(am_RivetPetraAnalyses_la_OBJECTS) RivetRHICAnalyses_la_LIBADD = am__RivetRHICAnalyses_la_SOURCES_DIST = STAR_2006_S6500200.cc \ STAR_2006_S6860818.cc STAR_2006_S6870392.cc \ STAR_2009_UE_HELEN.cc STAR_2008_S7869363.cc \ STAR_2008_S7993412.cc @ENABLE_PRELIMINARY_TRUE@am__objects_14 = STAR_2009_UE_HELEN.lo @ENABLE_UNVALIDATED_TRUE@am__objects_15 = STAR_2008_S7869363.lo \ @ENABLE_UNVALIDATED_TRUE@ STAR_2008_S7993412.lo am_RivetRHICAnalyses_la_OBJECTS = STAR_2006_S6500200.lo \ STAR_2006_S6860818.lo STAR_2006_S6870392.lo $(am__objects_14) \ $(am__objects_15) RivetRHICAnalyses_la_OBJECTS = $(am_RivetRHICAnalyses_la_OBJECTS) RivetSPSAnalyses_la_LIBADD = am_RivetSPSAnalyses_la_OBJECTS = UA1_1990_S2044935.lo \ UA5_1982_S875503.lo UA5_1986_S1583476.lo UA5_1987_S1640666.lo \ UA5_1988_S1867512.lo UA5_1989_S1926373.lo RivetSPSAnalyses_la_OBJECTS = $(am_RivetSPSAnalyses_la_OBJECTS) RivetTOTEMAnalyses_la_LIBADD = am_RivetTOTEMAnalyses_la_OBJECTS = TOTEM_2012_I1115294.lo \ TOTEM_2012_002.lo RivetTOTEMAnalyses_la_OBJECTS = $(am_RivetTOTEMAnalyses_la_OBJECTS) libRivetAnalysisTools_la_LIBADD = am_libRivetAnalysisTools_la_OBJECTS = MC_JetAnalysis.lo \ MC_JetSplittings.lo libRivetAnalysisTools_la_OBJECTS = \ $(am_libRivetAnalysisTools_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/Rivet/Config depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(RivetALICEAnalyses_la_SOURCES) \ $(RivetATLASAnalyses_la_SOURCES) \ $(RivetCDFAnalyses_la_SOURCES) $(RivetCMSAnalyses_la_SOURCES) \ $(RivetD0Analyses_la_SOURCES) $(RivetHERAAnalyses_la_SOURCES) \ $(RivetLEPAnalyses_la_SOURCES) $(RivetLHCbAnalyses_la_SOURCES) \ $(RivetLHCfAnalyses_la_SOURCES) $(RivetMCAnalyses_la_SOURCES) \ $(RivetMiscAnalyses_la_SOURCES) \ $(RivetPetraAnalyses_la_SOURCES) \ $(RivetRHICAnalyses_la_SOURCES) $(RivetSPSAnalyses_la_SOURCES) \ $(RivetTOTEMAnalyses_la_SOURCES) \ $(libRivetAnalysisTools_la_SOURCES) DIST_SOURCES = $(RivetALICEAnalyses_la_SOURCES) \ $(am__RivetATLASAnalyses_la_SOURCES_DIST) \ $(am__RivetCDFAnalyses_la_SOURCES_DIST) \ $(am__RivetCMSAnalyses_la_SOURCES_DIST) \ $(am__RivetD0Analyses_la_SOURCES_DIST) \ $(am__RivetHERAAnalyses_la_SOURCES_DIST) \ $(am__RivetLEPAnalyses_la_SOURCES_DIST) \ $(am__RivetLHCbAnalyses_la_SOURCES_DIST) \ $(RivetLHCfAnalyses_la_SOURCES) \ $(am__RivetMCAnalyses_la_SOURCES_DIST) \ $(am__RivetMiscAnalyses_la_SOURCES_DIST) \ $(RivetPetraAnalyses_la_SOURCES) \ $(am__RivetRHICAnalyses_la_SOURCES_DIST) \ $(RivetSPSAnalyses_la_SOURCES) \ $(RivetTOTEMAnalyses_la_SOURCES) \ $(libRivetAnalysisTools_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = $(FASTJETCONFIGLIBADD) LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_LDFLAGS = $(LDFLAGS) -module -avoid-version -L$(FASTJETLIBPATH) lib_LTLIBRARIES = RivetALICEAnalyses.la RivetATLASAnalyses.la \ RivetCMSAnalyses.la RivetLHCbAnalyses.la RivetLHCfAnalyses.la \ RivetTOTEMAnalyses.la RivetCDFAnalyses.la RivetD0Analyses.la \ RivetHERAAnalyses.la RivetPetraAnalyses.la RivetLEPAnalyses.la \ RivetRHICAnalyses.la RivetSPSAnalyses.la RivetMiscAnalyses.la \ RivetMCAnalyses.la noinst_LTLIBRARIES = libRivetAnalysisTools.la libRivetAnalysisTools_la_SOURCES = \ MC_JetAnalysis.cc \ MC_JetSplittings.cc RivetALICEAnalyses_la_SOURCES = \ ALICE_2010_S8624100.cc \ ALICE_2010_S8625980.cc \ ALICE_2010_S8706239.cc \ ALICE_2011_S8909580.cc \ ALICE_2011_S8945144.cc \ ALICE_2012_I1181770.cc RivetATLASAnalyses_la_SOURCES = ATLAS_2010_S8591806.cc \ ATLAS_2010_S8817804.cc ATLAS_2010_S8894728.cc \ ATLAS_2010_S8914702.cc ATLAS_2010_S8918562.cc \ ATLAS_2010_S8919674.cc ATLAS_2011_S8924791.cc \ ATLAS_2011_S8971293.cc ATLAS_2011_S8994773.cc \ ATLAS_2011_S8983313.cc ATLAS_2011_S9002537.cc \ ATLAS_2011_S9120807.cc ATLAS_2011_S9126244.cc \ ATLAS_2011_S9128077.cc ATLAS_2011_S9131140.cc \ ATLAS_2011_S9212183.cc ATLAS_2011_S9225137.cc \ ATLAS_2011_S9019561.cc ATLAS_2011_I894867.cc \ ATLAS_2011_I919017.cc ATLAS_2011_I925932.cc \ ATLAS_2011_I926145.cc ATLAS_2011_I944826.cc \ ATLAS_2011_I945498.cc ATLAS_2011_I954993.cc \ ATLAS_2012_I943401.cc ATLAS_2012_I1082936.cc \ ATLAS_2012_I1084540.cc ATLAS_2012_I1091481.cc \ ATLAS_2012_I1093738.cc ATLAS_2012_I1094061.cc \ ATLAS_2012_I1094568.cc ATLAS_2012_I1112263.cc \ ATLAS_2012_I1117704.cc ATLAS_2012_I1118269.cc \ ATLAS_2012_I1119557.cc ATLAS_2012_I1125575.cc \ ATLAS_2012_I1125961.cc ATLAS_2012_I1183818.cc \ ATLAS_2012_I1188891.cc ATLAS_2013_I1217867.cc $(am__append_1) \ $(am__append_2) RivetCMSAnalyses_la_SOURCES = CMS_2010_S8547297.cc \ CMS_2010_S8656010.cc CMS_2011_S8884919.cc CMS_2011_S8941262.cc \ CMS_2011_S8950903.cc CMS_2011_S8957746.cc CMS_2011_S8968497.cc \ CMS_2011_S8973270.cc CMS_2011_S8978280.cc CMS_2011_S9086218.cc \ CMS_2011_S9088458.cc CMS_2011_S9120041.cc CMS_2011_S9215166.cc \ CMS_2011_I954992.cc CMS_2012_I1087342.cc CMS_2012_I1102908.cc \ CMS_2012_I1107658.cc CMS_2012_I1184941.cc CMS_2012_I1193338.cc \ $(am__append_3) RivetLHCbAnalyses_la_SOURCES = LHCB_2010_I867355.cc $(am__append_4) RivetLHCfAnalyses_la_SOURCES = \ LHCF_2012_I1115479.cc RivetTOTEMAnalyses_la_SOURCES = \ TOTEM_2012_I1115294.cc \ TOTEM_2012_002.cc # TODO: update to Inspire ID RivetCDFAnalyses_la_SOURCES = CDF_1988_S1865951.cc \ CDF_1990_S2089246.cc CDF_1994_S2952106.cc CDF_1996_S3418421.cc \ CDF_1998_S3618439.cc CDF_2000_S4155203.cc CDF_2000_S4266730.cc \ CDF_2001_S4517016.cc CDF_2001_S4563131.cc CDF_2001_S4751469.cc \ CDF_2002_S4796047.cc CDF_2004_S5839831.cc CDF_2005_S6080774.cc \ CDF_2005_S6217184.cc CDF_2006_S6450792.cc CDF_2006_S6653332.cc \ CDF_2007_S7057202.cc CDF_2008_S7540469.cc CDF_2008_S7828950.cc \ CDF_2008_S8093652.cc CDF_2008_S8095620.cc CDF_2009_S8233977.cc \ CDF_2009_S8383952.cc CDF_2009_S8436959.cc \ CDF_2010_S8591881_DY.cc CDF_2010_S8591881_QCD.cc \ $(am__append_5) $(am__append_6) $(am__append_7) RivetD0Analyses_la_SOURCES = D0_2000_S4480767.cc D0_2001_S4674421.cc \ D0_2004_S5992206.cc D0_2006_S6438750.cc D0_2007_S7075677.cc \ D0_2008_S6879055.cc D0_2008_S7554427.cc D0_2008_S7662670.cc \ D0_2008_S7719523.cc D0_2008_S7837160.cc D0_2008_S7863608.cc \ D0_2009_S8202443.cc D0_2009_S8320160.cc D0_2009_S8349509.cc \ D0_2010_S8566488.cc D0_2010_S8570965.cc D0_2010_S8671338.cc \ D0_2010_S8821313.cc D0_2011_I895662.cc $(am__append_8) RivetHERAAnalyses_la_SOURCES = H1_1994_S2919893.cc H1_2000_S4129130.cc \ $(am__append_9) RivetPetraAnalyses_la_SOURCES = \ JADE_1998_S3612880.cc \ TASSO_1990_S2148048.cc RivetLEPAnalyses_la_SOURCES = ALEPH_1991_S2435284.cc \ ALEPH_1996_S3486095.cc ALEPH_1996_S3196992.cc \ ALEPH_1999_S4193598.cc ALEPH_2001_S4656318.cc \ ALEPH_2002_S4823664.cc ALEPH_2004_S5765862.cc \ DELPHI_1995_S3137023.cc DELPHI_1996_S3430090.cc \ DELPHI_1999_S3960137.cc DELPHI_2000_S4328825.cc \ OPAL_1993_S2692198.cc OPAL_1994_S2927284.cc \ OPAL_1995_S3198391.cc OPAL_1996_S3257789.cc \ OPAL_1997_S3396100.cc OPAL_1997_S3608263.cc \ OPAL_1998_S3702294.cc OPAL_1998_S3749908.cc \ OPAL_1998_S3780481.cc OPAL_2000_S4418603.cc \ OPAL_2001_S4553896.cc OPAL_2002_S5361494.cc \ OPAL_2004_S6132243.cc SLD_1996_S3398250.cc \ SLD_1999_S3743934.cc SLD_2002_S4869273.cc SLD_2004_S5693039.cc \ $(am__append_10) $(am__append_11) RivetRHICAnalyses_la_SOURCES = STAR_2006_S6500200.cc \ STAR_2006_S6860818.cc STAR_2006_S6870392.cc $(am__append_12) \ $(am__append_13) RivetSPSAnalyses_la_SOURCES = \ UA1_1990_S2044935.cc \ UA5_1982_S875503.cc \ UA5_1986_S1583476.cc \ UA5_1987_S1640666.cc \ UA5_1988_S1867512.cc \ UA5_1989_S1926373.cc RivetMiscAnalyses_la_SOURCES = PDG_HADRON_MULTIPLICITIES.cc \ PDG_HADRON_MULTIPLICITIES_RATIOS.cc JADE_OPAL_2000_S4300807.cc \ ARGUS_1993_S2653028.cc ARGUS_1993_S2669951.cc \ ARGUS_1993_S2789213.cc BABAR_2003_I593379.cc \ BABAR_2005_S6181155.cc BABAR_2007_S6895344.cc \ BABAR_2007_S7266081.cc BELLE_2001_S4598261.cc \ BELLE_2006_S6265367.cc CLEO_2004_S5809304.cc $(am__append_14) RivetMCAnalyses_la_SOURCES = EXAMPLE.cc MC_QCD_PARTONS.cc \ MC_DIPHOTON.cc MC_GENERIC.cc MC_HINC.cc MC_HJETS.cc \ MC_HKTSPLITTINGS.cc MC_IDENTIFIED.cc MC_JETS.cc \ MC_LEADJETUE.cc MC_PDFS.cc MC_PHOTONINC.cc MC_PHOTONJETS.cc \ MC_PHOTONKTSPLITTINGS.cc MC_PHOTONS.cc MC_PRINTEVENT.cc \ MC_SUSY.cc MC_TTBAR.cc MC_VH2BB.cc MC_WINC.cc MC_WJETS.cc \ MC_WKTSPLITTINGS.cc MC_WPOL.cc MC_WWINC.cc MC_WWJETS.cc \ MC_WWKTSPLITTINGS.cc MC_XS.cc MC_ZINC.cc MC_ZJETS.cc \ MC_ZKTSPLITTINGS.cc MC_ZZINC.cc MC_ZZJETS.cc \ MC_ZZKTSPLITTINGS.cc $(am__append_15) all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Analyses/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Analyses/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done RivetALICEAnalyses.la: $(RivetALICEAnalyses_la_OBJECTS) $(RivetALICEAnalyses_la_DEPENDENCIES) $(EXTRA_RivetALICEAnalyses_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(RivetALICEAnalyses_la_OBJECTS) $(RivetALICEAnalyses_la_LIBADD) $(LIBS) RivetATLASAnalyses.la: $(RivetATLASAnalyses_la_OBJECTS) $(RivetATLASAnalyses_la_DEPENDENCIES) $(EXTRA_RivetATLASAnalyses_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(RivetATLASAnalyses_la_OBJECTS) $(RivetATLASAnalyses_la_LIBADD) $(LIBS) RivetCDFAnalyses.la: $(RivetCDFAnalyses_la_OBJECTS) $(RivetCDFAnalyses_la_DEPENDENCIES) $(EXTRA_RivetCDFAnalyses_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(RivetCDFAnalyses_la_OBJECTS) $(RivetCDFAnalyses_la_LIBADD) $(LIBS) RivetCMSAnalyses.la: $(RivetCMSAnalyses_la_OBJECTS) $(RivetCMSAnalyses_la_DEPENDENCIES) $(EXTRA_RivetCMSAnalyses_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(RivetCMSAnalyses_la_OBJECTS) $(RivetCMSAnalyses_la_LIBADD) $(LIBS) RivetD0Analyses.la: $(RivetD0Analyses_la_OBJECTS) $(RivetD0Analyses_la_DEPENDENCIES) $(EXTRA_RivetD0Analyses_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(RivetD0Analyses_la_OBJECTS) $(RivetD0Analyses_la_LIBADD) $(LIBS) RivetHERAAnalyses.la: $(RivetHERAAnalyses_la_OBJECTS) $(RivetHERAAnalyses_la_DEPENDENCIES) $(EXTRA_RivetHERAAnalyses_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(RivetHERAAnalyses_la_OBJECTS) $(RivetHERAAnalyses_la_LIBADD) $(LIBS) RivetLEPAnalyses.la: $(RivetLEPAnalyses_la_OBJECTS) $(RivetLEPAnalyses_la_DEPENDENCIES) $(EXTRA_RivetLEPAnalyses_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(RivetLEPAnalyses_la_OBJECTS) $(RivetLEPAnalyses_la_LIBADD) $(LIBS) RivetLHCbAnalyses.la: $(RivetLHCbAnalyses_la_OBJECTS) $(RivetLHCbAnalyses_la_DEPENDENCIES) $(EXTRA_RivetLHCbAnalyses_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(RivetLHCbAnalyses_la_OBJECTS) $(RivetLHCbAnalyses_la_LIBADD) $(LIBS) RivetLHCfAnalyses.la: $(RivetLHCfAnalyses_la_OBJECTS) $(RivetLHCfAnalyses_la_DEPENDENCIES) $(EXTRA_RivetLHCfAnalyses_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(RivetLHCfAnalyses_la_OBJECTS) $(RivetLHCfAnalyses_la_LIBADD) $(LIBS) RivetMCAnalyses.la: $(RivetMCAnalyses_la_OBJECTS) $(RivetMCAnalyses_la_DEPENDENCIES) $(EXTRA_RivetMCAnalyses_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(RivetMCAnalyses_la_OBJECTS) $(RivetMCAnalyses_la_LIBADD) $(LIBS) RivetMiscAnalyses.la: $(RivetMiscAnalyses_la_OBJECTS) $(RivetMiscAnalyses_la_DEPENDENCIES) $(EXTRA_RivetMiscAnalyses_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(RivetMiscAnalyses_la_OBJECTS) $(RivetMiscAnalyses_la_LIBADD) $(LIBS) RivetPetraAnalyses.la: $(RivetPetraAnalyses_la_OBJECTS) $(RivetPetraAnalyses_la_DEPENDENCIES) $(EXTRA_RivetPetraAnalyses_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(RivetPetraAnalyses_la_OBJECTS) $(RivetPetraAnalyses_la_LIBADD) $(LIBS) RivetRHICAnalyses.la: $(RivetRHICAnalyses_la_OBJECTS) $(RivetRHICAnalyses_la_DEPENDENCIES) $(EXTRA_RivetRHICAnalyses_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(RivetRHICAnalyses_la_OBJECTS) $(RivetRHICAnalyses_la_LIBADD) $(LIBS) RivetSPSAnalyses.la: $(RivetSPSAnalyses_la_OBJECTS) $(RivetSPSAnalyses_la_DEPENDENCIES) $(EXTRA_RivetSPSAnalyses_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(RivetSPSAnalyses_la_OBJECTS) $(RivetSPSAnalyses_la_LIBADD) $(LIBS) RivetTOTEMAnalyses.la: $(RivetTOTEMAnalyses_la_OBJECTS) $(RivetTOTEMAnalyses_la_DEPENDENCIES) $(EXTRA_RivetTOTEMAnalyses_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) -rpath $(libdir) $(RivetTOTEMAnalyses_la_OBJECTS) $(RivetTOTEMAnalyses_la_LIBADD) $(LIBS) libRivetAnalysisTools.la: $(libRivetAnalysisTools_la_OBJECTS) $(libRivetAnalysisTools_la_DEPENDENCIES) $(EXTRA_libRivetAnalysisTools_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libRivetAnalysisTools_la_OBJECTS) $(libRivetAnalysisTools_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ALEPH_1991_S2435284.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ALEPH_1996_S3196992.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ALEPH_1996_S3486095.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ALEPH_1999_S4193598.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ALEPH_2001_S4656318.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ALEPH_2002_S4823664.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ALEPH_2004_S5765862.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ALICE_2010_S8624100.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ALICE_2010_S8625980.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ALICE_2010_S8706239.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ALICE_2011_S8909580.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ALICE_2011_S8945144.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ALICE_2012_I1181770.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ARGUS_1993_S2653028.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ARGUS_1993_S2669951.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ARGUS_1993_S2789213.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2010_CONF_2010_049.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2010_S8591806.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2010_S8817804.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2010_S8894728.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2010_S8914702.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2010_S8918562.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2010_S8919674.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_CONF_2011_090.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_CONF_2011_098.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_I894867.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_I9035664.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_I919017.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_I925932.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_I926145.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_I944826.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_I945498.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_I954993.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_S8924791.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_S8971293.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_S8983313.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_S8994773.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_S9002537.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_S9019561.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_S9041966.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_S9108483.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_S9120807.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_S9126244.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_S9128077.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_S9131140.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_S9212183.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_S9212353.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2011_S9225137.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_CONF_2012_001.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_CONF_2012_103.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_CONF_2012_104.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_CONF_2012_105.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_CONF_2012_109.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_CONF_2012_153.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1082009.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1082936.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1083318.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1084540.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1091481.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1093738.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1094061.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1094568.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1095236.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1112263.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1117704.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1118269.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1119557.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1125575.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1125961.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1126136.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1180197.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1183818.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1186556.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1188891.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I1190891.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I943401.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2012_I946427.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ATLAS_2013_I1217867.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BABAR_2003_I593379.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BABAR_2005_S6181155.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BABAR_2007_S6895344.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BABAR_2007_S7266081.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BELLE_2001_S4598261.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BELLE_2006_S6265367.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_1988_S1865951.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_1990_S2089246.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_1993_S2742446.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_1994_S2952106.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_1996_S3108457.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_1996_S3349578.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_1996_S3418421.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_1997_S3541940.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_1998_S3618439.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2000_S4155203.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2000_S4266730.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2001_S4517016.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2001_S4563131.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2001_S4751469.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2002_S4796047.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2004_S5839831.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2005_S6080774.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2005_S6217184.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2006_S6450792.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2006_S6653332.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2007_S7057202.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2008_LEADINGJETS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2008_NOTE_9351.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2008_S7540469.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2008_S7541902.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2008_S7782535.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2008_S7828950.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2008_S8093652.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2008_S8095620.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2009_NOTE_9936.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2009_S8233977.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2009_S8383952.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2009_S8436959.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2010_S8591881_DY.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2010_S8591881_QCD.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CDF_2012_NOTE10874.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CLEO_2004_S5809304.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2010_S8547297.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2010_S8656010.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2011_I954992.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2011_S8884919.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2011_S8941262.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2011_S8950903.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2011_S8957746.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2011_S8968497.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2011_S8973270.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2011_S8978280.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2011_S9086218.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2011_S9088458.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2011_S9120041.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2011_S9215166.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2012_I1087342.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2012_I1102908.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2012_I1107658.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2012_I1184941.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2012_I1193338.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2012_PAS_FWD_11_003.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_2012_PAS_QCD_11_010.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CMS_QCD_10_024.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_1996_S3214044.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_1996_S3324664.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2000_S4480767.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2001_S4674421.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2004_S5992206.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2006_S6438750.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2007_S7075677.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2008_S6879055.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2008_S7554427.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2008_S7662670.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2008_S7719523.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2008_S7837160.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2008_S7863608.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2009_S8202443.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2009_S8320160.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2009_S8349509.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2010_S8566488.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2010_S8570965.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2010_S8671338.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2010_S8821313.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/D0_2011_I895662.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DELPHI_1995_S3137023.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DELPHI_1996_S3430090.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DELPHI_1999_S3960137.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DELPHI_2000_S4328825.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DELPHI_2002_069_CONF_603.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DELPHI_2003_WUD_03_11.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/E735_1998_S3905616.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EXAMPLE.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H1_1994_S2919893.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H1_1995_S3167097.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H1_2000_S4129130.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JADE_1998_S3612880.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JADE_OPAL_2000_S4300807.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LHCB_2010_I867355.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LHCB_2010_S8758301.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LHCB_2011_I917009.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LHCB_2011_I919315.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LHCB_2012_I1119400.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LHCF_2012_I1115479.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_DIJET.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_DIPHOTON.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_GENERIC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_HINC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_HJETS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_HKTSPLITTINGS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_IDENTIFIED.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_JETS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_JetAnalysis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_JetSplittings.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_LEADJETUE.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_PDFS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_PHOTONINC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_PHOTONJETS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_PHOTONJETUE.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_PHOTONKTSPLITTINGS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_PHOTONS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_PRINTEVENT.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_QCD_PARTONS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_SUSY.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_TTBAR.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_VH2BB.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_WINC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_WJETS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_WKTSPLITTINGS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_WPOL.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_WWINC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_WWJETS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_WWKTSPLITTINGS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_XS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_ZINC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_ZJETS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_ZKTSPLITTINGS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_ZZINC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_ZZJETS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MC_ZZKTSPLITTINGS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OPAL_1993_S2692198.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OPAL_1994_S2927284.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OPAL_1995_S3198391.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OPAL_1996_S3257789.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OPAL_1997_S3396100.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OPAL_1997_S3608263.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OPAL_1998_S3702294.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OPAL_1998_S3749908.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OPAL_1998_S3780481.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OPAL_2000_S4418603.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OPAL_2001_S4553896.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OPAL_2002_S5361494.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OPAL_2004_S6132243.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PDG_HADRON_MULTIPLICITIES.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PDG_HADRON_MULTIPLICITIES_RATIOS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SFM_1984_S1178091.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SLD_1996_S3398250.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SLD_1999_S3743934.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SLD_2002_S4869273.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SLD_2004_S5693039.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/STAR_2006_S6500200.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/STAR_2006_S6860818.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/STAR_2006_S6870392.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/STAR_2008_S7869363.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/STAR_2008_S7993412.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/STAR_2009_UE_HELEN.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TASSO_1990_S2148048.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TOTEM_2012_002.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TOTEM_2012_I1115294.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UA1_1990_S2044935.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UA5_1982_S875503.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UA5_1986_S1583476.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UA5_1987_S1640666.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UA5_1988_S1867512.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UA5_1989_S1926373.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ZEUS_2001_S4815815.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ ctags distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: rivet-1.8.3/src/Analyses/MC_PHOTONJETS.cc0000644000175000017500000000656012116077757016025 0ustar sunsun// -*- C++ -*- #include "Rivet/Analyses/MC_JetAnalysis.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief MC validation analysis for photon + jets events class MC_PHOTONJETS : public MC_JetAnalysis { public: /// Default constructor MC_PHOTONJETS() : MC_JetAnalysis("MC_PHOTONJETS", 4, "Jets") { } /// @name Analysis methods //@{ /// Book histograms void init() { // General FS FinalState fs(-5.0, 5.0); addProjection(fs, "FS"); // Get leading photon LeadingParticlesFinalState photonfs(FinalState(-1.0, 1.0, 30.0*GeV)); photonfs.addParticleId(PHOTON); addProjection(photonfs, "LeadingPhoton"); // FS for jets excludes the leading photon VetoedFinalState vfs(fs); vfs.addVetoOnThisFinalState(photonfs); addProjection(vfs, "JetFS"); FastJets jetpro(vfs, FastJets::ANTIKT, 0.4); addProjection(jetpro, "Jets"); _h_photon_jet1_deta = bookHistogram1D("photon_jet1_deta", 50, -5.0, 5.0); _h_photon_jet1_dphi = bookHistogram1D("photon_jet1_dphi", 20, 0.0, M_PI); _h_photon_jet1_dR = bookHistogram1D("photon_jet1_dR", 25, 0.5, 7.0); MC_JetAnalysis::init(); } /// Do the analysis void analyze(const Event& e) { // Get the photon /// @todo share IsolatedPhoton projection between all MC_*PHOTON* analyses const ParticleVector photons = applyProjection(e, "LeadingPhoton").particles(); if (photons.size() != 1) { vetoEvent; } const FourMomentum photon = photons.front().momentum(); // Get all charged particles const FinalState& fs = applyProjection(e, "JetFS"); if (fs.empty()) { vetoEvent; } // Passed cuts, so get the weight const double weight = e.weight(); // Isolate photon by ensuring that a 0.4 cone around it contains less than 7% of the photon's energy const double egamma = photon.E(); double econe = 0.0; foreach (const Particle& p, fs.particles()) { if (deltaR(photon, p.momentum()) < 0.4) { econe += p.momentum().E(); // Veto as soon as E_cone gets larger if (econe/egamma > 0.07) { vetoEvent; } } } const Jets& jets = applyProjection(e, "Jets").jetsByPt(m_jetptcut); if (jets.size()>0) { _h_photon_jet1_deta->fill(photon.eta()-jets[0].momentum().eta(), weight); _h_photon_jet1_dphi->fill(mapAngle0ToPi(photon.phi()-jets[0].momentum().phi()), weight); _h_photon_jet1_dR->fill(deltaR(photon, jets[0].momentum()), weight); } MC_JetAnalysis::analyze(e); } // Finalize void finalize() { scale(_h_photon_jet1_deta, crossSectionPerEvent()); scale(_h_photon_jet1_dphi, crossSectionPerEvent()); scale(_h_photon_jet1_dR, crossSectionPerEvent()); MC_JetAnalysis::finalize(); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_photon_jet1_deta; AIDA::IHistogram1D * _h_photon_jet1_dphi; AIDA::IHistogram1D * _h_photon_jet1_dR; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_PHOTONJETS); } rivet-1.8.3/src/Analyses/MC_DIPHOTON.cc0000644000175000017500000000577412116077757015562 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Tools/Logging.hh" namespace Rivet { /// @brief MC validation analysis for isolated di-photon events class MC_DIPHOTON : public Analysis { public: /// Constructor MC_DIPHOTON() : Analysis("MC_DIPHOTON") { } /// @name Analysis methods //@{ void init() { FinalState fs; addProjection(fs, "FS"); IdentifiedFinalState ifs(-2.0, 2.0, 20.0*GeV); ifs.acceptId(PHOTON); addProjection(ifs, "IFS"); _h_m_PP = bookHistogram1D("m_PP", logBinEdges(50, 1.0, 0.25*sqrtS())); _h_pT_PP = bookHistogram1D("pT_PP", logBinEdges(50, 1.0, 0.25*sqrtS())); _h_pT_P1 = bookHistogram1D("pT_P1", 50, 0.0, 70.0); _h_pT_P2 = bookHistogram1D("pT_P2", 50, 0.0, 70.0); _h_dphi_PP = bookHistogram1D("dphi_PP", 20, 0.0, M_PI); } void analyze(const Event& event) { const double weight = event.weight(); ParticleVector photons = applyProjection(event, "IFS").particles(); if (photons.size() < 2) { vetoEvent; } // Isolate photons with ET_sum in cone ParticleVector isolated_photons; ParticleVector fs = applyProjection(event, "FS").particlesByPt(); foreach (const Particle& photon, photons) { FourMomentum mom_in_cone; double eta_P = photon.momentum().eta(); double phi_P = photon.momentum().phi(); foreach (const Particle& p, fs) { if (deltaR(eta_P, phi_P, p.momentum().eta(), p.momentum().phi()) < 0.4) { mom_in_cone += p.momentum(); } } if (mom_in_cone.Et()-photon.momentum().Et() < 4.0*GeV) { isolated_photons.push_back(photon); } } if (isolated_photons.size() != 2) { vetoEvent; } _h_pT_P1->fill(isolated_photons[0].momentum().pT(), weight); _h_pT_P2->fill(isolated_photons[1].momentum().pT(), weight); FourMomentum mom_PP = isolated_photons[0].momentum() + isolated_photons[1].momentum(); _h_m_PP->fill(mom_PP.mass(), weight); _h_pT_PP->fill(mom_PP.pT(), weight); _h_dphi_PP->fill(deltaPhi(isolated_photons[0].momentum().phi(), isolated_photons[1].momentum().phi()), weight); } void finalize() { scale(_h_m_PP, crossSection()/sumOfWeights()); scale(_h_pT_PP, crossSection()/sumOfWeights()); scale(_h_pT_P1, crossSection()/sumOfWeights()); scale(_h_pT_P2, crossSection()/sumOfWeights()); scale(_h_dphi_PP, crossSection()/sumOfWeights()); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D* _h_m_PP; AIDA::IHistogram1D* _h_pT_PP; AIDA::IHistogram1D* _h_pT_P1; AIDA::IHistogram1D* _h_pT_P2; AIDA::IHistogram1D* _h_dphi_PP; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_DIPHOTON); } rivet-1.8.3/src/Analyses/ZEUS_2001_S4815815.cc0000644000175000017500000000350412116077757016236 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief ZEUS dijet photoproduction study used in the ZEUS Jets PDF fit /// /// This class is a reproduction of the HZTool routine for the ZEUS /// dijet photoproduction paper which was used in the ZEUS Jets PDF fit. /// /// @author Jon Butterworth class ZEUS_2001_S4815815 : public Analysis { public: /// Constructor ZEUS_2001_S4815815() : Analysis("ZEUS_2001_S4815815") { } /// @name Analysis methods //@{ // Book projections and histograms void init() { FinalState fs; addProjection(fs, "FS"); /// @todo This is the *wrong* jet def: correct it! addProjection(FastJets(fs, FastJets::KT, 0.7), "Jets"); MSG_WARNING("This analysis uses the wrong jet definition: the " << "paper just says 'a cone algorithm was applied to the CAL cells and jets " << "were reconstructed using the energies and positions of these cells'"); /// @todo This doesn't seem to correspond to the plots in the paper (SPIRES 4730372) _histJetEt1 = bookHistogram1D("JetET1", 11, 14.0, 75.0); } // Do the analysis void analyze(const Event& event) { const double weight = event.weight(); const JetAlg& jets = applyProjection(event, "Jets"); MSG_INFO("Jet multiplicity = " << jets.size()); foreach (const Jet& j, jets.jets()) { _histJetEt1->fill(j.momentum().pT(), weight); } } // Finalize void finalize() { // } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D* _histJetEt1; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ZEUS_2001_S4815815); } rivet-1.8.3/src/Analyses/ARGUS_1993_S2789213.cc0000644000175000017500000002272512116077757016362 0ustar sunsun// -*- C++ -*- #include #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/UnstableFinalState.hh" #include "Rivet/ParticleName.hh" namespace Rivet { /// @brief ARGUS vector meson production /// @author Peter Richardson class ARGUS_1993_S2789213 : public Analysis { public: ARGUS_1993_S2789213() : Analysis("ARGUS_1993_S2789213"), _weightSum_cont(0.),_weightSum_Ups1(0.),_weightSum_Ups4(0.) { } void analyze(const Event& e) { const double weight = e.weight(); const Beam beamproj = applyProjection(e, "Beams"); const double s = sqr(beamproj.sqrtS()); const double roots = sqrt(s); const UnstableFinalState& ufs = applyProjection(e, "UFS"); // find the upsilons ParticleVector upsilons; // first in unstable final state foreach (const Particle& p, ufs.particles()) if(p.pdgId()==300553 || p.pdgId()==553 ) upsilons.push_back(p); // then in whole event if fails if(upsilons.empty()) { foreach (GenParticle* p, Rivet::particles(e.genEvent())) { if( p->pdg_id() != 300553 && p->pdg_id() != 553 ) continue; const GenVertex* pv = p->production_vertex(); bool passed = true; if (pv) { for (GenVertex::particles_in_const_iterator pp = pv->particles_in_const_begin() ; pp != pv->particles_in_const_end() ; ++pp) { if ( p->pdg_id() == (*pp)->pdg_id() ) { passed = false; break; } } } if(passed) upsilons.push_back(Particle(*p)); } } // continuum if(upsilons.empty()) { _weightSum_cont += weight; unsigned int nOmega(0),nRho0(0),nKStar0(0),nKStarPlus(0),nPhi(0); foreach (const Particle& p, ufs.particles()) { int id = abs(p.pdgId()); double xp = 2.*p.momentum().t()/roots; double beta = p.momentum().vector3().mod()/p.momentum().t(); if(id==113) { _hist_cont_Rho0->fill(xp,weight/beta); ++nRho0; } else if(id==313) { _hist_cont_KStar0->fill(xp,weight/beta); ++nKStar0; } else if(id==223) { _hist_cont_Omega->fill(xp,weight/beta); ++nOmega; } else if(id==323) { _hist_cont_KStarPlus->fill(xp,weight/beta); ++nKStarPlus; } else if(id==333) { ++nPhi; } } _mult_cont_Omega ->fill(10.45,weight*nOmega ); _mult_cont_Rho0 ->fill(10.45,weight*nRho0 ); _mult_cont_KStar0 ->fill(10.45,weight*nKStar0 ); _mult_cont_KStarPlus->fill(10.45,weight*nKStarPlus); _mult_cont_Phi ->fill(10.45,weight*nPhi ); } else { // find an upsilons foreach (const Particle& ups, upsilons) { int parentId = ups.pdgId(); if(parentId==553) _weightSum_Ups1 += weight; else _weightSum_Ups4 += weight; ParticleVector unstable; // find the decay products we want findDecayProducts(ups.genParticle(),unstable); LorentzTransform cms_boost; if(ups.momentum().vector3().mod()>0.001) cms_boost = LorentzTransform(-ups.momentum().boostVector()); double mass = ups.momentum().mass(); unsigned int nOmega(0),nRho0(0),nKStar0(0),nKStarPlus(0),nPhi(0); foreach(const Particle & p , unstable) { int id = abs(p.pdgId()); FourMomentum p2 = cms_boost.transform(p.momentum()); double xp = 2.*p2.t()/mass; double beta = p2.vector3().mod()/p2.t(); if(id==113) { if(parentId==553) _hist_Ups1_Rho0->fill(xp,weight/beta); else _hist_Ups4_Rho0->fill(xp,weight/beta); ++nRho0; } else if(id==313) { if(parentId==553) _hist_Ups1_KStar0->fill(xp,weight/beta); else _hist_Ups4_KStar0->fill(xp,weight/beta); ++nKStar0; } else if(id==223) { if(parentId==553) _hist_Ups1_Omega->fill(xp,weight/beta); ++nOmega; } else if(id==323) { if(parentId==553) _hist_Ups1_KStarPlus->fill(xp,weight/beta); else _hist_Ups4_KStarPlus->fill(xp,weight/beta); ++nKStarPlus; } else if(id==333) { ++nPhi; } } if(parentId==553) { _mult_Ups1_Omega ->fill(9.46,weight*nOmega ); _mult_Ups1_Rho0 ->fill(9.46,weight*nRho0 ); _mult_Ups1_KStar0 ->fill(9.46,weight*nKStar0 ); _mult_Ups1_KStarPlus->fill(9.46,weight*nKStarPlus); _mult_Ups1_Phi ->fill(9.46,weight*nPhi ); } else { _mult_Ups4_Omega ->fill(10.58,weight*nOmega ); _mult_Ups4_Rho0 ->fill(10.58,weight*nRho0 ); _mult_Ups4_KStar0 ->fill(10.58,weight*nKStar0 ); _mult_Ups4_KStarPlus->fill(10.58,weight*nKStarPlus); _mult_Ups4_Phi ->fill(10.58,weight*nPhi ); } } } } // analyze void finalize() { if(_weightSum_cont>0.) { scale(_mult_cont_Omega , 1./_weightSum_cont); scale(_mult_cont_Rho0 , 1./_weightSum_cont); scale(_mult_cont_KStar0 , 1./_weightSum_cont); scale(_mult_cont_KStarPlus, 1./_weightSum_cont); scale(_mult_cont_Phi , 1./_weightSum_cont); scale(_hist_cont_KStarPlus, 1./_weightSum_cont); scale(_hist_cont_KStar0 , 1./_weightSum_cont); scale(_hist_cont_Rho0 , 1./_weightSum_cont); scale(_hist_cont_Omega , 1./_weightSum_cont); } if(_weightSum_Ups1>0.) { scale(_mult_Ups1_Omega , 1./_weightSum_Ups1); scale(_mult_Ups1_Rho0 , 1./_weightSum_Ups1); scale(_mult_Ups1_KStar0 , 1./_weightSum_Ups1); scale(_mult_Ups1_KStarPlus, 1./_weightSum_Ups1); scale(_mult_Ups1_Phi , 1./_weightSum_Ups1); scale(_hist_Ups1_KStarPlus, 1./_weightSum_Ups1); scale(_hist_Ups1_KStar0 , 1./_weightSum_Ups1); scale(_hist_Ups1_Rho0 , 1./_weightSum_Ups1); scale(_hist_Ups1_Omega , 1./_weightSum_Ups1); } if(_weightSum_Ups4>0.) { scale(_mult_Ups4_Omega , 1./_weightSum_Ups4); scale(_mult_Ups4_Rho0 , 1./_weightSum_Ups4); scale(_mult_Ups4_KStar0 , 1./_weightSum_Ups4); scale(_mult_Ups4_KStarPlus, 1./_weightSum_Ups4); scale(_mult_Ups4_Phi , 1./_weightSum_Ups4); scale(_hist_Ups4_KStarPlus, 1./_weightSum_Ups4); scale(_hist_Ups4_KStar0 , 1./_weightSum_Ups4); scale(_hist_Ups4_Rho0 , 1./_weightSum_Ups4); } } // finalize void init() { addProjection(Beam(), "Beams"); addProjection(UnstableFinalState(), "UFS"); _mult_cont_Omega = bookHistogram1D( 1,1,1); _mult_cont_Rho0 = bookHistogram1D( 1,1,2); _mult_cont_KStar0 = bookHistogram1D( 1,1,3); _mult_cont_KStarPlus = bookHistogram1D( 1,1,4); _mult_cont_Phi = bookHistogram1D( 1,1,5); _mult_Ups1_Omega = bookHistogram1D( 2,1,1); _mult_Ups1_Rho0 = bookHistogram1D( 2,1,2); _mult_Ups1_KStar0 = bookHistogram1D( 2,1,3); _mult_Ups1_KStarPlus = bookHistogram1D( 2,1,4); _mult_Ups1_Phi = bookHistogram1D( 2,1,5); _mult_Ups4_Omega = bookHistogram1D( 3,1,1); _mult_Ups4_Rho0 = bookHistogram1D( 3,1,2); _mult_Ups4_KStar0 = bookHistogram1D( 3,1,3); _mult_Ups4_KStarPlus = bookHistogram1D( 3,1,4); _mult_Ups4_Phi = bookHistogram1D( 3,1,5); _hist_cont_KStarPlus = bookHistogram1D( 4,1,1); _hist_Ups1_KStarPlus = bookHistogram1D( 5,1,1); _hist_Ups4_KStarPlus = bookHistogram1D( 6,1,1); _hist_cont_KStar0 = bookHistogram1D( 7,1,1); _hist_Ups1_KStar0 = bookHistogram1D( 8,1,1); _hist_Ups4_KStar0 = bookHistogram1D( 9,1,1); _hist_cont_Rho0 = bookHistogram1D(10,1,1); _hist_Ups1_Rho0 = bookHistogram1D(11,1,1); _hist_Ups4_Rho0 = bookHistogram1D(12,1,1); _hist_cont_Omega = bookHistogram1D(13,1,1); _hist_Ups1_Omega = bookHistogram1D(14,1,1); } // init private: //@{ AIDA::IHistogram1D* _mult_cont_Omega ; AIDA::IHistogram1D* _mult_cont_Rho0 ; AIDA::IHistogram1D* _mult_cont_KStar0 ; AIDA::IHistogram1D* _mult_cont_KStarPlus; AIDA::IHistogram1D* _mult_cont_Phi ; AIDA::IHistogram1D* _mult_Ups1_Omega ; AIDA::IHistogram1D* _mult_Ups1_Rho0 ; AIDA::IHistogram1D* _mult_Ups1_KStar0 ; AIDA::IHistogram1D* _mult_Ups1_KStarPlus; AIDA::IHistogram1D* _mult_Ups1_Phi ; AIDA::IHistogram1D* _mult_Ups4_Omega ; AIDA::IHistogram1D* _mult_Ups4_Rho0 ; AIDA::IHistogram1D* _mult_Ups4_KStar0 ; AIDA::IHistogram1D* _mult_Ups4_KStarPlus; AIDA::IHistogram1D* _mult_Ups4_Phi ; AIDA::IHistogram1D* _hist_cont_KStarPlus; AIDA::IHistogram1D* _hist_Ups1_KStarPlus; AIDA::IHistogram1D* _hist_Ups4_KStarPlus; AIDA::IHistogram1D* _hist_cont_KStar0 ; AIDA::IHistogram1D* _hist_Ups1_KStar0 ; AIDA::IHistogram1D* _hist_Ups4_KStar0 ; AIDA::IHistogram1D* _hist_cont_Rho0 ; AIDA::IHistogram1D* _hist_Ups1_Rho0 ; AIDA::IHistogram1D* _hist_Ups4_Rho0 ; AIDA::IHistogram1D* _hist_cont_Omega ; AIDA::IHistogram1D* _hist_Ups1_Omega ; // count of weights double _weightSum_cont,_weightSum_Ups1,_weightSum_Ups4; //@} void findDecayProducts(const GenParticle & p, ParticleVector & unstable) { const GenVertex* dv = p.end_vertex(); for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin(); pp != dv->particles_out_const_end(); ++pp) { int id = abs((*pp)->pdg_id()); if(id == 113 || id == 313 || id == 323 || id == 333 || id == 223 ) { unstable.push_back(Particle(**pp)); } else if((*pp)->end_vertex()) findDecayProducts(**pp,unstable); } } }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ARGUS_1993_S2789213); } rivet-1.8.3/src/Analyses/DELPHI_1999_S3960137.cc0000644000175000017500000000527512116077757016452 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief DELPHI rho,f_0 and f_2 fragmentation function paper /// @author Peter Richardson class DELPHI_1999_S3960137 : public Analysis { public: /// Constructor DELPHI_1999_S3960137() : Analysis("DELPHI_1999_S3960137") {} /// @name Analysis methods //@{ void init() { addProjection(Beam(), "Beams"); addProjection(ChargedFinalState(), "FS"); addProjection(UnstableFinalState(), "UFS"); _histXpRho = bookHistogram1D( 1, 1, 1); _histXpf0 = bookHistogram1D( 1, 1, 2); _histXpf2 = bookHistogram1D( 1, 1, 3); } void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed leptonic event cut"); vetoEvent; } MSG_DEBUG("Passed leptonic event cut"); // Get event weight for histo filling const double weight = e.weight(); // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); // Final state of unstable particles to get particle spectra const UnstableFinalState& ufs = applyProjection(e, "UFS"); foreach (const Particle& p, ufs.particles()) { const int id = abs(p.pdgId()); double xp = p.momentum().vector3().mod()/meanBeamMom; switch (id) { case 9010221: _histXpf0->fill(xp, weight); break; case 225: _histXpf2->fill(xp, weight); break; case 113: _histXpRho->fill(xp, weight); break; } } } /// Finalize void finalize() { scale(_histXpf0 , 1./sumOfWeights()); scale(_histXpf2 , 1./sumOfWeights()); scale(_histXpRho, 1./sumOfWeights()); } //@} private: AIDA::IHistogram1D *_histXpf0; AIDA::IHistogram1D *_histXpf2; AIDA::IHistogram1D *_histXpRho; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(DELPHI_1999_S3960137); } rivet-1.8.3/src/Analyses/LHCB_2011_I917009.cc0000644000175000017500000004262612116077757016071 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/UnstableFinalState.hh" #include "LWH/Histogram1D.h" #include "Rivet/Math/MathUtils.hh" #include "Rivet/Math/Constants.hh" #include "HepMC/GenEvent.h" #include "HepMC/GenParticle.h" #include "HepMC/GenVertex.h" #include "HepMC/SimpleVector.h" #include #include #include namespace Rivet { class LHCB_2011_I917009 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor LHCB_2011_I917009() : Analysis("LHCB_2011_I917009"), rap_beam(0.0), pt_min(0.0), pt1_edge(0.65), pt2_edge(1.0), pt3_edge(2.5), rap_min(2.), rap_max(0.0), dsShift(0) { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { int y_nbins = 4; fillMap(partLftMap); if ( fuzzyEquals(sqrtS(), 0.9*TeV) ) { rap_beam = 6.87; rap_max = 4.; pt_min = 0.25; } else if ( fuzzyEquals(sqrtS(), 7*TeV) ) { rap_beam = 8.92; rap_max = 4.5; pt_min = 0.15; y_nbins = 5; dsShift = 8; } else { MSG_ERROR("Incompatible beam energy!"); } //pT edges are the same for all 3 histos in this suite const BinEdges& pt_edges = binEdges(dsShift+5,1,1); // booking temporary histos for (int i = 0; i<12; i++ ) _tmphistos[i].reset(new LWH::Histogram1D(y_nbins, rap_min, rap_max)); for (int i = 12; i<15; i++ ) _tmphistos[i].reset(new LWH::Histogram1D(pt_edges)); for (int i = 15; i<18; i++ ) _tmphistos[i].reset(new LWH::Histogram1D(y_nbins, rap_beam - rap_max, rap_beam - rap_min)); addProjection(UnstableFinalState(), "UFS"); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); const UnstableFinalState& ufs = applyProjection(event, "UFS"); double ancestor_lftsum = 0.0; double y, pT; int id; int partIdx = -1; foreach (const Particle& p, ufs.particles()) { id = p.pdgId(); // continue if particle not a K0s nor (anti-)Lambda if ( (id == 310) || (id == -310) ) { partIdx = 2; } else if ( id == 3122 ) { partIdx = 1; } else if ( id == -3122 ) { partIdx = 0; } else { continue; }; ancestor_lftsum = getMotherLifeTimeSum(p); // Lifetime cut: ctau sum of all particle ancestors < 10^-9 m according to the paper (see eq. 5) const double MAX_CTAU = 1.0E-9; // [m] if ( (ancestor_lftsum < 0.0) || (ancestor_lftsum > MAX_CTAU) ) continue; const FourMomentum& qmom = p.momentum(); y = log((qmom.E() + qmom.pz())/(qmom.E() - qmom.pz()))/2.; // skip this particle if it has too high or too low rapidity (extremely rare cases when E = +- pz) if ( std::isnan(y) || std::isinf(y) ) continue; y = fabs(y); if ( (y < rap_min) || (y > rap_max) ) continue; pT = sqrt((qmom.px() * qmom.px()) + (qmom.py() * qmom.py())); if ( (pT < pt_min) || (pT > pt3_edge) ) continue; // Filling corresponding temporary histograms for pT intervals if ( (pT >= pt_min ) && (pT < pt1_edge) ) _tmphistos[partIdx*3]->fill(y, weight); if ( (pT >= pt1_edge) && (pT < pt2_edge) ) _tmphistos[partIdx*3+1]->fill(y, weight); if ( (pT >= pt2_edge) && (pT < pt3_edge) ) _tmphistos[partIdx*3+2]->fill(y, weight); // Fill histo in rapidity for whole pT interval _tmphistos[partIdx+9]->fill(y, weight); // Fill histo in pT for whole rapidity interval _tmphistos[partIdx+12]->fill(pT, weight); // Fill histo in rapidity loss for whole pT interval _tmphistos[partIdx+15]->fill(rap_beam - y, weight); } } // Generate the ratio histograms void finalize() { // needed to determine AIDA to save the file! tree().mkdirs(histoDir()); int dsId = dsShift+1; for (int j=0; j<3; j++ ) { histogramFactory().divide(histoPath(dsId, 1, j+1), *_tmphistos[j], *_tmphistos[3+j]); histogramFactory().divide(histoPath(dsId+1, 1, j+1), *_tmphistos[j], *_tmphistos[6+j]); } dsId += 2; for (int j = 3; j<6; j++) { histogramFactory().divide(histoPath(dsId, 1, 1), *_tmphistos[3*j], *_tmphistos[3*j+1]); dsId ++; histogramFactory().divide(histoPath(dsId, 1, 1), *_tmphistos[3*j], *_tmphistos[3*j+2]); dsId ++; } } //@} private: // //doubles the protected makeAxisCode function in Analysis.cc // //if only it wouldn't be defined in anonymous namespace...! // string _datasetName(int d, int x, int y) { // stringstream dsns; // dsns << "d"; // if (d < 10) dsns << '0'; // dsns << dec << d << "-x"; // if (x < 10) dsns << '0'; // dsns << dec << x << "-y"; // if (y < 10) dsns << '0'; // dsns << dec << y; // return dsns.str(); // } // Get particle lifetime from hardcoded data double getLifeTime(int pid) { double lft = -1.0; if (pid < 0) pid = - pid; // Correct Pythia6 PIDs for f0(980), f0(1370) mesons if (pid == 10331) pid = 30221; if (pid == 10221) pid = 9010221; map::iterator pPartLft = partLftMap.find(pid); // search stable particle list if (pPartLft == partLftMap.end()) { if (pid <= 100) return 0.0; for (size_t i=0; i < sizeof(stablePDGIds)/sizeof(unsigned int); i++) { if (pid == stablePDGIds[i]) { lft = 0.0; break; } } } else { lft = (*pPartLft).second; } if (lft < 0.0 && PID::isHadron(pid)) { MSG_ERROR("Could not determine lifetime for particle with PID " << pid << "... This V^0 will be considered unprompt!"); } return lft; } // Data members like post-cuts event weight counters go here const double getMotherLifeTimeSum(const Particle& p) { if ( !p.hasGenParticle() ) return -1.; double lftSum = 0.; double plft = 0.; const GenParticle* part = &(p.genParticle()); GenVertex* ivtx = part->production_vertex(); while(ivtx) { if (ivtx->particles_in_size() < 1) { lftSum = -1.; break; }; const HepMC::GenVertex::particles_in_const_iterator iPart_invtx = ivtx->particles_in_const_begin(); part = (*iPart_invtx); if ( !(part) ) { lftSum = -1.; break; }; ivtx = part->production_vertex(); if ( (part->pdg_id() == 2212) || !(ivtx) ) break; //reached beam plft = getLifeTime(part->pdg_id()); if (plft < 0.) { lftSum = -1.; break; }; lftSum += plft; }; return (lftSum * c_light); } /// @name Private variables: // The rapidity of the beam according to the selected beam energy double rap_beam; // The edges of the intervals of transversal momentum double pt_min; double pt1_edge; double pt2_edge; double pt3_edge; // The limits of the rapidity window double rap_min; double rap_max; // Indicates which set of histograms will be output to aida file (according to beam energy) int dsShift; // Map between PDG id and particle lifetimes in seconds std::map partLftMap; // Set of PDG Ids for stable particles (PDG Id <= 100 are considered stable) static const int stablePDGIds[205]; /// @name Helper Histograms: //@{ shared_ptr _tmphistos[18]; // Histograms are defined in the following order: anti-Lambda, Lambda and K0s. // First 3 suites of 3 histograms correspond to each particle in bins of y for the 3 pT intervals. (9 histos) // Next 3 histograms contain the particles in y bins for the whole pT interval (3 histos) // Next 3 histograms contain the particles in y_loss bins for the whole pT interval (3 histos) // Last 3 histograms contain the particles in pT bins for the whole rapidity (y) interval (3 histos) //@} // Fill the PDG Id to Lifetime[seconds] map // Data was extracted from LHCb Particle Table through LHCb::ParticlePropertySvc bool fillMap(map &m) { m[6] = 4.707703E-25; m[11] = 1.E+16; m[12] = 1.E+16; m[13] = 2.197019E-06; m[14] = 1.E+16; m[15] = 2.906E-13; m[16] = 1.E+16; m[22] = 1.E+16; m[23] = 2.637914E-25; m[24] = 3.075758E-25; m[25] = 9.4E-26; m[35] = 9.4E-26; m[36] = 9.4E-26; m[37] = 9.4E-26; m[84] = 3.335641E-13; m[85] = 1.290893E-12; m[111] = 8.4E-17; m[113] = 4.405704E-24; m[115] = 6.151516E-24; m[117] = 4.088275E-24; m[119] = 2.102914E-24; m[130] = 5.116E-08; m[150] = 1.525E-12; m[211] = 2.6033E-08; m[213] = 4.405704E-24; m[215] = 6.151516E-24; m[217] = 4.088275E-24; m[219] = 2.102914E-24; m[221] = 5.063171E-19; m[223] = 7.752794E-23; m[225] = 3.555982E-24; m[227] = 3.91793E-24; m[229] = 2.777267E-24; m[310] = 8.953E-11; m[313] = 1.308573E-23; m[315] = 6.038644E-24; m[317] = 4.139699E-24; m[319] = 3.324304E-24; m[321] = 1.238E-08; m[323] = 1.295693E-23; m[325] = 6.682357E-24; m[327] = 4.139699E-24; m[329] = 3.324304E-24; m[331] = 3.210791E-21; m[333] = 1.545099E-22; m[335] = 9.016605E-24; m[337] = 7.565657E-24; m[350] = 1.407125E-12; m[411] = 1.04E-12; m[413] = 6.856377E-21; m[415] = 1.778952E-23; m[421] = 4.101E-13; m[423] = 1.000003E-19; m[425] = 1.530726E-23; m[431] = 5.E-13; m[433] = 1.000003E-19; m[435] = 3.291061E-23; m[441] = 2.465214E-23; m[443] = 7.062363E-21; m[445] = 3.242425E-22; m[510] = 1.525E-12; m[511] = 1.525E-12; m[513] = 1.000019E-19; m[515] = 1.31E-23; m[521] = 1.638E-12; m[523] = 1.000019E-19; m[525] = 1.31E-23; m[530] = 1.536875E-12; m[531] = 1.472E-12; m[533] = 1.E-19; m[535] = 1.31E-23; m[541] = 4.5E-13; m[553] = 1.218911E-20; m[1112] = 4.539394E-24; m[1114] = 5.578069E-24; m[1116] = 1.994582E-24; m[1118] = 2.269697E-24; m[1212] = 4.539394E-24; m[1214] = 5.723584E-24; m[1216] = 1.994582E-24; m[1218] = 1.316424E-24; m[2112] = 8.857E+02; m[2114] = 5.578069E-24; m[2116] = 4.388081E-24; m[2118] = 2.269697E-24; m[2122] = 4.539394E-24; m[2124] = 5.723584E-24; m[2126] = 1.994582E-24; m[2128] = 1.316424E-24; m[2212] = 1.E+16; m[2214] = 5.578069E-24; m[2216] = 4.388081E-24; m[2218] = 2.269697E-24; m[2222] = 4.539394E-24; m[2224] = 5.578069E-24; m[2226] = 1.994582E-24; m[2228] = 2.269697E-24; m[3112] = 1.479E-10; m[3114] = 1.670589E-23; m[3116] = 5.485102E-24; m[3118] = 3.656734E-24; m[3122] = 2.631E-10; m[3124] = 4.219309E-23; m[3126] = 8.227653E-24; m[3128] = 3.291061E-24; m[3212] = 7.4E-20; m[3214] = 1.828367E-23; m[3216] = 5.485102E-24; m[3218] = 3.656734E-24; m[3222] = 8.018E-11; m[3224] = 1.838582E-23; m[3226] = 5.485102E-24; m[3228] = 3.656734E-24; m[3312] = 1.639E-10; m[3314] = 6.648608E-23; m[3322] = 2.9E-10; m[3324] = 7.233101E-23; m[3334] = 8.21E-11; m[4112] = 2.991874E-22; m[4114] = 4.088274E-23; m[4122] = 2.E-13; m[4132] = 1.12E-13; m[4212] = 3.999999E-22; m[4214] = 3.291061E-22; m[4222] = 2.951624E-22; m[4224] = 4.417531E-23; m[4232] = 4.42E-13; m[4332] = 6.9E-14; m[4412] = 3.335641E-13; m[4422] = 3.335641E-13; m[4432] = 3.335641E-13; m[5112] = 1.E-19; m[5122] = 1.38E-12; m[5132] = 1.42E-12; m[5142] = 1.290893E-12; m[5212] = 1.E-19; m[5222] = 1.E-19; m[5232] = 1.42E-12; m[5242] = 1.290893E-12; m[5312] = 1.E-19; m[5322] = 1.E-19; m[5332] = 1.55E-12; m[5342] = 1.290893E-12; m[5442] = 1.290893E-12; m[5512] = 1.290893E-12; m[5522] = 1.290893E-12; m[5532] = 1.290893E-12; m[5542] = 1.290893E-12; m[10111] = 2.48382E-24; m[10113] = 4.635297E-24; m[10115] = 2.54136E-24; m[10211] = 2.48382E-24; m[10213] = 4.635297E-24; m[10215] = 2.54136E-24; m[10223] = 1.828367E-24; m[10225] = 3.636531E-24; m[10311] = 2.437823E-24; m[10313] = 7.313469E-24; m[10315] = 3.538775E-24; m[10321] = 2.437823E-24; m[10323] = 7.313469E-24; m[10325] = 3.538775E-24; m[10331] = 4.804469E-24; m[10411] = 4.38E-24; m[10413] = 3.29E-23; m[10421] = 4.38E-24; m[10423] = 3.22653E-23; m[10431] = 6.5821E-22; m[10433] = 6.5821E-22; m[10441] = 6.453061E-23; m[10511] = 4.39E-24; m[10513] = 1.65E-23; m[10521] = 4.39E-24; m[10523] = 1.65E-23; m[10531] = 4.39E-24; m[10533] = 1.65E-23; m[11114] = 2.194041E-24; m[11116] = 1.828367E-24; m[11212] = 1.880606E-24; m[11216] = 1.828367E-24; m[12112] = 2.194041E-24; m[12114] = 2.194041E-24; m[12116] = 5.063171E-24; m[12126] = 1.828367E-24; m[12212] = 2.194041E-24; m[12214] = 2.194041E-24; m[12216] = 5.063171E-24; m[12224] = 2.194041E-24; m[12226] = 1.828367E-24; m[13112] = 6.582122E-24; m[13114] = 1.09702E-23; m[13116] = 5.485102E-24; m[13122] = 1.316424E-23; m[13124] = 1.09702E-23; m[13126] = 6.928549E-24; m[13212] = 6.582122E-24; m[13214] = 1.09702E-23; m[13216] = 5.485102E-24; m[13222] = 6.582122E-24; m[13224] = 1.09702E-23; m[13226] = 5.485102E-24; m[13314] = 2.742551E-23; m[13324] = 2.742551E-23; m[14122] = 1.828367E-22; m[20022] = 1.E+16; m[20113] = 1.567172E-24; m[20213] = 1.567172E-24; m[20223] = 2.708692E-23; m[20313] = 3.782829E-24; m[20315] = 2.384827E-24; m[20323] = 3.782829E-24; m[20325] = 2.384827E-24; m[20333] = 1.198929E-23; m[20413] = 2.63E-24; m[20423] = 2.63E-24; m[20433] = 6.5821E-22; m[20443] = 7.395643E-22; m[20513] = 2.63E-24; m[20523] = 2.63E-24; m[20533] = 2.63E-24; m[21112] = 2.632849E-24; m[21114] = 3.291061E-24; m[21212] = 2.632849E-24; m[21214] = 6.582122E-24; m[22112] = 4.388081E-24; m[22114] = 3.291061E-24; m[22122] = 2.632849E-24; m[22124] = 6.582122E-24; m[22212] = 4.388081E-24; m[22214] = 3.291061E-24; m[22222] = 2.632849E-24; m[22224] = 3.291061E-24; m[23112] = 7.313469E-24; m[23114] = 2.991874E-24; m[23122] = 4.388081E-24; m[23124] = 6.582122E-24; m[23126] = 3.291061E-24; m[23212] = 7.313469E-24; m[23214] = 2.991874E-24; m[23222] = 7.313469E-24; m[23224] = 2.991874E-24; m[30113] = 2.632849E-24; m[30213] = 2.632849E-24; m[30221] = 1.880606E-24; m[30223] = 2.089563E-24; m[30313] = 2.056913E-24; m[30323] = 2.056913E-24; m[30443] = 2.419898E-23; m[31114] = 1.880606E-24; m[31214] = 3.291061E-24; m[32112] = 3.989164E-24; m[32114] = 1.880606E-24; m[32124] = 3.291061E-24; m[32212] = 3.989164E-24; m[32214] = 1.880606E-24; m[32224] = 1.880606E-24; m[33122] = 1.880606E-23; m[42112] = 6.582122E-24; m[42212] = 6.582122E-24; m[43122] = 2.194041E-24; m[53122] = 4.388081E-24; m[100111] = 1.645531E-24; m[100113] = 1.64553E-24; m[100211] = 1.645531E-24; m[100213] = 1.64553E-24; m[100221] = 1.196749E-23; m[100223] = 3.061452E-24; m[100313] = 2.837122E-24; m[100323] = 2.837122E-24; m[100331] = 4.459432E-25; m[100333] = 4.388081E-24; m[100441] = 4.701516E-23; m[100443] = 2.076379E-21; m[100553] = 2.056913E-20; m[200553] = 3.242425E-20; m[300553] = 3.210791E-23; m[9000111] = 8.776163E-24; m[9000211] = 8.776163E-24; m[9000443] = 8.227652E-24; m[9000553] = 5.983747E-24; m[9010111] = 3.164482E-24; m[9010211] = 3.164482E-24; m[9010221] = 9.403031E-24; m[9010443] = 8.438618E-24; m[9010553] = 8.3318E-24; m[9020443] = 1.061633E-23; m[9030221] = 6.038644E-24; m[9042413] = 2.07634E-21; m[9050225] = 1.394517E-24; m[9060225] = 3.291061E-24; m[9080225] = 4.388081E-24; m[9090225] = 2.056913E-24; m[9910445] = 2.07634E-21; m[9920443] = 2.07634E-21; return true; } }; const int LHCB_2011_I917009::stablePDGIds[205] = { 311, 543, 545, 551, 555, 557, 1103, 2101, 2103, 2203, 3101, 3103, 3201, 3203, 3303, 4101, 4103, 4124, 4201, 4203, 4301, 4303, 4312, 4314, 4322, 4324, 4334, 4403, 4414, 4424, 4434, 4444, 5101, 5103, 5114, 5201, 5203, 5214, 5224, 5301, 5303, 5314, 5324, 5334, 5401, 5403, 5412, 5414, 5422, 5424, 5432, 5434, 5444, 5503, 5514, 5524, 5534, 5544, 5554, 10022, 10333, 10335, 10443, 10541, 10543, 10551, 10553, 10555, 11112, 12118, 12122, 12218, 12222, 13316, 13326, 20543, 20553, 20555, 23314, 23324, 30343, 30353, 30363, 30553, 33314, 33324, 41214, 42124, 52114, 52214, 100311, 100315, 100321, 100325, 100411, 100413, 100421, 100423, 100551, 100555, 100557, 110551, 110553, 110555, 120553, 120555, 130553, 200551, 200555, 210551, 210553, 220553, 1000001, 1000002, 1000003, 1000004, 1000005, 1000006, 1000011, 1000012, 1000013, 1000014, 1000015, 1000016, 1000021, 1000022, 1000023, 1000024, 1000025, 1000035, 1000037, 1000039, 2000001, 2000002, 2000003, 2000004, 2000005, 2000006, 2000011, 2000012, 2000013, 2000014, 2000015, 2000016, 3000111, 3000113, 3000211, 3000213, 3000221, 3000223, 3000331, 3100021, 3100111, 3100113, 3200111, 3200113, 3300113, 3400113, 4000001, 4000002, 4000011, 4000012, 5000039, 9000221, 9900012, 9900014, 9900016, 9900023, 9900024, 9900041, 9900042 }; // Plugin hook DECLARE_RIVET_PLUGIN(LHCB_2011_I917009); } rivet-1.8.3/src/Analyses/ATLAS_2011_I944826.cc0000644000175000017500000002344612116077757016233 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" #include "LWH/Histogram1D.h" #include "HepMC/GenParticle.h" #include "HepMC/GenVertex.h" //using namespace std; //using namespace Rivet; namespace Rivet { class ATLAS_2011_I944826 : public Analysis { public: /// Constructor ATLAS_2011_I944826() : Analysis("ATLAS_2011_I944826") { _sum_w_ks = 0.0; _sum_w_lambda = 0.0; _sum_w_passed = 0.0; } public: /// Book histograms and initialise projections before the run void init() { UnstableFinalState ufs(-MAXRAPIDITY, MAXRAPIDITY, 100*MeV); addProjection(ufs, "UFS"); vector > etaRanges; etaRanges.push_back(make_pair(-3.84, -2.09)); etaRanges.push_back(make_pair(2.09, 3.84)); ChargedFinalState mbts(etaRanges); addProjection(mbts, "MBTS"); IdentifiedFinalState nstable(-2.5, 2.5, 100*MeV); nstable.acceptIdPair(ELECTRON) .acceptIdPair(MUON) .acceptIdPair(PIPLUS) .acceptIdPair(KPLUS) .acceptIdPair(P); addProjection(nstable, "nstable"); if (fuzzyEquals(sqrtS()*GeV, 7000, 1E-3)) { _hist_Ks_pT = bookHistogram1D(1,1,1); _hist_Ks_y = bookHistogram1D(2,1,1); _hist_Ks_mult = bookHistogram1D(3,1,1); _hist_L_pT = bookHistogram1D(7,1,1); _hist_L_y = bookHistogram1D(8,1,1); _hist_L_mult = bookHistogram1D(9,1,1); _hist_Ratio_v_y = bookDataPointSet(13,1,1); _hist_Ratio_v_pT = bookDataPointSet(14,1,1); _temp_lambda_v_y.reset( new LWH::Histogram1D(10, 0.0, 2.5)); _temp_lambdabar_v_y.reset( new LWH::Histogram1D(10, 0.0, 2.5)); _temp_lambda_v_pT.reset( new LWH::Histogram1D(18, 0.5, 4.1)); _temp_lambdabar_v_pT.reset(new LWH::Histogram1D(18, 0.5, 4.1)); } else if (fuzzyEquals(sqrtS()*GeV, 900, 1E-3)) { _hist_Ks_pT = bookHistogram1D(4,1,1); _hist_Ks_y = bookHistogram1D(5,1,1); _hist_Ks_mult = bookHistogram1D(6,1,1); _hist_L_pT = bookHistogram1D(10,1,1); _hist_L_y = bookHistogram1D(11,1,1); _hist_L_mult = bookHistogram1D(12,1,1); _hist_Ratio_v_y = bookDataPointSet(15,1,1); _hist_Ratio_v_pT = bookDataPointSet(16,1,1); _temp_lambda_v_y.reset( new LWH::Histogram1D(5, 0.0, 2.5)); _temp_lambdabar_v_y.reset( new LWH::Histogram1D(5, 0.0, 2.5)); _temp_lambda_v_pT.reset( new LWH::Histogram1D(8, 0.5, 3.7)); _temp_lambdabar_v_pT.reset(new LWH::Histogram1D(8, 0.5, 3.7)); } } // This function is required to impose the flight time cuts on Kaons and Lambdas inline double getPerpFlightDistance(const Rivet::Particle& p) { const HepMC::GenParticle& genp = p.genParticle(); HepMC::GenVertex* prodV = genp.production_vertex(); HepMC::GenVertex* decV = genp.end_vertex(); const HepMC::ThreeVector prodPos = prodV->point3d(); if (decV) { const HepMC::ThreeVector decPos = decV->point3d(); double dy = prodPos.y() - decPos.y(); double dx = prodPos.x() - decPos.x(); return sqrt(dx*dx + dy*dy); } else return 9999999.; } inline bool daughtersSurviveCuts(const Rivet::Particle& p) { // We require the Kshort or Lambda to decay into two charged // particles with at least 100MeV pT inside acceptance region const HepMC::GenParticle& genp = p.genParticle(); HepMC::GenVertex* decV = genp.end_vertex(); bool decision = true; if (!decV) return false; if (decV->particles_out_size() == 2) { std::vector pTs; std::vector charges; std::vector etas; for (HepMC::GenVertex::particles_out_const_iterator pp = decV->particles_out_const_begin() ; pp != decV->particles_out_const_end() ; ++pp) { pTs.push_back((*pp)->momentum().perp()); etas.push_back(fabs((*pp)->momentum().eta())); charges.push_back( Rivet::PID::threeCharge((*pp)->pdg_id())); //(*pp)->print(); } if ( (pTs[0]/Rivet::GeV < 0.1) || (pTs[1]/Rivet::GeV < 0.1) ) { decision = false; MSG_DEBUG("Failed pT cut: " << pTs[0]/Rivet::GeV << " " << pTs[1]/Rivet::GeV); } if ( etas[0] > 2.5 || etas[1] > 2.5 ) { decision = false; MSG_DEBUG("Failed eta cut: " << etas[0] << " " << etas[1]); } if ( charges[0] * charges[1] >= 0 ) { decision = false; MSG_DEBUG("Failed opposite charge cut: " << charges[0] << " " << charges[1]); } } else { decision = false; MSG_DEBUG("Failed nDaughters cut: " << decV->particles_out_size()); } return decision; } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // ATLAS MBTS trigger requirement of at least one hit in either hemisphere if (applyProjection(event, "MBTS").size() < 1) { MSG_DEBUG("Failed trigger cut"); vetoEvent; } // Veto event also when we find less than 2 particles in the acceptance region of type 211,2212,11,13,321 if (applyProjection(event, "nstable").size() < 2) { MSG_DEBUG("Failed stable particle cut"); vetoEvent; } _sum_w_passed += weight; // This ufs holds all the Kaons and Lambdas const UnstableFinalState& ufs = applyProjection(event, "UFS"); // Some conters int n_KS0 = 0; int n_LAMBDA = 0; // Particle loop foreach (const Particle& p, ufs.particles()) { // General particle quantities const double pT = p.momentum().pT()*GeV; const double y = p.momentum().rapidity(); const PdgId pid = abs(p.pdgId()); double flightd = 0.0; // Look for Kaons, Lambdas switch (pid) { case K0S: flightd = getPerpFlightDistance(p); if (!inRange(flightd, 4., 450.) ){ MSG_DEBUG("Kaon failed flight distance cut:" << flightd); break; } if (daughtersSurviveCuts(p) ) { _hist_Ks_y ->fill(y, weight); _hist_Ks_pT->fill(pT, weight); _sum_w_ks += weight; n_KS0++; } break; case LAMBDA: if (pT < 0.5) { // Lambdas have an additional pT cut of 500 MeV MSG_DEBUG("Lambda failed pT cut:" << pT); break; } flightd = getPerpFlightDistance(p); if (!inRange(flightd, 17., 450.)) { MSG_DEBUG("Lambda failed flight distance cut:" << flightd); break; } if ( daughtersSurviveCuts(p) ) { if (p.pdgId() == 3122) { _temp_lambda_v_y ->fill(fabs(y), weight); _temp_lambda_v_pT ->fill(pT, weight); _hist_L_y->fill( y, weight); _hist_L_pT->fill(pT, weight); _sum_w_lambda += weight; n_LAMBDA++; } else if (p.pdgId() == -3122) { _temp_lambdabar_v_y ->fill(fabs(y), weight); _temp_lambdabar_v_pT->fill(pT, weight); } } break; } // End of switch }// End of particle loop // Fill multiplicity histos _hist_Ks_mult->fill(n_KS0, weight); _hist_L_mult->fill(n_LAMBDA, weight); } /// Normalise histograms etc., after the run void finalize() { MSG_INFO("Events that pass the trigger: " << _sum_w_passed); MSG_INFO("Kshort events: " << _sum_w_ks); MSG_INFO("Lambda events: " << _sum_w_lambda); scale(_hist_Ks_pT, 1.0/_sum_w_ks); scale(_hist_Ks_y, 1.0/_sum_w_ks); scale(_hist_Ks_mult, 1.0/_sum_w_passed); scale(_hist_L_pT, 1.0/_sum_w_lambda); scale(_hist_L_y, 1.0/_sum_w_lambda); scale(_hist_L_mult, 1.0/_sum_w_passed); // Division of histograms to obtain lambdabar/lambda ratios if (fuzzyEquals(sqrtS()*GeV, 7000, 1E-3)) { histogramFactory().divide(histoPath("d13-x01-y01"), *_temp_lambdabar_v_y, *_temp_lambda_v_y ); histogramFactory().divide(histoPath("d14-x01-y01"), *_temp_lambdabar_v_pT, *_temp_lambda_v_pT); } else if (fuzzyEquals(sqrtS()*GeV, 900, 1E-3)) { histogramFactory().divide(histoPath("d15-x01-y01"), *_temp_lambdabar_v_y, *_temp_lambda_v_y ); histogramFactory().divide(histoPath("d16-x01-y01"), *_temp_lambdabar_v_pT, *_temp_lambda_v_pT); } } private: // Data members like post-cuts event weight counters go here double _sum_w_ks ; double _sum_w_lambda; double _sum_w_passed; /// @name Histograms AIDA::IHistogram1D *_hist_Ks_pT; AIDA::IHistogram1D *_hist_Ks_y; AIDA::IHistogram1D *_hist_Ks_mult; AIDA::IHistogram1D *_hist_L_pT; AIDA::IHistogram1D *_hist_L_y; AIDA::IHistogram1D *_hist_L_mult; AIDA::IDataPointSet *_hist_Ratio_v_pT; AIDA::IDataPointSet *_hist_Ratio_v_y; shared_ptr _temp_lambda_v_y, _temp_lambdabar_v_y; shared_ptr _temp_lambda_v_pT, _temp_lambdabar_v_pT; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_I944826); } rivet-1.8.3/src/Analyses/CMS_2011_S8973270.cc0000644000175000017500000001344112116077757016100 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { class CMS_2011_S8973270 : public Analysis { public: /// Constructor CMS_2011_S8973270() : Analysis("CMS_2011_S8973270") { } void init() { FinalState fs; FastJets jetproj(fs, FastJets::ANTIKT, 0.5); jetproj.useInvisibles(); addProjection(jetproj, "Jets"); UnstableFinalState ufs; addProjection(ufs, "UFS"); // Book histograms _h_dsigma_dR_56GeV = bookHistogram1D(1,1,1); _h_dsigma_dR_84GeV = bookHistogram1D(2,1,1); _h_dsigma_dR_120GeV = bookHistogram1D(3,1,1); _h_dsigma_dPhi_56GeV = bookHistogram1D(4,1,1); _h_dsigma_dPhi_84GeV = bookHistogram1D(5,1,1); _h_dsigma_dPhi_120GeV = bookHistogram1D(6,1,1); _countMCDR56 = 0; _countMCDR84 = 0; _countMCDR120 = 0; _countMCDPhi56 = 0; _countMCDPhi84 = 0; _countMCDPhi120 = 0; } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); const Jets& jets = applyProjection(event,"Jets").jetsByPt(); const UnstableFinalState& ufs = applyProjection(event, "UFS"); // Find the leading jet pT and eta if (jets.size() == 0) vetoEvent; const double ljpT = jets[0].momentum().pT(); const double ljeta = jets[0].momentum().eta(); MSG_DEBUG("Leading jet pT / eta: " << ljpT << " / " << ljeta); // Minimum requirement for event if (ljpT > 56*GeV && fabs(ljeta) < 3.0) { // Find B hadrons in event int nab = 0, nb = 0; //counters for all B and independent B hadrons double etaB1 = 7.7, etaB2 = 7.7; double phiB1 = 7.7, phiB2 = 7.7; double pTB1 = 7.7, pTB2 = 7.7; foreach (const Particle& p, ufs.particles()) { int aid = abs(p.pdgId()); if (aid/100 == 5 || aid/1000==5) { nab++; // 2J+1 == 1 (mesons) or 2 (baryons) if (aid%10 == 1 || aid%10 == 2) { // No B decaying to B if (aid != 5222 && aid != 5112 && aid != 5212 && aid != 5322) { if (nb==0) { etaB1 = p.momentum().eta(); phiB1 = p.momentum().phi(); pTB1 = p.momentum().pT(); } else if (nb==1) { etaB2 = p.momentum().eta(); phiB2 = p.momentum().phi(); pTB2 = p.momentum().pT(); } nb++; } } MSG_DEBUG("ID " << aid << " B hadron"); } } if (nb==2 && pTB1 > 15*GeV && pTB2 > 15*GeV && fabs(etaB1) < 2.0 && fabs(etaB2) < 2.0) { double dPhi = deltaPhi(phiB1, phiB2); double dR = deltaR(etaB1, phiB1, etaB2, phiB2); MSG_DEBUG("DR/DPhi " << dR << " " << dPhi); // MC counters if (dR > 2.4) _countMCDR56 += weight; if (dR > 2.4 && ljpT > 84*GeV) _countMCDR84 += weight; if (dR > 2.4 && ljpT > 120*GeV) _countMCDR120 += weight; if (dPhi > 3.*PI/4.) _countMCDPhi56 += weight; if (dPhi > 3.*PI/4. && ljpT > 84*GeV) _countMCDPhi84 += weight; if (dPhi > 3.*PI/4. && ljpT > 120*GeV) _countMCDPhi120 += weight; _h_dsigma_dR_56GeV->fill(dR, weight); if (ljpT > 84*GeV) _h_dsigma_dR_84GeV->fill(dR, weight); if (ljpT > 120*GeV) _h_dsigma_dR_120GeV->fill(dR, weight); _h_dsigma_dPhi_56GeV->fill(dPhi, weight); if (ljpT > 84*GeV) _h_dsigma_dPhi_84GeV->fill(dPhi, weight); if (ljpT > 120*GeV) _h_dsigma_dPhi_120GeV->fill(dPhi, weight); //MSG_DEBUG("nb " << nb << " " << nab); } } } /// Normalise histograms etc., after the run void finalize() { MSG_DEBUG("crossSection " << crossSection() << " sumOfWeights " << sumOfWeights()); // Hardcoded bin widths double DRbin = 0.4; double DPhibin = PI/8.0; // Find out the correct numbers double nDataDR56 = 25862.20; double nDataDR84 = 5675.55; double nDataDR120 = 1042.72; double nDataDPhi56 = 24220.00; double nDataDPhi84 = 4964.00; double nDataDPhi120 = 919.10; double normDR56 = (_countMCDR56 > 0.) ? nDataDR56/_countMCDR56 : crossSection()/sumOfWeights(); double normDR84 = (_countMCDR84 > 0.) ? nDataDR84/_countMCDR84 : crossSection()/sumOfWeights(); double normDR120 = (_countMCDR120 > 0.) ? nDataDR120/_countMCDR120 : crossSection()/sumOfWeights(); double normDPhi56 = (_countMCDPhi56 > 0.) ? nDataDPhi56/_countMCDPhi56 : crossSection()/sumOfWeights(); double normDPhi84 = (_countMCDPhi84 > 0.) ? nDataDPhi84/_countMCDPhi84 : crossSection()/sumOfWeights(); double normDPhi120 = (_countMCDPhi120 > 0.) ? nDataDPhi120/_countMCDPhi120 : crossSection()/sumOfWeights(); scale(_h_dsigma_dR_56GeV, normDR56*DRbin); scale(_h_dsigma_dR_84GeV, normDR84*DRbin); scale(_h_dsigma_dR_120GeV, normDR120*DRbin); scale(_h_dsigma_dPhi_56GeV, normDPhi56*DPhibin); scale(_h_dsigma_dPhi_84GeV, normDPhi84*DPhibin); scale(_h_dsigma_dPhi_120GeV, normDPhi120*DPhibin); } //@} private: /// @name Counters //@{ double _countMCDR56, _countMCDR84, _countMCDR120; double _countMCDPhi56, _countMCDPhi84, _countMCDPhi120; //@} /// @name Histograms //@{ AIDA::IHistogram1D *_h_dsigma_dR_56GeV, *_h_dsigma_dR_84GeV, *_h_dsigma_dR_120GeV; AIDA::IHistogram1D *_h_dsigma_dPhi_56GeV, *_h_dsigma_dPhi_84GeV, *_h_dsigma_dPhi_120GeV; //@} }; // Hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2011_S8973270); } rivet-1.8.3/src/Analyses/STAR_2009_UE_HELEN.cc0000644000175000017500000001172612116077757016500 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/NeutralFinalState.hh" #include "Rivet/Projections/MergedFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "fastjet/SISConePlugin.hh" namespace Rivet { /// @brief STAR underlying event /// @author Hendrik Hoeth class STAR_2009_UE_HELEN : public Analysis { public: /// Constructor STAR_2009_UE_HELEN() : Analysis("STAR_2009_UE_HELEN") { } /// @name Analysis methods //@{ void init() { // Charged final state, |eta|<1, pT>0.2GeV const ChargedFinalState cfs(-1.0, 1.0, 0.2*GeV); addProjection(cfs, "CFS"); // Neutral final state, |eta|<1, ET>0.2GeV (needed for the jets) const NeutralFinalState nfs(-1.0, 1.0, 0.2*GeV); addProjection(nfs, "NFS"); // STAR can't see neutrons and K^0_L VetoedFinalState vfs(nfs); vfs.vetoNeutrinos(); vfs.addVetoPairId(K0L); vfs.addVetoPairId(NEUTRON); addProjection(vfs, "VFS"); // Jets are reconstructed from charged and neutral particles, // and the cuts are different (pT vs. ET), so we need to merge them. const MergedFinalState jfs(cfs, vfs); addProjection(jfs, "JFS"); // SISCone, R = 0.7, overlap_threshold = 0.75 addProjection(FastJets(jfs, FastJets::SISCONE, 0.7), "AllJets"); // Book histograms _hist_pmaxnchg = bookProfile1D( 1, 1, 1); _hist_pminnchg = bookProfile1D( 2, 1, 1); _hist_anchg = bookProfile1D( 3, 1, 1); } // Do the analysis void analyze(const Event& e) { const FinalState& cfs = applyProjection(e, "CFS"); if (cfs.particles().size() < 1) { MSG_DEBUG("Failed multiplicity cut"); vetoEvent; } const Jets& alljets = applyProjection(e, "AllJets").jetsByPt(); MSG_DEBUG("Total jet multiplicity = " << alljets.size()); // The jet acceptance region is |eta|<(1-R)=0.3 (with R = jet radius) // Jets also must have a neutral energy fraction of < 0.7 Jets jets; foreach (const Jet jet, alljets) { if (jet.neutralEnergy()/jet.totalEnergy() < 0.7 && fabs(jet.momentum().eta()) < 0.3) jets.push_back(jet); } // This analysis requires a di-jet like event. // WARNING: There is more data in preparation, some of which // does _not_ have this constraint! if (jets.size() != 2) { MSG_DEBUG("Failed jet multiplicity cut"); vetoEvent; } // The di-jet constraints in this analysis are: // - 2 and only 2 jets in the acceptance region // - delta(Phi) between the jets is > 150 degrees // - Pt_awayjet/Pt_towards_jet > 0.7 if (deltaPhi(jets[0].momentum().phi(), jets[1].momentum().phi()) <= 5*PI/6 || jets[1].momentum().pT()/jets[0].momentum().pT() <= 0.7) { MSG_DEBUG("Failed di-jet criteria"); vetoEvent; } // Now lets start ... const double jetphi = jets[0].momentum().phi(); const double jetpT = jets[0].momentum().pT(); // Get the event weight const double weight = e.weight(); size_t numTrans1(0), numTrans2(0), numAway(0); // Calculate all the charged stuff foreach (const Particle& p, cfs.particles()) { const double dPhi = deltaPhi(p.momentum().phi(), jetphi); const double pT = p.momentum().pT(); const double phi = p.momentum().phi(); double rotatedphi = phi - jetphi; while (rotatedphi < 0) rotatedphi += 2*PI; // @TODO: WARNING: The following lines are a hack to correct // for the STAR tracking efficiency. Once we have the // final numbers (corrected to hadron level), we need // to remove this!!!! if (1.0*rand()/static_cast(RAND_MAX) > 0.87834-exp(-1.48994-0.788432*pT)) { continue; } // -------- end of efficiency hack ------- if (dPhi < PI/3.0) { // toward } else if (dPhi < 2*PI/3.0) { if (rotatedphi <= PI) { ++numTrans1; } else { ++numTrans2; } } else { ++numAway; } } // end charged particle loop // Fill the histograms _hist_pmaxnchg->fill(jetpT, (numTrans1>numTrans2 ? numTrans1 : numTrans2)/(2*PI/3), weight); _hist_pminnchg->fill(jetpT, (numTrans1fill(jetpT, numAway/(PI*0.7*0.7), weight); // jet area = pi*R^2 } void finalize() { // } //@} private: AIDA::IProfile1D *_hist_pmaxnchg; AIDA::IProfile1D *_hist_pminnchg; AIDA::IProfile1D *_hist_anchg; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(STAR_2009_UE_HELEN); } rivet-1.8.3/src/Analyses/CMS_2011_S8978280.cc0000644000175000017500000001052412116077757016105 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief CMS strange particle spectra (Ks, Lambda, Cascade) in pp at 900 and 7000 GeV /// @author Kevin Stenson class CMS_2011_S8978280 : public Analysis { public: /// Constructor CMS_2011_S8978280() : Analysis("CMS_2011_S8978280") {} void init() { // Need wide range of eta because cut on rapidity not pseudorapidity UnstableFinalState ufs(-8.0, 8.0, 0.0*GeV); addProjection(ufs, "UFS"); // Particle distributions versus rapidity and transverse momentum // Only make histograms if the correct energy is used. if (fuzzyEquals(sqrtS()/GeV, 900)){ _h_dNKshort_dy = bookHistogram1D(1, 1, 1); _h_dNKshort_dpT = bookHistogram1D(2, 1, 1); _h_dNLambda_dy = bookHistogram1D(3, 1, 1); _h_dNLambda_dpT = bookHistogram1D(4, 1, 1); _h_dNXi_dy = bookHistogram1D(5, 1, 1); _h_dNXi_dpT = bookHistogram1D(6, 1, 1); } else if (fuzzyEquals(sqrtS()/GeV, 7000)){ _h_dNKshort_dy = bookHistogram1D(1, 1, 2); _h_dNKshort_dpT = bookHistogram1D(2, 1, 2); _h_dNLambda_dy = bookHistogram1D(3, 1, 2); _h_dNLambda_dpT = bookHistogram1D(4, 1, 2); _h_dNXi_dy = bookHistogram1D(5, 1, 2); _h_dNXi_dpT = bookHistogram1D(6, 1, 2); } } void analyze(const Event& event) { const double weight = event.weight(); const UnstableFinalState& parts = applyProjection(event, "UFS"); foreach (const Particle& p, parts.particles()) { const double pT = p.momentum().pT(); const double y = fabs(p.momentum().rapidity()); const PdgId pid = abs(p.pdgId()); if (y < 2.0) { switch (pid) { case K0S: _h_dNKshort_dy->fill(y, weight); _h_dNKshort_dpT->fill(pT, weight); break; case LAMBDA: // Lambda should not have Cascade or Omega ancestors since they should not decay. But just in case... if ( !( p.hasAncestor(3322) || p.hasAncestor(-3322) || p.hasAncestor(3312) || p.hasAncestor(-3312) || p.hasAncestor(3334) || p.hasAncestor(-3334) ) ) { _h_dNLambda_dy->fill(y, weight); _h_dNLambda_dpT->fill(pT, weight); } break; case XIMINUS: // Cascade should not have Omega ancestors since it should not decay. But just in case... if ( !( p.hasAncestor(3334) || p.hasAncestor(-3334) ) ) { _h_dNXi_dy->fill(y, weight); _h_dNXi_dpT->fill(pT, weight); } break; } } } } void finalize() { AIDA::IHistogramFactory& hf = histogramFactory(); const string dir = histoDir(); // Making the Lambda/Kshort and Xi/Lambda ratios vs pT and y if (fuzzyEquals(sqrtS()/GeV, 900)) { hf.divide(dir + "/d07-x01-y01",*_h_dNLambda_dpT, *_h_dNKshort_dpT); hf.divide(dir + "/d08-x01-y01",*_h_dNXi_dpT, *_h_dNLambda_dpT); hf.divide(dir + "/d09-x01-y01",*_h_dNLambda_dy, *_h_dNKshort_dy); hf.divide(dir + "/d10-x01-y01",*_h_dNXi_dy, *_h_dNLambda_dy); } else if (fuzzyEquals(sqrtS()/GeV, 7000)) { hf.divide(dir + "/d07-x01-y02",*_h_dNLambda_dpT, *_h_dNKshort_dpT); hf.divide(dir + "/d08-x01-y02",*_h_dNXi_dpT, *_h_dNLambda_dpT); hf.divide(dir + "/d09-x01-y02",*_h_dNLambda_dy, *_h_dNKshort_dy); hf.divide(dir + "/d10-x01-y02",*_h_dNXi_dy, *_h_dNLambda_dy); } double normpT = 1.0/sumOfWeights(); double normy = 0.5*normpT; // Accounts for using |y| instead of y scale(_h_dNKshort_dy, normy); scale(_h_dNKshort_dpT, normpT); scale(_h_dNLambda_dy, normy); scale(_h_dNLambda_dpT, normpT); scale(_h_dNXi_dy, normy); scale(_h_dNXi_dpT, normpT); } private: // Particle distributions versus rapidity and transverse momentum AIDA::IHistogram1D *_h_dNKshort_dy; AIDA::IHistogram1D *_h_dNKshort_dpT; AIDA::IHistogram1D *_h_dNLambda_dy; AIDA::IHistogram1D *_h_dNLambda_dpT; AIDA::IHistogram1D *_h_dNXi_dy; AIDA::IHistogram1D *_h_dNXi_dpT; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2011_S8978280); } rivet-1.8.3/src/Analyses/ATLAS_2011_I925932.cc0000644000175000017500000001052712116077757016224 0ustar sunsun// -*- C++ -*- // ATLAS W pT analysis #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/WFinder.hh" namespace Rivet { namespace { inline double calcMT(const FourMomentum& a, const FourMomentum& b) { return sqrt(2.0 * a.pT() * b.pT() * (1.0 - cos(a.phi() - b.phi())) ); } } class ATLAS_2011_I925932 : public Analysis { public: /// Constructor ATLAS_2011_I925932() : Analysis("ATLAS_2011_I925932") { } /// @name Analysis methods //@{ void init() { // Set up projections FinalState fs; WFinder wfinder_dressed_el(fs, -2.4, 2.4, 20.0*GeV, ELECTRON, 0.0*GeV, 1000.0*GeV, 25.0*GeV, 0.2,true,false); addProjection(wfinder_dressed_el, "WFinder_dressed_el"); WFinder wfinder_bare_el(fs, -2.4, 2.4, 20.0*GeV, ELECTRON, 0.0*GeV, 1000.0*GeV, 25.0*GeV, 0.0,true,false); addProjection(wfinder_bare_el, "WFinder_bare_el"); WFinder wfinder_dressed_mu(fs, -2.4, 2.4, 20.0*GeV, MUON, 0.0*GeV, 1000.0*GeV, 25.0*GeV, 0.2,true,false); addProjection(wfinder_dressed_mu, "WFinder_dressed_mu"); WFinder wfinder_bare_mu(fs, -2.4, 2.4, 20.0*GeV, MUON, 0.0*GeV, 1000.0*GeV, 25.0*GeV, 0.0,true,false); addProjection(wfinder_bare_mu, "WFinder_bare_mu"); // Book histograms _hist_wpt_dressed_el = bookHistogram1D(1, 1, 1); _hist_wpt_bare_el = bookHistogram1D(1, 1, 2); _hist_wpt_dressed_mu = bookHistogram1D(2, 1, 1); _hist_wpt_bare_mu = bookHistogram1D(2, 1, 2); } /// Do the analysis void analyze(const Event& event) { const WFinder& wfinder_dressed_el = applyProjection(event, "WFinder_dressed_el"); const WFinder& wfinder_bare_el = applyProjection(event, "WFinder_bare_el"); const WFinder& wfinder_dressed_mu = applyProjection(event, "WFinder_dressed_mu"); const WFinder& wfinder_bare_mu = applyProjection(event, "WFinder_bare_mu"); if (wfinder_dressed_el.particles().empty() && wfinder_bare_el.particles().empty() && wfinder_dressed_mu.particles().empty() && wfinder_bare_mu.particles().empty()) { MSG_DEBUG("No W bosons found"); vetoEvent; } // "Dressed" electron if (!wfinder_dressed_el.particles().empty()) { const FourMomentum el = wfinder_dressed_el.constituentLeptons()[0].momentum(); const FourMomentum nu = wfinder_dressed_el.constituentNeutrinos()[0].momentum(); if (calcMT(el, nu) > 40.0*GeV && nu.pT() > 25.0*GeV) { _hist_wpt_dressed_el->fill(wfinder_dressed_el.bosons()[0].momentum().pT()/GeV, event.weight()); } } // "Bare" electron if (!wfinder_bare_el.particles().empty()) { const FourMomentum el = wfinder_bare_el.constituentLeptons()[0].momentum(); const FourMomentum nu = wfinder_bare_el.constituentNeutrinos()[0].momentum(); if (calcMT(el, nu) > 40.0*GeV && nu.pT() > 25.0*GeV) { _hist_wpt_bare_el->fill(wfinder_bare_el.bosons()[0].momentum().pT()/GeV, event.weight()); } } // "Dressed" muon if (!wfinder_dressed_mu.particles().empty()) { const FourMomentum mu = wfinder_dressed_mu.constituentLeptons()[0].momentum(); const FourMomentum nu = wfinder_dressed_mu.constituentNeutrinos()[0].momentum(); if (calcMT(mu, nu) > 40.0*GeV && nu.pT() > 25.0*GeV) { _hist_wpt_dressed_mu->fill(wfinder_dressed_mu.bosons()[0].momentum().pT()/GeV, event.weight()); } } // "Bare" muon if (!wfinder_bare_mu.particles().empty()) { const FourMomentum mu = wfinder_bare_mu.constituentLeptons()[0].momentum(); const FourMomentum nu = wfinder_bare_mu.constituentNeutrinos()[0].momentum(); if (calcMT(mu, nu) > 40.0*GeV && nu.pT() > 25.0*GeV) { _hist_wpt_bare_mu->fill(wfinder_bare_mu.bosons()[0].momentum().pT()/GeV, event.weight()); } } } // Normalize histos void finalize() { normalize(_hist_wpt_dressed_el); normalize(_hist_wpt_bare_el); normalize(_hist_wpt_dressed_mu); normalize(_hist_wpt_bare_mu); } //@} private: AIDA::IHistogram1D* _hist_wpt_dressed_el; AIDA::IHistogram1D* _hist_wpt_bare_el; AIDA::IHistogram1D* _hist_wpt_dressed_mu; AIDA::IHistogram1D* _hist_wpt_bare_mu; }; // Hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_I925932); } rivet-1.8.3/src/Analyses/MC_WINC.cc0000644000175000017500000001113712116077757015064 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Projections/WFinder.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { /// @brief MC validation analysis for inclusive W events class MC_WINC : public Analysis { public: /// Default constructor MC_WINC() : Analysis("MC_WINC") { } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; WFinder wfinder(fs, -3.5, 3.5, 25.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2); addProjection(wfinder, "WFinder"); _h_W_mass = bookHistogram1D("W_mass", 50, 55.0, 105.0); _h_W_pT = bookHistogram1D("W_pT", logBinEdges(100, 1.0, 0.5*sqrtS())); _h_W_pT_peak = bookHistogram1D("W_pT_peak", 25, 0.0, 125.0); _h_W_y = bookHistogram1D("W_y", 40, -4.0, 4.0); _h_W_phi = bookHistogram1D("W_phi", 25, 0.0, TWOPI); _h_Wplus_pT = bookHistogram1D("Wplus_pT", logBinEdges(25, 10.0, 0.5*sqrtS())); _h_Wminus_pT = bookHistogram1D("Wminus_pT", logBinEdges(25, 10.0, 0.5*sqrtS())); _h_lepton_pT = bookHistogram1D("lepton_pT", logBinEdges(100, 10.0, 0.25*sqrtS())); _h_lepton_eta = bookHistogram1D("lepton_eta", 40, -4.0, 4.0); _htmp_dsigminus_deta = bookHistogram1D("lepton_dsigminus_deta", 20, 0.0, 4.0); _htmp_dsigplus_deta = bookHistogram1D("lepton_dsigplus_deta", 20, 0.0, 4.0); } /// Do the analysis void analyze(const Event & e) { const double weight = e.weight(); const WFinder& wfinder = applyProjection(e, "WFinder"); if (wfinder.bosons().size() != 1) { vetoEvent; } double charge3_x_eta = 0; int charge3 = 0; FourMomentum emom; FourMomentum wmom(wfinder.bosons().front().momentum()); _h_W_mass->fill(wmom.mass(), weight); _h_W_pT->fill(wmom.pT(), weight); _h_W_pT_peak->fill(wmom.pT(), weight); _h_W_y->fill(wmom.rapidity(), weight); _h_W_phi->fill(wmom.azimuthalAngle(), weight); Particle l=wfinder.constituentLeptons()[0]; _h_lepton_pT->fill(l.momentum().pT(), weight); _h_lepton_eta->fill(l.momentum().eta(), weight); if (PID::threeCharge(l.pdgId()) != 0) { emom = l.momentum(); charge3_x_eta = PID::threeCharge(l.pdgId()) * emom.eta(); charge3 = PID::threeCharge(l.pdgId()); } assert(charge3_x_eta != 0); assert(charge3!=0); if (emom.Et() > 30/GeV) { if (charge3_x_eta < 0) { _htmp_dsigminus_deta->fill(emom.eta(), weight); } else { _htmp_dsigplus_deta->fill(emom.eta(), weight); } } if (charge3 < 0) { _h_Wminus_pT->fill(wmom.pT(), weight); } else { _h_Wplus_pT->fill(wmom.pT(), weight); } } /// Finalize void finalize() { scale(_h_W_mass, crossSection()/sumOfWeights()); scale(_h_W_pT, crossSection()/sumOfWeights()); scale(_h_W_pT_peak, crossSection()/sumOfWeights()); scale(_h_W_y, crossSection()/sumOfWeights()); scale(_h_W_phi, crossSection()/sumOfWeights()); scale(_h_lepton_pT, crossSection()/sumOfWeights()); scale(_h_lepton_eta, crossSection()/sumOfWeights()); // Construct asymmetry: (dsig+/deta - dsig-/deta) / (dsig+/deta + dsig-/deta) for each Et region AIDA::IHistogramFactory& hf = histogramFactory(); IHistogram1D* numtmp = hf.subtract("/numtmp", *_htmp_dsigplus_deta, *_htmp_dsigminus_deta); IHistogram1D* dentmp = hf.add("/dentmp", *_htmp_dsigplus_deta, *_htmp_dsigminus_deta); assert(numtmp && dentmp); hf.divide(histoDir() + "/W_chargeasymm_eta", *numtmp, *dentmp); hf.destroy(numtmp); hf.destroy(dentmp); hf.destroy(_htmp_dsigminus_deta); hf.destroy(_htmp_dsigplus_deta); // W charge asymmetry vs. pTW: dsig+/dpT / dsig-/dpT hf.divide(histoDir() + "/W_chargeasymm_pT", *_h_Wplus_pT, *_h_Wminus_pT); scale(_h_Wplus_pT, crossSection()/sumOfWeights()); scale(_h_Wminus_pT, crossSection()/sumOfWeights()); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_W_mass; AIDA::IHistogram1D * _h_W_pT; AIDA::IHistogram1D * _h_W_pT_peak; AIDA::IHistogram1D * _h_W_y; AIDA::IHistogram1D * _h_W_phi; AIDA::IHistogram1D * _h_Wplus_pT; AIDA::IHistogram1D * _h_Wminus_pT; AIDA::IHistogram1D * _h_lepton_pT; AIDA::IHistogram1D * _h_lepton_eta; AIDA::IHistogram1D * _htmp_dsigminus_deta; AIDA::IHistogram1D * _htmp_dsigplus_deta; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_WINC); } rivet-1.8.3/src/Analyses/CDF_2004_S5839831.cc0000644000175000017500000003730012116077757016055 0ustar sunsun// -*- C++ -*- // "Acosta" underlying event analysis at CDF, inc. "Swiss Cheese" #include "Rivet/Analysis.hh" #include "Rivet/Jet.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/TriggerCDFRun0Run1.hh" namespace Rivet { /// @brief CDF calo jet underlying event analysis at 630 and 1800 GeV /// /// CDF measurement of underlying event using calorimeter jet scales and /// alignment, particle flow activity in transverse cones, and the Swiss /// Cheese analysis method, where cones are excluded around the 2 and 3 /// hardest jets. /// /// @author Andy Buckley class CDF_2004_S5839831 : public Analysis { public: /// Constructor: cuts on charged final state are \f$ -1 < \eta < 1 \f$ /// and \f$ p_T > 0.4 \f$ GeV. CDF_2004_S5839831() : Analysis("CDF_2004_S5839831") { } private: /// @cond CONEUE_DETAIL struct ConesInfo { ConesInfo() : numMax(0), numMin(0), ptMax(0), ptMin(0), ptDiff(0) {} unsigned int numMax, numMin; double ptMax, ptMin, ptDiff; }; /// @endcond ConesInfo _calcTransCones(const double etaLead, const double phiLead, const ParticleVector& tracks) { const double phiTransPlus = mapAngle0To2Pi(phiLead + PI/2.0); const double phiTransMinus = mapAngle0To2Pi(phiLead - PI/2.0); MSG_DEBUG("phi_lead = " << phiLead << " -> trans = (" << phiTransPlus << ", " << phiTransMinus << ")"); unsigned int numPlus(0), numMinus(0); double ptPlus(0), ptMinus(0); // Run over all charged tracks foreach (const Particle& t, tracks) { FourMomentum trackMom = t.momentum(); const double pt = trackMom.pT(); // Find if track mom is in either transverse cone if (deltaR(trackMom, etaLead, phiTransPlus) < 0.7) { ptPlus += pt; numPlus += 1; } else if (deltaR(trackMom, etaLead, phiTransMinus) < 0.7) { ptMinus += pt; numMinus += 1; } } ConesInfo rtn; // Assign N_{min,max} from N_{plus,minus} rtn.numMax = (ptPlus >= ptMinus) ? numPlus : numMinus; rtn.numMin = (ptPlus >= ptMinus) ? numMinus : numPlus; // Assign pT_{min,max} from pT_{plus,minus} rtn.ptMax = (ptPlus >= ptMinus) ? ptPlus : ptMinus; rtn.ptMin = (ptPlus >= ptMinus) ? ptMinus : ptPlus; rtn.ptDiff = fabs(rtn.ptMax - rtn.ptMin); MSG_DEBUG("Min cone has " << rtn.numMin << " tracks -> " << "pT_min = " << rtn.ptMin/GeV << " GeV"); MSG_DEBUG("Max cone has " << rtn.numMax << " tracks -> " << "pT_max = " << rtn.ptMax/GeV << " GeV"); return rtn; } ConesInfo _calcTransCones(const FourMomentum& leadvec, const ParticleVector& tracks) { const double etaLead = leadvec.pseudorapidity(); const double phiLead = leadvec.azimuthalAngle(); return _calcTransCones(etaLead, phiLead, tracks); } /// @name Analysis methods //@{ void init() { // Set up projections addProjection(TriggerCDFRun0Run1(), "Trigger"); addProjection(Beam(), "Beam"); const FinalState calofs(-1.2, 1.2); addProjection(calofs, "CaloFS"); addProjection(FastJets(calofs, FastJets::CDFJETCLU, 0.7), "Jets"); const ChargedFinalState trackfs(-1.2, 1.2, 0.4*GeV); addProjection(trackfs, "TrackFS"); // Restrict tracks to |eta| < 0.7 for the min bias part. const ChargedFinalState mbfs(-0.7, 0.7, 0.4*GeV); addProjection(mbfs, "MBFS"); // Restrict tracks to |eta| < 1 for the Swiss-Cheese part. const ChargedFinalState cheesefs(-1.0, 1.0, 0.4*GeV); addProjection(cheesefs, "CheeseFS"); addProjection(FastJets(cheesefs, FastJets::CDFJETCLU, 0.7), "CheeseJets"); // Book histograms if (fuzzyEquals(sqrtS()/GeV, 1800, 1E-3)) { _pt90MaxAvg1800 = bookProfile1D(1, 1, 1); _pt90MinAvg1800 = bookProfile1D(1, 1, 2); _pt90Max1800 = bookProfile1D(2, 1, 1); _pt90Min1800 = bookProfile1D(2, 1, 2); _pt90Diff1800 = bookProfile1D(2, 1, 3); _num90Max1800 = bookProfile1D(4, 1, 1); _num90Min1800 = bookProfile1D(4, 1, 2); _pTSum1800_2Jet = bookProfile1D(7, 1, 1); _pTSum1800_3Jet = bookProfile1D(7, 1, 2); _pt90Dbn1800Et40 = bookHistogram1D(3, 1, 1); _pt90Dbn1800Et80 = bookHistogram1D(3, 1, 2); _pt90Dbn1800Et120 = bookHistogram1D(3, 1, 3); _pt90Dbn1800Et160 = bookHistogram1D(3, 1, 4); _pt90Dbn1800Et200 = bookHistogram1D(3, 1, 5); _numTracksDbn1800MB = bookHistogram1D(5, 1, 1); _ptDbn1800MB = bookHistogram1D(6, 1, 1); } else if (fuzzyEquals(sqrtS()/GeV, 630, 1E-3)) { _pt90Max630 = bookProfile1D(8, 1, 1); _pt90Min630 = bookProfile1D(8, 1, 2); _pt90Diff630 = bookProfile1D(8, 1, 3); _pTSum630_2Jet = bookProfile1D(9, 1, 1); _pTSum630_3Jet = bookProfile1D(9, 1, 2); _numTracksDbn630MB = bookHistogram1D(10, 1, 1); _ptDbn630MB = bookHistogram1D(11, 1, 1); } } /// Do the analysis void analyze(const Event& event) { // Trigger const bool trigger = applyProjection(event, "Trigger").minBiasDecision(); if (!trigger) vetoEvent; // Get sqrt(s) and event weight const double sqrtS = applyProjection(event, "Beam").sqrtS(); const double weight = event.weight(); { MSG_DEBUG("Running max/min analysis"); vector jets = applyProjection(event, "Jets").jetsByE(); if (!jets.empty()) { // Leading jet must be in central |eta| < 0.5 region const Jet leadingjet = jets.front(); const double etaLead = leadingjet.momentum().eta(); // Get Et of the leading jet: used to bin histograms const double ETlead = leadingjet.EtSum(); MSG_DEBUG("Leading Et = " << ETlead/GeV << " GeV"); if (fabs(etaLead) > 0.5 && ETlead < 15*GeV) { MSG_DEBUG("Leading jet eta = " << etaLead << " not in |eta| < 0.5 & pT > 15 GeV"); } else { // Multiplicity & pT distributions for sqrt(s) = 630 GeV, 1800 GeV const ParticleVector tracks = applyProjection(event, "TrackFS").particles(); const ConesInfo cones = _calcTransCones(leadingjet.momentum(), tracks); if (fuzzyEquals(sqrtS/GeV, 630)) { _pt90Max630->fill(ETlead/GeV, cones.ptMax/GeV, weight); _pt90Min630->fill(ETlead/GeV, cones.ptMin/GeV, weight); _pt90Diff630->fill(ETlead/GeV, cones.ptDiff/GeV, weight); } else if (fuzzyEquals(sqrtS/GeV, 1800)) { _num90Max1800->fill(ETlead/GeV, cones.numMax, weight); _num90Min1800->fill(ETlead/GeV, cones.numMin, weight); _pt90Max1800->fill(ETlead/GeV, cones.ptMax/GeV, weight); _pt90Min1800->fill(ETlead/GeV, cones.ptMin/GeV, weight); _pt90Diff1800->fill(ETlead/GeV, cones.ptDiff/GeV, weight); _pt90MaxAvg1800->fill(ETlead/GeV, cones.ptMax/GeV, weight); // /numMax _pt90MinAvg1800->fill(ETlead/GeV, cones.ptMin/GeV, weight); // /numMin // const double ptTransTotal = cones.ptMax + cones.ptMin; if (inRange(ETlead/GeV, 40., 80.)) { _pt90Dbn1800Et40->fill(ptTransTotal/GeV, weight); } else if (inRange(ETlead/GeV, 80., 120.)) { _pt90Dbn1800Et80->fill(ptTransTotal/GeV, weight); } else if (inRange(ETlead/GeV, 120., 160.)) { _pt90Dbn1800Et120->fill(ptTransTotal/GeV, weight); } else if (inRange(ETlead/GeV, 160., 200.)) { _pt90Dbn1800Et160->fill(ptTransTotal/GeV, weight); } else if (inRange(ETlead/GeV, 200., 270.)) { _pt90Dbn1800Et200->fill(ptTransTotal/GeV, weight); } } } } } // Fill min bias total track multiplicity histos { MSG_DEBUG("Running min bias multiplicity analysis"); const ParticleVector mbtracks = applyProjection(event, "MBFS").particles(); if (fuzzyEquals(sqrtS/GeV, 1800)) { _numTracksDbn1800MB->fill(mbtracks.size(), weight); } else if (fuzzyEquals(sqrtS/GeV, 630)) { _numTracksDbn630MB->fill(mbtracks.size(), weight); } // Run over all charged tracks foreach (const Particle& t, mbtracks) { FourMomentum trackMom = t.momentum(); const double pt = trackMom.pT(); // Plot total pT distribution for min bias if (fuzzyEquals(sqrtS/GeV, 1800)) { _ptDbn1800MB->fill(pt/GeV, weight); } else if (fuzzyEquals(sqrtS/GeV, 630)) { _ptDbn630MB->fill(pt/GeV, weight); } } } // Construct "Swiss Cheese" pT distributions, with pT contributions from // tracks within R = 0.7 of the 1st, 2nd (and 3rd) jets being ignored. A // different set of charged tracks, with |eta| < 1.0, is used here, and all // the removed jets must have Et > 5 GeV. { MSG_DEBUG("Running Swiss Cheese analysis"); const ParticleVector cheesetracks = applyProjection(event, "CheeseFS").particles(); vector cheesejets = applyProjection(event, "Jets").jetsByE(); if (cheesejets.empty()) { MSG_DEBUG("No 'cheese' jets found in event"); return; } if (cheesejets.size() > 1 && fabs(cheesejets[0].momentum().pseudorapidity()) <= 0.5 && cheesejets[0].momentum().Et()/GeV > 5.0 && cheesejets[1].momentum().Et()/GeV > 5.0) { const double cheeseETlead = cheesejets[0].momentum().Et(); const double eta1 = cheesejets[0].momentum().pseudorapidity(); const double phi1 = cheesejets[0].momentum().azimuthalAngle(); const double eta2 = cheesejets[1].momentum().pseudorapidity(); const double phi2 = cheesejets[1].momentum().azimuthalAngle(); double ptSumSub2(0), ptSumSub3(0); foreach (const Particle& t, cheesetracks) { FourMomentum trackMom = t.momentum(); const double pt = trackMom.pT(); // Subtracting 2 leading jets const double deltaR1 = deltaR(trackMom, eta1, phi1); const double deltaR2 = deltaR(trackMom, eta2, phi2); MSG_TRACE("Track vs jet(1): " << "|(" << trackMom.pseudorapidity() << ", " << trackMom.azimuthalAngle() << ") - " << "|(" << eta1 << ", " << phi1 << ")| = " << deltaR1); MSG_TRACE("Track vs jet(2): " << "|(" << trackMom.pseudorapidity() << ", " << trackMom.azimuthalAngle() << ") - " << "|(" << eta2 << ", " << phi2 << ")| = " << deltaR2); if (deltaR1 > 0.7 && deltaR2 > 0.7) { ptSumSub2 += pt; // Subtracting 3rd leading jet if (cheesejets.size() > 2 && cheesejets[2].momentum().Et()/GeV > 5.0) { const double eta3 = cheesejets[2].momentum().pseudorapidity(); const double phi3 = cheesejets[2].momentum().azimuthalAngle(); const double deltaR3 = deltaR(trackMom, eta3, phi3); MSG_TRACE("Track vs jet(3): " << "|(" << trackMom.pseudorapidity() << ", " << trackMom.azimuthalAngle() << ") - " << "|(" << eta3 << ", " << phi3 << ")| = " << deltaR3); if (deltaR3 > 0.7) { ptSumSub3 += pt; } } } } // Swiss Cheese sub 2,3 jets distributions for sqrt(s) = 630 GeV, 1800 GeV if (fuzzyEquals(sqrtS/GeV, 630)) { if (!isZero(ptSumSub2)) _pTSum630_2Jet->fill(cheeseETlead/GeV, ptSumSub2/GeV, weight); if (!isZero(ptSumSub3))_pTSum630_3Jet->fill(cheeseETlead/GeV, ptSumSub3/GeV, weight); } else if (fuzzyEquals(sqrtS/GeV, 1800)) { if (!isZero(ptSumSub2))_pTSum1800_2Jet->fill(cheeseETlead/GeV, ptSumSub2/GeV, weight); if (!isZero(ptSumSub3))_pTSum1800_3Jet->fill(cheeseETlead/GeV, ptSumSub3/GeV, weight); } } } } void finalize() { /// @todo Take these normalisations from the data histo (it can't come from just the MC) if (fuzzyEquals(sqrtS()/GeV, 1800, 1E-3)) { // Normalize to actual number of entries in pT dbn histos... normalize(_pt90Dbn1800Et40, 1656.75); // norm OK normalize(_pt90Dbn1800Et80, 4657.5); // norm OK normalize(_pt90Dbn1800Et120, 5395.5); // norm OK normalize(_pt90Dbn1800Et160, 7248.75); // norm OK normalize(_pt90Dbn1800Et200, 2442.0); // norm OK } // ...and for min bias distributions: if (fuzzyEquals(sqrtS()/GeV, 1800, 1E-3)) { normalize(_numTracksDbn1800MB, 309718.25); // norm OK normalize(_ptDbn1800MB, 33600.0); // norm OK } else if (fuzzyEquals(sqrtS()/GeV, 630, 1E-3)) { normalize(_numTracksDbn630MB, 1101024.0); // norm OK normalize(_ptDbn630MB, 105088.0); // norm OK } } //@} private: /// @name Histogram collections //@{ /// Profile histograms, binned in the \f$ E_T \f$ of the leading jet, for /// the average \f$ p_T \f$ in the toward, transverse and away regions at /// \f$ \sqrt{s} = 1800 \text{GeV} \f$. /// Corresponds to Table 1, and HepData table 1. AIDA::IProfile1D *_pt90MaxAvg1800, *_pt90MinAvg1800; /// Profile histograms, binned in the \f$ E_T \f$ of the leading jet, for /// the \f$ p_T \f$ sum in the toward, transverse and away regions at /// \f$ \sqrt{s} = 1800 \text{GeV} \f$. /// Corresponds to figure 2/3, and HepData table 2. AIDA::IProfile1D *_pt90Max1800, *_pt90Min1800, *_pt90Diff1800; /// Profile histograms, binned in the \f$ E_T \f$ of the leading jet, for /// the \f$ p_T \f$ sum in the toward, transverse and away regions at /// at \f$ \sqrt{s} = 630 \text{GeV} \f$. /// Corresponds to figure 8, and HepData table 8. AIDA::IProfile1D *_pt90Max630, *_pt90Min630, *_pt90Diff630; /// Profile histograms, binned in the \f$ E_T \f$ of the leading jet, for /// the cone track multiplicity at \f$ \sqrt{s} = 1800 \text{GeV} \f$. /// Corresponds to figure 5, and HepData table 4. AIDA::IProfile1D *_num90Max1800, *_num90Min1800; /// Profile histograms, binned in the \f$ E_T \f$ of the leading jet, for /// the \f$ p_T \f$ sum at \f$ \sqrt{s} = 1800 \text{GeV} \f$. /// Corresponds to figure 7, and HepData table 7. AIDA::IProfile1D *_pTSum1800_2Jet, *_pTSum1800_3Jet; /// Profile histograms, binned in the \f$ E_T \f$ of the leading jet, for /// the \f$ p_T \f$ sum at \f$ \sqrt{s} = 630 \text{GeV} \f$. /// Corresponds to figure 9, and HepData table 9. AIDA::IProfile1D *_pTSum630_2Jet, *_pTSum630_3Jet; /// Histogram of \f$ p_{T\text{sum}} \f$ distribution for 5 different /// \f$ E_{T1} \f$ bins. /// Corresponds to figure 4, and HepData table 3. AIDA::IHistogram1D *_pt90Dbn1800Et40, *_pt90Dbn1800Et80, *_pt90Dbn1800Et120, *_pt90Dbn1800Et160, *_pt90Dbn1800Et200; /// Histograms of track multiplicity and \f$ p_T \f$ distributions for /// minimum bias events. /// Figure 6, and HepData tables 5 & 6. /// Figure 10, and HepData tables 10 & 11. AIDA::IHistogram1D *_numTracksDbn1800MB, *_ptDbn1800MB; AIDA::IHistogram1D *_numTracksDbn630MB, *_ptDbn630MB; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2004_S5839831); } rivet-1.8.3/src/Analyses/MC_PHOTONINC.cc0000644000175000017500000000540612116077757015667 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Projections/LeadingParticlesFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief MC validation analysis for single photon events class MC_PHOTONINC : public Analysis { public: /// Default constructor MC_PHOTONINC() : Analysis("MC_PHOTONINC") { } /// @name Analysis methods //@{ /// Book histograms void init() { // General FS FinalState fs(-5.0, 5.0); addProjection(fs, "FS"); // Get leading photon LeadingParticlesFinalState photonfs(FinalState(-1.0, 1.0, 30.0*GeV)); photonfs.addParticleId(PHOTON); addProjection(photonfs, "LeadingPhoton"); // FS for isolation excludes the leading photon VetoedFinalState vfs(fs); vfs.addVetoOnThisFinalState(photonfs); addProjection(vfs, "JetFS"); _h_photon_pT = bookHistogram1D("photon_pT", logBinEdges(50, 30.0, 0.5*sqrtS())); _h_photon_pT_lin = bookHistogram1D("photon_pT_lin", 50, 0.0, 70.0); _h_photon_y = bookHistogram1D("photon_y", 50, -5.0, 5.0); } /// Do the analysis void analyze(const Event& e) { // Get the photon const ParticleVector photons = applyProjection(e, "LeadingPhoton").particles(); if (photons.size() != 1) { vetoEvent; } const FourMomentum photon = photons.front().momentum(); // Get all charged particles const FinalState& fs = applyProjection(e, "JetFS"); if (fs.empty()) { vetoEvent; } // Passed cuts, so get the weight const double weight = e.weight(); // Isolate photon by ensuring that a 0.4 cone around it contains less than 7% of the photon's energy const double egamma = photon.E(); double econe = 0.0; foreach (const Particle& p, fs.particles()) { if (deltaR(photon, p.momentum()) < 0.4) { econe += p.momentum().E(); // Veto as soon as E_cone gets larger if (econe/egamma > 0.07) { vetoEvent; } } } _h_photon_pT->fill(photon.pT(),weight); _h_photon_pT_lin->fill(photon.pT(),weight); _h_photon_y->fill(photon.rapidity(),weight); } // Finalize void finalize() { scale(_h_photon_pT, crossSectionPerEvent()); scale(_h_photon_pT_lin, crossSectionPerEvent()); scale(_h_photon_y, crossSectionPerEvent()); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_photon_pT; AIDA::IHistogram1D * _h_photon_pT_lin; AIDA::IHistogram1D * _h_photon_y; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_PHOTONINC); } rivet-1.8.3/src/Analyses/BELLE_2001_S4598261.cc0000644000175000017500000000555112116077757016302 0ustar sunsun// -*- C++ -*- #include #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /// @brief BELLE pi0 spectrum at Upsilon(4S) /// @author Peter Richardson class BELLE_2001_S4598261 : public Analysis { public: BELLE_2001_S4598261() : Analysis("BELLE_2001_S4598261"), _weightSum(0.) { } void analyze(const Event& e) { const double weight = e.weight(); const UnstableFinalState& ufs = applyProjection(e, "UFS"); // find the upsilons ParticleVector upsilons; // first in unstable final state foreach (const Particle& p, ufs.particles()) if(p.pdgId()==300553) upsilons.push_back(p); // then in whole event if fails if(upsilons.empty()) { foreach (GenParticle* p, Rivet::particles(e.genEvent())) { if(p->pdg_id()!=300553) continue; const GenVertex* pv = p->production_vertex(); bool passed = true; if (pv) { for (GenVertex::particles_in_const_iterator pp = pv->particles_in_const_begin() ; pp != pv->particles_in_const_end() ; ++pp) { if ( p->pdg_id() == (*pp)->pdg_id() ) { passed = false; break; } } } if(passed) upsilons.push_back(Particle(*p)); } } // find an upsilons foreach (const Particle& p, upsilons) { _weightSum += weight; // find the neutral pions from the decay vector pions; findDecayProducts(p.genParticle(),pions); LorentzTransform cms_boost(-p.momentum().boostVector()); for(unsigned int ix=0;ixmomentum())).vector3().mod(); _histdSigDp->fill(pcm,weight); } _histMult->fill(0.,double(pions.size())*weight); } } // analyze void finalize() { scale(_histdSigDp, 1./_weightSum); scale(_histMult , 1./_weightSum); } // finalize void init() { addProjection(UnstableFinalState(), "UFS"); // spectrum _histdSigDp = bookHistogram1D(1, 1, 1); // multiplicity _histMult = bookHistogram1D(2, 1, 1); } // init private: //@{ // count of weights double _weightSum; /// Histograms AIDA::IHistogram1D* _histdSigDp; AIDA::IHistogram1D* _histMult; //@} void findDecayProducts(const GenParticle & p, vector & pions) { const GenVertex* dv = p.end_vertex(); for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin(); pp != dv->particles_out_const_end(); ++pp) { int id = (*pp)->pdg_id(); if(id==111) { pions.push_back(*pp); } else if((*pp)->end_vertex()) findDecayProducts(**pp,pions); } } }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(BELLE_2001_S4598261); } rivet-1.8.3/src/Analyses/CMS_2011_S8957746.cc0000644000175000017500000000553412116077757016116 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/Thrust.hh" #include "Rivet/Tools/Logging.hh" namespace Rivet { /// Rivet analysis class for CMS_2011_S8957746 dataset class CMS_2011_S8957746 : public Analysis { public: /// Constructor CMS_2011_S8957746() : Analysis("CMS_2011_S8957746") { } /// Initialization, called once before running void init() { // Projections const FastJets jets(FinalState(-5.0, 5.0, 0.0*GeV), FastJets::ANTIKT, 0.5); addProjection(jets, "Jets"); // Book histograms _hist_T_90 = bookHistogram1D(1, 1, 1); _hist_m_90 = bookHistogram1D(2, 1, 1); _hist_T_125 = bookHistogram1D(3, 1, 1); _hist_m_125 = bookHistogram1D(4, 1, 1); _hist_T_200 = bookHistogram1D(5, 1, 1); _hist_m_200 = bookHistogram1D(6, 1, 1); } void analyze(const Event& event) { const double weight = event.weight(); const Jets& jets = applyProjection(event, "Jets").jetsByPt(30.0*GeV); if (jets.size() < 2 || fabs(jets[0].momentum().eta()) >= 1.3 || fabs(jets[1].momentum().eta()) >= 1.3 || jets[0].momentum().pT() < 90*GeV) { vetoEvent; } std::vector momenta; foreach (const Jet& j, jets) { if (fabs(j.momentum().eta()) < 1.3) { Vector3 mom = j.momentum().vector3(); mom.setZ(0.0); momenta.push_back(mom); } } if (momenta.size() == 2) { // We need to use a ghost so that Thrust.calc() doesn't return 1. momenta.push_back(Vector3(1e-10*MeV, 0., 0.)); } Thrust thrust; thrust.calc(momenta); // The lowest bin also includes the underflow: const double T = max(log(1-thrust.thrust()), -12.0); const double M = max(log(thrust.thrustMajor()), -6.0); if (jets[0].momentum().pT()/GeV > 200) { _hist_T_200->fill(T, weight); _hist_m_200->fill(M, weight); } else if (jets[0].momentum().pT()/GeV > 125) { _hist_T_125->fill(T, weight); _hist_m_125->fill(M, weight); } else if (jets[0].momentum().pT()/GeV > 90) { _hist_T_90->fill(T, weight); _hist_m_90->fill(M, weight); } } void finalize() { normalize(_hist_T_90); normalize(_hist_m_90); normalize(_hist_T_125); normalize(_hist_m_125); normalize(_hist_T_200); normalize(_hist_m_200); } private: AIDA::IHistogram1D *_hist_T_90; AIDA::IHistogram1D *_hist_m_90; AIDA::IHistogram1D *_hist_T_125; AIDA::IHistogram1D *_hist_m_125; AIDA::IHistogram1D *_hist_T_200; AIDA::IHistogram1D *_hist_m_200; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2011_S8957746); } rivet-1.8.3/src/Analyses/ATLAS_2011_S9108483.cc0000644000175000017500000001506012116077757016316 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Math/Constants.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/NonHadronicFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" namespace Rivet { class ATLAS_2011_S9108483 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2011_S9108483() : Analysis("ATLAS_2011_S9108483") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // get the non-hadronic final-state particles double etaMax = 2.5; const NonHadronicFinalState nhfs(-etaMax,etaMax,13.*GeV); addProjection(nhfs,"NHFS"); // select the charged ones const ChargedFinalState cfs(nhfs); addProjection(cfs,"CFS"); // and then veto electrons, and taus to be safe VetoedFinalState vfs(cfs); vfs.addVetoPairId(ELECTRON); addProjection(vfs,"VFS"); /// Book histograms _count_trigger = bookHistogram1D("count_trigger" , 1, 0., 1.); _count_event = bookHistogram1D("count_selection", 1, 0., 1.); _count_quality = bookHistogram1D("count_quality" , 1, 0., 1.); _count_beta = bookHistogram1D("count_beta" , 1, 0., 1.); _count_90 = bookHistogram1D("count_90" , 1, 0., 1.); _count_110 = bookHistogram1D("count_110", 1, 0., 1.); _count_120 = bookHistogram1D("count_120", 1, 0., 1.); _count_130 = bookHistogram1D("count_130", 1, 0., 1.); _hist_beta = bookHistogram1D("beta",1000, 0., 2.); _hist_time = bookHistogram1D("time",1000, -50, 50.); _hist_mass = bookHistogram1D("mass", 60, 5., 305.); } double rndGauss(double sigma, double mean) { double r = sqrt(-2.0*log(rand()/static_cast(RAND_MAX))); double phi = rand()/static_cast(RAND_MAX)*2.0*pi; return mean+sigma*r*sin(phi); } /// Perform the per-event analysis void analyze(const Event& event) { // smearing parameters // time measurement (in ns) // const double tsmear=5.*0.7; const double tsmear=0.7; // sagita error const double csag =1.1E-4; // multiple scattering const double cms =2.0E-2; // muon chamber radius (in metres) const double radius = 10.e3; // convert to ns const double tr = radius/c_light; // event weight const double weight = event.weight(); // get the charged final-state particles ParticleVector charged = applyProjection(event,"VFS").particles(); // need at least two candidates if(charged.size()<2) vetoEvent; // number passing trigger _count_trigger->fill(0.5,weight); // Z mass veto foreach ( const Particle & mu1,charged ) { foreach ( const Particle & mu2,charged ) { double mass = (mu1.momentum()+mu2.momentum()).mass(); double diff = abs(mass-91.18); if(diff<10.) vetoEvent; } } // number passing first event selection _count_event->fill(0.5,weight); // now find the candidates // loop over the particles and find muons and heavy charged particles map muonCandidates; foreach ( const Particle & mu,charged ) { // calculate the smeared momentum double pT = mu.momentum().perp2(); double pmag = sqrt(pT+sqr(mu.momentum().z())); double deltap = sqrt( sqr(csag*sqr(pmag)) + sqr(cms*mu.momentum().t()/GeV)); double psmear = rndGauss(deltap,pmag); // keep particles with pT>40 if(psmear/pmag*mu.momentum().perp()<40.*GeV|| psmear/pmag*mu.momentum().perp()>1000.*GeV) continue; muonCandidates.insert(make_pair(psmear,mu)); } // require two candidates if(muonCandidates.size()<2) vetoEvent; // number passing "quality" cut _count_quality->fill(0.5,weight); // now do the time of flight bool filled = false; for(map::const_iterator it=muonCandidates.begin(); it!=muonCandidates.end();++it) { // true magnitude and pT of momentum double pT = it->second.momentum().perp2(); double pmag = sqrt(pT+sqr(it->second.momentum().z())); pT = sqrt(pT); // true time difference in ns double deltaT =tr *(it->second.momentum().t()-pmag)/pT; // smear it deltaT = rndGauss(tsmear,deltaT); // beta double beta = 1./(1.+deltaT/tr*pT/pmag); _hist_beta->fill(beta, weight); _hist_time->fill(deltaT, weight); // beta cut if(beta<0.95) continue; // mass double mass = 2.*pT*it->first*deltaT/tr*(1.+0.5*deltaT/tr*pT/pmag); if(mass<0.) continue; mass = sqrt(mass); filled = true; _hist_mass->fill(mass,weight); if(mass>90. ) { _count_90 ->fill(0.5,weight); if(mass>110.) { _count_110->fill(0.5,weight); if(mass>120.) { _count_120->fill(0.5,weight); if(mass>130.) { _count_130->fill(0.5,weight); } } } } } if(!filled) vetoEvent; // number passing beta cut _count_beta->fill(0.5,weight); } //@} void finalize() { double fact = crossSection()/sumOfWeights()*37; MSG_WARNING("testing " << crossSection() << " " << sumOfWeights() << " " << fact); scale(_hist_beta,fact); scale(_hist_time,fact); scale(_hist_mass,fact); scale( _count_trigger, fact); scale( _count_event, fact); scale( _count_quality, fact); scale( _count_beta, fact); scale( _count_90, fact); scale( _count_110, fact); scale( _count_120, fact); scale( _count_130, fact); } private: /// @name Histograms //@{ AIDA::IHistogram1D* _hist_beta; AIDA::IHistogram1D* _hist_time; AIDA::IHistogram1D* _hist_mass; AIDA::IHistogram1D* _count_trigger; AIDA::IHistogram1D* _count_event; AIDA::IHistogram1D* _count_quality; AIDA::IHistogram1D* _count_beta; AIDA::IHistogram1D* _count_90; AIDA::IHistogram1D* _count_110; AIDA::IHistogram1D* _count_120; AIDA::IHistogram1D* _count_130; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2011_S9108483); } rivet-1.8.3/src/Analyses/CDF_1996_S3108457.cc0000644000175000017500000000565512116077757016077 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" namespace Rivet { /// @brief CDF properties of high-mass multi-jet events class CDF_1996_S3108457 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor CDF_1996_S3108457() : Analysis("CDF_1996_S3108457") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { /// Initialise and register projections here const FinalState fs(-4.2, 4.2); addProjection(FastJets(fs, FastJets::CDFJETCLU, 0.7), "Jets"); /// Book histograms here, e.g.: for (size_t i=0; i<5; ++i) { _h_m[i] = bookHistogram1D(1+i, 1, 1); _h_costheta[i] = bookHistogram1D(10+i, 1, 1); _h_pT[i] = bookHistogram1D(15+i, 1, 1); } /// @todo Ratios of mass histograms left out: Binning doesn't work out } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); /// Do the event by event analysis here Jets jets; double sumEt = 0.0; FourMomentum jetsystem(0.0, 0.0, 0.0, 0.0); foreach (const Jet& jet, applyProjection(event, "Jets").jetsByEt()) { double Et = jet.momentum().Et(); if (Et > 20.0*GeV) { jets.push_back(jet); sumEt += Et; jetsystem += jet.momentum(); } } /// @todo include gaussian jet energy resolution smearing? if (jets.size() < 2 || jets.size() > 6) { vetoEvent; } if (sumEt < 420.0*GeV) { vetoEvent; } LorentzTransform cms_boost(-jetsystem.boostVector()); FourMomentum jet0boosted(cms_boost.transform(jets[0].momentum())); double mass = jetsystem.mass(); double costheta0 = fabs(cos(jet0boosted.theta())); if (costheta0 < 2.0/3.0) { _h_m[jets.size()-2]->fill(mass, weight); } if (mass > 600.0*GeV) { _h_costheta[jets.size()-2]->fill(costheta0, weight); } if (costheta0 < 2.0/3.0 && mass > 600.0*GeV) { foreach (const Jet jet, jets) { _h_pT[jets.size()-2]->fill(jet.momentum().pT(), weight); } } } /// Normalise histograms etc., after the run void finalize() { /// Normalise, scale and otherwise manipulate histograms here for (size_t i=0; i<5; ++i) { normalize(_h_m[i], 40.0); normalize(_h_costheta[i], 2.0); normalize(_h_pT[i], 20.0); } } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D *_h_m[5]; AIDA::IHistogram1D *_h_costheta[5]; AIDA::IHistogram1D *_h_pT[5]; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_1996_S3108457); } rivet-1.8.3/src/Analyses/Makefile.am0000644000175000017500000002472312123033122015447 0ustar sunsun## Flags for building all plugins AM_LDFLAGS = $(LDFLAGS) -module -avoid-version -L$(FASTJETLIBPATH) LIBS = $(FASTJETCONFIGLIBADD) lib_LTLIBRARIES = noinst_LTLIBRARIES = libRivetAnalysisTools.la libRivetAnalysisTools_la_SOURCES = \ MC_JetAnalysis.cc \ MC_JetSplittings.cc ## ANALYSIS CATEGORIES ## ## Unvalidated analyses: add new standard analyses here, and only ## move them into the collider-specific standard plugin libraries ## once they have been finished and checked. The --enable-unvalidated ## flag is needed to install the unvalidated analyses. ## ## Preliminary analyses: validated analyses whose experimental paper has not ## been fully accepted for publication should go here. Analyses in this group ## are considered safe to use but the reference data may yet change. In ## progressing from preliminary status to a permanent published analyses ## collection, the analysis name is very likely to change, so you should ensure ## that any Rivet-using scripts are not broken by such name changes when ## upgrading between Rivet versions. These analyses will not be available if ## Rivet is built with the --disable-preliminary configure flag. ## ## Obsolete analyses: as mentioned above, when a preliminary analysis becomes ## permanent its name will change to reflect its newly published status via the ## publication's SPIRES ID. The previous form of the analysis, possibly with ## different reference histograms, will be retained for one major version of ## Rivet with a status of "obsolete" before being removed, to give users time to ## migrate their run scripts, i.e. if an analysis is marked as obsolete in ## version 1.4.2, it will remain in Rivet's distribution until version ## 1.5.0. Obsolete analyses will not be available if Rivet is built with the ## --disable-obsolete configure flag. lib_LTLIBRARIES += RivetALICEAnalyses.la RivetALICEAnalyses_la_SOURCES = \ ALICE_2010_S8624100.cc \ ALICE_2010_S8625980.cc \ ALICE_2010_S8706239.cc \ ALICE_2011_S8909580.cc \ ALICE_2011_S8945144.cc \ ALICE_2012_I1181770.cc lib_LTLIBRARIES += RivetATLASAnalyses.la RivetATLASAnalyses_la_SOURCES = \ ATLAS_2010_S8591806.cc \ ATLAS_2010_S8817804.cc \ ATLAS_2010_S8894728.cc \ ATLAS_2010_S8914702.cc \ ATLAS_2010_S8918562.cc \ ATLAS_2010_S8919674.cc \ ATLAS_2011_S8924791.cc \ ATLAS_2011_S8971293.cc \ ATLAS_2011_S8994773.cc \ ATLAS_2011_S8983313.cc \ ATLAS_2011_S9002537.cc \ ATLAS_2011_S9120807.cc \ ATLAS_2011_S9126244.cc \ ATLAS_2011_S9128077.cc \ ATLAS_2011_S9131140.cc \ ATLAS_2011_S9212183.cc \ ATLAS_2011_S9225137.cc \ ATLAS_2011_S9019561.cc \ ATLAS_2011_I894867.cc \ ATLAS_2011_I919017.cc \ ATLAS_2011_I925932.cc \ ATLAS_2011_I926145.cc \ ATLAS_2011_I944826.cc \ ATLAS_2011_I945498.cc \ ATLAS_2011_I954993.cc \ ATLAS_2012_I943401.cc \ ATLAS_2012_I1082936.cc \ ATLAS_2012_I1084540.cc \ ATLAS_2012_I1091481.cc \ ATLAS_2012_I1093738.cc \ ATLAS_2012_I1094061.cc \ ATLAS_2012_I1094568.cc \ ATLAS_2012_I1112263.cc \ ATLAS_2012_I1117704.cc \ ATLAS_2012_I1118269.cc \ ATLAS_2012_I1119557.cc \ ATLAS_2012_I1125575.cc \ ATLAS_2012_I1125961.cc \ ATLAS_2012_I1183818.cc \ ATLAS_2012_I1188891.cc \ ATLAS_2013_I1217867.cc if ENABLE_PRELIMINARY RivetATLASAnalyses_la_SOURCES += \ ATLAS_2012_CONF_2012_001.cc endif if ENABLE_UNVALIDATED RivetATLASAnalyses_la_SOURCES += \ ATLAS_2010_CONF_2010_049.cc \ ATLAS_2011_S9041966.cc \ ATLAS_2011_CONF_2011_090.cc \ ATLAS_2011_CONF_2011_098.cc \ ATLAS_2011_S9108483.cc \ ATLAS_2011_S9212353.cc \ ATLAS_2011_I9035664.cc \ ATLAS_2012_I1083318.cc \ ATLAS_2012_I1095236.cc \ ATLAS_2012_I1082009.cc \ ATLAS_2012_I946427.cc \ ATLAS_2012_I1126136.cc \ ATLAS_2012_I1180197.cc \ ATLAS_2012_I1186556.cc \ ATLAS_2012_I1190891.cc \ ATLAS_2012_CONF_2012_103.cc \ ATLAS_2012_CONF_2012_104.cc \ ATLAS_2012_CONF_2012_105.cc \ ATLAS_2012_CONF_2012_109.cc \ ATLAS_2012_CONF_2012_153.cc endif lib_LTLIBRARIES += RivetCMSAnalyses.la RivetCMSAnalyses_la_SOURCES = \ CMS_2010_S8547297.cc \ CMS_2010_S8656010.cc \ CMS_2011_S8884919.cc \ CMS_2011_S8941262.cc \ CMS_2011_S8950903.cc \ CMS_2011_S8957746.cc \ CMS_2011_S8968497.cc \ CMS_2011_S8973270.cc \ CMS_2011_S8978280.cc \ CMS_2011_S9086218.cc \ CMS_2011_S9088458.cc \ CMS_2011_S9120041.cc \ CMS_2011_S9215166.cc \ CMS_2011_I954992.cc \ CMS_2012_I1087342.cc \ CMS_2012_I1102908.cc \ CMS_2012_I1107658.cc \ CMS_2012_I1184941.cc \ CMS_2012_I1193338.cc if ENABLE_PRELIMINARY RivetCMSAnalyses_la_SOURCES += \ CMS_QCD_10_024.cc \ CMS_2012_PAS_FWD_11_003.cc \ CMS_2012_PAS_QCD_11_010.cc endif lib_LTLIBRARIES += RivetLHCbAnalyses.la RivetLHCbAnalyses_la_SOURCES = \ LHCB_2010_I867355.cc if ENABLE_UNVALIDATED RivetLHCbAnalyses_la_SOURCES += \ LHCB_2010_S8758301.cc \ LHCB_2011_I917009.cc \ LHCB_2011_I919315.cc \ LHCB_2012_I1119400.cc endif lib_LTLIBRARIES += RivetLHCfAnalyses.la RivetLHCfAnalyses_la_SOURCES = \ LHCF_2012_I1115479.cc lib_LTLIBRARIES += RivetTOTEMAnalyses.la RivetTOTEMAnalyses_la_SOURCES = \ TOTEM_2012_I1115294.cc \ TOTEM_2012_002.cc # TODO: update to Inspire ID lib_LTLIBRARIES += RivetCDFAnalyses.la RivetCDFAnalyses_la_SOURCES = \ CDF_1988_S1865951.cc \ CDF_1990_S2089246.cc \ CDF_1994_S2952106.cc \ CDF_1996_S3418421.cc \ CDF_1998_S3618439.cc \ CDF_2000_S4155203.cc \ CDF_2000_S4266730.cc \ CDF_2001_S4517016.cc \ CDF_2001_S4563131.cc \ CDF_2001_S4751469.cc \ CDF_2002_S4796047.cc \ CDF_2004_S5839831.cc \ CDF_2005_S6080774.cc \ CDF_2005_S6217184.cc \ CDF_2006_S6450792.cc \ CDF_2006_S6653332.cc \ CDF_2007_S7057202.cc \ CDF_2008_S7540469.cc \ CDF_2008_S7828950.cc \ CDF_2008_S8093652.cc \ CDF_2008_S8095620.cc \ CDF_2009_S8233977.cc \ CDF_2009_S8383952.cc \ CDF_2009_S8436959.cc \ CDF_2010_S8591881_DY.cc \ CDF_2010_S8591881_QCD.cc if ENABLE_PRELIMINARY RivetCDFAnalyses_la_SOURCES += \ CDF_2009_NOTE_9936.cc \ CDF_2012_NOTE10874.cc endif if ENABLE_OBSOLETE RivetCDFAnalyses_la_SOURCES += \ CDF_2008_LEADINGJETS.cc \ CDF_2008_NOTE_9351.cc endif if ENABLE_UNVALIDATED RivetCDFAnalyses_la_SOURCES += \ CDF_1993_S2742446.cc \ CDF_1996_S3108457.cc \ CDF_1996_S3349578.cc \ CDF_1997_S3541940.cc \ CDF_2008_S7541902.cc \ CDF_2008_S7782535.cc endif lib_LTLIBRARIES += RivetD0Analyses.la RivetD0Analyses_la_SOURCES = \ D0_2000_S4480767.cc \ D0_2001_S4674421.cc \ D0_2004_S5992206.cc \ D0_2006_S6438750.cc \ D0_2007_S7075677.cc \ D0_2008_S6879055.cc \ D0_2008_S7554427.cc \ D0_2008_S7662670.cc \ D0_2008_S7719523.cc \ D0_2008_S7837160.cc \ D0_2008_S7863608.cc \ D0_2009_S8202443.cc \ D0_2009_S8320160.cc \ D0_2009_S8349509.cc \ D0_2010_S8566488.cc \ D0_2010_S8570965.cc \ D0_2010_S8671338.cc \ D0_2010_S8821313.cc \ D0_2011_I895662.cc if ENABLE_UNVALIDATED RivetD0Analyses_la_SOURCES += \ D0_1996_S3214044.cc \ D0_1996_S3324664.cc endif lib_LTLIBRARIES += RivetHERAAnalyses.la RivetHERAAnalyses_la_SOURCES = \ H1_1994_S2919893.cc \ H1_2000_S4129130.cc if ENABLE_UNVALIDATED RivetHERAAnalyses_la_SOURCES += \ H1_1995_S3167097.cc \ ZEUS_2001_S4815815.cc endif lib_LTLIBRARIES += RivetPetraAnalyses.la RivetPetraAnalyses_la_SOURCES = \ JADE_1998_S3612880.cc \ TASSO_1990_S2148048.cc lib_LTLIBRARIES += RivetLEPAnalyses.la RivetLEPAnalyses_la_SOURCES = \ ALEPH_1991_S2435284.cc \ ALEPH_1996_S3486095.cc \ ALEPH_1996_S3196992.cc \ ALEPH_1999_S4193598.cc \ ALEPH_2001_S4656318.cc \ ALEPH_2002_S4823664.cc \ ALEPH_2004_S5765862.cc \ DELPHI_1995_S3137023.cc \ DELPHI_1996_S3430090.cc \ DELPHI_1999_S3960137.cc \ DELPHI_2000_S4328825.cc \ OPAL_1993_S2692198.cc \ OPAL_1994_S2927284.cc \ OPAL_1995_S3198391.cc \ OPAL_1996_S3257789.cc \ OPAL_1997_S3396100.cc \ OPAL_1997_S3608263.cc \ OPAL_1998_S3702294.cc \ OPAL_1998_S3749908.cc \ OPAL_1998_S3780481.cc \ OPAL_2000_S4418603.cc \ OPAL_2001_S4553896.cc \ OPAL_2002_S5361494.cc \ OPAL_2004_S6132243.cc \ SLD_1996_S3398250.cc \ SLD_1999_S3743934.cc \ SLD_2002_S4869273.cc \ SLD_2004_S5693039.cc if ENABLE_PRELIMINARY RivetLEPAnalyses_la_SOURCES += \ DELPHI_2002_069_CONF_603.cc endif if ENABLE_UNVALIDATED RivetLEPAnalyses_la_SOURCES += \ DELPHI_2003_WUD_03_11.cc endif lib_LTLIBRARIES += RivetRHICAnalyses.la RivetRHICAnalyses_la_SOURCES = \ STAR_2006_S6500200.cc \ STAR_2006_S6860818.cc \ STAR_2006_S6870392.cc if ENABLE_PRELIMINARY RivetRHICAnalyses_la_SOURCES += \ STAR_2009_UE_HELEN.cc endif if ENABLE_UNVALIDATED RivetRHICAnalyses_la_SOURCES += \ STAR_2008_S7869363.cc \ STAR_2008_S7993412.cc endif lib_LTLIBRARIES += RivetSPSAnalyses.la RivetSPSAnalyses_la_SOURCES = \ UA1_1990_S2044935.cc \ UA5_1982_S875503.cc \ UA5_1986_S1583476.cc \ UA5_1987_S1640666.cc \ UA5_1988_S1867512.cc \ UA5_1989_S1926373.cc lib_LTLIBRARIES += RivetMiscAnalyses.la RivetMiscAnalyses_la_SOURCES = \ PDG_HADRON_MULTIPLICITIES.cc \ PDG_HADRON_MULTIPLICITIES_RATIOS.cc \ JADE_OPAL_2000_S4300807.cc \ ARGUS_1993_S2653028.cc \ ARGUS_1993_S2669951.cc \ ARGUS_1993_S2789213.cc \ BABAR_2003_I593379.cc \ BABAR_2005_S6181155.cc \ BABAR_2007_S6895344.cc \ BABAR_2007_S7266081.cc \ BELLE_2001_S4598261.cc \ BELLE_2006_S6265367.cc \ CLEO_2004_S5809304.cc if ENABLE_UNVALIDATED RivetMiscAnalyses_la_SOURCES += \ E735_1998_S3905616.cc \ SFM_1984_S1178091.cc endif lib_LTLIBRARIES += RivetMCAnalyses.la RivetMCAnalyses_la_SOURCES = \ EXAMPLE.cc \ MC_QCD_PARTONS.cc \ MC_DIPHOTON.cc \ MC_GENERIC.cc \ MC_HINC.cc \ MC_HJETS.cc \ MC_HKTSPLITTINGS.cc \ MC_IDENTIFIED.cc \ MC_JETS.cc \ MC_LEADJETUE.cc \ MC_PDFS.cc \ MC_PHOTONINC.cc \ MC_PHOTONJETS.cc \ MC_PHOTONKTSPLITTINGS.cc \ MC_PHOTONS.cc \ MC_PRINTEVENT.cc \ MC_SUSY.cc \ MC_TTBAR.cc \ MC_VH2BB.cc \ MC_WINC.cc \ MC_WJETS.cc \ MC_WKTSPLITTINGS.cc \ MC_WPOL.cc \ MC_WWINC.cc \ MC_WWJETS.cc \ MC_WWKTSPLITTINGS.cc \ MC_XS.cc \ MC_ZINC.cc \ MC_ZJETS.cc \ MC_ZKTSPLITTINGS.cc \ MC_ZZINC.cc \ MC_ZZJETS.cc \ MC_ZZKTSPLITTINGS.cc if ENABLE_UNVALIDATED RivetMCAnalyses_la_SOURCES += \ MC_DIJET.cc \ MC_PHOTONJETUE.cc endif rivet-1.8.3/src/Analyses/MC_HKTSPLITTINGS.cc0000644000175000017500000000242312116077757016371 0ustar sunsun// -*- C++ -*- #include "Rivet/Analyses/MC_JetSplittings.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief MC validation analysis for higgs [-> tau tau] + jets events class MC_HKTSPLITTINGS : public MC_JetSplittings { public: /// Default constructor MC_HKTSPLITTINGS() : MC_JetSplittings("MC_HKTSPLITTINGS", 4, "Jets") { } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; ZFinder hfinder(fs, -3.5, 3.5, 25.0*GeV, TAU, 115.0*GeV, 125.0*GeV, 0.0, false, false); addProjection(hfinder, "Hfinder"); FastJets jetpro(hfinder.remainingFinalState(), FastJets::KT, 0.6); addProjection(jetpro, "Jets"); MC_JetSplittings::init(); } /// Do the analysis void analyze(const Event & e) { const ZFinder& hfinder = applyProjection(e, "Hfinder"); if (hfinder.bosons().size()!=1) { vetoEvent; } MC_JetSplittings::analyze(e); } /// Finalize void finalize() { MC_JetSplittings::finalize(); } //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_HKTSPLITTINGS); } rivet-1.8.3/src/Analyses/ATLAS_2012_CONF_2012_109.cc0000644000175000017500000003176712116077757017132 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Tools/ParticleIdUtils.hh" namespace Rivet { /// @author Peter Richardson class ATLAS_2012_CONF_2012_109 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_CONF_2012_109() : Analysis("ATLAS_2012_CONF_2012_109") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // Projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 20.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // Projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // Jet finder VetoedFinalState vfs; vfs.addVetoPairId(MUON); addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // All tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0),"cfs"); // Used for pTmiss (N.B. the real 'vfs' extends beyond 4.5 to |eta| = 4.9) addProjection(VisibleFinalState(-4.5,4.5),"vfs"); // Book histograms _count_A_tight = bookHistogram1D("count_A_tight" , 1, 0., 1.); _count_A_medium = bookHistogram1D("count_A_medium" , 1, 0., 1.); _count_A_loose = bookHistogram1D("count_A_loose" , 1, 0., 1.); _count_B_tight = bookHistogram1D("count_B_tight" , 1, 0., 1.); _count_B_medium = bookHistogram1D("count_B_medium" , 1, 0., 1.); _count_C_tight = bookHistogram1D("count_C_tight" , 1, 0., 1.); _count_C_medium = bookHistogram1D("count_C_medium" , 1, 0., 1.); _count_C_loose = bookHistogram1D("count_C_loose" , 1, 0., 1.); _count_D_tight = bookHistogram1D("count_D_tight" , 1, 0., 1.); _count_E_tight = bookHistogram1D("count_E_tight" , 1, 0., 1.); _count_E_medium = bookHistogram1D("count_E_medium" , 1, 0., 1.); _count_E_loose = bookHistogram1D("count_E_loose" , 1, 0., 1.); _hist_meff_A_medium = bookHistogram1D("meff_A_medium" , 40, 0., 4000.); _hist_meff_A_tight = bookHistogram1D("meff_A_tight" , 40, 0., 4000.); _hist_meff_B_medium = bookHistogram1D("meff_B_medium" , 40, 0., 4000.); _hist_meff_B_tight = bookHistogram1D("meff_B_tight" , 40, 0., 4000.); _hist_meff_C_medium = bookHistogram1D("meff_C_medium" , 40, 0., 4000.); _hist_meff_C_tight = bookHistogram1D("meff_C_tight" , 40, 0., 4000.); _hist_meff_D = bookHistogram1D("meff_D" , 40, 0., 4000.); _hist_meff_E_loose = bookHistogram1D("meff_E_loose" , 40, 0., 4000.); _hist_meff_E_medium = bookHistogram1D("meff_E_medium" , 40, 0., 4000.); _hist_meff_E_tight = bookHistogram1D("meff_E_tight" , 40, 0., 4000.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); Jets cand_jets; const Jets jets = applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV); foreach (const Jet& jet, jets) { if ( fabs( jet.momentum().eta() ) < 4.9 ) { cand_jets.push_back(jet); } } const ParticleVector cand_e = applyProjection(event, "elecs").particlesByPt(); // Muon isolation not mentioned in hep-exp 1109.6572 but assumed to still be applicable ParticleVector cand_mu; const ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); const ParticleVector muons = applyProjection(event, "muons").particlesByPt(); foreach (const Particle& mu, muons) { double pTinCone = -mu.momentum().pT(); foreach (const Particle& track, chg_tracks) { if ( deltaR(mu.momentum(),track.momentum()) <= 0.2 ) { pTinCone += track.momentum().pT(); } } if ( pTinCone < 1.8*GeV ) cand_mu.push_back(mu); } // Resolve jet-lepton overlap for jets with |eta| < 2.8 Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { if ( fabs( jet.momentum().eta() ) >= 2.8 ) continue; bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) recon_jets.push_back( jet ); } ParticleVector recon_e, recon_mu; foreach ( const Particle & e, cand_e ) { bool away = true; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } if ( away ) recon_e.push_back( e ); } foreach ( const Particle & mu, cand_mu ) { bool away = true; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } if ( away ) recon_mu.push_back( mu ); } // pTmiss // Based on all candidate electrons, muons and jets, plus everything else with |eta| < 4.5 // i.e. everything in our projection "vfs" plus the jets with |eta| > 4.5 ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } foreach ( const Jet& jet, cand_jets ) { if ( fabs( jet.momentum().eta() ) > 4.5 ) pTmiss -= jet.momentum(); } double eTmiss = pTmiss.pT(); // no electron pT> 20 or muons pT>10 if ( !recon_mu.empty() || !recon_e.empty() ) { MSG_DEBUG("Charged leptons left after selection"); vetoEvent; } if ( eTmiss <= 160 * GeV ) { MSG_DEBUG("Not enough eTmiss: " << eTmiss << " < 130"); vetoEvent; } // check the hardest two jets if ( recon_jets.size()<2 || recon_jets[0].momentum().pT() <= 130.0 * GeV || recon_jets[0].momentum().pT() <= 60.0 * GeV ) { MSG_DEBUG("No hard leading jet in " << recon_jets.size() << " jets"); vetoEvent; } // check the charged and EM fractions of the hard jets to avoid // photons for(unsigned int ix=0;ix<2;++ix) { // jets over 100 GeV if(recon_jets[ix].momentum().pT()<100. || recon_jets[ix].momentum().eta()>2.) continue; double fch(0.), fem(0.), eTotal(0.); foreach(const Particle & part, recon_jets[ix].particles()) { long id = abs(part.pdgId()); if(PID::threeCharge(id)!=0) fch += part.momentum().E(); if(id==PHOTON||id==EMINUS||id==PI0) fem += part.momentum().E(); } fch /= eTotal; fem /= eTotal; // reomve events with hard photon if(fch<0.02|| (fch<0.05&&fem>0.09)) vetoEvent; } // ==================== observables ==================== int Njets = 0; double min_dPhi_All = 999.999; double min_dPhi_2 = 999.999; double min_dPhi_3 = 999.999; double pTmiss_phi = pTmiss.phi(); foreach ( const Jet& jet, recon_jets ) { if ( jet.momentum().pT() < 40 * GeV ) continue; double dPhi = deltaPhi( pTmiss_phi, jet.momentum().phi()); if ( Njets < 2 ) min_dPhi_2 = min( min_dPhi_2, dPhi ); if ( Njets < 3 ) min_dPhi_3 = min( min_dPhi_3, dPhi ); min_dPhi_All = min( min_dPhi_All, dPhi ); ++Njets; } // inclusive meff double m_eff_inc = eTmiss; foreach ( const Jet& jet, recon_jets ) { double perp = jet.momentum().pT(); if(perp>40.) m_eff_inc += perp; } // region A double m_eff_Nj = eTmiss + recon_jets[0].momentum().pT() + recon_jets[1].momentum().pT(); if( min_dPhi_2 > 0.4 && eTmiss/m_eff_Nj > 0.3 ) { _hist_meff_A_tight ->fill(m_eff_inc,weight); if(eTmiss/m_eff_Nj > 0.4) _hist_meff_A_medium->fill(m_eff_inc,weight); if(m_eff_inc>1900.) _count_A_tight ->fill(0.5,weight); if(m_eff_inc>1300. && eTmiss/m_eff_Nj > 0.4) _count_A_medium->fill(0.5,weight); if(m_eff_inc>1300. && eTmiss/m_eff_Nj > 0.4) _count_A_loose ->fill(0.5,weight); } // for rest of regions 3 jets pT> 60 needed if(recon_jets.size()<3 || recon_jets[2].momentum().perp()<60.) vetoEvent; // region B m_eff_Nj += recon_jets[2].momentum().perp(); if( min_dPhi_3 > 0.4 && eTmiss/m_eff_Nj > 0.25 ) { _hist_meff_B_tight->fill(m_eff_inc,weight); if(eTmiss/m_eff_Nj > 0.3) _hist_meff_B_medium->fill(m_eff_inc,weight); if(m_eff_inc>1900.) _count_B_tight ->fill(0.5,weight); if(m_eff_inc>1300. && eTmiss/m_eff_Nj > 0.3) _count_B_medium->fill(0.5,weight); } // for rest of regions 4 jets pT> 60 needed if(recon_jets.size()<4 || recon_jets[3].momentum().perp()<60.) vetoEvent; // region C m_eff_Nj += recon_jets[3].momentum().perp(); if( min_dPhi_3 > 0.4 && min_dPhi_All > 0.2 && eTmiss/m_eff_Nj > 0.25 ) { _hist_meff_C_tight->fill(m_eff_inc,weight); if( eTmiss/m_eff_Nj > 0.3 ) _hist_meff_C_medium->fill(m_eff_inc,weight); if(m_eff_inc>1900.) _count_C_tight ->fill(0.5,weight); if(m_eff_inc>1300. && eTmiss/m_eff_Nj > 0.3) _count_C_medium->fill(0.5,weight); if(m_eff_inc>1000. && eTmiss/m_eff_Nj > 0.3) _count_C_loose ->fill(0.5,weight); } // for rest of regions 5 jets pT> 40 needed if(recon_jets.size()<5 || recon_jets[4].momentum().perp()<40.) vetoEvent; // region D m_eff_Nj += recon_jets[4].momentum().perp(); if( min_dPhi_3 > 0.4 && min_dPhi_All > 0.2 && eTmiss/m_eff_Nj > 0.15 ) { _hist_meff_D->fill(m_eff_inc,weight); if(m_eff_inc>1700.) _count_D_tight ->fill(0.5,weight); } // for rest of regions 6 jets pT> 40 needed if(recon_jets.size()<6 || recon_jets[5].momentum().perp()<40.) vetoEvent; // region E m_eff_Nj += recon_jets[5].momentum().perp(); if( min_dPhi_3 > 0.4 && min_dPhi_All > 0.2 && eTmiss/m_eff_Nj > 0.15 ) { _hist_meff_E_tight->fill(m_eff_inc,weight); if( eTmiss/m_eff_Nj > 0.25 ) _hist_meff_E_medium->fill(m_eff_inc,weight); if( eTmiss/m_eff_Nj > 0.3 ) _hist_meff_E_loose->fill(m_eff_inc,weight); if(m_eff_inc>1400.) _count_E_tight ->fill(0.5,weight); if(m_eff_inc>1300.&& eTmiss/m_eff_Nj > 0.25 ) _count_E_medium->fill(0.5,weight); if(m_eff_inc>1000.&& eTmiss/m_eff_Nj > 0.3 ) _count_E_loose ->fill(0.5,weight); } } void finalize() { double norm = crossSection()/femtobarn*5.8/sumOfWeights(); // these are number of events at 5.8fb^-1 per 100 GeV scale( _hist_meff_A_medium , 100. * norm ); scale( _hist_meff_A_tight , 100. * norm ); scale( _hist_meff_B_medium , 100. * norm ); scale( _hist_meff_B_tight , 100. * norm ); scale( _hist_meff_C_medium , 100. * norm ); scale( _hist_meff_C_tight , 100. * norm ); scale( _hist_meff_D , 100. * norm ); scale( _hist_meff_E_loose , 100. * norm ); scale( _hist_meff_E_medium , 100. * norm ); scale( _hist_meff_E_tight , 100. * norm ); // these are number of events at 5.8fb^-1 scale(_count_A_tight ,norm); scale(_count_A_medium ,norm); scale(_count_A_loose ,norm); scale(_count_B_tight ,norm); scale(_count_B_medium ,norm); scale(_count_C_tight ,norm); scale(_count_C_medium ,norm); scale(_count_C_loose ,norm); scale(_count_D_tight ,norm); scale(_count_E_tight ,norm); scale(_count_E_medium ,norm); scale(_count_E_loose ,norm); } //@} private: AIDA::IHistogram1D* _count_A_tight; AIDA::IHistogram1D* _count_A_medium; AIDA::IHistogram1D* _count_A_loose; AIDA::IHistogram1D* _count_B_tight; AIDA::IHistogram1D* _count_B_medium; AIDA::IHistogram1D* _count_C_tight; AIDA::IHistogram1D* _count_C_medium; AIDA::IHistogram1D* _count_C_loose; AIDA::IHistogram1D* _count_D_tight; AIDA::IHistogram1D* _count_E_tight; AIDA::IHistogram1D* _count_E_medium; AIDA::IHistogram1D* _count_E_loose; AIDA::IHistogram1D* _hist_meff_A_medium; AIDA::IHistogram1D* _hist_meff_A_tight; AIDA::IHistogram1D* _hist_meff_B_medium; AIDA::IHistogram1D* _hist_meff_B_tight; AIDA::IHistogram1D* _hist_meff_C_medium; AIDA::IHistogram1D* _hist_meff_C_tight; AIDA::IHistogram1D* _hist_meff_D; AIDA::IHistogram1D* _hist_meff_E_loose; AIDA::IHistogram1D* _hist_meff_E_medium; AIDA::IHistogram1D* _hist_meff_E_tight; }; // This global object acts as a hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_CONF_2012_109); } rivet-1.8.3/src/Analyses/UA5_1982_S875503.cc0000644000175000017500000000424212116077757015777 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/TriggerUA5.hh" namespace Rivet { /// @brief UA5 multiplicity and \f$ \eta \f$ distributions class UA5_1982_S875503 : public Analysis { public: /// Default constructor UA5_1982_S875503() : Analysis("UA5_1982_S875503") { _sumWTrig = 0; } /// @name Analysis methods //@{ /// Set up projections and book histos void init() { addProjection(TriggerUA5(), "Trigger"); addProjection(ChargedFinalState(-3.5, 3.5), "CFS"); // Book histos based on pp or ppbar beams if (beamIds().first == beamIds().second) { _hist_nch = bookHistogram1D(2,1,1); _hist_eta = bookHistogram1D(3,1,1); } else { _hist_nch = bookHistogram1D(2,1,2); _hist_eta = bookHistogram1D(4,1,1); } } void analyze(const Event& event) { // Trigger const TriggerUA5& trigger = applyProjection(event, "Trigger"); if (!trigger.nsdDecision()) vetoEvent; const double weight = event.weight(); _sumWTrig += weight; // Get tracks const ChargedFinalState& cfs = applyProjection(event, "CFS"); // Fill mean charged multiplicity histos _hist_nch->fill(_hist_nch->binMean(0), cfs.size()*weight); // Iterate over all tracks and fill eta histograms foreach (const Particle& p, cfs.particles()) { const double eta = fabs(p.momentum().pseudorapidity()); _hist_eta->fill(eta, weight); } } void finalize() { /// @todo Why the factor of 2 on Nch for ppbar? if (beamIds().first == beamIds().second) { scale(_hist_nch, 1.0/_sumWTrig); } else { scale(_hist_nch, 0.5/_sumWTrig); } scale(_hist_eta, 0.5/_sumWTrig); } //@} private: /// @name Counters //@{ double _sumWTrig; //@} /// @name Histogram collections //@{ AIDA::IHistogram1D* _hist_nch; AIDA::IHistogram1D* _hist_eta; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(UA5_1982_S875503); } rivet-1.8.3/src/Analyses/CMS_2011_S8950903.cc0000644000175000017500000000330212116077757016071 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { // CMS azimuthal decorrelations class CMS_2011_S8950903 : public Analysis { public: CMS_2011_S8950903() : Analysis("CMS_2011_S8950903") {} void init() { FinalState fs; FastJets akt(fs, FastJets::ANTIKT, 0.5); addProjection(akt, "antikT"); _h_deltaPhi.addHistogram(80., 110., bookHistogram1D(1, 1, 1)); _h_deltaPhi.addHistogram(110., 140., bookHistogram1D(2, 1, 1)); _h_deltaPhi.addHistogram(140., 200., bookHistogram1D(3, 1, 1)); _h_deltaPhi.addHistogram(200., 300., bookHistogram1D(4, 1, 1)); _h_deltaPhi.addHistogram(300., 7000., bookHistogram1D(5, 1, 1)); } void analyze(const Event & event) { const double weight = event.weight(); const Jets& jets = applyProjection(event, "antikT").jetsByPt(); if (jets.size() < 2) vetoEvent; if (fabs(jets[0].momentum().eta()) > 1.1 || jets[0].momentum().pT() < 80.) vetoEvent; if (fabs(jets[1].momentum().eta()) > 1.1 || jets[1].momentum().pT() < 30.) vetoEvent; double dphi = deltaPhi(jets[0].momentum(), jets[1].momentum().phi()); _h_deltaPhi.fill(jets[0].momentum().pT(), dphi, weight); } void finalize() { foreach (AIDA::IHistogram1D* histo, _h_deltaPhi.getHistograms()) { normalize(histo, 1.); } } private: BinnedHistogram _h_deltaPhi; }; // This global object acts as a hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2011_S8950903); } rivet-1.8.3/src/Analyses/DELPHI_1996_S3430090.cc0000644000175000017500000005135312116077757016433 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/Sphericity.hh" #include "Rivet/Projections/Thrust.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/ParisiTensor.hh" #include "Rivet/Projections/Hemispheres.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/UnstableFinalState.hh" namespace Rivet { /** * @brief DELPHI event shapes and identified particle spectra * @author Andy Buckley * @author Hendrik Hoeth * * This is the paper which was used for the original PROFESSOR MC tuning * study. It studies a wide range of e+ e- event shape variables, differential * jet rates in the Durham and JADE schemes, and incorporates identified * particle spectra, from other LEP analyses. * * @par Run conditions * * @arg LEP1 beam energy: \f$ \sqrt{s} = \f$ 91.2 GeV * @arg Run with generic QCD events. * @arg No \f$ p_\perp^\text{min} \f$ cutoff is required */ class DELPHI_1996_S3430090 : public Analysis { public: /// Constructor DELPHI_1996_S3430090() : Analysis("DELPHI_1996_S3430090") { _weightedTotalPartNum = 0.0; _passedCutWeightSum = 0.0; _passedCut3WeightSum = 0.0; _passedCut4WeightSum = 0.0; _passedCut5WeightSum = 0.0; } /// @name Analysis methods //@{ void init() { addProjection(Beam(), "Beams"); // Don't try to introduce a pT or eta cut here. It's all corrected // back. (See Section 2 of the paper.) const ChargedFinalState cfs; addProjection(cfs, "FS"); addProjection(UnstableFinalState(), "UFS"); addProjection(FastJets(cfs, FastJets::JADE, 0.7), "JadeJets"); addProjection(FastJets(cfs, FastJets::DURHAM, 0.7), "DurhamJets"); addProjection(Sphericity(cfs), "Sphericity"); addProjection(ParisiTensor(cfs), "Parisi"); const Thrust thrust(cfs); addProjection(thrust, "Thrust"); addProjection(Hemispheres(thrust), "Hemispheres"); _histPtTIn = bookHistogram1D(1, 1, 1); _histPtTOut = bookHistogram1D(2, 1, 1); _histPtSIn = bookHistogram1D(3, 1, 1); _histPtSOut = bookHistogram1D(4, 1, 1); _histRapidityT = bookHistogram1D(5, 1, 1); _histRapidityS = bookHistogram1D(6, 1, 1); _histScaledMom = bookHistogram1D(7, 1, 1); _histLogScaledMom = bookHistogram1D(8, 1, 1); _histPtTOutVsXp = bookProfile1D(9, 1, 1); _histPtVsXp = bookProfile1D(10, 1, 1); _hist1MinusT = bookHistogram1D(11, 1, 1); _histTMajor = bookHistogram1D(12, 1, 1); _histTMinor = bookHistogram1D(13, 1, 1); _histOblateness = bookHistogram1D(14, 1, 1); _histSphericity = bookHistogram1D(15, 1, 1); _histAplanarity = bookHistogram1D(16, 1, 1); _histPlanarity = bookHistogram1D(17, 1, 1); _histCParam = bookHistogram1D(18, 1, 1); _histDParam = bookHistogram1D(19, 1, 1); _histHemiMassH = bookHistogram1D(20, 1, 1); _histHemiMassL = bookHistogram1D(21, 1, 1); _histHemiMassD = bookHistogram1D(22, 1, 1); _histHemiBroadW = bookHistogram1D(23, 1, 1); _histHemiBroadN = bookHistogram1D(24, 1, 1); _histHemiBroadT = bookHistogram1D(25, 1, 1); _histHemiBroadD = bookHistogram1D(26, 1, 1); // Binned in y_cut _histDiffRate2Durham = bookHistogram1D(27, 1, 1); _histDiffRate2Jade = bookHistogram1D(28, 1, 1); _histDiffRate3Durham = bookHistogram1D(29, 1, 1); _histDiffRate3Jade = bookHistogram1D(30, 1, 1); _histDiffRate4Durham = bookHistogram1D(31, 1, 1); _histDiffRate4Jade = bookHistogram1D(32, 1, 1); // Binned in cos(chi) _histEEC = bookHistogram1D(33, 1, 1); _histAEEC = bookHistogram1D(34, 1, 1); _histMultiCharged = bookHistogram1D(35, 1, 1); _histMultiPiPlus = bookHistogram1D(36, 1, 1); _histMultiPi0 = bookHistogram1D(36, 1, 2); _histMultiKPlus = bookHistogram1D(36, 1, 3); _histMultiK0 = bookHistogram1D(36, 1, 4); _histMultiEta = bookHistogram1D(36, 1, 5); _histMultiEtaPrime = bookHistogram1D(36, 1, 6); _histMultiDPlus = bookHistogram1D(36, 1, 7); _histMultiD0 = bookHistogram1D(36, 1, 8); _histMultiBPlus0 = bookHistogram1D(36, 1, 9); _histMultiF0 = bookHistogram1D(37, 1, 1); _histMultiRho = bookHistogram1D(38, 1, 1); _histMultiKStar892Plus = bookHistogram1D(38, 1, 2); _histMultiKStar892_0 = bookHistogram1D(38, 1, 3); _histMultiPhi = bookHistogram1D(38, 1, 4); _histMultiDStar2010Plus = bookHistogram1D(38, 1, 5); _histMultiF2 = bookHistogram1D(39, 1, 1); _histMultiK2Star1430_0 = bookHistogram1D(39, 1, 2); _histMultiP = bookHistogram1D(40, 1, 1); _histMultiLambda0 = bookHistogram1D(40, 1, 2); _histMultiXiMinus = bookHistogram1D(40, 1, 3); _histMultiOmegaMinus = bookHistogram1D(40, 1, 4); _histMultiDeltaPlusPlus = bookHistogram1D(40, 1, 5); _histMultiSigma1385Plus = bookHistogram1D(40, 1, 6); _histMultiXi1530_0 = bookHistogram1D(40, 1, 7); _histMultiLambdaB0 = bookHistogram1D(40, 1, 8); } void analyze(const Event& e) { // First, veto on leptonic events by requiring at least 4 charged FS particles const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 2) { MSG_DEBUG("Failed leptonic event cut"); vetoEvent; } MSG_DEBUG("Passed leptonic event cut"); const double weight = e.weight(); _passedCutWeightSum += weight; _weightedTotalPartNum += numParticles * weight; // Get beams and average beam momentum const ParticlePair& beams = applyProjection(e, "Beams").beams(); const double meanBeamMom = ( beams.first.momentum().vector3().mod() + beams.second.momentum().vector3().mod() ) / 2.0; MSG_DEBUG("Avg beam momentum = " << meanBeamMom); // Thrusts MSG_DEBUG("Calculating thrust"); const Thrust& thrust = applyProjection(e, "Thrust"); _hist1MinusT->fill(1 - thrust.thrust(), weight); _histTMajor->fill(thrust.thrustMajor(), weight); _histTMinor->fill(thrust.thrustMinor(), weight); _histOblateness->fill(thrust.oblateness(), weight); // Jets const FastJets& durjet = applyProjection(e, "DurhamJets"); const FastJets& jadejet = applyProjection(e, "JadeJets"); if (numParticles >= 3) { _passedCut3WeightSum += weight; if (durjet.clusterSeq()) _histDiffRate2Durham->fill(durjet.clusterSeq()->exclusive_ymerge_max(2), weight); if (jadejet.clusterSeq()) _histDiffRate2Jade->fill(jadejet.clusterSeq()->exclusive_ymerge_max(2), weight); } if (numParticles >= 4) { _passedCut4WeightSum += weight; if (durjet.clusterSeq()) _histDiffRate3Durham->fill(durjet.clusterSeq()->exclusive_ymerge_max(3), weight); if (jadejet.clusterSeq()) _histDiffRate3Jade->fill(jadejet.clusterSeq()->exclusive_ymerge_max(3), weight); } if (numParticles >= 5) { _passedCut5WeightSum += weight; if (durjet.clusterSeq()) _histDiffRate4Durham->fill(durjet.clusterSeq()->exclusive_ymerge_max(4), weight); if (jadejet.clusterSeq()) _histDiffRate4Jade->fill(jadejet.clusterSeq()->exclusive_ymerge_max(4), weight); } // Sphericities MSG_DEBUG("Calculating sphericity"); const Sphericity& sphericity = applyProjection(e, "Sphericity"); _histSphericity->fill(sphericity.sphericity(), weight); _histAplanarity->fill(sphericity.aplanarity(), weight); _histPlanarity->fill(sphericity.planarity(), weight); // C & D params MSG_DEBUG("Calculating Parisi params"); const ParisiTensor& parisi = applyProjection(e, "Parisi"); _histCParam->fill(parisi.C(), weight); _histDParam->fill(parisi.D(), weight); // Hemispheres MSG_DEBUG("Calculating hemisphere variables"); const Hemispheres& hemi = applyProjection(e, "Hemispheres"); _histHemiMassH->fill(hemi.scaledM2high(), weight); _histHemiMassL->fill(hemi.scaledM2low(), weight); _histHemiMassD->fill(hemi.scaledM2diff(), weight); _histHemiBroadW->fill(hemi.Bmax(), weight); _histHemiBroadN->fill(hemi.Bmin(), weight); _histHemiBroadT->fill(hemi.Bsum(), weight); _histHemiBroadD->fill(hemi.Bdiff(), weight); // Iterate over all the charged final state particles. double Evis = 0.0; double Evis2 = 0.0; MSG_DEBUG("About to iterate over charged FS particles"); foreach (const Particle& p, fs.particles()) { // Get momentum and energy of each particle. const Vector3 mom3 = p.momentum().vector3(); const double energy = p.momentum().E(); Evis += energy; // Scaled momenta. const double mom = mom3.mod(); const double scaledMom = mom/meanBeamMom; const double logInvScaledMom = -std::log(scaledMom); _histLogScaledMom->fill(logInvScaledMom, weight); _histScaledMom->fill(scaledMom, weight); // Get momenta components w.r.t. thrust and sphericity. const double momT = dot(thrust.thrustAxis(), mom3); const double momS = dot(sphericity.sphericityAxis(), mom3); const double pTinT = dot(mom3, thrust.thrustMajorAxis()); const double pToutT = dot(mom3, thrust.thrustMinorAxis()); const double pTinS = dot(mom3, sphericity.sphericityMajorAxis()); const double pToutS = dot(mom3, sphericity.sphericityMinorAxis()); const double pT = sqrt(pow(pTinT, 2) + pow(pToutT, 2)); _histPtTIn->fill(fabs(pTinT/GeV), weight); _histPtTOut->fill(fabs(pToutT/GeV), weight); _histPtSIn->fill(fabs(pTinS/GeV), weight); _histPtSOut->fill(fabs(pToutS/GeV), weight); _histPtVsXp->fill(scaledMom, fabs(pT/GeV), weight); _histPtTOutVsXp->fill(scaledMom, fabs(pToutT/GeV), weight); // Calculate rapidities w.r.t. thrust and sphericity. const double rapidityT = 0.5 * std::log((energy + momT) / (energy - momT)); const double rapidityS = 0.5 * std::log((energy + momS) / (energy - momS)); _histRapidityT->fill(fabs(rapidityT), weight); _histRapidityS->fill(fabs(rapidityS), weight); MSG_TRACE(fabs(rapidityT) << " " << scaledMom/GeV); } Evis2 = Evis*Evis; // (A)EEC // Need iterators since second loop starts at current outer loop iterator, i.e. no "foreach" here! for (ParticleVector::const_iterator p_i = fs.particles().begin(); p_i != fs.particles().end(); ++p_i) { for (ParticleVector::const_iterator p_j = p_i; p_j != fs.particles().end(); ++p_j) { if (p_i == p_j) continue; const Vector3 mom3_i = p_i->momentum().vector3(); const Vector3 mom3_j = p_j->momentum().vector3(); const double energy_i = p_i->momentum().E(); const double energy_j = p_j->momentum().E(); const double cosij = dot(mom3_i.unit(), mom3_j.unit()); const double eec = (energy_i*energy_j) / Evis2; _histEEC->fill(cosij, eec*weight); _histAEEC->fill( cosij, eec*weight); _histAEEC->fill(-cosij, -eec*weight); } } _histMultiCharged->fill(_histMultiCharged->binMean(0), numParticles*weight); // Final state of unstable particles to get particle spectra const UnstableFinalState& ufs = applyProjection(e, "UFS"); foreach (const Particle& p, ufs.particles()) { int id = abs(p.pdgId()); switch (id) { case 211: _histMultiPiPlus->fill(_histMultiPiPlus->binMean(0), weight); break; case 111: _histMultiPi0->fill(_histMultiPi0->binMean(0), weight); break; case 321: _histMultiKPlus->fill(_histMultiKPlus->binMean(0), weight); break; case 130: case 310: _histMultiK0->fill(_histMultiK0->binMean(0), weight); break; case 221: _histMultiEta->fill(_histMultiEta->binMean(0), weight); break; case 331: _histMultiEtaPrime->fill(_histMultiEtaPrime->binMean(0), weight); break; case 411: _histMultiDPlus->fill(_histMultiDPlus->binMean(0), weight); break; case 421: _histMultiD0->fill(_histMultiD0->binMean(0), weight); break; case 511: case 521: case 531: _histMultiBPlus0->fill(_histMultiBPlus0->binMean(0), weight); break; case 9010221: _histMultiF0->fill(_histMultiF0->binMean(0), weight); break; case 113: _histMultiRho->fill(_histMultiRho->binMean(0), weight); break; case 323: _histMultiKStar892Plus->fill(_histMultiKStar892Plus->binMean(0), weight); break; case 313: _histMultiKStar892_0->fill(_histMultiKStar892_0->binMean(0), weight); break; case 333: _histMultiPhi->fill(_histMultiPhi->binMean(0), weight); break; case 413: _histMultiDStar2010Plus->fill(_histMultiDStar2010Plus->binMean(0), weight); break; case 225: _histMultiF2->fill(_histMultiF2->binMean(0), weight); break; case 315: _histMultiK2Star1430_0->fill(_histMultiK2Star1430_0->binMean(0), weight); break; case 2212: _histMultiP->fill(_histMultiP->binMean(0), weight); break; case 3122: _histMultiLambda0->fill(_histMultiLambda0->binMean(0), weight); break; case 3312: _histMultiXiMinus->fill(_histMultiXiMinus->binMean(0), weight); break; case 3334: _histMultiOmegaMinus->fill(_histMultiOmegaMinus->binMean(0), weight); break; case 2224: _histMultiDeltaPlusPlus->fill(_histMultiDeltaPlusPlus->binMean(0), weight); break; case 3114: _histMultiSigma1385Plus->fill(_histMultiSigma1385Plus->binMean(0), weight); break; case 3324: _histMultiXi1530_0->fill(_histMultiXi1530_0->binMean(0), weight); break; case 5122: _histMultiLambdaB0->fill(_histMultiLambdaB0->binMean(0), weight); break; } } } // Finalize void finalize() { // Normalize inclusive single particle distributions to the average number // of charged particles per event. const double avgNumParts = _weightedTotalPartNum / _passedCutWeightSum; normalize(_histPtTIn, avgNumParts); normalize(_histPtTOut, avgNumParts); normalize(_histPtSIn, avgNumParts); normalize(_histPtSOut, avgNumParts); normalize(_histRapidityT, avgNumParts); normalize(_histRapidityS, avgNumParts); normalize(_histLogScaledMom, avgNumParts); normalize(_histScaledMom, avgNumParts); scale(_histEEC, 1.0/_passedCutWeightSum); scale(_histAEEC, 1.0/_passedCutWeightSum); scale(_histMultiCharged, 1.0/_passedCutWeightSum); scale(_histMultiPiPlus, 1.0/_passedCutWeightSum); scale(_histMultiPi0, 1.0/_passedCutWeightSum); scale(_histMultiKPlus, 1.0/_passedCutWeightSum); scale(_histMultiK0, 1.0/_passedCutWeightSum); scale(_histMultiEta, 1.0/_passedCutWeightSum); scale(_histMultiEtaPrime, 1.0/_passedCutWeightSum); scale(_histMultiDPlus, 1.0/_passedCutWeightSum); scale(_histMultiD0, 1.0/_passedCutWeightSum); scale(_histMultiBPlus0, 1.0/_passedCutWeightSum); scale(_histMultiF0, 1.0/_passedCutWeightSum); scale(_histMultiRho, 1.0/_passedCutWeightSum); scale(_histMultiKStar892Plus, 1.0/_passedCutWeightSum); scale(_histMultiKStar892_0, 1.0/_passedCutWeightSum); scale(_histMultiPhi, 1.0/_passedCutWeightSum); scale(_histMultiDStar2010Plus, 1.0/_passedCutWeightSum); scale(_histMultiF2, 1.0/_passedCutWeightSum); scale(_histMultiK2Star1430_0, 1.0/_passedCutWeightSum); scale(_histMultiP, 1.0/_passedCutWeightSum); scale(_histMultiLambda0, 1.0/_passedCutWeightSum); scale(_histMultiXiMinus, 1.0/_passedCutWeightSum); scale(_histMultiOmegaMinus, 1.0/_passedCutWeightSum); scale(_histMultiDeltaPlusPlus, 1.0/_passedCutWeightSum); scale(_histMultiSigma1385Plus, 1.0/_passedCutWeightSum); scale(_histMultiXi1530_0, 1.0/_passedCutWeightSum); scale(_histMultiLambdaB0, 1.0/_passedCutWeightSum); scale(_hist1MinusT, 1.0/_passedCutWeightSum); scale(_histTMajor, 1.0/_passedCutWeightSum); scale(_histTMinor, 1.0/_passedCutWeightSum); scale(_histOblateness, 1.0/_passedCutWeightSum); scale(_histSphericity, 1.0/_passedCutWeightSum); scale(_histAplanarity, 1.0/_passedCutWeightSum); scale(_histPlanarity, 1.0/_passedCutWeightSum); scale(_histHemiMassD, 1.0/_passedCutWeightSum); scale(_histHemiMassH, 1.0/_passedCutWeightSum); scale(_histHemiMassL, 1.0/_passedCutWeightSum); scale(_histHemiBroadW, 1.0/_passedCutWeightSum); scale(_histHemiBroadN, 1.0/_passedCutWeightSum); scale(_histHemiBroadT, 1.0/_passedCutWeightSum); scale(_histHemiBroadD, 1.0/_passedCutWeightSum); scale(_histCParam, 1.0/_passedCutWeightSum); scale(_histDParam, 1.0/_passedCutWeightSum); scale(_histDiffRate2Durham, 1.0/_passedCut3WeightSum); scale(_histDiffRate2Jade, 1.0/_passedCut3WeightSum); scale(_histDiffRate3Durham, 1.0/_passedCut4WeightSum); scale(_histDiffRate3Jade, 1.0/_passedCut4WeightSum); scale(_histDiffRate4Durham, 1.0/_passedCut5WeightSum); scale(_histDiffRate4Jade, 1.0/_passedCut5WeightSum); } //@} private: /// Store the weighted sums of numbers of charged / charged+neutral /// particles - used to calculate average number of particles for the /// inclusive single particle distributions' normalisations. double _weightedTotalPartNum; /// @name Sums of weights past various cuts //@{ double _passedCutWeightSum; double _passedCut3WeightSum; double _passedCut4WeightSum; double _passedCut5WeightSum; //@} /// @name Histograms //@{ AIDA::IHistogram1D *_histPtTIn; AIDA::IHistogram1D *_histPtTOut; AIDA::IHistogram1D *_histPtSIn; AIDA::IHistogram1D *_histPtSOut; AIDA::IHistogram1D *_histRapidityT; AIDA::IHistogram1D *_histRapidityS; AIDA::IHistogram1D *_histScaledMom, *_histLogScaledMom; AIDA::IProfile1D *_histPtTOutVsXp, *_histPtVsXp; AIDA::IHistogram1D *_hist1MinusT; AIDA::IHistogram1D *_histTMajor; AIDA::IHistogram1D *_histTMinor; AIDA::IHistogram1D *_histOblateness; AIDA::IHistogram1D *_histSphericity; AIDA::IHistogram1D *_histAplanarity; AIDA::IHistogram1D *_histPlanarity; AIDA::IHistogram1D *_histCParam; AIDA::IHistogram1D *_histDParam; AIDA::IHistogram1D *_histHemiMassD; AIDA::IHistogram1D *_histHemiMassH; AIDA::IHistogram1D *_histHemiMassL; AIDA::IHistogram1D *_histHemiBroadW; AIDA::IHistogram1D *_histHemiBroadN; AIDA::IHistogram1D *_histHemiBroadT; AIDA::IHistogram1D *_histHemiBroadD; AIDA::IHistogram1D *_histDiffRate2Durham; AIDA::IHistogram1D *_histDiffRate2Jade; AIDA::IHistogram1D *_histDiffRate3Durham; AIDA::IHistogram1D *_histDiffRate3Jade; AIDA::IHistogram1D *_histDiffRate4Durham; AIDA::IHistogram1D *_histDiffRate4Jade; AIDA::IHistogram1D *_histEEC, *_histAEEC; AIDA::IHistogram1D *_histMultiCharged; AIDA::IHistogram1D *_histMultiPiPlus; AIDA::IHistogram1D *_histMultiPi0; AIDA::IHistogram1D *_histMultiKPlus; AIDA::IHistogram1D *_histMultiK0; AIDA::IHistogram1D *_histMultiEta; AIDA::IHistogram1D *_histMultiEtaPrime; AIDA::IHistogram1D *_histMultiDPlus; AIDA::IHistogram1D *_histMultiD0; AIDA::IHistogram1D *_histMultiBPlus0; AIDA::IHistogram1D *_histMultiF0; AIDA::IHistogram1D *_histMultiRho; AIDA::IHistogram1D *_histMultiKStar892Plus; AIDA::IHistogram1D *_histMultiKStar892_0; AIDA::IHistogram1D *_histMultiPhi; AIDA::IHistogram1D *_histMultiDStar2010Plus; AIDA::IHistogram1D *_histMultiF2; AIDA::IHistogram1D *_histMultiK2Star1430_0; AIDA::IHistogram1D *_histMultiP; AIDA::IHistogram1D *_histMultiLambda0; AIDA::IHistogram1D *_histMultiXiMinus; AIDA::IHistogram1D *_histMultiOmegaMinus; AIDA::IHistogram1D *_histMultiDeltaPlusPlus; AIDA::IHistogram1D *_histMultiSigma1385Plus; AIDA::IHistogram1D *_histMultiXi1530_0; AIDA::IHistogram1D *_histMultiLambdaB0; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(DELPHI_1996_S3430090); } rivet-1.8.3/src/Analyses/CDF_2008_NOTE_9351.cc0000644000175000017500000002003012116077757016310 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/ChargedLeptons.hh" namespace Rivet { /// @brief CDF Run II underlying event in Drell-Yan /// @author Hendrik Hoeth /// /// Measurement of the underlying event in Drell-Yan /// \f$ Z/\gamma^* \to e^+ e^- \f$ and /// \f$ Z/\gamma^* \to \mu^+ \mu^- \f$ events. The reconstructed /// Z defines the \f$ \phi \f$ orientation. A Z mass window cut is applied. /// /// @par Run conditions /// /// @arg \f$ \sqrt{s} = \f$ 1960 GeV /// @arg produce Drell-Yan events /// @arg Set particles with c*tau > 10 mm stable /// @arg Z decay mode: Z -> e+e- and Z -> mu+mu- /// @arg gamma decay mode: gamma -> e+e- and gamma -> mu+mu- /// @arg minimum invariant mass of the fermion pair coming from the Z/gamma: 70 GeV class CDF_2008_NOTE_9351 : public Analysis { public: /// Constructor CDF_2008_NOTE_9351() : Analysis("CDF_2008_NOTE_9351") { } /// @name Analysis methods //@{ void init() { // Set up projections const ChargedFinalState cfs(-1.0, 1.0, 0.5*GeV); const ChargedFinalState clfs(-1.0, 1.0, 20*GeV); addProjection(cfs, "FS"); addProjection(ChargedLeptons(clfs), "CL"); // Book histograms _hist_tnchg = bookProfile1D( 1, 1, 1); _hist_pnchg = bookProfile1D( 2, 1, 1); _hist_pmaxnchg = bookProfile1D( 3, 1, 1); _hist_pminnchg = bookProfile1D( 4, 1, 1); _hist_pdifnchg = bookProfile1D( 5, 1, 1); _hist_anchg = bookProfile1D( 6, 1, 1); _hist_tcptsum = bookProfile1D( 7, 1, 1); _hist_pcptsum = bookProfile1D( 8, 1, 1); _hist_pmaxcptsum = bookProfile1D( 9, 1, 1); _hist_pmincptsum = bookProfile1D(10, 1, 1); _hist_pdifcptsum = bookProfile1D(11, 1, 1); _hist_acptsum = bookProfile1D(12, 1, 1); _hist_tcptave = bookProfile1D(13, 1, 1); _hist_pcptave = bookProfile1D(14, 1, 1); _hist_acptave = bookProfile1D(15, 1, 1); _hist_tcptmax = bookProfile1D(16, 1, 1); _hist_pcptmax = bookProfile1D(17, 1, 1); _hist_acptmax = bookProfile1D(18, 1, 1); _hist_zptvsnchg = bookProfile1D(19, 1, 1); _hist_cptavevsnchg = bookProfile1D(20, 1, 1); _hist_cptavevsnchgsmallzpt = bookProfile1D(21, 1, 1); } /// Do the analysis void analyze(const Event& e) { const FinalState& fs = applyProjection(e, "FS"); const size_t numParticles = fs.particles().size(); // Even if we only generate hadronic events, we still need a cut on numCharged >= 2. if (numParticles < 1) { MSG_DEBUG("Failed multiplicity cut"); vetoEvent; } // Get the event weight const double weight = e.weight(); // Get the leptons const ParticleVector& leptons = applyProjection(e, "CL").chargedLeptons(); // We want exactly two leptons of the same flavour. MSG_DEBUG("lepton multiplicity = " << leptons.size()); if (leptons.size() != 2 || leptons[0].pdgId() != -leptons[1].pdgId() ) vetoEvent; // Lepton pT > 20 GeV if (leptons[0].momentum().pT()/GeV <= 20 || leptons[1].momentum().pT()/GeV <= 20) vetoEvent; // Lepton pair should have an invariant mass between 70 and 110 and |eta| < 6 const FourMomentum dilepton = leptons[0].momentum() + leptons[1].momentum(); if (!inRange(dilepton.mass()/GeV, 70., 110.) || fabs(dilepton.eta()) >= 6) vetoEvent; MSG_DEBUG("Dilepton mass = " << mass(dilepton)/GeV << " GeV"); MSG_DEBUG("Dilepton pT = " << pT(dilepton)/GeV << " GeV"); // Calculate the observables size_t numToward(0), numAway(0); long int numTrans1(0), numTrans2(0); double ptSumToward(0.0), ptSumTrans1(0.0), ptSumTrans2(0.0), ptSumAway(0.0); double ptMaxToward(0.0), ptMaxTrans1(0.0), ptMaxTrans2(0.0), ptMaxAway(0.0); const double phiZ = azimuthalAngle(dilepton); const double pTZ = pT(dilepton); /// @todo Replace with foreach for (ParticleVector::const_iterator p = fs.particles().begin(); p != fs.particles().end(); ++p) { // Don't use the leptons /// @todo Replace with PID::isLepton if (abs(p->pdgId()) < 20) continue; const double dPhi = deltaPhi(p->momentum().phi(), phiZ); const double pT = p->momentum().pT(); double rotatedphi = p->momentum().phi() - phiZ; while (rotatedphi < 0) rotatedphi += 2*PI; if (dPhi < PI/3.0) { ptSumToward += pT; ++numToward; if (pT > ptMaxToward) ptMaxToward = pT; } else if (dPhi < 2*PI/3.0) { if (rotatedphi <= PI) { ptSumTrans1 += pT; ++numTrans1; if (pT > ptMaxTrans1) ptMaxTrans1 = pT; } else { ptSumTrans2 += pT; ++numTrans2; if (pT > ptMaxTrans2) ptMaxTrans2 = pT; } } else { ptSumAway += pT; ++numAway; if (pT > ptMaxAway) ptMaxAway = pT; } // We need to subtract the two leptons from the number of particles to get the correct multiplicity _hist_cptavevsnchg->fill(numParticles-2, pT, weight); if (pTZ < 10) _hist_cptavevsnchgsmallzpt->fill(numParticles-2, pT, weight); } // Fill the histograms _hist_tnchg->fill(pTZ, numToward/(4*PI/3), weight); _hist_pnchg->fill(pTZ, (numTrans1+numTrans2)/(4*PI/3), weight); _hist_pmaxnchg->fill(pTZ, (numTrans1>numTrans2 ? numTrans1 : numTrans2)/(2*PI/3), weight); _hist_pminnchg->fill(pTZ, (numTrans1fill(pTZ, abs(numTrans1-numTrans2)/(2*PI/3), weight); _hist_anchg->fill(pTZ, numAway/(4*PI/3), weight); _hist_tcptsum->fill(pTZ, ptSumToward/(4*PI/3), weight); _hist_pcptsum->fill(pTZ, (ptSumTrans1+ptSumTrans2)/(4*PI/3), weight); _hist_pmaxcptsum->fill(pTZ, (ptSumTrans1>ptSumTrans2 ? ptSumTrans1 : ptSumTrans2)/(2*PI/3), weight); _hist_pmincptsum->fill(pTZ, (ptSumTrans1fill(pTZ, fabs(ptSumTrans1-ptSumTrans2)/(2*PI/3), weight); _hist_acptsum->fill(pTZ, ptSumAway/(4*PI/3), weight); if (numToward > 0) { _hist_tcptave->fill(pTZ, ptSumToward/numToward, weight); _hist_tcptmax->fill(pTZ, ptMaxToward, weight); } if ((numTrans1+numTrans2) > 0) { _hist_pcptave->fill(pTZ, (ptSumTrans1+ptSumTrans2)/(numTrans1+numTrans2), weight); _hist_pcptmax->fill(pTZ, (ptMaxTrans1 > ptMaxTrans2 ? ptMaxTrans1 : ptMaxTrans2), weight); } if (numAway > 0) { _hist_acptave->fill(pTZ, ptSumAway/numAway, weight); _hist_acptmax->fill(pTZ, ptMaxAway, weight); } // We need to subtract the two leptons from the number of particles to get the correct multiplicity _hist_zptvsnchg->fill(numParticles-2, pTZ, weight); } void finalize() { // } //@} private: AIDA::IProfile1D *_hist_tnchg; AIDA::IProfile1D *_hist_pnchg; AIDA::IProfile1D *_hist_pmaxnchg; AIDA::IProfile1D *_hist_pminnchg; AIDA::IProfile1D *_hist_pdifnchg; AIDA::IProfile1D *_hist_anchg; AIDA::IProfile1D *_hist_tcptsum; AIDA::IProfile1D *_hist_pcptsum; AIDA::IProfile1D *_hist_pmaxcptsum; AIDA::IProfile1D *_hist_pmincptsum; AIDA::IProfile1D *_hist_pdifcptsum; AIDA::IProfile1D *_hist_acptsum; AIDA::IProfile1D *_hist_tcptave; AIDA::IProfile1D *_hist_pcptave; AIDA::IProfile1D *_hist_acptave; AIDA::IProfile1D *_hist_tcptmax; AIDA::IProfile1D *_hist_pcptmax; AIDA::IProfile1D *_hist_acptmax; AIDA::IProfile1D *_hist_zptvsnchg; AIDA::IProfile1D *_hist_cptavevsnchg; AIDA::IProfile1D *_hist_cptavevsnchgsmallzpt; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(CDF_2008_NOTE_9351); } rivet-1.8.3/src/Analyses/JADE_1998_S3612880.cc0000644000175000017500000000740012116077757016176 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/Thrust.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/Hemispheres.hh" #include "Rivet/Projections/ChargedFinalState.hh" /// @todo Include more projections as required, e.g. ChargedFinalState, FastJets, ZFinder... namespace Rivet { class JADE_1998_S3612880 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor JADE_1998_S3612880() : Analysis("JADE_1998_S3612880") { /// @todo Set whether your finalize method needs the generator cross section } /// Book histograms and initialise projections before the run void init() { const ChargedFinalState cfs(-MAXRAPIDITY, MAXRAPIDITY, 0.1/GeV); addProjection(cfs, "CFS"); addProjection(FastJets(cfs, FastJets::DURHAM, 0.7), "DurhamJets"); // Thrust const Thrust thrust(cfs); addProjection(thrust, "Thrust"); addProjection(Hemispheres(thrust), "Hemispheres"); // Histos int offset = 0; switch (int(sqrtS()/GeV)) { case 44: offset = 0; _h_thrust = bookHistogram1D( 2+offset, 1, 1); _h_MH = bookHistogram1D( 3 + offset, 1, 1); _h_BT = bookHistogram1D( 4 + offset, 1, 1); _h_BW = bookHistogram1D( 5 + offset, 1, 1); _h_y23 = bookHistogram1D(10, 1, 1); break; case 35: offset = 4; _h_thrust = bookHistogram1D( 2+offset, 1, 1); _h_MH = bookHistogram1D( 3 + offset, 1, 1); _h_BT = bookHistogram1D( 4 + offset, 1, 1); _h_BW = bookHistogram1D( 5 + offset, 1, 1); _h_y23 = bookHistogram1D(11, 1, 1); break; case 22: _h_y23 = bookHistogram1D(12, 1, 1); break; } } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); const ChargedFinalState& cfs = applyProjection(event, "CFS"); // JADE hadronic event selection TODO: move this into a trigger definition if (cfs.particles().size() < 3 ) { vetoEvent; } const Thrust& thrust = applyProjection(event, "Thrust"); const Vector3 & thrustAxis = thrust.thrustAxis (); double theta = thrustAxis.theta(); if ( fabs(cos(theta)) >= 0.8 ) { MSG_DEBUG("Failed thrust angle cut: " << fabs(cos(theta))); vetoEvent; } // TODO Evis, pmiss, pbal const Hemispheres& hemi = applyProjection(event, "Hemispheres"); const FastJets& durjet = applyProjection(event, "DurhamJets"); double y23 = durjet.clusterSeq()->exclusive_ymerge_max(2); // Make sure we don't run into a segfault by trying to fill non-existing histos int s = int(sqrtS()/GeV); if (s == 44 || s == 35) { _h_thrust->fill(1. - thrust.thrust(), weight); _h_MH->fill(sqrt(hemi.scaledM2high()), weight); _h_BT->fill(hemi.Bsum(), weight); _h_BW->fill(hemi.Bmax(), weight); } _h_y23->fill(y23, weight); } /// Normalise histograms etc., after the run void finalize() { // Make sure we don't try to normalise non-existing histos int s = int(sqrtS()/GeV); if (s == 44 || s == 35) { normalize(_h_thrust); normalize(_h_MH); normalize(_h_BT); normalize(_h_BW); } normalize(_h_y23); } //@} private: AIDA::IHistogram1D *_h_thrust; AIDA::IHistogram1D *_h_MH; AIDA::IHistogram1D *_h_BT; AIDA::IHistogram1D *_h_BW; AIDA::IHistogram1D *_h_y23; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(JADE_1998_S3612880); } rivet-1.8.3/src/Analyses/LHCB_2012_I1119400.cc0000644000175000017500000004556512116077757016145 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "LWH/Histogram1D.h" #include "Rivet/Math/MathUtils.hh" #include "Rivet/Math/Constants.hh" #include "HepMC/GenEvent.h" #include "HepMC/GenParticle.h" #include "HepMC/GenVertex.h" #include "HepMC/SimpleVector.h" #include #include #include #include #include #include namespace Rivet { class LHCB_2012_I1119400 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor LHCB_2012_I1119400() : Analysis("LHCB_2012_I1119400"), _p_min(5.0), _pt_min(0.0),_pt1_edge(0.8), _pt2_edge(1.2), _eta_nbins(4), _eta_min(2.5), _eta_max(4.5) { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { fillMap(_partLftMap); int id_shift = 0; if (fuzzyEquals(sqrtS(), 7*TeV)) id_shift = 1; // define ratios if second pdgid in pair is -1, it means that is a antiparticle/particle ratio _ratiotypes["pbarp"] = make_pair(2212, -1); _ratiotypes_hepdataid["pbarp"] = 1 + id_shift; _ratiotypes["kminuskplus"] = make_pair(321, -1); _ratiotypes_hepdataid["kminuskplus"] = 3 + id_shift; _ratiotypes["piminuspiplus"] = make_pair(211, -1); _ratiotypes_hepdataid["piminuspiplus"] = 5 + id_shift; _ratiotypes["pk"] = make_pair(2212, 321); _ratiotypes_hepdataid["pk"] = 11 + id_shift; _ratiotypes["ppi"] = make_pair(2212, 211); _ratiotypes_hepdataid["ppi"] = 7 + id_shift; _ratiotypes["kpi"] = make_pair(321, 211); _ratiotypes_hepdataid["kpi"] = 9 + id_shift; std::map >::iterator it; // booking histograms for (it=_ratiotypes.begin(); it!=_ratiotypes.end(); it++) { _h_ratio_lowpt[it->first] = new LWH::Histogram1D(_eta_nbins-1, _eta_min+0.5, _eta_max); _h_ratio_midpt[it->first] = new LWH::Histogram1D(_eta_nbins, _eta_min, _eta_max); _h_ratio_highpt[it->first] = new LWH::Histogram1D(_eta_nbins, _eta_min, _eta_max); _h_num_lowpt[it->first] = new LWH::Histogram1D(_eta_nbins-1, _eta_min+0.5, _eta_max); _h_num_midpt[it->first] = new LWH::Histogram1D(_eta_nbins, _eta_min, _eta_max); _h_num_highpt[it->first] = new LWH::Histogram1D(_eta_nbins, _eta_min, _eta_max); _h_den_lowpt[it->first] = new LWH::Histogram1D(_eta_nbins-1, _eta_min+0.5, _eta_max); _h_den_midpt[it->first] = new LWH::Histogram1D(_eta_nbins, _eta_min, _eta_max); _h_den_highpt[it->first] = new LWH::Histogram1D(_eta_nbins, _eta_min, _eta_max); } addProjection(ChargedFinalState(_eta_min, _eta_max, _pt_min*GeV), "CFS"); } // Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); const ChargedFinalState& cfs = applyProjection(event, "CFS"); foreach (const Particle& p, cfs.particles()) { int id = p.pdgId(); // continue if particle not a proton, a kaon or a pion if ( !( (abs(id) == 211) || (abs(id) == 321) || (abs(id) == 2212))) { continue; } // cut in momentum const FourMomentum& qmom = p.momentum(); if (qmom.p().mod() < _p_min) continue; // Lifetime cut: ctau sum of all particle ancestors < 10^-9 m according to the paper (see eq. 5) const double MAX_CTAU = 1.0e-9; // [m] double ancestor_lftsum = getMotherLifeTimeSum(p); if ( (ancestor_lftsum < 0.0) || (ancestor_lftsum > MAX_CTAU) ) continue; double eta = qmom.eta(); double pT = qmom.pT(); std::map >::iterator it; for (it=_ratiotypes.begin(); it!=_ratiotypes.end(); it++) { // check what type of ratio is if ((it->second.second)==-1) { // check ptbin if (pT < _pt1_edge) { // filling histos for numerator and denominator if (id == -abs(it->second.first)) _h_num_lowpt[it->first]->fill(eta, weight); if (id == abs(it->second.first)) _h_den_lowpt[it->first]->fill(eta, weight); } else if (pT < _pt2_edge) { // filling histos for numerator and denominator if (id == -abs(it->second.first)) _h_num_midpt[it->first]->fill(eta, weight); if (id == abs(it->second.first)) _h_den_midpt[it->first]->fill(eta, weight); } else { // filling histos for numerator and denominator if (id == -abs(it->second.first)) _h_num_highpt[it->first]->fill(eta, weight); if (id == abs(it->second.first)) _h_den_highpt[it->first]->fill(eta, weight); } } else { // check what type of ratio is if (pT < _pt1_edge) { // filling histos for numerator and denominator if (abs(id) == abs(it->second.first)) _h_num_lowpt[it->first]->fill(eta, weight); if (abs(id) == abs(it->second.second)) _h_den_lowpt[it->first]->fill(eta, weight); } else if (pT < _pt2_edge) { // filling histos for numerator and denominator if (abs(id) == abs(it->second.first)) _h_num_midpt[it->first]->fill(eta, weight); if (abs(id) == abs(it->second.second)) _h_den_midpt[it->first]->fill(eta, weight); } else { // filling histos for numerator and denominator if (abs(id) == abs(it->second.first)) _h_num_highpt[it->first]->fill(eta, weight); if (abs(id) == abs(it->second.second)) _h_den_highpt[it->first]->fill(eta, weight); } } } } } // Generate the ratio histograms void finalize() { // needed to determine AIDA to save the file! tree().mkdirs(histoDir()); std::map >::iterator it; // booking histograms for (it=_ratiotypes.begin(); it!=_ratiotypes.end(); it++) { int dsId=_ratiotypes_hepdataid[it->first]; histogramFactory().divide(histoPath(dsId, 1, 1), *(_h_num_lowpt[it->first]), *(_h_den_lowpt[it->first])); histogramFactory().divide(histoPath(dsId, 1, 2), *(_h_num_midpt[it->first]), *(_h_den_midpt[it->first])); histogramFactory().divide(histoPath(dsId, 1, 3), *(_h_num_highpt[it->first]), *(_h_den_highpt[it->first])); } } //@} private: // Get particle lifetime from hardcoded data double getLifeTime(int pid) { pid = abs(pid); double lft = -1.0; map::iterator pPartLft = _partLftMap.find(pid); // search stable particle list if (pPartLft == _partLftMap.end()) { if (pid <= 100) return 0.0; for (size_t i=0; i < sizeof(_stablePDGIds)/sizeof(unsigned int); i++) { if (pid == _stablePDGIds[i]) { lft = 0.0; break; } } } else { lft = (*pPartLft).second; } if (lft < 0.0 && PID::isHadron(pid)) { MSG_ERROR("Could not determine lifetime for particle with PID " << pid << "... This will be considered unprompt!"); } return lft; } // Data members like post-cuts event weight counters go here const double getMotherLifeTimeSum(const Particle& p) { if ( !p.hasGenParticle() ) return -1.; double lftSum = 0.; double plft = 0.; const GenParticle* part = &(p.genParticle()); GenVertex* ivtx = part->production_vertex(); while(ivtx) { if (ivtx->particles_in_size() < 1) { lftSum = -1.; break; }; const HepMC::GenVertex::particles_in_const_iterator iPart_invtx = ivtx->particles_in_const_begin(); part = (*iPart_invtx); if ( !(part) ) { lftSum = -1.; break; }; ivtx = part->production_vertex(); if ( (part->pdg_id() == 2212) || !(ivtx) ) break; // reached beam plft = getLifeTime(part->pdg_id()); if (plft < 0.) { lftSum = -1.; break; }; lftSum += plft; }; return (lftSum * c_light); } /// @name Private variables // Momentum threshold double _p_min; // The edges of the intervals of transversal momentum double _pt_min; double _pt1_edge; double _pt2_edge; // The limits of the pseudorapidity window int _eta_nbins; double _eta_min; double _eta_max; // Map between PDG id and particle lifetimes in seconds std::map _partLftMap; // Set of PDG Ids for stable particles (PDG Id <= 100 are considered stable) static const int _stablePDGIds[205]; // Define histograms // ratio std::map _h_ratio_lowpt; std::map _h_ratio_midpt; std::map _h_ratio_highpt; // numerator std::map _h_num_lowpt; std::map _h_num_midpt; std::map _h_num_highpt; // denominator std::map _h_den_lowpt; std::map _h_den_midpt; std::map _h_den_highpt; // Map of ratios and IDs of numerator and denominator std::map > _ratiotypes; std::map _ratiotypes_hepdataid; // Fill the PDG Id to Lifetime[seconds] map // Data was extracted from LHCb Particle Table through LHCb::ParticlePropertySvc bool fillMap(map &m) { m[6] = 4.707703E-25; m[11] = 1.E+16; m[12] = 1.E+16; m[13] = 2.197019E-06; m[14] = 1.E+16; m[15] = 2.906E-13; m[16] = 1.E+16; m[22] = 1.E+16; m[23] = 2.637914E-25; m[24] = 3.075758E-25; m[25] = 9.4E-26; m[35] = 9.4E-26; m[36] = 9.4E-26; m[37] = 9.4E-26; m[84] = 3.335641E-13; m[85] = 1.290893E-12; m[111] = 8.4E-17; m[113] = 4.405704E-24; m[115] = 6.151516E-24; m[117] = 4.088275E-24; m[119] = 2.102914E-24; m[130] = 5.116E-08; m[150] = 1.525E-12; m[211] = 2.6033E-08; m[213] = 4.405704E-24; m[215] = 6.151516E-24; m[217] = 4.088275E-24; m[219] = 2.102914E-24; m[221] = 5.063171E-19; m[223] = 7.752794E-23; m[225] = 3.555982E-24; m[227] = 3.91793E-24; m[229] = 2.777267E-24; m[310] = 8.953E-11; m[313] = 1.308573E-23; m[315] = 6.038644E-24; m[317] = 4.139699E-24; m[319] = 3.324304E-24; m[321] = 1.238E-08; m[323] = 1.295693E-23; m[325] = 6.682357E-24; m[327] = 4.139699E-24; m[329] = 3.324304E-24; m[331] = 3.210791E-21; m[333] = 1.545099E-22; m[335] = 9.016605E-24; m[337] = 7.565657E-24; m[350] = 1.407125E-12; m[411] = 1.04E-12; m[413] = 6.856377E-21; m[415] = 1.778952E-23; m[421] = 4.101E-13; m[423] = 1.000003E-19; m[425] = 1.530726E-23; m[431] = 5.E-13; m[433] = 1.000003E-19; m[435] = 3.291061E-23; m[441] = 2.465214E-23; m[443] = 7.062363E-21; m[445] = 3.242425E-22; m[510] = 1.525E-12; m[511] = 1.525E-12; m[513] = 1.000019E-19; m[515] = 1.31E-23; m[521] = 1.638E-12; m[523] = 1.000019E-19; m[525] = 1.31E-23; m[530] = 1.536875E-12; m[531] = 1.472E-12; m[533] = 1.E-19; m[535] = 1.31E-23; m[541] = 4.5E-13; m[553] = 1.218911E-20; m[1112] = 4.539394E-24; m[1114] = 5.578069E-24; m[1116] = 1.994582E-24; m[1118] = 2.269697E-24; m[1212] = 4.539394E-24; m[1214] = 5.723584E-24; m[1216] = 1.994582E-24; m[1218] = 1.316424E-24; m[2112] = 8.857E+02; m[2114] = 5.578069E-24; m[2116] = 4.388081E-24; m[2118] = 2.269697E-24; m[2122] = 4.539394E-24; m[2124] = 5.723584E-24; m[2126] = 1.994582E-24; m[2128] = 1.316424E-24; m[2212] = 1.E+16; m[2214] = 5.578069E-24; m[2216] = 4.388081E-24; m[2218] = 2.269697E-24; m[2222] = 4.539394E-24; m[2224] = 5.578069E-24; m[2226] = 1.994582E-24; m[2228] = 2.269697E-24; m[3112] = 1.479E-10; m[3114] = 1.670589E-23; m[3116] = 5.485102E-24; m[3118] = 3.656734E-24; m[3122] = 2.631E-10; m[3124] = 4.219309E-23; m[3126] = 8.227653E-24; m[3128] = 3.291061E-24; m[3212] = 7.4E-20; m[3214] = 1.828367E-23; m[3216] = 5.485102E-24; m[3218] = 3.656734E-24; m[3222] = 8.018E-11; m[3224] = 1.838582E-23; m[3226] = 5.485102E-24; m[3228] = 3.656734E-24; m[3312] = 1.639E-10; m[3314] = 6.648608E-23; m[3322] = 2.9E-10; m[3324] = 7.233101E-23; m[3334] = 8.21E-11; m[4112] = 2.991874E-22; m[4114] = 4.088274E-23; m[4122] = 2.E-13; m[4132] = 1.12E-13; m[4212] = 3.999999E-22; m[4214] = 3.291061E-22; m[4222] = 2.951624E-22; m[4224] = 4.417531E-23; m[4232] = 4.42E-13; m[4332] = 6.9E-14; m[4412] = 3.335641E-13; m[4422] = 3.335641E-13; m[4432] = 3.335641E-13; m[5112] = 1.E-19; m[5122] = 1.38E-12; m[5132] = 1.42E-12; m[5142] = 1.290893E-12; m[5212] = 1.E-19; m[5222] = 1.E-19; m[5232] = 1.42E-12; m[5242] = 1.290893E-12; m[5312] = 1.E-19; m[5322] = 1.E-19; m[5332] = 1.55E-12; m[5342] = 1.290893E-12; m[5442] = 1.290893E-12; m[5512] = 1.290893E-12; m[5522] = 1.290893E-12; m[5532] = 1.290893E-12; m[5542] = 1.290893E-12; m[10111] = 2.48382E-24; m[10113] = 4.635297E-24; m[10115] = 2.54136E-24; m[10211] = 2.48382E-24; m[10213] = 4.635297E-24; m[10215] = 2.54136E-24; m[10223] = 1.828367E-24; m[10225] = 3.636531E-24; m[10311] = 2.437823E-24; m[10313] = 7.313469E-24; m[10315] = 3.538775E-24; m[10321] = 2.437823E-24; m[10323] = 7.313469E-24; m[10325] = 3.538775E-24; m[10331] = 4.804469E-24; m[10411] = 4.38E-24; m[10413] = 3.29E-23; m[10421] = 4.38E-24; m[10423] = 3.22653E-23; m[10431] = 6.5821E-22; m[10433] = 6.5821E-22; m[10441] = 6.453061E-23; m[10511] = 4.39E-24; m[10513] = 1.65E-23; m[10521] = 4.39E-24; m[10523] = 1.65E-23; m[10531] = 4.39E-24; m[10533] = 1.65E-23; m[11114] = 2.194041E-24; m[11116] = 1.828367E-24; m[11212] = 1.880606E-24; m[11216] = 1.828367E-24; m[12112] = 2.194041E-24; m[12114] = 2.194041E-24; m[12116] = 5.063171E-24; m[12126] = 1.828367E-24; m[12212] = 2.194041E-24; m[12214] = 2.194041E-24; m[12216] = 5.063171E-24; m[12224] = 2.194041E-24; m[12226] = 1.828367E-24; m[13112] = 6.582122E-24; m[13114] = 1.09702E-23; m[13116] = 5.485102E-24; m[13122] = 1.316424E-23; m[13124] = 1.09702E-23; m[13126] = 6.928549E-24; m[13212] = 6.582122E-24; m[13214] = 1.09702E-23; m[13216] = 5.485102E-24; m[13222] = 6.582122E-24; m[13224] = 1.09702E-23; m[13226] = 5.485102E-24; m[13314] = 2.742551E-23; m[13324] = 2.742551E-23; m[14122] = 1.828367E-22; m[20022] = 1.E+16; m[20113] = 1.567172E-24; m[20213] = 1.567172E-24; m[20223] = 2.708692E-23; m[20313] = 3.782829E-24; m[20315] = 2.384827E-24; m[20323] = 3.782829E-24; m[20325] = 2.384827E-24; m[20333] = 1.198929E-23; m[20413] = 2.63E-24; m[20423] = 2.63E-24; m[20433] = 6.5821E-22; m[20443] = 7.395643E-22; m[20513] = 2.63E-24; m[20523] = 2.63E-24; m[20533] = 2.63E-24; m[21112] = 2.632849E-24; m[21114] = 3.291061E-24; m[21212] = 2.632849E-24; m[21214] = 6.582122E-24; m[22112] = 4.388081E-24; m[22114] = 3.291061E-24; m[22122] = 2.632849E-24; m[22124] = 6.582122E-24; m[22212] = 4.388081E-24; m[22214] = 3.291061E-24; m[22222] = 2.632849E-24; m[22224] = 3.291061E-24; m[23112] = 7.313469E-24; m[23114] = 2.991874E-24; m[23122] = 4.388081E-24; m[23124] = 6.582122E-24; m[23126] = 3.291061E-24; m[23212] = 7.313469E-24; m[23214] = 2.991874E-24; m[23222] = 7.313469E-24; m[23224] = 2.991874E-24; m[30113] = 2.632849E-24; m[30213] = 2.632849E-24; m[30221] = 1.880606E-24; m[30223] = 2.089563E-24; m[30313] = 2.056913E-24; m[30323] = 2.056913E-24; m[30443] = 2.419898E-23; m[31114] = 1.880606E-24; m[31214] = 3.291061E-24; m[32112] = 3.989164E-24; m[32114] = 1.880606E-24; m[32124] = 3.291061E-24; m[32212] = 3.989164E-24; m[32214] = 1.880606E-24; m[32224] = 1.880606E-24; m[33122] = 1.880606E-23; m[42112] = 6.582122E-24; m[42212] = 6.582122E-24; m[43122] = 2.194041E-24; m[53122] = 4.388081E-24; m[100111] = 1.645531E-24; m[100113] = 1.64553E-24; m[100211] = 1.645531E-24; m[100213] = 1.64553E-24; m[100221] = 1.196749E-23; m[100223] = 3.061452E-24; m[100313] = 2.837122E-24; m[100323] = 2.837122E-24; m[100331] = 4.459432E-25; m[100333] = 4.388081E-24; m[100441] = 4.701516E-23; m[100443] = 2.076379E-21; m[100553] = 2.056913E-20; m[200553] = 3.242425E-20; m[300553] = 3.210791E-23; m[9000111] = 8.776163E-24; m[9000211] = 8.776163E-24; m[9000443] = 8.227652E-24; m[9000553] = 5.983747E-24; m[9010111] = 3.164482E-24; m[9010211] = 3.164482E-24; m[9010221] = 9.403031E-24; m[9010443] = 8.438618E-24; m[9010553] = 8.3318E-24; m[9020443] = 1.061633E-23; m[9030221] = 6.038644E-24; m[9042413] = 2.07634E-21; m[9050225] = 1.394517E-24; m[9060225] = 3.291061E-24; m[9080225] = 4.388081E-24; m[9090225] = 2.056913E-24; m[9910445] = 2.07634E-21; m[9920443] = 2.07634E-21; return true; } }; const int LHCB_2012_I1119400::_stablePDGIds[205] = { 311, 543, 545, 551, 555, 557, 1103, 2101, 2103, 2203, 3101, 3103, 3201, 3203, 3303, 4101, 4103, 4124, 4201, 4203, 4301, 4303, 4312, 4314, 4322, 4324, 4334, 4403, 4414, 4424, 4434, 4444, 5101, 5103, 5114, 5201, 5203, 5214, 5224, 5301, 5303, 5314, 5324, 5334, 5401, 5403, 5412, 5414, 5422, 5424, 5432, 5434, 5444, 5503, 5514, 5524, 5534, 5544, 5554, 10022, 10333, 10335, 10443, 10541, 10543, 10551, 10553, 10555, 11112, 12118, 12122, 12218, 12222, 13316, 13326, 20543, 20553, 20555, 23314, 23324, 30343, 30353, 30363, 30553, 33314, 33324, 41214, 42124, 52114, 52214, 100311, 100315, 100321, 100325, 100411, 100413, 100421, 100423, 100551, 100555, 100557, 110551, 110553, 110555, 120553, 120555, 130553, 200551, 200555, 210551, 210553, 220553, 1000001, 1000002, 1000003, 1000004, 1000005, 1000006, 1000011, 1000012, 1000013, 1000014, 1000015, 1000016, 1000021, 1000022, 1000023, 1000024, 1000025, 1000035, 1000037, 1000039, 2000001, 2000002, 2000003, 2000004, 2000005, 2000006, 2000011, 2000012, 2000013, 2000014, 2000015, 2000016, 3000111, 3000113, 3000211, 3000213, 3000221, 3000223, 3000331, 3100021, 3100111, 3100113, 3200111, 3200113, 3300113, 3400113, 4000001, 4000002, 4000011, 4000012, 5000039, 9000221, 9900012, 9900014, 9900016, 9900023, 9900024, 9900041, 9900042 }; // Plugin hook DECLARE_RIVET_PLUGIN(LHCB_2012_I1119400); } rivet-1.8.3/src/Analyses/ALICE_2011_S8945144.cc0000644000175000017500000000723512116077757016276 0ustar sunsun#include "Rivet/Rivet.hh" #include "Rivet/Analysis.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { class ALICE_2011_S8945144 : public Analysis { public: ALICE_2011_S8945144() : Analysis("ALICE_2011_S8945144") {} public: void init() { const ChargedFinalState cfs(-15, 15); addProjection(cfs, "CFS"); _histPtPions = bookHistogram1D("d01-x01-y01"); _histPtAntiPions = bookHistogram1D("d01-x01-y02"); _histPtKaons = bookHistogram1D("d02-x01-y01"); _histPtAntiKaons = bookHistogram1D("d02-x01-y02"); _histPtProtons = bookHistogram1D("d03-x01-y01"); _histPtAntiProtons = bookHistogram1D("d03-x01-y02"); _histAveragePt = bookProfile1D("d04-x01-y01"); } void analyze(const Event& event) { const double weight = event.weight(); const ChargedFinalState& cfs = applyProjection(event, "CFS"); foreach (const Particle& p, cfs.particles()) { if(fabs(p.momentum().rapidity())<0.5) { switch (p.pdgId()) { case 211: _histPtPions->fill(p.momentum().pT()/GeV, weight); _histAveragePt->fill(p.mass()/GeV, p.momentum().pT()/GeV, weight); break; case -211: _histPtAntiPions->fill(p.momentum().pT()/GeV, weight); _histAveragePt->fill(p.mass()/GeV, p.momentum().pT()/GeV, weight); break; case 2212: if ( !(p.hasAncestor(3322) || // Xi0 p.hasAncestor(3122) || p.hasAncestor(-3122) || // Lambda p.hasAncestor(3222) || p.hasAncestor(-3222) || // Sigma+/- p.hasAncestor(3312) || p.hasAncestor(-3312) ) ) { // Xi-/+ _histPtProtons->fill(p.momentum().pT()/GeV, weight); _histAveragePt->fill(p.mass()/GeV, p.momentum().pT()/GeV, weight); } break; case -2212: if ( !(p.hasAncestor(3322) || // Xi0 p.hasAncestor(3122) || p.hasAncestor(-3122) || // Lambda p.hasAncestor(3222) || p.hasAncestor(-3222) || // Sigma+/- p.hasAncestor(3312) || p.hasAncestor(-3312) ) ) { // Xi-/+ _histPtAntiProtons->fill(p.momentum().pT()/GeV, weight); _histAveragePt->fill(p.mass()/GeV, p.momentum().pT()/GeV, weight); } break; case 321: _histPtKaons->fill(p.momentum().pT()/GeV, weight); _histAveragePt->fill(p.mass()/GeV, p.momentum().pT()/GeV, weight); break; case -321: _histPtAntiKaons->fill(p.momentum().pT()/GeV, weight); _histAveragePt->fill(p.mass()/GeV, p.momentum().pT()/GeV, weight); break; } } } } void finalize() { scale(_histPtPions, 1./sumOfWeights()); scale(_histPtProtons, 1./sumOfWeights()); scale(_histPtKaons, 1./sumOfWeights()); scale(_histPtAntiPions, 1./sumOfWeights()); scale(_histPtAntiProtons, 1./sumOfWeights()); scale(_histPtAntiKaons, 1./sumOfWeights()); } private: AIDA::IHistogram1D *_histPtPions; AIDA::IHistogram1D *_histPtProtons; AIDA::IHistogram1D *_histPtKaons; AIDA::IHistogram1D *_histPtAntiPions; AIDA::IHistogram1D *_histPtAntiProtons; AIDA::IHistogram1D *_histPtAntiKaons; AIDA::IProfile1D *_histAveragePt; }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ALICE_2011_S8945144); } rivet-1.8.3/src/Analyses/ARGUS_1993_S2653028.cc0000644000175000017500000001322212116077757016344 0ustar sunsun// -*- C++ -*- #include #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/Projections/Beam.hh" #include "Rivet/Projections/UnstableFinalState.hh" #include "Rivet/ParticleName.hh" namespace Rivet { /// @brief BELLE pi+/-, K+/- and proton/antiproton spectrum at Upsilon(4S) /// @author Peter Richardson class ARGUS_1993_S2653028 : public Analysis { public: ARGUS_1993_S2653028() : Analysis("ARGUS_1993_S2653028"), _weightSum(0.) { } void analyze(const Event& e) { const double weight = e.weight(); const UnstableFinalState& ufs = applyProjection(e, "UFS"); // find the upsilons ParticleVector upsilons; // first in unstable final state foreach (const Particle& p, ufs.particles()) if(p.pdgId()==300553) upsilons.push_back(p); // then in whole event if fails if(upsilons.empty()) { foreach (GenParticle* p, Rivet::particles(e.genEvent())) { if(p->pdg_id()!=300553) continue; const GenVertex* pv = p->production_vertex(); bool passed = true; if (pv) { for (GenVertex::particles_in_const_iterator pp = pv->particles_in_const_begin() ; pp != pv->particles_in_const_end() ; ++pp) { if ( p->pdg_id() == (*pp)->pdg_id() ) { passed = false; break; } } } if(passed) upsilons.push_back(Particle(*p)); } } // find an upsilons foreach (const Particle& p, upsilons) { _weightSum += weight; vector pionsA,pionsB,protonsA,protonsB,kaons; // find the decay products we want findDecayProducts(p.genParticle(),pionsA,pionsB, protonsA,protonsB,kaons); LorentzTransform cms_boost; if(p.momentum().vector3().mod()>0.001) cms_boost = LorentzTransform(-p.momentum().boostVector()); for(unsigned int ix=0;ixmomentum()); FourMomentum p2 = cms_boost.transform(ptemp); double pcm = cms_boost.transform(ptemp).vector3().mod(); _histPiA->fill(pcm,weight); } _multPiA->fill(10.58,double(pionsA.size())*weight); for(unsigned int ix=0;ixmomentum())).vector3().mod(); _histPiB->fill(pcm,weight); } _multPiB->fill(10.58,double(pionsB.size())*weight); for(unsigned int ix=0;ixmomentum())).vector3().mod(); _histpA->fill(pcm,weight); } _multpA->fill(10.58,double(protonsA.size())*weight); for(unsigned int ix=0;ixmomentum())).vector3().mod(); _histpB->fill(pcm,weight); } _multpB->fill(10.58,double(protonsB.size())*weight); for(unsigned int ix=0;ixmomentum())).vector3().mod(); _histKA->fill(pcm,weight); _histKB->fill(pcm,weight); } _multK->fill(10.58,double(kaons.size())*weight); } } // analyze void finalize() { if(_weightSum>0.) { scale(_histPiA, 1./_weightSum); scale(_histPiB, 1./_weightSum); scale(_histKA , 1./_weightSum); scale(_histKB , 1./_weightSum); scale(_histpA , 1./_weightSum); scale(_histpB , 1./_weightSum); scale(_multPiA, 1./_weightSum); scale(_multPiB, 1./_weightSum); scale(_multK , 1./_weightSum); scale(_multpA , 1./_weightSum); scale(_multpB , 1./_weightSum); } } // finalize void init() { addProjection(UnstableFinalState(), "UFS"); // spectra _histPiA = bookHistogram1D(1, 1, 1); _histPiB = bookHistogram1D(2, 1, 1); _histKA = bookHistogram1D(3, 1, 1); _histKB = bookHistogram1D(6, 1, 1); _histpA = bookHistogram1D(4, 1, 1); _histpB = bookHistogram1D(5, 1, 1); // multiplicities _multPiA = bookHistogram1D( 7, 1, 1); _multPiB = bookHistogram1D( 8, 1, 1); _multK = bookHistogram1D( 9, 1, 1); _multpA = bookHistogram1D(10, 1, 1); _multpB = bookHistogram1D(11, 1, 1); } // init private: //@{ // count of weights double _weightSum; // Histograms // spectra AIDA::IHistogram1D* _histPiA; AIDA::IHistogram1D* _histPiB; AIDA::IHistogram1D* _histKA; AIDA::IHistogram1D* _histKB; AIDA::IHistogram1D* _histpA; AIDA::IHistogram1D* _histpB; // multiplicities AIDA::IHistogram1D* _multPiA; AIDA::IHistogram1D* _multPiB; AIDA::IHistogram1D* _multK; AIDA::IHistogram1D* _multpA; AIDA::IHistogram1D* _multpB; //@} void findDecayProducts(const GenParticle & p, vector & pionsA, vector & pionsB, vector & protonsA, vector & protonsB, vector & kaons) { int parentId = p.pdg_id(); const GenVertex* dv = p.end_vertex(); for (GenVertex::particles_out_const_iterator pp = dv->particles_out_const_begin(); pp != dv->particles_out_const_end(); ++pp) { int id = abs((*pp)->pdg_id()); if(id==PIPLUS) { if(parentId != LAMBDA && parentId != K0S) { pionsA.push_back(*pp); pionsB.push_back(*pp); } else pionsB.push_back(*pp); } else if(id==PROTON) { if(parentId != LAMBDA && parentId != K0S) { protonsA.push_back(*pp); protonsB.push_back(*pp); } else protonsB.push_back(*pp); } else if(id==KPLUS) { kaons.push_back(*pp); } else if((*pp)->end_vertex()) findDecayProducts(**pp,pionsA,pionsB, protonsA,protonsB,kaons); } } }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ARGUS_1993_S2653028); } rivet-1.8.3/src/Analyses/MC_WWKTSPLITTINGS.cc0000644000175000017500000000352312116077757016541 0ustar sunsun// -*- C++ -*- #include "Rivet/Analyses/MC_JetSplittings.hh" #include "Rivet/Projections/WFinder.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief MC validation analysis for W^+[enu]W^-[munu] + jets events class MC_WWKTSPLITTINGS : public MC_JetSplittings { public: /// Default constructor MC_WWKTSPLITTINGS() : MC_JetSplittings("MC_WWKTSPLITTINGS", 4, "Jets") { } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; WFinder wenufinder(fs, -3.5, 3.5, 25.0*GeV, ELECTRON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2); addProjection(wenufinder, "WenuFinder"); VetoedFinalState wmnuinput; wmnuinput.addVetoOnThisFinalState(wenufinder); WFinder wmnufinder(wmnuinput, -3.5, 3.5, 25.0*GeV, MUON, 60.0*GeV, 100.0*GeV, 25.0*GeV, 0.2); addProjection(wmnufinder, "WmnuFinder"); VetoedFinalState jetinput; jetinput .addVetoOnThisFinalState(wenufinder) .addVetoOnThisFinalState(wmnufinder); FastJets jetpro(jetinput, FastJets::KT, 0.6); addProjection(jetpro, "Jets"); MC_JetSplittings::init(); } /// Do the analysis void analyze(const Event & e) { const WFinder& wenufinder = applyProjection(e, "WenuFinder"); if (wenufinder.bosons().size()!=1) { vetoEvent; } const WFinder& wmnufinder = applyProjection(e, "WmnuFinder"); if (wmnufinder.bosons().size()!=1) { vetoEvent; } MC_JetSplittings::analyze(e); } /// Finalize void finalize() { MC_JetSplittings::finalize(); } //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_WWKTSPLITTINGS); } rivet-1.8.3/src/Analyses/MC_ZZJETS.cc0000644000175000017500000000670312116077757015360 0ustar sunsun// -*- C++ -*- #include "Rivet/Analyses/MC_JetAnalysis.hh" #include "Rivet/Projections/ZFinder.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/ParticleIdUtils.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief MC validation analysis for Z[ee]Z[mumu] + jets events class MC_ZZJETS : public MC_JetAnalysis { public: /// Default constructor MC_ZZJETS() : MC_JetAnalysis("MC_ZZJETS", 4, "Jets") { } /// @name Analysis methods //@{ /// Book histograms void init() { FinalState fs; ZFinder zeefinder(fs, -3.5, 3.5, 25.0*GeV, ELECTRON, 65.0*GeV, 115.0*GeV, 0.2, true, true); addProjection(zeefinder, "ZeeFinder"); VetoedFinalState zmminput; zmminput.addVetoOnThisFinalState(zeefinder); ZFinder zmmfinder(zmminput, -3.5, 3.5, 25.0*GeV, MUON, 65.0*GeV, 115.0*GeV, 0.2, true, true); addProjection(zmmfinder, "ZmmFinder"); VetoedFinalState jetinput; jetinput .addVetoOnThisFinalState(zeefinder) .addVetoOnThisFinalState(zmmfinder); FastJets jetpro(jetinput, FastJets::ANTIKT, 0.4); addProjection(jetpro, "Jets"); // correlations with jets _h_ZZ_jet1_deta = bookHistogram1D("ZZ_jet1_deta", 70, -7.0, 7.0); _h_ZZ_jet1_dR = bookHistogram1D("ZZ_jet1_dR", 25, 1.5, 7.0); _h_Ze_jet1_dR = bookHistogram1D("Ze_jet1_dR", 25, 0.0, 7.0); // global stuff _h_HT = bookHistogram1D("HT", logBinEdges(100, 100.0, 0.5*sqrtS())); MC_JetAnalysis::init(); } /// Do the analysis void analyze(const Event & e) { const double weight = e.weight(); const ZFinder& zeefinder = applyProjection(e, "ZeeFinder"); if (zeefinder.bosons().size()!=1) { vetoEvent; } const ZFinder& zmmfinder = applyProjection(e, "ZmmFinder"); if (zmmfinder.bosons().size()!=1) { vetoEvent; } FourMomentum zee(zeefinder.bosons()[0].momentum()); FourMomentum zmm(zmmfinder.bosons()[0].momentum()); FourMomentum zz(zee+zmm); // find leptons FourMomentum ep(zeefinder.constituents()[0].momentum()), em(zeefinder.constituents()[1].momentum()), mp(zmmfinder.constituents()[0].momentum()), mm(zmmfinder.constituents()[1].momentum()); const Jets& jets = applyProjection(e, "Jets").jetsByPt(m_jetptcut); if (jets.size() > 0) { _h_ZZ_jet1_deta->fill(zz.eta()-jets[0].momentum().eta(), weight); _h_ZZ_jet1_dR->fill(deltaR(zz, jets[0].momentum()), weight); _h_Ze_jet1_dR->fill(deltaR(ep, jets[0].momentum()), weight); } double HT=ep.pT()+em.pT()+mp.pT()+mm.pT(); foreach (const Jet& jet, jets) { HT+=jet.momentum().pT(); } if (HT>0.0) _h_HT->fill(HT, weight); MC_JetAnalysis::analyze(e); } /// Finalize void finalize() { double norm=crossSection()/sumOfWeights(); scale(_h_ZZ_jet1_deta, norm); scale(_h_ZZ_jet1_dR, norm); scale(_h_Ze_jet1_dR, norm); scale(_h_HT, norm); MC_JetAnalysis::finalize(); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_ZZ_jet1_deta; AIDA::IHistogram1D * _h_ZZ_jet1_dR; AIDA::IHistogram1D * _h_Ze_jet1_dR; AIDA::IHistogram1D * _h_HT; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(MC_ZZJETS); } rivet-1.8.3/src/Analyses/STAR_2006_S6870392.cc0000644000175000017500000000415312116077757016232 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief STAR inclusive jet cross-section in pp at 200 GeV class STAR_2006_S6870392 : public Analysis { public: /// Constructor STAR_2006_S6870392() : Analysis("STAR_2006_S6870392") { } /// @name Analysis methods //@{ /// Book projections and histograms void init() { FinalState fs(-2.0, 2.0); addProjection(fs, "FS"); // R=0.4, pTmin=0, seed_threshold=0.5: addProjection(FastJets(fs, FastJets::CDFMIDPOINT, 0.4, 0.5), "MidpointJets"); _h_jet_pT_MB = bookHistogram1D(1, 1, 1); _h_jet_pT_HT = bookHistogram1D(2, 1, 1); } /// Do the analysis void analyze(const Event& event) { const double weight = event.weight(); // Skip if the event is empty const FinalState& fs = applyProjection(event, "FS"); if (fs.empty()) { MSG_DEBUG("Skipping event " << event.genEvent().event_number() << " because no final state found "); vetoEvent; } // Find jets const FastJets& jetpro = applyProjection(event, "MidpointJets"); const Jets& jets = jetpro.jetsByPt(); if (!jets.empty()) { const Jet& j1 = jets.front(); if (inRange(fabs(j1.eta()), 0.2, 0.8)) { foreach (const Jet& j, jets) { const FourMomentum pj = j.momentum(); _h_jet_pT_MB->fill(pj.pT(), weight); _h_jet_pT_HT->fill(pj.pT(), weight); } } } } /// Finalize void finalize() { double normalisation = crossSection()/picobarn/sumOfWeights()/(2*0.6*2*M_PI); scale(_h_jet_pT_MB, normalisation); scale(_h_jet_pT_HT, normalisation); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D * _h_jet_pT_MB; AIDA::IHistogram1D * _h_jet_pT_HT; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(STAR_2006_S6870392); } rivet-1.8.3/src/Analyses/CMS_2011_S9088458.cc0000644000175000017500000000453412116077757016111 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/RivetAIDA.hh" #include "LWH/Histogram1D.h" namespace Rivet { // CMS Ratio of the 3-jet to 2-jet Cross Sections by Tomo class CMS_2011_S9088458 : public Analysis { public: CMS_2011_S9088458() : Analysis("CMS_2011_S9088458") {} void init() { FinalState fs; FastJets akt(fs, FastJets::ANTIKT, 0.5); addProjection(akt, "antikT"); _h_dijet = bookHistogram1D("dijet", binEdges(1, 1, 1)); _h_trijet = bookHistogram1D("trijet", binEdges(1, 1, 1)); _h_r32 = bookDataPointSet(1, 1, 1); } void analyze(const Event & event) { const double weight = event.weight(); Jets highpT_jets; double HT = 0; foreach(const Jet & jet, applyProjection(event, "antikT").jetsByPt(50.0*GeV)) { if (fabs(jet.momentum().eta()) < 2.5) { highpT_jets.push_back(jet); HT += jet.momentum().pT(); } } if (highpT_jets.size() < 2) vetoEvent; if (highpT_jets.size() >= 2) _h_dijet->fill(HT/TeV, weight) ; if (highpT_jets.size() >= 3) _h_trijet->fill(HT/TeV, weight) ; } void finalize() { vector yval_R32, yerr_R32; for (size_t i = 0; i < 30; ++i) { double yval, yerr; if (_h_dijet->binHeight(i)==0.0 || _h_trijet->binHeight(i)==0.0) { yval = 0.0; yerr = 0.0; } else { yval = _h_trijet->binHeight(i)/_h_dijet->binHeight(i); yerr = sqrt(_h_dijet->binError(i)*_h_dijet->binError(i)/(_h_dijet->binHeight(i) * _h_dijet->binHeight(i)) + _h_trijet->binError(i)*_h_trijet->binError(i)/(_h_trijet->binHeight(i) * _h_trijet->binHeight(i))) * yval; } yval_R32.push_back(yval); yerr_R32.push_back(yerr); } _h_r32->setCoordinate(1, yval_R32, yerr_R32); histogramFactory().destroy(_h_dijet); histogramFactory().destroy(_h_trijet); } private: AIDA::IHistogram1D *_h_dijet, *_h_trijet; AIDA::IDataPointSet *_h_r32; }; // This global object acts as a hook for the plugin system DECLARE_RIVET_PLUGIN(CMS_2011_S9088458); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1084540.cc0000644000175000017500000002137312116077757016276 0ustar sunsun// -*- C++ -*- /** * @name ATLAS Diffractive Gaps Rivet Analysis * @author Tim Martin, tim.martin@cern.ch * @version 1.0 * @date 16/01/2012 * @see http://arxiv.org/abs/1201.2808 * @note pp, sqrt(s) = 7 TeV * @note Rapidity gap finding algorithm designed to compliment * the ATLAS detector acceptance. Forward rapidity gap sizes * are calculated for each event, considering all stable * particles above pT cut values 200, 400, 600 and 800 MeV in * turn. A forward rapidity gap is defined to be the largest * continuous region stretching inward from either edge of the * detector at eta = |4.9| which contains zero particles above * pT Cut. Soft diffractive topologies are isolated at large * gap sizes. * */ #include "Rivet/Analysis.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" namespace Rivet { class ATLAS_2012_I1084540 : public Analysis { public: ATLAS_2012_I1084540() : Analysis("ATLAS_2012_I1084540"), _etaBins(49), _etaMax(4.9) { } /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { //All final states. Rapidity range = ATLAS calorimetry. Lowest pT cut = 200 MeV. const FinalState cnfs2(-_etaMax, _etaMax, 0.2 * GeV); const FinalState cnfs4(-_etaMax, _etaMax, 0.4 * GeV); const FinalState cnfs6(-_etaMax, _etaMax, 0.6 * GeV); const FinalState cnfs8(-_etaMax, _etaMax, 0.8 * GeV); addProjection(cnfs2, "CNFS2"); addProjection(cnfs4, "CNFS4"); addProjection(cnfs6, "CNFS6"); addProjection(cnfs8, "CNFS8"); _etaBinSize = (2. * _etaMax)/(double)_etaBins; //Book histogram _h_DeltaEtaF_200 = bookHistogram1D(1, 1, 1); _h_DeltaEtaF_400 = bookHistogram1D(2, 1, 1); _h_DeltaEtaF_600 = bookHistogram1D(3, 1, 1); _h_DeltaEtaF_800 = bookHistogram1D(4, 1, 1); } private: void fillMap(const FinalState& fs, bool* energyMap, double pTcut) { // Fill true/false array by iterating over particles and compare their // pT with pTcut foreach (const Particle& p, fs.particlesByEta()) { int checkBin = -1; double checkEta = -_etaMax; while (1) { checkEta += _etaBinSize; ++checkBin; if (p.momentum().eta() < checkEta) { energyMap[checkBin] = (p.momentum().pT() > pTcut * GeV); break; } } } } public: /// Perform the per-event analysis void analyze(const Event& event) { static unsigned int event_count = 0; ++event_count; const double weight = event.weight(); const FinalState& fs2 = applyProjection(event, "CNFS2"); const FinalState& fs4 = applyProjection(event, "CNFS4"); const FinalState& fs6 = applyProjection(event, "CNFS6"); const FinalState& fs8 = applyProjection(event, "CNFS8"); // Set up Yes/No arrays for energy in each eta bin at each pT cut bool* energyMap_200 = new bool[_etaBins]; bool* energyMap_400 = new bool[_etaBins]; bool* energyMap_600 = new bool[_etaBins]; bool* energyMap_800 = new bool[_etaBins]; for (int i = 0; i < _etaBins; ++i) { energyMap_200[i] = false; energyMap_400[i] = false; energyMap_600[i] = false; energyMap_800[i] = false; } // Veto bins based on final state particles > Cut (Where Cut = 200 - 800 MeV pT) fillMap(fs2, energyMap_200, 0.2); fillMap(fs4, energyMap_400, 0.4); fillMap(fs6, energyMap_600, 0.6); fillMap(fs8, energyMap_800, 0.8); // Apply gap finding algorithm // Detector layout follows... // -Eta [Proton --- DetectorCSide --- DetectorBarrel --- DetectorASide --- Proton] +Eta bool gapDirectionAt200 = false; //False is gap on C size, True is gap on A side. double largestEdgeGap_200 = 0.; double largestEdgeGap_400 = 0.; double largestEdgeGap_600 = 0.; double largestEdgeGap_800 = 0.; for (int E = 200; E <= 800; E += 200) { double EdgeGapSizeA = -1, EdgeGapSizeC = -1; bool* energyMap = 0; switch (E) { case 200: energyMap = energyMap_200; break; case 400: energyMap = energyMap_400; break; case 600: energyMap = energyMap_600; break; case 800: energyMap = energyMap_800; break; } // Look left to right for (int a = 0; a < _etaBins; ++a) { if (energyMap[a] == true) { EdgeGapSizeA = (_etaBinSize * a); break; } } // And look right to left for (int c = _etaBins-1; c >= 0; --c) { if (energyMap[c] == true) { EdgeGapSizeC = (2 * _etaMax) - (_etaBinSize * (c+1)); if (fuzzyEquals(EdgeGapSizeC, 4.47035e-08)) EdgeGapSizeC = 0.0; break; } } // Put your hands on your hips // Find the largest gap double largestEdgeGap = 0.; if (E == 200) { // If the 200 MeV pass, take the biggest of the two gaps. Make note of which side for higher pT cuts. largestEdgeGap = std::max(EdgeGapSizeA,EdgeGapSizeC); gapDirectionAt200 = (EdgeGapSizeA > EdgeGapSizeC); } else { // Use the direction from 200 MeV pass, most accurate measure of which side gap is on. if (gapDirectionAt200) { largestEdgeGap = EdgeGapSizeA; } else largestEdgeGap = EdgeGapSizeC; } // Check case of empty detector if (largestEdgeGap < 0.0) largestEdgeGap = 2.0 * _etaMax; // Fill bin centre switch (E) { case 200: _h_DeltaEtaF_200->fill(largestEdgeGap + _etaBinSize/2., weight); break; case 400: _h_DeltaEtaF_400->fill(largestEdgeGap + _etaBinSize/2., weight); break; case 600: _h_DeltaEtaF_600->fill(largestEdgeGap + _etaBinSize/2., weight); break; case 800: _h_DeltaEtaF_800->fill(largestEdgeGap + _etaBinSize/2., weight); break; } if (E == 200) largestEdgeGap_200 = largestEdgeGap; if (E == 400) largestEdgeGap_400 = largestEdgeGap; if (E == 600) largestEdgeGap_600 = largestEdgeGap; if (E == 800) largestEdgeGap_800 = largestEdgeGap; } // Algorithm result every 1000 events if (event_count % 1000 == 0) { for (int E = 200; E <= 800; E += 200) { bool* energyMap = 0; double largestEdgeGap = 0; switch (E) { case 200: energyMap = energyMap_200; largestEdgeGap = largestEdgeGap_200; break; case 400: energyMap = energyMap_400; largestEdgeGap = largestEdgeGap_400; break; case 600: energyMap = energyMap_600; largestEdgeGap = largestEdgeGap_600; break; case 800: energyMap = energyMap_800; largestEdgeGap = largestEdgeGap_800; break; } MSG_DEBUG("Largest Forward Gap at pT Cut " << E << " MeV=" << largestEdgeGap << " eta, NFinalState pT > 200 in ATLAS acceptance:" << fs2.particles().size()); std::string hitPattern = "Detector HitPattern=-4.9["; for (int a = 0; a < _etaBins; ++a) { if (energyMap[a] == true) hitPattern += "X"; else hitPattern += "_"; } hitPattern += "]4.9"; MSG_DEBUG(hitPattern); std::string gapArrow = " "; if (!gapDirectionAt200) { int drawSpaces = (int)(_etaBins - (largestEdgeGap/_etaBinSize) + 0.5); for (int i = 0; i < drawSpaces; ++i) gapArrow += " "; } int drawArrows = (int)((largestEdgeGap/_etaBinSize) + 0.5); for (int i = 0; i < drawArrows; ++i) gapArrow += "^"; MSG_DEBUG(gapArrow); } } delete[] energyMap_200; delete[] energyMap_400; delete[] energyMap_600; delete[] energyMap_800; } /// Normalise histograms after the run, Scale to cross section void finalize() { MSG_DEBUG("Cross Section=" << crossSection() / millibarn << "mb, SumOfWeights=" << sumOfWeights()); scale(_h_DeltaEtaF_200, (crossSection() / millibarn)/sumOfWeights()); scale(_h_DeltaEtaF_400, (crossSection() / millibarn)/sumOfWeights()); scale(_h_DeltaEtaF_600, (crossSection() / millibarn)/sumOfWeights()); scale(_h_DeltaEtaF_800, (crossSection() / millibarn)/sumOfWeights()); } //@} private: /// @name Histograms //@{ AIDA::IHistogram1D* _h_DeltaEtaF_200; AIDA::IHistogram1D* _h_DeltaEtaF_400; AIDA::IHistogram1D* _h_DeltaEtaF_600; AIDA::IHistogram1D* _h_DeltaEtaF_800; //@} /// @name Private variables //@{ int _etaBins; double _etaMax; double _etaBinSize; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I1084540); } rivet-1.8.3/src/Analyses/ATLAS_2012_I1117704.cc0000644000175000017500000002012312116077757016265 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/BinnedHistogram.hh" #include "Rivet/RivetAIDA.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/FinalState.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/Projections/VisibleFinalState.hh" #include "Rivet/Projections/VetoedFinalState.hh" #include "Rivet/Projections/IdentifiedFinalState.hh" #include "Rivet/Projections/FastJets.hh" #include "Rivet/Tools/RivetMT2.hh" namespace Rivet { class ATLAS_2012_I1117704 : public Analysis { public: /// @name Constructors etc. //@{ /// Constructor ATLAS_2012_I1117704() : Analysis("ATLAS_2012_I1117704") { } //@} public: /// @name Analysis methods //@{ /// Book histograms and initialise projections before the run void init() { // projection to find the electrons std::vector > eta_e; eta_e.push_back(make_pair(-2.47,2.47)); IdentifiedFinalState elecs(eta_e, 20.0*GeV); elecs.acceptIdPair(ELECTRON); addProjection(elecs, "elecs"); // projection to find the muons std::vector > eta_m; eta_m.push_back(make_pair(-2.4,2.4)); IdentifiedFinalState muons(eta_m, 10.0*GeV); muons.acceptIdPair(MUON); addProjection(muons, "muons"); // for pTmiss addProjection(VisibleFinalState(-4.9,4.9),"vfs"); VetoedFinalState vfs; vfs.addVetoPairId(MUON); /// Jet finder addProjection(FastJets(vfs, FastJets::ANTIKT, 0.4), "AntiKtJets04"); // all tracks (to do deltaR with leptons) addProjection(ChargedFinalState(-3.0,3.0),"cfs"); /// Book histograms _etmiss_HT_7j55 = bookHistogram1D("etmiss_HT_7j55", 8, 0., 16.); _etmiss_HT_8j55 = bookHistogram1D("etmiss_HT_8j55", 8, 0., 16.); _etmiss_HT_9j55 = bookHistogram1D("etmiss_HT_9j55", 8, 0., 16.); _etmiss_HT_6j80 = bookHistogram1D("etmiss_HT_6j80", 8, 0., 16.); _etmiss_HT_7j80 = bookHistogram1D("etmiss_HT_7j80", 8, 0., 16.); _etmiss_HT_8j80 = bookHistogram1D("etmiss_HT_8j80", 8, 0., 16.); _hist_njet55 = bookHistogram1D("hist_njet55", 11, 2.5, 13.5); _hist_njet80 = bookHistogram1D("hist_njet80", 11, 2.5, 13.5); _count_7j55 = bookHistogram1D("count_7j55", 1, 0., 1.); _count_8j55 = bookHistogram1D("count_8j55", 1, 0., 1.); _count_9j55 = bookHistogram1D("count_9j55", 1, 0., 1.); _count_6j80 = bookHistogram1D("count_6j80", 1, 0., 1.); _count_7j80 = bookHistogram1D("count_7j80", 1, 0., 1.); _count_8j80 = bookHistogram1D("count_8j80", 1, 0., 1.); } /// Perform the per-event analysis void analyze(const Event& event) { const double weight = event.weight(); // get the jet candidates Jets cand_jets; foreach (const Jet& jet, applyProjection(event, "AntiKtJets04").jetsByPt(20.0*GeV) ) { if ( fabs( jet.momentum().eta() ) < 2.8 ) { cand_jets.push_back(jet); } } // candidate muons ParticleVector cand_mu; ParticleVector chg_tracks = applyProjection(event, "cfs").particles(); foreach ( const Particle & mu, applyProjection(event, "muons").particlesByPt() ) { double pTinCone = -mu.momentum().pT(); foreach ( const Particle & track, chg_tracks ) { if ( deltaR(mu.momentum(),track.momentum()) <= 0.2 ) pTinCone += track.momentum().pT(); } if ( pTinCone < 1.8*GeV ) cand_mu.push_back(mu); } // candidate electrons ParticleVector cand_e = applyProjection(event, "elecs").particlesByPt(); // resolve jet/lepton ambiguity Jets recon_jets; foreach ( const Jet& jet, cand_jets ) { // candidates after |eta| < 2.8 if ( fabs( jet.momentum().eta() ) >= 2.8 ) continue; bool away_from_e = true; foreach ( const Particle & e, cand_e ) { if ( deltaR(e.momentum(),jet.momentum()) <= 0.2 ) { away_from_e = false; break; } } if ( away_from_e ) recon_jets.push_back( jet ); } // only keep electrons more than R=0.4 from jets ParticleVector recon_e; foreach ( const Particle & e, cand_e ) { bool away = true; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(e.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } if ( away ) recon_e.push_back( e ); } // only keep muons more than R=0.4 from jets ParticleVector recon_mu; foreach ( const Particle & mu, cand_mu ) { bool away = true; foreach ( const Jet& jet, recon_jets ) { if ( deltaR(mu.momentum(),jet.momentum()) < 0.4 ) { away = false; break; } } if ( away ) recon_mu.push_back( mu ); } // pTmiss ParticleVector vfs_particles = applyProjection(event, "vfs").particles(); FourMomentum pTmiss; foreach ( const Particle & p, vfs_particles ) { pTmiss -= p.momentum(); } double eTmiss = pTmiss.pT(); // now only use recon_jets, recon_mu, recon_e // reject events with electrons and muons if ( ! ( recon_mu.empty() && recon_e.empty() ) ) { MSG_DEBUG("Charged leptons left after selection"); vetoEvent; } // calculate H_T double HT=0; foreach ( const Jet& jet, recon_jets ) { if ( jet.momentum().pT() > 40 * GeV ) HT += jet.momentum().pT() ; } // number of jets unsigned int njet55=0, njet80=0; for (unsigned int ix=0;ix80.*GeV) ++njet80; if(recon_jets[ix].momentum().pT()>55.*GeV) ++njet55; } if(njet55==0) vetoEvent; double ratio = eTmiss/sqrt(HT); if(ratio>4.) { _hist_njet55->fill(njet55,weight); _hist_njet80->fill(njet80,weight); // 7j55 if(njet55>=7) _count_7j55->fill( 0.5, weight); // 8j55 if(njet55>=8) _count_8j55->fill( 0.5, weight) ; // 8j55 if(njet55>=9) _count_9j55->fill( 0.5, weight) ; // 6j80 if(njet80>=6) _count_6j80->fill( 0.5, weight) ; // 7j80 if(njet80>=7) _count_7j80->fill( 0.5, weight) ; // 8j80 if(njet80>=8) _count_8j80->fill( 0.5, weight) ; } if(njet55>=7) _etmiss_HT_7j55->fill( ratio, weight); // 8j55 if(njet55>=8) _etmiss_HT_8j55->fill( ratio, weight) ; // 8j55 if(njet55>=9) _etmiss_HT_9j55->fill( ratio, weight) ; // 6j80 if(njet80>=6) _etmiss_HT_6j80->fill( ratio, weight) ; // 7j80 if(njet80>=7) _etmiss_HT_7j80->fill( ratio, weight) ; // 8j80 if(njet80>=8) _etmiss_HT_8j80->fill( ratio, weight) ; } //@} void finalize() { double norm = crossSection()/femtobarn*4.7/sumOfWeights(); scale(_etmiss_HT_7j55,2.*norm); scale(_etmiss_HT_8j55,2.*norm); scale(_etmiss_HT_9j55,2.*norm); scale(_etmiss_HT_6j80,2.*norm); scale(_etmiss_HT_7j80,2.*norm); scale(_etmiss_HT_8j80,2.*norm); scale(_hist_njet55,norm); scale(_hist_njet80,norm); scale(_count_7j55,norm); scale(_count_8j55,norm); scale(_count_9j55,norm); scale(_count_6j80,norm); scale(_count_7j80,norm); scale(_count_8j80,norm); } private: /// @name Histograms //@{ AIDA::IHistogram1D* _etmiss_HT_7j55; AIDA::IHistogram1D* _etmiss_HT_8j55; AIDA::IHistogram1D* _etmiss_HT_9j55; AIDA::IHistogram1D* _etmiss_HT_6j80; AIDA::IHistogram1D* _etmiss_HT_7j80; AIDA::IHistogram1D* _etmiss_HT_8j80; AIDA::IHistogram1D* _hist_njet55; AIDA::IHistogram1D* _hist_njet80; AIDA::IHistogram1D* _count_7j55; AIDA::IHistogram1D* _count_8j55; AIDA::IHistogram1D* _count_9j55; AIDA::IHistogram1D* _count_6j80; AIDA::IHistogram1D* _count_7j80; AIDA::IHistogram1D* _count_8j80; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(ATLAS_2012_I1117704); } rivet-1.8.3/src/Analyses/STAR_2008_S7993412.cc0000644000175000017500000000405012116077757016230 0ustar sunsun// -*- C++ -*- #include "Rivet/Analysis.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Projections/ChargedFinalState.hh" #include "Rivet/RivetAIDA.hh" namespace Rivet { /// @brief STAR di-hadron correlations in d-Au at 200 GeV class STAR_2008_S7993412 : public Analysis { public: STAR_2008_S7993412() : Analysis("STAR_2008_S7993412") { } /// @name Analysis methods //@{ /// Book projections and histograms void init() { ChargedFinalState fs(-1.0, 1.0, 1.0*GeV); addProjection(fs, "FS"); _h_Y_jet_trigger = bookProfile1D(1, 1, 1); _h_Y_jet_associated = bookProfile1D(2, 1, 1); } /// Do the analysis void analyze(const Event& event) { // Skip if the event is empty const FinalState& fs = applyProjection(event, "FS"); if (fs.empty()) { MSG_DEBUG("Skipping event " << event.genEvent().event_number() << " because no final state found "); vetoEvent; } const double weight = event.weight(); foreach (const Particle& tp, fs.particles()) { const double triggerpT = tp.momentum().pT(); if (triggerpT >= 2.0 && triggerpT < 5.0) { int n_associated = 0; foreach (const Particle& ap, fs.particles()) { if (!inRange(ap.momentum().pT()/GeV, 1.5, triggerpT)) continue; if (deltaPhi(tp.momentum().phi(), ap.momentum().phi()) > 1) continue; if (fabs(tp.momentum().eta() - ap.momentum().eta()) > 1.75) continue; n_associated += 1; } //const double dPhidEta = 2 * 2*1.75; //_h_Y_jet_trigger->fill(triggerpT, n_associated/dPhidEta, weight); _h_Y_jet_trigger->fill(triggerpT, n_associated, weight); } } } /// Finalize void finalize() { } //@} private: /// @name Histograms //@{ AIDA::IProfile1D * _h_Y_jet_trigger; AIDA::IProfile1D * _h_Y_jet_associated; //@} }; // The hook for the plugin system DECLARE_RIVET_PLUGIN(STAR_2008_S7993412); } rivet-1.8.3/src/Makefile.in0000644000175000017500000006037212116616065013720 0ustar sunsun# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ENABLE_ANALYSES_TRUE@am__append_1 = Analyses subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libRivet_la_DEPENDENCIES = Core/libRivetCore.la \ Projections/libRivetProjections.la \ Analyses/libRivetAnalysisTools.la Tools/libRivetTools.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_libRivet_la_OBJECTS = libRivet_la_OBJECTS = $(am_libRivet_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent libRivet_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libRivet_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/Rivet/Config COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libRivet_la_SOURCES) DIST_SOURCES = $(libRivet_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = Core Projections Tools Analyses . DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = Core Projections Tools $(am__append_1) . lib_LTLIBRARIES = libRivet.la libRivet_la_SOURCES = libRivet_la_LDFLAGS = \ -L$(prefix)/lib \ -L$(HEPMCLIBPATH) -R$(HEPMCLIBPATH) \ -export-dynamic $(VERSIONINFOFLAGS) libRivet_la_LIBADD = \ Core/libRivetCore.la \ Projections/libRivetProjections.la \ Analyses/libRivetAnalysisTools.la \ Tools/libRivetTools.la \ -ldl -lm -lHepMC \ $(GSL_LDFLAGS) $(FASTJETCONFIGLIBADD) all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libRivet.la: $(libRivet_la_OBJECTS) $(libRivet_la_DEPENDENCIES) $(EXTRA_libRivet_la_DEPENDENCIES) $(AM_V_CCLD)$(libRivet_la_LINK) -rpath $(libdir) $(libRivet_la_OBJECTS) $(libRivet_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: rivet-1.8.3/src/Makefile.am0000644000175000017500000000074312116077757013714 0ustar sunsunSUBDIRS = Core Projections Tools if ENABLE_ANALYSES SUBDIRS += Analyses endif SUBDIRS += . lib_LTLIBRARIES = libRivet.la libRivet_la_SOURCES = libRivet_la_LDFLAGS = \ -L$(prefix)/lib \ -L$(HEPMCLIBPATH) -R$(HEPMCLIBPATH) \ -export-dynamic $(VERSIONINFOFLAGS) libRivet_la_LIBADD = \ Core/libRivetCore.la \ Projections/libRivetProjections.la \ Analyses/libRivetAnalysisTools.la \ Tools/libRivetTools.la \ -ldl -lm -lHepMC \ $(GSL_LDFLAGS) $(FASTJETCONFIGLIBADD) rivet-1.8.3/GUIDELINES0000644000175000017500000001105212116077757012437 0ustar sunsun MCNET GUIDELINES for Event Generator Authors and Users PREAMBLE This generator has been developed as part of an academic research project and is the result of many years of work by the authors. Proper academic recognition is a requirement for its continued development. The components of the program have been developed to work together as a coherent physics framework. We believe that the creation of separately maintained forks or piecewise distribution of individual parts would diminish their scientific value. The authors are convinced that software development in a scientific context requires full availability of all source code, to further progress and to allow local modifications to meet the specific requirements of the individual user. Therefore we have decided to release this program under the GNU General Public License (GPL) version 2. This ensures that the source code will be available to you and grants you the freedom to use and modify the program. You can redistribute your modified versions as long as you retain the GPL and respect existing copyright notices (see the file 'COPYING' for details). By using the GPL, we entrust you with considerable freedom and expect you to use it wisely, since the GPL does not address the issues in the first two paragraphs. To remedy this shortcoming, we have formulated the following guidelines relevant for the distribution and usage of event generator software in an academic setting. GUIDELINES 1) The integrity of the program should be respected. ------------------------------------------------- 1.1) Suspected bugs and proposed fixes should be reported back to the original authors to be considered for inclusion in the standard distribution. No independently developed and maintained forks should be created as long as the original authors actively work on the program. 1.2) The program should normally be redistributed in its entirety. When there are special reasons, an agreement should be sought with the original authors to redistribute only specific parts. This should be arranged such that the redistributed parts remain updated in step with the standard distribution. 1.3) Any changes in the code must be clearly marked in the source (reason, author, date) and documented. If any modified version is redistributed it should be stated at the point of distribution (download link) that it has been modified and why. 1.4) If a significant part of the code is used by another program, this should be clearly specified in that program's documentation and stated at its point of distribution. 1.5) Copyright information and references may not be removed. Copyright-related program messages may not be altered and must be printed even if only a part of the program is used. Adding further messages specifying any modifications is encouraged. 2) The program and its physics should be properly cited when used for academic publications ------------------------------------------------------------------ 2.1) The main software reference as designated by the program authors should always be cited. 2.2) In addition, the original literature on which the program is based should be cited to the extent that it is of relevance for a study, applying the same threshold criteria as for other literature. 2.3) When several programs are combined, they should all be mentioned, commensurate with their importance for the physics study at hand. 2.4) To make published results reproducible, the exact versions of the codes that were used and any relevant program and parameter modifications should be spelled out. POSTSCRIPT The copyright license of the software is the GPL v2 alone, therefore the above guidelines are not legally binding. However, we reserve the right to criticize offenders. The guidelines should always be combined with common sense, for interpretation and for issues not covered. Enquiries regarding the guidelines and related issues are encouraged and should be directed to the authors of the program. Please note that the program, including all its code and documentation, is intended for academic use and is delivered "as is" to be used at your own risk, without any guarantees. ---------------------------------------------------------------------- These guidelines were edited by Nils Lavesson and David Grellscheid for the MCnet collaboration, which has approved and agreed to respect them. MCnet is a Marie Curie Research Training Network funded under Framework Programme 6 contract MRTN-CT-2006-035606. rivet-1.8.3/ChangeLog0000644000175000017500000037136412123101261012625 0ustar sunsun2013-03-22 Andy Buckley * Version bump to 1.8.3 for incipient release. * Adding Particle::fromDecay() method. 2013-03-09 Andy Buckley * Fixing a symbol misnaming in ATLAS_2012_I1119557. 2013-03-08 Andy Buckley * Protect the AIDA reader against finding XML comments. 2013-03-06 Hendrik Hoeth * Added ATLAS_2012_I1125575 analysis 2013-02-05 David Grellscheid * include/Rivet/Math/MathUtils.hh: added BWspace bin edge method to give equal-area Breit-Wigner bins 2013-02-01 Andy Buckley * Adding an element to the PhiMapping enum and a new mapAngle(angle, mapping) function. * Fixes to Vector3::azimuthalAngle and Vector3::polarAngle calculation (using the mapAngle functions). 2013-01-25 Frank Siegert * Split MC_*JETS analyses into three separate bits: MC_*INC (inclusive properties) MC_*JETS (jet properties) MC_*KTSPLITTINGS (kT splitting scales). 2013-01-22 Hendrik Hoeth * Fix TeX variable in the rivetenv scripts, especially for csh 2012-12-21 Andy Buckley * Version 1.8.2 release! 2012-12-20 Andy Buckley * Adding ATLAS_2012_I1119557 analysis (from Roman Lysak and Lily Asquith). 2012-12-18 Andy Buckley * Adding TOTEM_2012_002 analysis, from Sercan Sen. 2012-12-18 Hendrik Hoeth * Added CMS_2011_I954992 analysis 2012-12-17 Hendrik Hoeth * Added CMS_2012_I1193338 analysis * Fixed xi cut in ATLAS_2011_I894867 2012-12-17 Andy Buckley * Adding analysis descriptions to the HTML analysis page ToC. 2012-12-14 Hendrik Hoeth * Added CMS_2012_PAS_FWD_11_003 analysis * Added LHCB_2012_I1119400 analysis 2012-12-12 Andy Buckley * Correction to jet acceptance in CMS_2011_S9120041, from Sercan Sen: thanks! 2012-12-12 Hendrik Hoeth * Added CMS_2012_PAS_QCD_11_010 analysis 2012-12-07 Andy Buckley * Version number bump to 1.8.2 -- release approaching. * Rewrite of ALICE_2012_I1181770 analysis to make it a bit more sane and acceptable. * Adding a note on FourVector and FourMomentum that operator- and operator-= invert both the space and time components: use of -= can result in a vector with negative energy. * Adding particlesByRapidity and particlesByAbsRapidity to FinalState. 2012-12-07 Hendrik Hoeth * Added ALICE_2012_I1181770 analysis * Bump version to 1.8.2 2012-12-06 Hendrik Hoeth * Added ATLAS_2012_I1188891 analysis * Added ATLAS_2012_I1118269 analysis * Added CMS_2012_I1184941 analysis * Added LHCB_2010_I867355 analysis * Added TGraphErrors support to root2flat 2012-11-27 Hendrik Hoeth * Fix make-plots png creation for SL5 2012-11-23 Peter Richardson * Added ATLAS_2012_CONF_2012_153 4-lepton SUSY search 2012-11-17 Andy Buckley * Adding MC_PHOTONS by Steve Lloyd and AB, for testing general unisolated photon properties, especially those associated with charged leptons (e and mu). 2012-11-16 Andy Buckley * Adding MC_PRINTEVENT, a convenient (but verbose!) analysis for printing out event details to stdout. 2012-11-15 Andy Buckley * Removing the long-unused/defunct autopackage system. 2012-11-15 Hendrik Hoeth * Added LHCF_2012_I1115479 analysis * Added ATLAS_2011_I894867 analysis 2012-11-14 Hendrik Hoeth * Added CMS_2012_I1102908 analysis 2012-11-14 Andy Buckley * Converting the argument order of logspace, clarifying the arguments, updating affected code, and deprecating Analysis::logBinEdges. * Merging updates from the YODA based trunk up to r4002 (latest revision for next merges is r4009). 2012-11-11 Andy Buckley * include/Math/: Various numerical fixes to Vector3::angle and changing the 4 vector mass treatment to permit spacelike virtualities (in some cases even the fuzzy isZero assert check was being violated). 2012-10-15 Hendrik Hoeth * Added CMS_2012_I1107658 analysis 2012-10-11 Hendrik Hoeth * Added CDF_2012_NOTE10874 analysis 2012-10-04 Hendrik Hoeth * Added ATLAS_2012_I1183818 analysis 2012-07-17 Hendrik Hoeth * Cleanup and multiple fixes in CMS_2011_S9120041 * Bugfixed in ALEPH_2004_S5765862 and ATLAS_2010_CONF_2010_049 (thanks to Anil Pratap) 2012-08-09 Andy Buckley * Fixing aida2root command-line help message and converting to TH* rather than TGraph by default. 2012-07-24 Andy Buckley * Improvements to rivet-mkhtml and rivet-buildplugin. 2012-07-17 Hendrik Hoeth * Add CMS_2012_I1087342 2012-07-05 Hendrik Hoeth * Version 1.8.1! 2012-07-05 Holger Schulz * Add ATLAS_2011_I945498 2012-07-03 Hendrik Hoeth * Bugfix for transverse mass (thanks to Gavin Hesketh) 2012-06-29 Hendrik Hoeth * Merge YODA branch into trunk. YODA is alive!!!!!! 2012-06-26 Holger Schulz * Add ATLAS_2012_I1091481 2012-06-20 Hendrik Hoeth * Added D0_2011_I895662: 3-jet mass 2012-04-24 Hendrik Hoeth * fixed a few bugs in rivet-rmgaps * Added new TOTEM dN/deta analysis 2012-03-19 Andy Buckley * Version 1.8.0! * src/Projections/UnstableFinalState.cc: Fix compiler warning. * Version bump for testing: 1.8.0beta1. * src/Core/AnalysisInfo.cc: Add printout of YAML parser exception error messages to aid debugging. * bin/Makefile.am: Attempt to fix rivet-nopy build on SLC5. * src/Analyses/LHCB_2010_S8758301.cc: Add two missing entries to the PDGID -> lifetime map. * src/Projections/UnstableFinalState.cc: Extend list of vetoed particles to include reggeons. 2012-03-16 Andy Buckley * Version change to 1.8.0beta0 -- nearly ready for long-awaited release! * pyext/setup.py.in: Adding handling for the YAML library: fix for Genser build from Anton Karneyeu. * src/Analyses/LHCB_2011_I917009.cc: Hiding lifetime-lookup error message if the offending particle is not a hadron. * include/Rivet/Math/MathHeader.hh: Using unnamespaced std::isnan and std::isinf as standard. 2012-03-16 Hendrik Hoeth * Improve default plot behaviour for 2D histograms 2012-03-15 Hendrik Hoeth * Make ATLAS_2012_I1084540 less verbose, and general code cleanup of that analysis. * New-style plugin hook in ATLAS_2011_I926145, ATLAS_2011_I944826 and ATLAS_2012_I1084540 * Fix compiler warnings in ATLAS_2011_I944826 and CMS_2011_S8973270 * CMS_2011_S8941262: Weights are double, not int. * disable inRange() tests in test/testMath.cc until we have a proper fix for the compiler warnings we see on SL5. 2012-03-07 Andy Buckley * Marking ATLAS_2011_I919017 as VALIDATED (this should have happened a long time ago) and adding more references. 2012-02-28 Hendrik Hoeth * lighthisto.py: Caching for re.compile(). This speeds up aida2flat and flat2aida by more than an order of magnitude. 2012-02-27 Andy Buckley * doc/mk-analysis-html: Adding more LaTeX/text -> HTML conversion replacements, including better <,> handling. 2012-02-26 Andy Buckley * Adding CMS_2011_S8973270, CMS_2011_S8941262, CMS_2011_S9215166, CMS_QCD_10_024, from CMS. * Adding LHCB_2011_I917009 analysis, from Alex Grecu. * src/Core/Analysis.cc, include/Rivet/Analysis.hh: Add a numeric-arg version of histoPath(). 2012-02-24 Holger Schulz * Adding ATLAS Ks/Lambda analysis. 2012-02-20 Andy Buckley * src/Analyses/ATLAS_2011_I925932.cc: Using new overflow-aware normalize() in place of counters and scale(..., 1/count) 2012-02-14 Andy Buckley * Splitting MC_GENERIC to put the PDF and PID plotting into MC_PDFS and MC_IDENTIFIED respectively. * Renaming MC_LEADINGJETS to MC_LEADJETUE. 2012-02-14 Hendrik Hoeth * DELPHI_1996_S3430090 and ALEPH_1996_S3486095: fix rapidity vs {Thrust,Sphericity}-axis. 2012-02-14 Andy Buckley * bin/compare-histos: Don't attempt to remove bins from MC histos where they aren't found in the ref file, if the ref file is not expt data, or if the new --no-rmgapbins arg is given. * bin/rivet: Remove the conversion of requested analysis names to upper-case: mixed-case analysis names will now work. 2012-02-14 Frank Siegert * Bugfixes and improvements for MC_TTBAR: - Avoid assert failure with logspace starting at 0.0 - Ignore charged lepton in jet finding (otherwise jet multi is always +1). - Add some dR/deta/dphi distributions as noted in TODO - Change pT plots to logspace as well (to avoid low-stat high pT bins) 2012-02-10 Hendrik Hoeth * rivet-mkhtml -c option now has the semantics of a .plot file. The contents are appended to the dat output by compare-histos. 2012-02-09 David Grellscheid * Fixed broken UnstableFS behaviour 2012-01-25 Frank Siegert * Improvements in make-plots: - Add PlotTickLabels and RatioPlotTickLabels options (cf. make-plots.txt) - Make ErrorBars and ErrorBands non-exclusive (and change their order, such that Bars are on top of Bands) 2012-01-25 Holger Schulz * Add ATLAS diffractive gap analysis 2012-01-23 Andy Buckley * bin/rivet: When using --list-analyses, the analysis summary is now printed out when log level is <= INFO, rather than < INFO. The effect on command line behaviour is that useful identifying info is now printed by default when using --list-analyses, rather than requiring --list-analyses -v. To get the old behaviour, e.g. if using the output of rivet --list-analyses for scripting, now use --list-analyses -q. 2012-01-22 Andy Buckley * Tidying lighthisto, including fixing the order in which +- error values are passed to the Bin constructor in fromFlatHisto. 2012-01-16 Frank Siegert * Bugfix in ATLAS_2012_I1083318: Include non-signal neutrinos in jet clustering. * Add first version of ATLAS_2012_I1083318 (W+jets). Still UNVALIDATED until final happiness with validation plots arises and data is in Hepdata. * Bugfix in ATLAS_2010_S8919674: Really use neutrino with highest pT for Etmiss. Doesn't seem to make very much difference, but is more correct in principle. 2012-01-16 Peter Richardson * Fixes to ATLAS_20111_S9225137 to include reference data 2012-01-13 Holger Schulz * Add ATLAS inclusive lepton analysis 2012-01-12 Hendrik Hoeth * Font selection support in rivet-mkhtml 2012-01-11 Peter Richardson * Added pi0 to list of particles. 2012-01-11 Andy Buckley * Removing references to Boost random numbers. 2011-12-30 Andy Buckley * Adding a placeholder rivet-which script (not currently installed). * Tweaking to avoid a very time-consuming debug printout in compare-histos with the -v flag, and modifying the Rivet env vars in rivet-mkhtml before calling compare-histos to eliminate problems induced by relative paths (i.e. "." does not mean the same thing when the directory is changed within the script). 2011-12-12 Andy Buckley * Adding a command line completion function for rivet-mkhtml. 2011-12-12 Frank Siegert * Fix for factor of 2.0 in normalisation of CMS_2011_S9086218 * Add --ignore-missing option to rivet-mkhtml to ignore non-existing AIDA files. 2011-12-06 Andy Buckley * Include underflow and overflow bins in the normalisation when calling Analysis::normalise(h) 2011-11-23 Andy Buckley * Bumping version to 1.8.0alpha0 since the Jet interface changes are quite a major break with backward compatibility (although the vast majority of analyses should be unaffected). * Removing crufty legacy stuff from the Jet class -- there is never any ambiguity between whether Particle or FourMomentum objects are the constituents now, and the jet 4-momentum is set explicitly by the jet alg so that e.g. there is no mismatch if the FastJet pt recombination scheme is used. * Adding default do-nothing implementations of Analysis::init() and Analysis::finalize(), since it is possible for analysis implementations to not need to do anything in these methods, and forcing analysis authors to write do-nothing boilerplate code is not "the Rivet way"! 2011-11-19 Andy Buckley * Adding variant constructors to FastJets with a more natural Plugin* argument, and decrufting the constructor implementations a bit. * bin/rivet: Adding a more helpful error message if the rivet module can't be loaded, grouping the option parser options, removing the -A option (this just doesn't seem useful anymore), and providing a --pwd option as a shortcut to append "." to the search path. 2011-11-18 Andy Buckley * Adding a guide to compiling a new analysis template to the output message of rivet-mkanalysis. 2011-11-11 Andy Buckley * Version 1.7.0 release! * Protecting the OPAL 2004 analysis against NaNs in the hemispheres projection -- I can't track the origin of these and suspect some occasional memory corruption. 2011-11-09 Andy Buckley * Renaming source files for EXAMPLE and PDG_HADRON_MULTIPLICITIES(_RATIOS) analyses to match the analysis names. * Cosmetic fixes in ATLAS_2011_S9212183 SUSY analysis. * Adding new ATLAS W pT analysis from Elena Yatsenko (slightly adapted). 2011-10-20 Frank Siegert * Extend API of W/ZFinder to allow for specification of input final state in which to search for leptons/photons. 2011-10-19 Andy Buckley * Adding new version of LHCB_2010_S8758301, based on submission from Alex Grecu. There is some slightly dodgy-looking GenParticle* fiddling going on, but apparently it's necessary (and hopefully robust). 2011-10-17 Andy Buckley * bin/rivet-nopy linker line tweak to make compilation work with GCC 4.6 (-lHepMC has to be explicitly added for some reason). 2011-10-13 Frank Siegert * Add four CMS QCD analyses kindly provided by CMS. 2011-10-12 Andy Buckley * Adding a separate test program for non-matrix/vector math functions, and adding a new set of int/float literal arg tests for the inRange functions in it. * Adding a jet multiplicity plot for jets with pT > 30 GeV to MC_TTBAR. 2011-10-11 James Monk * root2flat was missing the first bin (plus spurious last bin) * My version of bash does not understand the pipe syntax |& in rivet-buildplugin 2011-09-30 James Monk * Fix bug in ATLAS_2010_S8817804 that misidentified the akt4 jets as akt6 2011-09-29 Andy Buckley * Converting FinalStateHCM to a slightly more general DISFinalState. 2011-09-26 Andy Buckley * Adding a default libname argument to rivet-buildplugin. If the first argument doesn't have a .so library suffix, then use RivetAnalysis.so as the default. 2011-09-19 Hendrik Hoeth * make-plots: Fixing regex for \physicscoor. Adding "FrameColor" option. 2011-09-17 Andy Buckley * Improving interactive metadata printout, by not printing headings for missing info. * Bumping the release number to 1.7.0alpha0, since with these SPIRES/Inspire changes and the MissingMomentum API change we need more than a minor release. * Updating the mkanalysis, BibTeX-grabbing and other places that care about analysis SPIRES IDs to also be able to handle the new Inspire system record IDs. The missing link is getting to HepData from an Inspire code... * Using the .info file rather than an in-code declaration to specify that an analysis needs cross-section information. * Adding Inspire support to the AnalysisInfo and Analysis interfaces. Maybe we can find a way to combine the two, e.g. return the SPIRES code prefixed with an "S" if no Inspire ID is available... 2011-09-17 Hendrik Hoeth * Added ALICE_2011_S8909580 (strange particle production at 900 GeV) * Feed-down correction in ALICE_2011_S8945144 2011-09-16 Andy Buckley * Adding ATLAS track jet analysis, modified from the version provided by Seth Zenz: ATLAS_2011_I919017. Note that this analysis is currently using the Inspire ID rather than the Spires one: we're clearly going to have to update the API to handle Inspire codes, so might as well start now... 2011-09-14 Andy Buckley * Applying histogram dynamic_cast protection patch from Anton Karneyeu and Alex Grecu. * Adding the ATLAS Z pT measurement at 7 TeV (ATLAS_2011_S9131140) and an MC analysis for VH->bb events (MC_VH2BB). 2011-09-12 Andy Buckley * Removing uses of getLog, cout, cerr, and endl from all standard analyses and projections, except in a very few special cases. 2011-09-10 Andy Buckley * Changing the behaviour and interface of the MissingMomentum projection to calculate vector ET correctly. This was previously calculated according to the common definition of -E*sin(theta) of the summed visible 4-momentum in the event, but that is incorrect because the timelike term grows monotonically. Instead, transverse 2-vectors of size ET need to be constructed for each visible particle, and vector-summed in the transverse plane. The rewrite of this behaviour made it opportune to make an API improvement: the previous method names scalarET/vectorET() have been renamed to scalar/vectorEt() to better match the Rivet FourMomentum::Et() method, and MissingMomentum::vectorEt() now returns a Vector3 rather than a double so that the transverse missing Et direction is also available. Only one data analysis has been affected by this change in behaviour: the D0_2004_S5992206 dijet delta(phi) analysis. It's expected that this change will not be very significant, as it is a *veto* on significant missing ET to reduce non-QCD contributions. MC studies using this analysis ~always run with QCD events only, so these contributions should be small. The analysis efficiency may have been greatly improved, as fewer events will now fail the missing ET veto cut. * Add sorting of the ParticleVector returned by the ChargedLeptons projection. * configure.ac: Adding a check to make sure that no-one tries to install into --prefix=$PWD. 2011-09-04 Andy Buckley * lighthisto fixes from Christian Roehr. 2011-08-23 Andy Buckley * Adding a new DECLARE_RIVET_PLUGIN wrapper macro to hide the details of the plugin hook system from analysis authors. Migration of all analyses and the rivet-mkanalysis script to use this as the standard plugin hook syntax. * Also call the --cflags option on root-config when using the --root option with rivet-biuldplugin (thanks to Richard Corke for the report) 2011-08-23 Frank Siegert * Added ATLAS_2011_S9126244 * Added ATLAS_2011_S9128077 2011-08-23 Hendrik Hoeth * Added ALICE_2011_S8945144 * Remove obsolete setBeams() from the analyses * Update CMS_2011_S8957746 reference data to the official numbers * Use Inspire rather than Spires. 2011-08-19 Frank Siegert * More NLO parton level generator friendliness: Don't crash or fail when there are no beam particles. * Add --ignore-beams option to skip compatibility check. 2011-08-09 David Mallows * Fix aida2flat to ignore empty dataPointSet 2011-08-07 Andy Buckley * Add some protection against attempts to book histograms with histo path names that are going to break the postprocessing scripts. * Adding TEXINPUTS and LATEXINPUTS prepend definitions to the variables provided by rivetenv.(c)sh. A manual setting of these variables that didn't include the Rivet TEXMFHOME path was breaking make-plots on lxplus, presumably since the system LaTeX packages are so old there. 2011-08-02 Frank Siegert Version 1.6.0 release! 2011-08-01 Frank Siegert * Overhaul of the WFinder and ZFinder projections, including a change of interface. This solves potential problems with leptons which are not W/Z constituents being excluded from the RemainingFinalState. 2011-07-29 Andy Buckley * New version of aida2root from James Monk. 2011-07-29 Frank Siegert * Fix implementation of --config file option in make-plots. 2011-07-27 David Mallows * Updated MC_TTBAR.plot to reflect updated analysis. 2011-07-25 Andy Buckley * Adding a useTransverseMass flag method and implementation to InvMassFinalState, and using it in the WFinder, after feedback from Gavin Hesketh. This was the neatest way I could do it :S Some other tidying up happened along the way. * Adding transverse mass massT and massT2 methods and functions for FourMomentum. 2011-07-22 Frank Siegert * Added ATLAS_2011_S9120807 * Add two more observables to MC_DIPHOTON and make its isolation cut more LHC-like * Add linear photon pT histo to MC_PHOTONJETS 2011-07-20 Andy Buckley * Making MC_TTBAR work with semileptonic ttbar events and generally tidying the code. 2011-07-19 Andy Buckley * Version bump to 1.5.2.b01 in preparation for a release in the very near future. 2011-07-18 David Mallows * Replaced MC_TTBAR: Added t,tbar reconstruction. Not yet working. 2011-07-18 Andy Buckley * bin/rivet-buildplugin.in: Pass the AM_CXXFLAGS variable (including the warning flags) to the C++ compiler when building user analysis plugins. * include/LWH/DataPointSet.h: Fix accidental setting of errorMinus = scalefactor * error_Plus_. Thanks to Anton Karneyeu for the bug report! 2011-07-18 Hendrik Hoeth * Added CMS_2011_S8884919 (charged hadron multiplicity in NSD events corrected to pT>=0). * Added CMS_2010_S8656010 and CMS_2010_S8547297 (charged hadron pT and eta in NSD events) * Added CMS_2011_S8968497 (chi_dijet) * Added CMS_2011_S8978280 (strangeness) 2011-07-13 Andy Buckley * Rivet PDF manual updates, to not spread disinformation about bootstrapping a Genser repo. 2011-07-12 Andy Buckley * bin/make-plots: Protect property reading against unstripped \r characters from DOS newlines. * bin/rivet-mkhtml: Add a -M unmatch regex flag (note that these are matching the analysis path rather than individual histos on this script), and speed up the initial analysis identification and selection by avoiding loops of regex comparisons for repeats of strings which have already been analysed. * bin/compare-histos: remove the completely (?) unused histogram list, and add -m and -M regex flags, as for aida2flat and flat2aida. 2011-06-30 Hendrik Hoeth * fix fromFlat() in lighthistos: It would ignore histogram paths before. * flat2aida: preserve histogram order from .dat files 2011-06-27 Andy Buckley * pyext/setup.py.in: Use CXXFLAGS and LDFLAGS safely in the Python extension build, and improve the use of build/src directory arguments. 2011-06-23 Andy Buckley * Adding a tentative rivet-updateanalyses script, based on lhapdf-getdata, which will download new analyses as requested. We could change our analysis-providing behaviour a bit to allow this sort of delivery mechanism to be used as the normal way of getting analysis updates without us having to make a whole new Rivet release. It is nice to be able to identify analyses with releases, though, for tracking whether bugs have been addressed. 2011-06-10 Frank Siegert * Bugfixes in WFinder. 2011-06-10 Andy Buckley * Adding \physicsxcoor and \physicsycoor treatment to make-plots. 2011-06-06 Hendrik Hoeth * Allow for negative cross-sections. NLO tools need this. * make-plots: For RatioPlotMode=deviation also consider the MC uncertainties, not just data. 2011-06-04 Hendrik Hoeth * Add support for goodness-of-fit calculations to make-plots. The results are shown in the legend, and one histogram can be selected to determine the color of the plot margin. See the documentation for more details. 2011-06-04 Andy Buckley * Adding auto conversion of Histogram2D to DataPointSets in the AnalysisHandler _normalizeTree method. 2011-06-03 Andy Buckley * Adding a file-weight feature to the Run object, which will optionally rescale the weights in the provided HepMC files. This should be useful for e.g. running on multiple differently-weighted AlpGen HepMC files/streams. The new functionality is used by the rivet command via an optional weight appended to the filename with a colon delimiter, e.g. "rivet fifo1.hepmc fifo2.hepmc:2.31" 2011-06-01 Hendrik Hoeth * Add BeamThrust projection 2011-05-31 Hendrik Hoeth * Fix LIBS for fastjet-3.0 * Add basic infrastructure for Taylor plots in make-plots * Fix OPAL_2004_S6132243: They are using charged+neutral. * Release 1.5.1 2011-05-22 Andy Buckley * Adding plots of stable and decayed PID multiplicities to MC_GENERIC (useful for sanity-checking generator setups). * Removing actually-unused ProjectionApplier.fhh forward declaration header. 2011-05-20 Andy Buckley * Removing import of ipython shell from rivet-rescale, having just seen it throw a multi-coloured warning message on a student's lxplus Rivet session! * Adding support for the compare-histos --no-ratio flag when using rivet-mkhtml. Adding --rel-ratio, --linear, etc. is an exercise for the enthusiast ;-) 2011-05-10 Andy Buckley * Internal minor changes to the ProjectionHandler and ProjectionApplier interfaces, in particular changing the ProjectionHandler::create() function to be called getInstance and to return a reference rather than a pointer. The reference change is to make way for an improved singleton implementation, which cannot yet be used due to a bug in projection memory management. The code of the improved singleton is available, but commented out, in ProjectionManager.hh to allow for easier migration and to avoid branching. 2011-05-08 Andy Buckley * Extending flat2aida to be able to read from and write to stdin/out as for aida2flat, and also eliminating the internal histo parsing representation in favour of the one in lighthisto. lighthisto's fromFlat also needed a bit of an overhaul: it has been extended to parse each histo's chunk of text (including BEGIN and END lines) in fromFlatHisto, and for fromFlat to parse a collection of histos from a file, in keeping with the behaviour of fromDPS/fromAIDA. Merging into Professor is now needed. * Extending aida2flat to have a better usage message, to accept input from stdin for command chaining via pipes, and to be a bit more sensibly internally structured (although it also now has to hold all histos in memory before writing out -- that shouldn't be a problem for anything other than truly huge histo files). 2011-05-04 Andy Buckley * compare-histos: If using --mc-errs style, prefer dotted and dashdotted line styles to dashed, since dashes are often too long to be distinguishable from solid lines. Even better might be to always use a solid line for MC errs style, and to add more colours. * rivet-mkhtml: use a no-mc-errors drawing style by default, to match the behaviour of compare-histos, which it calls. The --no-mc-errs option has been replaced with an --mc-errs option. 2011-05-04 Hendrik Hoeth * Ignore duplicate files in compare-histos. 2011-04-25 Andy Buckley * Adding some hadron-specific N and sumET vs. |eta| plots to MC_GENERIC. * Re-adding an explicit attempt to get the beam particles, since HepMC's IO_HERWIG seems to not always set them even though it's meant to. 2011-04-19 Hendrik Hoeth * Added ATLAS_2011_S9002537 W asymmetry analysis 2011-04-14 Hendrik Hoeth * deltaR, deltaPhi, deltaEta now available in all combinations of FourVector, FourMomentum, Vector3, doubles. They also accept jets and particles as arguments now. 2011-04-13 David Grellscheid * added ATLAS 8983313: 0-lepton BSM 2011-04-01 Andy Buckley * bin/rivet-mkanalysis: Don't try to download SPIRES or HepData info if it's not a standard analysis (i.e. if the SPIRES ID is not known), and make the default .info file validly parseable by YAML, which was an unfortunate gotcha for anyone writing a first analysis. 2011-03-31 Andy Buckley * bin/compare-histos: Write more appropriate ratio plot labels when not comparing to data, and use the default make-plots labels when comparing to data. * bin/rivet-mkhtml: Adding a timestamp to the generated pages, and a -t/--title option to allow setting the main HTML page title on the command line: otherwise it becomes impossible to tell these pages apart when you have a lot of them, except by URL! 2011-03-24 Andy Buckley * bin/aida2flat: Adding a -M option to *exclude* histograms whose paths match a regex. Writing a negative lookahead regex with positive matching was far too awkward! 2011-03-18 Leif Lönnblad * src/Core/AnalysisHandler.cc (AnalysisHandler::removeAnalysis): Fixed strange shared pointer assignment that caused seg-fault. 2011-03-13 Hendrik Hoeth * filling of functions works now in a more intuitive way (I hope). 2011-03-09 Andy Buckley * Version 1.5.0 release! 2011-03-08 Andy Buckley * Adding some extra checks for external packages in make-plots. 2011-03-07 Andy Buckley * Changing the accuracy of the beam energy checking to 1%, to make the UI a bit more forgiving. It's still best to specify exactly the right energy of course! 2011-03-01 Andy Buckley * Adding --no-plottitle to compare-histos (+ completion). * Fixing segfaults in UA1_1990_S2044935 and UA5_1982_S875503. * Bump ABI version numbers for 1.5.0 release. * Use AnalysisInfo for storage of the NeedsCrossSection analysis flag. * Allow field setting in AnalysisInfo. 2011-02-27 Hendrik Hoeth * Support LineStyle=dashdotted in make-plots * New command line option --style for compare-histos. Options are "default", "bw" and "talk". * cleaner uninstall 2011-02-26 Andy Buckley * Changing internal storage and return type of Particle::pdgId() to PdgId, and adding Particle::energy(). * Renaming Analysis::energies() as Analysis::requiredEnergies(). * Adding beam energies into beam consistency checking: Analysis::isCompatible methods now also require the beam energies to be provided. * Removing long-deprecated AnalysisHandler::init() constructor and AnalysisHandler::removeIncompatibleAnalyses() methods. 2011-02-25 Andy Buckley * Adding --disable-obsolete, which takes its value from the value of --disable-preliminary by default. * Replacing RivetUnvalidated and RivetPreliminary plugin libraries with optionally-configured analysis contents in the experiment-specific plugin libraries. This avoids issues with making libraries rebuild consistently when sources were reassigned between libraries. 2011-02-24 Andy Buckley * Changing analysis plugin registration to fall back through available paths rather than have RIVET_ANALYSIS_PATH totally override the built-in paths. The first analysis hook of a given name to be found is now the one that's used: any duplicates found will be warned about but unused. getAnalysisLibPaths() now returns *all* the search paths, in keeping with the new search behaviour. 2011-02-22 Andy Buckley * Moving the definition of the MSG_* macros into the Logging.hh header. They can't be used everywhere, though, as they depend on the existence of a this->getLog() method in the call scope. This move makes them available in e.g. AnalysisHandler and other bits of framework other than projections and analyses. * Adding a gentle print-out from the Rivet AnalysisHandler if preliminary analyses are being used, and strengthening the current warning if unvalidated analyses are used. * Adding documentation about the validation "process" and the (un)validated and preliminary analysis statuses. * Adding the new RivetPreliminary analysis library, and the corresponding --disable-preliminary configure flag. Analyses in this library are subject to change names, histograms, reference data values, etc. between releases: make sure you check any dependences on these analyses when upgrading Rivet. * Change the Python script ref data search behaviours to use Rivet ref data by default where available, rather than requiring a -R option. Where relevant, -R is still a valid option, to avoid breaking legacy scripts, and there is a new --no-rivet-refs option to turn the default searching *off*. * Add the prepending and appending optional arguments to the path searching functions. This will make it easier to combine the search functions with user-supplied paths in Python scripts. * Make make-plots killable! * Adding Rivet version to top of run printout. * Adding Run::crossSection() and printing out the cross-section in pb at the end of a Rivet run. 2011-02-22 Hendrik Hoeth * Make lighthisto.py aware of 2D histograms * Adding published versions of the CDF_2008 leading jets and DY analyses, and marking the preliminary ones as "OBSOLETE". 2011-02-21 Andy Buckley * Adding PDF documentation for path searching and .info/.plot files, and tidying overfull lines. * Removing unneeded const declarations from various return by value path and internal binning functions. Should not affect ABI compatibility but will force recompilation of external packages using the RivetPaths.hh and Utils.hh headers. * Adding findAnalysis*File(fname) functions, to be used by Rivet scripts and external programs to find files known to Rivet according to Rivet's (newly standard) lookup rule. * Changing search path function behaviour to always return *all* search directories rather than overriding the built-in locations if the environment variables are set. 2011-02-20 Andy Buckley * Adding the ATLAS 2011 transverse jet shapes analysis. 2011-02-18 Hendrik Hoeth * Support for transparency in make-plots 2011-02-18 Frank Siegert * Added ATLAS prompt photon analysis ATLAS_2010_S8914702 2011-02-10 Hendrik Hoeth * Simple NOOP constructor for Thrust projection * Add CMS event shape analysis. Data read off the plots. We will get the final numbers when the paper is accepted by the journal. 2011-02-10 Frank Siegert * Add final version of ATLAS dijet azimuthal decorrelation 2011-02-10 Hendrik Hoeth * remove ATLAS conf note analyses for which we have final data * reshuffle histograms in ATLAS minbias analysis to match Hepdata * small pT-cut fix in ATLAS track based UE analysis 2011-01-31 Andy Buckley * Doc tweaks and adding cmp-by-|p| functions for Jets, to match those added by Hendrik for Particles. * Don't sum photons around muons in the D0 2010 Z pT analysis. 2011-01-27 Andy Buckley * Adding ATLAS 2010 min bias and underlying event analyses and data. 2011-01-23 Andy Buckley * Make make-plots write out PDF rather than PS by default. 2011-01-12 Andy Buckley * Fix several rendering and comparison bugs in rivet-mkhtml. * Allow make-plots to write into an existing directory, at the user's own risk. * Make rivet-mkhtml produce PDF-based output rather than PS by default (most people want PDF these days). Can we do the same change of default for make-plots? * Add getAnalysisPlotPaths() function, and use it in compare-histos * Use proper .info file search path function internally in AnalysisInfo::make. 2011-01-11 Andy Buckley * Clean up ATLAS dijet analysis. 2010-12-30 Andy Buckley * Adding a run timeout option, and small bug-fixes to the event timeout handling, and making first event timeout work nicely with the run timeout. Run timeout is intended to be used in conjunction with timed batch token expiry, of the type that likes to make 0 byte AIDA files on LCG when Grid proxies time out. 2010-12-21 Andy Buckley * Fix the cuts in the CDF 1994 colour coherence analysis. 2010-12-19 Andy Buckley * Fixing CDF midpoint cone jet algorithm default construction to have an overlap threshold of 0.5 rather than 0.75. This was recommended by the FastJet manual, and noticed while adding the ATLAS and CMS cones. * Adding ATLAS and CMS old iterative cones as "official" FastJets constructor options (they could always have been used by explicit instantiation and attachment of a Fastjet plugin object). * Removing defunct and unused ClosestJetShape projection. 2010-12-16 Andy Buckley * bin/compare-histos, pyext/lighthisto.py: Take ref paths from rivet module API rather than getting the environment by hand. * pyext/lighthisto.py: Only read .plot info from the first matching file (speed-up compare-histos). 2010-12-14 Andy Buckley * Augmenting the physics vector functionality to make FourMomentum support maths operators with the correct return type (FourMomentum rather than FourVector). 2010-12-11 Andy Buckley * Adding a --event-timeout option to control the event timeout, adding it to the completion script, and making sure that the init time check is turned OFF once successful! * Adding an 3600 second timeout for initialising an event file. If it takes longer than (or anywhere close to) this long, chances are that the event source is inactive for some reason (perhaps accidentally unspecified and stdin is not active, or the event generator has died at the other end of the pipe. The reason for not making it something shorter is that e.g. Herwig++ or Sherpa can have long initialisation times to set up the MPI handler or to run the matrix element integration. An timeout after an hour is still better than a batch job which runs for two days before you realise that you forgot to generate any events! 2010-12-10 Andy Buckley * Fixing unbooked-histo segfault in UA1_1990_S2044935 at 63 GeV. 2010-12-08 Hendrik Hoeth * Fixes in ATLAS_2010_CONF_083, declaring it validated * Added ATLAS_2010_CONF_046, only two plots are implemented. The paper will be out soon, and we don't need the other plots right now. Data is read off the plots in the note. * New option "SmoothLine" for HISTOGRAM sections in make-plots * Changed CustomTicks to CustomMajorTicks and added CustomMinorTicks in make-plots. 2010-12-07 Andy Buckley * Update the documentation to explain this latest bump to path lookup behaviours. * Various improvements to existing path lookups. In particular, the analysis lib path locations are added to the info and ref paths to avoid having to set three variables when you have all three file types in the same personal plugin directory. * Adding setAnalysisLibPaths and addAnalysisLibPath functions. rivet --analysis-path{,-append} now use these and work correctly. Hurrah! * Add --show-analyses as an alias for --show-analysis, following a comment at the ATLAS tutorial. 2010-12-07 Hendrik Hoeth * Change LegendXPos behaviour in make-plots. Now the top left corner of the legend is used as anchor point. 2010-12-03 Andy Buckley * 1.4.0 release. * Add bin-skipping to compare-histos to avoid one use of rivet-rmgaps (it's still needed for non-plotting post-processing like Professor). 2010-12-03 Hendrik Hoeth * Fix normalisation issues in UA5 and ALEPH analyses 2010-11-27 Andy Buckley * MathUtils.hh: Adding fuzzyGtrEquals and fuzzyLessEquals, and tidying up the math utils collection a bit. * CDF 1994 colour coherence analysis overhauled and correction/norm factors fixed. Moved to VALIDATED status. * Adding programmable completion for aida2flat and flat2aida. * Improvements to programmable completion using the neat _filedir completion shell function which I just discovered. 2010-11-26 Andy Buckley * Tweak to floating point inRange to use fuzzyEquals for CLOSED interval equality comparisons. * Some BibTeX generation improvements, and fixing the ATLAS dijet BibTeX key. * Resolution upgrade in PNG make-plots output. * CDF_2005_S6217184.cc, CDF_2008_S7782535.cc: Updates to use the new per-jet JetAlg interface (and some other fixes). * JetAlg.cc: Changed the interface on request to return per-jet rather than per-event jet shapes, with an extra jet index argument. * MathUtils.hh: Adding index_between(...) function, which is handy for working out which bin a value falls in, given a set of bin edges. 2010-11-25 Andy Buckley * Cmp.hh: Adding ASC/DESC (and ANTISORTED) as preferred non-EQUIVALENT enum value synonyms over misleading SORTED/UNSORTED. * Change of rapidity scheme enum name to RapScheme * Reworking JetShape a bit further: constructor args now avoid inconsistencies (it was previously possible to define incompatible range-ends and interval). Internal binning implementation also reworked to use a vector of bin edges: the bin details are available via the interface. The general jet pT cuts can be applied via the JetShape constructor. * MathUtils.hh: Adding linspace and logspace utility functions. Useful for defining binnings. * Adding more general cuts on jet pT and (pseudo)rapidity. 2010-11-11 Andy Buckley * Adding special handling of FourMomentum::mass() for computed zero-mass vectors for which mass2 can go (very slightly) negative due to numerical precision. 2010-11-10 Hendrik Hoeth * Adding ATLAS-CONF-2010-083 conference note. Data is read from plots. When I run Pythia 6 the bins close to pi/2 are higher than in the note, so I call this "unvalidated". But then ... the note doesn't specify a tune or even just a version for the generators in the plots. Not even if they used Pythia 6 or Pythia 8. Probably 6, since they mention AGILe. 2010-11-10 Andy Buckley * Adding a JetAlg::useInvisibles(bool) mechanism to allow ATLAS jet studies to include neutrinos. Anyone who chooses to use this mechanism had better be careful to remove hard neutrinos manually in the provided FinalState object. 2010-11-09 Hendrik Hoeth * Adding ATLAS-CONF-2010-049 conference note. Data is read from plots. Fragmentation functions look good, but I can't reproduce the MC lines (or even the relative differences between them) in the jet cross-section plots. So consider those unvalidated for now. Oh, and it seems ATLAS screwed up the error bands in their ratio plots, too. They are upside-down. 2010-11-07 Hendrik Hoeth * Adding ATLAS-CONF-2010-081 conference note. Data is read from plots. 2010-11-06 Andy Buckley * Deprecating the old JetShape projection and renaming to ClosestJetShape: the algorithm has a tenuous relationship with that actually used in the CDF (and ATLAS) jet shape analyses. CDF analyses to be migrated to the new JetShape projection... and some of that projection's features, design elements, etc. to be finished off: we may as well take this opportunity to clear up what was one of our nastiest pieces of code. 2010-11-05 Hendrik Hoeth * Adding ATLAS-CONF-2010-031 conference note. Data is read from plots. 2010-10-29 Andy Buckley * Making rivet-buildplugin use the same C++ compiler and CXXFLAGS variable as used for the Rivet system build. * Fixing NeutralFinalState projection to, erm, actually select neutral particles (by Hendrik). * Allow passing a general FinalState reference to the JetShape projection, rather than requiring a VetoedFS. 2010-10-07 Andy Buckley * Adding a --with-root flag to rivet-buildplugin to add root-config --libs flags to the plugin build command. 2010-09-24 Andy Buckley * Releasing as Rivet 1.3.0. * Bundling underscore.sty to fix problems with running make-plots on dat files generated by compare-histos from AIDA files with underscores in their names. 2010-09-16 Andy Buckley * Fix error in N_effective definition for weighted profile errors. 2010-08-18 Andy Buckley * Adding MC_GENERIC analysis. NB. Frank Siegert also added MC_HJETS. 2010-08-03 Andy Buckley * Fixing compare-histos treatment of what is now a ref file, and speeding things up... again. What a mess! 2010-08-02 Andy Buckley * Adding rivet-nopy: a super-simple Rivet C++ command line interface which avoids Python to make profiling and debugging easier. * Adding graceful exception handling to the AnalysisHandler event loop methods. * Changing compare-histos behaviour to always show plots for which there is at least one MC histo. The default behaviour should now be the correct one in 99% of use cases. 2010-07-30 Andy Buckley * Merging in a fix for shared_ptrs not being compared for insertion into a set based on raw pointer value. 2010-07-16 Andy Buckley * Adding an explicit library dependency declaration on libHepMC, and hence removing the -lHepMC from the rivet-config --libs output. 2010-07-14 Andy Buckley * Adding a manual section on use of Rivet (and AGILe) as libraries, and how to use the -config scripts to aid compilation. * FastJets projection now allows setting of a jet area definition, plus a hacky mapping for getting the area-enabled cluster sequence. Requested by Pavel Starovoitov & Paolo Francavilla. * Lots of script updates in last two weeks! 2010-06-30 Andy Buckley * Minimising amount of Log class mapped into SWIG. * Making Python ext build checks fail with error rather than warning if it has been requested (or, rather, not explicitly disabled). 2010-06-28 Andy Buckley * Converting rivet Python module to be a package, with the dlopen flag setting etc. done around the SWIG generated core wrapper module (rivet.rivetwrap). * Requiring Python >= 2.4.0 in rivet scripts (and adding a Python version checker function to rivet module) * Adding --epspng option to make-plots (and converting to use subprocess.Popen). 2010-06-27 Andy Buckley * Converting JADE_OPAL analysis to use the fastjet exclusive_ymerge_*max* function, rather than just exclusive_ymerge: everything looks good now. It seems that fastjet >= 2.4.2 is needed for this to work properly. 2010-06-24 Andy Buckley * Making rivet-buildplugin look in its own bin directory when trying to find rivet-config. 2010-06-23 Andy Buckley * Adding protection and warning about numerical precision issues in jet mass calculation/histogramming to the MC_JetAnalysis analysis. * Numerical precision improvement in calculation of Vector4::mass2. * Adding relative scale ratio plot flag to compare-histos * Extended command completion to rivet-config, compare-histos, and make-plots. * Providing protected log messaging macros, MSG_{TRACE,DEBUG,INFO,WARNING,ERROR} cf. Athena. * Adding environment-aware functions for Rivet search path list access. 2010-06-21 Andy Buckley * Using .info file beam ID and energy info in HTML and LaTeX documentation. * Using .info file beam ID and energy info in command-line printout. * Fixing a couple of references to temporary variables in the analysis beam info, which had been introduced during refactoring: have reinstated reference-type returns as the more efficient solution. This should not affect API compatibility. * Making SWIG configure-time check include testing for incompatibilities with the C++ compiler (re. the recurring _const_ char* literals issue). * Various tweaks to scripts: make-plots and compare-histos processes are now renamed (on Linux), rivet-config is avoided when computing the Rivet version,and RIVET_REF_PATH is also set using the rivet --analysis-path* flags. compare-histos now uses multiple ref data paths for .aida file globbing. * Hendrik changed VetoedFinalState comparison to always return UNDEFINED if vetoing on the results of other FS projections is being used. This is the only simple way to avoid problems emanating from the remainingFinalState thing. 2010-06-19 Andy Buckley * Adding --analysis-path and --analysis-path-append command-line flags to the rivet script, as a "persistent" way to set or extend the RIVET_ANALYSIS_PATH variable. * Changing -Q/-V script verbosity arguments to more standard -q/-v, after Hendrik moaned about it ;) * Small fix to TinyXML operator precendence: removes a warning, and I think fixes a small bug. * Adding plotinfo entries for new jet rapidity and jet mass plots in MC_JetAnalysis derivatives. * Moving MC_JetAnalysis base class into a new libRivetAnalysisTools library, with analysis base class and helper headers to be stored in the reinstated Rivet/Analyses include directory. 2010-06-08 Andy Buckley * Removing check for CEDARSTD #define guard, since we no longer compile against AGILe and don't have to be careful about duplication. * Moving crappy closest approach and decay significance functions from Utils into SVertex, which is the only place they have ever been used (and is itself almost entirely pointless). * Overhauling particle ID <-> name system to clear up ambiguities between enums, ints, particles and beams. There are no more enums, although the names are still available as const static ints, and names are now obtained via a singleton class which wraps an STL map for name/ID lookups in both directions. 2010-05-18 Hendrik Hoeth * Fixing factor-of-2 bug in the error calculation when scaling histograms. * Fixing D0_2001_S4674421 analysis. 2010-05-11 Andy Buckley * Replacing TotalVisibleMomentum with MissingMomentum in analyses and WFinder. Using vector ET rather than scalar ET in some places. 2010-05-07 Andy Buckley * Revamping the AnalysisHandler constructor and data writing, with some LWH/AIDA mangling to bypass the stupid AIDA idea of having to specify the sole output file and format when making the data tree. Preferred AnalysisHandler constructor now takes only one arg -- the runname -- and there is a new AH.writeData(outfile) method to replace AH.commitData(). Doing this now to begin migration to more flexible histogramming in the long term. 2010-04-21 Hendrik Hoeth * Fixing LaTeX problems (make-plots) on ancient machines, like lxplus. 2010-04-29 Andy Buckley * Fixing (I hope!) the treatment of weighted profile bin errors in LWH. 2010-04-21 Andy Buckley * Removing defunct and unused KtJets and Configuration classes. * Hiding some internal details from Doxygen. * Add @brief Doxygen comments to all analyses, projections and core classes which were missing them. 2010-04-21 Hendrik Hoeth * remove obsolete reference to InitialQuarks from DELPHI_2002 * fix normalisation in CDF_2000_S4155203 2010-04-20 Hendrik Hoeth * bin/make-plots: real support for 2-dim histograms plotted as colormaps, updated the documentation accordingly. * fix misleading help comment in configure.ac 2010-04-08 Andy Buckley * bin/root2flat: Adding this little helper script, minimally modified from one which Holger Schulz made for internal use in ATLAS. 2010-04-05 Andy Buckley * Using spiresbib in rivet-mkanalysis: analysis templates made with rivet-mkanalysis will now contain a SPIRES-dumped BibTeX key and entry if possible! * Adding BibKey and BibTeX entries to analysis metadata files, and updating doc build to use them rather than the time-consuming SPIRES screen-scraping. Added SPIRES BibTeX dumps to all analysis metadata using new (uninstalled & unpackaged) doc/get-spires-data script hack. * Updating metadata files to add Energies, Beams and PtCuts entries to all of them. * Adding ToDo, NeedsCrossSection, and better treatment of Beams and Energies entries in metadata files and in AnalysisInfo and Analysis interfaces. 2010-04-03 Andy Buckley * Frank Siegert: Update of rivet-mkhtml to conform to improved compare-histos. * Frank Siegert: LWH output in precision-8 scientific notation, to solve a binning precision problem... the first time weve noticed a problem! * Improved treatment of data/reference datasets and labels in compare-histos. * Rewrite of rivet-mkanalysis in Python to make way for neat additions. * Improving SWIG tests, since once again the user's biuld system must include SWIG (no test to check that it's a 'good SWIG', since the meaning of that depends on which compiler is being used and we hope that the user system is consistent... evidence from Finkified Macs and bloody SLC5 notwithstanding). 2010-03-23 Andy Buckley * Tag as patch release 1.2.1. 2010-03-22 Andy Buckley * General tidying of return arguments and intentionally unused parameters to keep -Wextra happy (some complaints remain from TinyXML, FastJet, and HepMC). * Some extra bug fixes: in FastJets projection with explicit plugin argument, removing muon veto cut on FoxWolframMoments. * Adding UNUSED macro to help with places where compiler warnings can't be helped. * Turning on -Wextra warnings, and fixing some violations. 2010-03-21 Andy Buckley * Adding MissingMomentum projection, as replacement for ~all uses of now-deprecated TotalVisibleMomentum projection. * Fixing bug with TotalVisibleMomentum projection usage in MC_SUSY analysis. * Frank Siegert fixed major bug in pTmin param passing to FastJets projection. D'oh: requires patch release. 2010-03-02 Andy Buckley * Tagging for 1.2.0 release... at last! 2010-03-01 Andy Buckley * Updates to manual, manual generation scripts, analysis info etc. * Add HepData URL to metadata print-out with rivet --show-analysis * Fix average Et plot in UA1 analysis to only apply to the tracker acceptance (but to include neutral particle contributions, i.e. the region of the calorimeter in the tracker acceptance). * Use Et rather than pT in filling the scalar Et measure in TotalVisibleMomentum. * Fixes to UA1 normalisation (which is rather funny in the paper). 2010-02-26 Andy Buckley * Update WFinder to not place cuts and other restrictions on the neutrino. 2010-02-11 Andy Buckley * Change analysis loader behaviour to use ONLY RIVET_ANALYSIS_PATH locations if set, otherwise use ONLY the standard Rivet analysis install path. Should only impact users of personal plugin analyses, who should now explicitly set RIVET_ANALYSIS_PATH to load their analysis... and who can now create personal versions of standard analyses without getting an error message about duplicate loading. 2010-01-15 Andy Buckley * Add tests for "stable" heavy flavour hadrons in jets (rather than just testing for c/b hadrons in the ancestor lists of stable jet constituents) 2009-12-23 Hendrik Hoeth * New option "RatioPlotMode=deviation" in make-plots. 2009-12-14 Hendrik Hoeth * New option "MainPlot" in make-plots. For people who only want the ratio plot and nothing else. * New option "ConnectGaps" in make-plots. Set to 1 if you want to connect gaps in histograms with a line when ErrorBars=0. Works both in PLOT and in HISTOGRAM sections. * Eliminated global variables for coordinates in make-plots and enabled multithreading. 2009-12-14 Andy Buckley * AnalysisHandler::execute now calls AnalysisHandler::init(event) if it has not yet been initialised. * Adding more beam configuration features to Beam and AnalysisHandler: the setRunBeams(...) methods on the latter now allows a beam configuration for the run to be specified without using the Run class. 2009-12-11 Andy Buckley * Removing use of PVertex from few remaining analyses. Still used by SVertex, which is itself hardly used and could maybe be removed... 2009-12-10 Andy Buckley * Updating JADE_OPAL to do the histo booking in init(), since sqrtS() is now available at that stage. * Renaming and slightly re-engineering all MC_*_* analyses to not be collider-specific (now the Analysis::sqrtS/beams()) methods mean that histograms can be dynamically binned. * Creating RivetUnvalidated.so plugin library for unvalidated analyses. Unvalidated analyses now need to be explicitly enabled with a --enable-unvalidated flag on the configure script. * Various min bias analyses updated and validated. 2009-12-10 Hendrik Hoeth * Propagate SPECIAL and HISTOGRAM sections from .plot files through compare-histos * STAR_2006_S6860818: vs particle mass, validate analysis 2009-12-04 Andy Buckley * Use scaling rather than normalising in DELPHI_1996: this is generally desirable, since normalizing to 1 for 1/sig dsig/dx observables isn't correct if any events fall outside the histo bounds. * Many fixes to OPAL_2004. * Improved Hemispheres interface to remove unnecessary consts on returned doubles, and to also return non-squared versions of (scaled) hemisphere masses. * Add "make pyclean" make target at the top level to make it easier for developers to clean their Python module build when the API is extended. * Identify use of unvalidated analyses with a warning message at runtime. * Providing Analysis::sqrtS() and Analysis::beams(), and making sure they're available by the time the init methods are called. 2009-12-02 Andy Buckley * Adding passing of first event sqrt(s) and beams to analysis handler. * Restructuring running to only use one HepMC input file (no-one was using multiple ones, right?) and to break down the Run class to cleanly separate the init and event loop phases. End of file is now neater. 2009-12-01 Andy Buckley * Adding parsing of beam types and pairs of energies from YAML. 2009-12-01 Hendrik Hoeth * Fixing trigger efficiency in CDF_2009_S8233977 2009-11-30 Andy Buckley * Using shared pointers to make I/O object memory management neater and less error-prone. * Adding crossSectionPerEvent() method [== crossSection()/sumOfWeights()] to Analysis. Useful for histogram scaling since numerator of sumW_passed/sumW_total (to calculate pass-cuts xsec) is cancelled by dividing histo by sumW_passed. * Clean-up of Particle class and provision of inline PID:: functions which take a Particle as an argument to avoid having to explicitly call the Particle::pdgId() method. 2009-11-30 Hendrik Hoeth * Fixing division by zero in Profile1D bin errors for bins with just a single entry. 2009-11-24 Hendrik Hoeth * First working version of STAR_2006_S6860818 2009-11-23 Hendrik Hoeth * Adding missing CDF_2001_S4751469 plots to uemerge * New "ShowZero" option in make-plots * Improving lots of plot defaults * Fixing typos / non-existing bins in CDF_2001_S4751469 and CDF_2004_S5839831 reference data 2009-11-19 Hendrik Hoeth * Fixing our compare() for doubles. 2009-11-17 Hendrik Hoeth * Zeroth version of STAR_2006_S6860818 analysis (identified strange particles). Not working yet for unstable particles. 2009-11-11 Andy Buckley * Adding separate jet-oriented and photon-oriented observables to MC PHOTONJETUE analysis. * Bug fix in MC leading jets analysis, and general tidying of leading jet analyses to insert units, etc. (should not affect any current results) 2009-11-10 Hendrik Hoeth * Fixing last issues in STAR_2006_S6500200 and setting it to VALIDATED. * Noramlise STAR_2006_S6870392 to cross-section 2009-11-09 Andy Buckley * Overhaul of jet caching and ParticleBase interface. * Adding lists of analyses' histograms (obtained by scanning the plot info files) to the LaTeX documentation. 2009-11-07 Andy Buckley * Adding checking system to ensure that Projections aren't registered before the init phase of analyses. * Now that the ProjHandler isn't full of defunct pointers (which tend to coincidentally point to *new* Projection pointers rather than undefined memory, hence it wasn't noticed until recently!), use of a duplicate projection name is now banned with a helpful message at runtime. * (Huge) overhaul of ProjectionHandler system to use shared_ptr: projections are now deleted much more efficiently, naturally cleaning themselves out of the central repository as they go out of scope. 2009-11-06 Andy Buckley * Adding Cmp specialisation, using fuzzyEquals(). 2009-11-05 Hendrik Hoeth * Fixing histogram division code. 2009-11-04 Hendrik Hoeth * New analysis STAR_2006_S6500200 (pion and proton pT spectra in pp collisions at 200 GeV). It is still unclear if they used a cut in rapidity or pseudorapidity, thus the analysis is declared "UNDER DEVELOPMENT" and "DO NOT USE". * Fixing compare() in NeutralFinalState and MergedFinalState 2009-11-04 Andy Buckley * Adding consistence checking on beam ID and sqrt(s) vs. those from first event. 2009-11-03 Andy Buckley * Adding more assertion checks to linear algebra testing. 2009-11-02 Hendrik Hoeth * Fixing normalisation issue with stacked histograms in make-plots. 2009-10-30 Hendrik Hoeth * CDF_2009_S8233977: Updating data and axes labels to match final paper. Normalise to cross-section instead of data. 2009-10-23 Andy Buckley * Fixing Cheese-3 plot in CDF 2004... at last! 2009-10-23 Hendrik Hoeth * Fix muon veto in CDF_1994_S2952106, CDF_2005_S6217184, CDF_2008_S7782535, and D0_2004_S5992206 2009-10-19 Andy Buckley * Adding analysis info files for MC SUSY and PHOTONJETUE analyses. * Adding MC UE analysis in photon+jet events. 2009-10-19 Hendrik Hoeth * Adding new NeutralFinalState projection. Note that this final state takes E_T instead of p_T as argument (makes more sense for neutral particles). The compare() method does not yet work as expected (E_T comparison still missing). * Adding new MergedFinalState projection. This merges two final states, removing duplicate particles. Duplicates are identified by looking at the genParticle(), so users need to take care of any manually added particles themselves. * Fixing most open issues with the STAR_2009_UE_HELEN analysis. There is only one question left, regarding the away region. * Set the default split-merge value for SISCone in our FastJets projection to the recommended (but not Fastjet-default!) value of 0.75. 2009-10-17 Andy Buckley * Adding parsing of units in cross-sections passed to the "-x" flag, i.e. "-x 101 mb" is parsed internally into 1.01e11 pb. 2009-10-16 Hendrik Hoeth * Disabling DELPHI_2003_WUD_03_11 in the Makefiles, since I don't trust the data. * Getting STAR_2009_UE_HELEN to work. 2009-10-04 Andy Buckley * Adding triggers and other tidying to (still unvalidated) UA1_1990 analysis. * Fixing definition of UA5 trigger to not be intrinscally different for pp and ppbar: this is corrected for (although it takes some readng to work this out) in the 1982 paper, which I think is the only one to compare the two modes. * Moving projection setup and registration into init() method for remaining analyses. * Adding trigger implementations as projections for CDF Runs 0 & 1, and for UA5. 2009-10-01 Andy Buckley * Moving projection setup and registration into init() method for analyses from ALEPH, CDF and the MC_ group. * Adding generic SUSY validation analysis, based on plots used in ATLAS Herwig++ validation. * Adding sorted particle accessors to FinalState (cf. JetAlg). 2009-09-29 Andy Buckley * Adding optional use of args as regex match expressions with -l/--list-analyses. 2009-09-03 Andy Buckley * Passing GSL include path to compiler, since its absence was breaking builds on systems with no GSL installation in a standard location (such as SLC5, for some mysterious reason!) * Removing lib extension passing to compiler from the configure script, because Macs and Linux now both use .so extensions for the plugin analysis modules. 2009-09-02 Andy Buckley * Adding analysis info file path search with RIVET_DATA_PATH variable (and using this to fix doc build.) * Improvements to AnalysisLoader path search. * Moving analysis sources back into single directory, after a proletarian uprising ;) 2009-09-01 Andy Buckley * Adding WFinder and WAnalysis, based on Z proj and analysis, with some tidying of the Z code. * ClusteredPhotons now uses an IdentifiedFS to pick the photons to be looped over, and only clusters photons around *charged* signal particles. 2009-08-31 Andy Buckley * Splitting analyses by directory, to make it easier to disable building of particular analysis group plugin libs. * Removing/merging headers for all analyses except for the special MC_JetAnalysis base class. * Exit with an error message if addProjection is used twice from the same parent with distinct projections. 2009-08-28 Andy Buckley * Changed naming convention for analysis plugin libraries, since the loader has changed so much: they must now *start* with the word "Rivet" (i.e. no lib prefix). * Split standard plugin analyses into several plugin libraries: these will eventually move into separate subdirs for extra build convenience. * Started merging analysis headers into the source files, now that we can (the plugin hooks previously forbade this). * Replacement of analysis loader system with a new one based on ideas from ThePEG, which uses dlopen-time instantiation of templated global variables to reduce boilerplate plugin hooks to one line in analyses. 2009-07-14 Frank Siegert * Replacing in-source histo-booking metadata with .plot files. 2009-07-14 Andy Buckley * Making Python wrapper files copy into place based on bundled versions for each active HepMC interface (2.3, 2.4 & 2.5), using a new HepMC version detector test in configure. * Adding YAML metadata files and parser, removing same metadata from the analysis classes' source headers. 2009-07-07 Andy Buckley * Adding Jet::hadronicEnergy() * Adding VisibleFinalState and automatically using it in JetAlg projections. * Adding YAML parser for new metadata (and eventually ref data) files. 2009-07-02 Andy Buckley * Adding Jet::neutralEnergy() (and Jet::totalEnergy() for convenience/symmetry). 2009-06-25 Andy Buckley * Tidying and small efficiency improvements in CDF_2008_S7541902 W+jets analysis (remove unneeded second stage of jet storing, sorting the jets twice, using foreach, etc.). 2009-06-24 Andy Buckley * Fixing Jet's containsBottom and containsCharm methods, since B hadrons are not necessarily to be found in the final state. Discovered at the same time that HepMC::GenParticle defines a massively unhelpful copy constructor that actually loses the tree information; it would be better to hide it entirely! * Adding RivetHepMC.hh, which defines container-type accessors to HepMC particles and vertices, making it possible to use Boost foreach and hence avoiding the usual huge boilerplate for-loops. 2009-06-11 Andy Buckley * Adding --disable-pdfmanual option, to make the bootstrap a bit more robust. * Re-enabling D0IL in FastJets: adding 10^-10 to the pTmin removes the numerical instability! * Fixing CDF_2004 min/max cone analysis to use calo jets for the leading jet Et binning. Thanks to Markus Warsinsky for (re)discovering this bug: I was sure it had been fixed. I'm optimistic that this will fix the main distributions, although Swiss Cheese "minus 3" is still likely to be broken. Early tests look okay, but it'll take more stats before we can remove the "do not trust" sign. 2009-06-10 Andy Buckley * Providing "calc" methods so that Thrust and Sphericity projections can be used as calculators without having to use the projecting/caching system. 2009-06-09 Andy Buckley * 1.1.3 release! * More doc building and SWIG robustness tweaks. 2009-06-07 Andy Buckley * Make doc build from metadata work even before the library is installed. 2009-06-07 Hendrik Hoeth * Fix phi rotation in CDF_2008_LEADINGJETS. 2009-06-07 Andy Buckley * Disabling D0 IL midpoint cone (using CDF modpoint instead), since there seems to be a crashing bug in FastJet's implementation: we can't release that way, since ~no D0 analyses will run. 2009-06-03 Andy Buckley * Putting SWIG-generated source files under SVN control to make life easier for people who we advise to check out the SVN head version, but who don't have a sufficiently modern copy of SWIG to * Adding the --disable-analyses option, for people who just want to use Rivet as a framework for their own analyses. * Enabling HepMC cross-section reading, now that HepMC 2.5.0 has been released. 2009-05-23 Hendrik Hoeth * Using gsl-config to locate libgsl * Fix the paths for linking such that our own libraries are found before any system libraries, e.g. for the case that there is an outdated fastjet version installed on the system while we want to use our own up-to-date version. * Change dmerge to ymerge in the e+e- analyses using JADE or DURHAM from fastjet. That's what it is called in fastjet-2.4 now. 2009-05-18 Andy Buckley * Adding use of gsl-config in configure script. 2009-05-16 Andy Buckley * Removing argument to vetoEvent macro, since no weight subtraction is now needed. It's now just an annotated return, with built-in debug log message. * Adding an "open" FinalState, which is only calculated once per even, then used by all other FSes, avoiding the loop over non-status 1 particles. 2009-05-15 Andy Buckley * Removing incorrect setting of DPS x-errs in CDF_2008 jet shape analysis: the DPS autobooking already gets this bit right. * Using Jet rather than FastJet::PseudoJet where possible, as it means that the phi ranges match up nicely between Particle and the Jet object. The FastJet objects are only really needed if you want to do detailed things like look at split/merge scales for e.g. diff jet rates or "y-split" analyses. * Tidying and debugging CDF jet shape analyses and jet shape plugin... ongoing, but I think I've found at least one real bug, plus a lot of stuff that can be done a lot more nicely. * Fully removing deprecated math functions and updating affected analyses. 2009-05-14 Andy Buckley * Removing redundant rotation in DISKinematics... this was a legacy of Peter using theta rather than pi-theta in his rotation. * Adding convenience phi, rho, eta, theta, and perp,perp2 methods to the 3 and 4 vector classes. 2009-05-12 Andy Buckley * Adding event auto-rotation for events with one proton... more complete approach? 2009-05-09 Hendrik Hoeth * Renaming CDF_2008_NOTE_9337 to CDF_2009_S8233977. * Numerous small bug fixes in ALEPH_1996_S3486095. * Adding data for one of the Rick-Field-style STAR UE analyses. 2009-05-08 Andy Buckley * Adding rivet-mkanalysis script, to make generating new analysis source templates easier. 2009-05-07 Andy Buckley * Adding null vector check to Vector3::azimuthalAngle(). * Fixing definition of HCM/Breit frames in DISKinematics, and adding asserts to check that the transformation is doing what it should. 2009-05-05 Andy Buckley * Removing eta and Et cuts from CDF 2000 Z pT analysis, based on our reading of the paper, and converting most of the analysis to a call of the ZFinder projection. 2009-05-05 Hendrik Hoeth * Support non-default seed_threshold in CDF cone jet algorithms. * New analyses STAR_2006_S6870392 and STAR_2008_S7993412. In STAR_2008_S7993412 only the first distribution is filled at the moment. STAR_2006_S6870392 is normalised to data instead of the Monte Carlo cross-section, since we don't have that available in the HepMC stream yet. 2009-05-05 Andy Buckley * Changing Event wrapper to copy whole GenEvents rather than pointers, use std units if supported in HepMC, and run a placeholder function for event auto-orientation. 2009-04-28 Andy Buckley * Removing inclusion of IsolationTools header by analyses that aren't actually using the isolation tools... which is all of them. Leaving the isolation tools in place for now, as there might still be use cases for them and there's quite a lot of code there that deserves a second chance to be used! 2009-04-24 Andy Buckley * Deleting Rivet implementations of TrackJet and D0ILConeJets: the code from these has now been incorporated into FastJet 2.4.0. * Removed all mentions of the FastJet JADE patch and the HAVE_JADE preprocessor macro. * Bug fix to D0_2008_S6879055 to ensure that cuts compare to both electron and positron momenta (was just comparing against electrons, twice, probably thanks to the miracle of cut and paste). * Converting all D0 IL Cone jets to use FastJets. Involved tidying D0_2004 jet azimuthal decorrelation analysis and D0_2008_S6879055 as part of migration away from using the getLorentzJets method, and removing the D0ILConeJets header from quite a few analyses that weren't using it at all. * Updating CDF 2001 to use FastJets in place of TrackJet, and adding axis labels to its plots. * Note that ZEUS_2001_S4815815 uses the wrong jet definition: it should be a cone but curently uses kT. * Fixing CDF_2005_S6217184 to use correct (midpoint, R=0.7) jet definition. That this was using a kT definition with R=1.0 was only made obvious when the default FastJets constructor was removed. * Removing FastJets default constructor: since there are now several good (IRC safe) jet definitions available, there is no obvious safe default and analyses should have to specify which they use. * Moving FastJets constructors into implementation file to reduce recompilation dependencies, and adding new plugins. * Ensuring that axis labels actually get written to the output data file. 2009-04-22 Andy Buckley * Adding explicit FastJet CDF jet alg overlap_threshold constructor param values, since the default value from 2.3.x is now removed in version 2.4.0. * Removing use of HepMC ThreeVector::mag method (in one place only) since this has been removed in version 2.5.0b. * Fix to hepmc.i (included by rivet.i) to ignore new HepMC 2.5.0b GenEvent stream operator. 2009-04-21 Andy Buckley * Dependency on FastJet now requires version 2.4.0 or later. Jade algorithm is now native. * Moving all analysis constructors and Projection headers from the analysis header files into their .cc implementation files, cutting header dependencies. * Removing AIDA headers: now using LWH headers only, with enhancement to use axis labels. This facility is now used by the histo booking routines, and calling the booking function versions which don't specify axis labels will result in a runtime warning. 2009-04-07 Andy Buckley * Adding $(DESTDIR) prefix to call to Python module "setup.py install" * Moving HepMC SWIG mappings into Python Rivet module for now: seems to work-around the SL type-mapping bug. 2009-04-03 Andy Buckley * Adding MC analysis for LHC UE: higher-pT replica of Tevatron 2008 leading jets study. * Adding CDF_1990 pseudorapidity analysis. * Moving CDF_2001 constructor into implementation file. * Cleaning up CDF_2008_LEADINGJETS a bit, e.g. using foreach loops. * Adding function interface for specifying axis labels in histo bookings. Currently has no effect, since AIDA doesn't seem to have a mechanism for axis labels. It really is a piece of crap. 2009-03-18 Andy Buckley * Adding docs "make upload" and other tweaks to make the doc files fit in with the Rivet website. * Improving LaTex docs to show email addresses in printable form and to group analyses by collider or other metadata. * Adding doc script to include run info in LaTeX docs, and to make HTML docs. * Removing WZandh projection, which wasn't generator independent and whose sole usage was already replaced by ZFinder. * Improvements to constructors of ZFinder and InvMassFS. * Changing ExampleTree to use real FS-based Z finding. 2009-03-16 Andy Buckley * Allow the -H histo file spec to give a full name if wanted. If it doesn't end in the desired extension, it will be added. * Adding --runname option (and API elements) to choose a run name to be prepended as a "top level directory" in histo paths. An empty value results in no extra TLD. 2009-03-06 Andy Buckley * Adding R=0.2 photon clustering to the electrons in the CDF 2000 Z pT analysis. 2009-03-04 Andy Buckley * Fixing use of fastjet-config to not use the user's PATH variable. * Fixing SWIG type table for HepMC object interchange. 2009-02-20 Andy Buckley * Adding use of new metadata in command line analysis querying with the rivet command, and in building the PDF Rivet manual. * Adding extended metadata methods to the Analysis interface and the Python wrapper. All standard analyses comply with this new interface. 2009-02-19 Andy Buckley * Adding usefully-scoped config headers, a Rivet::version() function which uses them, and installing the generated headers to fix "external" builds against an installed copy of Rivet. The version() function has been added to the Python wrapper. 2009-02-05 Andy Buckley * Removing ROOT dependency and linking. Woo! There's no need for this now, because the front-end accepts no histo format switch and we'll just use aida2root for output conversions. Simpler this way, and it avoids about half of our compilation bug reports from 32/64 bit ROOT build confusions. 2009-02-04 Andy Buckley * Adding automatic generation of LaTeX manual entries for the standard analyses. 2009-01-20 Andy Buckley * Removing RivetGun and TCLAP source files! 2009-01-19 Andy Buckley * Added psyco Python optimiser to rivet, make-plots and compare-histos. * bin/aida2root: Added "-" -> "_" mangling, following requests. 2009-01-17 Andy Buckley * 1.1.2 release. 2009-01-15 Andy Buckley * Converting Python build system to bundle SWIG output in tarball. 2009-01-14 Andy Buckley * Converting AIDA/LWH divide function to return a DPS so that bin width factors don't get all screwed up. Analyses adapted to use the new division operation (a DPS/DPS divide would also be nice... but can wait for YODA). 2009-01-06 Andy Buckley * bin/make-plots: Added --png option for making PNG output files, using 'convert' (after making a PDF --- it's a bit messy) * bin/make-plots: Added --eps option for output filtering through ps2eps. 2009-01-05 Andy Buckley * Python: reworking Python extension build to use distutils and newer m4 Python macros. Probably breaks distcheck but is otherwise more robust and platform independent (i.e. it should now work on Macs). 2008-12-19 Andy Buckley * make-plots: Multi-threaded make-plots and cleaned up the LaTeX building a bit (necessary to remove the implicit single global state). 2008-12-18 Andy Buckley * make-plots: Made LaTeX run in no-stop mode. * compare-histos: Updated to use a nicer labelling syntax on the command line and to successfully build MC-MC plots. 2008-12-16 Andy Buckley * Made LWH bin edge comparisons safe against numerical errors. * Added Particle comparison functions for sorting. * Removing most bad things from ExampleTree and tidying up. Marked WZandh projection for removal. 2008-12-03 Hendrik Hoeth * Added the two missing observables to the CDF_2008_NOTE_9337 analysis, i.e. track pT and sum(ET). There is a small difference between our MC output and the MC plots of the analysis' author, we're still waiting for the author's comments. 2008-12-02 Andy Buckley * Overloading use of a std::set in the interface, since the version of SWIG on Sci Linux doesn't have a predefined mapping for STL sets. 2008-12-02 Hendrik Hoeth * Fixed uemerge. The output was seriously broken by a single line of debug information in fillAbove(). Also changed uemerge output to exponential notation. * Unified ref and mc histos in compare-histos. Histos with one bin are plotted linear. Option for disabling the ratio plot. Several fixes for labels, legends, output directories, ... * Changed rivetgun's fallback directory for parameter files to $PREFIX/share/AGILe, since that's where the steering files now are. * Running aida2flat in split mode now produces make-plots compatible dat-files for direct plotting. 2008-11-28 Andy Buckley * Replaced binreloc with an upgraded and symbol-independent copy. 2008-11-25 Andy Buckley * Added searching of $RIVET_REF_PATH for AIDA reference data files. 2008-11-24 Andy Buckley * Removing "get"s and other obsfucated syntax from ProjectionApplier (Projection and Analysis) interfaces. 2008-11-21 Andy Buckley * Using new "global" Jet and V4 sorting functors in TrackJet. Looks like there was a sorting direction problem before... * Verbose mode with --list-analyses now shows descriptions as well as analysis names. * Moved data/Rivet to data/refdata and moved data/RivetGun contents to AGILe (since generator steering is no longer a Rivet thing) * Added unchecked ratio plots to D0 Run II jet + photon analysis. * Added D0 inclusive photon analysis. * Added D0 Z rapidity analysis. * Tidied up constructor interface and projection chain implementation of InvMassFinalState. * Added ~complete set of Jet and FourMomentum sorting functors. 2008-11-20 Andy Buckley * Added IdentifiedFinalState. * Moved a lot of TrackJet and Jet code into .cc files. * Fixed a caching bug in Jet: cache flag resets should never be conditional, since they are then sensitive to initialisation errors. * Added quark enum values to ParticleName. * Rationalised JetAlg interfaces somewhat, with "size()" and "jets()" methods in the interface. * Added D0 W charge asymmetry and D0 inclusive jets analyses. 2008-11-18 Andy Buckley * Adding D0 inclusive Z pT shape analysis. * Added D0 Z + jet pT and photon + jet pT spectrum analyses. * Lots of tidying up of particle, event, particle name etc. * Now the first event is used to detect the beam type and remove incompatible analyses. 2008-11-17 Andy Buckley * Added bash completion for rivetgun. * Starting to provide stand-alone call methods on projections so they can be used without the caching infrastructure. This could also be handy for unit testing. * Adding functionality (sorting function and built-in sorting schemes) to the JetAlg interface. 2008-11-10 Hendrik Hoeth * Fix floating point number output format in aida2flat and flat2aida * Added CDF_2002_S4796047: CDF Run-I charged multiplicity distribution * Renamed CDF_2008_MINBIAS to CDF_2008_NOTE_9337, since the note is publicly available now. 2008-11-10 Hendrik Hoeth * Added DELPHI_2003_WUD_03_11: Delphi 4-jet angular distributions. There is still a problem with the analysis, so don't use it yet. But I need to commit the code because my laptop is broken ... 2008-11-06 Andy Buckley * Code review: lots of tidying up of projections and analyses. * Fixes for compatibility with the LLVM C & C++ compiler. * Change of Particle interface to remove "get"-prefixed method names. 2008-11-05 Andy Buckley * Adding ability to query analysis metadata from the command line. * Example of a plugin analyis now in plugindemo, with a make check test to make sure that the plugin analysis is recognised by the command line "rivet" tool. * GCC 4.3 fix to mat-vec tests. 2008-11-04 Andy Buckley * Adding native logger control from Python interface. 2008-11-03 Andy Buckley * Adding bash_completion for rivet executable. 2008-10-31 Andy Buckley * Clean-up of histo titles and analysis code review. * Added momentum construction functions from FastJet PseudoJets. 2008-10-28 Andy Buckley * Auto-booking of histograms with a name, rather than the HepData ID 3-tuple is now possible. * Fix in CDF 2001 pT spectra to get the normalisations to depend on the pT_lead cutoff. 2008-10-23 Andy Buckley * rivet handles signals neatly, as for rivetgun, so that premature killing of the analysis process will still result in an analysis file. * rivet now accepts cross-section as a command line argument and, if it is missing and is required, will prompt the user for it interactively. 2008-10-22 Andy Buckley * rivet (Python interface) now can list analyses, check when adding analyses that the given names are valid, specify histo file name, and provide sensibly graded event number logging. 2008-10-20 Andy Buckley * Corrections to CDF 2004 analysis based on correspondance with Joey Huston. M bias dbns now use whole event within |eta| < 0.7, and Cheese plots aren't filled at all if there are insufficient jets (and the correct ETlead is used). 2008-10-08 Andy Buckley * Added AnalysisHandler::commitData() method, to allow the Python interface to write out a histo file without having to know anything about the histogramming API. * Reduced SWIG interface file to just map a subset of Analysis and AnalysisHandler functionality. This will be the basis for a new command line interface. 2008-10-06 Andy Buckley * Converted FastJets plugin to use a Boost shared_pointer to the cached ClusterSequence. The nullness of the pointer is now used to indicate an empty tracks (and hence jets) set. Once FastJet natively support empty CSeqs, we can rewrite this a bit more neatly and ditch the shared_ptr. 2008-10-02 Andy Buckley * The CDF_2004 (Acosta) data file now includes the full range of pT for the min bias data at both 630 and 1800 GeV. Previously, only the small low-pT insert plot had been entered into HepData. 2008-09-30 Andy Buckley * Lots of updates to CDF_2004 (Acosta) UE analysis, including sorting jets by E rather than Et, and factorising transverse cone code into a function so that it can be called with a random "leading jet" in min bias mode. Min bias histos are now being trial-filled just with tracks in the transverse cones, since the paper is very unclear on this. * Discovered a serious caching problem in FastJets projection when an empty tracks vector is passed from the FinalState. Unfortunately, FastJet provides no API way to solve the problem, so we'll have to report this upstream. For now, we're solving this for CDF_2004 by explicitly vetoing events with no tracks. * Added Doxygen to the build with target "dox" * Moved detection of whether cross-section information is needed into the AnalysisHandler, with dynamic computation by scanning contained analyses. * Improved robustness of event reading to detect properly when the input file is smaller than expected. 2008-09-29 Hendrik Hoeth * New analysis: CDF_2000_S4155203 2008-09-23 Andy Buckley * rivetgun can now be built and run without AGILe. Based on a patch by Frank Siegert. 2008-09-23 Hendrik Hoeth * Some preliminary numbers for the CDF_2008_LEADINGJETS analysis (only transverse region and not all observables. But all we have now.) 2008-09-17 Andy Buckley * Breaking up the mammoth "generate" function, to make Python mapping easier, among other reasons. * Added if-zero-return-zero checking to angle mapping functions, to avoid problems where 1e-19 gets mapped on to 2 pi and then fails boundary asserts. * Added HistoHandler singleton class, which will be a central repository for holding analyses' histogram objects to be accessed via a user-chosen name. 2008-08-26 Andy Buckley * Allowing rivet-config to return combined flags. 2008-08-14 Andy Buckley * Fixed some g++ 4.3 compilation bugs, including "vector" not being a valid name for a method which returns a physics vector, since it clashes with std::vector (which we globally import). Took the opportunity to rationalise the Jet interface a bit, since "particle" was used to mean "FourMomentum", and "Particle" types required a call to "getFullParticle". I removed the "gets" at the same time, as part of our gradual migration to a coherent naming policy. 2008-08-11 Andy Buckley * Tidying of FastJets and added new data files from HepData. 2008-08-10 James Monk * FastJets now uses user_index property of fastjet::PseudoJet to reconstruct PID information in jet contents. 2008-08-07 Andy Buckley * Reworking of param file and command line parsing. Tab characters are now handled by the parser, in a way equivalent to spaces. 2008-08-06 Andy Buckley * Added extra histos and filling to Acosta analysis - all HepData histos should now be filled, depending on sqrt{s}. Also trialling use of LaTeX math mode in titles. 2008-08-05 Andy Buckley * More data files for CDF analyses (2 x 2008, 1 x 1994), and moved the RivetGun AtlasPythia6.params file to more standard fpythia-atlas.params (and added to the install list). 2008-08-04 Andy Buckley * Reduced size of available options blocks in RivetGun help text by removing "~" negating variants (which are hardly ever used in practice) and restricting beam particles to PROTON, ANTIPROTON,ELECTRON and POSITRON. * Fixed Et sorting in Acosta analysis. 2008-08-01 Andy Buckley * Added AIDA headers to the install list, since external (plugin-type) analyses need them to be present for compilation to succeed. 2008-07-29 Andy Buckley * Fixed missing ROOT compile flags for libRivet. * Added command line repetition to logging. 2008-07-29 Hendrik Hoeth * Included the missing numbers and three more observables in the CDF_2008_NOTE_9351 analysis. 2008-07-29 Andy Buckley * Fixed wrong flags on rivet-config 2008-07-28 Hendrik Hoeth * Renamed CDF_2008_DRELLYAN to CDF_2008_NOTE_9351. Updated numbers and cuts to the final version of this CDF note. 2008-07-28 Andy Buckley * Fixed polar angle calcuation to use atan2. * Added "mk" prefixes and x/setX convention to math classes. 2008-07-28 Hendrik Hoeth * Fixed definition of FourMomentum::pT (it had been returning pT2) 2008-07-27 Andy Buckley * Added better tests for Boost headers. * Added testing for -ansi, -pedantic and -Wall compiler flags. 2008-07-25 Hendrik Hoeth * updated DELPHI_2002_069_CONF_603 according to information from the author 2008-07-17 Andy Buckley * Improvements to aida2flat: now can produce one output file per histo, and there is a -g "gnuplot mode" which comments out the YODA/make_plot headers to make the format readable by gnuplot. * Import boost::assign namespace contents into the Rivet namespace --- provides very useful intuitive collection initialising functions. 2008-07-15 Andy Buckley * Fixed missing namespace in vector/matrix testing. * Removed Boost headers: now a system dependency. * Fixed polarRadius infinite loop. 2008-07-09 Andy Buckley * Fixed definitions of mapAngleMPiToPi, etc. and used them to fix the Jet::getPhi method. * Trialling use of "foreach" loop in CDF_2004: it works! Very nice. 2008-07-08 Andy Buckley * Removed accidental reference to an "FS" projection in FinalStateHCM's compare method. rivetgun -A now works again. * Added TASSO, SLD and D0_2008 reference data. The TASSO and SLD papers aren't installed or included in the tarball since there are currently no plans to implement these analyses. * Added Rivet namespacing to vector, matrix etc. classes. This required some re-writing and the opportunity was taken to move some canonical function definitions inside the classes and to improve the header structure of the Math area. 2008-07-07 Andy Buckley * Added Rivet namespace to Units.hh and Constants.hh. * Added Doxygen "@brief" flags to analyses. * Added "RIVET_" namespacing to all header guards. * Merged Giulio Lenzi's isolation/vetoing/invmass projections and D0 2008 analysis. 2008-06-23 Jon Butterworth * Modified FastJet to fix ysplit and split and filter. * Modified ExampleTree to show how to call them. 2008-06-19 Hendrik Hoeth * Added first version of the CDF_2008_DRELLYAN analysis described on http://www-cdf.fnal.gov/physics/new/qcd/abstracts/UEinDY_08.html There is a small difference between the analysis and this implementation, but it's too small to be visible. The fpythia-cdfdrellyan.params parameter file is for this analysis. * Added first version of the CDF_2008_MINBIAS analysis described on http://www-cdf.fnal.gov/physics/new/qcd/abstracts/minbias_08.html The .aida file is read from the plots on the web and will change. I'm still discussing some open questions about the analysis with the author. 2008-06-18 Jon Butterworth * Added First versions of splitJet and filterJet methods to fastjet.cc. Not yet tested, buyer beware. 2008-06-18 Andy Buckley * Added extra sorted Jets and Pseudojets methods to FastJets, and added ptmin argument to the JetAlg getJets() method, requiring a change to TrackJet. 2008-06-13 Andy Buckley * Fixed processing of "RG" parameters to ensure that invalid iterators are never used. 2008-06-10 Andy Buckley * Updated AIDA reference files, changing "/HepData" root path to "/REF". Still missing a couple of reference files due to upstream problems with the HepData records. 2008-06-09 Andy Buckley * rivetgun now handles termination signals (SIGTERM, SIGINT and SIGHUP) gracefully, finishing the event loop and finalising histograms. This means that histograms will always get written out, even if not all the requested events have been generated. 2008-06-04 Hendrik Hoeth * Added DELPHI_2002_069_CONF_603 analysis 2008-05-30 Hendrik Hoeth * Added InitialQuarks projection * Added OPAL_1998_S3780481 analysis 2008-05-29 Andy Buckley * distcheck compatibility fixes and autotools tweaks. 2008-05-28 Andy Buckley * Converted FastJet to use Boost smart_ptr for its plugin handling, to solve double-delete errors stemming from the heap cloning of projections. * Added (a subset of) Boost headers, particularly the smart pointers. 2008-05-24 Andy Buckley * Added autopackage spec files. * Merged these changes into the trunk. * Added a registerClonedProjection(...) method to ProjectionHandler: this is needed so that cloned projections will have valid pointer entries in the ProjectHandler repository. * Added clone() methods to all projections (need to use this, since the templated "new PROJ(proj)" approach to cloning can't handle object polymorphism. 2008-05-19 Andy Buckley * Moved projection-applying functions into ProjectionApplier base class (from which Projection and Analysis both derive). * Added Rivet-specific exceptions in place of std::runtime_error. * Removed unused HepML reference files. * Added error handling for requested analyses with wrong case convention / missing name. 2008-05-15 Hendrik Hoeth * New analysis PDG_Hadron_Multiplicities * flat2aida converter 2008-05-15 Andy Buckley * Removed unused mysterious Perl scripts! * Added RivetGun.HepMC logging of HepMC event details. 2008-05-14 Hendrik Hoeth * New analysis DELPHI_1995_S3137023. This analysis contains the xp spectra of Xi+- and Sigma(1385)+-. 2008-05-13 Andy Buckley * Improved logging interface: log levels are now integers (for cross-library compatibility and level setting also applies to existing loggers. 2008-05-09 Andy Buckley * Improvements to robustness of ROOT checks. * Added --version flag on config scripts and rivetgun. 2008-05-06 Hendrik Hoeth * New UnstableFinalState projection which selects all hadrons, leptons and real photons including unstable particles. * In the DELPHI_1996_S3430090 analysis the multiplicities for pi+/pi- and p0 are filled, using the UnstableFinalState projection. 2008-05-06 Andy Buckley * FastJets projection now protects against the case where no particles exist in the final state (where FastJet throws an exception). * AIDA file writing is now separated from the AnalysisHandler::finalize method... API users can choose what to do with the histo objects, be that writing out or further processing. 2008-04-29 Andy Buckley * Increased default tolerances in floating point comparisons as they were overly stringent and valid f.p. precision errors were being treated as significant. * Implemented remainder of Acosta UE analysis. * Added proper getEtSum() to Jet. * Added Et2() member and function to FourMomentum. * Added aida2flat conversion script. * Fixed ambiguity in TrackJet algorithm as to how the iteration continues when tracks are merged into jets in the inner loop. 2008-04-28 Andy Buckley * Merged in major "ProjectionHandler" branch. Projections are now all stored centrally in the singleton ProjectionHandler container, rather than as member pointers in projections and analyses. This also affects the applyProjection mechanism, which is now available as a templated method on Analysis and Projection. Still a few wrinkles need to be worked out. * The branch changes required a comprehensive review of all existing projections and analyses: lots of tidying up of these classes, as well as the auxiliary code like math utils, has taken place. Too much to list and track, unfortunately! 2008-03-28 Andy Buckley * Started second CDF UE analysis ("Acosta"): histograms defined. * Fixed anomalous factor of 2 in LWH conversion from Profile1D to DataPointSet. * Added pT distribution histos to CDF 2001 UE analysis. 2008-03-26 Andy Buckley * Removed charged+neutral versions of histograms and projections from DELPHI analysis since they just duplicate the more robust charged-only measurements and aren't really of interest for tuning. 2008-03-10 Andy Buckley * Profile histograms now use error computation with proper weighting, as described here: http://en.wikipedia.org/wiki/Weighted_average 2008-02-28 Andy Buckley * Added --enable-jade flag for Professor studies with patched FastJet. * Minor fixes to LCG tag generator and gfilt m4 macros. * Fixed projection slicing issues with Field UE analysis. * Added Analysis::vetoEvent(e) function, which keeps track of the correction to the sum of weights due to event vetoing in analysis classes. 2008-02-26 Andy Buckley * Vector and derived classes now initialise to have zeroed components when the no-arg constructor is used. * Added Analysis::scale() function to scale 1D histograms. Analysis::normalize() uses it internally, and the DELPHI (A)EEC, whose histo weights are not pure event weights, and normalised using scale(h, 1/sumEventWeights). 2008-02-21 Hendrik Hoeth * Added EEC and AEEC to the DELPHI_1996_S3430090 analysis. The normalisation of these histograms is still broken (ticket #163). 2008-02-19 Hendrik Hoeth * Many fixes to the DELPHI_1996_S3430090 analysis: bugfix in the calulation of eigenvalues/eigenvectors in MatrixDiag.hh for the sphericity, rewrite of Thrust/Major/Minor, fixed scaled momentum, hemisphere masses, normalisation in single particle events, final state slicing problems in the projections for Thrust, Sphericity and Hemispheres. 2008-02-08 Andy Buckley * Applied fixes and extensions to DIS classes, based on submissions by Dan Traynor. 2008-02-06 Andy Buckley * Made projection pointers used for cut combining into const pointers. Required some redefinition of the Projection* comparison operator. * Temporarily added FinalState member to ChargedFinalState to stop projection lifetime crash. 2008-02-01 Andy Buckley * Fixed another misplaced factor of bin width in the Analysis::normalize() method. 2008-01-30 Andy Buckley * Fixed the conversion of IHistogram1D to DPS, both via the explicit Analysis::normalize() method and the implicit AnalysisHandler::treeNormalize() route. The root of the problem is the AIDA choice of the word "height" to represent the sum of weights in a bin: i.e. the bin width is not taken into account either in computing bin height or error. 2008-01-22 Andy Buckley * Beam projection now uses HepMC GenEvent::beam_particles() method to get the beam particles. This is more portable and robust for C++ generators, and equivalent to the existing "first two" method for Fortran generators. 2008-01-17 Andy Buckley * Added angle range fix to pseudorapidity function (thanks to Piergiulio Lenzi). 2008-01-10 Andy Buckley * Changed autobooking plot codes to use zero-padding (gets the order right in JAS, file browser, ROOT etc.). Also changed the 'ds' part to 'd' for consistency. HepData's AIDA output has been correspondingly updated, as have the bundled data files. 2008-01-04 Andy Buckley * Tidied up JetShape projection a bit, including making the constructor params const references. This seems to have sorted the runtime segfault in the CDF_2005 analysis. * Added caching of the analysis bin edges from the AIDA file - each analysis object will now only read its reference file once, which massively speeds up the rivetgun startup time for analyses with large numbhers of autobooked histos (e.g. the DELPHI_1996_S3430090 analysis). 2008-01-02 Andy Buckley * CDF_2001_S4751469 now uses the LossyFinalState projection, with an 8% loss rate. * Added LossyFinalState and HadronicFinalState, and fixed a "polarity" bug in the charged final state projection (it was keeping only the *uncharged* particles). * Now using isatty(1) to determine whether or not color escapes can be used. Also removed --color argument, since it can't have an effect (TCLAP doesn't do position-based flag toggling). * Made Python extension build optional (and disabled by default). 2008-01-01 Andy Buckley * Removed some unwanted DEBUG statements, and lowered the level of some infrastructure DEBUGs to TRACE level. * Added bash color escapes to the logger system. 2007-12-21 Leif Lönnblad * include/LWH/ManagedObject.h: Fixed infinite loop in encodeForXML cf. ticket #135. 2007-12-20 Andy Buckley * Removed HepPID, HepPDT and Boost dependencies. * Fixed XML entity encoding in LWH. Updated CDF_2007_S7057202 analysis to not do its own XML encoding of titles. 2007-12-19 Andy Buckley * Changed units header to set GeV = 1 (HepMC convention) and using units in CDF UE analysis. 2007-12-15 Andy Buckley * Introduced analysis metadata methods for all analyses (and made them part of the Analysis interface). 2007-12-11 Andy Buckley * Added JetAlg base projection for TrackJet, FastJet etc. 2007-12-06 Andy Buckley * Added checking for Boost library, and the standard Boost test program for shared_ptr. * Got basic Python interface running - required some tweaking since Python and Rivet's uses of dlopen collide (another RTLD_GLOBAL issue - see http://muttley.hates-software.com/2006/01/25/c37456e6.html ) 2007-12-05 Andy Buckley * Replaced all use of KtJets projection with FastJets projection. KtJets projection disabled but left undeleted for now. CLHEP and KtJet libraries removed from configure searches and Makefile flags. 2007-12-04 Andy Buckley * Param file loading now falls back to the share/RivetGun directory if a local file can't be found and the provided name has no directory separators in it. * Converted TrackJet projection to update the jet centroid with each particle added, using pT weighting in the eta and phi averaging. 2007-12-03 Andy Buckley * Merged all command line handling functions into one large parse function, since only one executable now needs them. This removes a few awkward memory leaks. * Removed rivet executable - HepMC file reading functionality will move into rivetgun. * Now using HepMC IO_GenEvent format (IO_Ascii and IO_ExtendedAscii are deprecated). Now requires HepMC >= 2.3.0. * Added forward declarations of GSL diagonalisation routines, eliminating need for GSL headers to be installed on build machine. 2007-11-27 Andy Buckley * Removed charge differentiation from Multiplicity projection (use CFS proj) and updated ExampleAnalysis to produce more useful numbers. * Introduced binreloc for runtime path determination. * Fixed several bugs in FinalState, ChargedFinalState, TrackJet and Field analysis. * Completed move to new analysis naming scheme. 2007-11-26 Andy Buckley * Removed conditional HAVE_FASTJET bits: FastJet is now compulsory. * Merging appropriate RivetGun parts into Rivet. RivetGun currently broken. 2007-11-23 Andy Buckley * Renaming analyses to Spires-ID scheme: currently of form S, to become __. 2007-11-20 Andy Buckley * Merged replacement vectors, matrices and boosts into trunk. 2007-11-15 Leif Lönnblad * src/Analysis.cc, include/Rivet/Analysis.hh: Introduced normalize function. See ticket #126. 2007-10-31 Andy Buckley * Tagging as 1.0b2 for HERA-LHC meeting. 2007-10-25 Andy Buckley * Added AxesDefinition base interface to Sphericity and Thrust, used by Hemispheres. * Exposed BinaryCut class, improved its interface and fixed a few bugs. It's now used by VetoedFinalState for momentum cuts. * Removed extra output from autobooking AIDA reader. * Added automatic DPS booking. 2007-10-12 Andy Buckley * Improved a few features of the build system 2007-10-09 James Monk * Fixed dylib dlopen on Mac OS X. 2007-10-05 Andy Buckley * Added new reference files. 2007-10-03 Andy Buckley * Fixed bug in configure.ac which led to explicit CXX setting being ignored. * Including Logging.hh in Projection.hh, hence new transitive dependency on Logging.hh being installed. Since this is the normal behaviour, I don't think this is a problem. * Fixed segfaulting bug due to use of addProjection() in locally-scoped contained projections. This isn't a proper fix, since the whole framework should be designed to avoid the possibility of bugs like this. * Added newly built HepML and AIDA reference files for current analyses. 2007-10-02 Andy Buckley * Fixed possible null-pointer dereference in Particle copy constructor and copy assignment: this removes one of two blocker segfaults, the other of which is related to the copy-assignment of the TotalVisMomentum projection in the ExampleTree analysis. 2007-10-01 Andy Buckley * Fixed portable path to Rivet share directory. 2007-09-28 Andy Buckley * Added more functionality to the rivet-config script: now has libdir, includedir, cppflags, ldflags and ldlibs options. 2007-09-26 Andy Buckley * Added the analysis library closer function to the AnalysisHandler finalize() method, and also moved the analysis delete loop into AnalysisHandler::finalize() so as not to try deleting objects whose libraries have already closed. * Replaced the RivetPaths.cc.in method for portable paths with something using -D defines - much simpler! 2007-09-21 Lars Sonnenschein * Added HepEx0505013 analysis and JetShape projection (some fixes by AB.) * Added GetLorentzJets member function to D0 RunII cone jet projection 2007-09-21 Andy Buckley * Fixed lots if bugs and bad practice in HepEx0505013 (to make it compile-able!) * Downclassed the log messages from the Test analysis to DEBUG level. * Added isEmpty() method to final state projection. * Added testing for empty final state and useful debug log messages to sphericity projection. 2007-09-20 Andy Buckley * Added Hemispheres projection, which calculates event hemisphere masses and broadenings. 2007-09-19 Andy Buckley * Added an explicit copy assignment operator to Particle: the absence of one of these was responsible for the double-delete error. * Added a "fuzzy equals" utility function for float/double types to Utils.hh (which already contains a variety of handy little functions). * Removed deprecated Beam::operator(). * Added ChargedFinalState projection and de-pointered the contained FinalState projection in VetoedFinalState. 2007-09-18 Andy Buckley * Major bug fixes to the regularised version of the sphericity projection (and hence the Parisi tensor projection). Don't trust C & D param results from any previous version! * Added extra methods to thrust and sphericity projections to get the oblateness and the sphericity basis (currently returns dummy axes since I can't yet work out how to get the similarity transform eigenvectors from CLHEP) 2007-09-14 Andy Buckley * Merged in a branch of pluggable analysis mechanisms. 2007-06-25 Jon Butterworth * Fixed some bugs in the root output for DataPoint.h 2007-06-25 Andy Buckley * include/Rivet/**/Makefile.am: No longer installing headers for "internal" functionality. * include/Rivet/Projections/*.hh: Removed the private restrictions on copy-assignment operators. 2007-06-18 Leif Lönnblad * include/LWH/Tree.h: Fixed minor bug in listObjectNames. * include/LWH/DataPointSet.h: Fixed setCoordinate functions so that they resize the vector of DataPoints if it initially was empty. * include/LWH/DataPoint.h: Added constructor taking a vector of measuremts. 2007-06-16 Leif Lönnblad * include/LWH/Tree.h: Implemented the listObjectNames and ls functions. * include/Rivet/Projections/FinalStateHCM.hh, include/Rivet/Projections/VetoedFinalState.hh: removed _theParticles and corresponding access function. Use base class variable instead. * include/Rivet/Projections/FinalState.hh: Made _theParticles protected. 2007-06-13 Leif Lönnblad * src/Projections/FinalStateHCM.cc, src/Projections/DISKinematics.cc: Equality checks using GenParticle::operator== changed to check for pointer equality. * include/Rivet/Analysis/HepEx9506012.hh: Uses modified DISLepton projection. * include/Rivet/Particle.hh: Added member function to check if a GenParticle is associated. * include/Rivet/Projections/DISLepton.hh, src/Projections/DISLepton.cc: Fixed bug in projection. Introduced final state projection to limit searching for scattered lepton. Still not properly tested. 2007-06-08 Leif Lönnblad * include/Rivet/Projections/PVertex.hh, src/Projections/PVertex.cc: Fixed the projection to simply get the signal_process_vertex from the GenEvent. This is the way it should work. If the GenEvent does not have a signal_process_vertex properly set up in this way, the problem is with the class that fills the GenEvent. 2007-06-06 Jon Butterworth * Merged TotalVisibleMomentum and CalMET * Added pT ranges to Vetoed final state projection 2007-05-27 Jon Butterworth * Fixed initialization of VetoedFinalStateProjection in ExampleTree 2007-05-27 Leif Lönnblad * include/Rivet/Projections/KtJets.*: Make sure the KtEvent is deleted properly. 2007-05-26 Jon Butterworth * Added leptons to the ExampleTree. * Added TotalVisibleEnergy projection, and added output to ExampleTree. 2007-05-25 Jon Butterworth * Added a charged lepton projection 2007-05-23 Andy Buckley * src/Analysis/HepEx0409040.cc: Changed range of the histograms to the "pi" range rather than the "128" range. * src/Analysis/Analysis.cc: Fixed a bug in the AIDA path building. Histogram auto-booking now works. 2007-05-23 Leif Lönnblad * src/Analysis/HepEx9506012.cc: Now uses the histogram booking function in the Analysis class. 2007-05-23 Jon Butterworth * Fixed bug in PRD65092002 (was failing on zero jets) 2007-05-23 Andy Buckley * Added (but haven't properly tested) a VetoedFinalState projection. * Added normalize() method for AIDA 1D histograms. * Added configure checking for Mac OS X version, and setting the development target flag accordingly. 2007-05-22 Andy Buckley * Added an ostream method for AnalysisName enums. * Converted Analyses and Projections to use projection lists, cuts and beam constraints. * Added beam pair combining to the BeamPair sets of Projections by finding set meta-intersections. * Added methods to Cuts, Analysis and Projection to make Cut definition easier. * Fixed default fall-through in cut handling switch statement and now using -numeric_limits::max() rather than min() * Added more control of logging presentation via static flag methods on Log. 2007-05-13 Andy Buckley * Added self-consistency checking mechanisms for Cuts and Beam * Re-implemented the cut-handling part of RivetInfo as a Cuts class. * Changed names of Analysis and Projection name() and handler() methods to getName() and getHandler() to be more consistent with the rest of the public method names in those classes. 2007-05-02 Andy Buckley * Added auto-booking of histogram bins from AIDA XML files. The AIDA files are located via a C++ function which is generated from RivetPaths.cc.in by running configure. 2007-04-18 Andy Buckley * Added a preliminary version of the Rick Field UE analysis, under the name PRD65092002. 2007-04-19 Leif Lönnblad * src/Analysis/HepEx0409040.cc: The reason this did not compile under gcc-4 is that some iterators into a vector were wrongly assued to be pointers and were initialized to 0 and later compared to 0. I've changed this to initialize to end() of the corresponding vector and to compare with the same end() later. 2007-04-05 Andy Buckley * Lots of name changes in anticipation of the MCNet school. RivetHandler is now AnalysisHandler (since that's what it does!), BeamParticle has become ParticleName, and RivetInfo has been split into Cut and BeamConstraint portions. * Added BeamConstraint mechanism, which can be used to determine if an analysis is compatible with the beams being used in the generator. The ParticleName includes an "ANY" wildcard for this purpose. 2006-03-19 Andy Buckley * Added "rivet" executable which can read in HepMC ASCII dump files and apply Rivet analyses on the events. 2007-02-24 Leif Lönnblad * src/Projections/KtJets.cc: Added comparison of member variables in compare() function * all: Merged changes from polymorphic-projections branch into trunk 2007-02-17 Leif Lönnblad * all: projections and analysis handlers: All projections which uses other projctions now has a pointer rather than a copy of those projections to allow for polymorphism. The constructors has also been changed to require the used projections themselves, rather than the arguments needed to construct them. 2007-02-17 Leif Lönnblad * src/Projections/FinalState.cc, include/Rivet/Projections/FinalState.icc (Rivet), include/Rivet/Projections/FinalState.hh: Added cut in transverse momentum on the particles to be included in the final state. 2007-02-06 Leif Lönnblad * include/LWH/HistogramFactory.h: Fixed divide-by-zero in divide function. Also fixed bug in error calculation in divide function. Introduced checkBin function to make sure two histograms are equal even if they have variable bin widths. * include/LWH/Histogram1D.h: In normalize(double), do not do anything if the sum of the bins are zero to avoid dividing by zero. 2007-01-20 Leif Lönnblad * src/Test/testLWH.cc: Modified to output files using the Tree. * configure.ac: Removed AC_CONFIG_AUX_DIR([include/Rivet/Config]) since the directory does not exist anymore. 2006-12-21 Andy Buckley * Rivet will now conditionally install the AIDA and LWH headers if it can't find them when configure'ing. * Started integrating Leif's LWH package to fulfill the AIDA duties. * Replaced multitude of CLHEP wrapper headers with a single RivetCLHEP.h header. 2006-11-20 Andy Buckley * Introduced log4cpp logging. * Added analysis enum, which can be used as input to an analysis factory by Rivet users. 2006-11-02 Andy Buckley * Yet more, almost pointless, administrative moving around of things with the intention of making the structure a bit better-defined: * The RivetInfo and RivetHandler classes have been moved from src/Analysis into src as they are really the main Rivet interface classes. The Rivet.h header has also been moved into the "header root". * The build of a single shared library in lib has been disabled, with the library being built instead in src. 2006-10-14 Andy Buckley * Introduced a minimal subset of the Sherpa math tools, such as Vector{3,4}D, Matrix, etc. The intention is to eventually cut the dependency on CLHEP. 2006-07-28 Andy Buckley * Moving things around: all sources now in directories under src 2006-06-04 Leif Lönnblad * Analysis/Examples/HZ95108.*: Now uses CentralEtHCM. Also set GeV units on the relevant histograms. * Projections/CentralEtHCM.*: Making a special class just to get out one number - the summed Et in the central rapidity bin - may seem like an overkill. But in case some one else might nees it... 2006-06-03 Leif Lönnblad * Analysis/Examples/HZ95108.*: Added the hz95108 energy flow analysis from HZtool. * Projections/DISLepton.*: Since many HERA measurements do not care if we have electron or positron beam, it is now possible to specify lepton or anti-lepton. * Projections/Event.*: Added member and access function for the weight of an event (taken from the GenEvent object.weights()[0]. * Analysis/RivetHandler.*: Now depends explicitly on the AIDA interface. An AIDA analysis factory must be specified in the constructor, where a tree and histogram factory is automatically created. Added access functions to the relevant AIDA objects. * Analysis/AnalysisBase.*: Added access to the RivetHandler and its AIDA factories. 2005-12-27 Leif Lönnblad * configure.ac: Added -I$THEPEGPATH/include to AM_CPPFLAGS. * Config/Rivet.h: Added some std incudes and using std:: declaration. * Analysis/RivetInfo.*: Fixed some bugs. The RivetInfo facility now works, although it has not been thoroughly tested. * Analysis/Examples/TestMultiplicity.*: Re-introduced FinalStateHCM for testing purposes but commented it away again. * .: Made a number of changes to implement handling of RivetInfo objects. rivet-1.8.3/COPYING0000644000175000017500000004311012116077756012116 0ustar sunsun GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. rivet-1.8.3/Doxyfile.in0000644000175000017500000022543112116077757013207 0ustar sunsun# Doxyfile 1.8.1.2 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" "). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or sequence of words) that should # identify the project. Note that if you do not use Doxywizard you need # to put quotes around the project name if it contains spaces. PROJECT_NAME = "Rivet" # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @PACKAGE_VERSION@ # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer # a quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify an logo or icon that is # included in the documentation. The maximum height of the logo should not # exceed 55 pixels and the maximum width should not exceed 200 pixels. # Doxygen will copy the logo to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doxy # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful if your file system # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding # "class=itcl::class" will allow you to use the command class in the # itcl::class meaning. TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this # tag. The format is ext=language, where ext is a file extension, and language # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all # comments according to the Markdown format, which allows for more readable # documentation. See http://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you # can mix doxygen, HTML, and XML commands with Markdown formatting. # Disable only in case of backward compatibilities issues. MARKDOWN_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also makes the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and # unions are shown inside the group in which they are included (e.g. using # @ingroup) instead of on a separate page (for HTML and Man pages) or # section (for LaTeX and RTF). INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and # unions with only public data fields will be shown inline in the documentation # of the scope in which they are defined (i.e. file, namespace, or group # documentation), provided this scope is documented. If set to NO (the default), # structs, classes, and unions are shown on a separate page (for HTML and Man # pages) or section (for LaTeX and RTF). INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penalty. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will roughly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols. SYMBOL_CACHE_SIZE = 0 # Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be # set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given # their name and scope. Since this can be an expensive process and often the # same symbol appear multiple times in the code, doxygen keeps a cache of # pre-resolved symbols. If the cache is too small doxygen will become slower. # If the cache is too large, memory is wasted. The cache size is given by this # formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = NO # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespaces are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen # will sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the default) # the constructors will appear in the respective orders defined by # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = YES # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = YES # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to # do proper type resolution of all parameters of a function it will reject a # match between the prototype and the implementation of a member function even # if there is only one candidate or it is obvious which candidate to choose # by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen # will still accept a match between prototype and implementation in such cases. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or macro consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and macros in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files # containing the references data. This must be a list of .bib files. The # .bib extension is automatically appended if omitted. Using this command # requires the bibtex tool to be installed. See also # http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style # of the bibliography can be controlled using LATEX_BIB_STYLE. To use this # feature you need bibtex and perl available in the search path. CITE_BIB_FILES = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = NO # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = NO # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # The WARN_NO_PARAMDOC option can be enabled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = . \ src \ include/Rivet # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py # *.f90 *.f *.for *.vhd *.vhdl FILE_PATTERNS = *.cc \ *.hh \ *.fhh \ index.dox # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = _* # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty or if # non of the patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) # and it is also possible to disable source filtering for a specific pattern # using *.ext= (so without naming a filter). This option only has effect when # FILTER_SOURCE_FILES is enabled. FILTER_SOURCE_PATTERNS = #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C, C++ and Fortran comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. Note that when using a custom header you are responsible # for the proper inclusion of any scripts and style sheets that doxygen # needs, which is dependent on the configuration options used. # It is advised to generate a default header using "doxygen -w html # header.html footer.html stylesheet.css YourConfigFile" and then modify # that header. Note that the header is subject to change so you typically # have to redo this when upgrading to a newer version of doxygen or when # changing the value of configuration settings such as GENERATE_TREEVIEW! HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # style sheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that # the files will be copied as-is; there are no commands or markers available. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the style sheet and background images # according to this color. Hue is specified as an angle on a colorwheel, # see http://en.wikipedia.org/wiki/Hue for more information. # For instance the value 0 represents red, 60 is yellow, 120 is green, # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. # The allowed range is 0 to 359. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of # the colors in the HTML output. For a value of 0 the output will use # grayscales only. A value of 255 will produce the most vivid colors. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to # the luminance component of the colors in the HTML output. Values below # 100 gradually make the output lighter, whereas values above 100 make # the output darker. The value divided by 100 is the actual gamma applied, # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, # and 100 does not change the gamma. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. HTML_DYNAMIC_SECTIONS = NO # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of # entries shown in the various tree structured indices initially; the user # can expand and collapse entries dynamically later on. Doxygen will expand # the tree to such a level that at most the specified number of entries are # visible (unless a fully collapsed tree already exceeds this amount). # So setting the number of entries 1 will produce a full collapsed tree by # default. 0 is a special value representing an infinite number of entries # and will result in a full expanded tree by default. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated # that can be used as input for Qt's qhelpgenerator to generate a # Qt Compressed Help (.qch) of the generated HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to # add. For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see # # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's # filter section matches. # # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) # at top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. Since the tabs have the same information as the # navigation tree you can set this option to NO if you already set # GENERATE_TREEVIEW to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. # Since the tree basically has the same information as the tab index you # could consider to set DISABLE_INDEX to NO when enabling this option. GENERATE_TREEVIEW = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values # (range [0,1..20]) that doxygen will group on one line in the generated HTML # documentation. Note that a value of 0 will completely suppress the enum # values from appearing in the overview section. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open # links to external symbols imported via tag files in a separate window. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are # not supported properly for IE 6.0, but are supported on all modern browsers. # Note that when changing this option you need to delete any form_*.png files # in the HTML output before the changes have effect. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax # (see http://www.mathjax.org) which uses client side Javascript for the # rendering instead of using prerendered bitmaps. Use this if you do not # have LaTeX installed or if you want to formulas look prettier in the HTML # output. When enabled you may also need to install MathJax separately and # configure the path to it using the MATHJAX_RELPATH option. USE_MATHJAX = NO # When MathJax is enabled you need to specify the location relative to the # HTML output directory using the MATHJAX_RELPATH option. The destination # directory should contain the MathJax.js script. For instance, if the mathjax # directory is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to # the MathJax Content Delivery Network so you can quickly see the result without # installing MathJax. # However, it is strongly recommended to install a local # copy of MathJax from http://www.mathjax.org before deployment. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension # names that should be enabled during MathJax rendering. MATHJAX_EXTENSIONS = # When the SEARCHENGINE tag is enabled doxygen will generate a search box # for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets # (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = NO # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a PHP enabled web server instead of at the web client # using Javascript. Doxygen will generate the search PHP script and index # file to put on the web server. The advantage of the server # based approach is that it scales better to large projects and allows # full text search. The disadvantages are that it is more difficult to setup # and does not have live searching capabilities. SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = amsmath \ amssymb # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for # the generated latex document. The footer should contain everything after # the last chapter. If it is left blank doxygen will generate a # standard footer. Notice: only use this tag if you know what you are doing! LATEX_FOOTER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = YES # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include # source code with syntax highlighting in the LaTeX output. # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See # http://en.wikipedia.org/wiki/BibTeX for more info. LATEX_BIB_STYLE = plain #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load style sheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # pointed to by INCLUDE_PATH will be searched when a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition that # overrules the definition found in the source code. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all references to function-like macros # that are alone on a line, have an all uppercase name, and do not end with a # semicolon, because these will confuse the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. For each # tag file the location of the external documentation should be added. The # format of a tag file without this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths # or URLs. Note that each tag file must have a unique name (where the name does # NOT include the path). If a tag file is not located in the directory in which # doxygen is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option also works with HAVE_DOT disabled, but it is recommended to # install and use dot, since it yields more powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will # base this on the number of processors available in the system. You can set it # explicitly to a value larger than 0 to get control over the balance # between CPU load and processing speed. DOT_NUM_THREADS = 0 # By default doxygen will use the Helvetica font for all dot files that # doxygen generates. When you want a differently looking font you can specify # the font name using DOT_FONTNAME. You need to make sure dot is able to find # the font, which can be done by putting it in a standard location or by setting # the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the # directory containing the font. DOT_FONTNAME = FreeSans.ttf # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the Helvetica font. # If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to # set the path where dot can find it. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If the UML_LOOK tag is enabled, the fields and methods are shown inside # the class node. If there are many fields or methods and many nodes the # graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS # threshold limits the number of items for each type to make the size more # managable. Set this to 0 for no limit. Note that the threshold may be # exceeded by 50% before the limit is enforced. UML_LIMIT_NUM_FIELDS = 10 # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will generate a graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are svg, png, jpg, or gif. # If left blank png will be used. If you choose svg you need to set # HTML_FILE_EXTENSION to xhtml in order to make the SVG files # visible in IE 9+ (other browsers do not have this requirement). DOT_IMAGE_FORMAT = png # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to # enable generation of interactive SVG images that allow zooming and panning. # Note that this requires a modern browser other than Internet Explorer. # Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you # need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files # visible. Older versions of IE do not have SVG support. INTERACTIVE_SVG = NO # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the # \mscfile command). MSCFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES rivet-1.8.3/README0000644000175000017500000001075612116077757011756 0ustar sunsunRivet quickstart guide ---------------------- Assuming you've got a copy of Rivet installed on your machine, you'll now want to know how to use it. Here's an example session with the 'rivet' command, which should be illustrative. GENERATING AND ANALYSING The main interface to Rivet is the rivet command. We will demonstrate how to use this to analyse HepMC events from a text file in the "IO_GenEvent" HepMC format. (This is the only supported HepMC text format from HepMC 2.5 onwards.) Firstly, we recommend using a filesystem pipe (or 'FIFO') so that your events don't create a huge file that takes all your disk space. The idea is that the generator will push events into what looks like a file, and Rivet will read from the same 'file'. In fact, though, the 'file' is a disguised pipe between the two processes, so no slow filesystem access needs to take place, and the system will automatically balance the data flow between the writing and reading processes: the generator will only write more event data when Rivet has read that currently available in the FIFO buffer. All this is completely transparent to the user: good old Unix! Here's how you do it: > mkfifo hepmc.fifo > my-generator --num-events=500000 --hepmc-output=hepmc.fifo & > rivet --analysis=ANALYSIS_NAME hepmc.fifo The backgrounding of the generator process is important: the generator will wait until the hepmc.fifo pipe is being read by Rivet, so unless it is backgrounded you will never get the terminal focus back to run rivet! The generator used above can be anything which writes HepMC text output to the specified FIFO. As a concrete example, the AGILe package (http://projects.hepforge.org/agile/) provides an interface to several generators with a command line tool called agile-rungen: > agile-rungen Pythia6:418 --beams=TVT:1800 & > rivet --analysis=CDF_2001_S4751469 hepmc.fifo The agile-rungen and rivet commands both provide extensive command line documentation when called with the -h/--help flag. CHECKING THE DATA By default, Rivet outputs its histograms in the AIDA XML format, which is not particularly easy to read or plot. An easier format is available if you convert the AIDA file to a flat text format (the long-term Rivet data format) with the aida2flat command: > aida2flat Rivet.aida | less Again, check the aida2flat --help documentation for details on more options. There is also an aida2root command which provides the data as ROOT TGraph objects for those of a ROOTy disposition. Due to a ROOT bug, for TGraphs to display properly you will have to specify the "AP" option in the top right-hand box of the ROOT TBrowser or alternatively draw the TGraph programmatically using 'myTGraph->Draw("AP")'. This isn't a Rivet bug: it's ROOT forgetting to draw the graph axes! PLOTTING Because we don't get on well with ROOT, Rivet comes with two commands --- compare-histos and make-plots --- for comparing and plotting AIDA data. These commands produce nice comparison plots of publication quality from the YODA "dat" format text files, e.g.: > compare-plots path/to/CDF_2001_S4751469.aida py.aida:'Pythia 6.418' hw.aida:'Herwig++ 2.3.0' This command will have compared the three named data files (ending in .aida), identified which plots are available in them, and combined the MC and reference plots appropriately into a set of plot data files ending with .dat. The strings after the ":" for the MC files are specifying ID strings to appear in the plot legends. You can also run compare-plots to just compare MC-MC data files. More options are described by running 'compare-histos --help'. Incidentally, the reference files for each Rivet analysis are to be found in the installed Rivet shared data directory. You can find the location of this by using the rivet-config command: > rivet-config --datadir You can now plot the created data files using the make-plots command: > make-plots --pdf *.dat The --pdf flag makes the output plots in PDF format: by default the output is in PostScript (.ps), and flags for conversion to EPS and PNG are also available. THAT'S ALL! We hope this was useful as a quick guide to getting started with running Rivet's built-in analyses for Monte Carlo generator validation. Be aware that we will be overhauling Rivet's histogramming system in version 1.3.0, from which point all the conversions away from AIDA XML will no longer be necessary, and a fully programmatic interface to the Rivet data files will be possible. Please bear with us while we get this sorted out: we're as keen to have better histogramming as you are! ;) rivet-1.8.3/pyext/0000755000175000017500000000000012131473207012221 5ustar sunsunrivet-1.8.3/pyext/lighthisto.py0000644000175000017500000006241412116077756014774 0ustar sunsun# Use posixpath instead of os.path for AIDA path handling to be platform # independent, i.e. always use "/" as path delimiter. import posixpath import os, sys, re, logging if "ET" not in dir(): try: import xml.etree.cElementTree as ET except ImportError: logging.debug("Could not load module xml.etree.cElementTree," " so we're on a Python < 2.5 system." " Trying to load cElementTree...") try: import cElementTree as ET except ImportError: logging.warning("Could not load module cElementTree:" " using slower xml.etree.ElementTree instead!") import xml.etree.ElementTree as ET from htmlentitydefs import codepoint2name unichr2entity = {} for code, name in codepoint2name.iteritems(): # exclude "&" if code != 38: unichr2entity[unichr(code)] = u"&%s;" % (name) # Using mutable types as (dict, list) as default arguments can have nasty # side effects. def htmlescape(text, d=None): if d is None: d = unichr2entity if u"&" in text: text = text.replace(u"&", u"&") for key, value in d.iteritems(): if key in text: text = text.replace(key, value) return text # Histo and Bin classes were copied from aida2flat class Histo(object): """Simple container for histograms storing a list of :class:`Bin` instances. Histogram trees can be read in from AIDA and flat format files with :meth:`~Histo.fromAIDA` and :meth:`~histo.fromFlat`. These methods produce dictionaries mapping histogram paths to histograms. For string representations for AIDA and flat output :meth:`~Histo.asFlat` and :meth:`~Histo.asAIDA` can be used. Two different paths for histograms exist: :attr:`histopath` The path of the histogram. :attr:`fullpath` The full path of the histogram including "/REF" for reference histograms. Looping over the bins in a histogram can be simply done by:: >>> for b in myhisto: ... # do stuff with Bin b """ aidaindent = " " def __init__(self): self._bins = [] # the leading AIDA path (including /REF) but not the observable name self.path = "/" # the observable name, e.g. d01-x02-y01 self.name = None # the histogram title self.title = '' self.xlabel = '' self.ylabel = '' self.annotations = {} self._sorted = False def __cmp__(self, other): """Sort by $path/$name string""" return self.fullPath() > other.fullPath() def __str__(self): out = "Histogram '%s' with %d bins\n" % (self.fullPath(), self.numBins()) out += "Title: %s\n" % self.title out += "XLabel: %s\n" % self.xlabel out += "YLabel: %s\n" % self.ylabel out += "\n".join([str(b) for b in self.getBins()]) return out def fullPath(self): if self.path and self.name: return posixpath.join(self.path, self.name) if self.path: return self.path if self.name: return "/" + self.name return None fullpath = property(fullPath, doc="Full AIDA path including leading '/REF' and histogram name") def histoPath(self): if self.path.startswith("/REF"): return self.fullpath[4:] else: return self.fullpath histopath = property(histoPath, doc="AIDA path but without a leading '/REF'") def header(self): out = "# BEGIN PLOT\n" out += "LogY=1\n" out += "Title=%s\n" % self.title out += "XLabel=%s\n" % self.xlabel out += "YLabel=%s\n" % self.ylabel out += "# END PLOT\n" return out def asFlat(self): out = "# BEGIN HISTOGRAM %s\n" % self.fullPath() out += "AidaPath=%s\n" % self.fullPath() out += "Title=%s\n" % self.title if self.xlabel: out += "XLabel=%s\n" % self.xlabel if self.ylabel: out += "YLabel=%s\n" % self.ylabel if self.fullpath and self.fullpath.startswith('/REF'): out += "PolyMarker=*\n" out += "ErrorBars=1\n" for aname, aval in self.annotations.iteritems(): out += "%s=%s\n" % (aname, aval) out += "## Area: %e\n" % self.area() out += "## Num bins: %d\n" % self.numBins() out += "## xlow \txhigh \tval \terrminus\terrplus\n" out += "\n".join([b.asFlat() for b in self.getBins()]) out += "\n# END HISTOGRAM\n" return out def asGnuplot(self): out = "## HISTOGRAM: %s\n" % self.fullPath() out += "## Title: %s\n" % self.title if (self.xlabel!=''): out += "## XLabel: %s\n" % self.xlabel if (self.ylabel!=''): out += "## YLabel: %s\n" % self.ylabel out += "## Area: %s\n" % self.area() out += "## Num bins: %d\n" % self.numBins() out += "## xval \tyval \txlow \txhigh \tylow \tyhigh\n" out += "\n".join([b.asGnuplot() for b in self.getBins()]) out += "\n# END HISTOGRAM\n" return out def asAIDA(self): ind = self.aidaindent r = ind + '\n' % (self.path, htmlescape(self.title)) else: r += ind + ' path="%s" title="">\n' % (self.path) if self.xlabel!='': r += ind + ' \n' % (htmlescape(self.xlabel)) if self.ylabel!='': r += ind + ' \n' % (htmlescape(self.ylabel)) r += ind + " \n" if self.title!='': r += ind + ' \n' % (htmlescape(self.title)) else: r += ind + ' \n' r += ind + ' \n' % (self.fullPath()) # TODO: FullPath annotation item? # r += ind + ' \n" for b in self: r += b.asAIDA() r += ind + "\n" return r def is2dim(self): if self.numBins()==0: return False return self._bins[0].is2dim() def numBins(self): return len(self._bins) def getBins(self): if not self._sorted: self._bins.sort() self._sorted = True return self._bins def setBins(self, bins): self._bins = bins self._sorted = False return self def addBin(self, bin): self._bins.append(bin) self._sorted = False return self def getBin(self, index): if not self._sorted: self._bins.sort() self._sorted = True return self.getBins()[index] bins = property(getBins, setBins) def addAnnotation(self, aname, aval): self.annotations[aname] = aval return self def getAnnotation(self, aname): return self.annotations.get(aname) def area(self): return sum([bin.area() for bin in self.bins]) getArea = area def __iter__(self): return iter(self.getBins()) def __len__(self): return len(self._bins) def __getitem__(self, index): return self.getBin(index) def chop(self, *xranges): """Return a chopped histogram. The kept bins are defined by (xstart, xstop) pairs. The first xstart and last xstop can be None meaning that all is included from the first or up to the last bin respectively. Example: >>> hist.chop((2.5, 5.5), (7.5, None)) """ if len(xranges) == 0: raise ValueError("At least one (xstart, xstop) range is needed!") # check that xranges is laststop = xranges[0][1] for xr in xranges[1:]: if laststop >= xr[0]: raise ValueError("(xstart, xstop) ranges must be in numerical order!") laststop = xr[1] new = Histo() new.path = self.path new.name = self.name new.title = self.title new.xlabel = self.xlabel new.ylabel = self.ylabel irange = 0 curran = xranges[irange] for b in self: #lowok = False #highok = False br = b.getXRange() # update the current range used if we exceed the current upper # limit while (curran[1] is not None and irange < len(xranges) - 1 and br[0] > curran[1]): irange += 1 curran = xranges[irange] if ((curran[0] is None or curran[0] <= br[0] or br[0] <= curran[0] <= br[1]) and (curran[1] is None or curran[1] >= br[1] or br[0] <= curran[1] <= br[1])): new.addBin(b) else: sys.stderr.write("Chopping bin %s: %e\n" % (self.fullPath(), b.getBinCenter())) return new def renormalise(self, newarea): """ Renormalise histo to newarea """ # Construc new histo new = Histo() # Use the same metadata new.path = self.path new.name = self.name new.title = self.title new.xlabel = self.xlabel new.ylabel = self.ylabel # The current histogram area oldarea = self.getArea() # Iterate over all bins for b in self: # Rescale Value, Err+, Err- newy = b.val * float(newarea) / oldarea newerrplus = b.errplus * float(newarea) / oldarea newerrminus = b.errminus * float(newarea) / oldarea newbin = Bin(b.xlow, b.xhigh, newy, newerrplus, newerrminus, b.focus) new.addBin(newbin) return new @classmethod def fromDPS(cls, dps): """Build a histogram from a xml dataPointSet.""" new = cls() new.name = dps.get("name") new.title = dps.get("title") new.path = dps.get("path") # # strip /REF from path # if new.path.startswith("/REF"): # new.path = new.path[4:] axes = dps.findall("dimension") if (len(axes)>=2): for a in axes: if (a.get("dim")=="0"): new.xlabel = a.get("title") elif (a.get("dim")=="1"): new.ylabel = a.get("title") elif (a.get("dim")=="2"): new.zlabel = a.get("title") points = dps.findall("dataPoint") #numbins = len(points) for binnum, point in enumerate(points): bin = Bin() measurements = point.findall("measurement") for d, m in enumerate(measurements): val = float(m.get("value")) down = float(m.get("errorMinus")) up = float(m.get("errorPlus")) if d == 0: low = val - down high = val + up bin.setXRange(low, high) elif (len(measurements) == 2 and d == 1) or (len(measurements) == 3 and d == 2): bin.val = val bin.errplus = up bin.errminus = down elif (len(measurements) == 3 and d == 1): low = val - down high = val + up bin.setYRange(low, high) new.addBin(bin) return new @classmethod def fromFlatHisto(cls, stringbuf): """Build a histogram from its flat text representation. """ desc = {} new = cls() for line in stringbuf.splitlines(): line = line.strip() if not line: continue if 'BEGIN HISTOGRAM' in line: fullpath = line.split('BEGIN HISTOGRAM', 1)[1].strip() new.path = os.path.dirname(fullpath) new.name = os.path.basename(fullpath) continue elif 'END HISTOGRAM' in line: break elif line.startswith("#"): continue elif "=" in line: linearray = line.split("=", 1) desc[linearray[0]] = linearray[1] else: linearray = line.split() if len(linearray) == 4: new.addBin(Bin(float(linearray[0]), float(linearray[1]), float(linearray[2]), float(linearray[3]), float(linearray[3]))) elif len(linearray) == 5: new.addBin(Bin(float(linearray[0]), float(linearray[1]), float(linearray[2]), float(linearray[4]), float(linearray[3]))) # get +- err ordering right elif len(linearray) == 6: new.addBin(Bin(float(linearray[0]), float(linearray[1]), float(linearray[4]), float(linearray[5]), float(linearray[5]), None, float(linearray[2]), float(linearray[3]))) # TODO: right ordering? else: sys.stderr.write("Unknown line format in '%s'\n" % line) ## Apply special annotations as histo obj attributes if desc.has_key("AidaPath"): new.path, new.name = posixpath.split(desc["AidaPath"]) if desc.has_key("Title"): new.title = desc["Title"] if desc.has_key("XLabel"): new.xlabel = desc["XLabel"] if desc.has_key("YLabel"): new.ylabel = desc["YLabel"] return new @classmethod def fromFlat(cls, path): """Load all histograms in file 'path' into a histo-path=>histo dict. The keys of the dictionary are the full paths of the histogram, i.e. AnalysisID/HistoID, a leading "/REF" is stripped from the keys. """ runhistos = [] if path == "-": f = sys.stdin else: f = open(path, "r") fullpath = None s = "" for line in f: if "BEGIN HISTOGRAM" in line: fullpath = line.split('BEGIN HISTOGRAM', 1)[1].strip() # TODO: Really? Here? if fullpath.startswith("/REF"): fullpath = fullpath[4:] if fullpath: s += line if "END HISTOGRAM" in line: runhistos.append(cls.fromFlatHisto(s)) ## Reset for next histo fullpath = None s = "" if f is not sys.stdin: f.close() return runhistos @classmethod def fromAIDA(cls, path): """Load all histograms in file 'path' into a histo-path=>histo dict. The keys of the dictionary are the full paths of the histogram, i.e. AnalysisID/HistoID, a leading "/REF" is stripped from the keys. TODO: /REF stripping should really happen in user code... """ runhistos = dict() tree = ET.parse(path) for dps in tree.findall("dataPointSet"): fullpath = posixpath.join(dps.get("path"), dps.get("name")) # TODO: Really? Here? if fullpath.startswith("/REF"): fullpath = fullpath[4:] runhistos[fullpath] = cls.fromDPS(dps) return runhistos class Bin(object): """A simple container for a binned value with an error.""" aidaindent = " " __slots__ = ["xlow", "xhigh", "ylow", "yhigh", "val", "errplus", "errminus", "_focus"] def __init__(self, xlow=None, xhigh=None, val=0, errplus=0, errminus=0, focus=None, ylow=None, yhigh=None): def _float(f): if f is None: return None return float(f) self.xlow = _float(xlow) self.xhigh= _float(xhigh) self.ylow = _float(ylow) self.yhigh= _float(yhigh) self.val = _float(val) self.errplus = _float(errplus) self.errminus = _float(errminus) self._focus= _float(focus) def __str__(self): out = "%e to %e: %e +%e-%e" % (self.xlow, self.xhigh, self.val, self.errplus, self.errminus) return out def is2dim(self): if self.ylow is None or self.yhigh is None: return False return True def asFlat(self): if not self.is2dim(): out = "%e\t%e\t%e\t%e\t%e" % (self.xlow, self.xhigh, self.val, self.errminus, self.errplus) else: out = "%e\t%e\t%e\t%e\t%e\t%e" % (self.xlow, self.xhigh, self.ylow, self.yhigh, self.val, 0.5*(self.errminus+self.errplus)) return out def asGnuplot(self): out = "%e\t%e\t%e\t%e\t%e\t%e" % (self.getBinCenter(), self.val, self.xlow, self.xhigh, self.val-self.errminus, self.val+self.errplus) return out def asAIDA(self): "Return this bin as AIDA formatted string." ind = self.aidaindent out = ind + "\n" out += 2*ind + '\n' % \ (self.getBinCenter(), .5*(self.xhigh - self.xlow), .5*(self.xhigh - self.xlow)) out += 2*ind + '\n' % \ (self.val, self.errplus, self.errminus) # out += 2*ind + '\n' % \ # (.5*(self.yhigh + self.ylow), .5*(self.yhigh - self.ylow), .5*(self.yhigh - self.ylow)) out += ind + "\n" return out def __cmp__(self, other): """Sort by mean x value (yeah, I know...)""" return (self.xlow + self.xhigh) > (other.xlow + other.xhigh) def getXRange(self): return (self.xlow, self.xhigh) def getYRange(self): return (self.ylow, self.yhigh) def setXRange(self, xlow, xhigh): self.xlow = xlow self.xhigh = xhigh return self def setYRange(self, ylow, yhigh): self.ylow = ylow self.yhigh = yhigh return self def getBinCenter(self): """Geometric middle of the bin range.""" return float(self.xhigh + self.xlow)/2 def getFocus(self): """Mean x-value of the bin.""" if self._focus is not None: return self._focus else: return (self.xlow + self.xhigh)/2.0 focus = property(getFocus) def getVal(self): """Y-value of the bin.""" return self.val def area(self): return self.val * (self.xhigh - self.xlow) getArea = area def getErr(self): """Get mean of +ve and -ve y-errors.""" return (self.errplus + self.errminus)/2.0 def setErr(self, err): """Set both +ve and -ve y-errors simultaneously.""" self.errplus = err self.errminus = err return self err = property(getErr, setErr) class PlotParser(object): """Parser for Rivet's .plot plot info files.""" pat_begin_block = re.compile('^#+ BEGIN ([A-Z0-9_]+) ?(\S+)?') # temporarily allow several hashes before END for YODA pat_end_block = re.compile('^#+ END ([A-Z0-9_]+)') pat_comment = re.compile('^#|^\s*$') pat_property = re.compile('^(\w+?)=(.*)$') pat_path_property = re.compile('^(\S+?)::(\w+?)=(.*)$') pat_paths = {} def __init__(self, plotpaths=None, addfiles=[]): """ Parameters ---------- plotpaths : list of str, optional The directories to search for .plot files. The default is to call :command:`rivet-config --datadir` to get the directory where the .plot files can be found. Raises ------ ValueError If `plotpaths` is not specified and calling :command:`rivet-config` fails. """ if plotpaths is None: plotpaths = [] self.plotpaths = plotpaths self.addfiles = addfiles if len(self.plotpaths) == 0: try: import rivet try: self.plotpaths = rivet.getAnalysisPlotPaths() except AttributeError: self.plotpaths = rivet.getAnalysisRefPaths() except AttributeError, e: sys.stderr.write("Failed to load Rivet analysis plot/reference paths: %s\n" % e) sys.stderr.write("Rivet version is too old.\n") raise ValueError("No plot paths given and rivet module is too old.") except ImportError, e: sys.stderr.write("Failed to import rivet module: %s\n" % e) raise ValueError("No plot paths given and the rivet module could not be loaded!") def getSection(self, section, hpath): """Get a section for a histogram from a .plot file. Parameters ---------- section : ('PLOT'|'SPECIAL'|'HISTOGRAM') The section that should be extracted. hpath : str The histogram path, i.e. /AnaylsisID/HistogramID . Todo ---- Caching! At the moment the result of the lookup is not cached so every call requires a file to be searched for and opened. """ if section not in ['PLOT', 'SPECIAL', 'HISTOGRAM']: raise ValueError("Can't parse section \'%s\'" %section) parts = hpath.split("/") if len(parts) != 3: raise ValueError("hpath has wrong number of parts (%i)" % (len(parts))) base = parts[1] + ".plot" ret = {'PLOT': {}, 'SPECIAL': None, 'HISTOGRAM': {}} for pidir in self.plotpaths: plotfile = os.path.join(pidir, base) self.readHeadersFromFile(plotfile, ret, section, hpath) # no break, as we can collect settings from multiple .plot files for extrafile in self.addfiles: self.readHeadersFromFile(extrafile, ret, section, hpath) return ret[section] def readHeadersFromFile(self, plotfile, ret, section, hpath): """Get a section for a histogram from a .plot file.""" if os.access(plotfile, os.R_OK): startreading = False f = open(plotfile) for line in f: m = self.pat_begin_block.match(line) if m: tag, pathpat = m.group(1,2) # pathpat could be a regex if not self.pat_paths.has_key(pathpat): self.pat_paths[pathpat] = re.compile(pathpat) if tag == section and self.pat_paths[pathpat].match(hpath): startreading = True if section in ['SPECIAL']: ret[section] = '' continue if not startreading: continue if self.isEndMarker(line, section): startreading = False continue elif self.isComment(line): continue if section in ['PLOT', 'HISTOGRAM']: vm = self.pat_property.match(line) if vm: prop, value = vm.group(1,2) #print prop, value ret[section][prop] = value elif section in ['SPECIAL']: ret[section] += line f.close() def getHeaders(self, hpath): """Get the plot headers for histogram hpath. This returns the PLOT section. Parameters ---------- hpath : str The histogram path, i.e. /AnalysisID/HistogramID . Returns ------- plot_section : dict The dictionary usually contains the 'Title', 'XLabel' and 'YLabel' properties of the respective plot. See also -------- :meth:`getSection` """ return self.getSection('PLOT', hpath) def getSpecial(self, hpath): """Get a SPECIAL section for histogram hpath. The SPECIAL section is only available in a few analyses. Parameters ---------- hpath : str Histogram path. Must have the form /AnalysisID/HistogramID . See also -------- :meth:`getSection` """ return self.getSection('SPECIAL', hpath) def getHistogramOptions(self, hpath): """Get a HISTOGRAM section for histogram hpath. The HISTOGRAM section is only available in a few analyses. Parameters ---------- hpath : str Histogram path. Must have the form /AnalysisID/HistogramID . See also -------- :meth:`getSection` """ return self.getSection('HISTOGRAM', hpath) def isEndMarker(self, line, blockname): m = self.pat_end_block.match(line) return m and m.group(1) == blockname def isComment(self, line): return self.pat_comment.match(line) is not None def updateHistoHeaders(self, hist): headers = self.getHeaders(hist.histopath) if headers.has_key("Title"): hist.title = headers["Title"] if headers.has_key("XLabel"): hist.xlabel = headers["XLabel"] if headers.has_key("YLabel"): hist.ylabel = headers["YLabel"] rivet-1.8.3/pyext/rivet/0000755000175000017500000000000012131473207013352 5ustar sunsunrivet-1.8.3/pyext/rivet/__init__.py0000644000175000017500000000132512116077756015500 0ustar sunsun"Python interface to the Rivet MC validation system" ## Change dlopen status to GLOBAL for Rivet lib import sys try: import ctypes sys.setdlopenflags(sys.getdlopenflags() | ctypes.RTLD_GLOBAL) del ctypes except: import dl sys.setdlopenflags(sys.getdlopenflags() | dl.RTLD_GLOBAL) del dl del sys ## Import SWIG-generated wrapper core from rivetwrap import * ## Provide an extra Python-only function used to enforce the Rivet scripts' minimal Python version def check_python_version(): import sys req_version = (2,4,0) if sys.version_info[:3] < req_version: sys.stderr.write( "rivet scripts require Python version >= %s... exiting\n" % ".".join(req_version) ) sys.exit(1) rivet-1.8.3/pyext/rivet/rivetwrap.i0000644000175000017500000001113612116077756015565 0ustar sunsun%module rivetwrap %{ #define SWIG_FILE_WITH_INIT #include "Rivet/Analysis.hh" #include "Rivet/AnalysisHandler.hh" #include "Rivet/AnalysisLoader.hh" #include "Rivet/AnalysisInfo.hh" #include "Rivet/Run.hh" #include "Rivet/Tools/Logging.hh" #include "Rivet/Event.hh" #include "Rivet/Particle.hh" #include "Rivet/ParticleName.hh" #include "Rivet/Projections/Beam.hh" %} // STL stuff %include "std_string.i" %include "std_vector.i" %include "std_pair.i" %include "std_map.i" %template(StrList) std::vector; %template(DblPair) std::pair; %template(DblPairList) std::vector< std::pair >; // Histo format enum %include "Rivet/HistoFormat.hh" // Particle ID stuff %include "Rivet/Particle.fhh" %include "Rivet/ParticleName.hh" %template(PdgIdPair) std::pair; %template(PdgIdPairList) std::vector; // Logging interface // Not mapping whole log interface, since we only want to be able to set log levels. //%template(LogLevelMap) std::map; %ignore operator<<; namespace Rivet { %rename(setLogLevel) Log::setLevel(const std::string&, int); class Log { public: enum Level { TRACE = 0, DEBUG = 10, INFO = 20, WARN = 30, WARNING = 30, ERROR = 40, CRITICAL = 50, ALWAYS = 50 }; static void setLevel(const std::string& name, int level); protected: Log(const std::string& name); Log(const std::string& name, int level); }; } //%include "Rivet/Tools/Logging.hh" // Rivet search paths %include "Rivet/Tools/RivetPaths.hh" // Main Rivet class mappings namespace Rivet { std::string version(); class Event { Event(); Event(const HepMC::GenEvent&); const HepMC::GenEvent& genEvent() const; double weight() const; }; class Particle { Particle(); bool hasGenParticle() const; const HepMC::GenParticle& genParticle() const; const PdgId pdgId() const; const double mass() const; const double energy() const; }; ParticlePair beams(const Event& e); PdgIdPair beamIds(const HepMC::GenEvent& e) { return beamIds(Event(e)); } double sqrtS(const Event& e); const std::string& toParticleName(PdgId p); PdgId toParticleId(const std::string& pname); // Mapping of just the metadata parts of the Analysis API class Analysis { public: virtual std::string name() const; virtual std::string inspireId() const; virtual std::string spiresId() const; virtual std::string summary() const; virtual std::string description() const; virtual std::string runInfo() const; virtual std::string experiment() const; virtual std::string collider() const; virtual std::string year() const; virtual const std::vector& requiredBeams() const; virtual const std::vector >& requiredEnergies() const; virtual std::vector authors() const; virtual std::vector references() const; virtual std::vector todos() const; virtual std::string status() const; virtual std::string bibKey() const; virtual std::string bibTeX() const; virtual const bool isCompatible(PdgId beam1, PdgId beam2, double e1, double e2) const; virtual const bool isCompatible(const PdgIdPair& beamids, const std::pair& beamenergies) const; virtual const bool isCompatible(const ParticlePair& beams) const; //AnalysisHandler& handler() const; bool needsCrossSection() const; private: Analysis(); }; class AnalysisHandler { public: AnalysisHandler(const std::string& runname); std::string runName() const; size_t numEvents() const; double sumOfWeights() const; double sqrtS() const; const ParticlePair& beams() const; const PdgIdPair beamIds() const; void setIgnoreBeams(bool ignore); std::vector analysisNames(); AnalysisHandler& addAnalysis(const std::string& analysisname); AnalysisHandler& addAnalyses(const std::vector& analysisnames); AnalysisHandler& removeAnalysis(const std::string& analysisname); AnalysisHandler& removeAnalyses(const std::vector& analysisnames); void init(const HepMC::GenEvent& event); void analyze(const HepMC::GenEvent& event); void finalize(); bool needCrossSection(); AnalysisHandler& setCrossSection(double xs); double crossSection(); void commitData(); void writeData(const std::string& filename); }; class AnalysisLoader { public: static std::vector analysisNames(); static Analysis* getAnalysis(const std::string& analysisname); }; } %include "Rivet/Run.hh" rivet-1.8.3/pyext/rivet/Makefile.in0000644000175000017500000003123012116616065015422 0ustar sunsun# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = pyext/rivet DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = __init__.py rivetwrap.i all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pyext/rivet/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu pyext/rivet/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile all-local installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am all-local check check-am clean clean-generic \ clean-libtool clean-local distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am all-local: rivetwrap_wrap.cc rivetwrap.py @true rivetwrap_wrap.cc rivetwrap.py: rivetwrap.i $(SWIG) -c++ -python -I$(top_srcdir)/include -o rivetwrap_wrap.cc $< clean-local: @rm -f *.pyc @rm -f rivetwrap.py @rm -f rivetwrap_wrap.cc # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: rivet-1.8.3/pyext/rivet/Makefile.am0000644000175000017500000000042512116077756015423 0ustar sunsunEXTRA_DIST = __init__.py rivetwrap.i all-local: rivetwrap_wrap.cc rivetwrap.py @true rivetwrap_wrap.cc rivetwrap.py: rivetwrap.i $(SWIG) -c++ -python -I$(top_srcdir)/include -o rivetwrap_wrap.cc $< clean-local: @rm -f *.pyc @rm -f rivetwrap.py @rm -f rivetwrap_wrap.cc rivet-1.8.3/pyext/setup.py.in0000755000175000017500000000343112116077756014360 0ustar sunsun#! /usr/bin/env python """This is a simple SWIG wrapper on the main steering interface of the Rivet event simulation analysis library. It is used to create, query and use the Rivet C++ analysis classes from a Python program, of which the prime example is Rivet's own command line interface. """ from distutils.core import setup, Extension ## Extension definition import os wrapsrc = '@srcdir@/rivet/rivetwrap_wrap.cc' incdir_src = os.path.abspath('@top_srcdir@/include') incdir_build = os.path.abspath('@top_builddir@/include') libdir = os.path.abspath('@top_builddir@/src/.libs') libdir_yaml = '@YAML_CPPLIBPATH@' if not libdir_yaml: libdir_yaml = '@top_builddir@/src/Tools/yaml-cpp/.libs' cxxargs = '@CXXFLAGS@'.split() ldargs = '@LDFLAGS@'.split() ext = Extension('_rivetwrap', [wrapsrc], define_macros = [('SWIG_TYPE_TABLE', 'hepmccompat')], include_dirs=[incdir_src, incdir_build, '@HEPMCINCPATH@', '@BOOSTINCPATH@', '@GSLINCPATH@'], library_dirs=[libdir, libdir_yaml, '@HEPMCLIBPATH@'], extra_compile_args = cxxargs, extra_link_args = ldargs, libraries=['HepMC', 'Rivet']) ## Setup definition setup(name = 'Rivet', version = '@PACKAGE_VERSION@', ext_package = 'rivet', ext_modules = [ext], py_modules = ['lighthisto', 'spiresbib', 'rivet.__init__', 'rivet.rivetwrap'], author = ['Andy Buckley'], author_email = 'andy.buckley@cern.ch', url = 'http://projects.hepforge.org/rivet/', description = 'Rivet: a Python interface to the Rivet high-energy physics analysis library.', long_description = __doc__, keywords = 'generator montecarlo simulation data hep physics particle validation analysis tuning', license = 'GPL' ) rivet-1.8.3/pyext/ez_setup.py0000644000175000017500000002276412116077756014460 0ustar sunsun#!python """Bootstrap setuptools installation If you want to use setuptools in your package's setup.py, just include this file in the same directory with it, and add this to the top of your setup.py:: from ez_setup import use_setuptools use_setuptools() If you want to require a specific version of setuptools, set a download mirror, or use an alternate download directory, you can do so by supplying the appropriate options to ``use_setuptools()``. This file can also be run as a script to install or upgrade setuptools. """ import sys DEFAULT_VERSION = "0.6c9" DEFAULT_URL = "http://pypi.python.org/packages/%s/s/setuptools/" % sys.version[:3] md5_data = { 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', 'setuptools-0.6c6-py2.3.egg': '35686b78116a668847237b69d549ec20', 'setuptools-0.6c6-py2.4.egg': '3c56af57be3225019260a644430065ab', 'setuptools-0.6c6-py2.5.egg': 'b2f8a7520709a5b34f80946de5f02f53', 'setuptools-0.6c7-py2.3.egg': '209fdf9adc3a615e5115b725658e13e2', 'setuptools-0.6c7-py2.4.egg': '5a8f954807d46a0fb67cf1f26c55a82e', 'setuptools-0.6c7-py2.5.egg': '45d2ad28f9750e7434111fde831e8372', 'setuptools-0.6c8-py2.3.egg': '50759d29b349db8cfd807ba8303f1902', 'setuptools-0.6c8-py2.4.egg': 'cba38d74f7d483c06e9daa6070cce6de', 'setuptools-0.6c8-py2.5.egg': '1721747ee329dc150590a58b3e1ac95b', 'setuptools-0.6c9-py2.3.egg': 'a83c4020414807b496e4cfbe08507c03', 'setuptools-0.6c9-py2.4.egg': '260a2be2e5388d66bdaee06abec6342a', 'setuptools-0.6c9-py2.5.egg': 'fe67c3e5a17b12c0e7c541b7ea43a8e6', 'setuptools-0.6c9-py2.6.egg': 'ca37b1ff16fa2ede6e19383e7b59245a', } import sys, os try: from hashlib import md5 except ImportError: from md5 import md5 def _validate_md5(egg_name, data): if egg_name in md5_data: digest = md5(data).hexdigest() if digest != md5_data[egg_name]: print >>sys.stderr, ( "md5 validation of %s failed! (Possible download problem?)" % egg_name ) sys.exit(2) return data def use_setuptools( version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, download_delay=15 ): """Automatically find/download setuptools and make it available on sys.path `version` should be a valid setuptools version number that is available as an egg for download under the `download_base` URL (which should end with a '/'). `to_dir` is the directory where setuptools will be downloaded, if it is not already available. If `download_delay` is specified, it should be the number of seconds that will be paused before initiating a download, should one be required. If an older version of setuptools is installed, this routine will print a message to ``sys.stderr`` and raise SystemExit in an attempt to abort the calling script. """ was_imported = 'pkg_resources' in sys.modules or 'setuptools' in sys.modules def do_download(): egg = download_setuptools(version, download_base, to_dir, download_delay) sys.path.insert(0, egg) import setuptools; setuptools.bootstrap_install_from = egg try: import pkg_resources except ImportError: return do_download() try: pkg_resources.require("setuptools>="+version); return except pkg_resources.VersionConflict, e: if was_imported: print >>sys.stderr, ( "The required version of setuptools (>=%s) is not available, and\n" "can't be installed while this script is running. Please install\n" " a more recent version first, using 'easy_install -U setuptools'." "\n\n(Currently using %r)" ) % (version, e.args[0]) sys.exit(2) else: del pkg_resources, sys.modules['pkg_resources'] # reload ok return do_download() except pkg_resources.DistributionNotFound: return do_download() def download_setuptools( version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, delay = 15 ): """Download setuptools from a specified location and return its filename `version` should be a valid setuptools version number that is available as an egg for download under the `download_base` URL (which should end with a '/'). `to_dir` is the directory where the egg will be downloaded. `delay` is the number of seconds to pause before an actual download attempt. """ import urllib2, shutil egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) url = download_base + egg_name saveto = os.path.join(to_dir, egg_name) src = dst = None if not os.path.exists(saveto): # Avoid repeated downloads try: from distutils import log if delay: log.warn(""" --------------------------------------------------------------------------- This script requires setuptools version %s to run (even to display help). I will attempt to download it for you (from %s), but you may need to enable firewall access for this script first. I will start the download in %d seconds. (Note: if this machine does not have network access, please obtain the file %s and place it in this directory before rerunning this script.) ---------------------------------------------------------------------------""", version, download_base, delay, url ); from time import sleep; sleep(delay) log.warn("Downloading %s", url) src = urllib2.urlopen(url) # Read/write all in one block, so we don't create a corrupt file # if the download is interrupted. data = _validate_md5(egg_name, src.read()) dst = open(saveto,"wb"); dst.write(data) finally: if src: src.close() if dst: dst.close() return os.path.realpath(saveto) def main(argv, version=DEFAULT_VERSION): """Install or upgrade setuptools and EasyInstall""" try: import setuptools except ImportError: egg = None try: egg = download_setuptools(version, delay=0) sys.path.insert(0,egg) from setuptools.command.easy_install import main return main(list(argv)+[egg]) # we're done here finally: if egg and os.path.exists(egg): os.unlink(egg) else: if setuptools.__version__ == '0.0.1': print >>sys.stderr, ( "You have an obsolete version of setuptools installed. Please\n" "remove it from your system entirely before rerunning this script." ) sys.exit(2) req = "setuptools>="+version import pkg_resources try: pkg_resources.require(req) except pkg_resources.VersionConflict: try: from setuptools.command.easy_install import main except ImportError: from easy_install import main main(list(argv)+[download_setuptools(delay=0)]) sys.exit(0) # try to force an exit else: if argv: from setuptools.command.easy_install import main main(argv) else: print "Setuptools version",version,"or greater has been installed." print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' def update_md5(filenames): """Update our built-in md5 registry""" import re for name in filenames: base = os.path.basename(name) f = open(name,'rb') md5_data[base] = md5(f.read()).hexdigest() f.close() data = [" %r: %r,\n" % it for it in md5_data.items()] data.sort() repl = "".join(data) import inspect srcfile = inspect.getsourcefile(sys.modules[__name__]) f = open(srcfile, 'rb'); src = f.read(); f.close() match = re.search("\nmd5_data = {\n([^}]+)}", src) if not match: print >>sys.stderr, "Internal error!" sys.exit(2) src = src[:match.start(1)] + repl + src[match.end(1):] f = open(srcfile,'w') f.write(src) f.close() if __name__=='__main__': if len(sys.argv)>2 and sys.argv[1]=='--md5update': update_md5(sys.argv[2:]) else: main(sys.argv[1:]) rivet-1.8.3/pyext/Makefile.in0000644000175000017500000005127312116616065014302 0ustar sunsun# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = pyext DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/setup.py.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = setup.py CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = rivet . DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = ez_setup.py lighthisto.py spiresbib.py @ENABLE_PYEXT_TRUE@SUBDIRS = rivet . all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pyext/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu pyext/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): setup.py: $(top_builddir)/config.status $(srcdir)/setup.py.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive @ENABLE_PYEXT_FALSE@all-local: all-am: Makefile all-local installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @ENABLE_PYEXT_FALSE@uninstall-local: @ENABLE_PYEXT_FALSE@distclean-local: @ENABLE_PYEXT_FALSE@install-exec-local: @ENABLE_PYEXT_FALSE@clean-local: clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-exec-local install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-local .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am all-local check check-am clean clean-generic \ clean-libtool clean-local ctags ctags-recursive distclean \ distclean-generic distclean-libtool distclean-local \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-exec-local \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-local @ENABLE_PYEXT_TRUE@all-local: rivet/rivetwrap_wrap.cc @ENABLE_PYEXT_TRUE@ $(PYTHON) setup.py build @ENABLE_PYEXT_TRUE@install-exec-local: @ENABLE_PYEXT_TRUE@ $(PYTHON) setup.py install --prefix=$(DESTDIR)$(prefix) @ENABLE_PYEXT_TRUE@uninstall-local: @ENABLE_PYEXT_TRUE@ rm -rf $(DESTDIR)$(RIVET_PYTHONPATH)/rivet @ENABLE_PYEXT_TRUE@ rm -rf $(DESTDIR)$(RIVET_PYTHONPATH)/lighthisto.py* @ENABLE_PYEXT_TRUE@ rm -rf $(DESTDIR)$(RIVET_PYTHONPATH)/spiresbib.py* @ENABLE_PYEXT_TRUE@ rm -rf $(DESTDIR)$(RIVET_PYTHONPATH)/Rivet-*.egg-info @ENABLE_PYEXT_TRUE@clean-local: @ENABLE_PYEXT_TRUE@ $(PYTHON) setup.py clean --all @ENABLE_PYEXT_TRUE@ @rm -f $(top_builddir)/*.pyc @ENABLE_PYEXT_TRUE@ @rm -rf $(builddir)/build @ENABLE_PYEXT_TRUE@ @rm -rf dist @ENABLE_PYEXT_TRUE@distclean-local: @ENABLE_PYEXT_TRUE@ @rm -rf rivet.egg-info # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: rivet-1.8.3/pyext/Makefile.am0000644000175000017500000000121312116077756014266 0ustar sunsunEXTRA_DIST = ez_setup.py lighthisto.py spiresbib.py if ENABLE_PYEXT SUBDIRS = rivet . all-local: rivet/rivetwrap_wrap.cc $(PYTHON) setup.py build install-exec-local: $(PYTHON) setup.py install --prefix=$(DESTDIR)$(prefix) ## TODO: Really want DESTDIR here? uninstall-local: rm -rf $(DESTDIR)$(RIVET_PYTHONPATH)/rivet rm -rf $(DESTDIR)$(RIVET_PYTHONPATH)/lighthisto.py* rm -rf $(DESTDIR)$(RIVET_PYTHONPATH)/spiresbib.py* rm -rf $(DESTDIR)$(RIVET_PYTHONPATH)/Rivet-*.egg-info clean-local: $(PYTHON) setup.py clean --all @rm -f $(top_builddir)/*.pyc @rm -rf $(builddir)/build @rm -rf dist distclean-local: @rm -rf rivet.egg-info endif rivet-1.8.3/pyext/spiresbib.py0000755000175000017500000000461412116077756014601 0ustar sunsun#! /usr/bin/env python import logging import urllib2 import re usage = """%prog [ ...] Given Inspire and SPIRES paper IDs, fetch the corresponding BibTeX db entry from the SPIRES Web interface and write it to stdout. Prefix the code with I or S appropriately. """ def fetch_bibtex(iscode, refid): if iscode.upper() == "I": url = "http://inspire-hep.net/record/%s/export/hx" % str(refid) logging.debug("Downloading Inspire BibTeX from %s" % url) elif iscode.upper() == "S": url = "http://inspire-hep.net/search?p=find+key+%s&of=hx" % str(refid) logging.debug("Downloading SPIRES BibTeX from %s" % url) hreq = urllib2.urlopen(url) bibtexhtml = hreq.read() hreq.close() #logging.debug(bibtexhtml) return bibtexhtml def extract_bibtex(html): ## Extract BibTeX block from HTML re_spiresbibtex = re.compile(r'
(.*?)
', re.MULTILINE | re.DOTALL) m = re_spiresbibtex.search(html) if m is None: return None, None bib = m.group(1).strip() ## Get BibTeX key re_bibtexkey = re.compile(r'^@.+?{(.+?),$', re.MULTILINE) m = re_bibtexkey.search(bib) if m is None: return None, bib key = m.group(1) ## Return key and BibTeX return key, bib def get_bibtex_from_repo(iscode, refid): html = fetch_bibtex(iscode, refid) key, bibtex = extract_bibtex(html) return key, bibtex def get_bibtexs_from_repos(iscodes_refids): bibdb = {} for iscode, refid in iscodes_refids: key, bibtex = get_bibtex_from_repo(iscode, refid) if key and bibtex: bibdb[refid] = (key, bibtex) return bibdb if __name__ == '__main__': ## Parse command line options from optparse import OptionParser parser = OptionParser(usage=usage) opts, args = parser.parse_args() ## Make individual bibinfo files for arg in args: iscode = arg[0] refid = arg[1:] key, bibtex = get_bibtex_from_repo(iscode, refid) import sys f = sys.stdout f.write("BibKey: %s\n" % key) f.write("BibTeX: '%s'\n" % bibtex) # ## Build ref db # bibdb = get_bibtexs_from_spires(args) # for sid, (key, bibtex) in bibdb.iteritems(): # print key, "=>\n", bibtex # ## Pickle ref db9151176 # import cPickle as pickle # fpkl = open("spiresbib.pkl", "w")repo # pickle.dump(bibdb) # fpkl.close() rivet-1.8.3/Makefile.in0000644000175000017500000007143312116616065013131 0ustar sunsun# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Doxyfile.in \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/rivetenv.csh.in $(srcdir)/rivetenv.sh.in \ $(top_srcdir)/configure \ $(top_srcdir)/include/Rivet/Config/BuildOptions.hh.in \ $(top_srcdir)/include/Rivet/Config/DummyConfig.hh.in \ $(top_srcdir)/include/Rivet/Config/RivetConfig.hh.in AUTHORS \ COPYING ChangeLog INSTALL NEWS config.guess config.sub depcomp \ install-sh ltmain.sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/cxx.m4 $(top_srcdir)/m4/gsl.m4 \ $(top_srcdir)/m4/lcg.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/osx.m4 $(top_srcdir)/m4/pkgchecks.m4 \ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/swig.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/Rivet/Config/DummyConfig.hh \ $(top_builddir)/include/Rivet/Config/RivetConfig.hh \ $(top_builddir)/include/Rivet/Config/BuildOptions.hh CONFIG_CLEAN_FILES = Doxyfile rivetenv.sh rivetenv.csh CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOSTCPPFLAGS = @BOOSTCPPFLAGS@ BOOSTINCNAME = @BOOSTINCNAME@ BOOSTINCPATH = @BOOSTINCPATH@ BOOSTPATH = @BOOSTPATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN = @DOXYGEN@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FASTJETCONFIGLIBADD = @FASTJETCONFIGLIBADD@ FASTJETCPPFLAGS = @FASTJETCPPFLAGS@ FASTJETINCNAME = @FASTJETINCNAME@ FASTJETINCPATH = @FASTJETINCPATH@ FASTJETLDFLAGS = @FASTJETLDFLAGS@ FASTJETLDLIBS = @FASTJETLDLIBS@ FASTJETLIB = @FASTJETLIB@ FASTJETLIBNAME = @FASTJETLIBNAME@ FASTJETLIBPATH = @FASTJETLIBPATH@ FASTJETPATH = @FASTJETPATH@ FGREP = @FGREP@ FJCONFIG = @FJCONFIG@ GREP = @GREP@ GSLCONFIG = @GSLCONFIG@ GSLCPPFLAGS = @GSLCPPFLAGS@ GSLINCNAME = @GSLINCNAME@ GSLINCPATH = @GSLINCPATH@ GSLPATH = @GSLPATH@ GSL_CPPFLAGS = @GSL_CPPFLAGS@ GSL_CXXFLAGS = @GSL_CXXFLAGS@ GSL_LDFLAGS = @GSL_LDFLAGS@ HEPMCCPPFLAGS = @HEPMCCPPFLAGS@ HEPMCINCNAME = @HEPMCINCNAME@ HEPMCINCPATH = @HEPMCINCPATH@ HEPMCLDFLAGS = @HEPMCLDFLAGS@ HEPMCLDLIBS = @HEPMCLDLIBS@ HEPMCLIB = @HEPMCLIB@ HEPMCLIBNAME = @HEPMCLIBNAME@ HEPMCLIBPATH = @HEPMCLIBPATH@ HEPMCPATH = @HEPMCPATH@ HEPMC_VERSION = @HEPMC_VERSION@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCG_TAG = @LCG_TAG@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBPATHVARNAME = @LIBPATHVARNAME@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_OBJDIR = @LT_OBJDIR@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PYTHON = @PYTHON@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RIVET_PYTHONPATH = @RIVET_PYTHONPATH@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWVERS = @SWVERS@ UNAME = @UNAME@ VERSION = @VERSION@ VERSIONINFOFLAGS = @VERSIONINFOFLAGS@ YAML_CPPCPPFLAGS = @YAML_CPPCPPFLAGS@ YAML_CPPINCNAME = @YAML_CPPINCNAME@ YAML_CPPINCPATH = @YAML_CPPINCPATH@ YAML_CPPLDFLAGS = @YAML_CPPLDFLAGS@ YAML_CPPLDLIBS = @YAML_CPPLDLIBS@ YAML_CPPLIB = @YAML_CPPLIB@ YAML_CPPLIBNAME = @YAML_CPPLIBNAME@ YAML_CPPLIBPATH = @YAML_CPPLIBPATH@ YAML_CPPPATH = @YAML_CPPPATH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 SUBDIRS = src pyext data include bin doc test #dist_pkgdata_DATA = rivetenv.sh rivetenv.csh EXTRA_DIST = GUIDELINES RSH = rsync DEST = login.hepforge.org:rivet/downloads/ all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): include/Rivet/Config/DummyConfig.hh: include/Rivet/Config/stamp-h1 @if test ! -f $@; then rm -f include/Rivet/Config/stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) include/Rivet/Config/stamp-h1; else :; fi include/Rivet/Config/stamp-h1: $(top_srcdir)/include/Rivet/Config/DummyConfig.hh.in $(top_builddir)/config.status @rm -f include/Rivet/Config/stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status include/Rivet/Config/DummyConfig.hh $(top_srcdir)/include/Rivet/Config/DummyConfig.hh.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f include/Rivet/Config/stamp-h1 touch $@ include/Rivet/Config/RivetConfig.hh: include/Rivet/Config/stamp-h2 @if test ! -f $@; then rm -f include/Rivet/Config/stamp-h2; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) include/Rivet/Config/stamp-h2; else :; fi include/Rivet/Config/stamp-h2: $(top_srcdir)/include/Rivet/Config/RivetConfig.hh.in $(top_builddir)/config.status @rm -f include/Rivet/Config/stamp-h2 cd $(top_builddir) && $(SHELL) ./config.status include/Rivet/Config/RivetConfig.hh include/Rivet/Config/BuildOptions.hh: include/Rivet/Config/stamp-h3 @if test ! -f $@; then rm -f include/Rivet/Config/stamp-h3; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) include/Rivet/Config/stamp-h3; else :; fi include/Rivet/Config/stamp-h3: $(top_srcdir)/include/Rivet/Config/BuildOptions.hh.in $(top_builddir)/config.status @rm -f include/Rivet/Config/stamp-h3 cd $(top_builddir) && $(SHELL) ./config.status include/Rivet/Config/BuildOptions.hh distclean-hdr: -rm -f include/Rivet/Config/DummyConfig.hh include/Rivet/Config/stamp-h1 include/Rivet/Config/RivetConfig.hh include/Rivet/Config/stamp-h2 include/Rivet/Config/BuildOptions.hh include/Rivet/Config/stamp-h3 Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in cd $(top_builddir) && $(SHELL) ./config.status $@ rivetenv.sh: $(top_builddir)/config.status $(srcdir)/rivetenv.sh.in cd $(top_builddir) && $(SHELL) ./config.status $@ rivetenv.csh: $(top_builddir)/config.status $(srcdir)/rivetenv.csh.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @WITH_DOXYGEN_FALSE@uninstall-local: @WITH_DOXYGEN_FALSE@mostlyclean-local: clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool \ mostlyclean-local pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-local .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ clean-libtool clean-local ctags ctags-recursive dist dist-all \ dist-bzip2 dist-gzip dist-hook dist-lzip dist-lzma dist-shar \ dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-local doc: cd doc && $(MAKE) doc .PHONY : doc dox pyclean clean-local: @rm -rf a.out @WITH_DOXYGEN_TRUE@dox: @WITH_DOXYGEN_TRUE@ @echo "Running Doxygen..." @WITH_DOXYGEN_TRUE@ @$(DOXYGEN) $(top_srcdir)/Doxyfile || true #all-local: dox # @true @WITH_DOXYGEN_TRUE@install-dox: @WITH_DOXYGEN_TRUE@ $(install_sh_DATA) doxy/html/* $(DESTDIR)$(pkgdatadir)/doc/html @WITH_DOXYGEN_TRUE@mostlyclean-local: @WITH_DOXYGEN_TRUE@ @rm -rf $(top_builddir)/doxy @WITH_DOXYGEN_TRUE@uninstall-local: @WITH_DOXYGEN_TRUE@ @rm -rf $(DESTDIR)$(pkgdatadir)/doc; \ @WITH_DOXYGEN_TRUE@ test ! -d $(DESTDIR)$(pkgdatadir) || rmdir --ignore-fail-on-non-empty $(DESTDIR)$(pkgdatadir) pyclean: cd pyext && $(MAKE) clean dist-hook: @rm -rf `find $(distdir) -name ".svn"` upload: dist $(RSH) $(DIST_ARCHIVES) $(DEST) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: rivet-1.8.3/config.sub0000755000175000017500000010532712116415374013047 0ustar sunsun#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-04-18' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: rivet-1.8.3/Makefile.am0000644000175000017500000000154712116077757013130 0ustar sunsunACLOCAL_AMFLAGS = -I m4 SUBDIRS = src pyext data include bin doc test #dist_pkgdata_DATA = rivetenv.sh rivetenv.csh EXTRA_DIST = GUIDELINES doc: cd doc && $(MAKE) doc .PHONY : doc dox pyclean clean-local: @rm -rf a.out ## Doxygen if WITH_DOXYGEN dox: @echo "Running Doxygen..." @$(DOXYGEN) $(top_srcdir)/Doxyfile || true #all-local: dox # @true install-dox: $(install_sh_DATA) doxy/html/* $(DESTDIR)$(pkgdatadir)/doc/html mostlyclean-local: @rm -rf $(top_builddir)/doxy uninstall-local: @rm -rf $(DESTDIR)$(pkgdatadir)/doc; \ test ! -d $(DESTDIR)$(pkgdatadir) || rmdir --ignore-fail-on-non-empty $(DESTDIR)$(pkgdatadir) endif pyclean: cd pyext && $(MAKE) clean ## Remove SVN dirs dist-hook: @rm -rf `find $(distdir) -name ".svn"` ## Upload to HepForge RSH=rsync DEST=login.hepforge.org:rivet/downloads/ upload: dist $(RSH) $(DIST_ARCHIVES) $(DEST)